about summary refs log tree commit diff
path: root/nixpkgs/pkgs/tools
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/tools')
-rw-r--r--nixpkgs/pkgs/tools/X11/alttab/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/X11/arandr/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/X11/autocutsel/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/X11/bgs/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/X11/bumblebee/default.nix143
-rw-r--r--nixpkgs/pkgs/tools/X11/bumblebee/nixos.patch80
-rw-r--r--nixpkgs/pkgs/tools/X11/caffeine-ng/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/X11/ckbcomp/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/X11/dex/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/X11/dispad/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/X11/dragon-drop/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/X11/ffcast/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/X11/go-sct/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/X11/go-sct/deps.nix11
-rw-r--r--nixpkgs/pkgs/tools/X11/grobi/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/X11/hsetroot/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/X11/imwheel/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/X11/jumpapp/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/X11/keynav/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/X11/ksuperkey/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/X11/libstrangle/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/X11/libstrangle/nixos.patch29
-rw-r--r--nixpkgs/pkgs/tools/X11/ncview/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/X11/nitrogen/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/X11/numlockx/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/X11/nx-libs/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/X11/obconf/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/X11/primus/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/X11/primus/lib.nix52
-rw-r--r--nixpkgs/pkgs/tools/X11/ratmen/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/X11/run-scaled/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/X11/runningx/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/X11/screen-message/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/X11/sct/DISPLAY-segfault.patch10
-rw-r--r--nixpkgs/pkgs/tools/X11/sct/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/X11/setroot/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/X11/skippy-xd/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/X11/srandrd/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/X11/sselp/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/X11/vdpauinfo/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/X11/virtualgl/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/X11/virtualgl/lib.nix29
-rw-r--r--nixpkgs/pkgs/tools/X11/wayv/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/X11/wmctrl/64-bit-data.patch32
-rw-r--r--nixpkgs/pkgs/tools/X11/wmctrl/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/X11/wmutils-core/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/X11/wmutils-opt/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/X11/wpgtk/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/X11/x11spice/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/X11/x11vnc/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/X11/x2vnc/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/X11/x2x/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/X11/xannotate/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/X11/xautomation/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/X11/xbanish/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/X11/xbindkeys-config/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/X11/xbindkeys-config/xbindkeys-config-patch1.patch108
-rw-r--r--nixpkgs/pkgs/tools/X11/xbindkeys-config/xbindkeys-config.121
-rw-r--r--nixpkgs/pkgs/tools/X11/xbindkeys/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/X11/xbrightness/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/X11/xcalib/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/X11/xcape/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/X11/xchainkeys/default.nix19
-rw-r--r--nixpkgs/pkgs/tools/X11/xcwd/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/X11/xdg-user-dirs/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/X11/xdg-utils/default.nix70
-rw-r--r--nixpkgs/pkgs/tools/X11/xdotool/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/X11/xgeometry-select/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/X11/xidlehook/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/X11/xinput_calibrator/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/X11/xkb-switch/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/X11/xkbset/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/X11/xkbvalidate/default.nix15
-rw-r--r--nixpkgs/pkgs/tools/X11/xkbvalidate/xkbvalidate.c150
-rw-r--r--nixpkgs/pkgs/tools/X11/xlayoutdisplay/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/X11/xloadimage/default.nix88
-rw-r--r--nixpkgs/pkgs/tools/X11/xmacro/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/X11/xmagnify/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/X11/xnee/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/X11/xob/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/X11/xosview2/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/X11/xpointerbarrier/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/X11/xpra/default.nix99
-rw-r--r--nixpkgs/pkgs/tools/X11/xpra/fix-paths.patch29
-rw-r--r--nixpkgs/pkgs/tools/X11/xpra/libfakeXinerama.nix34
-rw-r--r--nixpkgs/pkgs/tools/X11/xpra/xf86videodummy/0002-Constant-DPI.patch96
-rw-r--r--nixpkgs/pkgs/tools/X11/xpra/xf86videodummy/0003-fix-pointer-limits.patch39
-rw-r--r--nixpkgs/pkgs/tools/X11/xpra/xf86videodummy/0005-support-for-30-bit-depth-in-dummy-driver.patch41
-rw-r--r--nixpkgs/pkgs/tools/X11/xpra/xf86videodummy/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/X11/xprintidle-ng/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/X11/xrectsel/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/X11/xrestop/default.nix19
-rw-r--r--nixpkgs/pkgs/tools/X11/xsecurelock/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/X11/xsettingsd/SConstruct.patch13
-rw-r--r--nixpkgs/pkgs/tools/X11/xsettingsd/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/X11/xtrace/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/X11/xtruss/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/X11/xvkbd/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/X11/xwinmosaic/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/X11/xwinwrap/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/X11/xzoom/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/admin/acme.sh/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/admin/adtool/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/admin/amazon-ecr-credential-helper/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/admin/analog/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/admin/ansible/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/admin/aws-env/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/admin/aws-env/deps.nix12
-rw-r--r--nixpkgs/pkgs/tools/admin/aws-google-auth/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/admin/aws-rotate-key/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/admin/aws-rotate-key/deps.nix29
-rw-r--r--nixpkgs/pkgs/tools/admin/aws-vault/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/admin/aws_shell/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/admin/awscli/default.nix78
-rw-r--r--nixpkgs/pkgs/tools/admin/awslogs/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/admin/awsweeper/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/admin/azure-cli/default.nix250
-rw-r--r--nixpkgs/pkgs/tools/admin/azure-cli/python-packages.nix287
-rw-r--r--nixpkgs/pkgs/tools/admin/berglas/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/admin/bluemix-cli/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/admin/boulder/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/admin/bubblewrap/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/admin/certbot/0001-Don-t-use-distutils.StrictVersion-that-cannot-handle.patch60
-rw-r--r--nixpkgs/pkgs/tools/admin/certbot/default.nix65
-rw-r--r--nixpkgs/pkgs/tools/admin/certigo/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/admin/chkcrontab/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/admin/clair/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/admin/cli53/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/admin/cli53/deps.nix93
-rw-r--r--nixpkgs/pkgs/tools/admin/daemontools/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/admin/daemontools/fix-nix-usernamespace-build.patch10
-rw-r--r--nixpkgs/pkgs/tools/admin/dehydrated/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/admin/docker-credential-gcr/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/admin/docker-credential-helpers/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/admin/eksctl/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/admin/elasticsearch-curator/default.nix81
-rw-r--r--nixpkgs/pkgs/tools/admin/fastlane/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/admin/fastlane/Gemfile.lock159
-rw-r--r--nixpkgs/pkgs/tools/admin/fastlane/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/admin/fastlane/gemset.nix589
-rw-r--r--nixpkgs/pkgs/tools/admin/fbvnc/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/admin/gixy/default.nix43
-rwxr-xr-xnixpkgs/pkgs/tools/admin/google-cloud-sdk/alpha__init__.py23
-rwxr-xr-xnixpkgs/pkgs/tools/admin/google-cloud-sdk/beta__init__.py23
-rw-r--r--nixpkgs/pkgs/tools/admin/google-cloud-sdk/default.nix91
-rw-r--r--nixpkgs/pkgs/tools/admin/google-cloud-sdk/gcloud-path.patch47
-rw-r--r--nixpkgs/pkgs/tools/admin/gtk-vnc/default.nix78
-rw-r--r--nixpkgs/pkgs/tools/admin/iamy/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/admin/intecture/agent.nix29
-rw-r--r--nixpkgs/pkgs/tools/admin/intecture/auth.nix29
-rw-r--r--nixpkgs/pkgs/tools/admin/intecture/cli.nix32
-rw-r--r--nixpkgs/pkgs/tools/admin/lego/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/admin/lxd/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/admin/mycli/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/admin/nomachine-client/default.nix90
-rw-r--r--nixpkgs/pkgs/tools/admin/oxidized/Gemfile5
-rw-r--r--nixpkgs/pkgs/tools/admin/oxidized/Gemfile.lock80
-rw-r--r--nixpkgs/pkgs/tools/admin/oxidized/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/admin/oxidized/gemset.nix304
-rw-r--r--nixpkgs/pkgs/tools/admin/pebble/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/admin/procs/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/admin/pulumi/data.nix51
-rw-r--r--nixpkgs/pkgs/tools/admin/pulumi/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/admin/pulumi/update.sh55
-rw-r--r--nixpkgs/pkgs/tools/admin/salt/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/admin/salt/fix-libcrypto-loading.patch14
-rw-r--r--nixpkgs/pkgs/tools/admin/salt/pepper/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/admin/scaleway-cli/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/admin/sec/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/admin/sewer/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/admin/simp_le/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/admin/ssl-cert-check/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/admin/swiftclient/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/admin/tigervnc/default.nix105
-rw-r--r--nixpkgs/pkgs/tools/admin/tightvnc/1.3.10-CVE-2019-15678.patch18
-rw-r--r--nixpkgs/pkgs/tools/admin/tightvnc/1.3.10-CVE-2019-15679.patch19
-rw-r--r--nixpkgs/pkgs/tools/admin/tightvnc/1.3.10-CVE-2019-15680.patch16
-rw-r--r--nixpkgs/pkgs/tools/admin/tightvnc/1.3.10-CVE-2019-8287.patch14
-rw-r--r--nixpkgs/pkgs/tools/admin/tightvnc/default.nix85
-rw-r--r--nixpkgs/pkgs/tools/admin/virtscreen/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/admin/vncdo/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/archivers/afio/0001-makefile-fix-installation.patch45
-rw-r--r--nixpkgs/pkgs/tools/archivers/afio/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/archivers/atool/default.nix19
-rw-r--r--nixpkgs/pkgs/tools/archivers/cabextract/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/archivers/cpio/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/archivers/cromfs/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/archivers/ctrtool/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/archivers/fsarchiver/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/archivers/gnutar/default.nix69
-rw-r--r--nixpkgs/pkgs/tools/archivers/innoextract/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/archivers/ndstool/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/archivers/p7zip/12-CVE-2016-9296.patch23
-rw-r--r--nixpkgs/pkgs/tools/archivers/p7zip/13-CVE-2017-17969.patch35
-rw-r--r--nixpkgs/pkgs/tools/archivers/p7zip/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/archivers/p7zip/setup-hook.sh5
-rw-r--r--nixpkgs/pkgs/tools/archivers/pxattr/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/archivers/rpmextract/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/archivers/rpmextract/rpmextract.sh10
-rw-r--r--nixpkgs/pkgs/tools/archivers/runzip/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/archivers/s-tar/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/archivers/sharutils/default.nix68
-rw-r--r--nixpkgs/pkgs/tools/archivers/snzip/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/archivers/unar/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/archivers/unarj/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/archivers/undmg/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/archivers/undmg/setup-hook.sh5
-rw-r--r--nixpkgs/pkgs/tools/archivers/unp/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/archivers/unrar/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/archivers/unrar/setup-hook.sh5
-rw-r--r--nixpkgs/pkgs/tools/archivers/unshield/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-8139.diff47
-rw-r--r--nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-8140.diff26
-rw-r--r--nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-8141.diff136
-rw-r--r--nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-9636.diff42
-rw-r--r--nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-9913.patch29
-rw-r--r--nixpkgs/pkgs/tools/archivers/unzip/CVE-2015-7696.diff66
-rw-r--r--nixpkgs/pkgs/tools/archivers/unzip/CVE-2015-7697.diff36
-rw-r--r--nixpkgs/pkgs/tools/archivers/unzip/CVE-2016-9844.patch28
-rw-r--r--nixpkgs/pkgs/tools/archivers/unzip/CVE-2018-18384.patch35
-rw-r--r--nixpkgs/pkgs/tools/archivers/unzip/default.nix80
-rw-r--r--nixpkgs/pkgs/tools/archivers/unzip/dont-hardcode-cc.patch14
-rw-r--r--nixpkgs/pkgs/tools/archivers/unzip/setup-hook.sh5
-rw-r--r--nixpkgs/pkgs/tools/archivers/wimlib/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/archivers/xarchive/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/archivers/xarchiver/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/archivers/zip/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/archivers/zip/natspec-gentoo.patch.bz2bin0 -> 1914 bytes
-rw-r--r--nixpkgs/pkgs/tools/archivers/zpaq/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/archivers/zpaq/default.upstream6
-rw-r--r--nixpkgs/pkgs/tools/archivers/zpaq/zpaqd.nix48
-rw-r--r--nixpkgs/pkgs/tools/archivers/zpaq/zpaqd.upstream5
-rw-r--r--nixpkgs/pkgs/tools/audio/abcm2ps/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/audio/abcmidi/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/audio/accuraterip-checksum/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/audio/acoustid-fingerprinter/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/audio/acoustid-fingerprinter/ffmpeg.patch26
-rw-r--r--nixpkgs/pkgs/tools/audio/aucdtect/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/audio/beets/alternatives-plugin.nix25
-rw-r--r--nixpkgs/pkgs/tools/audio/beets/beet-check-tests.patch17
-rw-r--r--nixpkgs/pkgs/tools/audio/beets/check-plugin.nix35
-rw-r--r--nixpkgs/pkgs/tools/audio/beets/copyartifacts-plugin.nix33
-rw-r--r--nixpkgs/pkgs/tools/audio/beets/default.nix264
-rw-r--r--nixpkgs/pkgs/tools/audio/beets/keyfinder-default-bin.patch36
-rw-r--r--nixpkgs/pkgs/tools/audio/beets/replaygain-default-bs1770gain.patch17
-rw-r--r--nixpkgs/pkgs/tools/audio/bpm-tools/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/audio/darkice/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/audio/darkice/fix-undeclared-memmove.patch13
-rw-r--r--nixpkgs/pkgs/tools/audio/dir2opus/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/audio/essentia-extractor/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/audio/ezstream/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/audio/glyr/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/audio/google-music-scripts/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/audio/google-music-scripts/loguru.patch22
-rw-r--r--nixpkgs/pkgs/tools/audio/gvolicon/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/audio/liquidsoap/full.nix60
-rw-r--r--nixpkgs/pkgs/tools/audio/mididings/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/audio/mp3cat/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/audio/mpd-mpris/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/audio/mpdas/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/audio/mpdcron/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/audio/mpdcron/Gemfile.lock15
-rw-r--r--nixpkgs/pkgs/tools/audio/mpdcron/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/audio/mpdcron/gemset.nix23
-rw-r--r--nixpkgs/pkgs/tools/audio/mpdris2/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/audio/mpdsync/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/audio/opl3bankeditor/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/audio/opl3bankeditor/opn2bankeditor.nix19
-rw-r--r--nixpkgs/pkgs/tools/audio/pa-applet/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/audio/pasystray/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/audio/picotts/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/audio/playerctl/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/audio/pnmixer/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/audio/pulsemixer/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/audio/qastools/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/audio/trx/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/audio/video2midi/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/audio/volctl/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/audio/volumeicon/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/backup/amazon-glacier-cmd-interface/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/backup/automysqlbackup/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/backup/bacula/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/backup/bareos/default.nix82
-rw-r--r--nixpkgs/pkgs/tools/backup/bdsync/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/backup/borg/default.nix71
-rw-r--r--nixpkgs/pkgs/tools/backup/btar/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/backup/btrbk/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/backup/bup/default.nix66
-rw-r--r--nixpkgs/pkgs/tools/backup/burp/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/backup/chunksync/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/backup/dar/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/backup/ddar/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/backup/dedup/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/backup/dirvish/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/backup/diskrsync/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/backup/diskrsync/deps.nix48
-rw-r--r--nixpkgs/pkgs/tools/backup/duplicacy/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/backup/duplicacy/deps.nix336
-rw-r--r--nixpkgs/pkgs/tools/backup/duplicati/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/backup/duplicity/default.nix96
-rw-r--r--nixpkgs/pkgs/tools/backup/duplicity/gnutar-in-test.patch18
-rw-r--r--nixpkgs/pkgs/tools/backup/duplicity/linux-disable-timezone-test.patch10
-rw-r--r--nixpkgs/pkgs/tools/backup/duplicity/use-installed-scripts-in-test.patch13
-rw-r--r--nixpkgs/pkgs/tools/backup/duply/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/backup/easysnap/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/backup/flockit/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/backup/grab-site/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/backup/hpe-ltfs/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/backup/httrack/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/backup/httrack/qt.nix40
-rw-r--r--nixpkgs/pkgs/tools/backup/iceshelf/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/backup/lvmsync/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/backup/lvmsync/Gemfile.lock19
-rw-r--r--nixpkgs/pkgs/tools/backup/lvmsync/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/backup/lvmsync/gemset.nix36
-rw-r--r--nixpkgs/pkgs/tools/backup/mt-st/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/backup/mtx/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/backup/mydumper/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/backup/ori/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/backup/partclone/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/backup/partimage/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/backup/partimage/gentoos-zlib.patch33
-rw-r--r--nixpkgs/pkgs/tools/backup/percona-xtrabackup/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/backup/pyznap/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/backup/rdedup/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/backup/rdedup/v3.1.1-fix-Cargo.lock.patch28
-rw-r--r--nixpkgs/pkgs/tools/backup/rdiff-backup/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/backup/rdiff-backup/fix-librsync-rs_default_strong_len.patch20
-rw-r--r--nixpkgs/pkgs/tools/backup/rdup/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/backup/restic/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/backup/restic/rest-server.nix32
-rw-r--r--nixpkgs/pkgs/tools/backup/rotate-backups/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/backup/rsbep/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/backup/rsnapshot/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/backup/s3ql/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/backup/stenc/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/backup/store-backup/default.nix111
-rw-r--r--nixpkgs/pkgs/tools/backup/tarsnap/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/backup/tarsnapper/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/backup/tarsnapper/remove-argparse.patch10
-rw-r--r--nixpkgs/pkgs/tools/backup/tsm-client/default.nix165
-rw-r--r--nixpkgs/pkgs/tools/backup/ugarit-manifest-maker/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/backup/ugarit-manifest-maker/eggs.nix431
-rw-r--r--nixpkgs/pkgs/tools/backup/ugarit/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/backup/ugarit/eggs.nix486
-rw-r--r--nixpkgs/pkgs/tools/backup/wal-e/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/backup/wal-g/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/backup/zbackup/default.nix17
-rw-r--r--nixpkgs/pkgs/tools/backup/zfs-replicate/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/backup/zfsbackup/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/backup/zfsbackup/deps.nix273
-rw-r--r--nixpkgs/pkgs/tools/backup/zfsnap/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/backup/znapzend/default.nix86
-rw-r--r--nixpkgs/pkgs/tools/bluetooth/blueman/default.nix70
-rw-r--r--nixpkgs/pkgs/tools/bluetooth/bluez-alsa/default.nix69
-rw-r--r--nixpkgs/pkgs/tools/bluetooth/bluez-tools/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/bluetooth/obex-data-server/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/bluetooth/obex-data-server/obex-data-server-0.4.6-build-fixes-1.patch56
-rw-r--r--nixpkgs/pkgs/tools/bluetooth/obexd/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/bluetooth/obexfs/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/bluetooth/obexftp/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/bluetooth/openobex/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/bootloaders/refind/0001-toolchain.patch27
-rw-r--r--nixpkgs/pkgs/tools/bootloaders/refind/default.nix129
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/bashburn/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/bchunk/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/brasero/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/brasero/remove-symlink-check.patch29
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/brasero/wrapper.nix18
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/ccd2iso/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/cdi2iso/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/cdimgtools/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/cdimgtools/nrgtool_fix_my.patch12
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/cdimgtools/removed_dvdcss_interface_2.patch53
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/cdrdao/adjust-includes-for-glibc-212.patch15
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/cdrdao/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/cdrkit/cdrkit-1.1.9-efi-boot.patch204
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/cdrkit/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/cdrkit/include-path.patch9
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/cdrtools/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/cue2pops/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/cuetools/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/dvd+rw-tools/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/dvd-vr/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/dvdisaster/default.nix88
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/dvdisaster/dvdrom.patch19
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/dvdisaster/encryption.patch19
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/ecm-tools/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/isomd5sum/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/lsdvd/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/mdf2iso/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/mkcue/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/nrg2iso/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/srt-to-vtt-cl/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/srt-to-vtt-cl/fix-validation.patch13
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/uif2iso/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/unetbootin/default.nix67
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/vobcopy/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/vobsub2srt/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/cd-dvd/xorriso/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/compression/advancecomp/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/compression/brotli/default.nix66
-rw-r--r--nixpkgs/pkgs/tools/compression/bsc/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/compression/bsdiff/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/compression/bsdiff/include-systypes.patch12
-rw-r--r--nixpkgs/pkgs/tools/compression/bzip2/CVE-2016-3189.patch12
-rw-r--r--nixpkgs/pkgs/tools/compression/bzip2/cve-2019-12900.patch13
-rw-r--r--nixpkgs/pkgs/tools/compression/bzip2/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/compression/dejsonlz4/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/compression/dtrx/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/compression/gzip/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/compression/gzrt/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/compression/kzipmix/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/compression/lbzip2/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/compression/lhasa/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/compression/lrzip/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/compression/lrzip/default.upstream8
-rw-r--r--nixpkgs/pkgs/tools/compression/lz4/default.nix72
-rw-r--r--nixpkgs/pkgs/tools/compression/lzbench/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/compression/lzfse/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/compression/lzham/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/compression/lzip/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/compression/lzip/lzip-setup-hook.sh5
-rw-r--r--nixpkgs/pkgs/tools/compression/lzop/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/compression/mozlz4a/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/compression/ncompress/builder.sh15
-rw-r--r--nixpkgs/pkgs/tools/compression/ncompress/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/compression/ncompress/makefile.patch31
-rw-r--r--nixpkgs/pkgs/tools/compression/pbzip2/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/compression/pbzx/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/compression/pigz/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/compression/pixz/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/compression/pxz/_SC_ARG_MAX.patch36
-rw-r--r--nixpkgs/pkgs/tools/compression/pxz/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/compression/rzip/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/compression/upx/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/compression/xar/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/compression/xdelta/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/compression/xdelta/unstable.nix65
-rw-r--r--nixpkgs/pkgs/tools/compression/xz/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/compression/zdelta/builder.sh8
-rw-r--r--nixpkgs/pkgs/tools/compression/zdelta/default.nix16
-rw-r--r--nixpkgs/pkgs/tools/compression/zopfli/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/compression/zstd/default.nix75
-rw-r--r--nixpkgs/pkgs/tools/compression/zstd/mcfgthreads-no-pthread.patch13
-rw-r--r--nixpkgs/pkgs/tools/compression/zsync/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/filesystems/9pfs/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/filesystems/aefs/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/filesystems/afpfs-ng/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/filesystems/android-file-transfer/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/filesystems/apfs-fuse/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/filesystems/archivemount/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/filesystems/avfs/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/filesystems/bashmount/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/filesystems/bcache-tools/bcache-udev-modern.patch52
-rw-r--r--nixpkgs/pkgs/tools/filesystems/bcache-tools/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/filesystems/bcache-tools/fix-static.patch22
-rw-r--r--nixpkgs/pkgs/tools/filesystems/bcachefs-tools/default.nix32
-rwxr-xr-xnixpkgs/pkgs/tools/filesystems/bees/bees-service-wrapper223
-rw-r--r--nixpkgs/pkgs/tools/filesystems/bees/default.nix69
-rw-r--r--nixpkgs/pkgs/tools/filesystems/bindfs/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/filesystems/blobfuse/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/filesystems/bonnie/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/filesystems/boxfs/default.nix60
-rw-r--r--nixpkgs/pkgs/tools/filesystems/boxfs/work-around-API-borkage.patch15
-rw-r--r--nixpkgs/pkgs/tools/filesystems/btrfs-dedupe/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/filesystems/btrfs-progs/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/filesystems/buttersink/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/filesystems/ceph/0000-dont-check-cherrypy-version.patch70
-rw-r--r--nixpkgs/pkgs/tools/filesystems/ceph/0000-fix-SPDK-build-env.patch11
-rw-r--r--nixpkgs/pkgs/tools/filesystems/ceph/default.nix200
-rw-r--r--nixpkgs/pkgs/tools/filesystems/chunkfs/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/filesystems/ciopfs/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/filesystems/convoy/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/filesystems/cpcfs/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/filesystems/cryfs/default.nix78
-rw-r--r--nixpkgs/pkgs/tools/filesystems/curlftpfs/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/filesystems/darling-dmg/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/filesystems/davfs2/0001-umount_davfs-substitute-ps-command.patch25
-rw-r--r--nixpkgs/pkgs/tools/filesystems/davfs2/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/filesystems/davfs2/fix-sysconfdir.patch60
-rw-r--r--nixpkgs/pkgs/tools/filesystems/davfs2/isdir.patch30
-rw-r--r--nixpkgs/pkgs/tools/filesystems/dislocker/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/filesystems/disorderfs/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/filesystems/djmount/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/filesystems/dosfstools/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/filesystems/duff/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/filesystems/duperemove/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/filesystems/e2fsprogs/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/filesystems/e2tools/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/filesystems/encfs/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/filesystems/exfat/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/filesystems/ext4magic/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/filesystems/extundelete/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/filesystems/f2fs-tools/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/filesystems/f2fs-tools/f2fs-tools-cross-fix.patch29
-rw-r--r--nixpkgs/pkgs/tools/filesystems/f3/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/filesystems/fatresize/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/filesystems/fatresize/fatresize_parted_nix.patch74
-rw-r--r--nixpkgs/pkgs/tools/filesystems/fatsort/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/filesystems/fatsort/fatsort-Makefiles.patch31
-rw-r--r--nixpkgs/pkgs/tools/filesystems/file-rename/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/filesystems/fsfs/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/filesystems/fuse-7z-ng/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/filesystems/fuse-overlayfs/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/filesystems/fuseiso/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/filesystems/gcsfuse/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/filesystems/genext2fs/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/filesystems/genimage/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/filesystems/genromfs/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/filesystems/gitfs/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/filesystems/glusterfs/default.nix194
-rw-r--r--nixpkgs/pkgs/tools/filesystems/glusterfs/glusterfs-fix-bug-1489610-glusterfind-var-data-under-prefix.patch27
-rw-r--r--nixpkgs/pkgs/tools/filesystems/go-mtpfs/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/filesystems/go-mtpfs/deps.nix30
-rw-r--r--nixpkgs/pkgs/tools/filesystems/gocryptfs/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/filesystems/gocryptfs/deps.nix75
-rw-r--r--nixpkgs/pkgs/tools/filesystems/gpart/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/filesystems/grive2/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/filesystems/hfsprogs/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/filesystems/httpfs/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/filesystems/hubicfuse/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/filesystems/idsk/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/filesystems/ifuse/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/filesystems/irods/common.nix55
-rw-r--r--nixpkgs/pkgs/tools/filesystems/irods/default.nix91
-rw-r--r--nixpkgs/pkgs/tools/filesystems/irods/irods_root_path.patch71
-rw-r--r--nixpkgs/pkgs/tools/filesystems/jfsutils/ar-fix.patch10
-rw-r--r--nixpkgs/pkgs/tools/filesystems/jfsutils/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/filesystems/jfsutils/hardening-format.patch37
-rw-r--r--nixpkgs/pkgs/tools/filesystems/jfsutils/types.patch12
-rw-r--r--nixpkgs/pkgs/tools/filesystems/jmtpfs/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/filesystems/lizardfs/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/filesystems/mergerfs/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/filesystems/mergerfs/tools.nix36
-rw-r--r--nixpkgs/pkgs/tools/filesystems/mhddfs/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/filesystems/mhddfs/fix-format-security-error.patch12
-rw-r--r--nixpkgs/pkgs/tools/filesystems/mkspiffs/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/filesystems/mkspiffs/presets.nix20
-rw-r--r--nixpkgs/pkgs/tools/filesystems/moosefs/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/filesystems/mp3fs/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/filesystems/mp3fs/fix-statfs-operation.patch39
-rw-r--r--nixpkgs/pkgs/tools/filesystems/mtdutils/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/filesystems/mtools/UNUSED-darwin.patch11
-rw-r--r--nixpkgs/pkgs/tools/filesystems/mtools/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/filesystems/mtpfs/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/filesystems/netatalk/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/filesystems/netatalk/no-suid.patch11
-rw-r--r--nixpkgs/pkgs/tools/filesystems/netatalk/omitLocalstatedirCreation.patch19
-rw-r--r--nixpkgs/pkgs/tools/filesystems/nilfs-utils/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/filesystems/nixpart/0.4/blivet.nix50
-rw-r--r--nixpkgs/pkgs/tools/filesystems/nixpart/0.4/blivet.patch51
-rw-r--r--nixpkgs/pkgs/tools/filesystems/nixpart/0.4/cryptsetup.nix29
-rw-r--r--nixpkgs/pkgs/tools/filesystems/nixpart/0.4/default.nix77
-rw-r--r--nixpkgs/pkgs/tools/filesystems/nixpart/0.4/dmraid.nix26
-rw-r--r--nixpkgs/pkgs/tools/filesystems/nixpart/0.4/lvm2.nix64
-rw-r--r--nixpkgs/pkgs/tools/filesystems/nixpart/0.4/multipath-tools.nix36
-rw-r--r--nixpkgs/pkgs/tools/filesystems/nixpart/0.4/parted.nix50
-rw-r--r--nixpkgs/pkgs/tools/filesystems/nixpart/0.4/pyblock.nix30
-rw-r--r--nixpkgs/pkgs/tools/filesystems/nixpart/0.4/pykickstart.nix30
-rw-r--r--nixpkgs/pkgs/tools/filesystems/nixpart/0.4/pyparted.nix42
-rw-r--r--nixpkgs/pkgs/tools/filesystems/nixpart/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/filesystems/ntfs-3g/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/filesystems/orangefs/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/filesystems/rdfind/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/filesystems/reiser4progs/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/filesystems/reiserfsprogs/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/filesystems/reiserfsprogs/reiserfsprogs-ar-fix.patch10
-rw-r--r--nixpkgs/pkgs/tools/filesystems/relfs/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/filesystems/rmount/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/filesystems/s3backer/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/filesystems/s3fs/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/filesystems/sasquatch/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/filesystems/securefs/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/filesystems/simg2img/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/filesystems/smbnetfs/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/filesystems/smbnetfs/default.upstream6
-rw-r--r--nixpkgs/pkgs/tools/filesystems/snapraid/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/filesystems/squashfs-tools-ng/0001-Fix-build-on-BSD-systems.patch103
-rw-r--r--nixpkgs/pkgs/tools/filesystems/squashfs-tools-ng/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/filesystems/squashfs/4k-align.patch98
-rw-r--r--nixpkgs/pkgs/tools/filesystems/squashfs/darwin.patch357
-rw-r--r--nixpkgs/pkgs/tools/filesystems/squashfs/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/filesystems/squashfuse/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/filesystems/sshfs-fuse/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/filesystems/svnfs/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/filesystems/tmsu/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/filesystems/u3-tool/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/filesystems/udftools/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/filesystems/unionfs-fuse/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/filesystems/unionfs-fuse/prevent-kill-on-shutdown.patch14
-rw-r--r--nixpkgs/pkgs/tools/filesystems/vmfs-tools/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/filesystems/wdfs/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/filesystems/xfsprogs/default.nix65
-rw-r--r--nixpkgs/pkgs/tools/filesystems/xtreemfs/default.nix78
-rw-r--r--nixpkgs/pkgs/tools/filesystems/yandex-disk/default.nix64
-rw-r--r--nixpkgs/pkgs/tools/filesystems/zerofree/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/filesystems/zfstools/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/filesystems/zkfuse/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/graphics/appleseed/default.nix83
-rw-r--r--nixpkgs/pkgs/tools/graphics/argyllcms/default.nix124
-rw-r--r--nixpkgs/pkgs/tools/graphics/argyllcms/gcc5.patch20
-rw-r--r--nixpkgs/pkgs/tools/graphics/asymptote/default.nix78
-rw-r--r--nixpkgs/pkgs/tools/graphics/asymptote/default.upstream4
-rw-r--r--nixpkgs/pkgs/tools/graphics/barcode/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/graphics/blockhash/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/graphics/blur-effect/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/graphics/briss/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/graphics/cfdg/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/graphics/cfdg/src-for-default.nix9
-rw-r--r--nixpkgs/pkgs/tools/graphics/cfdg/src-info-for-default.nix6
-rw-r--r--nixpkgs/pkgs/tools/graphics/convchain/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/graphics/cuneiform/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/graphics/cuneiform/default.upstream8
-rw-r--r--nixpkgs/pkgs/tools/graphics/dcraw/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/graphics/diagrams-builder/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/graphics/ditaa/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/graphics/dmtx-utils/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/graphics/dmtx-utils/default.upstream4
-rw-r--r--nixpkgs/pkgs/tools/graphics/dpic/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/graphics/editres/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/graphics/enblend-enfuse/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/graphics/eplot/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/graphics/epstool/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/graphics/epstool/gcc43.patch20
-rw-r--r--nixpkgs/pkgs/tools/graphics/escrotum/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/graphics/exif/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/graphics/exiftags/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/graphics/facedetect/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/graphics/fast-neural-doodle/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/graphics/fast-neural-doodle/fast-neural-doodle.sh28
-rw-r--r--nixpkgs/pkgs/tools/graphics/fast-neural-doodle/get-mask-hdf5.sh5
-rw-r--r--nixpkgs/pkgs/tools/graphics/fbv/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/graphics/feedgnuplot/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/graphics/fgallery/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/graphics/fim/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/graphics/flam3/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/graphics/ggobi/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/graphics/gifsicle/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/graphics/gifski/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/graphics/glee/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/graphics/glmark2/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/graphics/glxinfo/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/graphics/gmic-qt/default.nix144
-rw-r--r--nixpkgs/pkgs/tools/graphics/gmic-qt/fix-gimp-plugin-path.patch21
-rw-r--r--nixpkgs/pkgs/tools/graphics/gmic/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/graphics/gnuplot/default.nix76
-rw-r--r--nixpkgs/pkgs/tools/graphics/gnuplot/set-gdfontpath-from-fontconfig.sh4
-rw-r--r--nixpkgs/pkgs/tools/graphics/graph-easy/default.nix17
-rw-r--r--nixpkgs/pkgs/tools/graphics/graphviz/2.32.nix5
-rw-r--r--nixpkgs/pkgs/tools/graphics/graphviz/base.nix89
-rw-r--r--nixpkgs/pkgs/tools/graphics/graphviz/default.nix5
-rw-r--r--nixpkgs/pkgs/tools/graphics/grim/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/graphics/gromit-mpx/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/graphics/guff/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/graphics/ibniz/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/graphics/icoutils/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/graphics/ifm/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/graphics/imgur-screenshot/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/graphics/imgurbash2/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/graphics/jbig2enc/53ce5fe7e73d7ed95c9e12b52dd4984723f865fa.patch47
-rw-r--r--nixpkgs/pkgs/tools/graphics/jbig2enc/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/graphics/jhead/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/graphics/jpegexiforient/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/graphics/kst/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/graphics/leela/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/graphics/lepton/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/graphics/logstalgia/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/graphics/lprof/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/graphics/lprof/keep-environment.patch16
-rw-r--r--nixpkgs/pkgs/tools/graphics/lprof/lcms-1.17.patch13
-rw-r--r--nixpkgs/pkgs/tools/graphics/luxcorerender/default.nix88
-rw-r--r--nixpkgs/pkgs/tools/graphics/maim/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/graphics/mscgen/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/graphics/netpbm/default.nix70
-rw-r--r--nixpkgs/pkgs/tools/graphics/neural-style/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/graphics/neural-style/neural-style.sh25
-rw-r--r--nixpkgs/pkgs/tools/graphics/nifskope/default.nix69
-rw-r--r--nixpkgs/pkgs/tools/graphics/nifskope/external-lib-paths.patch33
-rw-r--r--nixpkgs/pkgs/tools/graphics/nifskope/no-sse-on-arm.patch19
-rw-r--r--nixpkgs/pkgs/tools/graphics/nifskope/qttools-bins.patch22
-rw-r--r--nixpkgs/pkgs/tools/graphics/nip2/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/graphics/optar/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/graphics/optipng/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/graphics/oxipng/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/graphics/pdf2svg/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/graphics/pdfread/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/graphics/pdfredacttools/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/graphics/pdftag/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/graphics/perceptualdiff/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/graphics/pfstools/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/graphics/pfstools/pfsalign.patch12
-rw-r--r--nixpkgs/pkgs/tools/graphics/pfstools/pfstools.patch21
-rw-r--r--nixpkgs/pkgs/tools/graphics/pfstools/threads.patch20
-rw-r--r--nixpkgs/pkgs/tools/graphics/pgf/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/graphics/ploticus/builder.sh33
-rw-r--r--nixpkgs/pkgs/tools/graphics/ploticus/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/graphics/ploticus/ploticus-install.patch12
-rw-r--r--nixpkgs/pkgs/tools/graphics/plotutils/debian-patches.nix42
-rw-r--r--nixpkgs/pkgs/tools/graphics/plotutils/debian-patches.txt10
-rw-r--r--nixpkgs/pkgs/tools/graphics/plotutils/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/graphics/pngcheck/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/graphics/pngcrush/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/graphics/pngnq/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/graphics/pngout/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/graphics/pngquant/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/graphics/pngtoico/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/graphics/povray/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/graphics/pstoedit/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/graphics/pstoedit/pstoedit-gs-9.22-compat.patch13
-rw-r--r--nixpkgs/pkgs/tools/graphics/qrcode/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/graphics/quirc/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/graphics/rocket/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/graphics/s2png/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/graphics/scanbd/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/graphics/scrot/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/graphics/shotgun/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/graphics/sng/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/graphics/structure-synth/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/graphics/structure-synth/gcc47.patch50
-rw-r--r--nixpkgs/pkgs/tools/graphics/svgbob/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/graphics/svgcleaner/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/graphics/swfdec/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/graphics/syntex/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/graphics/transfig/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/graphics/transfig/patch-fig2dev-Imakefile75
-rw-r--r--nixpkgs/pkgs/tools/graphics/transfig/patch-fig2dev-dev-Imakefile15
-rw-r--r--nixpkgs/pkgs/tools/graphics/transfig/patch-fig2dev-dev-gensvg.c21
-rw-r--r--nixpkgs/pkgs/tools/graphics/transfig/patch-fig2dev-fig2dev.h19
-rw-r--r--nixpkgs/pkgs/tools/graphics/transfig/patch-transfig-Imakefile22
-rw-r--r--nixpkgs/pkgs/tools/graphics/twilight/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/graphics/unpaper/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/graphics/vips/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/graphics/viu/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/graphics/vulkan-tools/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/graphics/waifu2x-converter-cpp/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/graphics/wallutils/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/graphics/wallutils/lscollection-Add-NixOS-paths-to-DefaultWallpaperDirectories.patch26
-rw-r--r--nixpkgs/pkgs/tools/graphics/wavefunctioncollapse/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/graphics/wdisplays/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/graphics/welkin/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/graphics/wkhtmltopdf/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/graphics/xcftools/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/graphics/xcur2png/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/graphics/yafaray-core/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/graphics/yaxg/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/graphics/zbar/default.nix94
-rw-r--r--nixpkgs/pkgs/tools/graphics/zxing/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/graphics/zxing/java-zxing.sh3
-rw-r--r--nixpkgs/pkgs/tools/graphics/zxing/zxing-cmdline-encoder.sh3
-rw-r--r--nixpkgs/pkgs/tools/graphics/zxing/zxing-cmdline-runner.sh3
-rw-r--r--nixpkgs/pkgs/tools/graphics/zxing/zxing.sh18
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/anthy/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/evdevremapkeys/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/evscript/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-anthy/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-chewing/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-cloudpinyin/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-hangul/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-libpinyin/datapath.patch16
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-libpinyin/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-m17n/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-mozc/default.nix106
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-rime/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-skk/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-table-extra/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-table-other/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-unikey/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fcitx/default.nix11
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fcitx/fcitx-configtool.nix35
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fcitx/fcitx-qt5.nix38
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fcitx/find-enchant-lib.patch42
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fcitx/unwrapped.nix100
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fcitx/wrapper.nix14
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fusuma/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fusuma/Gemfile.lock13
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fusuma/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/fusuma/gemset.nix12
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/gebaar-libinput/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-anthy/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-hangul/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-hangul/fix-paths.patch13
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-kkc/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-libpinyin/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-m17n/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-mozc/default.nix86
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-table-chinese/default.nix64
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-table-others/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-table/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/hunspell-dirs.patch31
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/wrapper.nix30
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-uniemoji/allow-wrapping.patch13
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-uniemoji/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus/default.nix164
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus/fix-paths.patch45
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus/ibus-qt.nix26
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/ibus/wrapper.nix64
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/interception-tools/caps2esc.nix23
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/interception-tools/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/interception-tools/fix-udevmon-configuration-job-path.patch32
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/keyfuzz/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/libinput-gestures/0001-hardcode-name.patch13
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/libinput-gestures/0002-paths.patch45
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/libinput-gestures/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/libkkc/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/m17n-db/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/m17n-lib/default.nix19
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/m17n-lib/otf.nix28
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/nabi/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/skk/skk-dicts/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/skk/skktools/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/tegaki-zinnia-japanese/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/touchegg/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/triggerhappy/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/uim/data-hook.patch38
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/uim/default.nix146
-rw-r--r--nixpkgs/pkgs/tools/inputmethods/zinnia/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/0x0/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/3llo/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/misc/3llo/Gemfile.lock27
-rw-r--r--nixpkgs/pkgs/tools/misc/3llo/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/3llo/gemset.nix85
-rw-r--r--nixpkgs/pkgs/tools/misc/abduco/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/adafruit-ampy/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/aescrypt/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/agedu/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/alarm-clock-applet/default.nix66
-rw-r--r--nixpkgs/pkgs/tools/misc/antimicro/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/apparix/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/misc/apt-offline/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/aptly/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/argtable/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/arp-scan/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/asciinema/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/aspcud/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/autojump/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/automirror/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/autorandr/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/misc/autorevision/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/aws-mturk-clt/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/azure-vhd-utils/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/azure-vhd-utils/deps.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/bandwidth/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/bash_unit/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/bashplotlib/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/bat/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/bbe/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/bc/cross-bc.patch169
-rw-r--r--nixpkgs/pkgs/tools/misc/bc/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/bcunit/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/bdf2psf/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/bepasty/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/misc/bfr/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/bibtex2html/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/bibtool/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/bibutils/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/birdfont/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/birdfont/xmlbird.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/blink1-tool/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/blsd/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/blsd/deps.nix12
-rw-r--r--nixpkgs/pkgs/tools/misc/bmap-tools/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/bmon/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/bogofilter/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/bonfire/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/brltty/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/broadlink-cli/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/broot/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/buildtorrent/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/misc/byobu/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/calamares/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/misc/capture/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/catimg/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/ccze/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/chafa/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/misc/chafa/xmlcatalog_patch.patch23
-rw-r--r--nixpkgs/pkgs/tools/misc/chelf/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/chezmoi/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/chrome-export/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/cht.sh/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/misc/ckb-next/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/ckb-next/install-dirs.patch13
-rw-r--r--nixpkgs/pkgs/tools/misc/ckb-next/modprobe.patch26
-rw-r--r--nixpkgs/pkgs/tools/misc/clac/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/clasp/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/claws/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/clex/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/clipman/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/clipnotify/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/clipster/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/misc/cloc/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/cloud-sql-proxy/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/cloud-sql-proxy/deps.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/cloud-utils/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/colord-gtk/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/misc/colord-kde/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/colord/default.nix114
-rw-r--r--nixpkgs/pkgs/tools/misc/colord/installed-tests-path.patch72
-rw-r--r--nixpkgs/pkgs/tools/misc/contacts/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/convmv/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/coreboot-utils/default.nix104
-rw-r--r--nixpkgs/pkgs/tools/misc/coreutils/avoid-false-positive-in-date-debug-test.patch52
-rw-r--r--nixpkgs/pkgs/tools/misc/coreutils/coreutils-8.23-4.cygwin.patch1259
-rw-r--r--nixpkgs/pkgs/tools/misc/coreutils/coreutils-8.31-musl-cross.patch1153
-rw-r--r--nixpkgs/pkgs/tools/misc/coreutils/default.nix150
-rw-r--r--nixpkgs/pkgs/tools/misc/cowsay/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/cpulimit/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/cpuminer-multi/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/cpuminer/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/crex/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/crudini/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/misc/cunit/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/cutecom/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/dashing/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/dashing/deps.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/dasht/default.nix64
-rw-r--r--nixpkgs/pkgs/tools/misc/datamash/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/misc/dateutils/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/dbacl/default.nix17
-rw-r--r--nixpkgs/pkgs/tools/misc/dbus-map/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/ddate/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/misc/ddccontrol/default.nix65
-rw-r--r--nixpkgs/pkgs/tools/misc/ddcutil/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/debian-devscripts/default.nix66
-rw-r--r--nixpkgs/pkgs/tools/misc/debianutils/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/debootstrap/default.nix67
-rw-r--r--nixpkgs/pkgs/tools/misc/desktop-file-utils/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/desktop-file-utils/setup-hook.sh6
-rw-r--r--nixpkgs/pkgs/tools/misc/detox/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/diffoscope/default.nix77
-rw-r--r--nixpkgs/pkgs/tools/misc/diffoscope/ignore_links.patch32
-rwxr-xr-xnixpkgs/pkgs/tools/misc/diffoscope/list-missing-tools.sh23
-rw-r--r--nixpkgs/pkgs/tools/misc/ding-libs/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/direnv/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/diskscan/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/diskus/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/disper/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/dmg2img/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/docbook2mdoc/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/docker-ls/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/docker-sync/Gemfile3
-rw-r--r--nixpkgs/pkgs/tools/misc/docker-sync/Gemfile.lock29
-rw-r--r--nixpkgs/pkgs/tools/misc/docker-sync/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/misc/docker-sync/gemset.nix76
-rw-r--r--nixpkgs/pkgs/tools/misc/docui/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/doitlive/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/dpt-rp1-py/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/dtach/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/dua/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/duc/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/dumptorrent/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/dupd/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/dust/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/dvtm/default.nix19
-rw-r--r--nixpkgs/pkgs/tools/misc/dvtm/dvtm.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/dvtm/unstable.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/dylibbundler/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/dynamic-colors/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/edid-decode/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/emv/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/ent/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/entr/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/envdir-go/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/envsubst/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/eot-utilities/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/esptool-ck/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/esptool/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/etcher/default.nix94
-rw-r--r--nixpkgs/pkgs/tools/misc/ethminer/default.nix76
-rw-r--r--nixpkgs/pkgs/tools/misc/ethtool/default.nix19
-rw-r--r--nixpkgs/pkgs/tools/misc/eva/Cargo.lock.patch589
-rw-r--r--nixpkgs/pkgs/tools/misc/eva/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/exa/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/misc/execline/default.nix85
-rw-r--r--nixpkgs/pkgs/tools/misc/execline/execlineb-wrapper.c43
-rw-r--r--nixpkgs/pkgs/tools/misc/expect/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/fasd/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/fd/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/fdupes/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/fffuu/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/misc/ffsend/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/misc/figlet/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/file/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/filebench/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/fileschanged/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/fileschanged/unused-variables.debian.patch48
-rw-r--r--nixpkgs/pkgs/tools/misc/findutils/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/misc/findutils/no-install-statedir.patch11
-rw-r--r--nixpkgs/pkgs/tools/misc/flameshot/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/flashrom/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/fltrdr/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/fluent-bit/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/fluentd/Gemfile12
-rw-r--r--nixpkgs/pkgs/tools/misc/fluentd/Gemfile.lock132
-rw-r--r--nixpkgs/pkgs/tools/misc/fluentd/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/misc/fluentd/gemset.nix521
-rw-r--r--nixpkgs/pkgs/tools/misc/fondu/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/misc/fontforge/default.nix78
-rw-r--r--nixpkgs/pkgs/tools/misc/fontforge/fontforge-20140813-use-system-uthash.patch31
-rw-r--r--nixpkgs/pkgs/tools/misc/fontforge/fontforge-fonttools.nix1
-rw-r--r--nixpkgs/pkgs/tools/misc/fortune/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/fpart/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/fpp/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/fselect/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/fsmark/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/fsmon/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/fsql/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/fwup/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/fwup/fix-testrunner-darwin.patch25
-rw-r--r--nixpkgs/pkgs/tools/misc/fxlinuxprintutil/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/misc/fxlinuxprintutil/fxlocalechk.tcl.patch18
-rw-r--r--nixpkgs/pkgs/tools/misc/fxlinuxprintutil/fxlputil.patch28
-rw-r--r--nixpkgs/pkgs/tools/misc/fxlinuxprintutil/fxlputil.tcl.patch21
-rw-r--r--nixpkgs/pkgs/tools/misc/fzf/default.nix64
-rw-r--r--nixpkgs/pkgs/tools/misc/fzy/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/gams/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/misc/gawp/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/gawp/deps.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/gbdfed/Makefile.patch15
-rw-r--r--nixpkgs/pkgs/tools/misc/gbdfed/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/geekbench/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/geteltorito/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/getopt/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/gh-ost/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/gibo/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/gif-for-cli/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/git-fire/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/git-town/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/gnokii/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/gnuvd/default.nix17
-rw-r--r--nixpkgs/pkgs/tools/misc/goaccess/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/gosu/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/gosu/deps.nix11
-rw-r--r--nixpkgs/pkgs/tools/misc/gotify-cli/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/gparted/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/misc/gparted/polkit.patch12
-rw-r--r--nixpkgs/pkgs/tools/misc/graylog/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/graylog/plugins.nix220
-rw-r--r--nixpkgs/pkgs/tools/misc/grc/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/gringo/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/misc/gringo/gringo-4.5.4-cmath.patch11
-rw-r--r--nixpkgs/pkgs/tools/misc/gringo/gringo-4.5.4-to_string.patch11
-rw-r--r--nixpkgs/pkgs/tools/misc/grub/2.0x.nix137
-rw-r--r--nixpkgs/pkgs/tools/misc/grub/buggybios.patch11
-rw-r--r--nixpkgs/pkgs/tools/misc/grub/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/grub/fix-bash-completion.patch24
-rw-r--r--nixpkgs/pkgs/tools/misc/grub/grub1.patches.nix34
-rwxr-xr-xnixpkgs/pkgs/tools/misc/grub/grub1.patches.sh70
-rw-r--r--nixpkgs/pkgs/tools/misc/grub/pvgrub_image/configs/grub-bootstrap.cfg1
-rw-r--r--nixpkgs/pkgs/tools/misc/grub/pvgrub_image/configs/grub.cfg10
-rw-r--r--nixpkgs/pkgs/tools/misc/grub/pvgrub_image/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/grub/symlink.patch37
-rw-r--r--nixpkgs/pkgs/tools/misc/grub/trusted.nix100
-rw-r--r--nixpkgs/pkgs/tools/misc/grub4dos/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/gsmartcontrol/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/gsmartcontrol/fix-paths.patch58
-rw-r--r--nixpkgs/pkgs/tools/misc/gti/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/h5utils/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/hackertyper/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/hakuneko/default.nix84
-rw-r--r--nixpkgs/pkgs/tools/misc/hashit/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/hdaps-gl/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/hddtemp/byteswap.patch28
-rw-r--r--nixpkgs/pkgs/tools/misc/hddtemp/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/hddtemp/dontwake.patch20
-rw-r--r--nixpkgs/pkgs/tools/misc/hddtemp/execinfo.patch21
-rw-r--r--nixpkgs/pkgs/tools/misc/hddtemp/satacmds.patch26
-rw-r--r--nixpkgs/pkgs/tools/misc/hdf4/default.nix93
-rw-r--r--nixpkgs/pkgs/tools/misc/hdf5/1_8.nix75
-rw-r--r--nixpkgs/pkgs/tools/misc/hdf5/bin-mv.patch30
-rw-r--r--nixpkgs/pkgs/tools/misc/hdf5/default.nix75
-rw-r--r--nixpkgs/pkgs/tools/misc/hdfjava/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/hdfview/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/heatseeker/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/hebcal/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/heimdall/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/misc/hexd/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/hexyl/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/hhpc/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/hid-listen/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/homesick/Gemfile3
-rw-r--r--nixpkgs/pkgs/tools/misc/homesick/Gemfile.lock15
-rw-r--r--nixpkgs/pkgs/tools/misc/homesick/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/homesick/gemset.nix19
-rw-r--r--nixpkgs/pkgs/tools/misc/hostsblock/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/misc/hpl/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/html-proofer/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/misc/html-proofer/Gemfile.lock37
-rw-r--r--nixpkgs/pkgs/tools/misc/html-proofer/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/misc/html-proofer/gemset.nix138
-rw-r--r--nixpkgs/pkgs/tools/misc/hyperfine/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/hyperledger-fabric/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/i3cat/default.nix17
-rw-r--r--nixpkgs/pkgs/tools/misc/i3cat/deps.nix11
-rw-r--r--nixpkgs/pkgs/tools/misc/i3minator/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/ical2org/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/ical2org/deps.nix11
-rw-r--r--nixpkgs/pkgs/tools/misc/ideviceinstaller/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/idevicerestore/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/misc/idutils/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/misc/idutils/nix-mapping.patch12
-rw-r--r--nixpkgs/pkgs/tools/misc/ili2c/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/ipad_charge/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/ipxe/default.nix85
-rw-r--r--nixpkgs/pkgs/tools/misc/ised/default.nix17
-rw-r--r--nixpkgs/pkgs/tools/misc/ised/default.upstream4
-rw-r--r--nixpkgs/pkgs/tools/misc/ix/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/jdiskreport/builder.sh15
-rw-r--r--nixpkgs/pkgs/tools/misc/jdiskreport/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/jdupes/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/misc/journaldriver/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/kak-lsp/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/kanshi/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/kargo/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/kdecoration-viewer/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/kermit/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/keychain/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/misc/kisslicer/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/misc/kodi-cli/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/kronometer/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/kt/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/latex2html/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/misc/lazydocker/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/lbdb/add-methods-to-rc.patch11
-rw-r--r--nixpkgs/pkgs/tools/misc/lbdb/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/misc/ldapvi/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/ldmtool/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/misc/less/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/lesspipe/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/lesspipe/fix-paths.patch22
-rw-r--r--nixpkgs/pkgs/tools/misc/lf/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-client.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-explorer.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-network.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-protocol.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/libcpuid/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/libcpuid/stdint.patch5
-rw-r--r--nixpkgs/pkgs/tools/misc/lice/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/licensor/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/linuxquota/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/lnav/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/misc/loadlibrary/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/lockfile-progs/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/logstash/6.x.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/logstash/7.x.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/logstash/contrib.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/lolcat/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/misc/lolcat/Gemfile.lock19
-rw-r--r--nixpkgs/pkgs/tools/misc/lolcat/default.nix16
-rw-r--r--nixpkgs/pkgs/tools/misc/lolcat/gemset.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/loop/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/lorri/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/misc/lorri/runtime-closure.nix.template37
-rw-r--r--nixpkgs/pkgs/tools/misc/lorri/runtime.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/lrzsz/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/lsd/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/ltunify/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/makebootfat/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/misc/man-db/default.nix83
-rw-r--r--nixpkgs/pkgs/tools/misc/mandoc/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/mandoc/remove-broken-cc-check.patch11
-rw-r--r--nixpkgs/pkgs/tools/misc/marlin-calc/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/massren/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/mbuffer/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/mc/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/mcfly/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/mcrypt/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/mcrypt/format-string.patch31
-rw-r--r--nixpkgs/pkgs/tools/misc/mcrypt/overflow.patch24
-rw-r--r--nixpkgs/pkgs/tools/misc/mcrypt/segv.patch39
-rw-r--r--nixpkgs/pkgs/tools/misc/mcrypt/sprintf.patch108
-rw-r--r--nixpkgs/pkgs/tools/misc/mdbtools/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/me_cleaner/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/megacli/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/memtest86+/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/memtest86-efi/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/misc/mht2htm/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/mimeo/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/minicom/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/minicom/xminicom_terminal_paths.patch79
-rw-r--r--nixpkgs/pkgs/tools/misc/miniserve/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/ministat/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/mktorrent/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/mlocate/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/mmake/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/mmake/deps.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/mmv/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/mongodb-compass/default.nix88
-rw-r--r--nixpkgs/pkgs/tools/misc/mongodb-tools/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/misc/moreutils/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/most/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/mpdscribble/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/mprime/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/misc/mprime/makefile.patch41
-rw-r--r--nixpkgs/pkgs/tools/misc/mrtg/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/ms-sys/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/ms-sys/manpages-without-build-timestamps.patch12
-rw-r--r--nixpkgs/pkgs/tools/misc/mstflint/default.nix19
-rw-r--r--nixpkgs/pkgs/tools/misc/mtm/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/multitail/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/multitime/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/mutagen/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/mysql2pgsql/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/mysqltuner/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/nagstamon/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/nbench/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/ncdu/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/neo-cowsay/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/neofetch/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/nginx-config-formatter/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/nms/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/noteshrink/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/noti/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/notify-desktop/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/ntfy/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/nyancat/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/oci-image-tool/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/ocz-ssd-guru/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/odroid-xu3-bootloader/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/odyssey/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/onefetch/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/opentimestamps-client/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/opentsdb/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/oppai-ng/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/os-prober/default.nix71
-rw-r--r--nixpkgs/pkgs/tools/misc/osinfo-db-tools/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/osm2pgsql/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/ostree/01-Drop-ostree-trivial-httpd-CLI-move-to-tests-director.patch271
-rw-r--r--nixpkgs/pkgs/tools/misc/ostree/default.nix70
-rw-r--r--nixpkgs/pkgs/tools/misc/ostree/disable-test-gpg-verify-result.patch12
-rw-r--r--nixpkgs/pkgs/tools/misc/ostree/fix-1592.patch138
-rw-r--r--nixpkgs/pkgs/tools/misc/otfcc/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/pal/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/pandoc-imagine/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/paps/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/parallel-rust/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/parallel-rust/fix_cargo_lock_version.patch12
-rw-r--r--nixpkgs/pkgs/tools/misc/parallel/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/misc/parcellite/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/parted/default.nix71
-rw-r--r--nixpkgs/pkgs/tools/misc/partition-manager/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/pastebinit/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/patdiff/default.nix12
-rw-r--r--nixpkgs/pkgs/tools/misc/pazi/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/pb_cli/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/pdd/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/peruse/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/pfetch/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/pg_flame/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/pg_top/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/pgcenter/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/pgmetrics/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/phoronix-test-suite/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/phraseapp-client/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/pick/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/picocom/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/pipelight/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/misc/pipelight/pipelight.patch122
-rw-r--r--nixpkgs/pkgs/tools/misc/pipreqs/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/pixd/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/pk2cmd/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/pkgdiff/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/plantuml/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/plotinus/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/plowshare/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/pod2mdoc/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/ponysay/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/powerline-go/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/powerline-rs/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/profile-cleaner/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/profile-sync-daemon/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/progress/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/proxytunnel/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/pspg/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/psrecord/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/pubs/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/pv/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/misc/pws/Gemfile3
-rw-r--r--nixpkgs/pkgs/tools/misc/pws/Gemfile.lock19
-rw-r--r--nixpkgs/pkgs/tools/misc/pws/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/pws/gemset.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/q-text-as-data/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/qjoypad/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/qt5ct/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/radeon-profile/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/rcm/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/rcm/fix-rcmlib-path.patch48
-rw-r--r--nixpkgs/pkgs/tools/misc/recoverjpeg/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/recutils/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/remind/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/rename/default.nix19
-rw-r--r--nixpkgs/pkgs/tools/misc/renameutils/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/renameutils/install-exec.patch24
-rw-r--r--nixpkgs/pkgs/tools/misc/reredirect/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/riemann-c-client/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/riemann-tools/Gemfile3
-rw-r--r--nixpkgs/pkgs/tools/misc/riemann-tools/Gemfile.lock25
-rw-r--r--nixpkgs/pkgs/tools/misc/riemann-tools/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/riemann-tools/gemset.nix74
-rw-r--r--nixpkgs/pkgs/tools/misc/rig/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/rig/rig_1.11-1.diff39
-rw-r--r--nixpkgs/pkgs/tools/misc/rkflashtool/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/rlwrap/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/rmlint/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/rockbox-utility/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/misc/roundup/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/routino/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/rpm-ostree/default.nix68
-rw-r--r--nixpkgs/pkgs/tools/misc/rpm-ostree/fix-introspection-build.patch11
-rw-r--r--nixpkgs/pkgs/tools/misc/rrdtool/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/rw/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/s6-portable-utils/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/sam-ba/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/misc/scanmem/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/scfbuild/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/scfbuild/python-3.patch46
-rw-r--r--nixpkgs/pkgs/tools/misc/screen/default.nix67
-rw-r--r--nixpkgs/pkgs/tools/misc/screenfetch/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/misc/sdate/default.nix19
-rw-r--r--nixpkgs/pkgs/tools/misc/sdl-jstest/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/shadowenv/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/shallot/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/misc/shell-hist/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/shelldap/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/shunit2/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/sixpair/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/sixpair/hcitool.patch19
-rw-r--r--nixpkgs/pkgs/tools/misc/skim/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/sl/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/slop/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/slsnif/default.nix17
-rw-r--r--nixpkgs/pkgs/tools/misc/slurp/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/smc/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/smenu/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/snapper/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/misc/snore/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/sonota/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/misc/sonota/set_resource_path.patch20
-rw-r--r--nixpkgs/pkgs/tools/misc/starship/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/staruml/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/misc/stow/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/subberthehut/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/sutils/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/svtplay-dl/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/sweep-visualizer/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/misc/system-config-printer/default.nix77
-rw-r--r--nixpkgs/pkgs/tools/misc/system-config-printer/detect_serverbindir.patch17
-rw-r--r--nixpkgs/pkgs/tools/misc/systrayhelper/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/systrayhelper/deps.nix102
-rw-r--r--nixpkgs/pkgs/tools/misc/t/Gemfile6
-rw-r--r--nixpkgs/pkgs/tools/misc/t/Gemfile.lock65
-rw-r--r--nixpkgs/pkgs/tools/misc/t/default.nix17
-rw-r--r--nixpkgs/pkgs/tools/misc/t/gemset.nix262
-rw-r--r--nixpkgs/pkgs/tools/misc/t1utils/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/td/Gemfile3
-rw-r--r--nixpkgs/pkgs/tools/misc/td/Gemfile.lock40
-rw-r--r--nixpkgs/pkgs/tools/misc/td/default.nix17
-rw-r--r--nixpkgs/pkgs/tools/misc/td/gemset.nix103
-rw-r--r--nixpkgs/pkgs/tools/misc/tealdeer/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/teamocil/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/misc/teamocil/Gemfile.lock13
-rw-r--r--nixpkgs/pkgs/tools/misc/teamocil/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/misc/teamocil/gemset.nix10
-rw-r--r--nixpkgs/pkgs/tools/misc/teleconsole/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/teleconsole/deps.nix13
-rw-r--r--nixpkgs/pkgs/tools/misc/tensorman/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/termplay/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/termtosvg/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/misc/tewisay/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/tewisay/deps.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/texi2mdoc/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/thefuck/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/thin-provisioning-tools/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/time/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/timidity/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/timidity/timidity.cfg369
-rw-r--r--nixpkgs/pkgs/tools/misc/tio/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/tldr/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/tlp/default.nix81
-rw-r--r--nixpkgs/pkgs/tools/misc/tmate/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/tmpwatch/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/misc/tmux-cssh/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/tmux-xpanes/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/tmux/default.nix80
-rw-r--r--nixpkgs/pkgs/tools/misc/tmuxinator/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/tmuxp/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/togglesg-download/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/misc/toilet/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/topgrade/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/toybox/default.nix66
-rw-r--r--nixpkgs/pkgs/tools/misc/trac/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/trash-cli/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/misc/trash-cli/nix-paths.patch26
-rw-r--r--nixpkgs/pkgs/tools/misc/ttf2pt1/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/ttf2pt1/gentoo-makefile.patch98
-rw-r--r--nixpkgs/pkgs/tools/misc/ttfautohint/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/ttmkfdir/cstring.patch78
-rw-r--r--nixpkgs/pkgs/tools/misc/ttmkfdir/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/ttwatch/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/tty-clock/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/ttygif/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/ttylog/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/ttyplot/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/ttyrec/clang-fixes.patch21
-rw-r--r--nixpkgs/pkgs/tools/misc/ttyrec/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/txr/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/txt2man/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/txtw/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/uhubctl/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/ultrastar-creator/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/misc/ultrastar-manager/default.nix121
-rw-r--r--nixpkgs/pkgs/tools/misc/umlet/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/misc/unclutter-xfixes/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/unclutter/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/unicode/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/units/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/up/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/upower-notify/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/upower-notify/deps.nix11
-rw-r--r--nixpkgs/pkgs/tools/misc/urjtag/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/usbmuxd/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/uucp/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/uudeview/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/uudeview/matherr.patch19
-rw-r--r--nixpkgs/pkgs/tools/misc/uutils-coreutils/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/vcs_query/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/vdirsyncer/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/misc/vdirsyncer/stable.nix52
-rw-r--r--nixpkgs/pkgs/tools/misc/vector/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/venus/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/vimer/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/vimpager/build.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/vimpager/default.nix6
-rw-r--r--nixpkgs/pkgs/tools/misc/vimpager/latest.nix7
-rw-r--r--nixpkgs/pkgs/tools/misc/vimwiki-markdown/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/vivid/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/vmtouch/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/void/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/vorbisgain/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/vttest/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/wacomtablet/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/wagyu/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/wakatime/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/watchexec/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/websocat/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/wev/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/wl-clipboard/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/wlr-randr/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/wob/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/woeusb/default.nix60
-rw-r--r--nixpkgs/pkgs/tools/misc/woeusb/remove-workaround.patch82
-rw-r--r--nixpkgs/pkgs/tools/misc/woof/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/wv/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/wv2/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/wv2/fix-include.patch12
-rw-r--r--nixpkgs/pkgs/tools/misc/wyrd/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/x11idle/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/xburst-tools/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/xclip/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/xdaliclock/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/xdo/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/xdummy/default.nix82
-rw-r--r--nixpkgs/pkgs/tools/misc/xdxf2slob/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/xflux/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/xflux/gui.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/xfstests/default.nix110
-rw-r--r--nixpkgs/pkgs/tools/misc/xiccd/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/xilinx-bootgen/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/xmonad-log/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/xmonad-log/deps.nix12
-rw-r--r--nixpkgs/pkgs/tools/misc/xprite-editor/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/xsel/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/xtitle/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/xv/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/xvfb-run/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/yad/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/misc/yank/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/yle-dl/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/you-get/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/youtube-dl/default.nix70
-rw-r--r--nixpkgs/pkgs/tools/misc/yubico-piv-tool/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/yubikey-manager-qt/default.nix66
-rw-r--r--nixpkgs/pkgs/tools/misc/yubikey-manager/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/misc/yubikey-neo-manager/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/yubikey-neo-manager/fix-pyside-requirement.diff17
-rw-r--r--nixpkgs/pkgs/tools/misc/yubikey-personalization-gui/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/yubikey-personalization/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/z-lua/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/zabbix-cli/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/zabbixctl/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/zabbixctl/deps.nix111
-rw-r--r--nixpkgs/pkgs/tools/misc/zsh-autoenv/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/zsh-navigation-tools/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/networking/6tunnel/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/networking/acme-client/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/networking/ahcpd/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/networking/aircrack-ng/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/networking/airfield/default.nix70
-rw-r--r--nixpkgs/pkgs/tools/networking/airfield/deps.json8
-rwxr-xr-xnixpkgs/pkgs/tools/networking/airfield/deps.sh6
-rw-r--r--nixpkgs/pkgs/tools/networking/airfield/node-packages.nix849
-rw-r--r--nixpkgs/pkgs/tools/networking/airfield/node.nix17
-rw-r--r--nixpkgs/pkgs/tools/networking/altermime/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/networking/amass/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/networking/argus-clients/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/networking/argus/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/networking/aria2/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/networking/arping/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/networking/arpoison/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/networking/assh/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/asynk/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/networking/atftp/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/networking/atinout/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/networking/autossh/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/axel/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/networking/babeld/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/networking/badvpn/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/networking/badvpn/default.upstream3
-rw-r--r--nixpkgs/pkgs/tools/networking/bandwhich/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/networking/bgpdump/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/networking/biosdevname/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/networking/biosdevname/makefile.patch13
-rw-r--r--nixpkgs/pkgs/tools/networking/boringtun/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/networking/brook/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/networking/brook/deps.nix119
-rw-r--r--nixpkgs/pkgs/tools/networking/bsd-finger/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/networking/bsd-finger/ubuntu-0.17-9.patch261
-rw-r--r--nixpkgs/pkgs/tools/networking/bud/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/networking/bukubrow/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/networking/bully/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/networking/burpsuite/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/networking/bwm-ng/default.nix79
-rw-r--r--nixpkgs/pkgs/tools/networking/cadaver/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/networking/carddav-util/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/networking/cassowary/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/networking/ccnet/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/networking/chrony/allow-clock_adjtime.patch26
-rw-r--r--nixpkgs/pkgs/tools/networking/chrony/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/networking/chrony/fix-seccomp-build.patch13
-rw-r--r--nixpkgs/pkgs/tools/networking/circus/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/networking/cjdns/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/networking/cksfv/default.nix17
-rw-r--r--nixpkgs/pkgs/tools/networking/clash/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/networking/cloud-custodian/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/networking/cmst/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/networking/cntlm/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/networking/connect/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/networking/connman/connman-gtk/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/networking/connman/connman-ncurses/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/networking/connman/connman-notify/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/networking/connman/connman_dmenu/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/networking/connman/connmanui/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/connman/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/networking/corerad/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/networking/corkscrew/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/networking/croc/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/networking/curl-unix-socket/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/curl/default.nix126
-rw-r--r--nixpkgs/pkgs/tools/networking/curlie/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/networking/cutter/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/networking/darkstat/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/davix/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/dd-agent/40103-iostat-fix.patch30
-rw-r--r--nixpkgs/pkgs/tools/networking/dd-agent/5.nix112
-rw-r--r--nixpkgs/pkgs/tools/networking/dd-agent/README.md17
-rw-r--r--nixpkgs/pkgs/tools/networking/dd-agent/datadog-agent-deps.nix1353
-rw-r--r--nixpkgs/pkgs/tools/networking/dd-agent/datadog-agent.nix81
-rw-r--r--nixpkgs/pkgs/tools/networking/dd-agent/datadog-process-agent-deps.nix669
-rw-r--r--nixpkgs/pkgs/tools/networking/dd-agent/datadog-process-agent.nix25
-rw-r--r--nixpkgs/pkgs/tools/networking/dd-agent/integrations-core.nix91
-rw-r--r--nixpkgs/pkgs/tools/networking/ddclient/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/networking/dhcp/default.nix89
-rw-r--r--nixpkgs/pkgs/tools/networking/dhcp/set-hostname.patch12
-rw-r--r--nixpkgs/pkgs/tools/networking/dhcpcd/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/networking/dhcpdump/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/networking/dhcping/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/networking/dibbler/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/networking/dirb/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/networking/djbdns/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/networking/djbdns/fix-nix-usernamespace-build.patch10
-rw-r--r--nixpkgs/pkgs/tools/networking/djbdns/hier.patch15
-rw-r--r--nixpkgs/pkgs/tools/networking/dnscrypt-proxy/1.x/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/networking/dnscrypt-proxy/2.x/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/networking/dnscrypt-wrapper/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/networking/dnsmasq/default.nix84
-rw-r--r--nixpkgs/pkgs/tools/networking/dnsperf/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/networking/dnsproxy/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/networking/dnstop/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/networking/dnstracer/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/driftnet/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/dropbear/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/networking/dropbear/pass-path.patch36
-rw-r--r--nixpkgs/pkgs/tools/networking/dsniff/default.nix82
-rw-r--r--nixpkgs/pkgs/tools/networking/easyrsa/2.x.nix38
-rw-r--r--nixpkgs/pkgs/tools/networking/easyrsa/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/networking/easyrsa/fix-paths.patch33
-rw-r--r--nixpkgs/pkgs/tools/networking/eggdrop/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/networking/email/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/networking/eternal-terminal/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/networking/fakeroute/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/networking/fastd/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/fdm/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/networking/ferm/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/networking/filegive/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/networking/filegive/deps.nix12
-rw-r--r--nixpkgs/pkgs/tools/networking/findomain/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/networking/flannel/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/networking/flvstreamer/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/networking/fping/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/networking/freebind/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/networking/frp/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/gandi-cli/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/networking/getmail/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/networking/gftp/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/networking/gmrender-resurrect/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/networking/gmvault/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/gmvault/gmvault.py4
-rw-r--r--nixpkgs/pkgs/tools/networking/gnirehtet/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/networking/gnirehtet/paths.patch48
-rw-r--r--nixpkgs/pkgs/tools/networking/go-shadowsocks2/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/networking/go-shadowsocks2/deps.nix30
-rw-r--r--nixpkgs/pkgs/tools/networking/goklp/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/networking/goklp/deps.nix56
-rw-r--r--nixpkgs/pkgs/tools/networking/gping/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/networking/grpcui/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/networking/grpcurl/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/networking/grpcurl/deps-darwin.nix57
-rw-r--r--nixpkgs/pkgs/tools/networking/grpcurl/deps-linux.nix66
-rw-r--r--nixpkgs/pkgs/tools/networking/guardian-agent/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/networking/guardian-agent/deps.nix58
-rw-r--r--nixpkgs/pkgs/tools/networking/gupnp-tools/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/networking/gvpe/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/gvpe/gvpe-3.0-glibc-2.26.patch18
-rw-r--r--nixpkgs/pkgs/tools/networking/hans/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/networking/haproxy/default.nix69
-rw-r--r--nixpkgs/pkgs/tools/networking/horst/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/networking/hping/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/networking/hss/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/htpdate/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/networking/http-prompt/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/httperf/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/networking/httpie/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/networking/httpie/strip-venv.patch19
-rw-r--r--nixpkgs/pkgs/tools/networking/httping/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/httplab/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/networking/httplz/cargo-lock.patch1196
-rw-r--r--nixpkgs/pkgs/tools/networking/httplz/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/networking/httpstat/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/networking/httptunnel/default.nix19
-rw-r--r--nixpkgs/pkgs/tools/networking/hue-cli/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/networking/hue-cli/Gemfile.lock18
-rw-r--r--nixpkgs/pkgs/tools/networking/hue-cli/default.nix17
-rw-r--r--nixpkgs/pkgs/tools/networking/hue-cli/gemset.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/hyenae/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/networking/i2p/default.nix82
-rw-r--r--nixpkgs/pkgs/tools/networking/i2p/i2p.patch43
-rw-r--r--nixpkgs/pkgs/tools/networking/i2pd/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/networking/ifstat-legacy/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/networking/iftop/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/networking/imapproxy/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/networking/imapsync/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/inadyn/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/networking/inetutils/default.nix60
-rw-r--r--nixpkgs/pkgs/tools/networking/inetutils/inetutils-1_9-PATH_PROCNET_DEV.patch26
-rw-r--r--nixpkgs/pkgs/tools/networking/inetutils/service-name.patch11
-rw-r--r--nixpkgs/pkgs/tools/networking/inetutils/whois-Update-Canadian-TLD-server.patch27
-rw-r--r--nixpkgs/pkgs/tools/networking/iodine/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/networking/iouyap/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/networking/ip2location/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/networking/ip2unix/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/networking/ipcalc/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/networking/iperf/2.nix28
-rw-r--r--nixpkgs/pkgs/tools/networking/iperf/3.nix38
-rw-r--r--nixpkgs/pkgs/tools/networking/ipgrep/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/networking/ipv6calc/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/networking/isync/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/networking/jnettop/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/networking/jnettop/no-dns-resolution.patch13
-rw-r--r--nixpkgs/pkgs/tools/networking/junkie/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/networking/jwhois/connect.patch60
-rw-r--r--nixpkgs/pkgs/tools/networking/jwhois/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/networking/jwhois/service-name.patch17
-rw-r--r--nixpkgs/pkgs/tools/networking/kail/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/kail/deps.nix408
-rw-r--r--nixpkgs/pkgs/tools/networking/kea/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/networking/kea/dont-create-var.patch26
-rw-r--r--nixpkgs/pkgs/tools/networking/keepalived/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/networking/lftp/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/networking/libnids/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/libreswan/default.nix92
-rw-r--r--nixpkgs/pkgs/tools/networking/linkchecker/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/networking/lldpd/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/networking/logmein-hamachi/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/networking/lsh/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/networking/lsh/lshd-no-root-login.patch16
-rw-r--r--nixpkgs/pkgs/tools/networking/lsh/pam-service-name.patch14
-rw-r--r--nixpkgs/pkgs/tools/networking/maildrop/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/networking/maildrop/maildrop.configure.hack.patch13
-rw-r--r--nixpkgs/pkgs/tools/networking/mailsend/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/networking/mailsend/default.upstream3
-rw-r--r--nixpkgs/pkgs/tools/networking/mailutils/default.nix120
-rw-r--r--nixpkgs/pkgs/tools/networking/mailutils/fix-build-mb-len-max.patch14
-rw-r--r--nixpkgs/pkgs/tools/networking/mailutils/path-to-cat.patch52
-rw-r--r--nixpkgs/pkgs/tools/networking/maphosts/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/networking/maphosts/Gemfile.lock19
-rw-r--r--nixpkgs/pkgs/tools/networking/maphosts/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/networking/maphosts/gemset.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/maxscale/default.nix87
-rw-r--r--nixpkgs/pkgs/tools/networking/maxscale/getopt.patch11
-rw-r--r--nixpkgs/pkgs/tools/networking/mcrcon/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/networking/megatools/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/networking/memtier-benchmark/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/minidlna/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/networking/minio-client/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/networking/minissdpd/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/networking/miniupnpc/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/networking/miniupnpc/freebsd.patch11
-rw-r--r--nixpkgs/pkgs/tools/networking/miniupnpd/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/networking/miredo/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/mitmproxy/default.nix83
-rw-r--r--nixpkgs/pkgs/tools/networking/mitmproxy/pytest5.patch31
-rw-r--r--nixpkgs/pkgs/tools/networking/mmsd/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/networking/modem-manager/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/networking/mosh/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/networking/mosh/ssh_path.patch13
-rw-r--r--nixpkgs/pkgs/tools/networking/mosh/utempter_path.patch14
-rw-r--r--nixpkgs/pkgs/tools/networking/mpack/build-fix.patch29
-rw-r--r--nixpkgs/pkgs/tools/networking/mpack/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/networking/mpack/sendmail-via-execvp.diff12
-rw-r--r--nixpkgs/pkgs/tools/networking/mtr/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/networking/mu/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/networking/nat-traverse/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/networking/nbd/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/networking/ncftp/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/networking/ndisc6/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/ndjbdns/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/nebula/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/networking/netalyzr/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/networking/netboot/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/networking/netcat/default.nix17
-rw-r--r--nixpkgs/pkgs/tools/networking/nethogs/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/networking/netkit/tftp/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/networking/netmask/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/networking/netrw/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/networking/netselect/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/netsniff-ng/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/networking/nettee/default.nix68
-rw-r--r--nixpkgs/pkgs/tools/networking/network-manager/0.9.8/default.nix64
-rw-r--r--nixpkgs/pkgs/tools/networking/network-manager/0.9.8/libnl-3.2.25.patch61
-rw-r--r--nixpkgs/pkgs/tools/networking/network-manager/0.9.8/nixos-purity.patch77
-rw-r--r--nixpkgs/pkgs/tools/networking/network-manager/applet.nix60
-rw-r--r--nixpkgs/pkgs/tools/networking/network-manager/default.nix110
-rw-r--r--nixpkgs/pkgs/tools/networking/network-manager/dmenu.nix40
-rw-r--r--nixpkgs/pkgs/tools/networking/network-manager/fix-install-paths.patch29
-rw-r--r--nixpkgs/pkgs/tools/networking/network-manager/fix-paths.patch97
-rw-r--r--nixpkgs/pkgs/tools/networking/network-manager/fortisslvpn/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/networking/network-manager/fortisslvpn/fix-paths.patch11
-rw-r--r--nixpkgs/pkgs/tools/networking/network-manager/hardcode-gsettings.patch32
-rw-r--r--nixpkgs/pkgs/tools/networking/network-manager/iodine/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/networking/network-manager/iodine/fix-paths.patch11
-rw-r--r--nixpkgs/pkgs/tools/networking/network-manager/l2tp/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/networking/network-manager/l2tp/fix-paths.patch22
-rw-r--r--nixpkgs/pkgs/tools/networking/network-manager/openconnect/default.nix80
-rw-r--r--nixpkgs/pkgs/tools/networking/network-manager/openconnect/fix-paths.patch20
-rw-r--r--nixpkgs/pkgs/tools/networking/network-manager/openvpn/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/networking/network-manager/openvpn/fix-paths.patch34
-rw-r--r--nixpkgs/pkgs/tools/networking/network-manager/strongswan.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/network-manager/vpnc/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/networking/network-manager/vpnc/fix-paths.patch31
-rw-r--r--nixpkgs/pkgs/tools/networking/nfdump/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/networking/nfstrace/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/networking/ngrep/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/networking/ngrok-1/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/networking/ngrok-1/deps.nix101
-rw-r--r--nixpkgs/pkgs/tools/networking/ngrok-2/default.nix49
-rwxr-xr-xnixpkgs/pkgs/tools/networking/ngrok-2/update.sh33
-rw-r--r--nixpkgs/pkgs/tools/networking/ngrok-2/versions.json32
-rw-r--r--nixpkgs/pkgs/tools/networking/noip/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/networking/nss-mdns/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/networking/nss-pam-ldapd/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/networking/ntopng/0001-Undo-weird-modification-of-data_dir.patch12
-rw-r--r--nixpkgs/pkgs/tools/networking/ntopng/0002-Remove-requirement-to-have-writeable-callback-dir.patch14
-rw-r--r--nixpkgs/pkgs/tools/networking/ntopng/0003-New-libpcap-defines-SOCKET.patch34
-rw-r--r--nixpkgs/pkgs/tools/networking/ntopng/default.nix67
-rw-r--r--nixpkgs/pkgs/tools/networking/ntp/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/networking/ntp/seccomp.patch57
-rw-r--r--nixpkgs/pkgs/tools/networking/nuttcp/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/networking/nylon/configure-use-solib.patch33
-rw-r--r--nixpkgs/pkgs/tools/networking/nylon/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/networking/nyx/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/networking/nzbget/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/networking/obfs4/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/networking/ocproxy/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/networking/ocserv/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/networking/offlineimap/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/networking/ofono/0001-Search-connectors-in-OFONO_PLUGIN_PATH.patch120
-rw-r--r--nixpkgs/pkgs/tools/networking/ofono/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/networking/olsrd/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/networking/openapi-generator-cli/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/openconnect/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/networking/openconnect_pa/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/networking/openfortivpn/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/openntpd/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/networking/openresolv/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/networking/opensm/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/networking/openssh/default.nix113
-rw-r--r--nixpkgs/pkgs/tools/networking/openssh/dont_create_privsep_path.patch12
-rw-r--r--nixpkgs/pkgs/tools/networking/openssh/locale_archive.patch15
-rw-r--r--nixpkgs/pkgs/tools/networking/openssh/ssh-keysign.patch28
-rw-r--r--nixpkgs/pkgs/tools/networking/openvpn/default.nix78
-rw-r--r--nixpkgs/pkgs/tools/networking/openvpn/openvpn-auth-ldap.nix76
-rw-r--r--nixpkgs/pkgs/tools/networking/openvpn/openvpn_learnaddress.nix27
-rw-r--r--nixpkgs/pkgs/tools/networking/openvpn/update-resolv-conf.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/openvpn/update-systemd-resolved.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/p2p/amule/default.nix95
-rw-r--r--nixpkgs/pkgs/tools/networking/p2p/azureus/builder.sh19
-rw-r--r--nixpkgs/pkgs/tools/networking/p2p/azureus/default.nix16
-rw-r--r--nixpkgs/pkgs/tools/networking/p2p/gtk-gnutella/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/networking/p2p/libtorrent/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/networking/p2p/rtorrent/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/networking/p2p/seeks/default.nix69
-rw-r--r--nixpkgs/pkgs/tools/networking/p2p/tahoe-lafs/default.nix95
-rw-r--r--nixpkgs/pkgs/tools/networking/packetdrill/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/networking/packetdrill/nix.patch24
-rw-r--r--nixpkgs/pkgs/tools/networking/pacparser/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/networking/par2cmdline/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/networking/pcapc/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/networking/pcapfix/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/networking/pdnsd/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/networking/pdsh/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/networking/persepolis/default.nix60
-rw-r--r--nixpkgs/pkgs/tools/networking/philter/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/networking/phodav/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/networking/photon/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/photon/destdir.patch20
-rw-r--r--nixpkgs/pkgs/tools/networking/pingtcp/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/pirate-get/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/networking/pixiewps/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/networking/pmacct/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/networking/polygraph/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/networking/polysh/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/networking/ppp/default.nix69
-rw-r--r--nixpkgs/pkgs/tools/networking/ppp/musl-fix-headers.patch137
-rw-r--r--nixpkgs/pkgs/tools/networking/ppp/nix-purity.patch22
-rw-r--r--nixpkgs/pkgs/tools/networking/ppp/nonpriv.patch13
-rw-r--r--nixpkgs/pkgs/tools/networking/pptp/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/pptpd/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/networking/prettyping/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/networking/privoxy/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/networking/proxychains/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/networking/pssh/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/pwnat/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/networking/py-wmi-client/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/networking/pykms/default.nix92
-rw-r--r--nixpkgs/pkgs/tools/networking/qr-filetransfer/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/networking/qr-filetransfer/deps.nix66
-rw-r--r--nixpkgs/pkgs/tools/networking/quickserve/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/networking/quicktun/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/networking/quicktun/tar-1.30.diff19
-rw-r--r--nixpkgs/pkgs/tools/networking/radsecproxy/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/networking/radvd/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/networking/ratools/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/networking/reaver-wps-t6x/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/networking/reaver-wps/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/networking/redir/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/networking/redsocks/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/networking/ripmime/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/networking/rp-pppoe/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/networking/s3cmd/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/networking/s3gof3r/default.nix17
-rw-r--r--nixpkgs/pkgs/tools/networking/s3gof3r/deps.nix11
-rw-r--r--nixpkgs/pkgs/tools/networking/s4cmd/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/networking/s6-dns/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/networking/s6-networking/default.nix67
-rw-r--r--nixpkgs/pkgs/tools/networking/saldl/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/networking/samplicator/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/networking/servefile/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/networking/shadowfox/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/networking/shadowsocks-libev/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/networking/shadowsocks-rust/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/networking/shncpd/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/networking/shorewall/default.nix130
-rw-r--r--nixpkgs/pkgs/tools/networking/siege/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/networking/simpleproxy/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/networking/sipcalc/default.nix19
-rw-r--r--nixpkgs/pkgs/tools/networking/sipsak/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/networking/slack-cli/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/networking/slimrat/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/networking/slirp4netns/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/networking/smokeping/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/networking/snabb/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/networking/socat/2.x.nix24
-rw-r--r--nixpkgs/pkgs/tools/networking/socat/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/networking/socat/libressl-fixes.patch173
-rw-r--r--nixpkgs/pkgs/tools/networking/socat/speed-type-fix.patch13
-rw-r--r--nixpkgs/pkgs/tools/networking/spiped/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/networking/spoofer/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/networking/srelay/arm.patch12
-rw-r--r--nixpkgs/pkgs/tools/networking/srelay/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/networking/ssh-agents/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/networking/ssh-ident/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/networking/sshoogr/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/networking/sshpass/default.nix19
-rw-r--r--nixpkgs/pkgs/tools/networking/sshping/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/ssldump/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/networking/sslsplit/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/ssmtp/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/networking/ssmtp/ssmtp_support_AuthPassFile_parameter.patch69
-rw-r--r--nixpkgs/pkgs/tools/networking/sstp/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/strongswan/default.nix114
-rw-r--r--nixpkgs/pkgs/tools/networking/strongswan/ext_auth-path.patch13
-rw-r--r--nixpkgs/pkgs/tools/networking/strongswan/firewall_defaults.patch32
-rw-r--r--nixpkgs/pkgs/tools/networking/strongswan/updown-path.patch26
-rw-r--r--nixpkgs/pkgs/tools/networking/stubby/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/networking/stun/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/networking/stunnel/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/networking/subfinder/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/networking/subfinder/deps.nix165
-rw-r--r--nixpkgs/pkgs/tools/networking/surfraw/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/networking/swagger-codegen/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/networking/swaks/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/networking/swec/default.nix72
-rw-r--r--nixpkgs/pkgs/tools/networking/tayga/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/networking/tcpdump/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/tcpflow/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/networking/tcpreplay/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/tcptraceroute/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/networking/tdns-cli/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/networking/telepresence/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/networking/tendermint/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/networking/termshark/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/networking/tftp-hpa/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/networking/tgt/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/networking/tinc/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/tinc/pre.nix52
-rw-r--r--nixpkgs/pkgs/tools/networking/tinyfecvpn/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/networking/tinyproxy/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/networking/tlspool/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/networking/tox-node/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/networking/toxvpn/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/networking/tracebox/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/networking/traceroute/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/networking/trickle/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/networking/tridactyl-native/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/networking/twa/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/networking/ua/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/ua/deps.nix57
-rw-r--r--nixpkgs/pkgs/tools/networking/ubridge/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/networking/ucspi-tcp/default.nix86
-rw-r--r--nixpkgs/pkgs/tools/networking/ucspi-tcp/remove-setuid.patch15
-rw-r--r--nixpkgs/pkgs/tools/networking/udptunnel/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/networking/uget-integrator/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/networking/uget/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/networking/unbound/default.nix64
-rw-r--r--nixpkgs/pkgs/tools/networking/unbound/python.nix65
-rw-r--r--nixpkgs/pkgs/tools/networking/uqmi/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/networking/urlwatch/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/uwimap/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/networking/v2ray/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/networking/v2ray/generic.nix50
-rwxr-xr-xnixpkgs/pkgs/tools/networking/v2ray/update.sh53
-rw-r--r--nixpkgs/pkgs/tools/networking/vde2/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/vlan/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/networking/vpnc/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/networking/vpnc/makefile.patch22
-rw-r--r--nixpkgs/pkgs/tools/networking/vpnc/no_default_route_when_netmask.patch12
-rw-r--r--nixpkgs/pkgs/tools/networking/vtun/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/networking/wakelan/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/networking/wavemon/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/networking/wbox/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/networking/webalizer/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/weighttp/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/networking/wget/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/networking/wget/remove-runtime-dep-on-openssl-headers.patch17
-rw-r--r--nixpkgs/pkgs/tools/networking/whois/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/networking/wicd/default.nix121
-rw-r--r--nixpkgs/pkgs/tools/networking/wicd/dhclient.patch120
-rw-r--r--nixpkgs/pkgs/tools/networking/wicd/fix-app-icon.patch19
-rw-r--r--nixpkgs/pkgs/tools/networking/wicd/fix-curses.patch15
-rw-r--r--nixpkgs/pkgs/tools/networking/wicd/fix-gtk-issues.patch47
-rw-r--r--nixpkgs/pkgs/tools/networking/wicd/no-optimization.patch21
-rw-r--r--nixpkgs/pkgs/tools/networking/wicd/no-var-install.patch17
-rw-r--r--nixpkgs/pkgs/tools/networking/wicd/pygtk.patch15
-rw-r--r--nixpkgs/pkgs/tools/networking/wicd/urwid-api-update.patch21
-rw-r--r--nixpkgs/pkgs/tools/networking/wicd/wpa2-ttls20
-rw-r--r--nixpkgs/pkgs/tools/networking/wifite2/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/networking/wireguard-go/0001-Fix-darwin-build.patch26
-rw-r--r--nixpkgs/pkgs/tools/networking/wireguard-go/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/networking/wireguard-go/deps.nix48
-rwxr-xr-xnixpkgs/pkgs/tools/networking/wireguard-go/update.sh14
-rw-r--r--nixpkgs/pkgs/tools/networking/wireguard-tools/default.nix60
-rwxr-xr-xnixpkgs/pkgs/tools/networking/wireguard-tools/update.sh7
-rw-r--r--nixpkgs/pkgs/tools/networking/wol/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/networking/wolfebin/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/networking/wrk/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/networking/wrk2/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/networking/wstunnel/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/networking/wuzz/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/networking/wuzz/deps.nix92
-rw-r--r--nixpkgs/pkgs/tools/networking/x11-ssh-askpass/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/networking/xl2tpd/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/networking/xnbd/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/networking/yggdrasil/change-runtime-dir.patch12
-rw-r--r--nixpkgs/pkgs/tools/networking/yggdrasil/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/networking/yrd/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/networking/ytcc/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/networking/zap/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/networking/zerotierone/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/networking/zssh/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/nix/info/default.nix45
-rwxr-xr-xnixpkgs/pkgs/tools/nix/info/info.sh169
-rw-r--r--nixpkgs/pkgs/tools/nix/info/multiuser.nix12
-rw-r--r--nixpkgs/pkgs/tools/nix/info/relaxedsandbox.nix12
-rw-r--r--nixpkgs/pkgs/tools/nix/info/sandbox.nix10
-rw-r--r--nixpkgs/pkgs/tools/nix/nix-script/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/nix/nix-store-gcs-proxy/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/nix/nix-store-gcs-proxy/deps.nix813
-rw-r--r--nixpkgs/pkgs/tools/nix/nixdoc/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/nix/nixos-generators/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/nix/nixpkgs-fmt/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/package-management/appimage-run/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/package-management/appimagekit/default.nix123
-rw-r--r--nixpkgs/pkgs/tools/package-management/appimagekit/nix.patch174
-rw-r--r--nixpkgs/pkgs/tools/package-management/apt-dater/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/package-management/apt/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/package-management/bunny/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/package-management/cargo-audit/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/package-management/cargo-deb/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/package-management/cargo-deps/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/package-management/cargo-download/Cargo.nix675
-rw-r--r--nixpkgs/pkgs/tools/package-management/cargo-download/crates-io.nix5289
-rw-r--r--nixpkgs/pkgs/tools/package-management/cargo-download/default.nix14
-rw-r--r--nixpkgs/pkgs/tools/package-management/cargo-edit/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/package-management/cargo-graph/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/package-management/cargo-license/add-Cargo.lock.patch435
-rw-r--r--nixpkgs/pkgs/tools/package-management/cargo-license/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/package-management/cargo-outdated/cargo-lock.patch1283
-rw-r--r--nixpkgs/pkgs/tools/package-management/cargo-outdated/default.nix32
-rwxr-xr-xnixpkgs/pkgs/tools/package-management/cargo-outdated/update-cargo-lock.sh18
-rw-r--r--nixpkgs/pkgs/tools/package-management/cargo-release/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/package-management/cargo-tree/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/package-management/cargo-update/cargo-update.nix1334
-rw-r--r--nixpkgs/pkgs/tools/package-management/cargo-update/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/package-management/cde/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/package-management/checkinstall/default.nix74
-rw-r--r--nixpkgs/pkgs/tools/package-management/checkinstall/empty-dirs.patch49
-rw-r--r--nixpkgs/pkgs/tools/package-management/checkinstall/etc-dirs.patch25
-rw-r--r--nixpkgs/pkgs/tools/package-management/checkinstall/glibc-check.patch71
-rw-r--r--nixpkgs/pkgs/tools/package-management/checkinstall/missing-functions.patch162
-rw-r--r--nixpkgs/pkgs/tools/package-management/checkinstall/readlink-types.patch19
-rw-r--r--nixpkgs/pkgs/tools/package-management/checkinstall/scandir.patch75
-rw-r--r--nixpkgs/pkgs/tools/package-management/checkinstall/set-buildroot.patch15
-rw-r--r--nixpkgs/pkgs/tools/package-management/checkinstall/use-old-memcpy.patch12
-rw-r--r--nixpkgs/pkgs/tools/package-management/clib/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/package-management/conda/default.nix74
-rw-r--r--nixpkgs/pkgs/tools/package-management/createrepo_c/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/package-management/createrepo_c/fix-bash-completion-path.patch11
-rw-r--r--nixpkgs/pkgs/tools/package-management/createrepo_c/fix-python-install-path.patch11
-rw-r--r--nixpkgs/pkgs/tools/package-management/disnix/DisnixWebService/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/package-management/disnix/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/package-management/disnix/disnixos/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/package-management/disnix/dysnomia/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/package-management/dpkg/default.nix74
-rw-r--r--nixpkgs/pkgs/tools/package-management/elm-github-install/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/package-management/elm-github-install/Gemfile.lock39
-rw-r--r--nixpkgs/pkgs/tools/package-management/elm-github-install/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/package-management/elm-github-install/gemset.nix114
-rw-r--r--nixpkgs/pkgs/tools/package-management/emplace/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/package-management/fpm/Gemfile3
-rw-r--r--nixpkgs/pkgs/tools/package-management/fpm/Gemfile.lock47
-rw-r--r--nixpkgs/pkgs/tools/package-management/fpm/default.nix17
-rw-r--r--nixpkgs/pkgs/tools/package-management/fpm/gemset.nix157
-rw-r--r--nixpkgs/pkgs/tools/package-management/gx/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/package-management/gx/deps.nix246
-rw-r--r--nixpkgs/pkgs/tools/package-management/gx/go/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/package-management/gx/go/deps.nix246
-rw-r--r--nixpkgs/pkgs/tools/package-management/home-manager/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/package-management/librepo/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/package-management/morph/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/package-management/morph/deps.nix66
-rw-r--r--nixpkgs/pkgs/tools/package-management/mynewt-newt/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/package-management/mynewt-newt/deps.nix101
-rw-r--r--nixpkgs/pkgs/tools/package-management/nfpm/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/package-management/niff/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/package-management/nix-bundle/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/package-management/nix-du/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/package-management/nix-index/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/package-management/nix-pin/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/package-management/nix-prefetch-scripts/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/package-management/nix-prefetch/default.nix67
-rw-r--r--nixpkgs/pkgs/tools/package-management/nix-serve/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/package-management/nix-top/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/package-management/nix-universal-prefetch/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/package-management/nix-update-source/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/package-management/nix/default.nix216
-rw-r--r--nixpkgs/pkgs/tools/package-management/nixops/azure-mgmt-compute/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/package-management/nixops/azure-mgmt-network/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/package-management/nixops/azure-mgmt-nspkg/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/package-management/nixops/azure-mgmt-resource/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/package-management/nixops/azure-mgmt-storage/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/package-management/nixops/azure-storage/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/package-management/nixops/default.nix9
-rw-r--r--nixpkgs/pkgs/tools/package-management/nixops/deps.nix20
-rw-r--r--nixpkgs/pkgs/tools/package-management/nixops/generic.nix55
-rw-r--r--nixpkgs/pkgs/tools/package-management/nixops/nixops-dns.nix25
-rw-r--r--nixpkgs/pkgs/tools/package-management/nixops/nixops-v1_6_1.nix32
-rw-r--r--nixpkgs/pkgs/tools/package-management/nixops/unstable.nix13
-rw-r--r--nixpkgs/pkgs/tools/package-management/nixpkgs-review/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/package-management/nixui/default.nix44
-rwxr-xr-xnixpkgs/pkgs/tools/package-management/nixui/generate.sh4
-rw-r--r--nixpkgs/pkgs/tools/package-management/nixui/nixui.nix17
-rw-r--r--nixpkgs/pkgs/tools/package-management/nixui/node-packages.nix108
-rw-r--r--nixpkgs/pkgs/tools/package-management/nixui/pkg.json3
-rw-r--r--nixpkgs/pkgs/tools/package-management/nox/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/package-management/nox/nox-review-wip.patch11
-rw-r--r--nixpkgs/pkgs/tools/package-management/opkg-utils/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/package-management/opkg/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/package-management/packagekit/default.nix74
-rw-r--r--nixpkgs/pkgs/tools/package-management/packagekit/qt.nix24
-rw-r--r--nixpkgs/pkgs/tools/package-management/pacman/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/package-management/protontricks/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/package-management/python2nix/default.nix19
-rw-r--r--nixpkgs/pkgs/tools/package-management/reuse/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/package-management/rpm/default.nix70
-rw-r--r--nixpkgs/pkgs/tools/package-management/xbps/cert-paths.patch25
-rw-r--r--nixpkgs/pkgs/tools/package-management/xbps/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/security/2fa/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/security/acsccid/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/security/aespipe/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/security/afl/README.md19
-rw-r--r--nixpkgs/pkgs/tools/security/afl/default.nix77
-rw-r--r--nixpkgs/pkgs/tools/security/afl/libdislocator.nix34
-rw-r--r--nixpkgs/pkgs/tools/security/afl/qemu-patches/no-etc-install.patch13
-rw-r--r--nixpkgs/pkgs/tools/security/afl/qemu.nix77
-rw-r--r--nixpkgs/pkgs/tools/security/age/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/security/aide/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/security/apg/apg.patch44
-rw-r--r--nixpkgs/pkgs/tools/security/apg/default.nix72
-rw-r--r--nixpkgs/pkgs/tools/security/apg/phony-install-target.patch11
-rw-r--r--nixpkgs/pkgs/tools/security/asc-key-to-qr-code-gif/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/security/aws-iam-authenticator/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/security/aws-okta/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/security/aws-okta/deps.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/b2sum/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/bash-supergenpass/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/security/bettercap/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/security/bettercap/deps.nix534
-rw-r--r--nixpkgs/pkgs/tools/security/bitwarden/default.nix87
-rw-r--r--nixpkgs/pkgs/tools/security/bitwarden_rs/cargo-lock-lettre.patch58
-rw-r--r--nixpkgs/pkgs/tools/security/bitwarden_rs/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/security/bitwarden_rs/vault.nix25
-rw-r--r--nixpkgs/pkgs/tools/security/bmrsa/11.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/browserpass/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/security/bruteforce-luks/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/security/bundler-audit/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/security/bundler-audit/Gemfile.lock16
-rw-r--r--nixpkgs/pkgs/tools/security/bundler-audit/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/security/bundler-audit/gemset.nix19
-rw-r--r--nixpkgs/pkgs/tools/security/ccid/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/security/ccrypt/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/security/certmgr/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/security/certstrap/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/security/cfssl/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/security/chaps/default.nix91
-rw-r--r--nixpkgs/pkgs/tools/security/chaps/fix_absolute_path.patch18
-rw-r--r--nixpkgs/pkgs/tools/security/chaps/fix_environment_variables.patch42
-rw-r--r--nixpkgs/pkgs/tools/security/chaps/fix_scons.patch26
-rw-r--r--nixpkgs/pkgs/tools/security/chaps/insert_prefetches.patch51
-rw-r--r--nixpkgs/pkgs/tools/security/chipsec/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/security/chkrootkit/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/security/chntpw/00-chntpw-build-arch-autodetect.patch25
-rw-r--r--nixpkgs/pkgs/tools/security/chntpw/01-chntpw-install-target.patch26
-rw-r--r--nixpkgs/pkgs/tools/security/chntpw/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/security/chrome-token-signing/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/security/cipherscan/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/security/clamav/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/security/cowpatty/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/security/crackxls/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/crunch/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/ctmg/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/security/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/security/diceware/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/security/dirmngr/default.nix17
-rw-r--r--nixpkgs/pkgs/tools/security/dnsenum/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/security/dnsrecon/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/security/doas/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/security/duo-unix/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/security/ecdsautils/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/security/ecryptfs/default.nix60
-rw-r--r--nixpkgs/pkgs/tools/security/ecryptfs/helper.nix34
-rw-r--r--nixpkgs/pkgs/tools/security/efitools/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/security/eid-mw/default.nix88
-rw-r--r--nixpkgs/pkgs/tools/security/eid-mw/eid-nssdb.in83
-rw-r--r--nixpkgs/pkgs/tools/security/enchive/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/security/encryptr/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/security/enpass/data.json12
-rw-r--r--nixpkgs/pkgs/tools/security/enpass/default.nix94
-rw-r--r--nixpkgs/pkgs/tools/security/enpass/update_script.py95
-rw-r--r--nixpkgs/pkgs/tools/security/eschalot/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/security/fail2ban/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/security/fcrackzip/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/security/fcrackzip/fcrackzip_forkexec.patch105
-rw-r--r--nixpkgs/pkgs/tools/security/fido2luks/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/security/fierce/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/security/fpm2/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/security/fprintd/default.nix64
-rw-r--r--nixpkgs/pkgs/tools/security/fprot/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/security/fwknop/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/security/gen-oath-safe/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/security/gencfsm/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/security/gencfsm/makefile-mkdir.patch14
-rw-r--r--nixpkgs/pkgs/tools/security/ghidra/default.nix69
-rw-r--r--nixpkgs/pkgs/tools/security/gnome-keysign/default.nix90
-rw-r--r--nixpkgs/pkgs/tools/security/gnu-pw-mgr/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/security/gnupg-pkcs11-scd/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/security/gnupg/0001-dirmngr-Only-use-SKS-pool-CA-for-SKS-pool.patch34
-rw-r--r--nixpkgs/pkgs/tools/security/gnupg/1.nix32
-rw-r--r--nixpkgs/pkgs/tools/security/gnupg/1compat.nix30
-rw-r--r--nixpkgs/pkgs/tools/security/gnupg/20.nix66
-rw-r--r--nixpkgs/pkgs/tools/security/gnupg/22.nix89
-rw-r--r--nixpkgs/pkgs/tools/security/gnupg/clang.patch13
-rw-r--r--nixpkgs/pkgs/tools/security/gnupg/fix-libusb-include-path.patch12
-rw-r--r--nixpkgs/pkgs/tools/security/gnupg/gpgkey2ssh-20.patch14
-rw-r--r--nixpkgs/pkgs/tools/security/gobuster/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/security/gopass/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/security/gorilla-bin/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/security/gpgstats/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/security/haka/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/security/hash-slinger/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/security/hash_extender/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/security/hashcash/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/security/hashcat-utils/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/security/hashcat/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/security/haveged/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/security/hcxtools/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/security/hologram/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/hologram/deps.nix110
-rw-r--r--nixpkgs/pkgs/tools/security/ibm-sw-tpm2/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/security/ifdnfc/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/security/ipscan/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/security/jd-gui/default.nix105
-rw-r--r--nixpkgs/pkgs/tools/security/john/default.nix75
-rw-r--r--nixpkgs/pkgs/tools/security/jwt-cli/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/security/keybase/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/security/keybase/fix-paths-keybase.patch16
-rw-r--r--nixpkgs/pkgs/tools/security/keybase/gui.nix114
-rw-r--r--nixpkgs/pkgs/tools/security/keybase/kbfs.nix22
-rw-r--r--nixpkgs/pkgs/tools/security/keycard-cli/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/security/knockknock/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/security/kpcli/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/security/krunner-pass/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/security/krunner-pass/pass-path.patch13
-rw-r--r--nixpkgs/pkgs/tools/security/kwalletcli/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/security/lastpass-cli/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/security/lesspass-cli/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/security/libacr38u/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/security/libmodsecurity/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/security/logkeys/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/security/lynis/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/security/masscan/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/security/mbox/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/security/meo/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/security/metasploit/Gemfile4
-rw-r--r--nixpkgs/pkgs/tools/security/metasploit/Gemfile.lock357
-rw-r--r--nixpkgs/pkgs/tools/security/metasploit/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/security/metasploit/gemset.nix1293
-rw-r--r--nixpkgs/pkgs/tools/security/metasploit/shell.nix16
-rw-r--r--nixpkgs/pkgs/tools/security/mfcuk/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/security/mfoc/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/security/minisign/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/mkp224o/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/security/mkpasswd/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/security/mkrand/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/security/mktemp/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/security/modsecurity/Makefile.in.patch17
-rw-r--r--nixpkgs/pkgs/tools/security/modsecurity/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/security/monkeysphere/default.nix103
-rw-r--r--nixpkgs/pkgs/tools/security/monkeysphere/monkeysphere.patch23
-rw-r--r--nixpkgs/pkgs/tools/security/monkeysphere/openssh-nixos-sandbox.patch17
-rw-r--r--nixpkgs/pkgs/tools/security/mpw/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/security/munge/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/security/nasty/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/security/neopg/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/security/nitrokey-app/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/security/nitrokey-app/udev-rules.nix25
-rw-r--r--nixpkgs/pkgs/tools/security/nmap/default.nix77
-rw-r--r--nixpkgs/pkgs/tools/security/nmap/qt.nix54
-rw-r--r--nixpkgs/pkgs/tools/security/nmap/zenmap.patch15
-rw-r--r--nixpkgs/pkgs/tools/security/notary/default.nix65
-rw-r--r--nixpkgs/pkgs/tools/security/notary/no-git-usage.patch15
-rw-r--r--nixpkgs/pkgs/tools/security/nsjail/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/security/nwipe/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/security/oath-toolkit/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/security/omapd/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/security/omapd/zlib.patch9
-rw-r--r--nixpkgs/pkgs/tools/security/onioncircuits/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/security/open-ecard/default.nix64
-rw-r--r--nixpkgs/pkgs/tools/security/opencryptoki/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/security/opensc/default.nix65
-rw-r--r--nixpkgs/pkgs/tools/security/ossec/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/security/ossec/no-root.patch176
-rw-r--r--nixpkgs/pkgs/tools/security/p0f/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/security/pamtester/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/security/paperkey/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/security/pass/clip-wayland-support.patch113
-rw-r--r--nixpkgs/pkgs/tools/security/pass/default.nix153
-rw-r--r--nixpkgs/pkgs/tools/security/pass/extensions/audit.nix42
-rw-r--r--nixpkgs/pkgs/tools/security/pass/extensions/checkup.nix34
-rw-r--r--nixpkgs/pkgs/tools/security/pass/extensions/default.nix17
-rw-r--r--nixpkgs/pkgs/tools/security/pass/extensions/genphrase.nix32
-rw-r--r--nixpkgs/pkgs/tools/security/pass/extensions/import.nix59
-rw-r--r--nixpkgs/pkgs/tools/security/pass/extensions/otp.nix33
-rw-r--r--nixpkgs/pkgs/tools/security/pass/extensions/tomb.nix32
-rw-r--r--nixpkgs/pkgs/tools/security/pass/extensions/update.nix25
-rw-r--r--nixpkgs/pkgs/tools/security/pass/no-darwin-getopt.patch9
-rw-r--r--nixpkgs/pkgs/tools/security/pass/rofi-pass.nix57
-rw-r--r--nixpkgs/pkgs/tools/security/pass/set-correct-program-name-for-sleep.patch69
-rw-r--r--nixpkgs/pkgs/tools/security/passff-host/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/security/pbis/default.nix70
-rw-r--r--nixpkgs/pkgs/tools/security/pcsc-cyberjack/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/security/pcsc-scm-scl011/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/security/pcsc-scm-scl011/eid.patch28
-rw-r--r--nixpkgs/pkgs/tools/security/pcsclite/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/security/pcsclite/no-dropdir-literals.patch73
-rw-r--r--nixpkgs/pkgs/tools/security/pcsctools/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/security/pdfcrack/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/security/pgpdump/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/phrasendrescher/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/security/pinentry/autoconf-ar.patch35
-rw-r--r--nixpkgs/pkgs/tools/security/pinentry/default.nix103
-rw-r--r--nixpkgs/pkgs/tools/security/pinentry/mac.nix31
-rw-r--r--nixpkgs/pkgs/tools/security/pius/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/security/polkit-gnome/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/polkit-gnome/polkit-gnome-authentication-agent-1.desktop88
-rw-r--r--nixpkgs/pkgs/tools/security/prey/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/security/proxmark3/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/security/pwgen-secure/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/security/pwgen/default.nix16
-rw-r--r--nixpkgs/pkgs/tools/security/qdigidoc/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/security/qesteidutil/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/security/radamsa/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/security/rage/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/security/rarcrack/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/security/rhash/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/security/ripasso/cursive.nix37
-rw-r--r--nixpkgs/pkgs/tools/security/rng-tools/default.nix65
-rw-r--r--nixpkgs/pkgs/tools/security/saml2aws/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/saml2aws/deps.nix372
-rw-r--r--nixpkgs/pkgs/tools/security/sbsigntool/autoconf.patch29
-rw-r--r--nixpkgs/pkgs/tools/security/sbsigntool/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/security/scallion/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/security/scrypt/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/security/seccure/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/security/secp256k1/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/security/sedutil/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/security/sequoia/default.nix92
-rw-r--r--nixpkgs/pkgs/tools/security/sha1collisiondetection/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/security/shc/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/security/signify/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/security/signing-party/default.nix221
-rw-r--r--nixpkgs/pkgs/tools/security/signing-party/gpgwrap_makefile.patch16
-rw-r--r--nixpkgs/pkgs/tools/security/simple-tpm-pk11/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/softhsm/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/security/sops/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/security/spectre-meltdown-checker/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/security/srm/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/security/ssdeep/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/security/ssh-audit/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/security/sshguard/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/sshuttle/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/security/sshuttle/sudo.patch13
-rw-r--r--nixpkgs/pkgs/tools/security/sslscan/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/security/ssss/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/security/steghide/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/security/steghide/patches/steghide-0.5.1-gcc34.patch42
-rw-r--r--nixpkgs/pkgs/tools/security/steghide/patches/steghide-0.5.1-gcc4.patch46
-rw-r--r--nixpkgs/pkgs/tools/security/steghide/patches/steghide-0.5.1-gcc43.patch349
-rw-r--r--nixpkgs/pkgs/tools/security/step-ca/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/security/step-ca/deps.nix291
-rw-r--r--nixpkgs/pkgs/tools/security/step-cli/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/security/step-cli/deps.nix453
-rw-r--r--nixpkgs/pkgs/tools/security/stoken/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/security/stricat/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/security/su-exec/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/security/sudo/default.nix83
-rw-r--r--nixpkgs/pkgs/tools/security/sudolikeaboss/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/security/sudolikeaboss/deps.nix39
-rw-r--r--nixpkgs/pkgs/tools/security/super/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/security/tboot/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/security/tboot/tboot-add-well-known-secret-option-to-lcp_writepol.patch50
-rw-r--r--nixpkgs/pkgs/tools/security/tcpcrypt/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/security/thc-hydra/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/security/theharvester/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/security/tor/default.nix88
-rw-r--r--nixpkgs/pkgs/tools/security/tor/tor-arm.nix55
-rw-r--r--nixpkgs/pkgs/tools/security/tor/torsocks.nix34
-rw-r--r--nixpkgs/pkgs/tools/security/tor/update.nix71
-rw-r--r--nixpkgs/pkgs/tools/security/tpm-luks/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/security/tpm-luks/openssl-1.1.patch63
-rw-r--r--nixpkgs/pkgs/tools/security/tpm-luks/signed-ptr.patch15
-rw-r--r--nixpkgs/pkgs/tools/security/tpm-quote-tools/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/security/tpm-tools/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/security/tpm2-abrmd/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/security/tpm2-tools/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/security/trousers/allow-non-tss-config-file-owner.patch19
-rw-r--r--nixpkgs/pkgs/tools/security/trousers/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/security/trufflehog/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/security/vault/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/security/vault/vault-bin.nix54
-rw-r--r--nixpkgs/pkgs/tools/security/verifpal/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/security/verifpal/deps.nix12
-rw-r--r--nixpkgs/pkgs/tools/security/volatility/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/security/vulnix/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/security/wipe/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/security/wipe/fix-install.patch18
-rw-r--r--nixpkgs/pkgs/tools/security/wpscan/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/security/wpscan/Gemfile.lock59
-rw-r--r--nixpkgs/pkgs/tools/security/wpscan/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/security/wpscan/gemset.nix234
-rw-r--r--nixpkgs/pkgs/tools/security/yara/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/security/zmap/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/security/zzuf/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/system/acct/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/system/acpica-tools/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/system/actkbd/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/system/amtterm/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/system/at/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/system/at/install.patch54
-rw-r--r--nixpkgs/pkgs/tools/system/augeas/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/system/awstats/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/system/bar/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/system/bfs/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/system/chase/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/system/clinfo/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/system/collectd/data.nix14
-rw-r--r--nixpkgs/pkgs/tools/system/collectd/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/system/collectd/plugins.nix347
-rw-r--r--nixpkgs/pkgs/tools/system/colorls/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/system/colorls/Gemfile.lock21
-rw-r--r--nixpkgs/pkgs/tools/system/colorls/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/system/colorls/gemset.nix53
-rw-r--r--nixpkgs/pkgs/tools/system/confd/default.nix19
-rw-r--r--nixpkgs/pkgs/tools/system/confd/deps.nix74
-rw-r--r--nixpkgs/pkgs/tools/system/consul-template/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/system/cron/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/system/ctop/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/system/daemon/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/system/daemonize/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/system/das_watchdog/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/system/datefudge/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/system/dcfldd/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/system/dd_rescue/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/system/ddrescue/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/system/ddrescueview/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/system/ddrutility/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/system/dfc/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/system/di/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/system/dog/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/system/efibootmgr/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/system/efivar/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/system/envconsul/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/system/evemu/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/system/facter/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/system/fakechroot/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/system/fakeroot/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/system/fakeroot/einval.patch47
-rw-r--r--nixpkgs/pkgs/tools/system/fcron/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/system/fcron/relative-fcronsighup.patch16
-rw-r--r--nixpkgs/pkgs/tools/system/fdisk/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/system/fio/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/system/foreman/Gemfile3
-rw-r--r--nixpkgs/pkgs/tools/system/foreman/Gemfile.lock15
-rw-r--r--nixpkgs/pkgs/tools/system/foreman/default.nix15
-rw-r--r--nixpkgs/pkgs/tools/system/foreman/gemset.nix18
-rw-r--r--nixpkgs/pkgs/tools/system/foremost/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/system/foremost/makefile.patch23
-rw-r--r--nixpkgs/pkgs/tools/system/freeipmi/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/system/gdmap/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/system/gdmap/get_sensitive.patch34
-rw-r--r--nixpkgs/pkgs/tools/system/gdmap/set_flags.patch25
-rw-r--r--nixpkgs/pkgs/tools/system/gohai/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/system/gohai/deps.nix30
-rw-r--r--nixpkgs/pkgs/tools/system/goreman/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/system/gotop/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/system/gptfdisk/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/system/gt5/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/system/hardinfo/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/system/hardlink/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/system/hiera-eyaml/Gemfile3
-rw-r--r--nixpkgs/pkgs/tools/system/hiera-eyaml/Gemfile.lock17
-rw-r--r--nixpkgs/pkgs/tools/system/hiera-eyaml/default.nix17
-rw-r--r--nixpkgs/pkgs/tools/system/hiera-eyaml/gemset.nix31
-rw-r--r--nixpkgs/pkgs/tools/system/honcho/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/system/htop/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/system/hwinfo/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/system/idle3tools/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/system/illum/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/system/incron/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/system/incron/default_path.patch36
-rw-r--r--nixpkgs/pkgs/tools/system/inxi/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/system/ioping/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/system/iops/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/system/ior/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/system/ipmitool/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/system/ipmiutil/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/system/ipmiutil/default.upstream4
-rw-r--r--nixpkgs/pkgs/tools/system/java-service-wrapper/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/system/journalwatch/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/system/jump/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/system/krakenx/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/system/ledmon/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/system/loadwatch/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/system/localtime/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/system/logcheck/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/system/logrotate/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/system/lr/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/system/lshw/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/system/mcron/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/system/mcron/install-vixie-programs.patch23
-rw-r--r--nixpkgs/pkgs/tools/system/memtester/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/system/minijail/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/system/monit/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/system/mq-cli/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/system/netdata/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/system/netdata/no-files-in-etc-and-var.patch155
-rw-r--r--nixpkgs/pkgs/tools/system/nq/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/system/nvtop/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/system/opencl-info/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/system/pciutils/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/system/pcstat/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/system/pcstat/deps.nix11
-rw-r--r--nixpkgs/pkgs/tools/system/plan9port/builder.sh79
-rw-r--r--nixpkgs/pkgs/tools/system/plan9port/darwin-cfframework.patch24
-rw-r--r--nixpkgs/pkgs/tools/system/plan9port/darwin-sw_vers.patch47
-rw-r--r--nixpkgs/pkgs/tools/system/plan9port/default.nix96
-rw-r--r--nixpkgs/pkgs/tools/system/plan9port/tmpdir.patch41
-rw-r--r--nixpkgs/pkgs/tools/system/procodile/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/system/procodile/Gemfile.lock15
-rw-r--r--nixpkgs/pkgs/tools/system/procodile/default.nix17
-rw-r--r--nixpkgs/pkgs/tools/system/procodile/gemset.nix23
-rw-r--r--nixpkgs/pkgs/tools/system/proot/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/system/ps_mem/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/system/psensor/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/system/psstop/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/system/r10k/Gemfile5
-rw-r--r--nixpkgs/pkgs/tools/system/r10k/Gemfile.lock46
-rw-r--r--nixpkgs/pkgs/tools/system/r10k/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/system/r10k/gemset.nix168
-rw-r--r--nixpkgs/pkgs/tools/system/rofi-systemd/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/system/rowhammer-test/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/system/rsyslog/default.nix111
-rw-r--r--nixpkgs/pkgs/tools/system/rsyslog/fix-gnutls-detection.patch60
-rw-r--r--nixpkgs/pkgs/tools/system/runit/default.nix60
-rw-r--r--nixpkgs/pkgs/tools/system/runit/fix-ar-ranlib.patch18
-rw-r--r--nixpkgs/pkgs/tools/system/s-tui/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/system/s6-rc/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/system/s6/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/system/safe-rm/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/system/safecopy/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/system/setserial/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/system/sg3_utils/default.nix17
-rw-r--r--nixpkgs/pkgs/tools/system/sleuthkit/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/system/smartmontools/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/system/smartmontools/smartmontools.patch26
-rw-r--r--nixpkgs/pkgs/tools/system/socklog/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/system/storebrowse/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/system/stress-ng/default.nix72
-rw-r--r--nixpkgs/pkgs/tools/system/stress/default.nix16
-rw-r--r--nixpkgs/pkgs/tools/system/suid-chroot/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/system/supervise/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/system/symlinks/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/system/syslog-ng-incubator/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/system/syslog-ng/default.nix64
-rw-r--r--nixpkgs/pkgs/tools/system/systemd-journal2gelf/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/system/testdisk/default.nix68
-rw-r--r--nixpkgs/pkgs/tools/system/thermald/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/system/thinkfan/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/system/throttled/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/system/tm/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/system/tre-command/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/system/tree/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/system/ts/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/system/uefitool/common.nix39
-rw-r--r--nixpkgs/pkgs/tools/system/uefitool/variants.nix15
-rw-r--r--nixpkgs/pkgs/tools/system/undaemonize/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/system/uptimed/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/system/uptimed/no-var-spool-install.patch15
-rw-r--r--nixpkgs/pkgs/tools/system/vbetool/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/system/vboot_reference/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/system/vboot_reference/dont_static_link.patch30
-rw-r--r--nixpkgs/pkgs/tools/system/which/default.nix17
-rw-r--r--nixpkgs/pkgs/tools/system/wsmancli/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/system/xe/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/system/yeshup/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/text/a2ps/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/text/agrep/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/text/aha/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/text/amber/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/text/ansifilter/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/text/ascii/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/text/bcat/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/text/bcat/Gemfile.lock15
-rw-r--r--nixpkgs/pkgs/tools/text/bcat/default.nix17
-rw-r--r--nixpkgs/pkgs/tools/text/bcat/gemset.nix23
-rw-r--r--nixpkgs/pkgs/tools/text/boxes/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/text/catdoc/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/text/catdocx/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/text/cconv/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/text/codesearch/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/text/codesearch/deps.nix3
-rw-r--r--nixpkgs/pkgs/tools/text/colordiff/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/text/coloursum/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/text/convertlit/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/text/copyright-update/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/text/csvkit/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/text/dadadodo/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/text/diction/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/text/diffr/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/text/diffstat/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/text/diffutils/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/text/discount/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/text/discount/fix-configure-path.patch12
-rw-r--r--nixpkgs/pkgs/tools/text/dos2unix/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/text/ebook-tools/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/text/enca/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/text/enscript/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/text/epubcheck/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/text/esh/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/text/fanficfare/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/text/gawk/default.nix84
-rw-r--r--nixpkgs/pkgs/tools/text/gawk/gawk-with-extensions.nix12
-rw-r--r--nixpkgs/pkgs/tools/text/gawk/gawkextlib.nix149
-rw-r--r--nixpkgs/pkgs/tools/text/gawk/setup-hook.sh6
-rw-r--r--nixpkgs/pkgs/tools/text/gist/default.nix17
-rw-r--r--nixpkgs/pkgs/tools/text/glogg/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/text/gnugrep/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/text/gnupatch/CVE-2018-6951.patch28
-rw-r--r--nixpkgs/pkgs/tools/text/gnupatch/CVE-2018-6952.patch28
-rw-r--r--nixpkgs/pkgs/tools/text/gnupatch/CVE-2019-13636.patch108
-rw-r--r--nixpkgs/pkgs/tools/text/gnupatch/CVE-2019-13638-and-CVE-2018-20969.patch38
-rw-r--r--nixpkgs/pkgs/tools/text/gnupatch/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/text/gnused/422.nix33
-rw-r--r--nixpkgs/pkgs/tools/text/gnused/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/text/grin/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/text/grip-search/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/text/groff/0001-Fix-cross-compilation-by-looking-for-ar.patch46
-rw-r--r--nixpkgs/pkgs/tools/text/groff/default.nix130
-rw-r--r--nixpkgs/pkgs/tools/text/groff/site.tmac16
-rw-r--r--nixpkgs/pkgs/tools/text/gtranslator/default.nix72
-rw-r--r--nixpkgs/pkgs/tools/text/gucci/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/text/gucci/deps.nix30
-rw-r--r--nixpkgs/pkgs/tools/text/highlight/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/text/html-tidy/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/text/html2text/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/text/hyx/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/text/hyx/no-wall-by-default.patch11
-rw-r--r--nixpkgs/pkgs/tools/text/icdiff/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/text/invoice2data/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/text/ispell/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/text/ispell/patches/0007-Use-termios.patch188
-rw-r--r--nixpkgs/pkgs/tools/text/ispell/patches/0008-Tex-backslash.patch48
-rw-r--r--nixpkgs/pkgs/tools/text/ispell/patches/0009-Fix-FTBFS-on-glibc.patch23
-rw-r--r--nixpkgs/pkgs/tools/text/ispell/patches/0011-Missing-prototypes.patch84
-rw-r--r--nixpkgs/pkgs/tools/text/ispell/patches/0012-Fix-getline.patch62
-rw-r--r--nixpkgs/pkgs/tools/text/ispell/patches/0013-Fix-man-pages.patch227
-rw-r--r--nixpkgs/pkgs/tools/text/ispell/patches/0021-Fix-gcc-warnings.patch57
-rw-r--r--nixpkgs/pkgs/tools/text/ispell/patches/0023-Exclusive-options.patch38
-rw-r--r--nixpkgs/pkgs/tools/text/ispell/patches/0024-Check-tempdir-creation.patch69
-rw-r--r--nixpkgs/pkgs/tools/text/ispell/patches/0025-Languages.patch81
-rw-r--r--nixpkgs/pkgs/tools/text/ispell/patches/0030-Display-whole-multibyte-character.patch35
-rw-r--r--nixpkgs/pkgs/tools/text/jsawk/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/text/jumanpp/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/text/kakasi/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/text/kdiff3/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/text/kytea/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/text/kytea/gcc-O3.patch13
-rw-r--r--nixpkgs/pkgs/tools/text/languagetool/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/text/link-grammar/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/text/lv/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/text/mairix/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/text/mairix/mmap.patch161
-rw-r--r--nixpkgs/pkgs/tools/text/markdown-pp/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/text/mawk/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/text/mb2md/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/text/mdbook/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/text/mdcat/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/text/mecab/base.nix16
-rw-r--r--nixpkgs/pkgs/tools/text/mecab/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/text/mecab/ipadic.nix18
-rw-r--r--nixpkgs/pkgs/tools/text/mecab/nodic.nix8
-rw-r--r--nixpkgs/pkgs/tools/text/miller/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/text/mir-qualia/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/text/mpage/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/text/multitran/data/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/text/multitran/libbtree/default.nix19
-rw-r--r--nixpkgs/pkgs/tools/text/multitran/libfacet/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/text/multitran/libmtquery/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/text/multitran/libmtsupport/default.nix19
-rw-r--r--nixpkgs/pkgs/tools/text/multitran/mtutils/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/text/namazu/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/text/nawk/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/text/nkf/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/text/numdiff/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/text/ocrmypdf/default.nix105
-rw-r--r--nixpkgs/pkgs/tools/text/odt2txt/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/text/opencc/default.nix33
-rwxr-xr-xnixpkgs/pkgs/tools/text/papertrail/Gemfile4
-rw-r--r--nixpkgs/pkgs/tools/text/papertrail/Gemfile.lock17
-rw-r--r--nixpkgs/pkgs/tools/text/papertrail/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/text/papertrail/gemset.nix26
-rw-r--r--nixpkgs/pkgs/tools/text/par/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/text/patchutils/0.3.3.nix7
-rw-r--r--nixpkgs/pkgs/tools/text/patchutils/default.nix6
-rw-r--r--nixpkgs/pkgs/tools/text/patchutils/drop-comments.patch84
-rw-r--r--nixpkgs/pkgs/tools/text/patchutils/generic.nix28
-rw-r--r--nixpkgs/pkgs/tools/text/peco/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/text/peco/deps.nix57
-rw-r--r--nixpkgs/pkgs/tools/text/platinum-searcher/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/text/platinum-searcher/deps.nix83
-rw-r--r--nixpkgs/pkgs/tools/text/podiff/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/text/poedit/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/text/popfile/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/text/proselint/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/text/qgrep/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/text/qprint/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/text/qshowdiff/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/text/reckon/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/text/reckon/Gemfile.lock21
-rw-r--r--nixpkgs/pkgs/tools/text/reckon/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/text/reckon/gemset.nix42
-rw-r--r--nixpkgs/pkgs/tools/text/recode/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/text/replace/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/text/replace/malloc.patch13
-rw-r--r--nixpkgs/pkgs/tools/text/ripgrep-all/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/text/ripgrep/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/text/rpl/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/text/rst2html5/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/text/ruby-zoom/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/text/ruby-zoom/Gemfile.lock24
-rw-r--r--nixpkgs/pkgs/tools/text/ruby-zoom/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/text/ruby-zoom/gemset.nix64
-rw-r--r--nixpkgs/pkgs/tools/text/ruplacer/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/text/schema2ldif/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/text/sd/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/text/sgml/jade/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/text/sgml/openjade/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/text/sgml/openjade/msggen.patch34
-rw-r--r--nixpkgs/pkgs/tools/text/sgml/opensp/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/text/sgml/opensp/setup-hook.sh22
-rw-r--r--nixpkgs/pkgs/tools/text/shab/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/text/shfmt/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/text/shocco/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/text/sift/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/text/sift/deps.nix29
-rw-r--r--nixpkgs/pkgs/tools/text/silver-searcher/bash-completion.patch5
-rw-r--r--nixpkgs/pkgs/tools/text/silver-searcher/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/text/smu/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/text/snippetpixie/default.nix89
-rw-r--r--nixpkgs/pkgs/tools/text/source-highlight/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/text/staccato/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/text/tab/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/text/transifex-client/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/text/txt2tags/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/text/uni2ascii/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/text/unoconv/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/text/unrtf/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/text/untex/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/text/vale/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/text/wdiff/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/text/wgetpaste/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/text/xidel/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/text/xml/basex/basex.svg81
-rw-r--r--nixpkgs/pkgs/tools/text/xml/basex/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/text/xml/html-xml-utils/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/text/xml/jing-trang/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/text/xml/rnv/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/text/xml/rxp/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/text/xml/xml2/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/text/xml/xmlformat/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/text/xml/xmloscopy/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/text/xml/xmlstarlet/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/text/xml/xpf/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/text/xsv/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/text/xurls/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/text/yaml-merge/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/text/zimreader/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/text/zimwriterfs/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/toml2nix/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/typesetting/asciidoc/default.nix281
-rw-r--r--nixpkgs/pkgs/tools/typesetting/asciidoctor/Gemfile9
-rw-r--r--nixpkgs/pkgs/tools/typesetting/asciidoctor/Gemfile.lock96
-rw-r--r--nixpkgs/pkgs/tools/typesetting/asciidoctor/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/typesetting/asciidoctor/gemset.nix381
-rw-r--r--nixpkgs/pkgs/tools/typesetting/asciidoctorj/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/typesetting/biber/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/typesetting/djvu2pdf/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/typesetting/docbook2odf/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/typesetting/docbook2x/db2x_texixml-to-stdout.patch15
-rw-r--r--nixpkgs/pkgs/tools/typesetting/docbook2x/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/typesetting/fop/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/typesetting/git-latexdiff/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/typesetting/git-latexdiff/version-test.patch17
-rw-r--r--nixpkgs/pkgs/tools/typesetting/halibut/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/typesetting/hevea/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/typesetting/htmldoc/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/typesetting/kindlegen/default.nix51
-rwxr-xr-xnixpkgs/pkgs/tools/typesetting/lout/builder.sh42
-rw-r--r--nixpkgs/pkgs/tools/typesetting/lout/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/typesetting/mmark/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/typesetting/mmark/deps.nix12
-rw-r--r--nixpkgs/pkgs/tools/typesetting/multimarkdown/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/typesetting/odpdown/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/typesetting/pdf2djvu/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/typesetting/pdf2htmlEX/add-glib-cmake.patch17
-rw-r--r--nixpkgs/pkgs/tools/typesetting/pdf2htmlEX/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/typesetting/pdf2odt/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/typesetting/pdf2odt/use_mktemp.patch19
-rw-r--r--nixpkgs/pkgs/tools/typesetting/pdfgrep/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/typesetting/pdfsandwich/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/typesetting/pdftk/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/typesetting/psutils/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/typesetting/rubber/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/typesetting/satysfi/default.nix70
-rw-r--r--nixpkgs/pkgs/tools/typesetting/scdoc/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/typesetting/sile/default.nix77
-rw-r--r--nixpkgs/pkgs/tools/typesetting/skribilo/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/typesetting/sshlatex/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tectonic/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/typesetting/ted/default.nix83
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/auctex/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/dblatex/default.nix72
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/latexrun/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/lkproof/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/nix/animatedot.sh9
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/nix/copy-includes.pl43
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/nix/default.nix249
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/nix/dot2pdf.sh20
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/nix/dot2ps.sh19
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/nix/find-includes.pl69
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/nix/find-lhs2tex-includes.sh3
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/nix/lhs2tex.sh19
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/nix/run-latex.sh166
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/pgf/1.x.nix23
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/pgf/2.x.nix23
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/pgf/3.x.nix32
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/pgfplots/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/pplatex/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/tetex/clang.patch13
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/tetex/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/tetex/environment.patch35
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/tetex/extramembot.patch12
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/tetex/getline.patch96
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/tetex/setup-hook.sh7
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/texlive/UPGRADING.md69
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/texlive/bin.nix482
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/texlive/combine.nix291
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/texlive/default.nix190
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/texlive/dvisvgm-fix.patch16
-rwxr-xr-xnixpkgs/pkgs/tools/typesetting/tex/texlive/fixHashes.sh10
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/texlive/fixedHashes.nix8377
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/texlive/pkgs.nix29957
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/texlive/setup-hook.sh7
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/texlive/texlinks.diff9
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tex/texlive/tl2nix.sed31
-rw-r--r--nixpkgs/pkgs/tools/typesetting/tikzit/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/typesetting/xmlroff/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/typesetting/xmlto/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/video/atomicparsley/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/video/bento4/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/video/bento4/libap4.patch5
-rw-r--r--nixpkgs/pkgs/tools/video/dvgrab/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/video/flvtool2/default.nix16
-rw-r--r--nixpkgs/pkgs/tools/video/gopro/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/video/mjpegtools/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/video/rav1e/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/video/rtmpdump/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/video/swfmill/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/video/swftools/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/video/swftools/swftools.patch17
-rw-r--r--nixpkgs/pkgs/tools/video/untrunc/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/video/vnc2flv/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/video/vncrec/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/video/yamdi/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/virtualization/amazon-ecs-cli/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/virtualization/awless/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/virtualization/aws/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/virtualization/awsebcli/default.nix96
-rw-r--r--nixpkgs/pkgs/tools/virtualization/cloud-init/add-nixos-support.patch113
-rw-r--r--nixpkgs/pkgs/tools/virtualization/cloud-init/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/virtualization/cloudmonkey/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/virtualization/cri-tools/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/virtualization/distrobuilder/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/virtualization/distrobuilder/deps.nix228
-rw-r--r--nixpkgs/pkgs/tools/virtualization/ec2-ami-tools/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/virtualization/ec2-ami-tools/writable.patch23
-rw-r--r--nixpkgs/pkgs/tools/virtualization/ec2-api-tools/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/virtualization/ec2-utils/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/virtualization/euca2ools/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/virtualization/google-compute-engine-oslogin/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/virtualization/google-compute-engine/default.nix65
-rw-r--r--nixpkgs/pkgs/tools/virtualization/govc/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/virtualization/linode-cli/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/virtualization/marathonctl/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/virtualization/marathonctl/deps.nix12
-rw-r--r--nixpkgs/pkgs/tools/virtualization/mininet/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/virtualization/nixos-container/default.nix17
-rw-r--r--nixpkgs/pkgs/tools/virtualization/nixos-container/nixos-container-completion.sh33
-rwxr-xr-xnixpkgs/pkgs/tools/virtualization/nixos-container/nixos-container.pl380
-rw-r--r--nixpkgs/pkgs/tools/virtualization/rootlesskit/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/virtualization/udocker/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/virtualization/xe-guest-utilities/default.nix75
-rw-r--r--nixpkgs/pkgs/tools/virtualization/xe-guest-utilities/ip-address.patch16
-rw-r--r--nixpkgs/pkgs/tools/wayland/ydotool/default.nix33
2915 files changed, 174901 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/tools/X11/alttab/default.nix b/nixpkgs/pkgs/tools/X11/alttab/default.nix
new file mode 100644
index 000000000000..4efd86ca63fa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/alttab/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, fetchFromGitHub, autoconf, automake, pkgconfig, ronn, libpng, uthash
+, xorg }:
+
+stdenv.mkDerivation rec {
+  version = "1.4.0";
+
+  pname = "alttab";
+
+  src = fetchFromGitHub {
+    owner = "sagb";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "028ifp54yl3xq5mj2ww9baga8p56nmrx4ypvj8k35akcaxdpyga9";
+  };
+
+  nativeBuildInputs = [ 
+    autoconf
+    automake
+    pkgconfig
+    ronn
+  ];
+
+  preConfigure = "./bootstrap.sh";
+
+  buildInputs = [
+    libpng
+    uthash
+    xorg.libX11
+    xorg.libXft
+    xorg.libXmu
+    xorg.libXpm
+    xorg.libXrandr
+    xorg.libXrender
+  ];
+
+  enableParallelBuild = true;
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/sagb/alttab;
+    description = "X11 window switcher designed for minimalistic window managers or standalone X11 session";
+    license = licenses.gpl3;
+    platforms = platforms.all;
+    maintainers = [ maintainers.sgraf ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/arandr/default.nix b/nixpkgs/pkgs/tools/X11/arandr/default.nix
new file mode 100644
index 000000000000..51f2f5ec2494
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/arandr/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchurl, python3Packages
+, gobject-introspection, gsettings-desktop-schemas, gtk3
+, wrapGAppsHook, xrandr
+}:
+
+let
+  inherit (python3Packages) buildPythonApplication docutils pygobject3;
+in buildPythonApplication rec {
+  name = "arandr-0.1.10";
+
+  src = fetchurl {
+    url = "https://christian.amsuess.com/tools/arandr/files/${name}.tar.gz";
+    sha256 = "135q0llvm077jil2fr92ssw3p095m4r8jfj0lc5rr3m71n4srj6v";
+  };
+
+  patchPhase = ''
+    rm -rf data/po/*
+  '';
+
+  # no tests
+  doCheck = false;
+
+  # hook for gobject-introspection doesn't like strictDeps
+  # https://github.com/NixOS/nixpkgs/issues/56943
+  strictDeps = false;
+
+  buildInputs = [ docutils gsettings-desktop-schemas gtk3 ];
+  nativeBuildInputs = [ gobject-introspection wrapGAppsHook ];
+  propagatedBuildInputs = [ xrandr pygobject3 ];
+
+  meta = {
+    homepage = http://christian.amsuess.com/tools/arandr/;
+    description = "A simple visual front end for XRandR";
+    license = stdenv.lib.licenses.gpl3;
+    maintainers = [ stdenv.lib.maintainers.domenkozar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/autocutsel/default.nix b/nixpkgs/pkgs/tools/X11/autocutsel/default.nix
new file mode 100644
index 000000000000..db17788cea00
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/autocutsel/default.nix
@@ -0,0 +1,26 @@
+{stdenv, fetchurl, libX11, libXaw}:
+
+stdenv.mkDerivation rec {
+  version = "0.10.0";
+  pname = "autocutsel";
+ 
+  src = fetchurl {
+    url = "https://github.com/sigmike/autocutsel/releases/download/${version}/${pname}-${version}.tar.gz";
+    sha256 = "0gsys2dzh4az51ndcsabhlbbrjn2nm75lnjr45kg6r8sm8q66dx2";
+  };
+ 
+  buildInputs = [ libX11 libXaw ];
+  installPhase = ''
+    mkdir -p $out/bin
+    cp autocutsel $out/bin/
+  '';
+
+  meta = {
+    inherit version;
+    homepage = https://www.nongnu.org/autocutsel/;
+    description = "Tracks changes in the server's cutbuffer and CLIPBOARD selection";
+    license = stdenv.lib.licenses.gpl2Plus;
+    platforms = with stdenv.lib.platforms; all;
+    updateWalker = true;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/bgs/default.nix b/nixpkgs/pkgs/tools/X11/bgs/default.nix
new file mode 100644
index 000000000000..66d845b0587f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/bgs/default.nix
@@ -0,0 +1,25 @@
+{stdenv, fetchurl, pkgconfig, libX11, libXinerama, imlib2}:
+
+stdenv.mkDerivation rec {
+
+  pname = "bgs";
+  version = "0.8";
+
+  src = fetchurl {
+    url = "https://github.com/Gottox/bgs/archive/v${version}.tar.gz";
+    sha256 = "1rw9ingkkpvvr2dixx126ziim67a54r8k49918h1mbph0fjj08n5";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+
+  buildInputs = [ libX11 libXinerama imlib2 ];
+
+  preConfigure = ''sed -i "s@PREFIX = /usr/local@PREFIX = $out@g" config.mk'';
+
+  meta = with stdenv.lib; {
+    description = "Extremely fast and small background setter for X";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/bumblebee/default.nix b/nixpkgs/pkgs/tools/X11/bumblebee/default.nix
new file mode 100644
index 000000000000..f5a8fd24f5e6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/bumblebee/default.nix
@@ -0,0 +1,143 @@
+# The bumblebee package allows a program to be rendered on an
+# dedicated video card by spawning an additional X11 server and
+# streaming the results via VirtualGL or primus to the primary server.
+
+# The package is rather chaotic; it's also quite recent.
+# As it may change a lot, some of the hacks in this nix expression
+# will hopefully not be needed in the future anymore.
+
+# To test:
+# 1. make sure that the 'bbswitch' kernel module is installed,
+# 2. then run 'bumblebeed' as root
+# 3. Then either 'optirun glxinfo' or 'primusrun glxinfo' as user.
+#
+# The glxinfo output should indicate the NVidia driver is being used
+# and all expected extensions are supported.
+#
+# To use at startup, see hardware.bumblebee options.
+
+{ stdenv, lib, fetchurl, fetchpatch, pkgconfig, help2man, makeWrapper
+, glib, libbsd
+, libX11, xorgserver, kmod, xf86videonouveau
+, nvidia_x11, virtualgl, libglvnd
+, automake111x, autoconf
+# The below should only be non-null in a x86_64 system. On a i686
+# system the above nvidia_x11 and virtualgl will be the i686 packages.
+# TODO: Confusing. Perhaps use "SubArch" instead of i686?
+, nvidia_x11_i686 ? null
+, libglvnd_i686 ? null
+, useDisplayDevice ? false
+, extraNvidiaDeviceOptions ? ""
+, extraNouveauDeviceOptions ? ""
+, useNvidia ? true
+}:
+
+let
+  version = "3.2.1";
+
+  nvidia_x11s = [ nvidia_x11 ]
+                ++ lib.optional nvidia_x11.useGLVND libglvnd
+                ++ lib.optionals (nvidia_x11_i686 != null)
+                   ([ nvidia_x11_i686 ] ++ lib.optional nvidia_x11_i686.useGLVND libglvnd_i686);
+
+  nvidiaLibs = lib.makeLibraryPath nvidia_x11s;
+
+  bbdPath = lib.makeBinPath [ kmod xorgserver ];
+
+  xmodules = lib.concatStringsSep "," (map (x: "${x.out or x}/lib/xorg/modules") ([ xorgserver ] ++ lib.optional (!useNvidia) xf86videonouveau));
+
+  modprobePatch = fetchpatch {
+    url = "https://github.com/Bumblebee-Project/Bumblebee/commit/1ada79fe5916961fc4e4917f8c63bb184908d986.patch";
+    sha256 = "02vq3vba6nx7gglpjdfchws9vjhs1x02a543yvqrxqpvvdfim2x2";
+  };
+  libkmodPatch = fetchpatch {
+    url = "https://github.com/Bumblebee-Project/Bumblebee/commit/deceb14cdf2c90ff64ebd1010a674305464587da.patch";
+    sha256 = "00c05i5lxz7vdbv445ncxac490vbl5g9w3vy3gd71qw1f0si8vwh";
+  };
+
+in stdenv.mkDerivation rec {
+  pname = "bumblebee";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://bumblebee-project.org/${pname}-${version}.tar.gz";
+    sha256 = "03p3gvx99lwlavznrpg9l7jnl1yfg2adcj8jcjj0gxp20wxp060h";
+  };
+
+  patches = [
+    ./nixos.patch
+
+    modprobePatch
+    libkmodPatch
+  ];
+
+  # By default we don't want to use a display device
+  nvidiaDeviceOptions = lib.optionalString (!useDisplayDevice) ''
+    # Disable display device
+    Option "UseEDID" "false"
+    Option "UseDisplayDevice" "none"
+  '' + extraNvidiaDeviceOptions;
+
+  nouveauDeviceOptions = extraNouveauDeviceOptions;
+
+  # the have() function is deprecated and not available to bash completions the
+  # way they are currently loaded in NixOS, so use _have. See #10936
+  postPatch = ''
+    substituteInPlace scripts/bash_completion/bumblebee \
+      --replace "have optirun" "_have optirun"
+  '';
+
+  preConfigure = ''
+    # Don't use a special group, just reuse wheel.
+    substituteInPlace configure \
+      --replace 'CONF_GID="bumblebee"' 'CONF_GID="wheel"'
+
+    # Apply configuration options
+    substituteInPlace conf/xorg.conf.nvidia \
+      --subst-var nvidiaDeviceOptions
+
+    substituteInPlace conf/xorg.conf.nouveau \
+      --subst-var nouveauDeviceOptions
+  '';
+
+  # Build-time dependencies of bumblebeed and optirun.
+  # Note that it has several runtime dependencies.
+  buildInputs = [ libX11 glib libbsd kmod ];
+  nativeBuildInputs = [ makeWrapper pkgconfig help2man automake111x autoconf ];
+
+  # The order of LDPATH is very specific: First X11 then the host
+  # environment then the optional sub architecture paths.
+  #
+  # The order for MODPATH is the opposite: First the environment that
+  # includes the acceleration driver. As this is used for the X11
+  # server, which runs under the host architecture, this does not
+  # include the sub architecture components.
+  configureFlags = [
+    "--with-udev-rules=$out/lib/udev/rules.d"
+    # see #10282
+    #"CONF_PRIMUS_LD_PATH=${primusLibs}"
+  ] ++ lib.optionals useNvidia [
+    "CONF_LDPATH_NVIDIA=${nvidiaLibs}"
+    "CONF_MODPATH_NVIDIA=${nvidia_x11.bin}/lib/xorg/modules"
+  ];
+
+  CFLAGS = [
+    "-DX_MODULE_APPENDS=\\\"${xmodules}\\\""
+  ];
+
+  postInstall = ''
+    wrapProgram "$out/sbin/bumblebeed" \
+      --prefix PATH : "${bbdPath}"
+
+    wrapProgram "$out/bin/optirun" \
+      --prefix PATH : "${virtualgl}/bin"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/Bumblebee-Project/Bumblebee;
+    description = "Daemon for managing Optimus videocards (power-on/off, spawns xservers)";
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/bumblebee/nixos.patch b/nixpkgs/pkgs/tools/X11/bumblebee/nixos.patch
new file mode 100644
index 000000000000..cf6ee5add98f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/bumblebee/nixos.patch
@@ -0,0 +1,80 @@
+diff --git a/conf/xorg.conf.nouveau b/conf/xorg.conf.nouveau
+index 87e48cb..60d6eaf 100644
+--- a/conf/xorg.conf.nouveau
++++ b/conf/xorg.conf.nouveau
+@@ -15,4 +15,5 @@ Section "Device"
+ #   This Setting is needed on Ubuntu 13.04.
+ #   BusID "PCI:01:00:0"
+ 
++@nouveauDeviceOptions@
+ EndSection
+diff --git a/conf/xorg.conf.nvidia b/conf/xorg.conf.nvidia
+index c3107f9..17072f4 100644
+--- a/conf/xorg.conf.nvidia
++++ b/conf/xorg.conf.nvidia
+@@ -29,6 +29,6 @@ Section "Device"
+     Option "ProbeAllGpus" "false"
+ 
+     Option "NoLogo" "true"
+-    Option "UseEDID" "false"
+-    Option "UseDisplayDevice" "none"
++
++@nvidiaDeviceOptions@
+ EndSection
+diff --git a/src/bbsecondary.c b/src/bbsecondary.c
+index 71a6b73..a682d8a 100644
+--- a/src/bbsecondary.c
++++ b/src/bbsecondary.c
+@@ -145,6 +145,23 @@ bool start_secondary(bool need_secondary) {
+     }
+ 
+     bb_log(LOG_INFO, "Starting X server on display %s.\n", bb_config.x_display);
++    const char mod_appends[] = X_MODULE_APPENDS;
++
++    char *mod_path;
++    int pathlen = strlen(bb_config.mod_path);
++    if (pathlen == 0) {
++      mod_path = mod_appends;
++    } else {
++      mod_path = malloc(pathlen + 1 + sizeof(mod_appends));
++      if (!mod_path) {
++        set_bb_error("Could not allocate memory for modules path\n");
++        return false;
++      }
++      strcpy(mod_path, bb_config.mod_path);
++      mod_path[pathlen] = ',';
++      strcpy(mod_path + pathlen + 1, mod_appends);
++    }
++
+     char *x_argv[] = {
+       XORG_BINARY,
+       bb_config.x_display,
+@@ -153,24 +170,24 @@ bool start_secondary(bool need_secondary) {
+       "-sharevts",
+       "-nolisten", "tcp",
+       "-noreset",
++      "-logfile", "/var/log/X.bumblebee.log",
+       "-verbose", "3",
+       "-isolateDevice", pci_id,
+-      "-modulepath", bb_config.mod_path, // keep last
++      "-modulepath", mod_path,
+       NULL
+     };
+     enum {n_x_args = sizeof(x_argv) / sizeof(x_argv[0])};
+-    if (!*bb_config.mod_path) {
+-      x_argv[n_x_args - 3] = 0; //remove -modulepath if not set
+-    }
+     //close any previous pipe, if it (still) exists
+     if (bb_status.x_pipe[0] != -1){close(bb_status.x_pipe[0]); bb_status.x_pipe[0] = -1;}
+     if (bb_status.x_pipe[1] != -1){close(bb_status.x_pipe[1]); bb_status.x_pipe[1] = -1;}
+     //create a new pipe
+     if (pipe2(bb_status.x_pipe, O_NONBLOCK | O_CLOEXEC)){
+       set_bb_error("Could not create output pipe for X");
++      if (pathlen > 0) free(mod_path);
+       return false;
+     }
+     bb_status.x_pid = bb_run_fork_ld_redirect(x_argv, bb_config.ld_path, bb_status.x_pipe[1]);
++    if (pathlen > 0) free(mod_path);
+     //close the end of the pipe that is not ours
+     if (bb_status.x_pipe[1] != -1){close(bb_status.x_pipe[1]); bb_status.x_pipe[1] = -1;}
+   }
diff --git a/nixpkgs/pkgs/tools/X11/caffeine-ng/default.nix b/nixpkgs/pkgs/tools/X11/caffeine-ng/default.nix
new file mode 100644
index 000000000000..c161a7c77378
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/caffeine-ng/default.nix
@@ -0,0 +1,44 @@
+{ gdk-pixbuf, glib, gobject-introspection, gtk3, lib, libnotify,
+  python3Packages, wrapGAppsHook
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "caffeine-ng";
+  version = "3.4.2";
+
+  src = python3Packages.fetchPypi{
+    inherit pname version;
+    sha256="05k8smjlfjcccgmp8qi04l7106k46fs4p8fl5bdqqjwv6pwl7y4w";
+  };
+
+  nativeBuildInputs = [ wrapGAppsHook glib ];
+  buildInputs = [ 
+    gdk-pixbuf gobject-introspection libnotify gtk3 
+    python3Packages.setuptools_scm
+  ];
+  pythonPath = with python3Packages; [
+    dbus-python docopt ewmh pygobject3 pyxdg
+    setproctitle 
+  ];
+
+  doCheck = false; # There are no tests.
+
+  postInstall = ''
+    mkdir -p $out/share
+    cp -r share $out/
+    # autostart file
+    cp -r $out/lib/python*/site-packages/etc $out/etc/
+    glib-compile-schemas --strict $out/share/glib-2.0/schemas
+    for i in $(find $out -name "*.desktop"); do
+      substituteInPlace $i --replace /usr $out
+    done
+  '';
+
+  meta = with lib; {
+    maintainers = with maintainers; [ marzipankaiser ];
+    description = "Status bar application to temporarily inhibit screensaver and sleep mode";
+    homepage = "https://github.com/caffeine-ng/caffeine-ng";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/ckbcomp/default.nix b/nixpkgs/pkgs/tools/X11/ckbcomp/default.nix
new file mode 100644
index 000000000000..1948dd2b9c5d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/ckbcomp/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromGitLab, perl, xkeyboard_config }:
+
+stdenv.mkDerivation rec {
+  pname = "ckbcomp";
+  version = "1.194";
+
+  src = fetchFromGitLab {
+    domain = "salsa.debian.org";
+    owner = "installer-team";
+    repo = "console-setup";
+    rev = version;
+    sha256 = "0fkabv05j5dj10mfrpjyvv7lnxl9qaqkbjhwj72r18i9i4019vgh";
+  };
+
+  buildInputs = [ perl ];
+
+  patchPhase = ''
+    substituteInPlace Keyboard/ckbcomp --replace "/usr/share/X11/xkb" "${xkeyboard_config}/share/X11/xkb"
+    substituteInPlace Keyboard/ckbcomp --replace "rules = 'xorg'" "rules = 'base'"
+  '';
+
+  dontBuild = true;
+
+  installPhase = ''
+    install -Dm0555 -t $out/bin Keyboard/ckbcomp
+    install -Dm0444 -t $out/share/man/man1 man/ckbcomp.1
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Compiles a XKB keyboard description to a keymap suitable for loadkeys";
+    homepage = https://salsa.debian.org/installer-team/console-setup;
+    license = licenses.gpl2Plus;
+    maintainers = with stdenv.lib.maintainers; [ dezgeg ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/dex/default.nix b/nixpkgs/pkgs/tools/X11/dex/default.nix
new file mode 100644
index 000000000000..9387c62c2a51
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/dex/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, python3, fetchpatch }:
+
+stdenv.mkDerivation rec {
+  program = "dex";
+  name = "${program}-${version}";
+  version = "0.8.0";
+
+  src = fetchFromGitHub {
+    owner = "jceb";
+    repo = program;
+    rev = "v${version}";
+    sha256 = "13dkjd1373mbvskrdrp0865llr3zvdr90sc6a6jqswh3crmgmz4k";
+  };
+
+  propagatedBuildInputs = [ python3 ];
+  nativeBuildInputs = [ python3.pkgs.sphinx ];
+  makeFlags = [ "PREFIX=$(out)" "VERSION=$(version)" ];
+
+  patches = [
+    (fetchpatch {
+      url = https://github.com/jceb/dex/commit/107358ddf5e1ca4fa56ef1a7ab161dc3b6adc45a.patch;
+      sha256 = "06dfkfzxp8199by0jc5wim8g8qw38j09dq9p6n9w4zaasla60pjq";
+    })
+  ];
+
+  meta = with stdenv.lib; {
+    description = "A program to generate and execute DesktopEntry files of the Application type";
+    homepage = https://github.com/jceb/dex;
+    platforms = platforms.linux;
+    license = licenses.gpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/dispad/default.nix b/nixpkgs/pkgs/tools/X11/dispad/default.nix
new file mode 100644
index 000000000000..7c1457d3e2ae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/dispad/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchFromGitHub, libX11, libXi, libconfuse }:
+
+stdenv.mkDerivation rec {
+  pname = "dispad";
+  version = "0.3.1";
+
+  src = fetchFromGitHub {
+    owner = "BlueDragonX";
+    repo = "dispad";
+    rev = "v${version}";
+    sha256 = "0y0n9mf1hs3s706gkpmg1lh74m6vvkqc9rdbzgc6s2k7vdl2zp1y";
+  };
+
+  buildInputs = [ libX11 libXi libconfuse ];
+
+  meta = with stdenv.lib; {
+    description = "A small daemon for disabling trackpads while typing";
+    homepage = https://github.com/BlueDragonX/dispad;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ zimbatm ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/dragon-drop/default.nix b/nixpkgs/pkgs/tools/X11/dragon-drop/default.nix
new file mode 100644
index 000000000000..54ece6a9a163
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/dragon-drop/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, gtk, pkgconfig, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "dragon-drop";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "mwh";
+    repo = "dragon";
+    rev = "v${version}";
+    sha256 = "0fgzz39007fdjwq72scp0qygp2v3zc5f1xkm0sxaa8zxm25g1bra";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ gtk ];
+
+  installPhase = ''
+    install -D dragon -t $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Simple drag-and-drop source/sink for X";
+    homepage = https://github.com/mwh/dragon;
+    maintainers = with maintainers; [ jb55 markus1189 ];
+    license = licenses.gpl3;
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/ffcast/default.nix b/nixpkgs/pkgs/tools/X11/ffcast/default.nix
new file mode 100644
index 000000000000..ff84dde6f99b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/ffcast/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, perl, libX11 }:
+
+stdenv.mkDerivation rec {
+  pname = "ffcast";
+  version = "2.5.0";
+
+  src = fetchFromGitHub {
+    owner = "lolilolicon";
+    repo = "FFcast";
+    rev = version;
+    sha256 = "047y32bixhc8ksr98vwpgd0k1xxgsv2vs0n3kc2xdac4krc9454h";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ perl libX11 ];
+
+  configureFlags = [ "--disable-xrectsel" ];
+
+  postBuild = ''
+    make install
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Run commands on rectangular screen regions";
+    homepage = https://github.com/lolilolicon/FFcast;
+    license = licenses.gpl3;
+    maintainers = [ maintainers.guyonvarch ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/go-sct/default.nix b/nixpkgs/pkgs/tools/X11/go-sct/default.nix
new file mode 100644
index 000000000000..01d82b4a112c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/go-sct/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, xorg, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "go-sct";
+  version = "20180605-${stdenv.lib.strings.substring 0 7 rev}";
+  rev = "eb1e851f2d5017038d2b8e3653645c36d3a279f4";
+
+  goPackagePath = "github.com/d4l3k/go-sct";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "d4l3k";
+    repo = "go-sct";
+    sha256 = "16z2ml9x424cnliazyxlw7pm7q64pppjam3dnmq2xab0wlbbm3nm";
+  };
+
+  goDeps = ./deps.nix;
+
+  buildInputs = [ xorg.libX11 xorg.libXrandr ];
+
+  meta = with stdenv.lib; {
+    description = "Color temperature setting library and CLI that operates in a similar way to f.lux and Redshift";
+    license = licenses.mit;
+    maintainers = with maintainers; [ rvolosatovs cstrahan ];
+    platforms = platforms.linux ++ platforms.windows;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/go-sct/deps.nix b/nixpkgs/pkgs/tools/X11/go-sct/deps.nix
new file mode 100644
index 000000000000..f808858e091a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/go-sct/deps.nix
@@ -0,0 +1,11 @@
+[
+  {
+    goPackagePath = "github.com/cpucycle/astrotime";
+    fetch = {
+      type = "git";
+      url = "https://github.com/cpucycle/astrotime";
+      rev = "9c7d514efdb561775030eaf8f1a9ae6bddb3a2ca";
+      sha256 = "024sc7g55v4s54irssm5wsn74sr2k2ynsm6z16w47q66cxhgvby1";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/X11/grobi/default.nix b/nixpkgs/pkgs/tools/X11/grobi/default.nix
new file mode 100644
index 000000000000..976cabc33f8b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/grobi/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchFromGitHub, buildGoPackage }:
+
+buildGoPackage {
+  version = "0.5.1";
+  pname = "grobi";
+
+  goPackagePath = "github.com/fd0/grobi";
+
+  src = fetchFromGitHub {
+    rev = "5ddc167b9e4f84755a515828360abda15c54b7de";
+    owner = "fd0";
+    repo = "grobi";
+    sha256 = "0iyxidq60pf6ki52f8fffplf10nl8w9jx1b7igg98csnc6iqxh89";
+  };
+
+   meta = with stdenv.lib; {
+    homepage = https://github.com/fd0/grobi;
+    description = "Automatically configure monitors/outputs for Xorg via RANDR";
+    license = with licenses; [ bsd2 ];
+    platforms   = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/hsetroot/default.nix b/nixpkgs/pkgs/tools/X11/hsetroot/default.nix
new file mode 100644
index 000000000000..6bae355812c2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/hsetroot/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchurl, autoconf, automake, imlib2, libtool, libX11, pkgconfig, xorgproto }:
+
+stdenv.mkDerivation rec {
+  pname = "hsetroot";
+  version = "1.0.2";
+
+  # The primary download site seems to no longer exist; use Gentoo's mirror for now.
+  src = fetchurl {
+    url = "http://mirror.datapipe.net/gentoo/distfiles/hsetroot-${version}.tar.gz";
+    sha256 = "d6712d330b31122c077bfc712ec4e213abe1fe71ab24b9150ae2774ca3154fd7";
+  };
+
+  # See https://bugs.gentoo.org/show_bug.cgi?id=504056
+  underlinkingPatch = fetchurl {
+    url = http://www.gtlib.gatech.edu/pub/gentoo/gentoo-x86-portage/x11-misc/hsetroot/files/hsetroot-1.0.2-underlinking.patch;
+    name = "hsetroot-1.0.2-underlinking.patch";
+    sha256 = "1px1p3wz7ji725z9nlwb0x0h6lnnvnpz15sblzzq7zrijl3wz65x";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ autoconf automake imlib2 libtool libX11 xorgproto ];
+
+  patches = [ underlinkingPatch ];
+
+  patchFlags = [ "-p0" ];
+
+  preConfigure = "./autogen.sh";
+
+  meta = with stdenv.lib; {
+    description = "Allows you to compose wallpapers ('root pixmaps') for X";
+    homepage = https://thegraveyard.org/hsetroot.html;
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.henrytill ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/imwheel/default.nix b/nixpkgs/pkgs/tools/X11/imwheel/default.nix
new file mode 100644
index 000000000000..efed00f96397
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/imwheel/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, libX11, libXext, libXi, libXmu, libXt, libXtst }:
+
+stdenv.mkDerivation rec {
+  name = "imwheel-1.0.0pre12";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/imwheel/${name}.tar.gz";
+    sha256 = "2320ed019c95ca4d922968e1e1cbf0c075a914e865e3965d2bd694ca3d57cfe3";
+  };
+
+  buildInputs = [ libX11 libXext libXi libXmu libXt libXtst ];
+
+  makeFlags = [
+    "sysconfdir=/etc"
+    "ETCDIR=/etc"
+  ];
+
+  installFlags = [
+    "sysconfdir=${placeholder "out"}/etc"
+    "ETCDIR=${placeholder "out"}/etc"
+  ];
+
+  meta = with stdenv.lib; {
+    homepage = "http://imwheel.sourceforge.net/";
+    description = "Mouse wheel configuration tool for XFree86/Xorg";
+    maintainers = with maintainers; [ jhillyerd ];
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/jumpapp/default.nix b/nixpkgs/pkgs/tools/X11/jumpapp/default.nix
new file mode 100644
index 000000000000..23ba445b6748
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/jumpapp/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, lib, perl, pandoc, fetchFromGitHub, xdotool, wmctrl, xprop, nettools }:
+
+stdenv.mkDerivation rec {
+  pname = "jumpapp";
+  version = "1.1";
+
+  src = fetchFromGitHub {
+    owner = "mkropat";
+    repo = "jumpapp";
+    rev = "v${version}";
+    sha256 = "1jrk4mm42sz6ca2gkb6w3dad53d4im4shpgsq8s4vr6xpl3b43ry";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+  nativeBuildInputs = [ pandoc perl ];
+  buildInputs = [ xdotool wmctrl xprop nettools perl ];
+  postFixup = let
+    runtimePath = lib.makeBinPath buildInputs;
+  in
+  ''
+    sed -i "2 i export PATH=${runtimePath}:\$PATH" $out/bin/jumpapp
+    sed -i "2 i export PATH=${perl}/bin:\$PATH" $out/bin/jumpappify-desktop-entry
+  '';
+
+  meta = {
+    homepage = https://github.com/mkropat/jumpapp;
+    description = "A run-or-raise application switcher for any X11 desktop";
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.matklad ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/keynav/default.nix b/nixpkgs/pkgs/tools/X11/keynav/default.nix
new file mode 100644
index 000000000000..5eb74a267983
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/keynav/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchFromGitHub, pkgconfig, libX11, xorgproto, libXtst, libXi, libXext
+, libXinerama, libXrandr, glib, cairo, xdotool }:
+
+let release = "20180821"; in
+stdenv.mkDerivation {
+  name = "keynav-0.${release}.0";
+
+  src = fetchFromGitHub {
+    owner = "jordansissel";
+    repo = "keynav";
+    rev = "78f9e076a5618aba43b030fbb9344c415c30c1e5";
+    sha256 = "0hmc14fj612z5h7gjgk95zyqab3p35c4a99snnblzxfg0p3x2f1d";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libX11 xorgproto libXtst libXi libXext libXinerama libXrandr
+                  glib cairo xdotool ];
+
+  patchPhase = ''
+    echo >>VERSION MAJOR=0
+    echo >>VERSION RELEASE=${release}
+    echo >>VERSION REVISION=0
+  '';
+
+  installPhase =
+    ''
+      mkdir -p $out/bin $out/share/keynav/doc
+      cp keynav $out/bin
+      cp keynavrc $out/share/keynav/doc
+    '';
+
+  meta = with stdenv.lib; {
+    description = "Generate X11 mouse clicks from keyboard";
+    homepage = https://www.semicomplete.com/projects/keynav/;
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ pSub ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/ksuperkey/default.nix b/nixpkgs/pkgs/tools/X11/ksuperkey/default.nix
new file mode 100644
index 000000000000..1472e39c83c2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/ksuperkey/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchgit, libX11, libXtst, pkgconfig, xorgproto, libXi }:
+
+stdenv.mkDerivation {
+  name = "ksuperkey-git-2015-07-21";
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [
+    libX11 libXtst xorgproto libXi
+  ];
+
+  src = fetchgit {
+    url = "https://github.com/hanschen/ksuperkey";
+    rev = "e75a31a0e3e80b14341e92799a7ce3232ac37639";
+    sha256 = "0y4wkak9dvcm14g54ll1ln9aks2az63hx8fv7b8d3nscxjbkxl6g";
+  };
+
+  preConfigure = ''
+    makeFlags="$makeFlags PREFIX=$out"
+  '';
+
+  meta = {
+    description = "A tool to be able to bind the super key as a key rather than a modifier";
+    license = stdenv.lib.licenses.gpl3;
+    maintainers = [ stdenv.lib.maintainers.vozz ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/libstrangle/default.nix b/nixpkgs/pkgs/tools/X11/libstrangle/default.nix
new file mode 100644
index 000000000000..d24654ce3ad7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/libstrangle/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "libstrangle";
+  version = "2017-02-22";
+
+  src = fetchFromGitHub {
+    owner = "milaq";
+    repo = pname;
+    rev = "6020f9e375ba747c75eb7996b7d5f0214ac3221e";
+    sha256 = "04ikacbjcq9phdc8q5y1qjjpa1sxmzfm0idln9ys95prg289zp4h";
+  };
+
+  makeFlags = [ "prefix=" "DESTDIR=$(out)" ];
+
+  patches = [ ./nixos.patch ];
+
+  postPatch = ''
+    substituteAllInPlace src/strangle.sh
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/milaq/libstrangle";
+    description = "Frame rate limiter for Linux/OpenGL";
+    license = licenses.gpl3;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ aske ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/libstrangle/nixos.patch b/nixpkgs/pkgs/tools/X11/libstrangle/nixos.patch
new file mode 100644
index 000000000000..912bdded6daf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/libstrangle/nixos.patch
@@ -0,0 +1,29 @@
+diff --git a/makefile b/makefile
+index eb13054..a3a1125 100644
+--- a/makefile
++++ b/makefile
+@@ -27,12 +27,10 @@ $(BUILDDIR)libstrangle32.so: $(BUILDDIR)
+ 	$(CC) $(CFLAGS) $(LDFLAGS) -m32 -o $(BUILDDIR)libstrangle32.so $(SOURCES)
+ 
+ install: all
+-	install -m 0644 -D -T $(BUILDDIR)libstrangle.conf $(DESTDIR)/etc/ld.so.conf.d/libstrangle.conf
+ 	install -m 0755 -D -T $(BUILDDIR)libstrangle32.so $(DESTDIR)$(LIB32_PATH)/libstrangle.so
+ 	install -m 0755 -D -T $(BUILDDIR)libstrangle64.so $(DESTDIR)$(LIB64_PATH)/libstrangle.so
+ 	install -m 0755 -D -T $(SOURCEDIR)strangle.sh $(DESTDIR)$(bindir)/strangle
+ 	install -m 0644 -D -T COPYING $(DESTDIR)$(DOC_PATH)/LICENSE
+-	ldconfig
+ 
+ clean:
+ 	rm -f $(BUILDDIR)libstrangle64.so
+diff --git a/src/strangle.sh b/src/strangle.sh
+index e280e86..b2dd42b 100755
+--- a/src/strangle.sh
++++ b/src/strangle.sh
+@@ -31,6 +31,5 @@ if [ "$#" -eq 0 ]; then
+   exit 1
+ fi
+ 
+-# Execute the strangled program under a clean environment
+ # pass through the FPS and overriden LD_PRELOAD environment variables
+-exec env FPS="${FPS}" LD_PRELOAD="${LD_PRELOAD}:libstrangle.so" "$@"
++FPS="${FPS}" LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:@out@/lib/libstrangle/lib64:@out@/lib/libstrangle/lib32" LD_PRELOAD="${LD_PRELOAD}:libstrangle.so" exec "$@"
diff --git a/nixpkgs/pkgs/tools/X11/ncview/default.nix b/nixpkgs/pkgs/tools/X11/ncview/default.nix
new file mode 100644
index 000000000000..1f793aa6c4c9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/ncview/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl
+, netcdf, xlibsWrapper, xorg, udunits, expat
+}:
+
+let
+  pname = "ncview";
+  version = "2.1.8";
+
+in stdenv.mkDerivation {
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url    = "ftp://cirrus.ucsd.edu/pub/ncview/ncview-2.1.8.tar.gz";
+    sha256 = "1gliziyxil2fcz85hj6z0jq33avrxdcjs74d500lhxwvgd8drfp8";
+  };
+
+  buildInputs = [ netcdf xlibsWrapper xorg.libXaw udunits expat ];
+
+  meta = with stdenv.lib; {
+    description = "Visual browser for netCDF format files";
+    homepage    = "http://meteora.ucsd.edu/~pierce/ncview_home_page.html";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ jmettes ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/nitrogen/default.nix b/nixpkgs/pkgs/tools/X11/nitrogen/default.nix
new file mode 100644
index 000000000000..95aa15840da6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/nitrogen/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl, pkgconfig, glib, gtkmm2 }:
+
+let version = "1.6.1";
+in
+stdenv.mkDerivation rec {
+  pname = "nitrogen";
+  inherit version;
+
+  src = fetchurl {
+    url = "http://projects.l3ib.org/nitrogen/files/${pname}-${version}.tar.gz";
+    sha256 = "0zc3fl1mbhq0iyndy4ysmy8vv5c7xwf54rbgamzfhfvsgdq160pl";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+
+  buildInputs = [ glib gtkmm2 ];
+
+  patchPhase = ''
+    patchShebangs data/icon-theme-installer
+  '';
+
+  meta = {
+    description = "A wallpaper browser and setter for X11";
+    longDescription = ''
+      nitrogen is a lightweight utility that can set the root background on X11.
+      It operates independently of any desktop environment, and supports
+      multi-head with Xinerama. Wallpapers are browsable with a convenient GUI,
+      and settings are stored in a human-readable config file.
+    '';
+    homepage = https://github.com/l3ib/nitrogen;
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ stdenv.lib.maintainers.auntie ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/numlockx/default.nix b/nixpkgs/pkgs/tools/X11/numlockx/default.nix
new file mode 100644
index 000000000000..b59e9dc30ac8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/numlockx/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchFromGitHub, libX11, libXext, autoconf }:
+
+stdenv.mkDerivation rec {
+  version = "1.2";
+  pname = "numlockx";
+
+  src = fetchFromGitHub {
+    owner = "rg3";
+    repo = pname;
+    rev = "9159fd3c5717c595dadfcb33b380a85c88406185";
+    sha256 = "1w49fayhwzn5rx0z1q2lrvm7z8jrd34lgb89p853a024bixc3cf2";
+  };
+
+  buildInputs = [ libX11 libXext autoconf ];
+
+  meta = with stdenv.lib; {
+    description = "Allows to start X with NumLock turned on";
+    license = licenses.mit;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/nx-libs/default.nix b/nixpkgs/pkgs/tools/X11/nx-libs/default.nix
new file mode 100644
index 000000000000..77aada9f83fd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/nx-libs/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, autoconf, automake, fetchFromGitHub, libgcc, libjpeg_turbo,
+  libpng, libtool, libxml2, pkgconfig, which, xorg }:
+stdenv.mkDerivation rec {
+  pname = "nx-libs";
+  version = "3.5.99.22";
+  src = fetchFromGitHub {
+    owner = "ArcticaProject";
+    repo = "nx-libs";
+    rev = version;
+    sha256 = "0ipq93s2knv2xbb919d777mrc7v4k9l5bk0d4x6ji1bgispfa7jl";
+  };
+
+  nativeBuildInputs = [ autoconf automake libtool pkgconfig which
+    xorg.gccmakedep xorg.imake ];
+  buildInputs = [ libgcc libjpeg_turbo libpng libxml2 xorg.fontutil
+    xorg.libXcomposite xorg.libXdamage xorg.libXdmcp xorg.libXext xorg.libXfont2
+    xorg.libXinerama xorg.libXpm xorg.libXrandr xorg.libXtst xorg.pixman
+    xorg.xkbcomp xorg.xkeyboardconfig ];
+
+  enableParallelBuilding = true;
+
+  postPatch = ''
+    patchShebangs .
+    find . -type f -name Makefile -exec sed -i 's|^\(SHELL:=\)/bin/bash$|\1${stdenv.shell}|g' {} \;
+    ln -s libNX_X11.so.6.3.0
+  '';
+
+  PREFIX=""; # Don't install to $out/usr/local
+  installPhase = ''
+    make DESTDIR="$out" install
+    # See:
+    # - https://salsa.debian.org/debian-remote-team/nx-libs/blob/bcc152100617dc59156015a36603a15db530a64f/debian/rules#L66-72
+    # - https://github.com/ArcticaProject/nx-libs/issues/652
+    patchelf --remove-needed "libX11.so.6" $out/bin/nxagent
+  '';
+
+  meta = {
+    description = "NX X server based on Xnest";
+    homepage = https://github.com/ArcticaProject/nx-libs;
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = with stdenv.lib.maintainers; [ jD91mZM2 ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/obconf/default.nix b/nixpkgs/pkgs/tools/X11/obconf/default.nix
new file mode 100644
index 000000000000..6b1b353b09be
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/obconf/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, pkgconfig, gtk2, libglade, openbox,
+  imlib2, libstartup_notification, makeWrapper, libSM }:
+
+stdenv.mkDerivation rec {
+  pname = "obconf";
+  version = "2.0.4";
+
+  src = fetchurl {
+    url = "http://openbox.org/dist/obconf/obconf-${version}.tar.gz";
+    sha256 = "1fanjdmd8727kk74x5404vi8v7s4kpq48l583d12fsi4xvsfb8vi";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [
+    gtk2 libglade libSM openbox imlib2 libstartup_notification
+    makeWrapper
+  ];
+
+  postInstall = ''
+    wrapProgram $out/bin/obconf --prefix XDG_DATA_DIRS : ${openbox}/share/
+  '';
+
+  meta = {
+    description = "GUI configuration tool for openbox";
+    homepage = http://openbox.org/wiki/ObConf;
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = [ stdenv.lib.maintainers.lhvwb ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/primus/default.nix b/nixpkgs/pkgs/tools/X11/primus/default.nix
new file mode 100644
index 000000000000..a70b619a6b46
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/primus/default.nix
@@ -0,0 +1,34 @@
+# For a 64bit + 32bit system the LD_LIBRARY_PATH must contain both the 32bit and 64bit primus
+# libraries. Providing a different primusrun for each architecture will not work as expected. EG:
+# Using steam under wine can involve both 32bit and 64bit process. All of which inherit the
+# same LD_LIBRARY_PATH.
+# Other distributions do the same.
+{ stdenv
+, stdenv_i686
+, lib
+, primusLib
+, writeScriptBin
+, runtimeShell
+, primusLib_i686 ? null
+, useNvidia ? true
+}:
+
+let
+  # We override stdenv in case we need different ABI for libGL
+  primusLib_ = primusLib.override { inherit stdenv; };
+  primusLib_i686_ = primusLib_i686.override { stdenv = stdenv_i686; };
+
+  primus = if useNvidia then primusLib_ else primusLib_.override { nvidia_x11 = null; };
+  primus_i686 = if useNvidia then primusLib_i686_ else primusLib_i686_.override { nvidia_x11 = null; };
+  ldPath = lib.makeLibraryPath (lib.filter (x: x != null) (
+    [ primus primus.glvnd ]
+    ++ lib.optionals (primusLib_i686 != null) [ primus_i686 primus_i686.glvnd ]
+  ));
+
+in writeScriptBin "primusrun" ''
+  #!${runtimeShell}
+  export LD_LIBRARY_PATH=${ldPath}:$LD_LIBRARY_PATH
+  # https://bugs.launchpad.net/ubuntu/+source/bumblebee/+bug/1758243
+  export __GLVND_DISALLOW_PATCHING=1
+  exec "$@"
+''
diff --git a/nixpkgs/pkgs/tools/X11/primus/lib.nix b/nixpkgs/pkgs/tools/X11/primus/lib.nix
new file mode 100644
index 000000000000..13d7e06c7304
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/primus/lib.nix
@@ -0,0 +1,52 @@
+{ stdenv, fetchFromGitHub, fetchpatch
+, libX11, libGL, mesa
+, nvidia_x11 ? null
+, libglvnd
+}:
+
+let
+  aPackage =
+    if nvidia_x11 == null then libGL
+    else if nvidia_x11.useGLVND then libglvnd
+    else nvidia_x11;
+
+in stdenv.mkDerivation {
+  name = "primus-lib-2015-04-28";
+
+  src = fetchFromGitHub {
+    owner = "amonakov";
+    repo = "primus";
+    rev = "d1afbf6fce2778c0751eddf19db9882e04f18bfd";
+    sha256 = "118jm57ccawskb8vjq3a9dpa2gh72nxzvx2zk7zknpy0arrdznj1";
+  };
+
+  patches = [
+    # Bump buffer size for long library paths.
+    (fetchpatch {
+      url = "https://github.com/abbradar/primus/commit/2f429e232581c556df4f4bf210aee8a0c99c60b7.patch";
+      sha256 = "1da6ynz7r7x98495i329sf821308j1rpy8prcdraqahz7p4c89nc";
+    })
+  ];
+
+  buildInputs = [ libX11 libGL ];
+
+  makeFlags = [ "LIBDIR=$(out)/lib"
+                "PRIMUS_libGLa=${aPackage}/lib/libGL.so"
+                "PRIMUS_libGLd=${libGL}/lib/libGL.so"
+                "PRIMUS_LOAD_GLOBAL=${mesa}/lib/libglapi.so"
+              ];
+
+  installPhase = ''
+    ln -s $out/lib/libGL.so.1 $out/lib/libGL.so
+  '';
+
+  passthru.glvnd = if nvidia_x11 != null && nvidia_x11.useGLVND then nvidia_x11 else null;
+
+  meta = with stdenv.lib; {
+    description = "Low-overhead client-side GPU offloading";
+    homepage = https://github.com/amonakov/primus;
+    platforms = [ "i686-linux" "x86_64-linux" ];
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/ratmen/default.nix b/nixpkgs/pkgs/tools/X11/ratmen/default.nix
new file mode 100644
index 000000000000..aa5e346334a3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/ratmen/default.nix
@@ -0,0 +1,35 @@
+{stdenv, fetchurl, perl, xorgproto, libX11}:
+let
+  s = # Generated upstream information
+  rec {
+    baseName="ratmen";
+    version="2.2.3";
+    name="${baseName}-${version}";
+    hash="0gnfqhnch9x8jhr87gvdjcp1wsqhchfjilpnqcwx5j0nlqyz6wi6";
+    url="http://www.update.uu.se/~zrajm/programs/ratmen/ratmen-2.2.3.tar.gz";
+    sha256="0gnfqhnch9x8jhr87gvdjcp1wsqhchfjilpnqcwx5j0nlqyz6wi6";
+  };
+  buildInputs = [
+    perl xorgproto libX11
+  ];
+in
+stdenv.mkDerivation {
+  inherit (s) name version;
+  inherit buildInputs;
+  src = fetchurl {
+    inherit (s) url sha256;
+  };
+  makeFlags = [
+    "PREFIX=$(out)"
+  ];
+  meta = {
+    inherit (s) version;
+    description = ''A minimalistic X11 menu creator'';
+    license = stdenv.lib.licenses.free ; # 9menu derivative with 9menu license
+    maintainers = [stdenv.lib.maintainers.raskin];
+    platforms = stdenv.lib.platforms.linux;
+    homepage = http://www.update.uu.se/~zrajm/programs/;
+    downloadPage = "http://www.update.uu.se/~zrajm/programs/ratmen/";
+    updateWalker = true;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/run-scaled/default.nix b/nixpkgs/pkgs/tools/X11/run-scaled/default.nix
new file mode 100644
index 000000000000..fc0068e6e278
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/run-scaled/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchFromGitHub, makeWrapper, bc, xorgserver, xpra, xrandr }:
+
+stdenv.mkDerivation {
+  version = "git-2018-06-03";
+  pname = "run-scaled";
+
+  src = fetchFromGitHub {
+    owner  = "kaueraal";
+    repo   = "run_scaled";
+    rev    = "fa71b3c17e627a96ff707ad69f1def5361f2245c";
+    sha256 = "1ma4ax7ydq4xvyzrc4zapihmf7v3d9zl9mbi8bgpps7nlgz544ys";
+  };
+
+  buildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp run_scaled $out/bin
+    wrapProgram $out/bin/run_scaled --prefix PATH ":" \
+      ${stdenv.lib.makeBinPath [ bc xorgserver xpra xrandr ]}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Run an X application scaled via xpra";
+    homepage = https://github.com/kaueraal/run_scaled;
+    maintainers = [ maintainers.snaar ];
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/runningx/default.nix b/nixpkgs/pkgs/tools/X11/runningx/default.nix
new file mode 100644
index 000000000000..31e2320e1b9f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/runningx/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, pkgconfig, libX11 }:
+
+stdenv.mkDerivation {
+  pname = "runningx";
+  version = "1.0";
+  
+  src = fetchurl {
+    url = "http://www.fiction.net/blong/programs/mutt/autoview/RunningX.c";
+    sha256 = "1mikkhrx6jsx716041qdy3nwjac08pxxvxyq2yablm8zg9hrip0d";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+
+  buildInputs = [ libX11 ];
+
+  phases = [ "buildPhase" "installPhase" ];
+
+  buildPhase = ''
+    cc -O2 -o RunningX $(pkg-config --cflags --libs x11) $src
+  '';
+
+  installPhase = ''
+    mkdir -p "$out"/bin
+    cp -vai RunningX "$out/bin"
+  '';
+
+  meta = {
+    homepage = http://www.fiction.net/blong/programs/mutt/;
+    description = "A program for testing if X is running";
+    license = stdenv.lib.licenses.free;
+    platforms = stdenv.lib.platforms.unix;
+    maintainers = [ stdenv.lib.maintainers.romildo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/screen-message/default.nix b/nixpkgs/pkgs/tools/X11/screen-message/default.nix
new file mode 100644
index 000000000000..c57c4f824310
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/screen-message/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl, autoreconfHook, pkgconfig, gtk3 }:
+
+stdenv.mkDerivation rec {
+  pname = "screen-message";
+  version = "0.25";
+
+  src = fetchurl {
+    url = "mirror://debian/pool/main/s/screen-message/screen-message_${version}.orig.tar.gz";
+    sha256 = "1lw955qq5pq010lzmaf32ylj2iprgsri9ih4hx672c3f794ilab0";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  buildInputs = [ gtk3 ];
+
+  # screen-message installs its binary in $(prefix)/games per default
+  makeFlags = [ "execgamesdir=$(out)/bin" ];
+
+  meta = {
+    homepage = "https://www.joachim-breitner.de/en/projects#screen-message";
+    description = "Displays a short text fullscreen in an X11 window";
+    license = stdenv.lib.licenses.gpl2Plus;
+    maintainers = [ stdenv.lib.maintainers.fpletz ];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/sct/DISPLAY-segfault.patch b/nixpkgs/pkgs/tools/X11/sct/DISPLAY-segfault.patch
new file mode 100644
index 000000000000..6b83afa332ba
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/sct/DISPLAY-segfault.patch
@@ -0,0 +1,10 @@
+--- a/sct.c	2017-09-22 00:44:20.270421881 +0000
++++ b/sct.c	2017-09-26 10:50:38.964562740 +0000
+@@ -36,6 +36,7 @@
+ main(int argc, char **argv)
+ {
+ 	Display *dpy = XOpenDisplay(NULL);
++	if (!dpy) exit(1);
+ 	int screen = DefaultScreen(dpy);
+ 	Window root = RootWindow(dpy, screen);
+ 
diff --git a/nixpkgs/pkgs/tools/X11/sct/default.nix b/nixpkgs/pkgs/tools/X11/sct/default.nix
new file mode 100644
index 000000000000..9f45bbe30871
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/sct/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, libX11, libXrandr }:
+
+stdenv.mkDerivation rec {
+  name = "sct";
+
+  src = fetchurl {
+    url = http://www.tedunangst.com/flak/files/sct.c;
+    sha256 = "01f3ndx3s6d2qh2xmbpmhd4962dyh8yp95l87xwrs4plqdz6knhd";
+  };
+
+  unpackPhase = "cat ${src} > sct.c";
+  patches = [ ./DISPLAY-segfault.patch ];
+
+  buildInputs = [ libX11 libXrandr ];
+  buildPhase = "cc sct.c -o sct -lm -lX11 -lXrandr";
+
+  installPhase = "install -Dt $out/bin sct";
+
+  meta = with stdenv.lib; {
+    homepage = https://www.tedunangst.com/flak/post/sct-set-color-temperature;
+    description = "A minimal utility to set display colour temperature";
+    maintainers = [ maintainers.raskin ];
+    license = licenses.publicDomain;
+    platforms = with platforms; linux ++ freebsd ++ openbsd;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/setroot/default.nix b/nixpkgs/pkgs/tools/X11/setroot/default.nix
new file mode 100644
index 000000000000..a9b5f17af832
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/setroot/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, libX11, imlib2
+, enableXinerama ? true, libXinerama ? null
+}:
+
+assert enableXinerama -> libXinerama != null;
+
+stdenv.mkDerivation rec {
+  version = "2.0.2";
+  pname = "setroot";
+
+  src = fetchFromGitHub {
+    owner = "ttzhou";
+    repo = "setroot";
+    rev = "v${version}";
+    sha256 = "0w95828v0splk7bj5kfacp4pq6wxpyamvyjmahyvn5hc3ycq21mq";
+  };
+
+  buildInputs = [ libX11 imlib2 ]
+    ++ stdenv.lib.optional enableXinerama libXinerama;
+
+  buildFlags = [ "CC=cc" (if enableXinerama then "xinerama=1" else "xinerama=0") ] ;
+
+  installFlags = [ "DESTDIR=$(out)" "PREFIX=" ];
+
+  meta = with stdenv.lib; {
+    description = "Simple X background setter inspired by imlibsetroot and feh";
+    homepage = https://github.com/ttzhou/setroot;
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.vyp ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/skippy-xd/default.nix b/nixpkgs/pkgs/tools/X11/skippy-xd/default.nix
new file mode 100644
index 000000000000..4fd9678733dd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/skippy-xd/default.nix
@@ -0,0 +1,30 @@
+{stdenv, fetchgit, xorgproto, libX11, libXft, libXcomposite, libXdamage
+, libXext, libXinerama, libjpeg, giflib, pkgconfig
+}:
+let
+  buildInputs = [
+    xorgproto libX11 libXft libXcomposite libXdamage libXext
+    libXinerama libjpeg giflib pkgconfig
+  ];
+in
+stdenv.mkDerivation rec {
+  version = "git-2015-03-01";
+  pname = "skippy-xd";
+  inherit buildInputs;
+  src = fetchgit {
+    url = "https://github.com/richardgv/skippy-xd/";
+    rev = "397216ca67";
+    sha256 = "0zcjacilmsv69rv85j6nfr6pxy8z36w1sjz0dbjg6s5m4kga1zl8";
+  };
+  makeFlags = ["PREFIX=$(out)"];
+  preInstall = ''
+    sed -e "s@/etc/xdg@$out&@" -i Makefile
+  '';
+  meta = {
+    inherit version;
+    description = ''Expose-style compositing-based standalone window switcher'';
+    license = stdenv.lib.licenses.gpl2Plus ;
+    maintainers = [stdenv.lib.maintainers.raskin];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/srandrd/default.nix b/nixpkgs/pkgs/tools/X11/srandrd/default.nix
new file mode 100644
index 000000000000..6d5fa0f3d980
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/srandrd/default.nix
@@ -0,0 +1,31 @@
+{ stdenv
+, fetchFromGitHub
+, libX11
+, libXrandr
+, libXinerama
+}:
+
+stdenv.mkDerivation rec {
+  pname = "srandrd";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "jceb";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "07r1ck2ijj30n19ylndgw75ly9k3815kj9inpxblfnjpwbbw6ic0";
+  };
+
+  buildInputs = [ libX11 libXrandr libXinerama ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/jceb/srandrd";
+    description = "Simple randr daemon";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.utdemir ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/X11/sselp/default.nix b/nixpkgs/pkgs/tools/X11/sselp/default.nix
new file mode 100644
index 000000000000..30f99cd40f29
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/sselp/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl, libX11 }:
+
+stdenv.mkDerivation rec {
+  version = "0.2";
+  pname = "sselp";
+ 
+  src = fetchurl {
+    url = "https://dl.suckless.org/tools/${pname}-${version}.tar.gz";
+    sha256 = "08mqp00lrh1chdrbs18qr0xv63h866lkmfj87kfscwdm1vn9a3yd";
+  };
+ 
+  buildInputs = [ libX11 ];
+
+  patchPhase = ''
+    sed -i "s@/usr/local@$out@g" config.mk
+    sed -i "s@/usr/X11R6/include@${libX11}/include@g" config.mk
+    sed -i "s@/usr/X11R6/lib@${libX11}/lib@g" config.mk
+  '';
+
+  meta = {
+    homepage = https://tools.suckless.org/sselp;
+    description = "Prints the X selection to stdout, useful in scripts";
+    license = stdenv.lib.licenses.mit;
+    maintainers = [stdenv.lib.maintainers.magnetophon ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/vdpauinfo/default.nix b/nixpkgs/pkgs/tools/X11/vdpauinfo/default.nix
new file mode 100644
index 000000000000..153ff45d2a70
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/vdpauinfo/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchurl, pkgconfig, libvdpau }:
+
+stdenv.mkDerivation rec {
+  name = "vdpauinfo-1.0";
+
+  src = fetchurl {
+    url = "https://people.freedesktop.org/~aplattner/vdpau/${name}.tar.gz";
+    sha256 = "1i2b0k9h8r0lnxlrkgqzmrjakgaw3f1ygqqwzx8w6676g85rcm20";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libvdpau ];
+
+  meta = with stdenv.lib; {
+    homepage = https://people.freedesktop.org/~aplattner/vdpau/;
+    description = "Tool to query the Video Decode and Presentation API for Unix (VDPAU) abilities of the system";
+    license = licenses.mit; # expat version
+    platforms = platforms.unix;
+    maintainers = [ maintainers.vcunat ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/virtualgl/default.nix b/nixpkgs/pkgs/tools/X11/virtualgl/default.nix
new file mode 100644
index 000000000000..aa839e6d684d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/virtualgl/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, lib
+, virtualglLib
+, virtualglLib_i686 ? null
+}:
+
+stdenv.mkDerivation {
+  name = "virtualgl-${lib.getVersion virtualglLib}";
+
+  paths = [ virtualglLib ];
+
+  buildCommand = ''
+    mkdir -p $out/bin
+    for i in ${virtualglLib}/bin/* ${virtualglLib}/bin/.vglrun*; do
+      ln -s "$i" $out/bin
+    done
+  '' + lib.optionalString (virtualglLib_i686 != null) ''
+    ln -sf ${virtualglLib_i686}/bin/.vglrun.vars32 $out/bin
+  '';
+
+  meta = {
+    platforms = stdenv.lib.platforms.linux;
+    inherit (virtualglLib.meta) license;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/virtualgl/lib.nix b/nixpkgs/pkgs/tools/X11/virtualgl/lib.nix
new file mode 100644
index 000000000000..92afa30e6168
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/virtualgl/lib.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, cmake, libGL, libGLU, libX11, libXv, libXtst, libjpeg_turbo, fltk }:
+
+stdenv.mkDerivation rec {
+  pname = "virtualgl-lib";
+  version = "2.6.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/virtualgl/VirtualGL-${version}.tar.gz";
+    sha256 = "0ngqwsm9bml6lis0igq3bn92amh04rccd6jhjibj3418hrbzipvr";
+  };
+
+  cmakeFlags = [ "-DVGL_SYSTEMFLTK=1" "-DTJPEG_LIBRARY=${libjpeg_turbo.out}/lib/libturbojpeg.so" ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [ libjpeg_turbo libGL libGLU fltk libX11 libXv libXtst ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    homepage = http://www.virtualgl.org/;
+    description = "X11 GL rendering in a remote computer with full 3D hw acceleration";
+    license = licenses.wxWindows;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/wayv/default.nix b/nixpkgs/pkgs/tools/X11/wayv/default.nix
new file mode 100644
index 000000000000..f906a6d403e6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/wayv/default.nix
@@ -0,0 +1,32 @@
+{stdenv, fetchFromGitHub, libX11}:
+stdenv.mkDerivation rec {
+  pname = "wayv";
+  version = "0.3";
+
+  src = fetchFromGitHub {
+    owner = "mikemb";
+    repo = pname;
+    rev = "b716877603250f690f08b593bf30fd5e8a93a872";
+    sha256 = "046dvaq6na1fyxz5nrjg13aaz6ific9wbygck0dknqqfmmjrsv3b";
+  };
+
+  buildInputs = [ libX11 ];
+
+  postInstall = ''
+    make -C doc install
+    mkdir -p "$out"/share/doc/wayv
+    cp [A-Z][A-Z]* "$out"/share/doc/wayv
+    cp doc/[A-Z][A-Z]* "$out"/share/doc/wayv
+    cp doc/*.txt "$out"/share/doc/wayv
+    cp doc/*.jpg "$out"/share/doc/wayv
+  '';
+
+  meta = {
+    inherit version;
+    description = "A gesture control for X11";
+    license = stdenv.lib.licenses.gpl2Plus ;
+    maintainers = [stdenv.lib.maintainers.raskin];
+    platforms = stdenv.lib.platforms.linux;
+    homepage = https://github.com/mikemb/wayV;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/wmctrl/64-bit-data.patch b/nixpkgs/pkgs/tools/X11/wmctrl/64-bit-data.patch
new file mode 100644
index 000000000000..3ec1c913ffea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/wmctrl/64-bit-data.patch
@@ -0,0 +1,32 @@
+Description: Correct 64 Architecture implementation of 32 bit data
+Author: Chris Donoghue <cdonoghu@gmail.com>
+Bug-Debian: http://bugs.debian.org/362068
+
+--- wmctrl-1.07.orig/main.c
++++ wmctrl-1.07/main.c
+@@ -1425,6 +1425,16 @@ static gchar *get_property (Display *dis
+      *
+      * long_length = Specifies the length in 32-bit multiples of the
+      *               data to be retrieved.
++     *
++     * NOTE:  see 
++     * http://mail.gnome.org/archives/wm-spec-list/2003-March/msg00067.html
++     * In particular:
++     *
++     * 	When the X window system was ported to 64-bit architectures, a
++     * rather peculiar design decision was made. 32-bit quantities such
++     * as Window IDs, atoms, etc, were kept as longs in the client side
++     * APIs, even when long was changed to 64 bits.
++     *
+      */
+     if (XGetWindowProperty(disp, win, xa_prop_name, 0, MAX_PROPERTY_VALUE_LEN / 4, False,
+             xa_prop_type, &xa_ret_type, &ret_format,     
+@@ -1441,6 +1451,8 @@ static gchar *get_property (Display *dis
+ 
+     /* null terminate the result to make string handling easier */
+     tmp_size = (ret_format / 8) * ret_nitems;
++    /* Correct 64 Architecture implementation of 32 bit data */
++    if(ret_format==32) tmp_size *= sizeof(long)/4;
+     ret = g_malloc(tmp_size + 1);
+     memcpy(ret, ret_prop, tmp_size);
+     ret[tmp_size] = '\0';
diff --git a/nixpkgs/pkgs/tools/X11/wmctrl/default.nix b/nixpkgs/pkgs/tools/X11/wmctrl/default.nix
new file mode 100644
index 000000000000..e4cb70c8f24d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/wmctrl/default.nix
@@ -0,0 +1,33 @@
+{ stdenv
+, fetchurl
+, libX11
+, glib
+, pkgconfig
+, libXmu
+}:
+
+stdenv.mkDerivation rec {
+
+  pname = "wmctrl";
+  version = "1.07";
+
+  src = fetchurl {
+    # NOTE: 2019-04-11: There is also a semi-official mirror: http://tripie.sweb.cz/utils/wmctrl/
+    url = "https://sites.google.com/site/tstyblo/wmctrl/${pname}-${version}.tar.gz";
+    sha256 = "1afclc57b9017a73mfs9w7lbdvdipmf9q0xdk116f61gnvyix2np";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libX11 libXmu glib ];
+
+  patches = [ ./64-bit-data.patch ];
+
+  meta = {
+    homepage = https://sites.google.com/site/tstyblo/wmctrl;
+    description = "CLI tool to interact with EWMH/NetWM compatible X Window Managers";
+    license = stdenv.lib.licenses.gpl2;
+    platforms = with stdenv.lib.platforms; all;
+    maintainers = [ stdenv.lib.maintainers.Anton-Latukha ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/X11/wmutils-core/default.nix b/nixpkgs/pkgs/tools/X11/wmutils-core/default.nix
new file mode 100644
index 000000000000..fe5c70f6ce23
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/wmutils-core/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl, libxcb }:
+
+stdenv.mkDerivation rec {
+  pname = "wmutils-core";
+  version = "1.1";
+
+  src = fetchurl {
+    url = "https://github.com/wmutils/core/archive/v${version}.tar.gz";
+    sha256 = "0aq95khs154j004b79w9rgm80vpggxfqynha5rckm2cx20d1fa5s";
+  };
+
+  buildInputs = [ libxcb ];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with stdenv.lib; {
+    description = "Set of window manipulation tools";
+    homepage = https://github.com/wmutils/core;
+    license = licenses.isc;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/wmutils-opt/default.nix b/nixpkgs/pkgs/tools/X11/wmutils-opt/default.nix
new file mode 100644
index 000000000000..c12303038623
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/wmutils-opt/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub, libxcb }:
+
+stdenv.mkDerivation rec {
+  pname = "wmutils-opt";
+  version = "1.0";
+
+  src = fetchFromGitHub {
+    owner = "wmutils";
+    repo = "opt";
+    rev = "v${version}";
+    sha256 = "0gd05qsir1lnzfrbnfh08qwsryz7arwj20f886nqh41m87yqaljz";
+  };
+
+  buildInputs = [ libxcb ];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with stdenv.lib; {
+    description = "Optional addons to wmutils";
+    homepage = https://github.com/wmutils/opt;
+    license = licenses.isc;
+    maintainers = with maintainers; [ vifino ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/wpgtk/default.nix b/nixpkgs/pkgs/tools/X11/wpgtk/default.nix
new file mode 100644
index 000000000000..fce3df19718c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/wpgtk/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, python3Packages, fetchFromGitHub, libxslt,
+  gobject-introspection, gtk3, wrapGAppsHook, gnome3 }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "wpgtk";
+  version = "6.0.11";
+
+  src = fetchFromGitHub {
+    owner = "deviantfero";
+    repo = "wpgtk";
+    rev = version;
+    sha256 = "0da4gj54c361a0bicrjhhb9bp9yr5lx7p1knrsc4dykap1xn23vi";
+  };
+
+  buildInputs = [
+    wrapGAppsHook
+    gtk3
+    gobject-introspection
+    gnome3.adwaita-icon-theme
+    libxslt
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    pygobject3
+    pillow
+    pywal
+  ];
+
+  # The $HOME variable must be set to build the package. A "permission denied" error will occur otherwise
+  preBuild = ''
+      export HOME=$(pwd)
+  '';
+
+  # No test exist
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "Template based wallpaper/colorscheme generator and manager";
+    longDescription = ''
+     In short, wpgtk is a colorscheme/wallpaper manager with a template system attached which lets you create templates from any textfile and will replace keywords on it on the fly, allowing for great styling and theming possibilities.
+
+     wpgtk uses pywal as its colorscheme generator, but builds upon it with a UI and other features, such as the abilty to mix and edit the colorschemes generated and save them with their respective wallpapers, having light and dark themes, hackable and fast GTK theme made specifically for wpgtk and custom keywords and values to replace in templates.
+
+     INFO: To work properly, this tool needs "programs.dconf.enable = true" on nixos or dconf installed. A reboot may be required after installing dconf.
+     '';
+    homepage = https://github.com/deviantfero/wpgtk;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.melkor333 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/x11spice/default.nix b/nixpkgs/pkgs/tools/X11/x11spice/default.nix
new file mode 100644
index 000000000000..513149049faf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/x11spice/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromGitLab, autoreconfHook, pkgconfig
+, xorg, gtk2, spice, spice-protocol
+}:
+
+stdenv.mkDerivation rec {
+  pname = "x11spice";
+  version = "2019-08-20";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.freedesktop.org";
+    owner = "spice";
+    repo = "x11spice";
+    rev = "51d2a8ba3813469264959bb3ba2fc6fe08097be6";
+    sha256 = "0va5ix14vnqch59gq8wvrhw6q0w0n27sy70xx5kvfj2cl0h1xpg8";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+
+  buildInputs = [
+    xorg.libxcb xorg.xcbutil xorg.utilmacros
+    gtk2 spice spice-protocol
+  ];
+
+  NIX_LDFLAGS = "-lpthread";
+
+  meta = with stdenv.lib; {
+    description = ''
+      x11spice will enable a running X11 desktop to be available
+      via a Spice server
+    '';
+    homepage = https://gitlab.freedesktop.org/spice/x11spice;
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ rnhmjoj ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/x11vnc/default.nix b/nixpkgs/pkgs/tools/X11/x11vnc/default.nix
new file mode 100644
index 000000000000..acf0fc9aabfd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/x11vnc/default.nix
@@ -0,0 +1,49 @@
+{ stdenv, fetchFromGitHub,
+  openssl, zlib, libjpeg, xorg, coreutils, libvncserver,
+  autoreconfHook, pkgconfig }:
+
+stdenv.mkDerivation rec {
+  pname = "x11vnc";
+  version = "0.9.16";
+
+  src = fetchFromGitHub {
+    owner = "LibVNC";
+    repo = "x11vnc";
+    rev = version;
+    sha256 = "1g652mmi79pfq4p5p7spaswa164rpzjhc5rn2phy5pm71lm0vib1";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+
+  buildInputs =
+    [ xorg.libXfixes xorg.xorgproto openssl xorg.libXdamage
+      zlib xorg.libX11 libjpeg
+      xorg.libXtst xorg.libXinerama xorg.libXrandr
+      xorg.libXext
+      xorg.libXi xorg.libXrender
+      libvncserver
+    ];
+
+  postPatch = ''
+    substituteInPlace src/unixpw.c \
+        --replace '"/bin/su"' '"/run/wrappers/bin/su"' \
+        --replace '"/bin/true"' '"${coreutils}/bin/true"'
+
+    sed -i -e '/#!\/bin\/sh/a"PATH=${xorg.xdpyinfo}\/bin:${xorg.xauth}\/bin:$PATH\\n"' -e 's|/bin/su|/run/wrappers/bin/su|g' src/ssltools.h
+
+    # Xdummy script is currently broken, so we avoid building it. This removes everything Xdummy-related from the affected Makefile
+    sed -i -e '/^\tXdummy.c\ \\$/,$d' -e 's/\tx11vnc_loop\ \\/\tx11vnc_loop/' misc/Makefile.am
+  '';
+
+  preConfigure = ''
+    configureFlags="--mandir=$out/share/man"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A VNC server connected to a real X11 screen";
+    homepage = https://github.com/LibVNC/x11vnc/;
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ OPNA2608 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/x2vnc/default.nix b/nixpkgs/pkgs/tools/X11/x2vnc/default.nix
new file mode 100644
index 000000000000..6075f0070f90
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/x2vnc/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchurl, xorg }:
+
+stdenv.mkDerivation {
+  name = "x2vnc-1.7.2";
+
+  src = fetchurl {
+    url = https://fredrik.hubbe.net/x2vnc/x2vnc-1.7.2.tar.gz;
+    sha256 = "00bh9j3m6snyd2fgnzhj5vlkj9ibh69gfny9bfzlxbnivb06s1yw";
+  };
+
+  buildInputs = with xorg; [
+      libX11 xorgproto libXext libXrandr
+    ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = with stdenv.lib; {
+    homepage = http://fredrik.hubbe.net/x2vnc.html;
+    description = "A program to control a remote VNC server";
+    platforms = platforms.unix;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/x2x/default.nix b/nixpkgs/pkgs/tools/X11/x2x/default.nix
new file mode 100644
index 000000000000..5c8e3d4f8fb6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/x2x/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, imake, libX11, libXtst, libXext, gccmakedep }:
+
+stdenv.mkDerivation {
+  name = "x2x-1.27";
+
+  src = fetchurl {
+    url = "https://github.com/downloads/dottedmag/x2x/x2x-1.27.tar.gz";
+    sha256 = "0dha0kn1lbc4as0wixsvk6bn4innv49z9a0sm5wlx4q1v0vzqzyj";
+  };
+
+  nativeBuildInputs = [ imake gccmakedep ];
+  buildInputs = [ libX11 libXtst libXext ];
+
+  hardeningDisable = [ "format" ];
+
+  buildFlags = [ "x2x" ];
+
+  installPhase = ''
+    install -D x2x $out/bin/x2x
+    install -D x2x.1 $out/man/man1/x2x.1
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Allows the keyboard, mouse on one X display to be used to control another X display";
+    homepage = https://github.com/dottedmag/x2x;
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xannotate/default.nix b/nixpkgs/pkgs/tools/X11/xannotate/default.nix
new file mode 100644
index 000000000000..d52698b0ed7e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xannotate/default.nix
@@ -0,0 +1,23 @@
+{stdenv, fetchFromBitbucket, libX11}:
+stdenv.mkDerivation rec {
+  pname = "xannotate";
+  version = "20150301";
+  
+  src = fetchFromBitbucket {
+    owner = "blais";
+    repo = pname;
+    rev = "e5591c2ec67ca39988f1fb2966e94f0f623f9aa7";
+    sha256 = "02jy19if0rnbxvs6b0l5mi9ifvdj2qmv0pv278v9kfs0kvir68ik";
+  };
+
+  buildInputs = [ libX11 ];
+
+  meta = {
+    inherit version;
+    description = "A tool to scribble over X windows";
+    license = stdenv.lib.licenses.gpl2Plus ;
+    maintainers = [stdenv.lib.maintainers.raskin];
+    platforms = stdenv.lib.platforms.linux;
+    homepage = https://bitbucket.org/blais/xannotate;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xautomation/default.nix b/nixpkgs/pkgs/tools/X11/xautomation/default.nix
new file mode 100644
index 000000000000..a648eefcdde1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xautomation/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl, pkgconfig, libpng, libX11, libXext, libXi, libXtst }:
+
+let version = "1.09"; in
+stdenv.mkDerivation {
+  pname = "xautomation";
+  inherit version;
+  src = fetchurl {
+    url = "https://www.hoopajoo.net/static/projects/xautomation-${version}.tar.gz";
+    sha256 = "03azv5wpg65h40ip2kk1kdh58vix4vy1r9bihgsq59jx2rhjr3zf";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libpng libX11 libXext libXi libXtst ];
+
+  meta = {
+    homepage = https://www.hoopajoo.net/projects/xautomation.html;
+    description = "Control X from the command line for scripts, and do \"visual scraping\" to find things on the screen";
+    license = stdenv.lib.licenses.gpl2Plus;
+    maintainers = with stdenv.lib.maintainers; [ vaibhavsagar ];
+    platforms = with stdenv.lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xbanish/default.nix b/nixpkgs/pkgs/tools/X11/xbanish/default.nix
new file mode 100644
index 000000000000..af522cca9e10
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xbanish/default.nix
@@ -0,0 +1,42 @@
+{stdenv, fetchFromGitHub, libX11, libXi, libXt, libXfixes, libXext}:
+
+stdenv.mkDerivation rec {
+  version = "1.6";
+  pname = "xbanish";
+
+  buildInputs = [
+    libX11 libXi libXt libXfixes libXext
+  ];
+
+  src = fetchFromGitHub {
+    owner = "jcs";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0vp8ja68hpmqkl61zyjar3czhmny1hbm74m8f393incfz1ymr3i8";
+  };
+
+  makeFlags=[ "PREFIX=$(out)" ];
+
+  preInstall = ''
+    mkdir -p $out/bin $out/man/man1
+  '';
+
+  meta = {
+    description = "Hides mouse pointer while not in use";
+    longDescription = ''
+      xbanish hides the mouse cursor when you start typing, and shows it again when
+      the mouse cursor moves or a mouse button is pressed.  This is similar to
+      xterm's pointerMode setting, but xbanish works globally in the X11 session.
+
+      unclutter's -keystroke mode is supposed to do this, but it's broken[0].  I
+      looked into fixing it, but the unclutter source code is terrible, so I wrote
+      xbanish.
+
+      The name comes from ratpoison's "banish" command that sends the cursor to the
+      corner of the screen.
+    '';
+    license = stdenv.lib.licenses.bsd3;
+    maintainers = [stdenv.lib.maintainers.choochootrain];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xbindkeys-config/default.nix b/nixpkgs/pkgs/tools/X11/xbindkeys-config/default.nix
new file mode 100644
index 000000000000..bb83effe6011
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xbindkeys-config/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchurl, gtk, pkgconfig, procps, makeWrapper, ... }:
+
+stdenv.mkDerivation rec {
+  pname = "xbindkeys-config";
+  version = "0.1.3";
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ gtk makeWrapper ];
+
+  src = fetchurl {
+    url = "mirror://debian/pool/main/x/xbindkeys-config/xbindkeys-config_${version}.orig.tar.gz";
+    sha256 = "1rs3li2hyig6cdzvgqlbz0vw6x7rmgr59qd6m0cvrai8xhqqykda";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  meta = {
+    homepage = https://packages.debian.org/source/xbindkeys-config;
+    description = "Graphical interface for configuring xbindkeys";
+    license = stdenv.lib.licenses.gpl2Plus;
+    maintainers = with stdenv.lib.maintainers; [benley];
+    platforms = with stdenv.lib.platforms; linux;
+  };
+
+  patches = [ ./xbindkeys-config-patch1.patch ];
+
+  # killall is dangerous on non-gnu platforms. Use pkill instead.
+  postPatch = ''
+    substituteInPlace middle.c --replace "killall" "pkill -x"
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man/man1
+    gzip -c ${./xbindkeys-config.1} > $out/share/man/man1/xbindkeys-config.1.gz
+    cp xbindkeys_config $out/bin/xbindkeys-config
+    wrapProgram $out/bin/xbindkeys-config --prefix PATH ":" "${procps}/bin"
+  '';
+}
diff --git a/nixpkgs/pkgs/tools/X11/xbindkeys-config/xbindkeys-config-patch1.patch b/nixpkgs/pkgs/tools/X11/xbindkeys-config/xbindkeys-config-patch1.patch
new file mode 100644
index 000000000000..d4620b5d9071
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xbindkeys-config/xbindkeys-config-patch1.patch
@@ -0,0 +1,108 @@
+---
+ Makefile           |  6 +++---
+ menu.c             | 11 ++++++++---
+ middle.c           |  9 +++++++--
+ xbindkeys_config.c |  3 ++-
+ 4 files changed, 20 insertions(+), 9 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 602875c..28e46cd 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,9 +1,9 @@
+ # makefile cre par Laurent VUIBERT
+ 
+-CC=	gcc -O3 -Wall
++CC=	gcc $(CFLAGS)
+ STD=	_GNU_SOURCE
+-GTK=	`gtk-config  --cflags --libs`
+-GTK2=	`gtk-config  --cflags`
++GTK=	`pkg-config  --cflags --libs gtk+-2.0`
++GTK2=	`pkg-config  --cflags gtk+-2.0`
+ OBJS=	xbindkeys_config.o menu.o middle.o speedc.o
+ NOM=    xbindkeys_config
+ 
+diff --git a/menu.c b/menu.c
+index ed3e7ec..f11526d 100644
+--- a/menu.c
++++ b/menu.c
+@@ -283,6 +283,8 @@ void menu_manual (GtkMenuItem *menuitem, gpointer user_data)
+   GtkWidget *window;
+   GtkWidget *text;
+   GtkWidget *vbox;
++  GtkTextBuffer *textbuffer;
++  GtkTextIter iter;
+   
+   window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
+   gtk_window_set_title(GTK_WINDOW(window),
+@@ -293,10 +295,13 @@ void menu_manual (GtkMenuItem *menuitem, gpointer user_data)
+   text = gtk_label_new("\nManual\n");
+   gtk_box_pack_start(GTK_BOX(vbox), text, FALSE, FALSE, 0);
+   
+-  text = gtk_text_new(NULL,NULL);
++/* BDD - FIXME */
++/*  text = gtk_text_new(NULL,NULL); */
++  text = gtk_text_view_new();
++  textbuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
++  gtk_text_buffer_get_iter_at_offset (textbuffer, &iter, 0);
+   
+-  
+-  gtk_text_insert (GTK_TEXT(text), NULL, NULL, NULL,
++  gtk_text_buffer_insert (textbuffer, &iter, 
+ 		   MANUAL_TEXT, sizeof(MANUAL_TEXT)-1);
+   gtk_box_pack_start(GTK_BOX(vbox), text, TRUE, TRUE, 0);
+   gtk_widget_set_usize(text,300,250);
+diff --git a/middle.c b/middle.c
+index daa61aa..605ab10 100644
+--- a/middle.c
++++ b/middle.c
+@@ -551,6 +551,8 @@ void view_generated_file()
+   GtkWidget *window;
+   GtkWidget *text;
+   GtkWidget *src;
++  GtkTextBuffer *textbuffer;
++  GtkTextIter iter;
+   char line  [1024];
+ 
+   unlink(TEMP_FILE); 
+@@ -561,11 +563,13 @@ void view_generated_file()
+     gtk_window_set_title(GTK_WINDOW(window), "Generated File");
+     src = gtk_scrolled_window_new ( NULL, NULL );
+     gtk_widget_set_usize(src,500,400);
+-    text = gtk_text_new (NULL, NULL);
++    text = gtk_text_view_new ();
++    textbuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
++    gtk_text_buffer_get_iter_at_offset (textbuffer, &iter, 0);
+     gtk_container_add (GTK_CONTAINER(src),  text);
+ 
+     while (fgets (line, sizeof(line), f))
+-      gtk_text_insert (GTK_TEXT(text), NULL, NULL, NULL,
++      gtk_text_buffer_insert (textbuffer, &iter,
+ 		       line, strlen(line));
+ 
+     gtk_container_add(GTK_CONTAINER(window),src);
+@@ -610,6 +614,7 @@ void  save_file(char file_out[])
+   fprintf(f, "# m:xxx + c:xxx \n");
+   fprintf(f, "# Shift+... \n\n\n\n\n");
+ 
++
+   if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(Flag_NumLock)))
+     fprintf(f,"keystate_numlock = enable\n");
+   else 
+diff --git a/xbindkeys_config.c b/xbindkeys_config.c
+index 75bad30..3c02a2b 100644
+--- a/xbindkeys_config.c
++++ b/xbindkeys_config.c
+@@ -95,7 +95,8 @@ int main (int argc, char *argv[])
+      accel_group = gtk_accel_group_new();
+      menu=xbindkeys_config_menu(accel_group);
+      gtk_box_pack_start(GTK_BOX(vbox),menu,FALSE,FALSE,0);
+-     gtk_accel_group_attach(accel_group, GTK_OBJECT(window));
++/* BDD - FIXME - Don't need this? */
++/*     gtk_accel_group_attach(accel_group, GTK_OBJECT(window)); */
+      
+      middle= xbindkeys_config_middle();
+      gtk_box_pack_start(GTK_BOX(vbox),middle,TRUE,TRUE,0);
+-- 
+2.1.3
+
diff --git a/nixpkgs/pkgs/tools/X11/xbindkeys-config/xbindkeys-config.1 b/nixpkgs/pkgs/tools/X11/xbindkeys-config/xbindkeys-config.1
new file mode 100644
index 000000000000..e3f8de1a8046
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xbindkeys-config/xbindkeys-config.1
@@ -0,0 +1,21 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.27.
+.TH XBINDKEYS_CONFIG "1" "April 2002" "xbindkeys-config" "User Commands"
+.SH NAME
+xbindkeys-config \- GTK+ configuration tool for xbindkeys
+.SH "SYNOPSIS"
+xbindkeys-config 
+[\-\-file|\-f file]
+[\-\-help|\-h]
+[\-\-show|\-s]
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+This Help
+.TP
+\fB\-f\fR, \fB\-\-file\fR
+Use an alternative rc file
+.TP
+\fB\-s\fR, \fB\-\-show\fR
+show only the rc file
+.SH AUTHOR
+This manual page was written by Joerg Jaspert <joerg@debian.org>,
+for the Debian GNU/Linux system (but may be used by others).
diff --git a/nixpkgs/pkgs/tools/X11/xbindkeys/default.nix b/nixpkgs/pkgs/tools/X11/xbindkeys/default.nix
new file mode 100644
index 000000000000..23e0ce63e5b4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xbindkeys/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl, pkgconfig, libX11, guile }:
+
+let version = "1.8.6"; in
+stdenv.mkDerivation {
+  pname = "xbindkeys";
+  inherit version;
+  src = fetchurl {
+    url = "https://www.nongnu.org/xbindkeys/xbindkeys-${version}.tar.gz";
+    sha256 = "060df6d8y727jp1inp7blp44cs8a7jig7vcm8ndsn6gw36z1h3bc";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libX11 guile ];
+
+  meta = {
+    homepage = https://www.nongnu.org/xbindkeys/xbindkeys.html;
+    description = "Launch shell commands with your keyboard or your mouse under X Window";
+    license = stdenv.lib.licenses.gpl2Plus;
+    maintainers = with stdenv.lib.maintainers; [viric];
+    platforms = with stdenv.lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xbrightness/default.nix b/nixpkgs/pkgs/tools/X11/xbrightness/default.nix
new file mode 100644
index 000000000000..e196411ce412
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xbrightness/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, imake, gccmakedep
+, libX11, libXaw, libXext, libXmu, libXpm, libXxf86vm  }:
+
+stdenv.mkDerivation {
+
+  name = "xbrightness-0.3-mika-akk";
+  src = fetchurl {
+    url = https://shallowsky.com/software/xbrightness/xbrightness-0.3-mika-akk.tar.gz;
+    sha256 = "2564dbd393544657cdabe4cbf535d9cfb9abe8edddb1b8cdb1ed4d12f358626e";
+  };
+
+  nativeBuildInputs = [ imake gccmakedep ];
+  buildInputs = [ libX11 libXaw libXext libXmu libXpm libXxf86vm ];
+
+  makeFlags = [ "BINDIR=$(out)/bin" "MANPATH=$(out)/share/man" ];
+  installTargets = [ "install" "install.man" ];
+
+  meta = {
+    description = "X11 brigthness and gamma software control";
+    homepage = http://shallowsky.com/software;
+    license = stdenv.lib.licenses.mit;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xcalib/default.nix b/nixpkgs/pkgs/tools/X11/xcalib/default.nix
new file mode 100644
index 000000000000..4e400ee8a247
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xcalib/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub, libX11, libXxf86vm, libXext, libXrandr }:
+
+stdenv.mkDerivation rec {
+  name = "xcalib-0.10";
+
+  src = fetchFromGitHub {
+    owner = "OpenICC";
+    repo = "xcalib";
+    rev = "f95abc1a551d7c695a8b142c4d9d5035368d482d";
+    sha256 = "05fzdjmhiafgi2jf0k41i3nm0837a78sb6yv59cwc23nla8g0bhr";
+  };
+
+  buildInputs = [ libX11 libXxf86vm libXext libXrandr ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp xcalib $out/bin/
+  '';
+
+  meta = with stdenv.lib; {
+    inherit (src.meta) homepage;
+    description = "A tiny monitor calibration loader for X and MS-Windows";
+    license = licenses.gpl2;
+    maintainers = [];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xcape/default.nix b/nixpkgs/pkgs/tools/X11/xcape/default.nix
new file mode 100644
index 000000000000..d1b6f9b23b6d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xcape/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchFromGitHub, pkgconfig, libX11, libXtst, xorgproto,
+libXi }:
+
+stdenv.mkDerivation rec {
+  pname = "xcape";
+  version = "unstable-2018-03-01";
+
+  src = fetchFromGitHub {
+    owner = "alols";
+    repo = pname;
+    rev = "a34d6bae27bbd55506852f5ed3c27045a3c0bd9e";
+    sha256 = "04grs4w9kpfzz25mqw82zdiy51g0w355gpn5b170p7ha5972ykc8";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+
+  buildInputs = [ libX11 libXtst xorgproto libXi ];
+
+  makeFlags = [
+    "PREFIX=$(out)"
+    "MANDIR=/share/man/man1"
+  ];
+
+  postInstall = "install -Dm444 --target-directory $out/share/doc README.md";
+
+  meta = with stdenv.lib; {
+    description = "Utility to configure modifier keys to act as other keys";
+    longDescription = ''
+      xcape allows you to use a modifier key as another key when
+      pressed and released on its own.  Note that it is slightly
+      slower than pressing the original key, because the pressed event
+      does not occur until the key is released.  The default behaviour
+      is to generate the Escape key when Left Control is pressed and
+      released on its own.
+    '';
+    homepage = https://github.com/alols/xcape;
+    license = licenses.gpl3 ;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xchainkeys/default.nix b/nixpkgs/pkgs/tools/X11/xchainkeys/default.nix
new file mode 100644
index 000000000000..f06b4cc6b378
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xchainkeys/default.nix
@@ -0,0 +1,19 @@
+{ stdenv, fetchurl, libX11 }:
+
+stdenv.mkDerivation rec {
+  name = "xchainkeys-0.11";
+
+  src = fetchurl {
+    url = "http://henning-bekel.de/download/xchainkeys/${name}.tar.gz";
+    sha256 = "1rpqs7h5krral08vqxwb0imy33z17v5llvrg5hy8hkl2ap7ya0mn";
+  };
+
+  buildInputs = [ libX11 ];
+
+  meta = {
+    homepage = http://henning-bekel.de/xchainkeys/;
+    description = "A standalone X11 program to create chained key bindings";
+    license = stdenv.lib.licenses.gpl3;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xcwd/default.nix b/nixpkgs/pkgs/tools/X11/xcwd/default.nix
new file mode 100644
index 000000000000..d50a7c006c89
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xcwd/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub, libX11 }:
+
+stdenv.mkDerivation {
+  version = "2016-09-30";
+  pname = "xcwd";
+
+  src = fetchFromGitHub {
+    owner   = "schischi";
+    repo    = "xcwd";
+    rev     = "3f0728b932904985b703b33bd5c936ea96cf15a0";
+    sha256  = "0lwfz6qg7fkiq86skp51vpav33yik22ps4dvr48asv3570skhlf9";
+  };
+
+  buildInputs = [ libX11 ];
+
+  makeFlags = [ "prefix=$(out)" ];
+
+  installPhase = ''
+    install -D xcwd "$out/bin/xcwd"
+  '';
+
+  meta = with stdenv.lib; {
+    description = ''
+      A simple tool which print the current working directory of the currently focused window
+    '';
+    homepage = https://github.com/schischi/xcwd;
+    maintainers = [ maintainers.grburst ];
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xdg-user-dirs/default.nix b/nixpkgs/pkgs/tools/X11/xdg-user-dirs/default.nix
new file mode 100644
index 000000000000..066b566be1fe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xdg-user-dirs/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, libxslt, docbook_xsl, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  name = "xdg-user-dirs-0.17";
+
+  src = fetchurl {
+    url = "https://user-dirs.freedesktop.org/releases/${name}.tar.gz";
+    sha256 = "13216b8rfkzak5k6bvpx6jvqv3cnbgpijnjwj8a8d3kq4cl0a1ra";
+  };
+
+  buildInputs = [ libxslt docbook_xsl makeWrapper ];
+
+  preFixup = ''
+    # fallback values need to be last
+    wrapProgram "$out/bin/xdg-user-dirs-update" \
+      --suffix XDG_CONFIG_DIRS : "$out/etc/xdg"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://freedesktop.org/wiki/Software/xdg-user-dirs;
+    description = "A tool to help manage well known user directories like the desktop folder and the music folder";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ lethalman ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xdg-utils/default.nix b/nixpkgs/pkgs/tools/X11/xdg-utils/default.nix
new file mode 100644
index 000000000000..99d5df2591ac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xdg-utils/default.nix
@@ -0,0 +1,70 @@
+{ stdenv, fetchurl, fetchFromGitHub
+, file, libxslt, docbook_xml_dtd_412, docbook_xsl, xmlto
+, w3m, gnugrep, gnused, coreutils, xset, perlPackages
+, mimiSupport ? false, gawk ? null }:
+
+assert mimiSupport -> gawk != null;
+
+let
+  # A much better xdg-open
+  mimisrc = fetchFromGitHub {
+    owner = "march-linux";
+    repo = "mimi";
+    rev = "8e0070f17bcd3612ee83cb84e663e7c7fabcca3d";
+    sha256 = "15gw2nyrqmdsdin8gzxihpn77grhk9l97jp7s7pr7sl4n9ya2rpj";
+  };
+
+  perlPath = with perlPackages; makePerlPath [
+    NetDBus XMLTwig XMLParser X11Protocol
+  ];
+
+in
+
+stdenv.mkDerivation rec {
+  pname = "xdg-utils";
+  version = "1.1.3";
+
+  src = fetchurl {
+    url = "https://portland.freedesktop.org/download/${pname}-${version}.tar.gz";
+    sha256 = "1nai806smz3zcb2l5iny4x7li0fak0rzmjg6vlyhdqm8z25b166p";
+  };
+
+  # just needed when built from git
+  buildInputs = [ libxslt docbook_xml_dtd_412 docbook_xsl xmlto w3m ];
+
+  postInstall = stdenv.lib.optionalString mimiSupport ''
+    cp ${mimisrc}/xdg-open $out/bin/xdg-open
+  '' + ''
+    sed  '2s#.#\
+    cut()   { ${coreutils}/bin/cut  "$@"; }\
+    sed()   { ${gnused}/bin/sed     "$@"; }\
+    grep()  { ${gnugrep}/bin/grep   "$@"; }\
+    egrep() { ${gnugrep}/bin/egrep  "$@"; }\
+    file()  { ${file}/bin/file      "$@"; }\
+    awk()   { ${gawk}/bin/awk       "$@"; }\
+    sort()  { ${coreutils}/bin/sort "$@"; }\
+    xset()  { ${xset}/bin/xset      "$@"; }\
+    perl()  { PERL5LIB=${perlPath} ${perlPackages.perl}/bin/perl "$@"; }\
+    mimetype() { ${perlPackages.FileMimeInfo}/bin/mimetype "$@"; }\
+    &#' -i "$out"/bin/*
+
+    substituteInPlace $out/bin/xdg-open \
+      --replace "/usr/bin/printf" "${coreutils}/bin/printf"
+
+    substituteInPlace $out/bin/xdg-mime \
+      --replace "/usr/bin/file" "${file}/bin/file"
+
+    substituteInPlace $out/bin/xdg-email \
+      --replace "/bin/echo" "${coreutils}/bin/echo"
+
+    sed 's# which # type -P #g' -i "$out"/bin/*
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://www.freedesktop.org/wiki/Software/xdg-utils/;
+    description = "A set of command line tools that assist applications with a variety of desktop integration tasks";
+    license = if mimiSupport then licenses.gpl2 else licenses.free;
+    maintainers = [ maintainers.eelco ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xdotool/default.nix b/nixpkgs/pkgs/tools/X11/xdotool/default.nix
new file mode 100644
index 000000000000..6fa185dfeab4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xdotool/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, pkgconfig, libX11, perl, libXtst, xorgproto, libXi, libXinerama, libxkbcommon }:
+
+stdenv.mkDerivation rec {
+  pname = "xdotool";
+  version = "3.20160805.1";
+
+  src = fetchurl {
+    url = "https://github.com/jordansissel/xdotool/releases/download/v${version}/xdotool-${version}.tar.gz";
+    sha256 = "1a6c1zr86zb53352yxv104l76l8x21gfl2bgw6h21iphxpv5zgim";
+  };
+
+  nativeBuildInputs = [ pkgconfig perl ];
+  buildInputs = [ libX11 libXtst xorgproto libXi libXinerama libxkbcommon ];
+
+  preBuild = ''
+    mkdir -p $out/lib
+  '';
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = {
+    homepage = https://www.semicomplete.com/projects/xdotool/;
+    description = "Fake keyboard/mouse input, window management, and more";
+    license = stdenv.lib.licenses.bsd3;
+    maintainers = with stdenv.lib.maintainers; [viric];
+    platforms = with stdenv.lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xgeometry-select/default.nix b/nixpkgs/pkgs/tools/X11/xgeometry-select/default.nix
new file mode 100644
index 000000000000..76493dfb73ea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xgeometry-select/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, libX11 }:
+
+stdenv.mkDerivation rec {
+  name     = "${baseName}-${version}";
+  baseName = "xgeometry-select";
+  version  = "0.1";
+
+  src = fetchurl {
+    url    = "https://gist.githubusercontent.com/obadz/7e008b1f803c4cdcfaf7321c78bcbe92/raw/7e7361e71ff0f74655ee92bd6d2c042f8586f2ae/xgeometry-select.c";
+    sha256 = "0s7kirgh5iz91m3qy8xiq0j4gljy8zrcnylf4szl5h0lrsaqj7ya";
+  };
+
+  phases = [ "buildPhase" "installPhase" ];
+
+  buildInputs = [ libX11 ];
+
+  buildPhase = ''
+    gcc -Wall -lX11 ${src} -o ${baseName}
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv -v ${baseName} $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Select a region with mouse and prints geometry information (x/y/w/h)";
+    homepage    = https://bbs.archlinux.org/viewtopic.php?pid=660837;
+    maintainers = with maintainers; [ obadz ];
+    platforms   = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xidlehook/default.nix b/nixpkgs/pkgs/tools/X11/xidlehook/default.nix
new file mode 100644
index 000000000000..67c6a594db75
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xidlehook/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, rustPlatform, fetchFromGitLab, python3
+, xlibsWrapper, xorg, libpulseaudio, pkgconfig, patchelf, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "xidlehook";
+  version = "0.8.0";
+
+  doCheck = false;
+
+  src = fetchFromGitLab {
+    owner = "jD91mZM2";
+    repo = "xidlehook";
+    rev = version;
+
+    sha256 = "127b20y86xs2wq5ka236057nyrh87fgzhjqbl6azf002afnbsn5m";
+  };
+
+  cargoBuildFlags = lib.optionals (!stdenv.isLinux) ["--no-default-features" "--features" "pulse"];
+  cargoSha256 = "0jdkcxvlw7s8pz1ka3d2w97356a2axvlwfgyh2dz7nmfzpjx64x0";
+
+  buildInputs = [ xlibsWrapper xorg.libXScrnSaver libpulseaudio ] ++ lib.optional stdenv.isDarwin Security;
+  nativeBuildInputs = [ pkgconfig patchelf python3 ];
+
+  postFixup = lib.optionalString stdenv.isLinux ''
+    RPATH="$(patchelf --print-rpath $out/bin/xidlehook)"
+    patchelf --set-rpath "$RPATH:${libpulseaudio}/lib" $out/bin/xidlehook
+  '';
+
+  meta = with lib; {
+    description = "xautolock rewrite in Rust, with a few extra features";
+    homepage = https://github.com/jD91mZM2/xidlehook;
+    license = licenses.mit;
+    maintainers = with maintainers; [ jD91mZM2 ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xinput_calibrator/default.nix b/nixpkgs/pkgs/tools/X11/xinput_calibrator/default.nix
new file mode 100644
index 000000000000..9aee0d778c46
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xinput_calibrator/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchurl, libXi, xorgproto, autoconf, automake, libtool, m4, xlibsWrapper, pkgconfig }:
+
+stdenv.mkDerivation rec {
+  pname = "xinput_calibrator";
+  version = "0.7.5";
+  src = fetchurl {
+    url = "https://github.com/tias/${pname}/archive/v${version}.tar.gz";
+    sha256 = "d8edbf84523d60f52311d086a1e3ad0f3536f448360063dd8029bf6290aa65e9";
+  };
+
+  preConfigure = "./autogen.sh --with-gui=X11";
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ xorgproto libXi autoconf automake libtool m4 xlibsWrapper ];
+
+  meta = {
+    homepage = https://github.com/tias/xinput_calibrator;
+    description = "A generic touchscreen calibration program for X.Org";
+    license = stdenv.lib.licenses.mit;
+    maintainers = [ stdenv.lib.maintainers.flosse ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xkb-switch/default.nix b/nixpkgs/pkgs/tools/X11/xkb-switch/default.nix
new file mode 100644
index 000000000000..a837e73983f9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xkb-switch/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchFromGitHub, cmake, libX11, libxkbfile }:
+
+stdenv.mkDerivation rec {
+  pname = "xkb-switch";
+  version = "1.6.0";
+
+  src = fetchFromGitHub {
+    owner = "ierton";
+    repo = "xkb-switch";
+    rev = version;
+    sha256 = "11yn0y1kx04rqxh0d81b5q7kbyz58pi48bl7hyhlv7p8yndkfg4b";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ libX11 libxkbfile ];
+
+  meta = with stdenv.lib; {
+    description = "Switch your X keyboard layouts from the command line";
+    homepage = https://github.com/ierton/xkb-switch;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ smironov ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xkbset/default.nix b/nixpkgs/pkgs/tools/X11/xkbset/default.nix
new file mode 100644
index 000000000000..e6f6622f85ac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xkbset/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl, perl, libX11 }:
+
+stdenv.mkDerivation rec {
+  name = "xkbset-0.5";
+
+  src = fetchurl {
+    url = "http://faculty.missouri.edu/~stephen/software/xkbset/${name}.tar.gz";
+    sha256 = "01c2579495b39e00d870f50225c441888dc88021e9ee3b693a842dd72554d172";
+  };
+
+  buildInputs = [ perl libX11 ];
+
+  postPatch = ''
+    sed "s:^X11PREFIX=.*:X11PREFIX=$out:" -i Makefile
+  '';
+
+  preInstall = ''
+    mkdir -p $out/bin
+    mkdir -p $out/man/man1
+  '';
+
+  postInstall = ''
+    rm -f $out/bin/xkbset-gui
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = "http://faculty.missouri.edu/~stephen/software/#xkbset";
+    description = "Program to help manage many of XKB features of X window";
+    maintainers = with maintainers; [ drets ];
+    platforms = platforms.linux;
+    license = licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xkbvalidate/default.nix b/nixpkgs/pkgs/tools/X11/xkbvalidate/default.nix
new file mode 100644
index 000000000000..92a47aa65638
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xkbvalidate/default.nix
@@ -0,0 +1,15 @@
+{ lib, runCommandCC, libxkbcommon }:
+
+runCommandCC "xkbvalidate" {
+  buildInputs = [ libxkbcommon ];
+  meta = {
+    description = "NixOS tool to validate X keyboard configuration";
+    license = lib.licenses.mit;
+    platforms = lib.platforms.unix;
+    maintainers = [ lib.maintainers.aszlig ];
+  };
+} ''
+  mkdir -p "$out/bin"
+  $CC -std=c11 -Wall -pedantic -lxkbcommon ${./xkbvalidate.c} \
+    -o "$out/bin/xkbvalidate"
+''
diff --git a/nixpkgs/pkgs/tools/X11/xkbvalidate/xkbvalidate.c b/nixpkgs/pkgs/tools/X11/xkbvalidate/xkbvalidate.c
new file mode 100644
index 000000000000..d25eef154b3c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xkbvalidate/xkbvalidate.c
@@ -0,0 +1,150 @@
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <xkbcommon/xkbcommon.h>
+
+static char **log_buffer = NULL;
+static int log_buffer_size = 0;
+static bool log_alloc_success = true;
+
+static void add_log(struct xkb_context *ctx, enum xkb_log_level level,
+                    const char *fmt, va_list args)
+{
+    size_t buflen;
+    va_list tmpargs;
+
+    log_buffer_size++;
+
+    if (log_buffer == NULL)
+        log_buffer = malloc(sizeof(char *));
+    else
+        log_buffer = realloc(log_buffer, sizeof(char *) * log_buffer_size);
+
+    if (log_buffer == NULL) {
+        perror("buffer alloc");
+        log_alloc_success = false;
+        log_buffer_size--;
+        return;
+    }
+
+    /* Unfortunately, vasprintf() is a GNU extension and thus not very
+     * portable, so let's first get the required buffer size using a dummy
+     * vsnprintf and afterwards allocate the returned amount of bytes.
+     *
+     * We also need to make a copy of the args, because the value of the args
+     * will be indeterminate after the return.
+     */
+    va_copy(tmpargs, args);
+    buflen = vsnprintf(NULL, 0, fmt, tmpargs);
+    va_end(tmpargs);
+
+    log_buffer[log_buffer_size - 1] = malloc(++buflen);
+
+    if (vsnprintf(log_buffer[log_buffer_size - 1], buflen, fmt, args) == -1) {
+        perror("log line alloc");
+        log_alloc_success = false;
+    }
+    va_end(args);
+}
+
+static void print_logs(void)
+{
+    for (int i = 0; i < log_buffer_size; ++i)
+        fprintf(stderr, "    %s", log_buffer[i]);
+}
+
+static void free_logs(void)
+{
+    if (log_buffer == NULL)
+        return;
+    for (int i = 0; i < log_buffer_size; ++i)
+        free(log_buffer[i]);
+    free(log_buffer);
+    log_buffer = NULL;
+    log_buffer_size = 0;
+}
+
+static bool try_keymap(struct xkb_context *ctx, struct xkb_rule_names *rdef)
+{
+    struct xkb_keymap *keymap;
+    bool result = true;
+
+    if ((keymap = xkb_keymap_new_from_names(ctx, rdef, 0)) == NULL)
+        result = false;
+    else
+        xkb_keymap_unref(keymap);
+
+    return result;
+}
+
+static void print_error(const char *name, const char *value,
+                        const char *nixos_option)
+{
+    fprintf(stderr, "\nThe value `%s' for keyboard %s is invalid.\n\n"
+                    "Please check the definition in `services.xserver.%s'.\n",
+            value, name, nixos_option);
+    fputs("\nDetailed XKB compiler errors:\n\n", stderr);
+    print_logs();
+    putc('\n', stderr);
+}
+
+#define TRY_KEYMAP(name, value, nixos_option) \
+    *rdef = (struct xkb_rule_names) {0}; \
+    free_logs(); \
+    rdef->name = value; \
+    result = try_keymap(ctx, rdef); \
+    if (!log_alloc_success) \
+        goto out; \
+    if (!result) { \
+        print_error(#name, value, nixos_option); \
+        exit_code = EXIT_FAILURE; \
+        goto out; \
+    }
+
+int main(int argc, char **argv)
+{
+    int exit_code = EXIT_SUCCESS;
+    bool result;
+    struct xkb_context *ctx;
+    struct xkb_rule_names *rdef;
+
+    if (argc != 5) {
+        fprintf(stderr, "Usage: %s model layout variant options\n", argv[0]);
+        return EXIT_FAILURE;
+    }
+
+    ctx = xkb_context_new(XKB_CONTEXT_NO_ENVIRONMENT_NAMES);
+    xkb_context_set_log_fn(ctx, add_log);
+
+    rdef = malloc(sizeof(struct xkb_rule_names));
+
+    TRY_KEYMAP(model,   argv[1], "xkbModel");
+    TRY_KEYMAP(layout,  argv[2], "layout");
+    TRY_KEYMAP(variant, argv[3], "xkbVariant");
+    TRY_KEYMAP(options, argv[4], "xkbOptions");
+
+    free_logs();
+    rdef->model = argv[1];
+    rdef->layout = argv[2];
+    rdef->variant = argv[3];
+    rdef->options = argv[4];
+
+    result = try_keymap(ctx, rdef);
+    if (!log_alloc_success)
+        goto out;
+
+    if (!result) {
+        fputs("The XKB keyboard definition failed to compile:\n", stderr);
+        print_logs();
+        exit_code = EXIT_FAILURE;
+    }
+
+out:
+    free_logs();
+    free(rdef);
+    xkb_context_unref(ctx);
+    return exit_code;
+}
diff --git a/nixpkgs/pkgs/tools/X11/xlayoutdisplay/default.nix b/nixpkgs/pkgs/tools/X11/xlayoutdisplay/default.nix
new file mode 100644
index 000000000000..7f3d9cfda569
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xlayoutdisplay/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromGitHub, xorg, boost, cmake, gtest }:
+
+stdenv.mkDerivation rec {
+  pname = "xlayoutdisplay";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "alex-courtis";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0ldqbwsryy7mqhxywdn2c2yi1mzlnl39sw8p3vx10w6q9drya9iv";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = with xorg; [ libX11 libXrandr libXcursor boost ];
+  checkInputs = [ gtest ];
+
+  doCheck = true;
+
+  # format security fixup
+  postPatch = ''
+    substituteInPlace test/test-Monitors.cpp \
+      --replace 'fprintf(lidStateFile, contents);' \
+                'fputs(contents, lidStateFile);'
+
+    substituteInPlace CMakeLists.txt --replace "set(Boost_USE_STATIC_LIBS ON)" ""
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Detects and arranges linux display outputs, using XRandR for detection and xrandr for arrangement";
+    homepage = https://github.com/alex-courtis/xlayoutdisplay;
+    maintainers = with maintainers; [ dtzWill ];
+    license = licenses.asl20;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xloadimage/default.nix b/nixpkgs/pkgs/tools/X11/xloadimage/default.nix
new file mode 100644
index 000000000000..3bd9f5256835
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xloadimage/default.nix
@@ -0,0 +1,88 @@
+{ stdenv
+, fetchurl
+, libX11
+, libXt
+
+, libjpeg ? null
+, libpng ? null
+, libtiff ? null
+
+, withJpegSupport ? true
+, withPngSupport ? true
+, withTiffSupport ? true
+}:
+
+assert withJpegSupport -> libjpeg != null;
+assert withPngSupport -> libpng != null;
+assert withTiffSupport -> libtiff != null;
+
+let
+  deb_patch = "25";
+in
+stdenv.mkDerivation rec {
+  version = "4.1";
+  pname = "xloadimage";
+
+  src = fetchurl {
+    url = "mirror://debian/pool/main/x/xloadimage/xloadimage_${version}.orig.tar.gz";
+    sha256 = "1i7miyvk5ydhi6yi8593vapavhwxcwciir8wg9d2dcyg9pccf2s0";
+  };
+
+  patches = fetchurl {
+    url = "mirror://debian/pool/main/x/xloadimage/xloadimage_${version}-${deb_patch}.debian.tar.xz";
+    sha256 = "17k518vrdrya5c9dqhpmm4g0h2vlkq1iy87sg2ngzygypbli1xvn";
+  };
+
+  buildInputs = [
+    libX11 libXt
+  ] ++ stdenv.lib.optionals withJpegSupport [
+    libjpeg
+  ] ++ stdenv.lib.optionals withPngSupport [
+    libpng
+  ] ++ stdenv.lib.optionals withTiffSupport [
+    libtiff
+  ];
+
+  # NOTE: we patch the build-info script so that it never detects the utilities
+  # it's trying to find; one of the Debian patches adds support for
+  # $SOURCE_DATE_EPOCH, but we want to make sure we don't even call these.
+  preConfigure = ''
+    substituteInPlace build-info \
+      --replace '[ -x /bin/date ]' 'false' \
+      --replace '[ -x /bin/id ]' 'false' \
+      --replace '[ -x /bin/uname ]' 'false' \
+      --replace '[ -x /usr/bin/id ]' 'false'
+
+    chmod +x build-info configure
+  '';
+
+  enableParallelBuilding = true;
+
+  # NOTE: we're not installing the `uufilter` binary; if needed, the standard
+  # `uudecode` tool should work just fine.
+  installPhase = ''
+    install -Dm755 xloadimage $out/bin/xloadimage
+    ln -sv $out/bin/{xloadimage,xsetbg}
+
+    install -D -m644 xloadimagerc $out/etc/xloadimagerc.example
+    install -D -m644 xloadimage.man $out/share/man/man1/xloadimage.1x
+    ln -sv $out/share/man/man1/{xloadimage,xsetbg}.1x
+  '';
+
+  meta = {
+    description = "Graphics file viewer under X11";
+
+    longDescription = ''
+      Can view png, jpeg, gif, tiff, niff, sunraster, fbm, cmuraster, pbm,
+      faces, rle, xwd, vff, mcidas, vicar, pcx, gem, macpaint, xpm and xbm
+      files. Can view images, put them on the root window, or dump them. Does a
+      variety of processing, including: clipping, dithering, depth reduction,
+      zoom, brightening/darkening and merging.
+    '';
+
+    license = stdenv.lib.licenses.gpl2Plus;
+
+    maintainers = with stdenv.lib.maintainers; [ andrew-d ];
+    platforms = stdenv.lib.platforms.linux;  # arbitrary choice
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xmacro/default.nix b/nixpkgs/pkgs/tools/X11/xmacro/default.nix
new file mode 100644
index 000000000000..13a18efccba6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xmacro/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl, libX11, libXtst, xorgproto, libXi }:
+
+stdenv.mkDerivation rec {
+  pname = "xmacro";
+  version = "0.4.6";
+
+  src = fetchurl {
+    url = "http://download.sarine.nl/xmacro/${pname}-${version}.tar.gz";
+    sha256 = "1p9jljxyn4j6piljiyi2xv6f8jhjbzhabprp8p0qmqxaxgdipi61";
+  };
+
+  preInstall = "echo -e 'install:\n	mkdir \${out}/bin;\n	cp xmacrorec2 xmacroplay \${out}/bin;' >>Makefile; ";
+
+  buildInputs = [ libX11 libXtst xorgproto libXi ];
+
+  meta = {
+    platforms = stdenv.lib.platforms.linux;
+    license = stdenv.lib.licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xmagnify/default.nix b/nixpkgs/pkgs/tools/X11/xmagnify/default.nix
new file mode 100644
index 000000000000..dfd28e317718
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xmagnify/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchFromGitLab, libX11, xorgproto }:
+
+stdenv.mkDerivation {
+  name = "xmagnify-0.1.0";
+
+  src = fetchFromGitLab {
+    owner = "amiloradovsky";
+    repo = "magnify";
+    rev = "0.1.0";  # 56da280173e9d0bd7b3769e07ba485cb4db35869
+    sha256 = "1ngnp5f5zl3v35vhbdyjpymy6mwrs0476fm5nd7dzkba7n841jdh";
+  };
+
+  prePatch = ''substituteInPlace ./Makefile --replace /usr $out'';
+
+  buildInputs = [ libX11 xorgproto ];
+
+  meta = with stdenv.lib; {
+    description = "Tiny screen magnifier for X11";
+    homepage = https://gitlab.com/amiloradovsky/magnify;
+    license = licenses.mit;  # or GPL2+, optionally
+    maintainers = with maintainers; [ amiloradovsky ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xnee/default.nix b/nixpkgs/pkgs/tools/X11/xnee/default.nix
new file mode 100644
index 000000000000..f8f48ea4cdb6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xnee/default.nix
@@ -0,0 +1,55 @@
+{ fetchurl, stdenv, libX11, xorgproto, libXext, libXtst
+, gtk2, libXi, pkgconfig, texinfo }:
+
+stdenv.mkDerivation rec {
+  version = "3.19";
+  pname = "xnee";
+
+  src = fetchurl {
+    url = "mirror://gnu/xnee/${pname}-${version}.tar.gz";
+    sha256 = "04n2lac0vgpv8zsn7nmb50hf3qb56pmj90dmwnivg09gyrf1x92j";
+  };
+
+  patchPhase =
+    '' for i in `find cnee/test -name \*.sh`
+       do
+         sed -i "$i" -e's|/bin/bash|${stdenv.shell}|g ; s|/usr/bin/env bash|${stdenv.shell}|g'
+       done
+    '';
+
+  buildInputs =
+    [ libX11 xorgproto libXext libXtst gtk2
+      libXi pkgconfig
+      texinfo
+    ];
+
+  configureFlags =
+    # Do a static build because `libxnee' doesn't get installed anyway.
+    [ "--disable-gnome-applet" "--enable-static" ];
+
+  # `cnee' is linked without `-lXi' and as a consequence has a RUNPATH that
+  # lacks libXi.
+  makeFlags = [ "LDFLAGS=-lXi" ];
+
+  # XXX: Actually tests require an X server.
+  doCheck = true;
+
+  meta = {
+    description = "X11 event recording and replay tool";
+
+    longDescription =
+      '' Xnee is a suite of programs that can record, replay and distribute
+         user actions under the X11 environment.  Think of it as a robot that
+         can imitate the job you just did.  Xnee can be used to automate
+         tests, demonstrate programs, distribute actions, record & replay
+         "macros", retype a file.
+      '';
+
+    license = stdenv.lib.licenses.gpl3Plus;
+
+    homepage = https://www.gnu.org/software/xnee/;
+
+    maintainers = with stdenv.lib.maintainers; [ ];
+    platforms = stdenv.lib.platforms.gnu ++ stdenv.lib.platforms.linux;  # arbitrary choice
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xob/default.nix b/nixpkgs/pkgs/tools/X11/xob/default.nix
new file mode 100644
index 000000000000..164802470e56
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xob/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, pkg-config, xorg, libconfig }:
+
+stdenv.mkDerivation rec {
+  pname = "xob";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner = "florentc";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0i163avpij8iy04a0wsds237sjqi5dfvi6ny2z8zicnl4crp34xg";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ xorg.libX11 libconfig ];
+
+  makeFlags = [ "prefix=$(out)" ];
+
+  meta = with stdenv.lib; {
+    description = "A lightweight overlay bar for the X Window System";
+    longDescription = ''
+      A lightweight configurable overlay volume/backlight/progress/anything bar
+      for the X Window System. Each time a new value is read on the standard
+      input, it is displayed as a tv-like bar over other windows. It then
+      vanishes after a configurable amount of time. A value followed by a bang
+      '!' is displayed using an alternate color to account for special states
+      (e.g. muted audio). There is also support for overflows (when the value
+      exceeds the maximum).
+    '';
+    inherit (src.meta) homepage;
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ primeos ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xosview2/default.nix b/nixpkgs/pkgs/tools/X11/xosview2/default.nix
new file mode 100644
index 000000000000..5dfe74fd3734
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xosview2/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchurl, libX11 }:
+
+stdenv.mkDerivation rec {
+  pname = "xosview2";
+  version = "2.3.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/xosview/${pname}-${version}.tar.gz";
+    sha256 = "1drp0n6qjbxyc0104a3aw2g94rh5p218wmrqwxh3kwwm7pmr9xip";
+  };
+
+  # The software failed to buid with this enabled; it seemed tests were not implemented
+  doCheck = false;
+
+  buildInputs = [ libX11 ];
+
+  meta = with stdenv.lib; {
+    description = "Lightweight program that gathers information from your operating system and displays it in graphical form";
+    longDescription = ''
+      xosview is a lightweight program that gathers information from your
+      operating system and displays it in graphical form. It attempts to show
+      you in a quick glance an overview of how your system resources are being
+      utilized.
+
+      It can be configured to be nothing more than a small strip showing a
+      couple of parameters on a desktop task bar. Or it can display dozens of
+      meters and rolling graphical charts over your entire screen.
+
+      Since xosview renders all graphics with core X11 drawing methods, you can
+      run it on one machine and display it on another. This works even if your
+      other host is an operating system not running an X server inside a
+      virtual machine running on a physically different host. If you can
+      connect to it on a network, then you can popup an xosview instance and
+      monitor what is going on.
+    '';
+    homepage = "http://xosview.sourceforge.net/index.html";
+    license = with licenses; [ gpl2 bsdOriginal ];
+    maintainers = [ maintainers.SeanZicari ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xpointerbarrier/default.nix b/nixpkgs/pkgs/tools/X11/xpointerbarrier/default.nix
new file mode 100644
index 000000000000..4dbe31df03ca
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xpointerbarrier/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, xorg, fetchgit }:
+stdenv.mkDerivation rec {
+  pname = "xpointerbarrier";
+  version = "18.06";
+  src = fetchgit {
+    url = "https://www.uninformativ.de/git/xpointerbarrier.git";
+    rev = "v${version}";
+    sha256 = "1k7i641x18qhjm0llsaqn2h2g9k31kgv6p8sildllmbvgxyrgvq7";
+  };
+
+  buildInputs = [ xorg.libX11 xorg.libXfixes xorg.libXrandr ];
+
+  makeFlags = [ "prefix=$(out)" ];
+
+  meta = {
+    homepage = https://uninformativ.de/git/xpointerbarrier;
+    description = "Create X11 pointer barriers around your working area";
+    license = stdenv.lib.licenses.mit;
+    maintainers = [ stdenv.lib.maintainers.xzfc ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xpra/default.nix b/nixpkgs/pkgs/tools/X11/xpra/default.nix
new file mode 100644
index 000000000000..da7bfb445a97
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xpra/default.nix
@@ -0,0 +1,99 @@
+{ stdenv, lib, fetchurl, callPackage, substituteAll, python3, pkgconfig
+, xorg, gtk3, glib, pango, cairo, gdk-pixbuf, atk
+, wrapGAppsHook, xorgserver, getopt, xauth, utillinux, which
+, ffmpeg_4, x264, libvpx, libwebp, x265
+, libfakeXinerama
+, gst_all_1, pulseaudio, gobject-introspection
+, pam }:
+
+with lib;
+
+let
+  inherit (python3.pkgs) cython buildPythonApplication;
+
+  xf86videodummy = callPackage ./xf86videodummy { };
+in buildPythonApplication rec {
+  pname = "xpra";
+  version = "2.5.3";
+
+  src = fetchurl {
+    url = "https://xpra.org/src/${pname}-${version}.tar.xz";
+    sha256 = "1ys35lj28903alccks9p055psy1fsk1nxi8ncchvw8bfxkkkvbys";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      inherit (xorg) xkeyboardconfig;
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace setup.py --replace '/usr/include/security' '${pam}/include/security'
+  '';
+
+  nativeBuildInputs = [ pkgconfig wrapGAppsHook ];
+  buildInputs = with xorg; [
+    libX11 xorgproto libXrender libXi
+    libXtst libXfixes libXcomposite libXdamage
+    libXrandr libxkbfile
+    ] ++ [
+    cython
+
+    pango cairo gdk-pixbuf atk.out gtk3 glib
+
+    ffmpeg_4 libvpx x264 libwebp x265
+
+    gst_all_1.gstreamer
+    gst_all_1.gst-plugins-base
+    gst_all_1.gst-plugins-good
+    gst_all_1.gst-plugins-bad
+    gst_all_1.gst-libav
+
+    pam
+    gobject-introspection
+  ];
+  propagatedBuildInputs = with python3.pkgs; [
+    pillow rencode pycrypto cryptography pycups lz4 dbus-python
+    netifaces numpy pygobject3 pycairo gst-python pam
+    pyopengl paramiko opencv4 python-uinput pyxdg
+    ipaddress idna
+  ];
+
+    # error: 'import_cairo' defined but not used
+  NIX_CFLAGS_COMPILE = "-Wno-error=unused-function";
+
+  setupPyBuildFlags = [
+    "--with-Xdummy"
+    "--without-strict"
+    "--with-gtk3"
+    "--without-gtk2"
+    # Override these, setup.py checks for headers in /usr/* paths
+    "--with-pam"
+    "--with-vsock"
+  ];
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      --set XPRA_INSTALL_PREFIX "$out"
+      --prefix LD_LIBRARY_PATH : ${libfakeXinerama}/lib
+      --prefix PATH : ${stdenv.lib.makeBinPath [ getopt xorgserver xauth which utillinux pulseaudio ]}
+    )
+  '';
+
+  doCheck = false;
+
+  enableParallelBuilding = true;
+
+  passthru = { inherit xf86videodummy; };
+
+  meta = {
+    homepage = http://xpra.org/;
+    downloadPage = "https://xpra.org/src/";
+    downloadURLRegexp = "xpra-.*[.]tar[.]xz$";
+    description = "Persistent remote applications for X";
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ tstrobel offline numinit ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xpra/fix-paths.patch b/nixpkgs/pkgs/tools/X11/xpra/fix-paths.patch
new file mode 100644
index 000000000000..eb982682586b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xpra/fix-paths.patch
@@ -0,0 +1,29 @@
+gdiff --git a/setup.py b/setup.py
+index 8d3df15..6156206 100755
+--- a/setup.py
++++ b/setup.py
+@@ -2359,10 +2359,7 @@ if v4l2_ENABLED:
+     v4l2_pkgconfig = pkgconfig()
+     #fuly warning: cython makes this difficult,
+     #we have to figure out if "device_caps" exists in the headers:
+-    ENABLE_DEVICE_CAPS = False
+-    if os.path.exists("/usr/include/linux/videodev2.h"):
+-        hdata = open("/usr/include/linux/videodev2.h").read()
+-        ENABLE_DEVICE_CAPS = hdata.find("device_caps")>=0
++    ENABLE_DEVICE_CAPS = True
+     kwargs = {"ENABLE_DEVICE_CAPS" : ENABLE_DEVICE_CAPS}
+     make_constants("xpra", "codecs", "v4l2", "constants", **kwargs)
+     cython_add(Extension("xpra.codecs.v4l2.pusher",
+diff --git a/xpra/x11/bindings/keyboard_bindings.pyx b/xpra/x11/bindings/keyboard_bindings.pyx
+index bd7023d..064c6b5 100644
+--- a/xpra/x11/bindings/keyboard_bindings.pyx
++++ b/xpra/x11/bindings/keyboard_bindings.pyx
+@@ -21,7 +21,7 @@ from libc.stdlib cimport free, malloc
+
+ DEF PATH_MAX = 1024
+ DEF DFLT_XKB_RULES_FILE = b"base"
+-DEF DFLT_XKB_CONFIG_ROOT = b"/usr/share/X11/xkb"
++DEF DFLT_XKB_CONFIG_ROOT = b"@xkeyboardconfig@/share/X11/xkb"
+
+ ###################################
+ # Headers, python magic
diff --git a/nixpkgs/pkgs/tools/X11/xpra/libfakeXinerama.nix b/nixpkgs/pkgs/tools/X11/xpra/libfakeXinerama.nix
new file mode 100644
index 000000000000..770024aa4ba5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xpra/libfakeXinerama.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, libX11, libXinerama }:
+
+stdenv.mkDerivation  rec {
+  pname = "libfakeXinerama";
+  version = "0.1.0";
+
+  src = fetchurl {
+    url = "https://www.xpra.org/src/${pname}-${version}.tar.bz2";
+    sha256 = "0gxb8jska2anbb3c1m8asbglgnwylgdr44x9lr8yh91hjxsqadkx";
+  };
+
+  buildInputs = [ libX11 libXinerama ];
+
+  phases = [ "unpackPhase" "buildPhase" "installPhase" ];
+
+  buildPhase = ''
+    gcc -O2 -Wall fakeXinerama.c -fPIC -o libfakeXinerama.so.1.0 -shared
+  '';
+
+  installPhase = ''
+    mkdir -p $out/lib
+    cp libfakeXinerama.so.1.0 $out/lib
+    ln -s libXinerama.so.1.0 $out/lib/libXinerama.so.1
+    ln -s libXinerama.so.1 $out/lib/libXinerama.so
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://xpra.org/;
+    description = "fakeXinerama for Xpra";
+    platforms = platforms.linux;
+    maintainers = [ maintainers.tstrobel ];
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xpra/xf86videodummy/0002-Constant-DPI.patch b/nixpkgs/pkgs/tools/X11/xpra/xf86videodummy/0002-Constant-DPI.patch
new file mode 100644
index 000000000000..f91e53d1e493
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xpra/xf86videodummy/0002-Constant-DPI.patch
@@ -0,0 +1,96 @@
+--- a/src/dummy.h	2016-12-17 23:02:53.396287041 +0100
++++ b/src/dummy.h	2016-12-17 23:03:30.319616550 +0100
+@@ -51,6 +51,7 @@
+     /* options */
+     OptionInfoPtr Options;
+     Bool swCursor;
++    Bool constantDPI;
+     /* proc pointer */
+     CloseScreenProcPtr CloseScreen;
+     xf86CursorInfoPtr CursorInfo;
+--- a/src/dummy_driver.c	2016-12-14 21:54:20.000000000 +0100
++++ b/src/dummy_driver.c	2016-12-17 23:04:59.916416126 +0100
+@@ -17,6 +17,12 @@
+ /* All drivers using the mi colormap manipulation need this */
+ #include "micmap.h"
+ 
++#ifdef RANDR
++#include "randrstr.h"
++#endif
++
++#include "windowstr.h"
++
+ /* identifying atom needed by magnifiers */
+ #include <X11/Xatom.h>
+ #include "property.h"
+@@ -115,11 +121,15 @@
+ };
+ 
+ typedef enum {
+-    OPTION_SW_CURSOR
++    OPTION_SW_CURSOR,
++    OPTION_CONSTANT_DPI
+ } DUMMYOpts;
+ 
+ static const OptionInfoRec DUMMYOptions[] = {
+     { OPTION_SW_CURSOR,	"SWcursor",	OPTV_BOOLEAN,	{0}, FALSE },
++#ifdef RANDR
++    { OPTION_CONSTANT_DPI,	"ConstantDPI",	OPTV_BOOLEAN,	{0}, FALSE },
++#endif
+     { -1,                  NULL,           OPTV_NONE,	{0}, FALSE }
+ };
+ 
+@@ -359,6 +369,7 @@
+     xf86ProcessOptions(pScrn->scrnIndex, pScrn->options, dPtr->Options);
+ 
+     xf86GetOptValBool(dPtr->Options, OPTION_SW_CURSOR,&dPtr->swCursor);
++    xf86GetOptValBool(dPtr->Options, OPTION_CONSTANT_DPI, &dPtr->constantDPI);
+ 
+     if (device->videoRam != 0) {
+ 	pScrn->videoRam = device->videoRam;
+@@ -639,10 +650,45 @@
+     return TRUE;
+ }
+ 
++const char *XDPY_PROPERTY = "dummy-constant-xdpi";
++const char *YDPY_PROPERTY = "dummy-constant-ydpi";
++static int get_dpi_value(WindowPtr root, const char *property_name, int default_dpi)
++{
++    PropertyPtr prop;
++    Atom type_atom = MakeAtom("CARDINAL", 8, TRUE);
++    Atom prop_atom = MakeAtom(property_name, strlen(property_name), FALSE);
++
++    for (prop = wUserProps(root); prop; prop = prop->next) {
++       if (prop->propertyName == prop_atom && prop->type == type_atom && prop->data) {
++           int v = (int) (*((CARD32 *) prop->data));
++           if ((v>0) && (v<4096)) {
++               xf86DrvMsg(0, X_INFO, "get_constant_dpi_value() found property \"%s\" with value=%i\n", property_name, (int) v);
++               return (int) v;
++           }
++           break;
++       }
++    }
++    return default_dpi;
++}
++
+ /* Mandatory */
+ Bool
+ DUMMYSwitchMode(SWITCH_MODE_ARGS_DECL)
+ {
++    SCRN_INFO_PTR(arg);
++#ifdef RANDR
++    DUMMYPtr dPtr = DUMMYPTR(pScrn);
++    if (dPtr->constantDPI) {
++        int xDpi = get_dpi_value(pScrn->pScreen->root, XDPY_PROPERTY, pScrn->xDpi);
++        int yDpi = get_dpi_value(pScrn->pScreen->root, YDPY_PROPERTY, pScrn->yDpi);
++        //25.4 mm per inch: (254/10)
++        pScrn->pScreen->mmWidth = mode->HDisplay * 254 / xDpi / 10;
++        pScrn->pScreen->mmHeight = mode->VDisplay * 254 / yDpi / 10;
++        xf86DrvMsg(pScrn->scrnIndex, X_INFO, "mm(dpi %ix%i)=%ix%i\n", xDpi, yDpi, pScrn->pScreen->mmWidth, pScrn->pScreen->mmHeight);
++        RRScreenSizeNotify(pScrn->pScreen);
++        RRTellChanged(pScrn->pScreen);
++    }
++#endif
+     return TRUE;
+ }
+ 
diff --git a/nixpkgs/pkgs/tools/X11/xpra/xf86videodummy/0003-fix-pointer-limits.patch b/nixpkgs/pkgs/tools/X11/xpra/xf86videodummy/0003-fix-pointer-limits.patch
new file mode 100644
index 000000000000..3dbb6fd179ff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xpra/xf86videodummy/0003-fix-pointer-limits.patch
@@ -0,0 +1,39 @@
+--- xf86-video-dummy-0.3.6/src/dummy_driver.c	2014-11-05 19:24:02.668656601 +0700
++++ xf86-video-dummy-0.3.6.new/src/dummy_driver.c	2014-11-05 19:37:53.076061853 +0700
+@@ -55,6 +55,9 @@
+ #include <X11/extensions/xf86dgaproto.h>
+ #endif
+ 
++/* Needed for fixing pointer limits on resize */
++#include "inputstr.h"
++
+ /* Mandatory functions */
+ static const OptionInfoRec *	DUMMYAvailableOptions(int chipid, int busid);
+ static void     DUMMYIdentify(int flags);
+@@ -713,6 +716,26 @@
+         RRTellChanged(pScrn->pScreen);
+     }
+ #endif
++    //ensure the screen dimensions are also updated:
++    pScrn->pScreen->width = mode->HDisplay;
++    pScrn->pScreen->height = mode->VDisplay;
++    pScrn->virtualX = mode->HDisplay;
++    pScrn->virtualY = mode->VDisplay;
++    pScrn->frameX1 = mode->HDisplay;
++    pScrn->frameY1 = mode->VDisplay;
++
++    //ensure the pointer uses the new limits too:
++    DeviceIntPtr pDev;
++    SpritePtr pSprite;
++    for (pDev = inputInfo.devices; pDev; pDev = pDev->next) {
++        if (pDev->spriteInfo!=NULL && pDev->spriteInfo->sprite!=NULL) {
++            pSprite = pDev->spriteInfo->sprite;
++            pSprite->hotLimits.x2 = mode->HDisplay;
++            pSprite->hotLimits.y2 = mode->VDisplay;
++            pSprite->physLimits.x2 = mode->HDisplay;
++            pSprite->physLimits.y2 = mode->VDisplay;
++        }
++    }
+     return TRUE;
+ }
+ 
diff --git a/nixpkgs/pkgs/tools/X11/xpra/xf86videodummy/0005-support-for-30-bit-depth-in-dummy-driver.patch b/nixpkgs/pkgs/tools/X11/xpra/xf86videodummy/0005-support-for-30-bit-depth-in-dummy-driver.patch
new file mode 100644
index 000000000000..567db3fc3865
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xpra/xf86videodummy/0005-support-for-30-bit-depth-in-dummy-driver.patch
@@ -0,0 +1,41 @@
+--- a/src/dummy.h	2016-12-17 23:33:33.279533389 +0100
++++ b/src/dummy.h	2016-12-17 23:33:56.695739166 +0100
+@@ -69,7 +69,7 @@
+     int overlay_offset;
+     int videoKey;
+     int interlace;
+-    dummy_colors colors[256];
++    dummy_colors colors[1024];
+     pointer* FBBase;
+     Bool        (*CreateWindow)() ;     /* wrapped CreateWindow */
+     Bool prop;
+--- a/src/dummy_driver.c	2016-12-17 23:33:47.446657886 +0100
++++ b/src/dummy_driver.c	2016-12-17 23:33:56.696739175 +0100
+@@ -317,6 +317,7 @@
+ 	case 15:
+ 	case 16:
+ 	case 24:
++        case 30:
+ 	    break;
+ 	default:
+ 	    xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+@@ -331,8 +332,8 @@
+ 	pScrn->rgbBits = 8;
+ 
+     /* Get the depth24 pixmap format */
+-    if (pScrn->depth == 24 && pix24bpp == 0)
+-	pix24bpp = xf86GetBppFromDepth(pScrn, 24);
++    if (pScrn->depth >= 24 && pix24bpp == 0)
++	pix24bpp = xf86GetBppFromDepth(pScrn, pScrn->depth);
+ 
+     /*
+      * This must happen after pScrn->display has been set because
+@@ -623,7 +624,7 @@
+     if(!miCreateDefColormap(pScreen))
+ 	return FALSE;
+ 
+-    if (!xf86HandleColormaps(pScreen, 256, pScrn->rgbBits,
++    if (!xf86HandleColormaps(pScreen, 1024, pScrn->rgbBits,
+                          DUMMYLoadPalette, NULL, 
+                          CMAP_PALETTED_TRUECOLOR 
+ 			     | CMAP_RELOAD_ON_MODE_SWITCH))
diff --git a/nixpkgs/pkgs/tools/X11/xpra/xf86videodummy/default.nix b/nixpkgs/pkgs/tools/X11/xpra/xf86videodummy/default.nix
new file mode 100644
index 000000000000..4e9f88608927
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xpra/xf86videodummy/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, lib, fetchurl
+, xorgproto, xorgserver
+, pkgconfig }:
+
+with lib;
+
+stdenv.mkDerivation rec {
+  version = "0.3.8";
+  suffix = "1";
+  name = "xpra-xf86videodummy-${version}-${suffix}";
+  builder = ../../../../servers/x11/xorg/builder.sh;
+  src = fetchurl {
+    url = "mirror://xorg/individual/driver/xf86-video-dummy-${version}.tar.bz2";
+    sha256 = "1fcm9vwgv8wnffbvkzddk4yxrh3kc0np6w65wj8k88q7jf3bn4ip";
+  };
+  patches = [
+    ./0002-Constant-DPI.patch
+    ./0003-fix-pointer-limits.patch
+    ./0005-support-for-30-bit-depth-in-dummy-driver.patch
+  ];
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ xorgproto xorgserver ];
+
+  meta = {
+    description = "Dummy driver for Xorg with xpra patches";
+    homepage = https://xpra.org/trac/wiki/Xdummy;
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ numinit ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xprintidle-ng/default.nix b/nixpkgs/pkgs/tools/X11/xprintidle-ng/default.nix
new file mode 100644
index 000000000000..117a612381f6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xprintidle-ng/default.nix
@@ -0,0 +1,46 @@
+{ stdenv, fetchFromGitHub, libX11, libXScrnSaver, libXext, gnulib
+  , autoconf, automake, libtool, gettext, pkgconfig
+  , git, perl, texinfo, help2man
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xprintidle-ng";
+  version = "git-2015-09-01";
+
+  src = fetchFromGitHub {
+    owner = "taktoa";
+    repo = pname;
+    rev = "9083ba284d9222541ce7da8dc87d5a27ef5cc592";
+    sha256 = "0a5024vimpfrpj6w60j1ad8qvjkrmxiy8w1yijxfwk917ag9rkpq";
+  };
+
+  postPatch = ''
+    substituteInPlace configure.ac \
+      --replace "AC_PREREQ([2.62])" "AC_PREREQ([2.63])"
+  '';
+
+  nativeBuildInputs = [ 
+    autoconf automake gettext git gnulib
+    help2man libtool perl pkgconfig texinfo
+  ];
+
+  configurePhase = ''
+    cp -r "${gnulib}" gnulib
+    chmod a+rX,u+w -R gnulib
+    ./bootstrap --gnulib-srcdir=gnulib
+    ./configure --prefix="$out"
+  '';
+
+  buildInputs = [
+    libX11 libXScrnSaver libXext  
+  ];
+
+  meta = {
+    inherit  version;
+    description = ''A command-line tool to print idle time from libXss'';
+    homepage = http://taktoa.me/xprintidle-ng/;
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = [stdenv.lib.maintainers.raskin];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xrectsel/default.nix b/nixpkgs/pkgs/tools/X11/xrectsel/default.nix
new file mode 100644
index 000000000000..4712192eacff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xrectsel/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, libX11 }:
+
+stdenv.mkDerivation rec {
+  pname = "xrectsel";
+  version = "0.3.2";
+
+  src = fetchFromGitHub {
+    owner = "lolilolicon";
+    repo = "xrectsel";
+    rev = version;
+    sha256 = "0prl4ky3xzch6xcb673mcixk998d40ngim5dqc5374b1ls2r6n7l";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ libX11 ];
+
+  postBuild = ''
+    make install
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Print the geometry of a rectangular screen region";
+    homepage = https://github.com/lolilolicon/xrectsel;
+    license = licenses.gpl3;
+    maintainers = [ maintainers.guyonvarch ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xrestop/default.nix b/nixpkgs/pkgs/tools/X11/xrestop/default.nix
new file mode 100644
index 000000000000..6f75d2360cf4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xrestop/default.nix
@@ -0,0 +1,19 @@
+{ stdenv, fetchurl, xorg, pkgconfig, ncurses }:
+stdenv.mkDerivation {
+
+  pname = "xrestop";
+  version = "0.4";
+
+  src = fetchurl {
+    url = mirror://gentoo/distfiles/xrestop-0.4.tar.gz;
+    sha256 = "0mz27jpij8am1s32i63mdm58znfijcpfhdqq1npbmvgclyagrhk7";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ xorg.libX11 xorg.libXres xorg.libXext ncurses ];
+
+  meta = {
+    platforms = stdenv.lib.platforms.unix;
+    license = stdenv.lib.licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xsecurelock/default.nix b/nixpkgs/pkgs/tools/X11/xsecurelock/default.nix
new file mode 100644
index 000000000000..548101c34c3c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xsecurelock/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkgconfig
+, libX11, libXcomposite, libXft, libXmu, libXrandr, libXext, libXScrnSaver
+, pam, apacheHttpd, imagemagick, pamtester, xscreensaver, xset }:
+
+stdenv.mkDerivation rec {
+  pname = "xsecurelock";
+  version = "1.7.0";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "xsecurelock";
+    rev = "v${version}";
+    sha256 = "020y2mi4sshc5dghcz37aj5wwizbg6712rzq2a72f8z8m7mnxr5y";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook pkgconfig
+  ];
+  buildInputs = [
+    libX11 libXcomposite libXft libXmu libXrandr libXext libXScrnSaver
+    pam apacheHttpd imagemagick pamtester
+  ];
+
+  configureFlags = [
+    "--with-pam-service-name=login"
+    "--with-xscreensaver=${xscreensaver}/libexec/xscreensaver"
+  ];
+
+  preConfigure = ''
+    cat > version.c <<'EOF'
+      const char *const git_version = "${version}";
+    EOF
+  '';
+
+  meta = with lib; {
+    description = "X11 screen lock utility with security in mind";
+    homepage = https://github.com/google/xsecurelock;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ fpletz ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xsettingsd/SConstruct.patch b/nixpkgs/pkgs/tools/X11/xsettingsd/SConstruct.patch
new file mode 100644
index 000000000000..bae8d1efc14d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xsettingsd/SConstruct.patch
@@ -0,0 +1,13 @@
+diff --git a/SConstruct b/SConstruct
+index bebc82e..3e0127b 100644
+--- a/SConstruct
++++ b/SConstruct
+@@ -59,6 +59,8 @@ srcs = Split('''\
+ ''')
+ libxsettingsd = env.Library('xsettingsd', srcs)
+ env['LIBS'] = libxsettingsd
++env['ENV']['PATH'] = os.environ.get('PATH', '')
++env['ENV']['PKG_CONFIG_PATH'] = os.environ.get('PKG_CONFIG_PATH', '')
+ env.ParseConfig('pkg-config --cflags --libs x11')
+ 
+ xsettingsd     = env.Program('xsettingsd', 'xsettingsd.cc')
diff --git a/nixpkgs/pkgs/tools/X11/xsettingsd/default.nix b/nixpkgs/pkgs/tools/X11/xsettingsd/default.nix
new file mode 100644
index 000000000000..bee6cdb748f1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xsettingsd/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchFromGitHub, scons, pkgconfig, libX11 }:
+
+stdenv.mkDerivation rec {
+  pname = "xsettingsd";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "derat";
+    repo = "xsettingsd";
+    rev = "v${version}";
+    sha256 = "05m4jlw0mgwp24cvyklncpziq1prr2lg0cq9c055sh4n9d93d07v";
+  };
+
+  patches = [
+    ./SConstruct.patch
+  ];
+
+  nativeBuildInputs = [ scons pkgconfig ];
+
+  buildInputs = [ libX11 ];
+
+  buildPhase = ''
+    scons -j$NIX_BUILD_CORES -l$NIX_BUILD_CORES
+  '';
+  
+  installPhase = ''
+    install -D -t "$out"/bin xsettingsd dump_xsettings
+    install -D -t "$out"/usr/share/man/man1 xsettingsd.1 dump_xsettings.1
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Provides settings to X11 applications via the XSETTINGS specification";
+    homepage = https://github.com/derat/xsettingsd;
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.romildo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xtrace/default.nix b/nixpkgs/pkgs/tools/X11/xtrace/default.nix
new file mode 100644
index 000000000000..aae31d649f44
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xtrace/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, autoreconfHook, fetchFromGitLab, libX11, xauth, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "xtrace";
+  version = "1.4.0";
+
+  src = fetchFromGitLab {
+    domain = "salsa.debian.org";
+    owner = "debian";
+    repo = pname;
+    rev = "xtrace-${version}";
+    sha256 = "1yff6x847nksciail9jly41mv70sl8sadh0m5d847ypbjmxcwjpq";
+  };
+
+  nativeBuildInputs = [ autoreconfHook makeWrapper ];
+  buildInputs = [ libX11 ];
+
+  postInstall = ''
+    wrapProgram "$out/bin/xtrace" \
+        --prefix PATH ':' "${xauth}/bin"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = "https://salsa.debian.org/debian/xtrace";
+    description = "Tool to trace X11 protocol connections";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ viric ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xtruss/default.nix b/nixpkgs/pkgs/tools/X11/xtruss/default.nix
new file mode 100644
index 000000000000..043514ebb436
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xtruss/default.nix
@@ -0,0 +1,18 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "xtruss";
+  version = "20181001.82973f5";
+
+  src = fetchurl {
+    url = "https://www.chiark.greenend.org.uk/~sgtatham/xtruss/${pname}-${version}.tar.gz";
+    sha256 = "1mm8k92zc318jk71wlf2r4rb723nd9lalhjl0pf48raiajb5ifgd";
+  };
+
+  meta = with stdenv.lib; {
+    description = "easy-to-use X protocol tracing program";
+    homepage = https://www.chiark.greenend.org.uk/~sgtatham/xtruss;
+    license = licenses.mit;
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xvkbd/default.nix b/nixpkgs/pkgs/tools/X11/xvkbd/default.nix
new file mode 100644
index 000000000000..3c1dc3de2b42
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xvkbd/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl, imake, libXt, libXaw, libXtst
+, libXi, libXpm, xorgproto, gccmakedep, Xaw3d }:
+
+stdenv.mkDerivation {
+  pname = "xvkbd";
+  version = "3.9";
+  src = fetchurl {
+    url = "http://t-sato.in.coocan.jp/xvkbd/xvkbd-3.9.tar.gz";
+    sha256 = "17csj6x5zm3g67izfwhagkal1rbqzpw09lqmmlyrjy3vzgfkf75q";
+  };
+
+  nativeBuildInputs = [ imake gccmakedep ];
+  buildInputs = [ libXt libXaw libXtst xorgproto libXi Xaw3d libXpm ];
+  installTargets = [ "install" "install.man" ];
+  makeFlags = [
+    "BINDIR=$(out)/bin"
+    "XAPPLOADDIR=$(out)/etc/X11/app-defaults"
+    "MANPATH=$(out)/man"
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Virtual keyboard for X window system";
+    longDescription = ''
+      xvkbd is a virtual (graphical) keyboard program for X Window System which provides
+      facility to enter characters onto other clients (softwares) by clicking on a
+      keyboard displayed on the screen.
+    '';
+    homepage = http://t-sato.in.coocan.jp/xvkbd;
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.bennofs ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xwinmosaic/default.nix b/nixpkgs/pkgs/tools/X11/xwinmosaic/default.nix
new file mode 100644
index 000000000000..7b30e5c58155
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xwinmosaic/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchgit, gtk2, cmake, pkgconfig, libXdamage }:
+
+stdenv.mkDerivation rec {
+  version = "0.4.2";
+  pname = "xwinmosaic";
+
+  src = fetchgit {
+    url = "https://github.com/soulthreads/xwinmosaic/";
+    rev = "refs/tags/v0.4.2";
+    sha256 = "16qhrpgn84fz0q3nfvaz5sisc82zk6y7c0sbvbr69zfx5fwbs1rr";
+  };
+
+  nativeBuildInputs = [ pkgconfig cmake ];
+  buildInputs = [ gtk2 libXdamage ];
+
+  meta = {
+    inherit version;
+    description = ''X window switcher drawing a colourful grid'';
+    license = stdenv.lib.licenses.bsd2 ;
+    maintainers = [stdenv.lib.maintainers.raskin];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xwinwrap/default.nix b/nixpkgs/pkgs/tools/X11/xwinwrap/default.nix
new file mode 100644
index 000000000000..b9d48f545749
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xwinwrap/default.nix
@@ -0,0 +1,55 @@
+{ stdenv, fetchbzr, xlibsWrapper }:
+
+let
+  version = "4";
+in
+stdenv.mkDerivation {
+  pname = "xwinwrap";
+  inherit version;
+
+  src = fetchbzr {
+    url = https://code.launchpad.net/~shantanu-goel/xwinwrap/devel;
+    rev = version;
+    sha256 = "1annhqc71jcgx5zvcy31c1c488ygx4q1ygrwyy2y0ww743smbchw";
+  };
+
+  buildInputs = [
+    xlibsWrapper
+  ];
+
+  buildPhase = if stdenv.hostPlatform.system == "x86_64-linux" then ''
+    make all64
+  '' else if stdenv.hostPlatform.system == "i686-linux" then ''
+    make all32
+  '' else throw "xwinwrap is not supported on ${stdenv.hostPlatform.system}";
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv */xwinwrap $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A utility that allows you to use an animated X window as the wallpaper";
+    longDescription = ''
+      XWinWrap is a small utility written a loooong time ago that allowed you to
+      stick most of the apps to your desktop background. What this meant was you
+      could use an animated screensaver (like glmatrix, electric sheep, etc) or
+      even a movie, and use it as your wallpaper. But only one version of this
+      app was ever released, and it had a few problems, like:
+
+      - Well, sticking didn’t work. So if you did a “minimize all” or “go to
+      desktop” kind of thing, your “wallpaper” got minimized as well.
+
+      - The geometry option didn’t work, so you could not create, e.g., a small
+      matrix window surrounded by your original wallpaper.
+
+      Seeing no-one picking it up, I decided to give it a bit of polish last
+      weekend by fixing the above problems and also add a few features. And here
+      it is, in its new avatar “Shantz XWinWrap”.
+    '';
+    license = licenses.hpnd;
+    homepage = https://shantanugoel.com/2008/09/03/shantz-xwinwrap/;
+    maintainers = with maintainers; [ infinisil ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/X11/xzoom/default.nix b/nixpkgs/pkgs/tools/X11/xzoom/default.nix
new file mode 100644
index 000000000000..ed7828f37e2a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/X11/xzoom/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchurl, libX11, libXext, libXt, imake, gccmakedep}:
+
+stdenv.mkDerivation rec {
+  name = "${pname}-${version}";
+  pname = "xzoom";
+  version = "0.3";
+  patch = "24";
+
+  # or fetchFromGitHub(owner,repo,rev) or fetchgit(rev)
+  src = fetchurl {
+    url = "http://www.ibiblio.org/pub/linux/libs/X/${pname}-${version}.tgz";
+    sha256 = "0jzl5py4ny4n4i58lxx2hdwq9zphqf7h3m14spl3079y5mlzssxj";
+  };
+  patches = [
+    (fetchurl {
+       url = "http://http.debian.net/debian/pool/main/x/xzoom/xzoom_${version}-${patch}.diff.gz";
+       sha256 = "0zhc06whbvaz987bzzzi2bz6h9jp6rv812qs7b71drivvd820qbh";
+    })
+  ];
+
+  nativeBuildInputs = [ imake gccmakedep ];
+  buildInputs = [ libX11 libXext libXt ];
+
+  makeFlags = [
+    "PREFIX=$(out)"
+    "BINDIR=$(out)/bin"
+    "MANPATH=$(out)/share/man"
+  ];
+  installTargets = [ "install" "install.man" ];
+
+  meta = {
+    inherit version;
+    description = "An X11 screen zoom tool";
+    license = stdenv.lib.licenses.free ;
+    maintainers = [stdenv.lib.maintainers.raskin];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/acme.sh/default.nix b/nixpkgs/pkgs/tools/admin/acme.sh/default.nix
new file mode 100644
index 000000000000..25a92f1117bb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/acme.sh/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, lib, fetchFromGitHub, makeWrapper, curl, openssl, socat, iproute, unixtools }:
+stdenv.mkDerivation rec {
+  pname = "acme.sh";
+  version = "2.8.5";
+
+  src = fetchFromGitHub {
+    owner = "Neilpang";
+    repo = "acme.sh";
+    rev = version;
+    sha256 = "0yxhfdb0jz0wn10ka6c79qvcx07656vsaxmjls8qgcfgc472ymhs";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out $out/bin $out/libexec
+    cp -R $src/* $_
+    makeWrapper $out/libexec/acme.sh $out/bin/acme.sh \
+      --prefix PATH : "${
+        lib.makeBinPath [
+          socat
+          openssl
+          curl
+          (if stdenv.isLinux then iproute else unixtools.netstat)
+        ]
+      }"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A pure Unix shell script implementing ACME client protocol";
+    homepage = https://acme.sh/;
+    license = licenses.gpl3;
+    maintainers = [ maintainers.yorickvp ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/adtool/default.nix b/nixpkgs/pkgs/tools/admin/adtool/default.nix
new file mode 100644
index 000000000000..5522fd7a68be
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/adtool/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, openldap }:
+
+stdenv.mkDerivation rec {
+  pname = "adtool";
+  version = "1.3.3";
+
+  src = fetchurl {
+    url = "https://gp2x.org/adtool/${pname}-${version}.tar.gz";
+    sha256  = "1awmpjamrwivi69i0j2fyrziy9s096ckviqd9c4llc3990mfsn4n";
+  };
+
+  configureFlags = [
+    "--sysconfdir=/etc"
+  ];
+
+  installFlags = [
+    "sysconfdir=$(out)/etc"
+  ];
+
+  buildInputs = [ openldap ];
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    mkdir -p $out/share/doc/adtool
+    mv $out/etc/* $out/share/doc/adtool
+    rmdir $out/etc
+  '';
+
+  # It requires an LDAP server for tests
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "Active Directory administration utility for Unix";
+    homepage = https://gp2x.org/adtool;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ peterhoeg ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/amazon-ecr-credential-helper/default.nix b/nixpkgs/pkgs/tools/admin/amazon-ecr-credential-helper/default.nix
new file mode 100644
index 000000000000..b3e688c681d9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/amazon-ecr-credential-helper/default.nix
@@ -0,0 +1,23 @@
+{ buildGoPackage, fetchFromGitHub, lib, ... }:
+
+buildGoPackage rec {
+  pname = "amazon-ecr-credential-helper";
+  version = "0.3.0";
+
+  goPackagePath = "github.com/awslabs/amazon-ecr-credential-helper";
+
+  src = fetchFromGitHub {
+    owner = "awslabs";
+    repo = "amazon-ecr-credential-helper";
+    rev = "v${version}";
+    sha256 = "06pcwgahcbi13ca5rs6giwdw3w364lbvmzcs4ka82igvcffxjvnd";
+  };
+
+  meta = with lib; {
+    description = "The Amazon ECR Docker Credential Helper is a credential helper for the Docker daemon that makes it easier to use Amazon Elastic Container Registry";
+    homepage = https://github.com/awslabs/amazon-ecr-credential-helper;
+    license = licenses.asl20 ;
+    maintainers = with maintainers; [ kalbasit ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/analog/default.nix b/nixpkgs/pkgs/tools/admin/analog/default.nix
new file mode 100644
index 000000000000..68046be2eeea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/analog/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, lib, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "analog";
+  version = "6.0.16";
+
+  src = fetchFromGitHub {
+    owner = "c-amie";
+    repo = "analog-ce";
+    rev = version;
+    sha256 = "15hi8kfknldwpvm885r9s7zd5h7cirs7x0zazx2nnz62xvz3iymk";
+  };
+
+  configurePhase = ''
+    sed -i src/anlghead.h \
+      -e "s|#define DEFAULTCONFIGFILE .*|#define DEFAULTCONFIGFILE \"$out/etc/analog.cfg\"|g" \
+      -e "s|#define LANGDIR .*|#define LANGDIR \"$out/share/$pname}/lang/\"|g"
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/etc $out/share/doc/$pname $out/share/man/man1 $out/share/$pname
+    mv analog $out/bin/
+    cp examples/big.cfg $out/etc/analog.cfg
+    mv analog.man $out/share/man/man1/analog.1
+    mv docs $out/share/doc/$pname/manual
+    mv how-to $out/share/doc/$pname/
+    mv lang images examples $out/share/$pname/
+  '';
+
+  meta = {
+    homepage = "https://www.c-amie.co.uk/software/analog/";
+    license = lib.licenses.gpl2;
+    description = "Powerful tool to generate web server statistics";
+    maintainers = [ lib.maintainers.peti ];
+    platforms = lib.platforms.linux;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/admin/ansible/default.nix b/nixpkgs/pkgs/tools/admin/ansible/default.nix
new file mode 100644
index 000000000000..5b724fb0bf90
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/ansible/default.nix
@@ -0,0 +1,27 @@
+{ python3Packages, fetchurl }:
+
+{
+  ansible = with python3Packages; toPythonApplication ansible;
+
+  ansible_2_8 = with python3Packages; toPythonApplication ansible;
+
+  ansible_2_7 = with python3Packages; toPythonApplication (ansible.overridePythonAttrs(old: rec {
+    pname = "ansible";
+    version = "2.7.15";
+
+    src = fetchurl {
+      url = "https://releases.ansible.com/ansible/${pname}-${version}.tar.gz";
+      sha256 = "1kjqr35c11njyi3f2rjab6821bhqcrdykv4285q76gwv0qynigwr";
+    };
+  }));
+
+  ansible_2_6 = with python3Packages; toPythonApplication (ansible.overridePythonAttrs(old: rec {
+    pname = "ansible";
+    version = "2.6.20";
+
+    src = fetchurl {
+      url = "https://releases.ansible.com/ansible/${pname}-${version}.tar.gz";
+      sha256 = "02ra9q2mifyawn0719y78wrbqzik73aymlzwi90fq71jgyfvkkqn";
+    };
+  }));
+}
diff --git a/nixpkgs/pkgs/tools/admin/aws-env/default.nix b/nixpkgs/pkgs/tools/admin/aws-env/default.nix
new file mode 100644
index 000000000000..dff375207976
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/aws-env/default.nix
@@ -0,0 +1,25 @@
+{ buildGoPackage, fetchFromGitHub, lib }:
+
+buildGoPackage rec {
+  pname = "aws-env";
+  version = "0.4";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/Droplr/aws-env";
+
+  src = fetchFromGitHub {
+    owner = "Droplr";
+    repo = pname;
+    inherit rev;
+    sha256 = "0pw1qz1nn0ig90p8d8c1qcwsdz0m9w63ib07carhh86gw55425j7";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with lib; {
+    description = "Secure way to handle environment variables in Docker and envfile with AWS Parameter Store";
+    homepage = "https://github.com/Droplr/aws-env";
+    license = licenses.mit;
+    maintainers = with maintainers; [ srhb ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/aws-env/deps.nix b/nixpkgs/pkgs/tools/admin/aws-env/deps.nix
new file mode 100644
index 000000000000..891a6ecb5962
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/aws-env/deps.nix
@@ -0,0 +1,12 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "github.com/aws/aws-sdk-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/aws/aws-sdk-go";
+      rev = "5f03c87445c9dcd6aa831a76a77170919265aa97";
+      sha256 = "146rwinw2x4r0f2pixv62b7mmhvnnfvvjmfaj6dqjxrhp0imcxdi";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/admin/aws-google-auth/default.nix b/nixpkgs/pkgs/tools/admin/aws-google-auth/default.nix
new file mode 100644
index 000000000000..e878369f1770
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/aws-google-auth/default.nix
@@ -0,0 +1,62 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+, beautifulsoup4
+, boto3
+, configparser
+, keyring
+, keyrings-alt
+, lxml
+, pillow
+, requests
+, six
+, tabulate
+, tzlocal
+, nose
+, mock
+, withU2F ? false, python-u2flib-host
+}:
+
+buildPythonApplication rec {
+  pname = "aws-google-auth";
+  version = "0.0.33";
+
+  # Pypi doesn't ship the tests, so we fetch directly from GitHub
+  # https://github.com/cevoaustralia/aws-google-auth/issues/120
+  src = fetchFromGitHub {
+    owner = "cevoaustralia";
+    repo = "aws-google-auth";
+    rev = version;
+    sha256 = "07sisv7b17bpjwikmm9zpxn3l3xpzywsbxi4brri2hdjmjb6p7w7";
+  };
+
+  propagatedBuildInputs = [ 
+    beautifulsoup4
+    boto3
+    configparser
+    keyring
+    keyrings-alt
+    lxml
+    pillow
+    requests
+    six
+    tabulate
+    tzlocal
+  ] ++ lib.optional withU2F python-u2flib-host;
+  
+  checkInputs = [ 
+    mock
+    nose 
+  ];
+
+  preCheck = ''
+    export HOME=$TMPDIR
+  '';
+
+  meta = with lib; {
+    description = "Acquire AWS STS (temporary) credentials via Google Apps SAML Single Sign On";
+    homepage = https://github.com/cevoaustralia/aws-google-auth;
+    maintainers = [ maintainers.marsam ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/aws-rotate-key/default.nix b/nixpkgs/pkgs/tools/admin/aws-rotate-key/default.nix
new file mode 100644
index 000000000000..830dcee26e43
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/aws-rotate-key/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "aws-rotate-key";
+  version = "1.0.6";
+
+  goPackagePath = "github.com/Fullscreen/aws-rotate-key";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "Fullscreen";
+    repo = "aws-rotate-key";
+    sha256 = "sha256:1w9704g1l2b0y6g6mk79g28kk0yaswpgljkk85d0i10wyxq4icby";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    description = "Easily rotate your AWS key";
+    homepage = https://github.com/Fullscreen/aws-rotate-key;
+    license = licenses.mit;
+    maintainers = [maintainers.mbode];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/aws-rotate-key/deps.nix b/nixpkgs/pkgs/tools/admin/aws-rotate-key/deps.nix
new file mode 100644
index 000000000000..680a18e7e2d3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/aws-rotate-key/deps.nix
@@ -0,0 +1,29 @@
+[
+  {
+    goPackagePath = "github.com/go-ini/ini";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-ini/ini";
+      rev = "af26abd521cd7697481572fdbc4a53cbea3dde1b";
+      sha256 = "1yribbqy9i4i70dfg3yrjhkn3n0fywpr3kismn2mvi882mm01pxz";
+    };
+  }
+  {
+    goPackagePath = "github.com/jmespath/go-jmespath";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jmespath/go-jmespath";
+      rev = "c2b33e8439af944379acbdd9c3a5fe0bc44bd8a5";
+      sha256 = "1r6w7ydx8ydryxk3sfhzsk8m6f1nsik9jg3i1zhi69v4kfl4d5cz";
+    };
+  }
+  {
+    goPackagePath = "github.com/aws/aws-sdk-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/aws/aws-sdk-go";
+      rev = "f844700ba2a387dfee7ab3679e7544b5dbd6d394";
+      sha256 = "0s9100bzqj58nnax3dxfgi5qr4rbaa53cb0cj3s58k9jc9z6270m";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/admin/aws-vault/default.nix b/nixpkgs/pkgs/tools/admin/aws-vault/default.nix
new file mode 100644
index 000000000000..ddecd15b6ade
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/aws-vault/default.nix
@@ -0,0 +1,28 @@
+{ buildGoPackage, lib, fetchFromGitHub }:
+buildGoPackage rec {
+  pname = "aws-vault";
+  version = "4.5.1";
+
+  goPackagePath = "github.com/99designs/${pname}";
+
+  src = fetchFromGitHub {
+    owner = "99designs";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0y64fx15p9ls829lif7c0jaxyclzpnr8l5cyw25q545878dzmcs5";
+  };
+
+  # set the version. see: aws-vault's Makefile
+  buildFlagsArray = ''
+    -ldflags=
+    -X main.Version=v${version}
+  '';
+
+  meta = with lib; {
+    description = "A vault for securely storing and accessing AWS credentials in development environments";
+    homepage = "https://github.com/99designs/aws-vault";
+    license = licenses.mit;
+    maintainers = with maintainers; [ zimbatm ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/admin/aws_shell/default.nix b/nixpkgs/pkgs/tools/admin/aws_shell/default.nix
new file mode 100644
index 000000000000..b9169691808f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/aws_shell/default.nix
@@ -0,0 +1,44 @@
+{ stdenv
+, awscli
+}:
+
+with awscli.python.pkgs;
+
+buildPythonPackage rec {
+  pname = "aws-shell";
+  version = "0.2.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "2044b0ef78c7542c392f2cee4b74a4439545c63dda0a3e28b712fff53e8e5823";
+  };
+
+  # Why does it propagate packages that are used for testing?
+  propagatedBuildInputs = [
+    awscli
+    prompt_toolkit
+    boto3
+    configobj
+    pygments
+    pyyaml
+  ];
+
+  postPatch = ''
+    substituteInPlace setup.py \
+     --replace "prompt-toolkit>=1.0.0,<1.1.0" "prompt-toolkit"
+  '';
+
+  #Checks are failing due to missing TTY, which won't exist.
+  doCheck = false;
+  preCheck = ''
+    mkdir -p check-phase
+    export HOME=$(pwd)/check-phase
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/awslabs/aws-shell;
+    description = "An integrated shell for working with the AWS CLI";
+    license = licenses.asl20;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/awscli/default.nix b/nixpkgs/pkgs/tools/admin/awscli/default.nix
new file mode 100644
index 000000000000..06ddd0e85896
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/awscli/default.nix
@@ -0,0 +1,78 @@
+{ lib
+, python3
+, groff
+, less
+}:
+
+let
+  py = python3.override {
+    packageOverrides = self: super: {
+      rsa = super.rsa.overridePythonAttrs (oldAttrs: rec {
+        version = "3.4.2";
+        src = oldAttrs.src.override {
+          inherit version;
+          sha256 = "25df4e10c263fb88b5ace923dd84bf9aa7f5019687b5e55382ffcdb8bede9db5";
+        };
+      });
+
+      pyyaml = super.pyyaml.overridePythonAttrs (oldAttrs: rec {
+        version = "5.1.2";
+        src = oldAttrs.src.override {
+          inherit version;
+          sha256 = "1r5faspz73477hlbjgilw05xsms0glmsa371yqdd26znqsvg1b81";
+        };
+      });
+
+      colorama = super.colorama.overridePythonAttrs (oldAttrs: rec {
+        version = "0.4.1";
+        src = oldAttrs.src.override {
+          inherit version;
+          sha256 = "0ba247bx5pc60hcpbf3rjsqk0whilg241i9qdfnlcwij5qgdgvh5";
+        };
+      });
+
+    };
+  };
+
+in py.pkgs.buildPythonApplication rec {
+  pname = "awscli";
+  version = "1.16.266"; # N.B: if you change this, change botocore to a matching version too
+
+  src = py.pkgs.fetchPypi {
+    inherit pname version;
+    sha256 = "9c59a5ca805f467669d471b29550ecafafb9b380a4a6926a9f8866f71cd4f7be";
+  };
+
+  # No tests included
+  doCheck = false;
+
+  propagatedBuildInputs = with py.pkgs; [
+    botocore
+    bcdoc
+    s3transfer
+    six
+    colorama
+    docutils
+    rsa
+    pyyaml
+    groff
+    less
+  ];
+
+  postInstall = ''
+    mkdir -p $out/etc/bash_completion.d
+    echo "complete -C $out/bin/aws_completer aws" > $out/etc/bash_completion.d/awscli
+    mkdir -p $out/share/zsh/site-functions
+    mv $out/bin/aws_zsh_completer.sh $out/share/zsh/site-functions
+    rm $out/bin/aws.cmd
+  '';
+
+  passthru.python = py; # for aws_shell
+
+  meta = with lib; {
+    homepage = https://aws.amazon.com/cli/;
+    description = "Unified tool to manage your AWS services";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ muflax ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/awslogs/default.nix b/nixpkgs/pkgs/tools/admin/awslogs/default.nix
new file mode 100644
index 000000000000..92b6d62a8a2d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/awslogs/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitHub, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "awslogs";
+  version = "0.11.0";
+
+  src = fetchFromGitHub {
+    owner = "jorgebastida";
+    repo = "awslogs";
+    rev = version;
+    sha256 = "0vdpld7r7y78x1lcd5z3qsx047dwichxb8f3447yzl75fnsm75dc";
+  };
+
+  doCheck = false;
+
+  propagatedBuildInputs = with python3Packages; [
+    boto3 termcolor dateutil docutils setuptools
+  ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/jorgebastida/awslogs;
+    description = "AWS CloudWatch logs for Humans";
+    maintainers = with maintainers; [ dbrock ];
+    license = licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/awsweeper/default.nix b/nixpkgs/pkgs/tools/admin/awsweeper/default.nix
new file mode 100644
index 000000000000..91ef7ee022e4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/awsweeper/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "awsweeper";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "cloudetc";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0if2sfxd28m832zyiy40grwa4may45zq20h35yxf8bq0wxvp0q3f";
+  };
+
+  modSha256 = "0nzc8ib2c3wlwk97qq45kgpnval69v8nbxhkfabcx0idipx3pbvk";
+
+  meta = with lib; {
+    description = "A tool to clean out your AWS account";
+    homepage = "https://github.com/cloudetc/awsweeper/";
+    license = licenses.mpl20;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/azure-cli/default.nix b/nixpkgs/pkgs/tools/admin/azure-cli/default.nix
new file mode 100644
index 000000000000..cc793f8300dc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/azure-cli/default.nix
@@ -0,0 +1,250 @@
+{ stdenv, lib, python, fetchFromGitHub, installShellFiles }:
+
+let
+  version = "2.0.80";
+  src = fetchFromGitHub {
+    owner = "Azure";
+    repo = "azure-cli";
+    rev = "azure-cli-${version}";
+    sha256 = "05j74cfxjpi3w79w0i5av3h2m81bavbsc581vvh773ixivndds1k";
+  };
+
+  # put packages that needs to be overriden in the py package scope
+  py = import ./python-packages.nix { inherit stdenv python lib src version; };
+in
+py.pkgs.toPythonApplication (py.pkgs.buildAzureCliPackage {
+  pname = "azure-cli";
+  inherit version src;
+  disabled = python.isPy27; # namespacing assumes PEP420, which isn't compat with py2
+
+  sourceRoot = "source/src/azure-cli";
+
+  prePatch = ''
+    substituteInPlace setup.py \
+      --replace "javaproperties==0.5.1" "javaproperties" \
+      --replace "pytz==2019.1" "pytz" \
+      --replace "mock~=2.0" "mock" \
+      --replace "azure-mgmt-reservations==0.3.1" "azure-mgmt-reservations~=0.3.1"
+
+    # remove namespace hacks
+    # remove urllib3 because it was added as 'urllib3[secure]', which doesn't get handled well
+    sed -i setup.py \
+      -e '/azure-cli-command_modules-nspkg/d' \
+      -e '/azure-cli-nspkg/d' \
+      -e '/urllib3/d'
+  '';
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  propagatedBuildInputs = with py.pkgs; [
+    azure-batch
+    azure-cli-core
+    azure-cli-telemetry
+    azure-cosmos
+    azure-datalake-store
+    azure-functions-devops-build
+    azure-graphrbac
+    azure-keyvault
+    azure-loganalytics
+    azure-mgmt-advisor
+    azure-mgmt-apimanagement
+    azure-mgmt-applicationinsights
+    azure-mgmt-appconfiguration
+    azure-mgmt-authorization
+    azure-mgmt-batch
+    azure-mgmt-batchai
+    azure-mgmt-billing
+    azure-mgmt-botservice
+    azure-mgmt-cdn
+    azure-mgmt-cognitiveservices
+    azure-mgmt-compute
+    azure-mgmt-consumption
+    azure-mgmt-containerinstance
+    azure-mgmt-containerregistry
+    azure-mgmt-containerservice
+    azure-mgmt-cosmosdb
+    azure-mgmt-datalake-analytics
+    azure-mgmt-datalake-store
+    azure-mgmt-datamigration
+    azure-mgmt-deploymentmanager
+    azure-mgmt-devtestlabs
+    azure-mgmt-dns
+    azure-mgmt-eventgrid
+    azure-mgmt-eventhub
+    azure-mgmt-hdinsight
+    azure-mgmt-imagebuilder
+    azure-mgmt-iotcentral
+    azure-mgmt-iothub
+    azure-mgmt-iothubprovisioningservices
+    azure-mgmt-keyvault
+    azure-mgmt-kusto
+    azure-mgmt-loganalytics
+    azure-mgmt-managedservices
+    azure-mgmt-managementgroups
+    azure-mgmt-maps
+    azure-mgmt-marketplaceordering
+    azure-mgmt-media
+    azure-mgmt-monitor
+    azure-mgmt-msi
+    azure-mgmt-network
+    azure-mgmt-netapp
+    azure-mgmt-policyinsights
+    azure-mgmt-privatedns
+    azure-mgmt-rdbms
+    azure-mgmt-recoveryservices
+    azure-mgmt-recoveryservicesbackup
+    azure-mgmt-redis
+    azure-mgmt-relay
+    azure-mgmt-reservations
+    azure-mgmt-resource
+    azure-mgmt-search
+    azure-mgmt-security
+    azure-mgmt-servicebus
+    azure-mgmt-servicefabric
+    azure-mgmt-signalr
+    azure-mgmt-sql
+    azure-mgmt-sqlvirtualmachine
+    azure-mgmt-storage
+    azure-mgmt-trafficmanager
+    azure-mgmt-web
+    azure-multiapi-storage
+    azure-storage-blob
+    colorama
+    cryptography
+    Fabric
+    jsmin
+    knack
+    mock
+    paramiko
+    pydocumentdb
+    pygments
+    pyopenssl
+    pytz
+    pyyaml
+    psutil
+    requests
+    scp
+    six
+    sshtunnel
+    urllib3
+    vsts-cd-manager
+    websocket_client
+    xmltodict
+    javaproperties
+    jsondiff
+    # urllib3[secure]
+    ipaddress
+    # shell completion
+    argcomplete
+  ];
+
+  # TODO: make shell completion actually work
+  # uses argcomplete, so completion needs PYTHONPATH to work
+  postInstall = ''
+    installShellCompletion --bash --name az.bash az.completion.sh
+    installShellCompletion --zsh --name _az az.completion.sh
+
+    # remove garbage
+    rm $out/bin/az.bat
+    rm $out/bin/az.completion.sh
+  '';
+
+  # wrap the executable so that the python packages are available
+  # it's just a shebang script which calls `python -m azure.cli "$@"`
+  postFixup = ''
+    wrapProgram $out/bin/az \
+      --set PYTHONPATH $PYTHONPATH
+  '';
+
+  # almost the entire test suite requires an azure account setup and networking
+  # ensure that the azure namespaces are setup correctly and that azure.cli can be accessed
+  checkPhase = ''
+    cd azure # avoid finding local copy
+    ${py.interpreter} -c 'import azure.cli.core; assert "${version}" == azure.cli.core.__version__'
+    HOME=$TMPDIR ${py.interpreter} -m azure.cli --help
+  '';
+
+  # ensure these namespaces are able to be accessed
+  pythonImportsCheck = [
+    "azure.batch"
+    "azure.cli.core"
+    "azure.cli.telemetry"
+    "azure.cosmos"
+    "azure.datalake.store"
+    "azure_functions_devops_build"
+    "azure.graphrbac"
+    "azure.keyvault"
+    "azure.loganalytics"
+    "azure.mgmt.advisor"
+    "azure.mgmt.apimanagement"
+    "azure.mgmt.applicationinsights"
+    "azure.mgmt.appconfiguration"
+    "azure.mgmt.authorization"
+    "azure.mgmt.batch"
+    "azure.mgmt.batchai"
+    "azure.mgmt.billing"
+    "azure.mgmt.botservice"
+    "azure.mgmt.cdn"
+    "azure.mgmt.cognitiveservices"
+    "azure.mgmt.compute"
+    "azure.mgmt.consumption"
+    "azure.mgmt.containerinstance"
+    "azure.mgmt.containerregistry"
+    "azure.mgmt.containerservice"
+    "azure.mgmt.cosmosdb"
+    "azure.mgmt.datalake.analytics"
+    "azure.mgmt.datalake.store"
+    "azure.mgmt.datamigration"
+    "azure.mgmt.deploymentmanager"
+    "azure.mgmt.devtestlabs"
+    "azure.mgmt.dns"
+    "azure.mgmt.eventgrid"
+    "azure.mgmt.eventhub"
+    "azure.mgmt.hdinsight"
+    "azure.mgmt.imagebuilder"
+    "azure.mgmt.iotcentral"
+    "azure.mgmt.iothub"
+    "azure.mgmt.iothubprovisioningservices"
+    "azure.mgmt.keyvault"
+    "azure.mgmt.kusto"
+    "azure.mgmt.loganalytics"
+    "azure.mgmt.managedservices"
+    "azure.mgmt.managementgroups"
+    "azure.mgmt.maps"
+    "azure.mgmt.marketplaceordering"
+    "azure.mgmt.media"
+    "azure.mgmt.monitor"
+    "azure.mgmt.msi"
+    "azure.mgmt.network"
+    "azure.mgmt.netapp"
+    "azure.mgmt.policyinsights"
+    "azure.mgmt.privatedns"
+    "azure.mgmt.rdbms"
+    "azure.mgmt.recoveryservices"
+    "azure.mgmt.recoveryservicesbackup"
+    "azure.mgmt.redis"
+    "azure.mgmt.relay"
+    "azure.mgmt.reservations"
+    "azure.mgmt.resource"
+    "azure.mgmt.search"
+    "azure.mgmt.security"
+    "azure.mgmt.servicebus"
+    "azure.mgmt.servicefabric"
+    "azure.mgmt.signalr"
+    "azure.mgmt.sql"
+    "azure.mgmt.sqlvirtualmachine"
+    "azure.mgmt.storage"
+    "azure.mgmt.trafficmanager"
+    "azure.mgmt.web"
+    "azure.storage.blob"
+    "azure.storage.common"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/Azure/azure-cli";
+    description = "Next generation multi-platform command line experience for Azure";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jonringer ];
+  };
+})
+
diff --git a/nixpkgs/pkgs/tools/admin/azure-cli/python-packages.nix b/nixpkgs/pkgs/tools/admin/azure-cli/python-packages.nix
new file mode 100644
index 000000000000..290800e42260
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/azure-cli/python-packages.nix
@@ -0,0 +1,287 @@
+{ stdenv, python, lib, src, version }:
+
+let
+  buildAzureCliPackage = with py.pkgs; attrs: buildPythonPackage (attrs // {
+    # Remove overly restrictive version contraints and obsolete namespace setup
+    prePatch = (attrs.prePatch or "") + ''
+      rm -f azure_bdist_wheel.py tox.ini
+      substituteInPlace setup.py \
+        --replace "wheel==0.30.0" "wheel"
+      sed -i "/azure-namespace-package/c\ " setup.cfg
+    '';
+
+    # Prevent these __init__'s from violating PEP420, only needed for python2
+    postInstall = (attrs.postInstall or "") + ''
+      rm $out/${python.sitePackages}/azure/{,__pycache__/}__init__.* \
+         $out/${python.sitePackages}/azure/cli/{,__pycache__/}__init__.*
+    '';
+
+    checkInputs = [ mock pytest ] ++ (attrs.checkInputs or []);
+    checkPhase = attrs.checkPhase or ''
+      cd azure
+      HOME=$TMPDIR pytest
+    '';
+  });
+
+  overrideAzureMgmtPackage = package: version: extension: sha256:
+    package.overrideAttrs(oldAttrs: rec {
+      inherit version;
+
+      src = py.pkgs.fetchPypi {
+        inherit (oldAttrs) pname;
+        inherit version sha256 extension;
+      };
+
+      preBuild = ''
+        rm -f azure_bdist_wheel.py
+        substituteInPlace setup.cfg \
+          --replace "azure-namespace-package = azure-mgmt-nspkg" ""
+      '';
+    });
+
+  py = python.override {
+    packageOverrides = self: super: {
+      inherit buildAzureCliPackage;
+
+      # core and the actual application are highly coupled
+      azure-cli-core = buildAzureCliPackage {
+        pname = "azure-cli-core";
+        inherit version src;
+
+        sourceRoot = "source/src/azure-cli-core";
+
+        propagatedBuildInputs = with self; [
+          adal
+          argcomplete
+          azure-common
+          azure-cli-telemetry
+          azure-mgmt-resource
+          colorama
+          humanfriendly
+          jmespath
+          knack
+          msrest
+          msrestazure
+          paramiko
+          psutil
+          pygments
+          pyjwt
+          pyopenssl
+          pyperclip
+          pyyaml
+          requests
+          six
+          tabulate
+        ]
+        ++ lib.optionals isPy3k [ antlr4-python3-runtime ]
+        ++ lib.optionals (!isPy3k) [ enum34 futures antlr4-python2-runtime ndg-httpsclient ];
+
+        doCheck = stdenv.isLinux;
+        # ignore test that does network call
+        checkPhase = ''
+          rm azure/{,cli/}__init__.py
+          python -c 'import azure.common; print(azure.common)'
+          PYTHONPATH=$PWD:$PYTHONPATH HOME=$TMPDIR pytest \
+            --ignore=azure/cli/core/tests/test_profile.py \
+            --ignore=azure/cli/core/tests/test_generic_update.py
+        '';
+
+        pythonImportsCheck = [
+          "azure.cli.telemetry"
+          "azure.cli.core"
+        ];
+      };
+
+      azure-cli-telemetry = buildAzureCliPackage {
+        pname = "azure-cli-telemetry";
+        version = "1.0.4"; # might be wrong, but doesn't really matter
+        inherit src;
+
+        sourceRoot = "source/src/azure-cli-telemetry";
+
+        propagatedBuildInputs = with super; [
+          applicationinsights
+          portalocker
+        ];
+
+        # ignore flaky test
+        checkPhase = ''
+          cd azure
+          HOME=$TMPDIR pytest -k 'not test_create_telemetry_note_file_from_scratch'
+        '';
+      };
+
+      azure-mgmt-recoveryservicesbackup = overrideAzureMgmtPackage super.azure-mgmt-recoveryservicesbackup "0.5.0" "zip"
+        "0jhq8fi3dn2cncyv2rrgr4kldd254f30zgwf6p85rdgvg2p9k4hl";
+
+      azure-mgmt-resource = overrideAzureMgmtPackage super.azure-mgmt-resource "6.0.0" "zip"
+        "08n6r6ja7p20qlhb9pp51nwwxz2mal19an98zry276i8z5x8ckp0";
+
+      azure-mgmt-compute = overrideAzureMgmtPackage super.azure-mgmt-compute "10.0.0" "zip"
+        "1s3bx6knxw5dxycp43yimvgrh0i19drzd09asglcwz2x5mr3bpyg";
+
+      azure-mgmt-consumption = overrideAzureMgmtPackage super.azure-mgmt-consumption "2.0.0" "zip"
+        "12ai4qps73ivawh0yzvgb148ksx02r30pqlvfihx497j62gsi1cs";
+
+      azure-mgmt-containerservice = overrideAzureMgmtPackage super.azure-mgmt-containerservice "8.0.0" "zip"
+        "0akpm12xj453dp84dfdpi06phr4q0hknr5l7bz96zbc8iand78wg";
+
+      azure-mgmt-cosmosdb = overrideAzureMgmtPackage super.azure-mgmt-cosmosdb "0.11.0" "zip"
+        "05j0s2ng6ck35lw85cbjf5cm6canc71c41aagr68cmiqj1li6v1z";
+
+      azure-mgmt-imagebuilder = overrideAzureMgmtPackage super.azure-mgmt-imagebuilder "0.2.1" "zip"
+        "0mwlvy4x5nr3hsz7wdpdhpzwarzzwz4225bfpd68hr0pcjgzspky";
+
+      azure-mgmt-iothub = overrideAzureMgmtPackage super.azure-mgmt-iothub "0.8.2" "zip"
+        "0w3w1d156rnkwjdarv3qvycklxr3z2j7lry7a3jfgj3ykzny12rq";
+
+      azure-mgmt-iotcentral = overrideAzureMgmtPackage super.azure-mgmt-iotcentral "1.0.0" "zip"
+        "1s1x0pzynz0sd0l4k1kvkph9i1y03y9qd6afbw0nafcr3znqib4s";
+
+      azure-mgmt-kusto = overrideAzureMgmtPackage super.azure-mgmt-kusto "0.3.0" "zip"
+        "1pmcdgimd66h964a3d5m2j2fbydshcwhrk87wblhwhfl3xwbgf4y";
+
+      azure-mgmt-devtestlabs = overrideAzureMgmtPackage super.azure-mgmt-devtestlabs "2.2.0" "zip"
+        "15lpyv9z8ss47rjmg1wx5akh22p9br2vckaj7jk3639vi38ac5nl";
+
+      azure-mgmt-netapp = overrideAzureMgmtPackage super.azure-mgmt-netapp "0.7.0" "zip"
+        "0cf4pknb5y2yz4jqwg7xm626zkfx8i8hqcr3dkvq21lrx7fz96r3";
+
+      azure-mgmt-dns = overrideAzureMgmtPackage super.azure-mgmt-dns "2.1.0" "zip"
+        "1l55py4fzzwhxlmnwa41gpmqk9v2ncc79w7zq11sm9a5ynrv2c1p";
+
+      azure-mgmt-network = overrideAzureMgmtPackage super.azure-mgmt-network "7.0.0" "zip"
+        "0ss5yc9k3dh78lb88nfh3z98yz1pcd8d7d7cfjlxmv4n3dlr1kij";
+
+      azure-mgmt-media = overrideAzureMgmtPackage super.azure-mgmt-media "1.1.1" "zip"
+        "16wk0ksycrscsn3n14qk4vvf7i567vq6f96lwf5dwbc81wx6n32x";
+
+      azure-mgmt-msi = overrideAzureMgmtPackage super.azure-mgmt-msi "0.2.0" "zip"
+        "0rvik03njz940x2hvqg6iiq8k0d88gyygsr86w8s0sa12sdbq8l6";
+
+      azure-mgmt-web = overrideAzureMgmtPackage super.azure-mgmt-web "0.42.0" "zip"
+        "0vp40i9aaw5ycz7s7qqir6jq7327f7zg9j9i8g31qkfl1h1c7pdn";
+
+      azure-mgmt-redis = overrideAzureMgmtPackage super.azure-mgmt-redis "7.0.0rc1" "zip"
+        "086wk31wsl8dx14qpd0g1bly8i9a8fix007djlj9cybva2f2bk6k";
+
+      azure-mgmt-reservations = overrideAzureMgmtPackage super.azure-mgmt-reservations "0.6.0" "zip"
+        "16ycni3cjl9c0mv419gy5rgbrlg8zp0vnr6aj8z8p2ypdw6sgac3";
+
+      azure-mgmt-security = overrideAzureMgmtPackage super.azure-mgmt-security "0.1.0" "zip"
+        "1cb466722bs0ribrirb32kc299716pl0pwivz3jyn40dd78cwhhx";
+
+      azure-mgmt-sql = overrideAzureMgmtPackage super.azure-mgmt-sql "0.15.0" "zip"
+        "0qv58xraznv2ldhd34cvznhz045x3ncfgam9c12gxyj4q0k3pyc9";
+
+      azure-mgmt-sqlvirtualmachine = overrideAzureMgmtPackage super.azure-mgmt-sqlvirtualmachine "0.5.0" "zip"
+        "1b9am8raa17hxnz7d5pk2ix0309wsnhnchq1mi22icd728sl5adm";
+
+      azure-mgmt-datamigration = overrideAzureMgmtPackage super.azure-mgmt-datamigration "0.1.0" "zip"
+        "1pq5rn32yvrf5kqjafnj0kc92gpfg435w2l0k7cm8gvlja4r4m77";
+
+      azure-mgmt-relay = overrideAzureMgmtPackage super.azure-mgmt-relay "0.1.0" "zip"
+        "1jss6qhvif8l5s0lblqw3qzijjf0h88agciiydaa7f4q577qgyfr";
+
+      azure-mgmt-eventhub = overrideAzureMgmtPackage super.azure-mgmt-eventhub "2.6.0" "zip"
+        "1nnp2ki4iz4f4897psmwb0v5khrwh84fgxja7nl7g73g3ym20sz8";
+
+      azure-mgmt-keyvault = overrideAzureMgmtPackage super.azure-mgmt-keyvault "1.1.0" "zip"
+        "16a0d3j5dilbp7pd7gbwf8jr46vzbjim1p9alcmisi12m4km7885";
+
+      azure-mgmt-cdn = overrideAzureMgmtPackage super.azure-mgmt-cdn "3.1.0" "zip"
+        "1qvnksmvsg8cw1ac6vbdxjdqsm7s1sak27k8xy24hm7c9a8y1nqc";
+
+      azure-mgmt-containerregistry = overrideAzureMgmtPackage super.azure-mgmt-containerregistry "3.0.0rc7" "zip"
+        "1bzfpbz186dhnxn0blgr20xxnk67gkr8ysn2b3f1r41bq9hz97xp";
+
+      azure-mgmt-monitor = overrideAzureMgmtPackage super.azure-mgmt-monitor "0.7.0" "zip"
+        "1pprvk5255b6brbw73g0g13zygwa7a2px5x08wy3153rqlzan5l2";
+
+      azure-mgmt-advisor =  overrideAzureMgmtPackage super.azure-mgmt-advisor "2.0.1" "zip"
+        "1wsfkprdrn22mwm24y2zlcms8ppp7jwq3s86r3ymbl29pbaxca8r";
+
+      azure-mgmt-applicationinsights = overrideAzureMgmtPackage super.azure-mgmt-applicationinsights "0.1.1" "zip"
+        "16raxr5naszrxmgbfhsvh7rqcph5cx6x3f480790m79ykvmjj0pi";
+
+      azure-mgmt-authorization = overrideAzureMgmtPackage super.azure-mgmt-authorization "0.52.0" "zip"
+        "0357laxgldb7lvvws81r8xb6mrq9dwwnr1bnwdnyj4bw6p21i9hn";
+
+      azure-mgmt-storage = overrideAzureMgmtPackage super.azure-mgmt-storage "7.1.0" "zip"
+        "03yjvw1dwkwsadsv60i625mr9zpdryy7ywvh7p8fg60djszh1p5l";
+
+      azure-mgmt-servicefabric = overrideAzureMgmtPackage super.azure-mgmt-servicefabric "0.2.0" "zip"
+        "1bcq6fcgrsvmk6q7v8mxzn1180jm2qijdqkqbv1m117zp1wj5gxj";
+
+      azure-mgmt-hdinsight = overrideAzureMgmtPackage super.azure-mgmt-hdinsight "1.3.0" "zip"
+        "1r7isr7hzq2dv1idwwa9xxxgk8wh0ncka45r4rdcsl1p7kd2kqam";
+
+      azure-graphrbac = super.azure-graphrbac.overrideAttrs(oldAttrs: rec {
+        version = "0.60.0";
+
+        src = super.fetchPypi {
+          inherit (oldAttrs) pname;
+          inherit version;
+          sha256 = "1zna5vb887clvpyfp5439vhlz3j4z95blw9r7y86n6cfpzc65fyh";
+          extension = "zip";
+        };
+      });
+
+      azure-storage-blob = super.azure-storage-blob.overrideAttrs(oldAttrs: rec {
+        version = "1.5.0";
+        src = super.fetchPypi {
+          inherit (oldAttrs) pname;
+          inherit version;
+          sha256 = "0b15dzy75fml994gdfmaw5qcyij15gvh968mk3hg94d1wxwai1zi";
+        };
+      });
+
+      azure-storage-common = super.azure-storage-common.overrideAttrs(oldAttrs: rec {
+        version = "1.4.2";
+        src = super.fetchPypi {
+          inherit (oldAttrs) pname;
+          inherit version;
+          sha256 = "00g41b5q4ijlv02zvzjgfwrwy71cgr3lc3if4nayqmyl6xsprj2f";
+        };
+      });
+
+      azure-keyvault = super.azure-keyvault.overrideAttrs(oldAttrs: rec {
+        version = "1.1.0";
+        src = super.fetchPypi {
+          inherit (oldAttrs) pname;
+          inherit version;
+          extension = "zip";
+          sha256 = "0jfxm8lx8dzs3v2b04ljizk8gfckbm5l2v86rm7k0npbfvryba1p";
+        };
+
+        propagatedBuildInputs = with self; [
+          azure-common azure-nspkg msrest msrestazure cryptography
+        ];
+        postInstall = ''
+          rm -f $out/${self.python.sitePackages}/azure/__init__.py
+        '';
+        pythonImportsCheck = [ ];
+      });
+
+      # part of azure.mgmt.datalake namespace
+      azure-mgmt-datalake-analytics = super.azure-mgmt-datalake-analytics.overrideAttrs(oldAttrs: rec {
+        version = "0.2.1";
+
+        src = super.fetchPypi {
+          inherit (oldAttrs) pname;
+          inherit version;
+          sha256 = "192icfx82gcl3igr18w062744376r2ivh63c8nd7v17mjk860yac";
+          extension = "zip";
+        };
+
+        preBuild = ''
+          rm azure_bdist_wheel.py
+          substituteInPlace setup.cfg \
+            --replace "azure-namespace-package = azure-mgmt-datalake-nspkg" ""
+        '';
+      });
+
+    };
+  };
+in
+  py
diff --git a/nixpkgs/pkgs/tools/admin/berglas/default.nix b/nixpkgs/pkgs/tools/admin/berglas/default.nix
new file mode 100644
index 000000000000..aaca67baa165
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/berglas/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+
+  name = "berglas-${version}";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "GoogleCloudPlatform";
+    repo = "berglas";
+    rev = "v0.5.0";
+    sha256 = "1y5w2czipwj069w4zxnyb9xqv5mx0yjjramykf3vm3q478bk3rm7";
+  };
+
+  modSha256 = "0y4ajii3pv25s4gjazf6fl0b9wax17cmwhbmiybqhp61annca7kr";
+
+  meta = with stdenv.lib; {
+    description = "A tool for managing secrets on Google Cloud";
+    homepage = https://github.com/GoogleCloudPlatform/berglas;
+    license = licenses.asl20;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/bluemix-cli/default.nix b/nixpkgs/pkgs/tools/admin/bluemix-cli/default.nix
new file mode 100644
index 000000000000..f97a6e5df891
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/bluemix-cli/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "bluemix-cli";
+  version = "0.8.0";
+
+  src =
+    if stdenv.hostPlatform.system == "i686-linux" then
+      fetchurl {
+        name = "linux32-${version}.tar.gz";
+        url = "https://clis.ng.bluemix.net/download/bluemix-cli/${version}/linux32";
+        sha256 = "1ryngbjlw59x33rfd32bcz49r93a1q1g92jh7xmi9vydgqnzsifh";
+      }
+    else
+      fetchurl {
+        name = "linux64-${version}.tar.gz";
+        url = "https://clis.ng.bluemix.net/download/bluemix-cli/${version}/linux64";
+        sha256 = "056zbaca430ldcn0s86vy40m5abvwpfrmvqybbr6fjwfv9zngywx";
+      }
+    ;
+
+  installPhase = ''
+    install -m755 -D -t $out/bin bin/ibmcloud bin/ibmcloud-analytics
+    install -m755 -D -t $out/bin/cfcli bin/cfcli/cf
+    ln -sv $out/bin/ibmcloud $out/bin/bx
+    ln -sv $out/bin/ibmcloud $out/bin/bluemix
+    install -D -t "$out/etc/bash_completion.d" bx/bash_autocomplete
+    install -D -t "$out/share/zsh/site-functions" bx/zsh_autocomplete
+  '';
+
+  meta = with lib; {
+    description  = "Administration CLI for IBM BlueMix";
+    homepage     = "https://console.bluemix.net/docs/cli/index.html";
+    downloadPage = "https://console.bluemix.net/docs/cli/reference/bluemix_cli/download_cli.html#download_install";
+    license      = licenses.unfree;
+    maintainers  = [ maintainers.tazjin maintainers.jensbin ];
+    platforms    = [ "x86_64-linux" "i686-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/boulder/default.nix b/nixpkgs/pkgs/tools/admin/boulder/default.nix
new file mode 100644
index 000000000000..a21a3ebdde11
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/boulder/default.nix
@@ -0,0 +1,33 @@
+{ buildGoPackage
+, libtool
+, fetchFromGitHub
+, lib
+}:
+
+let
+  version = "release-2019-10-13";
+
+in buildGoPackage {
+
+  pname = "boulder";
+  inherit version;
+
+  goPackagePath = "github.com/letsencrypt/boulder";
+
+  buildInputs = [ libtool ];
+
+  src = fetchFromGitHub {
+    owner = "letsencrypt";
+    repo = "boulder";
+    rev = version;
+    sha256 = "0kis23dnjja6jp192rjpv2m9m2zmzfwhs93440nxg354k6fp8jdg";
+  };
+
+  meta = {
+    homepage = "https://github.com/letsencrypt/boulder";
+    description = "An ACME-based CA, written in Go";
+    license = [ lib.licenses.mpl20 ];
+    maintainers = [ ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/admin/bubblewrap/default.nix b/nixpkgs/pkgs/tools/admin/bubblewrap/default.nix
new file mode 100644
index 000000000000..8e2ef7c87e1d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/bubblewrap/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl, libxslt, docbook_xsl, libcap }:
+
+stdenv.mkDerivation rec {
+  pname = "bubblewrap";
+  version = "0.4.0";
+
+  src = fetchurl {
+    url = "https://github.com/projectatomic/bubblewrap/releases/download/v${version}/${pname}-${version}.tar.xz";
+    sha256 = "08r0f4c3fjkb4zjrb4kkax1zfcgcgic702vb62sjjw5xfhppvzp5";
+  };
+
+  nativeBuildInputs = [ libcap libxslt docbook_xsl ];
+
+  meta = with stdenv.lib; {
+    description = "Unprivileged sandboxing tool";
+    homepage = https://github.com/projectatomic/bubblewrap;
+    license = licenses.lgpl2Plus;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/certbot/0001-Don-t-use-distutils.StrictVersion-that-cannot-handle.patch b/nixpkgs/pkgs/tools/admin/certbot/0001-Don-t-use-distutils.StrictVersion-that-cannot-handle.patch
new file mode 100644
index 000000000000..62351a70160a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/certbot/0001-Don-t-use-distutils.StrictVersion-that-cannot-handle.patch
@@ -0,0 +1,60 @@
+From 0de195de31dc311976af52a7c2b547bc23af2691 Mon Sep 17 00:00:00 2001
+From: Frederik Rietdijk <fridh@fridh.nl>
+Date: Sat, 14 Dec 2019 19:27:14 +0100
+Subject: [PATCH] Don't use distutils.StrictVersion that cannot handle certain
+ versions
+
+```
+  File "setup.py", line 63, in <module>
+    if StrictVersion(setuptools_version) >= StrictVersion('36.2'):
+File
+"/nix/store/zdh16dcvjw99ybam59zd2ijb6bx138j0-python3-3.7.5/lib/python3.7/distutils/version.py",
+line 40, in __init__
+    self.parse(vstring)
+File
+"/nix/store/zdh16dcvjw99ybam59zd2ijb6bx138j0-python3-3.7.5/lib/python3.7/distutils/version.py",
+line 137, in parse
+    raise ValueError("invalid version number '%s'" % vstring)
+ValueError: invalid version number '41.4.0.post20191022'
+```
+---
+ certbot/setup.py | 15 +--------------
+ 1 file changed, 1 insertion(+), 14 deletions(-)
+
+diff --git a/certbot/setup.py b/certbot/setup.py
+index c1bf914..7456bf2 100644
+--- a/certbot/setup.py
++++ b/certbot/setup.py
+@@ -3,7 +3,6 @@ import os
+ import re
+ import sys
+ 
+-from distutils.version import StrictVersion
+ from setuptools import find_packages, setup, __version__ as setuptools_version
+ from setuptools.command.test import test as TestCommand
+ 
+@@ -56,20 +55,8 @@ install_requires = [
+ 
+ # Add pywin32 on Windows platforms to handle low-level system calls.
+ # This dependency needs to be added using environment markers to avoid its installation on Linux.
+-# However environment markers are supported only with setuptools >= 36.2.
+-# So this dependency is not added for old Linux distributions with old setuptools,
+-# in order to allow these systems to build certbot from sources.
+ pywin32_req = 'pywin32>=227'  # do not forget to edit pywin32 dependency accordingly in windows-installer/construct.py
+-if StrictVersion(setuptools_version) >= StrictVersion('36.2'):
+-    install_requires.append(pywin32_req + " ; sys_platform == 'win32'")
+-elif 'bdist_wheel' in sys.argv[1:]:
+-    raise RuntimeError('Error, you are trying to build certbot wheels using an old version '
+-                       'of setuptools. Version 36.2+ of setuptools is required.')
+-elif os.name == 'nt':
+-    # This branch exists to improve this package's behavior on Windows. Without
+-    # it, if the sdist is installed on Windows with an old version of
+-    # setuptools, pywin32 will not be specified as a dependency.
+-    install_requires.append(pywin32_req)
++install_requires.append(pywin32_req + " ; sys_platform == 'win32'")
+ 
+ dev_extras = [
+     'astroid==1.6.5',
+-- 
+2.24.1
+
diff --git a/nixpkgs/pkgs/tools/admin/certbot/default.nix b/nixpkgs/pkgs/tools/admin/certbot/default.nix
new file mode 100644
index 000000000000..8fdbfd127783
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/certbot/default.nix
@@ -0,0 +1,65 @@
+{ stdenv, python37Packages, fetchFromGitHub, fetchurl, dialog, autoPatchelfHook }:
+
+
+python37Packages.buildPythonApplication rec {
+  pname = "certbot";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "180x7gcpfbrzw8k654s7b5nxdy2yg61lq513dykyn3wz4gssw465";
+  };
+
+  patches = [
+    ./0001-Don-t-use-distutils.StrictVersion-that-cannot-handle.patch
+  ];
+
+  propagatedBuildInputs = with python37Packages; [
+    ConfigArgParse
+    acme
+    configobj
+    cryptography
+    distro
+    josepy
+    parsedatetime
+    psutil
+    pyRFC3339
+    pyopenssl
+    pytz
+    six
+    zope_component
+    zope_interface
+  ];
+
+  buildInputs = [ dialog ] ++ (with python37Packages; [ mock gnureadline ]);
+
+  checkInputs = with python37Packages; [
+    pytest_xdist
+    pytest
+    dateutil
+  ];
+
+  postPatch = ''
+    cd certbot
+    substituteInPlace certbot/_internal/notify.py --replace "/usr/sbin/sendmail" "/run/wrappers/bin/sendmail"
+  '';
+
+  postInstall = ''
+    for i in $out/bin/*; do
+      wrapProgram "$i" --prefix PYTHONPATH : "$PYTHONPATH" \
+                       --prefix PATH : "${dialog}/bin:$PATH"
+    done
+  '';
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    homepage = src.meta.homepage;
+    description = "ACME client that can obtain certs and extensibly update server configurations";
+    platforms = platforms.unix;
+    maintainers = [ maintainers.domenkozar ];
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/certigo/default.nix b/nixpkgs/pkgs/tools/admin/certigo/default.nix
new file mode 100644
index 000000000000..923344c64118
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/certigo/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "certigo";
+  version = "1.11.0";
+
+  src = fetchFromGitHub {
+    owner = "square";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1vi4gn484kc7vyxnm2nislzy587h2h4gc8d197vslhyfygac9y7b";
+  };
+
+  goPackagePath = "github.com/square/certigo";
+
+  meta = with stdenv.lib; {
+    description = "A utility to examine and validate certificates in a variety of formats";
+    homepage = "https://github.com/square/certigo";
+    license = licenses.asl20;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/chkcrontab/default.nix b/nixpkgs/pkgs/tools/admin/chkcrontab/default.nix
new file mode 100644
index 000000000000..a4b119f126a4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/chkcrontab/default.nix
@@ -0,0 +1,20 @@
+{ python, stdenv }:
+
+with python.pkgs;
+
+buildPythonApplication rec {
+  pname = "chkcrontab";
+  version = "1.7";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0gmxavjkjkvjysgf9cf5fcpk589gb75n1mn20iki82wifi1pk1jn";
+  };
+
+  meta = with stdenv.lib; {
+    description = "A tool to detect crontab errors";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ma27 ];
+    homepage = https://github.com/lyda/chkcrontab;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/clair/default.nix b/nixpkgs/pkgs/tools/admin/clair/default.nix
new file mode 100644
index 000000000000..3f4d00736ad9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/clair/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub, makeWrapper, rpm, xz }:
+
+buildGoModule rec {
+  pname = "clair";
+  version = "2.1.2";
+
+  src = fetchFromGitHub {
+    owner = "quay";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "14dh9iv2g138rivvfk135m3l90kk6c1ln1iqxhbi7s99h1jixbqw";
+  };
+
+  modSha256 = "0rgkrid58kji39nlmiii95r8shbzr6dwalj5m7qwxy5w1rcaljr5";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    wrapProgram $out/bin/clair \
+      --prefix PATH : "${lib.makeBinPath [ rpm xz ]}"
+  '';
+
+  meta = with lib; {
+    description = "Vulnerability Static Analysis for Containers";
+    homepage = "https://github.com/quay/clair";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/cli53/default.nix b/nixpkgs/pkgs/tools/admin/cli53/default.nix
new file mode 100644
index 000000000000..8195207ef60a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/cli53/default.nix
@@ -0,0 +1,25 @@
+# This file was generated by https://github.com/kamilchm/go2nix v2.0-dev
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage {
+  pname = "cli53";
+  version = "0.8.12";
+
+  goPackagePath = "github.com/barnybug/cli53";
+
+  src = fetchFromGitHub {
+    owner = "barnybug";
+    repo = "cli53";
+    rev = "2624c7c4b38a33cdbd166dad1d3e512830f453e4";
+    sha256 = "0bhczmzrgf7ypnhhzdrgnvg8cw8ch1x1d0cgajc5kklq9ixv9ygi";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with lib; {
+    description = "CLI tool for the Amazon Route 53 DNS service";
+    homepage = https://github.com/barnybug/cli53;
+    license = licenses.mit;
+    maintainers = with maintainers; [ benley ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/cli53/deps.nix b/nixpkgs/pkgs/tools/admin/cli53/deps.nix
new file mode 100644
index 000000000000..4742bc00851b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/cli53/deps.nix
@@ -0,0 +1,93 @@
+# This file was generated by https://github.com/kamilchm/go2nix v2.0-dev
+[
+  {
+    goPackagePath = "github.com/aws/aws-sdk-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/aws/aws-sdk-go";
+      rev = "3e7014382cdc91695381614d0110a3cff997ba72";
+      sha256 = "1xnjhmb31k63k13aiiiispc7vkgnlxkbihslwwfsjc7b86vrllm5";
+    };
+  }
+  {
+    goPackagePath = "github.com/davecgh/go-spew";
+    fetch = {
+      type = "git";
+      url = "https://github.com/davecgh/go-spew";
+      rev = "346938d642f2ec3594ed81d874461961cd0faa76";
+      sha256 = "0d4jfmak5p6lb7n2r6yvf5p1zcw0l8j74kn55ghvr7zr7b7axm6c";
+    };
+  }
+  {
+    goPackagePath = "github.com/go-ini/ini";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-ini/ini";
+      rev = "20b96f641a5ea98f2f8619ff4f3e061cff4833bd";
+      sha256 = "0mp18hlhnazg3sd02fhv88kbbipmhcrkb6n8imq8gk2dvmxk64ch";
+    };
+  }
+  {
+    goPackagePath = "github.com/gucumber/gucumber";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gucumber/gucumber";
+      rev = "71608e2f6e76fd4da5b09a376aeec7a5c0b5edbc";
+      sha256 = "1h1d9j515v1nyqsyb73v4ahlvm9n6z7hgl2ld8dryr4sw8q7ybw3";
+    };
+  }
+  {
+    goPackagePath = "github.com/jmespath/go-jmespath";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jmespath/go-jmespath";
+      rev = "0b12d6b5";
+      sha256 = "1vv6hph8j6xgv7gwl9vvhlsaaqsm22sxxqmgmldi4v11783pc1ld";
+    };
+  }
+  {
+    goPackagePath = "github.com/miekg/dns";
+    fetch = {
+      type = "git";
+      url = "https://github.com/miekg/dns";
+      rev = "e4205768578dc90c2669e75a2f8a8bf77e3083a4";
+      sha256 = "0247qcc9i41wrm73ivqs2wvy3vi3nb44m3nh27lnhd4a0ilir6wv";
+    };
+  }
+  {
+    goPackagePath = "github.com/pmezard/go-difflib";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pmezard/go-difflib";
+      rev = "792786c7400a136282c1664665ae0a8db921c6c2";
+      sha256 = "0c1cn55m4rypmscgf0rrb88pn58j3ysvc2d0432dp3c6fqg6cnzw";
+    };
+  }
+  {
+    goPackagePath = "github.com/shiena/ansicolor";
+    fetch = {
+      type = "git";
+      url = "https://github.com/shiena/ansicolor";
+      rev = "a422bbe96644373c5753384a59d678f7d261ff10";
+      sha256 = "1dcn8a9z6a5dxa2m3fkppnajcls8lanbl38qggkf646yi5qsk1hc";
+    };
+  }
+  {
+    goPackagePath = "github.com/stretchr/testify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/stretchr/testify";
+      rev = "12b6f73e6084dad08a7c6e575284b177ecafbc71";
+      sha256 = "01f80s0q64pw5drfgqwwk1wfwwkvd2lhbs56lhhkff4ni83k73fd";
+    };
+  }
+  {
+    goPackagePath = "github.com/urfave/cli";
+    fetch = {
+      type = "git";
+      url = "https://github.com/urfave/cli";
+      rev = "cfb38830724cc34fedffe9a2a29fb54fa9169cd1";
+      sha256 = "0y6f4sbzkiiwrxbl15biivj8c7qwxnvm3zl2dd3mw4wzg4x10ygj";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/admin/daemontools/default.nix b/nixpkgs/pkgs/tools/admin/daemontools/default.nix
new file mode 100644
index 000000000000..7e8c1bccc3e8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/daemontools/default.nix
@@ -0,0 +1,44 @@
+{ fetchurl, bash, glibc, stdenv }:
+
+stdenv.mkDerivation rec {
+  name = "daemontools-0.76";
+
+  src = fetchurl {
+    url = "https://cr.yp.to/daemontools/${name}.tar.gz";
+    sha256 = "07scvw88faxkscxi91031pjkpccql6wspk4yrlnsbrrb5c0kamd5";
+  };
+
+  patches = [ ./fix-nix-usernamespace-build.patch ];
+
+  configurePhase = ''
+    cd ${name}
+
+    sed -ie '1 s_$_ -include ${glibc.dev}/include/errno.h_' src/conf-cc
+
+    substituteInPlace src/Makefile \
+      --replace '/bin/sh' '${bash}/bin/bash -oxtrace'
+
+    sed -ie "s_^PATH=.*_PATH=$src/${name}/compile:''${PATH}_" src/rts.tests
+
+    cat ${glibc.dev}/include/errno.h
+  '';
+
+  buildPhase = ''
+    package/compile
+  '';
+
+  installPhase = ''
+    for cmd in $(cat package/commands); do
+      install -Dm755 "command/$cmd" "$out/bin/$cmd"
+    done
+  '';
+
+  meta = {
+    license = stdenv.lib.licenses.publicDomain;
+    homepage = https://cr.yp.to/daemontools.html;
+    description = "A collection of tools for managing UNIX services.";
+
+    maintainers = with stdenv.lib.maintainers; [ kevincox ];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/daemontools/fix-nix-usernamespace-build.patch b/nixpkgs/pkgs/tools/admin/daemontools/fix-nix-usernamespace-build.patch
new file mode 100644
index 000000000000..9b784e7ca112
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/daemontools/fix-nix-usernamespace-build.patch
@@ -0,0 +1,10 @@
+--- admin.org/daemontools-0.76/src/chkshsgr.c	2001-07-12 17:49:49.000000000 +0100
++++ admin/daemontools-0.76/src/chkshsgr.c	2017-05-31 23:54:56.662174028 +0100
+@@ -4,6 +4,7 @@
+ 
+ int main()
+ {
++  return 0;
+   short x[4];
+ 
+   x[0] = x[1] = 0;
diff --git a/nixpkgs/pkgs/tools/admin/dehydrated/default.nix b/nixpkgs/pkgs/tools/admin/dehydrated/default.nix
new file mode 100644
index 000000000000..6cc69c2290d4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/dehydrated/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, coreutils, curl, diffutils, gawk, gnugrep, gnused, openssl, makeWrapper, fetchFromGitHub, installShellFiles }:
+stdenv.mkDerivation rec {
+  pname = "dehydrated";
+  version = "0.6.5";
+
+  src = fetchFromGitHub {
+    owner = "lukas2511";
+    repo = "dehydrated";
+    rev = "v${version}";
+    sha256 = "14k7ykry16zp09i0bqb5pqaclvnjcb6p3x8knm9v5q0bdvlplkjv";
+  };
+
+  nativeBuildInputs = [ makeWrapper installShellFiles ];
+
+  installPhase = ''
+    installManPage docs/man/dehydrated.1
+
+    mkdir -p "$out/share/docs/dehydrated"
+    cp docs/*.md "$out/share/docs/dehydrated"
+    cp -r docs/examples "$out/share/docs/dehydrated"
+    cp {CHANGELOG,LICENSE,README.md} "$out/share/docs/dehydrated"
+
+    mkdir -p $out/bin
+    cp -a dehydrated $out/bin
+    wrapProgram "$out/bin/dehydrated" --prefix PATH : "${stdenv.lib.makeBinPath [ openssl coreutils gnused gnugrep diffutils curl gawk ]}"
+    '';
+
+  meta = with stdenv.lib; {
+    inherit (src.meta) homepage;
+    description = "Letsencrypt/acme client implemented as a shell-script";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = [ maintainers.pstn ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/docker-credential-gcr/default.nix b/nixpkgs/pkgs/tools/admin/docker-credential-gcr/default.nix
new file mode 100644
index 000000000000..a71958f8a099
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/docker-credential-gcr/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "docker-credential-gcr";
+  version = "1.4.3";
+
+  goPackagePath = "github.com/GoogleCloudPlatform/docker-credential-gcr";
+
+  src = fetchFromGitHub {
+    owner = "GoogleCloudPlatform";
+    repo = "docker-credential-gcr";
+    rev = "v${version}";
+    sha256 = "1xb88xjyyrdmjcgfv7fqdkv1ip3dpzsdif5vm7vkqvn83s5wj5df";
+  };
+
+  meta = with stdenv.lib; {
+    description = "A Docker credential helper for GCR (https://gcr.io) users";
+    longDescription = ''
+      docker-credential-gcr is Google Container Registry's Docker credential
+      helper. It allows for Docker clients v1.11+ to easily make
+      authenticated requests to GCR's repositories (gcr.io, eu.gcr.io, etc.).
+    '';
+    homepage = https://github.com/GoogleCloudPlatform/docker-credential-gcr;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ suvash ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/docker-credential-helpers/default.nix b/nixpkgs/pkgs/tools/admin/docker-credential-helpers/default.nix
new file mode 100644
index 000000000000..1f4315afc40d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/docker-credential-helpers/default.nix
@@ -0,0 +1,49 @@
+{ stdenv, buildGoPackage, fetchFromGitHub, pkg-config, libsecret }:
+
+buildGoPackage rec {
+  pname = "docker-credential-helpers";
+  version = "0.6.3";
+
+  goPackagePath = "github.com/docker/docker-credential-helpers";
+
+  src = fetchFromGitHub {
+    owner = "docker";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0xgmwjva3j1s0cqkbajbamj13bgzh5jkf2ir54m9a7w8gjnsh6dx";
+  };
+
+  nativeBuildInputs = stdenv.lib.optionals stdenv.isLinux [ pkg-config ];
+
+  buildInputs = stdenv.lib.optionals stdenv.isLinux [ libsecret ];
+
+  buildPhase =
+    if stdenv.isDarwin
+    then ''
+      cd go/src/${goPackagePath}
+      go build -ldflags -s -o bin/docker-credential-osxkeychain osxkeychain/cmd/main_darwin.go
+    ''
+    else ''
+      cd go/src/${goPackagePath}
+      go build -o bin/docker-credential-secretservice secretservice/cmd/main_linux.go
+      go build -o bin/docker-credential-pass pass/cmd/main_linux.go
+    '';
+
+  installPhase =
+    if stdenv.isDarwin
+    then ''
+      install -Dm755 -t $bin/bin bin/docker-credential-osxkeychain
+    ''
+    else ''
+      install -Dm755 -t $bin/bin bin/docker-credential-pass
+      install -Dm755 -t $bin/bin bin/docker-credential-secretservice
+    '';
+
+  meta = with stdenv.lib; {
+    description = "Suite of programs to use native stores to keep Docker credentials safe";
+    homepage = "https://github.com/docker/docker-credential-helpers";
+    license = licenses.mit;
+    maintainers = [ maintainers.marsam ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/eksctl/default.nix b/nixpkgs/pkgs/tools/admin/eksctl/default.nix
new file mode 100644
index 000000000000..3cadafc633ee
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/eksctl/default.nix
@@ -0,0 +1,35 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "eksctl";
+  version = "0.12.0";
+
+  src = fetchFromGitHub {
+    owner = "weaveworks";
+    repo = pname;
+    rev = version;
+    sha256 = "1m4hcj2bi9v3ngjj2x1fifcnb450jrij06vbi3j28slsdwn1bcc8";
+  };
+
+  modSha256 = "1c8qyxzfazgw77rlv3yw2x39ymaq66jjd51im0jl4131a6hzj6fd";
+
+  subPackages = [ "cmd/eksctl" ];
+
+  buildFlags = [ "-tags netgo" "-tags release" ];
+
+  postInstall =
+  ''
+    mkdir -p "$out/share/"{bash-completion/completions,zsh/site-functions}
+
+    $out/bin/eksctl completion bash > "$out/share/bash-completion/completions/eksctl"
+    $out/bin/eksctl completion zsh > "$out/share/zsh/site-functions/_eksctl"
+  '';
+
+  meta = with lib; {
+    description = "A CLI for Amazon EKS";
+    homepage = "https://github.com/weaveworks/eksctl";
+    license = licenses.asl20;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ xrelkd ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/elasticsearch-curator/default.nix b/nixpkgs/pkgs/tools/admin/elasticsearch-curator/default.nix
new file mode 100644
index 000000000000..8d8f90704999
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/elasticsearch-curator/default.nix
@@ -0,0 +1,81 @@
+{ lib, fetchFromGitHub, python }:
+
+let
+py = python.override {
+  packageOverrides = self: super: {
+    click = super.click.overridePythonAttrs (oldAttrs: rec {
+      version = "6.7";
+      src = oldAttrs.src.override {
+        inherit version;
+        sha256 = "f15516df478d5a56180fbf80e68f206010e6d160fc39fa508b65e035fd75130b";
+      };
+    });
+  };
+};
+in
+
+with py.pkgs;
+buildPythonApplication rec {
+  pname   = "elasticsearch-curator";
+  version = "5.8.1";
+
+  src = fetchFromGitHub {
+    owner = "elastic";
+    repo = "curator";
+    rev = "v${version}";
+    sha256 = "1shr9jslirjnbvma3p19djsnamxl7f3m9c8zrlclk57zv8rnwpkr";
+  };
+
+  # The test hangs so we disable it.
+  doCheck = false;
+
+  propagatedBuildInputs = [
+    click
+    certifi
+    requests-aws4auth
+    pyopenssl
+    voluptuous
+    pyyaml
+    elasticsearch
+    boto3
+  ];
+
+  checkInputs = [
+    nosexcover
+    coverage
+    nose
+    mock
+    funcsigs
+  ];
+
+  postPatch = ''
+    sed -i s/pyyaml==3.13/pyyaml/g setup.cfg setup.py
+    sed -i s/pyyaml==3.12/pyyaml/g setup.cfg setup.py
+    substituteInPlace setup.py \
+      --replace "urllib3>=1.24.2,<1.25" "urllib3"
+    substituteInPlace setup.cfg \
+      --replace "urllib3>=1.24.2,<1.25" "urllib3"
+  '';
+
+  meta = with lib; {
+    homepage = https://github.com/elastic/curator;
+    description = "Curate, or manage, your Elasticsearch indices and snapshots";
+    license = licenses.asl20;
+    longDescription = ''
+      Elasticsearch Curator helps you curate, or manage, your Elasticsearch
+      indices and snapshots by:
+
+      * Obtaining the full list of indices (or snapshots) from the cluster, as the
+        actionable list
+
+      * Iterate through a list of user-defined filters to progressively remove
+        indices (or snapshots) from this actionable list as needed.
+
+      * Perform various actions on the items which remain in the actionable list.
+    '';
+    maintainers = with maintainers; [ basvandijk ];
+
+    # https://github.com/elastic/curator/pull/1280
+    #broken = versionAtLeast click.version "7.0";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/fastlane/Gemfile b/nixpkgs/pkgs/tools/admin/fastlane/Gemfile
new file mode 100644
index 000000000000..1fa8dbca63b1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/fastlane/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'fastlane'
diff --git a/nixpkgs/pkgs/tools/admin/fastlane/Gemfile.lock b/nixpkgs/pkgs/tools/admin/fastlane/Gemfile.lock
new file mode 100644
index 000000000000..e3cfc580fab9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/fastlane/Gemfile.lock
@@ -0,0 +1,159 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    CFPropertyList (3.0.0)
+    addressable (2.6.0)
+      public_suffix (>= 2.0.2, < 4.0)
+    atomos (0.1.3)
+    babosa (1.0.2)
+    claide (1.0.2)
+    colored (1.2)
+    colored2 (3.1.2)
+    commander-fastlane (4.4.6)
+      highline (~> 1.7.2)
+    declarative (0.0.10)
+    declarative-option (0.1.0)
+    digest-crc (0.4.1)
+    domain_name (0.5.20190701)
+      unf (>= 0.0.5, < 1.0.0)
+    dotenv (2.7.4)
+    emoji_regex (1.0.1)
+    excon (0.65.0)
+    faraday (0.15.4)
+      multipart-post (>= 1.2, < 3)
+    faraday-cookie_jar (0.0.6)
+      faraday (>= 0.7.4)
+      http-cookie (~> 1.0.0)
+    faraday_middleware (0.13.1)
+      faraday (>= 0.7.4, < 1.0)
+    fastimage (2.1.5)
+    fastlane (2.128.1)
+      CFPropertyList (>= 2.3, < 4.0.0)
+      addressable (>= 2.3, < 3.0.0)
+      babosa (>= 1.0.2, < 2.0.0)
+      bundler (>= 1.12.0, < 3.0.0)
+      colored
+      commander-fastlane (>= 4.4.6, < 5.0.0)
+      dotenv (>= 2.1.1, < 3.0.0)
+      emoji_regex (>= 0.1, < 2.0)
+      excon (>= 0.45.0, < 1.0.0)
+      faraday (~> 0.9)
+      faraday-cookie_jar (~> 0.0.6)
+      faraday_middleware (~> 0.9)
+      fastimage (>= 2.1.0, < 3.0.0)
+      gh_inspector (>= 1.1.2, < 2.0.0)
+      google-api-client (>= 0.21.2, < 0.24.0)
+      google-cloud-storage (>= 1.15.0, < 2.0.0)
+      highline (>= 1.7.2, < 2.0.0)
+      json (< 3.0.0)
+      jwt (~> 2.1.0)
+      mini_magick (>= 4.9.4, < 5.0.0)
+      multi_xml (~> 0.5)
+      multipart-post (~> 2.0.0)
+      plist (>= 3.1.0, < 4.0.0)
+      public_suffix (~> 2.0.0)
+      rubyzip (>= 1.2.2, < 2.0.0)
+      security (= 0.1.3)
+      simctl (~> 1.6.3)
+      slack-notifier (>= 2.0.0, < 3.0.0)
+      terminal-notifier (>= 2.0.0, < 3.0.0)
+      terminal-table (>= 1.4.5, < 2.0.0)
+      tty-screen (>= 0.6.3, < 1.0.0)
+      tty-spinner (>= 0.8.0, < 1.0.0)
+      word_wrap (~> 1.0.0)
+      xcodeproj (>= 1.8.1, < 2.0.0)
+      xcpretty (~> 0.3.0)
+      xcpretty-travis-formatter (>= 0.0.3)
+    gh_inspector (1.1.3)
+    google-api-client (0.23.9)
+      addressable (~> 2.5, >= 2.5.1)
+      googleauth (>= 0.5, < 0.7.0)
+      httpclient (>= 2.8.1, < 3.0)
+      mime-types (~> 3.0)
+      representable (~> 3.0)
+      retriable (>= 2.0, < 4.0)
+      signet (~> 0.9)
+    google-cloud-core (1.3.0)
+      google-cloud-env (~> 1.0)
+    google-cloud-env (1.2.0)
+      faraday (~> 0.11)
+    google-cloud-storage (1.16.0)
+      digest-crc (~> 0.4)
+      google-api-client (~> 0.23)
+      google-cloud-core (~> 1.2)
+      googleauth (>= 0.6.2, < 0.10.0)
+    googleauth (0.6.7)
+      faraday (~> 0.12)
+      jwt (>= 1.4, < 3.0)
+      memoist (~> 0.16)
+      multi_json (~> 1.11)
+      os (>= 0.9, < 2.0)
+      signet (~> 0.7)
+    highline (1.7.10)
+    http-cookie (1.0.3)
+      domain_name (~> 0.5)
+    httpclient (2.8.3)
+    json (2.2.0)
+    jwt (2.1.0)
+    memoist (0.16.0)
+    mime-types (3.2.2)
+      mime-types-data (~> 3.2015)
+    mime-types-data (3.2019.0331)
+    mini_magick (4.9.5)
+    multi_json (1.13.1)
+    multi_xml (0.6.0)
+    multipart-post (2.0.0)
+    nanaimo (0.2.6)
+    naturally (2.2.0)
+    os (1.0.1)
+    plist (3.5.0)
+    public_suffix (2.0.5)
+    representable (3.0.4)
+      declarative (< 0.1.0)
+      declarative-option (< 0.2.0)
+      uber (< 0.2.0)
+    retriable (3.1.2)
+    rouge (2.0.7)
+    rubyzip (1.2.3)
+    security (0.1.3)
+    signet (0.11.0)
+      addressable (~> 2.3)
+      faraday (~> 0.9)
+      jwt (>= 1.5, < 3.0)
+      multi_json (~> 1.10)
+    simctl (1.6.5)
+      CFPropertyList
+      naturally
+    slack-notifier (2.3.2)
+    terminal-notifier (2.0.0)
+    terminal-table (1.8.0)
+      unicode-display_width (~> 1.1, >= 1.1.1)
+    tty-cursor (0.7.0)
+    tty-screen (0.7.0)
+    tty-spinner (0.9.1)
+      tty-cursor (~> 0.7)
+    uber (0.1.0)
+    unf (0.1.4)
+      unf_ext
+    unf_ext (0.0.7.6)
+    unicode-display_width (1.6.0)
+    word_wrap (1.0.0)
+    xcodeproj (1.11.0)
+      CFPropertyList (>= 2.3.3, < 4.0)
+      atomos (~> 0.1.3)
+      claide (>= 1.0.2, < 2.0)
+      colored2 (~> 3.1)
+      nanaimo (~> 0.2.6)
+    xcpretty (0.3.0)
+      rouge (~> 2.0.7)
+    xcpretty-travis-formatter (1.0.0)
+      xcpretty (~> 0.2, >= 0.0.7)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  fastlane
+
+BUNDLED WITH
+   1.17.2
diff --git a/nixpkgs/pkgs/tools/admin/fastlane/default.nix b/nixpkgs/pkgs/tools/admin/fastlane/default.nix
new file mode 100644
index 000000000000..1cdc969ea2e6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/fastlane/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, bundlerEnv, ruby, bundlerUpdateScript, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "fastlane";
+  version = (import ./gemset.nix).fastlane.version;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  phases = [ "installPhase" ];
+
+  installPhase = let
+    env = bundlerEnv {
+      name = "${pname}-${version}-gems";
+      inherit pname ruby;
+      gemdir = ./.;
+    };
+  in ''
+    mkdir -p $out/bin
+    makeWrapper ${env}/bin/fastlane $out/bin/fastlane \
+     --set FASTLANE_SKIP_UPDATE_CHECK 1
+  '';
+
+  passthru.updateScript = bundlerUpdateScript "fastlane";
+
+  meta = with stdenv.lib; {
+    description     = "A tool to automate building and releasing iOS and Android apps";
+    longDescription = "fastlane is a tool for iOS and Android developers to automate tedious tasks like generating screenshots, dealing with provisioning profiles, and releasing your application.";
+    homepage        = https://github.com/fastlane/fastlane;
+    license         = licenses.mit;
+    maintainers     = with maintainers; [
+      peterromfeldhk
+      nicknovitski
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/fastlane/gemset.nix b/nixpkgs/pkgs/tools/admin/fastlane/gemset.nix
new file mode 100644
index 000000000000..2511822a9fc9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/fastlane/gemset.nix
@@ -0,0 +1,589 @@
+{
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bcm2hchn897xjhqj9zzsxf3n9xhddymj4lsclz508f4vw3av46l";
+      type = "gem";
+    };
+    version = "2.6.0";
+  };
+  atomos = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17vq6sjyswr5jfzwdccw748kgph6bdw30bakwnn6p8sl4hpv4hvx";
+      type = "gem";
+    };
+    version = "0.1.3";
+  };
+  babosa = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05rgxg4pz4bc4xk34w5grv0yp1j94wf571w84lf3xgqcbs42ip2f";
+      type = "gem";
+    };
+    version = "1.0.2";
+  };
+  CFPropertyList = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ykjag3k5msz3sf1j91rb55da2xh596y06m3a4yl79fiy2id0w9z";
+      type = "gem";
+    };
+    version = "3.0.0";
+  };
+  claide = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0az54rp691hc42yl1xyix2cxv58byhaaf4gxbpghvvq29l476rzc";
+      type = "gem";
+    };
+    version = "1.0.2";
+  };
+  colored = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0b0x5jmsyi0z69bm6sij1k89z7h0laag3cb4mdn7zkl9qmxb90lx";
+      type = "gem";
+    };
+    version = "1.2";
+  };
+  colored2 = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jlbqa9q4mvrm73aw9mxh23ygzbjiqwisl32d8szfb5fxvbjng5i";
+      type = "gem";
+    };
+    version = "3.1.2";
+  };
+  commander-fastlane = {
+    dependencies = ["highline"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0y8d3ac9qwm1cg6rnpf8rcdsy1yxacrd2g2kl809xsp2vi973g65";
+      type = "gem";
+    };
+    version = "4.4.6";
+  };
+  declarative = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0642xvwzzbgi3kp1bg467wma4g3xqrrn0sk369hjam7w579gnv5j";
+      type = "gem";
+    };
+    version = "0.0.10";
+  };
+  declarative-option = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g4ibxq566f1frnhdymzi9hxxcm4g2gw4n21mpjk2mhwym4q6l0p";
+      type = "gem";
+    };
+    version = "0.1.0";
+  };
+  digest-crc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08q8p0fk51aa6dwhy2xmjaj76arcq9nn22gyia162jmqpccfx50l";
+      type = "gem";
+    };
+    version = "0.4.1";
+  };
+  domain_name = {
+    dependencies = ["unf"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lcqjsmixjp52bnlgzh4lg9ppsk52x9hpwdjd53k8jnbah2602h0";
+      type = "gem";
+    };
+    version = "0.5.20190701";
+  };
+  dotenv = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1375dyawvcp81d94jkjwjjkj3j23gsp06cfwh15g695l4g3ssswc";
+      type = "gem";
+    };
+    version = "2.7.4";
+  };
+  emoji_regex = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jfsv8ik2h1msqf3if1f121pnx3lccp8fqnka9na309mnw3bq532";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  excon = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mc6y6n7i0hhk7i8wwi4qjnpkm013p7z3xr994s696hk74f91a7j";
+      type = "gem";
+    };
+    version = "0.65.0";
+  };
+  faraday = {
+    dependencies = ["multipart-post"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0s72m05jvzc1pd6cw1i289chas399q0a14xrwg4rvkdwy7bgzrh0";
+      type = "gem";
+    };
+    version = "0.15.4";
+  };
+  faraday-cookie_jar = {
+    dependencies = ["faraday" "http-cookie"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1di4gx6446a6zdkrpj679m5k515i53wvb4yxcsqvy8d8zacxiiv6";
+      type = "gem";
+    };
+    version = "0.0.6";
+  };
+  faraday_middleware = {
+    dependencies = ["faraday"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1a93rs58bakqck7bcihasz66a1riy22h2zpwrpmb13gp8mw3wkmr";
+      type = "gem";
+    };
+    version = "0.13.1";
+  };
+  fastimage = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1iy9jm13r2r4yz41xaivhxs8mvqn57fjwihxvazbip002mq6rxfz";
+      type = "gem";
+    };
+    version = "2.1.5";
+  };
+  fastlane = {
+    dependencies = ["CFPropertyList" "addressable" "babosa" "colored" "commander-fastlane" "dotenv" "emoji_regex" "excon" "faraday" "faraday-cookie_jar" "faraday_middleware" "fastimage" "gh_inspector" "google-api-client" "google-cloud-storage" "highline" "json" "jwt" "mini_magick" "multi_xml" "multipart-post" "plist" "public_suffix" "rubyzip" "security" "simctl" "slack-notifier" "terminal-notifier" "terminal-table" "tty-screen" "tty-spinner" "word_wrap" "xcodeproj" "xcpretty" "xcpretty-travis-formatter"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0h3k6rzy9p9s7ajk96jarg7sqs9npdnj7acr4v2gs8bpf31hqgpc";
+      type = "gem";
+    };
+    version = "2.128.1";
+  };
+  gh_inspector = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0f8r9byajj3bi2c7c5sqrc7m0zrv3nblfcd4782lw5l73cbsgk04";
+      type = "gem";
+    };
+    version = "1.1.3";
+  };
+  google-api-client = {
+    dependencies = ["addressable" "googleauth" "httpclient" "mime-types" "representable" "retriable" "signet"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1z925kbqyaxdi6ld3gvaqc9527xfi8k3rr6snq5mvx5kibdi072a";
+      type = "gem";
+    };
+    version = "0.23.9";
+  };
+  google-cloud-core = {
+    dependencies = ["google-cloud-env"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gqn523gqj6dwbj9ddcb8rjw0sai4x138pk3l3qzmq8jxz67qqj5";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+  google-cloud-env = {
+    dependencies = ["faraday"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j25sy2qhybqfwsyh8j4m10z2x7dn2jmf1gwr1w2b90cmya4yrbd";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  google-cloud-storage = {
+    dependencies = ["digest-crc" "google-api-client" "google-cloud-core" "googleauth"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lslrlrrhjj8imbpzvbbwflrvq06r0x5h74mlq726yvkr7akyqlq";
+      type = "gem";
+    };
+    version = "1.16.0";
+  };
+  googleauth = {
+    dependencies = ["faraday" "jwt" "memoist" "multi_json" "os" "signet"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yj7j1rnyamxpn5ybgdgbiw89v9bq2r0h85s2y2jzvqanvm7iflq";
+      type = "gem";
+    };
+    version = "0.6.7";
+  };
+  highline = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01ib7jp85xjc4gh4jg0wyzllm46hwv8p0w1m4c75pbgi41fps50y";
+      type = "gem";
+    };
+    version = "1.7.10";
+  };
+  http-cookie = {
+    dependencies = ["domain_name"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "004cgs4xg5n6byjs7qld0xhsjq3n6ydfh897myr2mibvh6fjc49g";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  httpclient = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19mxmvghp7ki3klsxwrlwr431li7hm1lczhhj8z4qihl2acy8l99";
+      type = "gem";
+    };
+    version = "2.8.3";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sx97bm9by389rbzv8r1f43h06xcz8vwi3h5jv074gvparql7lcx";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  jwt = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1w0kaqrbl71cq9sbnixc20x5lqah3hs2i93xmhlfdg2y3by7yzky";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  memoist = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pq8fhqh8w25qcw9v3vzfb0i6jp0k3949ahxc3wrwz2791dpbgbh";
+      type = "gem";
+    };
+    version = "0.16.0";
+  };
+  mime-types = {
+    dependencies = ["mime-types-data"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fjxy1jm52ixpnv3vg9ld9pr9f35gy0jp66i1njhqjvmnvq0iwwk";
+      type = "gem";
+    };
+    version = "3.2.2";
+  };
+  mime-types-data = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1m00pg19cm47n1qlcxgl91ajh2yq0fszvn1vy8fy0s1jkrp9fw4a";
+      type = "gem";
+    };
+    version = "3.2019.0331";
+  };
+  mini_magick = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qy09qrd5bwh8mkbj514n5vcw9ni73218h9s3zmvbpmdwrnzi8j4";
+      type = "gem";
+    };
+    version = "4.9.5";
+  };
+  multi_json = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rl0qy4inf1mp8mybfk56dfga0mvx97zwpmq5xmiwl5r770171nv";
+      type = "gem";
+    };
+    version = "1.13.1";
+  };
+  multi_xml = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lmd4f401mvravi1i1yq7b2qjjli0yq7dfc4p1nj5nwajp7r6hyj";
+      type = "gem";
+    };
+    version = "0.6.0";
+  };
+  multipart-post = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09k0b3cybqilk1gwrwwain95rdypixb2q9w65gd44gfzsd84xi1x";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  nanaimo = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ajfyaqjw3dzykk612yw8sm21savfqy292hgps8h8l4lvxww1lz6";
+      type = "gem";
+    };
+    version = "0.2.6";
+  };
+  naturally = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dzqdawqr4agx7zr1fr5zxdwl8vb5rhpz57l1lk7d2y46ha6l4l7";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  os = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06r55k01g32lvz4wf2s6hpjlxbbag113jsvff3w64jllfr315a73";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  plist = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ra0910xxbhfsmdi0ig36pr3q0khdqzwb5da3wg7y3n8d1sh9ffp";
+      type = "gem";
+    };
+    version = "3.5.0";
+  };
+  public_suffix = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "040jf98jpp6w140ghkhw2hvc1qx41zvywx5gj7r2ylr1148qnj7q";
+      type = "gem";
+    };
+    version = "2.0.5";
+  };
+  representable = {
+    dependencies = ["declarative" "declarative-option" "uber"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qm9rgi1j5a6nv726ka4mmixivlxfsg91h8rpp72wwd4vqbkkm07";
+      type = "gem";
+    };
+    version = "3.0.4";
+  };
+  retriable = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1q48hqws2dy1vws9schc0kmina40gy7sn5qsndpsfqdslh65snha";
+      type = "gem";
+    };
+    version = "3.1.2";
+  };
+  rouge = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sfikq1q8xyqqx690iiz7ybhzx87am4w50w8f2nq36l3asw4x89d";
+      type = "gem";
+    };
+    version = "2.0.7";
+  };
+  rubyzip = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1w9gw28ly3zyqydnm8phxchf4ymyjl2r7zf7c12z8kla10cpmhlc";
+      type = "gem";
+    };
+    version = "1.2.3";
+  };
+  security = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ryjxs0j66wrbky2c08yf0mllwalvpg12rpxzbdx2rdhj3cbrlxa";
+      type = "gem";
+    };
+    version = "0.1.3";
+  };
+  signet = {
+    dependencies = ["addressable" "faraday" "jwt" "multi_json"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1f5d3bz5bjc4b0r2jmqd15qf07lgsqkgd25f0h46jihrf9l5fsi4";
+      type = "gem";
+    };
+    version = "0.11.0";
+  };
+  simctl = {
+    dependencies = ["CFPropertyList" "naturally"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bbvbpdk955q1g797md960fdznw6p6hmj2pc62yrbpvb1ymag1sf";
+      type = "gem";
+    };
+    version = "1.6.5";
+  };
+  slack-notifier = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pkfn99dhy5s526r6k8d87fwwb6j287ga9s7lxqmh60z28xqh3bv";
+      type = "gem";
+    };
+    version = "2.3.2";
+  };
+  terminal-notifier = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1slc0y8pjpw30hy21v8ypafi8r7z9jlj4bjbgz03b65b28i2n3bs";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  terminal-table = {
+    dependencies = ["unicode-display_width"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1512cngw35hsmhvw4c05rscihc59mnj09m249sm9p3pik831ydqk";
+      type = "gem";
+    };
+    version = "1.8.0";
+  };
+  tty-cursor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0prcxdy6qhqba4cv7hsy503b3bjciqk3j3hhzvcbij1kj2gh31c9";
+      type = "gem";
+    };
+    version = "0.7.0";
+  };
+  tty-screen = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1143g05fs28ssgimaph6sdnsndd1wrpax9kjypvd2ripa1adm4kx";
+      type = "gem";
+    };
+    version = "0.7.0";
+  };
+  tty-spinner = {
+    dependencies = ["tty-cursor"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "089qiqzjs1m727kalz8vn2wzgwzdn8mg5gyag901pmimxl64lnvc";
+      type = "gem";
+    };
+    version = "0.9.1";
+  };
+  uber = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1p1mm7mngg40x05z52md3mbamkng0zpajbzqjjwmsyw0zw3v9vjv";
+      type = "gem";
+    };
+    version = "0.1.0";
+  };
+  unf = {
+    dependencies = ["unf_ext"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bh2cf73i2ffh4fcpdn9ir4mhq8zi50ik0zqa1braahzadx536a9";
+      type = "gem";
+    };
+    version = "0.1.4";
+  };
+  unf_ext = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ll6w64ibh81qwvjx19h8nj7mngxgffg7aigjx11klvf5k2g4nxf";
+      type = "gem";
+    };
+    version = "0.0.7.6";
+  };
+  unicode-display_width = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08kfiniak1pvg3gn5k6snpigzvhvhyg7slmm0s2qx5zkj62c1z2w";
+      type = "gem";
+    };
+    version = "1.6.0";
+  };
+  word_wrap = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1iyc5bc7dbgsd8j3yk1i99ral39f23l6wapi0083fbl19hid8mpm";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  xcodeproj = {
+    dependencies = ["CFPropertyList" "atomos" "claide" "colored2" "nanaimo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1h73ilwyjwyyhj761an3pmicllw50514gxb6b1r4z4klc9rzxw4j";
+      type = "gem";
+    };
+    version = "1.11.0";
+  };
+  xcpretty = {
+    dependencies = ["rouge"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xq47q2h5llj7b54rws4796904vnnjz7qqnacdv7wlp3gdbwrivm";
+      type = "gem";
+    };
+    version = "0.3.0";
+  };
+  xcpretty-travis-formatter = {
+    dependencies = ["xcpretty"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15b5c0lxz2blmichfdlabzlbyw5nlh1ci898pxwb661m9bahz3ml";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/admin/fbvnc/default.nix b/nixpkgs/pkgs/tools/admin/fbvnc/default.nix
new file mode 100644
index 000000000000..ec32b5f0a268
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/fbvnc/default.nix
@@ -0,0 +1,30 @@
+{stdenv, fetchFromGitHub}:
+stdenv.mkDerivation rec {
+  name = "${pname}-${version}";
+  pname = "fbvnc";
+  version = "1.0.2";
+
+  src = fetchFromGitHub {
+    owner = "zohead";
+    repo = pname;
+    sha256 = "0lkr4j1wsa05av2g9w99rr9w4j4k7a21vp36x0a3h50y8bmgwgm1";
+    rev = "783204ff6c92afec33d6d36f7e74f1fcf2b1b601";
+  };
+
+  buildInputs = [];
+
+  installPhase = ''
+    mkdir -p "$out/bin"
+    cp fbvnc "$out/bin"
+    mkdir -p "$out/share/doc/${pname}"
+    cp README* "$out/share/doc/${pname}"
+  '';
+
+  meta = {
+    description = "Framebuffer VNC client";
+    license = stdenv.lib.licenses.bsd3;
+    maintainers = [stdenv.lib.maintainers.raskin];
+    platforms = stdenv.lib.platforms.linux;
+    homepage = "https://github.com/zohead/fbvnc/";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/gixy/default.nix b/nixpkgs/pkgs/tools/admin/gixy/default.nix
new file mode 100644
index 000000000000..bbec64c0aee9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/gixy/default.nix
@@ -0,0 +1,43 @@
+{ lib, fetchFromGitHub, python }:
+
+python.pkgs.buildPythonApplication rec {
+  pname = "gixy";
+  version = "0.1.20";
+
+  # package is only compatible with python 2.7 and 3.5+
+  disabled = with python.pkgs; !(pythonAtLeast "3.5" || isPy27);
+
+  # fetching from GitHub because the PyPi source is missing the tests
+  src = fetchFromGitHub {
+    owner = "yandex";
+    repo = "gixy";
+    rev = "v${version}";
+    sha256 = "14arz3fjidb8z37m08xcpih1391varj8s0v3gri79z3qb4zq5k6b";
+  };
+
+  postPatch = ''
+    sed -ie '/argparse/d' setup.py
+  '';
+
+  propagatedBuildInputs = with python.pkgs; [
+    cached-property
+    ConfigArgParse
+    pyparsing
+    jinja2
+    nose
+    setuptools
+    six
+  ];
+
+  meta = with lib; {
+    description = "Nginx configuration static analyzer";
+    longDescription = ''
+      Gixy is a tool to analyze Nginx configuration.
+      The main goal of Gixy is to prevent security misconfiguration and automate flaw detection.
+    '';
+    homepage = https://github.com/yandex/gixy;
+    license = licenses.mpl20;
+    maintainers = [ maintainers.willibutz ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/google-cloud-sdk/alpha__init__.py b/nixpkgs/pkgs/tools/admin/google-cloud-sdk/alpha__init__.py
new file mode 100755
index 000000000000..d120969d8fb8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/google-cloud-sdk/alpha__init__.py
@@ -0,0 +1,23 @@
+# Copyright 2013 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Auth for the Google Cloud SDK.
+"""
+
+from googlecloudsdk.calliope import base
+
+
+@base.ReleaseTracks(base.ReleaseTrack.ALPHA)
+class Alpha(base.Group):
+  """Alpha versions of gcloud commands."""
diff --git a/nixpkgs/pkgs/tools/admin/google-cloud-sdk/beta__init__.py b/nixpkgs/pkgs/tools/admin/google-cloud-sdk/beta__init__.py
new file mode 100755
index 000000000000..bb52c5a0bc4a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/google-cloud-sdk/beta__init__.py
@@ -0,0 +1,23 @@
+# Copyright 2013 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Auth for the Google Cloud SDK.
+"""
+
+from googlecloudsdk.calliope import base
+
+
+@base.ReleaseTracks(base.ReleaseTrack.BETA)
+class Beta(base.Group):
+  """Beta versions of gcloud commands."""
diff --git a/nixpkgs/pkgs/tools/admin/google-cloud-sdk/default.nix b/nixpkgs/pkgs/tools/admin/google-cloud-sdk/default.nix
new file mode 100644
index 000000000000..5bcc25ea9899
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/google-cloud-sdk/default.nix
@@ -0,0 +1,91 @@
+# Make sure that the "with-gce" flag is set when building `google-cloud-sdk`
+# for GCE hosts. This flag prevents "google-compute-engine" from being a
+# default dependency which is undesirable because this package is
+#
+#   1) available only on GNU/Linux (requires `systemd` in particular)
+#   2) intended only for GCE guests (and is useless elsewhere)
+#   3) used by `google-cloud-sdk` only on GCE guests
+#
+
+{ stdenv, lib, fetchurl, makeWrapper, python, openssl, with-gce ? false }:
+
+let
+  pythonEnv = python.withPackages (p: with p; [
+    cffi
+    cryptography
+    pyopenssl
+    crcmod
+  ] ++ lib.optional (with-gce) google-compute-engine);
+
+  baseUrl = "https://dl.google.com/dl/cloudsdk/channels/rapid/downloads";
+  sources = name: system: {
+    x86_64-darwin = {
+      url = "${baseUrl}/${name}-darwin-x86_64.tar.gz";
+      sha256 = "10h0khh8npj2j5f7h3z86h46zbb1skbfs74firssich6jk7rx6km";
+    };
+
+    x86_64-linux = {
+      url = "${baseUrl}/${name}-linux-x86_64.tar.gz";
+      sha256 = "182r9lgpks50ihcrkarc5w6l4rfmpdnx825lazamj5j2jsha73xw";
+    };
+  }.${system};
+
+in stdenv.mkDerivation rec {
+  pname = "google-cloud-sdk";
+  version = "268.0.0";
+
+  src = fetchurl (sources "${pname}-${version}" stdenv.hostPlatform.system);
+
+  buildInputs = [ python makeWrapper ];
+
+  patches = [
+    ./gcloud-path.patch
+  ];
+
+  installPhase = ''
+    mkdir -p $out/google-cloud-sdk
+    cp -R * .install $out/google-cloud-sdk/
+
+    mkdir -p $out/google-cloud-sdk/lib/surface/{alpha,beta}
+    cp ${./alpha__init__.py} $out/google-cloud-sdk/lib/surface/alpha/__init__.py
+    cp ${./beta__init__.py} $out/google-cloud-sdk/lib/surface/beta/__init__.py
+
+    # create wrappers with correct env
+    for program in gcloud bq gsutil git-credential-gcloud.sh docker-credential-gcloud; do
+        programPath="$out/google-cloud-sdk/bin/$program"
+        binaryPath="$out/bin/$program"
+        wrapProgram "$programPath" \
+            --set CLOUDSDK_PYTHON "${pythonEnv}/bin/python" \
+            --prefix PYTHONPATH : "${pythonEnv}/${python.sitePackages}" \
+            --prefix PATH : "${openssl.bin}/bin"
+
+        mkdir -p $out/bin
+        ln -s $programPath $binaryPath
+    done
+
+    # disable component updater and update check
+    substituteInPlace $out/google-cloud-sdk/lib/googlecloudsdk/core/config.json \
+      --replace "\"disable_updater\": false" "\"disable_updater\": true"
+    echo "
+    [component_manager]
+    disable_update_check = true" >> $out/google-cloud-sdk/properties
+
+    # setup bash completion
+    mkdir -p $out/etc/bash_completion.d
+    mv $out/google-cloud-sdk/completion.bash.inc $out/etc/bash_completion.d/gcloud.inc
+
+    # This directory contains compiled mac binaries. We used crcmod from
+    # nixpkgs instead.
+    rm -r $out/google-cloud-sdk/platform/gsutil/third_party/crcmod
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Tools for the google cloud platform";
+    longDescription = "The Google Cloud SDK. This package has the programs: gcloud, gsutil, and bq";
+    # This package contains vendored dependencies. All have free licenses.
+    license = licenses.free;
+    homepage = "https://cloud.google.com/sdk/";
+    maintainers = with maintainers; [ pradyuman stephenmw zimbatm ];
+    platforms = [ "x86_64-linux" "x86_64-darwin" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/google-cloud-sdk/gcloud-path.patch b/nixpkgs/pkgs/tools/admin/google-cloud-sdk/gcloud-path.patch
new file mode 100644
index 000000000000..64ec6cdb1b65
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/google-cloud-sdk/gcloud-path.patch
@@ -0,0 +1,47 @@
+From b69fee70154a861637c82e98e18be01bbb96423b Mon Sep 17 00:00:00 2001
+From: Florian Klink <flokli@flokli.de>
+Date: Wed, 12 Jun 2019 17:03:09 +0200
+Subject: [PATCH] kubeconfig: don't store absolute path to gcloud binary
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The `gcloud beta container clusters get-credentials $cluster \
+--region $region --project $project`
+command can be used to write kubectl config files.
+
+In that file, normally the absolute path to the `gcloud` binary is
+stored.
+
+This is a bad idea in NixOS. We might eventually garbage-collect that
+specific gcloud binary - and in general, would expect a nix-shell
+provided gcloud to be used.
+
+In its current state, token renewal would just start to break with the
+following error message:
+
+Unable to connect to the server: error executing access token command "/nix/store/…/gcloud config config-helper --format=json": err=fork/exec /nix/store/…/gcloud: no such file or directory output= stderr=
+
+Avoid this by storing just `gcloud` inside `cmd-path`, which causes
+kubectl to lookup the gcloud command from $PATH, which is more likely to
+keep working.
+---
+ lib/googlecloudsdk/api_lib/container/kubeconfig.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lib/googlecloudsdk/api_lib/container/kubeconfig.py b/lib/googlecloudsdk/api_lib/container/kubeconfig.py
+index 4330988d6..37424b841 100644
+--- a/lib/googlecloudsdk/api_lib/container/kubeconfig.py
++++ b/lib/googlecloudsdk/api_lib/container/kubeconfig.py
+@@ -255,7 +255,7 @@ def _AuthProvider(name='gcp'):
+       raise Error(SDK_BIN_PATH_NOT_FOUND)
+     cfg = {
+         # Command for gcloud credential helper
+-        'cmd-path': os.path.join(sdk_bin_path, bin_name),
++        'cmd-path': bin_name,
+         # Args for gcloud credential helper
+         'cmd-args': 'config config-helper --format=json',
+         # JSONpath to the field that is the raw access token
+-- 
+2.21.0
+
diff --git a/nixpkgs/pkgs/tools/admin/gtk-vnc/default.nix b/nixpkgs/pkgs/tools/admin/gtk-vnc/default.nix
new file mode 100644
index 000000000000..37a27127bab0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/gtk-vnc/default.nix
@@ -0,0 +1,78 @@
+{ stdenv
+, fetchurl
+, fetchpatch
+, meson
+, ninja
+, gobject-introspection
+, gnutls
+, cairo
+, glib
+, pkgconfig
+, cyrus_sasl
+, libpulseaudio
+, libgcrypt
+, gtk3
+, vala
+, gettext
+, perl
+, gnome3
+, gdk-pixbuf
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gtk-vnc";
+  version = "1.0.0";
+
+  outputs = [ "out" "bin" "man" "dev" ];
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "1060ws037v556rx1qhfrcg02859rscksrzr8fq11himdg4d1y6m8";
+  };
+
+  patches = [
+    # Fix undeclared gio-unix-2.0 in example program.
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/gtk-vnc/commit/8588bc1c8321152ddc5086ca9b2c03a7f511e0d0.patch";
+      sha256 = "0i1iapsbngl1mhnz22dd73mnzk68qc4n51pqdhnm18zqc8pawvh4";
+    })
+  ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkgconfig
+    gobject-introspection
+    vala
+    gettext
+    perl # for pod2man
+  ];
+
+  buildInputs = [
+    gnutls
+    cairo
+    gdk-pixbuf
+    zlib
+    glib
+    libgcrypt
+    cyrus_sasl
+    libpulseaudio
+    gtk3
+  ];
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+      versionPolicy = "none";
+    };
+  };
+
+  meta = with stdenv.lib; {
+    description = "GTK VNC widget";
+    homepage = https://wiki.gnome.org/Projects/gtk-vnc;
+    license = licenses.lgpl2Plus;
+    maintainers = with maintainers; [ raskin offline ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/iamy/default.nix b/nixpkgs/pkgs/tools/admin/iamy/default.nix
new file mode 100644
index 000000000000..e09cd2f52853
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/iamy/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "iamy";
+  version = "2.3.2";
+
+  goPackagePath = "github.com/99designs/iamy";
+
+  src = fetchFromGitHub {
+    owner = "99designs";
+    repo = "iamy";
+    rev = "v${version}";
+    sha256 = "1fypc6yjnhlpk7zhb2lvah2ikh2zji9sll55rqjbr3i4j02h484z";
+  };
+
+  modSha256 = "0akak573zvz3xg5d7vf0ch2mrmj1jkzcdc29v3kn43f7944c2wcl";
+
+  buildFlagsArray = [''-ldflags=
+    -X main.Version=v${version} -s -w
+  ''];
+
+  meta = with stdenv.lib; {
+    description = "A cli tool for importing and exporting AWS IAM configuration to YAML files";
+    homepage = https://github.com/99designs/iamy;
+    license = licenses.mit;
+    maintainers = with maintainers; [ suvash ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/intecture/agent.nix b/nixpkgs/pkgs/tools/admin/intecture/agent.nix
new file mode 100644
index 000000000000..f0945d7d778b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/intecture/agent.nix
@@ -0,0 +1,29 @@
+{ lib, fetchFromGitHub, rustPlatform
+, openssl, zeromq, czmq, pkgconfig, cmake, zlib }:
+
+with rustPlatform;
+
+buildRustPackage rec {
+  pname = "intecture-agent";
+  version = "0.3.1";
+
+  src = fetchFromGitHub {
+    owner = "intecture";
+    repo = "agent";
+    rev = version;
+    sha256 = "0j27qdgyxybaixggh7k57mpm6rifimn4z2vydk463msc8b3kgywj";
+  };
+
+  cargoSha256 = "093ipd8lg2ngnln55x5j40g2n8f3y8aysgz9rjn95a4npxrg4yxw";
+
+  buildInputs = [ openssl zeromq czmq zlib ];
+
+  nativeBuildInputs = [ pkgconfig cmake ];
+
+  meta = with lib; {
+    description = "Authentication client/server for Intecture components";
+    homepage = https://intecture.io;
+    license = licenses.mpl20;
+    maintainers = [ maintainers.rushmorem ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/intecture/auth.nix b/nixpkgs/pkgs/tools/admin/intecture/auth.nix
new file mode 100644
index 000000000000..a3208bddabe9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/intecture/auth.nix
@@ -0,0 +1,29 @@
+{ lib, fetchFromGitHub, rustPlatform
+, openssl, zeromq, czmq, pkgconfig, cmake, zlib }:
+
+with rustPlatform;
+
+buildRustPackage rec {
+  pname = "intecture-auth";
+  version = "0.1.2";
+
+  src = fetchFromGitHub {
+    owner = "intecture";
+    repo = "auth";
+    rev = version;
+    sha256 = "0c7ar3pc7n59lzfy74lwz51p09s2bglc870rfr4c0vmc91jl0pj2";
+  };
+
+  cargoSha256 = "1rnhhb4mpf1j7c7a2pz4741hzbf2s2wb0bm25j049n64j49j3jq8";
+
+  buildInputs = [ openssl zeromq czmq zlib ];
+
+  nativeBuildInputs = [ pkgconfig cmake ];
+
+  meta = with lib; {
+    description = "Authentication client/server for Intecture components";
+    homepage = https://intecture.io;
+    license = licenses.mpl20;
+    maintainers = [ maintainers.rushmorem ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/intecture/cli.nix b/nixpkgs/pkgs/tools/admin/intecture/cli.nix
new file mode 100644
index 000000000000..90d65a3f2951
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/intecture/cli.nix
@@ -0,0 +1,32 @@
+{ lib, fetchFromGitHub, rustPlatform
+, openssl, zeromq, czmq, pkgconfig, cmake, zlib }:
+
+with rustPlatform;
+
+buildRustPackage rec {
+  pname = "intecture-cli";
+  version = "0.3.4";
+
+  src = fetchFromGitHub {
+    owner = "intecture";
+    repo = "cli";
+    rev = version;
+    sha256 = "16a5fkpyqkf8w20k3ircc1d0qmif7nygkzxj6mzk9609dlb0dmxq";
+  };
+
+  cargoSha256 = "0dhrx6njfbd8w27ifk13g6s3ick579bhc4ijf54rfb9g6n8abafx";
+
+  buildInputs = [ openssl zeromq czmq zlib ];
+
+  nativeBuildInputs = [ pkgconfig cmake ];
+
+  # Needed for tests
+  USER = "$(whoami)";
+
+  meta = with lib; {
+    description = "A developer friendly, language agnostic configuration management tool for server systems";
+    homepage = https://intecture.io;
+    license = licenses.mpl20;
+    maintainers = [ maintainers.rushmorem ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/lego/default.nix b/nixpkgs/pkgs/tools/admin/lego/default.nix
new file mode 100644
index 000000000000..fa7c3876a283
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/lego/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "lego";
+  version = "3.2.0";
+
+  src = fetchFromGitHub {
+    owner = "go-acme";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1djvwyjg30f9bj61pf3y2k2w055pj39v0sif4rjqg8cz0j382a2z";
+  };
+
+  modSha256 = "0k3p11cji3p4nzr8aia8hp01wyx1qfx84259dwbfwg1b32ln8rkc";
+  subPackages = [ "cmd/lego" ];
+
+  meta = with lib; {
+    description = "Let's Encrypt client and ACME library written in Go";
+    license = licenses.mit;
+    homepage = "https://go-acme.github.io/lego/";
+    maintainers = with maintainers; [ andrew-d ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/lxd/default.nix b/nixpkgs/pkgs/tools/admin/lxd/default.nix
new file mode 100644
index 000000000000..fd8ee9e04a3a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/lxd/default.nix
@@ -0,0 +1,57 @@
+{ stdenv, pkgconfig, lxc, buildGoPackage, fetchurl
+, makeWrapper, acl, rsync, gnutar, xz, btrfs-progs, gzip, dnsmasq
+, squashfsTools, iproute, iptables, ebtables, libcap, libco-canonical, dqlite
+, raft-canonical, sqlite-replication
+, writeShellScriptBin, apparmor-profiles, apparmor-parser
+, criu
+, bash
+}:
+
+buildGoPackage rec {
+  pname = "lxd";
+  version = "3.18";
+
+  goPackagePath = "github.com/lxc/lxd";
+
+  src = fetchurl {
+    url = "https://github.com/lxc/lxd/releases/download/${pname}-${version}/${pname}-${version}.tar.gz";
+    sha256 = "1p8g2gbwgn3kln5rxddpc2fxk8bvf026wjiqip2b0vvpi7h3955h";
+  };
+
+  preBuild = ''
+    # unpack vendor
+    pushd go/src/github.com/lxc/lxd
+    rm _dist/src/github.com/lxc/lxd
+    cp -r _dist/src/* ../../..
+    popd
+  '';
+
+  buildFlags = [ "-tags libsqlite3" ];
+
+  postInstall = ''
+    # test binaries, code generation
+    rm $bin/bin/{deps,macaroon-identity,generate}
+
+    wrapProgram $bin/bin/lxd --prefix PATH : ${stdenv.lib.makeBinPath [
+      acl rsync gnutar xz btrfs-progs gzip dnsmasq squashfsTools iproute iptables ebtables bash criu
+      (writeShellScriptBin "apparmor_parser" ''
+        exec '${apparmor-parser}/bin/apparmor_parser' -I '${apparmor-profiles}/etc/apparmor.d' "$@"
+      '')
+    ]}
+
+    mkdir -p "$bin/share/bash-completion/completions/"
+    cp -av go/src/github.com/lxc/lxd/scripts/bash/lxd-client "$bin/share/bash-completion/completions/lxc"
+  '';
+
+  nativeBuildInputs = [ pkgconfig makeWrapper ];
+  buildInputs = [ lxc acl libcap libco-canonical.dev dqlite.dev
+                  raft-canonical.dev sqlite-replication ];
+
+  meta = with stdenv.lib; {
+    description = "Daemon based on liblxc offering a REST API to manage containers";
+    homepage = https://linuxcontainers.org/lxd/;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ fpletz wucke13 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/mycli/default.nix b/nixpkgs/pkgs/tools/admin/mycli/default.nix
new file mode 100644
index 000000000000..1783c1ae04d9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/mycli/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, python3
+, glibcLocales
+}:
+
+with python3.pkgs;
+
+buildPythonApplication rec {
+  pname = "mycli";
+  version = "1.20.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0vhwaqkx4njarm0wy8zg2hvzr2yl92y8gnwipcn7p59sazw4whfl";
+  };
+
+  propagatedBuildInputs = [
+    pymysql configobj sqlparse prompt_toolkit pygments click pycrypto cli-helpers
+  ];
+
+  checkInputs = [ pytest mock glibcLocales ];
+
+  checkPhase = ''
+    export HOME=.
+    export LC_ALL="en_US.UTF-8"
+
+    py.test
+  '';
+
+  meta = {
+    inherit version;
+    description = "Command-line interface for MySQL";
+    longDescription = ''
+      Rich command-line interface for MySQL with auto-completion and
+      syntax highlighting.
+    '';
+    homepage = http://mycli.net;
+    license = lib.licenses.bsd3;
+    maintainers = [ lib.maintainers.jojosch ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/nomachine-client/default.nix b/nixpkgs/pkgs/tools/admin/nomachine-client/default.nix
new file mode 100644
index 000000000000..e8efc7d9cfe3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/nomachine-client/default.nix
@@ -0,0 +1,90 @@
+{ stdenv, file, fetchurl, makeWrapper,
+  autoPatchelfHook, jsoncpp, libpulseaudio }:
+let
+  versionMajor = "6.8";
+  versionMinor = "1";
+  versionBuild_x86_64 = "1";
+  versionBuild_i686 = "1";
+in
+  stdenv.mkDerivation rec {
+    pname = "nomachine-client";
+    version = "${versionMajor}.${versionMinor}";
+  
+    src =
+      if stdenv.hostPlatform.system == "x86_64-linux" then
+        fetchurl {
+          url = "https://download.nomachine.com/download/${versionMajor}/Linux/nomachine_${version}_${versionBuild_x86_64}_x86_64.tar.gz";
+          sha256 = "07330sxqjmzdn8kwxn9r49j28lsbp7mmrsxcyl8r32c3g355wskl";
+        }
+      else if stdenv.hostPlatform.system == "i686-linux" then
+        fetchurl {
+          url = "https://download.nomachine.com/download/${versionMajor}/Linux/nomachine_${version}_${versionBuild_i686}_i686.tar.gz";
+          sha256 = "03b2648nzmc2amgrqflsxihx5yjp7rz906g655az4j2hl7y0b0bs";
+        }
+      else
+        throw "NoMachine client is not supported on ${stdenv.hostPlatform.system}";
+    
+    postUnpack = ''
+      mv $(find . -type f -name nxclient.tar.gz) .
+      mv $(find . -type f -name nxplayer.tar.gz) .
+      rm -r NX/
+      tar xf nxclient.tar.gz
+      tar xf nxplayer.tar.gz
+      rm $(find . -maxdepth 1 -type f)
+    '';
+  
+    nativeBuildInputs = [ file makeWrapper autoPatchelfHook ];
+    buildInputs = [ jsoncpp libpulseaudio ];
+
+    installPhase = ''
+      rm bin/nxplayer bin/nxclient
+
+      mkdir -p $out/NX
+      cp -r bin lib share $out/NX/
+
+      ln -s $out/NX/bin $out/bin
+
+      for i in share/icons/*; do
+        if [[ -d "$i" ]]; then
+          mkdir -p "$out/share/icons/hicolor/$(basename $i)/apps"
+          cp "$i"/* "$out/share/icons/hicolor/$(basename $i)/apps/"
+        fi
+      done
+  
+      mkdir $out/share/applications
+      cp share/applnk/player/xdg/*.desktop $out/share/applications/
+      cp share/applnk/client/xdg-mime/*.desktop $out/share/applications/
+
+      mkdir -p $out/share/mime/packages
+      cp share/applnk/client/xdg-mime/*.xml $out/share/mime/packages/
+
+      for i in $out/share/applications/*.desktop; do
+        substituteInPlace "$i" --replace /usr/NX/bin $out/bin
+      done
+    '';
+  
+    postFixup = ''
+      makeWrapper $out/bin/nxplayer.bin $out/bin/nxplayer --set NX_SYSTEM $out/NX
+      makeWrapper $out/bin/nxclient.bin $out/bin/nxclient --set NX_SYSTEM $out/NX
+
+      # libnxcau.so needs libpulse.so.0 for audio to work, but doesn't
+      # have a DT_NEEDED entry for it.
+      patchelf --add-needed libpulse.so.0 $out/NX/lib/libnxcau.so
+    '';
+  
+    dontBuild = true;
+    dontStrip = true;
+
+    meta = with stdenv.lib; {
+      description = "NoMachine remote desktop client (nxplayer)";
+      homepage = https://www.nomachine.com/;
+      license = {
+        fullName = "NoMachine 6 End-User License Agreement";
+        url = https://www.nomachine.com/licensing-6;
+        free = false;
+      };
+      maintainers = with maintainers; [ talyz ];
+      platforms = [ "x86_64-linux" "i686-linux" ];
+    };
+  }
+  
diff --git a/nixpkgs/pkgs/tools/admin/oxidized/Gemfile b/nixpkgs/pkgs/tools/admin/oxidized/Gemfile
new file mode 100644
index 000000000000..bddfe1adee53
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/oxidized/Gemfile
@@ -0,0 +1,5 @@
+source 'https://rubygems.org'
+
+gem 'oxidized', '0.26.3'
+gem 'oxidized-web', '0.13.1'
+gem 'oxidized-script', '0.6.0'
diff --git a/nixpkgs/pkgs/tools/admin/oxidized/Gemfile.lock b/nixpkgs/pkgs/tools/admin/oxidized/Gemfile.lock
new file mode 100644
index 000000000000..0832bce6d2ee
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/oxidized/Gemfile.lock
@@ -0,0 +1,80 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    asetus (0.3.0)
+    backports (3.14.0)
+    charlock_holmes (0.7.6)
+    emk-sinatra-url-for (0.2.1)
+      sinatra (>= 0.9.1.1)
+    ffi (1.10.0)
+    git (1.5.0)
+    haml (5.0.4)
+      temple (>= 0.8.0)
+      tilt
+    htmlentities (4.3.4)
+    json (2.2.0)
+    multi_json (1.13.1)
+    net-ssh (5.2.0)
+    net-telnet (0.1.1)
+    oxidized (0.26.3)
+      asetus (~> 0.1)
+      git (~> 1)
+      net-ssh (~> 5)
+      net-telnet (~> 0.1.1)
+      rugged (~> 0.21, >= 0.21.4)
+      slop (~> 3.5)
+    oxidized-script (0.6.0)
+      oxidized (~> 0.25)
+      slop (~> 3.5)
+    oxidized-web (0.13.1)
+      charlock_holmes (~> 0.7.5)
+      emk-sinatra-url-for (~> 0.2)
+      haml (~> 5.0)
+      htmlentities (~> 4.3)
+      json (>= 1.7.0)
+      oxidized (~> 0.26)
+      puma (~> 3.11.4)
+      rack-test (~> 0.7.0)
+      sass (~> 3.3)
+      sinatra (~> 1.4, >= 1.4.6)
+      sinatra-contrib (~> 1.4, >= 1.4.6)
+    puma (3.11.4)
+    rack (1.6.11)
+    rack-protection (1.5.5)
+      rack
+    rack-test (0.7.0)
+      rack (>= 1.0, < 3)
+    rb-fsevent (0.10.3)
+    rb-inotify (0.10.0)
+      ffi (~> 1.0)
+    rugged (0.28.1)
+    sass (3.7.4)
+      sass-listen (~> 4.0.0)
+    sass-listen (4.0.0)
+      rb-fsevent (~> 0.9, >= 0.9.4)
+      rb-inotify (~> 0.9, >= 0.9.7)
+    sinatra (1.4.8)
+      rack (~> 1.5)
+      rack-protection (~> 1.4)
+      tilt (>= 1.3, < 3)
+    sinatra-contrib (1.4.7)
+      backports (>= 2.0)
+      multi_json
+      rack-protection
+      rack-test
+      sinatra (~> 1.4.0)
+      tilt (>= 1.3, < 3)
+    slop (3.6.0)
+    temple (0.8.1)
+    tilt (2.0.9)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  oxidized (= 0.26.3)
+  oxidized-script (= 0.6.0)
+  oxidized-web (= 0.13.1)
+
+BUNDLED WITH
+   1.17.2
diff --git a/nixpkgs/pkgs/tools/admin/oxidized/default.nix b/nixpkgs/pkgs/tools/admin/oxidized/default.nix
new file mode 100644
index 000000000000..a11906e80f04
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/oxidized/default.nix
@@ -0,0 +1,20 @@
+{ lib, ruby, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "oxidized";
+  gemdir = ./.;
+
+  inherit ruby;
+
+  exes = [ "oxidized" "oxidized-web" "oxidized-script" ];
+
+  passthru.updateScript = bundlerUpdateScript "oxidized";
+
+  meta = with lib; {
+    description = "Oxidized is a network device configuration backup tool. It's a RANCID replacement!";
+    homepage    = https://github.com/ytti/oxidized;
+    license     = licenses.asl20;
+    maintainers = with maintainers; [ willibutz nicknovitski ];
+    platforms   = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/oxidized/gemset.nix b/nixpkgs/pkgs/tools/admin/oxidized/gemset.nix
new file mode 100644
index 000000000000..ff77102af12a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/oxidized/gemset.nix
@@ -0,0 +1,304 @@
+{
+  asetus = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zkr8cbp8klanqmhzz7qmimzlxh6zmsy98zb3s75af34l7znq790";
+      type = "gem";
+    };
+    version = "0.3.0";
+  };
+  backports = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17j5pf0b69bkn043wi4xd530ky53jbbnljr4bsjzlm4k8bzlknfn";
+      type = "gem";
+    };
+    version = "3.14.0";
+  };
+  charlock_holmes = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nf1l31n10yaark2rrg5qzyzcx9w80681449s3j09qmnipsl8rl5";
+      type = "gem";
+    };
+    version = "0.7.6";
+  };
+  emk-sinatra-url-for = {
+    dependencies = ["sinatra"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rd5b1lraklv0hblzdnmw2z3dragfg0qqk7wxbpn58f8y7jxzjgj";
+      type = "gem";
+    };
+    version = "0.2.1";
+  };
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j8pzj8raxbir5w5k6s7a042sb5k02pg0f8s4na1r5lan901j00p";
+      type = "gem";
+    };
+    version = "1.10.0";
+  };
+  git = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bf83icwypi3p3pd97vlqbnp3hvf31ncd440m9kh9y7x6yk74wyh";
+      type = "gem";
+    };
+    version = "1.5.0";
+  };
+  haml = {
+    dependencies = ["temple" "tilt"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1q0a9fvqh8kn6wm97fcks6qzbjd400bv8bx748w8v87m7p4klhac";
+      type = "gem";
+    };
+    version = "5.0.4";
+  };
+  htmlentities = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nkklqsn8ir8wizzlakncfv42i32wc0w9hxp00hvdlgjr7376nhj";
+      type = "gem";
+    };
+    version = "4.3.4";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sx97bm9by389rbzv8r1f43h06xcz8vwi3h5jv074gvparql7lcx";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rl0qy4inf1mp8mybfk56dfga0mvx97zwpmq5xmiwl5r770171nv";
+      type = "gem";
+    };
+    version = "1.13.1";
+  };
+  net-ssh = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "101wd2px9lady54aqmkibvy4j62zk32w0rjz4vnigyg974fsga40";
+      type = "gem";
+    };
+    version = "5.2.0";
+  };
+  net-telnet = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13qxznpwmc3hs51b76wqx2w29r158gzzh8719kv2gpi56844c8fx";
+      type = "gem";
+    };
+    version = "0.1.1";
+  };
+  oxidized = {
+    dependencies = ["asetus" "git" "net-ssh" "net-telnet" "rugged" "slop"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07hpxmdjkfpkc00ln3hhh5qkj0lyhcmgbi0jza2c8cnjyy9sc73x";
+      type = "gem";
+    };
+    version = "0.26.3";
+  };
+  oxidized-script = {
+    dependencies = ["oxidized" "slop"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15cxsyaz2mwd7jj63gfv3lzyqkvb3gz29wxfy7xyjdzkc19c7vk6";
+      type = "gem";
+    };
+    version = "0.6.0";
+  };
+  oxidized-web = {
+    dependencies = ["charlock_holmes" "emk-sinatra-url-for" "haml" "htmlentities" "json" "oxidized" "puma" "rack-test" "sass" "sinatra" "sinatra-contrib"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07qmal83h1h5dqapgirq5yrnclbm3xhcjqkj80lla3dq18jmjhqs";
+      type = "gem";
+    };
+    version = "0.13.1";
+  };
+  puma = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06qiqx1pcfwq4gi9pdrrq8r6hgh3rwl7nl51r67zpm5xmqlp0g10";
+      type = "gem";
+    };
+    version = "3.11.4";
+  };
+  rack = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g9926ln2lw12lfxm4ylq1h6nl0rafl10za3xvjzc87qvnqic87f";
+      type = "gem";
+    };
+    version = "1.6.11";
+  };
+  rack-protection = {
+    dependencies = ["rack"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0my0wlw4a5l3hs79jkx2xzv7djhajgf8d28k8ai1ddlnxxb0v7ss";
+      type = "gem";
+    };
+    version = "1.5.5";
+  };
+  rack-test = {
+    dependencies = ["rack"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0f50ljlbg38g21q242him0n12r0fz7r3rs9n6p8ppahzh7k22x11";
+      type = "gem";
+    };
+    version = "0.7.0";
+  };
+  rb-fsevent = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1lm1k7wpz69jx7jrc92w3ggczkjyjbfziq5mg62vjnxmzs383xx8";
+      type = "gem";
+    };
+    version = "0.10.3";
+  };
+  rb-inotify = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fs7hxm9g6ywv2yih83b879klhc4fs8i0p9166z795qmd77dk0a4";
+      type = "gem";
+    };
+    version = "0.10.0";
+  };
+  rugged = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yiszpz6y13vvgh3fss1l0ipp0zgsbbc8c28vynnpdyx1sy6krp6";
+      type = "gem";
+    };
+    version = "0.28.1";
+  };
+  sass = {
+    dependencies = ["sass-listen"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0p95lhs0jza5l7hqci1isflxakz83xkj97lkvxl919is0lwhv2w0";
+      type = "gem";
+    };
+    version = "3.7.4";
+  };
+  sass-listen = {
+    dependencies = ["rb-fsevent" "rb-inotify"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xw3q46cmahkgyldid5hwyiwacp590zj2vmswlll68ryvmvcp7df";
+      type = "gem";
+    };
+    version = "4.0.0";
+  };
+  sinatra = {
+    dependencies = ["rack" "rack-protection" "tilt"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0byxzl7rx3ki0xd7aiv1x8mbah7hzd8f81l65nq8857kmgzj1jqq";
+      type = "gem";
+    };
+    version = "1.4.8";
+  };
+  sinatra-contrib = {
+    dependencies = ["backports" "multi_json" "rack-protection" "rack-test" "sinatra" "tilt"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0vi3i0icbi2figiayxpvxbqpbn1syma7w4p4zw5mav1ln4c7jnfr";
+      type = "gem";
+    };
+    version = "1.4.7";
+  };
+  slop = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00w8g3j7k7kl8ri2cf1m58ckxk8rn350gp4chfscmgv6pq1spk3n";
+      type = "gem";
+    };
+    version = "3.6.0";
+  };
+  temple = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "158d7ygbwcifqnvrph219p7m78yjdjazhykv5darbkms7bxm5y09";
+      type = "gem";
+    };
+    version = "0.8.1";
+  };
+  tilt = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ca4k0clwf0rkvy7726x4nxpjxkpv67w043i39saxgldxd97zmwz";
+      type = "gem";
+    };
+    version = "2.0.9";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/admin/pebble/default.nix b/nixpkgs/pkgs/tools/admin/pebble/default.nix
new file mode 100644
index 000000000000..5aa220fd89e6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/pebble/default.nix
@@ -0,0 +1,26 @@
+{ buildGoPackage
+, fetchFromGitHub
+, lib
+}:
+
+let
+  version = "v2.2.2";
+  pname = "pebble";
+in buildGoPackage {
+  inherit pname version;
+  goPackagePath = "github.com/letsencrypt/${pname}";
+
+  src = fetchFromGitHub {
+    owner = "letsencrypt";
+    repo = pname;
+    rev = version;
+    sha256 = "10g6ivdxxp3632wk0gvmp75v9x668kchhmlczbsq8qnsc8sb8pwf";
+  };
+
+  meta = {
+    homepage = "https://github.com/letsencrypt/boulder";
+    description = "A miniature version of Boulder, Pebble is a small RFC 8555 ACME test server not suited for a production CA";
+    license = [ lib.licenses.mpl20 ];
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/procs/default.nix b/nixpkgs/pkgs/tools/admin/procs/default.nix
new file mode 100644
index 000000000000..20e9c8b3d47a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/procs/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, rustPlatform, fetchpatch
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "procs";
+  version = "0.8.16";
+
+  src = fetchFromGitHub {
+    owner = "dalance";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0l4n3gr1sc7wfa21p8yh7idaii0mnfpyqp4cg7f9l4345isy94vq";
+  };
+
+  cargoSha256 = "03c63dlzvag341n6la1s61ccri1avlprd91m11z9zzjhi9b46kcr";
+
+  buildInputs = stdenv.lib.optional stdenv.isDarwin Security;
+
+  patches = [
+    # Fix tests on darwin. Remove with the next release
+    (fetchpatch {
+      url = "https://github.com/dalance/procs/commit/bb554e247b5b339bc00fa5dd2e771b0d7cb09cd5.patch";
+      sha256 = "1szvvifa4pdbgdsmdj5f0zq6qzf1lh6wwc6ipawblfzwmg7d9wvk";
+    })
+  ];
+
+  meta = with stdenv.lib; {
+    description = "A modern replacement for ps written in Rust";
+    homepage = "https://github.com/dalance/procs";
+    license = with licenses; [ mit ];
+    maintainers = [ maintainers.dalance ];
+    platforms = with platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/pulumi/data.nix b/nixpkgs/pkgs/tools/admin/pulumi/data.nix
new file mode 100644
index 000000000000..1edc80c24e2c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/pulumi/data.nix
@@ -0,0 +1,51 @@
+# DO NOT EDIT! This file is generated automatically by update.sh
+{ }:
+{
+  version = "1.4.0";
+  pulumiPkgs = {
+    x86_64-linux = [
+      {
+        url = "https://get.pulumi.com/releases/sdk/pulumi-v1.4.0-linux-x64.tar.gz";
+        sha256 = "00ywy2ba4xha6gwd42i3fdrk1myivkd1r6ijdr2vkianmg524k6f";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-random-v0.2.0-linux-amd64.tar.gz";
+        sha256 = "1hj4gysjipd091f106a7xz02g9cail5d11rn6j08m0xphg9cf3fn";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-gcp-v1.4.1-linux-amd64.tar.gz";
+        sha256 = "0r6xpsb2riqmxwxw28lbi3xd7w4ds510gw99j1rr57h5b9bq19jj";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-kubernetes-v1.2.3-linux-amd64.tar.gz";
+        sha256 = "0m7fajy3cy1agsz787ak548khwj8rwahs1ibaswqfyyw092iyzb9";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-aws-v1.7.0-linux-amd64.tar.gz";
+        sha256 = "1qw90l7h8yn06bz2l2995nbrc3svs223dm3ys1807amj4n2jyfwb";
+      }
+    ];
+    x86_64-darwin = [
+      {
+        url = "https://get.pulumi.com/releases/sdk/pulumi-v1.4.0-darwin-x64.tar.gz";
+        sha256 = "02vqw9gn17dy3rfh0j00k9f827l42g3nl3rhlcbc8jbgx3n9c9qy";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-random-v0.2.0-darwin-amd64.tar.gz";
+        sha256 = "077j9fp8ix00rcqrq8qxk3kvz6gz6sknzb2iv3qjvkh6yh292mz3";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-gcp-v1.4.1-darwin-amd64.tar.gz";
+        sha256 = "1i2vf3bxwf8awvw183hq9bbnmznda1jpv1zqghgz2ybx4s0915nx";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-kubernetes-v1.2.3-darwin-amd64.tar.gz";
+        sha256 = "123czx1c31r5r91k2jhdgmnffypnl8w1a6h9mr2rdhwgbx8hzq40";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-aws-v1.7.0-darwin-amd64.tar.gz";
+        sha256 = "0cl0vakppxi0v8ym8b4fzhzb10nl84wd0vfik8gpfwsg7zwdzhlp";
+      }
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/pulumi/default.nix b/nixpkgs/pkgs/tools/admin/pulumi/default.nix
new file mode 100644
index 000000000000..977c1991faba
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/pulumi/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl, autoPatchelfHook }:
+
+with lib;
+
+let
+  data = import ./data.nix {};
+in stdenv.mkDerivation {
+  pname = "pulumi";
+  version = data.version;
+
+  postUnpack = ''
+    mv pulumi-* pulumi
+  '';
+
+  srcs = map (x: fetchurl x) data.pulumiPkgs.${stdenv.hostPlatform.system};
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp * $out/bin/
+  '';
+
+  buildInputs = optionals stdenv.isLinux [ autoPatchelfHook ];
+
+  meta = {
+    homepage = https://pulumi.io/;
+    description = "Pulumi is a cloud development platform that makes creating cloud programs easy and productive";
+    license = with licenses; [ asl20 ];
+    platforms = builtins.attrNames data.pulumiPkgs;
+    maintainers = with maintainers; [
+      peterromfeldhk
+      jlesquembre
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/pulumi/update.sh b/nixpkgs/pkgs/tools/admin/pulumi/update.sh
new file mode 100644
index 000000000000..7cb500ee9d32
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/pulumi/update.sh
@@ -0,0 +1,55 @@
+#!/usr/bin/env bash
+
+VERSION="1.4.0"
+
+declare -A plugins
+plugins=(
+    ["aws"]="1.7.0"
+    ["gcp"]="1.4.1"
+    ["kubernetes"]="1.2.3"
+    ["random"]="0.2.0"
+)
+
+function genMainSrc() {
+    local url="https://get.pulumi.com/releases/sdk/pulumi-v${VERSION}-$1-x64.tar.gz"
+    local sha256
+    sha256=$(nix-prefetch-url "$url")
+    echo "      {"
+    echo "        url = \"${url}\";"
+    echo "        sha256 = \"$sha256\";"
+    echo "      }"
+}
+
+function genSrcs() {
+    for plug in "${!plugins[@]}"; do
+        local version=${plugins[$plug]}
+        # url as defined here
+        # https://github.com/pulumi/pulumi/blob/06d4dde8898b2a0de2c3c7ff8e45f97495b89d82/pkg/workspace/plugins.go#L197
+        local url="https://api.pulumi.com/releases/plugins/pulumi-resource-${plug}-v${version}-$1-amd64.tar.gz"
+        local sha256
+        sha256=$(nix-prefetch-url "$url")
+        echo "      {"
+        echo "        url = \"${url}\";"
+        echo "        sha256 = \"$sha256\";"
+        echo "      }"
+    done
+}
+
+cat <<EOF
+# DO NOT EDIT! This file is generated automatically by update.sh
+{ }:
+{
+  version = "${VERSION}";
+  pulumiPkgs = {
+    x86_64-linux = [
+EOF
+genMainSrc "linux"
+genSrcs "linux"
+echo "    ];"
+
+echo "    x86_64-darwin = ["
+genMainSrc "darwin"
+genSrcs "darwin"
+echo "    ];"
+echo "  };"
+echo "}"
diff --git a/nixpkgs/pkgs/tools/admin/salt/default.nix b/nixpkgs/pkgs/tools/admin/salt/default.nix
new file mode 100644
index 000000000000..c94686c93c16
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/salt/default.nix
@@ -0,0 +1,49 @@
+{
+  stdenv, pythonPackages, openssl,
+
+  # Many Salt modules require various Python modules to be installed,
+  # passing them in this array enables Salt to find them.
+  extraInputs ? []
+}:
+
+pythonPackages.buildPythonApplication rec {
+  pname = "salt";
+  version = "2019.2.0";
+
+  src = pythonPackages.fetchPypi {
+    inherit pname version;
+    sha256 = "1kgn3lway0zwwysyzpphv05j4xgxk92dk4rv1vybr2527wmvp5an";
+  };
+
+  propagatedBuildInputs = with pythonPackages; [
+    jinja2
+    markupsafe
+    msgpack
+    pycrypto
+    pyyaml
+    pyzmq
+    requests
+    tornado_4
+  ] ++ stdenv.lib.optionals (!pythonPackages.isPy3k) [
+    futures
+  ] ++ extraInputs;
+
+  patches = [ ./fix-libcrypto-loading.patch ];
+
+  postPatch = ''
+    substituteInPlace "salt/utils/rsax931.py" \
+      --subst-var-by "libcrypto" "${openssl.out}/lib/libcrypto.so"
+  '';
+
+  # The tests fail due to socket path length limits at the very least;
+  # possibly there are more issues but I didn't leave the test suite running
+  # as is it rather long.
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    homepage = https://saltstack.com/;
+    description = "Portable, distributed, remote execution and configuration management system";
+    maintainers = with maintainers; [ aneeshusa ];
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/salt/fix-libcrypto-loading.patch b/nixpkgs/pkgs/tools/admin/salt/fix-libcrypto-loading.patch
new file mode 100644
index 000000000000..f7560b1fc56d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/salt/fix-libcrypto-loading.patch
@@ -0,0 +1,14 @@
+diff --git a/salt/utils/rsax931.py b/salt/utils/rsax931.py
+index f827cc6db8..b728595186 100644
+--- a/salt/utils/rsax931.py
++++ b/salt/utils/rsax931.py
+@@ -47,6 +47,9 @@ def _load_libcrypto():
+             lib = lib[0] if len(lib) > 0 else None
+         if lib:
+             return cdll.LoadLibrary(lib)
++        else:
++            return cdll.LoadLibrary('@libcrypto@')
++
+         raise OSError('Cannot locate OpenSSL libcrypto')
+ 
+ 
diff --git a/nixpkgs/pkgs/tools/admin/salt/pepper/default.nix b/nixpkgs/pkgs/tools/admin/salt/pepper/default.nix
new file mode 100644
index 000000000000..4bf24e3092d7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/salt/pepper/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, pythonPackages
+, salt
+}:
+
+pythonPackages.buildPythonApplication rec {
+  pname = "salt-pepper";
+  version = "0.7.5";
+  src = pythonPackages.fetchPypi {
+    inherit pname version;
+    sha256 = "1wh6yidwdk8jvjpr5g3azhqgsk24c5rlzmw6l86dmi0mpvmxm94w";
+  };
+
+  buildInputs = with pythonPackages; [ setuptools setuptools_scm salt ];
+  checkInputs = with pythonPackages; [
+    pytest mock pyzmq pytest-rerunfailures pytestcov cherrypy tornado_4
+  ];
+
+  meta = with lib; {
+    description = "A CLI front-end to a running salt-api system";
+    homepage = https://github.com/saltstack/pepper;
+    maintainers = [ maintainers.pierrer ];
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/scaleway-cli/default.nix b/nixpkgs/pkgs/tools/admin/scaleway-cli/default.nix
new file mode 100644
index 000000000000..3365d87bba4a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/scaleway-cli/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchFromGitHub, buildGoPackage }:
+
+buildGoPackage rec{
+  pname = "scaleway-cli";
+  version = "1.17";
+
+  goPackagePath = "github.com/scaleway/scaleway-cli";
+
+  src = fetchFromGitHub {
+    owner = "scaleway";
+    repo = "scaleway-cli";
+    rev = "v${version}";
+    sha256 = "0v50wk6q8537880whi6w83dia9y934v0s2xr1z52cn3mrsjghsnd";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Interact with Scaleway API from the command line";
+    homepage = https://github.com/scaleway/scaleway-cli;
+    license = licenses.mit;
+    maintainers = with maintainers; [ nickhu ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/sec/default.nix b/nixpkgs/pkgs/tools/admin/sec/default.nix
new file mode 100644
index 000000000000..f6f5923eb4ab
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/sec/default.nix
@@ -0,0 +1,32 @@
+{ fetchFromGitHub, perl, stdenv }:
+
+stdenv.mkDerivation rec {
+  name = "sec-${meta.version}";
+
+  src = fetchFromGitHub {
+    owner = "simple-evcorr";
+    repo = "sec";
+    rev = meta.version;
+    sha256 = "025cz3mr5yrdgs0i3h8v2znhvjkyh78kba1rzvl03ns2b1c49168";
+  };
+
+  buildInputs = [ perl ];
+
+  dontBuild = false;
+  doCheck = false;
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man/man1
+    cp sec $out/bin
+    cp sec.man $out/share/man/man1/sec.1
+  '';
+
+  meta = {
+    homepage = https://simple-evcorr.github.io;
+    license = stdenv.lib.licenses.gpl2;
+    description = "Simple Event Correlator";
+    maintainers = [ stdenv.lib.maintainers.tv ];
+    platforms = stdenv.lib.platforms.all;
+    version = "2.8.2";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/sewer/default.nix b/nixpkgs/pkgs/tools/admin/sewer/default.nix
new file mode 100644
index 000000000000..776ba89e48ce
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/sewer/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "sewer";
+  version = "0.7.9";
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "c083223d8aa66d4fc6801452d291a98540d1ee41557ce3e1754c62e73f7c9738";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ pyopenssl requests tldextract ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/komuw/sewer;
+    description = "ACME client";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kevincox ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/simp_le/default.nix b/nixpkgs/pkgs/tools/admin/simp_le/default.nix
new file mode 100644
index 000000000000..eaefba365450
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/simp_le/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, python3Packages, bash }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "simp_le-client";
+  version = "0.17.0";
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "0m1jynar4calaffp2zdxr5yy9vnhw2qf2hsfxwzfwf8fqb5h7bjb";
+  };
+
+  postPatch = ''
+    # drop upper bound of idna requirement
+    sed -ri "s/'(idna)<[^']+'/'\1'/" setup.py
+    substituteInPlace simp_le.py \
+      --replace "/bin/sh" "${bash}/bin/sh"
+  '';
+
+  checkPhase = ''
+    $out/bin/simp_le --test
+  '';
+
+  propagatedBuildInputs = with python3Packages; [ acme setuptools_scm josepy idna ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/zenhack/simp_le;
+    description = "Simple Let's Encrypt client";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ gebner makefu ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/ssl-cert-check/default.nix b/nixpkgs/pkgs/tools/admin/ssl-cert-check/default.nix
new file mode 100644
index 000000000000..e6a83c397c57
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/ssl-cert-check/default.nix
@@ -0,0 +1,57 @@
+{ stdenv
+, fetchFromGitHub
+, makeWrapper
+, openssl
+, which
+, gnugrep
+, gnused
+, gawk
+, mktemp
+, coreutils
+, findutils
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ssl-cert-check";
+  version = "3.31";
+
+  src = fetchFromGitHub {
+    owner = "Matty9191";
+    repo = pname;
+    rev = "698c1996d05152cfaf2a1a3df4cc70482411fac8";
+    sha256 = "0jvi9phs0ngfwrj9zixb03v9byavbwxx8xkp0h5m98qppn1kvl3n";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = [
+    openssl
+    which
+    gnugrep
+    mktemp
+    gawk
+    gnused
+    coreutils
+    findutils
+  ];
+
+  prePatch = ''
+    substituteInPlace $pname --replace PATH= NOT_PATH=
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp $pname $out/bin/$pname
+    wrapProgram $out/bin/$pname \
+      --set PATH "${stdenv.lib.makeBinPath buildInputs}"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "a Bourne shell script that can be used to report on expiring SSL certificates";
+    homepage = https://github.com/Matty9191/ssl-cert-check;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.ryantm ];
+    platforms = platforms.linux;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/admin/swiftclient/default.nix b/nixpkgs/pkgs/tools/admin/swiftclient/default.nix
new file mode 100644
index 000000000000..788a64f928a4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/swiftclient/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildPythonApplication, fetchPypi, requests, six, pbr, setuptools }:
+
+buildPythonApplication rec {
+  pname = "python-swiftclient";
+  version = "3.6.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0sv6z72zdwzwdjng0djk3l2maryn9pz3khf69yq5ig2ycz8hh0qv";
+  };
+
+  propagatedBuildInputs = [ requests six pbr setuptools ];
+
+  # For the tests the following requirements are needed:
+  # https://github.com/openstack/python-swiftclient/blob/master/test-requirements.txt
+  #
+  # The ones missing in nixpkgs (currently) are:
+  # - hacking
+  # - keystoneauth
+  # - oslosphinx
+  # - stestr
+  # - reno
+  # - openstackdocstheme
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = https://github.com/openstack/python-swiftclient;
+    description = "Python bindings to the OpenStack Object Storage API";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ c0deaddict ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/tigervnc/default.nix b/nixpkgs/pkgs/tools/admin/tigervnc/default.nix
new file mode 100644
index 000000000000..1c2243d04f11
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/tigervnc/default.nix
@@ -0,0 +1,105 @@
+{ stdenv, fetchFromGitHub
+, xorg, xkeyboard_config, zlib
+, libjpeg_turbo, pixman, fltk
+, fontDirectories
+, cmake, gettext, libtool
+, libGLU
+, gnutls, pam, nettle
+, xterm, openssh, perl
+, makeWrapper}:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  version = "1.10.1";
+  pname = "tigervnc";
+
+  src = fetchFromGitHub {
+    owner = "TigerVNC";
+    repo = "tigervnc";
+    rev = "v1.10.1";
+    sha256 = "001n189d2f3psn7nxgl8188ml6f7jbk26cxn2835y3mnlk5lmhgr";
+  };
+
+  inherit fontDirectories;
+
+  postPatch = ''
+    sed -i -e '/^\$cmd \.= " -pn";/a$cmd .= " -xkbdir ${xkeyboard_config}/etc/X11/xkb";' unix/vncserver
+    fontPath=
+    for i in $fontDirectories; do
+      for j in $(find $i -name fonts.dir); do
+        addToSearchPathWithCustomDelimiter "," fontPath $(dirname $j)
+      done
+    done
+    sed -i -e '/^\$cmd \.= " -pn";/a$cmd .= " -fp '"$fontPath"'";' unix/vncserver
+    substituteInPlace vncviewer/vncviewer.cxx \
+       --replace '"/usr/bin/ssh' '"${openssh}/bin/ssh'
+  '';
+
+  dontUseCmakeBuildDir = true;
+
+  postBuild = ''
+    export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -Wno-error=int-to-pointer-cast -Wno-error=pointer-to-int-cast"
+    export CXXFLAGS="$CXXFLAGS -fpermissive"
+    # Build Xvnc
+    tar xf ${xorg.xorgserver.src}
+    cp -R xorg*/* unix/xserver
+    pushd unix/xserver
+    version=$(echo ${xorg.xorgserver.name} | sed 's/.*-\([0-9]\+\).\([0-9]\+\).*/\1\2/g')
+    patch -p1 < ${src}/unix/xserver$version.patch
+    autoreconf -vfi
+    ./configure $configureFlags  --disable-devel-docs --disable-docs \
+        --disable-xorg --disable-xnest --disable-xvfb --disable-dmx \
+        --disable-xwin --disable-xephyr --disable-kdrive --with-pic \
+        --disable-xorgcfg --disable-xprint --disable-static \
+        --enable-composite --disable-xtrap --enable-xcsecurity \
+        --disable-{a,c,m}fb \
+        --disable-xwayland \
+        --disable-config-dbus --disable-config-udev --disable-config-hal \
+        --disable-xevie \
+        --disable-dri --disable-dri2 --disable-dri3 --enable-glx \
+        --enable-install-libxf86config \
+        --prefix="$out" --disable-unit-tests \
+        --with-xkb-path=${xkeyboard_config}/share/X11/xkb \
+        --with-xkb-bin-directory=${xorg.xkbcomp}/bin \
+        --with-xkb-output=$out/share/X11/xkb/compiled
+    make TIGERVNC_SRC=$src TIGERVNC_BUILDDIR=`pwd`/../.. -j$NIX_BUILD_CORES -l$NIX_BUILD_CORES
+    popd
+  '';
+
+  postInstall = ''
+    pushd unix/xserver/hw/vnc
+    make TIGERVNC_SRC=$src TIGERVNC_BUILDDIR=`pwd`/../../../.. install
+    popd
+    rm -f $out/lib/xorg/protocol.txt
+
+    wrapProgram $out/bin/vncserver \
+      --prefix PATH : ${stdenv.lib.makeBinPath (with xorg; [ xterm twm xsetroot ]) }
+  '';
+
+  buildInputs = with xorg; [
+    libjpeg_turbo fltk pixman
+    gnutls pam nettle perl
+    xorgproto
+    utilmacros libXtst libXext libX11 libXext libICE libXi libSM libXft
+    libxkbfile libXfont2 libpciaccess
+    libGLU
+  ] ++ xorg.xorgserver.buildInputs;
+
+  nativeBuildInputs = with xorg; [ cmake zlib gettext libtool utilmacros fontutil makeWrapper ]
+    ++ xorg.xorgserver.nativeBuildInputs;
+
+  propagatedBuildInputs = xorg.xorgserver.propagatedBuildInputs;
+
+  enableParallelBuilding = true;
+
+  meta = {
+    homepage = "https://tigervnc.org/";
+    license = stdenv.lib.licenses.gpl2Plus;
+    description = "Fork of tightVNC, made in cooperation with VirtualGL";
+    maintainers = with stdenv.lib.maintainers; [viric];
+    platforms = with stdenv.lib.platforms; linux;
+    # Prevent a store collision.
+    priority = 4;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/tightvnc/1.3.10-CVE-2019-15678.patch b/nixpkgs/pkgs/tools/admin/tightvnc/1.3.10-CVE-2019-15678.patch
new file mode 100644
index 000000000000..cd65d2fb5dd9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/tightvnc/1.3.10-CVE-2019-15678.patch
@@ -0,0 +1,18 @@
+Adapted from https://github.com/LibVNC/libvncserver/commit/c5ba3fee85a7ecbbca1df5ffd46d32b92757bc2a
+diff --git a/vncviewer/rfbproto.c b/vncviewer/rfbproto.c
+index 04b0230..47a6863 100644
+--- a/vncviewer/rfbproto.c
++++ b/vncviewer/rfbproto.c
+@@ -1217,6 +1217,12 @@ HandleRFBServerMessage()
+     if (serverCutText)
+       free(serverCutText);
+ 
++    if (msg.sct.length > 1<<20) {
++      fprintf(stderr,"Ignoring too big cut text length sent by server: %u B > 1 MB\n",
++              (unsigned int)msg.sct.length);
++      return False;
++    }
++
+     serverCutText = malloc(msg.sct.length+1);
+ 
+     if (!ReadFromRFBServer(serverCutText, msg.sct.length))
diff --git a/nixpkgs/pkgs/tools/admin/tightvnc/1.3.10-CVE-2019-15679.patch b/nixpkgs/pkgs/tools/admin/tightvnc/1.3.10-CVE-2019-15679.patch
new file mode 100644
index 000000000000..6d7b3e89e0c4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/tightvnc/1.3.10-CVE-2019-15679.patch
@@ -0,0 +1,19 @@
+Adapted from https://github.com/LibVNC/libvncserver/commit/c2c4b81e6cb3b485fb1ec7ba9e7defeb889f6ba7
+diff --git a/vncviewer/rfbproto.c b/vncviewer/rfbproto.c
+index 04b0230..bd11b54 100644
+--- a/vncviewer/rfbproto.c
++++ b/vncviewer/rfbproto.c
+@@ -303,7 +303,12 @@ InitialiseRFBConnection(void)
+   si.format.blueMax = Swap16IfLE(si.format.blueMax);
+   si.nameLength = Swap32IfLE(si.nameLength);
+ 
+-  /* FIXME: Check arguments to malloc() calls. */
++  if (si.nameLength > 1<<20) {
++    fprintf(stderr, "Too big desktop name length sent by server: %lu B > 1 MB\n",
++            (unsigned long)si.nameLength);
++    return False;
++  }
++
+   desktopName = malloc(si.nameLength + 1);
+   if (!desktopName) {
+     fprintf(stderr, "Error allocating memory for desktop name, %lu bytes\n",
diff --git a/nixpkgs/pkgs/tools/admin/tightvnc/1.3.10-CVE-2019-15680.patch b/nixpkgs/pkgs/tools/admin/tightvnc/1.3.10-CVE-2019-15680.patch
new file mode 100644
index 000000000000..7426a2b58b10
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/tightvnc/1.3.10-CVE-2019-15680.patch
@@ -0,0 +1,16 @@
+diff --git a/vncviewer/zlib.c b/vncviewer/zlib.c
+index 80c4eee..76998d8 100644
+--- a/vncviewer/zlib.c
++++ b/vncviewer/zlib.c
+@@ -55,6 +55,11 @@ HandleZlibBPP (int rx, int ry, int rw, int rh)
+     raw_buffer_size = (( rw * rh ) * ( BPP / 8 ));
+     raw_buffer = (char*) malloc( raw_buffer_size );
+ 
++    if ( raw_buffer == NULL ) {
++      fprintf(stderr,
++              "couldn't allocate raw_buffer in HandleZlibBPP");
++      return False;
++    }
+   }
+ 
+   if (!ReadFromRFBServer((char *)&hdr, sz_rfbZlibHeader))
diff --git a/nixpkgs/pkgs/tools/admin/tightvnc/1.3.10-CVE-2019-8287.patch b/nixpkgs/pkgs/tools/admin/tightvnc/1.3.10-CVE-2019-8287.patch
new file mode 100644
index 000000000000..5bfd1b9ea87f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/tightvnc/1.3.10-CVE-2019-8287.patch
@@ -0,0 +1,14 @@
+Adapted from https://github.com/LibVNC/libvncserver/commit/7b1ef0ffc4815cab9a96c7278394152bdc89dc4d
+diff --git a/vncviewer/corre.c b/vncviewer/corre.c
+index c846a10..a4c272d 100644
+--- a/vncviewer/corre.c
++++ b/vncviewer/corre.c
+@@ -56,7 +56,7 @@ HandleCoRREBPP (int rx, int ry, int rw, int rh)
+     XChangeGC(dpy, gc, GCForeground, &gcv);
+     XFillRectangle(dpy, desktopWin, gc, rx, ry, rw, rh);
+ 
+-    if (!ReadFromRFBServer(buffer, hdr.nSubrects * (4 + (BPP / 8))))
++    if (hdr.nSubrects > BUFFER_SIZE / (4 + (BPP / 8)) || !ReadFromRFBServer(buffer, hdr.nSubrects * (4 + (BPP / 8))))
+ 	return False;
+ 
+     ptr = (CARD8 *)buffer;
diff --git a/nixpkgs/pkgs/tools/admin/tightvnc/default.nix b/nixpkgs/pkgs/tools/admin/tightvnc/default.nix
new file mode 100644
index 000000000000..1a65c31102e9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/tightvnc/default.nix
@@ -0,0 +1,85 @@
+{ stdenv, fetchurl, xlibsWrapper, zlib, libjpeg, imake, gccmakedep, libXmu
+, libXaw, libXpm, libXp , perl, xauth, fontDirectories, openssh }:
+
+stdenv.mkDerivation {
+  name = "tightvnc-1.3.10";
+
+  src = fetchurl {
+    url = mirror://sourceforge/vnc-tight/tightvnc-1.3.10_unixsrc.tar.bz2;
+    sha256 = "f48c70fea08d03744ae18df6b1499976362f16934eda3275cead87baad585c0d";
+  };
+
+  patches = [
+    ./1.3.10-CVE-2019-15678.patch
+    ./1.3.10-CVE-2019-15679.patch
+    ./1.3.10-CVE-2019-15680.patch
+    ./1.3.10-CVE-2019-8287.patch
+  ];
+
+  # for the builder script
+  inherit fontDirectories;
+
+  hardeningDisable = [ "format" ];
+
+  buildInputs = [ xlibsWrapper zlib libjpeg imake gccmakedep libXmu libXaw
+                  libXpm libXp xauth openssh ];
+
+  postPatch = ''
+    fontPath=
+    for i in $fontDirectories; do
+      for j in $(find $i -name fonts.dir); do
+        addToSearchPathWithCustomDelimiter "," fontPath $(dirname $j)
+      done
+    done
+
+    sed -i "s@/usr/bin/ssh@${openssh}/bin/ssh@g" vncviewer/vncviewer.h
+
+    sed -e 's@/usr/bin/perl@${perl}/bin/perl@' \
+        -e 's@unix/:7100@'$fontPath'@' \
+        -i vncserver
+
+    sed -e 's@.* CppCmd .*@#define CppCmd		cpp@' -i Xvnc/config/cf/linux.cf
+    sed -e 's@.* CppCmd .*@#define CppCmd		cpp@' -i Xvnc/config/cf/Imake.tmpl
+    sed -i \
+        -e 's@"uname","xauth","Xvnc","vncpasswd"@"uname","Xvnc","vncpasswd"@g' \
+        -e "s@\<xauth\>@${xauth}/bin/xauth@g" \
+        vncserver
+  '';
+
+  preInstall = ''
+    mkdir -p $out/bin
+    mkdir -p $out/share/man/man1
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    ./vncinstall $out/bin $out/share/man
+
+    runHook postInstall
+  '';
+
+  postInstall = ''
+    # fix HTTP client:
+    mkdir -p $out/share/tightvnc
+    cp -r classes $out/share/tightvnc
+    substituteInPlace $out/bin/vncserver \
+      --replace /usr/local/vnc/classes $out/share/tightvnc/classes
+  '';
+
+  meta = {
+    license = stdenv.lib.licenses.gpl2Plus;
+    homepage = http://vnc-tight.sourceforge.net/;
+    description = "Improved version of VNC";
+
+    longDescription = ''
+      TightVNC is an improved version of VNC, the great free
+      remote-desktop tool. The improvements include bandwidth-friendly
+      "tight" encoding, file transfers in the Windows version, enhanced
+      GUI, many bugfixes, and more.
+    '';
+
+    maintainers = [];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/virtscreen/default.nix b/nixpkgs/pkgs/tools/admin/virtscreen/default.nix
new file mode 100644
index 000000000000..73a81fcff875
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/virtscreen/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchFromGitHub, python3Packages, x11vnc, xrandr, libGL }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "virtscreen";
+  version = "0.3.1";
+
+  disabled = python3Packages.pythonOlder "3.6";
+
+  # No tests
+  doCheck = false;
+
+  src = fetchFromGitHub {
+    owner = "kbumsik";
+    repo = pname;
+    rev = version;
+    sha256 = "005qach6phz8w17k8kqmyd647c6jkfybczybxq0yxi5ik0s91a08";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    netifaces
+    pyqt5
+    quamash
+    x11vnc
+    xrandr
+  ];
+
+  postPatch = let
+    ext = stdenv.hostPlatform.extensions.sharedLibrary; in ''
+    substituteInPlace virtscreen/__main__.py \
+      --replace "'GL'" "'${libGL}/lib/libGL${ext}'" \
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Make your iPad/tablet/computer as a secondary monitor on Linux";
+    homepage = https://github.com/kbumsik/VirtScreen;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ borisbabic ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/admin/vncdo/default.nix b/nixpkgs/pkgs/tools/admin/vncdo/default.nix
new file mode 100644
index 000000000000..3dd7a45aa2b7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/vncdo/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchFromGitHub
+, python2Packages
+}:
+python2Packages.buildPythonPackage {
+  pname = "vncdo";
+  version = "0.11.2";
+
+  src = fetchFromGitHub {
+    owner = "sibson";
+    repo = "vncdotool";
+    rev = "5c03a82dcb5a3bd9e8f741f8a8d0c1ce082f2834";
+    sha256 = "0k03b09ipsz8vp362x7sx7z68mxgqw9qzvkii2f8j9vx2y79rjsh";
+  };
+
+  propagatedBuildInputs = with python2Packages; [
+    pillow
+    twisted
+    pexpect
+    nose
+    ptyprocess
+  ];
+
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/sibson/vncdotool;
+    description = "A command line VNC client and python library";
+    license = licenses.mit;
+    maintainers = with maintainers; [ elitak ];
+    platforms = with platforms; linux ++ darwin;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/archivers/afio/0001-makefile-fix-installation.patch b/nixpkgs/pkgs/tools/archivers/afio/0001-makefile-fix-installation.patch
new file mode 100644
index 000000000000..d52995281347
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/afio/0001-makefile-fix-installation.patch
@@ -0,0 +1,45 @@
+From 428c6e0eb604b63a67fda6af445c10c8ae3c1826 Mon Sep 17 00:00:00 2001
+From: Philipp Gesang <phg@phi-gamma.net>
+Date: Sun, 27 Jan 2019 21:37:13 +0100
+Subject: [PATCH] makefile: fix installation
+
+- comment hard-coded $(CC)
+- avoid full paths during install
+- set proper permissions
+---
+ Makefile | 11 ++++++++---
+ 1 file changed, 8 insertions(+), 3 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 9268c6f..0797579 100644
+--- a/Makefile
++++ b/Makefile
+@@ -76,7 +76,7 @@ MW=-Wformat -Werror=format-security -Wall
+ 
+ CFLAGS1 = -Wall -Wstrict-prototypes -s -O2 -fomit-frame-pointer -Wno-unused-result $(LARGEFILEFLAGS) $(MW)
+ 
+-CC=gcc
++#CC=gcc
+ 
+ # also using contents of usin CPPFLAGS, CFLAGS, LDFLAGS out of environment
+ # variables, if they exist
+@@ -94,9 +94,14 @@ clean:
+ 	rm -f regtest/statsize regtest/statsize64
+ 	cd regtest; /bin/sh regtest.clean
+ 
++ifndef DESTDIR
++install:
++	$(error Please specify install prefix as $$DESTDIR)
++else
+ install: afio
+-	cp afio /usr/local/bin
+-	cp afio.1 /usr/share/man/man1
++	install -Dm755 afio $(DESTDIR)/bin/afio
++	install -Dm644 afio.1 $(DESTDIR)/share/man/man1/afio.1
++endif
+ 
+ # generate default list of -E extensions from manpage
+ # note: on sun, I had to change awk command below to nawk or gawk
+-- 
+2.18.1
+
diff --git a/nixpkgs/pkgs/tools/archivers/afio/default.nix b/nixpkgs/pkgs/tools/archivers/afio/default.nix
new file mode 100644
index 000000000000..8d1e28fed296
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/afio/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl } :
+
+stdenv.mkDerivation rec {
+  version = "2.5.2";
+  pname = "afio";
+
+  src = fetchurl {
+    url = "http://members.chello.nl/~k.holtman/${pname}-${version}.tgz";
+    sha256 = "1fa29wlqv76hzf8bxp1qpza1r23pm2f3m7rcf0jpwm6z150s2k66";
+  };
+
+  /*
+   * A patch to simplify the installation and for removing the
+   * hard coded dependency on GCC.
+   */
+  patches = [ ./0001-makefile-fix-installation.patch ];
+
+  installFlags = [ "DESTDIR=$(out)" ];
+
+  meta = {
+    homepage = http://members.chello.nl/~k.holtman/afio.html;
+    description = "Fault tolerant cpio archiver targeting backups";
+    platforms = stdenv.lib.platforms.all;
+    /*
+     * Licensing is complicated due to the age of the code base, but
+     * generally free. See the file ``afio_license_issues_v5.txt`` for
+     * a comprehensive discussion.
+     */
+    license = stdenv.lib.licenses.free;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/atool/default.nix b/nixpkgs/pkgs/tools/archivers/atool/default.nix
new file mode 100644
index 000000000000..64a606a4cb50
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/atool/default.nix
@@ -0,0 +1,19 @@
+{stdenv, fetchurl, perl, bash}:
+
+stdenv.mkDerivation {
+  name = "atool-0.39.0";
+  src = fetchurl {
+    url = mirror://savannah/atool/atool-0.39.0.tar.gz;
+    sha256 = "aaf60095884abb872e25f8e919a8a63d0dabaeca46faeba87d12812d6efc703b";
+  };
+
+  buildInputs = [ perl ];
+  configureScript = "${bash}/bin/bash configure";
+
+  meta = {
+    homepage = https://www.nongnu.org/atool;
+    description = "Archive command line helper";
+    platforms = stdenv.lib.platforms.unix;
+    license = stdenv.lib.licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/cabextract/default.nix b/nixpkgs/pkgs/tools/archivers/cabextract/default.nix
new file mode 100644
index 000000000000..d8a874d0b2e9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/cabextract/default.nix
@@ -0,0 +1,18 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "cabextract-1.9.1";
+
+  src = fetchurl {
+    url = "https://www.cabextract.org.uk/${name}.tar.gz";
+    sha256 = "19qwhl2r8ip95q4vxzxg2kp4p125hjmc9762sns1dwwf7ikm7hmg";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://www.cabextract.org.uk/;
+    description = "Free Software for extracting Microsoft cabinet files";
+    platforms = platforms.all;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/cpio/default.nix b/nixpkgs/pkgs/tools/archivers/cpio/default.nix
new file mode 100644
index 000000000000..3f6b3ba4598c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/cpio/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl }:
+
+let
+  version = "2.13";
+  name = "cpio-${version}";
+in stdenv.mkDerivation {
+  inherit name;
+
+  src = fetchurl {
+    url = "mirror://gnu/cpio/${name}.tar.bz2";
+    sha256 = "0vbgnhkawdllgnkdn6zn1f56fczwk0518krakz2qbwhxmv2vvdga";
+  };
+
+  preConfigure = if stdenv.isCygwin then ''
+    sed -i gnu/fpending.h -e 's,include <stdio_ext.h>,,'
+  '' else null;
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    homepage = https://www.gnu.org/software/cpio/;
+    description = "A program to create or extract from cpio archives";
+    license = licenses.gpl3;
+    platforms = platforms.all;
+    priority = 6; # resolves collision with gnutar's "libexec/rmt"
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/cromfs/default.nix b/nixpkgs/pkgs/tools/archivers/cromfs/default.nix
new file mode 100644
index 000000000000..57a8a8e97380
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/cromfs/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl, pkgconfig, fuse, perl }:
+
+stdenv.mkDerivation rec {
+  name = "cromfs-1.5.10.2";
+
+  src = fetchurl {
+    url = "https://bisqwit.iki.fi/src/arch/${name}.tar.bz2";
+    sha256 = "0xy2x1ws1qqfp7hfj6yzm80zhrxzmhn0w2yns77im1lmd2h18817";
+  };
+
+  postPatch = "patchShebangs configure";
+
+  installPhase = ''
+    install -d $out/bin
+    install cromfs-driver $out/bin
+    install util/cvcromfs $out/bin
+    install util/mkcromfs $out/bin
+    install util/unmkcromfs $out/bin
+  '';
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ fuse perl ];
+
+  meta = with stdenv.lib; {
+    description = "FUSE Compressed ROM filesystem with lzma";
+    homepage = https://bisqwit.iki.fi/source/cromfs.html;
+    license = licenses.gpl3;
+    maintainers = [ maintainers.viric ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/ctrtool/default.nix b/nixpkgs/pkgs/tools/archivers/ctrtool/default.nix
new file mode 100644
index 000000000000..97abeadffc09
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/ctrtool/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "ctrtool";
+  version = "0.16";
+
+  src = fetchFromGitHub {
+    owner  = "jakcron";
+    repo   = "Project_CTR";
+    rev    = "v${version}";
+    sha256 = "1n3j3fd1bqd39v5bdl9mhq4qdrcl1k4ib1yzl3qfckaz3y8bkrap";
+  };
+
+  sourceRoot = "source/ctrtool";
+
+  enableParallelBuilding = true;
+
+  installPhase = "
+    mkdir $out/bin -p
+    cp ctrtool $out/bin/ctrtool
+  ";
+
+  meta = with stdenv.lib; {
+    license = licenses.mit;
+    description = "A tool to extract data from a 3ds rom";
+    platforms = platforms.linux;
+    maintainers = [ maintainers.marius851000 ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/archivers/fsarchiver/default.nix b/nixpkgs/pkgs/tools/archivers/fsarchiver/default.nix
new file mode 100644
index 000000000000..3f958f7f958d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/fsarchiver/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig
+, zlib, bzip2, lzma, lzo, lz4, zstd, xz
+, libgcrypt, e2fsprogs, utillinux, libgpgerror }:
+
+let
+  version = "0.8.5";
+
+in stdenv.mkDerivation {
+  pname = "fsarchiver";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "fdupoux";
+    repo = "fsarchiver";
+    rev = version;
+    sha256 = "1rvwq5v3rl14bqxjm1ibfapyicf0sa44nw7451v10kx39lp56ylp";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook pkgconfig
+  ];
+
+  buildInputs = [
+    zlib bzip2 lzma lzo lz4 zstd xz
+    libgcrypt e2fsprogs utillinux libgpgerror
+  ];
+
+  meta = with stdenv.lib; {
+    description = "File system archiver for linux";
+    longDescription = ''
+      FSArchiver is a system tool that allows you to save the contents of a
+      file-system to a compressed archive file. The file-system can be restored
+      on a partition which has a different size and it can be restored on a
+      different file-system. Unlike tar/dar, FSArchiver also creates the
+      file-system when it extracts the data to partitions. Everything is
+      checksummed in the archive in order to protect the data. If the archive is
+      corrupt, you just loose the current file, not the whole archive.
+    '';
+    homepage = http://www.fsarchiver.org/;
+    license = licenses.lgpl2;
+    maintainers = [ maintainers.etu ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/gnutar/default.nix b/nixpkgs/pkgs/tools/archivers/gnutar/default.nix
new file mode 100644
index 000000000000..caf507670f4f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/gnutar/default.nix
@@ -0,0 +1,69 @@
+{ stdenv, fetchurl, autoreconfHook, acl }:
+
+stdenv.mkDerivation rec {
+  pname = "gnutar";
+  version = "1.32";
+
+  src = fetchurl {
+    url = "mirror://gnu/tar/tar-${version}.tar.xz";
+    sha256 = "1n7xy657ii0sa42zx6944v2m4v9qrh6sqgmw17l3nch3y43sxlyh";
+  };
+
+  # avoid retaining reference to CF during stdenv bootstrap
+  configureFlags = stdenv.lib.optionals stdenv.isDarwin [
+    "gt_cv_func_CFPreferencesCopyAppValue=no"
+    "gt_cv_func_CFLocaleCopyCurrent=no"
+    "gt_cv_func_CFLocaleCopyPreferredLanguages=no"
+  ];
+
+  # gnutar tries to call into gettext between `fork` and `exec`,
+  # which is not safe on darwin.
+  # see http://article.gmane.org/gmane.os.macosx.fink.devel/21882
+  postPatch = stdenv.lib.optionalString stdenv.isDarwin ''
+    substituteInPlace src/system.c --replace '_(' 'N_('
+  '';
+
+  outputs = [ "out" "info" ];
+
+  buildInputs = [ ]
+    ++ stdenv.lib.optional stdenv.isLinux acl
+    ++ stdenv.lib.optional stdenv.isDarwin autoreconfHook;
+
+  # May have some issues with root compilation because the bootstrap tool
+  # cannot be used as a login shell for now.
+  FORCE_UNSAFE_CONFIGURE = stdenv.lib.optionalString (stdenv.hostPlatform.system == "armv7l-linux" || stdenv.isSunOS) "1";
+
+  preConfigure = if stdenv.isCygwin then ''
+    sed -i gnu/fpending.h -e 's,include <stdio_ext.h>,,'
+  '' else null;
+
+  doCheck = false; # fails
+  doInstallCheck = false; # fails
+
+  meta = {
+    homepage = https://www.gnu.org/software/tar/;
+    description = "GNU implementation of the `tar' archiver";
+
+    longDescription = ''
+      The Tar program provides the ability to create tar archives, as
+      well as various other kinds of manipulation.  For example, you
+      can use Tar on previously created archives to extract files, to
+      store additional files, or to update or list files which were
+      already stored.
+
+      Initially, tar archives were used to store files conveniently on
+      magnetic tape.  The name "Tar" comes from this use; it stands
+      for tape archiver.  Despite the utility's name, Tar can direct
+      its output to available devices, files, or other programs (using
+      pipes), it can even access remote devices or files (as
+      archives).
+    '';
+
+    license = stdenv.lib.licenses.gpl3Plus;
+
+    maintainers = [ ];
+    platforms = stdenv.lib.platforms.all;
+
+    priority = 10;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/innoextract/default.nix b/nixpkgs/pkgs/tools/archivers/innoextract/default.nix
new file mode 100644
index 000000000000..6a8c8c712747
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/innoextract/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, cmake, makeWrapper, python
+, boost, lzma
+, withGog ? false, unar ? null }:
+
+stdenv.mkDerivation rec {
+  name = "innoextract-1.8";
+
+  src = fetchurl {
+    url = "https://constexpr.org/innoextract/files/${name}.tar.gz";
+    sha256 = "0saj50n8ds85shygy4mq1h6s99510r9wgjjdll4dmvhra4lzcy2y";
+  };
+
+  buildInputs = [ python lzma boost ];
+
+  nativeBuildInputs = [ cmake makeWrapper ];
+
+  enableParallelBuilding = true;
+
+  # we need unar to for multi-archive extraction
+  postFixup = stdenv.lib.optionalString withGog ''
+    wrapProgram $out/bin/innoextract \
+      --prefix PATH : ${stdenv.lib.makeBinPath [ unar ]}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A tool to unpack installers created by Inno Setup";
+    homepage = https://constexpr.org/innoextract/;
+    license = licenses.zlib;
+    maintainers = with maintainers; [ abbradar ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/ndstool/default.nix b/nixpkgs/pkgs/tools/archivers/ndstool/default.nix
new file mode 100644
index 000000000000..7af30e313f45
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/ndstool/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchFromGitHub, autoconf, automake }:
+
+stdenv.mkDerivation rec {
+  pname = "ndstool";
+  version = "2.1.2";
+
+  src = fetchFromGitHub {
+    owner = "devkitPro";
+    repo = "ndstool";
+    rev = "v${version}";
+    sha256 = "0isnm0is5k6dgi2n2c3mysyr5hpwikp5g0s3ix7ms928z04l8ccm";
+  };
+
+  nativeBuildInputs = [ autoconf automake ];
+
+  preConfigure = "./autogen.sh";
+
+  meta = {
+    homepage = https://github.com/devkitPro/ndstool;
+    description = "A tool to unpack and repack nds rom";
+    maintainers = [ stdenv.lib.maintainers.marius851000 ];
+    license = stdenv.lib.licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/p7zip/12-CVE-2016-9296.patch b/nixpkgs/pkgs/tools/archivers/p7zip/12-CVE-2016-9296.patch
new file mode 100644
index 000000000000..42245c92c0aa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/p7zip/12-CVE-2016-9296.patch
@@ -0,0 +1,23 @@
+From: Robert Luberda <robert@debian.org>
+Date: Sat, 19 Nov 2016 08:48:08 +0100
+Subject: Fix nullptr dereference (CVE-2016-9296)
+
+Patch taken from https://sourceforge.net/p/p7zip/bugs/185/
+---
+ CPP/7zip/Archive/7z/7zIn.cpp | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/CPP/7zip/Archive/7z/7zIn.cpp b/CPP/7zip/Archive/7z/7zIn.cpp
+index b0c6b98..7c6dde2 100644
+--- a/CPP/7zip/Archive/7z/7zIn.cpp
++++ b/CPP/7zip/Archive/7z/7zIn.cpp
+@@ -1097,7 +1097,8 @@ HRESULT CInArchive::ReadAndDecodePackedStreams(
+       if (CrcCalc(data, unpackSize) != folders.FolderCRCs.Vals[i])
+         ThrowIncorrect();
+   }
+-  HeadersSize += folders.PackPositions[folders.NumPackStreams];
++  if (folders.PackPositions)
++      HeadersSize += folders.PackPositions[folders.NumPackStreams];
+   return S_OK;
+ }
+ 
diff --git a/nixpkgs/pkgs/tools/archivers/p7zip/13-CVE-2017-17969.patch b/nixpkgs/pkgs/tools/archivers/p7zip/13-CVE-2017-17969.patch
new file mode 100644
index 000000000000..a9787c4a9088
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/p7zip/13-CVE-2017-17969.patch
@@ -0,0 +1,35 @@
+From: =?utf-8?q?Antoine_Beaupr=C3=A9?= <anarcat@debian.org>
+Date: Fri, 2 Feb 2018 11:11:41 +0100
+Subject: Heap-based buffer overflow in 7zip/Compress/ShrinkDecoder.cpp
+
+Origin: vendor, https://sourceforge.net/p/p7zip/bugs/_discuss/thread/0920f369/27d7/attachment/CVE-2017-17969.patch
+Forwarded: https://sourceforge.net/p/p7zip/bugs/_discuss/thread/0920f369/#27d7
+Bug: https://sourceforge.net/p/p7zip/bugs/204/
+Bug-Debian: https://bugs.debian.org/888297
+Bug-Debian-Security: https://security-tracker.debian.org/tracker/CVE-2017-17969
+Reviewed-by: Salvatore Bonaccorso <carnil@debian.org>
+Last-Update: 2018-02-01
+Applied-Upstream: 18.00-beta
+---
+ CPP/7zip/Compress/ShrinkDecoder.cpp | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/CPP/7zip/Compress/ShrinkDecoder.cpp b/CPP/7zip/Compress/ShrinkDecoder.cpp
+index 80b7e67..ca37764 100644
+--- a/CPP/7zip/Compress/ShrinkDecoder.cpp
++++ b/CPP/7zip/Compress/ShrinkDecoder.cpp
+@@ -121,8 +121,13 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *
+     {
+       _stack[i++] = _suffixes[cur];
+       cur = _parents[cur];
++      if (cur >= kNumItems || i >= kNumItems)
++        break;
+     }
+-    
++
++    if (cur >= kNumItems || i >= kNumItems)
++      break;
++
+     _stack[i++] = (Byte)cur;
+     lastChar2 = (Byte)cur;
+ 
diff --git a/nixpkgs/pkgs/tools/archivers/p7zip/default.nix b/nixpkgs/pkgs/tools/archivers/p7zip/default.nix
new file mode 100644
index 000000000000..465bc474a9e5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/p7zip/default.nix
@@ -0,0 +1,50 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "p7zip";
+  version = "16.02";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/p7zip/p7zip_${version}_src_all.tar.bz2";
+    sha256 = "5eb20ac0e2944f6cb9c2d51dd6c4518941c185347d4089ea89087ffdd6e2341f";
+  };
+
+  patches = [
+    ./12-CVE-2016-9296.patch
+    ./13-CVE-2017-17969.patch
+  ];
+
+  # Default makefile is full of impurities on Darwin. The patch doesn't hurt Linux so I'm leaving it unconditional
+  postPatch = ''
+    sed -i '/CC=\/usr/d' makefile.macosx_llvm_64bits
+
+    # I think this is a typo and should be CXX? Either way let's kill it
+    sed -i '/XX=\/usr/d' makefile.macosx_llvm_64bits
+  '' + stdenv.lib.optionalString (stdenv.buildPlatform != stdenv.hostPlatform) ''
+    substituteInPlace makefile.machine \
+      --replace 'CC=gcc'  'CC=${stdenv.cc.targetPrefix}gcc' \
+      --replace 'CXX=g++' 'CXX=${stdenv.cc.targetPrefix}g++'
+  '';
+
+  preConfigure = ''
+    makeFlagsArray=(DEST_HOME=$out)
+    buildFlags=all3
+  '' + stdenv.lib.optionalString stdenv.isDarwin ''
+    cp makefile.macosx_llvm_64bits makefile.machine
+  '';
+
+  enableParallelBuilding = true;
+
+  setupHook = ./setup-hook.sh;
+
+  NIX_CFLAGS_COMPILE = stdenv.lib.optionalString stdenv.cc.isClang "-Wno-error=c++11-narrowing";
+
+  meta = {
+    homepage = http://p7zip.sourceforge.net/;
+    description = "A port of the 7-zip archiver";
+    # license = stdenv.lib.licenses.lgpl21Plus; + "unRAR restriction"
+    platforms = stdenv.lib.platforms.unix;
+    maintainers = [ stdenv.lib.maintainers.raskin ];
+    license = stdenv.lib.licenses.lgpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/p7zip/setup-hook.sh b/nixpkgs/pkgs/tools/archivers/p7zip/setup-hook.sh
new file mode 100644
index 000000000000..4dc88f07c0bd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/p7zip/setup-hook.sh
@@ -0,0 +1,5 @@
+unpackCmdHooks+=(_try7zip)
+_try7zip() {
+    if ! [[ "$curSrc" =~ \.7z$ ]]; then return 1; fi
+    7z x "$curSrc"
+}
diff --git a/nixpkgs/pkgs/tools/archivers/pxattr/default.nix b/nixpkgs/pkgs/tools/archivers/pxattr/default.nix
new file mode 100644
index 000000000000..b507b60287c9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/pxattr/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl, gcc }:
+
+stdenv.mkDerivation {
+  name = "pxattr-2.1.0";
+
+  src = fetchurl {
+    url = "https://www.lesbonscomptes.com/pxattr/pxattr-2.1.0.tar.gz";
+    sha256 = "1dwcqc5z7gzma1zhis2md49bj2nq7m6jimh4zlx9szw6svisz56z";
+  };
+
+  buildInputs = [ gcc ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp pxattr $out/bin
+  '';
+
+  meta = {
+    homepage = https://www.lesbonscomptes.com/pxattr/index.html;
+    description = "Provides a single interface to extended file attributes";
+    maintainers = [ stdenv.lib.maintainers.vrthra ];
+    license = [ stdenv.lib.licenses.mit ];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/rpmextract/default.nix b/nixpkgs/pkgs/tools/archivers/rpmextract/default.nix
new file mode 100644
index 000000000000..59ff67e3eefb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/rpmextract/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, rpm, cpio, substituteAll }:
+
+stdenv.mkDerivation {
+  name = "rpmextract";
+
+  buildCommand = ''
+    install -Dm755 $script $out/bin/rpmextract
+  '';
+    
+  script = substituteAll {
+    src = ./rpmextract.sh;
+    isExecutable = true;
+    inherit rpm cpio;
+    inherit (stdenv) shell;
+  };
+
+  meta = with stdenv.lib; {
+    description = "Script to extract RPM archives";
+    platforms = platforms.all;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/rpmextract/rpmextract.sh b/nixpkgs/pkgs/tools/archivers/rpmextract/rpmextract.sh
new file mode 100644
index 000000000000..6ebfa251955d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/rpmextract/rpmextract.sh
@@ -0,0 +1,10 @@
+#!@shell@ -e
+
+if [ "$1" = "" ]; then
+  echo "usage: rpmextract package_name..." 1>&2
+  exit 1
+fi
+
+for i in "$@"; do
+  @rpm@/bin/rpm2cpio "$i" | @cpio@/bin/cpio -idv
+done
diff --git a/nixpkgs/pkgs/tools/archivers/runzip/default.nix b/nixpkgs/pkgs/tools/archivers/runzip/default.nix
new file mode 100644
index 000000000000..b9eaf3dba65e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/runzip/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchFromGitHub, libzip, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  version = "1.4";
+  pname = "runzip";
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ libzip ];
+
+  src = fetchFromGitHub {
+    owner = "vlm";
+    repo = "zip-fix-filename-encoding";
+    rev = "v${version}";
+    sha256 = "0l5zbb5hswxczigvyal877j0aiq3fc01j3gv88bvy7ikyvw3lc07";
+  };
+
+  meta = {
+    description = "A tool to convert filename encoding inside a ZIP archive";
+    license = stdenv.lib.licenses.bsd2 ;
+    maintainers = [stdenv.lib.maintainers.raskin];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/s-tar/default.nix b/nixpkgs/pkgs/tools/archivers/s-tar/default.nix
new file mode 100644
index 000000000000..48e5cc6c4361
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/s-tar/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "s-tar";
+  version = "1.6";
+  src = fetchurl {
+    url = "mirror://sourceforge/s-tar/star-${version}.tar.bz2";
+    sha256 = "0xpp8gf0ghwdgncdwx17fpadxislwrj48gcm42851hz6p8p6c60v";
+  };
+
+  preConfigure = "rm configure";
+  preBuild = "sed 's_/bin/__g' -i RULES/*";
+  makeFlags = [ "GMAKE_NOWARN=true" ];
+  installFlags = [ "DESTDIR=$(out)" "INS_BASE=/" ];
+  postInstall = ''
+    find $out/bin -type l -delete
+    rm -r $out/etc $out/include $out/sbin
+  '';
+
+  meta = {
+    description = "A very fast tar like tape archiver with improved functionality";
+    longDescription = ''
+      Star archives and extracts multiple files to and from a single file called a tarfile.
+      A tarfile is usually a magnetic tape, but it can be any file.
+      In all cases, appearance of a directory name refers to the files and (recursively) sub-directories of that directory.
+      Star's actions are controlled by the mandatory command flags from the list below.
+      The way star acts may be modified by additional options.
+      Note that unpacking tar archives may be a security risk because star may overwrite existing files.
+    '';
+    homepage = http://cdrtools.sourceforge.net/private/star.html;
+    license = stdenv.lib.licenses.cddl;
+    maintainers = [ stdenv.lib.maintainers.wucke13 ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/sharutils/default.nix b/nixpkgs/pkgs/tools/archivers/sharutils/default.nix
new file mode 100644
index 000000000000..0dfd234bc758
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/sharutils/default.nix
@@ -0,0 +1,68 @@
+{ stdenv, fetchurl, gettext, coreutils }:
+
+stdenv.mkDerivation rec {
+  name = "sharutils-4.15.2";
+
+  src = fetchurl {
+    url = "mirror://gnu/sharutils/${name}.tar.xz";
+    sha256 = "16isapn8f39lnffc3dp4dan05b7x6mnc76v6q5nn8ysxvvvwy19b";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  # GNU Gettext is needed on non-GNU platforms.
+  buildInputs = [ coreutils gettext ];
+
+  # These tests try to hit /etc/passwd to find out your username if pass in a submitter
+  # name on the command line. Since we block access to /etc/passwd on the Darwin sandbox
+  # that cause shar to just segfault. It isn't a problem on Linux because their sandbox
+  # remaps /etc/passwd to a trivial file, but we can't do that on Darwin so I do this
+  # instead. In this case, I pass in the very imaginative "submitter" as the submitter name
+
+  patches = [
+    # CVE-2018-1000097
+    (fetchurl {
+      url = "https://sources.debian.org/data/main/s/sharutils/1:4.15.2-2+deb9u1/debian/patches/01-fix-heap-buffer-overflow-cve-2018-1000097.patch";
+      sha256 = "19g0sxc8g79aj5gd5idz5409311253jf2q8wqkasf0handdvsbxx";
+    })
+  ];
+
+  postPatch = let
+      # This evaluates to a string containing:
+      #
+      #     substituteInPlace tests/shar-2 --replace '${SHAR}' '${SHAR} -s submitter'
+      #     substituteInPlace tests/shar-2 --replace '${SHAR}' '${SHAR} -s submitter'
+      shar_sub = "\${SHAR}";
+    in ''
+      substituteInPlace tests/shar-1 --replace '${shar_sub}' '${shar_sub} -s submitter'
+      substituteInPlace tests/shar-2 --replace '${shar_sub}' '${shar_sub} -s submitter'
+
+      substituteInPlace intl/Makefile.in --replace "AR = ar" ""
+    '';
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    description = "Tools for remote synchronization and `shell archives'";
+    longDescription =
+      '' GNU shar makes so-called shell archives out of many files, preparing
+         them for transmission by electronic mail services.  A shell archive
+         is a collection of files that can be unpacked by /bin/sh.  A wide
+         range of features provide extensive flexibility in manufacturing
+         shars and in specifying shar smartness.  For example, shar may
+         compress files, uuencode binary files, split long files and
+         construct multi-part mailings, ensure correct unsharing order, and
+         provide simplistic checksums.
+
+         GNU unshar scans a set of mail messages looking for the start of
+         shell archives.  It will automatically strip off the mail headers
+         and other introductory text.  The archive bodies are then unpacked
+         by a copy of the shell. unshar may also process files containing
+         concatenated shell archives.
+      '';
+    homepage = https://www.gnu.org/software/sharutils/;
+    license = licenses.gpl3Plus;
+    maintainers = [];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/snzip/default.nix b/nixpkgs/pkgs/tools/archivers/snzip/default.nix
new file mode 100644
index 000000000000..031cac64b759
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/snzip/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub
+, autoreconfHook
+, pkgconfig
+, snappy
+}:
+
+stdenv.mkDerivation rec {
+  pname = "snzip";
+  version = "1.0.4";
+
+  src = fetchFromGitHub {
+    owner = "kubo";
+    repo = "snzip";
+    rev = version;
+    sha256 = "1v8li1zv9f2g31iyi9y9zx42rjvwkaw221g60pmkbv53y667i325";
+  };
+
+  buildInputs = [ snappy ];
+  # We don't use a release tarball so we don't have a `./configure` script to
+  # run. That's why we generate it.
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+
+  meta = with stdenv.lib; {
+    description = "A compression/decompression tool based on snappy";
+    homepage = "https://github.com/kubo/snzip";
+    maintainers = with maintainers; [ doronbehar ];
+    license = licenses.bsd2;
+    platforms = platforms.linux;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/archivers/unar/default.nix b/nixpkgs/pkgs/tools/archivers/unar/default.nix
new file mode 100644
index 000000000000..1104548f77f8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unar/default.nix
@@ -0,0 +1,61 @@
+{ stdenv, fetchurl, gnustep, unzip, bzip2, zlib, icu, openssl }:
+
+let
+  pname = "unar";
+
+in stdenv.mkDerivation rec {
+  name = "${pname}-${version}";
+  version = "1.10.1";
+
+  src = fetchurl {
+    url = "http://unarchiver.c3.cx/downloads/${pname}${version}_src.zip";
+    sha256 = "0aq9zlar5vzr5qxphws8dm7ax60bsfsw77f4ciwa5dq5lla715j0";
+  };
+
+  buildInputs = [ gnustep.base bzip2 icu openssl zlib ];
+
+  nativeBuildInputs = [ gnustep.make unzip ];
+
+  enableParallelBuilding = true;
+
+  postPatch = ''
+    for f in Makefile.linux ../UniversalDetector/Makefile.linux ; do
+      substituteInPlace $f \
+        --replace "CC = gcc"     "CC=cc" \
+        --replace "CXX = g++"    "CXX=c++" \
+        --replace "OBJCC = gcc"  "OBJCC=cc" \
+        --replace "OBJCXX = g++" "OBJCXX=c++"
+    done
+  '';
+
+  makefile = "Makefile.linux";
+
+  sourceRoot = "./The Unarchiver/XADMaster";
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 -t $out/bin lsar unar
+    install -Dm644 -t $out/share/man/man1 ../Extra/{lsar,unar}.1
+
+    mkdir -p $out/etc/bash_completion.d
+    cp ../Extra/lsar.bash_completion $out/etc/bash_completion.d/lsar
+    cp ../Extra/unar.bash_completion $out/etc/bash_completion.d/unar
+
+    runHook postInstall
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://unarchiver.c3.cx/unarchiver;
+    description = "An archive unpacker program";
+    longDescription = ''
+      The Unarchiver is an archive unpacker program with support for the popular \
+      zip, RAR, 7z, tar, gzip, bzip2, LZMA, XZ, CAB, MSI, NSIS, EXE, ISO, BIN, \
+      and split file formats, as well as the old Stuffit, Stuffit X, DiskDouble, \
+      Compact Pro, Packit, cpio, compress (.Z), ARJ, ARC, PAK, ACE, ZOO, LZH, \
+      ADF, DMS, LZX, PowerPacker, LBR, Squeeze, Crunch, and other old formats.
+    '';
+    license = with licenses; [ lgpl21Plus ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/unarj/default.nix b/nixpkgs/pkgs/tools/archivers/unarj/default.nix
new file mode 100644
index 000000000000..61e60996e759
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unarj/default.nix
@@ -0,0 +1,23 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  pname = "unarj";
+  version = "2.65";
+
+  src = fetchurl {
+    sha256 = "0r027z7a0azrd5k885xvwhrxicpd0ah57jzmaqlypxha2qjw7p6p";
+    url = "https://src.fedoraproject.org/repo/pkgs/unarj/${pname}-${version}.tar.gz/c6fe45db1741f97155c7def322aa74aa/${pname}-${version}.tar.gz";
+  };
+
+  preInstall = ''
+    mkdir -p $out/bin
+    sed -i -e s,/usr/local/bin,$out/bin, Makefile
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Unarchiver of ARJ files";
+    license = licenses.free;
+    # Vulnerable to CVE-2015-0557 & possibly CVE-2015-0556, CVE-2015-2782:
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/undmg/default.nix b/nixpkgs/pkgs/tools/archivers/undmg/default.nix
new file mode 100644
index 000000000000..72be49d97927
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/undmg/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub, zlib, bzip2 }:
+
+stdenv.mkDerivation rec {
+  version = "1.0.3";
+  pname = "undmg";
+
+  src = fetchFromGitHub {
+    owner = "matthewbauer";
+    repo = "undmg";
+    rev = "v${version}";
+    sha256 = "1pxqw92h2w75d4jwiihwnkhnsfk09cddh3flgrqwh9r3ry14fgbb";
+    
+  };
+
+  buildInputs = [ zlib bzip2 ];
+
+  setupHook = ./setup-hook.sh;
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/matthewbauer/undmg;
+    description = "Extract a DMG file";
+    license = licenses.gpl3;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ matthewbauer lnl7 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/undmg/setup-hook.sh b/nixpkgs/pkgs/tools/archivers/undmg/setup-hook.sh
new file mode 100644
index 000000000000..e5c8dda23b6a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/undmg/setup-hook.sh
@@ -0,0 +1,5 @@
+unpackCmdHooks+=(_tryUnpackDmg)
+_tryUnpackDmg() {
+    if ! [[ "$curSrc" =~ \.dmg$ ]]; then return 1; fi
+    undmg < "$curSrc"
+}
diff --git a/nixpkgs/pkgs/tools/archivers/unp/default.nix b/nixpkgs/pkgs/tools/archivers/unp/default.nix
new file mode 100644
index 000000000000..82e83a8c6a38
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unp/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, lib, fetchurl, makeWrapper, perl
+, unzip, gzip, file
+# extractors which are added to unp’s PATH
+, extraBackends ? []
+}:
+
+let
+  runtime_bins =  [ file unzip gzip ] ++ extraBackends;
+
+in stdenv.mkDerivation {
+  pname = "unp";
+  version = "2.0-pre7";
+  buildInputs = [ perl makeWrapper ];
+
+  src = fetchurl {
+    # url = "http://http.debian.net/debian/pool/main/u/unp/unp_2.0~pre7+nmu1.tar.bz2";
+    url = "mirror://debian/pool/main/u/unp/unp_2.0~pre7+nmu1.tar.bz2";
+    sha256 = "09w2sy7ivmylxf8blf0ywxicvb4pbl0xhrlbb3i9x9d56ll6ybbw";
+    name = "unp_2.0_pre7+nmu1.tar.bz2";
+  };
+
+  dontConfigure = true;
+  buildPhase = "true";
+  installPhase = ''
+  mkdir -p $out/bin
+  mkdir -p $out/share/man/man1
+  install ./unp $out/bin/unp
+  install ./ucat $out/bin/ucat
+  cp debian/unp.1 $out/share/man/man1
+
+  wrapProgram $out/bin/unp \
+    --prefix PATH : ${lib.makeBinPath runtime_bins}
+  wrapProgram $out/bin/ucat \
+    --prefix PATH : ${lib.makeBinPath runtime_bins}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Command line tool for unpacking archives easily";
+    homepage = https://packages.qa.debian.org/u/unp.html;
+    license = with licenses; [ gpl2 ];
+    maintainers = [ maintainers.timor ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/unrar/default.nix b/nixpkgs/pkgs/tools/archivers/unrar/default.nix
new file mode 100644
index 000000000000..0fe8f2f58665
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unrar/default.nix
@@ -0,0 +1,45 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  pname = "unrar";
+  version = "5.8.5";
+
+  src = fetchurl {
+    url = "https://www.rarlab.com/rar/unrarsrc-${version}.tar.gz";
+    sha256 = "0abvz6vv8kr416fphysfbwgxc6hyf1bpnd0aczfv7j3vc8x949d7";
+  };
+
+  postPatch = ''
+    substituteInPlace makefile \
+      --replace "CXX=" "#CXX=" \
+      --replace "STRIP=" "#STRIP=" \
+      --replace "AR=" "#AR="
+  '';
+
+  buildPhase = ''
+    make unrar
+    make clean
+    make lib
+  '';
+
+  installPhase = ''
+    install -Dt "$out/bin" unrar
+
+    mkdir -p $out/share/doc/unrar
+    cp acknow.txt license.txt \
+        $out/share/doc/unrar
+
+    install -Dm755 libunrar.so $out/lib/libunrar.so
+    install -D dll.hpp $out/include/unrar/dll.hpp
+  '';
+
+  setupHook = ./setup-hook.sh;
+
+  meta = with stdenv.lib; {
+    description = "Utility for RAR archives";
+    homepage = http://www.rarlab.com/;
+    license = licenses.unfreeRedistributable;
+    maintainers = [ maintainers.ehmry ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/unrar/setup-hook.sh b/nixpkgs/pkgs/tools/archivers/unrar/setup-hook.sh
new file mode 100644
index 000000000000..41d6a5cd217b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unrar/setup-hook.sh
@@ -0,0 +1,5 @@
+unpackCmdHooks+=(_tryUnrar)
+_tryUnrar() {
+    if ! [[ "$curSrc" =~ \.rar$ ]]; then return 1; fi
+    unrar x "$curSrc" >/dev/null
+}
diff --git a/nixpkgs/pkgs/tools/archivers/unshield/default.nix b/nixpkgs/pkgs/tools/archivers/unshield/default.nix
new file mode 100644
index 000000000000..cfab2443032b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unshield/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchFromGitHub, cmake, zlib, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "unshield";
+  version = "1.4.3";
+
+  src = fetchFromGitHub {
+    owner = "twogood";
+    repo = "unshield";
+    rev = version;
+    sha256 = "19wn22vszhci8dfcixx5rliz7phx3lv5ablvhjlclvj75k2vsdqd";
+  };
+
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ zlib openssl ];
+
+  meta = with stdenv.lib; {
+    description = "Tool and library to extract CAB files from InstallShield installers";
+    homepage = https://github.com/twogood/unshield;
+    license = licenses.mit;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-8139.diff b/nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-8139.diff
new file mode 100644
index 000000000000..3bcc21c7c0d8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-8139.diff
@@ -0,0 +1,47 @@
+From RedHat: https://bugzilla.redhat.com/attachment.cgi?id=971984&action=diff&context=patch&collapsed=&headers=1&format=raw
+
+--- unzip60/extract.c	2010-04-03 14:41:55 -0500
++++ unzip60/extract.c	2014-12-03 15:33:35 -0600
+@@ -1,5 +1,5 @@ 
+ /*
+-  Copyright (c) 1990-2009 Info-ZIP.  All rights reserved.
++  Copyright (c) 1990-2014 Info-ZIP.  All rights reserved.
+ 
+   See the accompanying file LICENSE, version 2009-Jan-02 or later
+   (the contents of which are also included in unzip.h) for terms of use.
+@@ -298,6 +298,8 @@ 
+ #ifndef SFX
+    static ZCONST char Far InconsistEFlength[] = "bad extra-field entry:\n \
+      EF block length (%u bytes) exceeds remaining EF data (%u bytes)\n";
++   static ZCONST char Far TooSmallEFlength[] = "bad extra-field entry:\n \
++     EF block length (%u bytes) invalid (< %d)\n";
+    static ZCONST char Far InvalidComprDataEAs[] =
+      " invalid compressed data for EAs\n";
+ #  if (defined(WIN32) && defined(NTSD_EAS))
+@@ -2023,7 +2025,8 @@ 
+         ebID = makeword(ef);
+         ebLen = (unsigned)makeword(ef+EB_LEN);
+ 
+-        if (ebLen > (ef_len - EB_HEADSIZE)) {
++        if (ebLen > (ef_len - EB_HEADSIZE))
++        {
+            /* Discovered some extra field inconsistency! */
+             if (uO.qflag)
+                 Info(slide, 1, ((char *)slide, "%-22s ",
+@@ -2032,6 +2035,16 @@ 
+               ebLen, (ef_len - EB_HEADSIZE)));
+             return PK_ERR;
+         }
++        else if (ebLen < EB_HEADSIZE)
++        {
++            /* Extra block length smaller than header length. */
++            if (uO.qflag)
++                Info(slide, 1, ((char *)slide, "%-22s ",
++                  FnFilter1(G.filename)));
++            Info(slide, 1, ((char *)slide, LoadFarString(TooSmallEFlength),
++              ebLen, EB_HEADSIZE));
++            return PK_ERR;
++        }
+ 
+         switch (ebID) {
+             case EF_OS2:
diff --git a/nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-8140.diff b/nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-8140.diff
new file mode 100644
index 000000000000..81b96b8df7db
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-8140.diff
@@ -0,0 +1,26 @@
+From RedHat: https://bugzilla.redhat.com/attachment.cgi?id=969621&action=diff
+(unzip60/ path prefix added)
+
+--- unzip60/extract.c	2009-03-14 02:32:52.000000000 +0100
++++ unzip60/extract.c	2014-12-05 22:43:13.000000000 +0100
+@@ -2221,10 +2234,17 @@ static int test_compr_eb(__G__ eb, eb_si
+     if (compr_offset < 4)                /* field is not compressed: */
+         return PK_OK;                    /* do nothing and signal OK */
+ 
++    /* Return no/bad-data error status if any problem is found:
++     *    1. eb_size is too small to hold the uncompressed size
++     *       (eb_ucsize).  (Else extract eb_ucsize.)
++     *    2. eb_ucsize is zero (invalid).  2014-12-04 SMS.
++     *    3. eb_ucsize is positive, but eb_size is too small to hold
++     *       the compressed data header.
++     */
+     if ((eb_size < (EB_UCSIZE_P + 4)) ||
+-        ((eb_ucsize = makelong(eb+(EB_HEADSIZE+EB_UCSIZE_P))) > 0L &&
+-         eb_size <= (compr_offset + EB_CMPRHEADLEN)))
+-        return IZ_EF_TRUNC;               /* no compressed data! */
++     ((eb_ucsize = makelong( eb+ (EB_HEADSIZE+ EB_UCSIZE_P))) == 0L) ||
++     ((eb_ucsize > 0L) && (eb_size <= (compr_offset + EB_CMPRHEADLEN))))
++        return IZ_EF_TRUNC;             /* no/bad compressed data! */
+ 
+     if (
+ #ifdef INT_16BIT
diff --git a/nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-8141.diff b/nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-8141.diff
new file mode 100644
index 000000000000..11007195b1ff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-8141.diff
@@ -0,0 +1,136 @@
+From RedHat: https://bugzilla.redhat.com/attachment.cgi?id=969625&action=diff
+(unzip60/ path prefix added)
+
+--- unzip60/process.c	2009-03-06 02:25:10.000000000 +0100
++++ unzip60/process.c	2014-12-05 22:42:39.000000000 +0100
+@@ -1,5 +1,5 @@ 
+ /*
+-  Copyright (c) 1990-2009 Info-ZIP.  All rights reserved.
++  Copyright (c) 1990-2014 Info-ZIP.  All rights reserved.
+ 
+   See the accompanying file LICENSE, version 2009-Jan-02 or later
+   (the contents of which are also included in unzip.h) for terms of use.
+@@ -1888,48 +1888,82 @@ int getZip64Data(__G__ ef_buf, ef_len)
+     and a 4-byte version of disk start number.
+     Sets both local header and central header fields.  Not terribly clever,
+     but it means that this procedure is only called in one place.
++
++    2014-12-05 SMS.
++    Added checks to ensure that enough data are available before calling
++    makeint64() or makelong().  Replaced various sizeof() values with
++    simple ("4" or "8") constants.  (The Zip64 structures do not depend
++    on our variable sizes.)  Error handling is crude, but we should now
++    stay within the buffer.
+   ---------------------------------------------------------------------------*/
+ 
++#define Z64FLGS 0xffff
++#define Z64FLGL 0xffffffff
++
+     if (ef_len == 0 || ef_buf == NULL)
+         return PK_COOL;
+ 
+     Trace((stderr,"\ngetZip64Data: scanning extra field of length %u\n",
+       ef_len));
+ 
+-    while (ef_len >= EB_HEADSIZE) {
++    while (ef_len >= EB_HEADSIZE)
++    {
+         eb_id = makeword(EB_ID + ef_buf);
+         eb_len = makeword(EB_LEN + ef_buf);
+ 
+-        if (eb_len > (ef_len - EB_HEADSIZE)) {
+-            /* discovered some extra field inconsistency! */
++        if (eb_len > (ef_len - EB_HEADSIZE))
++        {
++            /* Extra block length exceeds remaining extra field length. */
+             Trace((stderr,
+               "getZip64Data: block length %u > rest ef_size %u\n", eb_len,
+               ef_len - EB_HEADSIZE));
+             break;
+         }
+-        if (eb_id == EF_PKSZ64) {
+-
++        if (eb_id == EF_PKSZ64)
++        {
+           int offset = EB_HEADSIZE;
+ 
+-          if (G.crec.ucsize == 0xffffffff || G.lrec.ucsize == 0xffffffff){
+-            G.lrec.ucsize = G.crec.ucsize = makeint64(offset + ef_buf);
+-            offset += sizeof(G.crec.ucsize);
++          if ((G.crec.ucsize == Z64FLGL) || (G.lrec.ucsize == Z64FLGL))
++          {
++            if (offset+ 8 > ef_len)
++              return PK_ERR;
++
++            G.crec.ucsize = G.lrec.ucsize = makeint64(offset + ef_buf);
++            offset += 8;
+           }
+-          if (G.crec.csize == 0xffffffff || G.lrec.csize == 0xffffffff){
+-            G.csize = G.lrec.csize = G.crec.csize = makeint64(offset + ef_buf);
+-            offset += sizeof(G.crec.csize);
++
++          if ((G.crec.csize == Z64FLGL) || (G.lrec.csize == Z64FLGL))
++          {
++            if (offset+ 8 > ef_len)
++              return PK_ERR;
++
++            G.csize = G.crec.csize = G.lrec.csize = makeint64(offset + ef_buf);
++            offset += 8;
+           }
+-          if (G.crec.relative_offset_local_header == 0xffffffff){
++
++          if (G.crec.relative_offset_local_header == Z64FLGL)
++          {
++            if (offset+ 8 > ef_len)
++              return PK_ERR;
++
+             G.crec.relative_offset_local_header = makeint64(offset + ef_buf);
+-            offset += sizeof(G.crec.relative_offset_local_header);
++            offset += 8;
+           }
+-          if (G.crec.disk_number_start == 0xffff){
++
++          if (G.crec.disk_number_start == Z64FLGS)
++          {
++            if (offset+ 4 > ef_len)
++              return PK_ERR;
++
+             G.crec.disk_number_start = (zuvl_t)makelong(offset + ef_buf);
+-            offset += sizeof(G.crec.disk_number_start);
++            offset += 4;
+           }
++#if 0
++          break;                /* Expect only one EF_PKSZ64 block. */
++#endif /* 0 */
+         }
+ 
+-        /* Skip this extra field block */
++        /* Skip this extra field block. */
+         ef_buf += (eb_len + EB_HEADSIZE);
+         ef_len -= (eb_len + EB_HEADSIZE);
+     }
+--- unzip60/fileio.c	2009-04-20 02:03:44.000000000 +0200
++++ unzip60/fileio.c	2014-12-05 22:44:16.000000000 +0100
+@@ -176,6 +176,8 @@ static ZCONST char Far FilenameTooLongTr
+ #endif
+ static ZCONST char Far ExtraFieldTooLong[] =
+   "warning:  extra field too long (%d).  Ignoring...\n";
++static ZCONST char Far ExtraFieldCorrupt[] =
++  "warning:  extra field (type: 0x%04x) corrupt.  Continuing...\n";
+ 
+ #ifdef WINDLL
+    static ZCONST char Far DiskFullQuery[] =
+@@ -2295,7 +2297,12 @@ int do_string(__G__ length, option)   /*
+             if (readbuf(__G__ (char *)G.extra_field, length) == 0)
+                 return PK_EOF;
+             /* Looks like here is where extra fields are read */
+-            getZip64Data(__G__ G.extra_field, length);
++            if (getZip64Data(__G__ G.extra_field, length) != PK_COOL)
++            {
++                Info(slide, 0x401, ((char *)slide,
++                 LoadFarString( ExtraFieldCorrupt), EF_PKSZ64));
++                error = PK_WARN;
++            }
+ #ifdef UNICODE_SUPPORT
+             G.unipath_filename = NULL;
+             if (G.UzO.U_flag < 2) {
diff --git a/nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-9636.diff b/nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-9636.diff
new file mode 100644
index 000000000000..d4c7f752975e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-9636.diff
@@ -0,0 +1,42 @@
+From 190040ebfcf5395a6ccedede2cc9343d34f0a108 Mon Sep 17 00:00:00 2001
+From: mancha <mancha1 AT zoho DOT com>
+Date: Wed, 11 Feb 2015
+Subject: Info-ZIP UnZip buffer overflow
+
+By carefully crafting a corrupt ZIP archive with "extra fields" that
+purport to have compressed blocks larger than the corresponding
+uncompressed blocks in STORED no-compression mode, an attacker can
+trigger a heap overflow that can result in application crash or
+possibly have other unspecified impact.
+
+This patch ensures that when extra fields use STORED mode, the
+"compressed" and uncompressed block sizes match.
+
+---
+ extract.c |    8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- a/extract.c
++++ b/extract.c
+@@ -2217,6 +2217,7 @@ static int test_compr_eb(__G__ eb, eb_si
+     ulg eb_ucsize;
+     uch *eb_ucptr;
+     int r;
++    ush method;
+ 
+     if (compr_offset < 4)                /* field is not compressed: */
+         return PK_OK;                    /* do nothing and signal OK */
+@@ -2226,6 +2227,13 @@ static int test_compr_eb(__G__ eb, eb_si
+          eb_size <= (compr_offset + EB_CMPRHEADLEN)))
+         return IZ_EF_TRUNC;               /* no compressed data! */
+ 
++    method = makeword(eb + (EB_HEADSIZE + compr_offset));
++    if ((method == STORED) &&
++        (eb_size - compr_offset - EB_CMPRHEADLEN != eb_ucsize))
++	return PK_ERR;			  /* compressed & uncompressed
++					   * should match in STORED
++					   * method */
++
+     if (
+ #ifdef INT_16BIT
+         (((ulg)(extent)eb_ucsize) != eb_ucsize) ||
diff --git a/nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-9913.patch b/nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-9913.patch
new file mode 100644
index 000000000000..a5675f4fb7c0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unzip/CVE-2014-9913.patch
@@ -0,0 +1,29 @@
+From: "Steven M. Schweda" <sms@antinode.info>
+Subject: Fix CVE-2014-9913, buffer overflow in unzip
+Bug: https://sourceforge.net/p/infozip/bugs/27/
+Bug-Debian: https://bugs.debian.org/847485
+Bug-Ubuntu: https://launchpad.net/bugs/387350
+X-Debian-version: 6.0-21
+
+--- a/list.c
++++ b/list.c
+@@ -339,7 +339,18 @@
+                 G.crec.compression_method == ENHDEFLATED) {
+                 methbuf[5] = dtype[(G.crec.general_purpose_bit_flag>>1) & 3];
+             } else if (methnum >= NUM_METHODS) {
+-                sprintf(&methbuf[4], "%03u", G.crec.compression_method);
++                /* 2013-02-26 SMS.
++                 * http://sourceforge.net/p/infozip/bugs/27/  CVE-2014-9913.
++                 * Unexpectedly large compression methods overflow
++                 * &methbuf[].  Use the old, three-digit decimal format
++                 * for values which fit.  Otherwise, sacrifice the
++                 * colon, and use four-digit hexadecimal.
++                 */
++                if (G.crec.compression_method <= 999) {
++                    sprintf( &methbuf[ 4], "%03u", G.crec.compression_method);
++                } else {
++                    sprintf( &methbuf[ 3], "%04X", G.crec.compression_method);
++                }
+             }
+ 
+ #if 0       /* GRR/Euro:  add this? */
diff --git a/nixpkgs/pkgs/tools/archivers/unzip/CVE-2015-7696.diff b/nixpkgs/pkgs/tools/archivers/unzip/CVE-2015-7696.diff
new file mode 100644
index 000000000000..3aad17bddd78
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unzip/CVE-2015-7696.diff
@@ -0,0 +1,66 @@
+From 68efed87fabddd450c08f3112f62a73f61d493c9 Mon Sep 17 00:00:00 2001
+From: Petr Stodulka <pstodulk@redhat.com>
+Date: Mon, 14 Sep 2015 18:23:17 +0200
+Subject: [PATCH 1/2] upstream fix for heap overflow
+
+https://bugzilla.redhat.com/attachment.cgi?id=1073002
+---
+ crypt.c | 12 +++++++++++-
+ 1 file changed, 11 insertions(+), 1 deletion(-)
+
+diff --git a/crypt.c b/crypt.c
+index 784e411..a8975f2 100644
+--- a/crypt.c
++++ b/crypt.c
+@@ -465,7 +465,17 @@ int decrypt(__G__ passwrd)
+     GLOBAL(pInfo->encrypted) = FALSE;
+     defer_leftover_input(__G);
+     for (n = 0; n < RAND_HEAD_LEN; n++) {
+-        b = NEXTBYTE;
++        /* 2012-11-23 SMS.  (OUSPG report.)
++         * Quit early if compressed size < HEAD_LEN.  The resulting
++         * error message ("unable to get password") could be improved,
++         * but it's better than trying to read nonexistent data, and
++         * then continuing with a negative G.csize.  (See
++         * fileio.c:readbyte()).
++         */
++        if ((b = NEXTBYTE) == (ush)EOF)
++        {
++            return PK_ERR;
++        }
+         h[n] = (uch)b;
+         Trace((stdout, " (%02x)", h[n]));
+     }
+-- 
+2.4.6
+
+
+From bd8a743ee0a77e65ad07ef4196c4cd366add3f26 Mon Sep 17 00:00:00 2001
+From: Kamil Dudka <kdudka@redhat.com>
+Date: Mon, 14 Sep 2015 18:24:56 +0200
+Subject: [PATCH 2/2] fix infinite loop when extracting empty bzip2 data
+
+---
+ extract.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/extract.c b/extract.c
+index 7134bfe..29db027 100644
+--- a/extract.c
++++ b/extract.c
+@@ -2733,6 +2733,12 @@ __GDEF
+     int repeated_buf_err;
+     bz_stream bstrm;
+ 
++    if (G.incnt <= 0 && G.csize <= 0L) {
++        /* avoid an infinite loop */
++        Trace((stderr, "UZbunzip2() got empty input\n"));
++        return 2;
++    }
++
+ #if (defined(DLL) && !defined(NO_SLIDE_REDIR))
+     if (G.redirect_slide)
+         wsize = G.redirect_size, redirSlide = G.redirect_buffer;
+-- 
+2.4.6
+
diff --git a/nixpkgs/pkgs/tools/archivers/unzip/CVE-2015-7697.diff b/nixpkgs/pkgs/tools/archivers/unzip/CVE-2015-7697.diff
new file mode 100644
index 000000000000..98ebf53c4782
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unzip/CVE-2015-7697.diff
@@ -0,0 +1,36 @@
+From bd150334fb4084f5555a6be26b015a0671cb5b74 Mon Sep 17 00:00:00 2001
+From: Kamil Dudka <kdudka@redhat.com>
+Date: Tue, 22 Sep 2015 18:52:23 +0200
+Subject: [PATCH] extract: prevent unsigned overflow on invalid input
+
+Suggested-by: Stefan Cornelius
+---
+ extract.c | 11 ++++++++++-
+ 1 file changed, 10 insertions(+), 1 deletion(-)
+
+diff --git a/extract.c b/extract.c
+index 29db027..b9ae667 100644
+--- a/extract.c
++++ b/extract.c
+@@ -1257,8 +1257,17 @@ static int extract_or_test_entrylist(__G__ numchunk,
+         if (G.lrec.compression_method == STORED) {
+             zusz_t csiz_decrypted = G.lrec.csize;
+ 
+-            if (G.pInfo->encrypted)
++            if (G.pInfo->encrypted) {
++                if (csiz_decrypted <= 12) {
++                    /* handle the error now to prevent unsigned overflow */
++                    Info(slide, 0x401, ((char *)slide,
++                      LoadFarStringSmall(ErrUnzipNoFile),
++                      LoadFarString(InvalidComprData),
++                      LoadFarStringSmall2(Inflate)));
++                    return PK_ERR;
++                }
+                 csiz_decrypted -= 12;
++            }
+             if (G.lrec.ucsize != csiz_decrypted) {
+                 Info(slide, 0x401, ((char *)slide,
+                   LoadFarStringSmall2(WrnStorUCSizCSizDiff),
+-- 
+2.5.2
+
diff --git a/nixpkgs/pkgs/tools/archivers/unzip/CVE-2016-9844.patch b/nixpkgs/pkgs/tools/archivers/unzip/CVE-2016-9844.patch
new file mode 100644
index 000000000000..52d07987b333
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unzip/CVE-2016-9844.patch
@@ -0,0 +1,28 @@
+From: "Steven M. Schweda" <sms@antinode.info>
+Subject: Fix CVE-2016-9844, buffer overflow in zipinfo
+Bug-Debian: https://bugs.debian.org/847486
+Bug-Ubuntu: https://launchpad.net/bugs/1643750
+X-Debian-version: 6.0-21
+
+--- a/zipinfo.c
++++ b/zipinfo.c
+@@ -1921,7 +1921,18 @@
+         ush  dnum=(ush)((G.crec.general_purpose_bit_flag>>1) & 3);
+         methbuf[3] = dtype[dnum];
+     } else if (methnum >= NUM_METHODS) {   /* unknown */
+-        sprintf(&methbuf[1], "%03u", G.crec.compression_method);
++        /* 2016-12-05 SMS.
++         * https://launchpad.net/bugs/1643750
++         * Unexpectedly large compression methods overflow
++         * &methbuf[].  Use the old, three-digit decimal format
++         * for values which fit.  Otherwise, sacrifice the "u",
++         * and use four-digit hexadecimal.
++         */
++        if (G.crec.compression_method <= 999) {
++            sprintf( &methbuf[ 1], "%03u", G.crec.compression_method);
++        } else {
++            sprintf( &methbuf[ 0], "%04X", G.crec.compression_method);
++        }
+     }
+ 
+     for (k = 0;  k < 15;  ++k)
diff --git a/nixpkgs/pkgs/tools/archivers/unzip/CVE-2018-18384.patch b/nixpkgs/pkgs/tools/archivers/unzip/CVE-2018-18384.patch
new file mode 100644
index 000000000000..e9320e125cf6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unzip/CVE-2018-18384.patch
@@ -0,0 +1,35 @@
+--- unzip60/list.c	
++++ unzip60/list.c	
+@@ -97,7 +97,7 @@ int list_files(__G)    /* return PK-type
+ {
+     int do_this_file=FALSE, cfactor, error, error_in_archive=PK_COOL;
+ #ifndef WINDLL
+-    char sgn, cfactorstr[10];
++    char sgn, cfactorstr[1+10+1+1];	/* <sgn><int>%NUL */
+     int longhdr=(uO.vflag>1);
+ #endif
+     int date_format;
+@@ -389,9 +389,9 @@ int list_files(__G)    /* return PK-type
+             }
+ #else /* !WINDLL */
+             if (cfactor == 100)
+-                sprintf(cfactorstr, LoadFarString(CompFactor100));
++                snprintf(cfactorstr, sizeof(cfactorstr), LoadFarString(CompFactor100));
+             else
+-                sprintf(cfactorstr, LoadFarString(CompFactorStr), sgn, cfactor);
++                snprintf(cfactorstr, sizeof(cfactorstr), LoadFarString(CompFactorStr), sgn, cfactor);
+             if (longhdr)
+                 Info(slide, 0, ((char *)slide, LoadFarString(LongHdrStats),
+                   FmZofft(G.crec.ucsize, "8", "u"), methbuf,
+@@ -471,9 +471,9 @@ int list_files(__G)    /* return PK-type
+ 
+ #else /* !WINDLL */
+         if (cfactor == 100)
+-            sprintf(cfactorstr, LoadFarString(CompFactor100));
++            snprintf(cfactorstr, sizeof(cfactorstr), LoadFarString(CompFactor100));
+         else
+-            sprintf(cfactorstr, LoadFarString(CompFactorStr), sgn, cfactor);
++            snprintf(cfactorstr, sizeof(cfactorstr), LoadFarString(CompFactorStr), sgn, cfactor);
+         if (longhdr) {
+             Info(slide, 0, ((char *)slide, LoadFarString(LongFileTrailer),
+               FmZofft(tot_ucsize, "8", "u"), FmZofft(tot_csize, "8", "u"),
diff --git a/nixpkgs/pkgs/tools/archivers/unzip/default.nix b/nixpkgs/pkgs/tools/archivers/unzip/default.nix
new file mode 100644
index 000000000000..b8f649fbdcbb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unzip/default.nix
@@ -0,0 +1,80 @@
+{ stdenv, fetchurl
+, bzip2
+, enableNLS ? false, libnatspec
+}:
+
+stdenv.mkDerivation {
+  name = "unzip-6.0";
+
+  src = fetchurl {
+    url = mirror://sourceforge/infozip/unzip60.tar.gz;
+    sha256 = "0dxx11knh3nk95p2gg2ak777dd11pr7jx5das2g49l262scrcv83";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  patchFlags = [ "-p1" "-F3" ];
+
+  patches = [
+    ./CVE-2014-8139.diff
+    ./CVE-2014-8140.diff
+    ./CVE-2014-8141.diff
+    ./CVE-2014-9636.diff
+    ./CVE-2015-7696.diff
+    ./CVE-2015-7697.diff
+    ./CVE-2014-9913.patch
+    ./CVE-2016-9844.patch
+    ./CVE-2018-18384.patch
+    ./dont-hardcode-cc.patch
+    (fetchurl {
+      url = "https://github.com/madler/unzip/commit/41beb477c5744bc396fa1162ee0c14218ec12213.patch";
+      name = "CVE-2019-13232-1.patch";
+      sha256 = "04jzd6chg9fw4l5zadkfsrfm5llrd7vhd1dgdjjd29nrvkrjyn14";
+    })
+    (fetchurl {
+      url = "https://github.com/madler/unzip/commit/47b3ceae397d21bf822bc2ac73052a4b1daf8e1c.patch";
+      name = "CVE-2019-13232-2.patch";
+      sha256 = "0iy2wcjyvzwrjk02iszwcpg85fkjxs1bvb9isvdiywszav4yjs32";
+    })
+    (fetchurl {
+      url = "https://github.com/madler/unzip/commit/6d351831be705cc26d897db44f878a978f4138fc.patch";
+      name = "CVE-2019-13232-3.patch";
+      sha256 = "1jvs7dkdqs97qnsqc6hk088alhv8j4c638k65dbib9chh40jd7pf";
+    })
+  ] ++ stdenv.lib.optional enableNLS
+    (fetchurl {
+      url = "http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/app-arch/unzip/files/unzip-6.0-natspec.patch?revision=1.1";
+      name = "unzip-6.0-natspec.patch";
+      sha256 = "67ab260ae6adf8e7c5eda2d1d7846929b43562943ec4aff629bd7018954058b1";
+    });
+
+  nativeBuildInputs = [ bzip2 ];
+  buildInputs = [ bzip2 ] ++ stdenv.lib.optional enableNLS libnatspec;
+
+  makefile = "unix/Makefile";
+
+  NIX_LDFLAGS = "-lbz2" + stdenv.lib.optionalString enableNLS " -lnatspec";
+
+  buildFlags = [
+    "generic"
+    "D_USE_BZ2=-DUSE_BZIP2"
+    "L_BZ2=-lbz2"
+  ];
+
+  preConfigure = ''
+    sed -i -e 's@CF="-O3 -Wall -I. -DASM_CRC $(LOC)"@CF="-O3 -Wall -I. -DASM_CRC -DLARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 $(LOC)"@' unix/Makefile
+  '';
+
+  installFlags = [
+    "prefix=${placeholder ''out''}"
+  ];
+
+  setupHook = ./setup-hook.sh;
+
+  meta = {
+    homepage = http://www.info-zip.org;
+    description = "An extraction utility for archives compressed in .zip format";
+    license = stdenv.lib.licenses.free; # http://www.info-zip.org/license.html
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/unzip/dont-hardcode-cc.patch b/nixpkgs/pkgs/tools/archivers/unzip/dont-hardcode-cc.patch
new file mode 100644
index 000000000000..15dbbfe4c533
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unzip/dont-hardcode-cc.patch
@@ -0,0 +1,14 @@
+--- a/unix/Makefile
++++ b/unix/Makefile
+@@ -42,9 +42,9 @@
+ # such as -DDOSWILD).
+ 
+ # UnZip flags
+-CC = cc#	try using "gcc" target rather than changing this (CC and LD
++CC ?= cc#	try using "gcc" target rather than changing this (CC and LD
+ LD = $(CC)#	must match, else "unresolved symbol:  ___main" is possible)
+-AS = as
++AS ?= as
+ LOC = $(D_USE_BZ2) $(LOCAL_UNZIP)
+ AF = $(LOC)
+ CFLAGS = -O
diff --git a/nixpkgs/pkgs/tools/archivers/unzip/setup-hook.sh b/nixpkgs/pkgs/tools/archivers/unzip/setup-hook.sh
new file mode 100644
index 000000000000..4055d2fab512
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/unzip/setup-hook.sh
@@ -0,0 +1,5 @@
+unpackCmdHooks+=(_tryUnzip)
+_tryUnzip() {
+    if ! [[ "$curSrc" =~ \.zip$ ]]; then return 1; fi
+    unzip -qq "$curSrc"
+}
diff --git a/nixpkgs/pkgs/tools/archivers/wimlib/default.nix b/nixpkgs/pkgs/tools/archivers/wimlib/default.nix
new file mode 100644
index 000000000000..9d58bf5c2f89
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/wimlib/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, fetchurl, makeWrapper
+, pkgconfig, openssl, fuse, libxml2
+, cabextract ? null
+, cdrkit ? null
+, mtools ? null
+, ntfs3g ? null
+, syslinux ? null
+}:
+
+stdenv.mkDerivation rec {
+  version = "1.13.1";
+  pname = "wimlib";
+
+  nativeBuildInputs = [ pkgconfig makeWrapper ];
+  buildInputs = [ openssl fuse libxml2 ntfs3g ];
+
+  src = fetchurl {
+    url = "https://wimlib.net/downloads/${pname}-${version}.tar.gz";
+    sha256 = "0pxgrpr3dr81rcf2jh71aiiq3v4anc5sj1nld18f2vhvbijbrx27";
+  };
+
+  preBuild = ''
+    substituteInPlace programs/mkwinpeimg.in \
+      --replace '/usr/lib/syslinux' "${syslinux}/share/syslinux"
+  '';
+
+  postInstall = let
+    path = stdenv.lib.makeBinPath  [ cabextract cdrkit mtools ntfs3g syslinux ];
+  in ''
+    for prog in $out/bin/*; do
+      wrapProgram $prog --prefix PATH : ${path}
+    done
+  '';
+
+  doCheck = true;
+
+  preCheck = ''
+    patchShebangs tests
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://wimlib.net;
+    description = "A library and program to extract, create, and modify WIM files";
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ andir ];
+    license = with licenses; [ gpl3 lgpl3 cc0 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/xarchive/default.nix b/nixpkgs/pkgs/tools/archivers/xarchive/default.nix
new file mode 100644
index 000000000000..53da140b7fda
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/xarchive/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchurl, gtk2, pkgconfig }:
+
+stdenv.mkDerivation rec {
+  version = "0.2.8-6";
+  pname = "xarchive";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/xarchive/${pname}-${version}.tar.gz";
+    sha256 = "0chfim7z27s00naf43a61zsngwhvim14mg1p3csbv5i3f6m50xx4";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ gtk2 ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = {
+    description = "A GTK front-end for command line archiving tools";
+    maintainers = [ stdenv.lib.maintainers.domenkozar ];
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/xarchiver/default.nix b/nixpkgs/pkgs/tools/archivers/xarchiver/default.nix
new file mode 100644
index 000000000000..1a05c1ba2699
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/xarchiver/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchFromGitHub, gtk3, pkgconfig, intltool, libxslt }:
+
+stdenv.mkDerivation rec {
+  version = "0.5.4.14";
+  pname = "xarchiver";
+
+  src = fetchFromGitHub {
+    owner = "ib";
+    repo = "xarchiver";
+    rev = version;
+    sha256 = "1iklwgykgymrwcc5p1cdbh91v0ih1m58s3w9ndl5kyd44bwlb7px";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ gtk3 intltool libxslt ];
+
+  meta = {
+    description = "GTK frontend to 7z,zip,rar,tar,bzip2, gzip,arj, lha, rpm and deb (open and extract only)";
+    homepage = https://github.com/ib/xarchiver;
+    maintainers = [ stdenv.lib.maintainers.domenkozar ];
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/zip/default.nix b/nixpkgs/pkgs/tools/archivers/zip/default.nix
new file mode 100644
index 000000000000..09ba6510707b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/zip/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchurl, enableNLS ? false, libnatspec ? null, libiconv }:
+
+assert enableNLS -> libnatspec != null;
+
+stdenv.mkDerivation {
+  name = "zip-3.0";
+
+  src = fetchurl {
+    urls = [
+      ftp://ftp.info-zip.org/pub/infozip/src/zip30.tgz
+      https://src.fedoraproject.org/repo/pkgs/zip/zip30.tar.gz/7b74551e63f8ee6aab6fbc86676c0d37/zip30.tar.gz
+    ];
+    sha256 = "0sb3h3067pzf3a7mlxn1hikpcjrsvycjcnj9hl9b1c3ykcgvps7h";
+  };
+  patchPhase = ''
+    substituteInPlace unix/Makefile --replace 'CC = cc' ""
+  '';
+
+  hardeningDisable = [ "format" ];
+
+  makefile = "unix/Makefile";
+  buildFlags = if stdenv.isCygwin then [ "cygwin" ] else [ "generic" ];
+  installFlags = [
+    "prefix=${placeholder ''out''}"
+    "INSTALL=cp"
+  ];
+
+  patches = if (enableNLS && !stdenv.isCygwin) then [ ./natspec-gentoo.patch.bz2 ] else [];
+
+  buildInputs = stdenv.lib.optional enableNLS libnatspec
+    ++ stdenv.lib.optional stdenv.isCygwin libiconv;
+
+  meta = with stdenv.lib; {
+    description = "Compressor/archiver for creating and modifying zipfiles";
+    homepage = http://www.info-zip.org;
+    license = licenses.bsdOriginal;
+    platforms = platforms.all;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/zip/natspec-gentoo.patch.bz2 b/nixpkgs/pkgs/tools/archivers/zip/natspec-gentoo.patch.bz2
new file mode 100644
index 000000000000..816f32aba3c3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/zip/natspec-gentoo.patch.bz2
Binary files differdiff --git a/nixpkgs/pkgs/tools/archivers/zpaq/default.nix b/nixpkgs/pkgs/tools/archivers/zpaq/default.nix
new file mode 100644
index 000000000000..09c4e914bd88
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/zpaq/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchFromGitHub, perl, unzip }:
+
+stdenv.mkDerivation rec {
+  pname = "zpaq";
+  version = "7.15";
+
+  src = fetchFromGitHub {
+    owner = "zpaq";
+    repo = "zpaq";
+    rev = version;
+    sha256 = "0v44rlg9gvwc4ggr2lhcqll8ppal3dk7zsg5bqwcc5lg3ynk2pz4";
+  };
+
+  nativeBuildInputs = [ perl /* for pod2man */ ];
+  buildInputs = [ unzip ];
+
+  preBuild = let
+    CPPFLAGS = with stdenv; ""
+      + (lib.optionalString (!isi686 && !isx86_64) "-DNOJIT ")
+      + "-Dunix";
+    CXXFLAGS = "-O3 -DNDEBUG";
+  in ''
+    buildFlagsArray=( "CPPFLAGS=${CPPFLAGS}" "CXXFLAGS=${CXXFLAGS}" )
+  '';
+
+  enableParallelBuilding = true;
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with stdenv.lib; {
+    description = "Incremental journaling backup utility and archiver";
+    homepage = http://mattmahoney.net/dc/zpaq.html;
+    license = licenses.gpl3Plus ;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+    inherit version;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/zpaq/default.upstream b/nixpkgs/pkgs/tools/archivers/zpaq/default.upstream
new file mode 100644
index 000000000000..84daee900cec
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/zpaq/default.upstream
@@ -0,0 +1,6 @@
+url http://mattmahoney.net/dc/zpaq.html
+version_link 'zpaq[0-9]+[.]zip'
+version "[^0-9]*([0-9]+)[^0-9]*" '\1'
+name zpaq
+attribute_name zpaq
+minimize_overwrite
diff --git a/nixpkgs/pkgs/tools/archivers/zpaq/zpaqd.nix b/nixpkgs/pkgs/tools/archivers/zpaq/zpaqd.nix
new file mode 100644
index 000000000000..611654331c3b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/zpaq/zpaqd.nix
@@ -0,0 +1,48 @@
+{ stdenv, fetchurl, unzip }:
+
+let
+  # Generated upstream information
+  s = rec {
+    baseName="zpaqd";
+    version="715";
+    name="${baseName}-${version}";
+    hash="0868lynb45lm79yvx5f10lj5h6bfv0yck8whcls2j080vmk3n7rk";
+    url="http://mattmahoney.net/dc/zpaqd715.zip";
+    sha256="0868lynb45lm79yvx5f10lj5h6bfv0yck8whcls2j080vmk3n7rk";
+  };
+
+  compileFlags = stdenv.lib.concatStringsSep " " ([ "-O3" "-DNDEBUG" ]
+    ++ stdenv.lib.optional (stdenv.hostPlatform.isUnix) "-Dunix -pthread"
+    ++ stdenv.lib.optional (!stdenv.hostPlatform.isx86) "-DNOJIT");
+in
+stdenv.mkDerivation {
+  inherit (s) name version;
+
+  src = fetchurl {
+    inherit (s) url sha256;
+  };
+
+  sourceRoot = ".";
+
+  buildInputs = [ unzip ];
+
+  buildPhase = ''
+    g++ ${compileFlags} -fPIC --shared libzpaq.cpp -o libzpaq.so
+    g++ ${compileFlags} -L. -L"$out/lib" -lzpaq zpaqd.cpp -o zpaqd
+  '';
+
+  installPhase = ''
+    mkdir -p "$out"/{bin,include,lib,share/doc/zpaq}
+    cp libzpaq.so "$out/lib"
+    cp zpaqd "$out/bin"
+    cp libzpaq.h "$out/include"
+    cp readme_zpaqd.txt "$out/share/doc/zpaq"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "ZPAQ archive (de)compressor and algorithm development tool";
+    license = licenses.gpl3Plus ;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/archivers/zpaq/zpaqd.upstream b/nixpkgs/pkgs/tools/archivers/zpaq/zpaqd.upstream
new file mode 100644
index 000000000000..ef83c58e4600
--- /dev/null
+++ b/nixpkgs/pkgs/tools/archivers/zpaq/zpaqd.upstream
@@ -0,0 +1,5 @@
+url http://mattmahoney.net/dc/zpaqutil.html
+version_link 'zpaqd[0-9]+[.]zip'
+version "[^0-9]*([0-9]+)[^0-9]*" '\1'
+name zpaqd
+attribute_name zpaqd
diff --git a/nixpkgs/pkgs/tools/audio/abcm2ps/default.nix b/nixpkgs/pkgs/tools/audio/abcm2ps/default.nix
new file mode 100644
index 000000000000..575517829fff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/abcm2ps/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchFromGitHub, pkgconfig, which, docutils, freetype, pango }:
+
+stdenv.mkDerivation rec {
+  pname = "abcm2ps";
+  version = "8.14.6";
+
+  src = fetchFromGitHub {
+    owner = "leesavide";
+    repo = "abcm2ps";
+    rev = "v${version}";
+    sha256 = "1gqjqbd8wj0655vi8gcg2r5jqzafdlnfjzwa9z331ywhrskpm53w";
+  };
+
+  configureFlags = [
+    "--INSTALL=install"
+  ];
+
+  buildFlags = [
+    "CC=${stdenv.cc}/bin/cc"
+  ];
+
+  nativeBuildInputs = [ which pkgconfig docutils ];
+
+  buildInputs = [ freetype pango ];
+
+  meta = with stdenv.lib; {
+    homepage = http://moinejf.free.fr/;
+    license = licenses.gpl3;
+    description = "A command line program which converts ABC to music sheet in PostScript or SVG format";
+    platforms = platforms.unix;
+    maintainers = [ maintainers.dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/abcmidi/default.nix b/nixpkgs/pkgs/tools/audio/abcmidi/default.nix
new file mode 100644
index 000000000000..804f9f3ed24a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/abcmidi/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchzip }:
+
+stdenv.mkDerivation rec {
+  pname = "abcMIDI";
+  version = "2019.11.11";
+
+  src = fetchzip {
+    url = "https://ifdo.ca/~seymour/runabc/${pname}-${version}.zip";
+    sha256 = "0xid13jqhbknrs31j74iwgjm0h0c64w3kqk9g9am1pkjwxh8d460";
+  };
+
+  # There is also a file called "makefile" which seems to be preferred by the standard build phase
+  makefile = "Makefile";
+
+  meta = with stdenv.lib; {
+    homepage = http://abc.sourceforge.net/abcMIDI/;
+    downloadPage = https://ifdo.ca/~seymour/runabc/top.html;
+    license = licenses.gpl2Plus;
+    description = "Utilities for converting between abc and MIDI";
+    platforms = platforms.unix;
+    maintainers = [ maintainers.dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/accuraterip-checksum/default.nix b/nixpkgs/pkgs/tools/audio/accuraterip-checksum/default.nix
new file mode 100644
index 000000000000..4590a0dfbc30
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/accuraterip-checksum/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub, libsndfile }:
+
+stdenv.mkDerivation rec {
+  pname = "accuraterip-checksum";
+  version = "1.5";
+
+  src = fetchFromGitHub {
+    owner = "leo-bogert";
+    repo = "accuraterip-checksum";
+    rev = "version${version}";
+    sha256 = "1a6biy78jb094rifazn4a2g1dlhryg5q8p8gwj0a60ipl0vfb9bj";
+  };
+
+  buildInputs = [ libsndfile ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D -m755 accuraterip-checksum "$out/bin/accuraterip-checksum"
+
+    runHook postInstall
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Program for computing the AccurateRip checksum of singletrack WAV files";
+    homepage = https://github.com/leo-bogert/accuraterip-checksum;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/acoustid-fingerprinter/default.nix b/nixpkgs/pkgs/tools/audio/acoustid-fingerprinter/default.nix
new file mode 100644
index 000000000000..7b92b973df4c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/acoustid-fingerprinter/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl, fetchpatch, cmake, pkgconfig, qt4, taglib, chromaprint, ffmpeg }:
+
+stdenv.mkDerivation rec {
+  pname = "acoustid-fingerprinter";
+  version = "0.6";
+
+  src = fetchurl {
+    url = "https://bitbucket.org/acoustid/acoustid-fingerprinter/downloads/"
+        + "${pname}-${version}.tar.gz";
+    sha256 = "0ckglwy95qgqvl2l6yd8ilwpd6qs7yzmj8g7lnxb50d12115s5n0";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ cmake qt4 taglib chromaprint ffmpeg ];
+
+  cmakeFlags = [ "-DTAGLIB_MIN_VERSION=${stdenv.lib.getVersion taglib}" ];
+
+  patches = [
+    (fetchpatch {
+      url = "https://bitbucket.org/acoustid/acoustid-fingerprinter/commits/632e87969c3a5562a5d4842b03613267ba6236b2/raw";
+      sha256 = "15hm9knrpqn3yqrwyjz4zh2aypwbcycd0c5svrsy1fb2h2rh05jk";
+    })
+    ./ffmpeg.patch
+  ];
+
+  meta = with stdenv.lib; {
+    homepage = https://acoustid.org/fingerprinter;
+    description = "Audio fingerprinting tool using chromaprint";
+    license = stdenv.lib.licenses.gpl2Plus;
+    maintainers = with maintainers; [ ehmry ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/acoustid-fingerprinter/ffmpeg.patch b/nixpkgs/pkgs/tools/audio/acoustid-fingerprinter/ffmpeg.patch
new file mode 100644
index 000000000000..f3eacae26f77
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/acoustid-fingerprinter/ffmpeg.patch
@@ -0,0 +1,26 @@
+diff --git a/decoder.h b/decoder.h
+index 028f58f..4428ac1 100644
+--- a/decoder.h
++++ b/decoder.h
+@@ -39,6 +39,8 @@ extern "C" {
+ #define AV_SAMPLE_FMT_S16 SAMPLE_FMT_S16
+ #endif
+ 
++#define AVCODEC_MAX_AUDIO_FRAME_SIZE 192000
++
+ class Decoder
+ {
+ public:
+diff --git a/ffmpeg/audioconvert.h b/ffmpeg/audioconvert.h
+index 2b28e2e..a699986 100644
+--- a/ffmpeg/audioconvert.h
++++ b/ffmpeg/audioconvert.h
+@@ -79,7 +79,7 @@ int avcodec_channel_layout_num_channels(int64_t channel_layout);
+  * @param fmt_name Format name, or NULL if unknown
+  * @return Channel layout mask
+  */
+-uint64_t avcodec_guess_channel_layout(int nb_channels, enum CodecID codec_id, const char *fmt_name);
++uint64_t avcodec_guess_channel_layout(int nb_channels, enum AVCodecID codec_id, const char *fmt_name);
+ 
+ struct AVAudioConvert;
+ typedef struct AVAudioConvert AVAudioConvert;
diff --git a/nixpkgs/pkgs/tools/audio/aucdtect/default.nix b/nixpkgs/pkgs/tools/audio/aucdtect/default.nix
new file mode 100644
index 000000000000..ad9d5fb86905
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/aucdtect/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl, lib, rpmextract }:
+
+with lib;
+
+stdenv.mkDerivation rec {
+  pname = "aucdtect";
+  version = "0.8-2";
+
+  src = fetchurl {
+    url = "http://www.true-audio.com/ftp/${pname}-${version}.i586.rpm";
+    sha256 = "1lp5f0rq5b5n5il0c64m00gcfskarvgqslpryms9443d200y6mmd";
+  };
+
+  unpackCmd = "${rpmextract}/bin/rpmextract $src";
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 local/bin/auCDtect $out/bin/aucdtect
+
+    runHook postInstall
+  '';
+
+  dontStrip = true;
+
+  meta = with stdenv.lib; {
+    description = "Verify authenticity of lossless audio files";
+    homepage = "http://tausoft.org";
+    license = licenses.unfreeRedistributable;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/beets/alternatives-plugin.nix b/nixpkgs/pkgs/tools/audio/beets/alternatives-plugin.nix
new file mode 100644
index 000000000000..75d8975ab32c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/beets/alternatives-plugin.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub, beets, pythonPackages }:
+
+pythonPackages.buildPythonApplication rec {
+  pname = "beets-alternatives";
+  version = "0.9.0";
+
+  src = fetchFromGitHub {
+    repo = "beets-alternatives";
+    owner = "geigerzaehler";
+    # This is 0.8.2 with fixes against Beets 1.4.6 and Python 3 compatibility.
+    rev = "v${version}";
+    sha256 = "19160gwg5j6asy8mc21g2kf87mx4zs9x2gbk8q4r6330z4kpl5pm";
+  };
+
+  nativeBuildInputs = [ beets pythonPackages.nose ];
+
+  checkPhase = "nosetests";
+
+  meta = {
+    description = "Beets plugin to manage external files";
+    homepage = https://github.com/geigerzaehler/beets-alternatives;
+    maintainers = [ stdenv.lib.maintainers.aszlig ];
+    license = stdenv.lib.licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/beets/beet-check-tests.patch b/nixpkgs/pkgs/tools/audio/beets/beet-check-tests.patch
new file mode 100644
index 000000000000..2de97b86c8b4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/beets/beet-check-tests.patch
@@ -0,0 +1,17 @@
+diff --git a/test/cli_test.py b/test/cli_test.py
+index 26df140..2eb913c 100644
+--- a/test/cli_test.py
++++ b/test/cli_test.py
+@@ -372,12 +372,6 @@ class ToolListTest(TestHelper, TestCase):
+         self.assertIn('flac', stdout.getvalue())
+         self.assertIn('oggz-validate', stdout.getvalue())
+ 
+-    def test_found_mp3val(self):
+-        shutil.copy('/bin/echo', os.path.join(self.temp_dir, 'mp3val'))
+-        with captureStdout() as stdout:
+-            beets.ui._raw_main(['check', '--list-tools'])
+-        self.assertRegexpMatches(stdout.getvalue(), r'mp3val *found')
+-
+     def test_oggz_validate_not_found(self):
+         with captureStdout() as stdout:
+             beets.ui._raw_main(['check', '--list-tools'])
diff --git a/nixpkgs/pkgs/tools/audio/beets/check-plugin.nix b/nixpkgs/pkgs/tools/audio/beets/check-plugin.nix
new file mode 100644
index 000000000000..49ee97ead06a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/beets/check-plugin.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, beets, pythonPackages, flac, liboggz, mp3val }:
+
+pythonPackages.buildPythonApplication rec {
+  name = "beets-check";
+  version = "0.12.0";
+
+  src = fetchFromGitHub {
+    repo = "beets-check";
+    owner = "geigerzaehler";
+    rev = "v${version}";
+    sha256 = "0b2ijjf0gycs6b40sm33ida3sjygjiv4spb5mba52vysc7iwmnjn";
+  };
+
+  nativeBuildInputs = [ beets ];
+  checkInputs = [ pythonPackages.nose flac liboggz mp3val ];
+  propagatedBuildInputs = [ flac liboggz mp3val ];
+
+  # patch out broken tests
+  patches = [ ./beet-check-tests.patch ];
+
+  # patch out futures dependency, it is only needed for Python2 which we don't
+  # support.
+  prePatch = ''
+    sed -i "/futures/d" setup.py
+  '';
+
+  checkPhase = "nosetests";
+
+  meta = with stdenv.lib; {
+    description = "Beets plugin to Verify and store checksums in your library";
+    homepage = https://github.com/geigerzaehler/beets-check;
+    license = licenses.mit;
+    maintainers = with maintainers; [ lovesegfault ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/beets/copyartifacts-plugin.nix b/nixpkgs/pkgs/tools/audio/beets/copyartifacts-plugin.nix
new file mode 100644
index 000000000000..fac37962f3cf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/beets/copyartifacts-plugin.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchFromGitHub, beets, pythonPackages, glibcLocales }:
+
+pythonPackages.buildPythonApplication {
+  name = "beets-copyartifacts";
+
+  src = fetchFromGitHub {
+    repo = "beets-copyartifacts";
+    owner = "sbarakat";
+    rev = "d0bb75c8fc8fe125e8191d73de7ade6212aec0fd";
+    sha256 = "19b4lqq1p45n348ssmql60jylw2fw7vfj9j22nly5qj5qx51j3g5";
+  };
+
+  postPatch = ''
+    sed -i -e '/install_requires/,/\]/{/beets/d}' setup.py
+    sed -i -e '/namespace_packages/d' setup.py
+    printf 'from pkgutil import extend_path\n__path__ = extend_path(__path__, __name__)\n' >beetsplug/__init__.py
+
+    # Skip test which is already failing upstream.
+    sed -i -e '1i import unittest' \
+           -e 's/\(^ *\)# failing/\1@unittest.skip/' \
+           tests/test_reimport.py
+  '';
+
+  nativeBuildInputs = [ beets pythonPackages.nose glibcLocales ];
+
+  checkPhase = "LANG=en_US.UTF-8 nosetests";
+
+  meta = {
+    description = "Beets plugin to move non-music files during the import process";
+    homepage = https://github.com/sbarakat/beets-copyartifacts;
+    license = stdenv.lib.licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/beets/default.nix b/nixpkgs/pkgs/tools/audio/beets/default.nix
new file mode 100644
index 000000000000..b4dfa71ca965
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/beets/default.nix
@@ -0,0 +1,264 @@
+{ stdenv, fetchFromGitHub, writeScript, glibcLocales, diffPlugins
+, pythonPackages, imagemagick, gobject-introspection, gst_all_1
+, runtimeShell
+, fetchpatch
+
+# Attributes needed for tests of the external plugins
+, callPackage, beets
+
+, enableAbsubmit       ? stdenv.lib.elem stdenv.hostPlatform.system essentia-extractor.meta.platforms, essentia-extractor ? null
+, enableAcousticbrainz ? true
+, enableAcoustid       ? true
+, enableBadfiles       ? true, flac ? null, mp3val ? null
+, enableConvert        ? true, ffmpeg ? null
+, enableDiscogs        ? true
+, enableEmbyupdate     ? true
+, enableFetchart       ? true
+, enableGmusic         ? true
+, enableKeyfinder      ? true, keyfinder-cli ? null
+, enableKodiupdate     ? true
+, enableLastfm         ? true
+, enableLoadext        ? true
+, enableMpd            ? true
+, enablePlaylist       ? true
+, enableReplaygain     ? true, bs1770gain ? null
+, enableSonosUpdate    ? true
+, enableSubsonicupdate ? true
+, enableThumbnails     ? true
+, enableWeb            ? true
+
+# External plugins
+, enableAlternatives   ? false
+, enableCheck          ? false, liboggz ? null
+, enableCopyArtifacts  ? false
+
+, bashInteractive, bash-completion
+}:
+
+assert enableAbsubmit    -> essentia-extractor            != null;
+assert enableAcoustid    -> pythonPackages.pyacoustid     != null;
+assert enableBadfiles    -> flac != null && mp3val != null;
+assert enableCheck       -> flac != null && mp3val != null && liboggz != null;
+assert enableConvert     -> ffmpeg != null;
+assert enableDiscogs     -> pythonPackages.discogs_client != null;
+assert enableFetchart    -> pythonPackages.responses      != null;
+assert enableGmusic      -> pythonPackages.gmusicapi      != null;
+assert enableKeyfinder   -> keyfinder-cli != null;
+assert enableLastfm      -> pythonPackages.pylast         != null;
+assert enableMpd         -> pythonPackages.mpd2           != null;
+assert enableReplaygain  -> bs1770gain                    != null;
+assert enableSonosUpdate -> pythonPackages.soco           != null;
+assert enableThumbnails  -> pythonPackages.pyxdg          != null;
+assert enableWeb         -> pythonPackages.flask          != null;
+
+with stdenv.lib;
+
+let
+  optionalPlugins = {
+    absubmit = enableAbsubmit;
+    acousticbrainz = enableAcousticbrainz;
+    badfiles = enableBadfiles;
+    chroma = enableAcoustid;
+    convert = enableConvert;
+    discogs = enableDiscogs;
+    embyupdate = enableEmbyupdate;
+    fetchart = enableFetchart;
+    gmusic = enableGmusic;
+    keyfinder = enableKeyfinder;
+    kodiupdate = enableKodiupdate;
+    lastgenre = enableLastfm;
+    lastimport = enableLastfm;
+    loadext = enableLoadext;
+    mpdstats = enableMpd;
+    mpdupdate = enableMpd;
+    playlist = enablePlaylist;
+    replaygain = enableReplaygain;
+    sonosupdate = enableSonosUpdate;
+    subsonicupdate = enableSubsonicupdate;
+    thumbnails = enableThumbnails;
+    web = enableWeb;
+  };
+
+  pluginsWithoutDeps = [
+    "beatport" "bench" "bpd" "bpm" "bucket" "cue" "duplicates" "edit" "embedart"
+    "export" "filefilter" "freedesktop" "fromfilename" "ftintitle" "fuzzy"
+    "hook" "ihate" "importadded" "importfeeds" "info" "inline" "ipfs" "lyrics"
+    "mbcollection" "mbsubmit" "mbsync" "metasync" "missing" "permissions" "play"
+    "plexupdate" "random" "rewrite" "scrub" "smartplaylist" "spotify" "the"
+    "types" "zero"
+  ];
+
+  enabledOptionalPlugins = attrNames (filterAttrs (_: id) optionalPlugins);
+
+  allPlugins = pluginsWithoutDeps ++ attrNames optionalPlugins;
+  allEnabledPlugins = pluginsWithoutDeps ++ enabledOptionalPlugins;
+
+  testShell = "${bashInteractive}/bin/bash --norc";
+  completion = "${bash-completion}/share/bash-completion/bash_completion";
+
+  # This is a stripped down beets for testing of the external plugins.
+  externalTestArgs.beets = (beets.override {
+    enableAlternatives = false;
+    enableCopyArtifacts = false;
+  }).overrideAttrs (stdenv.lib.const {
+    doInstallCheck = false;
+  });
+
+  pluginArgs = externalTestArgs // { inherit pythonPackages; };
+
+  plugins = {
+    alternatives = callPackage ./alternatives-plugin.nix pluginArgs;
+    check = callPackage ./check-plugin.nix pluginArgs;
+    copyartifacts = callPackage ./copyartifacts-plugin.nix pluginArgs;
+  };
+
+in pythonPackages.buildPythonApplication rec {
+  pname = "beets";
+  version = "1.4.9";
+
+  src = fetchFromGitHub {
+    owner = "beetbox";
+    repo = "beets";
+    rev = "v${version}";
+    sha256 = "1qxdqbzvz97zgykzdwn78g2xyxmg0q2jdb12dnjnrwvhmjv67vi8";
+  };
+
+  propagatedBuildInputs = [
+    pythonPackages.six
+    pythonPackages.enum34
+    pythonPackages.jellyfish
+    pythonPackages.munkres
+    pythonPackages.musicbrainzngs
+    pythonPackages.mutagen
+    pythonPackages.pyyaml
+    pythonPackages.unidecode
+    pythonPackages.gst-python
+    pythonPackages.pygobject3
+    gobject-introspection
+  ] ++ optional enableAbsubmit      essentia-extractor
+    ++ optional enableAcoustid      pythonPackages.pyacoustid
+    ++ optional (enableFetchart
+              || enableEmbyupdate
+              || enableKodiupdate
+              || enableLoadext
+              || enablePlaylist
+              || enableSubsonicupdate
+              || enableAcousticbrainz)
+                                    pythonPackages.requests
+    ++ optional enableCheck         plugins.check
+    ++ optional enableConvert       ffmpeg
+    ++ optional enableDiscogs       pythonPackages.discogs_client
+    ++ optional enableGmusic        pythonPackages.gmusicapi
+    ++ optional enableKeyfinder     keyfinder-cli
+    ++ optional enableLastfm        pythonPackages.pylast
+    ++ optional enableMpd           pythonPackages.mpd2
+    ++ optional enableSonosUpdate   pythonPackages.soco
+    ++ optional enableThumbnails    pythonPackages.pyxdg
+    ++ optional enableWeb           pythonPackages.flask
+    ++ optional enableAlternatives  plugins.alternatives
+    ++ optional enableCopyArtifacts plugins.copyartifacts;
+
+  buildInputs = [
+    imagemagick
+  ] ++ (with gst_all_1; [
+    gst-plugins-base
+    gst-plugins-good
+    gst-plugins-ugly
+  ]);
+
+  checkInputs = with pythonPackages; [
+    beautifulsoup4
+    mock
+    nose
+    rarfile
+    responses
+  ];
+
+  patches = [
+    ./replaygain-default-bs1770gain.patch
+    ./keyfinder-default-bin.patch
+  ];
+
+  postPatch = ''
+    sed -i -e '/assertIn.*item.*path/d' test/test_info.py
+    echo echo completion tests passed > test/rsrc/test_completion.sh
+
+    sed -i -e '/^BASH_COMPLETION_PATHS *=/,/^])$/ {
+      /^])$/i u"${completion}"
+    }' beets/ui/commands.py
+  '' + optionalString enableBadfiles ''
+    sed -i -e '/self\.run_command(\[/ {
+      s,"flac","${flac.bin}/bin/flac",
+      s,"mp3val","${mp3val}/bin/mp3val",
+    }' beetsplug/badfiles.py
+  '' + optionalString enableConvert ''
+    sed -i -e 's,\(util\.command_output(\)\([^)]\+\)),\1[b"${ffmpeg.bin}/bin/ffmpeg" if args[0] == b"ffmpeg" else args[0]] + \2[1:]),' beetsplug/convert.py
+  '' + optionalString enableReplaygain ''
+    sed -i -re '
+      s!^( *cmd *= *b?['\'''"])(bs1770gain['\'''"])!\1${bs1770gain}/bin/\2!
+    ' beetsplug/replaygain.py
+    sed -i -e 's/if has_program.*bs1770gain.*:/if True:/' \
+      test/test_replaygain.py
+  '';
+
+  postInstall = ''
+    mkdir -p $out/share/zsh/site-functions
+    cp extra/_beet $out/share/zsh/site-functions/
+  '';
+
+  doCheck = true;
+
+  preCheck = ''
+    find beetsplug -mindepth 1 \
+      \! -path 'beetsplug/__init__.py' -a \
+      \( -name '*.py' -o -path 'beetsplug/*/__init__.py' \) -print \
+      | sed -n -re 's|^beetsplug/([^/.]+).*|\1|p' \
+      | sort -u > plugins_available
+
+     ${diffPlugins allPlugins "plugins_available"}
+  '';
+
+  checkPhase = ''
+    runHook preCheck
+
+    LANG=en_US.UTF-8 \
+    LOCALE_ARCHIVE=${assert stdenv.isLinux; glibcLocales}/lib/locale/locale-archive \
+    BEETS_TEST_SHELL="${testShell}" \
+    BASH_COMPLETION_SCRIPT="${completion}" \
+    HOME="$(mktemp -d)" nosetests -v
+
+    runHook postCheck
+  '';
+
+  doInstallCheck = true;
+
+  installCheckPhase = ''
+    runHook preInstallCheck
+
+    tmphome="$(mktemp -d)"
+
+    EDITOR="${writeScript "beetconfig.sh" ''
+      #!${runtimeShell}
+      cat > "$1" <<CFG
+      plugins: ${concatStringsSep " " allEnabledPlugins}
+      CFG
+    ''}" HOME="$tmphome" "$out/bin/beet" config -e
+    EDITOR=true HOME="$tmphome" "$out/bin/beet" config -e
+
+    runHook postInstallCheck
+  '';
+
+  makeWrapperArgs = [ "--set GI_TYPELIB_PATH \"$GI_TYPELIB_PATH\"" "--set GST_PLUGIN_SYSTEM_PATH_1_0 \"$GST_PLUGIN_SYSTEM_PATH_1_0\"" ];
+
+  passthru = {
+    externalPlugins = plugins;
+  };
+
+  meta = {
+    description = "Music tagger and library organizer";
+    homepage = http://beets.io;
+    license = licenses.mit;
+    maintainers = with maintainers; [ aszlig domenkozar pjones ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/beets/keyfinder-default-bin.patch b/nixpkgs/pkgs/tools/audio/beets/keyfinder-default-bin.patch
new file mode 100644
index 000000000000..1ea195a678e8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/beets/keyfinder-default-bin.patch
@@ -0,0 +1,36 @@
+diff --git a/beetsplug/keyfinder.py b/beetsplug/keyfinder.py
+index 34a4abc..59e8539 100644
+--- a/beetsplug/keyfinder.py
++++ b/beetsplug/keyfinder.py
+@@ -30,7 +30,7 @@ class KeyFinderPlugin(BeetsPlugin):
+     def __init__(self):
+         super(KeyFinderPlugin, self).__init__()
+         self.config.add({
+-            u'bin': u'KeyFinder',
++            u'bin': u'keyfinder-cli',
+             u'auto': True,
+             u'overwrite': False,
+         })
+@@ -59,8 +59,7 @@ class KeyFinderPlugin(BeetsPlugin):
+                 continue
+ 
+             try:
+-                output = util.command_output([bin, '-f',
+-                                              util.syspath(item.path)])
++                output = util.command_output([bin, util.syspath(item.path)])
+             except (subprocess.CalledProcessError, OSError) as exc:
+                 self._log.error(u'execution failed: {0}', exc)
+                 continue
+diff --git a/test/test_keyfinder.py b/test/test_keyfinder.py
+index 57e2bcd..c1ee916 100644
+--- a/test/test_keyfinder.py
++++ b/test/test_keyfinder.py
+@@ -44,7 +44,7 @@ class KeyFinderTest(unittest.TestCase, TestHelper):
+         item.load()
+         self.assertEqual(item['initial_key'], 'C#m')
+         command_output.assert_called_with(
+-            ['KeyFinder', '-f', util.syspath(item.path)])
++            ['keyfinder-cli', util.syspath(item.path)])
+ 
+     def test_add_key_on_import(self, command_output):
+         command_output.return_value = 'dbm'
diff --git a/nixpkgs/pkgs/tools/audio/beets/replaygain-default-bs1770gain.patch b/nixpkgs/pkgs/tools/audio/beets/replaygain-default-bs1770gain.patch
new file mode 100644
index 000000000000..538f9e933039
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/beets/replaygain-default-bs1770gain.patch
@@ -0,0 +1,17 @@
+diff --git a/beetsplug/replaygain.py b/beetsplug/replaygain.py
+index 40b3a3a..9b54a5a 100644
+--- a/beetsplug/replaygain.py
++++ b/beetsplug/replaygain.py
+@@ -627,11 +627,10 @@ class ReplayGainPlugin(BeetsPlugin):
+         super(ReplayGainPlugin, self).__init__()
+         self.import_stages = [self.imported]
+ 
+-        # default backend is 'command' for backward-compatibility.
+         self.config.add({
+             'overwrite': False,
+             'auto': True,
+-            'backend': u'command',
++            'backend': u'bs1770gain',
+             'targetlevel': 89,
+         })
+ 
diff --git a/nixpkgs/pkgs/tools/audio/bpm-tools/default.nix b/nixpkgs/pkgs/tools/audio/bpm-tools/default.nix
new file mode 100644
index 000000000000..035fbf095338
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/bpm-tools/default.nix
@@ -0,0 +1,32 @@
+{
+  stdenv,
+  fetchurl,
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bpm-tools";
+  version = "0.3";
+
+  src = fetchurl {
+    url = "http://www.pogo.org.uk/~mark/bpm-tools/releases/bpm-tools-${version}.tar.gz";
+    sha256 = "151vfbs8h3cibs7kbdps5pqrsxhpjv16y2iyfqbxzsclylgfivrp";
+  };
+
+  patchPhase = ''
+    patchShebangs bpm-tag
+    patchShebangs bpm-graph
+  '';
+
+  installFlags = [
+    "PREFIX=${placeholder "out"}"
+  ];
+
+  meta = with stdenv.lib; {
+    homepage = "http://www.pogo.org.uk/~mark/bpm-tools/";
+    description = "Automatically calculate BPM (tempo) of music files";
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ doronbehar ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/audio/darkice/default.nix b/nixpkgs/pkgs/tools/audio/darkice/default.nix
new file mode 100644
index 000000000000..c5f7bcd5a71d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/darkice/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchurl, pkgconfig
+, libjack2, alsaLib, libpulseaudio
+, faac, lame, libogg, libopus, libvorbis, libsamplerate
+}:
+
+stdenv.mkDerivation rec {
+  pname = "darkice";
+  version = "1.3";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/darkice/${version}/darkice-${version}.tar.gz";
+    sha256 = "1rlxds7ssq7nk2in4s46xws7xy9ylxsqgcz85hxjgh17lsm0y39c";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [
+    libopus libvorbis libogg libpulseaudio alsaLib libsamplerate libjack2 lame
+  ];
+
+  NIX_CFLAGS_COMPILE = "-fpermissive";
+
+  configureFlags = [
+    "--with-faac-prefix=${faac}"
+    "--with-lame-prefix=${lame.lib}"
+  ];
+
+  patches = [ ./fix-undeclared-memmove.patch ];
+
+  enableParallelBuilding = true;
+
+  meta = {
+    homepage = http://darkice.org/;
+    description = "Live audio streamer";
+    license = stdenv.lib.licenses.gpl3;
+    maintainers = with stdenv.lib.maintainers; [ ikervagyok fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/darkice/fix-undeclared-memmove.patch b/nixpkgs/pkgs/tools/audio/darkice/fix-undeclared-memmove.patch
new file mode 100644
index 000000000000..9b8baf9701d3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/darkice/fix-undeclared-memmove.patch
@@ -0,0 +1,13 @@
+diff --git a/src/FaacEncoder.cpp b/src/FaacEncoder.cpp
+index 1100226..3ab1805 100644
+--- a/src/FaacEncoder.cpp
++++ b/src/FaacEncoder.cpp
+@@ -36,7 +36,7 @@
+ // compile the whole file only if faac support configured in
+ #ifdef HAVE_FAAC_LIB
+ 
+-
++#include <string.h>
+ 
+ #include "Exception.h"
+ #include "Util.h"
diff --git a/nixpkgs/pkgs/tools/audio/dir2opus/default.nix b/nixpkgs/pkgs/tools/audio/dir2opus/default.nix
new file mode 100644
index 000000000000..d6c988ef0bed
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/dir2opus/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl, python, mutagen, wrapPython, opusTools, mpg123 }:
+
+let version = "0.12.2"; in
+stdenv.mkDerivation rec {
+  pname = "dir2opus";
+  inherit version;
+
+  pythonPath = [ mutagen ];
+  buildInputs = [ wrapPython ];
+  propagatedBuildInputs = [ opusTools mpg123 ];
+
+  src = fetchurl {
+    url = "https://github.com/ehmry/dir2opus/archive/${version}.tar.gz";
+    name = "${pname}-${version}.tar.gz";
+    sha256 = "0bl8fa9zhccihnj1v3lpz5jb737frf9za06xb7j5rsjws6xky80d";
+  };
+
+  postPatch = "sed -i -e 's|#!/usr/bin/python|#!${python}/bin/python|' dir2opus";
+
+  installPhase =
+    ''
+      mkdir -p $out/bin $out/share/man/man1
+      cp dir2opus $out/bin
+      cp dir2opus.1 $out/share/man/man1
+    '';
+
+  postFixup = "wrapPythonPrograms";
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/ehmry/dir2opus;
+    maintainers = [ maintainers.ehmry ];
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/essentia-extractor/default.nix b/nixpkgs/pkgs/tools/audio/essentia-extractor/default.nix
new file mode 100644
index 000000000000..0d2bb17a75d4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/essentia-extractor/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchurl }:
+let
+  arch_table = {
+    "x86_64-linux" = "linux-x86_64";
+    "i686-linux" = "linux-i686";
+  };
+
+  sha_table = {
+    "x86_64-linux" =
+      "d9902aadac4f442992877945da2a6fe8d6ea6b0de314ca8ac0c28dc5f253f7d8";
+    "i686-linux" =
+      "46deb0a053b4910c4e68737a7b6556ff5360260c8f86652f91a0130445f5c949";
+  };
+
+  arch = arch_table.${stdenv.system};
+  sha = sha_table.${stdenv.system};
+in stdenv.mkDerivation rec {
+  pname = "essentia-extractor";
+  version = "2.1_beta2";
+
+  src = fetchurl {
+    url =
+      "ftp://ftp.acousticbrainz.org/pub/acousticbrainz/essentia-extractor-v${version}-${arch}.tar.gz";
+    sha256 = sha;
+  };
+
+  unpackPhase = "unpackFile $src ; export sourceRoot=.";
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp streaming_extractor_music $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = "https://acousticbrainz.org/download";
+    description = "AcousticBrainz audio feature extractor";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ lovesegfault ];
+    platforms = [ "x86_64-linux" "i686-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/ezstream/default.nix b/nixpkgs/pkgs/tools/audio/ezstream/default.nix
new file mode 100644
index 000000000000..fbf90d2211c4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/ezstream/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl, libiconv, libshout, taglib, libxml2, pkgconfig }:
+
+stdenv.mkDerivation rec {
+  pname = "ezstream";
+  version = "0.6.0";
+
+  src = fetchurl {
+    url = "https://ftp.osuosl.org/pub/xiph/releases/ezstream/${pname}-${version}.tar.gz";
+    sha256 = "f86eb8163b470c3acbc182b42406f08313f85187bd9017afb8b79b02f03635c9";
+  };
+
+  buildInputs = [ libiconv libshout taglib libxml2 ];
+  nativeBuildInputs = [ pkgconfig ];
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    description = "A command line source client for Icecast media streaming servers";
+    longDescription = ''
+      Ezstream is a command line source client for Icecast media
+      streaming servers. It began as the successor of the old "shout"
+      utility, and has since gained a lot of useful features.
+
+      In its basic mode of operation, it streams media files or data
+      from standard input without reencoding and thus requires only
+      very little CPU resources.
+    '';
+    homepage = http://icecast.org/ezstream/;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.barrucadu ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/glyr/default.nix b/nixpkgs/pkgs/tools/audio/glyr/default.nix
new file mode 100644
index 000000000000..2acca1510400
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/glyr/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub, cmake
+, curl, glib, sqlite, pkgconfig }:
+
+stdenv.mkDerivation rec {
+  version = "1.0.10";
+  pname = "glyr";
+
+  src = fetchFromGitHub {
+    owner = "sahib";
+    repo = "glyr";
+    rev = version;
+    sha256 = "1miwbqzkhg0v3zysrwh60pj9sv6ci4lzq2vq2hhc6pc6hdyh8xyr";
+  };
+
+  nativeBuildInputs = [ cmake pkgconfig ];
+  buildInputs = [ sqlite glib curl ];
+
+  meta = with stdenv.lib; {
+    license = licenses.lgpl3;
+    description = "A music related metadata searchengine";
+    homepage = https://github.com/sahib/glyr;
+    maintainers = [ maintainers.sternenseemann ];
+    platforms = platforms.unix;
+  };
+}
+
+
diff --git a/nixpkgs/pkgs/tools/audio/google-music-scripts/default.nix b/nixpkgs/pkgs/tools/audio/google-music-scripts/default.nix
new file mode 100644
index 000000000000..f7e96971ab19
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/google-music-scripts/default.nix
@@ -0,0 +1,35 @@
+{ lib, python3 }:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "google-music-scripts";
+  version = "4.0.1";
+
+  src = python3.pkgs.fetchPypi {
+    inherit pname version;
+    sha256 = "5b2e9fdde8781a6d226984f0b61add2415a3804123ceeecb20fcc8527de9389d";
+  };
+
+  patches = [ ./loguru.patch ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    appdirs
+    audio-metadata
+    google-music
+    google-music-proto
+    google-music-utils
+    loguru
+    pendulum
+    natsort
+    tomlkit
+  ];
+
+  # No tests
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = https://github.com/thebigmunch/google-music-scripts;
+    description = "A CLI utility for interacting with Google Music";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jakewaksbaum ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/google-music-scripts/loguru.patch b/nixpkgs/pkgs/tools/audio/google-music-scripts/loguru.patch
new file mode 100644
index 000000000000..141ce044c431
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/google-music-scripts/loguru.patch
@@ -0,0 +1,22 @@
+--- a/pyproject.toml
++++ b/pyproject.toml
+@@ -24,7 +24,7 @@ audio-metadata = "^0.4"
+ google-music = "^3.0"
+ google-music-proto = "^2.4"
+ google-music-utils = "^2.1"
+-loguru = "^0.2"
++loguru = "^0.3"
+ pendulum = "^2.0"
+ natsort = ">=5.0,<7.0"
+ tomlkit = "^0.5"
+--- a/setup.py
++++ b/setup.py
+@@ -16,7 +16,7 @@ install_requires = \
+  'google-music-proto>=2.4,<3.0',
+  'google-music-utils>=2.1,<3.0',
+  'google-music>=3.0,<4.0',
+- 'loguru>=0.2,<0.3',
++ 'loguru>=0.3,<0.4',
+  'natsort>=5.0,<7.0',
+  'pendulum>=2.0,<3.0',
+  'tomlkit>=0.5,<0.6']
diff --git a/nixpkgs/pkgs/tools/audio/gvolicon/default.nix b/nixpkgs/pkgs/tools/audio/gvolicon/default.nix
new file mode 100644
index 000000000000..9029eb38b06f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/gvolicon/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, makeWrapper, alsaLib, pkgconfig, fetchgit, gtk3, gnome3, gdk-pixbuf, librsvg, wrapGAppsHook }:
+
+stdenv.mkDerivation {
+  name = "gvolicon-2014-04-28";
+  src = fetchgit {
+    url = "https://github.com/Unia/gvolicon";
+    rev = "0d65a396ba11f519d5785c37fec3e9a816217a07";
+    sha256 = "1sr9wyy7w898vq63yd003yp3k66hd4vm8b0qsm9zvmwmpiz4wvln";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [
+    makeWrapper alsaLib gtk3 gdk-pixbuf gnome3.adwaita-icon-theme
+    librsvg wrapGAppsHook
+  ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  NIX_CFLAGS_COMPILE = "-D_POSIX_C_SOURCE";
+
+  meta = {
+    description = "A simple and lightweight volume icon that sits in your system tray";
+    homepage = https://github.com/Unia/gvolicon;
+    platforms = stdenv.lib.platforms.linux;
+    license = stdenv.lib.licenses.gpl3Plus;
+    maintainers = [ stdenv.lib.maintainers.bennofs ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/liquidsoap/full.nix b/nixpkgs/pkgs/tools/audio/liquidsoap/full.nix
new file mode 100644
index 000000000000..f69e60117ce3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/liquidsoap/full.nix
@@ -0,0 +1,60 @@
+{ stdenv, makeWrapper, fetchurl, which, pkgconfig
+, ocamlPackages
+, libao, portaudio, alsaLib, libpulseaudio, libjack2
+, libsamplerate, libmad, taglib, lame, libogg
+, libvorbis, speex, libtheora, libopus, fdk_aac
+, faad2, flac, ladspaH, ffmpeg, frei0r, dssi
+}:
+
+let
+  pname = "liquidsoap";
+  version = "1.3.4";
+
+  packageFilters = map (p: "-e '/ocaml-${p}/d'" )
+    [ "gstreamer" "shine" "aacplus" "schroedinger"
+      "voaacenc" "soundtouch" "gavl" "lo"
+    ];
+in
+stdenv.mkDerivation {
+  name = "${pname}-full-${version}";
+
+  src = fetchurl {
+    url = "https://github.com/savonet/${pname}/releases/download/${version}/${pname}-${version}-full.tar.bz2";
+    sha256 = "11l1h42sljfxcdhddc8klya4bk99j7a1pndwnzvscb04pvmfmlk0";
+  };
+
+  preConfigure = /* we prefer system-wide libs */ ''
+    sed -i "s|gsed|sed|" Makefile
+    make bootstrap
+    # autoreconf -vi # use system libraries
+
+    sed ${toString packageFilters} PACKAGES.default > PACKAGES
+  '';
+
+  postFixup = ''
+    wrapProgram $out/bin/liquidsoap --set LIQ_LADSPA_PATH /run/current-system/sw/lib/ladspa
+  '';
+
+  configureFlags = [ "--localstatedir=/var" ];
+
+  nativeBuildInputs = [ makeWrapper pkgconfig ];
+  buildInputs =
+    [ which ocamlPackages.ocaml ocamlPackages.findlib
+      libao portaudio alsaLib libpulseaudio libjack2
+      libsamplerate libmad taglib lame libogg
+      libvorbis speex libtheora libopus fdk_aac
+      faad2 flac ladspaH ffmpeg frei0r dssi
+      ocamlPackages.xmlm ocamlPackages.ocaml_pcre
+      ocamlPackages.camomile
+    ];
+
+  hardeningDisable = [ "format" "fortify" ];
+
+  meta = with stdenv.lib; {
+    description = "Swiss-army knife for multimedia streaming";
+    homepage = https://www.liquidsoap.info/;
+    maintainers = with maintainers; [ ehmry ];
+    license = licenses.gpl2;
+    platforms = ocamlPackages.ocaml.meta.platforms or [];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/mididings/default.nix b/nixpkgs/pkgs/tools/audio/mididings/default.nix
new file mode 100644
index 000000000000..35d1af1e7676
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/mididings/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, pythonPackages, fetchFromGitHub, pkg-config, glib, alsaLib, libjack2  }:
+
+pythonPackages.buildPythonApplication {
+  version = "20151117";
+  pname = "mididings";
+
+  src = fetchFromGitHub {
+    owner = "dsacre";
+    repo = "mididings";
+    rev = "bbec99a8c878a2a7029e78e84fc736e4a68ed5a0";
+    sha256 = "1pdf5mib87zy7yjh9vpasja419h28wvgq6x5hw2hkm7bg9ds4p2m";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ glib alsaLib libjack2 pythonPackages.boost ];
+  propagatedBuildInputs = with pythonPackages; [ decorator ]
+    # for livedings
+    ++ [ tkinter pyliblo ]
+    # for mididings.extra
+    ++ [ dbus-python pyinotify ]
+    # to read/write standard MIDI files
+    ++ [ pysmf ]
+    # so mididings knows where to look for config files
+    ++ [ pyxdg ];
+
+  preBuild = with stdenv.lib.versions; ''
+    substituteInPlace setup.py \
+      --replace boost_python "boost_python${major pythonPackages.python.version}${minor pythonPackages.python.version}"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A MIDI router and processor based on Python, supporting ALSA and JACK MIDI";
+    homepage = "http://das.nasophon.de/mididings";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.gnidorah ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/mp3cat/default.nix b/nixpkgs/pkgs/tools/audio/mp3cat/default.nix
new file mode 100644
index 000000000000..acd11bc75e6f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/mp3cat/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "mp3cat";
+  version = "0.5";
+
+  src = fetchFromGitHub {
+    owner = "tomclegg";
+    repo = pname;
+    rev = version;
+    sha256 = "0n6hjg2wgd06m561zc3ib5w2m3pwpf74njv2b2w4sqqh5md2ymfr";
+  };
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+  ];
+
+  installTargets = [
+    "install_bin"
+  ];
+
+  meta = with stdenv.lib; {
+    description = "A command line program which concatenates MP3 files";
+    longDescription = ''
+      A command line program which concatenates MP3 files, mp3cat
+      only outputs MP3 frames with valid headers, even if there is extra garbage
+      in its input stream
+    '';
+    homepage = https://github.com/tomclegg/mp3cat;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.omnipotententity ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/mpd-mpris/default.nix b/nixpkgs/pkgs/tools/audio/mpd-mpris/default.nix
new file mode 100644
index 000000000000..a4cea2b07ed6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/mpd-mpris/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "mpd-mpris";
+  version = "0.2.3";
+
+  src = fetchFromGitHub {
+    owner = "natsukagami";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "19sz1ykdzradhpdwdvvxh9scp5sv2i072qircs0q4374cdgccfbb";
+  };
+
+  modSha256 = "1a95kfy8w952269x4llbl0afyxr5fjkg30mxsn81zdh5wr8gabwh";
+
+  subPackages = [ "cmd/${pname}" ];
+
+  postInstall = ''
+    substituteInPlace mpd-mpris.service \
+      --replace /usr/bin $out/bin
+    mkdir -p $out/lib/systemd/user
+    cp mpd-mpris.service $out/lib/systemd/user
+  '';
+
+  meta = with stdenv.lib; {
+    description = "An implementation of the MPRIS protocol for MPD";
+    homepage = "https://github.com/natsukagami/mpd-mpris";
+    license = licenses.mit;
+    maintainers = with maintainers; [ doronbehar ];
+    platforms = platforms.linux;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/audio/mpdas/default.nix b/nixpkgs/pkgs/tools/audio/mpdas/default.nix
new file mode 100644
index 000000000000..bfb4f81c8166
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/mpdas/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub, pkgconfig, mpd_clientlib, curl }:
+
+stdenv.mkDerivation rec {
+  pname = "mpdas";
+  version = "0.4.5";
+
+  src = fetchFromGitHub {
+    owner = "hrkfdn";
+    repo = "mpdas";
+    rev = version;
+    sha256 = "0fcqc4w6iwbi1n3cllcgj0k61zffhqkbr8668myxap21m35x8y1r";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+
+  buildInputs = [ mpd_clientlib curl ];
+
+  makeFlags = [ "CONFIG=/etc" "DESTDIR=" "PREFIX=$(out)" ];
+
+  meta = with stdenv.lib; {
+    description = "Music Player Daemon AudioScrobbler";
+    homepage = https://50hz.ws/mpdas/;
+    license = licenses.bsd3;
+    maintainers = [ maintainers.taketwo ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/mpdcron/Gemfile b/nixpkgs/pkgs/tools/audio/mpdcron/Gemfile
new file mode 100644
index 000000000000..e0814bc4ddab
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/mpdcron/Gemfile
@@ -0,0 +1,2 @@
+source "https://rubygems.org"
+gem "nokogiri"
diff --git a/nixpkgs/pkgs/tools/audio/mpdcron/Gemfile.lock b/nixpkgs/pkgs/tools/audio/mpdcron/Gemfile.lock
new file mode 100644
index 000000000000..39df4ddec9f7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/mpdcron/Gemfile.lock
@@ -0,0 +1,15 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    mini_portile2 (2.4.0)
+    nokogiri (1.10.3)
+      mini_portile2 (~> 2.4.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  nokogiri
+
+BUNDLED WITH
+   1.17.2
diff --git a/nixpkgs/pkgs/tools/audio/mpdcron/default.nix b/nixpkgs/pkgs/tools/audio/mpdcron/default.nix
new file mode 100644
index 000000000000..a791a81db351
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/mpdcron/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchFromGitHub, autoconf, automake, libtool, pkgconfig, glib, libdaemon
+, mpd_clientlib, curl, sqlite, bundlerEnv, libnotify, pandoc }:
+
+let
+  gemEnv = bundlerEnv {
+    name = "mpdcron-bundle";
+    gemdir = ./.;
+  };
+in stdenv.mkDerivation {
+  version = "20161228";
+  pname = "mpdcron";
+
+  src = fetchFromGitHub {
+    owner = "alip";
+    repo = "mpdcron";
+    rev = "e49e6049b8693d31887c538ddc7b19f5e8ca476b";
+    sha256 = "0vdksf6lcgmizqr5mqp0bbci259k0dj7gpmhx32md41jlmw5skaw";
+  };
+
+  meta = with stdenv.lib; {
+    description = "A cron like daemon for mpd";
+    homepage    = http://alip.github.io/mpdcron/;
+    license     = licenses.gpl2;
+    platforms   = platforms.unix;
+    maintainers = with maintainers; [ lovek323 manveru ];
+  };
+
+  buildInputs =
+    [ autoconf automake libtool pkgconfig glib libdaemon pandoc
+      mpd_clientlib curl sqlite gemEnv.wrappedRuby libnotify ];
+
+  preConfigure = ''
+    ./autogen.sh
+  '';
+
+  configureFlags = [ "--enable-gmodule" "--with-standard-modules=all" ];
+}
diff --git a/nixpkgs/pkgs/tools/audio/mpdcron/gemset.nix b/nixpkgs/pkgs/tools/audio/mpdcron/gemset.nix
new file mode 100644
index 000000000000..025eb96b0652
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/mpdcron/gemset.nix
@@ -0,0 +1,23 @@
+{
+  mini_portile2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15zplpfw3knqifj9bpf604rb3wc1vhq6363pd6lvhayng8wql5vy";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+  nokogiri = {
+    dependencies = ["mini_portile2"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02bjydih0j515szfv9mls195cvpyidh6ixm7dwbl3s2sbaxxk5s4";
+      type = "gem";
+    };
+    version = "1.10.3";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/audio/mpdris2/default.nix b/nixpkgs/pkgs/tools/audio/mpdris2/default.nix
new file mode 100644
index 000000000000..0dbdcd7d25a3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/mpdris2/default.nix
@@ -0,0 +1,55 @@
+{ stdenv
+, autoreconfHook
+, fetchFromGitHub
+, glib
+, gobject-introspection
+, intltool
+, libnotify
+, python3
+, wrapGAppsHook
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "mpDris2";
+  version = "0.8";
+  format = "other";
+  strictDeps = false; # https://github.com/NixOS/nixpkgs/issues/56943
+
+  src = fetchFromGitHub {
+    owner = "eonpatapon";
+    repo = pname;
+    rev = version;
+    sha256 = "048b8acsd1b8kcxzd9fsh5p9g2an9c4rznicfcpyrsjz5syv894h";
+  };
+
+  preConfigure = ''
+    intltoolize -f
+  '';
+
+  nativeBuildInputs = [
+    autoreconfHook
+    gobject-introspection
+    intltool
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    glib
+    libnotify
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    dbus-python
+    mpd2
+    mutagen
+    pygobject3
+  ];
+
+  meta = with stdenv.lib; {
+    description = "MPRIS 2 support for mpd";
+    homepage = https://github.com/eonpatapon/mpDris2/;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/mpdsync/default.nix b/nixpkgs/pkgs/tools/audio/mpdsync/default.nix
new file mode 100644
index 000000000000..51f5ba656168
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/mpdsync/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, python2, fetchFromGitHub }:
+with python2.pkgs;
+stdenv.mkDerivation {
+  name = "mpdsync-2017-06-15";
+
+  src = fetchFromGitHub {
+    owner = "alphapapa";
+    repo = "mpdsync";
+    rev = "da90058f44dd9578cc5f2fb96a1fb2b26da40d07";
+    sha256 = "1mfg3ipqj5dvyyqbgp6ia6sc1ja5gmm2c9mfrwx0jw2dl182if6q";
+  };
+
+  pythonPath = [ mpd2 ];
+
+  nativeBuildInputs = [
+    wrapPython
+  ];
+
+  dontBuild = true;
+
+  installPhase = "install -D mpdsync.py $out/bin/mpdsync";
+  postFixup = "wrapPythonPrograms";
+
+}
diff --git a/nixpkgs/pkgs/tools/audio/opl3bankeditor/default.nix b/nixpkgs/pkgs/tools/audio/opl3bankeditor/default.nix
new file mode 100644
index 000000000000..0503f9bad694
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/opl3bankeditor/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, mkDerivation, fetchFromGitHub, cmake, qttools, alsaLib }:
+
+mkDerivation rec {
+  version = "1.5";
+  pname = "OPL3BankEditor";
+
+  src = fetchFromGitHub {
+    owner = "Wohlstand";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "16va5xfbyn2m63722ab5yph0l7kmghkbk6dkia93041mfhdyg9rc";
+    fetchSubmodules = true;
+  };
+
+  buildInputs = [
+    alsaLib qttools
+  ];
+  nativeBuildInputs = [ cmake ];
+
+  meta = with stdenv.lib; {
+    description = "A small cross-platform editor of the OPL3 FM banks of different formats";
+    homepage = src.meta.homepage;
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ gnidorah ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/opl3bankeditor/opn2bankeditor.nix b/nixpkgs/pkgs/tools/audio/opl3bankeditor/opn2bankeditor.nix
new file mode 100644
index 000000000000..d8f15a65b45b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/opl3bankeditor/opn2bankeditor.nix
@@ -0,0 +1,19 @@
+{ opl3bankeditor, fetchFromGitHub }:
+
+opl3bankeditor.overrideAttrs (oldAttrs: rec {
+  version = "1.3-beta";
+  pname = "OPN2BankEditor";
+
+  src = fetchFromGitHub {
+    owner = "Wohlstand";
+    repo = pname;
+    rev = version;
+    sha256 = "0blcvqfj1yj6cmm079aw4jdzv3066jxqy9krp268i6cl2b3bmwvw";
+    fetchSubmodules = true;
+  };
+
+  # to be removed with next release
+  postInstall = ''
+    install -Dm755 opn2_bank_editor $out/bin/opn2_bank_editor
+  '';
+})
diff --git a/nixpkgs/pkgs/tools/audio/pa-applet/default.nix b/nixpkgs/pkgs/tools/audio/pa-applet/default.nix
new file mode 100644
index 000000000000..69e5976e6d5e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/pa-applet/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchgit, libpulseaudio, pkgconfig, gtk3, glibc, autoconf, automake, libnotify, libX11, xf86inputevdev }:
+
+stdenv.mkDerivation {
+  name = "pa-applet-2012-04-11";
+
+  src = fetchgit {
+    url = "git://github.com/fernandotcl/pa-applet.git";
+    rev = "005f192df9ba6d2e6491f9aac650be42906b135a";
+    sha256 = "1242sdri67wnm1cd0hr40mxarkh7qs7mb9n2m0g9dbz0f4axj6wa";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [
+    gtk3 libpulseaudio glibc automake autoconf libnotify libX11 xf86inputevdev
+  ];
+
+  preConfigure = ''
+    ./autogen.sh
+  '';
+
+  # work around a problem related to gtk3 updates
+  NIX_CFLAGS_COMPILE = "-Wno-error=deprecated-declarations";
+
+  postInstall = ''
+  '';
+
+  meta = with stdenv.lib; {
+    description = "";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ domenkozar ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/pasystray/default.nix b/nixpkgs/pkgs/tools/audio/pasystray/default.nix
new file mode 100644
index 000000000000..782ea314359d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/pasystray/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub, pkgconfig, autoreconfHook, wrapGAppsHook
+, gnome3, avahi, gtk3, libappindicator-gtk3, libnotify, libpulseaudio
+, xlibsWrapper, gsettings-desktop-schemas
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pasystray";
+  version = "0.7.1";
+
+  src = fetchFromGitHub {
+    owner = "christophgysin";
+    repo = "pasystray";
+    rev = "${pname}-${version}";
+    sha256 = "0xx1bm9kimgq11a359ikabdndqg5q54pn1d1dyyjnrj0s41168fk";
+  };
+
+  nativeBuildInputs = [ pkgconfig autoreconfHook wrapGAppsHook ];
+  buildInputs = [
+    gnome3.adwaita-icon-theme
+    avahi gtk3 libappindicator-gtk3 libnotify libpulseaudio xlibsWrapper
+    gsettings-desktop-schemas
+  ];
+
+  meta = with stdenv.lib; {
+    description = "PulseAudio system tray";
+    homepage = https://github.com/christophgysin/pasystray;
+    license = licenses.lgpl21Plus;
+    maintainers = with maintainers; [ exlevan kamilchm ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/picotts/default.nix b/nixpkgs/pkgs/tools/audio/picotts/default.nix
new file mode 100644
index 000000000000..d1b055f1d5f4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/picotts/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchFromGitHub, autoconf, automake, libtool, popt }:
+
+stdenv.mkDerivation {
+  name = "picotts-unstable-2018-10-19";
+  src = fetchFromGitHub {
+    repo = "picotts";
+    owner = "naggety";
+    rev = "2f86050dc5da9ab68fc61510b594d8e6975c4d2d";
+    sha256 = "1k2mdv9llkh77jr4qr68yf0zgjqk87np35fgfmnc3rpdp538sccl";
+  };
+  nativeBuildInputs = [ autoconf automake ];
+  buildInputs = [ libtool popt ];
+  sourceRoot = "source/pico";
+  preConfigure = "./autogen.sh";
+  meta = {
+    description = "Text to speech voice sinthesizer from SVox.";
+    homepage = https://github.com/naggety/picotts;
+    license = stdenv.lib.licenses.asl20;
+    maintainers = [ stdenv.lib.maintainers.canndrew ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
+
+
diff --git a/nixpkgs/pkgs/tools/audio/playerctl/default.nix b/nixpkgs/pkgs/tools/audio/playerctl/default.nix
new file mode 100644
index 000000000000..8a8cd2581455
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/playerctl/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, meson, ninja, fetchFromGitHub, glib, pkgconfig, gtk-doc, docbook_xsl, gobject-introspection }:
+
+stdenv.mkDerivation rec {
+  pname = "playerctl";
+  version = "2.0.2";
+
+  src = fetchFromGitHub {
+    owner = "acrisci";
+    repo = "playerctl";
+    rev = "v${version}";
+    sha256 = "1f3njnpd52djx3dmhh9a8p5a67f0jmr1gbk98icflr2q91149gjz";
+  };
+
+  nativeBuildInputs = [ meson ninja pkgconfig gtk-doc docbook_xsl gobject-introspection ];
+  buildInputs = [ glib ];
+
+  meta = with stdenv.lib; {
+    description = "Command-line utility and library for controlling media players that implement MPRIS";
+    homepage = https://github.com/acrisci/playerctl;
+    license = licenses.lgpl3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ puffnfresh ];
+    broken = stdenv.hostPlatform.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/pnmixer/default.nix b/nixpkgs/pkgs/tools/audio/pnmixer/default.nix
new file mode 100644
index 000000000000..5b27a00a9556
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/pnmixer/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub, cmake, pkgconfig, gettext, alsaLib, gtk3, glib, libnotify, libX11, pcre }:
+
+stdenv.mkDerivation rec {
+  pname = "pnmixer";
+  version = "0.7.2";
+
+  src = fetchFromGitHub {
+    owner = "nicklan";
+    repo = "pnmixer";
+    rev = "v${version}";
+    sha256 = "0416pa933ddf4b7ph9zxhk5jppkk7ppcq1aqph6xsrfnka4yb148";
+  };
+
+  nativeBuildInputs = [ cmake pkgconfig gettext ];
+
+  buildInputs = [ alsaLib gtk3 glib libnotify libX11 pcre ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/nicklan/pnmixer;
+    description = "ALSA volume mixer for the system tray";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ campadrenalin romildo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/pulsemixer/default.nix b/nixpkgs/pkgs/tools/audio/pulsemixer/default.nix
new file mode 100644
index 000000000000..051743b46e7a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/pulsemixer/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, python3, libpulseaudio }:
+
+stdenv.mkDerivation rec {
+  pname = "pulsemixer";
+  version = "1.5.0";
+
+  src = fetchFromGitHub {
+    owner = "GeorgeFilipkin";
+    repo = pname;
+    rev = version;
+    sha256 = "162nfpyqn4gp45x332a73n07c118vispz3jicin4p67x3f8f0g3j";
+  };
+
+  inherit libpulseaudio;
+
+  buildInputs = [ python3 ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install pulsemixer $out/bin/
+  '';
+
+  postFixup = ''
+    substituteInPlace "$out/bin/pulsemixer" \
+      --replace "libpulse.so.0" "$libpulseaudio/lib/libpulse.so.0"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Cli and curses mixer for pulseaudio";
+    homepage = https://github.com/GeorgeFilipkin/pulsemixer;
+    license = licenses.mit;
+    maintainers = [ maintainers.woffs ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/qastools/default.nix b/nixpkgs/pkgs/tools/audio/qastools/default.nix
new file mode 100644
index 000000000000..bdc431bcb928
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/qastools/default.nix
@@ -0,0 +1,30 @@
+{ mkDerivation, lib, fetchurl, cmake, alsaLib, udev, qtbase, qtsvg, qttools }:
+
+let
+  version = "0.21.0";
+in
+
+mkDerivation {
+  pname = "qastools";
+  inherit version;
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/qastools/${version}/qastools_${version}.tar.bz2";
+    sha256 = "1zl9cn5h43n63yp3z1an87xvw554k9hlcz75ddb30lvpcczkmwrh";
+  };
+
+  buildInputs = [
+    alsaLib udev qtbase qtsvg qttools
+  ];
+  nativeBuildInputs = [ cmake ];
+
+  cmakeFlags = [
+    "-DALSA_INCLUDE=${alsaLib.dev}/include/alsa/version.h"
+  ];
+
+  meta = with lib; {
+    description = "Collection of desktop applications for ALSA configuration";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/trx/default.nix b/nixpkgs/pkgs/tools/audio/trx/default.nix
new file mode 100644
index 000000000000..1d052adbba9f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/trx/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl, alsaLib, libopus, ortp, bctoolbox }:
+
+stdenv.mkDerivation rec {
+  pname = "trx";
+  version = "0.4";
+
+  src = fetchurl {
+    url = "https://www.pogo.org.uk/~mark/trx/releases/${pname}-${version}.tar.gz";
+    sha256 = "1wsrkbqc090px8i9p8awz38znxjcqjb1dzjjdd8xkjmiprayjhkl";
+  };
+
+  buildInputs = [ alsaLib libopus ortp bctoolbox ];
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with stdenv.lib; {
+    description = "A simple toolset for broadcasting live audio using RTP/UDP and Opus";
+    homepage = http://www.pogo.org.uk/~mark/trx/;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.hansjoergschurr ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/video2midi/default.nix b/nixpkgs/pkgs/tools/audio/video2midi/default.nix
new file mode 100644
index 000000000000..43539f1ee295
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/video2midi/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, pythonPackages, opencv3 }:
+
+let
+  opencv3_ = pythonPackages.toPythonModule (opencv3.override {
+    inherit pythonPackages;
+    enablePython = true;
+    enableFfmpeg = true;
+  });
+in pythonPackages.buildPythonApplication rec {
+  pname = "video2midi";
+  version = "0.3.9.6";
+
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "svsdval";
+    repo = pname;
+    rev = version;
+    sha256 = "0x9b8hwl325gd6v9i60yh95gbn49nydpwyfqs92mbq8vvvq7x8fk";
+  };
+
+  propagatedBuildInputs = with pythonPackages; [ opencv3_ midiutil pygame pyopengl ];
+
+  installPhase = ''
+    install -Dm755 v2m.py $out/bin/v2m.py
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Youtube synthesia video to midi conversion tool";
+    homepage = src.meta.homepage;
+    license = licenses.gpl3;
+    maintainers = [ maintainers.gnidorah ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/volctl/default.nix b/nixpkgs/pkgs/tools/audio/volctl/default.nix
new file mode 100644
index 000000000000..7b4cdd6b5315
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/volctl/default.nix
@@ -0,0 +1,58 @@
+{ stdenv, fetchFromGitHub, pythonPackages, libpulseaudio, glib, gtk3, gobject-introspection, wrapGAppsHook }:
+
+pythonPackages.buildPythonApplication rec {
+  pname = "volctl";
+  version = "0.6.2";
+
+  src = fetchFromGitHub {
+    owner = "buzz";
+    repo = pname;
+    rev = version;
+    sha256 = "1bqq5mrpi7qxzl37z6fj67pqappjmwhi8d8db95j3lmf16svm2xk";
+  };
+
+  nativeBuildInputs = [
+    gobject-introspection
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    glib
+    gtk3
+    libpulseaudio
+  ];
+
+  pythonPath = with pythonPackages; [
+    pygobject3
+  ];
+
+  strictDeps = false;
+
+  postPatch = ''
+    # The user can set a mixer application in the preferences. The
+    # default is pavucontrol. Do not hard code its path and hope it
+    # can be found in $PATH.
+
+    substituteInPlace volctl/app.py --replace /usr/bin/pavucontrol pavucontrol
+  '';
+
+  preBuild = ''
+    export LD_LIBRARY_PATH=${libpulseaudio}/lib
+  '';
+
+  preFixup = ''
+    glib-compile-schemas ${glib.makeSchemaPath "$out" "${pname}-${version}"}
+
+    gappsWrapperArgs+=(
+      --prefix LD_LIBRARY_PATH : "${libpulseaudio}/lib"
+    )
+  '';
+
+  meta = with stdenv.lib; {
+    description = "PulseAudio enabled volume control featuring per-app sliders";
+    homepage = https://buzz.github.io/volctl/;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.romildo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/audio/volumeicon/default.nix b/nixpkgs/pkgs/tools/audio/volumeicon/default.nix
new file mode 100644
index 000000000000..3871bbd39a16
--- /dev/null
+++ b/nixpkgs/pkgs/tools/audio/volumeicon/default.nix
@@ -0,0 +1,24 @@
+{ pkgs, fetchurl, stdenv, gtk3, pkgconfig, intltool, alsaLib }:
+
+stdenv.mkDerivation {
+  pname = "volumeicon";
+  version = "0.5.1";
+
+  src = fetchurl {
+    url = "http://softwarebakery.com/maato/files/volumeicon/volumeicon-0.5.1.tar.gz";
+    sha256 = "182xl2w8syv6ky2h2bc9imc6ap8pzh0p7rp63hh8nw0xm38c3f14";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ gtk3 intltool alsaLib ];
+
+  meta = with stdenv.lib; {
+    description = "A lightweight volume control that sits in your systray";
+    homepage = http://softwarebakery.com/maato/volumeicon.html;
+    platforms = pkgs.lib.platforms.linux;
+    maintainers = with maintainers; [ bobvanderlinden ];
+    license = pkgs.lib.licenses.gpl3;
+  };
+
+}
+
diff --git a/nixpkgs/pkgs/tools/backup/amazon-glacier-cmd-interface/default.nix b/nixpkgs/pkgs/tools/backup/amazon-glacier-cmd-interface/default.nix
new file mode 100644
index 000000000000..3d219eed012c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/amazon-glacier-cmd-interface/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchFromGitHub, python2Packages  }:
+
+python2Packages.buildPythonApplication rec {
+  pname = "amazon-glacier-cmd-interface";
+  version  = "2016-09-01";
+
+  src = fetchFromGitHub {
+    owner  = "uskudnik";
+    repo   = "amazon-glacier-cmd-interface";
+    rev    = "9f28132f9872e1aad9e956e5613b976504e930c8";
+    sha256 = "1k5z8kda9v6klr4536pf5qbq9zklxvyysv7nc48gllschl09jywc";
+  };
+
+  # argparse is part of the standardlib
+  prePatch = ''
+    substituteInPlace setup.py --replace "'argparse'," ""
+  '';
+
+  propagatedBuildInputs = with python2Packages; [
+    boto
+    dateutil
+    prettytable
+    pytz
+  ];
+
+  meta = {
+    description = "Command line interface for Amazon Glacier";
+    homepage    = https://github.com/uskudnik/amazon-glacier-cmd-interface;
+    license     = stdenv.lib.licenses.gpl2;
+    maintainers = [ stdenv.lib.maintainers.lovek323 ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/backup/automysqlbackup/default.nix b/nixpkgs/pkgs/tools/backup/automysqlbackup/default.nix
new file mode 100644
index 000000000000..44c14f2dc324
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/automysqlbackup/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, makeWrapper, mysql, mailutils, pbzip2, pigz, bzip2, gzip }:
+
+stdenv.mkDerivation rec {
+  pname = "automysqlbackup";
+  version = "3.0_rc6";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/automysqlbackup/AutoMySQLBackup/AutoMySQLBackup%20VER%203.0/automysqlbackup-v${version}.tar.gz";
+    sha256 = "1h1wq86q6my1a682nr8pjagjhai4lxz967m17lhpw1vb116hd7l8";
+  };
+
+  sourceRoot = ".";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/etc
+
+    cp automysqlbackup $out/bin/
+    cp automysqlbackup.conf $out/etc/
+
+    wrapProgram $out/bin/automysqlbackup --prefix PATH : ${stdenv.lib.makeBinPath [ mysql mailutils pbzip2 pigz bzip2 gzip ]}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A script to run daily, weekly and monthly backups for your MySQL database";
+    homepage = https://sourceforge.net/projects/automysqlbackup/;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.aanderse ];
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/bacula/default.nix b/nixpkgs/pkgs/tools/backup/bacula/default.nix
new file mode 100644
index 000000000000..e5e26169b745
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/bacula/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchurl, sqlite, postgresql, zlib, acl, ncurses, openssl, readline }:
+
+stdenv.mkDerivation rec {
+  name = "bacula-9.4.4";
+
+  src = fetchurl {
+    url    = "mirror://sourceforge/bacula/${name}.tar.gz";
+    sha256 = "1gi0zkkzh6a87xk4sm051hwz5bv4qc4kbl6hk40752knr817mqqg";
+  };
+
+  buildInputs = [ postgresql sqlite zlib ncurses openssl readline ]
+    # acl relies on attr, which I can't get to build on darwin
+    ++ stdenv.lib.optional (!stdenv.isDarwin) acl;
+
+  configureFlags = [
+    "--with-sqlite3=${sqlite.dev}"
+    "--with-postgresql=${postgresql}"
+    "--with-logdir=/var/log/bacula"
+    "--with-working-dir=/var/lib/bacula"
+    "--mandir=\${out}/share/man"
+  ] ++ stdenv.lib.optional (stdenv.buildPlatform != stdenv.hostPlatform) "ac_cv_func_setpgrp_void=yes";
+
+  installFlags = [
+    "logdir=\${out}/logdir"
+    "working_dir=\${out}/workdir"
+  ];
+
+  postInstall = ''
+    mkdir -p $out/bin
+    ln -s $out/sbin/* $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Enterprise ready, Network Backup Tool";
+    homepage    = http://bacula.org/;
+    license     = licenses.gpl2;
+    maintainers = with maintainers; [ domenkozar lovek323 eleanor ];
+    platforms   = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/bareos/default.nix b/nixpkgs/pkgs/tools/backup/bareos/default.nix
new file mode 100644
index 000000000000..949e45de5e11
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/bareos/default.nix
@@ -0,0 +1,82 @@
+{ stdenv, fetchFromGitHub, pkgconfig, nettools, gettext, flex
+, readline ? null, openssl ? null, python2 ? null, ncurses ? null, rocksdb
+, sqlite ? null, postgresql ? null, libmysqlclient ? null, zlib ? null, lzo ? null
+, jansson ? null, acl ? null, glusterfs ? null, libceph ? null, libcap ? null
+}:
+
+assert sqlite != null || postgresql != null || libmysqlclient != null;
+
+with stdenv.lib;
+let
+  withGlusterfs = "\${with_glusterfs_directory}";
+in
+stdenv.mkDerivation rec {
+  pname = "bareos";
+  version = "17.2.7";
+
+  src = fetchFromGitHub {
+    owner = "bareos";
+    repo = "bareos";
+    rev = "Release/${version}";
+    name = "${pname}-${version}-src";
+    sha256 = "1awf5i4mw2nfd7z0dmqnywapnx9nz6xwqv8rxp0y2mnrhzdpbrbz";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [
+    nettools gettext readline openssl python2 flex ncurses sqlite postgresql
+    libmysqlclient zlib lzo jansson acl glusterfs libceph libcap rocksdb
+  ];
+
+  postPatch = ''
+    sed -i 's,\(-I${withGlusterfs}/include\),\1/glusterfs,' configure
+  '';
+
+  configureFlags = [
+    "--sysconfdir=/etc"
+    "--exec-prefix=\${out}"
+    "--enable-lockmgr"
+    "--enable-dynamic-storage-backends"
+    "--with-basename=nixos" # For reproducible builds since it uses the hostname otherwise
+    "--with-hostname=nixos" # For reproducible builds since it uses the hostname otherwise
+    "--with-working-dir=/var/lib/bareos"
+    "--with-bsrdir=/var/lib/bareos"
+    "--with-logdir=/var/log/bareos"
+    "--with-pid-dir=/run/bareos"
+    "--with-subsys-dir=/run/bareos"
+    "--enable-ndmp"
+    "--enable-lmdb"
+    "--enable-batch-insert"
+    "--enable-dynamic-cats-backends"
+    "--enable-sql-pooling"
+    "--enable-scsi-crypto"
+  ] ++ optionals (readline != null) [ "--disable-conio" "--enable-readline" "--with-readline=${readline.dev}" ]
+    ++ optional (python2 != null) "--with-python=${python2}"
+    ++ optional (openssl != null) "--with-openssl=${openssl.dev}"
+    ++ optional (sqlite != null) "--with-sqlite3=${sqlite.dev}"
+    ++ optional (postgresql != null) "--with-postgresql=${postgresql}"
+    ++ optional (libmysqlclient != null) "--with-mysql=${libmysqlclient}"
+    ++ optional (zlib != null) "--with-zlib=${zlib.dev}"
+    ++ optional (lzo != null) "--with-lzo=${lzo}"
+    ++ optional (jansson != null) "--with-jansson=${jansson}"
+    ++ optional (acl != null) "--enable-acl"
+    ++ optional (glusterfs != null) "--with-glusterfs=${glusterfs}"
+    ++ optional (libceph != null) "--with-cephfs=${libceph}";
+
+  installFlags = [
+    "sysconfdir=\${out}/etc"
+    "confdir=\${out}/etc/bareos"
+    "scriptdir=\${out}/etc/bareos"
+    "working_dir=\${TMPDIR}"
+    "log_dir=\${TMPDIR}"
+    "sbindir=\${out}/bin"
+  ];
+
+  meta = with stdenv.lib; {
+    homepage = http://www.bareos.org/;
+    description = "A fork of the bacula project";
+    license = licenses.agpl3;
+    platforms = platforms.unix;
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/bdsync/default.nix b/nixpkgs/pkgs/tools/backup/bdsync/default.nix
new file mode 100644
index 000000000000..be8746932caf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/bdsync/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchFromGitHub
+, openssl
+, pandoc
+, which
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bdsync";
+  version = "0.11.1";
+
+  src = fetchFromGitHub {
+    owner = "TargetHolding";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "11grdyc6fgw93jvj965awsycqw5qbzsdys7n8farqnmya8qv8gac";
+  };
+
+  nativeBuildInputs = [ pandoc which ];
+  buildInputs = [ openssl ];
+
+  postPatch = ''
+    patchShebangs ./tests.sh
+    patchShebangs ./tests/
+  '';
+
+  doCheck = true;
+
+  installPhase = ''
+    install -Dm755 bdsync -t $out/bin/
+    install -Dm644 bdsync.1 -t $out/share/man/man1/
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Fast block device synchronizing tool";
+    homepage = https://github.com/TargetHolding/bdsync;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ jluttine ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/borg/default.nix b/nixpkgs/pkgs/tools/backup/borg/default.nix
new file mode 100644
index 000000000000..593056f403ed
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/borg/default.nix
@@ -0,0 +1,71 @@
+{ stdenv, python3, acl, libb2, lz4, zstd, openssl, openssh }:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "borgbackup";
+  version = "1.1.10";
+
+  src = python3.pkgs.fetchPypi {
+    inherit pname version;
+    sha256 = "1pp70p4n5kamvcbl4d8021ggrxhyykmg9isjg4yd3wags8b19d7g";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    # For building documentation:
+    sphinx guzzle_sphinx_theme
+  ];
+  buildInputs = [
+    libb2 lz4 zstd openssl python3.pkgs.setuptools_scm
+  ] ++ stdenv.lib.optionals stdenv.isLinux [ acl ];
+  propagatedBuildInputs = with python3.pkgs; [
+    cython
+  ] ++ stdenv.lib.optionals (!stdenv.isDarwin) [ llfuse ];
+
+  preConfigure = ''
+    export BORG_OPENSSL_PREFIX="${openssl.dev}"
+    export BORG_LZ4_PREFIX="${lz4.dev}"
+    export BORG_LIBB2_PREFIX="${libb2}"
+    export BORG_LIBZSTD_PREFIX="${zstd}"
+  '';
+
+  makeWrapperArgs = [
+    ''--prefix PATH ':' "${openssh}/bin"''
+  ];
+
+  postInstall = ''
+    make -C docs singlehtml
+    mkdir -p $out/share/doc/borg
+    cp -R docs/_build/singlehtml $out/share/doc/borg/html
+
+    make -C docs man
+    mkdir -p $out/share/man
+    cp -R docs/_build/man $out/share/man/man1
+
+    mkdir -p $out/share/bash-completion/completions
+    cp scripts/shell_completions/bash/borg $out/share/bash-completion/completions/
+
+    mkdir -p $out/share/fish/vendor_completions.d
+    cp scripts/shell_completions/fish/borg.fish $out/share/fish/vendor_completions.d/
+
+    mkdir -p $out/share/zsh/site-functions
+    cp scripts/shell_completions/zsh/_borg $out/share/zsh/site-functions/
+  '';
+
+  checkInputs = with python3.pkgs; [
+    pytest
+  ];
+
+  checkPhase = ''
+    HOME=$(mktemp -d) py.test --pyargs borg.testsuite
+  '';
+
+  # 63 failures, needs pytest-benchmark
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "A deduplicating backup program (attic fork)";
+    homepage = https://www.borgbackup.org;
+    license = licenses.bsd3;
+    platforms = platforms.unix; # Darwin and FreeBSD mentioned on homepage
+    maintainers = with maintainers; [ flokli dotlambda globin ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/btar/default.nix b/nixpkgs/pkgs/tools/backup/btar/default.nix
new file mode 100644
index 000000000000..89f577e93ad0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/btar/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchurl, librsync }:
+
+stdenv.mkDerivation rec {
+  name = "btar-1.1.1";
+  src = fetchurl {
+    url = "http://vicerveza.homeunix.net/~viric/soft/btar/${name}.tar.gz";
+    sha256 = "0miklk4bqblpyzh1bni4x6lqn88fa8fjn15x1k1n8bxkx60nlymd";
+  };
+
+  buildInputs = [ librsync ];
+
+  installPhase = "make install PREFIX=$out";
+
+  meta = {
+    description = "Tar-compatible block-based archiver";
+    license = stdenv.lib.licenses.gpl3Plus;
+    homepage = http://viric.name/cgi-bin/btar;
+    platforms = with stdenv.lib.platforms; all;
+    maintainers = with stdenv.lib.maintainers; [viric];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/btrbk/default.nix b/nixpkgs/pkgs/tools/backup/btrbk/default.nix
new file mode 100644
index 000000000000..cd45edfa2d5f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/btrbk/default.nix
@@ -0,0 +1,52 @@
+{ stdenv, fetchurl, coreutils, bash, btrfs-progs, openssh, perl, perlPackages
+, utillinux, asciidoc, asciidoctor, mbuffer, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "btrbk";
+  version = "0.29.0";
+
+  src = fetchurl {
+    url = "https://digint.ch/download/btrbk/releases/${pname}-${version}.tar.xz";
+    sha256 = "1ki40jga09x361lj36hgzw3ahs0cg2w0s3rjwp209255fzyl89il";
+  };
+
+  nativeBuildInputs = [ asciidoc asciidoctor makeWrapper ];
+
+  buildInputs = with perlPackages; [ perl DateCalc ];
+
+  preInstall = ''
+    for f in $(find . -name Makefile); do
+      substituteInPlace "$f" \
+        --replace "/usr" "$out" \
+        --replace "/etc" "$out/etc"
+    done
+
+    # Tainted Mode disables PERL5LIB
+    substituteInPlace btrbk --replace "perl -T" "perl"
+
+    # Fix btrbk-mail
+    substituteInPlace contrib/cron/btrbk-mail \
+      --replace "/bin/date" "${coreutils}/bin/date" \
+      --replace "/bin/echo" "${coreutils}/bin/echo" \
+      --replace '$btrbk' 'btrbk'
+
+    # Fix SSH filter script
+    sed -i '/^export PATH/d' ssh_filter_btrbk.sh
+    substituteInPlace ssh_filter_btrbk.sh --replace logger ${utillinux}/bin/logger
+  '';
+
+  preFixup = ''
+    wrapProgram $out/sbin/btrbk \
+      --set PERL5LIB $PERL5LIB \
+      --prefix PATH ':' "${stdenv.lib.makeBinPath [ btrfs-progs bash mbuffer openssh ]}"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A backup tool for btrfs subvolumes";
+    homepage = https://digint.ch/btrbk;
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ asymmetric the-kenny ];
+    inherit version;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/bup/default.nix b/nixpkgs/pkgs/tools/backup/bup/default.nix
new file mode 100644
index 000000000000..4788091a5f48
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/bup/default.nix
@@ -0,0 +1,66 @@
+{ stdenv, fetchFromGitHub, makeWrapper
+, perl, pandoc, python2Packages, git
+, par2cmdline ? null, par2Support ? true
+}:
+
+assert par2Support -> par2cmdline != null;
+
+let version = "0.30"; in
+
+with stdenv.lib;
+
+stdenv.mkDerivation {
+  pname = "bup";
+  inherit version;
+
+  src = fetchFromGitHub {
+    repo = "bup";
+    owner = "bup";
+    rev = version;
+    sha256 = "0kzi9mzgmx1kjv3aldawapz7bk73f02bysiwh8rngqnirmm0vxdp";
+  };
+
+  buildInputs = [
+    git
+    (python2Packages.python.withPackages
+      (p: with p; [ setuptools tornado ]
+        ++ stdenv.lib.optionals (!stdenv.isDarwin) [ pyxattr pylibacl fuse ]))
+  ];
+  nativeBuildInputs = [ pandoc perl makeWrapper ];
+
+  postPatch = ''
+    patchShebangs .
+    substituteInPlace Makefile --replace "-Werror" ""
+    substituteInPlace Makefile --replace "./format-subst.pl" "${perl}/bin/perl ./format-subst.pl"
+  '' + optionalString par2Support ''
+    substituteInPlace cmd/fsck-cmd.py --replace "['par2'" "['${par2cmdline}/bin/par2'"
+  '';
+
+  dontAddPrefix = true;
+
+  makeFlags = [
+    "MANDIR=$(out)/share/man"
+    "DOCDIR=$(out)/share/doc/bup"
+    "BINDIR=$(out)/bin"
+    "LIBDIR=$(out)/lib/bup"
+  ];
+
+  postInstall = ''
+    wrapProgram $out/bin/bup \
+      --prefix PATH : ${git}/bin
+  '';
+
+  meta = {
+    homepage = https://github.com/bup/bup;
+    description = "Efficient file backup system based on the git packfile format";
+    license = licenses.gpl2Plus;
+
+    longDescription = ''
+      Highly efficient file backup system based on the git packfile format.
+      Capable of doing *fast* incremental backups of virtual machine images.
+    '';
+
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ muflax ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/burp/default.nix b/nixpkgs/pkgs/tools/backup/burp/default.nix
new file mode 100644
index 000000000000..5c0be4a2de7d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/burp/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig
+, acl, librsync, ncurses, openssl, zlib, uthash }:
+
+stdenv.mkDerivation rec {
+  pname = "burp";
+  version = "2.2.18";
+
+  src = fetchFromGitHub {
+    owner = "grke";
+    repo = "burp";
+    rev = version;
+    sha256 = "1zhq240kz881vs2s620qp0kifmgr582caalm85ls789w9rmdkhjl";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  buildInputs = [ librsync ncurses openssl zlib uthash ]
+    ++ stdenv.lib.optional (!stdenv.isDarwin) acl;
+
+  configureFlags = [ "--localstatedir=/var" ];
+
+  installFlags = [ "localstatedir=/tmp" ];
+
+  meta = with stdenv.lib; {
+    description = "BURP - BackUp and Restore Program";
+    homepage    = https://burp.grke.org;
+    license     = licenses.agpl3;
+    maintainers = with maintainers; [ tokudan ];
+    platforms   = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/chunksync/default.nix b/nixpkgs/pkgs/tools/backup/chunksync/default.nix
new file mode 100644
index 000000000000..736a3122a6f0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/chunksync/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, openssl, perl }:
+
+stdenv.mkDerivation rec {
+  version = "0.4";
+  pname = "chunksync";
+
+  src = fetchurl {
+    url = "https://chunksync.florz.de/chunksync_${version}.tar.gz";
+    sha256 = "1gwqp1kjwhcmwhynilakhzpzgc0c6kk8c9vkpi30gwwrwpz3cf00";
+  };
+
+  buildInputs = [openssl perl];
+
+  NIX_LDFLAGS = "-lgcc_s";
+
+  makeFlags = [
+    "DESTDIR=$(out)"
+    "PREFIX="
+  ];
+
+  preInstall = ''
+    mkdir -p $out/bin
+    mkdir -p $out/share/man/man1
+  '';
+
+  meta = {
+    description = "Space-efficient incremental backups of large files or block devices";
+    homepage = http://chunksync.florz.de/;
+    license = stdenv.lib.licenses.gpl2;
+    platforms = with stdenv.lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/dar/default.nix b/nixpkgs/pkgs/tools/backup/dar/default.nix
new file mode 100644
index 000000000000..5d5bff7bfa1e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/dar/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, zlib, bzip2, openssl, attr, lzo, libgcrypt, e2fsprogs, gpgme, xz }:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  version = "2.6.7";
+  pname = "dar";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/dar/${pname}-${version}.tar.gz";
+    sha256 = "055kkxhg7sz3fbndsr4p2wp7aa2phq3pr0a9y7b1fkg52x7fbhr2";
+  };
+
+  buildInputs = [ zlib bzip2 openssl lzo libgcrypt gpgme xz ]
+    ++ optionals stdenv.isLinux [ attr e2fsprogs ];
+
+  configureFlags = [
+    "--disable-birthtime"
+    "--disable-upx"
+    "--disable-dar-static"
+    "--disable-build-html"
+    "--enable-threadar"
+  ];
+
+  postInstall = ''
+    rm -r "$out"/share/dar # Disable html help
+  '';
+
+  enableParallelBuilding = true;
+
+  hardeningDisable = [ "format" ];
+
+  meta = {
+    homepage = http://dar.linux.free.fr;
+    description = "Disk ARchiver, allows backing up files into indexed archives";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/ddar/default.nix b/nixpkgs/pkgs/tools/backup/ddar/default.nix
new file mode 100644
index 000000000000..4c8d1a28c27c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/ddar/default.nix
@@ -0,0 +1,40 @@
+{ lib, python2, fetchFromGitHub, roundup, ncurses }:
+
+python2.pkgs.buildPythonApplication rec {
+  pname = "ddar";
+  version = "1.0";
+
+  src = fetchFromGitHub {
+    owner = "basak";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "158jdy5261k9yw540g48hddy5zyqrr81ir9fjlcy4jnrwfkg7ynm";
+  };
+
+  prePatch = ''
+    substituteInPlace t/local-functions \
+      --replace 'PATH="$ddar_src:$PATH"' 'PATH="$out/bin:$PATH"'
+    # Test requires additional software and compilation of some C programs
+    substituteInPlace t/basic-test.sh \
+      --replace it_stores_and_extracts_corpus0 dont_test
+  '';
+
+  preBuild = ''
+    make -f Makefile.prep synctus/ddar_pb2.py
+  '';
+
+  nativeBuildInputs = with python2.pkgs; [ protobuf.protobuf ];
+  propagatedBuildInputs = with python2.pkgs; [ protobuf ];
+
+  checkInputs = [ roundup ncurses ];
+
+  checkPhase = ''
+    roundup t/basic-test.sh
+  '';
+
+  meta = with lib; {
+    description = "Unix de-duplicating archiver";
+    license = licenses.gpl3;
+    homepage = src.meta.homepage;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/dedup/default.nix b/nixpkgs/pkgs/tools/backup/dedup/default.nix
new file mode 100644
index 000000000000..05a436049263
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/dedup/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, lz4, snappy, libsodium
+# For testing
+, coreutils, gawk
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dedup";
+  version = "2.0";
+
+  src = fetchurl {
+    url = "https://dl.2f30.org/releases/${pname}-${version}.tar.gz";
+    sha256 = "0n5kkni4d6blz3s94y0ddyhijb74lxv7msr2mvdmj8l19k0lrfh1";
+  };
+
+  makeFlags = [
+    "CC:=$(CC)"
+    "PREFIX=${placeholder "out"}"
+    "MANPREFIX=${placeholder "out"}/share/man"
+  ];
+
+  buildInputs = [ lz4 snappy libsodium ];
+
+  doCheck = true;
+
+  checkInputs = [ coreutils gawk ];
+  checkTarget = "test";
+
+  meta = with stdenv.lib; {
+    description = "Data deduplication program";
+    homepage = https://git.2f30.org/dedup/file/README.html;
+    license = with licenses; [ bsd0 isc ];
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/dirvish/default.nix b/nixpkgs/pkgs/tools/backup/dirvish/default.nix
new file mode 100644
index 000000000000..0127e32fe93b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/dirvish/default.nix
@@ -0,0 +1,62 @@
+{ fetchurl, stdenv, makeWrapper, perl, perlPackages }:
+
+stdenv.mkDerivation rec {
+  name = "dirvish-1.2.1";
+  src = fetchurl {
+    url = "http://dirvish.org/${name}.tgz";
+    sha256 = "6b7f29c3541448db3d317607bda3eb9bac9fb3c51f970611ffe27e9d63507dcd";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perl ] ++ (with perlPackages; [ GetoptLong TimeParseDate TimePeriod ]);
+
+  executables = [ "dirvish" "dirvish-runall" "dirvish-expire" "dirvish-locate" ];
+  manpages = [ "dirvish.8" "dirvish-runall.8" "dirvish-expire.8" "dirvish-locate.8" "dirvish.conf.5" ];
+
+  buildPhase = ''
+    HEADER="#!${perl}/bin/perl
+
+    \$CONFDIR = \"/etc/dirvish\";
+
+    "
+
+    for executable in $executables; do
+      (
+        echo "$HEADER"
+        cat $executable.pl loadconfig.pl
+      ) > $executable
+      chmod +x $executable
+    done
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp --target-directory=$out/bin $executables
+
+    for manpage in $manpages; do
+      if [[ $manpage =~ \.([[:digit:]]+)$ ]]; then
+        section=''${BASH_REMATCH[1]}
+        mkdir -p $out/man/man$section
+        cp --target-directory=$out/man/man$section $manpage
+      else
+        echo "Couldn't determine man page section by filename"
+        exit 1
+      fi
+    done
+  '';
+
+  postFixup = ''
+    for executable in $executables; do
+      wrapProgram $out/bin/$executable \
+        --set PERL5LIB "$PERL5LIB"
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Dirvish is a fast, disk based, rotating network backup system";
+    homepage = http://dirvish.org/;
+    license = stdenv.lib.licenses.osl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.winpat ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/diskrsync/default.nix b/nixpkgs/pkgs/tools/backup/diskrsync/default.nix
new file mode 100644
index 000000000000..b2ef04dcffc7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/diskrsync/default.nix
@@ -0,0 +1,31 @@
+{ buildGoPackage, fetchFromGitHub, stdenv, openssh, makeWrapper }:
+
+buildGoPackage rec {
+  pname = "diskrsync";
+  version = "unstable-2019-01-02";
+
+  src = fetchFromGitHub {
+    owner = "dop251";
+    repo = pname;
+    rev = "e8598ef71038527a8a77d1a6cf2a73cfd96d9139";
+    sha256 = "1dqpmc4hp81knhdk3mrmwdr66xiibsvj5lagbm5ciajg9by45mcs";
+  };
+
+  goPackagePath = "github.com/dop251/diskrsync";
+  goDeps = ./deps.nix;
+
+  buildInputs = [ makeWrapper ];
+
+  preFixup = ''
+    wrapProgram "$bin/bin/diskrsync" --argv0 diskrsync --prefix PATH : ${openssh}/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Rsync for block devices and disk images";
+    homepage = https://github.com/dop251/diskrsync;
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ jluttine ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/backup/diskrsync/deps.nix b/nixpkgs/pkgs/tools/backup/diskrsync/deps.nix
new file mode 100644
index 000000000000..8045737164b1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/diskrsync/deps.nix
@@ -0,0 +1,48 @@
+# file generated from go.mod using vgo2nix (https://github.com/adisbladis/vgo2nix)
+[
+  {
+    goPackagePath = "github.com/dop251/spgz";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dop251/spgz";
+      rev = "b86304a2b188";
+      sha256 = "1zss1z523qagk99plb0my8m8ng0danl372iyk1pr4i2skp2bf5z7";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev = "9756ffdc2472";
+      sha256 = "0q7hxaaq6lp0v8qqzifvysl47z5rfdlrxkh3d29vsl3wyby3dxl8";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev = "eb5bcb51f2a3";
+      sha256 = "17k4g8krxbl84gzcs275b7gsh66dzm15fdxivjnx9xz8q84l4kby";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "97732733099d";
+      sha256 = "118hkp01i4z1f5h6hcjm0ff2ngqhrzj1f7731n0kw8dr6hvbx0sw";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/text";
+      rev = "v0.3.0";
+      sha256 = "0r6x6zjzhr8ksqlpiwm5gdd7s209kwk5p4lw54xjvz10cs3qlq19";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/backup/duplicacy/default.nix b/nixpkgs/pkgs/tools/backup/duplicacy/default.nix
new file mode 100644
index 000000000000..d217864e93e6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/duplicacy/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "duplicacy";
+  version = "2.1.2";
+
+  goPackagePath = "github.com/gilbertchen/duplicacy/";
+
+  src = fetchFromGitHub {
+    owner = "gilbertchen";
+    repo = "duplicacy";
+    rev = "v${version}";
+    sha256 = "0v3rk4da4b6dhqq8zsr4z27wd8p7crxapkn265kwpsaa99xszzbv";
+  };
+  goDeps = ./deps.nix;
+  buildPhase = ''
+    cd go/src/${goPackagePath}
+    go build duplicacy/duplicacy_main.go
+  '';
+
+  installPhase = ''
+    install -D duplicacy_main $bin/bin/duplicacy
+  '';
+
+  meta = with lib; {
+    homepage = https://duplicacy.com;
+    description = "A new generation cloud backup tool ";
+    platforms = platforms.linux ++ platforms.darwin;
+    license = lib.licenses.unfree;
+    maintainers = with maintainers; [ ffinkdevs ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/duplicacy/deps.nix b/nixpkgs/pkgs/tools/backup/duplicacy/deps.nix
new file mode 100644
index 000000000000..5511b2e67163
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/duplicacy/deps.nix
@@ -0,0 +1,336 @@
+# file generated from Gopkg.lock using dep2nix (https://github.com/nixcloud/dep2nix)
+[
+  {
+    goPackagePath  = "cloud.google.com/go";
+    fetch = {
+      type = "git";
+      url = "https://code.googlesource.com/gocloud";
+      rev =  "2d3a6656c17a60b0815b7e06ab0be04eacb6e613";
+      sha256 = "0fi3qj9fvc4bxbrwa1m5sxsb8yhvawiwigaddvmmizjykxbq5csq";
+    };
+  }
+  {
+    goPackagePath  = "github.com/Azure/azure-sdk-for-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Azure/azure-sdk-for-go";
+      rev =  "b7fadebe0e7f5c5720986080a01495bd8d27be37";
+      sha256 = "11zcmd17206byxhgz2a75qascilydlzjbz73l2mrqng3yyr20yk1";
+    };
+  }
+  {
+    goPackagePath  = "github.com/Azure/go-autorest";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Azure/go-autorest";
+      rev =  "0ae36a9e544696de46fdadb7b0d5fb38af48c063";
+      sha256 = "0f2qcv24l9bx3jys2m9ycyy77vqlx7dbfa3frxlk19wnrwiv3p6g";
+    };
+  }
+  {
+    goPackagePath  = "github.com/aryann/difflib";
+    fetch = {
+      type = "git";
+      url = "https://github.com/aryann/difflib";
+      rev =  "e206f873d14a916d3d26c40ab667bca123f365a3";
+      sha256 = "00zb9sx6l6b2zq614x45zlyshl20zjhwfj8r5krw4f9y0mx3n2dm";
+    };
+  }
+  {
+    goPackagePath  = "github.com/aws/aws-sdk-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/aws/aws-sdk-go";
+      rev =  "a32b1dcd091264b5dee7b386149b6cc3823395c9";
+      sha256 = "1yicb7l6m4hs3mi724hz74wn8305qvx6g73mjqafaaqvh6dyn86m";
+    };
+  }
+  {
+    goPackagePath  = "github.com/bkaradzic/go-lz4";
+    fetch = {
+      type = "git";
+      url = "https://github.com/bkaradzic/go-lz4";
+      rev =  "74ddf82598bc4745b965729e9c6a463bedd33049";
+      sha256 = "1vdid8v0c2v2qhrg9rzn3l7ya1h34jirrxfnir7gv7w6s4ivdvc1";
+    };
+  }
+  {
+    goPackagePath  = "github.com/dgrijalva/jwt-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dgrijalva/jwt-go";
+      rev =  "dbeaa9332f19a944acb5736b4456cfcc02140e29";
+      sha256 = "0zk6l6kzsjdijfn7c4h0aywdjx5j2hjwi67vy1k6wr46hc8ks2hs";
+    };
+  }
+  {
+    goPackagePath  = "github.com/gilbertchen/azure-sdk-for-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gilbertchen/azure-sdk-for-go";
+      rev =  "bbf89bd4d716c184f158d1e1428c2dbef4a18307";
+      sha256 = "14563izc2y05k8s20fmhanvjydbcq8k5adp4cgw91d9bs52qivx7";
+    };
+  }
+  {
+    goPackagePath  = "github.com/gilbertchen/cli";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gilbertchen/cli";
+      rev =  "1de0a1836ce9c3ae1bf737a0869c4f04f28a7f98";
+      sha256 = "00vbyjsn009cqg24sxcizq10rgicnmrv0f8jg3fa1fw6yp5gqdl5";
+    };
+  }
+  {
+    goPackagePath  = "github.com/gilbertchen/go-dropbox";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gilbertchen/go-dropbox";
+      rev =  "90711b603312b1f973f3a5da3793ac4f1e5c2f2a";
+      sha256 = "0y2ydl3mjbkfbqyygrwq7vqig9hjh7cxvzsn2gxc1851haqp4h19";
+    };
+  }
+  {
+    goPackagePath  = "github.com/gilbertchen/go-ole";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gilbertchen/go-ole";
+      rev =  "0e87ea779d9deb219633b828a023b32e1244dd57";
+      sha256 = "1d937b4i9mrwfgs1s17qhbd78dcd97wwm8zsajkarky8d55rz1bw";
+    };
+  }
+  {
+    goPackagePath  = "github.com/gilbertchen/go.dbus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gilbertchen/go.dbus";
+      rev =  "9e442e6378618c083fd3b85b703ffd202721fb17";
+      sha256 = "0q8ld38gnr4adzw5287lw5f5l14yp8slxsz1za5ryrkprh04bhkv";
+    };
+  }
+  {
+    goPackagePath  = "github.com/gilbertchen/goamz";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gilbertchen/goamz";
+      rev =  "eada9f4e8cc2a45db775dee08a2c37597ce4760a";
+      sha256 = "0v6i4jdly06wixmm58ygxh284hnlbfxczvcwxvywiyy9bp5qyaid";
+    };
+  }
+  {
+    goPackagePath  = "github.com/gilbertchen/gopass";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gilbertchen/gopass";
+      rev =  "bf9dde6d0d2c004a008c27aaee91170c786f6db8";
+      sha256 = "1jxzyfnqi0h1fzlsvlkn10bncic803bfhslyijcxk55mgh297g45";
+    };
+  }
+  {
+    goPackagePath  = "github.com/gilbertchen/keyring";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gilbertchen/keyring";
+      rev =  "8855f5632086e51468cd7ce91056f8da69687ef6";
+      sha256 = "1ja623dqnhkr1cvynrcai10s8kn2aiq53cvd8yxr47bb8i2a2q1m";
+    };
+  }
+  {
+    goPackagePath  = "github.com/gilbertchen/xattr";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gilbertchen/xattr";
+      rev =  "68e7a6806b0137a396d7d05601d7403ae1abac58";
+      sha256 = "120lq8vasc5yh0ajczsdpi8cfzgi4ymrnphgqdfcar3b9rsvx80b";
+    };
+  }
+  {
+    goPackagePath  = "github.com/go-ini/ini";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-ini/ini";
+      rev =  "32e4c1e6bc4e7d0d8451aa6b75200d19e37a536a";
+      sha256 = "0mhgxw5q6b0pryhikx3k4wby7g32rwjjljzihi47lwn34kw5y1qn";
+    };
+  }
+  {
+    goPackagePath  = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev =  "1e59b77b52bf8e4b449a57e6f79f21226d571845";
+      sha256 = "19bkh81wnp6njg3931wky6hsnnl2d1ig20vfjxpv450sd3k6yys8";
+    };
+  }
+  {
+    goPackagePath  = "github.com/googleapis/gax-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/googleapis/gax-go";
+      rev =  "317e0006254c44a0ac427cc52a0e083ff0b9622f";
+      sha256 = "0h92x579vbrv2fka8q2ddy1kq6a63qbqa8zc09ygl6skzn9gw1dh";
+    };
+  }
+  {
+    goPackagePath  = "github.com/jmespath/go-jmespath";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jmespath/go-jmespath";
+      rev =  "0b12d6b5";
+      sha256 = "1vv6hph8j6xgv7gwl9vvhlsaaqsm22sxxqmgmldi4v11783pc1ld";
+    };
+  }
+  {
+    goPackagePath  = "github.com/kr/fs";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kr/fs";
+      rev =  "2788f0dbd16903de03cb8186e5c7d97b69ad387b";
+      sha256 = "1c0fipl4rsh0v5liq1ska1dl83v3llab4k6lm8mvrx9c4dyp71ly";
+    };
+  }
+  {
+    goPackagePath  = "github.com/marstr/guid";
+    fetch = {
+      type = "git";
+      url = "https://github.com/marstr/guid";
+      rev =  "8bd9a64bf37eb297b492a4101fb28e80ac0b290f";
+      sha256 = "081qrar6wwpmb2pq3swv4byh73r9riyhl2dwv0902d8jg3kwricm";
+    };
+  }
+  {
+    goPackagePath  = "github.com/minio/blake2b-simd";
+    fetch = {
+      type = "git";
+      url = "https://github.com/minio/blake2b-simd";
+      rev =  "3f5f724cb5b182a5c278d6d3d55b40e7f8c2efb4";
+      sha256 = "0b6jbnj62c0gmmfd4zdmh8xbg01p80f13yygir9xprqkzk6fikmd";
+    };
+  }
+  {
+    goPackagePath  = "github.com/ncw/swift";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ncw/swift";
+      rev =  "ae9f0ea1605b9aa6434ed5c731ca35d83ba67c55";
+      sha256 = "0a0iwynhgxsl3czabl7ajnxpyw6x0dzbiqz6il8aw7kn10ld1rvl";
+    };
+  }
+  {
+    goPackagePath  = "github.com/pkg/errors";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pkg/errors";
+      rev =  "645ef00459ed84a119197bfb8d8205042c6df63d";
+      sha256 = "001i6n71ghp2l6kdl3qq1v2vmghcz3kicv9a5wgcihrzigm75pp5";
+    };
+  }
+  {
+    goPackagePath  = "github.com/pkg/sftp";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pkg/sftp";
+      rev =  "98203f5a8333288eb3163b7c667d4260fe1333e9";
+      sha256 = "09wxyrhwwh20rzpzb06vsj8k2bmw52cjlx7j4115zhky27528sx9";
+    };
+  }
+  {
+    goPackagePath  = "github.com/satori/go.uuid";
+    fetch = {
+      type = "git";
+      url = "https://github.com/satori/go.uuid";
+      rev =  "f58768cc1a7a7e77a3bd49e98cdd21419399b6a3";
+      sha256 = "1j4s5pfg2ldm35y8ls8jah4dya2grfnx2drb4jcbjsyrp4cm5yfb";
+    };
+  }
+  {
+    goPackagePath  = "github.com/vaughan0/go-ini";
+    fetch = {
+      type = "git";
+      url = "https://github.com/vaughan0/go-ini";
+      rev =  "a98ad7ee00ec53921f08832bc06ecf7fd600e6a1";
+      sha256 = "1l1isi3czis009d9k5awsj4xdxgbxn4n9yqjc1ac7f724x6jacfa";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev =  "9f005a07e0d31d45e6656d241bb5c0f2efd4bc94";
+      sha256 = "1mhmr6ljzl3iafsz4qy8vval7rmr828wh59dlqqqjqx6sqmcs1dv";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev =  "9dfe39835686865bff950a07b394c12a98ddc811";
+      sha256 = "0z8mnl4mi88syafrgqys2ak2gg3yrbna25hpz88y3anl8x4jhg1a";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/oauth2";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/oauth2";
+      rev =  "f95fa95eaa936d9d87489b15d1d18b97c1ba9c28";
+      sha256 = "0p9kis69wvhv8a2qbcjxvn9ggpdh81cbfjpq5pjga7n8k6d065fh";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev =  "82aafbf43bf885069dc71b7e7c2f9d7a614d47da";
+      sha256 = "1jvngpvy0q40f7krkgmwf5bbjzhv449297awcr0y78kzn0cyawi2";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/text";
+      rev =  "88f656faf3f37f690df1a32515b479415e1a6769";
+      sha256 = "0zakmgg6dlwnkhignwjajn0dckzqq18zxvnmmg0fq6455x7fs673";
+    };
+  }
+  {
+    goPackagePath  = "google.golang.org/api";
+    fetch = {
+      type = "git";
+      url = "https://code.googlesource.com/google-api-go-client";
+      rev =  "17b5f22a248d6d3913171c1a557552ace0d9c806";
+      sha256 = "0gs78qsxfg89kpiiray1x9jiv6bh328jmjkwd3ghnygf3l98kc8c";
+    };
+  }
+  {
+    goPackagePath  = "google.golang.org/appengine";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/appengine";
+      rev =  "150dc57a1b433e64154302bdc40b6bb8aefa313a";
+      sha256 = "0w3knznv39k8bm85ri62f83czcrxknql7dv6p9hk1a5jx3xljgxq";
+    };
+  }
+  {
+    goPackagePath  = "google.golang.org/genproto";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/go-genproto";
+      rev =  "891aceb7c239e72692819142dfca057bdcbfcb96";
+      sha256 = "1axim84fqzsp6iialk6zl4fsbfpx658vssc6ccakn4yy1xc9h854";
+    };
+  }
+  {
+    goPackagePath  = "google.golang.org/grpc";
+    fetch = {
+      type = "git";
+      url = "https://github.com/grpc/grpc-go";
+      rev =  "5a9f7b402fe85096d2e1d0383435ee1876e863d0";
+      sha256 = "1hlirgvmzb929jpb1dvh930646ih5ffg3b6pmlilqr7ffdkl5z3j";
+    };
+  }
+]
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/backup/duplicati/default.nix b/nixpkgs/pkgs/tools/backup/duplicati/default.nix
new file mode 100644
index 000000000000..bb24cb35d875
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/duplicati/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchzip, mono, sqlite, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "duplicati";
+  version = "2.0.4.23";
+  channel = "beta";
+  build_date = "2019-07-14";
+
+  src = fetchzip {
+    url = "https://github.com/duplicati/duplicati/releases/download/v${version}-${version}_${channel}_${build_date}/duplicati-${version}_${channel}_${build_date}.zip";
+    sha256 = "1m2448vgl1fc2hkxkyasvdfgl728rqv16b41niznv5rsxv5643w2";
+    stripRoot = false;
+  };
+
+  buildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/{bin,share/${pname}-${version}}
+    cp -r * $out/share/${pname}-${version}
+    makeWrapper "${mono}/bin/mono" $out/bin/duplicati-cli \
+      --add-flags "$out/share/${pname}-${version}/Duplicati.CommandLine.exe" \
+      --prefix LD_LIBRARY_PATH : ${stdenv.lib.makeLibraryPath [
+          sqlite ]}
+    makeWrapper "${mono}/bin/mono" $out/bin/duplicati-server \
+      --add-flags "$out/share/${pname}-${version}/Duplicati.Server.exe" \
+      --prefix LD_LIBRARY_PATH : ${stdenv.lib.makeLibraryPath [
+          sqlite ]}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A free backup client that securely stores encrypted, incremental, compressed backups on cloud storage services and remote file servers";
+    homepage = https://www.duplicati.com/;
+    license = licenses.lgpl21;
+    maintainers = with maintainers; [ nyanloutre ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/duplicity/default.nix b/nixpkgs/pkgs/tools/backup/duplicity/default.nix
new file mode 100644
index 000000000000..a33067e88979
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/duplicity/default.nix
@@ -0,0 +1,96 @@
+{ stdenv, fetchpatch, fetchurl, python2Packages, librsync, ncftp, gnupg
+, gnutar
+, par2cmdline
+, utillinux
+, rsync
+, backblaze-b2, makeWrapper }:
+
+python2Packages.buildPythonApplication rec {
+  pname = "duplicity";
+  version = "0.7.19";
+
+  src = fetchurl {
+    url = "https://code.launchpad.net/duplicity/${stdenv.lib.versions.majorMinor version}-series/${version}/+download/${pname}-${version}.tar.gz";
+    sha256 = "0ag9dknslxlasslwfjhqgcqbkb1mvzzx93ry7lch2lfzcdd91am6";
+  };
+  patches = [
+    ./gnutar-in-test.patch
+    ./use-installed-scripts-in-test.patch
+
+    # The following patches improve the performance of installCheckPhase:
+    # Ensure all duplicity output is captured in tests
+    (fetchpatch {
+      extraPrefix = "";
+      sha256 = "07ay3mmnw8p2j3v8yvcpjsx0rf2jqly9ablwjpmry23dz9f0mxsd";
+      url = "https://bazaar.launchpad.net/~duplicity-team/duplicity/0.8-series/diff/1359.2.1";
+    })
+    # Minimize time spent sleeping between backups
+    (fetchpatch {
+      extraPrefix = "";
+      sha256 = "0v99q6mvikb8sf68gh3s0zg12pq8fijs87fv1qrvdnc8zvs4pmfs";
+      url = "https://bazaar.launchpad.net/~duplicity-team/duplicity/0.8-series/diff/1359.2.2";
+    })
+    # Remove unnecessary sleeping after running backups in tests
+    (fetchpatch {
+      extraPrefix = "";
+      sha256 = "1bmgp4ilq2gwz2k73fxrqplf866hj57lbyabaqpkvwxhr0ch1jiq";
+      url = "https://bazaar.launchpad.net/~duplicity-team/duplicity/0.8-series/diff/1359.2.3";
+    })
+  ] ++ stdenv.lib.optionals stdenv.isLinux [
+    ./linux-disable-timezone-test.patch
+  ];
+
+  buildInputs = [ librsync makeWrapper python2Packages.wrapPython ];
+  propagatedBuildInputs = [ backblaze-b2 ] ++ (with python2Packages; [
+    boto cffi cryptography ecdsa enum idna pygobject3 fasteners
+    ipaddress lockfile paramiko pyasn1 pycrypto six pydrive
+  ]);
+  checkInputs = [
+    gnupg  # Add 'gpg' to PATH.
+    gnutar  # Add 'tar' to PATH.
+    librsync  # Add 'rdiff' to PATH.
+    par2cmdline  # Add 'par2' to PATH.
+  ] ++ stdenv.lib.optionals stdenv.isLinux [
+    utillinux  # Add 'setsid' to PATH.
+  ] ++ (with python2Packages; [ lockfile mock pexpect ]);
+
+  postInstall = ''
+    wrapProgram $out/bin/duplicity \
+      --prefix PATH : "${stdenv.lib.makeBinPath [ gnupg ncftp rsync ]}"
+
+    wrapPythonPrograms
+  '';
+
+  preCheck = ''
+    wrapPythonProgramsIn "$PWD/testing/overrides/bin" "$pythonPath"
+
+    # Add 'duplicity' to PATH for tests.
+    # Normally, 'setup.py test' adds 'build/scripts-2.7/' to PATH before running
+    # tests. However, 'build/scripts-2.7/duplicity' is not wrapped, so its
+    # shebang is incorrect and it fails to run inside Nix' sandbox.
+    # In combination with use-installed-scripts-in-test.patch, make 'setup.py
+    # test' use the installed 'duplicity' instead.
+    PATH="$out/bin:$PATH"
+
+    # Don't run developer-only checks (pep8, etc.).
+    export RUN_CODE_TESTS=0
+  '' + stdenv.lib.optionalString stdenv.isDarwin ''
+    # Work around the following error when running tests:
+    # > Max open files of 256 is too low, should be >= 1024.
+    # > Use 'ulimit -n 1024' or higher to correct.
+    ulimit -n 1024
+  '';
+
+  # TODO: Fix test failures on macOS 10.13:
+  #
+  # > OSError: out of pty devices
+  doCheck = !stdenv.isDarwin;
+
+  meta = with stdenv.lib; {
+    description = "Encrypted bandwidth-efficient backup using the rsync algorithm";
+    homepage = https://www.nongnu.org/duplicity;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ peti ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/duplicity/gnutar-in-test.patch b/nixpkgs/pkgs/tools/backup/duplicity/gnutar-in-test.patch
new file mode 100644
index 000000000000..b2820feb0190
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/duplicity/gnutar-in-test.patch
@@ -0,0 +1,18 @@
+--- a/testing/functional/test_restart.py
++++ b/testing/functional/test_restart.py
+@@ -323,14 +323,7 @@ class RestartTestWithoutEncryption(RestartTest):
+         https://launchpad.net/bugs/929067
+         """
+
+-        if platform.system().startswith('Linux'):
+-            tarcmd = "tar"
+-        elif platform.system().startswith('Darwin'):
+-            tarcmd = "gtar"
+-        elif platform.system().endswith('BSD'):
+-            tarcmd = "gtar"
+-        else:
+-            raise Exception("Platform %s not supported by tar/gtar." % platform.platform())
++        tarcmd = "tar"
+
+         # Intial normal backup
+         self.backup("full", "testfiles/blocktartest")
diff --git a/nixpkgs/pkgs/tools/backup/duplicity/linux-disable-timezone-test.patch b/nixpkgs/pkgs/tools/backup/duplicity/linux-disable-timezone-test.patch
new file mode 100644
index 000000000000..b5e6df18a15b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/duplicity/linux-disable-timezone-test.patch
@@ -0,0 +1,10 @@
+--- a/testing/unit/test_statistics.py
++++ b/testing/unit/test_statistics.py
+@@ -59,6 +59,7 @@ class StatsObjTest(UnitTestCase):
+         s1 = StatsDeltaProcess()
+         assert s1.get_stat('SourceFiles') == 0
+
++    @unittest.skip("Broken on Linux in Nix' build environment")
+     def test_get_stats_string(self):
+         """Test conversion of stat object into string"""
+         s = StatsObj()
diff --git a/nixpkgs/pkgs/tools/backup/duplicity/use-installed-scripts-in-test.patch b/nixpkgs/pkgs/tools/backup/duplicity/use-installed-scripts-in-test.patch
new file mode 100644
index 000000000000..191808abc637
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/duplicity/use-installed-scripts-in-test.patch
@@ -0,0 +1,13 @@
+--- a/setup.py
++++ b/setup.py
+@@ -92,10 +92,6 @@ class TestCommand(test):
+                 except Exception:
+                     pass
+
+-        os.environ['PATH'] = "%s:%s" % (
+-            os.path.abspath(build_scripts_cmd.build_dir),
+-            os.environ.get('PATH'))
+-
+         test.run(self)
+
+     def run_tests(self):
diff --git a/nixpkgs/pkgs/tools/backup/duply/default.nix b/nixpkgs/pkgs/tools/backup/duply/default.nix
new file mode 100644
index 000000000000..3e4375cb76c6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/duply/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchurl, coreutils, python2, duplicity, gawk, gnupg, bash
+, gnugrep, txt2man, makeWrapper, which
+}:
+
+stdenv.mkDerivation rec {
+  pname = "duply";
+  version = "2.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/ftplicity/duply%20%28simple%20duplicity%29/2.2.x/duply_${version}.tgz";
+    sha256 = "1bd7ivswxmxg64n0fnwgz6bkgckhdhz2qnnlkqqx4ccdxx15krbr";
+  };
+
+  buildInputs = [ txt2man makeWrapper ];
+
+  postPatch = "patchShebangs .";
+
+  installPhase = ''
+    mkdir -p "$out/bin"
+    mkdir -p "$out/share/man/man1"
+    install -vD duply "$out/bin"
+    wrapProgram "$out/bin/duply" --set PATH \
+        ${stdenv.lib.makeBinPath [ coreutils python2 duplicity gawk gnupg bash gnugrep txt2man which ]}
+    "$out/bin/duply" txt2man > "$out/share/man/man1/duply.1"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Shell front end for the duplicity backup tool";
+    longDescription = ''
+      Duply is a shell front end for the duplicity backup tool
+      https://www.nongnu.org/duplicity. It greatly simplifies its usage by
+      implementing backup job profiles, batch commands and more. Who says
+      secure backups on non-trusted spaces are no child's play?
+    '';
+    homepage = https://duply.net/;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.bjornfor ];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/easysnap/default.nix b/nixpkgs/pkgs/tools/backup/easysnap/default.nix
new file mode 100644
index 000000000000..a56d1274f92e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/easysnap/default.nix
@@ -0,0 +1,31 @@
+{stdenv, fetchFromGitHub, zfs }:
+
+stdenv.mkDerivation {
+  pname = "easysnap";
+  version = "unstable-2019-02-17";
+
+  src = fetchFromGitHub {
+    owner = "sjau";
+    repo = "easysnap";
+    rev = "9ef5d1ff51ccf9939a88b7b32b4959d27cf61ecc";
+    sha256 = "0m0217ni909nham15w5vxg8y7cw2zwjibnhvgnpxxsap8zkhv1m4";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -n easysnap* $out/bin/
+
+    for i in $out/bin/*; do
+      substituteInPlace $i \
+        --replace zfs ${zfs}/bin/zfs
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    homepage    = https://github.com/sjau/easysnap;
+    description = "Customizable ZFS Snapshotting tool with zfs send/recv pulling";
+    license     = licenses.gpl3;
+    maintainers = with maintainers; [ sjau ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/backup/flockit/default.nix b/nixpkgs/pkgs/tools/backup/flockit/default.nix
new file mode 100644
index 000000000000..8d71671f6fec
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/flockit/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, fetchFromGitHub, runtimeShell }:
+
+stdenv.mkDerivation {
+  pname = "flockit";
+  version = "2012-08-11";
+
+  src = fetchFromGitHub {
+    owner  = "smerritt";
+    repo   = "flockit";
+    rev    = "5c2b2092f8edcc8e3e2eb6ef66c968675dbfa686";
+    sha256 = "0vajck9q2677gpn9a4flkyz7mw69ql1647cjwqh834nrcr2b5164";
+  };
+
+  installPhase = ''
+    mkdir -p $out/lib $out/bin
+    cp ./libflockit.so $out/lib
+
+    (cat <<EOI
+    #!${runtimeShell}
+    env LD_PRELOAD="$out/lib/libflockit.so" FLOCKIT_FILE_PREFIX=\$1 \''${@:2}
+    EOI
+    ) > $out/bin/flockit
+    chmod +x $out/bin/flockit
+  '';
+
+  meta = with stdenv.lib; {
+    description = "LD_PRELOAD shim to add file locking to programs that don't do it (I'm looking at you, rsync!)";
+    longDescription = ''
+      This library and tool exists solely because rsync doesn't have file locking.
+
+      It's not used like a normal library; you don't link against it, and you
+      don't have to patch your source code to use it. It's inserted between your
+      program and its libraries by use of LD_PRELOAD.
+
+      For example:
+
+        $ env LD_PRELOAD=$(nix-build -A pkgs.flockit)/lib/libflockit.so FLOCKIT_FILE_PREFIX=test rsync SRC DEST
+
+      Besides the library a handy executable is provided which can simplify the above to:
+
+        $ $(nix-build -A pkgs.flockit)/bin/flockit test rsync SRC DEST
+
+      Also see the following blog post:
+      https://www.swiftstack.com/blog/2012/08/15/old-school-monkeypatching/
+    '';
+    homepage = https://github.com/smerritt/flockit;
+    license = licenses.asl20;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.basvandijk ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/grab-site/default.nix b/nixpkgs/pkgs/tools/backup/grab-site/default.nix
new file mode 100644
index 000000000000..c8093f4453e9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/grab-site/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, python3Packages, fetchFromGitHub }:
+
+python3Packages.buildPythonApplication rec {
+  version = "2.1.16";
+  name = "grab-site-${version}";
+
+  src = fetchFromGitHub {
+    rev = version;
+    owner = "ArchiveTeam";
+    repo = "grab-site";
+    sha256 = "01n3mi9q593sd2bbmbbp5pn2c3pkwj7iqmy02zbh8ciqskraja4z";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    click ludios_wpull manhole lmdb autobahn fb-re2 websockets cchardet
+  ];
+
+  checkPhase = ''
+    export PATH=$PATH:$out/bin
+    bash ./tests/offline-tests
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Crawler for web archiving with WARC output";
+    homepage = https://github.com/ArchiveTeam/grab-site;
+    license = licenses.mit;
+    maintainers = with maintainers; [ ivan ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/hpe-ltfs/default.nix b/nixpkgs/pkgs/tools/backup/hpe-ltfs/default.nix
new file mode 100644
index 000000000000..d289febe1f09
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/hpe-ltfs/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchFromGitHub, fuse, icu, pkgconfig, libxml2, libuuid }:
+
+stdenv.mkDerivation rec {
+  version = "3.4.2_Z7550-02501";
+  pname = "hpe-ltfs";
+
+  src = fetchFromGitHub {
+    rev = version;
+    owner = "nix-community";
+    repo = "hpe-ltfs";
+    sha256 = "193593hsc8nf5dn1fkxhzs1z4fpjh64hdkc8q6n9fgplrpxdlr4s";
+  };
+
+  sourceRoot = "source/ltfs";
+
+  nativeBuildInputs = [ pkgconfig ];
+
+  buildInputs = [ 
+    fuse icu libxml2 libuuid
+  ];
+
+  meta = with stdenv.lib; {
+    description = "HPE's implementation of the open-source tape filesystem standard ltfs";
+    homepage = https://support.hpe.com/hpesc/public/km/product/1009214665/Product;
+    license = licenses.lgpl21;
+    maintainers = [ maintainers.redvers ];
+    platforms = platforms.linux;
+    downloadPage = https://github.com/nix-community/hpe-ltfs;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/httrack/default.nix b/nixpkgs/pkgs/tools/backup/httrack/default.nix
new file mode 100644
index 000000000000..6fe614195a4b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/httrack/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchurl, zlib, openssl, libiconv }:
+
+stdenv.mkDerivation rec {
+  version = "3.49.2";
+  pname = "httrack";
+
+  src = fetchurl {
+    url = "https://mirror.httrack.com/httrack-${version}.tar.gz";
+    sha256 = "09a0gm67nml86qby1k1gh7rdxamnrnzwr6l9r5iiq94favjs0xrl";
+  };
+
+  buildInputs = [ zlib openssl ] ++ stdenv.lib.optional stdenv.isDarwin libiconv;
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "Easy-to-use offline browser / website mirroring utility";
+    homepage    = http://www.httrack.com;
+    license     = licenses.gpl3;
+    maintainers = with maintainers; [ the-kenny ];
+    platforms   = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/httrack/qt.nix b/nixpkgs/pkgs/tools/backup/httrack/qt.nix
new file mode 100644
index 000000000000..8cf3eb29462c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/httrack/qt.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchurl, cmake, pkgconfig, makeWrapper
+, httrack, qtbase, qtmultimedia }:
+
+stdenv.mkDerivation rec {
+  pname = "httraqt";
+  version = "1.4.9";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/httraqt/${pname}-${version}.tar.gz";
+    sha256 = "0pjxqnqchpbla4xiq4rklc06484n46cpahnjy03n9rghwwcad25b";
+  };
+
+  buildInputs = [ httrack qtbase qtmultimedia ];
+
+  nativeBuildInputs = [ cmake makeWrapper pkgconfig ];
+
+  enableParallelBuilding = true;
+
+  prePatch = ''
+    substituteInPlace cmake/HTTRAQTFindHttrack.cmake \
+      --replace /usr/include/httrack/ ${httrack}/include/httrack/
+
+    substituteInPlace distribution/posix/CMakeLists.txt \
+      --replace /usr/share $out/share
+
+    substituteInPlace desktop/httraqt.desktop \
+      --replace Exec=httraqt Exec=$out/bin/httraqt
+
+    substituteInPlace sources/main/httraqt.cpp \
+      --replace /usr/share/httraqt/ $out/share/httraqt
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Easy-to-use offline browser / website mirroring utility - QT frontend";
+    homepage    = http://www.httrack.com;
+    license     = licenses.gpl3;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms   = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/iceshelf/default.nix b/nixpkgs/pkgs/tools/backup/iceshelf/default.nix
new file mode 100644
index 000000000000..546339ca002a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/iceshelf/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, lib, fetchFromGitHub, git, awscli, python3 }:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "iceshelf";
+  version = "unstable-2019-07-03";
+
+  format = "other";
+
+	src = fetchFromGitHub {
+		owner = "mrworf";
+		repo = pname;
+		rev = "26768dde3fc54fa412e523eb8f8552e866b4853b";
+		sha256 = "08rcbd14vn7312rmk2hyvdzvhibri31c4r5lzdrwb1n1y9q761qm";
+  };
+
+  propagatedBuildInputs = [
+    git
+    awscli
+    python3.pkgs.python-gnupg
+  ];
+
+	installPhase = ''
+		mkdir -p $out/bin $out/share/doc/${pname} $out/${python3.sitePackages}
+    cp -v iceshelf iceshelf-restore $out/bin
+    cp -v iceshelf.sample.conf $out/share/doc/${pname}/
+    cp -rv modules $out/${python3.sitePackages}
+	'';
+
+  meta = with lib; {
+    description = "A simple tool to allow storage of signed, encrypted, incremental backups using Amazon's Glacier storage";
+    license = licenses.lgpl2;
+    homepage = "https://github.com/mrworf/iceshelf";
+    maintainers = with maintainers; [ mmahut ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/lvmsync/Gemfile b/nixpkgs/pkgs/tools/backup/lvmsync/Gemfile
new file mode 100644
index 000000000000..a87462e2b8a2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/lvmsync/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org/'
+gem 'lvmsync'
diff --git a/nixpkgs/pkgs/tools/backup/lvmsync/Gemfile.lock b/nixpkgs/pkgs/tools/backup/lvmsync/Gemfile.lock
new file mode 100644
index 000000000000..1fe903f15088
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/lvmsync/Gemfile.lock
@@ -0,0 +1,19 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    git-version-bump (0.15.1)
+    lvmsync (3.3.2)
+      git-version-bump (~> 0.10)
+      treetop
+    polyglot (0.3.5)
+    treetop (1.6.9)
+      polyglot (~> 0.3)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  lvmsync
+
+BUNDLED WITH
+   1.14.6
diff --git a/nixpkgs/pkgs/tools/backup/lvmsync/default.nix b/nixpkgs/pkgs/tools/backup/lvmsync/default.nix
new file mode 100644
index 000000000000..a52c6bf1ba7c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/lvmsync/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, bundlerEnv, ruby, bundlerUpdateScript, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "lvmsync";
+  version = (import ./gemset.nix).${pname}.version;
+
+  buildInputs = [ makeWrapper ];
+
+  phases = ["installPhase"];
+
+  installPhase = let
+    env = bundlerEnv {
+      name = "${pname}-${version}-gems";
+      ruby = ruby;
+      gemfile  = ./Gemfile;
+      lockfile = ./Gemfile.lock;
+      gemset   = ./gemset.nix;
+    };
+  in ''
+    mkdir -p $out/bin
+    makeWrapper ${env}/bin/lvmsync $out/bin/lvmsync
+  '';
+
+  passthru.updateScript = bundlerUpdateScript "lvmsync";
+
+  meta = with stdenv.lib; {
+    description = "Optimised synchronisation of LVM snapshots over a network";
+    homepage = https://theshed.hezmatt.org/lvmsync/;
+    license = licenses.gpl3;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ jluttine nicknovitski ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/backup/lvmsync/gemset.nix b/nixpkgs/pkgs/tools/backup/lvmsync/gemset.nix
new file mode 100644
index 000000000000..7f80e928660b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/lvmsync/gemset.nix
@@ -0,0 +1,36 @@
+{
+  git-version-bump = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xcj20gmbpqn2gcpid4pxpnimfdg2ip9jnl1572naz0magcrwl2s";
+      type = "gem";
+    };
+    version = "0.15.1";
+  };
+  lvmsync = {
+    dependencies = ["git-version-bump" "treetop"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02mdrvfibvab4p4yrdzxvndhy8drss3ri7izybcwgpbyc7isk8mv";
+      type = "gem";
+    };
+    version = "3.3.2";
+  };
+  polyglot = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bqnxwyip623d8pr29rg6m8r0hdg08fpr2yb74f46rn1wgsnxmjr";
+      type = "gem";
+    };
+    version = "0.3.5";
+  };
+  treetop = {
+    dependencies = ["polyglot"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sdkd1v2h8dhj9ncsnpywmqv7w1mdwsyc5jwyxlxwriacv8qz8bd";
+      type = "gem";
+    };
+    version = "1.6.9";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/backup/mt-st/default.nix b/nixpkgs/pkgs/tools/backup/mt-st/default.nix
new file mode 100644
index 000000000000..0b7b7469af1b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/mt-st/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "mt-st-1.3";
+
+  src = fetchurl {
+    url = "https://github.com/iustin/mt-st/releases/download/${name}/${name}.tar.gz";
+    sha256 = "b552775326a327cdcc076c431c5cbc4f4e235ac7c41aa931ad83f94cccb9f6de";
+  };
+
+  installFlags = [ "PREFIX=$(out)" "EXEC_PREFIX=$(out)" ];
+
+  meta = {
+    description = "Magnetic Tape control tools for Linux";
+    longDescription = ''
+      Fork of the standard "mt" tool with additional Linux-specific IOCTLs.
+    '';
+    homepage = https://github.com/iustin/mt-st;
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = [ stdenv.lib.maintainers.redvers ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/mtx/default.nix b/nixpkgs/pkgs/tools/backup/mtx/default.nix
new file mode 100644
index 000000000000..46f213a6ef4c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/mtx/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "mtx-1.3.12";
+
+  src = fetchurl {
+    url = "mirror://gentoo/distfiles/${name}.tar.gz";
+    sha256 = "0261c5e90b98b6138cd23dadecbc7bc6e2830235145ed2740290e1f35672d843";
+  };
+
+  doCheck = false;
+
+  meta = {
+    description = "Media Changer Tools";
+    longDescription = ''
+      The mtx command controls single or multi-drive SCSI media changers such as
+      tape changers, autoloaders, tape libraries, or optical media jukeboxes. It
+      can also be used with media changers that use the 'ATTACHED' API, presuming
+      that they properly report the MChanger bit as required by the SCSI T-10 SMC
+      specification.
+    '';
+    homepage = https://sourceforge.net/projects/mtx/;
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = [ stdenv.lib.maintainers.redvers ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/mydumper/default.nix b/nixpkgs/pkgs/tools/backup/mydumper/default.nix
new file mode 100644
index 000000000000..7160e7f19503
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/mydumper/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitHub, cmake, pkgconfig
+, glib, zlib, pcre, libmysqlclient, libressl }:
+
+stdenv.mkDerivation rec {
+  version = "0.9.5";
+  pname = "mydumper";
+
+  src = fetchFromGitHub {
+    owner  = "maxbube";
+    repo   = "mydumper";
+    rev    = "v${version}";
+    sha256 = "0vbz0ri5hm6yzkrcgnaj8px6bf59myr5dbhyy7fd4cv44hr685k6";
+  };
+
+  nativeBuildInputs = [ cmake pkgconfig ];
+
+  buildInputs = [ glib zlib pcre libmysqlclient libressl ];
+
+  meta = with stdenv.lib; {
+    description = ''High-perfomance MySQL backup tool'';
+    homepage = https://github.com/maxbube/mydumper;
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ izorkin ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/ori/default.nix b/nixpkgs/pkgs/tools/backup/ori/default.nix
new file mode 100644
index 000000000000..30ee0041c7cc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/ori/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, boost, pkgconfig, scons, utillinux, fuse, libevent, openssl, zlib }:
+
+stdenv.mkDerivation {
+  version = "0.8.1";
+  pname = "ori";
+
+  src = fetchurl {
+    url = "https://bitbucket.org/orifs/ori/downloads/ori-0.8.1.tar.xz";
+    sha256 = "8ce1a3dfbb6d1538885e993616bdfe71be44711d48f7f6798ff6bc0a39b3deca";
+  };
+
+  buildInputs = [ 
+    boost pkgconfig scons utillinux fuse libevent openssl zlib
+  ];
+
+  buildPhase = ''
+    scons PREFIX=$out WITH_ORILOCAL=1 install
+  '';
+
+  installPhase = ":";
+
+  meta = with stdenv.lib; {
+    description = "A secure distributed file system";
+    homepage = http://ori.scs.stanford.edu/;
+    license = licenses.mit;
+    platforms = platforms.unix;
+    broken = true; # 2018-04-11
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/partclone/default.nix b/nixpkgs/pkgs/tools/backup/partclone/default.nix
new file mode 100644
index 000000000000..fa4346c8cccc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/partclone/default.nix
@@ -0,0 +1,50 @@
+{ stdenv, fetchFromGitHub, autoreconfHook
+, pkgconfig, libuuid, e2fsprogs, nilfs-utils, ntfs3g
+}:
+
+stdenv.mkDerivation rec {
+  pname = "partclone";
+  version = "0.3.11";
+
+  src = fetchFromGitHub {
+    owner = "Thomas-Tsai";
+    repo = "partclone";
+    rev = version;
+    sha256 = "0bv15i0gxym4dv48rgaavh8p94waryn1l6viis6qh5zm9cd08skg";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  buildInputs = [
+    e2fsprogs libuuid stdenv.cc.libc nilfs-utils ntfs3g 
+    (stdenv.lib.getOutput "static" stdenv.cc.libc)
+  ];
+
+  configureFlags = [
+    "--enable-xfs"
+    "--enable-extfs"
+    "--enable-hfsp"
+    "--enable-fat"
+    "--enable-exfat"
+    "--enable-ntfs"
+    "--enable-btrfs"
+    "--enable-minix"
+    "--enable-f2fs"
+    "--enable-nilfs2"
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = {
+    description = "Utilities to save and restore used blocks on a partition";
+    longDescription = ''
+      Partclone provides utilities to save and restore used blocks on a
+      partition and is designed for higher compatibility of the file system by
+      using existing libraries, e.g. e2fslibs is used to read and write the
+      ext2 partition.
+    '';
+    homepage = https://partclone.org;
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = [stdenv.lib.maintainers.marcweber];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/partimage/default.nix b/nixpkgs/pkgs/tools/backup/partimage/default.nix
new file mode 100644
index 000000000000..4a18deeb57c8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/partimage/default.nix
@@ -0,0 +1,43 @@
+{stdenv
+, fetchurl
+, fetchpatch
+, bzip2
+, zlib
+, newt
+, openssl
+, pkgconfig
+, slang
+, autoreconfHook
+}:
+stdenv.mkDerivation {
+  name = "partimage-0.6.9";
+  enableParallelBuilding = true;
+
+  src = fetchurl {
+    url = mirror://sourceforge/partimage/partimage-0.6.9.tar.bz2;
+    sha256 = "0db6xiphk6xnlpbxraiy31c5xzj0ql6k4rfkmqzh665yyj0nqfkm";
+  };
+
+  configureFlags = [ "--with-ssl-headers=${openssl.dev}/include/openssl" ];
+
+  nativeBuildInputs = [ pkgconfig autoreconfHook ];
+  buildInputs = [ bzip2 zlib newt newt openssl slang ];
+
+  patches = [
+    ./gentoos-zlib.patch
+    (fetchpatch {
+      name = "openssl-1.1.patch";
+      url = "https://gitweb.gentoo.org/repo/gentoo.git/plain/sys-block/partimage/files/"
+        + "partimage-0.6.9-openssl-1.1-compatibility.patch?id=3fe8e9910002b6523d995512a646b063565d0447";
+      sha256 = "1hs0krxrncxq1w36bhad02yk8yx71zcfs35cw87c82sl2sfwasjg";
+    })
+  ];
+
+  meta = {
+    description = "Opensource disk backup software";
+    homepage = http://www.partimage.org;
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = [stdenv.lib.maintainers.marcweber];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/partimage/gentoos-zlib.patch b/nixpkgs/pkgs/tools/backup/partimage/gentoos-zlib.patch
new file mode 100644
index 000000000000..05150e131e36
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/partimage/gentoos-zlib.patch
@@ -0,0 +1,33 @@
+http://bugs.gentoo.org/405323
+
+--- a/src/client/imagefile.cpp
++++ b/src/client/imagefile.cpp
+@@ -783,7 +783,7 @@
+   else if (m_options.dwCompression == COMPRESS_GZIP) // Gzip compression
+     {
+       showDebug(1, "open gzip\n");
+-      m_gzImageFile = (gzFile *) gzdopen(m_nFdImage, "wb"); //"wb1h");
++      m_gzImageFile = gzdopen(m_nFdImage, "wb"); //"wb1h");
+       if (m_gzImageFile == NULL)
+ 	{
+ 	  showDebug(1, "error:%d %s\n", errno, strerror(errno));
+@@ -1098,7 +1098,7 @@
+     }
+   else if (m_options.dwCompression == COMPRESS_GZIP) // Gzip compression
+     {
+-      m_gzImageFile = (gzFile *) gzdopen(m_nFdImage, "rb");
++      m_gzImageFile = gzdopen(m_nFdImage, "rb");
+       if (m_gzImageFile == NULL)
+         THROW(ERR_ERRNO, errno);
+       else
+--- a/src/client/imagefile.h
++++ b/src/client/imagefile.h
+@@ -41,7 +41,7 @@
+   COptions m_options;
+ 
+   FILE *m_fImageFile;
+-  gzFile *m_gzImageFile;
++  gzFile m_gzImageFile;
+   BZFILE *m_bzImageFile;
+ 
+   int m_nFdImage;
diff --git a/nixpkgs/pkgs/tools/backup/percona-xtrabackup/default.nix b/nixpkgs/pkgs/tools/backup/percona-xtrabackup/default.nix
new file mode 100644
index 000000000000..98eae9cc6702
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/percona-xtrabackup/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, fetchFromGitHub, cmake, pkgconfig
+, boost, bison, curl, ncurses, openssl, xxd
+, libaio, libev, libgcrypt, libgpgerror, libtool, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "percona-xtrabackup";
+  version = "2.4.12";
+
+  src = fetchFromGitHub {
+    owner = "percona";
+    repo = "percona-xtrabackup";
+    rev = "${pname}-${version}";
+    sha256 = "1w17v2c677b3vfnm81bs63kjbfiin7f12wl9fbgp83hfpyx5msan";
+  };
+
+  nativeBuildInputs = [ cmake pkgconfig ];
+
+  buildInputs = [
+    boost bison curl ncurses openssl xxd
+    libaio libev libgcrypt libgpgerror libtool zlib
+  ];
+
+  cmakeFlags = [
+    "-DBUILD_CONFIG=xtrabackup_release"
+    "-DINSTALL_MYSQLTESTDIR=OFF"
+    "-DWITH_BOOST=system"
+    "-DWITH_SSL=system"
+    "-DWITH_ZLIB=system"
+    "-DWITH_MAN_PAGES=OFF"
+    "-DCMAKE_CXX_FLAGS=-std=gnu++03"
+  ];
+
+  postInstall = ''
+    rm -r "$out"/lib/plugin/debug
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Non-blocking backup tool for MySQL";
+    homepage = http://www.percona.com/software/percona-xtrabackup;
+    license = licenses.lgpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ izorkin ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/pyznap/default.nix b/nixpkgs/pkgs/tools/backup/pyznap/default.nix
new file mode 100644
index 000000000000..42df651e1a8f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/pyznap/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildPythonApplication
+, fetchPypi
+, setuptools
+}:
+
+buildPythonApplication rec {
+  pname = "pyznap";
+  version = "1.4.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "00xpw6rmkq5cfjfw23mv0917wfzvb5zxj420p6yh0rnl3swh7gi8";
+  };
+
+  propagatedBuildInputs = [
+    setuptools
+  ];  
+
+  # tests aren't included in the PyPI packages
+  doCheck = false;
+
+  meta = {
+    homepage = "https://github.com/yboetz/pyznap";
+    description = "ZFS snapshot tool written in python";
+    license = with lib.licenses; [ gpl3 ];
+    maintainers = with lib.maintainers; [ rbrewer ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/rdedup/default.nix b/nixpkgs/pkgs/tools/backup/rdedup/default.nix
new file mode 100644
index 000000000000..bd5c10ea122c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/rdedup/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchFromGitHub, rustPlatform, pkgconfig, openssl, libsodium
+, llvmPackages, clang_39, lzma
+, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rdedup";
+  version = "3.1.1";
+
+  src = fetchFromGitHub {
+    owner = "dpc";
+    repo = "rdedup";
+    rev = "rdedup-v${version}";
+    sha256 = "0y34a3mpghdmcb2rx4z62q0s351bfmy1287d75mm07ryfgglgsd7";
+  };
+
+  cargoSha256 = "19j1xscchnckqq1nddx9nr9wxxv124ab40l4mdalqbkli4zd748j";
+
+  patches = [
+    ./v3.1.1-fix-Cargo.lock.patch
+  ];
+
+  nativeBuildInputs = [ pkgconfig llvmPackages.libclang clang_39 ];
+  buildInputs = [ openssl libsodium lzma ]
+    ++ (stdenv.lib.optional stdenv.isDarwin Security);
+
+  configurePhase = ''
+    export LIBCLANG_PATH="${llvmPackages.libclang}/lib"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Data deduplication with compression and public key encryption";
+    homepage = https://github.com/dpc/rdedup;
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ dywedir ];
+    platforms = platforms.all;
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/rdedup/v3.1.1-fix-Cargo.lock.patch b/nixpkgs/pkgs/tools/backup/rdedup/v3.1.1-fix-Cargo.lock.patch
new file mode 100644
index 000000000000..7dafc7765b7d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/rdedup/v3.1.1-fix-Cargo.lock.patch
@@ -0,0 +1,28 @@
+diff --git a/Cargo.lock b/Cargo.lock
+index 96be83a..fe07471 100644
+--- a/Cargo.lock
++++ b/Cargo.lock
+@@ -880,12 +880,12 @@ dependencies = [
+ 
+ [[package]]
+ name = "rdedup"
+-version = "3.1.0"
++version = "3.1.1"
+ dependencies = [
+  "clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)",
+  "hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
+  "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
+- "rdedup-lib 3.0.0",
++ "rdedup-lib 3.1.0",
+  "rpassword 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+  "slog 2.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
+  "slog-async 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+@@ -900,7 +900,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
+ 
+ [[package]]
+ name = "rdedup-lib"
+-version = "3.0.0"
++version = "3.1.0"
+ dependencies = [
+  "backblaze-b2 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
+  "base64 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
diff --git a/nixpkgs/pkgs/tools/backup/rdiff-backup/default.nix b/nixpkgs/pkgs/tools/backup/rdiff-backup/default.nix
new file mode 100644
index 000000000000..f3910893b7b2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/rdiff-backup/default.nix
@@ -0,0 +1,24 @@
+{stdenv, fetchurl, python2Packages, librsync, gnused }:
+
+python2Packages.buildPythonApplication {
+  name = "rdiff-backup-1.3.3";
+
+  src = fetchurl {
+    url = mirror://savannah/rdiff-backup/rdiff-backup-1.3.3.tar.gz;
+    sha256 = "01hcwf5rgqi303fa4kdjkbpa7n8mvvh7h9gpgh2b23nz73k0q0zf";
+  };
+
+  patches = [ ./fix-librsync-rs_default_strong_len.patch ];
+
+  buildInputs = [ librsync gnused ];
+
+  doCheck = false;
+
+  meta = {
+    description = "Backup system trying to combine best a mirror and an incremental backup system";
+    homepage = http://rdiff-backup.nongnu.org/;
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.all;
+    maintainers = with stdenv.lib.maintainers; [ the-kenny ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/rdiff-backup/fix-librsync-rs_default_strong_len.patch b/nixpkgs/pkgs/tools/backup/rdiff-backup/fix-librsync-rs_default_strong_len.patch
new file mode 100644
index 000000000000..ce23c8a8124f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/rdiff-backup/fix-librsync-rs_default_strong_len.patch
@@ -0,0 +1,20 @@
+Patch by Roman Tereshonkov and Kari Hautio for rdiff-backup <= 1.2.8 to avoid a build failure with
+librsync >= 1.0.0 (which is a security bugfix release). The discussion and solution finding can be
+found at https://bugs.launchpad.net/duplicity/+bug/1416344 (for duplicity).
+
+--- rdiff-backup-1.2.8/_librsyncmodule.c			2009-03-16 15:36:21.000000000 +0100
++++ rdiff-backup-1.2.8/_librsyncmodule.c.librsync-1.0.0		2015-03-02 00:54:24.000000000 +0100
+@@ -59,8 +59,13 @@
+   if (sm == NULL) return NULL;
+   sm->x_attr = NULL;
+ 
++#ifdef RS_DEFAULT_STRONG_LEN
+   sm->sig_job = rs_sig_begin((size_t)blocklen,
+ 							 (size_t)RS_DEFAULT_STRONG_LEN);
++#else
++  sm->sig_job = rs_sig_begin((size_t)blocklen,
++							 (size_t)8, RS_MD4_SIG_MAGIC);
++#endif
+   return (PyObject*)sm;
+ }
+ 
diff --git a/nixpkgs/pkgs/tools/backup/rdup/default.nix b/nixpkgs/pkgs/tools/backup/rdup/default.nix
new file mode 100644
index 000000000000..0df4ecda89ef
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/rdup/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchFromGitHub, pkgconfig, autoreconfHook, glib, pcre }:
+
+stdenv.mkDerivation {
+  pname = "rdup";
+  version = "1.1.15";
+
+  src = fetchFromGitHub {
+    owner = "miekg";
+    repo = "rdup";
+    rev = "d66e4320cd0bbcc83253baddafe87f9e0e83caa6";
+    sha256 = "0bzyv6qmnivxnv9nw7lnfn46k0m1dlxcjj53zcva6v8y8084l1iw";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  buildInputs = [ glib pcre ];
+
+  meta = {
+    description = "The only backup program that doesn't make backups";
+    homepage    = "https://github.com/miekg/rdup";
+    license    = stdenv.lib.licenses.gpl3;
+    platforms   = stdenv.lib.platforms.linux;
+    maintainers = with stdenv.lib.maintainers; [ sternenseemann ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/restic/default.nix b/nixpkgs/pkgs/tools/backup/restic/default.nix
new file mode 100644
index 000000000000..26f05d419545
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/restic/default.nix
@@ -0,0 +1,41 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "restic";
+  version = "0.9.6";
+
+  goPackagePath = "github.com/restic/restic";
+
+  src = fetchFromGitHub {
+    owner = "restic";
+    repo = "restic";
+    rev = "v${version}";
+    sha256 = "0lydll93n1lcn1fl669b9cikmzz9d6vfpc8ky3ng5fi8kj3v1dz7";
+  };
+
+  buildPhase = ''
+    cd go/src/${goPackagePath}
+    go run build.go
+  '';
+
+  installPhase = ''
+    mkdir -p \
+      $bin/bin \
+      $bin/etc/bash_completion.d \
+      $bin/share/zsh/vendor-completions \
+      $bin/share/man/man1
+    cp restic $bin/bin/
+    $bin/bin/restic generate \
+      --bash-completion $bin/etc/bash_completion.d/restic.sh \
+      --zsh-completion $bin/share/zsh/vendor-completions/_restic \
+      --man $bin/share/man/man1
+  '';
+
+  meta = with lib; {
+    homepage = https://restic.net;
+    description = "A backup program that is fast, efficient and secure";
+    platforms = platforms.linux ++ platforms.darwin;
+    license = licenses.bsd2;
+    maintainers = [ maintainers.mbrgm ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/restic/rest-server.nix b/nixpkgs/pkgs/tools/backup/restic/rest-server.nix
new file mode 100644
index 000000000000..c7f12cb751b2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/restic/rest-server.nix
@@ -0,0 +1,32 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "restic-rest-server";
+  version = "0.9.7";
+
+  goPackagePath = "github.com/restic/rest-server";
+
+  src = fetchFromGitHub {
+    owner = "restic";
+    repo = "rest-server";
+    rev = "v${version}";
+    sha256 = "1g47ly1pxwn0znbj3v5j6kqhn66d4wf0d5gjqzig75pzknapv8qj";
+  };
+
+  buildPhase = ''
+    cd go/src/${goPackagePath}
+    go run build.go
+  '';
+
+  installPhase = ''
+    install -Dt $bin/bin rest-server
+  '';
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "A high performance HTTP server that implements restic's REST backend API";
+    platforms = platforms.unix;
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/rotate-backups/default.nix b/nixpkgs/pkgs/tools/backup/rotate-backups/default.nix
new file mode 100644
index 000000000000..17397ce838f5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/rotate-backups/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildPythonPackage, fetchFromGitHub, update-dotdee, simpleeval, dateutil }:
+
+buildPythonPackage rec {
+  pname = "rotate-backups";
+  version = "6.0";
+
+  src = fetchFromGitHub {
+    owner = "xolox";
+    repo = "python-rotate-backups";
+    rev = version;
+    sha256 = "0i59qfv1cfm0ss63ab2nrkn5wr4rxpqqmvfd7pf9c3pl9dbfq20c";
+  };
+
+  propagatedBuildInputs = [ update-dotdee simpleeval dateutil ];
+
+  meta = with lib; {
+    description = "Simple command line interface for backup rotation";
+    homepage = https://github.com/xolox/python-rotate-backups;
+    license = licenses.mit;
+    maintainers = with maintainers; [ eyjhb ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/backup/rsbep/default.nix b/nixpkgs/pkgs/tools/backup/rsbep/default.nix
new file mode 100644
index 000000000000..90a8c665cd43
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/rsbep/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, lib, coreutils, gnused, gawk, fetchurl }:
+
+stdenv.mkDerivation {
+  pname = "rsbep";
+  version = "0.1.0";
+
+  src = fetchurl {
+    url = "https://www.thanassis.space/rsbep-0.1.0-ttsiodras.tar.bz2";
+    sha256 = "1zji34kc9srxp0h1s1m7k60mvgsir1wrx1n3wc990jszfplr32zc";
+  };
+
+  postFixup = ''
+    cd $out/bin
+
+    # Move internal tool 'rsbep_chopper' to libexec
+    libexecDir=$out/libexec/rsbep
+    mkdir -p $libexecDir
+    mv rsbep_chopper $libexecDir
+
+    # Fix store dependencies in scripts
+    path="export PATH=$out/bin:$libexecDir:${lib.makeBinPath [ coreutils gnused gawk ]}"
+    sed -i "2i$path" freeze.sh
+    sed -i "2i$path" melt.sh
+
+    substituteInPlace freeze.sh --replace /bin/ls ls
+
+    # Remove unneded binary
+    rm poorZFS.py
+  '';
+
+  meta = with lib; {
+    description = "Create resilient backups with Reed-Solomon error correction and byte-spreading";
+    homepage = https://www.thanassis.space/rsbep.html;
+    license = licenses.gpl3;
+    maintainers = [ maintainers.earvstedt ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/rsnapshot/default.nix b/nixpkgs/pkgs/tools/backup/rsnapshot/default.nix
new file mode 100644
index 000000000000..9f6204db2d8f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/rsnapshot/default.nix
@@ -0,0 +1,27 @@
+{ fetchurl, stdenv, perl, openssh, rsync, logger }:
+
+stdenv.mkDerivation rec {
+  name = "rsnapshot-1.4.3";
+
+  src = fetchurl {
+    url = "http://rsnapshot.org/downloads/${name}.tar.gz";
+    sha256 = "1lavqmmsf53pim0nvming7fkng6p0nk2a51k2c2jdq0l7snpl31b";
+  };
+
+  propagatedBuildInputs = [perl openssh rsync logger];
+
+  configureFlags = [ "--sysconfdir=/etc --prefix=/" ];
+  makeFlags = [ "DESTDIR=$(out)" ];
+
+  patchPhase = ''
+    substituteInPlace "Makefile.in" --replace \
+      "/usr/bin/pod2man" "${perl}/bin/pod2man"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A filesystem snapshot utility for making backups of local and remote systems";
+    homepage = http://rsnapshot.org/;
+    license = stdenv.lib.licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/s3ql/default.nix b/nixpkgs/pkgs/tools/backup/s3ql/default.nix
new file mode 100644
index 000000000000..346f8d279646
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/s3ql/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchFromGitHub, python3Packages, sqlite, which }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "s3ql";
+  version = "3.3.2";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "release-${version}";
+    sha256 = "1x0xj8clfs8fdczn8skc2wag5i4z47bsvlczn22iaf20hll1bb2w";
+  };
+
+  checkInputs = [ which ] ++ (with python3Packages; [ cython pytest ]);
+  propagatedBuildInputs = with python3Packages; [
+    sqlite apsw pycrypto requests defusedxml dugong llfuse
+    cython pytest pytest-catchlog google_auth google-auth-oauthlib
+  ];
+
+  preBuild = ''
+    ${python3Packages.python.interpreter} ./setup.py build_cython build_ext --inplace
+  '';
+
+  checkPhase = ''
+    # Removing integration tests
+    rm tests/t{4,5,6}_*
+    pytest tests
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A full-featured file system for online data storage";
+    homepage = "https://github.com/s3ql/s3ql/";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ rushmorem ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/stenc/default.nix b/nixpkgs/pkgs/tools/backup/stenc/default.nix
new file mode 100644
index 000000000000..ed4f944a960d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/stenc/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  version = "1.0.7";
+  pname = "stenc";
+
+  src = fetchFromGitHub {
+    owner = "scsitape";
+    repo = "stenc";
+    rev = "${version}";
+    sha256 = "1778m1zcyzyf42k5m496yqh0gv6kqhb0sq5983dhky1fccjl905k";
+  };
+
+  meta = {
+    description = "SCSI Tape Encryption Manager";
+    homepage = https://github.com/scsitape/stenc;
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = with stdenv.lib.maintainers; [ woffs ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/store-backup/default.nix b/nixpkgs/pkgs/tools/backup/store-backup/default.nix
new file mode 100644
index 000000000000..a0f568b16b3e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/store-backup/default.nix
@@ -0,0 +1,111 @@
+{stdenv, which, coreutils, perl, fetchurl, perlPackages, makeWrapper, diffutils , writeScriptBin, bzip2}:
+
+# quick usage:
+# storeBackup.pl --sourceDir /home/user --backupDir /tmp/my_backup_destination
+# Its slow the first time because it compresses all files bigger than 1k (default setting)
+# The backup tool is bookkeeping which files got compressed
+
+# btrfs warning: you may run out of hardlinks soon
+
+# known impurity: test cases seem to bu using /tmp/storeBackup.lock ..
+
+let dummyMount = writeScriptBin "mount" "#!${stdenv.shell}";
+in
+
+stdenv.mkDerivation rec {
+
+  version = "3.5";
+
+  pname = "store-backup";
+
+  enableParallelBuilding = true;
+
+  buildInputs = [ perl makeWrapper ];
+
+  src = fetchurl {
+    url = "https://download.savannah.gnu.org/releases/storebackup/storeBackup-${version}.tar.bz2";
+    sha256 = "0y4gzssc93x6y93mjsxm5b5cdh68d7ffa43jf6np7s7c99xxxz78";
+  };
+
+  installPhase = ''
+    mkdir -p $out/scripts
+    mv * $out
+    mv $out/_ATTENTION_ $out/doc
+    mv $out/{correct.sh,cron-storebackup} $out/scripts
+
+    find $out -name "*.pl" | xargs sed -i \
+      -e 's@/bin/pwd@${coreutils}/bin/pwd@' \
+      -e 's@/bin/sync@${coreutils}/bin/sync@' \
+      -e '1 s@/usr/bin/env perl@${perl}/bin/perl@'
+
+    for p in $out/bin/*
+      do wrapProgram "$p" \
+      --prefix PERL5LIB ":" "${perlPackages.DBFile}/${perlPackages.perl.libPrefix}" \
+      --prefix PATH ":" "${stdenv.lib.makeBinPath [ which bzip2 ]}"
+    done
+
+    patchShebangs $out
+    # do a dummy test ensuring this works
+
+    PATH=$PATH:${dummyMount}/bin
+
+
+    { # simple sanity test, test backup/restore of simple store paths
+
+      mkdir backup
+
+      backupRestore(){
+        source="$2"
+        echo =========
+        echo RUNNING TEST "$1" source: "$source"
+        mkdir restored
+
+        $out/bin/storeBackup.pl --sourceDir "$source" --backupDir backup
+        latestBackup=backup/default/$(ls -1 backup/default | sort | tail -n 1)
+        $out/bin/storeBackupRecover.pl -b "$latestBackup" -t restored -r /
+        ${diffutils}/bin/diff -r "$source" restored
+
+        # storeBackupCheckSource should return 0
+        $out/bin/storeBackupCheckSource.pl -s "$source" -b "$latestBackup"
+        # storeBackupCheckSource should return not 0 when using different source
+        ! $out/bin/storeBackupCheckSource.pl -s $TMP -b "$latestBackup"
+
+        # storeBackupCheckBackup should return 0
+        $out/bin/storeBackupCheckBackup.pl -c "$latestBackup"
+
+        chmod -R +w restored
+        rm -fr restored
+      }
+
+      testDir=$TMP/testDir
+
+      mkdir $testDir
+      echo X > $testDir/X
+      ln -s ./X $testDir/Y
+
+      backupRestore 'test 1: backup, restore' $testDir
+
+      # test huge blocks, according to docs files bigger than 100MB get split
+      # into pieces
+      dd if=/dev/urandom bs=100M of=block-1 count=1
+      dd if=/dev/urandom bs=100M of=block-2 count=1
+      cat block-1 block-2 > $testDir/block
+      backupRestore 'test 1 with huge block' $testDir
+
+      cat block-2 block-1 > $testDir/block
+      backupRestore 'test 1 with huge block reversed' $testDir
+
+      backupRestore 'test 2: backup, restore' $out
+      backupRestore 'test 3: backup, restore' $out
+      backupRestore 'test 4: backup diffutils to same backup locations, restore' ${diffutils}
+    }
+  '';
+
+  meta = {
+    description = "A backup suite that stores files on other disks";
+    homepage = https://savannah.nongnu.org/projects/storebackup;
+    license = stdenv.lib.licenses.gpl3Plus;
+    maintainers = [stdenv.lib.maintainers.marcweber];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/tarsnap/default.nix b/nixpkgs/pkgs/tools/backup/tarsnap/default.nix
new file mode 100644
index 000000000000..8d23e955095a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/tarsnap/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchurl, openssl, zlib, e2fsprogs }:
+
+let
+  zshCompletion = fetchurl {
+    url = "https://gist.githubusercontent.com/thoughtpolice/daa9431044883d3896f6/raw/282360677007db9739e5bf229873d3b231eb303a/tarsnap.zsh";
+    sha256 = "0pawqwichzpz29rva7mh8lpx4zznnrh2rqyzzj6h7z98l0dxpair";
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "tarsnap";
+  version = "1.0.39";
+
+  src = fetchurl {
+    url = "https://www.tarsnap.com/download/tarsnap-autoconf-${version}.tgz";
+    sha256 = "10i0whbmb345l2ggnf4vs66qjcyf6hmlr8f4nqqcfq0h5a5j24sn";
+  };
+
+  preConfigure = ''
+    configureFlags="--with-bash-completion-dir=$out/etc/bash_completion.d"
+  '';
+
+  patchPhase = ''
+    substituteInPlace Makefile.in \
+      --replace "command -p mv" "mv"
+  '';
+
+  postInstall = ''
+    # Install some handy-dandy shell completions
+    install -m 444 -D ${zshCompletion} $out/share/zsh/site-functions/_tarsnap
+  '';
+
+  buildInputs = [ openssl zlib ] ++ stdenv.lib.optional stdenv.isLinux e2fsprogs ;
+
+  meta = {
+    description = "Online backups for the truly paranoid";
+    homepage    = "http://www.tarsnap.com/";
+    license     = stdenv.lib.licenses.unfree;
+    platforms   = stdenv.lib.platforms.unix;
+    maintainers = with stdenv.lib.maintainers; [ thoughtpolice roconnor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/tarsnapper/default.nix b/nixpkgs/pkgs/tools/backup/tarsnapper/default.nix
new file mode 100644
index 000000000000..b02ce82291aa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/tarsnapper/default.nix
@@ -0,0 +1,25 @@
+{ python3Packages, fetchFromGitHub , tarsnap }:
+
+python3Packages.buildPythonApplication rec {
+  name = "tarsnapper-${version}";
+  version = "0.4";
+
+  src = fetchFromGitHub {
+    owner = "miracle2k";
+    repo = "tarsnapper";
+    rev = version;
+    sha256 = "03db49188f4v1946c8mqqj30ah10x68hbg3a58js0syai32v12pm";
+  };
+
+  checkInputs = with python3Packages; [ nose pytest ];
+
+  checkPhase = ''
+    py.test .
+  '';
+
+  propagatedBuildInputs = with python3Packages; [ pyyaml dateutil pexpect ];
+
+  patches = [ ./remove-argparse.patch ];
+
+  makeWrapperArgs = ["--prefix PATH : ${tarsnap}/bin"];
+}
diff --git a/nixpkgs/pkgs/tools/backup/tarsnapper/remove-argparse.patch b/nixpkgs/pkgs/tools/backup/tarsnapper/remove-argparse.patch
new file mode 100644
index 000000000000..19c7f9f172e2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/tarsnapper/remove-argparse.patch
@@ -0,0 +1,10 @@
+--- tarsnapper-0.4-src.org/setup.py	1980-01-02 00:00:00.000000000 +0000
++++ tarsnapper-0.4-src/setup.py	2017-07-16 10:54:36.596499451 +0100
+@@ -45,6 +45,6 @@
+       url='https://github.com/miracle2k/tarsnapper',
+       license='BSD',
+       packages=['tarsnapper'],
+-      install_requires = ['argparse>=1.1', 'pyyaml>=3.09', 'python-dateutil>=2.4.0', 'pexpect>=3.1'],
++      install_requires = ['pyyaml>=3.09', 'python-dateutil>=2.4.0', 'pexpect>=3.1'],
+       **kw
+ )
diff --git a/nixpkgs/pkgs/tools/backup/tsm-client/default.nix b/nixpkgs/pkgs/tools/backup/tsm-client/default.nix
new file mode 100644
index 000000000000..a1f7b1aba84e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/tsm-client/default.nix
@@ -0,0 +1,165 @@
+{ lib
+, stdenv
+, autoPatchelfHook
+, buildEnv
+, fetchurl
+, makeWrapper
+, procps
+, zlib
+# optional packages that enable certain features
+, acl ? null  # EXT2/EXT3/XFS ACL support
+, jdk8 ? null  # Java GUI
+, lvm2 ? null  # LVM image backup and restore functions
+# path to `dsm.sys` configuration files
+, dsmSysCli ? "/etc/tsm-client/cli.dsm.sys"
+, dsmSysApi ? "/etc/tsm-client/api.dsm.sys"
+}:
+
+
+# For an explanation of optional packages
+# (features provided by them, version limits), see
+# https://www-01.ibm.com/support/docview.wss?uid=swg21052223#Version%208.1
+
+
+# IBM Tivoli Storage Manager Client uses a system-wide
+# client system-options file `dsm.sys` and expects it
+# to be located in a directory within the package.
+# Note that the command line client and the API use
+# different "dms.sys" files (located in different directories).
+# Since these files contain settings to be altered by the
+# admin user (e.g. TSM server name), we create symlinks
+# in place of the files that the client attempts to open.
+# Use the arguments `dsmSysCli` and `dsmSysApi` to
+# provide the location of the configuration files for
+# the command-line interface and the API, respectively.
+#
+# While the command-line interface contains wrappers
+# that help the executables find the configuration file,
+# packages that link against the API have to
+# set the environment variable `DSMI_DIR` to
+# point to this derivations `/dsmi_dir` directory symlink.
+# Other environment variables might be necessary,
+# depending on local configuration or usage; see:
+# https://www.ibm.com/support/knowledgecenter/en/SSEQVQ_8.1.8/client/c_cfg_sapiunix.html
+
+
+# The newest version of TSM client should be discoverable
+# by going the the `downloadPage` (see `meta` below),
+# there to "Client Latest Downloads",
+# "IBM Spectrum Protect Client Downloads and READMEs",
+# then to "Linux x86_64 Ubuntu client" (as of 2019-07-15).
+
+
+let
+
+  meta = {
+    homepage = https://www.ibm.com/us-en/marketplace/data-protection-and-recovery;
+    downloadPage = https://www-01.ibm.com/support/docview.wss?uid=swg21239415;
+    platforms = [ "x86_64-linux" ];
+    license = lib.licenses.unfree;
+    maintainers = [ lib.maintainers.yarny ];
+    description = "IBM Spectrum Protect (Tivoli Storage Manager) CLI and API";
+    longDescription = ''
+      IBM Spectrum Protect (Tivoli Storage Manager) provides
+      a single point of control for backup and recovery.
+      This package contains the client software, that is,
+      a command line client and linkable libraries.
+
+      Note that the software requires a system-wide
+      client system-options file (commonly named "dsm.sys").
+      This package allows to use separate files for
+      the command-line interface and for the linkable API.
+      The location of those files can
+      be provided as build parameters.
+    '';
+  };
+
+  unwrapped = stdenv.mkDerivation rec {
+    name = "tsm-client-${version}-unwrapped";
+    version = "8.1.8.0";
+    src = fetchurl {
+      url = "ftp://public.dhe.ibm.com/storage/tivoli-storage-management/maintenance/client/v8r1/Linux/LinuxX86_DEB/BA/v818/${version}-TIV-TSMBAC-LinuxX86_DEB.tar";
+      sha256 = "0c1d0jm0i7qjd314nhj2vj8fs7sncm1x2n4d6dg4049jniyvjhpk";
+    };
+    inherit meta;
+
+    nativeBuildInputs = [
+      autoPatchelfHook
+    ];
+    buildInputs = [
+      stdenv.cc.cc
+      zlib
+    ];
+    runtimeDependencies = [
+      lvm2
+    ];
+    sourceRoot = ".";
+
+    postUnpack = ''
+      for debfile in *.deb
+      do
+        ar -x "$debfile"
+        tar --xz --extract --file=data.tar.xz
+        rm data.tar.xz
+      done
+    '';
+
+    installPhase = ''
+      runHook preInstall
+      mkdir --parents $out
+      mv --target-directory=$out usr/* opt
+      runHook postInstall
+    '';
+
+    # Fix relative symlinks after `/usr` was moved up one level
+    preFixup = ''
+      for link in $out/lib/* $out/bin/*
+      do
+        target=$(readlink "$link")
+        if [ "$(cut -b -6 <<< "$target")" != "../../" ]
+        then
+          echo "cannot fix this symlink: $link -> $target"
+          exit 1
+        fi
+        ln --symbolic --force --no-target-directory "$out/$(cut -b 7- <<< "$target")" "$link"
+      done
+    '';
+  };
+
+in
+
+buildEnv {
+  name = "tsm-client-${unwrapped.version}";
+  inherit meta;
+  passthru = { inherit unwrapped; };
+  paths = [ unwrapped ];
+  buildInputs = [ makeWrapper ];
+  pathsToLink = [
+    "/"
+    "/bin"
+    "/opt/tivoli/tsm/client/ba/bin"
+    "/opt/tivoli/tsm/client/api/bin64"
+  ];
+  # * Provide top-level symlinks `dsm_dir` and `dsmi_dir`
+  #   to the so-called "installation directories"
+  # * Add symlinks to the "installation directories"
+  #   that point to the `dsm.sys` configuration files
+  # * Drop the Java GUI executable unless `jdk` is present
+  # * Create wrappers for the command-line interface to
+  #   prepare `PATH` and `DSM_DIR` environment variables
+  postBuild = ''
+    ln --symbolic --no-target-directory opt/tivoli/tsm/client/ba/bin $out/dsm_dir
+    ln --symbolic --no-target-directory opt/tivoli/tsm/client/api/bin64 $out/dsmi_dir
+    ln --symbolic --no-target-directory "${dsmSysCli}" $out/dsm_dir/dsm.sys
+    ln --symbolic --no-target-directory "${dsmSysApi}" $out/dsmi_dir/dsm.sys
+    ${lib.strings.optionalString (jdk8==null) "rm $out/bin/dsmj"}
+    for bin in $out/bin/*
+    do
+      target=$(readlink "$bin")
+      rm "$bin"
+      makeWrapper "$target" "$bin" \
+        --prefix PATH : "$out/dsm_dir:${lib.strings.makeBinPath [ procps acl jdk8 ]}" \
+        --set DSM_DIR $out/dsm_dir
+    done
+  '';
+}
diff --git a/nixpkgs/pkgs/tools/backup/ugarit-manifest-maker/default.nix b/nixpkgs/pkgs/tools/backup/ugarit-manifest-maker/default.nix
new file mode 100644
index 000000000000..8f93474f8f16
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/ugarit-manifest-maker/default.nix
@@ -0,0 +1,31 @@
+{ pkgs, stdenv, eggDerivation, fetchegg }:
+let
+  eggs = import ./eggs.nix { inherit eggDerivation fetchegg; };
+in with pkgs; eggDerivation rec {
+  pname = "ugarit-manifest-maker";
+  version = "0.1";
+  name = "${pname}-${version}";
+
+  src = fetchegg {
+    inherit version;
+    name = pname;
+    sha256 = "1jv8lhn4s5a3qphqd3zfwl1py0m5cmqj1h55ys0935m5f422547q";
+  };
+
+  buildInputs = with eggs; [
+    matchable
+    srfi-37
+    fnmatch
+    miscmacros
+    ugarit
+    numbers
+  ];
+
+  meta = with stdenv.lib; {
+    homepage = https://www.kitten-technologies.co.uk/project/ugarit-manifest-maker/;
+    description = "A tool for generating import manifests for Ugarit";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.ebzzry ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/ugarit-manifest-maker/eggs.nix b/nixpkgs/pkgs/tools/backup/ugarit-manifest-maker/eggs.nix
new file mode 100644
index 000000000000..889d698188e2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/ugarit-manifest-maker/eggs.nix
@@ -0,0 +1,431 @@
+{ eggDerivation, fetchegg }:
+rec {
+  blob-utils = eggDerivation {
+    name = "blob-utils-1.0.3";
+
+    src = fetchegg {
+      name = "blob-utils";
+      version = "1.0.3";
+      sha256 = "17vdn02fnxnjx5ixgqimln93lqvzyq4y9w02fw7xnbdcjzqm0xml";
+    };
+
+    buildInputs = [
+      setup-helper
+      string-utils
+    ];
+  };
+
+  check-errors = eggDerivation {
+    name = "check-errors-1.13.0";
+
+    src = fetchegg {
+      name = "check-errors";
+      version = "1.13.0";
+      sha256 = "12a0sn82n98jybh72zb39fdddmr5k4785xglxb16750fhy8rmjwi";
+    };
+
+    buildInputs = [
+      setup-helper
+    ];
+  };
+
+  crypto-tools = eggDerivation {
+    name = "crypto-tools-1.3";
+
+    src = fetchegg {
+      name = "crypto-tools";
+      version = "1.3";
+      sha256 = "0442wly63zis19vh8xc9nhxgp9sabaccxylpzmchd5f1d48iag65";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  fnmatch = eggDerivation {
+    name = "fnmatch-1.0.1";
+
+    src = fetchegg {
+      name = "fnmatch";
+      version = "1.0.1";
+      sha256 = "1m3jmyhkyqmjr7v628g6w5n3cqihcfnryrxn91k4597q7vjhikqr";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  foreigners = eggDerivation {
+    name = "foreigners-1.4.1";
+
+    src = fetchegg {
+      name = "foreigners";
+      version = "1.4.1";
+      sha256 = "07nvyadhkd52q0kkvch1a5d7ivpmrhmyg295s4mxb1nw4wz46gfz";
+    };
+
+    buildInputs = [
+      matchable
+    ];
+  };
+
+  lookup-table = eggDerivation {
+    name = "lookup-table-1.13.5";
+
+    src = fetchegg {
+      name = "lookup-table";
+      version = "1.13.5";
+      sha256 = "1nzly6rhynawlvzlyilk8z8cxz57cf9n5iv20glkhh28pz2izmrb";
+    };
+
+    buildInputs = [
+      setup-helper
+      check-errors
+      miscmacros
+      record-variants
+      synch
+    ];
+  };
+
+  lru-cache = eggDerivation {
+    name = "lru-cache-0.5.3";
+
+    src = fetchegg {
+      name = "lru-cache";
+      version = "0.5.3";
+      sha256 = "0z6g3106c4j21v968hfzy9nnbfq2d83y0nyd20aifpq4g55c0d40";
+    };
+
+    buildInputs = [
+      record-variants
+    ];
+  };
+
+  matchable = eggDerivation {
+    name = "matchable-3.3";
+
+    src = fetchegg {
+      name = "matchable";
+      version = "3.3";
+      sha256 = "07y3lpzgm4djiwi9y2adc796f9kwkmdr28fkfkw65syahdax8990";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  message-digest = eggDerivation {
+    name = "message-digest-3.1.0";
+
+    src = fetchegg {
+      name = "message-digest";
+      version = "3.1.0";
+      sha256 = "1w6bax19dwgih78vcimiws0rja7qsd8hmbm6qqg2hf9cw3vab21s";
+    };
+
+    buildInputs = [
+      setup-helper
+      miscmacros
+      check-errors
+      variable-item
+      blob-utils
+      string-utils
+    ];
+  };
+
+  miscmacros = eggDerivation {
+    name = "miscmacros-2.96";
+
+    src = fetchegg {
+      name = "miscmacros";
+      version = "2.96";
+      sha256 = "1ajdgjrni10i2hmhcp4rawnxajjxry3kmq1krdmah4sf0kjrgajc";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  numbers = eggDerivation {
+    name = "numbers-4.4";
+
+    src = fetchegg {
+      name = "numbers";
+      version = "4.4";
+      sha256 = "0bg5zs6jcr9arj4a7r2xqxf2n17bx93640jaivgchbdj1gixranm";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  parley = eggDerivation {
+    name = "parley-0.9.2";
+
+    src = fetchegg {
+      name = "parley";
+      version = "0.9.2";
+      sha256 = "1vsbx4dk1240gzq02slzmavd1jrq04qj7ssnvg15h8xh81xwhbbz";
+    };
+
+    buildInputs = [
+      stty
+      srfi-71
+      miscmacros
+    ];
+  };
+
+  pathname-expand = eggDerivation {
+    name = "pathname-expand-0.1";
+
+    src = fetchegg {
+      name = "pathname-expand";
+      version = "0.1";
+      sha256 = "14llya7l04z49xpi3iylk8aglrw968vy304ymavhhqlyzmzwkx3g";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  posix-extras = eggDerivation {
+    name = "posix-extras-0.1.6";
+
+    src = fetchegg {
+      name = "posix-extras";
+      version = "0.1.6";
+      sha256 = "0gnmhn2l0161ham7f8i0lx1ay94ap8l8l7ga4nw9qs86lk024abi";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  record-variants = eggDerivation {
+    name = "record-variants-0.5.1";
+
+    src = fetchegg {
+      name = "record-variants";
+      version = "0.5.1";
+      sha256 = "15wgysxkm8m4hx9nhhw9akchzipdnqc7yj3qd3zn0z7sxg4sld1h";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  regex = eggDerivation {
+    name = "regex-1.0";
+
+    src = fetchegg {
+      name = "regex";
+      version = "1.0";
+      sha256 = "1z9bh7xvab6h5cdlsz8jk02pv5py1i6ryqarbcs3wdgkkjgmmkif";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  setup-helper = eggDerivation {
+    name = "setup-helper-1.5.5";
+
+    src = fetchegg {
+      name = "setup-helper";
+      version = "1.5.5";
+      sha256 = "1lpplp8f2wyc486dd98gs4wl1kkhh1cs6vdqkxrdk7f92ikmwbx3";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  sql-de-lite = eggDerivation {
+    name = "sql-de-lite-0.6.6";
+
+    src = fetchegg {
+      name = "sql-de-lite";
+      version = "0.6.6";
+      sha256 = "1mh3hpsibq2gxcpjaycqa4ckznj268xpfzsa6pn0i6iac6my3qra";
+    };
+
+    buildInputs = [
+      lru-cache
+      foreigners
+    ];
+  };
+
+  srfi-37 = eggDerivation {
+    name = "srfi-37-1.3.1";
+
+    src = fetchegg {
+      name = "srfi-37";
+      version = "1.3.1";
+      sha256 = "1a2zdkdzrv15fw9dfdy8067fsgh4kr8ppffm8mc3cmlczrrd58cb";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  srfi-71 = eggDerivation {
+    name = "srfi-71-1.1";
+
+    src = fetchegg {
+      name = "srfi-71";
+      version = "1.1";
+      sha256 = "01mlaxw2lfczykmx69xki2s0f4ywlg794rl4kz07plvzn0s3fbqq";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  ssql = eggDerivation {
+    name = "ssql-0.2.4";
+
+    src = fetchegg {
+      name = "ssql";
+      version = "0.2.4";
+      sha256 = "0qhnghhx1wrvav4s7l780mspwlh8s6kzq4bl0cslwp1km90fx9bk";
+    };
+
+    buildInputs = [
+      matchable
+    ];
+  };
+
+  string-utils = eggDerivation {
+    name = "string-utils-1.2.4";
+
+    src = fetchegg {
+      name = "string-utils";
+      version = "1.2.4";
+      sha256 = "07alvghg0dahilrm4jg44bndl0x69sv1zbna9l20cbdvi35i0jp1";
+    };
+
+    buildInputs = [
+      setup-helper
+      miscmacros
+      lookup-table
+      check-errors
+    ];
+  };
+
+  stty = eggDerivation {
+    name = "stty-0.2.6";
+
+    src = fetchegg {
+      name = "stty";
+      version = "0.2.6";
+      sha256 = "09jmjpdsd3yg6d0f0imcihmn49i28x09lgl60i2dllffs25k22s4";
+    };
+
+    buildInputs = [
+      setup-helper
+      foreigners
+    ];
+  };
+
+  synch = eggDerivation {
+    name = "synch-2.1.2";
+
+    src = fetchegg {
+      name = "synch";
+      version = "2.1.2";
+      sha256 = "1m9mnbq0m5jsxmd1a3rqpwpxj0l1b7vn1fknvxycc047pmlcyl00";
+    };
+
+    buildInputs = [
+      setup-helper
+      check-errors
+    ];
+  };
+
+  tiger-hash = eggDerivation {
+    name = "tiger-hash-3.1.0";
+
+    src = fetchegg {
+      name = "tiger-hash";
+      version = "3.1.0";
+      sha256 = "0j9dsbjp9cw0y4w4srg0qwgh53jw2v3mx4y4h040ds0fkxlzzknx";
+    };
+
+    buildInputs = [
+      message-digest
+    ];
+  };
+
+  ugarit = eggDerivation {
+    name = "ugarit-2.0";
+
+    src = fetchegg {
+      name = "ugarit";
+      version = "2.0";
+      sha256 = "1l5zkr6b8l5dw9p5mimbva0ncqw1sbvp3d4cywm1hqx2m03a0f1n";
+    };
+
+    buildInputs = [
+      miscmacros
+      sql-de-lite
+      crypto-tools
+      srfi-37
+      stty
+      matchable
+      regex
+      tiger-hash
+      message-digest
+      posix-extras
+      parley
+      ssql
+      pathname-expand
+    ];
+  };
+
+  ugarit-manifest-maker = eggDerivation {
+    name = "ugarit-manifest-maker-0.1";
+
+    src = fetchegg {
+      name = "ugarit-manifest-maker";
+      version = "0.1";
+      sha256 = "1jv8lhn4s5a3qphqd3zfwl1py0m5cmqj1h55ys0935m5f422547q";
+    };
+
+    buildInputs = [
+      matchable
+      srfi-37
+      fnmatch
+      miscmacros
+      ugarit
+      numbers
+    ];
+  };
+
+  variable-item = eggDerivation {
+    name = "variable-item-1.3.1";
+
+    src = fetchegg {
+      name = "variable-item";
+      version = "1.3.1";
+      sha256 = "19b3mhb8kr892sz9yyzq79l0vv28dgilw9cf415kj6aq16yp4d5n";
+    };
+
+    buildInputs = [
+      setup-helper
+      check-errors
+    ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/backup/ugarit/default.nix b/nixpkgs/pkgs/tools/backup/ugarit/default.nix
new file mode 100644
index 000000000000..e8f0ea22df10
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/ugarit/default.nix
@@ -0,0 +1,41 @@
+{ pkgs, stdenv, eggDerivation, fetchegg }:
+let
+  eggs = import ./eggs.nix { inherit eggDerivation fetchegg; };
+in with pkgs; eggDerivation rec {
+  pname = "ugarit";
+  version = "2.0";
+  name = "${pname}-${version}";
+
+  src = fetchegg {
+    inherit version;
+    name = pname;
+    sha256 = "1l5zkr6b8l5dw9p5mimbva0ncqw1sbvp3d4cywm1hqx2m03a0f1n";
+  };
+
+  buildInputs = with eggs; [
+    aes
+    crypto-tools
+    matchable
+    message-digest
+    miscmacros
+    parley
+    pathname-expand
+    posix-extras
+    regex
+    sha2
+    sql-de-lite
+    srfi-37
+    ssql
+    stty
+    tiger-hash
+    z3
+  ];
+
+  meta = with stdenv.lib; {
+    homepage = https://www.kitten-technologies.co.uk/project/ugarit/;
+    description = "A backup/archival system based around content-addressible storage";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.ebzzry ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/ugarit/eggs.nix b/nixpkgs/pkgs/tools/backup/ugarit/eggs.nix
new file mode 100644
index 000000000000..fe958cb55cc6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/ugarit/eggs.nix
@@ -0,0 +1,486 @@
+{ eggDerivation, fetchegg }:
+rec {
+  aes = eggDerivation {
+    name = "aes-1.5";
+
+    src = fetchegg {
+      name = "aes";
+      version = "1.5";
+      sha256 = "0gjlvz5nk0fnaclljpyfk21rkf0nidjj6wcv3jbnpmfafgjny5fi";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  blob-utils = eggDerivation {
+    name = "blob-utils-1.0.3";
+
+    src = fetchegg {
+      name = "blob-utils";
+      version = "1.0.3";
+      sha256 = "17vdn02fnxnjx5ixgqimln93lqvzyq4y9w02fw7xnbdcjzqm0xml";
+    };
+
+    buildInputs = [
+      setup-helper
+      string-utils
+    ];
+  };
+
+  check-errors = eggDerivation {
+    name = "check-errors-1.13.0";
+
+    src = fetchegg {
+      name = "check-errors";
+      version = "1.13.0";
+      sha256 = "12a0sn82n98jybh72zb39fdddmr5k4785xglxb16750fhy8rmjwi";
+    };
+
+    buildInputs = [
+      setup-helper
+    ];
+  };
+
+  crypto-tools = eggDerivation {
+    name = "crypto-tools-1.3";
+
+    src = fetchegg {
+      name = "crypto-tools";
+      version = "1.3";
+      sha256 = "0442wly63zis19vh8xc9nhxgp9sabaccxylpzmchd5f1d48iag65";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  foreigners = eggDerivation {
+    name = "foreigners-1.4.1";
+
+    src = fetchegg {
+      name = "foreigners";
+      version = "1.4.1";
+      sha256 = "07nvyadhkd52q0kkvch1a5d7ivpmrhmyg295s4mxb1nw4wz46gfz";
+    };
+
+    buildInputs = [
+      matchable
+    ];
+  };
+
+  lookup-table = eggDerivation {
+    name = "lookup-table-1.13.5";
+
+    src = fetchegg {
+      name = "lookup-table";
+      version = "1.13.5";
+      sha256 = "1nzly6rhynawlvzlyilk8z8cxz57cf9n5iv20glkhh28pz2izmrb";
+    };
+
+    buildInputs = [
+      setup-helper
+      check-errors
+      miscmacros
+      record-variants
+      synch
+    ];
+  };
+
+  lru-cache = eggDerivation {
+    name = "lru-cache-0.5.3";
+
+    src = fetchegg {
+      name = "lru-cache";
+      version = "0.5.3";
+      sha256 = "0z6g3106c4j21v968hfzy9nnbfq2d83y0nyd20aifpq4g55c0d40";
+    };
+
+    buildInputs = [
+      record-variants
+    ];
+  };
+
+  matchable = eggDerivation {
+    name = "matchable-3.3";
+
+    src = fetchegg {
+      name = "matchable";
+      version = "3.3";
+      sha256 = "07y3lpzgm4djiwi9y2adc796f9kwkmdr28fkfkw65syahdax8990";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  message-digest = eggDerivation {
+    name = "message-digest-3.1.0";
+
+    src = fetchegg {
+      name = "message-digest";
+      version = "3.1.0";
+      sha256 = "1w6bax19dwgih78vcimiws0rja7qsd8hmbm6qqg2hf9cw3vab21s";
+    };
+
+    buildInputs = [
+      setup-helper
+      miscmacros
+      check-errors
+      variable-item
+      blob-utils
+      string-utils
+    ];
+  };
+
+  miscmacros = eggDerivation {
+    name = "miscmacros-2.96";
+
+    src = fetchegg {
+      name = "miscmacros";
+      version = "2.96";
+      sha256 = "1ajdgjrni10i2hmhcp4rawnxajjxry3kmq1krdmah4sf0kjrgajc";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  parley = eggDerivation {
+    name = "parley-0.9.2";
+
+    src = fetchegg {
+      name = "parley";
+      version = "0.9.2";
+      sha256 = "1vsbx4dk1240gzq02slzmavd1jrq04qj7ssnvg15h8xh81xwhbbz";
+    };
+
+    buildInputs = [
+      stty
+      srfi-71
+      miscmacros
+    ];
+  };
+
+  pathname-expand = eggDerivation {
+    name = "pathname-expand-0.1";
+
+    src = fetchegg {
+      name = "pathname-expand";
+      version = "0.1";
+      sha256 = "14llya7l04z49xpi3iylk8aglrw968vy304ymavhhqlyzmzwkx3g";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  posix-extras = eggDerivation {
+    name = "posix-extras-0.1.6";
+
+    src = fetchegg {
+      name = "posix-extras";
+      version = "0.1.6";
+      sha256 = "0gnmhn2l0161ham7f8i0lx1ay94ap8l8l7ga4nw9qs86lk024abi";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  record-variants = eggDerivation {
+    name = "record-variants-0.5.1";
+
+    src = fetchegg {
+      name = "record-variants";
+      version = "0.5.1";
+      sha256 = "15wgysxkm8m4hx9nhhw9akchzipdnqc7yj3qd3zn0z7sxg4sld1h";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  regex = eggDerivation {
+    name = "regex-1.0";
+
+    src = fetchegg {
+      name = "regex";
+      version = "1.0";
+      sha256 = "1z9bh7xvab6h5cdlsz8jk02pv5py1i6ryqarbcs3wdgkkjgmmkif";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  setup-helper = eggDerivation {
+    name = "setup-helper-1.5.5";
+
+    src = fetchegg {
+      name = "setup-helper";
+      version = "1.5.5";
+      sha256 = "1lpplp8f2wyc486dd98gs4wl1kkhh1cs6vdqkxrdk7f92ikmwbx3";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  sha2 = eggDerivation {
+    name = "sha2-3.1.0";
+
+    src = fetchegg {
+      name = "sha2";
+      version = "3.1.0";
+      sha256 = "01ch290f2kcv1yv8spjdaqwipl80vvgpqc4divsj3vxckvgkawq2";
+    };
+
+    buildInputs = [
+      message-digest
+    ];
+  };
+
+  sql-de-lite = eggDerivation {
+    name = "sql-de-lite-0.6.6";
+
+    src = fetchegg {
+      name = "sql-de-lite";
+      version = "0.6.6";
+      sha256 = "1mh3hpsibq2gxcpjaycqa4ckznj268xpfzsa6pn0i6iac6my3qra";
+    };
+
+    buildInputs = [
+      lru-cache
+      foreigners
+    ];
+  };
+
+  srfi-37 = eggDerivation {
+    name = "srfi-37-1.3.1";
+
+    src = fetchegg {
+      name = "srfi-37";
+      version = "1.3.1";
+      sha256 = "1a2zdkdzrv15fw9dfdy8067fsgh4kr8ppffm8mc3cmlczrrd58cb";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  srfi-71 = eggDerivation {
+    name = "srfi-71-1.1";
+
+    src = fetchegg {
+      name = "srfi-71";
+      version = "1.1";
+      sha256 = "01mlaxw2lfczykmx69xki2s0f4ywlg794rl4kz07plvzn0s3fbqq";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  ssql = eggDerivation {
+    name = "ssql-0.2.4";
+
+    src = fetchegg {
+      name = "ssql";
+      version = "0.2.4";
+      sha256 = "0qhnghhx1wrvav4s7l780mspwlh8s6kzq4bl0cslwp1km90fx9bk";
+    };
+
+    buildInputs = [
+      matchable
+    ];
+  };
+
+  string-utils = eggDerivation {
+    name = "string-utils-1.2.4";
+
+    src = fetchegg {
+      name = "string-utils";
+      version = "1.2.4";
+      sha256 = "07alvghg0dahilrm4jg44bndl0x69sv1zbna9l20cbdvi35i0jp1";
+    };
+
+    buildInputs = [
+      setup-helper
+      miscmacros
+      lookup-table
+      check-errors
+    ];
+  };
+
+  stty = eggDerivation {
+    name = "stty-0.2.6";
+
+    src = fetchegg {
+      name = "stty";
+      version = "0.2.6";
+      sha256 = "09jmjpdsd3yg6d0f0imcihmn49i28x09lgl60i2dllffs25k22s4";
+    };
+
+    buildInputs = [
+      setup-helper
+      foreigners
+    ];
+  };
+
+  synch = eggDerivation {
+    name = "synch-2.1.2";
+
+    src = fetchegg {
+      name = "synch";
+      version = "2.1.2";
+      sha256 = "1m9mnbq0m5jsxmd1a3rqpwpxj0l1b7vn1fknvxycc047pmlcyl00";
+    };
+
+    buildInputs = [
+      setup-helper
+      check-errors
+    ];
+  };
+
+  tiger-hash = eggDerivation {
+    name = "tiger-hash-3.1.0";
+
+    src = fetchegg {
+      name = "tiger-hash";
+      version = "3.1.0";
+      sha256 = "0j9dsbjp9cw0y4w4srg0qwgh53jw2v3mx4y4h040ds0fkxlzzknx";
+    };
+
+    buildInputs = [
+      message-digest
+    ];
+  };
+
+  ugarit = eggDerivation {
+    name = "ugarit-2.0";
+
+    src = fetchegg {
+      name = "ugarit";
+      version = "2.0";
+      sha256 = "1l5zkr6b8l5dw9p5mimbva0ncqw1sbvp3d4cywm1hqx2m03a0f1n";
+    };
+
+    buildInputs = [
+      miscmacros
+      sql-de-lite
+      crypto-tools
+      srfi-37
+      stty
+      matchable
+      regex
+      tiger-hash
+      message-digest
+      posix-extras
+      parley
+      ssql
+      pathname-expand
+    ];
+  };
+
+  variable-item = eggDerivation {
+    name = "variable-item-1.3.1";
+
+    src = fetchegg {
+      name = "variable-item";
+      version = "1.3.1";
+      sha256 = "19b3mhb8kr892sz9yyzq79l0vv28dgilw9cf415kj6aq16yp4d5n";
+    };
+
+    buildInputs = [
+      setup-helper
+      check-errors
+    ];
+  };
+
+  bind = eggDerivation {
+    name = "bind-1.5.2";
+
+    src = fetchegg {
+      name = "bind";
+      version = "1.5.2";
+      sha256 = "1x768k7dlfmkvgaf2idiaaqqgnqdnif5yb7ib6a6zndacbwz9jps";
+    };
+
+    buildInputs = [
+      silex
+      matchable
+      coops
+      regex
+      make
+    ];
+  };
+
+  coops = eggDerivation {
+    name = "coops-1.93";
+
+    src = fetchegg {
+      name = "coops";
+      version = "1.93";
+      sha256 = "0mrkk7pmn9r691svzm4113mn0xsk36zi3f15m86n29a6c7897php";
+    };
+
+    buildInputs = [
+      matchable
+      record-variants
+    ];
+  };
+
+  make = eggDerivation {
+    name = "make-1.8";
+
+    src = fetchegg {
+      name = "make";
+      version = "1.8";
+      sha256 = "1w6xsjyapi2x8dv21dpidkyw1kjfsbasddn554xx561pi3i0yv9h";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  silex = eggDerivation {
+    name = "silex-1.4";
+
+    src = fetchegg {
+      name = "silex";
+      version = "1.4";
+      sha256 = "17x7f07aa3qnay3bhjr7knjivhycs54j97jyv3gjs1h8qnp63g00";
+    };
+
+    buildInputs = [
+      
+    ];
+  };
+
+  z3 = eggDerivation {
+    name = "z3-1.44";
+
+    src = fetchegg {
+      name = "z3";
+      version = "1.44";
+      sha256 = "16ayp4zkgm332q4bmjj22acqg197aqp6d8ifyyjj205iv6k0f3x4";
+    };
+
+    buildInputs = [
+      bind
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/wal-e/default.nix b/nixpkgs/pkgs/tools/backup/wal-e/default.nix
new file mode 100644
index 000000000000..9c7cb0a83fd6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/wal-e/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, pythonPackages, lzop, postgresql, pv }:
+
+pythonPackages.buildPythonApplication rec {
+  pname = "wal-e";
+  version = "0.6.10";
+
+  namePrefix = "";
+
+  src = fetchurl {
+    url = "https://github.com/wal-e/wal-e/archive/v${version}.tar.gz";
+    sha256 = "1hms24xz7wx3b91vv56fhcc3j0cszwqwnmwhka4yl90202hvdir2";
+  };
+
+  # needs tox
+  doCheck = false;
+
+  propagatedBuildInputs = [
+    pythonPackages.boto
+    pythonPackages.gevent
+    postgresql
+    lzop
+    pv
+  ];
+
+  meta = {
+    description = "A Postgres WAL-shipping disaster recovery and replication toolkit";
+    homepage = https://github.com/wal-e/wal-e;
+    maintainers = [];
+    license = stdenv.lib.licenses.bsd3;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/wal-g/default.nix b/nixpkgs/pkgs/tools/backup/wal-g/default.nix
new file mode 100644
index 000000000000..c6c47ce4f16c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/wal-g/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, buildGoPackage, fetchFromGitHub, brotli }:
+
+buildGoPackage rec {
+  pname = "wal-g";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner  = "wal-g";
+    repo   = "wal-g";
+    rev    = "v${version}";
+    sha256 = "08lk7by1anxpd9v97xbf9443kk4n1w63zaar2nz86w8i3k3b4id9";
+  };
+
+  buildInputs = [ brotli ];
+
+  doCheck = true;
+
+  goPackagePath = "github.com/wal-g/wal-g";
+  meta = {
+    inherit (src.meta) homepage;
+    license = stdenv.lib.licenses.asl20;
+    description = "An archival restoration tool for Postgres";
+    maintainers = [ stdenv.lib.maintainers.ocharles ];
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/zbackup/default.nix b/nixpkgs/pkgs/tools/backup/zbackup/default.nix
new file mode 100644
index 000000000000..d7a160328ed1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/zbackup/default.nix
@@ -0,0 +1,17 @@
+{ stdenv, fetchurl, cmake, zlib, openssl, protobuf, protobufc, lzo, libunwind } :
+stdenv.mkDerivation {
+  pname = "zbackup";
+  version = "1.4.4";
+  src = fetchurl {
+    url = "https://github.com/zbackup/zbackup/archive/1.4.4.tar.gz";
+    sha256 = "11csla7n44lg7x6yqg9frb21vnkr8cvnh6ardibr3nj5l39crk7g";
+  };
+  buildInputs = [ zlib openssl protobuf lzo libunwind ];
+  nativeBuildInputs = [ cmake protobufc ];
+  meta = {
+    description = "A versatile deduplicating backup tool";
+    homepage = http://zbackup.org/;
+    platforms = stdenv.lib.platforms.linux;
+    license = stdenv.lib.licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/zfs-replicate/default.nix b/nixpkgs/pkgs/tools/backup/zfs-replicate/default.nix
new file mode 100644
index 000000000000..1cb7e6474412
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/zfs-replicate/default.nix
@@ -0,0 +1,42 @@
+{ buildPythonApplication, click, fetchPypi, hypothesis, mypy, pytest
+, pytestcov, pytestrunner, stdenv, stringcase
+}:
+
+buildPythonApplication rec {
+  pname = "zfs-replicate";
+  version = "1.1.14";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0iqyk6q112ylcqrhrgvgbgqqvaikhwk0sb5kc7kg2wwqdc9rfwys";
+  };
+
+  checkInputs = [
+    hypothesis
+    mypy
+    pytest
+    pytestcov
+  ];
+
+  buildInputs = [
+    pytestrunner
+  ];
+
+  propagatedBuildInputs = [
+    click
+    stringcase
+  ];
+
+  doCheck = true;
+
+  checkPhase = ''
+    pytest --doctest-modules
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/alunduil/zfs-replicate;
+    description = "ZFS Snapshot Replication";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ alunduil ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/zfsbackup/default.nix b/nixpkgs/pkgs/tools/backup/zfsbackup/default.nix
new file mode 100644
index 000000000000..7b3cbdeaa103
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/zfsbackup/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "zfsbackup";
+  version = "unstable-2019-03-05";
+  rev = "78fea6e99f0a5a4c8513d3a3d1d45fb6750cfddf";
+
+  goPackagePath = "github.com/someone1/zfsbackup-go";
+
+  src = fetchFromGitHub {
+    owner = "someone1";
+    repo = "zfsbackup-go";
+    inherit rev;
+    sha256 = "0yalsfvzmcnc8yfzm3r5dikqrp57spwa16l7gbzvgqqcz4vlnw3n";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with lib; {
+    description = "Backup ZFS snapshots to cloud storage such as Google, Amazon, Azure, etc";
+    homepage = "https://github.com/someone1/zfsbackup-go";
+    license = licenses.mit;
+    maintainers = [ maintainers.xfix ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/zfsbackup/deps.nix b/nixpkgs/pkgs/tools/backup/zfsbackup/deps.nix
new file mode 100644
index 000000000000..f1fa23755bc7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/zfsbackup/deps.nix
@@ -0,0 +1,273 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.3.0
+[
+  {
+    goPackagePath = "cloud.google.com/go";
+    fetch = {
+      type = "git";
+      url = "https://code.googlesource.com/gocloud";
+      rev = "b9197a057a6cb1129f29cd21ca11d1bb043666d1";
+      sha256 = "0f1p361apzj30i9vcza60ldhhjxff8581gr5xqim7x4d5rgmpwil";
+    };
+  }
+  {
+    goPackagePath = "github.com/Azure/azure-pipeline-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Azure/azure-pipeline-go";
+      rev = "232aee85e8e3a6223a11c0943f7df2ae0fac00e4";
+      sha256 = "1agn2nzmm1dkwggm4w7h4bnrav4n5jrl0vqbqy2s49vqlr8zirn6";
+    };
+  }
+  {
+    goPackagePath = "github.com/Azure/azure-storage-blob-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Azure/azure-storage-blob-go";
+      rev = "fc700035fe4a7020f50d49f420b3c088aed57e03";
+      sha256 = "00gsnk9s1rlrakqvcm917hn4r47jannxwp7rkhrb71pamzm46752";
+    };
+  }
+  {
+    goPackagePath = "github.com/aws/aws-sdk-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/aws/aws-sdk-go";
+      rev = "3576772d916b5db1cb5516b772bcdc362349a177";
+      sha256 = "04clzbyg5cmqz98i5hxbik6sd7aclas1707rhaixmmckgisqxb8i";
+    };
+  }
+  {
+    goPackagePath = "github.com/cenkalti/backoff";
+    fetch = {
+      type = "git";
+      url = "https://github.com/cenkalti/backoff";
+      rev = "4b4cebaf850ec58f1bb1fec5bdebdf8501c2bc3f";
+      sha256 = "0vwd6nbadrqgaljb5grmw2iljvv963qd15axr5cvvgpd465q3kzc";
+    };
+  }
+  {
+    goPackagePath = "github.com/dustin/go-humanize";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dustin/go-humanize";
+      rev = "9f541cc9db5d55bce703bd99987c9d5cb8eea45e";
+      sha256 = "1kqf1kavdyvjk7f8kx62pnm7fbypn9z1vbf8v2qdh3y7z7a0cbl3";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/groupcache";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/groupcache";
+      rev = "404acd9df4cc9859d64fb9eed42e5c026187287a";
+      sha256 = "1zmhdr758wn0kfh5xr4hg026f9qvy00s3midb5iqnpx1kh647j2g";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev = "1680a479a2cfb3fa22b972af7e36d0a0fde47bf8";
+      sha256 = "1w0aivn2rqf7bcpz84nbn0alh1q3nglqgp7il835fmvvc94rrkqn";
+    };
+  }
+  {
+    goPackagePath = "github.com/googleapis/gax-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/googleapis/gax-go";
+      rev = "a170e83f27ee4e20c66e51b66a99a4a349a1b75a";
+      sha256 = "0a5ir1v5cd6m40hscqy0qpc3ibd703kiw419m66ddxnkvzykvp0i";
+    };
+  }
+  {
+    goPackagePath = "github.com/juju/ratelimit";
+    fetch = {
+      type = "git";
+      url = "https://github.com/juju/ratelimit";
+      rev = "f60b32039441cd828005f82f3a54aafd00bc9882";
+      sha256 = "1qbjcm4y53awkqmpxb1nm9c1xdylc44vph4mn30qjb5wrcqy7c1r";
+    };
+  }
+  {
+    goPackagePath = "github.com/klauspost/compress";
+    fetch = {
+      type = "git";
+      url = "https://github.com/klauspost/compress";
+      rev = "30993c63e1b02b47dd3878e74c8db50833706ecc";
+      sha256 = "07d0r56ic91rdd0xvfr7zpn015kl6g9jwlgq5avczbz4fnyx5x8m";
+    };
+  }
+  {
+    goPackagePath = "github.com/klauspost/pgzip";
+    fetch = {
+      type = "git";
+      url = "https://github.com/klauspost/pgzip";
+      rev = "083b1c3f84dd6486588802e5ce295de3a7f41a8b";
+      sha256 = "0ddigh096fz3lixbdm679hjvnfivbpkijrclk5sn9091hyj38pb3";
+    };
+  }
+  {
+    goPackagePath = "github.com/kurin/blazer";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kurin/blazer";
+      rev = "cf2f27cc0be3dac3c1a94c3c8b76834ce741439e";
+      sha256 = "02nwxrczg8c9zj3hdmbyg458qvhfwl60ci1pjl7f0y07kgiv1rg3";
+    };
+  }
+  {
+    goPackagePath = "github.com/mattn/go-ieproxy";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-ieproxy";
+      rev = "f9202b1cfdeb0c82ddd3dc1e8e9cd94b3c0c1b13";
+      sha256 = "0r8c17znlv32750qy3p96fbyp8ys8xfdccpzv0z9lr2y88jnzhpz";
+    };
+  }
+  {
+    goPackagePath = "github.com/miolini/datacounter";
+    fetch = {
+      type = "git";
+      url = "https://github.com/miolini/datacounter";
+      rev = "aa48df3a02c1fbcd3040271f631887991c3071fb";
+      sha256 = "12ldh5jhafjhh3jvh979mldwygkkcnm97axs7dhlai6gqwlhls87";
+    };
+  }
+  {
+    goPackagePath = "github.com/nightlyone/lockfile";
+    fetch = {
+      type = "git";
+      url = "https://github.com/nightlyone/lockfile";
+      rev = "0ad87eef1443f64d3d8c50da647e2b1552851124";
+      sha256 = "19vfswcvdy937da7w6hap3wp83drj5a084sqszy8r2ph4fbkln41";
+    };
+  }
+  {
+    goPackagePath = "github.com/op/go-logging";
+    fetch = {
+      type = "git";
+      url = "https://github.com/op/go-logging";
+      rev = "970db520ece77730c7e4724c61121037378659d9";
+      sha256 = "1cpna2x5l071z1vrnk7zipdkka8dzwsjyx7m79xk0lr08rip0kcj";
+    };
+  }
+  {
+    goPackagePath = "github.com/pkg/errors";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pkg/errors";
+      rev = "27936f6d90f9c8e1145f11ed52ffffbfdb9e0af7";
+      sha256 = "0yzmgi6g4ak4q8y7w6x0n5cbinlcn8yc3gwgzy4yck00qdn25d6y";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/cobra";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/cobra";
+      rev = "8a4b46fadf756f30eff047abf2f8edba4eac6fef";
+      sha256 = "0f9pxni3lghl205wrnssw58iliqifrxcdabrbww20887zwn3ki7q";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/pflag";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/pflag";
+      rev = "2e9d26c8c37aae03e3f9d4e90b7116f5accb7cab";
+      sha256 = "0gpmacngd0gpslnbkzi263f5ishigzgh6pbdv9hp092rnjl4nd31";
+    };
+  }
+  {
+    goPackagePath = "go.opencensus.io";
+    fetch = {
+      type = "git";
+      url = "https://github.com/census-instrumentation/opencensus-go";
+      rev = "3b5a343282fe4b4fccdb0f24cbd1d7169d20858a";
+      sha256 = "0qzx8p019r4qzm0knvs3kcx5vc9qg6ksgf1amk5djr1h00w460aw";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev = "87dc89f01550277dc22b74ffcf4cd89fa2f40f4c";
+      sha256 = "0z4i1m2yn3f31ci7wvcm2rxkx2yiv7a78mfzklncmsz2k97rlh2g";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev = "da9a3fd4c5820e74b24a6cb7fb438dc9b0dd377c";
+      sha256 = "0iavs400534jn7drmdphx0f18vgg060p2r59xw5d85ji1l5rin1l";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/oauth2";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/oauth2";
+      rev = "0f29369cfe4552d0e4bcddc57cc75f4d7e672a33";
+      sha256 = "06jwpvx0x2gjn2y959drbcir5kd7vg87k0r1216abk6rrdzzrzi2";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sync";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sync";
+      rev = "cd5d95a43a6e21273425c7ae415d3df9ea832eeb";
+      sha256 = "1nqkyz2y1qvqcma52ijh02s8aiqmkfb95j08f6zcjhbga3ds6hds";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "b09406accb4736d857a32bf9444cd7edae2ffa79";
+      sha256 = "00lbhsr2p3mi2n35mv3yy6lmgzjjav45yv9bmrxgyahbac5qnz5m";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/text";
+      rev = "3d0f7978add91030e5e8976ff65ccdd828286cba";
+      sha256 = "0iagl5icarfrbiv6m3dhqy51r30cnl07r66im5c88dz7lrvpy5z3";
+    };
+  }
+  {
+    goPackagePath = "google.golang.org/api";
+    fetch = {
+      type = "git";
+      url = "https://code.googlesource.com/google-api-go-client";
+      rev = "e6ade80c6e2a122a6588f9f827207dcb99da433e";
+      sha256 = "1mk0ab6f2dyx1lack436zdhspq1hgip2s5m3pqjrqk18s8vvn4bd";
+    };
+  }
+  {
+    goPackagePath = "google.golang.org/genproto";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/go-genproto";
+      rev = "548a555dbc03994223efbaba0090152849259498";
+      sha256 = "15sbfwrh6m18fn3n369cb5c8qsmw17wibwmjssblgp64gvmx5b18";
+    };
+  }
+  {
+    goPackagePath = "google.golang.org/grpc";
+    fetch = {
+      type = "git";
+      url = "https://github.com/grpc/grpc-go";
+      rev = "7c8e60372e19da88fb3fe8ac6a8de781eef7f547";
+      sha256 = "03fb7j1gfglzp77hkhlm8dgg3if1j1pvry0nhx915ww0hmz6sr00";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/backup/zfsnap/default.nix b/nixpkgs/pkgs/tools/backup/zfsnap/default.nix
new file mode 100644
index 000000000000..89d7414246c4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/zfsnap/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, fetchFromGitHub, coreutils, installShellFiles }:
+
+stdenv.mkDerivation rec {
+  version = "2.0.0-beta3";
+  pname = "zfsnap";
+
+  src = fetchFromGitHub {
+    owner = "zfsnap";
+    repo = "zfsnap";
+    rev = "v${version}";
+    sha256 = "0670a5sghvqx32c9gfsird15mg9nqcvwxsrfcjrwc0sj7br9bd2g";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postPatch = ''
+    # Use zfs binaries from PATH, because often the zfs package from nixpkgs is
+    # not the one that should be used
+    substituteInPlace share/zfsnap/core.sh \
+      --replace "ZFS_CMD='/sbin/zfs'" "ZFS_CMD='zfs'" \
+      --replace "ZPOOL_CMD='/sbin/zpool'" "ZPOOL_CMD='zpool'"
+
+    substituteInPlace sbin/zfsnap.sh \
+      --replace "/bin/ls" "${coreutils}/bin/ls"
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv sbin/zfsnap.sh $out/bin/zfsnap
+    mv share $out
+    installManPage man/*/*
+    installShellCompletion completion/*.{bash,zsh}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A portable, performant script to make rolling ZFS snapshots easy";
+    homepage = "https://github.com/zfsnap/zfsnap";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ woffs ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/backup/znapzend/default.nix b/nixpkgs/pkgs/tools/backup/znapzend/default.nix
new file mode 100644
index 000000000000..b44564efb827
--- /dev/null
+++ b/nixpkgs/pkgs/tools/backup/znapzend/default.nix
@@ -0,0 +1,86 @@
+{ stdenv, fetchFromGitHub, fetchurl, perl, perlPackages, wget, autoconf, automake }:
+
+let
+  # when upgrade znapzend, check versions of Perl libs here: https://github.com/oetiker/znapzend/blob/master/PERL_MODULES
+  Mojolicious-6-46 = perlPackages.buildPerlPackage rec {
+    pname = "Mojolicious";
+    version = "6.46";
+    src = fetchurl {
+      url = "mirror://cpan/authors/id/S/SR/SRI/${pname}-${version}.tar.gz";
+      sha256 = "0i3axmx4506fx5gms148pj65x6ys7flaz1aqjd8hd9zfkd8pzdfr";
+    };
+  };
+  MojoIOLoopForkCall-0-17 = perlPackages.buildPerlModule rec {
+    pname = "Mojo-IOLoop-ForkCall";
+    version = "0.17";
+    src = fetchurl {
+      url = "mirror://cpan/authors/id/J/JB/JBERGER/${pname}-${version}.tar.gz";
+      sha256 = "090qxz1nbah2qxvfg4whl6yp6q03qkx7a42751iai521nk1yavc8";
+    };
+    propagatedBuildInputs = [ perlPackages.IOPipely Mojolicious-6-46 ];
+  };
+
+  version = "0.18.0";
+  checksum = "1nlvw56viwgafma506slywfg54z6009jmzc9q6wljgr6mqfmmchd";
+in
+stdenv.mkDerivation {
+  pname = "znapzend";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "oetiker";
+    repo = "znapzend";
+    rev = "v${version}";
+    sha256 = checksum;
+  };
+
+  buildInputs = [ wget perl MojoIOLoopForkCall-0-17 perlPackages.TAPParserSourceHandlerpgTAP ];
+
+  nativeBuildInputs = [ autoconf automake ];
+
+  preConfigure = ''
+    sed -i 's/^SUBDIRS =.*$/SUBDIRS = lib/' Makefile.am
+
+    grep -v thirdparty/Makefile configure.ac > configure.ac.tmp
+    mv configure.ac.tmp configure.ac
+
+    autoconf
+  '';
+
+  preBuild = ''
+    aclocal
+    automake
+  '';
+
+  postInstall = ''
+    substituteInPlace $out/bin/znapzend --replace "${perl}/bin/perl" \
+      "${perl}/bin/perl \
+      -I${Mojolicious-6-46}/${perl.libPrefix} \
+      -I${perlPackages.TAPParserSourceHandlerpgTAP}/${perl.libPrefix} \
+      -I${MojoIOLoopForkCall-0-17}/${perl.libPrefix} \
+      -I${perlPackages.IOPipely}/${perl.libPrefix} \
+      "
+    substituteInPlace $out/bin/znapzendzetup --replace "${perl}/bin/perl" \
+      "${perl}/bin/perl \
+      -I${Mojolicious-6-46}/${perl.libPrefix} \
+      -I${perlPackages.TAPParserSourceHandlerpgTAP}/${perl.libPrefix} \
+      -I${MojoIOLoopForkCall-0-17}/${perl.libPrefix} \
+      -I${perlPackages.IOPipely}/${perl.libPrefix} \
+      "
+    substituteInPlace $out/bin/znapzendztatz --replace "${perl}/bin/perl" \
+      "${perl}/bin/perl \
+      -I${Mojolicious-6-46}/${perl.libPrefix} \
+      -I${perlPackages.TAPParserSourceHandlerpgTAP}/${perl.libPrefix} \
+      -I${MojoIOLoopForkCall-0-17}/${perl.libPrefix} \
+      -I${perlPackages.IOPipely}/${perl.libPrefix} \
+      "
+  '';
+
+  meta = with stdenv.lib; {
+    description = "High performance open source ZFS backup with mbuffer and ssh support";
+    homepage    = http://www.znapzend.org;
+    license     = licenses.gpl3;
+    maintainers = with maintainers; [ otwieracz ];
+    platforms   = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/bluetooth/blueman/default.nix b/nixpkgs/pkgs/tools/bluetooth/blueman/default.nix
new file mode 100644
index 000000000000..1a7fb5c3a084
--- /dev/null
+++ b/nixpkgs/pkgs/tools/bluetooth/blueman/default.nix
@@ -0,0 +1,70 @@
+{ config, stdenv, lib, fetchurl, intltool, pkgconfig, python3Packages, bluez, gtk3
+, obex_data_server, xdg_utils, dnsmasq, dhcp, libappindicator, iproute
+, gnome3, librsvg, wrapGAppsHook, gobject-introspection, autoreconfHook
+, networkmanager, withPulseAudio ? config.pulseaudio or stdenv.isLinux, libpulseaudio, fetchpatch }:
+
+let
+  pythonPackages = python3Packages;
+  binPath = lib.makeBinPath [ xdg_utils dnsmasq dhcp iproute ];
+
+in stdenv.mkDerivation rec {
+  pname = "blueman";
+  version = "2.1.1";
+
+  src = fetchurl {
+    url = "https://github.com/blueman-project/blueman/releases/download/${version}/${pname}-${version}.tar.xz";
+    sha256 = "1hyvc5x97j8b4kvwzh58zzlc454d0h0hk440zbg8f5as9qrv5spi";
+  };
+
+  nativeBuildInputs = [
+    gobject-introspection intltool pkgconfig pythonPackages.cython
+    pythonPackages.wrapPython wrapGAppsHook
+    autoreconfHook # drop when below patch is removed
+  ];
+
+  buildInputs = [ bluez gtk3 pythonPackages.python librsvg
+                  gnome3.adwaita-icon-theme iproute libappindicator networkmanager ]
+                ++ pythonPath
+                ++ lib.optional withPulseAudio libpulseaudio;
+
+  patches = [
+    # Don't use etc/dbus-1/system.d
+    (fetchpatch {
+      url = "https://github.com/blueman-project/blueman/commit/ae2be5a70cdea1d1aa0e3ab1c85c1d3a0c4affc6.patch";
+      sha256 = "0nb6jzlxhgjvac52cjwi0pi40b8v4h6z6pwz5vkyfmaj86spygg3";
+      excludes = [
+        "meson.build"
+        "Dependencies.md"
+      ];
+    })
+  ];
+
+  postPatch = lib.optionalString withPulseAudio ''
+    sed -i 's,CDLL(",CDLL("${libpulseaudio.out}/lib/,g' blueman/main/PulseAudioUtils.py
+  '';
+
+  pythonPath = with pythonPackages; [ pygobject3 pycairo ];
+
+  propagatedUserEnvPkgs = [ obex_data_server ];
+
+  configureFlags = [
+    "--with-systemdsystemunitdir=${placeholder "out"}/lib/systemd/system"
+    "--with-systemduserunitdir=${placeholder "out"}/lib/systemd/user"
+    (lib.enableFeature withPulseAudio "pulseaudio")
+  ];
+
+  postFixup = ''
+    makeWrapperArgs="--prefix PATH ':' ${binPath}"
+    # This mimics ../../../development/interpreters/python/wrap.sh
+    wrapPythonProgramsIn "$out/bin" "$out $pythonPath"
+    wrapPythonProgramsIn "$out/libexec" "$out $pythonPath"
+  '';
+
+  meta = with lib; {
+    homepage = https://github.com/blueman-project/blueman;
+    description = "GTK-based Bluetooth Manager";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/bluetooth/bluez-alsa/default.nix b/nixpkgs/pkgs/tools/bluetooth/bluez-alsa/default.nix
new file mode 100644
index 000000000000..097b7ae00d78
--- /dev/null
+++ b/nixpkgs/pkgs/tools/bluetooth/bluez-alsa/default.nix
@@ -0,0 +1,69 @@
+{ stdenv, fetchFromGitHub, pkgconfig, autoreconfHook
+, alsaLib, bluez, glib, sbc
+
+# optional, but useful utils
+, readline, libbsd, ncurses
+
+# optional codecs
+, aacSupport ? true, fdk_aac
+# TODO: aptxSupport
+}:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  pname = "bluez-alsa";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "Arkq";
+    repo = "bluez-alsa";
+    rev = "v${version}";
+    sha256 = "12kc2896rbir8viywd6bjwcklkwf46j4svh9viryn6kmk084nb49";
+  };
+
+  nativeBuildInputs = [ pkgconfig autoreconfHook ];
+
+  buildInputs = [
+    alsaLib bluez glib sbc
+    readline libbsd ncurses
+  ]
+  ++ optional aacSupport fdk_aac;
+
+  configureFlags = [
+    "--with-alsaplugindir=\$out/lib/alsa-lib"
+    "--enable-rfcomm"
+    "--enable-hcitop"
+  ]
+  ++ optional aacSupport "--enable-aac";
+
+  doCheck = false; # fails 1 of 3 tests, needs access to ALSA
+
+  meta = {
+    description = "Bluez 5 Bluetooth Audio ALSA Backend";
+    longDescription = ''
+      Bluez-ALSA (BlueALSA) is an ALSA backend for Bluez 5 audio interface.
+      Bluez-ALSA registers all Bluetooth devices with audio profiles in Bluez
+      under a virtual ALSA PCM device called `bluealsa` that supports both
+      playback and capture.
+
+      Some backstory: Bluez 5 removed built-in support for ALSA in favor of a
+      generic interface for 3rd party appliations. Thereafter, PulseAudio
+      implemented a backend for that interface and became the only way to get
+      Bluetooth audio with Bluez 5. Users prefering ALSA stayed on Bluez 4.
+      However, Bluez 4 eventually became deprecated.
+
+      This package is a rebirth of a direct interface between ALSA and Bluez 5,
+      that, unlike PulseAudio, provides KISS near-metal-like experience. It is
+      not possible to run BluezALSA and PulseAudio Bluetooth at the same time
+      due to limitations in Bluez, but it is possible to run PulseAudio over
+      BluezALSA if you disable `bluetooth-discover` and `bluez5-discover`
+      modules in PA and configure it to play/capture sound over `bluealsa` PCM.
+    '';
+    homepage = src.meta.homepage;
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.oxij ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/bluetooth/bluez-tools/default.nix b/nixpkgs/pkgs/tools/bluetooth/bluez-tools/default.nix
new file mode 100644
index 000000000000..47aaadc9ccf0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/bluetooth/bluez-tools/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, autoreconfHook, readline
+, fetchFromGitHub, glib, pkgconfig }:
+
+stdenv.mkDerivation rec {
+  date    = "2016-12-12";
+  name    = "bluez-tools-${date}";
+  rev     = "97efd29";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "khvzak";
+    repo = "bluez-tools";
+    sha256 = "08xp77sf5wnq5086halmyk3vla4bfls06q1zrqdcq36hw6d409i6";
+  };
+
+  nativeBuildInputs = [ pkgconfig autoreconfHook ];
+
+  buildInputs = [ readline glib ];
+
+  meta = with stdenv.lib; {
+    description = "Command line bluetooth manager for Bluez5";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.dasuxullebt ];
+    platforms = platforms.unix;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/bluetooth/obex-data-server/default.nix b/nixpkgs/pkgs/tools/bluetooth/obex-data-server/default.nix
new file mode 100644
index 000000000000..5c8f65ae5141
--- /dev/null
+++ b/nixpkgs/pkgs/tools/bluetooth/obex-data-server/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, pkgconfig, libusb, glib, dbus-glib, bluez, openobex, dbus }:
+
+stdenv.mkDerivation rec {
+  name = "obex-data-server-0.4.6";
+
+  src = fetchurl {
+    url = "http://tadas.dailyda.com/software/${name}.tar.gz";
+    sha256 = "0kq940wqs9j8qjnl58d6l3zhx0jaszci356xprx23l6nvdfld6dk";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libusb glib dbus-glib bluez openobex dbus ];
+
+  patches = [ ./obex-data-server-0.4.6-build-fixes-1.patch ];
+
+  preConfigure = ''
+  addToSearchPath PKG_CONFIG_PATH ${openobex}/lib64/pkgconfig
+  export PKG_CONFIG_PATH="${dbus.dev}/lib/pkgconfig:$PKG_CONFIG_PATH"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://wiki.muiline.com/obex-data-server;
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/bluetooth/obex-data-server/obex-data-server-0.4.6-build-fixes-1.patch b/nixpkgs/pkgs/tools/bluetooth/obex-data-server/obex-data-server-0.4.6-build-fixes-1.patch
new file mode 100644
index 000000000000..b5fde8db589c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/bluetooth/obex-data-server/obex-data-server-0.4.6-build-fixes-1.patch
@@ -0,0 +1,56 @@
+Submitted By:            Armin K. <krejzi at email dot com>
+Date:                    2012-07-06
+Initial Package Version: 0.4.6
+Upstream Status:         Unknown
+Origin:                  Self
+Description:             Some build fixes.
+
+--- obex-data-server.orig/src/ods-obex.c	2011-02-10 10:14:42.000000000 +0100
++++ obex-data-server/src/ods-obex.c	2012-07-06 20:10:09.208712553 +0200
+@@ -412,7 +412,7 @@
+ 		goto err;
+ 	}
+ 
+-	interfaces_num = OBEX_FindInterfaces(obex_context->obex_handle, &obex_intf);
++	interfaces_num = OBEX_EnumerateInterfaces(obex_context->obex_handle);
+ 	if (intf_num >= interfaces_num) {
+ 		g_set_error (error, ODS_ERROR, ODS_ERROR_FAILED, "Invalid interface number");
+ 		goto err;
+@@ -1928,7 +1928,7 @@
+ 	gchar	*uname;
+ 	gsize	uname_len;
+ 
+-	if (action != OBEX_ACTION_SETPERM)
++	if (action != 0x03)
+ 		g_assert (src && dst);
+ 
+ 	object = OBEX_ObjectNew (obex_context->obex_handle, OBEX_CMD_ACTION);
+@@ -1974,7 +1974,7 @@
+ 	                      OBEX_HDR_ACTION_ID, hv, 1, 0);
+ 
+ 	/* permissions header */
+-	if (action == OBEX_ACTION_SETPERM) {
++	if (action == 0x03) {
+ 		hv.bq4 = perms;
+ 		ret = OBEX_ObjectAddHeader (obex_context->obex_handle, object,
+ 		                            OBEX_HDR_PERMISSIONS, hv, 4, 0);
+--- obex-data-server.orig/src/ods-session.c	2011-02-10 09:57:31.000000000 +0100
++++ obex-data-server/src/ods-session.c	2012-07-06 20:10:09.208712553 +0200
+@@ -1761,7 +1761,7 @@
+                          DBusGMethodInvocation *context)
+ {
+ 	return ods_session_remote_action (session, remote_source,
+-	                                  remote_destination, OBEX_ACTION_COPY,
++	                                  remote_destination, 0x00,
+ 	                                  context);
+ }
+ 
+@@ -1772,7 +1772,7 @@
+                          DBusGMethodInvocation *context)
+ {
+ 	return ods_session_remote_action (session, remote_source,
+-	                                  remote_destination, OBEX_ACTION_MOVE,
++	                                  remote_destination, 0x01,
+ 	                                  context);
+ }
+ 
diff --git a/nixpkgs/pkgs/tools/bluetooth/obexd/default.nix b/nixpkgs/pkgs/tools/bluetooth/obexd/default.nix
new file mode 100644
index 000000000000..0771505b7269
--- /dev/null
+++ b/nixpkgs/pkgs/tools/bluetooth/obexd/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl, pkgconfig, glib, dbus, openobex, bluez, libical }:
+
+stdenv.mkDerivation rec {
+  name = "obexd-0.48";
+
+  src = fetchurl {
+    url = "mirror://kernel/linux/bluetooth/${name}.tar.bz2";
+    sha256 = "1i20dnibvnq9lnkkhajr5xx3kxlwf9q5c4jm19kyb0q1klzgzlb8";
+  };
+
+  buildInputs = [ glib dbus openobex bluez libical ];
+
+  nativeBuildInputs = [ pkgconfig ];
+
+  meta = with stdenv.lib; {
+    homepage = http://www.bluez.org/;
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/bluetooth/obexfs/default.nix b/nixpkgs/pkgs/tools/bluetooth/obexfs/default.nix
new file mode 100644
index 000000000000..81d0849b408a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/bluetooth/obexfs/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl, pkgconfig, bluez, fuse, obexftp }:
+
+stdenv.mkDerivation rec {
+  name = "obexfs-0.12";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/openobex/${name}.tar.gz";
+    sha256 = "1g3krpygk6swa47vbmp9j9s8ahqqcl9ra8r25ybgzv2d9pmjm9kj";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ fuse obexftp bluez ];
+
+  meta = with stdenv.lib; {
+    homepage = http://dev.zuckschwerdt.org/openobex/wiki/ObexFs;
+    description = "A tool to mount OBEX-based devices (such as Bluetooth phones)";
+    platforms = platforms.linux;
+    license = licenses.lgpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/bluetooth/obexftp/default.nix b/nixpkgs/pkgs/tools/bluetooth/obexftp/default.nix
new file mode 100644
index 000000000000..3e40c7d8ef69
--- /dev/null
+++ b/nixpkgs/pkgs/tools/bluetooth/obexftp/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, pkgconfig, openobex, bluez, cmake }:
+   
+stdenv.mkDerivation rec {
+  name = "obexftp-0.24.2";
+   
+  src = fetchurl {
+    url = "mirror://sourceforge/openobex/${name}-Source.tar.gz";
+    sha256 = "18w9r78z78ri5qc8fjym4nk1jfbrkyr789sq7rxrkshf1a7b83yl";
+  };
+
+  nativeBuildInputs = [ pkgconfig cmake ];
+
+  buildInputs = [ bluez ];
+
+  propagatedBuildInputs = [ openobex ];
+
+  # There's no such thing like "bluetooth" library; possibly they meant "bluez" but it links correctly without this.
+  postFixup = ''
+    sed -i 's,^Requires: bluetooth,Requires:,' $out/lib/pkgconfig/obexftp.pc
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://dev.zuckschwerdt.org/openobex/wiki/ObexFtp;
+    description = "A library and tool to access files on OBEX-based devices (such as Bluetooth phones)";
+    platforms = platforms.linux;
+    license = licenses.lgpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/bluetooth/openobex/default.nix b/nixpkgs/pkgs/tools/bluetooth/openobex/default.nix
new file mode 100644
index 000000000000..e3a360818e63
--- /dev/null
+++ b/nixpkgs/pkgs/tools/bluetooth/openobex/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl, pkgconfig, bluez, libusb, cmake }:
+   
+stdenv.mkDerivation rec {
+  name = "openobex-1.7.2";
+   
+  src = fetchurl {
+    url = "mirror://sourceforge/openobex/${name}-Source.tar.gz";
+    sha256 = "1z6l7pbwgs5pjx3861cyd3r6vq5av984bdp4r3hgrw2jxam6120m";
+  };
+
+  nativeBuildInputs = [ pkgconfig cmake ];
+  buildInputs = [ bluez libusb ];
+
+  configureFlags = [ "--enable-apps" ];
+
+  patchPhase = ''
+    sed -i "s!/lib/udev!$out/lib/udev!" udev/CMakeLists.txt
+    sed -i "/if ( PKGCONFIG_UDEV_FOUND )/,/endif ( PKGCONFIG_UDEV_FOUND )/d" udev/CMakeLists.txt
+    '';
+
+  meta = with stdenv.lib; {
+    homepage = http://dev.zuckschwerdt.org/openobex/;
+    description = "An open source implementation of the Object Exchange (OBEX) protocol";
+    platforms = platforms.linux;
+    license = licenses.lgpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/bootloaders/refind/0001-toolchain.patch b/nixpkgs/pkgs/tools/bootloaders/refind/0001-toolchain.patch
new file mode 100644
index 000000000000..13c4c88f95f0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/bootloaders/refind/0001-toolchain.patch
@@ -0,0 +1,27 @@
+diff --git a/Make.common b/Make.common
+index 3f0b919..ee365f5 100644
+--- a/Make.common
++++ b/Make.common
+@@ -33,22 +33,6 @@ ARCH            ?= $(HOSTARCH)
+ 
+ # Note: TIANOBASE is defined in master Makefile and exported
+ GENFW           = $(TIANOBASE)/BaseTools/Source/C/bin/GenFw
+-prefix          = /usr/bin/
+-ifeq ($(ARCH),aarch64)
+-  CC            = $(prefix)aarch64-linux-gnu-gcc
+-  AS            = $(prefix)aarch64-linux-gnu-as
+-  LD            = $(prefix)aarch64-linux-gnu-ld
+-  AR            = $(prefix)aarch64-linux-gnu-ar
+-  RANLIB        = $(prefix)aarch64-linux-gnu-ranlib
+-  OBJCOPY       = $(prefix)aarch64-linux-gnu-objcopy
+-else
+-  CC            = $(prefix)gcc
+-  AS            = $(prefix)as
+-  LD            = $(prefix)ld
+-  AR            = $(prefix)ar
+-  RANLIB        = $(prefix)ranlib
+-  OBJCOPY       = $(prefix)objcopy
+-endif
+ 
+ ifeq ($(MAKEWITH),TIANO)
+ # Below file defines TARGET (RELEASE or DEBUG) and TOOL_CHAIN_TAG (GCC44, GCC45, GCC46, or GCC47)
diff --git a/nixpkgs/pkgs/tools/bootloaders/refind/default.nix b/nixpkgs/pkgs/tools/bootloaders/refind/default.nix
new file mode 100644
index 000000000000..cf0ad78d1d7e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/bootloaders/refind/default.nix
@@ -0,0 +1,129 @@
+{ stdenv, fetchurl, gnu-efi }:
+
+let
+  archids = {
+    x86_64-linux = { hostarch = "x86_64"; efiPlatform = "x64"; };
+    i686-linux = rec { hostarch = "ia32"; efiPlatform = hostarch; };
+    aarch64-linux = { hostarch = "aarch64"; efiPlatform = "aa64"; };
+  };
+
+  inherit
+    (archids.${stdenv.hostPlatform.system} or (throw "unsupported system: ${stdenv.hostPlatform.system}"))
+    hostarch efiPlatform;
+in
+
+stdenv.mkDerivation rec {
+  pname = "refind";
+  version = "0.11.4";
+  srcName = "refind-src-${version}";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/refind/${version}/${srcName}.tar.gz";
+    sha256 = "1bjd0dl77bc5k6g3kc7s8m57vpbg2zscph9qh84xll9rc10g3fir";
+  };
+
+  patches = [
+    ./0001-toolchain.patch
+  ];
+
+  buildInputs = [ gnu-efi ];
+
+  hardeningDisable = [ "stackprotector" ];
+
+  makeFlags =
+    [ "prefix="
+      "EFIINC=${gnu-efi}/include/efi"
+      "EFILIB=${gnu-efi}/lib"
+      "GNUEFILIB=${gnu-efi}/lib"
+      "EFICRT0=${gnu-efi}/lib"
+      "HOSTARCH=${hostarch}"
+      "ARCH=${hostarch}"
+    ];
+
+  buildFlags = [ "gnuefi" "fs_gnuefi" ];
+
+  installPhase = ''
+    install -d $out/bin/
+    install -d $out/share/refind/drivers_${efiPlatform}/
+    install -d $out/share/refind/tools_${efiPlatform}/
+    install -d $out/share/refind/docs/html/
+    install -d $out/share/refind/docs/Styles/
+    install -d $out/share/refind/fonts/
+    install -d $out/share/refind/icons/
+    install -d $out/share/refind/images/
+    install -d $out/share/refind/keys/
+
+    # refind uefi app
+    install -D -m0644 refind/refind_${efiPlatform}.efi $out/share/refind/refind_${efiPlatform}.efi
+
+    # uefi drivers
+    install -D -m0644 drivers_${efiPlatform}/*.efi $out/share/refind/drivers_${efiPlatform}/
+
+    # uefi apps
+    install -D -m0644 gptsync/gptsync_${efiPlatform}.efi $out/share/refind/tools_${efiPlatform}/gptsync_${efiPlatform}.efi
+
+    # helper scripts
+    install -D -m0755 refind-install $out/bin/refind-install
+    install -D -m0755 mkrlconf $out/bin/refind-mkrlconf
+    install -D -m0755 mvrefind $out/bin/refind-mvrefind
+    install -D -m0755 fonts/mkfont.sh $out/bin/refind-mkfont
+
+    # sample config files
+    install -D -m0644 refind.conf-sample $out/share/refind/refind.conf-sample
+
+    # docs
+    install -D -m0644 docs/refind/* $out/share/refind/docs/html/
+    install -D -m0644 docs/Styles/* $out/share/refind/docs/Styles/
+    install -D -m0644 README.txt $out/share/refind/docs/README.txt
+    install -D -m0644 NEWS.txt $out/share/refind/docs/NEWS.txt
+    install -D -m0644 BUILDING.txt $out/share/refind/docs/BUILDING.txt
+    install -D -m0644 CREDITS.txt $out/share/refind/docs/CREDITS.txt
+
+    # fonts
+    install -D -m0644 fonts/* $out/share/refind/fonts/
+    rm -f $out/share/refind/fonts/mkfont.sh
+
+    # icons
+    install -D -m0644 icons/*.png $out/share/refind/icons/
+
+    # images
+    install -D -m0644 images/*.{png,bmp} $out/share/refind/images/
+
+    # keys
+    install -D -m0644 keys/* $out/share/refind/keys/
+
+    # Fix variable definition of 'RefindDir' which is used to locate ressource files.
+    sed -i "s,\bRefindDir=.*,RefindDir=$out/share/refind,g" $out/bin/refind-install
+
+    # Patch uses of `which`.  We could patch in calls to efibootmgr,
+    # openssl, convert, and openssl, but that would greatly enlarge
+    # refind's closure (from ca 28MB to over 400MB).
+    sed -i 's,`which \(.*\)`,`type -p \1`,g' $out/bin/refind-install
+    sed -i 's,`which \(.*\)`,`type -p \1`,g' $out/bin/refind-mvrefind
+    sed -i 's,`which \(.*\)`,`type -p \1`,g' $out/bin/refind-mkfont
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A graphical {,U}EFI boot manager";
+    longDescription = ''
+      rEFInd is a graphical boot manager for EFI- and UEFI-based
+      computers, such as all Intel-based Macs and recent (most 2011
+      and later) PCs. rEFInd presents a boot menu showing all the EFI
+      boot loaders on the EFI-accessible partitions, and optionally
+      BIOS-bootable partitions on Macs. EFI-compatbile OSes, including
+      Linux, provide boot loaders that rEFInd can detect and
+      launch. rEFInd can launch Linux EFI boot loaders such as ELILO,
+      GRUB Legacy, GRUB 2, and 3.3.0 and later kernels with EFI stub
+      support. EFI filesystem drivers for ext2/3/4fs, ReiserFS, HFS+,
+      and ISO-9660 enable rEFInd to read boot loaders from these
+      filesystems, too. rEFInd's ability to detect boot loaders at
+      runtime makes it very easy to use, particularly when paired with
+      Linux kernels that provide EFI stub support.
+    '';
+    homepage = http://refind.sourceforge.net/;
+    maintainers = [ maintainers.AndersonTorres ];
+    platforms = [ "i686-linux" "x86_64-linux" "aarch64-linux" ];
+    license = licenses.gpl3Plus;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/bashburn/default.nix b/nixpkgs/pkgs/tools/cd-dvd/bashburn/default.nix
new file mode 100644
index 000000000000..ccf632dfe5a5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/bashburn/default.nix
@@ -0,0 +1,63 @@
+{ stdenv, fetchurl, utillinux
+, cdparanoia, cdrdao, dvdplusrwtools, flac, lame, mpg123, normalize
+, vorbis-tools, xorriso }:
+
+stdenv.mkDerivation rec {
+  pname = "bashburn";
+  version = "3.1.0";
+
+  src = fetchurl {
+    sha256 = "0g5va5rjdrvacanmqr6pbxk2rl565ahkfbsvxsp1jvhvxvhmv3dp";
+    url = "http://bashburn.dose.se/index.php?s=file_download&id=25";
+    name = "${pname}-${version}.tar.gz";
+  };
+
+  nativeBuildInputs = [ utillinux ];
+
+  postPatch = ''
+    for path in \
+      BB_CDBURNCMD=${xorriso}/bin/"xorriso -as cdrecord" \
+      BB_DVDBURNCMD=${dvdplusrwtools}/bin/growisofs \
+      BB_ISOCMD=${xorriso}/bin/"xorriso -as mkisofs" \
+      BB_DVDBLANK=${dvdplusrwtools}/bin/dvd+rw-format \
+      BB_CDIMAGECMD=${cdrdao}/bin/cdrdao \
+      BB_CDAUDIORIP=${cdparanoia}/bin/cdparanoia \
+      BB_READCD=${xorriso}/bin/"xorriso -as mkisofs" \
+      BB_MP3ENC=${lame}/bin/lame \
+      BB_MP3DEC=${mpg123}/bin/mpg123 \
+      BB_OGGENC=${vorbis-tools}/bin/oggenc \
+      BB_OGGDEC=${vorbis-tools}/bin/oggdec \
+      BB_FLACCMD=${flac.bin}/bin/flac \
+      BB_EJECT=${utillinux}/bin/eject \
+      BB_NORMCMD=${normalize}/bin/normalize \
+    ; do
+      echo $path
+      sed -i BashBurn.sh \
+        -e "s,\(''${path%%=*}:\).*,\1 ''${path#*=},"
+      sed -i menus/advanced.sh \
+        -e "s,\(''${path%%=*}|\).*\('.*\),\1''${path#*=}\2,"
+    done
+  '';
+
+  installPhase = ''
+    sh Install.sh --prefix $out
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Bash script CD Burner Writer";
+    longDescription = ''
+      It might not be the best looking application out there, but it works.
+      It’s simple, fast and small, and can handle most things you throw at it.
+      Currently (and with the right dependencies installed), BashBurn can:
+      - burn data CDs/DVDs (Including CDRWs)
+      - burn music CDs
+      - burn CD/DVD-images
+      - rip data/music CDs
+      - manipulate ISO-files
+      - and probably more...
+    '';
+    homepage = http://bashburn.dose.se/;
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/bchunk/default.nix b/nixpkgs/pkgs/tools/cd-dvd/bchunk/default.nix
new file mode 100644
index 000000000000..b4f0d1039edc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/bchunk/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "bchunk";
+  version = "1.2.2";
+
+  src = fetchurl {
+    url = "http://he.fi/bchunk/${pname}-${version}.tar.gz";
+    sha256 = "12dxx98kbpc5z4dgni25280088bhlsb677rp832r82zzc1drpng7";
+  };
+
+  makeFlags = stdenv.lib.optionals stdenv.cc.isClang [ "CC=cc" "LD=cc" ];
+
+  installPhase = ''
+    install -Dt $out/bin bchunk
+    install -Dt $out/share/man/man1 bchunk.1
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://he.fi/bchunk/;
+    description = "A program that converts CD images in BIN/CUE format into a set of ISO and CDR tracks";
+    platforms = platforms.unix;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/brasero/default.nix b/nixpkgs/pkgs/tools/cd-dvd/brasero/default.nix
new file mode 100644
index 000000000000..a9f5b321d3d7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/brasero/default.nix
@@ -0,0 +1,49 @@
+{ stdenv, lib, fetchurl, pkgconfig, gtk3, itstool, gst_all_1, libxml2, libnotify
+, libcanberra-gtk3, intltool, dvdauthor, libburn, libisofs
+, vcdimager, wrapGAppsHook, hicolor-icon-theme }:
+
+let
+  major = "3.12";
+  minor = "2";
+  binpath = lib.makeBinPath [ dvdauthor vcdimager ];
+
+in stdenv.mkDerivation rec {
+  version = "${major}.${minor}";
+  pname = "brasero";
+
+  src = fetchurl {
+    url = "http://download.gnome.org/sources/brasero/${major}/${pname}-${version}.tar.xz";
+    sha256 = "0h90y674j26rvjahb8cc0w79zx477rb6zaqcj26wzvq8kmpic8k8";
+  };
+
+  nativeBuildInputs = [ pkgconfig itstool intltool wrapGAppsHook ];
+
+  buildInputs = [ gtk3 libxml2 libnotify libcanberra-gtk3 libburn libisofs
+                  hicolor-icon-theme
+                  gst_all_1.gstreamer gst_all_1.gst-plugins-base
+                  gst_all_1.gst-plugins-good gst_all_1.gst-plugins-bad
+                  gst_all_1.gst-plugins-ugly gst_all_1.gst-libav ];
+
+  # brasero checks that the applications it uses aren't symlinks, but this
+  # will obviously not work on nix
+  patches = [ ./remove-symlink-check.patch ];
+
+  enableParallelBuilding = true;
+
+  configureFlags = [
+    "--with-girdir=$out/share/gir-1.0"
+    "--with-typelibdir=$out/lib/girepository-1.0"
+  ];
+
+  preFixup = ''
+    gappsWrapperArgs+=(--prefix PATH : "${binpath}" --prefix GST_PLUGIN_SYSTEM_PATH : "$GST_PLUGIN_SYSTEM_PATH")
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A Gnome CD/DVD Burner";
+    homepage = https://wiki.gnome.org/Apps/Brasero;
+    maintainers = [ maintainers.bdimcheff ];
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/brasero/remove-symlink-check.patch b/nixpkgs/pkgs/tools/cd-dvd/brasero/remove-symlink-check.patch
new file mode 100644
index 000000000000..028ac12c4a03
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/brasero/remove-symlink-check.patch
@@ -0,0 +1,29 @@
+diff --git a/libbrasero-burn/burn-plugin.c b/libbrasero-burn/burn-plugin.c
+index f97bc5f..88e9d35 100644
+--- a/libbrasero-burn/burn-plugin.c
++++ b/libbrasero-burn/burn-plugin.c
+@@ -221,21 +221,10 @@ brasero_plugin_test_app (BraseroPlugin *plugin,
+ 		return;
+ 	}
+ 
+-	/* make sure that's not a symlink pointing to something with another
+-	 * name like wodim.
+-	 * NOTE: we used to test the target and see if it had the same name as
+-	 * the symlink with GIO. The problem is, when the symlink pointed to
+-	 * another symlink, then GIO didn't follow that other symlink. And in
+-	 * the end it didn't work. So forbid all symlink. */
+-	if (g_file_test (prog_path, G_FILE_TEST_IS_SYMLINK)) {
+-		brasero_plugin_add_error (plugin,
+-		                          BRASERO_PLUGIN_ERROR_SYMBOLIC_LINK_APP,
+-		                          name);
+-		g_free (prog_path);
+-		return;
+-	}
++	/* disable symlink check on nixos */
++
+ 	/* Make sure it's a regular file */
+-	else if (!g_file_test (prog_path, G_FILE_TEST_IS_REGULAR)) {
++	if (!g_file_test (prog_path, G_FILE_TEST_IS_REGULAR)) {
+ 		brasero_plugin_add_error (plugin,
+ 		                          BRASERO_PLUGIN_ERROR_MISSING_APP,
+ 		                          name);
diff --git a/nixpkgs/pkgs/tools/cd-dvd/brasero/wrapper.nix b/nixpkgs/pkgs/tools/cd-dvd/brasero/wrapper.nix
new file mode 100644
index 000000000000..8112b0971f3d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/brasero/wrapper.nix
@@ -0,0 +1,18 @@
+{ lib, symlinkJoin, brasero-original, cdrtools, libdvdcss, makeWrapper }:
+
+let
+  binPath = lib.makeBinPath [ cdrtools ];
+in symlinkJoin {
+  name = "brasero-${brasero-original.version}";
+
+  paths = [ brasero-original ];
+  buildInputs = [ makeWrapper ];
+
+  postBuild = ''
+    wrapProgram $out/bin/brasero \
+      --prefix PATH ':' ${binPath} \
+      --prefix LD_PRELOAD : ${lib.makeLibraryPath [ libdvdcss ]}/libdvdcss.so
+  '';
+
+  inherit (brasero-original) meta;
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/ccd2iso/default.nix b/nixpkgs/pkgs/tools/cd-dvd/ccd2iso/default.nix
new file mode 100644
index 000000000000..c7aab91adbeb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/ccd2iso/default.nix
@@ -0,0 +1,18 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "ccd2iso-0.3";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/ccd2iso/${name}.tar.gz";
+    sha256 = "1z000zi7hpr2h9cabj6hzf3n6a6gd6glmm8nn36v4b8i4vzbhx7q";
+  };
+
+  meta = with stdenv.lib; {
+    description = "CloneCD to ISO converter";
+    homepage = https://sourceforge.net/projects/ccd2iso/;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ yegortimoshenko ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/cdi2iso/default.nix b/nixpkgs/pkgs/tools/cd-dvd/cdi2iso/default.nix
new file mode 100644
index 000000000000..00a1864b0357
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/cdi2iso/default.nix
@@ -0,0 +1,24 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  pname = "cdi2iso";
+  version = "0.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/cdi2iso.berlios/${pname}-${version}-src.tar.gz";
+    sha256 = "0fj2fxhpr26z649m0ph71378c41ljflpyk89g87x8r1mc4rbq3kh";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin/
+    cp cdi2iso $out/bin/
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A very simple utility for converting DiscJuggler images to the standard ISO-9660 format";
+    homepage = https://sourceforge.net/projects/cdi2iso.berlios;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ hrdinka ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/cdimgtools/default.nix b/nixpkgs/pkgs/tools/cd-dvd/cdimgtools/default.nix
new file mode 100644
index 000000000000..ece45944c5c0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/cdimgtools/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromRepoOrCz, autoreconfHook, makeWrapper, libdvdcss, libdvdread, perl, perlPackages, asciidoc, xmlto, sourceHighlight, docbook_xsl, docbook_xml_dtd_45 }:
+
+stdenv.mkDerivation {
+  pname = "cdimgtools";
+  version = "0.3";
+
+  src = fetchFromRepoOrCz {
+    repo = "cdimgtools";
+    rev = "version/0.3";
+    sha256 = "1hxg3glxj26fh9xnv184sfdc2wi4cnzvn7chz47wcqdsd0d5fn8w";
+  };
+
+  nativeBuildInputs = [ autoreconfHook makeWrapper asciidoc perlPackages.PodPerldoc xmlto sourceHighlight docbook_xsl docbook_xml_dtd_45 ];
+
+  buildInputs = [ perl perlPackages.StringEscape perlPackages.DataHexdumper libdvdcss libdvdread ];
+
+  patches = [ ./nrgtool_fix_my.patch ./removed_dvdcss_interface_2.patch];
+
+  postFixup = ''
+    for cmd in raw96cdconv nrgtool; do
+      wrapProgram "$out/bin/$cmd" --prefix PERL5LIB : "$PERL5LIB"
+    done
+  '';
+
+  outputs = [ "out" "doc" ];
+
+  installTargets = [ "install" "install-doc" ];
+
+  meta = with stdenv.lib; {
+    homepage = https://repo.or.cz/cdimgtools.git/blob_plain/refs/heads/release:/README.html;
+    description = "Tools to inspect and manipulate CD/DVD optical disc images";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ hhm ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/cdimgtools/nrgtool_fix_my.patch b/nixpkgs/pkgs/tools/cd-dvd/cdimgtools/nrgtool_fix_my.patch
new file mode 100644
index 000000000000..5ed389c46ca2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/cdimgtools/nrgtool_fix_my.patch
@@ -0,0 +1,12 @@
+Fixes an error in nrgtool.
+--- a/nrgtool
++++ b/nrgtool
+@@ -162,7 +162,7 @@ sub process_file {
+ 	}
+ 	seek $nrg, 0, SEEK_SET if ($iff_only);
+ 	seek $nrg, $offset, SEEK_SET unless ($iff_only);
+-	while (my $_ = read_chunk($nrg, $iff)) {
++	while ($_ = read_chunk($nrg, $iff)) {
+ 		if ($_ < -1) {
+ 			warn  "ERROR while reading an IFF chunk; aborting\n";
+ 			return;
diff --git a/nixpkgs/pkgs/tools/cd-dvd/cdimgtools/removed_dvdcss_interface_2.patch b/nixpkgs/pkgs/tools/cd-dvd/cdimgtools/removed_dvdcss_interface_2.patch
new file mode 100644
index 000000000000..cb265eae05bf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/cdimgtools/removed_dvdcss_interface_2.patch
@@ -0,0 +1,53 @@
+Removes the deprecated and removed `dvdcss_interface_2` libdvdcss function.
+
+This does not change any functionality; it only modifies the printing of software version information.
+--- a/cssdec.c
++++ b/cssdec.c
+@@ -102,8 +102,8 @@ int main( int argc, char *argv[] )
+ 			b_keyonly = 1;
+ 			break;
+ 		case 'V':
+-			printf( "%s version %s (libdvdcss version %s)\n",
+-			  progname, progversion, dvdcss_interface_2 );
++			printf( "%s version %s\n",
++			  progname, progversion );
+ 			exit( EX_SUCCESS );
+ 			break;
+ 		case '?':
+@@ -126,8 +126,8 @@ int main( int argc, char *argv[] )
+ 	if( argc >= 3 ) end = (int)strtol( argv[2], (char **)NULL, 0 );
+ 
+ 	/* Initialize libdvdcss */
+-	printe( 2, "%s version %s (libdvdcss version %s)",
+-	  progname, progversion, dvdcss_interface_2 );
++	printe( 2, "%s version %s",
++	  progname, progversion );
+ 	dvdcss = dvdcss_open( (char *)dvdfile );
+ 	if( dvdcss == NULL )
+ 	{
+diff --git a/dvdimgdecss.c b/dvdimgdecss.c
+index 0b7006d..b7d251a 100644
+--- a/dvdimgdecss.c
++++ b/dvdimgdecss.c
+@@ -157,8 +157,8 @@ int main( int argc, char *argv[] )
+ 			dvdread_decrypt = 1;
+ 			break;
+ 		case 'V':
+-			printf( "%s version %s (libdvdcss version %s)\n",
+-			  progname, progversion, dvdcss_interface_2 );
++			printf( "%s version %s\n",
++			  progname, progversion );
+ 			exit( EX_SUCCESS );
+ 			break;
+ 		case '?':
+@@ -180,8 +180,8 @@ int main( int argc, char *argv[] )
+ 	if( !imgfile ) verbosity++;
+ 
+ 	/* Open the DVD */
+-	printe( 2, "%s: version %s (libdvdcss version %s)\n",
+-	  progname, progversion, dvdcss_interface_2 );
++	printe( 2, "%s: version %s\n",
++	  progname, progversion );
+ 	dvdcss = dvdcss_open( dvdfile );
+ 	if( dvdcss == NULL ) {
+ 		printe( 1, "opening of the DVD (%s) with libdvdcss failed\n", dvdfile );
diff --git a/nixpkgs/pkgs/tools/cd-dvd/cdrdao/adjust-includes-for-glibc-212.patch b/nixpkgs/pkgs/tools/cd-dvd/cdrdao/adjust-includes-for-glibc-212.patch
new file mode 100644
index 000000000000..6d58eb6e9a56
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/cdrdao/adjust-includes-for-glibc-212.patch
@@ -0,0 +1,15 @@
+Adjust some headers for glibc 2.12 compatibility.
+Patch is a diff between the 1.2.3 release and CVS HEAD.
+
+--- cdrdao-1.2.3/dao/ScsiIf-linux.cc	2009-09-28 05:42:03.000000000 -0430
++++ /home/kkallio/q/src/r/cvs/cdrdao/cdrdao/dao/ScsiIf-linux.cc	2010-08-06 07:50:46.000000000 -0430
+@@ -19,6 +19,9 @@
+ 
+ #include <config.h>
+ 
++#include <sys/types.h>
++#include <sys/stat.h>
++
+ #include <stdio.h>
+ #include <fcntl.h>
+ #include <unistd.h>
diff --git a/nixpkgs/pkgs/tools/cd-dvd/cdrdao/default.nix b/nixpkgs/pkgs/tools/cd-dvd/cdrdao/default.nix
new file mode 100644
index 000000000000..908808b79f3c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/cdrdao/default.nix
@@ -0,0 +1,37 @@
+{stdenv, fetchurl, libvorbis, libmad, pkgconfig, libao}:
+
+stdenv.mkDerivation {
+  name = "cdrdao-1.2.3";
+
+  src = fetchurl {
+    url = mirror://sourceforge/cdrdao/cdrdao-1.2.3.tar.bz2;
+    sha256 = "0pmpgx91j984snrsxbq1dgf3ximks2dfh1sqqmic72lrls7wp4w1";
+  };
+
+  makeFlags = [ "RM=rm" "LN=ln" "MV=mv" ];
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libvorbis libmad libao ];
+
+  hardeningDisable = [ "format" ];
+
+  # Adjust some headers to match glibc 2.12 ... patch is a diff between
+  # the cdrdao CVS head and the 1.2.3 release.
+  patches = [ ./adjust-includes-for-glibc-212.patch ];
+
+  # we have glibc/include/linux as a symlink to the kernel headers,
+  # and the magic '..' points to kernelheaders, and not back to the glibc/include
+  postPatch = ''
+    sed -i 's,linux/../,,g' dao/sg_err.h
+  '';
+
+  # Needed on gcc >= 6.
+  NIX_CFLAGS_COMPILE = "-Wno-narrowing";
+
+  meta = with stdenv.lib; {
+    description = "A tool for recording audio or data CD-Rs in disk-at-once (DAO) mode";
+    homepage = http://cdrdao.sourceforge.net/;
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/cdrkit/cdrkit-1.1.9-efi-boot.patch b/nixpkgs/pkgs/tools/cd-dvd/cdrkit/cdrkit-1.1.9-efi-boot.patch
new file mode 100644
index 000000000000..45f910b03e66
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/cdrkit/cdrkit-1.1.9-efi-boot.patch
@@ -0,0 +1,204 @@
+diff --git a/doc/icedax/tracknames.pl b/doc/icedax/tracknames.pl
+old mode 100755
+new mode 100644
+index 09f0fcf..801b89e
+--- a/doc/icedax/tracknames.pl
++++ b/doc/icedax/tracknames.pl
+@@ -1,4 +1,4 @@
+-#!/usr/local/bin/perl 
++#!/usr/bin/perl 
+ # A quick perl hack to get rename files pulled in with icedax.
+ # by billo@billo.com
+ #
+diff --git a/genisoimage/eltorito.c b/genisoimage/eltorito.c
+index b97bdf1..5d7c2d1 100644
+--- a/genisoimage/eltorito.c
++++ b/genisoimage/eltorito.c
+@@ -59,7 +59,7 @@ static	void	get_torito_desc(struct eltorito_boot_descriptor *boot_desc);
+ static	void	fill_boot_desc(struct eltorito_defaultboot_entry *boot_desc_entry,
+ 										struct eltorito_boot_entry_info *boot_entry);
+ void	get_boot_entry(void);
+-void	new_boot_entry(void);
++void	new_boot_entry();
+ static	int	tvd_write(FILE *outfile);
+ 
+ 
+@@ -283,6 +283,7 @@ get_torito_desc(struct eltorito_boot_descriptor *boot_desc)
+ 	int			i;
+ 	int			offset;
+ 	struct eltorito_defaultboot_entry boot_desc_record;
++	struct eltorito_sectionheader_entry section_header;
+ 
+ 	memset(boot_desc, 0, sizeof (*boot_desc));
+ 	boot_desc->type[0] = 0;
+@@ -317,7 +318,7 @@ get_torito_desc(struct eltorito_boot_descriptor *boot_desc)
+ 	 */
+ 	memset(&valid_desc, 0, sizeof (valid_desc));
+ 	valid_desc.headerid[0] = 1;
+-	valid_desc.arch[0] = EL_TORITO_ARCH_x86;
++	valid_desc.arch[0] = first_boot_entry->arch;
+ 
+ 	/*
+ 	 * we'll shove start of publisher id into id field,
+@@ -347,10 +348,53 @@ get_torito_desc(struct eltorito_boot_descriptor *boot_desc)
+ 	/* now write it to the virtual boot catalog */
+ 	memcpy(de2->table, &valid_desc, 32);
+ 
+-	for (current_boot_entry = first_boot_entry, offset = sizeof (valid_desc);
+-		current_boot_entry != NULL;
+-		current_boot_entry = current_boot_entry->next,
+-		offset += sizeof (boot_desc_record)) {
++	/* Fill the first entry, since it's special and already has the
++	 * matching header via the validation header... */
++	offset = sizeof (valid_desc);
++	current_boot_entry = first_boot_entry;
++
++	if (offset >= SECTOR_SIZE) {
++#ifdef	USE_LIBSCHILY
++		comerrno(EX_BAD, "Too many El Torito boot entries\n");
++#else
++		fprintf(stderr,	"Too many El Torito boot entries\n");
++		exit(1);
++#endif
++	}
++	fill_boot_desc(&boot_desc_record, current_boot_entry);
++	memcpy(de2->table + offset, &boot_desc_record,
++				sizeof (boot_desc_record));
++
++	offset += sizeof(boot_desc_record);
++
++	for (current_boot_entry = current_boot_entry->next;
++			current_boot_entry != NULL;
++			current_boot_entry = current_boot_entry->next) {
++		struct eltorito_sectionheader_entry section_header;
++
++		if (offset >= SECTOR_SIZE) {
++#ifdef	USE_LIBSCHILY
++			comerrno(EX_BAD,
++			"Too many El Torito boot entries\n");
++#else
++			fprintf(stderr,
++			"Too many El Torito boot entries\n");
++			exit(1);
++#endif
++		}
++
++		memset(&section_header, '\0', sizeof(section_header));
++		if (current_boot_entry->next)
++			section_header.headerid[0] = EL_TORITO_SECTION_HEADER;
++		else
++			section_header.headerid[0] = EL_TORITO_LAST_SECTION_HEADER;
++
++		section_header.arch[0] = current_boot_entry->arch;
++		set_721(section_header.num_entries, 1);
++
++		memcpy(de2->table + offset, &section_header,
++					sizeof(section_header));
++		offset += sizeof(section_header);
+ 
+ 		if (offset >= SECTOR_SIZE) {
+ #ifdef	USE_LIBSCHILY
+@@ -365,6 +409,8 @@ get_torito_desc(struct eltorito_boot_descriptor *boot_desc)
+ 		fill_boot_desc(&boot_desc_record, current_boot_entry);
+ 		memcpy(de2->table + offset, &boot_desc_record,
+ 					sizeof (boot_desc_record));
++		offset += sizeof (boot_desc_record);
++
+ 	}
+ }/* get_torito_desc(... */
+ 
+diff --git a/genisoimage/genisoimage.c b/genisoimage/genisoimage.c
+index a5b0b46..8add1ac 100644
+--- a/genisoimage/genisoimage.c
++++ b/genisoimage/genisoimage.c
+@@ -47,6 +47,7 @@
+ 
+ #include <mconfig.h>
+ #include "genisoimage.h"
++#include "iso9660.h"
+ #include <errno.h>
+ #include <timedefs.h>
+ #include <fctldefs.h>
+@@ -523,6 +524,8 @@ static const struct ld_option ld_options[] =
+ 	'\0', NULL, "Set debug flag", ONE_DASH},
+ 	{{"eltorito-boot", required_argument, NULL, 'b'},
+ 	'b', "FILE", "Set El Torito boot image name", ONE_DASH},
++	{{"efi-boot", required_argument, NULL, 'e'},
++	'e', "FILE", "Set EFI boot image name", ONE_DASH},
+ 	{{"eltorito-alt-boot", no_argument, NULL, OPTION_ALT_BOOT},
+ 	'\0', NULL, "Start specifying alternative El Torito boot parameters", ONE_DASH},
+ 	{{"sparc-boot", required_argument, NULL, 'B'},
+@@ -1502,6 +1505,7 @@ int main(int argc, char *argv[])
+ 			all_files = 0;
+ 			break;
+ 		case 'b':
++		case 'e':
+ 			do_sort++;		/* We sort bootcat/botimage */
+ 			use_eltorito++;
+ 			boot_image = optarg;	/* pathname of the boot image */
+@@ -1517,6 +1521,10 @@ int main(int argc, char *argv[])
+ #endif
+ 			}
+ 			get_boot_entry();
++			if (c == 'e')
++				current_boot_entry->arch = EL_TORITO_ARCH_EFI;
++			else
++				current_boot_entry->arch = EL_TORITO_ARCH_x86;
+ 			current_boot_entry->boot_image = boot_image;
+ 			break;
+ 		case OPTION_ALT_BOOT:
+diff --git a/genisoimage/genisoimage.h b/genisoimage/genisoimage.h
+index bbedfb0..76e5e21 100644
+--- a/genisoimage/genisoimage.h
++++ b/genisoimage/genisoimage.h
+@@ -293,6 +293,7 @@ struct deferred_write {
+ struct eltorito_boot_entry_info {
+ 	struct eltorito_boot_entry_info *next;
+ 	char		*boot_image;
++	char		arch;
+ 	int		not_bootable;
+ 	int		no_emul_boot;
+ 	int		hard_disk_boot;
+diff --git a/genisoimage/iso9660.h b/genisoimage/iso9660.h
+index c74c2a9..c8b7a05 100644
+--- a/genisoimage/iso9660.h
++++ b/genisoimage/iso9660.h
+@@ -62,10 +62,14 @@ struct iso_volume_descriptor {
+ #define	EL_TORITO_ARCH_x86	0
+ #define	EL_TORITO_ARCH_PPC	1
+ #define	EL_TORITO_ARCH_MAC	2
++#define	EL_TORITO_ARCH_EFI	0xef
+ 
+ #define	EL_TORITO_BOOTABLE	0x88
+ #define	EL_TORITO_NOT_BOOTABLE	0
+ 
++#define	EL_TORITO_SECTION_HEADER	0x90
++#define	EL_TORITO_LAST_SECTION_HEADER	0x91
++
+ #define	EL_TORITO_MEDIA_NOEMUL	0
+ #define	EL_TORITO_MEDIA_12FLOP	1
+ #define	EL_TORITO_MEDIA_144FLOP	2
+@@ -173,7 +177,7 @@ struct eltorito_validation_entry {
+ struct eltorito_defaultboot_entry {
+ 	char boot_id			[ISODCL(1,    1)]; /* 711 */
+ 	char boot_media			[ISODCL(2,    2)];
+-	char loadseg			[ISODCL(3,    4)]; /* 711 */
++	char loadseg			[ISODCL(3,    4)]; /* 712 */
+ 	char sys_type			[ISODCL(5,    5)];
+ 	char pad1			[ISODCL(6,    6)];
+ 	char nsect			[ISODCL(7,    8)];
+@@ -181,6 +185,14 @@ struct eltorito_defaultboot_entry {
+ 	char pad2			[ISODCL(13,  32)];
+ };
+ 
++/* El Torito Section Header Entry in boot catalog */
++struct eltorito_sectionheader_entry {
++	char headerid			[ISODCL(1,    1)]; /* 711 */
++	char arch			[ISODCL(2,    2)];
++	char num_entries		[ISODCL(3,    4)]; /* 711 */
++	char id				[ISODCL(5,   32)];
++};
++
+ /*
+  * XXX JS: The next two structures have odd lengths!
+  * Some compilers (e.g. on Sun3/mc68020) padd the structures to even length.
diff --git a/nixpkgs/pkgs/tools/cd-dvd/cdrkit/default.nix b/nixpkgs/pkgs/tools/cd-dvd/cdrkit/default.nix
new file mode 100644
index 000000000000..7de086dba607
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/cdrkit/default.nix
@@ -0,0 +1,44 @@
+{stdenv, fetchurl, cmake, libcap, zlib, bzip2, perl}:
+
+stdenv.mkDerivation rec {
+  name = "cdrkit-1.1.11";
+
+  src = fetchurl {
+    url = "http://cdrkit.org/releases/${name}.tar.gz";
+    sha256 = "1nj7iv3xrq600i37na9a5idd718piiiqbs4zxvpjs66cdrsk1h6i";
+  };
+
+  buildInputs = [cmake libcap zlib bzip2 perl];
+
+  hardeningDisable = [ "format" ];
+
+  # efi-boot-patch extracted from http://arm.koji.fedoraproject.org/koji/rpminfo?rpmID=174244
+  patches = [ ./include-path.patch ./cdrkit-1.1.9-efi-boot.patch ];
+
+  postInstall = ''
+    # file name compatibility with the old cdrecord (growisofs wants this name)
+    ln -s $out/bin/genisoimage $out/bin/mkisofs
+    ln -s $out/bin/wodim $out/bin/cdrecord
+  '';
+
+  makeFlags = [ "PREFIX=\$(out)" ];
+
+  meta = {
+    description = "Portable command-line CD/DVD recorder software, mostly compatible with cdrtools";
+
+    longDescription = ''
+      Cdrkit is a suite of programs for recording CDs and DVDs,
+      blanking CD-RW media, creating ISO-9660 filesystem images,
+      extracting audio CD data, and more.  The programs included in
+      the cdrkit package were originally derived from several sources,
+      most notably mkisofs by Eric Youngdale and others, cdda2wav by
+      Heiko Eissfeldt, and cdrecord by Jörg Schilling.  However,
+      cdrkit is not affiliated with any of these authors; it is now an
+      independent project.
+    '';
+    
+    homepage = http://cdrkit.org/;
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/cdrkit/include-path.patch b/nixpkgs/pkgs/tools/cd-dvd/cdrkit/include-path.patch
new file mode 100644
index 000000000000..c071e182d7f5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/cdrkit/include-path.patch
@@ -0,0 +1,9 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 57edba6..d06b6d9 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -1,3 +1,4 @@
+ PROJECT (cdrkit C)
++INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/include)
+ SUBDIRS(include genisoimage wodim libedc libhfs_iso libparanoia icedax libusal librols libunls readom netscsid 3rd-party/dirsplit)
+ 
diff --git a/nixpkgs/pkgs/tools/cd-dvd/cdrtools/default.nix b/nixpkgs/pkgs/tools/cd-dvd/cdrtools/default.nix
new file mode 100644
index 000000000000..f4f07143a207
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/cdrtools/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchurl, m4, acl, libcap, Carbon, IOKit }:
+
+stdenv.mkDerivation rec {
+  pname = "cdrtools";
+  version = "3.02a09";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/cdrtools/${pname}-${version}.tar.bz2";
+    sha256 = "10ayj48jax2pvsv6j5gybwfsx7b74zdjj84znwag7wwf8n7l6a5a";
+  };
+
+  nativeBuildInputs = [ m4 ];
+  buildInputs = if stdenv.isDarwin then [ Carbon IOKit ] else [ acl libcap ];
+
+  postPatch = ''
+    sed "/\.mk3/d" -i libschily/Targets.man
+    substituteInPlace man/Makefile --replace "man4" ""
+    substituteInPlace RULES/rules.prg --replace "/bin/" ""
+  '';
+
+  dontConfigure = true;
+
+  makeFlags = [ "GMAKE_NOWARN=true" "INS_BASE=/" "INS_RBASE=/" "DESTDIR=${placeholder "out"}" ];
+
+  enableParallelBuilding = false; # parallel building fails on some linux machines
+
+  meta = with stdenv.lib; {
+    homepage = "http://cdrtools.sourceforge.net/private/cdrecord.html";
+    description = "Highly portable CD/DVD/BluRay command line recording software";
+    license = with licenses; [ cddl gpl2 lgpl21 ];
+    platforms = with platforms; linux ++ darwin;
+    # Licensing issues: This package contains code licensed under CDDL, GPL2
+    # and LGPL2. There is a debate regarding the legality of distributing this
+    # package in binary form.
+    hydraPlatforms = [];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/cue2pops/default.nix b/nixpkgs/pkgs/tools/cd-dvd/cue2pops/default.nix
new file mode 100644
index 000000000000..2ee69682a1d5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/cue2pops/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchFromGitHub }:
+
+with stdenv.lib;
+stdenv.mkDerivation {
+  pname = "cue2pops";
+  version = "git-2018-01-04";
+
+  src = fetchFromGitHub {
+    owner = "makefu";
+    repo = "cue2pops-linux";
+    rev = "541863adf23fdecde92eba5899f8d58586ca4551";
+    sha256 = "05w84726g3k33rz0wwb9v77g7xh4cnhy9sxlpilf775nli9bynrk";
+  };
+
+  dontConfigure = true;
+
+  makeFlags = ["CC=cc"];
+
+  installPhase = ''
+    install --directory --mode=755 $out/bin
+    install --mode=755 cue2pops $out/bin
+  '';
+
+  meta = {
+    description = "Convert CUE to ISO suitable to POPStarter";
+    homepage = https://github.com/makefu/cue2pops-linux;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/cuetools/default.nix b/nixpkgs/pkgs/tools/cd-dvd/cuetools/default.nix
new file mode 100644
index 000000000000..e4e34aa919b6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/cuetools/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, autoreconfHook
+, bison, flac, flex, id3v2, vorbis-tools
+}:
+
+stdenv.mkDerivation rec {
+  pname = "cuetools";
+  version = "1.4.1";
+
+  src = fetchFromGitHub {
+    owner = "svend";
+    repo = pname;
+    rev = version;
+    sha256 = "02ksv1ahf1v4cr2xbclsfv5x17m9ivzbssb5r8xjm97yh8a7spa3";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  buildInputs = [ bison flac flex id3v2 vorbis-tools ];
+
+  postInstall = ''
+    # add link for compatibility with Debian-based distros, which package `cuetag.sh` as `cuetag`
+    ln -s $out/bin/cuetag.sh $out/bin/cuetag
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A set of utilities for working with cue files and toc files";
+    homepage = https://github.com/svend/cuetools;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ codyopel jcumming ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/dvd+rw-tools/default.nix b/nixpkgs/pkgs/tools/cd-dvd/dvd+rw-tools/default.nix
new file mode 100644
index 000000000000..40925a14537a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/dvd+rw-tools/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchurl, fetchpatch, cdrtools, m4 }:
+
+stdenv.mkDerivation rec {
+  pname = "dvd+rw-tools";
+  version = "7.1";
+
+  src = fetchurl {
+    url = "http://fy.chalmers.se/~appro/linux/DVD+RW/tools/${pname}-${version}.tar.gz";
+    sha256 = "1jkjvvnjcyxpql97xjjx0kwvy70kxpiznr2zpjy2hhci5s10zmpq";
+  };
+
+  # Patches from Gentoo
+  patches = [ ]
+  ++ builtins.map ({pfile, sha256}: fetchpatch {
+       url = "https://gitweb.gentoo.org/repo/gentoo.git/plain/app-cdr/dvd+rw-tools/files/${pfile}?id=b510df361241e8f16314b1f14642305f0111dac6";
+       inherit sha256;
+     })
+     [{ pfile = "dvd+rw-tools-7.0-dvddl-r1.patch"; sha256 = "12l33jq6405shfwdycrj52qmd07h5bsp1vjaddknfri456azjny5"; }
+      { pfile = "dvd+rw-tools-7.0-glibc2.6.90.patch"; sha256 = "1fb3gap2in782pa4164h1w0ha8ggsq3inissa1k0zn2p2r3rb5ln"; }
+      { pfile = "dvd+rw-tools-7.0-reload.patch"; sha256 = "12v2y2y6ci5hh6lbmsk97dzgznrm4bxwhc81mq684ix0qspb9mq4"; }
+      { pfile = "dvd+rw-tools-7.0-sysmacros.patch"; sha256 = "1rkb26cyhfxklkmna3l9b4797f6gzlxyqqin44jwnq3jmwfrs6v0"; }
+      { pfile = "dvd+rw-tools-7.0-wctomb-r1.patch"; sha256 = "1xg770l0b4bjn30y7nqg619v4m5ickcn2n8hv9k2an6r191daq58"; }
+      { pfile = "dvd+rw-tools-7.0-wexit.patch"; sha256 = "0sqzlkm19fmjx4lzxkxwn2ymrj9fq0zk0jkys3xm6xvd2ibb6kxl"; }
+      { pfile = "dvd+rw-tools-7.1-bluray_pow_freespace.patch"; sha256 = "0iscz8fs5002ymk6wl2fz4x06b7bdnc57rfz8kbv3216acqi5rv3"; }
+      { pfile = "dvd+rw-tools-7.1-bluray_srm+pow.patch"; sha256 = "0sy40m12w987i6g0cyxv8cfmab4vp7cd222lv05apknfi2y7smmw"; }
+      { pfile = "dvd+rw-tools-7.1-lastshort.patch"; sha256 = "01wspv70sil20khkg5kj086b1x8rrig4yhcq9s88bdjd42nv0vpx"; }
+      { pfile = "dvd+rw-tools-7.1-noevent.patch"; sha256 = "1kbmxpg15wci33f2h6pxxvf3qm0kpyzx9wj5a3l67sk34hvza3z6"; }
+     ];
+
+  nativeBuildInputs = [ m4 ];
+  buildInputs = [ cdrtools ];
+
+  makeFlags = [ "prefix=${placeholder "out"}" ];
+
+  meta = with stdenv.lib; {
+    homepage = "http://fy.chalmers.se/~appro/linux/DVD+RW/tools";
+    description = "Tools for mastering Blu-ray and DVD+-RW/+-R media";
+    platforms = platforms.linux;
+    license = with licenses; [ gpl2 publicDomain ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/dvd-vr/default.nix b/nixpkgs/pkgs/tools/cd-dvd/dvd-vr/default.nix
new file mode 100644
index 000000000000..2cb90129ed9a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/dvd-vr/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "dvd-vr";
+  version = "0.9.7";
+  src = fetchurl {
+    url = "https://www.pixelbeat.org/programs/dvd-vr/dvd-vr-${version}.tar.gz";
+    sha256 = "13wkdia3c0ryda40b2nzpb9vddimasgc4w95hvl0k555k9k8bl0r";
+  };
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with stdenv.lib; {
+    homepage = https://www.pixelbeat.org/programs/dvd-vr/;
+    downloadPage = https://www.pixelbeat.org/programs/dvd-vr/;
+    description = "A utility to identify and optionally copy recordings from a DVD-VR format disc";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ fgaz ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/cd-dvd/dvdisaster/default.nix b/nixpkgs/pkgs/tools/cd-dvd/dvdisaster/default.nix
new file mode 100644
index 000000000000..6a4161ba1faa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/dvdisaster/default.nix
@@ -0,0 +1,88 @@
+{ stdenv, fetchurl, pkgconfig, gettext, which
+, glib, gtk2
+, enableSoftening ? true
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dvdisaster";
+  version = "0.79.5";
+
+  src = fetchurl {
+    url = "http://dvdisaster.net/downloads/${pname}-${version}.tar.bz2";
+    sha256 = "0f8gjnia2fxcbmhl8b3qkr5b7idl8m855dw7xw2fnmbqwvcm6k4w";
+  };
+
+  nativeBuildInputs = [ gettext pkgconfig which ];
+  buildInputs = [ glib gtk2 ];
+
+  patches = stdenv.lib.optional enableSoftening [
+    ./encryption.patch
+    ./dvdrom.patch
+  ];
+
+  postPatch = ''
+    patchShebangs ./
+    sed -i 's/dvdisaster48.png/dvdisaster/' contrib/dvdisaster.desktop
+    substituteInPlace scripts/bash-based-configure \
+      --replace 'if (make -v | grep "GNU Make") > /dev/null 2>&1 ;' \
+                'if make -v | grep "GNU Make" > /dev/null 2>&1 ;'
+  '';
+
+  configureFlags = [
+    # Explicit --docdir= is required for on-line help to work:
+    "--docdir=share/doc"
+    "--with-nls=yes"
+    "--with-embedded-src-path=no"
+  ] ++ stdenv.lib.optional (stdenv.hostPlatform.isx86_64) "--with-sse2=yes";
+
+  # fatal error: inlined-icons.h: No such file or directory
+  enableParallelBuilding = false;
+
+  doCheck = true;
+  checkPhase = ''
+    pushd regtest
+
+    mkdir -p "$TMP"/{log,regtest}
+    substituteInPlace common.bash \
+      --replace /dev/shm "$TMP/log" \
+      --replace /var/tmp "$TMP"
+
+    for test in *.bash; do
+      case "$test" in
+      common.bash)
+        echo "Skipping $test"
+        continue ;;
+      *)
+        echo "Running $test"
+        ./"$test"
+      esac
+    done
+
+    popd
+  '';
+
+  postInstall = ''
+    mkdir -pv $out/share/applications
+    cp contrib/dvdisaster.desktop $out/share/applications/
+
+    for size in 16 24 32 48 64; do
+      mkdir -pv $out/share/icons/hicolor/"$size"x"$size"/apps/
+      cp contrib/dvdisaster"$size".png \
+        $out/share/icons/hicolor/"$size"x"$size"/apps/dvdisaster.png
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://dvdisaster.net/;
+    description = "Data loss/scratch/aging protection for CD/DVD media";
+    longDescription = ''
+      Dvdisaster provides a margin of safety against data loss on CD and
+      DVD media caused by scratches or aging media. It creates error correction
+      data which is used to recover unreadable sectors if the disc becomes
+      damaged at a later time.
+    '';
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/dvdisaster/dvdrom.patch b/nixpkgs/pkgs/tools/cd-dvd/dvdisaster/dvdrom.patch
new file mode 100644
index 000000000000..ce3f3de2bc03
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/dvdisaster/dvdrom.patch
@@ -0,0 +1,19 @@
+Author: Corey Wright <undefined@pobox.com>
+Description: Adds support for DVD-ROM medium-type.
+
+Index: dvdisaster/scsi-layer.c
+===================================================================
+--- dvdisaster.orig/scsi-layer.c	2012-03-06 11:10:17.147044691 +0900
++++ dvdisaster/scsi-layer.c	2012-03-06 11:10:30.927044292 +0900
+@@ -913,6 +913,11 @@
+ 	    break;
+ 	 }
+ 
++	 if(layer_type & 0x01)
++	 {  dh->typeDescr = g_strdup("DVD-ROM");
++	    break;
++	 }
++
+ 	 if(layer_type & 0x06) /* strange thing: (re-)writeable but neither plus nor dash */ 
+ 	 {  dh->typeDescr = g_strdup("DVD-ROM (fake)");
+ 	    dh->subType = DVD;
diff --git a/nixpkgs/pkgs/tools/cd-dvd/dvdisaster/encryption.patch b/nixpkgs/pkgs/tools/cd-dvd/dvdisaster/encryption.patch
new file mode 100644
index 000000000000..21e35889382d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/dvdisaster/encryption.patch
@@ -0,0 +1,19 @@
+Author: n/a
+Description: Disables to skip on encrypted disks (e.g. DVD with CSS-Encryption).
+
+diff -Naur dvdisaster-0.79.5.orig/scsi-layer.c dvdisaster-0.79.5/scsi-layer.c
+--- dvdisaster-0.79.5.orig/scsi-layer.c	2015-10-28 21:56:57.000000000 +0100
++++ dvdisaster-0.79.5/scsi-layer.c	2015-12-27 06:19:32.012253661 +0100
+@@ -2712,12 +2712,6 @@
+       }
+    }
+ 
+-   if(dh->mainType == DVD && query_copyright(dh))
+-   {  CloseImage(image);
+-      Stop(_("This software does not support encrypted media.\n"));
+-      return NULL;
+-   }
+-
+    /* Create the bitmap of simulated defects */
+ 
+    if(Closure->simulateDefects)
diff --git a/nixpkgs/pkgs/tools/cd-dvd/ecm-tools/default.nix b/nixpkgs/pkgs/tools/cd-dvd/ecm-tools/default.nix
new file mode 100644
index 000000000000..922ab39063a0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/ecm-tools/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "ecm-tools";
+  version = "1.0.3";
+
+  src = fetchFromGitHub {
+    owner = "alucryd";
+    repo = "ecm-tools";
+    rev = "v${version}";
+    sha256 = "1rvyx5gcy8lfklgj80szlz3312x45wzx0d9jsgwyvy8f6m4nnb0c";
+  };
+
+  dontConfigure = true;
+
+  installPhase = ''
+    install --directory --mode=755 $out/bin
+    install --mode=755 bin2ecm $out/bin
+    (cd $out/bin; ln -s bin2ecm ecm2bin)
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A utility to uncompress ECM files to BIN CD format";
+    homepage = https://github.com/alucryd/ecm-tools;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/isomd5sum/default.nix b/nixpkgs/pkgs/tools/cd-dvd/isomd5sum/default.nix
new file mode 100644
index 000000000000..3bc1f886ccd2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/isomd5sum/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchFromGitHub
+, python3
+, popt
+}:
+
+stdenv.mkDerivation rec {
+  pname = "isomd5sum";
+  version = "1.2.3";
+
+  src = fetchFromGitHub {
+    owner = "rhinstaller";
+    repo = pname;
+    rev = version;
+    sha256 = "1wjnh2hlp1hjjm4a8wzdhdrm73jq41lmpmy3ls0rh715p3j7z4q9";
+  };
+
+  buildInputs = [ python3 popt ] ;
+
+  postPatch = ''
+    substituteInPlace Makefile --replace "#/usr/" "#"
+    substituteInPlace Makefile --replace "/usr/" "/"
+  '';
+
+  dontConfigure = true;
+
+  makeFlags = [ "DESTDIR=${placeholder "out"}" ];
+
+  # we don't install python stuff as it borks up directories
+  installTargets = [ "install-bin" "install-devel" ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/rhinstaller/isomd5sum;
+    description = "Utilities for working with md5sum implanted in ISO images";
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ knl ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/lsdvd/default.nix b/nixpkgs/pkgs/tools/cd-dvd/lsdvd/default.nix
new file mode 100644
index 000000000000..09fbc8b38c87
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/lsdvd/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchurl, libdvdread, pkgconfig }:
+
+let
+  version = "0.17";
+in
+stdenv.mkDerivation {
+  pname = "lsdvd";
+  inherit version;
+  src = fetchurl {
+    url = "mirror://sourceforge/lsdvd/lsdvd-${version}.tar.gz";
+    sha256 = "1274d54jgca1prx106iyir7200aflr70bnb1kawndlmcckcmnb3x";
+  };
+
+  buildInputs = [ libdvdread ];
+  nativeBuildInputs = [ pkgconfig ];
+
+  meta = with stdenv.lib; {
+    homepage = https://sourceforge.net/projects/lsdvd/;
+    description = "Display information about audio, video, and subtitle tracks on a DVD";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/mdf2iso/default.nix b/nixpkgs/pkgs/tools/cd-dvd/mdf2iso/default.nix
new file mode 100644
index 000000000000..dbad9d362478
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/mdf2iso/default.nix
@@ -0,0 +1,20 @@
+{stdenv, fetchgit}:
+
+stdenv.mkDerivation rec {
+  pname = "mdf2iso";
+  version = "0.3.1";
+
+  src = fetchgit {
+    url    = "https://salsa.debian.org/debian/mdf2iso";
+    rev    = "c6a5b588318d43bc8af986bbe48d0a06e92f4280";
+    sha256 = "0xg43jlvrk8adfjgbjir15nxwcj0nhz4gxpqx7jdfvhg0kwliq0n";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Small utility that converts MDF images to ISO format";
+    homepage = src.url;
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.oxij ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/mkcue/default.nix b/nixpkgs/pkgs/tools/cd-dvd/mkcue/default.nix
new file mode 100644
index 000000000000..357992d72916
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/mkcue/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "mkcue";
+  version = "1";
+
+  src = fetchurl {
+    url = "http://http.debian.net/debian/pool/main/m/mkcue/mkcue_${version}.orig.tar.gz";
+    sha256 = "0rs897wp08z4hd904bjb5sl4lb8qxj82x5ayklr28bhg9pd5gbra";
+  };
+
+  preInstall = "mkdir -pv $out/bin";
+  postInstall = "chmod -v +w $out/bin/mkcue";
+
+  meta = with stdenv.lib; {
+    description = "Generates CUE sheets from a CD TOC";
+    license = licenses.lgpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/nrg2iso/default.nix b/nixpkgs/pkgs/tools/cd-dvd/nrg2iso/default.nix
new file mode 100644
index 000000000000..43ed7ea7d389
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/nrg2iso/default.nix
@@ -0,0 +1,23 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  pname = "nrg2iso";
+  version = "0.4";
+
+  src = fetchurl {
+    url = "http://gregory.kokanosky.free.fr/v4/linux/${pname}-${version}.tar.gz";
+    sha256 = "18sam7yy50rbfhjixwd7wx7kmfn1x1y5j80vwfxi5v408s39s115";
+  };
+
+  installPhase = ''
+    mkdir -pv $out/bin/
+    cp -v nrg2iso $out/bin/nrg2iso
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A linux utils for converting CD (or DVD) image generated by Nero Burning Rom to ISO format";
+    homepage = http://gregory.kokanosky.free.fr/v4/linux/nrg2iso.en.html;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/srt-to-vtt-cl/default.nix b/nixpkgs/pkgs/tools/cd-dvd/srt-to-vtt-cl/default.nix
new file mode 100644
index 000000000000..94cd09674dac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/srt-to-vtt-cl/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, substituteAll }:
+
+stdenv.mkDerivation rec {
+  pname = "srt-to-vtt-cl";
+  version = "unstable-2019-01-03";
+
+  src = fetchFromGitHub {
+    owner = "nwoltman";
+    repo = pname;
+    rev = "ce3d0776906eb847c129d99a85077b5082f74724";
+    sha256 = "0qxysj08gjr6npyvg148llmwmjl2n9cyqjllfnf3gxb841dy370n";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./fix-validation.patch;
+    })
+  ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp bin/$(uname -s)/$(uname -m)/srt-vtt $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Convert SRT files to VTT";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ericdallo ];
+    homepage = https://github.com/nwoltman/srt-to-vtt-cl;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/srt-to-vtt-cl/fix-validation.patch b/nixpkgs/pkgs/tools/cd-dvd/srt-to-vtt-cl/fix-validation.patch
new file mode 100644
index 000000000000..abddae6d0719
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/srt-to-vtt-cl/fix-validation.patch
@@ -0,0 +1,13 @@
+--- a/Makefile
++++ b/Makefile
+@@ -1,9 +1,4 @@
+-ERR = $(shell which clang++ >/dev/null; echo $$?)
+-ifeq "$(ERR)" "0"
+-	CXX ?= clang++
+-else
+-	CXX ?= g++
+-endif
++CXX ?= g++
+ CXXFLAGS = -std=c++11 -O2 -MMD -I ./deps
+ OBJECTS := src/text_encoding_detect.o src/Utils.o src/Converter.o src/main.o
+ DEPENDS := $(OBJECTS:.o=.d)
diff --git a/nixpkgs/pkgs/tools/cd-dvd/uif2iso/default.nix b/nixpkgs/pkgs/tools/cd-dvd/uif2iso/default.nix
new file mode 100644
index 000000000000..4e3a2daafe81
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/uif2iso/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, unzip, zlib }:
+
+stdenv.mkDerivation rec {
+  nameNoVer = "uif2iso";
+  name = "${nameNoVer}-0.1.7";
+
+  src = fetchurl {
+    url = "http://aluigi.altervista.org/mytoolz/${nameNoVer}.zip";
+    sha256 = "1v18fmlzhkkhv8xdc9dyvl8vamwg3ka4dsrg7vvmk1f2iczdx3dp";
+  };
+
+  buildInputs = [unzip zlib];
+
+  installPhase = ''
+    make -C . prefix="$out" install;
+  '';
+
+  meta = {
+    description = "Tool for converting single/multi part UIF image files to ISO";
+    homepage = "http://aluigi.org/mytoolz.htm#uif2iso";
+    license = stdenv.lib.licenses.gpl1Plus;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/unetbootin/default.nix b/nixpkgs/pkgs/tools/cd-dvd/unetbootin/default.nix
new file mode 100644
index 000000000000..a6c2885d4b46
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/unetbootin/default.nix
@@ -0,0 +1,67 @@
+{ stdenv, fetchFromGitHub, makeWrapper, qt4, utillinux, coreutils, which, qmake4Hook
+, p7zip, mtools, syslinux }:
+
+stdenv.mkDerivation rec {
+  pname = "unetbootin";
+  version = "675";
+
+  src = fetchFromGitHub {
+    owner  = "unetbootin";
+    repo   = "unetbootin";
+    rev    = version;
+    sha256 = "0b7z2amsf6i7b56a5sfs5di1vh30h6ybcqg23d5gx5zgn3w38w4a";
+  };
+
+  setSourceRoot = ''
+    sourceRoot=$(echo */src/unetbootin)
+  '';
+
+  buildInputs = [ qt4 ];
+  nativeBuildInputs = [ makeWrapper qmake4Hook ];
+  enableParallelBuilding = true;
+
+  # Lots of nice hard-coded paths...
+  postPatch = ''
+    substituteInPlace unetbootin.cpp \
+      --replace /bin/df             ${coreutils}/bin/df \
+      --replace /sbin/blkid         ${utillinux}/sbin/blkid \
+      --replace /sbin/fdisk         ${utillinux}/sbin/fdisk \
+      --replace /sbin/sfdisk        ${utillinux}/sbin/sfdisk \
+      --replace /usr/bin/syslinux   ${syslinux}/bin/syslinux \
+      --replace /usr/bin/extlinux   ${syslinux}/sbin/extlinux \
+      --replace /usr/share/syslinux ${syslinux}/share/syslinux
+
+    substituteInPlace main.cpp \
+      --replace /usr/share/unetbootin $out/share/unetbootin
+
+    substituteInPlace unetbootin.desktop \
+      --replace /usr/bin $out/bin
+  '';
+
+  preConfigure = ''
+    lupdate unetbootin.pro
+    lrelease unetbootin.pro
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 -t $out/bin                unetbootin
+    install -Dm644 -t $out/share/unetbootin   unetbootin_*.qm
+    install -Dm644 -t $out/share/applications unetbootin.desktop
+
+    wrapProgram $out/bin/unetbootin \
+      --prefix PATH : ${stdenv.lib.makeBinPath [ mtools p7zip which ]} \
+      --set QT_X11_NO_MITSHM 1
+
+    runHook postInstall
+  '';
+
+  meta = with stdenv.lib; {
+    homepage    = http://unetbootin.sourceforge.net/;
+    description = "A tool to create bootable live USB drives from ISO images";
+    license     = licenses.gpl2Plus;
+    platforms   = platforms.linux;
+    maintainers = with maintainers; [ ebzzry ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/vobcopy/default.nix b/nixpkgs/pkgs/tools/cd-dvd/vobcopy/default.nix
new file mode 100644
index 000000000000..48a58c0c7d11
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/vobcopy/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl, libdvdread, libdvdcss }:
+
+stdenv.mkDerivation rec {
+  name = "vobcopy-1.2.0";
+
+  src = fetchurl {
+    url = "http://www.vobcopy.org/download/${name}.tar.bz2";
+    sha256 = "01l1yihbd73srzghzzx5dgfg3yfb5kml5dix52mq0snhjp8h89c9";
+  };
+
+  buildInputs = [libdvdread libdvdcss];
+  makeFlags   = [ "DESTDIR=$(out)" "PREFIX=/" ];
+
+  meta = {
+    description = "Copies DVD .vob files to harddisk, decrypting them on the way";
+    homepage = http://vobcopy.org/projects/c/c.shtml;
+    license = stdenv.lib.licenses.gpl2;
+
+    maintainers = [ stdenv.lib.maintainers.bluescreen303 ];
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/vobsub2srt/default.nix b/nixpkgs/pkgs/tools/cd-dvd/vobsub2srt/default.nix
new file mode 100644
index 000000000000..fe7a1a044149
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/vobsub2srt/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchgit, cmake, libtiff, pkgconfig, tesseract }:
+
+let rev = "a6abbd61127a6392d420bbbebdf7612608c943c2";
+    shortRev = builtins.substring 0 7 rev;
+in
+stdenv.mkDerivation {
+  name = "vobsub2srt-git-20140817-${shortRev}";
+
+  src = fetchgit {
+    inherit rev;
+    url = https://github.com/ruediger/VobSub2SRT.git;
+    sha256 = "1rpanrv8bgdh95v2320qbd44xskncvq6y84cbbfc86gw0qxpd9cb";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ cmake libtiff ];
+  propagatedBuildInputs = [ tesseract ];
+
+  meta = {
+    homepage = https://github.com/ruediger/VobSub2SRT;
+    description = "Converts VobSub subtitles into SRT subtitles";
+    license = stdenv.lib.licenses.gpl3Plus;
+    platforms = stdenv.lib.platforms.unix;
+    maintainers = [ stdenv.lib.maintainers.ttuegel ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/cd-dvd/xorriso/default.nix b/nixpkgs/pkgs/tools/cd-dvd/xorriso/default.nix
new file mode 100644
index 000000000000..901b0c329c5e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/cd-dvd/xorriso/default.nix
@@ -0,0 +1,37 @@
+{ fetchurl, stdenv, libcdio, zlib, bzip2, readline, acl, attr, libiconv }:
+
+stdenv.mkDerivation rec {
+  name = "xorriso-${version}";
+  version = "1.5.2";
+
+  src = fetchurl {
+    url = "mirror://gnu/xorriso/${name}.tar.gz";
+    sha256 = "1rqpzj95f70jfwpn4lamasfgqpizjsipz12aprdhri777b4zas9v";
+  };
+
+  doCheck = true;
+
+  buildInputs = [ libcdio zlib bzip2 readline libiconv ]
+    ++ stdenv.lib.optionals stdenv.isLinux [ acl attr ];
+
+  meta = with stdenv.lib; {
+    description = "ISO 9660 Rock Ridge file system manipulator";
+
+    longDescription =
+      '' GNU xorriso copies file objects from POSIX compliant filesystems
+         into Rock Ridge enhanced ISO 9660 filesystems and allows
+         session-wise manipulation of such filesystems.  It can load the
+         management information of existing ISO images and it writes the
+         session results to optical media or to filesystem objects.  Vice
+         versa xorriso is able to copy file objects out of ISO 9660
+         filesystems.
+      '';
+
+    license = licenses.gpl3Plus;
+
+    homepage = https://www.gnu.org/software/xorriso/;
+
+    maintainers = [ maintainers.vrthra ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/advancecomp/default.nix b/nixpkgs/pkgs/tools/compression/advancecomp/default.nix
new file mode 100644
index 000000000000..46c8f4338c69
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/advancecomp/default.nix
@@ -0,0 +1,39 @@
+{ stdenv
+, fetchFromGitHub
+, fetchpatch
+, autoreconfHook
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "advancecomp";
+  version = "2.1";
+
+  src = fetchFromGitHub {
+    owner = "amadvance";
+    repo = "advancecomp";
+    rev = "v${version}";
+    sha256 = "1pd6czamamrd0ppk5a3a65hcgdlqwja98aandhqiajhnibwldv8x";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ zlib ];
+
+  patches = [
+    (fetchpatch {
+      name = "CVE-2019-9210.patch";
+      url = "https://github.com/amadvance/advancecomp/commit/fcf71a89265c78fc26243574dda3a872574a5c02.patch";
+      sha256 = "0cdv9g87c1y8zwhqkd9ba2zjw4slcvg7yzcqv43idvnwb5fl29n7";
+      excludes = [ "doc/history.d" ];
+    })
+  ];
+
+  meta = with stdenv.lib; {
+    description = ''A set of tools to optimize deflate-compressed files'';
+    license = licenses.gpl3 ;
+    maintainers = [ maintainers.raskin ];
+    platforms = platforms.linux ++ platforms.darwin;
+    homepage = https://github.com/amadvance/advancecomp;
+
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/brotli/default.nix b/nixpkgs/pkgs/tools/compression/brotli/default.nix
new file mode 100644
index 000000000000..229c6c8b8e4e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/brotli/default.nix
@@ -0,0 +1,66 @@
+{ stdenv, fetchFromGitHub, cmake, fetchpatch, staticOnly ? false }:
+
+# ?TODO: there's also python lib in there
+
+stdenv.mkDerivation rec {
+  pname = "brotli";
+  version = "1.0.7";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "brotli";
+    rev = "v" + version;
+    sha256 = "1811b55wdfg4kbsjcgh1kc938g118jpvif97ilgrmbls25dfpvvw";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  patches = stdenv.lib.optional staticOnly (fetchpatch {
+    url = "https://github.com/google/brotli/pull/655/commits/7289e5a378ba13801996a84d89d8fe95c3fc4c11.patch";
+    sha256 = "1bghbdvj24jrvb0sqfdif9vwg7wx6pn8dvl6flkrcjkhpj0gi0jg";
+  });
+
+  cmakeFlags = []
+    ++ stdenv.lib.optional staticOnly "-DBUILD_SHARED_LIBS=OFF";
+
+  outputs = [ "out" "dev" "lib" ];
+
+  doCheck = true;
+
+  checkTarget = "test";
+
+  # This breaks on Darwin because our cmake hook tries to make a build folder
+  # and the wonderful bazel BUILD file is already there (yay case-insensitivity?)
+  prePatch = "rm BUILD";
+
+  # Don't bother with "man" output for now,
+  # it currently only makes the manpages hard to use.
+  postInstall = ''
+    mkdir -p $out/share/man/man{1,3}
+    cp ../docs/*.1 $out/share/man/man1/
+    cp ../docs/*.3 $out/share/man/man3/
+  '';
+
+  meta = with stdenv.lib; {
+    inherit (src.meta) homepage;
+
+    description = "A generic-purpose lossless compression algorithm and tool";
+
+    longDescription =
+      ''  Brotli is a generic-purpose lossless compression algorithm that
+          compresses data using a combination of a modern variant of the LZ77
+          algorithm, Huffman coding and 2nd order context modeling, with a
+          compression ratio comparable to the best currently available
+          general-purpose compression methods. It is similar in speed with
+          deflate but offers more dense compression.
+
+          The specification of the Brotli Compressed Data Format is defined
+          in the following internet draft:
+          http://www.ietf.org/id/draft-alakuijala-brotli
+      '';
+
+    license = licenses.mit;
+    maintainers = [ maintainers.vcunat ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/bsc/default.nix b/nixpkgs/pkgs/tools/compression/bsc/default.nix
new file mode 100644
index 000000000000..c1ddb242dad0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/bsc/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, openmp ? null }:
+
+stdenv.mkDerivation rec {
+  pname = "bsc";
+  version = "3.1.0";
+
+  src = fetchurl {
+    url = "https://github.com/IlyaGrebnov/libbsc/archive/${version}.tar.gz";
+    sha256 = "01yhizaf6qjv1plyrx0fcib264maa5qwvgfvvid9rzlzj9fxjib6";
+  };
+
+  enableParallelBuilding = true;
+
+  buildInputs = stdenv.lib.optional stdenv.isDarwin openmp;
+
+  prePatch = ''
+    substituteInPlace makefile \
+        --replace 'g++' '$(CXX)'
+  '';
+
+  preInstall = ''
+    makeFlagsArray+=("PREFIX=$out")
+  '';
+
+  meta = with stdenv.lib; {
+    description = "High performance block-sorting data compression library";
+    homepage = http://libbsc.com/;
+    # Later commits changed the licence to Apache2 (no release yet, though)
+    license = with licenses; [ lgpl3Plus ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/bsdiff/default.nix b/nixpkgs/pkgs/tools/compression/bsdiff/default.nix
new file mode 100644
index 000000000000..a5b527d70b7f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/bsdiff/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchurl, bzip2 }:
+
+stdenv.mkDerivation rec {
+  pname = "bsdiff";
+  version = "4.3";
+
+  src = fetchurl {
+    url    = "https://www.daemonology.net/bsdiff/${pname}-${version}.tar.gz";
+    sha256 = "0j2zm3z271x5aw63mwhr3vymzn45p2vvrlrpm9cz2nywna41b0hq";
+  };
+
+  buildInputs = [ bzip2 ];
+  patches = [ ./include-systypes.patch ];
+
+  buildPhase = ''
+    $CC -O3 -lbz2 bspatch.c -o bspatch
+    $CC -O3 -lbz2 bsdiff.c  -o bsdiff
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mkdir -p $out/share/man/man1
+
+    cp bsdiff    $out/bin
+    cp bspatch   $out/bin
+    cp bsdiff.1  $out/share/man/man1
+    cp bspatch.1 $out/share/man/man1
+  '';
+
+  meta = {
+    description = "An efficient binary diff/patch tool";
+    homepage    = "http://www.daemonology.net/bsdiff";
+    license     = stdenv.lib.licenses.bsd2;
+    platforms   = stdenv.lib.platforms.unix;
+    maintainers = [ stdenv.lib.maintainers.thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/bsdiff/include-systypes.patch b/nixpkgs/pkgs/tools/compression/bsdiff/include-systypes.patch
new file mode 100644
index 000000000000..d070a8bb0f85
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/bsdiff/include-systypes.patch
@@ -0,0 +1,12 @@
+diff --git a/bspatch.c b/bspatch.c
+index 643c60b..543379c 100644
+--- a/bspatch.c
++++ b/bspatch.c
+@@ -28,6 +28,7 @@
+ __FBSDID("$FreeBSD: src/usr.bin/bsdiff/bspatch/bspatch.c,v 1.1 2005/08/06 01:59:06 cperciva Exp $");
+ #endif
+ 
++#include <sys/types.h>
+ #include <bzlib.h>
+ #include <stdlib.h>
+ #include <stdio.h>
diff --git a/nixpkgs/pkgs/tools/compression/bzip2/CVE-2016-3189.patch b/nixpkgs/pkgs/tools/compression/bzip2/CVE-2016-3189.patch
new file mode 100644
index 000000000000..eff324b32503
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/bzip2/CVE-2016-3189.patch
@@ -0,0 +1,12 @@
+diff --git a/bzip2recover.c b/bzip2recover.c
+index f9de049..252c1b7 100644
+--- a/bzip2recover.c
++++ b/bzip2recover.c
+@@ -457,6 +457,7 @@ Int32 main ( Int32 argc, Char** argv )
+             bsPutUChar ( bsWr, 0x50 ); bsPutUChar ( bsWr, 0x90 );
+             bsPutUInt32 ( bsWr, blockCRC );
+             bsClose ( bsWr );
++            outFile = NULL;
+          }
+          if (wrBlock >= rbCtr) break;
+          wrBlock++;
diff --git a/nixpkgs/pkgs/tools/compression/bzip2/cve-2019-12900.patch b/nixpkgs/pkgs/tools/compression/bzip2/cve-2019-12900.patch
new file mode 100644
index 000000000000..bf3d13a7a691
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/bzip2/cve-2019-12900.patch
@@ -0,0 +1,13 @@
+https://gitlab.com/federicomenaquintero/bzip2/commit/74de1e2e6ffc9d
+diff --git a/decompress.c b/decompress.c
+--- a/decompress.c
++++ b/decompress.c
+@@ -287,7 +287,7 @@
+       GET_BITS(BZ_X_SELECTOR_1, nGroups, 3);
+       if (nGroups < 2 || nGroups > 6) RETURN(BZ_DATA_ERROR);
+       GET_BITS(BZ_X_SELECTOR_2, nSelectors, 15);
+-      if (nSelectors < 1) RETURN(BZ_DATA_ERROR);
++      if (nSelectors < 1 || nSelectors > BZ_MAX_SELECTORS) RETURN(BZ_DATA_ERROR);
+       for (i = 0; i < nSelectors; i++) {
+          j = 0;
+          while (True) {
diff --git a/nixpkgs/pkgs/tools/compression/bzip2/default.nix b/nixpkgs/pkgs/tools/compression/bzip2/default.nix
new file mode 100644
index 000000000000..a440c08bd1bb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/bzip2/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, fetchurl
+, linkStatic ? (stdenv.hostPlatform.system == "i686-cygwin")
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bzip2";
+  version = "1.0.6.0.1";
+
+  /* We use versions patched to use autotools style properly,
+      saving lots of trouble. */
+  src = fetchurl {
+    urls = map
+      (prefix: prefix + "/people/sbrabec/bzip2/tarballs/${pname}-${version}.tar.gz")
+      [
+        "http://ftp.uni-kl.de/pub/linux/suse"
+        "ftp://ftp.hs.uni-hamburg.de/pub/mirrors/suse"
+        "ftp://ftp.mplayerhq.hu/pub/linux/suse"
+        "http://ftp.suse.com/pub" # the original patched version but slow
+      ];
+    sha256 = "0b5b5p8c7bslc6fslcr1nj9136412v3qcvbg6yxi9argq9g72v8c";
+  };
+
+  patches = [
+    ./CVE-2016-3189.patch
+    ./cve-2019-12900.patch
+  ];
+
+  postPatch = ''
+    sed -i -e '/<sys\\stat\.h>/s|\\|/|' bzip2.c
+  '';
+
+  outputs = [ "bin" "dev" "out" "man" ];
+
+  configureFlags =
+    stdenv.lib.optionals linkStatic [ "--enable-static" "--disable-shared" ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "High-quality data compression program";
+    license = licenses.bsdOriginal;
+    platforms = platforms.all;
+    maintainers = [];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/dejsonlz4/default.nix b/nixpkgs/pkgs/tools/compression/dejsonlz4/default.nix
new file mode 100644
index 000000000000..53b968c5134b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/dejsonlz4/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub }:
+stdenv.mkDerivation rec {
+    pname = "dejsonlz4";
+    version = "1.1";
+    src = fetchFromGitHub {
+      owner = "avih";
+      repo = pname;
+      rev = "v${version}";
+      sha256 = "0ggs69qamaama5mid07mhp95m1x42wljdb953lrwfr7p8p6f8czh";
+    };
+
+    buildPhase = ''
+      gcc -Wall -o dejsonlz4 src/dejsonlz4.c src/lz4.c
+    '';
+
+    installPhase = ''
+      mkdir -p $out/bin/
+      cp dejsonlz4 $out/bin/
+    '';
+
+    meta = with stdenv.lib; {
+      description = "Decompress Mozilla Firefox bookmarks backup files";
+      homepage = https://github.com/avih/dejsonlz4;
+      license = licenses.bsd2;
+      maintainers = with maintainers; [ mt-caret ];
+      platforms = platforms.linux;
+    };
+  }
diff --git a/nixpkgs/pkgs/tools/compression/dtrx/default.nix b/nixpkgs/pkgs/tools/compression/dtrx/default.nix
new file mode 100644
index 000000000000..19bc2fdc1769
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/dtrx/default.nix
@@ -0,0 +1,34 @@
+{stdenv, lib, fetchurl, pythonPackages
+, gnutar, unzip, lhasa, rpm, binutils, cpio, gzip, p7zip, cabextract, unrar, unshield
+, bzip2, xz, lzip
+# unzip is handled by p7zip
+, unzipSupport ? false
+, unrarSupport ? false }:
+
+let
+  archivers = lib.makeBinPath ([ gnutar lhasa rpm binutils cpio gzip p7zip cabextract unshield ]
+  ++ lib.optional (unzipSupport) unzip
+  ++ lib.optional (unrarSupport) unrar
+  ++ [ bzip2 xz lzip ]);
+
+in pythonPackages.buildPythonApplication rec {
+  pname = "dtrx";
+  version = "7.1";
+
+  src = fetchurl {
+    url = "https://brettcsmith.org/2007/dtrx/dtrx-${version}.tar.gz";
+    sha256 = "15yf4n27zbhvv0byfv3i89wl5zn6jc2wbc69lk5a3m6rx54gx6hw";
+  };
+
+  postInstall = ''
+    wrapProgram "$out/bin/dtrx" --prefix PATH : "${archivers}"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Do The Right Extraction: A tool for taking the hassle out of extracting archives";
+    homepage = https://brettcsmith.org/2007/dtrx/;
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.spwhitt ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/gzip/default.nix b/nixpkgs/pkgs/tools/compression/gzip/default.nix
new file mode 100644
index 000000000000..e6409f051227
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/gzip/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchurl, xz }:
+
+stdenv.mkDerivation rec {
+  pname = "gzip";
+  version = "1.10";
+
+  src = fetchurl {
+    url = "mirror://gnu/gzip/${pname}-${version}.tar.xz";
+    sha256 = "1h6p374d3j8d4cdfydzls021xa2yby8myc0h8d6m8bc7k6ncq9c4";
+  };
+
+  outputs = [ "out" "man" "info" ];
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [ xz.bin ];
+
+  makeFlags = [ "SHELL=/bin/sh" "GREP=grep" ];
+
+  meta = {
+    homepage = https://www.gnu.org/software/gzip/;
+    description = "GNU zip compression program";
+
+    longDescription =
+      ''gzip (GNU zip) is a popular data compression program written by
+        Jean-loup Gailly for the GNU project.  Mark Adler wrote the
+        decompression part.
+
+        We developed this program as a replacement for compress because of
+        the Unisys and IBM patents covering the LZW algorithm used by
+        compress.  These patents made it impossible for us to use compress,
+        and we needed a replacement.  The superior compression ratio of gzip
+        is just a bonus.
+      '';
+
+    platforms = stdenv.lib.platforms.all;
+
+    license = stdenv.lib.licenses.gpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/gzrt/default.nix b/nixpkgs/pkgs/tools/compression/gzrt/default.nix
new file mode 100644
index 000000000000..6ce50bb3d996
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/gzrt/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, zlib }:
+
+stdenv.mkDerivation rec {
+  name = "gzrt-0.8";
+
+  src = fetchurl {
+    url = "https://www.urbanophile.com/arenn/coding/gzrt/${name}.tar.gz";
+    sha256 = "1vhzazj47xfpbfhzkwalz27cc0n5gazddmj3kynhk0yxv99xrdxh";
+  };
+
+  buildInputs = [ zlib ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp gzrecover $out/bin
+  '';
+
+  meta = {
+    homepage = https://www.urbanophile.com/arenn/hacking/gzrt/;
+    description = "The gzip Recovery Toolkit";
+    license = stdenv.lib.licenses.gpl2Plus;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/kzipmix/default.nix b/nixpkgs/pkgs/tools/compression/kzipmix/default.nix
new file mode 100644
index 000000000000..6fcff7b29280
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/kzipmix/default.nix
@@ -0,0 +1,25 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation {
+  name = "kzipmix-20091108";
+
+  src = fetchurl {
+    url = http://static.jonof.id.au/dl/kenutils/kzipmix-20091108-linux.tar.gz;
+    sha256 = "19gyn8pblffdz1bf3xkbpzx8a8wn3xb0v411pqzmz5g5l6pm5gph";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp kzip zipmix $out/bin
+    
+    patchelf --set-interpreter ${stdenv.glibc.out}/lib/ld-linux.so.2 $out/bin/kzip
+    patchelf --set-interpreter ${stdenv.glibc.out}/lib/ld-linux.so.2 $out/bin/zipmix
+  '';
+
+  meta = {
+    description = "A tool that aggressively optimizes the sizes of Zip archives";
+    license = stdenv.lib.licenses.unfree;
+    homepage = http://advsys.net/ken/utils.htm;
+    maintainers = [ stdenv.lib.maintainers.sander ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/lbzip2/default.nix b/nixpkgs/pkgs/tools/compression/lbzip2/default.nix
new file mode 100644
index 000000000000..7e9cc055abf5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/lbzip2/default.nix
@@ -0,0 +1,18 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "lbzip2-2.5";
+
+  src = fetchurl {
+    url = "http://archive.lbzip2.org/${name}.tar.gz";
+    sha256 = "1sahaqc5bw4i0iyri05syfza4ncf5cml89an033fspn97klmxis6";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/kjn/lbzip2"; # Formerly http://lbzip2.org/
+    description = "Parallel bzip2 compression utility";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ abbradar ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/lhasa/default.nix b/nixpkgs/pkgs/tools/compression/lhasa/default.nix
new file mode 100644
index 000000000000..64a9ad7f6562
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/lhasa/default.nix
@@ -0,0 +1,21 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation {
+  name = "lhasa-0.3.1";
+  src = fetchurl {
+    url = https://soulsphere.org/projects/lhasa/lhasa-0.3.1.tar.gz;
+    sha256 = "092zi9av18ma20c6h9448k0bapvx2plnp292741dvfd9hmgqxc1z";
+  };
+  meta = {
+    description = "Free Software replacement for the Unix LHA tool";
+    longDescription = ''
+      Lhasa is a Free Software replacement for the Unix LHA tool, for
+      decompressing .lzh (LHA / LHarc) and .lzs (LArc) archives. The backend for
+      the tool is a library, so that it can be reused for other purposes.
+    '';
+    license = stdenv.lib.licenses.isc;
+    homepage = http://fragglet.github.io/lhasa;
+    maintainers = with stdenv.lib; [ maintainers.sander ];
+    platforms = with stdenv.lib.platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/lrzip/default.nix b/nixpkgs/pkgs/tools/compression/lrzip/default.nix
new file mode 100644
index 000000000000..2c6765b2e837
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/lrzip/default.nix
@@ -0,0 +1,21 @@
+{stdenv, fetchurl, zlib, lzo, bzip2, nasm, perl}:
+
+stdenv.mkDerivation rec {
+  version = "0.631";
+  pname = "lrzip";
+
+  src = fetchurl {
+    url = "http://ck.kolivas.org/apps/lrzip/${pname}-${version}.tar.bz2";
+    sha256 = "0mb449vmmwpkalq732jdyginvql57nxyd31sszb108yps1lf448d";
+  };
+
+  buildInputs = [ zlib lzo bzip2 nasm perl ];
+
+  meta = {
+    homepage = http://ck.kolivas.org/apps/lrzip/;
+    description = "The CK LRZIP compression program (LZMA + RZIP)";
+    license = stdenv.lib.licenses.gpl2Plus;
+    inherit version;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/lrzip/default.upstream b/nixpkgs/pkgs/tools/compression/lrzip/default.upstream
new file mode 100644
index 000000000000..1b8345986374
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/lrzip/default.upstream
@@ -0,0 +1,8 @@
+url http://ck.kolivas.org/apps/lrzip/
+version_link '[.]tar[.]bz2$'
+
+do_overwrite () {
+  ensure_hash
+  set_var_value version "$CURRENT_VERSION"
+  set_var_value sha256 "$CURRENT_HASH"
+}
diff --git a/nixpkgs/pkgs/tools/compression/lz4/default.nix b/nixpkgs/pkgs/tools/compression/lz4/default.nix
new file mode 100644
index 000000000000..3ce0eac3fc5c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/lz4/default.nix
@@ -0,0 +1,72 @@
+{ stdenv, fetchFromGitHub, valgrind, fetchpatch
+, enableStatic ? false, enableShared ? true
+}:
+
+stdenv.mkDerivation rec {
+  pname = "lz4";
+  version = "1.9.1";
+
+  src = fetchFromGitHub {
+    sha256 = "1l1caxrik1hqs40vj3bpv1pikw6b74cfazv5c0v6g48zpcbmshl0";
+    rev = "v${version}";
+    repo = pname;
+    owner = pname;
+  };
+
+  patches = [
+    # Fix detection of Darwin
+    (fetchpatch {
+      url = "https://github.com/lz4/lz4/commit/024216ef7394b6411eeaa5b52d0cec9953a44249.patch";
+      sha256 = "0j0j2pr6pkplxf083hlwl5q4cfp86q3wd8mc64bcfcr7ysc5pzl3";
+    })
+  ];
+
+  # TODO(@Ericson2314): Separate binaries and libraries
+  outputs = [ "out" "dev" ];
+
+  buildInputs = stdenv.lib.optional doCheck valgrind;
+
+  enableParallelBuilding = true;
+
+  makeFlags = [
+    "PREFIX=$(out)"
+    "INCLUDEDIR=$(dev)/include"
+    # TODO do this instead
+    #"BUILD_STATIC=${if enableStatic then "yes" else "no"}"
+    #"BUILD_SHARED=${if enableShared then "yes" else "no"}"
+    #"WINDRES:=${stdenv.cc.bintools.targetPrefix}windres"
+  ]
+    # TODO delete and do above
+    ++ stdenv.lib.optional (enableStatic) "BUILD_STATIC=yes"
+    ++ stdenv.lib.optional (!enableShared) "BUILD_SHARED=no"
+    ++ stdenv.lib.optional stdenv.hostPlatform.isMinGW "WINDRES:=${stdenv.cc.bintools.targetPrefix}windres"
+    # TODO make full dictionary
+    ++ stdenv.lib.optional stdenv.hostPlatform.isMinGW "TARGET_OS=MINGW"
+    ;
+
+  doCheck = false; # tests take a very long time
+  checkTarget = "test";
+
+  # TODO(@Ericson2314): Make resusable setup hook for this issue on Windows.
+  postInstall =
+    stdenv.lib.optionalString stdenv.hostPlatform.isWindows ''
+      mv $out/bin/*.dll $out/lib
+      ln -s $out/lib/*.dll
+    ''
+    # TODO remove
+    + stdenv.lib.optionalString (!enableStatic) "rm $out/lib/*.a";
+
+  meta = with stdenv.lib; {
+    description = "Extremely fast compression algorithm";
+    longDescription = ''
+      Very fast lossless compression algorithm, providing compression speed
+      at 400 MB/s per core, with near-linear scalability for multi-threaded
+      applications. It also features an extremely fast decoder, with speed in
+      multiple GB/s per core, typically reaching RAM speed limits on
+      multi-core systems.
+    '';
+    homepage = https://lz4.github.io/lz4/;
+    license = with licenses; [ bsd2 gpl2Plus ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/lzbench/default.nix b/nixpkgs/pkgs/tools/compression/lzbench/default.nix
new file mode 100644
index 000000000000..df7700d41cb8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/lzbench/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  name = "lzbench-20170208";
+
+  src = fetchFromGitHub {
+    owner = "inikep";
+    repo = "lzbench";
+    rev = "d5e9b58";
+    sha256 = "16xj5fldwl639f0ys5rx54csbfvf35ja34bdl5m068hdn6dr47r5";
+  };
+
+  enableParallelBuilding = true;
+
+  buildInputs = stdenv.lib.optionals stdenv.isLinux [ stdenv.glibc.static ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp lzbench $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    inherit (src.meta) homepage;
+    description = "In-memory benchmark of open-source LZ77/LZSS/LZMA compressors";
+    license = licenses.free;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/lzfse/default.nix b/nixpkgs/pkgs/tools/compression/lzfse/default.nix
new file mode 100644
index 000000000000..0c54c3b452b6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/lzfse/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+  pname = "lzfse";
+  version = "2017-03-08";
+
+  src = fetchFromGitHub {
+    owner = "lzfse";
+    repo = "lzfse";
+    rev = "88e2d27";
+    sha256 = "1mfh6y6vpvxsdwmqmfbkqkwvxc0pz2dqqc72c6fk9sbsrxxaghd5";
+  };
+
+  makeFlags = [ "INSTALL_PREFIX=$(out)" ];
+
+  enableParallelBuilding = false; #bug
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/lzfse/lzfse;
+    description = "a reference C implementation of the LZFSE compressor";
+    longDescription = ''
+      This is a reference C implementation of the LZFSE compressor introduced in the Compression library with OS X 10.11 and iOS 9.
+      LZFSE is a Lempel-Ziv style data compression algorithm using Finite State Entropy coding.
+      It targets similar compression rates at higher compression and decompression speed compared to deflate using zlib.
+    '';
+    platforms = platforms.linux;
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/lzham/default.nix b/nixpkgs/pkgs/tools/compression/lzham/default.nix
new file mode 100644
index 000000000000..0aa30ceb6632
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/lzham/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub, cmake } :
+
+stdenv.mkDerivation {
+  name = "lzham-1.0";
+
+  src = fetchFromGitHub {
+    owner = "richgel999";
+    repo = "lzham_codec";
+    rev = "v1_0_release";
+    sha256 = "14c1zvzmp1ylp4pgayfdfk1kqjb23xj4f7ll1ra7b18wjxc9ja1v";
+  };
+
+  buildInputs = [ cmake ];
+
+  enableParallelBuilding = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ../bin_linux/lzhamtest $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Lossless data compression codec with LZMA-like ratios but 1.5x-8x faster decompression speed";
+    homepage = https://github.com/richgel999/lzham_codec;
+    license = with licenses; [ mit ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/lzip/default.nix b/nixpkgs/pkgs/tools/compression/lzip/default.nix
new file mode 100644
index 000000000000..4ec40deab6c3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/lzip/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, texinfo }:
+
+stdenv.mkDerivation rec {
+  pname = "lzip";
+  version = "1.21";
+
+  nativeBuildInputs = [ texinfo ];
+
+  src = fetchurl {
+    url = "mirror://savannah/lzip/${pname}-${version}.tar.gz";
+    sha256 = "12qdcw5k1cx77brv9yxi1h4dzwibhfmdpigrj43nfk8nscwm12z4";
+  };
+
+  configureFlags = [
+    "CPPFLAGS=-DNDEBUG"
+    "CFLAGS=-O3"
+    "CXXFLAGS=-O3"
+  ] ++ stdenv.lib.optional (stdenv.hostPlatform != stdenv.buildPlatform)
+    "CXX=${stdenv.cc.targetPrefix}c++";
+
+  setupHook = ./lzip-setup-hook.sh;
+
+  doCheck = true;
+  enableParallelBuilding = true;
+
+  meta = {
+    homepage = https://www.nongnu.org/lzip/lzip.html;
+    description = "A lossless data compressor based on the LZMA algorithm";
+    license = stdenv.lib.licenses.gpl3Plus;
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/lzip/lzip-setup-hook.sh b/nixpkgs/pkgs/tools/compression/lzip/lzip-setup-hook.sh
new file mode 100644
index 000000000000..092ad7737dd1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/lzip/lzip-setup-hook.sh
@@ -0,0 +1,5 @@
+lzipUnpackCmdHook() {
+    [[ "$1" = *.tar.lz ]] && tar --lzip -xf "$1"
+}
+
+unpackCmdHooks+=(lzipUnpackCmdHook)
diff --git a/nixpkgs/pkgs/tools/compression/lzop/default.nix b/nixpkgs/pkgs/tools/compression/lzop/default.nix
new file mode 100644
index 000000000000..00eb5f265aaf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/lzop/default.nix
@@ -0,0 +1,18 @@
+{stdenv, fetchurl, lzo}:
+
+stdenv.mkDerivation rec {
+  name = "lzop-1.04";
+  src = fetchurl {
+    url = "https://www.lzop.org/download/${name}.tar.gz";
+    sha256 = "0h9gb8q7y54m9mvy3jvsmxf21yx8fc3ylzh418hgbbv0i8mbcwky";
+  };
+
+  buildInputs = [ lzo ];
+
+  meta = with stdenv.lib; {
+    homepage = http://www.lzop.org;
+    description = "Fast file compressor";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/mozlz4a/default.nix b/nixpkgs/pkgs/tools/compression/mozlz4a/default.nix
new file mode 100644
index 000000000000..28c7c1d69f70
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/mozlz4a/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, python3, runtimeShell }:
+
+stdenv.mkDerivation rec {
+  pname = "mozlz4a";
+  version = "2018-08-23";
+  # or fetchFromGitHub(owner,repo,rev) or fetchgit(rev)
+  src = fetchurl {
+    url = "https://gist.githubusercontent.com/kaefer3000/73febe1eec898cd50ce4de1af79a332a/raw/a266410033455d6b4af515d7a9d34f5afd35beec/mozlz4a.py";
+    sha256 = "1d1ai062kdms34bya9dlykkx011rj8d8nh5l7d76xj8k9kv4ssq6";
+  };
+
+  dontUnpack = true;
+
+  installPhase = ''
+    mkdir -p "$out/bin" "$out/${python3.sitePackages}/"
+    cp "${src}" "$out/${python3.sitePackages}/mozlz4a.py"
+
+    echo "#!${runtimeShell}" >> "$out/bin/mozlz4a"
+    echo "export PYTHONPATH='$PYTHONPATH'" >> "$out/bin/mozlz4a"
+    echo "'${python3}/bin/python' '$out/${python3.sitePackages}/mozlz4a.py' \"\$@\"" >> "$out/bin/mozlz4a"
+    chmod a+x "$out/bin/mozlz4a"
+  '';
+
+  buildInputs = [ python3 python3.pkgs.python-lz4 ];
+
+  meta = {
+    inherit version;
+    description = "A script to handle Mozilla's mozlz4 files";
+    license = stdenv.lib.licenses.bsd2;
+    maintainers = [stdenv.lib.maintainers.raskin];
+    platforms = stdenv.lib.platforms.linux;
+    homepage = https://gist.githubusercontent.com/Tblue/62ff47bef7f894e92ed5;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/ncompress/builder.sh b/nixpkgs/pkgs/tools/compression/ncompress/builder.sh
new file mode 100644
index 000000000000..7a3f34aae469
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/ncompress/builder.sh
@@ -0,0 +1,15 @@
+source $stdenv/setup
+installFlags="PREFIX=$out"
+
+preBuild() {
+    cp Makefile.def Makefile
+    sed -i GNUmakefile -e 's/compress %/%/g'
+}
+
+postInstall() {
+    rm $out/bin/uncompress* $out/bin/zcat*
+    ln -s compress $out/bin/uncompress
+    ln -s compress $out/bin/zcat
+}
+
+genericBuild
diff --git a/nixpkgs/pkgs/tools/compression/ncompress/default.nix b/nixpkgs/pkgs/tools/compression/ncompress/default.nix
new file mode 100644
index 000000000000..8e55d24fc985
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/ncompress/default.nix
@@ -0,0 +1,21 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  name = "ncompress-4.2.4.5";
+
+  builder = ./builder.sh;
+
+  patches = [ ./makefile.patch ];
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/ncompress/${name}.tar.gz";
+    sha256 = "0fwhfijnzggqpbmln82zq7zp6sra7p9arfakswicwi7qsp6vnxgm";
+  };
+
+  meta = {
+    homepage = http://ncompress.sourceforge.net/;
+    license = stdenv.lib.licenses.publicDomain;
+    description = "A fast, simple LZW file compressor";
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/ncompress/makefile.patch b/nixpkgs/pkgs/tools/compression/ncompress/makefile.patch
new file mode 100644
index 000000000000..49aa4e65c768
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/ncompress/makefile.patch
@@ -0,0 +1,31 @@
+diff -Naur ncompress-4.2.4.2.orig/Makefile.def ncompress-4.2.4.2/Makefile.def
+--- ncompress-4.2.4.2.orig/Makefile.def	2007-09-06 22:28:42.000000000 -0500
++++ ncompress-4.2.4.2/Makefile.def	2009-08-18 12:30:53.000000000 -0500
+@@ -3,14 +3,16 @@
+ # C complier
+ #CC=cc
+ 
++PREFIX=/usr/local
++
+ # Install prefix
+ DESTDIR=
+ 
+ # Install directory for binarys
+-BINDIR=/usr/local/bin
++BINDIR=$(PREFIX)/bin
+ 
+ # Install directory for manual
+-MANDIR=/usr/local/man/man1
++MANDIR=$(PREFIX)/man/man1
+ 
+ # compiler options:
+ # options is a collection of:
+@@ -31,7 +33,7 @@
+ #	-DDEF_ERRNO=1				Define error (not defined in errno.h).
+ #	-DMAXSEG_64K=1 -BITS=16		Support segment processsor like 80286.
+ #
+-options= $(CFLAGS) $(CPPFLAGS) -DDIRENT=1 -DUSERMEM=800000 -DREGISTERS=3
++options= $(CFLAGS) $(CPPFLAGS) -DDIRENT=1 -DUSERMEM=800000 -DREGISTERS=3 -DNOFUNCDEF=1
+ 
+ # libary options
+ LBOPT= $(LDFLAGS)
diff --git a/nixpkgs/pkgs/tools/compression/pbzip2/default.nix b/nixpkgs/pkgs/tools/compression/pbzip2/default.nix
new file mode 100644
index 000000000000..3314544084f8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/pbzip2/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, bzip2 }:
+
+let major = "1.1";
+    version = "${major}.13";
+in
+stdenv.mkDerivation rec {
+  pname = "pbzip2";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://launchpad.net/pbzip2/${major}/${version}/+download/${pname}-${version}.tar.gz";
+    sha256 = "1rnvgcdixjzbrmcr1nv9b6ccrjfrhryaj7jwz28yxxv6lam3xlcg";
+  };
+
+  buildInputs = [ bzip2 ];
+
+  preBuild = "substituteInPlace Makefile --replace g++ c++";
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  NIX_CFLAGS_COMPILE = stdenv.lib.optionalString stdenv.cc.isClang "-Wno-error=reserved-user-defined-literal";
+
+  meta = with stdenv.lib; {
+    homepage = http://compression.ca/pbzip2/;
+    description = "A parallel implementation of bzip2 for multi-core machines";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [viric];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/pbzx/default.nix b/nixpkgs/pkgs/tools/compression/pbzx/default.nix
new file mode 100644
index 000000000000..13e5882788d1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/pbzx/default.nix
@@ -0,0 +1,26 @@
+{stdenv, lib, fetchFromGitHub, lzma, xar}:
+
+stdenv.mkDerivation rec {
+  pname = "pbzx";
+  version = "1.0.2";
+  src = fetchFromGitHub {
+    owner = "NiklasRosenstein";
+    repo = "pbzx";
+    rev = "v${version}";
+    sha256 = "0bwd7wmnhpz1n5p39mh6asfyccj4cm06hwigslcwbb3pdwmvxc90";
+  };
+  buildInputs = [ lzma xar ];
+  buildPhase = ''
+    cc pbzx.c -llzma -lxar -o pbzx
+  '';
+  installPhase = ''
+    mkdir -p $out/bin
+    cp pbzx $out/bin
+  '';
+  meta = with lib; {
+    description = "Stream parser of Apple's pbzx compression format.";
+    platforms = platforms.unix;
+    license = licenses.gpl3;
+    maintainers = [ maintainers.matthewbauer ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/pigz/default.nix b/nixpkgs/pkgs/tools/compression/pigz/default.nix
new file mode 100644
index 000000000000..1fabedaf62d8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/pigz/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchurl, zlib, utillinux }:
+
+let name = "pigz";
+    version = "2.4";
+in
+stdenv.mkDerivation {
+  name = name + "-" + version;
+
+  src = fetchurl {
+    url = "https://www.zlib.net/${name}/${name}-${version}.tar.gz";
+    sha256 = "0wsgw5vwl23jrnpsvd8v3xcp5k4waw5mk0164fynjhkv58i1dy54";
+  };
+
+  enableParallelBuilding = true;
+
+  buildInputs = [zlib] ++ stdenv.lib.optional stdenv.isLinux utillinux;
+
+  makeFlags = [ "CC=${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc" ];
+
+  doCheck = stdenv.isLinux;
+  checkTarget = "tests";
+  installPhase =
+  ''
+      install -Dm755 pigz "$out/bin/pigz"
+      ln -s pigz "$out/bin/unpigz"
+      install -Dm755 pigz.1 "$out/share/man/man1/pigz.1"
+      ln -s pigz.1 "$out/share/man/man1/unpigz.1"
+      install -Dm755 pigz.pdf "$out/share/doc/pigz/pigz.pdf"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://www.zlib.net/pigz/;
+    description = "A parallel implementation of gzip for multi-core machines";
+    license = licenses.zlib;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/pixz/default.nix b/nixpkgs/pkgs/tools/compression/pixz/default.nix
new file mode 100644
index 000000000000..7eca80f8400c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/pixz/default.nix
@@ -0,0 +1,37 @@
+{
+  stdenv, fetchFromGitHub, autoconf, automake, libtool, pkgconfig
+  , asciidoc, libxslt, libxml2, docbook_xml_dtd_45, docbook_xsl
+  , libarchive, lzma
+}:
+stdenv.mkDerivation rec {
+  baseName = "pixz";
+  version = "1.0.6";
+  name = "${baseName}-${version}";
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [
+    autoconf automake libtool asciidoc libxslt libxml2
+    docbook_xml_dtd_45 docbook_xsl
+    libarchive lzma
+  ];
+  preBuild = ''
+    echo "XML_CATALOG_FILES='$XML_CATALOG_FILES'"
+  '';
+  src = fetchFromGitHub {
+    owner = "vasi";
+    repo = baseName;
+    rev = "v${version}";
+    sha256 = "0q61wqg2yxrgd4nc7256mf7izp92is29ll3rax1cxr6fj9jrd8b7";
+  };
+  preConfigure = ''
+    ./autogen.sh
+  '';
+
+  meta = {
+    inherit version;
+    description = ''A parallel compressor/decompressor for xz format'';
+    license = stdenv.lib.licenses.bsd2;
+    maintainers = [stdenv.lib.maintainers.raskin];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/pxz/_SC_ARG_MAX.patch b/nixpkgs/pkgs/tools/compression/pxz/_SC_ARG_MAX.patch
new file mode 100644
index 000000000000..fac8f1fc147c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/pxz/_SC_ARG_MAX.patch
@@ -0,0 +1,36 @@
+From b8f9827fc4de9296c7a6f5e6fdac46e070cd6cb4 Mon Sep 17 00:00:00 2001
+From: Igor Pashev <pashev.igor@gmail.com>
+Date: Sat, 1 Nov 2014 18:10:05 +0300
+Subject: [PATCH] Fixed crash on Linux when stack size is unlimited
+
+---
+ pxz.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/pxz.c b/pxz.c
+index 9cb843e..52713e2 100644
+--- a/pxz.c
++++ b/pxz.c
+@@ -65,7 +65,7 @@ FILE **ftemp;
+ char str[0x100];
+ char buf[BUFFSIZE];
+ char *xzcmd;
+-size_t xzcmd_max;
++const size_t xzcmd_max = 10240;
+ 
+ unsigned opt_complevel = 6, opt_stdout, opt_keep, opt_threads, opt_verbose;
+ unsigned opt_force, opt_stdout;
+@@ -243,9 +243,12 @@ int main( int argc, char **argv ) {
+ 	lzma_filter filters[LZMA_FILTERS_MAX + 1];
+ 	lzma_options_lzma lzma_options;
+ 	
+-	xzcmd_max = sysconf(_SC_ARG_MAX);
+ 	page_size = sysconf(_SC_PAGE_SIZE);
+ 	xzcmd = malloc(xzcmd_max);
++	if (!xzcmd) {
++		fprintf(stderr, "Failed to allocate %lu bytes for xz command.\n", xzcmd_max);
++		return -1;
++	}
+ 	snprintf(xzcmd, xzcmd_max, XZ_BINARY);
+ 	
+ 	parse_args(argc, argv);
diff --git a/nixpkgs/pkgs/tools/compression/pxz/default.nix b/nixpkgs/pkgs/tools/compression/pxz/default.nix
new file mode 100644
index 000000000000..f9ca3aa18575
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/pxz/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, fetchgit, xz, lzma }:
+
+let name = "pxz";
+    version = "4.999.9beta+git";
+in
+stdenv.mkDerivation {
+  name = name + "-" + version;
+
+  src = fetchgit {
+    url = "https://github.com/jnovy/pxz.git";
+    rev = "ae808463c2950edfdedb8fb49f95006db0a18667";
+    sha256 = "0na2kw8cf0qd8l1aywlv9m3xrxnqlcwxfdwp3f7x9vxwqx3k32kc";
+  };
+
+  buildInputs = [ lzma ];
+
+  patches = [ ./_SC_ARG_MAX.patch ];
+
+  buildPhase = ''
+    gcc -o pxz pxz.c -llzma \
+        -fopenmp -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -O2 \
+        -DPXZ_BUILD_DATE=\"nixpkgs\" \
+        -DXZ_BINARY=\"${xz.bin}/bin/xz\" \
+        -DPXZ_VERSION=\"${version}\"
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man/man1
+    cp pxz $out/bin
+    cp pxz.1 $out/share/man/man1
+  '';
+
+  meta = {
+    homepage = https://jnovy.fedorapeople.org/pxz/;
+    license = stdenv.lib.licenses.gpl2Plus;
+    maintainers = with stdenv.lib.maintainers; [pashev];
+    description = ''Parallel XZ is a compression utility that takes advantage of
+      running LZMA compression of different parts of an input file on multiple
+      cores and processors simultaneously. Its primary goal is to utilize all
+      resources to speed up compression time with minimal possible influence
+      on compression ratio'';
+    platforms = with stdenv.lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/rzip/default.nix b/nixpkgs/pkgs/tools/compression/rzip/default.nix
new file mode 100644
index 000000000000..8773121e6461
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/rzip/default.nix
@@ -0,0 +1,25 @@
+{stdenv, fetchurl, fetchpatch, bzip2}:
+
+stdenv.mkDerivation {
+  name = "rzip-2.1";
+  src = fetchurl {
+    url = mirror://samba/rzip/rzip-2.1.tar.gz;
+    sha256 = "4bb96f4d58ccf16749ed3f836957ce97dbcff3e3ee5fd50266229a48f89815b7";
+  };
+  buildInputs = [ bzip2 ];
+
+  patches = [
+    (fetchpatch {
+      name = "CVE-2017-8364-fill-buffer.patch";
+      url = https://sources.debian.net/data/main/r/rzip/2.1-4.1/debian/patches/80-CVE-2017-8364-fill-buffer.patch;
+      sha256 = "0jcjlx9ksdvxvjyxmyzscx9ar9992iy5icw0sc3n0p09qi4d6x1r";
+    })
+  ];
+
+  meta = {
+    homepage = https://rzip.samba.org/;
+    description = "Compression program";
+    license = stdenv.lib.licenses.gpl2Plus;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/upx/default.nix b/nixpkgs/pkgs/tools/compression/upx/default.nix
new file mode 100644
index 000000000000..7f9c7cb77736
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/upx/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, ucl, zlib, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "upx";
+  version = "3.95";
+  src = fetchurl {
+    url = "https://github.com/upx/upx/releases/download/v${version}/${pname}-${version}-src.tar.xz";
+    sha256 = "14jmgy7hvx4zqra20w8260wrcxmjf2h6ba2yrw7pcp18im35a3rv";
+  };
+
+  CXXFLAGS = "-Wno-unused-command-line-argument";
+
+  buildInputs = [ ucl zlib perl ];
+
+  preConfigure = ''
+    export UPX_UCLDIR=${ucl}
+  '';
+
+  makeFlags = [ "-C" "src" "CHECK_WHITESPACE=true" ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp src/upx.out $out/bin/upx
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://upx.github.io/;
+    description = "The Ultimate Packer for eXecutables";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/xar/default.nix b/nixpkgs/pkgs/tools/compression/xar/default.nix
new file mode 100644
index 000000000000..691f3a8ee5d8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/xar/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, fetchurl, libxml2, lzma, openssl, zlib, bzip2, fts, autoconf }:
+
+stdenv.mkDerivation rec {
+  version = "1.6.1";
+  pname = "xar";
+
+  src = fetchurl {
+    url    = "https://github.com/downloads/mackyle/xar/${pname}-${version}.tar.gz";
+    sha256 = "0ghmsbs6xwg1092v7pjcibmk5wkyifwxw6ygp08gfz25d2chhipf";
+  };
+
+  buildInputs = [ libxml2 lzma openssl zlib bzip2 fts autoconf ];
+
+  prePatch = ''
+    substituteInPlace configure.ac \
+      --replace 'OpenSSL_add_all_ciphers' 'OPENSSL_init_crypto' \
+      --replace 'openssl/evp.h' 'openssl/crypto.h'
+  '';
+
+  preConfigure = "./autogen.sh";
+
+  meta = {
+    homepage    = https://mackyle.github.io/xar/;
+    description = "Extensible Archiver";
+
+    longDescription =
+      '' The XAR project aims to provide an easily extensible archive format.
+         Important design decisions include an easily extensible XML table of
+         contents for random access to archived files, storing the toc at the
+         beginning of the archive to allow for efficient handling of streamed
+         archives, the ability to handle files of arbitrarily large sizes, the
+         ability to choose independent encodings for individual files in the
+         archive, the ability to store checksums for individual files in both
+         compressed and uncompressed form, and the ability to query the table
+         of content's rich meta-data.
+      '';
+
+    license     = stdenv.lib.licenses.bsd3;
+    maintainers = with stdenv.lib.maintainers; [ copumpkin ];
+    platforms   = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/xdelta/default.nix b/nixpkgs/pkgs/tools/compression/xdelta/default.nix
new file mode 100644
index 000000000000..034cdb7d94ec
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/xdelta/default.nix
@@ -0,0 +1,61 @@
+{ stdenv, fetchFromGitHub, autoreconfHook
+, lzmaSupport ? true, xz ? null
+}:
+
+assert lzmaSupport -> xz != null;
+
+let
+  mkWith = flag: name: if flag
+    then "--with-${name}"
+    else "--without-${name}";
+in stdenv.mkDerivation rec {
+  pname = "xdelta";
+  version = "3.0.11";
+
+  src = fetchFromGitHub {
+    sha256 = "1c7xym7xr26phyf4wb9hh2w88ybzbzh2w3h1kyqq3da0ndidmf2r";
+    rev = "v${version}";
+    repo = "xdelta-devel";
+    owner = "jmacd";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = []
+    ++ stdenv.lib.optionals lzmaSupport [ xz ];
+
+  postPatch = ''
+    cd xdelta3
+  '';
+
+  configureFlags = [
+    (mkWith lzmaSupport "liblzma")
+  ];
+
+  enableParallelBuilding = true;
+
+  doCheck = true;
+  checkPhase = ''
+    mkdir $PWD/tmp
+    for i in testing/file.h xdelta3-test.h; do
+      substituteInPlace $i --replace /tmp $PWD/tmp
+    done
+    ./xdelta3regtest
+  '';
+
+  installPhase = ''
+    install -D -m755 xdelta3 $out/bin/xdelta3
+    install -D -m644 xdelta3.1 $out/share/man/man1/xdelta3.1
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Binary differential compression in VCDIFF (RFC 3284) format";
+    longDescription = ''
+      xdelta is a command line program for delta encoding, which generates two
+      file differences. This is similar to diff and patch, but it is targeted
+      for binary files and does not generate human readable output.
+    '';
+    homepage = http://xdelta.org/;
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/xdelta/unstable.nix b/nixpkgs/pkgs/tools/compression/xdelta/unstable.nix
new file mode 100644
index 000000000000..bf2601dd3738
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/xdelta/unstable.nix
@@ -0,0 +1,65 @@
+{ stdenv, fetchFromGitHub, autoreconfHook
+, lzmaSupport ? true, xz ? null
+}:
+
+assert lzmaSupport -> xz != null;
+
+let
+  mkWith = flag: name: if flag
+    then "--with-${name}"
+    else "--without-${name}";
+in stdenv.mkDerivation rec {
+  pname = "xdelta";
+  version = "3.1.0";
+
+  src = fetchFromGitHub {
+    sha256 = "09mmsalc7dwlvgrda56s2k927rpl3a5dzfa88aslkqcjnr790wjy";
+    rev = "v${version}";
+    repo = "xdelta-devel";
+    owner = "jmacd";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = []
+    ++ stdenv.lib.optionals lzmaSupport [ xz ];
+
+  postPatch = ''
+    cd xdelta3
+
+    substituteInPlace Makefile.am --replace \
+      "common_CFLAGS =" \
+      "common_CFLAGS = -DXD3_USE_LARGESIZET=1"
+  '';
+
+  configureFlags = [
+    (mkWith lzmaSupport "liblzma")
+  ];
+
+  enableParallelBuilding = true;
+
+  doCheck = true;
+  checkPhase = ''
+    mkdir $PWD/tmp
+    for i in testing/file.h xdelta3-test.h; do
+      substituteInPlace $i --replace /tmp $PWD/tmp
+    done
+    ./xdelta3regtest
+  '';
+
+  installPhase = ''
+    install -D -m755 xdelta3 $out/bin/xdelta3
+    install -D -m644 xdelta3.1 $out/share/man/man1/xdelta3.1
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Binary differential compression in VCDIFF (RFC 3284) format";
+    longDescription = ''
+      xdelta is a command line program for delta encoding, which generates two
+      file differences. This is similar to diff and patch, but it is targeted
+      for binary files and does not generate human readable output.
+    '';
+    homepage = http://xdelta.org/;
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/xz/default.nix b/nixpkgs/pkgs/tools/compression/xz/default.nix
new file mode 100644
index 000000000000..0ff349e96e80
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/xz/default.nix
@@ -0,0 +1,49 @@
+{ stdenv, fetchurl, enableStatic ? false }:
+
+stdenv.mkDerivation rec {
+  name = "xz-5.2.4";
+
+  src = fetchurl {
+    url = "https://tukaani.org/xz/${name}.tar.bz2";
+    sha256 = "1gxpayfagb4v7xfhs2w6h7k56c6hwwav1rk48bj8hggljlmgs4rk";
+  };
+
+  outputs = [ "bin" "dev" "out" "man" "doc" ];
+
+  configureFlags = stdenv.lib.optional enableStatic "--disable-shared";
+
+  doCheck = true;
+
+  preCheck = ''
+    # Tests have a /bin/sh dependency...
+    patchShebangs tests
+  '';
+
+  # In stdenv-linux, prevent a dependency on bootstrap-tools.
+  preConfigure = "CONFIG_SHELL=/bin/sh";
+
+  postInstall = "rm -rf $out/share/doc";
+
+  meta = with stdenv.lib; {
+    homepage = https://tukaani.org/xz/;
+    description = "XZ, general-purpose data compression software, successor of LZMA";
+
+    longDescription =
+      '' XZ Utils is free general-purpose data compression software with high
+         compression ratio.  XZ Utils were written for POSIX-like systems,
+         but also work on some not-so-POSIX systems.  XZ Utils are the
+         successor to LZMA Utils.
+
+         The core of the XZ Utils compression code is based on LZMA SDK, but
+         it has been modified quite a lot to be suitable for XZ Utils.  The
+         primary compression algorithm is currently LZMA2, which is used
+         inside the .xz container format.  With typical files, XZ Utils
+         create 30 % smaller output than gzip and 15 % smaller output than
+         bzip2.
+      '';
+
+    license = with licenses; [ gpl2Plus lgpl21Plus ];
+    maintainers = with maintainers; [ sander ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/zdelta/builder.sh b/nixpkgs/pkgs/tools/compression/zdelta/builder.sh
new file mode 100644
index 000000000000..03db413181d7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/zdelta/builder.sh
@@ -0,0 +1,8 @@
+source $stdenv/setup
+
+installPhase() {
+    mkdir -p $out/bin
+    cp -p zdc zdu $out/bin
+}
+
+genericBuild
diff --git a/nixpkgs/pkgs/tools/compression/zdelta/default.nix b/nixpkgs/pkgs/tools/compression/zdelta/default.nix
new file mode 100644
index 000000000000..20748c31ab81
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/zdelta/default.nix
@@ -0,0 +1,16 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  name = "zdelta-2.1";
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = "${meta.homepage}/downloads/${name}.tar.gz";
+    sha256 = "0k6y0r9kv5qiglnr2j4a0yvfynjkvm0pyv8ly28j0pr3w6rbxrh3";
+  };
+
+  meta = with stdenv.lib; {
+	  homepage = http://cis.poly.edu/zdelta;
+    platforms = platforms.linux;
+    license = licenses.zlib;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/zopfli/default.nix b/nixpkgs/pkgs/tools/compression/zopfli/default.nix
new file mode 100644
index 000000000000..586c47de582c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/zopfli/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchFromGitHub, fetchpatch, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "zopfli";
+  version = "1.0.3";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "zopfli";
+    rev = "${pname}-${version}";
+    name = "${pname}-${version}-src";
+    sha256 = "0dr8n4j5nj2h9n208jns56wglw59gg4qm3s7c6y3hs75d0nnkhm4";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  cmakeFlags = [ "-DBUILD_SHARED_LIBS=ON" "-DCMAKE_BUILD_WITH_INSTALL_RPATH=ON" ];
+
+  postInstall = ''
+    install -Dm444 -t $out/share/doc/zopfli ../README*
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    inherit (src.meta) homepage;
+    description = "Very good, but slow, deflate or zlib compression";
+    longDescription = ''
+      Zopfli Compression Algorithm is a compression library programmed
+      in C to perform very good, but slow, deflate or zlib compression.
+
+      This library can only compress, not decompress. Existing zlib or
+      deflate libraries can decompress the data.
+    '';
+    platforms = platforms.unix;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ bobvanderlinden ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/zstd/default.nix b/nixpkgs/pkgs/tools/compression/zstd/default.nix
new file mode 100644
index 000000000000..82a6a3a8a53c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/zstd/default.nix
@@ -0,0 +1,75 @@
+{ stdenv, fetchFromGitHub, fetchpatch, cmake, gnugrep
+, fixDarwinDylibNames
+, file
+, legacySupport ? false
+, enableShared ? true }:
+
+stdenv.mkDerivation rec {
+  pname = "zstd";
+  version = "1.4.4";
+
+  src = fetchFromGitHub {
+    sha256 = "0zn7r8d4m8w2lblnjalqpz18na0spzkdiw3fwq2fzb7drhb32v54";
+    rev = "v${version}";
+    repo = "zstd";
+    owner = "facebook";
+  };
+
+  nativeBuildInputs = [ cmake ]
+   ++ stdenv.lib.optional stdenv.isDarwin fixDarwinDylibNames;
+
+  patches = [
+    # From https://github.com/facebook/zstd/pull/1883
+    (fetchpatch {
+      url = "https://github.com/facebook/zstd/commit/106278e7e5fafaea3b7deb4147bdc8071562d2f0.diff";
+      sha256 = "13z7id1qbc05cv1rmak7c8xrchp7jh1i623bq5pwcihg57wzcyr8";
+    })
+  ] # This I didn't upstream because if you use posix threads with MinGW it will
+    # work find, and I'm not sure how to write the condition.
+    ++ stdenv.lib.optional stdenv.hostPlatform.isWindows ./mcfgthreads-no-pthread.patch;
+
+  cmakeFlags = [
+    "-DZSTD_BUILD_SHARED:BOOL=${if enableShared then "ON" else "OFF"}"
+    "-DZSTD_LEGACY_SUPPORT:BOOL=${if legacySupport then "ON" else "OFF"}"
+    "-DZSTD_BUILD_TESTS:BOOL=ON"
+  ];
+  cmakeDir = "../build/cmake";
+  dontUseCmakeBuildDir = true;
+  preConfigure = ''
+    mkdir -p build_ && cd $_
+  '';
+
+  checkInputs = [ file ];
+  doCheck = true;
+  preCheck = ''
+    substituteInPlace ../tests/playTests.sh \
+      --replace 'MD5SUM="md5 -r"' 'MD5SUM="md5sum"'
+  '';
+
+  preInstall = stdenv.lib.optionalString enableShared ''
+    substituteInPlace ../programs/zstdgrep \
+      --replace ":-grep" ":-${gnugrep}/bin/grep" \
+      --replace ":-zstdcat" ":-$out/bin/zstdcat"
+
+    substituteInPlace ../programs/zstdless \
+      --replace "zstdcat" "$out/bin/zstdcat"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Zstandard real-time compression algorithm";
+    longDescription = ''
+      Zstd, short for Zstandard, is a fast lossless compression algorithm,
+      targeting real-time compression scenarios at zlib-level compression
+      ratio. Zstd can also offer stronger compression ratio at the cost of
+      compression speed. Speed/ratio trade-off is configurable by small
+      increment, to fit different situations. Note however that decompression
+      speed is preserved and remain roughly the same at all settings, a
+      property shared by most LZ compression algorithms, such as zlib.
+    '';
+    homepage = https://facebook.github.io/zstd/;
+    license = with licenses; [ bsd3 ]; # Or, at your opinion, GPL-2.0-only.
+
+    platforms = platforms.all;
+    maintainers = with maintainers; [ orivej ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/compression/zstd/mcfgthreads-no-pthread.patch b/nixpkgs/pkgs/tools/compression/zstd/mcfgthreads-no-pthread.patch
new file mode 100644
index 000000000000..69921c0c7bad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/zstd/mcfgthreads-no-pthread.patch
@@ -0,0 +1,13 @@
+diff --git a/programs/Makefile b/programs/Makefile
+index 7882fe8c..1e8237bb 100644
+--- a/programs/Makefile
++++ b/programs/Makefile
+@@ -107,7 +107,7 @@ HAVE_THREAD := $(shell [ "$(HAVE_PTHREAD)" -eq "1" -o -n "$(filter Windows%,$(OS
+ ifeq ($(HAVE_THREAD), 1)
+ THREAD_MSG := ==> building with threading support
+ THREAD_CPP := -DZSTD_MULTITHREAD
+-THREAD_LD := -pthread
++THREAD_LD :=
+ else
+ THREAD_MSG := $(NO_THREAD_MSG)
+ endif
diff --git a/nixpkgs/pkgs/tools/compression/zsync/default.nix b/nixpkgs/pkgs/tools/compression/zsync/default.nix
new file mode 100644
index 000000000000..830e5f10ef6d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/compression/zsync/default.nix
@@ -0,0 +1,20 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  name = "zsync-0.6.2";
+
+  src = fetchurl {
+    url = "http://zsync.moria.org.uk/download/${name}.tar.bz2";
+    sha256 = "1wjslvfy76szf0mgg2i9y9q30858xyjn6v2acc24zal76d1m778b";
+  };
+
+  makeFlags = [ "AR=${stdenv.cc.bintools.targetPrefix}ar" ];
+
+  meta = {
+    homepage = http://zsync.moria.org.uk/;
+    description = "File distribution system using the rsync algorithm";
+    license = stdenv.lib.licenses.free;
+    maintainers = with stdenv.lib.maintainers; [viric];
+    platforms = with stdenv.lib.platforms; all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/9pfs/default.nix b/nixpkgs/pkgs/tools/filesystems/9pfs/default.nix
new file mode 100644
index 000000000000..b9c5c55a8e47
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/9pfs/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, fuse }:
+
+stdenv.mkDerivation {
+  name = "9pfs-20150918";
+
+  src = fetchFromGitHub {
+    owner = "mischief";
+    repo = "9pfs";
+    rev = "7f4ca4cd750d650c1215b92ac3cc2a28041960e4";
+    sha256 = "007s2idsn6bspmfxv1qabj39ggkgvn6gwdbhczwn04lb4c6gh3xc";
+  };
+
+  preConfigure =
+    ''
+      substituteInPlace Makefile --replace '-g bin' ""
+      installFlagsArray+=(BIN=$out/bin MAN=$out/share/man/man1)
+      mkdir -p $out/bin $out/share/man/man1
+    '';
+
+  buildInputs = [ fuse ];
+
+  enableParallelBuilding = true;
+
+  meta = {
+    homepage = https://github.com/mischief/9pfs;
+    description = "FUSE-based client of the 9P network filesystem protocol";
+    maintainers = [ lib.maintainers.eelco ];
+    platforms = lib.platforms.linux;
+    license = with lib.licenses; [ lpl-102 bsd2 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/aefs/default.nix b/nixpkgs/pkgs/tools/filesystems/aefs/default.nix
new file mode 100644
index 000000000000..1be33e1299d2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/aefs/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl, fuse }:
+
+stdenv.mkDerivation rec {
+  name = "aefs-0.4pre259-8843b7c";
+
+  src = fetchurl {
+    url = "http://tarballs.nixos.org/${name}.tar.bz2";
+    sha256 = "167hp58hmgdavg2mqn5dx1xgq24v08n8d6psf33jhbdabzx6a6zq";
+  };
+
+  buildInputs = [ fuse ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/edolstra/aefs;
+    description = "A cryptographic filesystem implemented in userspace using FUSE";
+    platforms = platforms.linux;
+    maintainers = [ maintainers.eelco ];
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/afpfs-ng/default.nix b/nixpkgs/pkgs/tools/filesystems/afpfs-ng/default.nix
new file mode 100644
index 000000000000..7f8a8c4f931f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/afpfs-ng/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchFromGitHub, fuse, readline, libgcrypt, gmp }:
+
+stdenv.mkDerivation {
+  pname = "afpfs-ng";
+  version = "0.8.2";
+
+  src = fetchFromGitHub {
+    owner  = "simonvetter";
+    repo   = "afpfs-ng";
+    rev    = "f6e24eb73c9283732c3b5d9cb101a1e2e4fade3e";
+    sha256 = "125jx1rsqkiifcffyjb05b2s36rllckdgjaf1bay15k9gzhwwldz";
+  };
+
+  buildInputs = [ fuse readline libgcrypt gmp ];
+
+  meta = with stdenv.lib; {
+    homepage    = https://github.com/simonvetter/afpfs-ng;
+    description = "A client implementation of the Apple Filing Protocol";
+    license     = licenses.gpl2;
+    maintainers = with maintainers; [ rnhmjoj ];
+    platforms   = platforms.linux;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/android-file-transfer/default.nix b/nixpkgs/pkgs/tools/filesystems/android-file-transfer/default.nix
new file mode 100644
index 000000000000..001e644b7e7d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/android-file-transfer/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, mkDerivation, fetchFromGitHub, cmake, fuse, readline, pkgconfig, qtbase }:
+
+mkDerivation rec {
+  pname = "android-file-transfer";
+  version = "3.9";
+
+  src = fetchFromGitHub {
+    owner = "whoozle";
+    repo = "android-file-transfer-linux";
+    rev = "v${version}";
+    sha256 = "1pwayyd5xrmngfrmv2vwr8ns2wi199xkxf7dks8fl9zmlpizg3c3";
+  };
+
+  nativeBuildInputs = [ cmake readline pkgconfig ];
+  buildInputs = [ fuse qtbase ];
+
+  meta = with stdenv.lib; {
+    description = "Reliable MTP client with minimalistic UI";
+    homepage = https://whoozle.github.io/android-file-transfer-linux/;
+    license = licenses.lgpl21;
+    maintainers = [ maintainers.xaverdh ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/apfs-fuse/default.nix b/nixpkgs/pkgs/tools/filesystems/apfs-fuse/default.nix
new file mode 100644
index 000000000000..2c7b1c271569
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/apfs-fuse/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitHub, fuse3, bzip2, zlib, attr, cmake }:
+
+stdenv.mkDerivation {
+  pname = "apfs-fuse-unstable";
+  version = "2019-07-23";
+
+  src = fetchFromGitHub {
+    owner  = "sgan81";
+    repo   = "apfs-fuse";
+    rev    = "309ecb030f38edac4c10fa741a004c5eb7a23e15";
+    sha256 = "0wq6rlqi00m5dp5gbzy65i1plm40j6nsm7938zvfgx5laal4wzr2";
+    fetchSubmodules = true;
+  };
+
+  buildInputs = [ fuse3 bzip2 zlib attr ];
+  nativeBuildInputs = [ cmake ];
+
+  meta = with stdenv.lib; {
+    homepage    = "https://github.com/sgan81/apfs-fuse";
+    description = "FUSE driver for APFS (Apple File System)";
+    license     = licenses.gpl2;
+    maintainers = with maintainers; [ ealasu ];
+    platforms   = platforms.linux;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/archivemount/default.nix b/nixpkgs/pkgs/tools/filesystems/archivemount/default.nix
new file mode 100644
index 000000000000..18bde25267d3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/archivemount/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl, pkgconfig, fuse, libarchive }:
+
+let
+  name = "archivemount-0.8.12";
+in
+stdenv.mkDerivation {
+  inherit name;
+
+  src = fetchurl {
+    url = "https://www.cybernoia.de/software/archivemount/${name}.tar.gz";
+    sha256 = "12fb8fcmd1zwvfgzx4pay47md5cr2kgxcgq82cm6skmq75alfzi4";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ fuse libarchive ];
+
+  meta = {
+    description = "Gateway between FUSE and libarchive: allows mounting of cpio, .tar.gz, .tar.bz2 archives";
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/avfs/default.nix b/nixpkgs/pkgs/tools/filesystems/avfs/default.nix
new file mode 100644
index 000000000000..b66d67fbc9f2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/avfs/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, pkgconfig, fuse, xz }:
+
+stdenv.mkDerivation rec {
+  pname = "avfs";
+  version = "1.1.1";
+  src = fetchurl {
+    url = "mirror://sourceforge/avf/${version}/${pname}-${version}.tar.bz2";
+    sha256 = "0fxzigpyi08ipqz30ihjcpqmmx8g7r1kqdqq1bnnznvnhrzyygn8";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+
+  buildInputs = [ fuse xz ];
+
+  configureFlags = [
+    "--enable-library"
+    "--enable-fuse"
+  ];
+
+  meta = {
+    homepage = http://avf.sourceforge.net/;
+    description = "Virtual filesystem that allows browsing of compressed files";
+    platforms = stdenv.lib.platforms.linux;
+    license = stdenv.lib.licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/bashmount/default.nix b/nixpkgs/pkgs/tools/filesystems/bashmount/default.nix
new file mode 100644
index 000000000000..d449bf1266a0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/bashmount/default.nix
@@ -0,0 +1,37 @@
+{stdenv, fetchFromGitHub}:
+
+stdenv.mkDerivation rec {
+  pname = "bashmount";
+  version = "3.2.0";
+
+  src = fetchFromGitHub {
+    owner = "jamielinux";
+    repo = "bashmount";
+    rev = version;
+    sha256 = "0rki4s0jgz6vkywc6hcx9qa551r5bnjs7sw0rdh93k64l32kh644";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp bashmount $out/bin
+
+    mkdir -p $out/etc
+    cp bashmount.conf $out/etc
+
+    mkdir -p $out/share/man/man1
+    gzip -c -9 bashmount.1 > bashmount.1.gz
+    cp bashmount.1.gz $out/share/man/man1
+
+    mkdir -p $out/share/doc/bashmount
+    cp COPYING $out/share/doc/bashmount
+    cp NEWS    $out/share/doc/bashmount
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/jamielinux/bashmount;
+    description = "A menu-driven bash script for the management of removable media with udisks";
+    maintainers = [ maintainers.koral ];
+    license = licenses.gpl2;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/bcache-tools/bcache-udev-modern.patch b/nixpkgs/pkgs/tools/filesystems/bcache-tools/bcache-udev-modern.patch
new file mode 100644
index 000000000000..c6cf79785b73
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/bcache-tools/bcache-udev-modern.patch
@@ -0,0 +1,52 @@
+This patch does two things:
+1) Drops probe-bcache, so now new util-linux detecting functionality is used.
+2) Drops bcache-register, using kmod (built in udev) and moving registering device
+   into rule using 'sh'.
+This reduces things that need to be present in initrd, replacing them with already
+existing functionality and reducing overall initrd size.
+
+diff --git a/69-bcache.rules b/69-bcache.rules
+index 5d28e70..6a52893 100644
+--- a/69-bcache.rules
++++ b/69-bcache.rules
+@@ -10,15 +10,11 @@ KERNEL=="fd*|sr*", GOTO="bcache_end"
+ # It recognised bcache (util-linux 2.24+)
+ ENV{ID_FS_TYPE}=="bcache", GOTO="bcache_backing_found"
+ # It recognised something else; bail
+-ENV{ID_FS_TYPE}=="?*", GOTO="bcache_backing_end"
+-
+-# Backing devices: scan, symlink, register
+-IMPORT{program}="probe-bcache -o udev $tempnode"
+-ENV{ID_FS_TYPE}!="bcache", GOTO="bcache_backing_end"
+-ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}"
++GOTO="bcache_backing_end"
+ 
+ LABEL="bcache_backing_found"
+-RUN+="bcache-register $tempnode"
++RUN{builtin}+="kmod load bcache"
++RUN+="/bin/sh -c 'echo $tempnode > /sys/fs/bcache/register_quiet'"
+ LABEL="bcache_backing_end"
+ 
+ # Cached devices: symlink
+diff --git a/Makefile b/Makefile
+index 3f8d87b..15638a7 100644
+--- a/Makefile
++++ b/Makefile
+@@ -9,7 +9,7 @@ all: make-bcache probe-bcache bcache-super-show
+ 
+ install: make-bcache probe-bcache bcache-super-show
+ 	$(INSTALL) -m0755 make-bcache bcache-super-show	$(DESTDIR)${PREFIX}/sbin/
+-	$(INSTALL) -m0755 probe-bcache bcache-register		$(DESTDIR)$(UDEVLIBDIR)/
++#	$(INSTALL) -m0755 probe-bcache bcache-register		$(DESTDIR)$(UDEVLIBDIR)/
+ 	$(INSTALL) -m0644 69-bcache.rules	$(DESTDIR)$(UDEVLIBDIR)/rules.d/
+ 	$(INSTALL) -m0644 -- *.8 $(DESTDIR)${PREFIX}/share/man/man8/
+ 	$(INSTALL) -D -m0755 initramfs/hook	$(DESTDIR)/usr/share/initramfs-tools/hooks/bcache
+diff --git a/bcache-register b/bcache-register
+index 9b592bc..75b4faf 100755
+--- a/bcache-register
++++ b/bcache-register
+@@ -1,4 +1,3 @@
+ #!/bin/sh
+-/sbin/modprobe -qba bcache
+ test -f /sys/fs/bcache/register_quiet && echo "$1" > /sys/fs/bcache/register_quiet
+ 
diff --git a/nixpkgs/pkgs/tools/filesystems/bcache-tools/default.nix b/nixpkgs/pkgs/tools/filesystems/bcache-tools/default.nix
new file mode 100644
index 000000000000..d3e790a3cf13
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/bcache-tools/default.nix
@@ -0,0 +1,57 @@
+{ stdenv, fetchurl, pkgconfig, utillinux, bash }:
+
+stdenv.mkDerivation rec {
+  pname = "bcache-tools";
+  version = "1.0.7";
+
+  src = fetchurl {
+    name = "${pname}-${version}.tar.gz";
+    url = "https://github.com/g2p/bcache-tools/archive/v${version}.tar.gz";
+    sha256 = "1gbsh2qw0a7kgck6w0apydiy37nnz5xvdgipa0yqrfmghl86vmv4";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ utillinux ];
+
+  # * Remove broken install rules (they ignore $PREFIX) for stuff we don't need
+  #   anyway (it's distro specific stuff).
+  # * Fixup absolute path to modprobe.
+  prePatch = ''
+    sed -e "/INSTALL.*initramfs\/hook/d" \
+        -e "/INSTALL.*initcpio\/install/d" \
+        -e "/INSTALL.*dracut\/module-setup.sh/d" \
+        -i Makefile
+  '';
+
+  patches = [
+    ./bcache-udev-modern.patch
+    ./fix-static.patch
+  ];
+
+  preBuild = ''
+    export makeFlags="$makeFlags PREFIX=\"$out\" UDEVLIBDIR=\"$out/lib/udev/\"";
+    sed -e "s|/bin/sh|${bash}/bin/sh|" -i *.rules
+  '';
+
+  preInstall = ''
+    mkdir -p "$out/sbin" "$out/lib/udev/rules.d" "$out/share/man/man8"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "User-space tools required for bcache (Linux block layer cache)";
+    longDescription = ''
+      Bcache is a Linux kernel block layer cache. It allows one or more fast
+      disk drives such as flash-based solid state drives (SSDs) to act as a
+      cache for one or more slower hard disk drives.
+      
+      This package contains the required user-space tools.
+
+      User documentation is in Documentation/bcache.txt in the Linux kernel
+      tree.
+    '';
+    homepage = https://bcache.evilpiepirate.org/;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/bcache-tools/fix-static.patch b/nixpkgs/pkgs/tools/filesystems/bcache-tools/fix-static.patch
new file mode 100644
index 000000000000..e5dd2df5299d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/bcache-tools/fix-static.patch
@@ -0,0 +1,22 @@
+diff --git a/bcache.c b/bcache.c
+index 8f37445..79806d8 100644
+--- a/bcache.c
++++ b/bcache.c
+@@ -26,7 +26,7 @@
+  * x^7 + x^4 + x + 1
+ */
+ 
+-static const uint64_t crc_table[256] = {
++const uint64_t crc_table[256] = {
+ 	0x0000000000000000ULL, 0x42F0E1EBA9EA3693ULL, 0x85E1C3D753D46D26ULL,
+ 	0xC711223CFA3E5BB5ULL, 0x493366450E42ECDFULL, 0x0BC387AEA7A8DA4CULL,
+ 	0xCCD2A5925D9681F9ULL, 0x8E224479F47CB76AULL, 0x9266CC8A1C85D9BEULL,
+@@ -115,7 +115,7 @@ static const uint64_t crc_table[256] = {
+ 	0x9AFCE626CE85B507ULL
+ };
+ 
+-inline uint64_t crc64(const void *_data, size_t len)
++uint64_t crc64(const void *_data, size_t len)
+ {
+ 	uint64_t crc = 0xFFFFFFFFFFFFFFFFULL;
+ 	const unsigned char *data = _data;
diff --git a/nixpkgs/pkgs/tools/filesystems/bcachefs-tools/default.nix b/nixpkgs/pkgs/tools/filesystems/bcachefs-tools/default.nix
new file mode 100644
index 000000000000..144ed0a38459
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/bcachefs-tools/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchgit, pkgconfig, attr, libuuid, libscrypt, libsodium, keyutils
+, liburcu, zlib, libaio, zstd, lz4 }:
+
+stdenv.mkDerivation {
+  pname = "bcachefs-tools";
+  version = "2019-10-12";
+
+  src = fetchgit {
+    url = "https://evilpiepirate.org/git/bcachefs-tools.git";
+    rev = "6e696ea08703eecd0d1c7b8c520b6f62f06f4f26";
+    sha256 = "0m3valm68vc73b4kydlga17fglxa9bldrjaszlladzl5bd0zb967";
+  };
+
+  enableParallelBuilding = true;
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ attr libuuid libscrypt libsodium keyutils liburcu zlib libaio zstd lz4 ];
+  installFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  preInstall = ''
+    substituteInPlace Makefile \
+      --replace "INITRAMFS_DIR=/etc/initramfs-tools" \
+                "INITRAMFS_DIR=${placeholder "out"}/etc/initramfs-tools"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Tool for managing bcachefs filesystems";
+    homepage = https://bcachefs.org/;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ davidak chiiruno ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/bees/bees-service-wrapper b/nixpkgs/pkgs/tools/filesystems/bees/bees-service-wrapper
new file mode 100755
index 000000000000..8ef46afc18f5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/bees/bees-service-wrapper
@@ -0,0 +1,223 @@
+#!@bash@/bin/bash
+PATH=@bash@/bin:@coreutils@/bin:@utillinux@/bin:@btrfsProgs@/bin:$PATH
+beesd_bin=@bees@/lib/bees/bees
+# PLEASE KEEP NIX-ISMS ABOVE THIS LINE TO EASE UPSTREAM MERGE
+#!/usr/bin/env bash
+
+shopt -s extglob
+
+# Upstream wrapper requires UUID to be used for configuration.
+
+# However, when declaratively describing a host, we may not know its UUID, and
+# shouldn't need to persist something that will differ between hosts built from
+# the same configuration template.
+
+# Thus, for using bees from NixOS, we have our own wrapper, which supports not
+# just UUID but any specification permitted by findmnt
+
+[[ $bees_debug ]] && { PS4=':${BASH_SOURCE##*/}:$LINENO+'; set -x; }
+
+usage() {
+  cat >&2 <<EOF
+Usage: ${BASH_SOURCE##*/} run|cleanup config-name|fsSpec [idxSizeMB=...] [verbosity=...] [workDir=...] [-- daemon-options...]
+
+  fsSpec should be in a format recognized by findmnt. Alternately,
+  "config-name" may refer to a file that exists in ${bees_config_dir:-/etc/bees}
+  with a .conf extension; if that file does not specify UUID, findmnt will be
+  used in addition.
+
+  Note that while config files may presently use shell arithmetic, use of this
+  functionality is not encouraged going forward: Setting ''idxSizeMB=4096'' is
+  preferred over ''DB_SIZE=$((1024*1024*1024*4))'' or ''DB_SIZE=$(( AL16M * 256 ))'',
+  although both of these are presently supported.
+
+  If fsSpec contains a /, it assumed to be a mount point to be looked up by
+  findmnt, not a config file name.
+
+  daemon-options are passed directly through to the daemon on startup, as
+  documented at https://github.com/Zygo/bees/blob/master/docs/options.md.
+EOF
+  exit 1
+}
+
+die() { echo "$*" >&2; exit 1; }
+
+allConfigNames=( blockdev fsSpec home idxSize idxSizeMB mntDir runDir status verbosity workDir )
+
+# Alternate names for configuration values; "bees_" will always be prepended
+declare -A altConfigNames=(
+  # from original bees wrapper
+  [BEESHOME]=home
+  [BEESSTATUS]=status
+  [MNT_DIR]=mntDir
+  [UUID]=uuid
+  [WORK_DIR]=runDir
+  [DB_SIZE]=idxSize
+)
+
+# legacy bees config files can be arbitrary shell scripts, so we need to actually evaluate them
+sandboxedConfigFileEval() {
+  bash_exe=$(type -P bash) || exit
+  PATH=/var/empty ENV='' BASH_ENV='' AL128K="$((128*1024))" AL16M="$((16*1024*1024))" "$bash_exe" -r ${bees_debug+-x} \
+    -c 'eval "$(</dev/stdin)" >&2; for var; do [[ ${!var} ]] && printf "%q=%s\\0" "$var" "${!var}"; done' \
+    "${!altConfigNames[@]}" "${allConfigNames[@]}" \
+    <"$1"
+}
+
+readConfigFileIfExists() {
+  local line
+  [[ -s $1 ]] || return 1
+  while IFS= read -r -d '' line; do
+    line=${line%%+([[:space:]])"#"*}
+    [[ $line ]] || continue
+    [[ $line = *=* ]] || {
+      printf 'WARNING: Config file line not recognized: %q\n' "$line" >&2
+      continue
+    }
+    set_option "$line"
+  done < <(sandboxedConfigFileEval "$1")
+}
+
+set_option() {
+  local k v
+  k="${1%%=*}" v="${1#*=}"
+  [[ ${altConfigNames[$k]} ]] && k=${altConfigNames[$k]}
+  printf -v "bees_$k" %s "$v"
+}
+
+uuid_re='^[[:xdigit:]]{8}-[[:xdigit:]]{4}-[[:xdigit:]]{4}-[[:xdigit:]]{4}-[[:xdigit:]]{12}$'
+
+# Shared code for setting configuration used by other operations.
+#
+# Reads from global associative array "opts" containing options passed in as
+# key=value pairs on the command line, looks for config-file overrides, and
+# sets individual global variables.
+_setup() {
+  declare fstype
+  bees_fsSpec=$1; shift
+
+  # Look for file-based configuration, additional to honoring configuration on the command line
+  bees_config_dir="${bees_config_dir:-/etc/bees}"
+  if [[ $bees_fsSpec =~ $uuid_re ]]; then
+    bees_uuid=$bees_fsSpec
+    # If our spec looks like a bare UUID, and no config file exists in the new
+    # format, fall back to legacy config file search mechanism (grep; ewww).
+    if ! readConfigFileIfExists "$bees_config_dir/UUID=$bees_fsSpec.conf"; then
+      # Legacy approach to finding a config file: Grep for a *.conf file
+      # containing the UUID within its text. Permitting spaces around the "="
+      # appears to be a bug, but is retained for compatibility with the
+      # original upstream script.
+      allConfFiles=( "$bees_config_dir"/*.conf )
+      if (( ${#allConfFiles[@]} )); then
+        # in read or readarray with -d '', the NUL terminating the empty string is used as delimiter character.
+        readarray -d '' -t matchingConfFiles < <(grep -E -l -Z "^[^#]*UUID[[:space:]]*=[[:space:]]*" "${allConfFiles[@]}")
+      else
+        matchingConfFiles=( )
+      fi
+      if (( ${#matchingConfFiles[@]} == 1 )); then
+        # Exactly one configuration file exists in our target directory with a reference to the UUID given.
+        bees_config_file=${matchingConfFiles[0]}
+        readConfigFileIfExists "$bees_config_file"
+        echo "NOTE: Please consider renaming $bees_config_file to $bees_config_dir/UUID=$bees_fsSpec" >&2
+        echo "      ...and passing UUID=$bees_fsSpec on startup." >&2
+      elif (( ${#matchingConfFiles[@]} > 1 )); then
+        # The legacy wrapper would silently use the first file and ignore
+        # others, but... no.
+        echo "ERROR: Passed a bare UUID, but multiple configuration files match it:" >&2
+        printf ' - %q\n' "${matchingConfFiles[@]}" >&2
+        die "Unable to continue."
+      fi
+    fi
+  else
+    # For a non-UUID fsSpec that is not a path, look only for a config file
+    # exactly matching its text.
+    #
+    # (Passing a mount point as a fsSpec is only supported with the new
+    # wrapper; all key=value pairs can be passed on the command line in this
+    # mode, so config file support is not needed).
+    [[ $bees_fsSpec = */* ]] || readConfigFileIfExists "$bees_config_dir/$bees_fsSpec.conf"
+  fi
+
+  [[ $bees_uuid ]] || {
+    # if bees_uuid is not in our .conf file, look it up with findmnt
+    read -r bees_uuid fstype < <(findmnt -n -o uuid,fstype "$bees_fsSpec") && [[ $fstype ]] || exit
+    [[ $fstype = btrfs ]] || die "Device type is $fstype, not btrfs"
+  }
+
+  [[ $bees_uuid = */* ]] || readConfigFileIfExists "$bees_config_dir/UUID=$bees_uuid.conf"
+
+  # Honor any values read from config files above; otherwise, set defaults.
+  bees_workDir="${bees_workDir:-.beeshome}"
+  bees_runDir="${bees_runDir:-/run/bees}"
+  bees_mntDir="${bees_mntDir:-$bees_runDir/mnt/$bees_uuid}"
+  bees_home="${bees_home:-$bees_mntDir/$bees_workDir}"
+  bees_status="${bees_status:-${bees_runDir}/$bees_uuid.status}"
+  bees_verbosity="${bees_verbosity:-6}"
+  bees_idxSizeMB="${bees_idxSizeMB:-1024}"
+  bees_idxSize=${bees_idxSize:-"$(( bees_idxSizeMB * 1024 * 1024 ))"}
+  bees_blockdev=${bees_blockdev:-"/dev/disk/by-uuid/$bees_uuid"}
+
+  [[ -b $bees_blockdev ]] || die "Block device $bees_blockdev missing"
+  (( bees_idxSize % (16 * 1024 * 1024) == 0 )) || die "DB size must be divisible by 16MB"
+}
+
+do_run() {
+  local db old_db_size
+
+  _setup "$1"; shift
+  mkdir -p -- "$bees_mntDir" || exit
+
+  # subvol id 5 is reserved for the root subvolume of a btrfs filesystem.
+  mountpoint -q "$bees_mntDir" || mount -osubvolid=5 -- "$bees_blockdev" "$bees_mntDir" || exit
+  if [[ -d $bees_home ]]; then
+    btrfs subvolume show "$bees_home" >/dev/null 2>&1 || die "$bees_home exists but is not a subvolume"
+  else
+    btrfs subvolume create "$bees_home" || exit
+    sync # workaround for Zygo/bees#93
+  fi
+  db=$bees_home/beeshash.dat
+  touch -- "$db"
+
+  old_db_size=$(stat -c %s -- "$db")
+  new_db_size=$bees_idxSize
+
+  if (( old_db_size != new_db_size )); then
+    rm -f -- "$bees_home"/beescrawl."$bees_uuid".dat
+    truncate -s "$new_db_size" -- "$db" || exit
+  fi
+  chmod 700 -- "$bees_home"
+
+  # BEESSTATUS and BEESHOME are the only variables handled by the legacy
+  # wrapper for which getenv() is called in C code.
+  BEESSTATUS=$bees_status BEESHOME=$bees_home exec "${beesd_bin:-/lib/bees/bees}" \
+    --verbose "$bees_verbosity" \
+    "$@" "$bees_mntDir" || exit
+}
+
+do_cleanup() {
+  _setup "$1"; shift
+  mountpoint -q "$bees_mntDir" && umount -l -- "$bees_mntDir" || exit
+}
+
+(( $# >= 2 )) || usage
+declare -f "do_$1" >/dev/null 2>&1 || usage
+mode=$1; shift # must be a do_* function; currently "run" or "cleanup"
+
+declare -a args=( "$1" ); shift  # pass first argument (config-name|fsSpec) through literally
+
+# parse other arguments as key=value pairs, or pass them through literally if they do not match that form.
+# similarly, any option after "--" will be passed through literally.
+while (( $# )); do
+  if [[ $1 = *=* ]]; then
+    set_option "$1"
+  elif [[ $1 = -- ]]; then
+    shift
+    args+=( "$@" )
+    break
+  else
+    args+=( "$1" )
+  fi
+  shift
+done
+
+"do_$mode" "${args[@]}"
diff --git a/nixpkgs/pkgs/tools/filesystems/bees/default.nix b/nixpkgs/pkgs/tools/filesystems/bees/default.nix
new file mode 100644
index 000000000000..c6bb07e7b87d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/bees/default.nix
@@ -0,0 +1,69 @@
+{ stdenv, runCommand, fetchFromGitHub, bash, btrfs-progs, coreutils, pythonPackages, utillinux }:
+
+let
+
+  version = "0.6.2";
+  sha256 = "05niv9rivd3j3cwcx3n3vjr85wr0l5i76giq9n54d2vdwmn8qjib";
+
+  bees = stdenv.mkDerivation {
+    pname = "bees";
+    inherit version;
+
+    src = fetchFromGitHub {
+      owner = "Zygo";
+      repo = "bees";
+      rev = "v${version}";
+      inherit sha256;
+    };
+
+    buildInputs = [
+      btrfs-progs               # for btrfs/ioctl.h
+      utillinux                 # for uuid.h
+    ];
+
+    nativeBuildInputs = [
+      pythonPackages.markdown   # documentation build
+    ];
+
+    preBuild = ''
+      git() { if [[ $1 = describe ]]; then echo ${version}; else command git "$@"; fi; }
+      export -f git
+    '';
+
+    postBuild = ''
+      unset -f git
+    '';
+
+    buildFlags = [
+      "ETC_PREFIX=/var/run/bees/configs"
+    ];
+
+    makeFlags = [
+      "SHELL=bash"
+      "PREFIX=$(out)"
+      "ETC_PREFIX=$(out)/etc"
+      "BEES_VERSION=${version}"
+      "SYSTEMD_SYSTEM_UNIT_DIR=$(out)/etc/systemd/system"
+    ];
+
+    meta = with stdenv.lib; {
+      homepage = "https://github.com/Zygo/bees";
+      description = "Block-oriented BTRFS deduplication service";
+      license = licenses.gpl3;
+      platforms = platforms.linux;
+      maintainers = with maintainers; [ chaduffy ];
+      longDescription = "Best-Effort Extent-Same: bees finds not just identical files, but also identical extents within files that differ";
+    };
+  };
+
+in
+
+runCommand "bees-service-${version}" {
+  inherit bash bees coreutils utillinux;
+  btrfsProgs = btrfs-progs; # needs to be a valid shell variable name
+} ''
+  mkdir -p -- "$out/bin"
+  substituteAll ${./bees-service-wrapper} "$out"/bin/bees-service-wrapper
+  chmod +x "$out"/bin/bees-service-wrapper
+  ln -s ${bees}/bin/beesd "$out"/bin/beesd
+''
diff --git a/nixpkgs/pkgs/tools/filesystems/bindfs/default.nix b/nixpkgs/pkgs/tools/filesystems/bindfs/default.nix
new file mode 100644
index 000000000000..834aa7290abc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/bindfs/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl, fuse, pkgconfig }:
+
+stdenv.mkDerivation rec {
+  version = "1.14.3";
+  pname = "bindfs";
+
+  src = fetchurl {
+    url    = "https://bindfs.org/downloads/${pname}-${version}.tar.gz";
+    sha256 = "09csi8brp6v98gy9xcl6lkbz1wgs796wch1qviw2wa1n16wd91vw";
+  };
+
+  dontStrip = true;
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ fuse ];
+  postFixup = ''
+    ln -s $out/bin/bindfs $out/bin/mount.fuse.bindfs
+  '';
+
+  meta = {
+    description = "A FUSE filesystem for mounting a directory to another location";
+    homepage    = https://bindfs.org;
+    license     = stdenv.lib.licenses.gpl2;
+    maintainers = with stdenv.lib.maintainers; [ lovek323 ];
+    platforms   = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/blobfuse/default.nix b/nixpkgs/pkgs/tools/filesystems/blobfuse/default.nix
new file mode 100644
index 000000000000..3c6f62283293
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/blobfuse/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub, cmake, pkgconfig, curl, gnutls, libgcrypt, libuuid, fuse }:
+
+stdenv.mkDerivation rec {
+  pname = "blobfuse";
+  version = "1.0.2";
+
+  src = fetchFromGitHub {
+    owner  = "Azure";
+    repo   = "azure-storage-fuse";
+    rev    = "v${version}";
+    sha256 = "1qh04z1fsj1l6l12sz9yl2sy9hwlrnzac54hwrr7wvsgv90n9gbp";
+  };
+
+  NIX_CFLAGS_COMPILE = "-Wno-error=catch-value";
+
+  buildInputs = [ curl gnutls libgcrypt libuuid fuse ];
+  nativeBuildInputs = [ cmake pkgconfig ];
+
+  meta = with stdenv.lib; {
+    description = "Mount an Azure Blob storage as filesystem through FUSE";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jbgi ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/bonnie/default.nix b/nixpkgs/pkgs/tools/filesystems/bonnie/default.nix
new file mode 100644
index 000000000000..57dc51e41115
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/bonnie/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl, perl }:
+
+stdenv.mkDerivation rec {
+  name = "bonnie++-1.98";
+  src = fetchurl {
+    url = "https://www.coker.com.au/bonnie++/${name}.tgz";
+    sha256 = "010bmlmi0nrlp3aq7p624sfaj5a65lswnyyxk3cnz1bqig0cn2vf";
+  };
+
+  enableParallelBuilding = true;
+
+  buildInputs = [ perl ];
+
+  meta = {
+    homepage = http://www.coker.com.au/bonnie++/;
+    description = "Hard drive and file system benchmark suite";
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.linux ++ stdenv.lib.platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/boxfs/default.nix b/nixpkgs/pkgs/tools/filesystems/boxfs/default.nix
new file mode 100644
index 000000000000..3ddc95273972
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/boxfs/default.nix
@@ -0,0 +1,60 @@
+{ stdenv, fetchFromGitHub, curl, fuse, libxml2, pkgconfig }:
+
+let
+  srcs = {
+    boxfs2 = fetchFromGitHub {
+      sha256 = "10af1l3sjnh25shmq5gdnpyqk4vrq7i1zklv4csf1n2nrahln8j8";
+      rev = "d7018b0546d2dae956ae3da3fb95d2f63fa6d3ff";
+      repo = "boxfs2";
+      owner = "drotiro";
+    };
+    libapp = fetchFromGitHub {
+      sha256 = "1p2sbxiranan2n2xsfjkp3c6r2vcs57ds6qvjv4crs1yhxr7cp00";
+      rev = "febebe2bc0fb88d57bdf4eb4a2a54c9eeda3f3d8";
+      repo = "libapp";
+      owner = "drotiro";
+    };
+    libjson = fetchFromGitHub {
+      sha256 = "1vhss3gq44nl61fbnh1l3qzwvz623gwhfgykf1lf1p31rjr7273w";
+      rev = "75a7f50fca2c667bc5f32cdd6dd98f2b673f6657";
+      repo = "libjson";
+      owner = "vincenthz";
+    };
+  };
+in stdenv.mkDerivation {
+  pname = "boxfs";
+  version = "2-20150109";
+
+  src = srcs.boxfs2;
+
+  prePatch = with srcs; ''
+    substituteInPlace Makefile --replace "git pull" "true"
+    cp -a --no-preserve=mode ${libapp} libapp
+    cp -a --no-preserve=mode ${libjson} libjson
+  '';
+  patches = [ ./work-around-API-borkage.patch ];
+
+  buildInputs = [ curl fuse libxml2 ];
+  nativeBuildInputs = [ pkgconfig ];
+
+  buildFlags = [ "static" ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install boxfs boxfs-init $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "FUSE file system for box.com accounts";
+    longDescription = ''
+      Store files on box.com (an account is required). The first time you run
+      boxfs, you will need to complete the authentication (oauth2) process and
+      grant access to your box.com account. Just follow the instructions on
+      the terminal and in your browser. When you've done using your files,
+      unmount the file system with `fusermount -u mountpoint`.
+    '';
+    homepage = https://github.com/drotiro/boxfs2;
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/boxfs/work-around-API-borkage.patch b/nixpkgs/pkgs/tools/filesystems/boxfs/work-around-API-borkage.patch
new file mode 100644
index 000000000000..b74e7f324665
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/boxfs/work-around-API-borkage.patch
@@ -0,0 +1,15 @@
+diff --git a/boxapi.c b/boxapi.c
+index 4964273..1a32e0d 100644
+--- a/boxapi.c
++++ b/boxapi.c
+@@ -38,8 +38,8 @@
+ //    AUTH
+ #define API_KEY_VAL "f9ss11y2w0hg5r04jsidxlhk4pil28cf"
+ #define API_SECRET  "r3ZHAIhsOL2FoHjgERI9xf74W5skIM0w"
+-#define API_OAUTH_URL "https://app.box.com/api/oauth2/" //"https://www.box.com/api/oauth2/"
+-#define API_OAUTH_AUTHORIZE API_OAUTH_URL "authorize?response_type=code&client_id=" API_KEY_VAL /*"&redirect_uri=http%3A//localhost"*/
++#define API_OAUTH_URL "https://api.box.com/oauth2/" //"https://www.box.com/api/oauth2/"
++#define API_OAUTH_AUTHORIZE "https://app.box.com/api/oauth2/authorize?response_type=code&client_id=" API_KEY_VAL /*"&redirect_uri=http%3A//localhost"*/
+ #define API_OAUTH_TOKEN     API_OAUTH_URL "token"
+ //    CALLS
+ #define API_ENDPOINT	"https://api.box.com/2.0/"
diff --git a/nixpkgs/pkgs/tools/filesystems/btrfs-dedupe/default.nix b/nixpkgs/pkgs/tools/filesystems/btrfs-dedupe/default.nix
new file mode 100644
index 000000000000..e2538387d450
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/btrfs-dedupe/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, rustPlatform, lzo, zlib }:
+
+with rustPlatform;
+
+buildRustPackage rec {
+  pname = "btrfs-dedupe";
+  version = "1.1.0";
+
+
+  src = fetchurl {
+    url = "https://gitlab.wellbehavedsoftware.com/well-behaved-software/btrfs-dedupe/repository/archive.tar.bz2?ref=72c6a301d20f935827b994db210bf0a1e121273a";
+    sha256 = "0qy1g4crhfgs2f5cmrsjv6qscg3r66gb8n6sxhimm9ksivhjyyjp";
+  };
+
+  cargoSha256 = "1sz3fswb76rnk7x4kpl1rnj2yxbhpx6q8kv8xxiqdr7qyphpi98r";
+
+  buildInputs = [ lzo zlib ];
+
+  meta = with stdenv.lib; {
+    homepage = https://gitlab.wellbehavedsoftware.com/well-behaved-software/btrfs-dedupe;
+    description = "BTRFS deduplication utility";
+    license = licenses.mit;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ ikervagyok ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/btrfs-progs/default.nix b/nixpkgs/pkgs/tools/filesystems/btrfs-progs/default.nix
new file mode 100644
index 000000000000..1da8470280b8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/btrfs-progs/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, fetchurl, pkgconfig, attr, acl, zlib, libuuid, e2fsprogs, lzo
+, asciidoc, xmlto, docbook_xml_dtd_45, docbook_xsl, libxslt, zstd, python3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "btrfs-progs";
+  version = "5.4";
+
+  src = fetchurl {
+    url = "mirror://kernel/linux/kernel/people/kdave/btrfs-progs/btrfs-progs-v${version}.tar.xz";
+    sha256 = "1ykhasv0jc3qi3xrm5841mzkmlbkjw6rm70gl4aww90jj6ak55qg";
+  };
+
+  nativeBuildInputs = [
+    pkgconfig asciidoc xmlto docbook_xml_dtd_45 docbook_xsl libxslt
+    python3 python3.pkgs.setuptools
+  ];
+
+  buildInputs = [ attr acl zlib libuuid e2fsprogs lzo zstd python3 ];
+
+  # for python cross-compiling
+  _PYTHON_HOST_PLATFORM = stdenv.hostPlatform.config;
+  # The i686 case is a quick hack; I don't know what's wrong.
+  postConfigure = stdenv.lib.optionalString (!stdenv.isi686) ''
+    export LDSHARED="$LD -shared"
+  '';
+
+  # gcc bug with -O1 on ARM with gcc 4.8
+  # This should be fine on all platforms so apply universally
+  postPatch = "sed -i s/-O1/-O2/ configure";
+
+  postInstall = ''
+    install -v -m 444 -D btrfs-completion $out/etc/bash_completion.d/btrfs
+  '';
+
+  configureFlags = stdenv.lib.optional stdenv.hostPlatform.isMusl "--disable-backtrace";
+
+  meta = with stdenv.lib; {
+    description = "Utilities for the btrfs filesystem";
+    homepage = https://btrfs.wiki.kernel.org/;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/buttersink/default.nix b/nixpkgs/pkgs/tools/filesystems/buttersink/default.nix
new file mode 100644
index 000000000000..791d59b7ac27
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/buttersink/default.nix
@@ -0,0 +1,30 @@
+{ lib, python2 }:
+
+python2.pkgs.buildPythonApplication rec {
+  pname = "buttersink";
+  version = "0.6.9";
+
+  src = python2.pkgs.fetchPypi {
+    inherit pname version;
+    sha256 = "a797b6e92ad2acdf41e033c1368ab365aa268f4d8458b396a5770fa6c2bc3f54";
+  };
+
+  propagatedBuildInputs = with python2.pkgs; [ boto crcmod psutil ];
+
+  # No tests implemented
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Synchronise btrfs snapshots";
+    longDescription = ''
+      ButterSink is like rsync, but for btrfs subvolumes instead of files,
+      which makes it much more efficient for things like archiving backup
+      snapshots. It is built on top of btrfs send and receive capabilities.
+      Sources and destinations can be local btrfs file systems, remote btrfs
+      file systems over SSH, or S3 buckets.
+    '';
+    homepage = https://github.com/AmesCornish/buttersink/wiki;
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/ceph/0000-dont-check-cherrypy-version.patch b/nixpkgs/pkgs/tools/filesystems/ceph/0000-dont-check-cherrypy-version.patch
new file mode 100644
index 000000000000..9604da87fb50
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/ceph/0000-dont-check-cherrypy-version.patch
@@ -0,0 +1,70 @@
+diff --git a/src/pybind/mgr/dashboard/module.py b/src/pybind/mgr/dashboard/module.py
+index a8a3ec07c1..bcc9b86c37 100644
+--- a/src/pybind/mgr/dashboard/module.py
++++ b/src/pybind/mgr/dashboard/module.py
+@@ -25,40 +25,6 @@ except ImportError:
+ 
+ from .services.sso import load_sso_db
+ 
+-# The SSL code in CherryPy 3.5.0 is buggy.  It was fixed long ago,
+-# but 3.5.0 is still shipping in major linux distributions
+-# (Fedora 27, Ubuntu Xenial), so we must monkey patch it to get SSL working.
+-if cherrypy is not None:
+-    v = StrictVersion(cherrypy.__version__)
+-    # It was fixed in 3.7.0.  Exact lower bound version is probably earlier,
+-    # but 3.5.0 is what this monkey patch is tested on.
+-    if StrictVersion("3.5.0") <= v < StrictVersion("3.7.0"):
+-        from cherrypy.wsgiserver.wsgiserver2 import HTTPConnection,\
+-                                                    CP_fileobject
+-
+-        def fixed_init(hc_self, server, sock, makefile=CP_fileobject):
+-            hc_self.server = server
+-            hc_self.socket = sock
+-            hc_self.rfile = makefile(sock, "rb", hc_self.rbufsize)
+-            hc_self.wfile = makefile(sock, "wb", hc_self.wbufsize)
+-            hc_self.requests_seen = 0
+-
+-        HTTPConnection.__init__ = fixed_init
+-
+-# When the CherryPy server in 3.2.2 (and later) starts it attempts to verify
+-# that the ports its listening on are in fact bound. When using the any address
+-# "::" it tries both ipv4 and ipv6, and in some environments (e.g. kubernetes)
+-# ipv6 isn't yet configured / supported and CherryPy throws an uncaught
+-# exception.
+-if cherrypy is not None:
+-    v = StrictVersion(cherrypy.__version__)
+-    # the issue was fixed in 3.2.3. it's present in 3.2.2 (current version on
+-    # centos:7) and back to at least 3.0.0.
+-    if StrictVersion("3.1.2") <= v < StrictVersion("3.2.3"):
+-        # https://github.com/cherrypy/cherrypy/issues/1100
+-        from cherrypy.process import servers
+-        servers.wait_for_occupied_port = lambda host, port: None
+-
+ if 'COVERAGE_ENABLED' in os.environ:
+     import coverage
+     __cov = coverage.Coverage(config_file="{}/.coveragerc".format(os.path.dirname(__file__)),
+diff --git a/src/pybind/mgr/prometheus/module.py b/src/pybind/mgr/prometheus/module.py
+index b7fecf8d85..dfd4160591 100644
+--- a/src/pybind/mgr/prometheus/module.py
++++ b/src/pybind/mgr/prometheus/module.py
+@@ -18,20 +18,6 @@ from rbd import RBD
+ DEFAULT_ADDR = '::'
+ DEFAULT_PORT = 9283
+ 
+-# When the CherryPy server in 3.2.2 (and later) starts it attempts to verify
+-# that the ports its listening on are in fact bound. When using the any address
+-# "::" it tries both ipv4 and ipv6, and in some environments (e.g. kubernetes)
+-# ipv6 isn't yet configured / supported and CherryPy throws an uncaught
+-# exception.
+-if cherrypy is not None:
+-    v = StrictVersion(cherrypy.__version__)
+-    # the issue was fixed in 3.2.3. it's present in 3.2.2 (current version on
+-    # centos:7) and back to at least 3.0.0.
+-    if StrictVersion("3.1.2") <= v < StrictVersion("3.2.3"):
+-        # https://github.com/cherrypy/cherrypy/issues/1100
+-        from cherrypy.process import servers
+-        servers.wait_for_occupied_port = lambda host, port: None
+-
+ # cherrypy likes to sys.exit on error.  don't let it take us down too!
+ def os_exit_noop(*args, **kwargs):
+     pass
diff --git a/nixpkgs/pkgs/tools/filesystems/ceph/0000-fix-SPDK-build-env.patch b/nixpkgs/pkgs/tools/filesystems/ceph/0000-fix-SPDK-build-env.patch
new file mode 100644
index 000000000000..b04082537b53
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/ceph/0000-fix-SPDK-build-env.patch
@@ -0,0 +1,11 @@
+--- a/cmake/modules/BuildSPDK.cmake	2018-08-09 09:22:34.950684960 +0200
++++ b/cmake/modules/BuildSPDK.cmake	2018-08-09 09:21:59.986964224 +0200
+@@ -16,7 +16,7 @@
+     # unset $CFLAGS, otherwise it will interfere with how SPDK sets
+     # its include directory.
+     # unset $LDFLAGS, otherwise SPDK will fail to mock some functions.
+-    BUILD_COMMAND env -i PATH=$ENV{PATH} CC=${CMAKE_C_COMPILER} $(MAKE) EXTRA_CFLAGS="-fPIC"
++    BUILD_COMMAND env PATH=$ENV{PATH} CC=${CMAKE_C_COMPILER} $(MAKE) EXTRA_CFLAGS="-fPIC" C_OPT="-mssse3"
+     BUILD_IN_SOURCE 1
+     INSTALL_COMMAND "true")
+   ExternalProject_Get_Property(spdk-ext source_dir)
diff --git a/nixpkgs/pkgs/tools/filesystems/ceph/default.nix b/nixpkgs/pkgs/tools/filesystems/ceph/default.nix
new file mode 100644
index 000000000000..f3e985edbff6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/ceph/default.nix
@@ -0,0 +1,200 @@
+{ stdenv, runCommand, fetchurl
+, ensureNewerSourcesHook
+, cmake, pkgconfig
+, which, git
+, boost, python3Packages
+, libxml2, zlib, lz4
+, openldap, lttng-ust
+, babeltrace, gperf
+, gtest
+, cunit, snappy
+, rocksdb, makeWrapper
+, leveldb, oathToolkit
+, libnl, libcap_ng
+
+# Optional Dependencies
+, yasm ? null, fcgi ? null, expat ? null
+, curl ? null, fuse ? null
+, libedit ? null, libatomic_ops ? null
+, libs3 ? null
+
+# Mallocs
+, jemalloc ? null, gperftools ? null
+
+# Crypto Dependencies
+, cryptopp ? null
+, nss ? null, nspr ? null
+
+# Linux Only Dependencies
+, linuxHeaders, utillinux, libuuid, udev, keyutils, rdma-core, rabbitmq-c
+, libaio ? null, libxfs ? null, zfs ? null
+, ...
+}:
+
+# We must have one crypto library
+assert cryptopp != null || (nss != null && nspr != null);
+
+with stdenv; with stdenv.lib;
+let
+  shouldUsePkg = pkg: if pkg != null && pkg.meta.available then pkg else null;
+
+  optYasm = shouldUsePkg yasm;
+  optFcgi = shouldUsePkg fcgi;
+  optExpat = shouldUsePkg expat;
+  optCurl = shouldUsePkg curl;
+  optFuse = shouldUsePkg fuse;
+  optLibedit = shouldUsePkg libedit;
+  optLibatomic_ops = shouldUsePkg libatomic_ops;
+  optLibs3 = shouldUsePkg libs3;
+
+  optJemalloc = shouldUsePkg jemalloc;
+  optGperftools = shouldUsePkg gperftools;
+
+  optCryptopp = shouldUsePkg cryptopp;
+  optNss = shouldUsePkg nss;
+  optNspr = shouldUsePkg nspr;
+
+  optLibaio = shouldUsePkg libaio;
+  optLibxfs = shouldUsePkg libxfs;
+  optZfs = shouldUsePkg zfs;
+
+  hasRadosgw = optFcgi != null && optExpat != null && optCurl != null && optLibedit != null;
+
+
+  # Malloc implementation (can be jemalloc, tcmalloc or null)
+  malloc = if optJemalloc != null then optJemalloc else optGperftools;
+
+  # We prefer nss over cryptopp
+  cryptoStr = if optNss != null && optNspr != null then "nss" else
+    if optCryptopp != null then "cryptopp" else "none";
+
+  cryptoLibsMap = {
+    nss = [ optNss optNspr ];
+    cryptopp = [ optCryptopp ];
+    none = [ ];
+  };
+
+  ceph-python-env = python3Packages.python.withPackages (ps: [
+    ps.sphinx
+    ps.flask
+    ps.cython
+    ps.setuptools
+    ps.virtualenv
+    # Libraries needed by the python tools
+    ps.Mako
+    ps.cherrypy
+    ps.pecan
+    ps.prettytable
+    ps.pyjwt
+    ps.webob
+    ps.bcrypt
+    ps.six
+    ps.pyyaml
+  ]);
+
+  version = "14.2.6";
+in rec {
+  ceph = stdenv.mkDerivation {
+    pname = "ceph";
+    inherit version;
+
+    src = fetchurl {
+      url = "http://download.ceph.com/tarballs/ceph-${version}.tar.gz";
+      sha256 = "0qkyrb25r2a57n6k8ncb43x7hvhkmpi7abhfyi98mlz2lhmhzlm1";
+    };
+
+    patches = [
+      ./0000-fix-SPDK-build-env.patch
+      ./0000-dont-check-cherrypy-version.patch
+    ];
+
+    nativeBuildInputs = [
+      cmake
+      pkgconfig which git python3Packages.wrapPython makeWrapper
+      python3Packages.python # for the toPythonPath function
+      (ensureNewerSourcesHook { year = "1980"; })
+    ];
+
+    buildInputs = cryptoLibsMap.${cryptoStr} ++ [
+      boost ceph-python-env libxml2 optYasm optLibatomic_ops optLibs3
+      malloc zlib openldap lttng-ust babeltrace gperf gtest cunit
+      snappy rocksdb lz4 oathToolkit leveldb libnl libcap_ng
+    ] ++ optionals stdenv.isLinux [
+      linuxHeaders utillinux libuuid udev keyutils optLibaio optLibxfs optZfs
+      # ceph 14
+      rdma-core rabbitmq-c
+    ] ++ optionals hasRadosgw [
+      optFcgi optExpat optCurl optFuse optLibedit
+    ];
+
+    pythonPath = [ ceph-python-env "${placeholder "out"}/${ceph-python-env.sitePackages}" ];
+
+    preConfigure =''
+      substituteInPlace src/common/module.c --replace "/sbin/modinfo"  "modinfo"
+      substituteInPlace src/common/module.c --replace "/sbin/modprobe" "modprobe"
+
+      # for pybind/rgw to find internal dep
+      export LD_LIBRARY_PATH="$PWD/build/lib:$LD_LIBRARY_PATH"
+      # install target needs to be in PYTHONPATH for "*.pth support" check to succeed
+
+      patchShebangs src/script src/spdk src/test src/tools
+    '';
+
+    cmakeFlags = [
+      "-DWITH_PYTHON3=ON"
+      "-DWITH_SYSTEM_ROCKSDB=OFF"
+      "-DCMAKE_INSTALL_DATADIR=${placeholder "lib"}/lib"
+
+
+      "-DWITH_SYSTEM_BOOST=ON"
+      "-DWITH_SYSTEM_ROCKSDB=ON"
+      "-DWITH_SYSTEM_GTEST=ON"
+      "-DMGR_PYTHON_VERSION=${ceph-python-env.python.pythonVersion}"
+      "-DWITH_SYSTEMD=OFF"
+      "-DWITH_TESTS=OFF"
+      # TODO breaks with sandbox, tries to download stuff with npm
+      "-DWITH_MGR_DASHBOARD_FRONTEND=OFF"
+    ];
+
+    postFixup = ''
+      wrapPythonPrograms
+      wrapProgram $out/bin/ceph-mgr --prefix PYTHONPATH ":" "$(toPythonPath ${placeholder "out"}):$(toPythonPath ${ceph-python-env})"
+    '';
+
+    enableParallelBuilding = true;
+
+    outputs = [ "out" "lib" "dev" "doc" "man" ];
+
+    doCheck = false; # uses pip to install things from the internet
+
+    meta = {
+      homepage = https://ceph.com/;
+      description = "Distributed storage system";
+      license = with licenses; [ lgpl21 gpl2 bsd3 mit publicDomain ];
+      maintainers = with maintainers; [ adev ak krav johanot ];
+      platforms = [ "x86_64-linux" ];
+    };
+
+    passthru.version = version;
+  };
+
+  ceph-client = runCommand "ceph-client-${version}" {
+     meta = {
+        homepage = https://ceph.com/;
+        description = "Tools needed to mount Ceph's RADOS Block Devices";
+        license = with licenses; [ lgpl21 gpl2 bsd3 mit publicDomain ];
+        maintainers = with maintainers; [ adev ak johanot krav ];
+        platforms = [ "x86_64-linux" ];
+      };
+    } ''
+      mkdir -p $out/{bin,etc,lib/python3.7/site-packages}
+      cp -r ${ceph}/bin/{ceph,.ceph-wrapped,rados,rbd,rbdmap} $out/bin
+      cp -r ${ceph}/bin/ceph-{authtool,conf,dencoder,rbdnamer,syn} $out/bin
+      cp -r ${ceph}/bin/rbd-replay* $out/bin
+      cp -r ${ceph}/lib/python3.7/site-packages $out/lib/python3.7/
+      cp -r ${ceph}/etc/bash_completion.d $out/etc
+      # wrapPythonPrograms modifies .ceph-wrapped, so lets just update its paths
+      substituteInPlace $out/bin/ceph          --replace ${ceph} $out
+      substituteInPlace $out/bin/.ceph-wrapped --replace ${ceph} $out
+   '';
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/chunkfs/default.nix b/nixpkgs/pkgs/tools/filesystems/chunkfs/default.nix
new file mode 100644
index 000000000000..6c0a6c287031
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/chunkfs/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, perl, fuse }:
+
+stdenv.mkDerivation rec {
+  version = "0.7";
+  pname = "chunkfs";
+
+  src = fetchurl {
+    url = "https://chunkfs.florz.de/chunkfs_${version}.tar.gz";
+    sha256 = "4c168fc2b265a6ba34afc565707ea738f34375325763c0596f2cfa1c9b8d40f1";
+  };
+
+  buildInputs = [perl fuse];
+
+  makeFlags = [
+    "DESTDIR=$(out)"
+    "PREFIX="
+  ];
+
+  preInstall = ''
+    mkdir -p $out/bin
+    mkdir -p $out/share/man/man1
+  '';
+
+  meta = {
+    description = "FUSE filesystems for viewing chunksync-style directory trees as a block device and vice versa";
+    homepage = http://chunkfs.florz.de/;
+    license = stdenv.lib.licenses.gpl2;
+    platforms = with stdenv.lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/ciopfs/default.nix b/nixpkgs/pkgs/tools/filesystems/ciopfs/default.nix
new file mode 100644
index 000000000000..533bb2322e72
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/ciopfs/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl, pkgconfig, fuse, glib, attr }:
+
+stdenv.mkDerivation rec {
+  name = "ciopfs-0.4";
+
+  src = fetchurl {
+    url = "http://www.brain-dump.org/projects/ciopfs/${name}.tar.gz";
+    sha256 = "0sr9i9b3qfwbfvzvk00yrrg3x2xqk1njadbldkvn7hwwa4z5bm9l";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ fuse glib attr ];
+
+  makeFlags = [ "DESTDIR=$(out)" "PREFIX=" ];
+
+  meta = {
+    homepage = http://www.brain-dump.org/projects/ciopfs/;
+    description = "A case-insensitive filesystem layered on top of any other filesystem";
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/convoy/default.nix b/nixpkgs/pkgs/tools/filesystems/convoy/default.nix
new file mode 100644
index 000000000000..00ef368ad3da
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/convoy/default.nix
@@ -0,0 +1,26 @@
+# This file was generated by go2nix.
+{ stdenv, buildGoPackage, fetchFromGitHub, lvm2 }:
+
+buildGoPackage rec {
+  pname = "convoy";
+  version = "0.5.0";
+
+  goPackagePath = "github.com/rancher/convoy";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "rancher";
+    repo = "convoy";
+    sha256 = "0ihy0cfq7sa2wml904ajwr165hx2mas3jb1bqk3i0m4fg1lx1xw1";
+  };
+
+  buildInputs = [lvm2];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/rancher/convoy;
+    description = "A Docker volume plugin, managing persistent container volumes.";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ offline ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/cpcfs/default.nix b/nixpkgs/pkgs/tools/filesystems/cpcfs/default.nix
new file mode 100644
index 000000000000..46635aa67412
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/cpcfs/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchFromGitHub, makeWrapper, ncurses, readline, ronn }:
+
+stdenv.mkDerivation rec {
+
+  pname = "cpcfs";
+  version = "0.85.4";
+  
+  src = fetchFromGitHub {
+    owner = "derikz";
+    repo = "cpcfs";
+    rev = "v${version}";
+    sha256 = "0rfbry0qy8mv746mzk9zdfffkdgq4w7invgb5cszjma2cp83q3i2";
+  };
+
+  sourceRoot = "source/src";
+
+  nativeBuildInputs = [ makeWrapper ncurses readline ronn ];
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace '-ltermcap' '-lncurses' \
+      --replace '-L /usr/lib/termcap' ' '
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin
+    mkdir -p $out/man/man1
+    cp cpcfs $out/bin
+    ronn --roff ../template.doc --pipe > $out/man/man1/cpcfs.1
+    runHook postInstall
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Manipulating CPC dsk images and files";
+    homepage = "https://github.com/derikz/cpcfs/" ;
+    license = licenses.bsd2;
+    maintainers = [ maintainers.genesis ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/cryfs/default.nix b/nixpkgs/pkgs/tools/filesystems/cryfs/default.nix
new file mode 100644
index 000000000000..93a70f1f0881
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/cryfs/default.nix
@@ -0,0 +1,78 @@
+{ stdenv, fetchFromGitHub, fetchpatch
+, cmake, pkgconfig, python, gtest
+, boost, cryptopp, curl, fuse, openssl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "cryfs";
+  version = "0.10.2";
+
+  src = fetchFromGitHub {
+    owner  = "cryfs";
+    repo   = "cryfs";
+    rev    = version;
+    sha256 = "1m6rcc82hbaiwcwcvf5xmxma8n0jal9zhcykv9xgwiax4ny0l8kz";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "cryfs-0.10.2-install-targets.patch";
+      url = "https://gitweb.gentoo.org/repo/gentoo.git/plain/sys-fs/cryfs/files/cryfs-0.10.2-install-targets.patch?id=192ac7421ddd4093125f4997898fb62e8a140a44";
+      sha256 = "1jz6gpi1i7dnfm88a6n3mccwfmsmvg0d0bmp3fmqqrkbcg7in00l";
+    })
+    (fetchpatch {
+      name = "cryfs-0.10.2-unbundle-libs.patch";
+      url = "https://gitweb.gentoo.org/repo/gentoo.git/plain/sys-fs/cryfs/files/cryfs-0.10.2-unbundle-libs.patch?id=192ac7421ddd4093125f4997898fb62e8a140a44";
+      sha256 = "0hzss5rawcjrh8iqzc40w5yjhxdqya4gbg6dzap70180s50mahzs";
+    })
+  ];
+
+  postPatch = ''
+    patchShebangs src
+
+    # remove tests that require network access:
+    substituteInPlace test/cpp-utils/CMakeLists.txt \
+      --replace "network/CurlHttpClientTest.cpp" "" \
+      --replace "network/FakeHttpClientTest.cpp" ""
+
+    # remove CLI test trying to access /dev/fuse
+    substituteInPlace test/cryfs-cli/CMakeLists.txt \
+      --replace "CliTest_IntegrityCheck.cpp" ""
+
+    # downsize large file test as 4.5G is too big for Hydra:
+    substituteInPlace test/cpp-utils/data/DataTest.cpp \
+      --replace "(4.5L*1024*1024*1024)" "(0.5L*1024*1024*1024)"
+  '';
+
+  nativeBuildInputs = [ cmake gtest pkgconfig python ];
+
+  buildInputs = [ boost cryptopp curl fuse openssl ];
+
+  enableParallelBuilding = true;
+
+  cmakeFlags = [
+    "-DCRYFS_UPDATE_CHECKS:BOOL=FALSE"
+    "-DBoost_USE_STATIC_LIBS:BOOL=FALSE" # this option is case sensitive
+    "-DUSE_SYSTEM_LIBS:BOOL=TRUE"
+    "-DBUILD_TESTING:BOOL=TRUE"
+  ];
+
+  doCheck = (!stdenv.isDarwin); # Cryfs tests are broken on darwin
+
+  checkPhase = ''
+    # Skip CMakeFiles directory and tests depending on fuse (does not work well with sandboxing)
+    SKIP_IMPURE_TESTS="CMakeFiles|fspp|my-gtest-main"
+
+    for t in $(ls -d test/*/ | egrep -v "$SKIP_IMPURE_TESTS"); do
+      "./$t$(basename $t)-test"
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Cryptographic filesystem for the cloud";
+    homepage    = https://www.cryfs.org;
+    license     = licenses.lgpl3;
+    maintainers = with maintainers; [ peterhoeg c0bw3b ];
+    platforms   = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/curlftpfs/default.nix b/nixpkgs/pkgs/tools/filesystems/curlftpfs/default.nix
new file mode 100644
index 000000000000..5636909093e6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/curlftpfs/default.nix
@@ -0,0 +1,21 @@
+{stdenv, fetchurl, fuse, curl, pkgconfig, glib, zlib}:
+
+stdenv.mkDerivation {
+  name = "curlftpfs-0.9.2";
+  src = fetchurl {
+    url = mirror://sourceforge/curlftpfs/curlftpfs-0.9.2.tar.gz;
+    sha256 = "0n397hmv21jsr1j7zx3m21i7ryscdhkdsyqpvvns12q7qwwlgd2f";
+  };
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [fuse curl glib zlib];
+
+  doCheck = false; # fails, doesn't work well too, btw
+
+  meta = with stdenv.lib; {
+    description = "Filesystem for accessing FTP hosts based on FUSE and libcurl";
+    homepage = http://curlftpfs.sourceforge.net;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/darling-dmg/default.nix b/nixpkgs/pkgs/tools/filesystems/darling-dmg/default.nix
new file mode 100644
index 000000000000..0890db67fe72
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/darling-dmg/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitHub, cmake, fuse, zlib, bzip2, openssl, libxml2, icu } :
+
+stdenv.mkDerivation rec {
+  pname = "darling-dmg";
+  version = "1.0.4+git20180914";
+
+  src = fetchFromGitHub {
+    owner = "darlinghq";
+    repo = "darling-dmg";
+    rev = "97a92a6930e43cdbc9dedaee62716e3223deb027";
+    sha256 = "1bngr4827qnl4s2f7z39wjp13nfm3zzzykjshb43wvjz536bnqdj";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ fuse openssl zlib bzip2 libxml2 icu ];
+
+  # compat with icu61+ https://github.com/unicode-org/icu/blob/release-64-2/icu4c/readme.html#L554
+  CXXFLAGS = [ "-DU_USING_ICU_NAMESPACE=1" ];
+
+  meta = {
+    homepage = http://www.darlinghq.org/;
+    description = "Darling lets you open macOS dmgs on Linux";
+    platforms = stdenv.lib.platforms.linux;
+    license = stdenv.lib.licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/davfs2/0001-umount_davfs-substitute-ps-command.patch b/nixpkgs/pkgs/tools/filesystems/davfs2/0001-umount_davfs-substitute-ps-command.patch
new file mode 100644
index 000000000000..3fbbc4c7d0fd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/davfs2/0001-umount_davfs-substitute-ps-command.patch
@@ -0,0 +1,25 @@
+From 0cb1321c4cbb2978318ddad73c9ee6f2a19c55c8 Mon Sep 17 00:00:00 2001
+From: Florian Klink <flokli@flokli.de>
+Date: Sat, 11 Jan 2020 21:06:33 +0100
+Subject: [PATCH] umount_davfs: substitute ps command
+
+---
+ src/umount_davfs.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/umount_davfs.c b/src/umount_davfs.c
+index b7019c3..a278679 100644
+--- a/src/umount_davfs.c
++++ b/src/umount_davfs.c
+@@ -157,7 +157,7 @@ main(int argc, char *argv[])
+     }
+     fclose(file);
+ 
+-    char *ps_command = ne_concat("ps -p ", pid, NULL);
++    char *ps_command = ne_concat("@ps@ -p ", pid, NULL);
+     FILE *ps_in = popen(ps_command, "r");
+     if (!ps_in) {
+         error(0, 0,
+-- 
+2.24.1
+
diff --git a/nixpkgs/pkgs/tools/filesystems/davfs2/default.nix b/nixpkgs/pkgs/tools/filesystems/davfs2/default.nix
new file mode 100644
index 000000000000..366db929f582
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/davfs2/default.nix
@@ -0,0 +1,50 @@
+{ stdenv
+, fetchurl
+, neon
+, procps
+, substituteAll
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  name = "davfs2-1.5.6";
+
+  src = fetchurl {
+    url = "mirror://savannah/davfs2/${name}.tar.gz";
+    sha256 = "00fqadhmhi2bmdar5a48nicmjcagnmaj9wgsvjr6cffmrz6pcx21";
+  };
+
+  buildInputs = [ neon zlib ];
+
+  patches = [
+    ./isdir.patch
+    ./fix-sysconfdir.patch
+    (substituteAll {
+      src = ./0001-umount_davfs-substitute-ps-command.patch;
+      ps = "${procps}/bin/ps";
+    })
+  ];
+
+  configureFlags = [ "--sysconfdir=/etc" ];
+
+  makeFlags = [
+    "sbindir=$(out)/sbin"
+    "ssbindir=$(out)/sbin"
+  ];
+
+  meta = {
+    homepage = https://savannah.nongnu.org/projects/davfs2;
+    description = "Mount WebDAV shares like a typical filesystem";
+    license = stdenv.lib.licenses.gpl3Plus;
+
+    longDescription = ''
+      Web Distributed Authoring and Versioning (WebDAV), an extension to
+      the HTTP-protocol, allows authoring of resources on a remote web
+      server. davfs2 provides the ability to access such resources like
+      a typical filesystem, allowing for use by standard applications
+      with no built-in support for WebDAV.
+    '';
+
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/davfs2/fix-sysconfdir.patch b/nixpkgs/pkgs/tools/filesystems/davfs2/fix-sysconfdir.patch
new file mode 100644
index 000000000000..f71248a28f4d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/davfs2/fix-sysconfdir.patch
@@ -0,0 +1,60 @@
+diff -ubr davfs2-1.4.7-orig/etc/Makefile.am davfs2-1.4.7/etc/Makefile.am
+--- davfs2-1.4.7-orig/etc/Makefile.am	2013-02-21 11:45:00.185763558 +0100
++++ davfs2-1.4.7/etc/Makefile.am	2013-02-21 11:53:05.423197775 +0100
+@@ -24,17 +24,17 @@
+ 
+ install-data-local: $(dist_pkgdata_DATA)
+ 	@$(NORMAL_INSTALL)
+-	$(mkinstalldirs) $(DESTDIR)$(pkgsysconfdir)
+-	$(INSTALL_DATA) -b davfs2.conf $(DESTDIR)$(pkgsysconfdir)/davfs2.conf
+-	$(INSTALL_DATA) -b -m 600 secrets $(DESTDIR)$(pkgsysconfdir)/secrets
+-	$(mkinstalldirs) $(DESTDIR)$(pkgsysconfdir)/certs
+-	$(mkinstalldirs) $(DESTDIR)$(pkgsysconfdir)/certs/private
+-	chmod 700 $(DESTDIR)$(pkgsysconfdir)/certs/private
++	$(mkinstalldirs) $(out)$(pkgsysconfdir)
++	$(INSTALL_DATA) -b davfs2.conf $(out)$(pkgsysconfdir)/davfs2.conf
++	$(INSTALL_DATA) -b -m 600 secrets $(out)$(pkgsysconfdir)/secrets
++	$(mkinstalldirs) $(out)$(pkgsysconfdir)/certs
++	$(mkinstalldirs) $(out)$(pkgsysconfdir)/certs/private
++	chmod 700 $(out)$(pkgsysconfdir)/certs/private
+ 
+ uninstall-local:
+ 	@$(NORMAL_UNINSTALL)
+ 	@list='$(dist_pkgdata_DATA)'; for p in $$list; do \
+ 	  f="`echo $$p | sed -e 's|^.*/||'`"; \
+-	  echo " rm -f $(DESTDIR)$(pkgsysconfdir)/$$f"; \
+-	  rm -f $(DESTDIR)$(pkgsysconfdir)/$$f; \
++	  echo " rm -f $(out)$(pkgsysconfdir)/$$f"; \
++	  rm -f $(out)$(pkgsysconfdir)/$$f; \
+ 	done
+diff -ubr davfs2-1.4.7-orig/etc/Makefile.in davfs2-1.4.7/etc/Makefile.in
+--- davfs2-1.4.7-orig/etc/Makefile.in	2013-02-21 11:45:00.185763558 +0100
++++ davfs2-1.4.7/etc/Makefile.in	2013-02-21 11:53:27.241207128 +0100
+@@ -408,19 +408,19 @@
+ 
+ install-data-local: $(dist_pkgdata_DATA)
+ 	@$(NORMAL_INSTALL)
+-	$(mkinstalldirs) $(DESTDIR)$(pkgsysconfdir)
+-	$(INSTALL_DATA) -b davfs2.conf $(DESTDIR)$(pkgsysconfdir)/davfs2.conf
+-	$(INSTALL_DATA) -b -m 600 secrets $(DESTDIR)$(pkgsysconfdir)/secrets
+-	$(mkinstalldirs) $(DESTDIR)$(pkgsysconfdir)/certs
+-	$(mkinstalldirs) $(DESTDIR)$(pkgsysconfdir)/certs/private
+-	chmod 700 $(DESTDIR)$(pkgsysconfdir)/certs/private
++	$(mkinstalldirs) $(out)$(pkgsysconfdir)
++	$(INSTALL_DATA) -b davfs2.conf $(out)$(pkgsysconfdir)/davfs2.conf
++	$(INSTALL_DATA) -b -m 600 secrets $(out)$(pkgsysconfdir)/secrets
++	$(mkinstalldirs) $(out)$(pkgsysconfdir)/certs
++	$(mkinstalldirs) $(out)$(pkgsysconfdir)/certs/private
++	chmod 700 $(out)$(pkgsysconfdir)/certs/private
+ 
+ uninstall-local:
+ 	@$(NORMAL_UNINSTALL)
+ 	@list='$(dist_pkgdata_DATA)'; for p in $$list; do \
+ 	  f="`echo $$p | sed -e 's|^.*/||'`"; \
+-	  echo " rm -f $(DESTDIR)$(pkgsysconfdir)/$$f"; \
+-	  rm -f $(DESTDIR)$(pkgsysconfdir)/$$f; \
++	  echo " rm -f $(out)$(pkgsysconfdir)/$$f"; \
++	  rm -f $(out)$(pkgsysconfdir)/$$f; \
+ 	done
+ 
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
diff --git a/nixpkgs/pkgs/tools/filesystems/davfs2/isdir.patch b/nixpkgs/pkgs/tools/filesystems/davfs2/isdir.patch
new file mode 100644
index 000000000000..ae69b4460f5a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/davfs2/isdir.patch
@@ -0,0 +1,30 @@
+diff -ur davfs2-1.4.5-old/src/dav_coda.c davfs2-1.4.5-new/src/dav_coda.c
+--- davfs2-1.4.5-old/src/dav_coda.c	2009-06-04 20:30:32.000000000 +0200
++++ davfs2-1.4.5-new/src/dav_coda.c	2011-02-09 19:51:22.260530572 +0100
+@@ -52,6 +52,10 @@
+ #ifdef HAVE_SYS_TYPES_H
+ #include <sys/types.h>
+ #endif
++#ifdef HAVE_SYS_STAT_H
++#include <sys/stat.h>
++#endif
++
+ 
+ #include "defaults.h"
+ #include "mount_davfs.h"
+diff -ur davfs2-1.4.5-old/src/dav_fuse.c davfs2-1.4.5-new/src/dav_fuse.c
+--- davfs2-1.4.5-old/src/dav_fuse.c	2009-06-30 20:06:44.000000000 +0200
++++ davfs2-1.4.5-new/src/dav_fuse.c	2011-02-09 19:52:23.938220524 +0100
+@@ -41,6 +41,12 @@
+ #ifdef HAVE_UNISTD_H
+ #include <unistd.h>
+ #endif
++#ifdef HAVE_SYS_TYPES_H
++#include <sys/types.h>
++#endif
++#ifdef HAVE_SYS_STAT_H
++#include <sys/stat.h>
++#endif
+ 
+ #include "defaults.h"
+ #include "mount_davfs.h"
diff --git a/nixpkgs/pkgs/tools/filesystems/dislocker/default.nix b/nixpkgs/pkgs/tools/filesystems/dislocker/default.nix
new file mode 100644
index 000000000000..cf87f9ca98e0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/dislocker/default.nix
@@ -0,0 +1,30 @@
+{ stdenv
+, fetchFromGitHub
+, cmake
+, mbedtls
+, fuse
+}:
+
+
+stdenv.mkDerivation rec {
+  pname = "dislocker";
+  version = "0.7.1";
+
+  src = fetchFromGitHub {
+    owner = "aorimn";
+    repo = "dislocker";
+    rev = "v${version}";
+    sha256 = "1crh2sg5x1kgqmdrl1nmrqwxjykxa4zwnbggcpdn97mj2gvdw7sb";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ fuse mbedtls ];
+
+  meta = with stdenv.lib; {
+    description = "Read BitLocker encrypted partitions in Linux";
+    homepage    = https://github.com/aorimn/dislocker;
+    license     = licenses.gpl2;
+    maintainers = with maintainers; [ elitak ];
+    platforms   = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/disorderfs/default.nix b/nixpkgs/pkgs/tools/filesystems/disorderfs/default.nix
new file mode 100644
index 000000000000..5137719790af
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/disorderfs/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, pkgconfig, fuse, attr, asciidoc }:
+
+stdenv.mkDerivation rec {
+  pname = "disorderfs";
+  version = "0.5.6";
+
+  src = fetchurl {
+    url = "http://http.debian.net/debian/pool/main/d/disorderfs/disorderfs_${version}.orig.tar.bz2";
+    sha256 = "0xlsl6cw1p0d92crknrcf4iabgig0185dzp80qxh9iyjy42d27gk";
+  };
+
+  nativeBuildInputs = [ pkgconfig asciidoc ];
+
+  buildInputs = [ fuse attr ];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with stdenv.lib; {
+    description = "An overlay FUSE filesystem that introduces non-determinism into filesystem metadata";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/djmount/default.nix b/nixpkgs/pkgs/tools/filesystems/djmount/default.nix
new file mode 100644
index 000000000000..e3c8c2944fba
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/djmount/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchurl, pkgconfig, fuse }:
+
+stdenv.mkDerivation rec {
+  pname = "djmount";
+  version = "0.71";
+  src = fetchurl {
+    url = "mirror://sourceforge/djmount/${version}/${pname}-${version}.tar.gz";
+    sha256 = "0kqf0cy3h4cfiy5a2sigmisx0lvvsi1n0fbyb9ll5gacmy1b8nxa";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ fuse];
+
+  meta = {
+    homepage = http://djmount.sourceforge.net/;
+    description = "UPnP AV client, mounts as a Linux filesystem the media content of compatible UPnP AV devices";
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ stdenv.lib.maintainers.jagajaga ];
+    license = stdenv.lib.licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/dosfstools/default.nix b/nixpkgs/pkgs/tools/filesystems/dosfstools/default.nix
new file mode 100644
index 000000000000..369d2e74f301
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/dosfstools/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, libiconv }:
+
+stdenv.mkDerivation rec {
+  pname = "dosfstools";
+  version = "4.1";
+
+  src = fetchFromGitHub {
+    owner = "dosfstools";
+    repo = "dosfstools";
+    rev = "v${version}";
+    sha256 = "1a2zn1655d5f1m6jp9vpn3bp8yfxhcmxx3mx23ai9hmxiydiykr1";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ]
+    ++ stdenv.lib.optional stdenv.isDarwin libiconv;
+
+  configureFlags = [ "--enable-compat-symlinks" ];
+
+  meta = {
+    description = "Utilities for creating and checking FAT and VFAT file systems";
+    homepage = https://github.com/dosfstools/dosfstools;
+    platforms = stdenv.lib.platforms.linux ++ stdenv.lib.platforms.darwin;
+    license = stdenv.lib.licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/duff/default.nix b/nixpkgs/pkgs/tools/filesystems/duff/default.nix
new file mode 100644
index 000000000000..d68ad10bd0dc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/duff/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, gettext }:
+
+stdenv.mkDerivation {
+  pname = "duff";
+  # The last release (0.5.2) is more than 2 years old and lacks features like -D,
+  # limiting its usefulness. Upstream appears comatose if not dead.
+  version = "2014-07-03";
+
+  src = fetchFromGitHub {
+    sha256 = "1k2dx38pjzc5d624vw1cs5ipj9fprsm5vqv55agksc29m63lswnx";
+    rev = "f26d4837768b062a3f98fa075c791d9c8a0bb75c";
+    repo = "duff";
+    owner = "elmindreda";
+  };
+
+  nativeBuildInputs = [ autoreconfHook gettext ];
+
+  preAutoreconf = ''
+    # gettexttize rightly refuses to run non-interactively:
+    cp ${gettext}/bin/gettextize .
+    substituteInPlace gettextize \
+      --replace "read dummy" "echo '(Automatically acknowledged)' #"
+    ./gettextize
+    sed 's@po/Makefile.in\( .*\)po/Makefile.in@po/Makefile.in \1@' \
+      -i configure.ac
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "Quickly find duplicate files";
+    longDescription = ''
+      Duff is a Unix command-line utility for quickly finding duplicates in
+      a given set of files.
+    '';
+    homepage = https://duff.dreda.org/;
+    license = licenses.zlib;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/duperemove/default.nix b/nixpkgs/pkgs/tools/filesystems/duperemove/default.nix
new file mode 100644
index 000000000000..0950445bd3ec
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/duperemove/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub, libgcrypt
+, pkgconfig, glib, linuxHeaders ? stdenv.cc.libc.linuxHeaders, sqlite }:
+
+stdenv.mkDerivation rec {
+  pname = "duperemove";
+  version = "0.11.1";
+
+  src = fetchFromGitHub {
+    owner = "markfasheh";
+    repo = "duperemove";
+    rev = "v${version}";
+    sha256 = "1scz76pvpljvrpfn176125xwaqwyy4pirlm11sc9spb2hyzknw2z";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libgcrypt glib linuxHeaders sqlite ];
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  meta = with stdenv.lib; {
+    description = "A simple tool for finding duplicated extents and submitting them for deduplication";
+    homepage = https://github.com/markfasheh/duperemove;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ bluescreen303 thoughtpolice ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/e2fsprogs/default.nix b/nixpkgs/pkgs/tools/filesystems/e2fsprogs/default.nix
new file mode 100644
index 000000000000..0fd7062ac6cd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/e2fsprogs/default.nix
@@ -0,0 +1,73 @@
+{ stdenv, buildPackages, fetchurl, fetchpatch, pkgconfig, libuuid, gettext, texinfo, shared ? true }:
+
+stdenv.mkDerivation rec {
+  pname = "e2fsprogs";
+  version = "1.45.4";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "0jsclghxfzj9qmdd3qqk0gdmkrgjv2gakf8qz9dba37qkj1nk776";
+  };
+
+  outputs = [ "bin" "dev" "out" "man" "info" ];
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+  nativeBuildInputs = [ pkgconfig texinfo ];
+  buildInputs = [ libuuid gettext ];
+
+  # Only use glibc's __GNUC_PREREQ(X,Y) (checks if compiler is gcc version >= X.Y) when using glibc
+  patches = if stdenv.hostPlatform.libc == "glibc" then null
+    else [
+      (fetchpatch {
+      url = "https://raw.githubusercontent.com/void-linux/void-packages/9583597eb3e6e6b33f61dbc615d511ce030bc443/srcpkgs/e2fsprogs/patches/fix-glibcism.patch";
+      sha256 = "1gfcsr0i3q8q2f0lqza8na0iy4l4p3cbii51ds6zmj0y4hz2dwhb";
+      excludes = [ "lib/ext2fs/hashmap.h" ];
+      extraPrefix = "";
+      })
+    ];
+
+  postPatch = ''
+    # Remove six failing tests
+    # https://github.com/NixOS/nixpkgs/issues/65471
+    for test in m_image_mmp m_mmp m_mmp_bad_csum m_mmp_bad_magic t_mmp_1on t_mmp_2off; do
+        rm -r "tests/$test"
+    done
+  '';
+
+  configureFlags =
+    if stdenv.isLinux then [
+      # It seems that the e2fsprogs is one of the few packages that cannot be
+      # build with shared and static libs.
+      (if shared then "--enable-elf-shlibs" else "--disable-elf-shlibs")
+      "--enable-symlink-install"
+      "--enable-relative-symlinks"
+      "--with-crond-dir=no"
+      # fsck, libblkid, libuuid and uuidd are in util-linux-ng (the "libuuid" dependency)
+      "--disable-fsck"
+      "--disable-libblkid"
+      "--disable-libuuid"
+      "--disable-uuidd"
+    ] else [
+      "--enable-libuuid --disable-e2initrd-helper"
+    ];
+
+  checkInputs = [ buildPackages.perl ];
+  doCheck = true;
+
+  postInstall = ''
+    # avoid cycle between outputs
+    if [ -f $out/lib/${pname}/e2scrub_all_cron ]; then
+      mv $out/lib/${pname}/e2scrub_all_cron $bin/bin/
+    fi
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    homepage = http://e2fsprogs.sourceforge.net/;
+    description = "Tools for creating and checking ext2/ext3/ext4 filesystems";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.eelco ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/e2tools/default.nix b/nixpkgs/pkgs/tools/filesystems/e2tools/default.nix
new file mode 100644
index 000000000000..14f6afa99f0c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/e2tools/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, pkgconfig, e2fsprogs }:
+
+stdenv.mkDerivation rec {
+  pname = "e2tools";
+  version = "0.0.16";
+
+  src = fetchurl {
+    url = "http://home.earthlink.net/~k_sheff/sw/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "16wlc54abqz06dpipjdkw58bncpkxlj5f55lkzy07k3cg0bqwg2f";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ e2fsprogs ];
+
+  enableParallelBuilding = true;
+
+  meta = {
+    homepage = http://home.earthlink.net/~k_sheff/sw/e2tools/;
+    description = "Utilities to read/write/manipulate files in an ext2/ext3 filesystem";
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ stdenv.lib.maintainers.leenaars ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/encfs/default.nix b/nixpkgs/pkgs/tools/filesystems/encfs/default.nix
new file mode 100644
index 000000000000..19767b7013ae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/encfs/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchFromGitHub
+, cmake, pkgconfig, perl
+, gettext, fuse, openssl, tinyxml2
+}:
+
+stdenv.mkDerivation rec {
+  pname = "encfs";
+  version = "1.9.5";
+
+  src = fetchFromGitHub {
+    sha256 = "099rjb02knr6yz7przlnyj62ic0ag5ncs7vvcc36ikyqrmpqsdch";
+    rev = "v${version}";
+    repo = "encfs";
+    owner = "vgough";
+  };
+
+  buildInputs = [ gettext fuse openssl tinyxml2 ];
+  nativeBuildInputs = [ cmake pkgconfig perl ];
+
+  cmakeFlags =
+    [ "-DUSE_INTERNAL_TINYXML=OFF"
+      "-DBUILD_SHARED_LIBS=ON"
+      "-DINSTALL_LIBENCFS=ON"
+    ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "An encrypted filesystem in user-space via FUSE";
+    homepage = https://vgough.github.io/encfs;
+    license = with licenses; [ gpl3 lgpl3 ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/exfat/default.nix b/nixpkgs/pkgs/tools/filesystems/exfat/default.nix
new file mode 100644
index 000000000000..24db663aee02
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/exfat/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, fuse }:
+
+stdenv.mkDerivation rec {
+  pname = "exfat";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "relan";
+    repo = "exfat";
+    rev = "v${version}";
+    sha256 = "1q29pcysv747y6dis07953dkax8k9x50b5gg99gpz6rr46xwgkgb";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  buildInputs = [ fuse ];
+
+  meta = with stdenv.lib; {
+    description = "Free exFAT file system implementation";
+    inherit (src.meta) homepage;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ dywedir ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/ext4magic/default.nix b/nixpkgs/pkgs/tools/filesystems/ext4magic/default.nix
new file mode 100644
index 000000000000..40159b5fb6e6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/ext4magic/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, fetchpatch, file, libuuid, e2fsprogs, zlib, bzip2 }:
+
+stdenv.mkDerivation rec {
+  version = "0.3.2";
+  pname = "ext4magic";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/ext4magic/${pname}-${version}.tar.gz";
+    sha256 = "8d9c6a594f212aecf4eb5410d277caeaea3adc03d35378257dfd017ef20ea115";
+  };
+
+  patches = [
+    (fetchpatch {
+        url = https://sourceforge.net/p/ext4magic/tickets/10/attachment/ext4magic-0.3.2-i_dir_acl.patch;
+        sha256 = "1accydd8kigid68yir2fbihm3r3x8ws3iyznp25snkx41w6y6x8c";
+    })
+  ];
+
+  buildInputs = [ file libuuid e2fsprogs zlib bzip2 ];
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with stdenv.lib; {
+    description = "Recover / undelete files from ext3 or ext4 partitions";
+    longDescription = ''
+      ext4magic can recover/undelete files from ext3 or ext4 partitions
+      by retrieving file-information from the filesystem journal.
+
+      If the information in the journal are sufficient, ext4magic can
+      recover the most file types, with original filename, owner and group,
+      file mode bits and also the old atime/mtime stamps. 
+
+      It's much more effective and works much better than extundelete.
+    '';
+    homepage = http://ext4magic.sourceforge.net/ext4magic_en.html;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.rkoe ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/extundelete/default.nix b/nixpkgs/pkgs/tools/filesystems/extundelete/default.nix
new file mode 100644
index 000000000000..b84992e1acbb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/extundelete/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, e2fsprogs }:
+
+stdenv.mkDerivation {
+  version = "0.2.4";
+  pname = "extundelete";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/extundelete/extundelete-0.2.4.tar.bz2";
+    sha256 = "1x0r7ylxlp9lbj3d7sqf6j2a222dwy2nfpff05jd6mkh4ihxvyd1";
+  };
+
+  buildInputs = [ e2fsprogs ];
+
+  # inode field i_dir_acl was repurposed as i_size_high in e2fsprogs 1.44,
+  # breaking the build
+  patchPhase = ''
+    substituteInPlace src/insertionops.cc \
+      --replace "Directory ACL:" "High 32 bits of size:" \
+      --replace "inode.i_dir_acl" "inode.i_size_high"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Utility that can recover deleted files from an ext3 or ext4 partition";
+    homepage = http://extundelete.sourceforge.net/;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.domenkozar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/f2fs-tools/default.nix b/nixpkgs/pkgs/tools/filesystems/f2fs-tools/default.nix
new file mode 100644
index 000000000000..c5ec523e247d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/f2fs-tools/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchgit, autoreconfHook, libselinux, libuuid, pkgconfig }:
+
+stdenv.mkDerivation rec {
+  pname = "f2fs-tools";
+  version = "1.13.0";
+
+  src = fetchgit {
+    url = "https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs-tools.git";
+    rev = "refs/tags/v${version}";
+    sha256 = "0h6wincsvg6s232ajxblg66r5nx87v00a4w7xkbxgbl1qyny477j";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  buildInputs = [ libselinux libuuid ];
+
+  patches = [ ./f2fs-tools-cross-fix.patch ];
+
+  meta = with stdenv.lib; {
+    homepage = http://git.kernel.org/cgit/linux/kernel/git/jaegeuk/f2fs-tools.git/;
+    description = "Userland tools for the f2fs filesystem";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ehmry jagajaga ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/f2fs-tools/f2fs-tools-cross-fix.patch b/nixpkgs/pkgs/tools/filesystems/f2fs-tools/f2fs-tools-cross-fix.patch
new file mode 100644
index 000000000000..e01a97b0bc3c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/f2fs-tools/f2fs-tools-cross-fix.patch
@@ -0,0 +1,29 @@
+diff --git a/configure.ac b/configure.ac
+index 9b0e872..0108219 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -20,14 +20,16 @@ AC_DEFINE([F2FS_MINOR_VERSION], m4_bpatsubst(f2fs_tools_version,
+ 				[\([0-9]*\).\([0-9]*\)\(\w\|\W\)*], [\2]),
+ 				[Minor version for f2fs-tools])
+ 
+-AS_IF([test -d .git],[
+-	AC_DEFINE([F2FS_TOOLS_DATE],
+-		"m4_bpatsubst(f2fs_tools_gitdate,
+-		[\([0-9-]*\)\(\w\|\W\)*], [\1])",
+-		[f2fs-tools date based on Git commits])],[
+-	AC_DEFINE([F2FS_TOOLS_DATE],
+-		"f2fs_tools_date",
+-		[f2fs-tools date based on Source releases])])
++dnl AS_IF([test -d .git],[
++dnl	AC_DEFINE([F2FS_TOOLS_DATE],
++dnl		"m4_bpatsubst(f2fs_tools_gitdate,
++dnl		[\([0-9-]*\)\(\w\|\W\)*], [\1])",
++dnl		[f2fs-tools date based on Git commits])],[
++dnl	AC_DEFINE([F2FS_TOOLS_DATE],
++dnl		"f2fs_tools_date",
++dnl		[f2fs-tools date based on Source releases])])
++
++AC_DEFINE([F2FS_TOOLS_DATE], "f2fs_tools_date", [f2fs-tools date based on Source releases])
+ 
+ AC_CONFIG_SRCDIR([config.h.in])
+ AC_CONFIG_HEADER([config.h])
diff --git a/nixpkgs/pkgs/tools/filesystems/f3/default.nix b/nixpkgs/pkgs/tools/filesystems/f3/default.nix
new file mode 100644
index 000000000000..d28875829388
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/f3/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchFromGitHub
+, parted, udev
+}:
+
+stdenv.mkDerivation rec {
+  pname = "f3";
+  version = "7.2";
+
+  enableParallelBuilding = true;
+
+  src = fetchFromGitHub {
+    owner = "AltraMayor";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1iwdg0r4wkgc8rynmw1qcqz62l0ldgc8lrazq33msxnk5a818jgy";
+  };
+
+  buildInputs = [ parted udev ];
+
+  patchPhase = "sed -i 's/-oroot -groot//' Makefile";
+
+  buildFlags   = [ "all"                    # f3read, f3write
+                   "extra"                  # f3brew, f3fix, f3probe
+                 ];
+
+  installFlags = [ "PREFIX=$(out)"
+                   "install"
+                   "install-extra"
+                 ];
+
+  meta = {
+    description = "Fight Flash Fraud";
+    homepage = http://oss.digirati.com.br/f3/;
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = with stdenv.lib.maintainers; [ makefu ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/fatresize/default.nix b/nixpkgs/pkgs/tools/filesystems/fatresize/default.nix
new file mode 100644
index 000000000000..5a60f8c055e5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/fatresize/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchurl, parted, utillinux }:
+
+stdenv.mkDerivation rec {
+
+  version = "1.0.2";
+  pname = "fatresize";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/fatresize/fatresize-${version}.tar.bz2";
+    sha256 = "04wp48jpdvq4nn0dgbw5za07g842rnxlh9mig4mslz70zqs0izjm";
+  };
+
+  buildInputs = [ parted utillinux ];
+
+  # This patch helps this unmantained piece of software to be built against recent parted
+  # It basically modifies the detection scheme for parted version (the current one has no micro version defined)
+  # The second change is to include a header for a moved function since 1.6+ to current 3.1+ parted
+  # The third change is to modify the call to PED_ASSERT that is no longer defined with 2 params
+  patches = [ ./fatresize_parted_nix.patch ];
+
+  preConfigure = ''
+    echo "Replacing calls to ped_free with free ..."
+    substituteInPlace ./fatresize.c --replace ped_free free
+  '';
+
+  # Filesystem resize functions were reintroduced in parted 3.1 due to no other available free alternatives
+  # but in a sepparate library -> libparted-fs-resize --- that's why the added LDFLAG
+  makeFlags = [ "LDFLAGS=-lparted-fs-resize" ];
+
+  propagatedBuildInputs = [ parted utillinux ];
+
+  meta = with stdenv.lib; {
+    description = "The FAT16/FAT32 non-destructive resizer";
+    homepage = https://sourceforge.net/projects/fatresize;
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/fatresize/fatresize_parted_nix.patch b/nixpkgs/pkgs/tools/filesystems/fatresize/fatresize_parted_nix.patch
new file mode 100644
index 000000000000..e9aa87a2d564
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/fatresize/fatresize_parted_nix.patch
@@ -0,0 +1,74 @@
+diff --git a/aclocal.m4 b/aclocal.m4
+index 18e8176..2e75592 100644
+--- a/aclocal.m4
++++ b/aclocal.m4
+@@ -88,8 +88,15 @@ int main ()
+ 	if ( !(version = ped_get_version ()) )
+ 		exit(1);
+ 	if (sscanf(version, "%d.%d.%d", &major, &minor, &micro) != 3) {
+-		printf("%s, bad version string\n", version);
+-		exit(1);
++		if (sscanf(version, "%d.%d", &major, &minor) != 2)
++		{
++		  printf("%s, bad version string\n", version);
++		  exit(1);
++		}
++		else
++		{
++		  micro = 0;
++		}
+ 	}
+ 	
+ 	if ((major > $parted_config_major_version) ||
+diff --git a/configure b/configure
+index ed31457..e5f1705 100755
+--- a/configure
++++ b/configure
+@@ -4793,8 +4793,15 @@ int main ()
+ 	if ( !(version = ped_get_version ()) )
+ 		exit(1);
+ 	if (sscanf(version, "%d.%d.%d", &major, &minor, &micro) != 3) {
+-		printf("%s, bad version string\n", version);
+-		exit(1);
++		if (sscanf(version, "%d.%d", &major, &minor) != 2)
++		{
++		  printf("%s, bad version string\n", version);
++		  exit(1);
++		}
++		else
++		{
++		  micro = 0;
++		}
+ 	}
+ 
+ 	if ((major > $parted_config_major_version) ||
+diff --git a/fatresize.c b/fatresize.c
+index 424d5d2..e439102 100644
+--- a/fatresize.c
++++ b/fatresize.c
+@@ -30,6 +30,7 @@
+ #include <inttypes.h>
+ #include <parted/parted.h>
+ #include <parted/debug.h>
++#include <parted/filesys.h>
+ #include <parted/unit.h>
+ 
+ #include "config.h"
+@@ -217,7 +218,7 @@ fatresize_handler(PedException *ex)
+ static int
+ snap(PedSector* sector, PedSector new_sector, PedGeometry* range)
+ {
+-    PED_ASSERT(ped_geometry_test_sector_inside (range, *sector), return 0);
++    PED_ASSERT(ped_geometry_test_sector_inside (range, *sector));
+     if (!ped_geometry_test_sector_inside(range, new_sector))
+ 	return 0;
+ 
+@@ -281,7 +282,7 @@ snap_to_boundaries (PedGeometry* new_geom, PedGeometry* old_geom,
+ 			  end_part->geom.end, end_part->geom.start - 1, -1);
+ 	}
+ 
+-	PED_ASSERT (start <= end, return);
++	PED_ASSERT (start <= end);
+ 	ped_geometry_set (new_geom, start, end - start + 1);
+ }
+ 
diff --git a/nixpkgs/pkgs/tools/filesystems/fatsort/default.nix b/nixpkgs/pkgs/tools/filesystems/fatsort/default.nix
new file mode 100644
index 000000000000..aee053ad1355
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/fatsort/default.nix
@@ -0,0 +1,24 @@
+{stdenv, fetchurl, help2man}:
+
+stdenv.mkDerivation rec {
+  version = "1.5.0.456";
+  pname = "fatsort";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/fatsort/${pname}-${version}.tar.xz";
+    sha256 = "15fy2m4p9s8cfvnzdcd5ynkc2js0zklkkf34sjxdac7x2iwb8dd8";
+  };
+
+  patches = [ ./fatsort-Makefiles.patch ];
+
+  buildInputs = [ help2man ];
+
+  meta = with stdenv.lib; {
+    homepage = http://fatsort.sourceforge.net/;
+    description = "Sorts FAT partition table, for devices that don't do sorting of files";
+    maintainers = [ maintainers.kovirobi ];
+    license = licenses.gpl2;
+    inherit version;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/fatsort/fatsort-Makefiles.patch b/nixpkgs/pkgs/tools/filesystems/fatsort/fatsort-Makefiles.patch
new file mode 100644
index 000000000000..9c9f58e97ab4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/fatsort/fatsort-Makefiles.patch
@@ -0,0 +1,31 @@
+diff -uNr fatsort-1.3.365-a/Makefile fatsort-1.3.365-b/Makefile
+--- fatsort-1.3.365-a/Makefile	2014-04-08 19:19:36.000000000 +0100
++++ fatsort-1.3.365-b/Makefile	2014-12-14 18:31:55.982857720 +0000
+@@ -1,4 +1,5 @@
+-MANDIR=/usr/local/share/man/man1
++PREFIX=$(out)
++MANDIR=$(PREFIX)/share/man/man1
+ 
+ INSTALL_FLAGS=-m 0755 -p -D
+ 
+diff -uNr fatsort-1.3.365-a/src/Makefile fatsort-1.3.365-b/src/Makefile
+--- fatsort-1.3.365-a/src/Makefile	2014-04-08 19:19:36.000000000 +0100
++++ fatsort-1.3.365-b/src/Makefile	2014-12-14 18:32:08.282870461 +0000
+@@ -1,3 +1,5 @@
++PREFIX=$(out)
++
+ CC=gcc
+ LD=gcc
+ 
+@@ -33,9 +35,9 @@
+ 
+ # Mac OS X does not have a "/usr/local/sbin"
+ ifeq ($(UNAME),Darwin)
+-SBINDIR=/usr/local/bin
++SBINDIR=$(PREFIX)/bin
+ else
+-SBINDIR=/usr/local/sbin
++SBINDIR=$(PREFIX)/sbin
+ endif
+ 
+ OBJ=fatsort.o FAT_fs.o fileio.o endianness.o signal.o entrylist.o errors.o options.o clusterchain.o sort.o misc.o natstrcmp.o stringlist.o
diff --git a/nixpkgs/pkgs/tools/filesystems/file-rename/default.nix b/nixpkgs/pkgs/tools/filesystems/file-rename/default.nix
new file mode 100644
index 000000000000..8eeb052b22f0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/file-rename/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, perlPackages, makeWrapper }:
+
+perlPackages.buildPerlPackage {
+  pname = "File-Rename";
+  version = "0.20";
+
+  src = fetchurl {
+    url = mirror://cpan/authors/id/R/RM/RMBARKER/File-Rename-0.20.tar.gz;
+    sha256 = "1cf6xx2hiy1xalp35fh8g73j67r0w0g66jpcbc6971x9jbm7bvjy";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    wrapProgram $out/bin/rename \
+      --prefix PERL5LIB : $out/${perlPackages.perl.libPrefix}
+  '';
+
+  doCheck = !stdenv.isDarwin;
+
+  meta = with stdenv.lib; {
+    description = "Perl extension for renaming multiple files";
+    license = licenses.artistic1;
+    maintainers = with maintainers; [ peterhoeg ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/fsfs/default.nix b/nixpkgs/pkgs/tools/filesystems/fsfs/default.nix
new file mode 100644
index 000000000000..75e5280d391d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/fsfs/default.nix
@@ -0,0 +1,30 @@
+{stdenv, fetchurl, openssl, fuse}:
+
+throw "It still does not build"
+
+stdenv.mkDerivation {
+  name = "fsfs-0.1.1";
+  src = fetchurl {
+    url = mirror://sourceforge/fsfs/fsfs-0.1.1.tar.gz;
+    sha256 = "05wka9aq182li2r7gxcd8bb3rhpns7ads0k59v7w1jza60l57c74";
+  };
+
+  buildInputs = [ fuse openssl ];
+
+  patchPhase = ''
+    sed -i -e 's,CONFDIR=\(.*\),CONFDIR='$out/etc, \
+      -e 's,USERCONFPREFIX=\(.*\),USERCONFPREFIX='$out/var/lib, Makefile \
+      src/Makefile src/utils/Makefile
+  '';
+
+  preInstall = ''
+    mkdir -p $out/etc $out/var/lib
+    makeFlags="$makeFlags prefix=$out"
+  '';
+
+  meta = {
+    homepage = http://fsfs.sourceforge.net/;
+    description = "Secure distributed file system in user space";
+    license = stdenv.lib.licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/fuse-7z-ng/default.nix b/nixpkgs/pkgs/tools/filesystems/fuse-7z-ng/default.nix
new file mode 100644
index 000000000000..a8eb1118f4d3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/fuse-7z-ng/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchFromGitHub, fuse, p7zip, autoconf, automake, pkgconfig, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "fuse-7z-ng";
+  version = "git-2014-06-08";
+
+  src = fetchFromGitHub {
+    owner = "kedazo";
+    repo = pname;
+    rev = "eb5efb1f304c2b7bc2e0389ba06c9bf2ac4b932c";
+    sha256 = "17v1gcmg5q661b047zxjar735i4d3508dimw1x3z1pk4d1zjhp3x";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ fuse autoconf automake makeWrapper ];
+
+  preConfigure = "./autogen.sh";
+
+  libs = stdenv.lib.makeLibraryPath [ p7zip ]; # 'cause 7z.so is loaded manually
+  postInstall = ''
+    wrapProgram $out/bin/${pname} --suffix LD_LIBRARY_PATH : "${libs}/p7zip"
+
+    mkdir -p $out/share/doc/${pname}
+    cp TODO README NEWS COPYING ChangeLog AUTHORS $out/share/doc/${pname}/
+  '';
+
+  meta = with stdenv.lib; {
+    inherit version;
+    inherit (src.homepage);
+    description = "A FUSE-based filesystem that uses the p7zip library";
+    longDescription = ''
+      fuse-7z-ng is a FUSE file system that uses the p7zip
+      library to access all archive formats supported by 7-zip.
+
+      This project is a fork of fuse-7z ( https://gitorious.org/fuse-7z/fuse-7z ).
+    '';
+    platforms = platforms.linux;
+    license = licenses.gpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/fuse-overlayfs/default.nix b/nixpkgs/pkgs/tools/filesystems/fuse-overlayfs/default.nix
new file mode 100644
index 000000000000..fc174b12f100
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/fuse-overlayfs/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, lib, fetchFromGitHub, autoreconfHook, pkgconfig, fuse3 }:
+
+stdenv.mkDerivation rec {
+  pname = "fuse-overlayfs";
+  version = "0.7.4";
+
+  src = fetchFromGitHub {
+    owner = "containers";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "02286q4lc1paq735qmn5nyz31g1lwrkcnjkp05fdzcxf60h8paxk";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+
+  buildInputs = [ fuse3 ];
+
+  meta = with lib; {
+    description = "FUSE implementation for overlayfs";
+    longDescription = "An implementation of overlay+shiftfs in FUSE for rootless containers.";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ ma9e ];
+    platforms = platforms.unix;
+    inherit (src.meta) homepage;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/fuseiso/default.nix b/nixpkgs/pkgs/tools/filesystems/fuseiso/default.nix
new file mode 100644
index 000000000000..41c4cc84f966
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/fuseiso/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchurl, fetchpatch, pkgconfig, fuse, zlib, glib }:
+
+stdenv.mkDerivation {
+  name = "fuseiso-20070708";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/fuseiso/fuseiso/20070708/fuseiso-20070708.tar.bz2";
+    sha256 = "127xql52dcdhmh7s5m9xc6q39jdlj3zhbjar1j821kb6gl3jw94b";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ fuse zlib glib ];
+
+  patches = let fetchPatchFromDebian = { patch, sha256 }:
+    fetchpatch {
+      inherit sha256;
+      url = "https://sources.debian.net/data/main/f/fuseiso/20070708-3.2/debian/patches/${patch}";
+    };
+  in [
+    (fetchPatchFromDebian {
+      patch = "00-support_large_iso.patch";
+      sha256 = "1lmclb1qwzz5f4wlq693g83bblwnjjl73qhgfxbsaac5hnn2shjw";
+    })
+    (fetchPatchFromDebian { # CVE-2015-8837
+      patch = "02-prevent-buffer-overflow.patch";
+      sha256 = "1ls2pp3mh91pdb51qz1fsd8pwhbky6988bpd156bn7wgfxqzh8ig";
+    })
+    (fetchPatchFromDebian { # CVE-2015-8836
+      patch = "03-prevent-integer-overflow.patch";
+      sha256 = "100cw07fk4sa3hl7a1gk2hgz4qsxdw99y20r7wpidwwwzy463zcv";
+    })
+  ];
+
+  meta = {
+    homepage = https://sourceforge.net/projects/fuseiso;
+    description = "FUSE module to mount ISO filesystem images";
+    platforms = stdenv.lib.platforms.linux;
+    license = stdenv.lib.licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/gcsfuse/default.nix b/nixpkgs/pkgs/tools/filesystems/gcsfuse/default.nix
new file mode 100644
index 000000000000..f8d955dbfc17
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/gcsfuse/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "gcsfuse";
+  version = "0.29.0";
+
+  src = fetchFromGitHub {
+    owner = "googlecloudplatform";
+    repo = "gcsfuse";
+    rev = "v${version}";
+    sha256 = "11an7cxgg3x830mwlhyx50xkcv7zpa9aziz6gz1crwp8shr4hdik";
+  };
+
+  goPackagePath = "github.com/googlecloudplatform/gcsfuse";
+
+  subPackages = [ "." "tools/mount_gcsfuse" ];
+
+  postInstall = ''
+    ln -s $bin/bin/mount_gcsfuse $bin/bin/mount.gcsfuse
+    ln -s $bin/bin/mount_gcsfuse $bin/bin/mount.fuse.gcsfuse
+  '';
+
+  meta = with lib;{
+    description = "A user-space file system for interacting with Google Cloud Storage";
+    homepage = "https://cloud.google.com/storage/docs/gcs-fuse";
+    license = licenses.asl20;
+    platforms = platforms.unix;
+    maintainers = [];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/genext2fs/default.nix b/nixpkgs/pkgs/tools/filesystems/genext2fs/default.nix
new file mode 100644
index 000000000000..0ef85abd2b77
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/genext2fs/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation {
+  name = "genext2fs-1.4.1";
+  
+  src = fetchurl {
+    url = mirror://sourceforge/genext2fs/genext2fs-1.4.1.tar.gz;
+    sha256 = "1z7czvsf3ircvz2cw1cf53yifsq29ljxmj15hbgc79l6gbxbnka0";
+  };
+
+  # https://sourceforge.net/p/genext2fs/bugs/2/
+  # Will be fixed in the next release, whenever this happens
+  postPatch = ''
+    sed -e 's@4 [*] (EXT2_TIND_BLOCK+1)@-1+&@' -i genext2fs.c
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://genext2fs.sourceforge.net/;
+    description = "A tool to generate ext2 filesystem images without requiring root privileges";
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/genimage/default.nix b/nixpkgs/pkgs/tools/filesystems/genimage/default.nix
new file mode 100644
index 000000000000..e905222ad45e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/genimage/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, pkgconfig, libconfuse, gettext }:
+
+stdenv.mkDerivation rec {
+  pname = "genimage";
+  version = "9";
+
+  src = fetchurl {
+    url = "https://public.pengutronix.de/software/genimage/genimage-${version}.tar.xz";
+    sha256 = "0y4h8x8lqxam8m90rdfq8cg5137kvilxr3d1qzddpx7nxpvmmwv9";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libconfuse gettext ];
+
+  postInstall = ''
+    # As there is no manpage or built-in --help, add the README file for
+    # documentation.
+    docdir="$out/share/doc/genimage"
+    mkdir -p "$docdir"
+    cp -v README "$docdir"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://git.pengutronix.de/cgit/genimage;
+    description = "Generate filesystem images from directory trees";
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/genromfs/default.nix b/nixpkgs/pkgs/tools/filesystems/genromfs/default.nix
new file mode 100644
index 000000000000..1e6c73f725a8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/genromfs/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  version = "0.5.2";
+  pname = "genromfs";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/romfs/genromfs/${version}/${pname}-${version}.tar.gz";
+    sha256 = "0q6rpq7cmclmb4ayfyknvzbqysxs4fy8aiahlax1sb2p6k3pzwrh";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace "prefix = /usr" "prefix = $out" \
+      --replace "gcc" "cc"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://romfs.sourceforge.net/;
+    description = "Tool for creating romfs file system images";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ pxc ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/gitfs/default.nix b/nixpkgs/pkgs/tools/filesystems/gitfs/default.nix
new file mode 100644
index 000000000000..5b3794146665
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/gitfs/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchFromGitHub, python2Packages }:
+
+python2Packages.buildPythonApplication rec {
+  pname = "gitfs";
+  version = "0.5.2";
+
+  src = fetchFromGitHub {
+    owner = "PressLabs";
+    repo = "gitfs";
+    rev = version;
+    sha256 = "1jzwdwan8ndvp2lw6j7zbvg5k9rgf2d8dcxjrwc6bwyk59xdxn4p";
+  };
+
+  patchPhase = ''
+    # requirement checks are unnecessary at runtime
+    echo > requirements.txt
+  '';
+
+  buildInputs = with python2Packages; [ pytest pytestcov mock ];
+  propagatedBuildInputs = with python2Packages; [ atomiclong fusepy pygit2 ];
+
+  checkPhase = "py.test";
+  doCheck = false;
+
+  meta = {
+    description = "A FUSE filesystem that fully integrates with git";
+    longDescription = ''
+      A git remote repository's branch can be mounted locally,
+      and any subsequent changes made to the files will be
+      automatically committed to the remote.
+    '';
+    homepage = https://github.com/PressLabs/gitfs;
+    license = stdenv.lib.licenses.asl20;
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ stdenv.lib.maintainers.robbinch ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/glusterfs/default.nix b/nixpkgs/pkgs/tools/filesystems/glusterfs/default.nix
new file mode 100644
index 000000000000..b5fc12024b17
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/glusterfs/default.nix
@@ -0,0 +1,194 @@
+{stdenv, fetchurl, fuse, bison, flex_2_5_35, openssl, python3, ncurses, readline,
+ autoconf, automake, libtool, pkgconfig, zlib, libaio, libxml2, acl, sqlite,
+ liburcu, attr, makeWrapper, coreutils, gnused, gnugrep, which,
+ openssh, gawk, findutils, utillinux, lvm2, btrfs-progs, e2fsprogs, xfsprogs, systemd,
+ rsync, glibc
+}:
+let
+  s =
+  rec {
+    baseName="glusterfs";
+    # NOTE: On each glusterfs release, it should be checked if gluster added
+    #       new, or changed, Python scripts whose PYTHONPATH has to be set in
+    #       `postFixup` below, and whose runtime deps need to go into
+    #       `nativeBuildInputs`.
+    #       The command
+    #         find /nix/store/...-glusterfs-.../ -name '*.py' -executable
+    #       can help with finding new Python scripts.
+    version = "7.1";
+    name="${baseName}-${version}";
+    url="https://github.com/gluster/glusterfs/archive/v${version}.tar.gz";
+    sha256 = "11v5hwijbb08xq3dd4m6bkspa3v4vjzcnw6j1qyh0gjmc7yy4ml3";
+  };
+
+  buildInputs = [
+    fuse bison flex_2_5_35 openssl ncurses readline
+    autoconf automake libtool pkgconfig zlib libaio libxml2
+    acl sqlite liburcu attr makeWrapper utillinux
+    (python3.withPackages (pkgs: [
+      pkgs.flask
+      pkgs.prettytable
+      pkgs.requests
+      pkgs.pyxattr
+    ]))
+    # NOTE: `python3` has to be *AFTER* the above `python3.withPackages`,
+    #       to ensure that the packages are available but the `toPythonPath`
+    #       shell function used in `postFixup` is also still available.
+    python3
+  ];
+  # Some of the headers reference acl
+  propagatedBuildInputs = [
+    acl
+  ];
+  # Packages from which GlusterFS calls binaries at run-time from PATH,
+  # with comments on which commands are known to be called by it.
+  runtimePATHdeps = [
+    attr # getfattr setfattr
+    btrfs-progs # btrfs
+    coreutils # lots of commands in bash scripts
+    e2fsprogs # tune2fs
+    findutils # find
+    gawk # awk
+    glibc # getent
+    gnugrep # grep
+    gnused # sed
+    lvm2 # lvs
+    openssh # ssh
+    rsync # rsync, e.g. for geo-replication
+    systemd # systemctl
+    utillinux # mount umount
+    which # which
+    xfsprogs # xfs_info
+  ];
+in
+stdenv.mkDerivation
+{
+  inherit (s) name version;
+  inherit buildInputs propagatedBuildInputs;
+
+  patches = [
+    # Remove when https://bugzilla.redhat.com/show_bug.cgi?id=1489610 is fixed
+    ./glusterfs-fix-bug-1489610-glusterfind-var-data-under-prefix.patch
+  ];
+
+  postPatch = ''
+    sed -e '/chmod u+s/d' -i contrib/fuse-util/Makefile.am
+  '';
+
+   # Note that the VERSION file is something that is present in release tarballs
+   # but not in git tags (at least not as of writing in v3.10.1).
+   # That's why we have to create it.
+   # Without this, gluster (at least 3.10.1) will fail very late and cryptically,
+   # for example when setting up geo-replication, with a message like
+   #   Staging of operation 'Volume Geo-replication Create' failed on localhost : Unable to fetch master volume details. Please check the master cluster and master volume.
+   # What happens here is that the gverify.sh script tries to compare the versions,
+   # but fails when the version is empty.
+   # See upstream GlusterFS bug https://bugzilla.redhat.com/show_bug.cgi?id=1452705
+   preConfigure = ''
+     echo "v${s.version}" > VERSION
+    ./autogen.sh
+    export PYTHON=${python3}/bin/python
+    '';
+
+  configureFlags = [
+    ''--localstatedir=/var''
+    ];
+
+  makeFlags = [ "DESTDIR=$(out)" ];
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    cp -r $out/$out/* $out
+    rm -r $out/nix
+    '';
+
+  postFixup = ''
+    # glusterd invokes `gluster` and other utilities when telling other glusterd nodes to run commands.
+    # For example for `peer_georep-sshkey` key generation, so `$out/bin` is needed in the PATH.
+    # It also invokes bash scripts like `gverify.sh`.
+    # It also invokes executable Python scripts in `$out/libexec/glusterfs`, which is why we set up PYTHONPATH accordingly.
+    # We set up the paths for the main entry point executables.
+
+    GLUSTER_PATH="${stdenv.lib.makeBinPath runtimePATHdeps}:$out/bin"
+    GLUSTER_PYTHONPATH="$(toPythonPath $out):$out/libexec/glusterfs"
+    GLUSTER_LD_LIBRARY_PATH="$out/lib"
+
+    wrapProgram $out/bin/glusterd --set PATH "$GLUSTER_PATH" --set PYTHONPATH "$GLUSTER_PYTHONPATH" --set LD_LIBRARY_PATH "$GLUSTER_LD_LIBRARY_PATH"
+    wrapProgram $out/bin/gluster --set PATH "$GLUSTER_PATH" --set PYTHONPATH "$GLUSTER_PYTHONPATH" --set LD_LIBRARY_PATH "$GLUSTER_LD_LIBRARY_PATH"
+    wrapProgram $out/sbin/mount.glusterfs --set PATH "$GLUSTER_PATH" --set PYTHONPATH "$GLUSTER_PYTHONPATH" --set LD_LIBRARY_PATH "$GLUSTER_LD_LIBRARY_PATH"
+
+    # Set Python environment for the Python based utilities.
+    # It would be nice if there was a better way to do this, automatically for all of them.
+    # Also, this is brittle: If we forget a dependency or gluster adds a new one, things will break deep inside gluster.
+    # We should better try to get an explicit list of Python dependencies from gluster and ensure all of them are in the PYTHONPATH of all these python scripts.
+    # But at the time of writing (gluster 3.10), gluster only provides this in form of a gluster.spec file for RPM creation,
+    # and even that one is not complete (for example it doesn't mention the `flask` dependency).
+
+    wrapProgram $out/bin/gluster-eventsapi --set PATH "$GLUSTER_PATH" --set PYTHONPATH "$GLUSTER_PYTHONPATH" --set LD_LIBRARY_PATH "$GLUSTER_LD_LIBRARY_PATH"
+    wrapProgram $out/bin/gluster-georep-sshkey --set PATH "$GLUSTER_PATH" --set PYTHONPATH "$GLUSTER_PYTHONPATH" --set LD_LIBRARY_PATH "$GLUSTER_LD_LIBRARY_PATH"
+    wrapProgram $out/bin/gluster-mountbroker --set PATH "$GLUSTER_PATH" --set PYTHONPATH "$GLUSTER_PYTHONPATH" --set LD_LIBRARY_PATH "$GLUSTER_LD_LIBRARY_PATH"
+    wrapProgram $out/bin/glusterfind --set PATH "$GLUSTER_PATH" --set PYTHONPATH "$GLUSTER_PYTHONPATH" --set LD_LIBRARY_PATH "$GLUSTER_LD_LIBRARY_PATH"
+
+    # Note that we only wrap the symlinks in $out/bin, not the actual executable scripts in $out/libexec/glusterfs.
+    # This is because those scripts use `__file__` in their program logic
+    # (see https://github.com/gluster/glusterfs/blob/v3.10.1/extras/cliutils/cliutils.py#L116)
+    # which would break if we changed the file name (which is what `wrapProgram` does).
+    # Luckily, `libexec` scripts are never supposed to be invoked straight from PATH,
+    # instead they are invoked directly from `gluster` or `glusterd`, which is why it is
+    # sufficient to set PYTHONPATH for those executables.
+    #
+    # Exceptions to these rules are the `glusterfind` `brickfind.py` and `changelog.py`
+    # crawlers, which are directly invoked on other gluster nodes using a remote SSH command
+    # issues by `glusterfind`.
+
+    wrapProgram $out/share/glusterfs/scripts/eventsdash.py --set PATH "$GLUSTER_PATH" --set PYTHONPATH "$GLUSTER_PYTHONPATH" --set LD_LIBRARY_PATH "$GLUSTER_LD_LIBRARY_PATH"
+    wrapProgram $out/libexec/glusterfs/glusterfind/brickfind.py --set PATH "$GLUSTER_PATH" --set PYTHONPATH "$GLUSTER_PYTHONPATH" --set LD_LIBRARY_PATH "$GLUSTER_LD_LIBRARY_PATH"
+    wrapProgram $out/libexec/glusterfs/glusterfind/changelog.py --set PATH "$GLUSTER_PATH" --set PYTHONPATH "$GLUSTER_PYTHONPATH" --set LD_LIBRARY_PATH "$GLUSTER_LD_LIBRARY_PATH"
+    '';
+
+  doInstallCheck = true;
+
+  # Below we run Python programs. That generates .pyc/.pyo files.
+  # By default they are indeterministic because such files contain time stamps
+  # (see https://nedbatchelder.com/blog/200804/the_structure_of_pyc_files.html).
+  # So we use the same environment variables as in
+  #   https://github.com/NixOS/nixpkgs/blob/249b34aadca7038207492f29142a3456d0cecec3/pkgs/development/interpreters/python/mk-python-derivation.nix#L61
+  # to make these files deterministic.
+  # A general solution to this problem might be brought by #25707.
+  DETERMINISTIC_BUILD = 1;
+  PYTHONHASHSEED = 0;
+
+  installCheckPhase = ''
+    # Tests that the above programs work without import errors.
+    # For testing it manually in a shell you may want to substitute `$out` with `$(dirname $(readlink -f $(which gluster)))/../`.
+    $out/bin/glusterd --help
+    # $out/bin/gluster help # can't do this because even `gluster help` tries to write to `/var/log/glusterfs/cli.log`
+    $out/bin/gluster-eventsapi --help
+    $out/bin/gluster-georep-sshkey --help
+    $out/bin/gluster-mountbroker --help
+    $out/bin/glusterfind --help
+    # gfid_to_path.py doesn't accept --help, and it requires different arguments
+    # (a dir as single argument) than the usage prints when stdin is not a TTY.
+    # The `echo ""` is just so that stdin is not a TTY even if you try this line
+    # on a real TTY for testing purposes.
+    echo "" | (mkdir -p nix-test-dir-for-gfid_to_path && touch b && $out/libexec/glusterfs/gfind_missing_files/gfid_to_path.py nix-test-dir-for-gfid_to_path)
+    $out/share/glusterfs/scripts/eventsdash.py --help
+
+    # this gets falsely loaded as module by glusterfind
+    rm -r $out/bin/conf.py
+    '';
+
+  src = fetchurl {
+    inherit (s) url sha256;
+  };
+
+  meta = with stdenv.lib; {
+    inherit (s) version;
+    description = "Distributed storage system";
+    homepage = https://www.gluster.org;
+    license = licenses.lgpl3Plus; # dual licese: choice of lgpl3Plus or gpl2
+    maintainers = [ maintainers.raskin ];
+    platforms = with platforms; linux ++ freebsd;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/glusterfs/glusterfs-fix-bug-1489610-glusterfind-var-data-under-prefix.patch b/nixpkgs/pkgs/tools/filesystems/glusterfs/glusterfs-fix-bug-1489610-glusterfind-var-data-under-prefix.patch
new file mode 100644
index 000000000000..f08d73cf3a65
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/glusterfs/glusterfs-fix-bug-1489610-glusterfind-var-data-under-prefix.patch
@@ -0,0 +1,27 @@
+From f523afac49e24ecc0fa4ad85195135689cf445f0 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Niklas=20Hamb=C3=BCchen?= <mail@nh2.me>
+Date: Wed, 27 Sep 2017 21:36:41 +0200
+Subject: [PATCH] Fix "glusterfind saves var data under $prefix instead of
+ localstatedir". Fixes #1489610
+
+Change-Id: Id2362c20f34346c37acfb9eb1ad105d0b7b8b60f
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index f87d8a454..b4d3f5d10 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1118,7 +1118,7 @@ if test "x$exec_prefix" = xNONE; then
+ 	exec_prefix="$(eval echo $prefix)"
+ fi
+ GLUSTERFS_LIBEXECDIR="$(eval echo $libexecdir)/glusterfs"
+-GLUSTERFSD_MISCDIR="$(eval echo $prefix)/var/lib/misc/glusterfsd"
++GLUSTERFSD_MISCDIR="$(eval echo $localstatedir)/lib/misc/glusterfsd"
+ prefix=$old_prefix
+ exec_prefix=$old_exec_prefix
+
+--
+2.12.0
+
diff --git a/nixpkgs/pkgs/tools/filesystems/go-mtpfs/default.nix b/nixpkgs/pkgs/tools/filesystems/go-mtpfs/default.nix
new file mode 100644
index 000000000000..605e341c4d77
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/go-mtpfs/default.nix
@@ -0,0 +1,20 @@
+{ pkgconfig, libusb1, buildGoPackage, fetchgit }:
+
+buildGoPackage rec {
+  pname = "go-mtpfs";
+  version = "2018-02-09";
+  rev = "d6f8f3c05ce0ed31435057ec342268a0735863bb";
+
+  goPackagePath = "github.com/hanwen/go-mtpfs";
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libusb1 ];
+
+  src = fetchgit {
+    inherit rev;
+    url = "https://github.com/hanwen/go-mtpfs";
+    sha256 = "0a0d5dy92nzp1czh87hx3xfdcpa4jh14j0b64c025ha62s9a4gxk";
+  };
+
+  goDeps = ./deps.nix;
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/go-mtpfs/deps.nix b/nixpkgs/pkgs/tools/filesystems/go-mtpfs/deps.nix
new file mode 100644
index 000000000000..f558a53f7d2d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/go-mtpfs/deps.nix
@@ -0,0 +1,30 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.3.0
+[
+  {
+    goPackagePath = "github.com/hanwen/go-fuse";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hanwen/go-fuse";
+      rev = "d1c826d19ad0c8d0c7e5b4eb34ee0f2ae09f6cef";
+      sha256 = "0hn2iqsb6rip2b05fvcngyh0sazln2h3fx18khq4fv41n1iy11dc";
+    };
+  }
+  {
+    goPackagePath = "github.com/hanwen/usb";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hanwen/usb";
+      rev = "69aee4530ac705cec7c5344418d982aaf15cf0b1";
+      sha256 = "01k0c2g395j65vm1w37mmrfkg6nm900khjrrizzpmx8f8yf20dky";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "48ac38b7c8cbedd50b1613c0fccacfc7d88dfcdf";
+      sha256 = "037vs8sdvq310j3b6z9k62zlby1mzmsr9ha01rcy98dv5v8bkhin";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/filesystems/gocryptfs/default.nix b/nixpkgs/pkgs/tools/filesystems/gocryptfs/default.nix
new file mode 100644
index 000000000000..8491bf20e8f1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/gocryptfs/default.nix
@@ -0,0 +1,50 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+{ stdenv, buildGoPackage, fetchFromGitHub, openssl, pandoc, pkgconfig }:
+
+let
+  goFuseVersion = with stdenv.lib; substring 0 7 (head (filter (
+    d: d.goPackagePath == "github.com/hanwen/go-fuse"
+  ) (import ./deps.nix))).fetch.rev;
+in
+buildGoPackage rec {
+  pname = "gocryptfs";
+  version = "1.7.1";
+
+  goPackagePath = "github.com/rfjakob/gocryptfs";
+
+  nativeBuildInputs = [ pandoc pkgconfig ];
+  buildInputs = [ openssl ];
+
+  src = fetchFromGitHub {
+    owner = "rfjakob";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1zhzhvjhvi6xzib985bsnj9yzp4zsnm91m1679nbab6vm3kanq06";
+  };
+
+  postPatch = "rm -r tests";
+
+  buildFlagsArray = ''
+    -ldflags=
+      -X main.GitVersion=${version}
+      -X main.GitVersionFuse=${goFuseVersion}
+  '';
+
+  goDeps = ./deps.nix;
+
+  postBuild = ''
+    pushd go/src/github.com/rfjakob/gocryptfs/Documentation/
+    mkdir -p $out/share/man/man1
+    pandoc MANPAGE.md -s -t man -o $out/share/man/man1/gocryptfs.1
+    pandoc MANPAGE-XRAY.md -s -t man -o $out/share/man/man1/gocryptfs-xray.1
+    popd
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Encrypted overlay filesystem written in Go";
+    license = licenses.mit;
+    homepage = https://nuetzlich.net/gocryptfs/;
+    maintainers = with maintainers; [ flokli offline ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/gocryptfs/deps.nix b/nixpkgs/pkgs/tools/filesystems/gocryptfs/deps.nix
new file mode 100644
index 000000000000..cebad12327e0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/gocryptfs/deps.nix
@@ -0,0 +1,75 @@
+# file generated from Gopkg.lock using dep2nix (https://github.com/nixcloud/dep2nix)
+[
+  {
+    goPackagePath  = "github.com/hanwen/go-fuse";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hanwen/go-fuse";
+      rev =  "161a164844568ebf4bfaa68c90ba3a9f2914dda4";
+      sha256 = "1r0rs76k9zg60i02jlcqxi7m4ivla1xwv3ijwav7pfbyyr1yqhsx";
+    };
+  }
+  {
+    goPackagePath  = "github.com/jacobsa/crypto";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jacobsa/crypto";
+      rev =  "9f44e2d11115452dad8f404f029574422855f46a";
+      sha256 = "18c3cx8izxdajq22zdq0n19j9d2l6iickd3mz39j5h96kw7l5qmy";
+    };
+  }
+  {
+    goPackagePath  = "github.com/pkg/xattr";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pkg/xattr";
+      rev =  "7782c2d6871d6e659e1563dc19c86b845264a6fc";
+      sha256 = "1j3z5b9nwgkxia925rkiq8n5avhf4zhmsdbpn2s3xb16a2w66prd";
+    };
+  }
+  {
+    goPackagePath  = "github.com/rfjakob/eme";
+    fetch = {
+      type = "git";
+      url = "https://github.com/rfjakob/eme";
+      rev =  "2222dbd4ba467ab3fc7e8af41562fcfe69c0d770";
+      sha256 = "0c227ly3z8pqaqg22lpd8nzgqrfsbjx5gi9rp9ks1cmd11dv2gl9";
+    };
+  }
+  {
+    goPackagePath  = "github.com/sabhiram/go-gitignore";
+    fetch = {
+      type = "git";
+      url = "https://github.com/sabhiram/go-gitignore";
+      rev =  "d3107576ba9425fc1c85f4b3569c4631b805a02e";
+      sha256 = "1rdwyxgcsiwgmlqnc3k6h300mzlvjc3j21np4yh1h476wc8dvl0l";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev =  "a1f597ede03a7bef967a422b5b3a5bd08805a01e";
+      sha256 = "0yiczljll72ip2vkxgd6052rhpaba37a68vf6si3v8s8s3g870lc";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/sync";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sync";
+      rev =  "e225da77a7e68af35c70ccbf71af2b83e6acac3c";
+      sha256 = "0bh3583smcfw6jw3w6lp0za93rz7hpxfdz8vhxng75b7a6vdlw4p";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev =  "61b9204099cb1bebc803c9ffb9b2d3acd9d457d9";
+      sha256 = "110carnw1rxk9awbcdbg5is0zl28vynm649y7rza36pg1vlv8rrh";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/filesystems/gpart/default.nix b/nixpkgs/pkgs/tools/filesystems/gpart/default.nix
new file mode 100644
index 000000000000..59b4785888b2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/gpart/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "gpart";
+  version = "0.3";
+
+  # GitHub repository 'collating patches for gpart from all distributions':
+  src = fetchFromGitHub {
+    sha256 = "1lsd9k876p944k9s6sxqk5yh9yr7m42nbw9vlsllin7pd4djl4ya";
+    rev = version;
+    repo = "gpart";
+    owner = "baruch";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  enableParallelBuilding = true;
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    inherit (src.meta) homepage;
+    description = "Guess PC-type hard disk partitions";
+    longDescription = ''
+      Gpart is a tool which tries to guess the primary partition table of a
+      PC-type hard disk in case the primary partition table in sector 0 is
+      damaged, incorrect or deleted. The guessed table can be written to a file
+      or device.
+    '';
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/grive2/default.nix b/nixpkgs/pkgs/tools/filesystems/grive2/default.nix
new file mode 100644
index 000000000000..f325fc97e32c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/grive2/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub, pkgconfig, yajl, cmake, libgcrypt, curl, expat, boost, libiberty }:
+
+stdenv.mkDerivation rec {
+  version = "0.5.1";
+  pname = "grive2";
+
+  src = fetchFromGitHub {
+    owner = "vitalif";
+    repo = "grive2";
+    rev =  "v${version}";
+    sha256 = "1kv34ys8qarjsxpb1kd8dp7b3b4ycyiwjzd6mg97d3jk7405g6nm";
+  };
+
+  nativeBuildInputs = [ cmake pkgconfig ];
+
+  buildInputs = [ libgcrypt yajl curl expat stdenv boost libiberty ];
+
+  meta = with stdenv.lib; {
+    description = "A console Google Drive client";
+    homepage = https://github.com/vitalif/grive2;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/hfsprogs/default.nix b/nixpkgs/pkgs/tools/filesystems/hfsprogs/default.nix
new file mode 100644
index 000000000000..2032ca1c1e75
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/hfsprogs/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, fetchurl, openssl, libbsd }:
+
+let version = "332.25";
+    package_name = "hfsprogs"; in
+stdenv.mkDerivation {
+  name = "${package_name}-${version}";
+  srcs = [
+    (fetchurl {
+      url = "http://ftp.de.debian.org/debian/pool/main/h/hfsprogs/${package_name}_${version}-11.debian.tar.gz";
+      sha256 = "62d9b8599c66ebffbc57ce5d776e20b41341130d9b27341d63bda08460ebde7c";
+    })
+    (fetchurl {
+      url = "https://opensource.apple.com/tarballs/diskdev_cmds/diskdev_cmds-${version}.tar.gz";
+      sha256 = "74c9aeca899ed7f4bf155c65fc45bf0f250c0f6d57360ea953b1d536d9aa45e6";
+    })
+  ];
+
+  sourceRoot = "diskdev_cmds-" + version;
+  patches = [ "../debian/patches/*.patch" ];
+
+  buildInputs = [ openssl libbsd ];
+  makefile = "Makefile.lnx";
+
+  # Inspired by PKGBUILD of https://www.archlinux.org/packages/community/x86_64/hfsprogs/
+  installPhase = ''
+    # Create required package directories
+    install -m 755 -d "$out/bin"
+    install -m 755 -d "$out/share/${package_name}"
+    install -m 755 -d "$out/share/man/man8/"
+    # Copy executables
+    install -m 755 "newfs_hfs.tproj/newfs_hfs" "$out/bin/mkfs.hfsplus"
+    install -m 755 "fsck_hfs.tproj/fsck_hfs" "$out/bin/fsck.hfsplus"
+    # Copy shared data
+    install -m 644 "newfs_hfs.tproj/hfsbootdata.img" "$out/share/${package_name}/hfsbootdata"
+    # Copy man pages
+    install -m 644 "newfs_hfs.tproj/newfs_hfs.8" "$out/share/man/man8/mkfs.hfsplus.8"
+    install -m 644 "fsck_hfs.tproj/fsck_hfs.8" "$out/share/man/man8/fsck.hfsplus.8"
+  '';
+
+  meta = {
+    description = "HFS/HFS+ user space utils";
+    license = stdenv.lib.licenses.apsl20;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/httpfs/default.nix b/nixpkgs/pkgs/tools/filesystems/httpfs/default.nix
new file mode 100644
index 000000000000..b0f7981ebb3c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/httpfs/default.nix
@@ -0,0 +1,35 @@
+{ fetchurl, stdenv, pkgconfig, fuse, openssl, asciidoc
+, docbook_xml_dtd_45, docbook_xsl , libxml2, libxslt }:
+
+stdenv.mkDerivation rec {
+  name = "httpfs2-0.1.5";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/httpfs/httpfs2/${name}.tar.gz";
+    sha256 = "1h8ggvhw30n2r6w11n1s458ypggdqx6ldwd61ma4yd7binrlpjq1";
+  };
+
+  buildInputs =
+    [ pkgconfig fuse openssl
+      asciidoc docbook_xml_dtd_45 docbook_xsl libxml2 libxslt
+    ];
+
+  installPhase =
+    '' mkdir -p "$out/bin"
+       cp -v httpfs2 "$out/bin"
+
+       mkdir -p "$out/share/man/man1"
+       cp -v *.1 "$out/share/man/man1"
+    '';
+
+  meta = {
+    description = "HTTPFS2, a FUSE-based HTTP file system for Linux";
+
+    homepage = http://httpfs.sourceforge.net/;
+
+    license = stdenv.lib.licenses.gpl2Plus;
+
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/hubicfuse/default.nix b/nixpkgs/pkgs/tools/filesystems/hubicfuse/default.nix
new file mode 100644
index 000000000000..9b1c2b66e7aa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/hubicfuse/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub, pkgconfig, curl, openssl, fuse, libxml2, json_c, file }:
+
+stdenv.mkDerivation rec {
+  pname = "hubicfuse";
+  version = "3.0.1";
+
+  src = fetchFromGitHub {
+    owner = "TurboGit";
+    repo = "hubicfuse";
+    rev = "v${version}";
+    sha256 = "1x988hfffxgvqxh083pv3lj5031fz03sbgiiwrjpaiywfbhm8ffr";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ curl openssl fuse libxml2 json_c file ];
+  postInstall = ''
+    install hubic_token $out/bin
+    mkdir -p $out/sbin
+    ln -sf $out/bin/hubicfuse $out/sbin/mount.hubicfuse
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/TurboGit/hubicfuse;
+    description = "FUSE-based filesystem to access hubic cloud storage";
+    platforms = platforms.linux;
+    license = licenses.mit;
+    maintainers = [ maintainers.jpierre03 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/idsk/default.nix b/nixpkgs/pkgs/tools/filesystems/idsk/default.nix
new file mode 100644
index 000000000000..72ed4f0ee1b4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/idsk/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub, cmake }:
+
+stdenv.mkDerivation rec {
+
+  pname = "idsk";
+  version = "0.19";
+
+  src = fetchFromGitHub {
+    repo = "idsk";
+    owner = "cpcsdk";
+    rev = "v${version}";
+    sha256 = "0b4my5cz5kbzh4n65jr721piha6zixaxmfiss2zidip978k9rb6f";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp iDSK $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Manipulating CPC dsk images and files";
+    homepage = "https://github.com/cpcsdk/idsk" ;
+    license = licenses.mit;
+    maintainers = [ maintainers.genesis ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/ifuse/default.nix b/nixpkgs/pkgs/tools/filesystems/ifuse/default.nix
new file mode 100644
index 000000000000..aef6087d3f28
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/ifuse/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, usbmuxd, fuse, libimobiledevice }:
+
+stdenv.mkDerivation rec {
+  pname = "ifuse";
+  version = "2018-10-08";
+
+  src = fetchFromGitHub {
+    owner = "libimobiledevice";
+    repo = pname;
+    rev = "e75d32c34d0e8b80320f0a007d5ecbb3f55ef7f0";
+    sha256 = "1b9w2i0sliswlkkb890l9i0rxrf631xywxf8ihygfmjdsfw47h1m";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig fuse usbmuxd libimobiledevice ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/libimobiledevice/ifuse;
+    description = "A fuse filesystem implementation to access the contents of iOS devices";
+    longDescription = ''
+      Mount directories of an iOS device locally using fuse. By default the media
+      directory is mounted, options allow to also mount the sandbox container of an
+      app, an app's documents folder or even the root filesystem on jailbroken
+      devices.
+    '';
+    license = licenses.lgpl21Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ infinisil ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/irods/common.nix b/nixpkgs/pkgs/tools/filesystems/irods/common.nix
new file mode 100644
index 000000000000..902d7d7d1a1e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/irods/common.nix
@@ -0,0 +1,55 @@
+{ stdenv, bzip2, zlib, autoconf, automake, cmake, gnumake, help2man , texinfo, libtool , cppzmq , libarchive, avro-cpp, boost, jansson, zeromq, openssl, pam, libiodbc, kerberos, gcc, libcxx, which }:
+
+# Common attributes of irods packages
+
+with stdenv;
+
+{
+  enableParallelBuilding = true;
+
+  buildInputs = [ bzip2 zlib autoconf automake cmake gnumake help2man texinfo libtool cppzmq libarchive avro-cpp jansson zeromq openssl pam libiodbc kerberos gcc boost libcxx which ];
+
+  cmakeFlags = [
+    "-DIRODS_EXTERNALS_FULLPATH_CLANG=${stdenv.cc}"
+    "-DIRODS_EXTERNALS_FULLPATH_CLANG_RUNTIME=${stdenv.cc}"
+    "-DIRODS_EXTERNALS_FULLPATH_ARCHIVE=${libarchive.lib}"
+    "-DIRODS_EXTERNALS_FULLPATH_AVRO=${avro-cpp}"
+    "-DIRODS_EXTERNALS_FULLPATH_BOOST=${boost}"
+    "-DIRODS_EXTERNALS_FULLPATH_JANSSON=${jansson}"
+    "-DIRODS_EXTERNALS_FULLPATH_ZMQ=${zeromq}"
+    "-DIRODS_EXTERNALS_FULLPATH_CPPZMQ=${cppzmq}"
+    "-DIRODS_LINUX_DISTRIBUTION_NAME=nix"
+    "-DIRODS_LINUX_DISTRIBUTION_VERSION_MAJOR=${builtins.nixVersion}"
+    "-DCPACK_GENERATOR=TGZ"
+    "-DCMAKE_CXX_FLAGS=-I${libcxx}/include/c++/v1"
+  ];
+
+  preConfigure = ''
+    patchShebangs ./packaging
+    patchShebangs ./scripts
+    substituteInPlace CMakeLists.txt --replace "DESTINATION usr/bin" "DESTINATION bin"
+    substituteInPlace CMakeLists.txt --replace "INCLUDE_DIRS usr/include/" "INCLUDE_DIRS include/"
+    substituteInPlace CMakeLists.txt --replace "DESTINATION usr/lib/" "DESTINATION lib/"
+    export cmakeFlags="$cmakeFlags
+      -DCMAKE_INSTALL_PREFIX=$out
+    "
+  '';
+
+  meta = {
+    description = "Integrated Rule-Oriented Data System (iRODS)";
+    longDescription = ''
+      The Integrated Rule-Oriented Data System (iRODS) is open source data management
+      software used by research organizations and government agencies worldwide.
+      iRODS is released as a production-level distribution aimed at deployment in mission
+      critical environments.  It virtualizes data storage resources, so users can take
+      control of their data, regardless of where and on what device the data is stored.
+      As data volumes grow and data services become more complex, iRODS is increasingly
+      important in data management. The development infrastructure supports exhaustive
+      testing on supported platforms; plug-in support for microservices, storage resources,
+      drivers, and databases; and extensive documentation, training and support services.'';
+    homepage = https://irods.org;
+    license = stdenv.lib.licenses.bsd3;
+    maintainers = [ stdenv.lib.maintainers.bzizou ];
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/irods/default.nix b/nixpkgs/pkgs/tools/filesystems/irods/default.nix
new file mode 100644
index 000000000000..b6099c099f32
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/irods/default.nix
@@ -0,0 +1,91 @@
+{ stdenv, fetchurl, bzip2, zlib, autoconf, automake, cmake, gnumake, help2man , texinfo, libtool , cppzmq , libarchive, avro-cpp_llvm, boost, jansson, zeromq, openssl , pam, libiodbc, kerberos, gcc, libcxx, which }:
+
+with stdenv;
+
+let
+  avro-cpp=avro-cpp_llvm;
+in
+let
+  common = import ./common.nix {
+    inherit stdenv bzip2 zlib autoconf automake cmake gnumake
+            help2man texinfo libtool cppzmq libarchive jansson
+            zeromq openssl pam libiodbc kerberos gcc libcxx
+            boost avro-cpp which;
+  };
+in rec {
+
+  # irods: libs and server package
+  irods = stdenv.mkDerivation (common // rec {
+    version = "4.2.2";
+    prefix = "irods";
+    name = "${prefix}-${version}";
+
+    src = fetchurl {
+      url = "https://github.com/irods/irods/releases/download/${version}/irods-${version}.tar.gz";
+      sha256 = "0b89hs7sizwrs2ja7jl521byiwb58g297p0p7zg5frxmv4ig8dw7";
+    };
+
+    # Patches:
+    # irods_root_path.patch : the root path is obtained by stripping 3 items of the path,
+    #                         but we don't use /usr with nix, so remove only 2 items.
+    patches = [ ./irods_root_path.patch ];
+
+    # fix build with recent llvm versions
+    NIX_CFLAGS_COMPILE = "-Wno-deprecated-register -Wno-deprecated-declarations";
+
+    preConfigure = common.preConfigure + ''
+      patchShebangs ./test
+      substituteInPlace plugins/database/CMakeLists.txt --replace "COMMAND cpp" "COMMAND ${gcc.cc}/bin/cpp"
+      substituteInPlace cmake/server.cmake --replace "DESTINATION usr/sbin" "DESTINATION sbin"
+      substituteInPlace cmake/server.cmake --replace "IRODS_DOC_DIR usr/share" "IRODS_DOC_DIR share"
+      substituteInPlace cmake/runtime_library.cmake --replace "DESTINATION usr/lib" "DESTINATION lib"
+      substituteInPlace cmake/development_library.cmake --replace "DESTINATION usr/lib" "DESTINATION lib"
+      substituteInPlace cmake/development_library.cmake --replace "DESTINATION usr/include" "DESTINATION include"
+      export cmakeFlags="$cmakeFlags
+        -DCMAKE_EXE_LINKER_FLAGS=-Wl,-rpath,$out/lib
+        -DCMAKE_MODULE_LINKER_FLAGS=-Wl,-rpath,$out/lib
+        -DCMAKE_SHARED_LINKER_FLAGS=-Wl,-rpath,$out/lib
+        "
+
+      substituteInPlace cmake/server.cmake --replace SETUID ""
+    '';
+
+    meta = common.meta // {
+      longDescription = common.meta.longDescription + ''
+        This package provides the servers and libraries.'';
+    };
+  });
+
+
+  # icommands (CLI) package, depends on the irods package
+  irods-icommands = stdenv.mkDerivation (common // rec {
+     version = "4.2.2";
+     name = "irods-icommands-${version}";
+     src = fetchurl {
+       url = "https://github.com/irods/irods_client_icommands/archive/${version}.tar.gz";
+       sha256 = "15zcxrx0q5c3rli3snd0b2q4i0hs3zzcrbpnibbhsip855qvs77h";
+     };
+
+     buildInputs = common.buildInputs ++ [ irods ];
+
+     preConfigure = common.preConfigure + ''
+       patchShebangs ./bin
+     '';
+
+     cmakeFlags = common.cmakeFlags ++ [
+       "-DCMAKE_INSTALL_PREFIX=${out}"
+       "-DIRODS_DIR=${irods}/lib/irods/cmake"
+       "-DCMAKE_EXE_LINKER_FLAGS=-Wl,-rpath,${irods}/lib"
+       "-DCMAKE_MODULE_LINKER_FLAGS=-Wl,-rpath,${irods}/lib"
+       "-DCMAKE_SHARED_LINKER_FLAGS=-Wl,-rpath,${irods}/lib"
+    ];
+
+     meta = common.meta // {
+       description = common.meta.description + " CLI clients";
+       longDescription = common.meta.longDescription + ''
+         This package provides the CLI clients, called 'icommands'.'';
+       broken = true;
+     };
+  });
+}
+
diff --git a/nixpkgs/pkgs/tools/filesystems/irods/irods_root_path.patch b/nixpkgs/pkgs/tools/filesystems/irods/irods_root_path.patch
new file mode 100644
index 000000000000..16b6ba08cbb2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/irods/irods_root_path.patch
@@ -0,0 +1,71 @@
+diff -r -u irods-4.2.0.orig/lib/core/src/irods_default_paths.cpp irods-4.2.0/lib/core/src/irods_default_paths.cpp
+--- irods-4.2.0.orig/lib/core/src/irods_default_paths.cpp	2016-11-15 06:23:55.000000000 +0000
++++ irods-4.2.0/lib/core/src/irods_default_paths.cpp	2016-12-20 18:03:17.156883399 +0000
+@@ -18,7 +18,7 @@
+         try {
+             boost::filesystem::path path{dl_info.dli_fname};
+             path = boost::filesystem::canonical(path);
+-            path.remove_filename().remove_filename().remove_filename(); // Removes filename and the two directories (usr and lib) between libirods_common.so and base of irods install
++            path.remove_filename().remove_filename(); // Removes filename and the two directories (usr and lib) between libirods_common.so and base of irods install
+             return path;
+         } catch(const boost::filesystem::filesystem_error& e) {
+             THROW(-1, e.what());
+@@ -27,8 +27,7 @@
+ 
+     boost::filesystem::path
+     get_irods_config_directory() {
+-        boost::filesystem::path path{get_irods_root_directory()};
+-        path.append("etc").append("irods");
++        boost::filesystem::path path("/etc/irods");
+         return path;
+     }
+ 
+diff -r -u irods-4.2.0.orig/scripts/irods/paths.py irods-4.2.0/scripts/irods/paths.py
+--- irods-4.2.0.orig/scripts/irods/paths.py	2016-11-15 06:23:55.000000000 +0000
++++ irods-4.2.0/scripts/irods/paths.py	2016-12-21 15:17:07.437864606 +0000
+@@ -10,7 +10,7 @@
+     return os.path.join(root_directory(), 'var', 'lib', 'irods')
+ 
+ def config_directory():
+-    return os.path.join(root_directory(), 'etc', 'irods')
++    return os.path.join(os.path.abspath('/'), 'etc', 'irods')
+ 
+ def plugins_directory():
+     return os.path.join(root_directory(), 'usr', 'lib', 'irods', 'plugins')
+@@ -37,7 +37,7 @@
+ 
+ def version_path():
+     return os.path.join(
+-        irods_directory(),
++        home_directory(),
+         'VERSION.json')
+ 
+ def hosts_config_path():
+@@ -64,7 +64,7 @@
+ 
+ def log_directory():
+     return os.path.join(
+-        irods_directory(),
++        home_directory(),
+         'log')
+ 
+ def control_log_path():
+@@ -110,8 +110,7 @@
+ def server_bin_directory():
+     return os.path.join(
+         root_directory(),
+-        'usr',
+-        'sbin')
++        'bin')
+ 
+ def server_executable():
+     return os.path.join(
+@@ -132,7 +131,7 @@
+     return os.path.join(config_directory(), 'service_account.config')
+ 
+ def genosauth_path():
+-    return os.path.join(irods_directory(), 'clients', 'bin', 'genOSAuth')
++    return os.path.join(home_directory(), 'clients', 'bin', 'genOSAuth')
+ 
+ def irods_user_and_group_entries():
+     try:
diff --git a/nixpkgs/pkgs/tools/filesystems/jfsutils/ar-fix.patch b/nixpkgs/pkgs/tools/filesystems/jfsutils/ar-fix.patch
new file mode 100644
index 000000000000..697029cd5a8c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/jfsutils/ar-fix.patch
@@ -0,0 +1,10 @@
+--- jfsutils-1.1.15/configure.in.orig	2018-11-27 20:46:55.830242385 +0300
++++ jfsutils-1.1.15/configure.in	2018-11-27 20:47:00.596307630 +0300
+@@ -15,6 +15,7 @@
+ AC_PATH_PROG(LN, ln, ln)
+ AC_PROG_LN_S
+ AC_PROG_RANLIB
++AM_PROG_AR
+ 
+ dnl Checks for header files.
+ AC_HEADER_STDC
diff --git a/nixpkgs/pkgs/tools/filesystems/jfsutils/default.nix b/nixpkgs/pkgs/tools/filesystems/jfsutils/default.nix
new file mode 100644
index 000000000000..92dfe00c9514
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/jfsutils/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl, libuuid, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  name = "jfsutils-1.1.15";
+
+  src = fetchurl {
+    url = "http://jfs.sourceforge.net/project/pub/${name}.tar.gz";
+    sha256 = "0kbsy2sk1jv4m82rxyl25gwrlkzvl3hzdga9gshkxkhm83v1aji4";
+  };
+
+  patches = [
+    ./types.patch
+    ./hardening-format.patch
+    # required for cross-compilation
+    ./ar-fix.patch
+  ];
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ libuuid ];
+
+  meta = with stdenv.lib; {
+    description = "IBM JFS utilities";
+    homepage = http://jfs.sourceforge.net;
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/jfsutils/hardening-format.patch b/nixpkgs/pkgs/tools/filesystems/jfsutils/hardening-format.patch
new file mode 100644
index 000000000000..dd2a93a81ec6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/jfsutils/hardening-format.patch
@@ -0,0 +1,37 @@
+--- a/fscklog/fscklog.c	2016-01-29 04:59:54.102223291 +0000
++++ b/fscklog/fscklog.c	2016-01-29 05:00:10.707552565 +0000
+@@ -252,8 +252,8 @@
+ 
+ 	sprintf(debug_detail, " [%s:%d]\n", basename(file_name), line_number);
+ 
+-	printf(msg_string);
+-	printf(debug_detail);
++	printf("%s", msg_string);
++	printf("%s", debug_detail);
+ 
+ 	return 0;
+ }
+--- a/fscklog/display.c	2016-01-29 05:05:42.582133444 +0000
++++ b/fscklog/display.c	2016-01-29 05:05:47.541231780 +0000
+@@ -182,7 +182,7 @@
+ 				} else {
+ 					/* the record looks ok */
+ 					msg_txt = &log_entry[log_entry_pos];
+-					printf(msg_txt);
++					printf("%s", msg_txt);
+ 					/*
+ 					 * set up for the next record
+ 					 */
+--- a/logdump/helpers.c	2016-01-29 05:06:26.081996021 +0000
++++ b/logdump/helpers.c	2016-01-29 05:06:43.097333425 +0000
+@@ -95,8 +95,8 @@
+ 
+ 	sprintf(debug_detail, " [%s:%d]\n", file_name, line_number);
+ 
+-	printf(msg_string);
+-	printf(debug_detail);
++	printf("%s", msg_string);
++	printf("%s", debug_detail);
+ 
+ 	return 0;
+ }
diff --git a/nixpkgs/pkgs/tools/filesystems/jfsutils/types.patch b/nixpkgs/pkgs/tools/filesystems/jfsutils/types.patch
new file mode 100644
index 000000000000..a682f2695f9e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/jfsutils/types.patch
@@ -0,0 +1,12 @@
+diff -ru -x '*~' jfsutils-1.1.15-orig/libfs/devices.h jfsutils-1.1.15/libfs/devices.h
+--- jfsutils-1.1.15-orig/libfs/devices.h	2005-11-22 21:43:55.000000000 +0100
++++ jfsutils-1.1.15/libfs/devices.h	2013-01-28 13:58:56.888630278 +0100
+@@ -18,6 +18,8 @@
+ #ifndef H_DEVICES
+ #define H_DEVICES
+ 
++#include <inttypes.h>
++
+ #define GET	0
+ #define PUT	1
+ #define VRFY	2
diff --git a/nixpkgs/pkgs/tools/filesystems/jmtpfs/default.nix b/nixpkgs/pkgs/tools/filesystems/jmtpfs/default.nix
new file mode 100644
index 000000000000..58963753a51a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/jmtpfs/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub, pkgconfig, file, fuse, libmtp }:
+
+let version = "0.5"; in
+stdenv.mkDerivation {
+  pname = "jmtpfs";
+  inherit version;
+
+  src = fetchFromGitHub {
+    sha256 = "1pm68agkhrwgrplrfrnbwdcvx5lrivdmqw8pb5gdmm3xppnryji1";
+    rev = "v${version}";
+    repo = "jmtpfs";
+    owner = "JasonFerrara";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ file fuse libmtp ];
+
+  meta = with stdenv.lib; {
+    description = "A FUSE filesystem for MTP devices like Android phones";
+    homepage = https://github.com/JasonFerrara/jmtpfs;
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.coconnor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/lizardfs/default.nix b/nixpkgs/pkgs/tools/filesystems/lizardfs/default.nix
new file mode 100644
index 000000000000..3ae898d4ba8a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/lizardfs/default.nix
@@ -0,0 +1,59 @@
+{ stdenv
+, fetchFromGitHub
+, fetchpatch
+, cmake
+, makeWrapper
+, python2
+, db
+, fuse
+, asciidoc
+, libxml2
+, libxslt
+, docbook_xml_dtd_412
+, docbook_xsl
+, boost
+, pkgconfig
+, judy
+, pam
+, spdlog
+, zlib # optional
+}:
+
+stdenv.mkDerivation rec {
+  pname = "lizardfs";
+  version = "3.12.0";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0zk73wmx82ari3m2mv0zx04x1ggsdmwcwn7k6bkl5c0jnxffc4ax";
+  };
+
+  nativeBuildInputs = [ cmake pkgconfig makeWrapper ];
+
+  buildInputs =
+    [ db fuse asciidoc libxml2 libxslt docbook_xml_dtd_412 docbook_xsl
+      zlib boost judy pam spdlog python2
+    ];
+
+  patches = [
+    # Use system-provided spdlog instead of downloading an old one (next two patches)
+    (fetchpatch {
+      url = "https://salsa.debian.org/debian/lizardfs/raw/d003c371/debian/patches/system-spdlog.patch";
+      sha256 = "1znpqqzb0k5bb7s4d7abfxzn5ry1khz8r76sb808c95cpkw91a9i";
+    })
+    (fetchpatch {
+      url = "https://salsa.debian.org/debian/lizardfs/raw/bfcd5bcf/debian/patches/spdlog.patch";
+      sha256 = "0j44rb816i6kfh3y2qdha59c4ja6wmcnlrlq29il4ybxn42914md";
+    })
+  ];
+
+  meta = with stdenv.lib; {
+    homepage = "https://lizardfs.com";
+    description = "A highly reliable, scalable and efficient distributed file system";
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+    maintainers = [ maintainers.rushmorem ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/mergerfs/default.nix b/nixpkgs/pkgs/tools/filesystems/mergerfs/default.nix
new file mode 100644
index 000000000000..a7c9421f46ad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/mergerfs/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchFromGitHub, automake, autoconf, pkgconfig, gettext, libtool, pandoc, which, attr, libiconv }:
+
+stdenv.mkDerivation rec {
+  pname = "mergerfs";
+  version = "2.28.3";
+
+  src = fetchFromGitHub {
+    owner = "trapexit";
+    repo = pname;
+    rev = version;
+    sha256 = "1w6p3svc2yknp6swqg8lax6n9b31lyplb3j7r8nv14hbq4hymylx";
+  };
+
+  nativeBuildInputs = [
+    automake autoconf pkgconfig gettext libtool pandoc which
+  ];
+  buildInputs = [ attr libiconv ];
+
+  preConfigure = ''
+    echo "${version}" > VERSION
+  '';
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" "XATTR_AVAILABLE=1" ];
+  enableParallelBuilding = true;
+
+  postFixup = ''
+    ln -srf $out/bin/mergerfs $out/bin/mount.fuse.mergerfs
+    ln -srf $out/bin/mergerfs $out/bin/mount.mergerfs
+  '';
+
+  meta = {
+    description = "A FUSE based union filesystem";
+    homepage = "https://github.com/trapexit/mergerfs";
+    license = stdenv.lib.licenses.isc;
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = with stdenv.lib.maintainers; [ jfrankenau makefu ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/mergerfs/tools.nix b/nixpkgs/pkgs/tools/filesystems/mergerfs/tools.nix
new file mode 100644
index 000000000000..44337cf11619
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/mergerfs/tools.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromGitHub, coreutils, makeWrapper
+, rsync, python3, pythonPackages }:
+
+stdenv.mkDerivation rec {
+  pname = "mergerfs-tools";
+  version = "20190411";
+
+  src = fetchFromGitHub {
+    owner = "trapexit";
+    repo = pname;
+    rev = "6e41fc5848c7cc4408caea86f3991c8cc2ac85a1";
+    sha256 = "0izswg6bya13scvb37l3gkl7mvi8q7l11p4hp4phdlcwh9jvdzcj";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ python3 ];
+
+  makeFlags = [
+    "INSTALL=${coreutils}/bin/install"
+    "PREFIX=${placeholder "out"}"
+  ];
+
+  postInstall = with stdenv.lib; ''
+    wrapProgram $out/bin/mergerfs.balance --prefix PATH : ${makeBinPath [ rsync ]}
+    wrapProgram $out/bin/mergerfs.dup --prefix PATH : ${makeBinPath [ rsync ]}
+    wrapProgram $out/bin/mergerfs.mktrash --prefix PATH : ${makeBinPath [ pythonPackages.xattr ]}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Optional tools to help manage data in a mergerfs pool";
+    homepage = "https://github.com/trapexit/mergerfs-tools";
+    license = licenses.isc;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ jfrankenau ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/mhddfs/default.nix b/nixpkgs/pkgs/tools/filesystems/mhddfs/default.nix
new file mode 100644
index 000000000000..4d90e189b950
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/mhddfs/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl, fuse, pkgconfig, attr, uthash }:
+
+stdenv.mkDerivation rec {
+  pname = "mhddfs";
+  version = "0.1.39";
+
+  src = fetchurl {
+    url = "http://mhddfs.uvw.ru/downloads/mhddfs_${version}.tar.gz";
+    sha256 = "14ggmh91vv69fp2qpz0nxp0hprlw2wsijss2k2485hb0ci4cabvh";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ fuse attr uthash ];
+
+  patches = [
+    ./fix-format-security-error.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace src/main.c --replace "attr/xattr.h" "sys/xattr.h"
+    substituteInPlace src/tools.c --replace "attr/xattr.h" "sys/xattr.h"
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp mhddfs $out/bin/
+  '';
+
+  meta = {
+    homepage = http://mhddfs.uvw.ru/;
+    description = "Combines a several mount points into the single one";
+    license = stdenv.lib.licenses.gpl3;
+    maintainers = [ stdenv.lib.maintainers.makefu ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/mhddfs/fix-format-security-error.patch b/nixpkgs/pkgs/tools/filesystems/mhddfs/fix-format-security-error.patch
new file mode 100644
index 000000000000..35e58cf0ce9e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/mhddfs/fix-format-security-error.patch
@@ -0,0 +1,12 @@
+--- mhddfs-0.1.39/src/usage.c.old	2017-02-28 15:00:25.435438622 +0100
++++ mhddfs-0.1.39/src/usage.c	2017-02-28 15:00:33.847454958 +0100
+@@ -43,7 +43,7 @@
+ 		"\n"
+ 		" see fusermount(1) for information about other options\n"
+ 		"";
+-	fprintf(to, usage);
++	fputs(usage, to);
+ 	if (to==stdout) exit(0);
+ 	exit(-1);
+ }
+
diff --git a/nixpkgs/pkgs/tools/filesystems/mkspiffs/default.nix b/nixpkgs/pkgs/tools/filesystems/mkspiffs/default.nix
new file mode 100644
index 000000000000..6733b3df45ea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/mkspiffs/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, git }:
+
+# Changing the variables CPPFLAGS and BUILD_CONFIG_NAME can be done by
+# overriding the same-named attributes. See ./presets.nix for examples.
+
+stdenv.mkDerivation rec {
+  pname = "mkspiffs";
+  version = "0.2.3";
+
+  src = fetchFromGitHub {
+    owner = "igrr";
+    repo = "mkspiffs";
+    rev = version;
+    fetchSubmodules = true;
+    sha256 = "1fgw1jqdlp83gv56mgnxpakky0q6i6f922niis4awvxjind8pbm1";
+  };
+
+  nativeBuildInputs = [ git ];
+  buildFlags = [ "dist" ];
+  installPhase = ''
+    mkdir -p $out/bin
+    cp mkspiffs $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Tool to build and unpack SPIFFS images";
+    license = licenses.mit;
+    homepage = https://github.com/igrr/mkspiffs;
+    maintainers = with maintainers; [ haslersn ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/mkspiffs/presets.nix b/nixpkgs/pkgs/tools/filesystems/mkspiffs/presets.nix
new file mode 100644
index 000000000000..c0b74d9cf1b7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/mkspiffs/presets.nix
@@ -0,0 +1,20 @@
+{ lib, mkspiffs }:
+
+# We provide the same presets as the upstream
+
+lib.mapAttrs (
+  name: { CPPFLAGS }:
+  mkspiffs.overrideAttrs (drv: {
+    inherit CPPFLAGS;
+    BUILD_CONFIG_NAME = "-${name}";
+  })
+) {
+  arduino-esp8266.CPPFLAGS = [
+    "-DSPIFFS_USE_MAGIC_LENGTH=0"
+    "-DSPIFFS_ALIGNED_OBJECT_INDEX_TABLES=1"
+  ];
+
+  arduino-esp32.CPPFLAGS = [ "-DSPIFFS_OBJ_META_LEN=4" ];
+
+  esp-idf.CPPFLAGS = [ "-DSPIFFS_OBJ_META_LEN=4" ];
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/moosefs/default.nix b/nixpkgs/pkgs/tools/filesystems/moosefs/default.nix
new file mode 100644
index 000000000000..5d3c2d15fb2d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/moosefs/default.nix
@@ -0,0 +1,39 @@
+{ stdenv
+, fetchFromGitHub
+, makeWrapper
+, python
+, fuse
+, pkgconfig
+, libpcap
+, zlib 
+}:
+
+stdenv.mkDerivation rec {
+  pname = "moosefs";
+  version = "3.0.109";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1pwackc511fzx28w3an5qk738ykhpspvc1063w2hv901f213xjzw";
+  };
+
+  nativeBuildInputs = [ pkgconfig makeWrapper ];
+
+  buildInputs =
+    [ fuse libpcap zlib ];
+
+  postInstall = ''
+    wrapProgram $out/sbin/mfscgiserv \
+        --prefix PATH ":" "${python}/bin"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://moosefs.com;
+    description = "Open Source, Petabyte, Fault-Tolerant, Highly Performing, Scalable Network Distributed File System";
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.mfossen ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/mp3fs/default.nix b/nixpkgs/pkgs/tools/filesystems/mp3fs/default.nix
new file mode 100644
index 000000000000..b453067eaef8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/mp3fs/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, flac, fuse, lame, libid3tag, pkgconfig }:
+
+stdenv.mkDerivation rec {
+  pname = "mp3fs";
+  version = "0.91";
+
+  src = fetchurl {
+    url = "https://github.com/khenriks/mp3fs/releases/download/v${version}/${pname}-${version}.tar.gz";
+    sha256 = "14ngiqg24p3a0s6hp33zjl4i46d8qn4v9id36psycq3n3csmwyx4";
+  };
+
+  patches = [ ./fix-statfs-operation.patch ];
+
+  buildInputs = [ flac fuse lame libid3tag ];
+  nativeBuildInputs = [ pkgconfig ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "FUSE file system that transparently transcodes to MP3";
+    longDescription = ''
+      A read-only FUSE filesystem which transcodes between audio formats
+      (currently only FLAC to MP3) on the fly when files are opened and read.
+      It can let you use a FLAC collection with software and/or hardware
+      which only understands the MP3 format, or transcode files through
+      simple drag-and-drop in a file browser.
+    '';
+    homepage = https://khenriks.github.io/mp3fs/;
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/mp3fs/fix-statfs-operation.patch b/nixpkgs/pkgs/tools/filesystems/mp3fs/fix-statfs-operation.patch
new file mode 100644
index 000000000000..9b3094e60053
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/mp3fs/fix-statfs-operation.patch
@@ -0,0 +1,39 @@
+From fea072084ff9d7c4d2c688059a2462bb0e59a2ec Mon Sep 17 00:00:00 2001
+From: K Henriksson <kthenriksson@gmail.com>
+Date: Wed, 27 Aug 2014 21:55:18 -0700
+Subject: [PATCH] Fix statfs operation
+
+The statfs implementation does not properly translate names back to the
+original, since the major encoding rewrite. This corrects that, and
+should fix issue #27.
+---
+ src/fuseops.c | 15 +++++++++++++--
+ 1 file changed, 13 insertions(+), 2 deletions(-)
+
+diff --git a/src/fuseops.c b/src/fuseops.c
+index e7b4e7e..c333cbd 100644
+--- a/src/fuseops.c
++++ b/src/fuseops.c
+@@ -337,9 +337,20 @@ static int mp3fs_statfs(const char *path, struct statvfs *stbuf) {
+     if (!origpath) {
+         goto translate_fail;
+     }
+-    
++
++    /* pass-through for regular files */
++    if (statvfs(origpath, stbuf) == 0) {
++        goto passthrough;
++    } else {
++        /* Not really an error. */
++        errno = 0;
++    }
++
++    find_original(origpath);
++
+     statvfs(origpath, stbuf);
+-    
++
++passthrough:
+     free(origpath);
+ translate_fail:
+     return -errno;
diff --git a/nixpkgs/pkgs/tools/filesystems/mtdutils/default.nix b/nixpkgs/pkgs/tools/filesystems/mtdutils/default.nix
new file mode 100644
index 000000000000..3b355c92226b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/mtdutils/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, autoreconfHook, pkgconfig, cmocka, acl, libuuid, lzo, zlib, zstd }:
+
+stdenv.mkDerivation rec {
+  pname = "mtd-utils";
+  version = "2.1.1";
+
+  src = fetchurl {
+    url = "ftp://ftp.infradead.org/pub/${pname}/${pname}-${version}.tar.bz2";
+    sha256 = "1lijl89l7hljx8xx70vrz9srd3h41v5gh4b0lvqnlv831yvyh5cd";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ] ++ stdenv.lib.optional doCheck cmocka;
+  buildInputs = [ acl libuuid lzo zlib zstd ];
+
+  configureFlags = [
+    (stdenv.lib.enableFeature doCheck "unit-tests")
+    (stdenv.lib.enableFeature doCheck "tests")
+  ];
+  enableParallelBuilding = true;
+
+  doCheck = stdenv.hostPlatform == stdenv.buildPlatform;
+
+  meta = {
+    description = "Tools for MTD filesystems";
+    license = stdenv.lib.licenses.gpl2Plus;
+    homepage = "http://www.linux-mtd.infradead.org/";
+    maintainers = with stdenv.lib.maintainers; [ viric ];
+    platforms = with stdenv.lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/mtools/UNUSED-darwin.patch b/nixpkgs/pkgs/tools/filesystems/mtools/UNUSED-darwin.patch
new file mode 100644
index 000000000000..46b790afd30a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/mtools/UNUSED-darwin.patch
@@ -0,0 +1,11 @@
+--- mtools/sysincludes.h.orig	2017-04-01 20:59:46.083196540 +0100
++++ mtools/sysincludes.h	2017-04-01 20:59:12.855030456 +0100
+@@ -103,7 +103,7 @@
+ # define PACKED __attribute__ ((packed))
+ # if __GNUC__ == 2 && __GNUC_MINOR__ > 6 || __GNUC__ >= 3
+ /* gcc 2.6.3 doesn't have "unused" */		/* mool */
+-#  define UNUSED(x) x __attribute__ ((unused));x
++#  define UNUSED(x) x
+ #  define UNUSEDP __attribute__ ((unused))
+ # else
+ #  define UNUSED(x) x
diff --git a/nixpkgs/pkgs/tools/filesystems/mtools/default.nix b/nixpkgs/pkgs/tools/filesystems/mtools/default.nix
new file mode 100644
index 000000000000..b477ad8deace
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/mtools/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "mtools-4.0.23";
+
+  src = fetchurl {
+    url = "mirror://gnu/mtools/${name}.tar.bz2";
+    sha256 = "1qwfxzr964fasxlzhllahk8mzh7c82s808wvly95dsqsflkdp27i";
+  };
+
+  patches = stdenv.lib.optional stdenv.isDarwin ./UNUSED-darwin.patch;
+
+  # fails to find X on darwin
+  configureFlags = stdenv.lib.optional stdenv.isDarwin "--without-x";
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    homepage = https://www.gnu.org/software/mtools/;
+    description = "Utilities to access MS-DOS disks";
+    platforms = platforms.unix;
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/mtpfs/default.nix b/nixpkgs/pkgs/tools/filesystems/mtpfs/default.nix
new file mode 100644
index 000000000000..bf048113714f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/mtpfs/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, pkgconfig, fuse, libmtp, glib, libmad, libid3tag }:
+
+stdenv.mkDerivation rec {
+  name = "mtpfs-1.1";
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ fuse libmtp glib libid3tag libmad ];
+
+  # adding LIBS is a hack, duno why it does not find libid3tag.so by adding buildInputs
+  preConfigure = ''
+    export MAD_CFLAGS=${libmad}/include
+    export MAD_LIBS=${libmad}/lib/libmad.so
+    export LIBS=${libid3tag}/lib/libid3tag.so
+  '';
+
+  src = fetchurl {
+    url = "https://www.adebenham.com/files/mtp/${name}.tar.gz";
+    sha256 = "07acrqb17kpif2xcsqfqh5j4axvsa4rnh6xwnpqab5b9w5ykbbqv";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/cjd/mtpfs;
+    description = "FUSE Filesystem providing access to MTP devices";
+    platforms = platforms.all;
+    license = licenses.gpl3;
+    maintainers = [ maintainers.qknight ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/netatalk/default.nix b/nixpkgs/pkgs/tools/filesystems/netatalk/default.nix
new file mode 100644
index 000000000000..0a4207d0715f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/netatalk/default.nix
@@ -0,0 +1,61 @@
+{ fetchurl, stdenv, autoreconfHook, pkgconfig, perl, python
+, db, libgcrypt, avahi, libiconv, pam, openssl, acl
+, ed, glibc, libevent
+}:
+
+stdenv.mkDerivation rec{
+  name = "netatalk-3.1.12";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/netatalk/netatalk/${name}.tar.bz2";
+    sha256 = "1ld5mnz88ixic21m6f0xcgf8v6qm08j6xabh1dzfj6x47lxghq0m";
+  };
+
+  patches = [
+    ./no-suid.patch
+    ./omitLocalstatedirCreation.patch
+  ];
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig perl python python.pkgs.wrapPython ];
+
+  buildInputs = [ db libgcrypt avahi libiconv pam openssl acl libevent ];
+
+  configureFlags = [
+    "--with-bdb=${db.dev}"
+    "--with-ssl-dir=${openssl.dev}"
+    "--with-lockfile=/run/lock/netatalk"
+    "--with-libevent=${libevent.dev}"
+    "--localstatedir=/var/lib"
+  ];
+
+  # Expose librpcsvc to the linker for afpd
+  # Fixes errors that showed up when closure-size was merged:
+  # afpd-nfsquota.o: In function `callaurpc':
+  # netatalk-3.1.7/etc/afpd/nfsquota.c:78: undefined reference to `xdr_getquota_args'
+  # netatalk-3.1.7/etc/afpd/nfsquota.c:78: undefined reference to `xdr_getquota_rslt'
+  postConfigure = ''
+    ${ed}/bin/ed -v etc/afpd/Makefile << EOF
+    /^afpd_LDADD
+    /am__append_2
+    a
+      ${glibc.static}/lib/librpcsvc.a \\
+    .
+    w
+    EOF
+  '';
+
+  postInstall = ''
+    buildPythonPath ${python.pkgs.dbus-python}
+    patchPythonScript $out/bin/afpstats
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = {
+    description = "Apple Filing Protocol Server";
+    homepage = http://netatalk.sourceforge.net/;
+    license = stdenv.lib.licenses.gpl3;
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = with stdenv.lib.maintainers; [ jcumming ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/netatalk/no-suid.patch b/nixpkgs/pkgs/tools/filesystems/netatalk/no-suid.patch
new file mode 100644
index 000000000000..194c1f5fac9f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/netatalk/no-suid.patch
@@ -0,0 +1,11 @@
+diff --git a/bin/afppasswd/Makefile.am b/bin/afppasswd/Makefile.am
+index 578eac1..d17aa22 100644
+--- a/bin/afppasswd/Makefile.am
++++ b/bin/afppasswd/Makefile.am
+@@ -16,5 +16,5 @@ AM_CFLAGS = @SSL_CFLAGS@ -I$(top_srcdir)/sys \
+ 
+ install-exec-hook:
+ if HAVE_OPENSSL
+-	chmod u+s $(DESTDIR)$(bindir)/afppasswd
++#	chmod u+s $(DESTDIR)$(bindir)/afppasswd
+ endif
diff --git a/nixpkgs/pkgs/tools/filesystems/netatalk/omitLocalstatedirCreation.patch b/nixpkgs/pkgs/tools/filesystems/netatalk/omitLocalstatedirCreation.patch
new file mode 100644
index 000000000000..01c4ee9ba478
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/netatalk/omitLocalstatedirCreation.patch
@@ -0,0 +1,19 @@
+diff --git a/config/Makefile.am b/config/Makefile.am
+index c98a2ab..58b7f0a 100644
+--- a/config/Makefile.am
++++ b/config/Makefile.am
+@@ -36,10 +36,10 @@ endif
+ #
+ 
+ install-data-local: install-config-files
+-	mkdir -pm 0755 $(DESTDIR)$(localstatedir)/netatalk/
+-	mkdir -pm 0755 $(DESTDIR)$(localstatedir)/netatalk/CNID/
+-	$(INSTALL_DATA) $(srcdir)/README $(DESTDIR)$(localstatedir)/netatalk/
+-	$(INSTALL_DATA) $(srcdir)/README $(DESTDIR)$(localstatedir)/netatalk/CNID/
++#	mkdir -pm 0755 $(DESTDIR)$(localstatedir)/netatalk/
++#	mkdir -pm 0755 $(DESTDIR)$(localstatedir)/netatalk/CNID/
++#	$(INSTALL_DATA) $(srcdir)/README $(DESTDIR)$(localstatedir)/netatalk/
++#	$(INSTALL_DATA) $(srcdir)/README $(DESTDIR)$(localstatedir)/netatalk/CNID/
+ 
+ uninstall-local:
+ 	@for f in $(CONFFILES) $(GENFILES); do \
diff --git a/nixpkgs/pkgs/tools/filesystems/nilfs-utils/default.nix b/nixpkgs/pkgs/tools/filesystems/nilfs-utils/default.nix
new file mode 100644
index 000000000000..dd8116ff4013
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/nilfs-utils/default.nix
@@ -0,0 +1,63 @@
+{ stdenv, fetchurl, fetchpatch, libuuid, libselinux }:
+let
+  sourceInfo = rec {
+    version = "2.2.7";
+    url = "http://nilfs.sourceforge.net/download/nilfs-utils-${version}.tar.bz2";
+    sha256 = "01f09bvjk2crx65pxmxiw362wkkl3v2v144dfn3i7bk5gz253xic";
+    baseName = "nilfs-utils";
+    name = "${baseName}-${version}";
+  };
+in
+stdenv.mkDerivation {
+  src = fetchurl {
+    url = sourceInfo.url;
+    sha256 = sourceInfo.sha256;
+  };
+
+  inherit (sourceInfo) name version;
+  buildInputs = [libuuid libselinux];
+
+  preConfigure = ''
+    sed -e '/sysconfdir=\/etc/d; ' -i configure
+    sed -e "s@sbindir=/sbin@sbindir=$out/sbin@" -i configure
+    sed -e 's@/sbin/@'"$out"'/sbin/@' -i ./lib/cleaner*.c
+  '';
+
+  patches = [
+    # Fix w/musl
+    (fetchpatch {
+      url = "https://github.com/nilfs-dev/nilfs-utils/commit/115fe4b976858c487cf83065f513d8626089579a.patch";
+      sha256 = "0h89jz9l5d4rqj647ljbnv451l4ncqpsvzj0v70mn5391hfwsjlv";
+    })
+    (fetchpatch {
+      url =  "https://github.com/nilfs-dev/nilfs-utils/commit/51b32c614be9e98c32de7f531ee600ca0740946f.patch";
+      sha256 = "1ycq83c6jjy74aif47v075k5y2szzwhq6mbcrpd1z4b4i1x6yhpn";
+    })
+  ];
+
+  configureFlags = [
+    "--with-libmount"
+  ] ++ stdenv.lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
+    # AC_FUNC_MALLOC is broken on cross builds.
+    "ac_cv_func_malloc_0_nonnull=yes"
+    "ac_cv_func_realloc_0_nonnull=yes"
+  ];
+
+  # FIXME: https://github.com/NixOS/patchelf/pull/98 is in, but stdenv
+  # still doesn't use it
+  #
+  # To make sure patchelf doesn't mistakenly keep the reference via
+  # build directory
+  postInstall = ''
+    find . -name .libs | xargs rm -rf
+  '';
+
+  meta = with stdenv.lib; {
+    description = "NILFS utilities";
+    maintainers = [ maintainers.raskin ];
+    platforms = platforms.linux;
+    license =  with licenses; [ gpl2 lgpl21 ];
+    downloadPage = "http://nilfs.sourceforge.net/en/download.html";
+    updateWalker = true;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/nixpart/0.4/blivet.nix b/nixpkgs/pkgs/tools/filesystems/nixpart/0.4/blivet.nix
new file mode 100644
index 000000000000..003a0e24fb52
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/nixpart/0.4/blivet.nix
@@ -0,0 +1,50 @@
+# FIXME: Unify with pkgs/development/python-modules/blivet/default.nix.
+
+{ stdenv, fetchurl, buildPythonApplication, pykickstart, pyparted, pyblock
+, libselinux, cryptsetup, multipath_tools, lsof, utillinux
+, useNixUdev ? true, systemd ? null
+# useNixUdev is here for bw compatibility
+}:
+
+assert useNixUdev -> systemd != null;
+
+buildPythonApplication rec {
+  pname = "blivet";
+  version = "0.17-1";
+
+  src = fetchurl {
+    url = "https://git.fedorahosted.org/cgit/blivet.git/snapshot/"
+        + "${pname}-${version}.tar.bz2";
+    sha256 = "1k3mws2q0ryb7422mml6idmaasz2i2v6ngyvg6d976dx090qnmci";
+  };
+
+  patches = [ ./blivet.patch ];
+
+  postPatch = ''
+    sed -i -e 's|"multipath"|"${multipath_tools}/sbin/multipath"|' \
+      blivet/devicelibs/mpath.py blivet/devices.py
+    sed -i -e '/"wipefs"/ {
+      s|wipefs|${utillinux.bin}/sbin/wipefs|
+      s/-f/--force/
+    }' blivet/formats/__init__.py
+    sed -i -e 's|"lsof"|"${lsof}/bin/lsof"|' blivet/formats/fs.py
+    sed -i -r -e 's|"(u?mount)"|"${utillinux.bin}/bin/\1"|' blivet/util.py
+    sed -i -e '/find_library/,/find_library/ {
+      c libudev = "${systemd.lib}/lib/libudev.so.1"
+    }' blivet/pyudev.py
+  '';
+
+  propagatedBuildInputs = [
+    pykickstart pyparted pyblock libselinux cryptsetup
+  ] ++ stdenv.lib.optional useNixUdev systemd;
+
+  # tests are currently _heavily_ broken upstream
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    homepage = https://fedoraproject.org/wiki/Blivet;
+    description = "Module for management of a system's storage configuration";
+    license = with licenses; [ gpl2Plus lgpl21Plus ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/nixpart/0.4/blivet.patch b/nixpkgs/pkgs/tools/filesystems/nixpart/0.4/blivet.patch
new file mode 100644
index 000000000000..d53231a84fd6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/nixpart/0.4/blivet.patch
@@ -0,0 +1,51 @@
+diff --git a/blivet/pyudev.py b/blivet/pyudev.py
+index 705b93d..7268d71 100644
+--- a/blivet/pyudev.py
++++ b/blivet/pyudev.py
+@@ -7,9 +7,9 @@ from ctypes import *
+ 
+ 
+ # XXX this one may need some tweaking...
+-def find_library(name, somajor=0):
++def find_library(name):
+     env = os.environ.get("LD_LIBRARY_PATH")
+-    common = ["/lib64", "/lib"]
++    common = ["/lib64", "/lib", "/lib/x86_64-linux-gnu", "/lib/i686-linux-gnu"]
+ 
+     if env:
+         libdirs = env.split(":") + common
+@@ -19,7 +19,7 @@ def find_library(name, somajor=0):
+     libdirs = filter(os.path.isdir, libdirs)
+ 
+     for dir in libdirs:
+-        files = fnmatch.filter(os.listdir(dir), "lib%s.so.%d" % (name, somajor))
++        files = fnmatch.filter(os.listdir(dir), "lib%s.so.*" % name)
+         files = [os.path.join(dir, file) for file in files]
+ 
+         if files:
+@@ -32,11 +32,10 @@ def find_library(name, somajor=0):
+ 
+ # find the udev library
+ name = "udev"
+-somajor = 1
+-libudev = find_library(name=name, somajor=somajor)
++libudev = find_library(name)
+ 
+ if not libudev or not os.path.exists(libudev):
+-    raise ImportError, "No library named %s.%d" % (name, somajor)
++    raise ImportError, "No library named lib%s.so" % name
+ 
+ # load the udev library
+ libudev = CDLL(libudev)
+diff --git a/blivet/deviceaction.py b/blivet/deviceaction.py
+index 705b93d..60f8f32 100644
+--- a/blivet/deviceaction.py
++++ b/blivet/deviceaction.py
+@@ -467,6 +467,7 @@ def execute(self):
+ 
+                 self.device.disk.format.commitToDisk()
+ 
++            self.device.setup()
+             self.device.format.create(device=self.device.path,
+                                       options=self.device.formatArgs)
+ 
diff --git a/nixpkgs/pkgs/tools/filesystems/nixpart/0.4/cryptsetup.nix b/nixpkgs/pkgs/tools/filesystems/nixpart/0.4/cryptsetup.nix
new file mode 100644
index 000000000000..b5f3a2f3e1f6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/nixpart/0.4/cryptsetup.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, lvm2, libgcrypt, libuuid, pkgconfig, popt
+, enablePython ? true, python ? null
+}:
+
+assert enablePython -> python != null;
+
+stdenv.mkDerivation rec {
+  name = "cryptsetup-1.6.3";
+
+  src = fetchurl {
+    url = "http://cryptsetup.googlecode.com/files/${name}.tar.bz2";
+    sha256 = "1n1qk5chyjspbiianrdb55fhb4wl0vfyqz2br05vfb24v4qlgbx2";
+  };
+
+  configureFlags = [ "--enable-cryptsetup-reencrypt" ]
+                ++ stdenv.lib.optional enablePython "--enable-python";
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ lvm2 libgcrypt libuuid popt ]
+             ++ stdenv.lib.optional enablePython python;
+
+  meta = {
+    homepage = http://code.google.com/p/cryptsetup/;
+    description = "LUKS for dm-crypt";
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = with stdenv.lib.maintainers; [ ];
+    platforms = with stdenv.lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/nixpart/0.4/default.nix b/nixpkgs/pkgs/tools/filesystems/nixpart/0.4/default.nix
new file mode 100644
index 000000000000..5d7a9dd14ec0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/nixpart/0.4/default.nix
@@ -0,0 +1,77 @@
+{ stdenv, fetchurl, python, buildPythonApplication
+, libselinux
+# Propagated to blivet
+, useNixUdev ? true
+# Needed by NixOps
+, udevSoMajor ? null
+# Propagated dependencies
+, pkgs, urlgrabber
+}:
+
+let
+  blivet = import ./blivet.nix {
+    inherit stdenv fetchurl buildPythonApplication;
+    inherit pykickstart pyparted pyblock cryptsetup libselinux multipath_tools;
+    inherit useNixUdev;
+    inherit (pkgs) lsof utillinux systemd;
+  };
+
+  cryptsetup = import ./cryptsetup.nix {
+    inherit stdenv fetchurl python;
+    inherit (pkgs) pkgconfig libgcrypt libuuid popt lvm2;
+  };
+
+  dmraid = import ./dmraid.nix {
+    inherit stdenv fetchurl lvm2;
+  };
+
+  lvm2 = import ./lvm2.nix {
+    inherit stdenv fetchurl;
+    inherit (pkgs) pkgconfig utillinux systemd coreutils;
+  };
+
+  multipath_tools = import ./multipath-tools.nix {
+    inherit stdenv fetchurl lvm2;
+    inherit (pkgs) readline systemd libaio gzip;
+  };
+
+  parted = import ./parted.nix {
+    inherit stdenv fetchurl;
+    inherit (pkgs) utillinux readline libuuid gettext check lvm2;
+  };
+
+  pyblock = import ./pyblock.nix {
+    inherit stdenv fetchurl python lvm2 dmraid;
+  };
+
+  pykickstart = import ./pykickstart.nix {
+    inherit stdenv fetchurl python buildPythonApplication urlgrabber;
+  };
+
+  pyparted = import ./pyparted.nix {
+    inherit stdenv fetchurl python buildPythonApplication parted;
+    inherit (pkgs) pkgconfig e2fsprogs;
+  };
+
+in buildPythonApplication rec {
+  pname = "nixpart";
+  version = "0.4.1";
+  disabled = python.isPy3k;
+
+  src = fetchurl {
+    url = "https://github.com/NixOS/nixpart/archive/v${version}.tar.gz";
+    sha256 = "0avwd8p47xy9cydlbjxk8pj8q75zyl68gw2w6fnkk78dcb1a3swp";
+  };
+
+  propagatedBuildInputs = [ blivet ];
+
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "NixOS storage manager/partitioner";
+    homepage = "https://github.com/NixOS/nixpart";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.aszlig ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/nixpart/0.4/dmraid.nix b/nixpkgs/pkgs/tools/filesystems/nixpart/0.4/dmraid.nix
new file mode 100644
index 000000000000..fd6088891023
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/nixpart/0.4/dmraid.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, lvm2 }:
+
+stdenv.mkDerivation rec {
+  name = "dmraid-1.0.0.rc15";
+
+  src = fetchurl {
+    url = "https://people.redhat.com/~heinzm/sw/dmraid/src/old/${name}.tar.bz2";
+    sha256 = "01bcaq0sc329ghgj7f182xws7jgjpdc41bvris8fsiprnxc7511h";
+  };
+
+  preConfigure = "cd */";
+
+  buildInputs = [ lvm2 ];
+
+  meta = {
+    description = "Old-style RAID configuration utility";
+    longDescription = ''
+      Old RAID configuration utility (still under development, though).
+      It is fully compatible with modern kernels and mdadm recognizes
+      its volumes. May be needed for rescuing an older system or nuking
+      the metadata when reformatting.
+    '';
+    maintainers = [ stdenv.lib.maintainers.raskin ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/nixpart/0.4/lvm2.nix b/nixpkgs/pkgs/tools/filesystems/nixpart/0.4/lvm2.nix
new file mode 100644
index 000000000000..804b052b61ae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/nixpart/0.4/lvm2.nix
@@ -0,0 +1,64 @@
+{ stdenv, fetchurl, pkgconfig, systemd, utillinux, coreutils }:
+
+let
+  v = "2.02.106";
+in
+
+stdenv.mkDerivation {
+  name = "lvm2-${v}";
+
+  src = fetchurl {
+    url = "ftp://sources.redhat.com/pub/lvm2/releases/LVM2.${v}.tgz";
+    sha256 = "0nr833bl0q4zq52drjxmmpf7bs6kqxwa5kahwwxm9411khkxz0vc";
+  };
+
+  configureFlags = [
+    "--disable-readline"
+    "--enable-udev_rules"
+    "--enable-udev_sync"
+    "--enable-pkgconfig"
+    "--enable-applib"
+  ];
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ systemd ];
+
+  preConfigure =
+    ''
+      substituteInPlace scripts/lvmdump.sh \
+        --replace /usr/bin/tr ${coreutils}/bin/tr
+      substituteInPlace scripts/lvm2_activation_generator_systemd_red_hat.c \
+        --replace /usr/sbin/lvm $out/sbin/lvm \
+        --replace /usr/bin/udevadm ${systemd}/bin/udevadm
+
+      sed -i /DEFAULT_SYS_DIR/d Makefile.in
+      sed -i /DEFAULT_PROFILE_DIR/d conf/Makefile.in
+    '';
+
+  enableParallelBuilding = true;
+
+  #patches = [ ./purity.patch ];
+
+  # To prevent make install from failing.
+  installFlags = [ "OWNER=" "GROUP=" "confdir=${placeholder "out"}/etc" ];
+
+  # Install systemd stuff.
+  #installTargets = "install install_systemd_generators install_systemd_units install_tmpfiles_configuration";
+
+  postInstall =
+    ''
+      substituteInPlace $out/lib/udev/rules.d/13-dm-disk.rules \
+        --replace $out/sbin/blkid ${utillinux.bin}/sbin/blkid
+
+      # Systemd stuff
+      mkdir -p $out/etc/systemd/system $out/lib/systemd/system-generators
+      cp scripts/blk_availability_systemd_red_hat.service $out/etc/systemd/system
+      cp scripts/lvm2_activation_generator_systemd_red_hat $out/lib/systemd/system-generators
+    '';
+
+  meta = {
+    homepage = http://sourceware.org/lvm2/;
+    description = "Tools to support Logical Volume Management (LVM) on Linux";
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/nixpart/0.4/multipath-tools.nix b/nixpkgs/pkgs/tools/filesystems/nixpart/0.4/multipath-tools.nix
new file mode 100644
index 000000000000..f30bd958cf3a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/nixpart/0.4/multipath-tools.nix
@@ -0,0 +1,36 @@
+# FIXME: unify with pkgs/os-specific/linux/multipath-tools/default.nix.
+
+{ stdenv, fetchurl, lvm2, libaio, gzip, readline, systemd }:
+
+stdenv.mkDerivation rec {
+  name = "multipath-tools-0.4.9";
+
+  src = fetchurl {
+    url = "http://christophe.varoqui.free.fr/multipath-tools/${name}.tar.bz2";
+    sha256 = "04n7kazp1zrlqfza32phmqla0xkcq4zwn176qff5ida4a60whi4d";
+  };
+
+  sourceRoot = ".";
+
+  buildInputs = [ lvm2 libaio readline gzip ];
+
+  preBuild =
+    ''
+      makeFlagsArray=(GZIP="-9" prefix=$out mandir=$out/share/man/man8 man5dir=$out/share/man/man5 LIB=lib)
+
+      substituteInPlace multipath/Makefile --replace /etc $out/etc
+      substituteInPlace kpartx/Makefile --replace /etc $out/etc
+
+      substituteInPlace kpartx/kpartx.rules --replace /sbin/kpartx $out/sbin/kpartx
+      substituteInPlace kpartx/kpartx_id --replace /sbin/dmsetup ${lvm2}/sbin/dmsetup
+
+      substituteInPlace libmultipath/defaults.h --replace /lib/udev/scsi_id ${systemd.lib}/lib/udev/scsi_id
+      substituteInPlace libmultipath/hwtable.c --replace /lib/udev/scsi_id ${systemd.lib}/lib/udev/scsi_id
+    '';
+
+  meta = {
+    description = "Tools for the Linux multipathing driver";
+    homepage = http://christophe.varoqui.free.fr/;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/nixpart/0.4/parted.nix b/nixpkgs/pkgs/tools/filesystems/nixpart/0.4/parted.nix
new file mode 100644
index 000000000000..046fe81e64ac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/nixpart/0.4/parted.nix
@@ -0,0 +1,50 @@
+{ stdenv, fetchurl, lvm2, libuuid, gettext, readline
+, utillinux, check, enableStatic ? false }:
+
+stdenv.mkDerivation rec {
+  name = "parted-3.1";
+
+  src = fetchurl {
+    url = "mirror://gnu/parted/${name}.tar.xz";
+    sha256 = "05fa4m1bky9d13hqv91jlnngzlyn7y4rnnyq6d86w0dg3vww372y";
+  };
+
+  buildInputs = [ libuuid ]
+    ++ stdenv.lib.optional (readline != null) readline
+    ++ stdenv.lib.optional (gettext != null) gettext
+    ++ stdenv.lib.optional (lvm2 != null) lvm2;
+
+  configureFlags =
+       (if (readline != null)
+        then [ "--with-readline" ]
+        else [ "--without-readline" ])
+    ++ stdenv.lib.optional (lvm2 == null) "--disable-device-mapper"
+    ++ stdenv.lib.optional enableStatic "--enable-static";
+
+  doCheck = true;
+  checkInputs = [ check utillinux ];
+
+  meta = {
+    description = "Create, destroy, resize, check, and copy partitions";
+
+    longDescription = ''
+      GNU Parted is an industrial-strength package for creating, destroying,
+      resizing, checking and copying partitions, and the file systems on
+      them.  This is useful for creating space for new operating systems,
+      reorganising disk usage, copying data on hard disks and disk imaging.
+
+      It contains a library, libparted, and a command-line frontend, parted,
+      which also serves as a sample implementation and script backend.
+    '';
+
+    homepage = https://www.gnu.org/software/parted/;
+    license = stdenv.lib.licenses.gpl3Plus;
+
+    maintainers = [
+      # Add your name here!
+    ];
+
+    # GNU Parted requires libuuid, which is part of util-linux-ng.
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/nixpart/0.4/pyblock.nix b/nixpkgs/pkgs/tools/filesystems/nixpart/0.4/pyblock.nix
new file mode 100644
index 000000000000..2abab9057376
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/nixpart/0.4/pyblock.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, python, lvm2, dmraid }:
+
+stdenv.mkDerivation rec {
+  pname = "pyblock";
+  version = "0.53";
+  md5_path = "f6d33a8362dee358517d0a9e2ebdd044";
+
+  src = fetchurl {
+    url = "https://src.fedoraproject.org/repo/pkgs/python-pyblock/"
+        + "${pname}-${version}.tar.bz2/${md5_path}/${pname}-${version}.tar.bz2";
+    sha256 = "f6cef88969300a6564498557eeea1d8da58acceae238077852ff261a2cb1d815";
+  };
+
+  postPatch = ''
+    sed -i -e 's|/usr/include/python|${python}/include/python|' \
+           -e 's/-Werror *//' -e 's|/usr/|'"$out"'/|' Makefile
+  '';
+
+  buildInputs = [ python lvm2 dmraid ];
+
+  makeFlags = [
+    "USESELINUX=0"
+    "SITELIB=$(out)/lib/${python.libPrefix}/site-packages"
+  ];
+
+  meta = {
+    description = "Interface for working with block devices";
+    license = stdenv.lib.licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/nixpart/0.4/pykickstart.nix b/nixpkgs/pkgs/tools/filesystems/nixpart/0.4/pykickstart.nix
new file mode 100644
index 000000000000..9d067359c44a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/nixpart/0.4/pykickstart.nix
@@ -0,0 +1,30 @@
+{ stdenv, python, buildPythonApplication, fetchurl, urlgrabber }:
+
+buildPythonApplication rec {
+  pname = "pykickstart";
+  version = "1.99.39";
+  md5_path = "d249f60aa89b1b4facd63f776925116d";
+
+  src = fetchurl {
+    url = "https://src.fedoraproject.org/repo/pkgs/pykickstart/"
+        + "${pname}-${version}.tar.gz/${md5_path}/${pname}-${version}.tar.gz";
+    sha256 = "e0d0f98ac4c5607e6a48d5c1fba2d50cc804de1081043f9da68cbfc69cad957a";
+  };
+
+  postPatch = ''
+    sed -i -e "s/for tst in tstList/for tst in sorted(tstList, \
+               key=lambda m: m.__name__)/" tests/baseclass.py
+  '';
+
+  propagatedBuildInputs = [ urlgrabber ];
+
+  checkPhase = ''
+    ${python}/bin/${python.executable} tests/baseclass.py -vv
+  '';
+
+  meta = {
+    homepage = http://fedoraproject.org/wiki/Pykickstart;
+    description = "Read and write Fedora kickstart files";
+    license = stdenv.lib.licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/nixpart/0.4/pyparted.nix b/nixpkgs/pkgs/tools/filesystems/nixpart/0.4/pyparted.nix
new file mode 100644
index 000000000000..e0947b01f51b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/nixpart/0.4/pyparted.nix
@@ -0,0 +1,42 @@
+{ stdenv, fetchurl, pkgconfig, python, buildPythonApplication, parted, e2fsprogs }:
+
+buildPythonApplication rec {
+  pname = "pyparted";
+  version = "3.10";
+
+  src = fetchurl {
+    url = "https://fedorahosted.org/releases/p/y/pyparted/${pname}-${version}.tar.gz";
+    sha256 = "17wq4invmv1nfazaksf59ymqyvgv3i8h4q03ry2az0s9lldyg3dv";
+  };
+
+  postPatch = ''
+    sed -i -e 's|/sbin/mke2fs|${e2fsprogs}&|' tests/baseclass.py
+    sed -i -e '
+      s|e\.path\.startswith("/tmp/temp-device-")|"temp-device-" in e.path|
+    ' tests/test__ped_ped.py
+  '' + stdenv.lib.optionalString stdenv.isi686 ''
+    # remove some integers in this test case which overflow on 32bit systems
+    sed -i -r -e '/class *UnitGetSizeTestCase/,/^$/{/[0-9]{11}/d}' \
+      tests/test__ped_ped.py
+  '';
+
+  preConfigure = ''
+    PATH="${parted}/sbin:$PATH"
+  '';
+
+  nativeBuildInputs = [ pkgconfig ];
+
+  propagatedBuildInputs = [ parted ];
+
+  checkPhase = ''
+    patchShebangs Makefile
+    make test PYTHON=${python.executable}
+  '';
+
+  meta = {
+    homepage = https://fedorahosted.org/pyparted/;
+    description = "Python interface for libparted";
+    license = stdenv.lib.licenses.gpl2Plus;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/nixpart/default.nix b/nixpkgs/pkgs/tools/filesystems/nixpart/default.nix
new file mode 100644
index 000000000000..809c5256873e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/nixpart/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl, buildPythonApplication, blivet }:
+
+buildPythonApplication rec {
+  pname = "nixpart";
+  version = "1.0.0";
+
+  src = fetchurl {
+    url = "https://github.com/aszlig/nixpart/archive/v${version}.tar.gz";
+    sha256 = "0avwd8p47xy9cydlbjxk8pj8q75zyl68gw2w6fnkk78dcb1a3swp";
+  };
+
+  propagatedBuildInputs = [ blivet ];
+
+  meta = {
+    description = "NixOS storage manager/partitioner";
+    license = stdenv.lib.licenses.gpl2Plus;
+    maintainers = [ stdenv.lib.maintainers.aszlig ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/ntfs-3g/default.nix b/nixpkgs/pkgs/tools/filesystems/ntfs-3g/default.nix
new file mode 100644
index 000000000000..1d402090355f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/ntfs-3g/default.nix
@@ -0,0 +1,49 @@
+{stdenv, fetchurl, utillinux, libuuid
+, crypto ? false, libgcrypt, gnutls, pkgconfig}:
+
+stdenv.mkDerivation rec {
+  pname = "ntfs3g";
+  version = "2017.3.23";
+
+  outputs = [ "out" "dev" "man" "doc" ];
+
+  buildInputs = [ libuuid ] ++ stdenv.lib.optionals crypto [ gnutls libgcrypt ];
+  nativeBuildInputs = stdenv.lib.optional crypto pkgconfig;
+
+  src = fetchurl {
+    url = "https://tuxera.com/opensource/ntfs-3g_ntfsprogs-${version}.tgz";
+    sha256 = "1mb228p80hv97pgk3myyvgp975r9mxq56c6bdn1n24kngcfh4niy";
+  };
+
+  patchPhase = ''
+    substituteInPlace src/Makefile.in --replace /sbin '@sbindir@'
+    substituteInPlace ntfsprogs/Makefile.in --replace /sbin '@sbindir@'
+    substituteInPlace libfuse-lite/mount_util.c \
+      --replace /bin/mount ${utillinux}/bin/mount \
+      --replace /bin/umount ${utillinux}/bin/umount
+  '';
+
+  configureFlags = [
+    "--disable-ldconfig"
+    "--exec-prefix=\${prefix}"
+    "--enable-mount-helper"
+    "--enable-posix-acls"
+    "--enable-xattr-mappings"
+    "--${if crypto then "enable" else "disable"}-crypto"
+    "--enable-extras"
+  ];
+
+  postInstall =
+    ''
+      # Prefer ntfs-3g over the ntfs driver in the kernel.
+      ln -sv mount.ntfs-3g $out/sbin/mount.ntfs
+    '';
+
+  meta = with stdenv.lib; {
+    homepage = https://www.tuxera.com/community/open-source-ntfs-3g/;
+    description = "FUSE-based NTFS driver with full write support";
+    maintainers = with maintainers; [ dezgeg ];
+    platforms = platforms.linux;
+    license = licenses.gpl2Plus; # and (lib)fuse-lite under LGPL2+
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/orangefs/default.nix b/nixpkgs/pkgs/tools/filesystems/orangefs/default.nix
new file mode 100644
index 000000000000..37f4026799b6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/orangefs/default.nix
@@ -0,0 +1,61 @@
+{ stdenv, fetchurl, bison, flex, autoreconfHook
+, openssl, db, attr, perl, tcsh
+} :
+
+stdenv.mkDerivation rec {
+  pname = "orangefs";
+  version = "2.9.7";
+
+  src = fetchurl {
+    url = "http://download.orangefs.org/current/source/orangefs-${version}.tar.gz";
+    sha256 = "15669f5rcvn44wkas0mld0qmyclrmhbrw4bbbp66sw3a12vgn4sm";
+  };
+
+  nativeBuildInputs = [ bison flex perl autoreconfHook ];
+  buildInputs = [ openssl db attr tcsh ];
+
+  postPatch = ''
+    # Issue introduced by attr-2.4.48
+    substituteInPlace src/apps/user/ofs_setdirhint.c --replace attr/xattr.h sys/xattr.h
+
+    # Do not try to install empty sysconfdir
+    substituteInPlace Makefile.in --replace 'install -d $(sysconfdir)' ""
+
+    # perl interpreter needs to be fixed or build fails
+    patchShebangs ./src/apps/admin/pvfs2-genconfig
+
+    # symlink points to a location in /usr
+    rm ./src/client/webpack/ltmain.sh
+  '';
+
+  configureFlags = [
+    "--sysconfdir=/etc/orangefs"
+    "--enable-shared"
+    "--enable-fast"
+    "--with-ssl=${stdenv.lib.getDev openssl}"
+  ];
+
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    # install useful helper scripts
+    install examples/keys/pvfs2-gen-keys.sh $out/bin
+  '';
+
+  postFixup = ''
+    for f in pvfs2-getmattr pvfs2-setmattr; do
+      substituteInPlace $out/bin/$f --replace '#!/bin/csh' '#!${tcsh}/bin/tcsh'
+    done
+
+    sed -i 's:openssl:${openssl}/bin/openssl:' $out/bin/pvfs2-gen-keys.sh
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Scale-out network file system for use on high-end computing systems";
+    homepage = "http://www.orangefs.org/";
+    license = with licenses;  [ asl20 bsd3 gpl2 lgpl21 lgpl21Plus openldap ];
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ markuskowa ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/rdfind/default.nix b/nixpkgs/pkgs/tools/filesystems/rdfind/default.nix
new file mode 100644
index 000000000000..424f84ec34f9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/rdfind/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchurl, nettle }:
+
+stdenv.mkDerivation rec {
+  pname = "rdfind";
+  version = "1.4.1";
+
+  src = fetchurl {
+    url = "https://rdfind.pauldreik.se/${pname}-${version}.tar.gz";
+    sha256 = "132y3wwgnbpdx6f90q0yahd3nkr4cjzcy815ilc8p97b4vn17iih";
+  };
+
+  buildInputs = [ nettle ];
+
+  meta = with stdenv.lib; {
+    homepage = https://rdfind.pauldreik.se/;
+    description = "Removes or hardlinks duplicate files very swiftly";
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = [ maintainers.wmertens ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/reiser4progs/default.nix b/nixpkgs/pkgs/tools/filesystems/reiser4progs/default.nix
new file mode 100644
index 000000000000..dbc391d00828
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/reiser4progs/default.nix
@@ -0,0 +1,32 @@
+{stdenv, fetchurl, libaal}:
+
+let version = "2.0.0"; in
+stdenv.mkDerivation rec {
+  pname = "reiser4progs";
+  inherit version;
+
+  src = fetchurl {
+    url = "mirror://sourceforge/reiser4/reiser4-utils/${pname}-${version}.tar.gz";
+    sha256 = "00kx9prz3d5plp1hn4xdkkd99cw42sanlsjnjhj0fsrlmi9yfs8n";
+  };
+
+  buildInputs = [libaal];
+
+  hardeningDisable = [ "format" ];
+
+  preConfigure = ''
+    substituteInPlace configure --replace " -static" ""
+  '';
+
+  preInstall = ''
+    substituteInPlace Makefile --replace ./run-ldconfig true
+  '';
+
+  meta = with stdenv.lib; {
+    inherit version;
+    homepage = https://sourceforge.net/projects/reiser4/;
+    description = "Reiser4 utilities";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/reiserfsprogs/default.nix b/nixpkgs/pkgs/tools/filesystems/reiserfsprogs/default.nix
new file mode 100644
index 000000000000..a89ea0657500
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/reiserfsprogs/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, libuuid, autoreconfHook }:
+
+let version = "3.6.24"; in
+stdenv.mkDerivation rec {
+  pname = "reiserfsprogs";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://www.kernel.org/pub/linux/kernel/people/jeffm/reiserfsprogs/v${version}/${pname}-${version}.tar.xz";
+    sha256 = "0q07df9wxxih8714a3mdp61h5n347l7j2a0l351acs3xapzgwi3y";
+  };
+
+  patches = [ ./reiserfsprogs-ar-fix.patch ];
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ libuuid ];
+
+  NIX_CFLAGS_COMPILE = "-std=gnu90";
+
+  meta = {
+    inherit version;
+    homepage = http://www.namesys.com/;
+    description = "ReiserFS utilities";
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/reiserfsprogs/reiserfsprogs-ar-fix.patch b/nixpkgs/pkgs/tools/filesystems/reiserfsprogs/reiserfsprogs-ar-fix.patch
new file mode 100644
index 000000000000..356782a3d984
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/reiserfsprogs/reiserfsprogs-ar-fix.patch
@@ -0,0 +1,10 @@
+--- reiserfsprogs-3.6.24/configure.ac.orig	2018-11-29 17:16:52.313624894 +0300
++++ reiserfsprogs-3.6.24/configure.ac	2018-11-29 17:16:54.480669132 +0300
+@@ -21,6 +21,7 @@
+ AC_PROG_LN_S
+ AC_PROG_MAKE_SET
+ AC_PROG_RANLIB
++AM_PROG_AR
+ 
+ dnl Checks for libraries.
+ 
diff --git a/nixpkgs/pkgs/tools/filesystems/relfs/default.nix b/nixpkgs/pkgs/tools/filesystems/relfs/default.nix
new file mode 100644
index 000000000000..c99a95714c09
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/relfs/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, fetchcvs, ocaml, fuse, postgresql, pcre
+, libuuid, gnome_vfs, pkgconfig, GConf }:
+
+stdenv.mkDerivation {
+	name = "relfs-2008.03.05";
+
+	src = fetchcvs {
+		cvsRoot = ":pserver:anonymous@relfs.cvs.sourceforge.net:/cvsroot/relfs";
+		module = "relfs";
+		date = "2008-03-05";
+		sha256 = "949f8eff7e74ff2666cccf8a1efbfcce8d54bc41bec6ad6db8c029de7ca832a3";
+	};
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ ocaml fuse postgresql pcre libuuid gnome_vfs GConf ];
+
+  buildPhase = ''
+    cd deps
+		sed -e 's/^CPP/#&/ ; s/^# CPP=gcc/CPP=gcc/' -i Makefile.camlidl
+		make
+		cd ../src
+		sed -e 's/NULL\\|FALSE/0/g' -i Mimetype_lib.c
+		sed -e 's@/usr/local/@'\$out/'@' -i Makefile
+		sed -e '/install:/a\\\tmkdir -p '\$out'/share' -i Makefile
+		make
+		mkdir -p \$out/bin
+		echo '
+		  createuser -A -D \$1
+			dropdb relfs_\$1 ;
+			rm -rf /tmp/relfs-\$1-tmp;
+			mkdir /tmp/relfs-\$1-tmp;
+			USER=\$1 relfs -f -s /tmp/relfs-\$1-tmp  &
+			sleep 1 &&
+			kill -15 \''${!};
+			rm -rf /tmp/relfs-\$1-tmp ;
+			psql -d relfs_\$1 <<< \"ALTER DATABASE relfs_\$1 OWNER TO \$1;
+				ALTER TABLE obj OWNER TO \$1;
+				ALTER TABLE obj_mimetype OWNER TO \$1;
+				ALTER TABLE membership OWNER TO \$1;\"' > \$out/bin/relfs_grant;
+		chmod a+x \$out/bin/relfs_grant;
+  '';
+
+	meta = with stdenv.lib; {
+		description = "A relational filesystem on top of FUSE";
+    homepage = http://relfs.sourceforge.net;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.raskin ];
+    platforms = platforms.linux;
+    broken = true;
+	};
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/rmount/default.nix b/nixpkgs/pkgs/tools/filesystems/rmount/default.nix
new file mode 100644
index 000000000000..46be9e30f70f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/rmount/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, nmap, jq, cifs-utils, sshfs, fetchFromGitHub, makeWrapper }:
+
+stdenv.mkDerivation rec {
+
+  pname   = "rmount";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "Luis-Hebendanz";
+    repo = "rmount";
+    sha256 = "1wjmfvbsq3126z51f2ivj85cjmkrzdm2acqsiyqs57qga2g6w5p9";
+  };
+
+  buildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    install -D ${src}/rmount.man  $out/share/man/man1/rmount.1
+    install -D ${src}/rmount.bash $out/bin/rmount
+    install -D ${src}/config.json $out/share/config.json
+
+    wrapProgram $out/bin/rmount --prefix PATH : ${stdenv.lib.makeBinPath [ nmap jq cifs-utils sshfs ]}
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/Luis-Hebendanz/rmount;
+    description = "Remote mount utility which parses a json file";
+    license = licenses.mit;
+    maintainers = [ maintainers.luis ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/s3backer/default.nix b/nixpkgs/pkgs/tools/filesystems/s3backer/default.nix
new file mode 100644
index 000000000000..186da6255ebf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/s3backer/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchFromGitHub
+, autoreconfHook, pkgconfig
+, fuse, curl, expat }:
+
+stdenv.mkDerivation rec {
+  pname = "s3backer";
+  version = "1.5.4";
+
+  src = fetchFromGitHub {
+    sha256 = "1228qlfgz48k9vv72hrz488zg73zls99cppb9vmikc0pzv1xndsx";
+    rev = version;
+    repo = "s3backer";
+    owner = "archiecobbs";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  buildInputs = [ fuse curl expat ];
+
+  autoreconfPhase = ''
+    patchShebangs ./autogen.sh
+    ./autogen.sh
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/archiecobbs/s3backer;
+    description = "FUSE-based single file backing store via Amazon S3";
+    license = licenses.gpl2Plus;
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/s3fs/default.nix b/nixpkgs/pkgs/tools/filesystems/s3fs/default.nix
new file mode 100644
index 000000000000..3fc082dad462
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/s3fs/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, curl, openssl, libxml2, fuse }:
+
+stdenv.mkDerivation rec {
+  pname = "s3fs-fuse";
+  version = "1.85";
+
+  src = fetchFromGitHub {
+    owner  = "s3fs-fuse";
+    repo   = "s3fs-fuse";
+    rev    = "v${version}";
+    sha256 = "0sk2b7bxb2wzni1f39l4976dy47s7hqv62l7x7fwcjp62y22nw7m";
+  };
+
+  buildInputs = [ curl openssl libxml2 fuse ];
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+
+  configureFlags = [
+    "--with-openssl"
+  ];
+
+  postInstall = ''
+    ln -s $out/bin/s3fs $out/bin/mount.s3fs
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Mount an S3 bucket as filesystem through FUSE";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/sasquatch/default.nix b/nixpkgs/pkgs/tools/filesystems/sasquatch/default.nix
new file mode 100644
index 000000000000..36ac3630e54d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/sasquatch/default.nix
@@ -0,0 +1,53 @@
+{ fetchFromGitHub
+, fetchurl
+, lz4 ? null
+, lz4Support ? false
+, lzma
+, lzo
+, stdenv
+, xz
+, zlib
+}:
+
+assert lz4Support -> (lz4 != null);
+
+let
+  patch = fetchFromGitHub {
+    owner = "devttys0";
+    repo = "sasquatch";
+    rev = "3e0cc40fc6dbe32bd3a5e6c553b3320d5d91ceed";
+    sha256 = "19lhndjv7v9w6nmszry63zh5rqii9v7wvsbpc2n6q606hyz955g2";
+  } + "/patches/patch0.txt";
+in
+stdenv.mkDerivation rec {
+  pname = "sasquatch";
+  version = "4.3";
+
+  src = fetchurl {
+    url = mirror://sourceforge/squashfs/squashfs4.3.tar.gz;
+    sha256 = "1xpklm0y43nd9i6jw43y2xh5zvlmj9ar2rvknh0bh7kv8c95aq0d";
+  };
+
+  buildInputs = [ lzma lzo xz zlib ]
+    ++ stdenv.lib.optional lz4Support lz4;
+
+  patches = [ patch ];
+  patchFlags = [ "-p0" ];
+
+  postPatch = ''
+    cd squashfs-tools
+  '';
+
+  installFlags = [ "INSTALL_DIR=\${out}/bin" ];
+
+  makeFlags = [ "XZ_SUPPORT=1" ]
+    ++ stdenv.lib.optional lz4Support "LZ4_SUPPORT=1";
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/devttys0/sasquatch";
+    description = "Set of patches to the standard unsquashfs utility (part of squashfs-tools) that attempts to add support for as many hacked-up vendor-specific SquashFS implementations as possible";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.pamplemousse ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/securefs/default.nix b/nixpkgs/pkgs/tools/filesystems/securefs/default.nix
new file mode 100644
index 000000000000..c5a5af212d90
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/securefs/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchFromGitHub
+, cmake
+, fuse }:
+
+stdenv.mkDerivation rec {
+  pname = "securefs";
+  version = "0.8.3";
+
+  src = fetchFromGitHub {
+    sha256 = "0nf0bd163gz844mikqab2mh7xjlj31ixa6hi85qxdifyjpfjv7y4";
+    rev = version;
+    repo = "securefs";
+    owner = "netheril96";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ fuse ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    inherit (src.meta) homepage;
+    description = "Transparent encryption filesystem";
+    longDescription = ''
+      Securefs is a filesystem in userspace (FUSE) that transparently encrypts
+      and authenticates data stored. It is particularly designed to secure
+      data stored in the cloud.
+      Securefs mounts a regular directory onto a mount point. The mount point
+      appears as a regular filesystem, where one can read/write/create files,
+      directories and symbolic links. The underlying directory will be
+      automatically updated to contain the encrypted and authenticated
+      contents.
+    '';
+    license = with licenses; [ bsd2 mit ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/simg2img/default.nix b/nixpkgs/pkgs/tools/filesystems/simg2img/default.nix
new file mode 100644
index 000000000000..78f80ecfa87a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/simg2img/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "simg2img";
+  version = "1.1.3";
+
+  src = fetchFromGitHub {
+    owner = "anestisb";
+    repo = "android-simg2img";
+    rev = version;
+    sha256 = "119gl9i61g2wr07hzv6mi1ihql6yd6pwq94ki2pgcpfbamv8f6si";
+  };
+
+  buildInputs = [ zlib ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with stdenv.lib; {
+    description = "Tool to convert Android sparse images to raw images";
+    homepage = "https://github.com/anestisb/android-simg2img";
+    license = licenses.asl20;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.dezgeg ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/smbnetfs/default.nix b/nixpkgs/pkgs/tools/filesystems/smbnetfs/default.nix
new file mode 100644
index 000000000000..be46abb2694d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/smbnetfs/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, fuse, samba, pkgconfig, glib, autoconf, attr, libsecret }:
+
+stdenv.mkDerivation rec {
+  pname = "smbnetfs";
+  version = "0.6.1";
+  src = fetchurl {
+    url = "mirror://sourceforge/project/smbnetfs/smbnetfs/SMBNetFS-${version}/${pname}-${version}.tar.bz2";
+    sha256 = "02iqjnm6pdwc1q38z56akiwdbp0xisr6qwrmxs1lrk5mq7j8x2w4";
+  };
+
+  nativeBuildInputs = [ pkgconfig autoconf ];
+  buildInputs = [ fuse samba glib attr libsecret ];
+
+  postPatch = ''
+    substituteInPlace src/function.c --replace "attr/xattr.h" "sys/xattr.h"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A FUSE FS for mounting Samba shares";
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+    downloadPage = "https://sourceforge.net/projects/smbnetfs/files/smbnetfs";
+    updateWalker = true;
+    inherit version;
+    homepage = https://sourceforge.net/projects/smbnetfs/;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/smbnetfs/default.upstream b/nixpkgs/pkgs/tools/filesystems/smbnetfs/default.upstream
new file mode 100644
index 000000000000..d56fa42f1d1b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/smbnetfs/default.upstream
@@ -0,0 +1,6 @@
+url https://sourceforge.net/projects/smbnetfs/files/smbnetfs/
+version_link '[-][0-9.]+[a-z]*/$'
+version_link '[.]tar[.][a-z0-9]+/download$'
+SF_redirect
+version '.*[-]([0-9.]+[a-z]*)[.]tar[.].*' '\1'
+do_overwrite () { do_overwrite_just_version; }
diff --git a/nixpkgs/pkgs/tools/filesystems/snapraid/default.nix b/nixpkgs/pkgs/tools/filesystems/snapraid/default.nix
new file mode 100644
index 000000000000..b5ffdade98f8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/snapraid/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "snapraid";
+  version = "11.3";
+
+  src = fetchFromGitHub {
+    owner = "amadvance";
+    repo = "snapraid";
+    rev = "v${version}";
+    sha256 = "08rwz55njkr1w794y3hs8nxc11vzbv4drds9wgxpf6ps8qf9q49f";
+  };
+
+  VERSION = version;
+
+  doCheck = true;
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ ];
+
+  meta = {
+    homepage = http://www.snapraid.it/;
+    description = "A backup program for disk arrays";
+    license = stdenv.lib.licenses.gpl3;
+    maintainers = [ stdenv.lib.maintainers.makefu ];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/squashfs-tools-ng/0001-Fix-build-on-BSD-systems.patch b/nixpkgs/pkgs/tools/filesystems/squashfs-tools-ng/0001-Fix-build-on-BSD-systems.patch
new file mode 100644
index 000000000000..2834b046cef2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/squashfs-tools-ng/0001-Fix-build-on-BSD-systems.patch
@@ -0,0 +1,103 @@
+From ea1bc0fcfd33191002c5d1f7072c1c02bb7ec4af Mon Sep 17 00:00:00 2001
+From: Alyssa Ross <hi@alyssa.is>
+Date: Thu, 14 Nov 2019 15:45:46 +0000
+Subject: [PATCH] Fix build on BSD systems
+
+I tested FreeBSD, DragonflyBSD, NetBSD and OpenBSD and the endian
+macros weren't necessary (and in fact caused errors) on all of them.
+
+Because OpenBSD ships with an ancient GCC that doesn't support the
+checked addition/multiplication builtins, the build there would fail
+unless built with CC=cc or CC=clang.  I changed configure.ac to prefer
+cc over gcc, so that the distribution's compiler preference is
+respected.  (The default is [gcc cc]).  I had to move AC_PROG_CC above
+LT_INIT because otherwise LT_INIT would run AC_PROG_CC first, and we
+wouldn't have a chance to use non-default parameters.
+---
+ configure.ac          |  2 +-
+ include/util/compat.h | 13 +++++--------
+ lib/common/dirstack.c |  1 +
+ lib/common/mkdir_p.c  |  2 +-
+ 4 files changed, 8 insertions(+), 10 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 018b3f6..19ea0ed 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,8 +3,8 @@ AC_INIT([squashfs-tools-ng], [0.7], [goliath@infraroot.at], squashfs-tools-ng)
+ AC_CONFIG_MACRO_DIR([m4])
+ AM_INIT_AUTOMAKE([foreign dist-xz subdir-objects])
+ AM_SILENT_RULES([yes])
++AC_PROG_CC([cc gcc clang])
+ LT_INIT
+-AC_PROG_CC
+ AC_PROG_CC_C99
+ AC_PROG_INSTALL
+ AC_SYS_LARGEFILE
+diff --git a/include/util/compat.h b/include/util/compat.h
+index 74d0b6f..f53fd0e 100644
+--- a/include/util/compat.h
++++ b/include/util/compat.h
+@@ -7,6 +7,10 @@
+ #ifndef COMPAT_H
+ #define COMPAT_H
+ 
++#ifndef __linux__
++#define O_PATH 0
++#endif
++
+ #if defined(__APPLE__)
+ #include <libkern/OSByteOrder.h>
+ 
+@@ -17,14 +21,8 @@
+ #define le32toh(x) OSSwapLittleToHostInt32(x)
+ #define le16toh(x) OSSwapLittleToHostInt16(x)
+ #define le64toh(x) OSSwapLittleToHostInt64(x)
+-#elif defined(__OpenBSD__)
++#elif defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
+ #include <sys/endian.h>
+-#elif defined(__NetBSD__) || defined(__FreeBSD__) || defined(__DragonFly__)
+-#include <sys/endian.h>
+-
+-#define le16toh(x) letoh16(x)
+-#define le32toh(x) letoh32(x)
+-#define le64toh(x) letoh64(x)
+ #elif defined(_WIN32) || defined(__WINDOWS__)
+ #define htole16(x) (x)
+ #define htole32(x) (x)
+@@ -89,7 +87,6 @@
+ #else
+ #include <sys/types.h>
+ #include <sys/stat.h>
+-#include <sys/sysmacros.h>
+ #endif
+ 
+ #endif /* COMPAT_H */
+diff --git a/lib/common/dirstack.c b/lib/common/dirstack.c
+index 8f73898..f8d1278 100644
+--- a/lib/common/dirstack.c
++++ b/lib/common/dirstack.c
+@@ -5,6 +5,7 @@
+  * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at>
+  */
+ #include "common.h"
++#include "util/compat.h"
+ 
+ #include <string.h>
+ #include <stdlib.h>
+diff --git a/lib/common/mkdir_p.c b/lib/common/mkdir_p.c
+index cb433b3..95187ba 100644
+--- a/lib/common/mkdir_p.c
++++ b/lib/common/mkdir_p.c
+@@ -7,7 +7,7 @@
+ #include "common.h"
+ 
+ #include <string.h>
+-#include <alloca.h>
++#include <stdlib.h>
+ #include <stdio.h>
+ #include <errno.h>
+ 
+-- 
+2.23.0
+
diff --git a/nixpkgs/pkgs/tools/filesystems/squashfs-tools-ng/default.nix b/nixpkgs/pkgs/tools/filesystems/squashfs-tools-ng/default.nix
new file mode 100644
index 000000000000..727e257a4861
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/squashfs-tools-ng/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, lib, fetchurl, fetchpatch, autoreconfHook, doxygen, graphviz, perl
+, pkgconfig, lz4, xz, zlib, zstd
+}:
+
+stdenv.mkDerivation rec {
+  pname = "squashfs-tools-ng";
+  version = "0.7";
+
+  src = fetchurl {
+    url = "https://infraroot.at/pub/squashfs/squashfs-tools-ng-${version}.tar.xz";
+    sha256 = "01yn621dnsfhrah3qj1xh6ynag7r3nvihc510sa5frapkyg9nw8n";
+  };
+
+  patches = lib.optional (!stdenv.isLinux) ./0001-Fix-build-on-BSD-systems.patch;
+
+  nativeBuildInputs = [ doxygen graphviz pkgconfig perl ]
+                      ++ lib.optional (!stdenv.isLinux) autoreconfHook;
+  buildInputs = [ zlib xz lz4 zstd ];
+
+  meta = with lib; {
+    homepage = https://github.com/AgentD/squashfs-tools-ng;
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ qyliss ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/squashfs/4k-align.patch b/nixpkgs/pkgs/tools/filesystems/squashfs/4k-align.patch
new file mode 100644
index 000000000000..e73c06788756
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/squashfs/4k-align.patch
@@ -0,0 +1,98 @@
+This patch has been edited to apply to squashfs 4.4, commit
+52eb4c279cd283ed9802dd1ceb686560b22ffb67. Below is the original
+message body of the patch.
+
+From 7bda7c75748f36b0a50f93e46144d5a4de4974ad Mon Sep 17 00:00:00 2001
+From: Amin Hassani <ahassani@google.com>
+Date: Thu, 15 Dec 2016 10:43:15 -0800
+Subject: [PATCH] mksquashfs 4K aligns the files inside the squashfs image
+
+Files inside a squashfs image are not necessarily 4k (4096)
+aligned. This patch starts each file in a 4k aligned address and pads
+zero to the end of the file until it reaches the next 4k aligned
+address. This will not change the size of the compressed
+blocks (especially the last one) and hence it will not change how the
+files are being loaded in kernel or unsquashfs. However on average this
+increases the size of the squashfs image which can be calculated by the
+following formula:
+
+increased_size = (number_of_unfragmented_files_in_image + number of fragments) * 2048
+
+The 4k alignment can be enabled by flag '-4k-align'
+---
+ squashfs-tools/mksquashfs.c | 16 ++++++++++++++++
+ 1 file changed, 16 insertions(+)
+
+diff --git a/squashfs-tools/mksquashfs.c b/squashfs-tools/mksquashfs.c
+index a45b77f..07b1c06 100644
+--- a/squashfs-tools/mksquashfs.c
++++ b/squashfs-tools/mksquashfs.c
+@@ -102,7 +102,9 @@ int old_exclude = TRUE;
+ int use_regex = FALSE;
+ int nopad = FALSE;
+ int exit_on_error = FALSE;
++int do_4k_align = FALSE;
+ long long start_offset = 0;
++#define ALIGN_UP(bytes, size) (bytes = (bytes + size - 1) & ~(size - 1))
+ 
+ long long global_uid = -1, global_gid = -1;
+ 
+@@ -1546,6 +1548,9 @@ void unlock_fragments()
+ 	 * queue at this time.
+ 	 */
+ 	while(!queue_empty(locked_fragment)) {
++		// 4k align the start of remaining queued fragments.
++		if(do_4k_align)
++			ALIGN_UP(bytes, 4096);
+ 		write_buffer = queue_get(locked_fragment);
+ 		frg = write_buffer->block;	
+ 		size = SQUASHFS_COMPRESSED_SIZE_BLOCK(fragment_table[frg].size);
+@@ -2478,6 +2483,9 @@ void *frag_deflator(void *arg)
+ 		write_buffer->size = compressed_size;
+ 		pthread_mutex_lock(&fragment_mutex);
+ 		if(fragments_locked == FALSE) {
++			// 4k align the start of each fragment.
++			if(do_4k_align)
++				ALIGN_UP(bytes, 4096);
+ 			fragment_table[file_buffer->block].size = c_byte;
+ 			fragment_table[file_buffer->block].start_block = bytes;
+ 			write_buffer->block = bytes;
+@@ -2877,6 +2885,10 @@ int write_file_blocks(squashfs_inode *inode, struct dir_ent *dir_ent,
+ 	long long sparse = 0;
+ 	struct file_buffer *fragment_buffer = NULL;
+ 
++	// 4k align the start of each file.
++	if(do_4k_align)
++		ALIGN_UP(bytes, 4096);
++
+ 	if(pre_duplicate(read_size))
+ 		return write_file_blocks_dup(inode, dir_ent, read_buffer, dup);
+ 
+@@ -4972,6 +4984,7 @@ void write_filesystem_tables(struct squashfs_super_block *sBlk, int nopad)
+ 		"compressed", no_fragments ? "no" : noF ? "uncompressed" :
+ 		"compressed", no_xattrs ? "no" : noX ? "uncompressed" :
+ 		"compressed", noI || noId ? "uncompressed" : "compressed");
++	printf("\t4k %saligned\n", do_4k_align ? "" : "un");
+ 	printf("\tduplicates are %sremoved\n", duplicate_checking ? "" :
+ 		"not ");
+ 	printf("Filesystem size %.2f Kbytes (%.2f Mbytes)\n", bytes / 1024.0,
+@@ -5853,6 +5866,8 @@ print_compressor_options:
+ 			root_name = argv[i];
+ 		} else if(strcmp(argv[i], "-version") == 0) {
+ 			VERSION();
++		} else if(strcmp(argv[i], "-4k-align") == 0) {
++			do_4k_align = TRUE;
+ 		} else {
+ 			ERROR("%s: invalid option\n\n", argv[0]);
+ printOptions:
+@@ -5904,6 +5919,7 @@ printOptions:
+ 			ERROR("\t\t\tdirectory containing that directory, "
+ 				"rather than the\n");
+ 			ERROR("\t\t\tcontents of the directory\n");
++			ERROR("-4k-align\t\tenables 4k alignment of all files\n");
+ 			ERROR("\nFilesystem filter options:\n");
+ 			ERROR("-p <pseudo-definition>\tAdd pseudo file "
+ 				"definition\n");
+-- 
+2.23.0
+
diff --git a/nixpkgs/pkgs/tools/filesystems/squashfs/darwin.patch b/nixpkgs/pkgs/tools/filesystems/squashfs/darwin.patch
new file mode 100644
index 000000000000..eb2dc24ec1a8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/squashfs/darwin.patch
@@ -0,0 +1,357 @@
+Patch based on commits by Dave Vasilevsky <dave@vasilevsky.ca> and
+Blake Riley <blake.riley@gmail.com>, squashed into a single patch,
+with BSD-specific changes omitted.
+
+See also https://github.com/plougher/squashfs-tools/pull/69.
+
+diff --git a/squashfs-tools/action.c b/squashfs-tools/action.c
+index 4b06ccb..3cad2ab 100644
+--- a/squashfs-tools/action.c
++++ b/squashfs-tools/action.c
+@@ -38,6 +38,10 @@
+ #include <limits.h>
+ #include <errno.h>
+ 
++#ifndef FNM_EXTMATCH /* glibc extension */
++	#define FNM_EXTMATCH 0
++#endif
++
+ #include "squashfs_fs.h"
+ #include "mksquashfs.h"
+ #include "action.h"
+@@ -2284,9 +2288,12 @@ static char *get_start(char *s, int n)
+ 
+ static int subpathname_fn(struct atom *atom, struct action_data *action_data)
+ {
+-	return fnmatch(atom->argv[0], get_start(strdupa(action_data->subpath),
++	char *path = strdup(action_data->subpath);
++	int is_match = fnmatch(atom->argv[0], get_start(path,
+ 		count_components(atom->argv[0])),
+ 		FNM_PATHNAME|FNM_PERIOD|FNM_EXTMATCH) == 0;
++	free(path);
++	return is_match;
+ }
+ 
+ /*
+diff --git a/squashfs-tools/info.c b/squashfs-tools/info.c
+index fe23d78..5c2f835 100644
+--- a/squashfs-tools/info.c
++++ b/squashfs-tools/info.c
+@@ -144,31 +144,22 @@ void dump_state()
+ void *info_thrd(void *arg)
+ {
+ 	sigset_t sigmask;
+-	struct timespec timespec = { .tv_sec = 1, .tv_nsec = 0 };
+-	int sig, waiting = 0;
++	int sig, err, waiting = 0;
+ 
+ 	sigemptyset(&sigmask);
+ 	sigaddset(&sigmask, SIGQUIT);
+ 	sigaddset(&sigmask, SIGHUP);
++	sigaddset(&sigmask, SIGALRM);
+ 
+ 	while(1) {
+-		if(waiting)
+-			sig = sigtimedwait(&sigmask, NULL, &timespec);
+-		else
+-			sig = sigwaitinfo(&sigmask, NULL);
++		err = sigwait(&sigmask, &sig);
+ 
+-		if(sig == -1) {
++		if(err == -1) {
+ 			switch(errno) {
+-			case EAGAIN:
+-				/* interval timed out */
+-				waiting = 0;
+-				/* FALLTHROUGH */
+ 			case EINTR:
+-				/* if waiting, the wait will be longer, but
+-				   that's OK */
+ 				continue;
+ 			default:
+-				BAD_ERROR("sigtimedwait/sigwaitinfo failed "
++				BAD_ERROR("sigwait failed "
+ 					"because %s\n", strerror(errno));
+ 			}
+ 		}
+@@ -179,8 +170,12 @@ void *info_thrd(void *arg)
+ 			/* set one second interval period, if ^\ received
+ 			   within then, dump queue and cache status */
+ 			waiting = 1;
+-		} else
++			alarm(1);
++		} else if (sig == SIGQUIT) {
+ 			dump_state();
++		} else if (sig == SIGALRM) {
++			waiting = 0;
++		}
+ 	}
+ }
+ 
+diff --git a/squashfs-tools/mksquashfs.c b/squashfs-tools/mksquashfs.c
+index a45b77f..3607448 100644
+--- a/squashfs-tools/mksquashfs.c
++++ b/squashfs-tools/mksquashfs.c
+@@ -35,7 +35,12 @@
+ #include <stddef.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
++#ifndef linux
++#include <sys/sysctl.h>
++#else
++#include <sys/sysinfo.h>
+ #include <sys/sysmacros.h>
++#endif
+ #include <fcntl.h>
+ #include <errno.h>
+ #include <dirent.h>
+@@ -50,7 +55,10 @@
+ #include <sys/wait.h>
+ #include <limits.h>
+ #include <ctype.h>
+-#include <sys/sysinfo.h>
++
++#ifndef FNM_EXTMATCH /* glibc extension */
++	#define FNM_EXTMATCH 0
++#endif
+ 
+ #ifndef linux
+ #define __BYTE_ORDER BYTE_ORDER
+@@ -4348,6 +4356,7 @@ void initialise_threads(int readq, int fragq, int bwriteq, int fwriteq,
+ 	sigemptyset(&sigmask);
+ 	sigaddset(&sigmask, SIGQUIT);
+ 	sigaddset(&sigmask, SIGHUP);
++	sigaddset(&sigmask, SIGALRM);
+ 	if(pthread_sigmask(SIG_BLOCK, &sigmask, NULL) != 0)
+ 		BAD_ERROR("Failed to set signal mask in intialise_threads\n");
+ 
+@@ -5195,6 +5204,35 @@ int get_physical_memory()
+ 	long long page_size = sysconf(_SC_PAGESIZE);
+ 	int phys_mem;
+ 
++#ifndef linux
++	#ifdef HW_MEMSIZE
++		#define SYSCTL_PHYSMEM HW_MEMSIZE
++	#elif defined(HW_PHYSMEM64)
++		#define SYSCTL_PHYSMEM HW_PHYSMEM64
++	#else
++		#define SYSCTL_PHYSMEM HW_PHYSMEM
++	#endif
++
++	int mib[2];
++	uint64_t sysctl_physmem = 0;
++	size_t sysctl_len = sizeof(sysctl_physmem);
++
++	mib[0] = CTL_HW;
++	mib[1] = SYSCTL_PHYSMEM;
++
++	if(sysctl(mib, 2, &sysctl_physmem, &sysctl_len, NULL, 0) == 0) {
++		/* some systems use 32-bit values, work with what we're given */
++		if (sysctl_len == 4)
++			sysctl_physmem = *(uint32_t*)&sysctl_physmem;
++		phys_mem = sysctl_physmem >> 20;
++	} else {
++		ERROR_START("Failed to get amount of available "
++			"memory.");
++		ERROR_EXIT("  Defaulting to least viable amount\n");
++		phys_mem = SQUASHFS_LOWMEM;
++	}
++  #undef SYSCTL_PHYSMEM
++#else
+ 	if(num_pages == -1 || page_size == -1) {
+ 		struct sysinfo sys;
+ 		int res = sysinfo(&sys);
+@@ -5207,6 +5245,7 @@ int get_physical_memory()
+ 	}
+ 
+ 	phys_mem = num_pages * page_size >> 20;
++#endif
+ 
+ 	if(phys_mem < SQUASHFS_LOWMEM)
+ 		BAD_ERROR("Mksquashfs requires more physical memory than is "
+diff --git a/squashfs-tools/read_xattrs.c b/squashfs-tools/read_xattrs.c
+index 4debedf..3257c30 100644
+--- a/squashfs-tools/read_xattrs.c
++++ b/squashfs-tools/read_xattrs.c
+@@ -39,13 +39,13 @@
+ #include <endian.h>
+ #endif
+ 
++#include <stdlib.h>
++
+ #include "squashfs_fs.h"
+ #include "squashfs_swap.h"
+ #include "xattr.h"
+ #include "error.h"
+ 
+-#include <stdlib.h>
+-
+ extern int read_fs_bytes(int, long long, int, void *);
+ extern int read_block(int, long long, long long *, int, void *);
+ 
+diff --git a/squashfs-tools/unsquashfs.c b/squashfs-tools/unsquashfs.c
+index 727f1d5..c1a6183 100644
+--- a/squashfs-tools/unsquashfs.c
++++ b/squashfs-tools/unsquashfs.c
+@@ -32,8 +32,12 @@
+ #include "stdarg.h"
+ #include "fnmatch_compat.h"
+ 
++#ifndef linux
++#include <sys/sysctl.h>
++#else
+ #include <sys/sysinfo.h>
+ #include <sys/sysmacros.h>
++#endif
+ #include <sys/types.h>
+ #include <sys/time.h>
+ #include <sys/resource.h>
+@@ -1080,7 +1084,7 @@ int create_inode(char *pathname, struct inode *i)
+ 			break;
+ 		case SQUASHFS_SYMLINK_TYPE:
+ 		case SQUASHFS_LSYMLINK_TYPE: {
+-			struct timespec times[2] = {
++			struct timeval times[2] = {
+ 				{ i->time, 0 },
+ 				{ i->time, 0 }
+ 			};
+@@ -1099,8 +1103,7 @@ int create_inode(char *pathname, struct inode *i)
+ 				goto failed;
+ 			}
+ 
+-			res = utimensat(AT_FDCWD, pathname, times,
+-					AT_SYMLINK_NOFOLLOW);
++			res = lutimes(pathname, times);
+ 			if(res == -1) {
+ 				EXIT_UNSQUASH_STRICT("create_inode: failed to set time on "
+ 					"%s, because %s\n", pathname,
+@@ -2235,6 +2238,7 @@ void initialise_threads(int fragment_buffer_size, int data_buffer_size)
+ 	sigemptyset(&sigmask);
+ 	sigaddset(&sigmask, SIGQUIT);
+ 	sigaddset(&sigmask, SIGHUP);
++	sigaddset(&sigmask, SIGALRM);
+ 	if(pthread_sigmask(SIG_BLOCK, &sigmask, NULL) != 0)
+ 		EXIT_UNSQUASH("Failed to set signal mask in initialise_threads"
+ 			"\n");
+diff --git a/squashfs-tools/unsquashfs.h b/squashfs-tools/unsquashfs.h
+index 934618b..0e680ab 100644
+--- a/squashfs-tools/unsquashfs.h
++++ b/squashfs-tools/unsquashfs.h
+@@ -46,6 +46,10 @@
+ #include <sys/ioctl.h>
+ #include <sys/time.h>
+ 
++#ifndef FNM_EXTMATCH /* glibc extension */
++	#define FNM_EXTMATCH 0
++#endif
++
+ #ifndef linux
+ #define __BYTE_ORDER BYTE_ORDER
+ #define __BIG_ENDIAN BIG_ENDIAN
+diff --git a/squashfs-tools/unsquashfs_info.c b/squashfs-tools/unsquashfs_info.c
+index c8e2b9b..7d4f7af 100644
+--- a/squashfs-tools/unsquashfs_info.c
++++ b/squashfs-tools/unsquashfs_info.c
+@@ -97,31 +97,22 @@ void dump_state()
+ void *info_thrd(void *arg)
+ {
+ 	sigset_t sigmask;
+-	struct timespec timespec = { .tv_sec = 1, .tv_nsec = 0 };
+-	int sig, waiting = 0;
++	int sig, err, waiting = 0;
+ 
+ 	sigemptyset(&sigmask);
+ 	sigaddset(&sigmask, SIGQUIT);
+ 	sigaddset(&sigmask, SIGHUP);
++	sigaddset(&sigmask, SIGALRM);
+ 
+ 	while(1) {
+-		if(waiting)
+-			sig = sigtimedwait(&sigmask, NULL, &timespec);
+-		else
+-			sig = sigwaitinfo(&sigmask, NULL);
++		err = sigwait(&sigmask, &sig);
+ 
+-		if(sig == -1) {
++		if(err == -1) {
+ 			switch(errno) {
+-			case EAGAIN:
+-				/* interval timed out */
+-				waiting = 0;
+-				/* FALLTHROUGH */
+ 			case EINTR:
+-				/* if waiting, the wait will be longer, but
+-				   that's OK */
+ 				continue;
+ 			default:
+-				BAD_ERROR("sigtimedwait/sigwaitinfo failed "
++				BAD_ERROR("sigwait failed "
+ 					"because %s\n", strerror(errno));
+ 			}
+ 		}
+@@ -133,8 +124,12 @@ void *info_thrd(void *arg)
+ 			/* set one second interval period, if ^\ received
+ 			   within then, dump queue and cache status */
+ 			waiting = 1;
+-		} else
++			alarm(1);
++		} else if (sig == SIGQUIT) {
+ 			dump_state();
++		} else if (sig == SIGALRM) {
++			waiting = 0;
++		}
+ 	}
+ }
+ 
+diff --git a/squashfs-tools/unsquashfs_xattr.c b/squashfs-tools/unsquashfs_xattr.c
+index 7742dfe..f8cd3b6 100644
+--- a/squashfs-tools/unsquashfs_xattr.c
++++ b/squashfs-tools/unsquashfs_xattr.c
+@@ -27,6 +27,11 @@
+ 
+ #include <sys/xattr.h>
+ 
++#ifdef XATTR_NOFOLLOW /* Apple's xattrs */
++	#define lsetxattr(path_, name_, val_, sz_, flags_) \
++		setxattr(path_, name_, val_, sz_, 0, flags_ | XATTR_NOFOLLOW)
++#endif
++
+ #define NOSPACE_MAX 10
+ 
+ extern int root_process;
+diff --git a/squashfs-tools/xattr.c b/squashfs-tools/xattr.c
+index 64dfd82..d82d186 100644
+--- a/squashfs-tools/xattr.c
++++ b/squashfs-tools/xattr.c
+@@ -22,6 +22,14 @@
+  * xattr.c
+  */
+ 
++#ifndef linux
++#define __BYTE_ORDER BYTE_ORDER
++#define __BIG_ENDIAN BIG_ENDIAN
++#define __LITTLE_ENDIAN LITTLE_ENDIAN
++#else
++#include <endian.h>
++#endif
++
+ #define TRUE 1
+ #define FALSE 0
+ 
+@@ -36,6 +44,13 @@
+ #include <stdlib.h>
+ #include <sys/xattr.h>
+ 
++#ifdef XATTR_NOFOLLOW /* Apple's xattrs */
++	#define llistxattr(path_, buf_, sz_) \
++		listxattr(path_, buf_, sz_, XATTR_NOFOLLOW)
++	#define lgetxattr(path_, name_, val_, sz_) \
++		getxattr(path_, name_, val_, sz_, 0, XATTR_NOFOLLOW)
++#endif
++
+ #include "squashfs_fs.h"
+ #include "squashfs_swap.h"
+ #include "mksquashfs.h"
+-- 
+2.23.0
+
diff --git a/nixpkgs/pkgs/tools/filesystems/squashfs/default.nix b/nixpkgs/pkgs/tools/filesystems/squashfs/default.nix
new file mode 100644
index 000000000000..f02a913bc257
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/squashfs/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, fetchFromGitHub, zlib, xz
+, lz4 ? null
+, lz4Support ? false
+, zstd
+}:
+
+assert lz4Support -> (lz4 != null);
+
+stdenv.mkDerivation {
+  pname = "squashfs";
+  version = "4.4";
+
+  src = fetchFromGitHub {
+    owner = "plougher";
+    repo = "squashfs-tools";
+    sha256 = "0697fv8n6739mcyn57jclzwwbbqwpvjdfkv1qh9s56lvyqnplwaw";
+    # Tag "4.4" points to this commit.
+    rev = "52eb4c279cd283ed9802dd1ceb686560b22ffb67";
+  };
+
+  patches = [
+    # This patch adds an option to pad filesystems (increasing size) in
+    # exchange for better chunking / binary diff calculation.
+    ./4k-align.patch
+  ] ++ stdenv.lib.optional stdenv.isDarwin ./darwin.patch;
+
+  buildInputs = [ zlib xz zstd ]
+    ++ stdenv.lib.optional lz4Support lz4;
+
+  preBuild = "cd squashfs-tools";
+
+  installFlags = [ "INSTALL_DIR=\${out}/bin" ];
+
+  makeFlags = [ "XZ_SUPPORT=1" "ZSTD_SUPPORT=1" ]
+    ++ stdenv.lib.optional lz4Support "LZ4_SUPPORT=1";
+
+  meta = {
+    homepage = http://squashfs.sourceforge.net/;
+    description = "Tool for creating and unpacking squashfs filesystems";
+    platforms = stdenv.lib.platforms.unix;
+    license = stdenv.lib.licenses.gpl2Plus;
+    maintainers = with stdenv.lib.maintainers; [ ruuda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/squashfuse/default.nix b/nixpkgs/pkgs/tools/filesystems/squashfuse/default.nix
new file mode 100644
index 000000000000..e828698b0e97
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/squashfuse/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, libtool, fuse,
+  pkgconfig, lz4, xz, zlib, lzo, zstd }:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+
+  pname = "squashfuse";
+  version = "0.1.103";
+
+  meta = {
+    description = "FUSE filesystem to mount squashfs archives";
+    homepage = https://github.com/vasi/squashfuse;
+    maintainers = [ maintainers.genesis ];
+    platforms = platforms.linux;
+    license = "BSD-2-Clause";
+  };
+
+  # platforms.darwin should be supported : see PLATFORMS file in src.
+  # we could use a nix fuseProvider, and let the derivation choose the OS
+  # specific implementation.
+
+  src = fetchFromGitHub {
+    owner = "vasi";
+    repo  = pname;
+    rev = "540204955134eee44201d50132a5f66a246bcfaf";
+    sha256 = "062s77y32p80vc24a79z31g90b9wxzvws1xvicgx5fn1pd0xa0q6";
+  };
+
+  nativeBuildInputs = [ autoreconfHook libtool pkgconfig ];
+  buildInputs = [ lz4 xz zlib lzo zstd fuse ];
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/sshfs-fuse/default.nix b/nixpkgs/pkgs/tools/filesystems/sshfs-fuse/default.nix
new file mode 100644
index 000000000000..018dfe7858e3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/sshfs-fuse/default.nix
@@ -0,0 +1,52 @@
+{ stdenv, fetchFromGitHub
+, meson, pkgconfig, ninja, docutils, makeWrapper
+, fuse3, glib
+, which, python3Packages
+, openssh
+}:
+
+stdenv.mkDerivation rec {
+  version = "3.7.0";
+  pname = "sshfs-fuse";
+
+  src = fetchFromGitHub {
+    owner = "libfuse";
+    repo = "sshfs";
+    rev = "sshfs-${version}";
+    sha256 = "119qvjaai3nqs2psqk2kv4gxjchrnrcfnmlwk7yxnj3v59pgyxhv";
+  };
+
+  nativeBuildInputs = [ meson pkgconfig ninja docutils makeWrapper ];
+  buildInputs = [ fuse3 glib ];
+  checkInputs = [ which python3Packages.pytest ];
+
+  NIX_CFLAGS_COMPILE = stdenv.lib.optionalString
+    (stdenv.hostPlatform.system == "i686-linux")
+    "-D_FILE_OFFSET_BITS=64";
+
+  postInstall = ''
+    mkdir -p $out/sbin
+    ln -sf $out/bin/sshfs $out/sbin/mount.sshfs
+    wrapProgram $out/bin/sshfs --prefix PATH : "${openssh}/bin"
+  '';
+
+  #doCheck = true;
+  checkPhase = ''
+    # The tests need fusermount:
+    mkdir bin && cp ${fuse3}/bin/fusermount3 bin/fusermount
+    export PATH=bin:$PATH
+    # Can't access /dev/fuse within the sandbox: "FUSE kernel module does not seem to be loaded"
+    substituteInPlace test/util.py --replace "/dev/fuse" "/dev/null"
+    # TODO: "fusermount executable not setuid, and we are not root"
+    # We should probably use a VM test instead
+    python3 -m pytest test/
+  '';
+
+  meta = with stdenv.lib; {
+    inherit (src.meta) homepage;
+    description = "FUSE-based filesystem that allows remote filesystems to be mounted over SSH";
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ primeos ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/svnfs/default.nix b/nixpkgs/pkgs/tools/filesystems/svnfs/default.nix
new file mode 100644
index 000000000000..ebfb211732e8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/svnfs/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, automake, autoconf, subversion, fuse, apr, perl }: 
+
+stdenv.mkDerivation {
+  name = "svnfs-0.4";
+
+  src = fetchurl {
+    url = http://www.jmadden.eu/wp-content/uploads/svnfs/svnfs-0.4.tgz;
+    sha256 = "1lrzjr0812lrnkkwk60bws9k1hq2iibphm0nhqyv26axdsygkfky";
+  };
+
+  buildInputs = [automake autoconf subversion fuse apr perl];
+
+  # why is this required?
+  preConfigure=''
+    export LD_LIBRARY_PATH=${subversion.out}/lib
+  '';
+
+  NIX_CFLAGS_COMPILE="-I ${subversion.dev}/include/subversion-1";
+  NIX_LDFLAGS="-lsvn_client-1 -lsvn_subr-1";
+
+  meta = {
+    description = "FUSE filesystem for accessing Subversion repositories";
+    homepage = http://www.jmadden.eu/index.php/svnfs/;
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = [stdenv.lib.maintainers.marcweber];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/tmsu/default.nix b/nixpkgs/pkgs/tools/filesystems/tmsu/default.nix
new file mode 100644
index 000000000000..67e21ac4c2c4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/tmsu/default.nix
@@ -0,0 +1,62 @@
+{ stdenv, fetchgit, fetchFromGitHub, go, fuse }:
+
+stdenv.mkDerivation rec {
+  pname = "tmsu";
+  version = "0.7.4";
+
+  go-sqlite3 = fetchgit {
+    url = "git://github.com/mattn/go-sqlite3";
+    rev = "c9a0db5d8951646743317f0756da0339fe144dd5";
+    sha256 = "1m0q9869fis0dhg34g5wc5xi6pby491spfxi23w461h29higbrqh";
+  };
+
+  go-fuse = fetchgit {
+    url = "git://github.com/hanwen/go-fuse";
+    rev = "8c85ded140ac1889372a0e22d8d21e3d10a303bd";
+    sha256 = "1iph2hpvby2mfwqg9pp39xjqdl9a09h4442yfdn5l67pznljh2bi";
+  };
+
+  src = fetchFromGitHub {
+    owner = "oniony";
+    repo = "tmsu";
+    rev = "v${version}";
+    sha256 = "1g9gxlll2g4qkqbrshq3888sy1lgw6p5dvcrl5qyh6w73yimi1cq";
+  };
+
+  buildInputs = [ go fuse ];
+
+  preBuild = ''
+    mkdir -p src/github.com/mattn/go-sqlite3/
+    ln -s ${go-sqlite3}/* src/github.com/mattn/go-sqlite3
+
+    mkdir -p src/github.com/hanwen/go-fuse
+    ln -s ${go-fuse}/* src/github.com/hanwen/go-fuse
+
+    mkdir -p src/github.com/oniony/tmsu
+    ln -s ${src}/* src/github.com/oniony/tmsu
+
+    patchShebangs tests/.
+
+    export GOPATH=$PWD
+    export GOCACHE=$TMPDIR/go-cache
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mkdir -p $out/sbin
+    mkdir -p $out/share/man/man1
+    mkdir -p $out/share/zsh/site-functions
+    make install INSTALL_DIR=$out/bin \
+                 MOUNT_INSTALL_DIR=$out/sbin \
+                 MAN_INSTALL_DIR=$out/share/man/man1 \
+                 ZSH_COMP_INSTALL_DIR=$out/share/zsh/site-functions
+  '';
+
+  meta = with stdenv.lib; {
+    homepage    = http://www.tmsu.org;
+    description = "A tool for tagging your files using a virtual filesystem";
+    maintainers = with maintainers; [ pSub ];
+    license     = licenses.gpl3;
+    platforms   = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/u3-tool/default.nix b/nixpkgs/pkgs/tools/filesystems/u3-tool/default.nix
new file mode 100644
index 000000000000..62b4b9301397
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/u3-tool/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "u3-tool";
+  version = "0.3";
+
+  enableParallelBuilding = true;
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "1p9c9kibd1pdbdfa0nd0i3n7bvzi3xg0chm38jg3xfl8gsn0390f";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Tool for controlling the special features of a 'U3 smart drive' USB Flash disk";
+    homepage = https://sourceforge.net/projects/u3-tool/ ;
+    license = licenses.gpl2;
+    platforms = with platforms; linux;
+    maintainers = with maintainers; [ makefu ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/udftools/default.nix b/nixpkgs/pkgs/tools/filesystems/udftools/default.nix
new file mode 100644
index 000000000000..9efaf96182d7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/udftools/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchFromGitHub, ncurses, readline, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "udftools";
+  version = "2.0";
+  src = fetchFromGitHub {
+    owner = "pali";
+    repo = "udftools";
+    rev = version;
+    sha256 = "0mz04h3rki6ljwfs15z83gf4vv816w7xgz923waiqgmfj9xpvx87";
+  };
+
+  buildInputs = [ ncurses readline ];
+  nativeBuildInputs = [ autoreconfHook ];
+
+  hardeningDisable = [ "fortify" ];
+
+  NIX_CFLAGS_COMPILE = "-std=gnu90";
+
+  preConfigure = ''
+    sed -e '1i#include <limits.h>' -i cdrwtool/cdrwtool.c -i pktsetup/pktsetup.c
+    sed -e 's@[(]char[*][)]spm [+]=@spm = ((char*) spm) + @' -i wrudf/wrudf.c
+    sed -e '27i#include <string.h>' -i include/udf_endian.h
+    sed -e '38i#include <string.h>' -i wrudf/wrudf-cdrw.c
+    sed -e '12i#include <string.h>' -i wrudf/wrudf-cdr.c
+    sed -e '37i#include <stdlib.h>' -i wrudf/ide-pc.c
+
+    sed -e "s@\$(DESTDIR)/lib/udev/rules.d@$out/lib/udev/rules.d@" -i pktsetup/Makefile.am
+  '';
+
+  postFixup = ''
+    sed -i -e "s@/usr/sbin/pktsetup@$out/sbin/pktsetup@" $out/lib/udev/rules.d/80-pktsetup.rules
+  '';
+
+  meta = with stdenv.lib; {
+    description = "UDF tools";
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/unionfs-fuse/default.nix b/nixpkgs/pkgs/tools/filesystems/unionfs-fuse/default.nix
new file mode 100644
index 000000000000..73272b83989e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/unionfs-fuse/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, fetchFromGitHub, cmake, fuse }:
+
+stdenv.mkDerivation rec {
+  pname = "unionfs-fuse";
+  version = "2.0";
+
+  src = fetchFromGitHub {
+    owner = "rpodgorny";
+    repo = "unionfs-fuse";
+    rev = "v${version}";
+    sha256 = "0lb8zgdxnjy2fjr2284hvdfn7inc1in44ynzgcr66x54bxzvynj6";
+  };
+
+  patches =
+    [ # Prevent the unionfs daemon from being killed during
+      # shutdown. See
+      # http://www.freedesktop.org/wiki/Software/systemd/RootStorageDaemons/
+      # for details.
+      ./prevent-kill-on-shutdown.patch
+    ];
+
+  buildInputs = [ cmake fuse ];
+
+  # Put the unionfs mount helper in place as mount.unionfs-fuse. This makes it
+  # possible to do:
+  #   mount -t unionfs-fuse none /dest -o dirs=/source1=RW,/source2=RO
+  #
+  # This must be done in preConfigure because the build process removes
+  # helper from the source directory during the build.
+  preConfigure = ''
+    mkdir -p $out/sbin
+    cp -a mount.unionfs $out/sbin/mount.unionfs-fuse
+    substituteInPlace $out/sbin/mount.unionfs-fuse --replace mount.fuse ${fuse}/sbin/mount.fuse
+    substituteInPlace $out/sbin/mount.unionfs-fuse --replace unionfs $out/bin/unionfs
+  '';
+
+  meta = with stdenv.lib; {
+    description = "FUSE UnionFS implementation";
+    homepage = https://github.com/rpodgorny/unionfs-fuse;
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ orivej ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/unionfs-fuse/prevent-kill-on-shutdown.patch b/nixpkgs/pkgs/tools/filesystems/unionfs-fuse/prevent-kill-on-shutdown.patch
new file mode 100644
index 000000000000..0a98b83282b6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/unionfs-fuse/prevent-kill-on-shutdown.patch
@@ -0,0 +1,14 @@
+diff -ru -x '*~' unionfs-fuse-0.26-orig/src/unionfs.c unionfs-fuse-0.26/src/unionfs.c
+--- unionfs-fuse-0.26-orig/src/unionfs.c	2012-09-11 00:06:32.000000000 +0200
++++ unionfs-fuse-0.26/src/unionfs.c	2014-05-21 14:22:03.597861805 +0200
+@@ -831,6 +831,10 @@
+ 	}
+ #endif
+ 
++	/* Prevent systemd's shutdown from killing us. */
++	if (access("/etc/initrd-release", F_OK) >= 0)
++		argv[0][0] = '@';
++
+ 	umask(0);
+ 	int res = fuse_main(args.argc, args.argv, &unionfs_oper, NULL);
+ 	RETURN(uopt.doexit ? uopt.retval : res);
diff --git a/nixpkgs/pkgs/tools/filesystems/vmfs-tools/default.nix b/nixpkgs/pkgs/tools/filesystems/vmfs-tools/default.nix
new file mode 100644
index 000000000000..c15a782fa3c6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/vmfs-tools/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub, pkgconfig
+, asciidoc, docbook_xsl, fuse, libuuid, libxslt }:
+
+stdenv.mkDerivation {
+  name = "vmfs-tools";
+
+  src = fetchFromGitHub {
+    owner  = "glandium";
+    repo   = "vmfs-tools";
+    rev    = "4ab76ef5b074bdf06e4b518ff6d50439de05ae7f";
+    sha256 = "14y412ww5hxk336ils62s3fwykfh6mx1j0iiaa5cwc615pi6qvi4";
+  };
+
+  nativeBuildInputs = [ asciidoc docbook_xsl fuse libuuid libxslt pkgconfig ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/glandium/vmfs-tools;
+    description = "FUSE-based VMFS (vmware) mounting tools";
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/wdfs/default.nix b/nixpkgs/pkgs/tools/filesystems/wdfs/default.nix
new file mode 100644
index 000000000000..50a50ad18f05
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/wdfs/default.nix
@@ -0,0 +1,18 @@
+{stdenv, fetchurl, glib, neon, fuse, pkgconfig}:
+
+stdenv.mkDerivation {
+  name = "wdfs-fuse-1.4.2";
+  src = fetchurl {
+    url = "http://noedler.de/projekte/wdfs/wdfs-1.4.2.tar.gz";
+    sha256 = "fcf2e1584568b07c7f3683a983a9be26fae6534b8109e09167e5dff9114ba2e5";
+  };
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [fuse glib neon];
+
+  meta = with stdenv.lib; {
+    homepage = http://noedler.de/projekte/wdfs/;
+    license = licenses.gpl2;
+    description = "User-space filesystem that allows to mount a webdav share";
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/xfsprogs/default.nix b/nixpkgs/pkgs/tools/filesystems/xfsprogs/default.nix
new file mode 100644
index 000000000000..aa28ee625969
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/xfsprogs/default.nix
@@ -0,0 +1,65 @@
+{ stdenv, buildPackages, fetchpatch, fetchgit, autoconf, automake, gettext, libtool, pkgconfig
+, icu, libuuid, readline
+}:
+
+let
+  gentooPatch = name: sha256: fetchpatch {
+    url = "https://gitweb.gentoo.org/repo/gentoo.git/plain/sys-fs/xfsprogs/files/${name}?id=2517dd766cf84d251631f4324f7ec4bce912abb9";
+    inherit sha256;
+  };
+in
+
+stdenv.mkDerivation rec {
+  pname = "xfsprogs";
+  version = "4.19.0";
+
+  src = fetchgit {
+    url = "https://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git";
+    rev = "v${version}";
+    sha256 = "18728hzfxr1bg4bdzqlxjs893ac1zwlfr7nmc2q4a1sxs0sphd1d";
+  };
+
+  outputs = [ "bin" "dev" "out" "doc" ];
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+  nativeBuildInputs = [
+    autoconf automake libtool gettext pkgconfig
+    libuuid # codegen tool uses libuuid
+  ];
+  buildInputs = [ readline icu ];
+  propagatedBuildInputs = [ libuuid ]; # Dev headers include <uuid/uuid.h>
+
+  enableParallelBuilding = true;
+
+  # Why is all this garbage needed? Why? Why?
+  patches = [
+    (gentooPatch "xfsprogs-4.15.0-sharedlibs.patch" "0bv2naxpiw7vcsg8p1v2i47wgfda91z1xy1kfwydbp4wmb4nbyyv")
+    (gentooPatch "xfsprogs-4.15.0-docdir.patch" "1srgdidvq2ka0rmfdwpqp92fapgh53w1h7rajm4nnby5vp2v8dfr")
+    (gentooPatch "xfsprogs-4.9.0-underlinking.patch" "1r7l8jphspy14i43zbfnjrnyrdm4cpgyfchblascxylmans0gci7")
+  ];
+
+  preConfigure = ''
+    sed -i Makefile -e '/cp include.install-sh/d'
+    make configure
+  '';
+
+  configureFlags = [
+    "--disable-lib64"
+    "--enable-readline"
+  ];
+
+  installFlags = [ "install-dev" ];
+
+  # FIXME: forbidden rpath
+  postInstall = ''
+    find . -type d -name .libs | xargs rm -rf
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://xfs.org/;
+    description = "SGI XFS utilities";
+    license = licenses.lgpl21;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ dezgeg ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/xtreemfs/default.nix b/nixpkgs/pkgs/tools/filesystems/xtreemfs/default.nix
new file mode 100644
index 000000000000..d8d414500793
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/xtreemfs/default.nix
@@ -0,0 +1,78 @@
+{ stdenv, boost, fuse, openssl, cmake, attr, jdk, ant, which, file, python
+, lib, valgrind, makeWrapper, fetchFromGitHub, fetchpatch }:
+
+stdenv.mkDerivation {
+  src = fetchFromGitHub {
+    # using unstable release because stable (v1.5.1) has broken repl java plugin
+    rev = "7ddcb081aa125b0cfb008dc98addd260b8353ab3";
+    owner = "xtreemfs";
+    repo = "xtreemfs";
+    sha256 = "1hjmd32pla27zf98ghzz6r5ml8ry86m9dsryv1z01kxv5l95b3m0";
+  };
+
+  pname = "XtreemFS";
+  version = "1.5.1.81";
+
+  buildInputs = [ which attr makeWrapper python ];
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/xtreemfs/xtreemfs/commit/ebfdc2fff56c09f310159d92026883941e42a953.patch";
+      sha256 = "075w00ad88qm6xpm5679m0gfzkrc53w17sk7ycybf4hzxjs29ygy";
+      name = "xtreemfs-fix-for-openssl_1_1";
+    })
+  ];
+
+  preConfigure = ''
+    export JAVA_HOME=${jdk}
+    export ANT_HOME=${ant}
+
+    export BOOST_INCLUDEDIR=${boost.dev}/include
+    export BOOST_LIBRARYDIR=${boost.out}/lib
+    export CMAKE_INCLUDE_PATH=${openssl.dev}/include
+    export CMAKE_LIBRARY_PATH=${openssl.out}/lib
+
+    substituteInPlace cpp/cmake/FindValgrind.cmake \
+      --replace "/usr/local" "${valgrind}"
+
+    substituteInPlace cpp/CMakeLists.txt \
+      --replace '"/lib64" "/usr/lib64"' '"${attr.out}/lib" "${fuse}/lib"'
+
+    export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -I${fuse}/include"
+    export NIX_CFLAGS_LINK="$NIX_CFLAGS_LINK -L${fuse}/lib"
+
+    export DESTDIR=$out
+
+    substituteInPlace Makefile \
+      --replace "/usr/share/" "/share/" \
+      --replace 'BIN_DIR=$(DESTDIR)/usr/bin' "BIN_DIR=$out/bin"
+
+    substituteInPlace etc/init.d/generate_initd_scripts.sh \
+      --replace "/bin/bash" "${stdenv.shell}"
+
+    substituteInPlace cpp/thirdparty/gtest-1.7.0/configure \
+      --replace "/usr/bin/file" "${file}/bin/file"
+
+    substituteInPlace cpp/thirdparty/protobuf-2.5.0/configure \
+      --replace "/usr/bin/file" "${file}/bin/file"
+
+    substituteInPlace cpp/thirdparty/protobuf-2.5.0/gtest/configure \
+      --replace "/usr/bin/file" "${file}/bin/file"
+
+    # do not put cmake into buildInputs
+    export PATH="$PATH:${cmake}/bin"
+  '';
+
+  doCheck = false;
+
+  postInstall = ''
+    rm -r $out/sbin
+  '';
+
+  meta = {
+    description = "A distributed filesystem";
+    maintainers = with lib.maintainers; [ raskin matejc ];
+    platforms = lib.platforms.linux;
+    license = lib.licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/yandex-disk/default.nix b/nixpkgs/pkgs/tools/filesystems/yandex-disk/default.nix
new file mode 100644
index 000000000000..041d9a4e3f8b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/yandex-disk/default.nix
@@ -0,0 +1,64 @@
+{ stdenv, fetchurl, writeText, zlib, rpmextract, patchelf, which }:
+
+let
+  p = if stdenv.is64bit then {
+      arch = "x86_64";
+      gcclib = "${stdenv.cc.cc.lib}/lib64";
+      sha256 = "14bpc5ddhxvgfxkxhj5q9z443s7z4nn1zf4k1hxj7rbf13rcpg00";
+    }
+    else {
+      arch = "i386";
+      gcclib = "${stdenv.cc.cc.lib}/lib";
+      sha256 = "1s829q8gy9xgz0jm7w70aljqs2h49x402blqfr9zvn806aprmrm5";
+    };
+in
+stdenv.mkDerivation rec {
+
+  pname = "yandex-disk";
+  version = "0.1.5.1039";
+
+  src = fetchurl {
+    url = "https://repo.yandex.ru/yandex-disk/rpm/stable/${p.arch}/${pname}-${version}-1.fedora.${p.arch}.rpm";
+    sha256 = p.sha256;
+  };
+
+  builder = writeText "builder.sh" ''
+    . $stdenv/setup
+    mkdir -pv $out/bin
+    mkdir -pv $out/share
+    mkdir -pv $out/etc
+
+    mkdir -pv unpacked
+    cd unpacked
+    ${rpmextract}/bin/rpmextract $src
+
+    cp -r -t $out/bin usr/bin/*
+    cp -r -t $out/share usr/share/*
+    cp -r -t $out/etc etc/*
+
+    sed -i 's@have@${which}/bin/which >/dev/null 2>\&1@' \
+      $out/etc/bash_completion.d/yandex-disk-completion.bash
+
+    ${patchelf}/bin/patchelf \
+      --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      --set-rpath "${zlib.out}/lib:${p.gcclib}" \
+      $out/bin/yandex-disk
+  '';
+
+  meta = {
+    homepage = http://help.yandex.com/disk/cli-clients.xml;
+    description = "A free cloud file storage service";
+    maintainers = with stdenv.lib.maintainers; [ smironov jagajaga ];
+    platforms = ["i686-linux" "x86_64-linux"];
+    license = stdenv.lib.licenses.unfree;
+    longDescription = ''
+      Yandex.Disk console client for Linux lets you manage files on Disk without
+      using a window interface or programs that support WebDAV. The advantages
+      of the console client compared to a WebDAV connection:
+       * low system resource requirements;
+       * faster file reading and writing speeds;
+       * faster syncing with Disk's server;
+       * no need to be constantly connected to work with files.
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/zerofree/default.nix b/nixpkgs/pkgs/tools/filesystems/zerofree/default.nix
new file mode 100644
index 000000000000..734c8df9b6ae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/zerofree/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, e2fsprogs }:
+
+stdenv.mkDerivation rec {
+  pname = "zerofree";
+  version = "1.1.1";
+
+  src = fetchurl {
+    url = "https://frippery.org/uml/${pname}-${version}.tgz";
+    sha256 = "0rrqfa5z103ws89vi8kfvbks1cfs74ix6n1wb6vs582vnmhwhswm";
+  };
+
+  buildInputs = [ e2fsprogs ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp zerofree $out/bin
+'';
+
+  meta = {
+    homepage = https://frippery.org/uml/;
+    description = "Zero free blocks from ext2, ext3 and ext4 file-systems";
+    platforms = stdenv.lib.platforms.linux;
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = [ stdenv.lib.maintainers.theuni ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/zfstools/default.nix b/nixpkgs/pkgs/tools/filesystems/zfstools/default.nix
new file mode 100644
index 000000000000..476d80653127
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/zfstools/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchFromGitHub, ruby, zfs }:
+
+let version = "0.3.6"; in
+stdenv.mkDerivation rec {
+  pname = "zfstools";
+  inherit version;
+
+  src = fetchFromGitHub {
+    sha256 = "16lvw3xbmxp2pr8nixqn7lf4504zaaxvbbdnjkv4dggwd4lsdjyg";
+    rev = "v${version}";
+    repo = "zfstools";
+    owner = "bdrewery";
+  };
+
+  buildInputs = [ ruby ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp bin/* $out/bin/
+
+    cp -R lib $out/
+
+    for f in $out/bin/*; do
+      substituteInPlace $f --replace "/usr/bin/env ruby" "ruby -I$out/lib"
+    done
+
+    sed -e 's|cmd.*=.*"zfs |cmd = "${zfs}/sbin/zfs |g' -i $out/lib/zfstools/{dataset,snapshot}.rb
+  '';
+
+  meta = with stdenv.lib; {
+    inherit version;
+    inherit (src.meta) homepage;
+    description = "OpenSolaris-compatible auto-snapshotting script for ZFS";
+    longDescription = ''
+      zfstools is an OpenSolaris-like and compatible auto snapshotting script
+      for ZFS, which also supports auto snapshotting mysql databases.
+    '';
+    license = licenses.bsd2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/filesystems/zkfuse/default.nix b/nixpkgs/pkgs/tools/filesystems/zkfuse/default.nix
new file mode 100644
index 000000000000..89516d525af6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/filesystems/zkfuse/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, lib, zookeeper, zookeeper_mt, fuse, autoreconfHook, log4cxx, boost }:
+
+stdenv.mkDerivation {
+  pname = "zkfuse";
+  inherit (zookeeper) version src;
+
+  sourceRoot = "${zookeeper.name}/src/contrib/zkfuse";
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ zookeeper_mt log4cxx boost fuse ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -v src/zkfuse $out/bin
+  '';
+
+  meta = with lib; {
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ cstrahan ];
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/appleseed/default.nix b/nixpkgs/pkgs/tools/graphics/appleseed/default.nix
new file mode 100644
index 000000000000..cafe0bb7b11a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/appleseed/default.nix
@@ -0,0 +1,83 @@
+{ stdenv, fetchFromGitHub, cmake, boost165, pkgconfig, guile,
+eigen, libpng, python, libGLU, qt4, openexr, openimageio,
+opencolorio, xercesc, ilmbase, osl, seexpr, makeWrapper
+}:
+
+let boost_static = boost165.override {
+  enableStatic = true;
+  enablePython = true;
+};
+in stdenv.mkDerivation rec {
+
+  pname = "appleseed";
+  version = "2.0.5-beta";
+
+  src = fetchFromGitHub {
+    owner  = "appleseedhq";
+    repo   = "appleseed";
+    rev    = version;
+    sha256 = "1sq9s0rzjksdn8ayp1g17gdqhp7fqks8v1ddd3i5rsl96b04fqx5";
+  };
+  buildInputs = [
+    cmake pkgconfig boost_static guile eigen libpng python
+    libGLU qt4 openexr openimageio opencolorio xercesc
+    osl seexpr makeWrapper
+  ];
+
+  NIX_CFLAGS_COMPILE = toString [
+    "-I${openexr.dev}/include/OpenEXR"
+    "-I${ilmbase.dev}/include/OpenEXR"
+    "-I${openimageio.dev}/include/OpenImageIO"
+
+    "-Wno-unused-but-set-variable"
+    "-Wno-error=class-memaccess"
+    "-Wno-error=maybe-uninitialized"
+    "-Wno-error=catch-value"
+    "-Wno-error=stringop-truncation"
+  ];
+
+  cmakeFlags = [
+      "-DUSE_EXTERNAL_XERCES=ON" "-DUSE_EXTERNAL_OCIO=ON" "-DUSE_EXTERNAL_OIIO=ON"
+      "-DUSE_EXTERNAL_OSL=ON" "-DWITH_CLI=ON" "-DWITH_STUDIO=ON" "-DWITH_TOOLS=ON"
+      "-DUSE_EXTERNAL_PNG=ON" "-DUSE_EXTERNAL_ZLIB=ON"
+      "-DUSE_EXTERNAL_EXR=ON" "-DUSE_EXTERNAL_SEEXPR=ON"
+      "-DWITH_PYTHON=ON"
+      "-DWITH_DISNEY_MATERIAL=ON"
+      "-DUSE_SSE=ON"
+      "-DUSE_SSE42=ON"
+  ];
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "Open source, physically-based global illumination rendering engine";
+    homepage = https://appleseedhq.net/;
+    maintainers = with maintainers; [ hodapp ];
+    license = licenses.mit;
+    platforms = platforms.linux;
+  };
+
+  # Work around a bug in the CMake build:
+  postInstall = ''
+    chmod a+x $out/bin/*
+    wrapProgram $out/bin/appleseed.studio --set PYTHONHOME ${python}
+  '';
+}
+
+# TODO: Is the below problematic?
+
+# CMake Warning (dev) at /nix/store/dsyw2zla2h3ld2p0jj4cv0j3wal1bp3h-cmake-3.11.2/share/cmake-3.11/Modules/FindOpenGL.cmake:270 (message):
+#  Policy CMP0072 is not set: FindOpenGL prefers GLVND by default when
+#  available.  Run "cmake --help-policy CMP0072" for policy details.  Use the
+#  cmake_policy command to set the policy and suppress this warning.
+#
+#  FindOpenGL found both a legacy GL library:
+#
+#    OPENGL_gl_LIBRARY: /nix/store/yxrgmcz2xlgn113wz978a91qbsy4rc8g-libGL-1.0.0/lib/libGL.so
+#
+#  and GLVND libraries for OpenGL and GLX:
+#
+#    OPENGL_opengl_LIBRARY: /nix/store/yxrgmcz2xlgn113wz978a91qbsy4rc8g-libGL-1.0.0/lib/libOpenGL.so
+#    OPENGL_glx_LIBRARY: /nix/store/yxrgmcz2xlgn113wz978a91qbsy4rc8g-libGL-1.0.0/lib/libGLX.so
+#
+#  OpenGL_GL_PREFERENCE has not been set to "GLVND" or "LEGACY", so for
+#  compatibility with CMake 3.10 and below the legacy GL library will be used.
diff --git a/nixpkgs/pkgs/tools/graphics/argyllcms/default.nix b/nixpkgs/pkgs/tools/graphics/argyllcms/default.nix
new file mode 100644
index 000000000000..1326d0454591
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/argyllcms/default.nix
@@ -0,0 +1,124 @@
+{ stdenv, fetchzip, jam, unzip, libX11, libXxf86vm, libXrandr, libXinerama
+, libXrender, libXext, libtiff, libjpeg, libpng, libXScrnSaver, writeText
+, libXdmcp, libXau, lib, openssl }:
+let
+  version = "2.1.1";
+ in
+stdenv.mkDerivation rec {
+  pname = "argyllcms";
+  inherit version;
+
+  src = fetchzip {
+    # Kind of flacky URL, it was reaturning 406 and inconsistent binaries for a
+    # while on me. It might be good to find a mirror
+    url = "https://www.argyllcms.com/Argyll_V${version}_src.zip";
+    sha256 = "0zq3fipky44xg536kdhg9bchi6s9ka7n1q73fwf9ja766s8rj99m";
+
+    # The argyllcms web server doesn't like curl ...
+    curlOpts = "--user-agent 'Mozilla/5.0'";
+  };
+
+  patches = [ ./gcc5.patch ];
+
+  # The contents of this file comes from the Jamtop file from the
+  # root of the ArgyllCMS distribution, rewritten to pick up Nixpkgs
+  # library paths. When ArgyllCMS is updated, make sure that changes
+  # in that file is reflected here.
+  jamTop = writeText "argyllcms_jamtop" ''
+    DESTDIR = "/" ;
+    REFSUBDIR = "ref" ;
+
+    # Keep this DESTDIR anchored to Jamtop. PREFIX is used literally
+    ANCHORED_PATH_VARS = DESTDIR ;
+
+    # Tell standalone libraries that they are part of Argyll:
+    DEFINES += ARGYLLCMS ;
+
+    # enable serial instruments & support
+    USE_SERIAL = true ;
+
+    # enable fast serial instruments & support
+    USE_FAST_SERIAL = true ;                # (Implicit in USE_SERIAL too)
+
+    # enable USB instruments & support
+    USE_USB = true ;
+
+    # enable dummy Demo Instrument (only if code is available)
+    USE_DEMOINST = true ;
+
+    # Use ArgyllCMS version of libusb (deprecated - don't use)
+    USE_LIBUSB = false ;
+
+    # For testing CCast
+    DEFINES += CCTEST_PATTERN ;
+
+    JPEGLIB = ;
+    JPEGINC = ;
+    HAVE_JPEG = true ;
+
+    TIFFLIB = ;
+    TIFFINC = ;
+    HAVE_TIFF = true ;
+
+    PNGLIB = ;
+    PNGINC = ;
+    HAVE_PNG = true ;
+
+    ZLIB = ;
+    ZINC = ;
+    HAVE_Z = true ;
+
+    SSLLIB = ;
+    SSLINC = ;
+    HAVE_SSL = true ;
+
+    LINKFLAGS +=
+      ${lib.concatStringsSep " " (map (x: "-L${x}/lib") buildInputs)}
+      -ldl -lrt -lX11 -lXext -lXxf86vm -lXinerama -lXrandr -lXau -lXdmcp -lXss
+      -ljpeg -ltiff -lpng -lssl ;
+  '';
+
+  nativeBuildInputs = [ jam unzip ];
+
+  preConfigure = ''
+    cp ${jamTop} Jamtop
+    substituteInPlace Makefile --replace "-j 3" "-j $NIX_BUILD_CORES"
+    # Remove tiff, jpg and png to be sure the nixpkgs-provided ones are used
+    rm -rf tiff jpg png
+
+    unset AR
+  '';
+
+  buildInputs = [
+    libtiff libjpeg libpng libX11 libXxf86vm libXrandr libXinerama libXext
+    libXrender libXScrnSaver libXdmcp libXau openssl
+  ];
+
+  buildFlags = [ "all" ];
+
+  makeFlags = [
+    "PREFIX=${placeholder ''out''}"
+  ];
+
+  # Install udev rules, but remove lines that set up the udev-acl
+  # stuff, since that is handled by udev's own rules (70-udev-acl.rules)
+  #
+  # Move ref to a better place (there must be a way to make the install target
+  # do that for us)
+  postInstall = ''
+    rm -v $out/bin/License.txt
+    mkdir -p $out/etc/udev/rules.d
+    sed -i '/udev-acl/d' usb/55-Argyll.rules
+    cp -v usb/55-Argyll.rules $out/etc/udev/rules.d/
+    mkdir -p $out/share/
+    mv $out/ref $out/share/argyllcms
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://www.argyllcms.com;
+    description = "Color management system (compatible with ICC)";
+    license = licenses.gpl3;
+    maintainers = [];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/argyllcms/gcc5.patch b/nixpkgs/pkgs/tools/graphics/argyllcms/gcc5.patch
new file mode 100644
index 000000000000..28067455c33e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/argyllcms/gcc5.patch
@@ -0,0 +1,20 @@
+Description: Fix FTBFS with GCC 5
+Author: James Cowgill <james410@cowgill.org.uk>
+Bug-Debian: https://bugs.debian.org/777779
+Forwarded: no
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+--- a/icc/icc.h
++++ b/icc/icc.h
+@@ -100,7 +100,11 @@
+ #define CF64PREC "LL"		/* Constant precision specifier */
+ 
+ #ifndef ATTRIBUTE_NORETURN
++#ifdef _MSC_VER
+ # define ATTRIBUTE_NORETURN __declspec(noreturn)
++#else
++# define ATTRIBUTE_NORETURN __attribute__((noreturn))
++#endif
+ #endif
+ 
+ #else  /* !__STDC_VERSION__ */
diff --git a/nixpkgs/pkgs/tools/graphics/asymptote/default.nix b/nixpkgs/pkgs/tools/graphics/asymptote/default.nix
new file mode 100644
index 000000000000..6246a5733405
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/asymptote/default.nix
@@ -0,0 +1,78 @@
+{ stdenv, fetchFromGitHub, fetchurl
+, autoreconfHook, bison, glm, yacc, flex
+, freeglut, ghostscriptX, imagemagick, fftw
+, boehmgc, libGLU, libGL, mesa, ncurses, readline, gsl, libsigsegv
+, python3Packages
+, zlib, perl
+, texLive, texinfo
+, darwin
+}:
+
+stdenv.mkDerivation rec {
+  version = "2.62";
+  pname = "asymptote";
+
+  src = fetchFromGitHub {
+    owner = "vectorgraphics";
+    repo = pname;
+    rev = version;
+    sha256 = "1lb3a8r2gv0437viwy25s34g05x5v81gk0nxlgx7hzwv7b9zkv5s";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    bison
+    flex
+    yacc
+    texinfo
+  ];
+
+  buildInputs = [
+    ghostscriptX imagemagick fftw
+    boehmgc ncurses readline gsl libsigsegv
+    zlib perl
+    texLive
+  ] ++ (with python3Packages; [
+    python
+    pyqt5
+  ]);
+
+  propagatedBuildInputs = [
+    glm
+  ] ++ stdenv.lib.optionals stdenv.isLinux [
+    freeglut libGLU libGL mesa.osmesa
+  ] ++ stdenv.lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [
+    OpenGL GLUT Cocoa
+  ]);
+
+  preConfigure = ''
+    HOME=$TMP
+  '';
+
+  configureFlags = [
+    "--with-latex=$out/share/texmf/tex/latex"
+    "--with-context=$out/share/texmf/tex/context/third"
+  ];
+
+  NIX_CFLAGS_COMPILE = "-I${boehmgc.dev}/include/gc";
+
+  postInstall = ''
+    mv $out/share/info/asymptote/*.info $out/share/info/
+    sed -i -e 's|(asymptote/asymptote)|(asymptote)|' $out/share/info/asymptote.info
+    rmdir $out/share/info/asymptote
+    rm -f $out/share/info/dir
+
+    rm -rf $out/share/texmf
+    install -Dt $out/share/emacs/site-lisp/${pname} $out/share/asymptote/*.el
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description =  "A tool for programming graphics intended to replace Metapost";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.raskin maintainers.peti ];
+    broken = stdenv.isDarwin;  # https://github.com/vectorgraphics/asymptote/issues/69
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/asymptote/default.upstream b/nixpkgs/pkgs/tools/graphics/asymptote/default.upstream
new file mode 100644
index 000000000000..e86d81ba4435
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/asymptote/default.upstream
@@ -0,0 +1,4 @@
+url https://sourceforge.net/projects/asymptote/files/
+SF_version_dir
+version_link 'src[.]tgz/download$'
+SF_redirect
diff --git a/nixpkgs/pkgs/tools/graphics/barcode/default.nix b/nixpkgs/pkgs/tools/graphics/barcode/default.nix
new file mode 100644
index 000000000000..179085e1fd6b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/barcode/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  version = "0.99";
+  pname = "barcode";
+  src = fetchurl {
+    url = "mirror://gnu/${pname}/${pname}-${version}.tar.xz";
+    sha256 = "1indapql5fjz0bysyc88cmc54y8phqrbi7c76p71fgjp45jcyzp8";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  meta = with stdenv.lib; {
+    description = "GNU barcode generator";
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux; # Maybe other non-darwin Unix
+    downloadPage = "https://ftp.gnu.org/gnu/barcode/";
+    updateWalker = true;
+    homepage = https://www.gnu.org/software/barcode/;
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/blockhash/default.nix b/nixpkgs/pkgs/tools/graphics/blockhash/default.nix
new file mode 100644
index 000000000000..b4f99a9192cd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/blockhash/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub, python, pkgconfig, imagemagick, wafHook }:
+
+stdenv.mkDerivation rec {
+  pname = "blockhash";
+  version = "0.3.1";
+
+  src = fetchFromGitHub {
+    owner = "commonsmachinery";
+    repo = "blockhash";
+    rev = "v${version}";
+    sha256 = "0m7ikppl42iicgmwsb7baajmag7v0p1ab06xckifvrr0zm21bq9p";
+  };
+
+  nativeBuildInputs = [ python pkgconfig wafHook ];
+  buildInputs = [ imagemagick ];
+
+  meta = with stdenv.lib; {
+    homepage = "http://blockhash.io/";
+    description = ''
+      This is a perceptual image hash calculation tool based on algorithm
+      descibed in Block Mean Value Based Image Perceptual Hashing by Bian Yang,
+      Fan Gu and Xiamu Niu.
+    '';
+    license = licenses.mit;
+    maintainers = [ maintainers.infinisil ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/blur-effect/default.nix b/nixpkgs/pkgs/tools/graphics/blur-effect/default.nix
new file mode 100644
index 000000000000..499004013196
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/blur-effect/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchFromGitHub, pkgconfig, cmake, gdk-pixbuf, libGL, mesa }:
+
+stdenv.mkDerivation rec {
+  pname = "blur-effect";
+  version = "1.1.3";
+
+  src = fetchFromGitHub {
+    owner = "sonald";
+    repo = pname;
+    rev = version;
+    sha256 = "0cjw7iz0p7x1bi4vmwrivfidry5wlkgfgdl9wly88cm3z9ib98jj";
+  };
+
+  nativeBuildInputs = [
+    pkgconfig
+    cmake
+  ];
+
+  buildInputs = [
+    gdk-pixbuf
+    libGL
+    mesa
+  ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/sonald/blur-effect;
+    description = "Off-screen image blurring utility using OpenGL ES 3.0";
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+    broken = stdenv.hostPlatform.isDarwin; # packages 'libdrm' and 'gbm' not found
+    maintainers = with maintainers; [ romildo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/briss/default.nix b/nixpkgs/pkgs/tools/graphics/briss/default.nix
new file mode 100644
index 000000000000..e57f80f738f3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/briss/default.nix
@@ -0,0 +1,33 @@
+# The releases of this project are apparently precompiled to .jar files.
+
+{ stdenv, fetchurl, jre, makeWrapper }:
+
+let
+
+  version = "0.9";
+  sha256 = "45dd668a9ceb9cd59529a9fefe422a002ee1554a61be07e6fc8b3baf33d733d9";
+
+in stdenv.mkDerivation {
+  pname = "briss";
+  inherit version;
+  src = fetchurl {
+    url = "mirror://sourceforge/briss/briss-${version}.tar.gz";
+    inherit sha256;
+  };
+
+  nativeBuildInputs = [makeWrapper];
+
+  installPhase = ''
+    mkdir -p "$out/bin";
+    mkdir -p "$out/share";
+    install -D -m444 -t "$out/share" *.jar
+    makeWrapper "${jre}/bin/java" "$out/bin/briss" --add-flags "-Xms128m -Xmx1024m -cp \"$out/share/\" -jar \"$out/share/briss-${version}.jar\""
+  '';
+
+  meta = {
+    homepage = https://sourceforge.net/projects/briss/;
+    description = "Java application for cropping PDF files";
+    license = stdenv.lib.licenses.gpl3;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/cfdg/default.nix b/nixpkgs/pkgs/tools/graphics/cfdg/default.nix
new file mode 100644
index 000000000000..2c96e872f4e6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/cfdg/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl, libpng, bison, flex, ffmpeg }:
+
+stdenv.mkDerivation rec {
+  pname = "cfdg";
+  version = "3.0.9";
+  src = fetchurl {
+    sha256 = "1jqpinz6ri4a2l04mf2z1ljalkdk1m07hj47lqkh8gbf2slfs0jl";
+    url = "http://www.contextfreeart.org/download/ContextFreeSource${version}.tgz";
+  };
+
+  buildInputs = [ libpng bison flex ffmpeg ];
+
+  postPatch = ''
+    sed -e "/YY_NO_UNISTD/a#include <stdio.h>" -i src-common/cfdg.l
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp cfdg $out/bin/
+
+    mkdir -p $out/share/doc/${pname}-${version}
+    cp *.txt $out/share/doc/${pname}-${version}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Context-free design grammar - a tool for graphics generation";
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+    homepage = https://contextfreeart.org/;
+    license = licenses.gpl2;
+    downloadPage = "https://contextfreeart.org/mediawiki/index.php/Download_page";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/cfdg/src-for-default.nix b/nixpkgs/pkgs/tools/graphics/cfdg/src-for-default.nix
new file mode 100644
index 000000000000..6d98ea240de6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/cfdg/src-for-default.nix
@@ -0,0 +1,9 @@
+{
+   version="3.0.2";
+   name="cfdg-3.0.2";
+   hash="1pd1hjippbhad8l4s4lsglykh22i24qfrgmnxrsx71bvcqbr356p";
+   url="http://www.contextfreeart.org/download/ContextFreeSource3.0.2.tgz";
+   advertisedUrl="http://www.contextfreeart.org/download/ContextFreeSource3.0.2.tgz";
+  
+  
+}
diff --git a/nixpkgs/pkgs/tools/graphics/cfdg/src-info-for-default.nix b/nixpkgs/pkgs/tools/graphics/cfdg/src-info-for-default.nix
new file mode 100644
index 000000000000..0e2018b6bfdd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/cfdg/src-info-for-default.nix
@@ -0,0 +1,6 @@
+{
+  downloadPage = "https://contextfreeart.org/mediawiki/index.php/Download_page";
+  baseName = "cfdg";
+  sourceRegexp = ''.*[.]tgz'';
+  versionExtractorSedScript = ''s/[^0-9]*([0-9.]*)[.]tgz/\1/'';
+}
diff --git a/nixpkgs/pkgs/tools/graphics/convchain/default.nix b/nixpkgs/pkgs/tools/graphics/convchain/default.nix
new file mode 100644
index 000000000000..b1ce3082d25b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/convchain/default.nix
@@ -0,0 +1,40 @@
+{stdenv, fetchFromGitHub, mono}:
+stdenv.mkDerivation rec {
+  pname = "convchain";
+  version = "0.0pre20160901";
+  src = fetchFromGitHub {
+    owner = "mxgmn";
+    repo = "ConvChain";
+    rev = "8abb1e88a496fcae4c0ae31acd4eea55957dab68";
+    sha256 = "0lnscljgbw0s90sfcahwvnxakml0f4d8jxi5ikm4ak8qgnvw6rql";
+  };
+  buildPhase = ''
+    mcs ConvChain.cs -out:convchain.exe -r:System.Drawing
+    mcs ConvChainFast.cs -out:convchainfast.exe -r:System.Drawing
+    grep -m1 -B999 '^[*][/]' ConvChainFast.cs > COPYING.MIT
+  '';
+  installPhase = ''
+    mkdir -p "$out"/{bin,share/doc/convchain,share/convchain}
+    cp README.md COPYING.MIT "$out"/share/doc/convchain
+    cp convchain*.exe "$out"/bin
+    cp -r [Ss]amples samples.xml "$out/share/convchain"
+
+    echo "#! ${stdenv.shell}" >> "$out/bin/convchain"
+    echo "chmod u+w ." >> "$out/bin/convchain"
+    echo "'${mono}/bin/mono' '$out/bin/convchain.exe' \"\$@\"" >>  "$out/bin/convchain"
+    chmod a+x "$out/bin/convchain"
+
+    echo "#! ${stdenv.shell}" >> "$out/bin/convchainfast"
+    echo "chmod u+w ." >> "$out/bin/convchainfast"
+    echo "'${mono}/bin/mono' '$out/bin/convchainfast.exe' \"\$@\"" >>  "$out/bin/convchainfast"
+    chmod a+x "$out/bin/convchainfast"
+  '';
+  buildInputs = [mono];
+  meta = {
+    inherit version;
+    description = ''Bitmap generation from a single example with convolutions and MCMC'';
+    license = stdenv.lib.licenses.mit;
+    maintainers = [stdenv.lib.maintainers.raskin];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/cuneiform/default.nix b/nixpkgs/pkgs/tools/graphics/cuneiform/default.nix
new file mode 100644
index 000000000000..3d48b328934b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/cuneiform/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, cmake, imagemagick }:
+
+stdenv.mkDerivation {
+  pname = "cuneiform";
+  version = "1.1.0";
+
+  src = fetchurl {
+    url = "https://launchpad.net/cuneiform-linux/1.1/1.1/+download/cuneiform-linux-1.1.0.tar.bz2";
+    sha256 = "1bdvppyfx2184zmzcylskd87cxv56d8f32jf7g1qc8779l2hszjp";
+  };
+
+  patches = [
+  (fetchurl {
+    url = "https://git.archlinux.org/svntogit/community.git/plain/cuneiform/trunk/build-fix.patch?id=a2ec92f05de006b56d16ac6a6c370d54a554861a";
+    sha256 = "19cmrlx4khn30qqrpyayn7bicg8yi0wpz1x1bvqqrbvr3kwldxyj";
+  })
+  ];
+
+  postPatch = ''
+    rm cuneiform_src/Kern/hhh/tigerh/h/strings.h
+  '';
+
+  buildInputs = [ imagemagick ];
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = with stdenv.lib; {
+    description = "Multi-language OCR system";
+    homepage = https://launchpad.net/cuneiform-linux;
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.raskin ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/cuneiform/default.upstream b/nixpkgs/pkgs/tools/graphics/cuneiform/default.upstream
new file mode 100644
index 000000000000..4fb85a2a1e89
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/cuneiform/default.upstream
@@ -0,0 +1,8 @@
+url https://launchpad.net/cuneiform-linux/+download
+
+do_overwrite () {
+  ensure_hash
+  set_var_value version "$CURRENT_VERSION"
+  set_var_value sha256 "$CURRENT_HASH"
+  set_var_value ' url' "$CURRENT_URL"
+}
diff --git a/nixpkgs/pkgs/tools/graphics/dcraw/default.nix b/nixpkgs/pkgs/tools/graphics/dcraw/default.nix
new file mode 100644
index 000000000000..11ff4b743ddd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/dcraw/default.nix
@@ -0,0 +1,39 @@
+{stdenv, fetchurl, libjpeg, lcms2, gettext, jasper, libiconv }:
+
+stdenv.mkDerivation rec {
+  name = "dcraw-9.28.0";
+
+  src = fetchurl {
+    url = "https://www.dechifro.org/dcraw/archive/${name}.tar.gz";
+    sha256 = "1fdl3xa1fbm71xzc3760rsjkvf0x5jdjrvdzyg2l9ka24vdc7418";
+  };
+
+  nativeBuildInputs = stdenv.lib.optional stdenv.isDarwin libiconv;
+  buildInputs = [ libjpeg lcms2 gettext jasper ];
+
+  patchPhase = ''
+    substituteInPlace install \
+      --replace 'prefix=/usr/local' 'prefix=$out' \
+      --replace gcc '$CC'
+  '';
+
+  buildPhase = ''
+    mkdir -p $out/bin
+    sh -e install
+  '';
+
+  meta = {
+    homepage = https://www.dechifro.org/dcraw/;
+    description = "Decoder for many camera raw picture formats";
+    license = stdenv.lib.licenses.free;
+    platforms = stdenv.lib.platforms.unix; # Once had cygwin problems
+    maintainers = [ ];
+    knownVulnerabilities = [
+      "CVE-2018-19655"
+      "CVE-2018-19565"
+      "CVE-2018-19566"
+      "CVE-2018-19567"
+      "CVE-2018-19568"
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/diagrams-builder/default.nix b/nixpkgs/pkgs/tools/graphics/diagrams-builder/default.nix
new file mode 100644
index 000000000000..a12e5dbb8bb3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/diagrams-builder/default.nix
@@ -0,0 +1,44 @@
+/*
+  If user need access to more haskell package for building his
+  diagrams, he simply has to pass these package through the
+  extra packages function as follow in `config.nix`:
+  
+  ~~~
+  diagrams-builder.override {
+    extraPackages = self : [myHaskellPackage];
+  }
+  ­~~~
+*/
+
+{ stdenv, ghcWithPackages, makeWrapper, diagrams-builder, extraPackages ? (self: []) }:
+
+let
+
+  # Used same technique as for the yiCustom package.
+  wrappedGhc = ghcWithPackages 
+    (self: [ diagrams-builder ] ++ extraPackages self);
+  ghcVersion = wrappedGhc.version;
+
+  exeWrapper = backend : ''
+    makeWrapper \
+    "${diagrams-builder}/bin/diagrams-builder-${backend}" "$out/bin/diagrams-builder-${backend}" \
+      --set NIX_GHC ${wrappedGhc}/bin/ghc \
+      --set NIX_GHC_LIBDIR ${wrappedGhc}/lib/ghc-${ghcVersion}
+  '';
+  
+  backends = ["svg" "cairo" "ps"];
+
+in
+
+stdenv.mkDerivation {
+  name = "diagrams-builder";
+
+  buildInputs = [ makeWrapper ];
+
+  buildCommand = with stdenv.lib; 
+    concatStrings (intersperse "\n" (map exeWrapper backends));
+
+  # Will be faster to build the wrapper locally then to fetch it from a binary cache.
+  preferLocalBuild = true;
+  meta = diagrams-builder.meta;
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/graphics/ditaa/default.nix b/nixpkgs/pkgs/tools/graphics/ditaa/default.nix
new file mode 100644
index 000000000000..c8c330d80e5b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/ditaa/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, jre }:
+
+stdenv.mkDerivation rec {
+  name = "ditaa-0.11.0";
+
+  src = fetchurl {
+    url = https://github.com/stathissideris/ditaa/releases/download/v0.11.0/ditaa-0.11.0-standalone.jar;
+    sha256 = "1acnl7khz8aasg230nbsx9dyf8716scgb5l3679cb2bdzxisl64l";
+  };
+
+  phases = [ "installPhase" ];
+
+  installPhase = ''
+    mkdir -p "$out/bin"
+    mkdir -p "$out/lib"
+
+    cp ${src} "$out/lib/ditaa.jar"
+
+    cat > "$out/bin/ditaa" << EOF
+    #!${stdenv.shell}
+    exec ${jre}/bin/java -jar "$out/lib/ditaa.jar" "\$@"
+    EOF
+
+    chmod a+x "$out/bin/ditaa"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Convert ascii art diagrams into proper bitmap graphics";
+    homepage = https://github.com/stathissideris/ditaa;
+    license = licenses.lgpl3;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/dmtx-utils/default.nix b/nixpkgs/pkgs/tools/graphics/dmtx-utils/default.nix
new file mode 100644
index 000000000000..bb816e489404
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/dmtx-utils/default.nix
@@ -0,0 +1,30 @@
+{stdenv, fetchurl, libdmtx, pkgconfig, imagemagick}:
+let
+  s = # Generated upstream information
+  rec {
+    baseName="dmtx-utils";
+    version="0.7.4";
+    name="${baseName}-${version}";
+    hash="1di8ymlziy9856abd6rb72z0zqzmrff4r3vql0q9r5sk5ax4s417";
+    url="mirror://sourceforge/project/libdmtx/libdmtx/0.7.4/dmtx-utils-0.7.4.tar.gz";
+    sha256="1di8ymlziy9856abd6rb72z0zqzmrff4r3vql0q9r5sk5ax4s417";
+  };
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [
+    libdmtx imagemagick
+  ];
+in
+stdenv.mkDerivation {
+  inherit (s) name version;
+  inherit nativeBuildInputs buildInputs;
+  src = fetchurl {
+    inherit (s) url sha256;
+  };
+  meta = {
+    inherit (s) version;
+    description = "Data matrix command-line utilities";
+    license = stdenv.lib.licenses.lgpl2 ;
+    maintainers = [stdenv.lib.maintainers.raskin];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/dmtx-utils/default.upstream b/nixpkgs/pkgs/tools/graphics/dmtx-utils/default.upstream
new file mode 100644
index 000000000000..2bb7fe31bf7c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/dmtx-utils/default.upstream
@@ -0,0 +1,4 @@
+url https://sourceforge.net/projects/libdmtx/files/libdmtx/
+SF_version_dir
+version_link 'dmtx-utils-.*[.]tar[.][a-z0-9]+/download$'
+SF_redirect
diff --git a/nixpkgs/pkgs/tools/graphics/dpic/default.nix b/nixpkgs/pkgs/tools/graphics/dpic/default.nix
new file mode 100644
index 000000000000..62fa83800cba
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/dpic/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "dpic";
+  version = "2019.11.30";
+
+  src = fetchurl {
+    url = "https://ece.uwaterloo.ca/~aplevich/dpic/${pname}-${version}.tar.gz";
+    sha256 = "0rgd31mdbaqbm9rz49872s17n25n5ajxcn61xailz3f0kzr4f3dg";
+  };
+
+  phases = [ "unpackPhase" "buildPhase" "installPhase" ];
+
+  makeFlags = [ "CC=${stdenv.cc.outPath}/bin/cc" ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -fv dpic $out/bin
+  '';
+
+  meta = {
+    homepage = https://ece.uwaterloo.ca/~aplevich/dpic/;
+    description = "An implementation of the pic little language for creating drawings";
+    license = stdenv.lib.licenses.bsd2;
+    maintainers = [ stdenv.lib.maintainers.aespinosa ];
+    platforms = stdenv.lib.platforms.all;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/graphics/editres/default.nix b/nixpkgs/pkgs/tools/graphics/editres/default.nix
new file mode 100644
index 000000000000..cb83e02689cf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/editres/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, pkgconfig, libXt, libXaw, libXres, utilmacros }:
+
+stdenv.mkDerivation rec {
+  name = "editres-1.0.7";
+
+  src = fetchurl {
+    url = "mirror://xorg/individual/app/${name}.tar.gz";
+    sha256 = "10mbgijb6ac6wqb2grpy9mrazzw68jxjkxr9cbdf1111pa64yj19";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libXt libXaw libXres utilmacros ];
+
+  configureFlags = [ "--with-appdefaultdir=$(out)/share/X11/app-defaults/editres" ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = with stdenv.lib; {
+    homepage = https://cgit.freedesktop.org/xorg/app/editres/;
+    description = "A dynamic resource editor for X Toolkit applications";
+    license = licenses.mit;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/enblend-enfuse/default.nix b/nixpkgs/pkgs/tools/graphics/enblend-enfuse/default.nix
new file mode 100644
index 000000000000..8c46e8154c10
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/enblend-enfuse/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl
+, boost, freeglut, glew, gsl, lcms2, libpng, libtiff, libGLU, libGL, vigra
+, help2man, pkgconfig, perl, texlive }:
+
+stdenv.mkDerivation rec {
+  pname = "enblend-enfuse";
+  version = "4.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/enblend/${pname}-${version}.tar.gz";
+    sha256 = "0j5x011ilalb47ssah50ag0a4phgh1b0wdgxdbbp1gcyjcjf60w7";
+  };
+
+  buildInputs = [ boost freeglut glew gsl lcms2 libpng libtiff libGLU libGL vigra ];
+
+  nativeBuildInputs = [ help2man perl pkgconfig texlive.combined.scheme-small ];
+
+  preConfigure = ''
+    patchShebangs src/embrace
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    homepage = http://enblend.sourceforge.net/;
+    description = "Blends away the seams in a panoramic image mosaic using a multiresolution spline";
+    license = licenses.gpl2;
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/eplot/default.nix b/nixpkgs/pkgs/tools/graphics/eplot/default.nix
new file mode 100644
index 000000000000..ff2091fc2998
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/eplot/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, fetchurl, gnuplot, ruby }:
+
+stdenv.mkDerivation {
+  name = "eplot-2.07";
+
+  # Upstream has been contacted (2015-03) regarding providing versioned
+  # download URLs. Initial response was positive, but no action yet.
+  src = fetchurl {
+    url = "http://liris.cnrs.fr/christian.wolf/software/eplot/download/eplot";
+    sha256 = "0y9x82i3sfpgxsqz2w42r6iad6ph7vxb7np1xbwapx5iipciclw5";
+  };
+
+  ecSrc = fetchurl {
+    url = "http://liris.cnrs.fr/christian.wolf/software/eplot/download/ec";
+    sha256 = "0fg31g8mrcx14h2rjcf091cbd924n19z55iscaiflspifya30yhd";
+  };
+
+  buildInputs = [ ruby ];
+
+  dontUnpack = true;
+
+  installPhase = ''
+    mkdir -p "$out/bin"
+    cp "$src" "$out/bin/eplot"
+    cp "$ecSrc" "$out/bin/ec"
+    chmod +x "$out/bin/"*
+
+    sed -i -e "s|gnuplot -persist|${gnuplot}/bin/gnuplot -persist|" "$out/bin/eplot"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Create plots quickly with gnuplot";
+    longDescription = ''
+      eplot ("easy gnuplot") is a ruby script which allows to pipe data easily
+      through gnuplot and create plots quickly, which can be saved in
+      postscript, PDF, PNG or EMF files. Plotting of multiple files into a
+      single diagram is supported.
+
+      This package also includes the complementary 'ec' tool (say "extract
+      column").
+    '';
+    homepage = http://liris.cnrs.fr/christian.wolf/software/eplot/;
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/epstool/default.nix b/nixpkgs/pkgs/tools/graphics/epstool/default.nix
new file mode 100644
index 000000000000..2ad52d2de437
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/epstool/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  version = "3.08";
+  pname = "epstool";
+
+  src = fetchurl {
+    url = "http://ftp.de.debian.org/debian/pool/main/e/epstool/epstool_${version}+repack.orig.tar.gz";
+    sha256 = "1pfgqbipwk36clhma2k365jkpvyy75ahswn8jczzys382jalpwgk";
+  };
+
+  installPhase = ''
+    make EPSTOOL_ROOT=$out install
+  '';
+
+  patches = [ ./gcc43.patch ];
+
+  meta = with stdenv.lib; {
+    description = "A utility to create or extract preview images in EPS files, fix bounding boxes and convert to bitmaps";
+    homepage = http://pages.cs.wisc.edu/~ghost/gsview/epstool.htm;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.asppsa ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/epstool/gcc43.patch b/nixpkgs/pkgs/tools/graphics/epstool/gcc43.patch
new file mode 100644
index 000000000000..398ce08c5182
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/epstool/gcc43.patch
@@ -0,0 +1,20 @@
+--- epstool-3.08.orig/src/epstool.c	2005-06-10 04:41:00.000000000 -0500
++++ epstool-3.08/src/epstool.c	2009-02-16 20:55:43.186140029 -0600
+@@ -2824,7 +2824,7 @@
+ 		code = -1;
+ 	}
+ 	if ((code==0) && stdout_name && (hChildStdoutWr == -1)) {
+-	    handle = open(stdout_name, O_WRONLY | O_CREAT);
++	    handle = open(stdout_name, O_WRONLY | O_CREAT, 0644);
+ 	    hChildStdoutWr = dup2(handle, 1);
+ 	    if (handle != -1)
+ 		close(handle);
+@@ -2832,7 +2832,7 @@
+ 		code = -1;
+ 	}
+ 	if ((code==0) && stderr_name && (hChildStderrWr == -1)) {
+-	    handle = open(stderr_name, O_WRONLY | O_CREAT);
++	    handle = open(stderr_name, O_WRONLY | O_CREAT, 0644);
+ 	    hChildStderrWr = dup2(handle, 2);
+ 	    if (handle != -1)
+ 		close(handle);
diff --git a/nixpkgs/pkgs/tools/graphics/escrotum/default.nix b/nixpkgs/pkgs/tools/graphics/escrotum/default.nix
new file mode 100644
index 000000000000..16f33251dd6a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/escrotum/default.nix
@@ -0,0 +1,32 @@
+{ lib, fetchFromGitHub, buildPythonApplication
+, pygtk
+, numpy ? null
+}:
+
+buildPythonApplication {
+  name = "escrotum-2019-06-10";
+
+  src = fetchFromGitHub {
+    owner  = "Roger";
+    repo   = "escrotum";
+    rev    = "f6c300315cb4402e37f16b56aad2d206e24c5281";
+    sha256 = "0x7za74lkwn3v6j9j04ifgdwdlx9akh1izkw7vkkzj9ag9qjrzb0";
+  };
+
+  propagatedBuildInputs = [ pygtk numpy ];
+
+  outputs = [ "out" "man" ];
+
+  postInstall = ''
+    mkdir -p $man/share/man/man1
+    cp man/escrotum.1 $man/share/man/man1/
+  '';
+
+  meta = with lib; {
+    homepage = https://github.com/Roger/escrotum;
+    description = "Linux screen capture using pygtk, inspired by scrot";
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ rasendubi ];
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/exif/default.nix b/nixpkgs/pkgs/tools/graphics/exif/default.nix
new file mode 100644
index 000000000000..83fec1287a6b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/exif/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl, pkgconfig, libexif, popt, libintl }:
+
+stdenv.mkDerivation rec {
+  name = "exif-0.6.21";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/libexif/${name}.tar.bz2";
+    sha256 = "1zb9hwdl783d4vd2s2rw642hg8hd6n0mfp6lrbiqmp9jmhlq5rsr";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libexif popt libintl ];
+
+  meta = with stdenv.lib; {
+    homepage = https://libexif.github.io;
+    description = "A utility to read and manipulate EXIF data in digital photographs";
+    platforms = platforms.unix;
+    license = licenses.lgpl21;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/exiftags/default.nix b/nixpkgs/pkgs/tools/graphics/exiftags/default.nix
new file mode 100644
index 000000000000..9ce95154cb0b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/exiftags/default.nix
@@ -0,0 +1,26 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation {
+  name = "exiftags-1.01";
+
+  src = fetchurl {
+    url = https://johnst.org/sw/exiftags/exiftags-1.01.tar.gz;
+    sha256 = "194ifl6hybx2a5x8jhlh9i56k3qfc6p2l72z0ii1b7v0bzg48myr";
+  };
+
+  patchPhase = ''
+    sed -i -e s@/usr/local@$out@ Makefile
+  '';
+
+  preInstall = ''
+    mkdir -p $out/bin $out/man/man1
+  '';
+
+  meta = {
+    homepage = http://johnst.org/sw/exiftags/;
+    description = "Displays EXIF data from JPEG files";
+    license = stdenv.lib.licenses.free;
+    maintainers = with stdenv.lib.maintainers; [viric];
+    platforms = with stdenv.lib.platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/facedetect/default.nix b/nixpkgs/pkgs/tools/graphics/facedetect/default.nix
new file mode 100644
index 000000000000..cb697148d045
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/facedetect/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchFromGitHub, python2Packages }:
+
+stdenv.mkDerivation rec {
+  pname = "facedetect";
+  version = "0.1";
+
+  src = fetchFromGitHub {
+    owner = "wavexx";
+    repo = "facedetect";
+    rev = "v${version}";
+    sha256 = "0mddh71cjbsngpvjli406ndi2x613y39ydgb8bi4z1jp063865sd";
+  };
+
+  buildInputs = [ python2Packages.python python2Packages.wrapPython ];
+  pythonPath = [ python2Packages.numpy python2Packages.opencv4 ];
+
+  phases = [ "unpackPhase" "patchPhase" "installPhase" ];
+
+  patchPhase = ''
+    substituteInPlace facedetect \
+      --replace /usr/share/opencv "${python2Packages.opencv4}/share/opencv4"
+  '';
+
+  installPhase = ''
+    install -v -m644 -D README.rst $out/share/doc/${pname}-${version}/README.rst
+    install -v -m755 -D facedetect $out/bin/facedetect
+    wrapPythonPrograms
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://www.thregr.org/~wavexx/software/facedetect/;
+    description = "A simple face detector for batch processing";
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+    maintainers = [ maintainers.rycee ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/fast-neural-doodle/default.nix b/nixpkgs/pkgs/tools/graphics/fast-neural-doodle/default.nix
new file mode 100644
index 000000000000..17e1c710586b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/fast-neural-doodle/default.nix
@@ -0,0 +1,63 @@
+{stdenv, fetchFromGitHub, fetchurl, torch, torch-hdf5, loadcaffe, bash
+  , python, numpy, scipy, h5py, scikitlearn, pillow
+  }:
+stdenv.mkDerivation rec {
+  pname = "fast-neural-doodle";
+  version = "0.0pre2016-07-01";
+  buildInputs = [
+    torch torch-hdf5 python numpy h5py scikitlearn scipy pillow
+  ];
+
+  inherit torch loadcaffe bash python;
+  torch_hdf5 = torch-hdf5;
+  python_libPrefix = python.libPrefix;
+
+  src = fetchFromGitHub {
+    owner = "DmitryUlyanov";
+    repo = "fast-neural-doodle";
+    rev = "00c35a4440d1d58b029d7bdf9bc56743b1a1835f";
+    sha256 = "0xhmhxhjm59pfjm2q27g2xfb35hg0vlqkk3sb3llx2qqq2c7jk8m";
+  };
+  models = [
+    (fetchurl {
+      url = "https://gist.githubusercontent.com/ksimonyan/3785162f95cd2d5fee77/raw/bb2b4fe0a9bb0669211cf3d0bc949dfdda173e9e/VGG_ILSVRC_19_layers_deploy.prototxt";
+      sha256 = "09cpz7pyvc8sypg2q5j2i8yqwj1sjdbnmd6skl293p9pv13dmjg7";
+    })
+    (fetchurl {
+      url = "https://bethgelab.org/media/uploads/deeptextures/vgg_normalised.caffemodel";
+      sha256 = "11qckdvlck7wwl3pan0nawgxm8l2ccddi272i5l8rs9qzm7b23rf";
+    })
+    (fetchurl {
+      url = "http://www.robots.ox.ac.uk/~vgg/software/very_deep/caffe/VGG_ILSVRC_19_layers.caffemodel";
+      sha256 = "0m399x7pl4lnhy435ycsyz8xpzapqmx9n1sz698y2vhcqhkwdd1i";
+    })
+  ];
+  installPhase = ''
+    mkdir -p "$out"/{doc/fast-neural-doodle,lib/lua/fast_neural_doodle,lib/${python.libPrefix}/fast_neural_doodle,bin}
+    cp -r data src fast_neural_doodle.lua "$out/lib/lua/fast_neural_doodle/"
+    for file in $models; do
+      ln -s "$file" "$out/lib/lua/fast_neural_doodle/data/pretrained/$(basename "$file" | sed -e 's/[^-]*-//')"
+    done;
+    cp get_mask_hdf5.py "$out/lib/${python.libPrefix}/fast_neural_doodle"
+    cp *.md LICENSE "$out/doc/fast-neural-doodle"
+
+    export pythonpath="$PYTHONPATH"
+
+    substituteAll "${./get-mask-hdf5.sh}" "$out/bin/get-mask-hdf5"
+    substituteAll "${./fast-neural-doodle.sh}" "$out/bin/fast-neural-doodle"
+
+    chmod a+x "$out/bin"/*
+
+    "$out/bin/get-mask-hdf5" --n_colors=4 --style_image data/Renoir/style.png --style_mask data/Renoir/style_mask.png --target_mask data/Renoir/target_mask.png --out_hdf5 masks.hdf5
+
+    "$out/bin/fast-neural-doodle" -gpu -1 -masks_hdf5 masks.hdf5 -num_iterations 1
+  '';
+  meta = {
+    inherit version;
+    description = ''Faster neural doodle'';
+    license = stdenv.lib.licenses.mit;
+    maintainers = [stdenv.lib.maintainers.raskin];
+    platforms = stdenv.lib.platforms.linux;
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/fast-neural-doodle/fast-neural-doodle.sh b/nixpkgs/pkgs/tools/graphics/fast-neural-doodle/fast-neural-doodle.sh
new file mode 100644
index 000000000000..a089d5a95061
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/fast-neural-doodle/fast-neural-doodle.sh
@@ -0,0 +1,28 @@
+#! @bash@/bin/bash
+
+declare -a args
+c=1
+flag=
+
+for arg in "$@"; do
+        if test "$arg" = "${arg#-}" && test "$arg" = "${arg#/}" && test -n "$flag"; then
+                arg="$PWD/$arg"
+                flag=
+        elif (test "$arg" != "${arg%_image}" || test "$arg" == "-masks_hdf5") && test "$arg" != "${arg#-}"; then
+                flag=1
+        else
+                flag=
+        fi
+        args[c]="$arg";
+        c=$((c+1));
+done
+
+cd "@out@/lib/lua/fast_neural_doodle"
+
+export LUA_PATH="$LUA_PATH${LUA_PATH:+;}@loadcaffe@/lua/?/init.lua;@loadcaffe@/lua/?.lua"
+export LUA_PATH="$LUA_PATH${LUA_PATH:+;}@torch_hdf5@/lua/?/init.lua;@torch_hdf5@/lua/?.lua"
+export LUA_CPATH="$LUA_CPATH${LUA_CPATH:+;}@loadcaffe@/lib/?.so"
+
+set -x
+
+@torch@/bin/th fast_neural_doodle.lua "${args[@]}"
diff --git a/nixpkgs/pkgs/tools/graphics/fast-neural-doodle/get-mask-hdf5.sh b/nixpkgs/pkgs/tools/graphics/fast-neural-doodle/get-mask-hdf5.sh
new file mode 100644
index 000000000000..cfff76d141fb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/fast-neural-doodle/get-mask-hdf5.sh
@@ -0,0 +1,5 @@
+#! @bash@/bin/bash
+
+export PYTHONPATH="@pythonpath@"
+
+@python@/bin/python "@out@/lib/@python_libPrefix@/fast_neural_doodle/get_mask_hdf5.py" "$@"
diff --git a/nixpkgs/pkgs/tools/graphics/fbv/default.nix b/nixpkgs/pkgs/tools/graphics/fbv/default.nix
new file mode 100644
index 000000000000..c7fab1710672
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/fbv/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl, getopt, libjpeg, libpng12, libungif }:
+
+stdenv.mkDerivation rec {
+  name = "fbv-1.0b";
+
+  src = fetchurl {
+    url = "http://s-tech.elsat.net.pl/fbv/${name}.tar.gz";
+    sha256 = "0g5b550vk11l639y8p5sx1v1i6ihgqk0x1hd0ri1bc2yzpdbjmcv";
+  };
+
+  buildInputs = [ getopt libjpeg libpng12 libungif ];
+
+  enableParallelBuilding = true;
+
+  preInstall = ''
+    mkdir -p $out/{bin,man/man1}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "View pictures on a linux framebuffer device";
+    homepage = http://s-tech.elsat.net.pl/fbv/;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ peterhoeg ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/feedgnuplot/default.nix b/nixpkgs/pkgs/tools/graphics/feedgnuplot/default.nix
new file mode 100644
index 000000000000..8f94624febe8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/feedgnuplot/default.nix
@@ -0,0 +1,56 @@
+{ stdenv, fetchFromGitHub, makeWrapper, gawk
+, makeFontsConf, freefont_ttf, gnuplot, perl, perlPackages
+}:
+
+let
+
+  fontsConf = makeFontsConf { fontDirectories = [ freefont_ttf ]; };
+
+in
+
+perlPackages.buildPerlPackage rec {
+  pname = "feedgnuplot";
+  version = "1.51";
+
+  src = fetchFromGitHub {
+    owner = "dkogan";
+    repo = "feedgnuplot";
+    rev = "v${version}";
+    sha256 = "0npk2l032cnmibjj5zf3ii09mpxciqn32lx6g5bal91bkxwn7r5i";
+  };
+
+  outputs = [ "out" ];
+
+  nativeBuildInputs = [ makeWrapper gawk ];
+
+  buildInputs = [ gnuplot perl ]
+    ++ (with perlPackages; [ ListMoreUtils IPCRun StringShellQuote ]);
+
+  # Fontconfig error: Cannot load default config file
+  FONTCONFIG_FILE = fontsConf;
+
+  postPatch = ''
+    patchShebangs .
+  '';
+
+  # Tests require gnuplot 4.6.4 and are completely skipped with gnuplot 5.
+  doCheck = false;
+
+  postInstall = ''
+    wrapProgram $out/bin/feedgnuplot \
+        --prefix "PATH" ":" "$PATH" \
+        --prefix "PERL5LIB" ":" "$PERL5LIB"
+    install -D -m 444 -t $out/share/bash-completion/completions \
+        completions/bash/feedgnuplot
+    install -D -m 444 -t $out/share/zsh/site-functions \
+        completions/zsh/_feedgnuplot
+  '';
+
+  meta = with stdenv.lib; {
+    description = "General purpose pipe-oriented plotting tool";
+    homepage = https://github.com/dkogan/feedgnuplot/;
+    license = with licenses; [ artistic1 gpl1Plus ];
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ mnacamura ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/fgallery/default.nix b/nixpkgs/pkgs/tools/graphics/fgallery/default.nix
new file mode 100644
index 000000000000..2bce8ec4941b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/fgallery/default.nix
@@ -0,0 +1,46 @@
+{ stdenv, fetchurl, unzip, makeWrapper, perlPackages
+, coreutils, zip, imagemagick, pngcrush, lcms2
+, facedetect, fbida }:
+
+# TODO: add optional dependencies (snippet from fgallery source):
+#
+# if(system("jpegoptim -V >/dev/null 2>&1")) {
+#   $jpegoptim = 0;
+# }
+
+stdenv.mkDerivation rec {
+  name = "fgallery-1.8.2";
+
+  src = fetchurl {
+    url = "https://www.thregr.org/~wavexx/software/fgallery/releases/${name}.zip";
+    sha256 = "18wlvqbxcng8pawimbc8f2422s8fnk840hfr6946lzsxr0ijakvf";
+  };
+
+  buildInputs = [ unzip makeWrapper ] ++ (with perlPackages; [ perl ImageExifTool CpanelJSONXS ]);
+
+  installPhase = ''
+    mkdir -p "$out/bin"
+    mkdir -p "$out/share/fgallery"
+
+    cp -r * "$out/share/fgallery"
+    ln -s -r "$out/share/fgallery/fgallery" "$out/bin/fgallery"
+
+    # Don't preserve file attributes when copying files to output directories.
+    # (fgallery copies parts of itself to each output directory, and without
+    # this change the read-only nix store causes some bumps in the workflow.)
+    sed -i -e "s|'cp'|'cp', '--no-preserve=all'|g" "$out/share/fgallery/fgallery"
+
+    wrapProgram "$out/share/fgallery/fgallery" \
+        --set PERL5LIB "$PERL5LIB" \
+        --set PATH "${stdenv.lib.makeBinPath
+                     [ coreutils zip imagemagick pngcrush lcms2 facedetect fbida ]}"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Static photo gallery generator";
+    homepage = http://www.thregr.org/~wavexx/software/fgallery/;
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/fim/default.nix b/nixpkgs/pkgs/tools/graphics/fim/default.nix
new file mode 100644
index 000000000000..3fc82a9c72a0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/fim/default.nix
@@ -0,0 +1,52 @@
+{ stdenv, fetchurl, autoconf, automake, pkgconfig
+, perl, flex, bison, readline, libexif
+, x11Support ? true, SDL
+, svgSupport ? true, inkscape
+, asciiArtSupport ? true, aalib
+, gifSupport ? true, giflib
+, tiffSupport ? true, libtiff
+, jpegSupport ? true, libjpeg
+, pngSupport ? true, libpng
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fim";
+  version = "0.6";
+
+  src = fetchurl {
+    url = "mirror://savannah/fbi-improved/${pname}-${version}-trunk.tar.gz";
+    sha256 = "124b7c4flx5ygmy5sqq0gpvxqzafnknbcj6f45ddnbdxik9lazzp";
+  };
+
+  postPatch = ''
+   substituteInPlace doc/vim2html.pl \
+     --replace /usr/bin/perl ${perl}/bin/perl
+  '';
+
+  nativeBuildInputs = [ autoconf automake pkgconfig ];
+
+  buildInputs = with stdenv.lib;
+    [ perl flex bison readline libexif ]
+    ++ optional x11Support SDL
+    ++ optional svgSupport inkscape
+    ++ optional asciiArtSupport aalib
+    ++ optional gifSupport giflib
+    ++ optional tiffSupport libtiff
+    ++ optional jpegSupport libjpeg
+    ++ optional pngSupport libpng;
+
+  NIX_CFLAGS_COMPILE = stdenv.lib.optionalString x11Support "-lSDL";
+
+  meta = with stdenv.lib; {
+    description = "A lightweight, highly customizable and scriptable image viewer";
+    longDescription = ''
+      FIM (Fbi IMproved) is a lightweight, console based image viewer that aims
+      to be a highly customizable and scriptable for users who are comfortable
+      with software like the VIM text editor or the Mutt mail user agent.
+    '';
+    homepage = https://www.nongnu.org/fbi-improved/;
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ primeos ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/flam3/default.nix b/nixpkgs/pkgs/tools/graphics/flam3/default.nix
new file mode 100644
index 000000000000..a6277f58cbdb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/flam3/default.nix
@@ -0,0 +1,24 @@
+{stdenv, fetchFromGitHub, zlib, libpng, libxml2, libjpeg }:
+
+stdenv.mkDerivation rec {
+  pname = "flam3";
+  version = "3.1.1-${stdenv.lib.strings.substring 0 7 rev}";
+  rev = "e0801543538451234d7a8a240ba3b417cbda5b21";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "scottdraves";
+    repo = pname;
+    sha256 = "18iyj16k0sn3fs52fj23lj31xi4avlddhbib6kk309576nlxp17w";
+  };
+
+  buildInputs = [ zlib libpng libxml2 libjpeg ];
+
+  meta = with stdenv.lib; {
+    description = "Cosmic recursive fractal flames";
+    homepage = https://flam3.com/;
+    maintainers = [ maintainers.nand0p ];
+    platforms = platforms.linux;
+    license = licenses.cc-by-nc-sa-20;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/ggobi/default.nix b/nixpkgs/pkgs/tools/graphics/ggobi/default.nix
new file mode 100644
index 000000000000..de02865c36e2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/ggobi/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, pkgconfig, libxml2, gtk2 }:
+
+stdenv.mkDerivation rec {
+  version = "2.1.11";
+  pname = "ggobi";
+
+  src = fetchurl {
+    url = "http://www.ggobi.org/downloads/ggobi-${version}.tar.bz2";
+    sha256 = "2c4ddc3ab71877ba184523e47b0637526e6f3701bd9afb6472e6dfc25646aed7";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libxml2 gtk2 ];
+
+  configureFlags = [ "--with-all-plugins" ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = with stdenv.lib; {
+    description = "Visualization program for exploring high-dimensional data";
+    homepage = http://www.ggobi.org/;
+    license = licenses.cpl10;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.michelk ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/gifsicle/default.nix b/nixpkgs/pkgs/tools/graphics/gifsicle/default.nix
new file mode 100644
index 000000000000..9b3836b9decc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/gifsicle/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, xorgproto, libXt, libX11, gifview ? false, static ? false }:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  pname = "gifsicle";
+  version = "1.92";
+
+  src = fetchurl {
+    url = "https://www.lcdf.org/gifsicle/${pname}-${version}.tar.gz";
+    sha256 = "0rffpzxcak19k6cngpxn73khvm3z1gswrqs90ycdzzb53p05ddas";
+  };
+
+  buildInputs = optionals gifview [ xorgproto libXt libX11 ];
+
+  configureFlags = optional (!gifview) "--disable-gifview";
+
+  LDFLAGS = optionalString static "-static";
+
+  doCheck = true;
+  checkPhase = ''
+    ./src/gifsicle --info logo.gif
+  '';
+
+  meta = {
+    description = "Command-line tool for creating, editing, and getting information about GIF images and animations";
+    homepage = https://www.lcdf.org/gifsicle/;
+    license = stdenv.lib.licenses.gpl2;
+    platforms = platforms.all;
+    maintainers = with stdenv.lib.maintainers; [ zimbatm ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/gifski/default.nix b/nixpkgs/pkgs/tools/graphics/gifski/default.nix
new file mode 100644
index 000000000000..f5076801326c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/gifski/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, rustPlatform, fetchFromGitHub, pkgconfig }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "gifski";
+  version = "0.9.1";
+
+  src = fetchFromGitHub {
+    owner = "ImageOptim";
+    repo = "gifski";
+    rev = version;
+    sha256 = "0dl5725imb2a2s0fskdqlnh2207ryyi2v5gz37cr5mf6khz898p2";
+  };
+
+  cargoSha256 = "0wngsd0pmmxlwzxmyp8pvphh1ijs5s9k1mkkv688xpc4b8w0z10j";
+
+  nativeBuildInputs = [ pkgconfig ];
+
+  meta = with stdenv.lib; {
+    description = "GIF encoder based on libimagequant (pngquant)";
+    homepage = https://gif.ski/;
+    license = licenses.agpl3;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/glee/default.nix b/nixpkgs/pkgs/tools/graphics/glee/default.nix
new file mode 100644
index 000000000000..a68e64c0894c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/glee/default.nix
@@ -0,0 +1,33 @@
+{stdenv, fetchgit, cmake, libGLU, libGL, xorg }:
+
+stdenv.mkDerivation rec {
+  pname = "glee";
+  rev = "f727ec7463d514b6279981d12833f2e11d62b33d";
+  version = "20170205-${stdenv.lib.strings.substring 0 7 rev}";
+
+  src = fetchgit {
+    inherit rev;
+    url = "https://git.code.sf.net/p/${pname}/${pname}";
+    sha256 = "13mf3s7nvmj26vr2wbcg08l4xxqsc1ha41sx3bfghvq8c5qpk2ph";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [ libGLU libGL xorg.libX11 ];
+
+  configureScript = ''
+    cmake
+  '';
+
+  preInstall = ''
+    sed -i 's/readme/Readme/' cmake_install.cmake
+  '';
+
+  meta = with stdenv.lib; {
+    description = "GL Easy Extension Library";
+    homepage = https://sourceforge.net/p/glee/glee/;
+    maintainers = with maintainers; [ nand0p ];
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/glmark2/default.nix b/nixpkgs/pkgs/tools/graphics/glmark2/default.nix
new file mode 100644
index 000000000000..5668e755d017
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/glmark2/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchFromGitHub, pkgconfig, libjpeg, libpng, xorg, libX11, libGL, libdrm,
+  python27, wayland, udev, mesa, wafHook }:
+
+stdenv.mkDerivation {
+  pname = "glmark2";
+  version = "2017-09-01";
+
+  src = fetchFromGitHub {
+    owner = "glmark2";
+    repo = "glmark2";
+    rev = "7265e8e6c77c4f60302507eca0e18560b1117a86";
+    sha256 = "076l75rfl6pnp1wgiwlaihy1vg2advg1z8bi0x84kk259kldgvwn";
+  };
+
+  nativeBuildInputs = [ pkgconfig wafHook ];
+  buildInputs = [
+    libjpeg libpng xorg.libxcb libX11 libGL libdrm python27 wayland udev mesa
+  ];
+
+  wafConfigureFlags = ["--with-flavors=x11-gl,x11-glesv2,drm-gl,drm-glesv2,wayland-gl,wayland-glesv2"];
+
+  meta = with stdenv.lib; {
+    description = "OpenGL (ES) 2.0 benchmark";
+    homepage = https://github.com/glmark2/glmark2;
+    license = licenses.gpl3Plus;
+    longDescription = ''
+      glmark2 is a benchmark for OpenGL (ES) 2.0. It uses only the subset of
+      the OpenGL 2.0 API that is compatible with OpenGL ES 2.0.
+    '';
+    platforms = platforms.linux;
+    maintainers = [ maintainers.wmertens ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/glxinfo/default.nix b/nixpkgs/pkgs/tools/graphics/glxinfo/default.nix
new file mode 100644
index 000000000000..0710f47cb571
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/glxinfo/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, libGL, libX11 }:
+
+stdenv.mkDerivation rec {
+  pname = "glxinfo";
+  version = "8.4.0";
+
+  src = fetchurl {
+    url = "ftp://ftp.freedesktop.org/pub/mesa/demos/mesa-demos-${version}.tar.bz2";
+    sha256 = "0zgzbz55a14hz83gbmm0n9gpjnf5zadzi2kjjvkn6khql2a9rs81";
+  };
+
+  buildInputs = [ libX11 libGL ];
+
+  dontConfigure = true;
+
+  buildPhase = "
+    $CC src/xdemos/{glxinfo.c,glinfo_common.c} -o glxinfo -lGL -lX11
+    $CC src/xdemos/glxgears.c -o glxgears -lGL -lX11 -lm
+    $CC src/egl/opengles2/es2_info.c -o es2_info -lEGL -lGLESv2 -lX11
+    $CC src/egl/opengles2/es2gears.c src/egl/eglut/{eglut.c,eglut_x11.c} -o es2gears -Isrc/egl/eglut -lEGL -lGLESv2 -lX11 -lm
+  ";
+
+  installPhase = "
+    install -Dm 555 -t $out/bin glx{info,gears} es2{_info,gears}
+  ";
+
+  meta = with stdenv.lib; {
+    description = "Test utilities for OpenGL";
+    homepage = https://www.mesa3d.org/;
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/gmic-qt/default.nix b/nixpkgs/pkgs/tools/graphics/gmic-qt/default.nix
new file mode 100644
index 000000000000..a8dd35ce7b04
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/gmic-qt/default.nix
@@ -0,0 +1,144 @@
+{ lib
+, mkDerivation
+, fetchurl
+, fetchpatch
+, variant ? "standalone"
+, fetchFromGitHub
+, fetchFromGitLab
+, cmake
+, pkgconfig
+, opencv3
+, openexr
+, graphicsmagick
+, fftw
+, zlib
+, libjpeg
+, libtiff
+, libpng
+, curl
+, krita ? null
+, gimp ? null
+, qtbase
+, qttools
+}:
+
+let
+  variants = {
+    gimp = {
+      extraDeps = [
+        gimp
+        gimp.gtk
+      ];
+      description = "GIMP plugin for the G'MIC image processing framework";
+    };
+
+    krita = {
+      extraDeps = [
+        krita
+      ];
+      description = "Krita plugin for the G'MIC image processing framework";
+    };
+
+    standalone = {
+      description = "Versatile front-end to the image processing framework G'MIC";
+    };
+  };
+
+in
+
+assert lib.assertMsg (builtins.hasAttr variant variants) "gmic-qt variant “${variant}” is not supported. Please use one of ${lib.concatStringsSep ", " (builtins.attrNames variants)}.";
+
+assert lib.assertMsg (builtins.all (d: d != null) variants.${variant}.extraDeps or []) "gmic-qt variant “${variant}” is missing one of its dependencies.";
+
+mkDerivation rec {
+  pname = "gmic-qt${lib.optionalString (variant != "standalone") ''-${variant}''}";
+  version = "2.7.1";
+
+  gmic-community = fetchFromGitHub {
+    owner = "dtschump";
+    repo = "gmic-community";
+    rev = "3fd528f20a2a7d651e96078c205ff21efb9cdd1a";
+    sha256 = "08d37b49qgh5d4rds7hvr5wjj4p1y8cnbidz1cyqsibq0555pwq2";
+  };
+
+  CImg = fetchFromGitLab {
+    domain = "framagit.org";
+    owner = "dtschump";
+    repo = "CImg";
+    rev = "v.${version}";
+    sha256 = "1mfkjvf5r3ppc1dd6yvqn7xlhgzfg9k1k5v2sq2k9m70g8p7rgpd";
+  };
+
+  gmic_stdlib = fetchurl {
+    name = "gmic_stdlib.h";
+    url = "http://gmic.eu/gmic_stdlib${lib.replaceStrings ["."] [""] version}.h";
+    sha256 = "0v12smknr1s44s6wq2gbnw0hb98xrwp6i3zg9wf49cl7s9qf76j3";
+  };
+
+  gmic = fetchFromGitHub {
+    owner = "dtschump";
+    repo = "gmic";
+    rev = "v.${version}";
+    sha256 = "0pa6kflr1gqgzh8rk7bylvkxs989r5jy0q7b62mnzx8895slwfb5";
+  };
+
+  gmic_qt = fetchFromGitHub {
+    owner = "c-koi";
+    repo = "gmic-qt";
+    rev = "v.${version}";
+    sha256 = "08a0660083wv5fb1w9qqhm4f8cfwbqq723qzqq647mid1n7sy959";
+  };
+
+  patches = [
+    # Install GIMP plug-in to a correct destination
+    # https://github.com/c-koi/gmic-qt/pull/78
+    ./fix-gimp-plugin-path.patch
+  ];
+
+  unpackPhase = ''
+    cp -r ${gmic} gmic
+    ln -s ${gmic-community} gmic-community
+    cp -r ${gmic_qt} gmic_qt
+    chmod -R +w gmic gmic_qt
+    ln -s ${CImg} CImg
+
+    cp ${gmic_stdlib} gmic/src/gmic_stdlib.h
+
+    cd gmic_qt
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    pkgconfig
+  ];
+
+  buildInputs = [
+    qtbase
+    qttools
+    fftw
+    zlib
+    libjpeg
+    libtiff
+    libpng
+    opencv3
+    openexr
+    graphicsmagick
+    curl
+  ] ++ variants.${variant}.extraDeps or [];
+
+  cmakeFlags = [
+    "-DGMIC_QT_HOST=${if variant == "standalone" then "none" else variant}"
+  ];
+
+  postFixup = lib.optionalString (variant == "gimp") ''
+    echo "wrapping $out/${gimp.targetPluginDir}/gmic_gimp_qt"
+    wrapQtApp "$out/${gimp.targetPluginDir}/gmic_gimp_qt"
+  '';
+
+  meta = with lib; {
+    description = variants.${variant}.description;
+    homepage = http://gmic.eu/;
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/gmic-qt/fix-gimp-plugin-path.patch b/nixpkgs/pkgs/tools/graphics/gmic-qt/fix-gimp-plugin-path.patch
new file mode 100644
index 000000000000..ac0600fb76c3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/gmic-qt/fix-gimp-plugin-path.patch
@@ -0,0 +1,21 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 1483056..26d2b9a 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -473,6 +473,7 @@
+ 
+     execute_process(COMMAND gimptool-2.0 --libs-noui OUTPUT_VARIABLE GIMP2_LIBRARIES OUTPUT_STRIP_TRAILING_WHITESPACE)
+     execute_process(COMMAND gimptool-2.0 --cflags-noui OUTPUT_VARIABLE GIMP2_INCLUDE_DIRS OUTPUT_STRIP_TRAILING_WHITESPACE)
++    execute_process(COMMAND pkg-config gimp-2.0 --define-variable=prefix=${CMAKE_INSTALL_PREFIX} --variable gimplibdir OUTPUT_VARIABLE GIMP2_PKGLIBDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
+     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GIMP2_INCLUDE_DIRS}")
+ 
+     set (gmic_qt_SRCS ${gmic_qt_SRCS} src/Host/Gimp/host_gimp.cpp)
+@@ -484,7 +485,7 @@
+       ${GIMP2_LIBRARIES}
+       ${gmic_qt_LIBRARIES}
+       )
+-    install(TARGETS gmic_gimp_qt RUNTIME DESTINATION bin)
++    install(TARGETS gmic_gimp_qt RUNTIME DESTINATION "${GIMP2_PKGLIBDIR}/plug-ins")
+ 
+ elseif (${GMIC_QT_HOST} STREQUAL "krita")
+ 
diff --git a/nixpkgs/pkgs/tools/graphics/gmic/default.nix b/nixpkgs/pkgs/tools/graphics/gmic/default.nix
new file mode 100644
index 000000000000..3f181d12ba07
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/gmic/default.nix
@@ -0,0 +1,55 @@
+{ stdenv
+, fetchurl
+, cmake
+, ninja
+, pkgconfig
+, opencv3
+, openexr
+, graphicsmagick
+, fftw
+, zlib
+, libjpeg
+, libtiff
+, libpng
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gmic";
+  version = "2.7.5";
+
+  outputs = [ "out" "lib" "dev" "man" ];
+
+  src = fetchurl {
+    url = "https://gmic.eu/files/source/gmic_${version}.tar.gz";
+    sha256 = "008lpjm3w5hzfccam6qf0rizdg3a9cqrizhr7vrpskmbr1j451d6";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+    pkgconfig
+  ];
+
+  buildInputs = [
+    fftw
+    zlib
+    libjpeg
+    libtiff
+    libpng
+    opencv3
+    openexr
+    graphicsmagick
+  ];
+
+  cmakeFlags = [
+    "-DBUILD_LIB_STATIC=OFF"
+    "-DENABLE_DYNAMIC_LINKING=ON"
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Open and full-featured framework for image processing";
+    homepage = http://gmic.eu/;
+    license = licenses.cecill20;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/gnuplot/default.nix b/nixpkgs/pkgs/tools/graphics/gnuplot/default.nix
new file mode 100644
index 000000000000..0ac1c1a21553
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/gnuplot/default.nix
@@ -0,0 +1,76 @@
+{ lib, stdenv, fetchurl, makeWrapper, pkgconfig, texinfo
+, cairo, gd, libcerf, pango, readline, zlib
+, withTeXLive ? false, texlive
+, withLua ? false, lua
+, libX11 ? null
+, libXt ? null
+, libXpm ? null
+, libXaw ? null
+, aquaterm ? false
+, withWxGTK ? false, wxGTK ? null
+, fontconfig ? null
+, gnused ? null
+, coreutils ? null
+, withQt ? false, mkDerivation, qttools, qtbase, qtsvg
+}:
+
+assert libX11 != null -> (fontconfig != null && gnused != null && coreutils != null);
+let
+  withX = libX11 != null && !aquaterm && !stdenv.isDarwin;
+in
+(if withQt then mkDerivation else stdenv.mkDerivation) rec {
+  pname = "gnuplot";
+  version = "5.2.8";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/gnuplot/${pname}-${version}.tar.gz";
+    sha256 = "0dxc52d17mpyb2xm24da1nvhlacryv0irwa0q5l1cjj0rx67d9k0";
+  };
+
+  nativeBuildInputs = [ makeWrapper pkgconfig texinfo ] ++ lib.optional withQt qttools;
+
+  buildInputs =
+    [ cairo gd libcerf pango readline zlib ]
+    ++ lib.optional withTeXLive (texlive.combine { inherit (texlive) scheme-small; })
+    ++ lib.optional withLua lua
+    ++ lib.optionals withX [ libX11 libXpm libXt libXaw ]
+    ++ lib.optionals withQt [ qtbase qtsvg ]
+    ++ lib.optional withWxGTK wxGTK;
+
+  postPatch = ''
+    # lrelease is in qttools, not in qtbase.
+    sed -i configure -e 's|''${QT5LOC}/lrelease|lrelease|'
+  '';
+
+  configureFlags = [
+    (if withX then "--with-x" else "--without-x")
+    (if withQt then "--with-qt=qt5" else "--without-qt")
+    (if aquaterm then "--with-aquaterm" else "--without-aquaterm")
+  ];
+
+  postInstall = lib.optionalString withX ''
+    wrapProgram $out/bin/gnuplot \
+       --prefix PATH : '${gnused}/bin' \
+       --prefix PATH : '${coreutils}/bin' \
+       --prefix PATH : '${fontconfig.bin}/bin' \
+       --run '. ${./set-gdfontpath-from-fontconfig.sh}'
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = http://www.gnuplot.info/;
+    description = "A portable command-line driven graphing utility for many platforms";
+    platforms = platforms.linux ++ platforms.darwin;
+    license = {
+      # Essentially a BSD license with one modifaction:
+      # Permission to modify the software is granted, but not the right to
+      # distribute the complete modified source code.  Modifications are to
+      # be distributed as patches to the released version.  Permission to
+      # distribute binaries produced by compiling modified sources is granted,
+      # provided you: ...
+      url = https://sourceforge.net/p/gnuplot/gnuplot-main/ci/master/tree/Copyright;
+    };
+    maintainers = with maintainers; [ lovek323 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/gnuplot/set-gdfontpath-from-fontconfig.sh b/nixpkgs/pkgs/tools/graphics/gnuplot/set-gdfontpath-from-fontconfig.sh
new file mode 100644
index 000000000000..92ad2e97b5b4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/gnuplot/set-gdfontpath-from-fontconfig.sh
@@ -0,0 +1,4 @@
+p=( $(fc-list : file | sed "s@/[^/]*: @@" | sort -u) )
+IFS=:
+export GDFONTPATH="${GDFONTPATH}${GDFONTPATH:+:}${p[*]}"
+unset IFS p
diff --git a/nixpkgs/pkgs/tools/graphics/graph-easy/default.nix b/nixpkgs/pkgs/tools/graphics/graph-easy/default.nix
new file mode 100644
index 000000000000..009a86094ec5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/graph-easy/default.nix
@@ -0,0 +1,17 @@
+{ stdenv, perlPackages, fetchurl }:
+
+perlPackages.buildPerlPackage {
+  pname = "Graph-Easy";
+  version = "0.76";
+  src = fetchurl {
+    url = "mirror://cpan/authors/id/S/SH/SHLOMIF/Graph-Easy-0.76.tar.gz";
+    sha256 = "d4a2c10aebef663b598ea37f3aa3e3b752acf1fbbb961232c3dbe1155008d1fa";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Render/convert graphs in/from various formats";
+    license = licenses.gpl1;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.jensbin ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/graphviz/2.32.nix b/nixpkgs/pkgs/tools/graphics/graphviz/2.32.nix
new file mode 100644
index 000000000000..544949f33b71
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/graphviz/2.32.nix
@@ -0,0 +1,5 @@
+import ./base.nix {
+  rev = "10c3c34c5198beacfba950764f34960c6884a34f";
+  version = "2.32.0";
+  sha256 = "18b2wnz6xk8hndy7dlr1vn9vziyryyflh747n9966778gmh8bick";
+}
diff --git a/nixpkgs/pkgs/tools/graphics/graphviz/base.nix b/nixpkgs/pkgs/tools/graphics/graphviz/base.nix
new file mode 100644
index 000000000000..3b9d8a4cca5d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/graphviz/base.nix
@@ -0,0 +1,89 @@
+{ rev, sha256, version }:
+
+{ stdenv, fetchFromGitLab, autoreconfHook, pkgconfig, cairo, expat, flex
+, fontconfig, gd, gettext, gts, libdevil, libjpeg, libpng, libtool, pango
+, yacc, fetchpatch, xorg ? null, ApplicationServices ? null }:
+
+assert stdenv.isDarwin -> ApplicationServices != null;
+
+let
+  inherit (stdenv.lib) optional optionals optionalString;
+  raw_patch =
+    # https://gitlab.com/graphviz/graphviz/issues/1367 CVE-2018-10196
+    fetchpatch {
+      name = "CVE-2018-10196.patch";
+      url = https://gitlab.com/graphviz/graphviz/uploads/30f8f0b00e357c112ac35fb20241604a/p.diff;
+      sha256 = "074qx6ch9blrnlilmz7p96fkiz2va84x2fbqdza5k4808rngirc7";
+      excludes = ["tests/*"]; # we don't run them and they don't apply
+    };
+  # the patch needs a small adaption for older versions
+  patchToUse = if stdenv.lib.versionAtLeast version "2.37" then raw_patch else
+  stdenv.mkDerivation {
+    inherit (raw_patch) name;
+    buildCommand = "sed s/dot_root/agroot/g ${raw_patch} > $out";
+  };
+  # 2.42 has the patch included
+  patches = optional (stdenv.lib.versionOlder version "2.42") patchToUse;
+in
+
+stdenv.mkDerivation {
+  pname = "graphviz";
+  inherit version;
+
+  src = fetchFromGitLab {
+    owner = "graphviz";
+    repo = "graphviz";
+    inherit sha256 rev;
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+
+  buildInputs = [
+    libpng libjpeg expat yacc libtool fontconfig gd gts libdevil flex pango
+    gettext
+  ] ++ optionals (xorg != null) (with xorg; [ libXrender libXaw libXpm ])
+    ++ optionals (stdenv.isDarwin) [ ApplicationServices ];
+
+  hardeningDisable = [ "fortify" ];
+
+  CPPFLAGS = stdenv.lib.optionalString (xorg != null && stdenv.isDarwin)
+    "-I${cairo.dev}/include/cairo";
+
+  configureFlags = [
+    "--with-ltdl-lib=${libtool.lib}/lib"
+    "--with-ltdl-include=${libtool}/include"
+  ] ++ stdenv.lib.optional (xorg == null) "--without-x";
+
+  inherit patches;
+
+  postPatch = ''
+    for f in $(find . -name Makefile.in); do
+      substituteInPlace $f --replace "-lstdc++" "-lc++"
+    done
+  '';
+
+  # ''
+  #   substituteInPlace rtest/rtest.sh \
+  #     --replace "/bin/ksh" "${mksh}/bin/mksh"
+  # '';
+
+  doCheck = false; # fails with "Graphviz test suite requires ksh93" which is not in nixpkgs
+
+  preAutoreconf = "./autogen.sh";
+
+  postFixup = optionalString (xorg != null) ''
+    substituteInPlace $out/bin/dotty --replace '`which lefty`' $out/bin/lefty
+    substituteInPlace $out/bin/vimdot \
+      --replace /usr/bin/vi '$(command -v vi)' \
+      --replace /usr/bin/vim '$(command -v vim)' \
+      --replace /usr/bin/vimdot $out/bin/vimdot \
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://graphviz.org;
+    description = "Graph visualization tools";
+    license = licenses.epl10;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ bjornfor raskin ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/graphviz/default.nix b/nixpkgs/pkgs/tools/graphics/graphviz/default.nix
new file mode 100644
index 000000000000..c79fe3aaf4d5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/graphviz/default.nix
@@ -0,0 +1,5 @@
+import ./base.nix rec {
+  rev = "da4c2ec6f24ca1b6d1752c6b5bc4389e55682147"; # use rev as tags have disappeared before
+  version = "2.42.2";
+  sha256 = "0lacl11amyvj04j78m63qifljl4c0nkyy50z4bkg8mg9j4hjdy0x";
+ }
diff --git a/nixpkgs/pkgs/tools/graphics/grim/default.nix b/nixpkgs/pkgs/tools/graphics/grim/default.nix
new file mode 100644
index 000000000000..ed7ed5fdef05
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/grim/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, cairo, libjpeg, meson, ninja, wayland, pkgconfig, scdoc, wayland-protocols }:
+
+stdenv.mkDerivation rec {
+  pname = "grim";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "emersion";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "14gqilgd27c4j2wn7fla72yj8syx0542rsanh61syikrv0hxgkvy";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkgconfig
+    scdoc
+  ];
+
+  buildInputs = [
+    cairo
+    libjpeg
+    wayland
+    wayland-protocols
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Grab images from a Wayland compositor";
+    homepage = https://github.com/emersion/grim;
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ buffet ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/gromit-mpx/default.nix b/nixpkgs/pkgs/tools/graphics/gromit-mpx/default.nix
new file mode 100644
index 000000000000..7465ebb78836
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/gromit-mpx/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchFromGitHub, cmake, pkgconfig
+, gtk, glib, pcre, libappindicator, libpthreadstubs, libXdmcp
+, libxkbcommon, epoxy, at-spi2-core, dbus, libdbusmenu
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gromit-mpx";
+  version = "1.3";
+
+  src = fetchFromGitHub {
+    owner = "bk138";
+    repo = "gromit-mpx";
+    rev = version;
+    sha256 = "1dkmp5rhzp56sz9cfxill2pkdz2anwb8kkxkypvk2xhqi64cvkrs";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [
+    cmake
+    gtk glib pcre libappindicator libpthreadstubs
+    libXdmcp libxkbcommon epoxy at-spi2-core
+    dbus libdbusmenu
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Desktop annotation tool";
+
+    longDescription = ''
+      Gromit-MPX (GRaphics Over MIscellaneous Things) is a small tool
+      to make annotations on the screen.
+    '';
+
+    homepage = https://github.com/bk138/gromit-mpx;
+    maintainers = with maintainers; [ pjones ];
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/guff/default.nix b/nixpkgs/pkgs/tools/graphics/guff/default.nix
new file mode 100644
index 000000000000..db218a812e69
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/guff/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "guff";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "silentbicycle";
+    repo = "guff";
+    rev = "v${version}";
+    sha256 = "0n8mc9j3044j4b3vgc94ryd2j9ik6g73fqja54yxfdfrks4ksyds";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  doCheck = true;
+
+  meta = with stdenv.lib;  {
+    description = "A plot device";
+    homepage = https://github.com/silentbicycle/guff;
+    license = licenses.isc;
+    maintainers = [ maintainers.marsam ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/ibniz/default.nix b/nixpkgs/pkgs/tools/graphics/ibniz/default.nix
new file mode 100644
index 000000000000..564685c1ceaf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/ibniz/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, SDL }:
+
+stdenv.mkDerivation rec {
+  pname = "ibniz";
+  version = "1.18";
+
+  src = fetchurl {
+    url = "http://www.pelulamu.net/ibniz/${pname}-${version}.tar.gz";
+    sha256 = "10b4dka8zx7y84m1a58z9j2vly8mz9aw9wn8z9vx9av739j95wp2";
+  };
+
+  buildInputs = [ SDL ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ibniz $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Virtual machine designed for extremely compact low-level audiovisual programs";
+    homepage = "http://www.pelulamu.net/ibniz/";
+    license = licenses.zlib;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.dezgeg ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/icoutils/default.nix b/nixpkgs/pkgs/tools/graphics/icoutils/default.nix
new file mode 100644
index 000000000000..b16dbe219853
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/icoutils/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, libpng, perl, perlPackages, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  name = "icoutils-0.32.3";
+
+  src = fetchurl {
+    url = "mirror://savannah/icoutils/${name}.tar.bz2";
+    sha256 = "1q66cksms4l62y0wizb8vfavhmf7kyfgcfkynil3n99s0hny1aqp";
+  };
+
+  buildInputs = [ makeWrapper libpng perl ];
+  propagatedBuildInputs = [ perlPackages.LWP ];
+
+  patchPhase = ''
+    patchShebangs extresso/extresso
+    patchShebangs extresso/extresso.in
+    patchShebangs extresso/genresscript
+    patchShebangs extresso/genresscript.in
+  '';
+
+  preFixup = ''
+    wrapProgram $out/bin/extresso --prefix PERL5LIB : $PERL5LIB
+    wrapProgram $out/bin/genresscript --prefix PERL5LIB : $PERL5LIB
+  '';
+
+  meta = {
+    homepage = https://www.nongnu.org/icoutils/;
+    description = "Set of programs to deal with Microsoft Windows(R) icon and cursor files";
+    license = stdenv.lib.licenses.gpl3Plus;
+    platforms = with stdenv.lib.platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/ifm/default.nix b/nixpkgs/pkgs/tools/graphics/ifm/default.nix
new file mode 100644
index 000000000000..c6e8df31dd08
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/ifm/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchzip, autoreconfHook, bison, flex, help2man, perl, tk }:
+
+stdenv.mkDerivation rec {
+  pname = "ifm";
+  version = "2015-11-08";
+
+  src = fetchzip {
+    url = "https://bitbucket.org/zondo/ifm/get/dca0774e4d3a.zip";
+    sha256 = "14af21qjd5jvsscm6vxpsdrnipdr33g6niagzmykrhyfhwcbjahi";
+  };
+
+  nativeBuildInputs = [ autoreconfHook bison flex help2man ];
+
+  buildInputs = [ perl tk ]; # perl and wish are not run but written as shebangs.
+
+  enableParallelBuilding = false; # ifm-scan.l:16:10: fatal error: ifm-parse.h: No such file or directory
+
+  meta = with lib; {
+    homepage = https://bitbucket.org/zondo/ifm;
+    description = "Interactive fiction mapper";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ orivej ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/imgur-screenshot/default.nix b/nixpkgs/pkgs/tools/graphics/imgur-screenshot/default.nix
new file mode 100644
index 000000000000..1099b11176c8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/imgur-screenshot/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub, makeWrapper, curl, gnugrep, libnotify, scrot, which, xclip }:
+
+let deps = stdenv.lib.makeBinPath [ curl gnugrep libnotify scrot which xclip ];
+in stdenv.mkDerivation rec {
+  version = "1.7.4";
+  pname = "imgur-screenshot";
+
+  src = fetchFromGitHub {
+    owner = "jomo";
+    repo = "imgur-screenshot";
+    rev = "v${version}";
+    sha256 = "1bhi9sk8v7szh2fj13qwvdwzy5dw2w4kml86sy1ns1rn0xin0cgr";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    install -Dm755 imgur-screenshot.sh $out/bin/imgur-screenshot
+    wrapProgram $out/bin/imgur-screenshot --prefix PATH ':' ${deps}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A tool for easy screencapping and uploading to imgur";
+    homepage = https://github.com/jomo/imgur-screenshot/;
+    platforms = platforms.linux;
+    license = licenses.mit;
+    maintainers = with maintainers; [ lw ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/imgurbash2/default.nix b/nixpkgs/pkgs/tools/graphics/imgurbash2/default.nix
new file mode 100644
index 000000000000..883453379c4e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/imgurbash2/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub, bash, curl, xsel }:
+
+stdenv.mkDerivation rec {
+  pname = "imgurbash2";
+  version = "3.1";
+
+  src = fetchFromGitHub {
+    owner = "ram-on";
+    repo = "imgurbash2";
+    rev = version;
+    sha256 = "1hqghlk8c6svfszhmp02bhkc791lqhqffgiypf05giqmr5d8b9a9";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cat <<EOF >$out/bin/imgurbash2
+    #!${bash}/bin/bash
+    PATH=${stdenv.lib.makeBinPath [curl xsel]}:\$PATH
+    EOF
+    cat imgurbash2 >> $out/bin/imgurbash2
+    chmod +x $out/bin/imgurbash2
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A shell script that uploads images to imgur";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ abbradar ];
+    homepage = https://github.com/ram-on/imgurbash2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/jbig2enc/53ce5fe7e73d7ed95c9e12b52dd4984723f865fa.patch b/nixpkgs/pkgs/tools/graphics/jbig2enc/53ce5fe7e73d7ed95c9e12b52dd4984723f865fa.patch
new file mode 100644
index 000000000000..13e18fd04476
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/jbig2enc/53ce5fe7e73d7ed95c9e12b52dd4984723f865fa.patch
@@ -0,0 +1,47 @@
+From 53ce5fe7e73d7ed95c9e12b52dd4984723f865fa Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zdenko=20Podobn=C3=BD?= <zdenop@gmail.com>
+Date: Sun, 6 Apr 2014 21:25:27 +0200
+Subject: [PATCH] fix build with leptonica 1.70
+
+---
+ configure.ac |  1 +
+ src/jbig2.cc | 13 +++++++++----
+ 2 files changed, 10 insertions(+), 4 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index fe37c22..753a607 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -55,6 +55,7 @@ AC_CHECK_LIB([lept], [findFileFormatStream], [], [
+			echo "Error! Leptonica not detected."
+			exit -1
+			])
++AC_CHECK_FUNCS(expandBinaryPower2Low,,)
+ # test for function - it should detect leptonica dependecies
+
+ # Check for possible dependancies of leptonica.
+diff --git a/src/jbig2.cc b/src/jbig2.cc
+index e10f042..515c1ef 100644
+--- a/src/jbig2.cc
++++ b/src/jbig2.cc
+@@ -130,11 +130,16 @@ segment_image(PIX *pixb, PIX *piximg) {
+   // input color image, so we have to do it this way...
+   // is there a better way?
+   // PIX *pixd = pixExpandBinary(pixd4, 4);
+-  PIX *pixd = pixCreate(piximg->w, piximg->h, 1);
+-  pixCopyResolution(pixd, piximg);
+-  if (verbose) pixInfo(pixd, "mask image: ");
+-  expandBinaryPower2Low(pixd->data, pixd->w, pixd->h, pixd->wpl,
++  PIX *pixd;
++#ifdef HAVE_EXPANDBINARYPOWER2LOW
++    pixd = pixCreate(piximg->w, piximg->h, 1);
++    pixCopyResolution(pixd, piximg);
++    expandBinaryPower2Low(pixd->data, pixd->w, pixd->h, pixd->wpl,
+                         pixd4->data, pixd4->w, pixd4->h, pixd4->wpl, 4);
++#else
++    pixd = pixExpandBinaryPower2(pixd4, 4);
++#endif
++  if (verbose) pixInfo(pixd, "mask image: ");
+
+   pixDestroy(&pixd4);
+   pixDestroy(&pixsf4);
diff --git a/nixpkgs/pkgs/tools/graphics/jbig2enc/default.nix b/nixpkgs/pkgs/tools/graphics/jbig2enc/default.nix
new file mode 100644
index 000000000000..1be5f0120fd9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/jbig2enc/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, leptonica, zlib, libwebp, giflib, libjpeg, libpng, libtiff }:
+
+stdenv.mkDerivation {
+  name = "jbig2enc-0.28";
+
+  src = fetchurl {
+    url = https://github.com/agl/jbig2enc/archive/0.28-dist.tar.gz;
+    sha256 = "1wc0lmqz4jag3rhhk1xczlqpfv2qqp3fz7wzic2lba3vsbi1rrw3";
+  };
+
+  propagatedBuildInputs = [ leptonica zlib libwebp giflib libjpeg libpng libtiff ];
+
+  patches = [
+    # https://github.com/agl/jbig2enc/commit/53ce5fe7e73d7ed95c9e12b52dd4984723f865fa
+    ./53ce5fe7e73d7ed95c9e12b52dd4984723f865fa.patch
+  ];
+
+  # This is necessary, because the resulting library has
+  # /tmp/nix-build-jbig2enc/src/.libs before /nix/store/jbig2enc/lib
+  # in its rpath, which means that patchelf --shrink-rpath removes
+  # the /nix/store one.  By cleaning up before fixup, we ensure that
+  # the /tmp/nix-build-jbig2enc/src/.libs directory is gone.
+  preFixup = ''
+    make clean
+  '';
+
+  meta = {
+    description = "Encoder for the JBIG2 image compression format";
+    license = stdenv.lib.licenses.asl20;
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/jhead/default.nix b/nixpkgs/pkgs/tools/graphics/jhead/default.nix
new file mode 100644
index 000000000000..13df4ede8ecf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/jhead/default.nix
@@ -0,0 +1,54 @@
+{ stdenv, fetchurl, fetchpatch, libjpeg }:
+
+stdenv.mkDerivation rec {
+  pname = "jhead";
+  version = "3.03";
+
+  src = fetchurl {
+    url = "http://www.sentex.net/~mwandel/jhead/${pname}-${version}.tar.gz";
+    sha256 = "1hn0yqcicq3qa20h1g313l1a671r8mccpb9gz0w1056r500lw6c2";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "CVE-2019-1010301.patch";
+      url = "https://sources.debian.org/data/main/j/jhead/1:3.03-3/debian/patches/36_CVE-2019-1010301";
+      sha256 = "1vvrg50z5y7sjhfi973wh1q1v79sqp7hk5d4z0dlnx3fqgkjrx7q";
+    })
+    (fetchpatch {
+      name = "CVE-2019-1010302.patch";
+      url = "https://sources.debian.org/data/main/j/jhead/1:3.03-3/debian/patches/37_CVE-2019-1010302";
+      sha256 = "1h11mpsi7hpwbi8kpnkjwn6zpqf88f132h0rsg8sggcs3vva2x8y";
+    })
+  ];
+
+  buildInputs = [ libjpeg ];
+
+  patchPhase = ''
+    substituteInPlace makefile \
+      --replace /usr/local/bin $out/bin
+
+    substituteInPlace jhead.c \
+      --replace "\"   Compiled: \"__DATE__" "" \
+      --replace "jpegtran -trim" "${libjpeg.bin}/bin/jpegtran -trim"
+  '';
+
+  installPhase = ''
+    mkdir -p \
+      $out/bin \
+      $out/man/man1 \
+      $out/share/doc/${pname}-${version}
+
+    cp -v jhead $out/bin
+    cp -v jhead.1 $out/man/man1
+    cp -v *.txt $out/share/doc/${pname}-${version}
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://www.sentex.net/~mwandel/jhead/;
+    description = "Exif Jpeg header manipulation tool";
+    license = licenses.publicDomain;
+    maintainers = with maintainers; [ rycee ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/jpegexiforient/default.nix b/nixpkgs/pkgs/tools/graphics/jpegexiforient/default.nix
new file mode 100644
index 000000000000..9397f46fd2c5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/jpegexiforient/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl }:
+stdenv.mkDerivation {
+  pname = "jpegexiforient";
+  version = "unstable-2002-02-17";
+  src = fetchurl {
+    url = "http://sylvana.net/jpegcrop/jpegexiforient.c";
+    sha256 = "1v0f42cvs0397g9v46p294ldgxwbp285npg6npgnlnvapk6nzh5s";
+  };
+  unpackPhase = ''
+    cp $src jpegexiforient.c
+  '';
+  buildPhase = ''
+    cc -o jpegexiforient jpegexiforient.c
+  '';
+  installPhase = ''
+    install -Dt $out/bin jpegexiforient
+  '';
+  meta = with lib; {
+    description = "Utility program to get and set the Exif Orientation Tag";
+    homepage = "http://sylvana.net/jpegcrop/exif_orientation.html";
+    # Website doesn't mention any license, but I think it's safe to assume this
+    # to be free since it's from IJG, the current maintainers of libjpeg
+    license = licenses.free;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ infinisil ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/kst/default.nix b/nixpkgs/pkgs/tools/graphics/kst/default.nix
new file mode 100644
index 000000000000..480ae328cd38
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/kst/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, cmake, pkgconfig
+, qtbase, gsl, getdata, netcdf, muparser, matio
+}:
+stdenv.mkDerivation rec {
+  name = "Kst-2.0.8";
+  src = fetchurl {
+    url = "mirror://sourceforge/kst/${name}.tar.gz";
+    sha256 = "1ihqmwqw0h2p7hn5shd8iwb0gd4axybs60lgw22ijxqh6wzgvyyf";
+  };
+
+  nativeBuildInputs = [ cmake pkgconfig ];
+  buildInputs = [ qtbase gsl getdata netcdf muparser matio ];
+
+  cmakeFlags = [ "-Dkst_qt5=1" "-Dkst_release=1" ];
+
+  postInstall = ''
+    mkdir -p $out
+    for d in bin lib share
+    do
+      cp -r INSTALLED/$d $out/
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Real-time large-dataset viewing and plotting tool";
+    homepage = https://kst-plot.kde.org/;
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    maintainers = [ maintainers.vbgl ];
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/leela/default.nix b/nixpkgs/pkgs/tools/graphics/leela/default.nix
new file mode 100644
index 000000000000..d1b31f391526
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/leela/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub, pkgconfig, poppler }:
+
+stdenv.mkDerivation {
+  name = "leela-12.fe7a35a";
+
+  src = fetchFromGitHub {
+    owner = "TrilbyWhite";
+    repo = "Leela";
+    rev = "576a60185b191d3a3030fef10492fe32d2125563";
+    sha256 = "1k6n758r9dhjmc1pnpk6qzpg0q7pkq2hf18z3b0s2z198jpkg9s3";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ poppler ];
+
+  installFlags = [ "PREFIX=$(out)" "MANDIR=$(out)/share/man" ];
+
+  meta = {
+    description = "CLI frontend to the poppler-glib libary of PDF tools";
+    homepage = https://github.com/TrilbyWhite/Leela;
+    license = stdenv.lib.licenses.gpl3;
+    maintainers = [ stdenv.lib.maintainers.puffnfresh ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/lepton/default.nix b/nixpkgs/pkgs/tools/graphics/lepton/default.nix
new file mode 100644
index 000000000000..0b6c12639423
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/lepton/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchFromGitHub, cmake, git, glibc }:
+
+stdenv.mkDerivation {
+  version = "1.2.1";
+  pname = "lepton";
+
+  src = fetchFromGitHub {
+    repo = "lepton";
+    owner = "dropbox";
+    rev = "c378cbfa2daaa99e8828be7395013f94cedb1bcc";
+    sha256 = "1f2vyp0crj4yw27bs53vykf2fqk4w57gv3lh9dp89dh3y7wwh1ba";
+  };
+
+  nativeBuildInputs = [ cmake git ];
+  buildInputs = [ glibc.static ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/dropbox/lepton;
+    description = "A tool to losslessly compress JPEGs";
+    license = licenses.asl20;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ artemist ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/logstalgia/default.nix b/nixpkgs/pkgs/tools/graphics/logstalgia/default.nix
new file mode 100644
index 000000000000..aed8b0573bae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/logstalgia/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, fetchurl, SDL2, ftgl, pkgconfig, libpng, libjpeg, pcre, SDL2_image, glew
+, libGLU, libGL, boost, glm, freetype }:
+
+stdenv.mkDerivation rec {
+  pname = "logstalgia";
+  version = "1.1.2";
+
+  src = fetchurl {
+    url = "https://github.com/acaudwell/Logstalgia/releases/download/${pname}-${version}/${pname}-${version}.tar.gz";
+    sha256 = "1agwjlwzp1c86hqb1p7rmzqzhd3wpnyh8whsfq4sbx01wj0l0gzd";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ glew SDL2 ftgl libpng libjpeg pcre SDL2_image libGLU libGL boost
+                  glm freetype ];
+
+  meta = with stdenv.lib; {
+    homepage = https://logstalgia.io/;
+    description = "Website traffic visualization tool";
+    license = licenses.gpl3Plus;
+
+    longDescription = ''
+      Logstalgia is a website traffic visualization that replays or
+      streams web-server access logs as a pong-like battle between the
+      web server and an never ending torrent of requests.
+
+      Requests appear as colored balls (the same color as the host)
+      which travel across the screen to arrive at the requested
+      location. Successful requests are hit by the paddle while
+      unsuccessful ones (eg 404 - File Not Found) are missed and pass
+      through.
+
+      The paths of requests are summarized within the available space by
+      identifying common path prefixes. Related paths are grouped
+      together under headings. For instance, by default paths ending in
+      png, gif or jpg are grouped under the heading Images. Paths that
+      don’t match any of the specified groups are lumped together under
+      a Miscellaneous section.
+    '';
+
+    platforms = platforms.gnu ++ platforms.linux;
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/lprof/default.nix b/nixpkgs/pkgs/tools/graphics/lprof/default.nix
new file mode 100644
index 000000000000..42ccc4d5022e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/lprof/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchurl, sconsPackages, qt3, lcms1, libtiff, vigra }:
+
+/*  how to calibrate your monitor:
+    Eg see https://wiki.archlinux.org/index.php/ICC_Profiles#Loading_ICC_Profiles
+*/
+stdenv.mkDerivation {
+  name = "lprof-1.11.4.1";
+  nativeBuildInputs = [ sconsPackages.scons_3_0_1 ];
+  buildInputs = [ qt3 lcms1 libtiff vigra ];
+
+  hardeningDisable = [ "format" ];
+
+  preConfigure = ''
+    export QTDIR=${qt3}
+    export qt_directory=${qt3}
+  '';
+
+  src = fetchurl {
+    url = mirror://sourceforge/lprof/lprof/lprof-1.11.4/lprof-1.11.4.1.tar.gz;
+    sha256 = "0q8x24fm5yyvm151xrl3l03p7hvvciqnkbviprfnvlr0lyg9wsrn";
+  };
+
+  sconsFlags = "SYSLIBS=1";
+  preBuild = ''
+    export CXX=g++
+  '';
+  prefixKey = "PREFIX=";
+
+  patches = [ ./lcms-1.17.patch  ./keep-environment.patch ];
+
+  meta = {
+    description = "Little CMS ICC profile construction set";
+    homepage = https://sourceforge.net/projects/lprof;
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/lprof/keep-environment.patch b/nixpkgs/pkgs/tools/graphics/lprof/keep-environment.patch
new file mode 100644
index 000000000000..4dcb5b0448dd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/lprof/keep-environment.patch
@@ -0,0 +1,16 @@
+--- lprof-1.11.4.1.org/SConstruct	2006-06-06 02:11:32.000000000 +0100
++++ lprof-1.11.4.1/SConstruct	2017-08-29 12:56:13.425654683 +0100
+@@ -22,12 +22,7 @@
+ # opts.Add(BoolOption('qt-mt-lib', 'Flag used to set QT library to either qt-mt or qt. Value of 1 = qt-mt, 0 = qt.', 'yes'))
+ 
+ # setup base environemnt 
+-env = Environment(
+-    ENV = {
+-      'PATH' : os.environ[ 'PATH' ],
+-      'HOME' : os.environ[ 'HOME' ], # required for distcc
+-      'LDFLAGS' : ''
+-    }, options = opts)
++env = Environment(ENV = os.environ, options = opts)
+ 
+ opts.Update(env)
+ opts.Save('lprof.conf', env) # Save, so user doesn't have to 
diff --git a/nixpkgs/pkgs/tools/graphics/lprof/lcms-1.17.patch b/nixpkgs/pkgs/tools/graphics/lprof/lcms-1.17.patch
new file mode 100644
index 000000000000..a88471e143fd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/lprof/lcms-1.17.patch
@@ -0,0 +1,13 @@
+--- a/src/liblprof/lcmsprf.h	2007-08-31 15:36:20.000000000 -0700
++++ b/src/liblprof/lcmsprf.h	2007-08-31 15:37:39.000000000 -0700
+@@ -67,6 +67,9 @@
+ #define mmax(a,b) ((a) > (b)?(a):(b))
+ #endif
+ 
++#if LCMS_VERSION > 116
++typedef int BOOL;
++#endif
+ 
+ /* Misc operations ------------------------------------------------------------------------ */
+ 
+
diff --git a/nixpkgs/pkgs/tools/graphics/luxcorerender/default.nix b/nixpkgs/pkgs/tools/graphics/luxcorerender/default.nix
new file mode 100644
index 000000000000..6a0db954da64
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/luxcorerender/default.nix
@@ -0,0 +1,88 @@
+{ stdenv, fetchFromGitHub, cmake, boost165, pkgconfig, python35
+, tbb, openimageio, libjpeg, libpng, zlib, libtiff, ilmbase
+, freetype, openexr, libXdmcp, libxkbcommon, epoxy, at-spi2-core
+, dbus, doxygen, qt5, c-blosc, libGLU, gnome3, dconf, gtk3, pcre
+, bison, flex, libpthreadstubs, libX11
+, embree2, makeWrapper, gsettings-desktop-schemas, glib
+, withOpenCL ? true , opencl-headers, ocl-icd, opencl-clhpp
+}:
+
+let boost_static = boost165.override {
+      python = python35;
+      enableStatic = true;
+      enablePython = true;
+    };
+
+in stdenv.mkDerivation {
+  pname = "luxcorerender";
+  version = "2.0";
+
+  src = fetchFromGitHub {
+    owner = "LuxCoreRender";
+    repo = "LuxCore";
+    rev = "luxcorerender_v2.0";
+    sha256 = "15nn39ybsfjf3cw3xgkbarvxn4a9ymfd579ankm7yjxkw5gcif38";
+  };
+
+  buildInputs =
+   [ embree2 pkgconfig cmake zlib boost_static libjpeg
+     libtiff libpng ilmbase freetype openexr openimageio
+     tbb qt5.full c-blosc libGLU pcre bison
+     flex libX11 libpthreadstubs python35 libXdmcp libxkbcommon
+     epoxy at-spi2-core dbus doxygen
+     # needed for GSETTINGS_SCHEMAS_PATH
+     gsettings-desktop-schemas glib gtk3
+     # needed for XDG_ICON_DIRS
+     gnome3.adwaita-icon-theme
+     makeWrapper
+     (stdenv.lib.getLib dconf)
+   ] ++ stdenv.lib.optionals withOpenCL [opencl-headers ocl-icd opencl-clhpp];
+
+  cmakeFlags = [
+    "-DOpenEXR_Iex_INCLUDE_DIR=${openexr.dev}/include/OpenEXR"
+    "-DOpenEXR_IlmThread_INCLUDE_DIR=${ilmbase.dev}/include/OpenEXR"
+    "-DOpenEXR_Imath_INCLUDE_DIR=${openexr.dev}/include/OpenEXR"
+    "-DOpenEXR_half_INCLUDE_DIR=${ilmbase.dev}/include"
+    "-DPYTHON_LIBRARY=${python35}/lib/libpython3.so"
+    "-DPYTHON_INCLUDE_DIR=${python35}/include/python3.5"
+    "-DEMBREE_INCLUDE_PATH=${embree2}/include"
+    "-DEMBREE_LIBRARY=${embree2}/lib/libembree.so"
+    "-DBoost_PYTHON_LIBRARY_RELEASE=${boost_static}/lib/libboost_python3-mt.so"
+  ] ++ stdenv.lib.optional withOpenCL
+       "-DOPENCL_INCLUDE_DIR=${opencl-headers}/include";
+  preConfigure = ''
+    NIX_CFLAGS_COMPILE+=" -isystem ${python35}/include/python3.5"
+    NIX_LDFLAGS+=" -lpython3"
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mkdir -p $out/lib
+    cp -va bin/* $out/bin
+    cp -va lib/* $out/lib
+  '';
+
+  preFixup = ''
+    wrapProgram "$out/bin/luxcoreui" \
+      --prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH" \
+      --suffix XDG_DATA_DIRS : '${gnome3.adwaita-icon-theme}/share' \
+      --prefix GIO_EXTRA_MODULES : "${stdenv.lib.getLib dconf}/lib/gio/modules"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Open source, physically based, unbiased rendering engine";
+    homepage = https://luxcorerender.org/;
+    maintainers = with maintainers; [ hodapp ];
+    license = licenses.asl20;
+    platforms = platforms.linux;
+  };
+}
+
+
+# TODO (might not be necessary):
+#
+# luxcoreui still gives warnings like: "failed to commit changes to
+# dconf: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The
+# name ca.desrt.dconf was not provided by any .service files"
+
+# CMake complains of the FindOpenGL/GLVND preference
diff --git a/nixpkgs/pkgs/tools/graphics/maim/default.nix b/nixpkgs/pkgs/tools/graphics/maim/default.nix
new file mode 100644
index 000000000000..8f3a4dc5c659
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/maim/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromGitHub, cmake, pkgconfig
+, zlib, libpng, libjpeg, libGLU, libGL, glm
+, libX11, libXext, libXfixes, libXrandr, libXcomposite, slop, icu
+}:
+
+stdenv.mkDerivation rec {
+  pname = "maim";
+  version = "5.5.3";
+
+  src = fetchFromGitHub {
+    owner = "naelstrof";
+    repo = "maim";
+    rev = "v${version}";
+    sha256 = "1kbxsz8whfxl5blwsvpva2q95zwy72argwhi1cfqh5lrhzq5zrpp";
+  };
+
+  nativeBuildInputs = [ cmake pkgconfig ];
+  buildInputs =
+    [ zlib libpng libjpeg libGLU libGL glm
+      libX11 libXext libXfixes libXrandr libXcomposite slop icu ];
+
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    inherit (src.meta) homepage;
+    description = "A command-line screenshot utility";
+    longDescription = ''
+      maim (make image) takes screenshots of your desktop. It has options to
+      take only a region, and relies on slop to query for regions. maim is
+      supposed to be an improved scrot.
+    '';
+    platforms = stdenv.lib.platforms.all;
+    license = stdenv.lib.licenses.gpl3Plus;
+    maintainers = with maintainers; [ primeos mbakke ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/mscgen/default.nix b/nixpkgs/pkgs/tools/graphics/mscgen/default.nix
new file mode 100644
index 000000000000..832a48baab72
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/mscgen/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchurl, flex, bison, gd, libpng, libjpeg, freetype, zlib, libwebp, runtimeShell }:
+
+let
+  version = "0.20";
+in
+stdenv.mkDerivation {
+  pname = "mscgen";
+  inherit version;
+
+  src = fetchurl {
+    url = "http://www.mcternan.me.uk/mscgen/software/mscgen-src-${version}.tar.gz";
+    sha256 = "3c3481ae0599e1c2d30b7ed54ab45249127533ab2f20e768a0ae58d8551ddc23";
+  };
+
+  buildInputs = [ flex bison gd libjpeg libpng freetype zlib libwebp ];
+
+  doCheck = true;
+  preCheck = ''
+    sed -i -e "s|#!/bin/bash|#!${runtimeShell}|" test/renderercheck.sh
+  '';
+
+  meta = {
+    homepage = http://www.mcternan.me.uk/mscgen/;
+    description = "Convert Message Sequence Chart descriptions into PNG, SVG, or EPS images";
+    license = stdenv.lib.licenses.gpl2;
+
+    longDescription = ''
+      Mscgen is a small program that parses Message Sequence Chart
+      descriptions and produces PNG, SVG, EPS or server side image maps
+      (ismaps) as the output. Message Sequence Charts (MSCs) are a way
+      of representing entities and interactions over some time period
+      and are often used in combination with SDL. MSCs are popular in
+      Telecoms to specify how protocols operate although MSCs need not
+      be complicated to create or use. Mscgen aims to provide a simple
+      text language that is clear to create, edit and understand, which
+      can also be transformed into common image formats for display or
+      printing.
+    '';
+
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ stdenv.lib.maintainers.peti ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/netpbm/default.nix b/nixpkgs/pkgs/tools/graphics/netpbm/default.nix
new file mode 100644
index 000000000000..9de7603c9730
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/netpbm/default.nix
@@ -0,0 +1,70 @@
+{ lib, stdenv, fetchsvn, pkgconfig, libjpeg, libpng, flex, zlib, perl, libxml2
+, makeWrapper, libtiff
+, enableX11 ? false, libX11 }:
+
+stdenv.mkDerivation {
+  # Determine version and revision from:
+  # https://sourceforge.net/p/netpbm/code/HEAD/log/?path=/advanced
+  name = "netpbm-10.82.01";
+
+  src = fetchsvn {
+    url = "https://svn.code.sf.net/p/netpbm/code/advanced";
+    rev = "3264";
+    sha256 = "17fmyjbxp1l18rma7gb0m8wd9kx2iwhqs8dd6fpalsn2cr8mf8hf";
+  };
+
+  postPatch = /* CVE-2005-2471, from Arch */ ''
+    substituteInPlace converter/other/pstopnm.c \
+      --replace '"-DSAFER"' '"-DPARANOIDSAFER"'
+  '';
+
+  buildInputs =
+    [ pkgconfig flex zlib perl libpng libjpeg libxml2 makeWrapper libtiff ]
+    ++ lib.optional enableX11 libX11;
+
+  configurePhase = ''
+    cp config.mk.in config.mk
+    echo "STATICLIB_TOO = n" >> config.mk
+    substituteInPlace "config.mk" \
+        --replace "TIFFLIB = NONE" "TIFFLIB = ${libtiff.out}/lib/libtiff.so" \
+        --replace "TIFFHDR_DIR =" "TIFFHDR_DIR = ${libtiff.dev}/include" \
+        --replace "JPEGLIB = NONE" "JPEGLIB = ${libjpeg.out}/lib/libjpeg.so" \
+        --replace "JPEGHDR_DIR =" "JPEGHDR_DIR = ${libjpeg.dev}/include"
+   '' + stdenv.lib.optionalString stdenv.isDarwin ''
+    echo "LDSHLIB=-dynamiclib -install_name $out/lib/libnetpbm.\$(MAJ).dylib" >> config.mk
+    echo "NETPBMLIBTYPE = dylib" >> config.mk
+    echo "NETPBMLIBSUFFIX = dylib" >> config.mk
+  '';
+
+  preBuild = ''
+    export LDFLAGS="-lz"
+    substituteInPlace "pm_config.in.h" \
+        --subst-var-by "rgbPath1" "$out/lib/rgb.txt" \
+        --subst-var-by "rgbPath2" "/var/empty/rgb.txt" \
+        --subst-var-by "rgbPath3" "/var/empty/rgb.txt"
+    touch lib/standardppmdfont.c
+  '';
+
+  enableParallelBuilding = false;
+
+  installPhase = ''
+    make package pkgdir=$out
+
+    rm -rf $out/link $out/*_template $out/{pkginfo,README,VERSION} $out/man/web
+
+    mkdir -p $out/share/netpbm
+    mv $out/misc $out/share/netpbm/
+
+    # wrap any scripts that expect other programs in the package to be in their PATH
+    for prog in ppmquant; do
+        wrapProgram "$out/bin/$prog" --prefix PATH : "$out/bin"
+    done
+  '';
+
+  meta = {
+    homepage = http://netpbm.sourceforge.net/;
+    description = "Toolkit for manipulation of graphic images";
+    license = "GPL,free";
+    platforms = with stdenv.lib.platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/neural-style/default.nix b/nixpkgs/pkgs/tools/graphics/neural-style/default.nix
new file mode 100644
index 000000000000..a4706e95ceef
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/neural-style/default.nix
@@ -0,0 +1,58 @@
+{stdenv, fetchFromGitHub, torch, loadcaffe, fetchurl, bash}:
+stdenv.mkDerivation rec {
+  pname = "neural-style";
+  version = "0.0pre2016.08.15";
+  buildInputs = [torch loadcaffe];
+  src = fetchFromGitHub {
+    owner = "jcjohnson";
+    repo = "neural-style";
+    rev = "ec5ba3a690d3090428d3b92b0c5d686a311bf432";
+    sha256 = "14qzbs9f95izvd0vbbirhymdw9pq2nw0jvhrh7vnyzr99xllwp02";
+  };
+  models = [
+    (fetchurl {
+      url = "https://gist.githubusercontent.com/ksimonyan/3785162f95cd2d5fee77/raw/bb2b4fe0a9bb0669211cf3d0bc949dfdda173e9e/VGG_ILSVRC_19_layers_deploy.prototxt";
+      sha256 = "09cpz7pyvc8sypg2q5j2i8yqwj1sjdbnmd6skl293p9pv13dmjg7";
+    })
+    (fetchurl {
+      url = "https://bethgelab.org/media/uploads/deeptextures/vgg_normalised.caffemodel";
+      sha256 = "11qckdvlck7wwl3pan0nawgxm8l2ccddi272i5l8rs9qzm7b23rf";
+    })
+    (fetchurl {
+      url = "http://www.robots.ox.ac.uk/~vgg/software/very_deep/caffe/VGG_ILSVRC_19_layers.caffemodel";
+      sha256 = "0m399x7pl4lnhy435ycsyz8xpzapqmx9n1sz698y2vhcqhkwdd1i";
+    })
+  ];
+  installPhase = ''
+    mkdir -p "$out"/{bin,lib/lua/neural-style/models,share/doc/neural-style,share/neural-style}
+    for file in $models; do
+      ln -s "$file" "$out/lib/lua/neural-style/models/$(basename "$file" | sed -e 's/[^-]*-//')"
+    done;
+    cp README* INSTALL* LICEN?E* "$out"/share/doc/neural-style/
+    cp neural_style.lua "$out"/lib/lua/neural-style
+
+    substituteAll "${./neural-style.sh}" "$out/bin/neural-style"
+    chmod a+x "$out/bin/neural-style"
+    cp "$out/bin/neural-style" .
+    cp "$out/lib/lua/neural-style/models/"* models/
+
+    echo "Testing..."
+
+    "$out/bin/neural-style" -style_image examples/inputs/golden_gate.jpg \
+      -content_image examples/inputs/golden_gate.jpg -output_image $PWD/test.png \
+      -gpu -1 -save_iter 1 -print_iter 1 -num_iterations 1 || true
+
+    cp -f "$out/lib/lua/neural-style/models/"* models/
+
+    test -e test.png || exit 1
+  '';
+  inherit torch bash loadcaffe;
+  meta = {
+    inherit version;
+    description = ''A torch implementation of the paper A Neural Algorithm of Artistic Style'';
+    license = stdenv.lib.licenses.mit ;
+    maintainers = [stdenv.lib.maintainers.raskin];
+    # Eats a lot of RAM
+    platforms = ["x86_64-linux"];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/neural-style/neural-style.sh b/nixpkgs/pkgs/tools/graphics/neural-style/neural-style.sh
new file mode 100644
index 000000000000..07a4d6dedc04
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/neural-style/neural-style.sh
@@ -0,0 +1,25 @@
+#! @bash@/bin/bash
+
+declare -a args
+c=1
+flag=
+
+for arg in "$@"; do
+        if test "$arg" = "${arg#-}" && test "$arg" = "${arg#/}" && test -n "$flag"; then
+                arg="$PWD/$arg"
+                flag=
+        elif test "$arg" != "${arg%_image}" && test "$arg" != "${arg#-}"; then
+                flag=1
+        else
+                flag=
+        fi
+        args[c]="$arg";
+        c=$((c+1));
+done
+
+cd "@out@/lib/lua/neural-style"
+
+export LUA_PATH="$LUA_PATH${LUA_PATH:+;}@loadcaffe@/lua/?/init.lua;@loadcaffe@/lua/?.lua"
+export LUA_CPATH="$LUA_CPATH${LUA_CPATH:+;}@loadcaffe@/lib/?.so"
+
+@torch@/bin/th neural_style.lua "${args[@]}"
diff --git a/nixpkgs/pkgs/tools/graphics/nifskope/default.nix b/nixpkgs/pkgs/tools/graphics/nifskope/default.nix
new file mode 100644
index 000000000000..65ccfecedd68
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/nifskope/default.nix
@@ -0,0 +1,69 @@
+{ stdenv, fetchFromGitHub, qmake, qtbase, qttools, substituteAll, libGLU, wrapQtAppsHook, fetchpatch }:
+
+stdenv.mkDerivation {
+  pname = "nifskope";
+  version = "2.0.dev7";
+
+  src = fetchFromGitHub {
+    owner = "niftools";
+    repo = "nifskope";
+    rev = "47b788d26ae0fa12e60e8e7a4f0fa945a510c7b2"; # `v${version}` doesn't work with submodules
+    sha256 = "1wqpn53rkq28ws3apqghkzyrib4wis91x171ns64g8kp4q6mfczi";
+    fetchSubmodules = true;
+  };
+
+  patches = [
+    ./external-lib-paths.patch
+    (substituteAll {
+      src = ./qttools-bins.patch;
+      qttools = "${qttools.dev}/bin";
+    })
+    (fetchpatch {
+      name = "qt512-build-fix.patch";
+      url = "https://github.com/niftools/nifskope/commit/30954e7f01f3d779a2a1fd37d363e8a6ad560bd3.patch";
+      sha256 = "0d6xjj2mjjhdd7w1aig5f75jksjni16jyj0lxsz51pys6xqb6fpj";
+    })
+  ] ++ (stdenv.lib.optional stdenv.isAarch64 ./no-sse-on-arm.patch);
+
+  buildInputs = [ qtbase qttools libGLU.dev ];
+  nativeBuildInputs = [ qmake wrapQtAppsHook ];
+
+  preConfigure = ''
+    shopt -s globstar
+    for i in **/*.cpp; do
+      substituteInPlace $i --replace /usr/share/nifskope $out/share/nifskope
+    done
+  '';
+
+  enableParallelBuilding = true;
+
+  # Inspired by install/linux-install/nifskope.spec.in.
+  installPhase = ''
+    runHook preInstall
+
+    d=$out/share/nifskope
+    mkdir -p $out/bin $out/share/applications $out/share/pixmaps $d/{shaders,lang}
+    cp release/NifSkope $out/bin/
+    cp ./res/nifskope.png $out/share/pixmaps/
+    cp release/{nif.xml,kfm.xml,style.qss} $d/
+    cp res/shaders/*.frag res/shaders/*.prog res/shaders/*.vert $d/shaders/
+    cp ./res/lang/*.ts ./res/lang/*.tm $d/lang/
+    cp ./install/linux-install/nifskope.desktop $out/share/applications
+
+    substituteInPlace $out/share/applications/nifskope.desktop \
+      --replace 'Exec=nifskope' "Exec=$out/bin/NifSkope" \
+      --replace 'Icon=nifskope' "Icon=$out/share/pixmaps/nifskope.png"
+
+    find $out/share -type f -exec chmod -x {} \;
+
+    runHook postInstall
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://niftools.sourceforge.net/wiki/NifSkope;
+    description = "A tool for analyzing and editing NetImmerse/Gamebryo '*.nif' files";
+    maintainers = with maintainers; [ eelco ma27 ];
+    platforms = platforms.linux;
+    license = licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/nifskope/external-lib-paths.patch b/nixpkgs/pkgs/tools/graphics/nifskope/external-lib-paths.patch
new file mode 100644
index 000000000000..a7f329caf74f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/nifskope/external-lib-paths.patch
@@ -0,0 +1,33 @@
+diff --git a/NifSkope.pro b/NifSkope.pro
+index 1c0bc5a..cc29fc5 100644
+--- a/NifSkope.pro
++++ b/NifSkope.pro
+@@ -330,14 +330,14 @@ nvtristrip {
+ }
+ 
+ qhull {
+-    !*msvc*:QMAKE_CFLAGS += -isystem ../nifskope/lib/qhull/src
+-    !*msvc*:QMAKE_CXXFLAGS += -isystem ../nifskope/lib/qhull/src
++    !*msvc*:QMAKE_CFLAGS += -isystem ./lib/qhull/src
++    !*msvc*:QMAKE_CXXFLAGS += -isystem ./lib/qhull/src
+     else:INCLUDEPATH += lib/qhull/src
+     HEADERS += $$files($$PWD/lib/qhull/src/libqhull/*.h, false)
+ }
+ 
+ gli {
+-    !*msvc*:QMAKE_CXXFLAGS += -isystem ../nifskope/lib/gli/gli -isystem ../nifskope/lib/gli/external
++    !*msvc*:QMAKE_CXXFLAGS += -isystem ./lib/gli/gli -isystem ./lib/gli/external
+     else:INCLUDEPATH += lib/gli/gli lib/gli/external
+     HEADERS += $$files($$PWD/lib/gli/gli/*.hpp, true)
+     HEADERS += $$files($$PWD/lib/gli/gli/*.inl, true)
+@@ -346,8 +346,8 @@ gli {
+ }
+ 
+ zlib {
+-    !*msvc*:QMAKE_CFLAGS += -isystem ../nifskope/lib/zlib
+-    !*msvc*:QMAKE_CXXFLAGS += -isystem ../nifskope/lib/zlib
++    !*msvc*:QMAKE_CFLAGS += -isystem ./lib/zlib
++    !*msvc*:QMAKE_CXXFLAGS += -isystem ./lib/zlib
+     else:INCLUDEPATH += lib/zlib
+     HEADERS += $$files($$PWD/lib/zlib/*.h, false)
+     SOURCES += $$files($$PWD/lib/zlib/*.c, false)
diff --git a/nixpkgs/pkgs/tools/graphics/nifskope/no-sse-on-arm.patch b/nixpkgs/pkgs/tools/graphics/nifskope/no-sse-on-arm.patch
new file mode 100644
index 000000000000..452fb1a76d5d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/nifskope/no-sse-on-arm.patch
@@ -0,0 +1,19 @@
+diff --git a/NifSkope.pro b/NifSkope.pro
+index cc29fc5..b17bb6e 100644
+--- a/NifSkope.pro
++++ b/NifSkope.pro
+@@ -428,13 +428,10 @@ win32 {
+ 	#  Optimization flags
+ 	QMAKE_CXXFLAGS_DEBUG -= -O0 -g
+ 	QMAKE_CXXFLAGS_DEBUG *= -Og -g3
+-	QMAKE_CXXFLAGS_RELEASE *= -O3 -mfpmath=sse
++	QMAKE_CXXFLAGS_RELEASE *= -O3
+ 
+ 	# C++11 Support
+ 	QMAKE_CXXFLAGS_RELEASE *= -std=c++14
+-
+-	#  Extension flags
+-	QMAKE_CXXFLAGS_RELEASE *= -msse2 -msse
+ }
+ 
+ win32 {
diff --git a/nixpkgs/pkgs/tools/graphics/nifskope/qttools-bins.patch b/nixpkgs/pkgs/tools/graphics/nifskope/qttools-bins.patch
new file mode 100644
index 000000000000..5d85f9ef4fdd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/nifskope/qttools-bins.patch
@@ -0,0 +1,22 @@
+diff --git a/NifSkope_targets.pri b/NifSkope_targets.pri
+index 05324c2..d8389b1 100644
+--- a/NifSkope_targets.pri
++++ b/NifSkope_targets.pri
+@@ -11,7 +11,7 @@ else:EXE = ""
+ ## lupdate / lrelease
+ ###############################
+ 
+-QMAKE_LUPDATE = $$[QT_INSTALL_BINS]/lupdate$${EXE}
++QMAKE_LUPDATE = @qttools@/lupdate$${EXE}
+ exists($$QMAKE_LUPDATE) {
+ 	# Make target for Updating .ts
+ 	updatets.target = updatets
+@@ -23,7 +23,7 @@ exists($$QMAKE_LUPDATE) {
+ 	message("lupdate could not be found, ignoring make target")
+ }
+ 
+-QMAKE_LRELEASE = $$[QT_INSTALL_BINS]/lrelease$${EXE}
++QMAKE_LRELEASE = @qttools@/lrelease$${EXE}
+ exists($$QMAKE_LRELEASE) {
+ 	# Build Step for Releasing .ts->.qm
+ 	updateqm.input = TRANSLATIONS
diff --git a/nixpkgs/pkgs/tools/graphics/nip2/default.nix b/nixpkgs/pkgs/tools/graphics/nip2/default.nix
new file mode 100644
index 000000000000..ac4d8441bf59
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/nip2/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl, pkgconfig, glib, libxml2, flex, bison, vips, gnome2,
+fftw, gsl, goffice, libgsf }:
+
+stdenv.mkDerivation rec {
+  pname = "nip2";
+  version = "8.7.1";
+
+  src = fetchurl {
+    url = "https://github.com/libvips/nip2/releases/download/v${version}/nip2-${version}.tar.gz";
+    sha256 = "0l7n427njif53npqn02gfjjly8y3khbrkzqxp10j5vp9h97psgiw";
+  };
+
+  buildInputs =
+  [ pkgconfig glib libxml2 flex bison vips
+    gnome2.gtk fftw gsl goffice libgsf
+  ];
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/libvips/nip2";
+    description = "Graphical user interface for VIPS image processing system";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ kovirobi ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/optar/default.nix b/nixpkgs/pkgs/tools/graphics/optar/default.nix
new file mode 100644
index 000000000000..b831e359e9cc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/optar/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl, imagemagick, libpng }:
+
+stdenv.mkDerivation {
+  pname = "optar";
+  version = "20150210";
+
+  src = fetchurl {
+    url    = "http://ronja.twibright.com/optar.tgz";
+    sha256 = "10lr31k3xfcpa6vxkbl3abph7j3gks2210489khnnzmhmfdnm1a4";
+  };
+
+  buildInputs = [ libpng ];
+
+  enableParallelBuilding = true;
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace /usr/local $out
+
+    substituteInPlace pgm2ps \
+      --replace 'convert ' "${stdenv.lib.getBin imagemagick}/bin/convert "
+  '';
+
+  preInstall = ''
+    mkdir -p $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Optar stands for OPTical ARchiver - it's a codec for encoding data on paper";
+    homepage = http://ronja.twibright.com/optar/;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = with platforms; linux; # possibly others, but only tested on Linux
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/optipng/default.nix b/nixpkgs/pkgs/tools/graphics/optipng/default.nix
new file mode 100644
index 000000000000..bc849b21117f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/optipng/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, fetchurl, libpng, static ? false
+}:
+
+# This package comes with its own copy of zlib, libpng and pngxtern
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  name = "optipng-0.7.7";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/optipng/${name}.tar.gz";
+    sha256 = "0lj4clb851fzpaq446wgj0sfy922zs5l5misbpwv6w7qrqrz4cjg";
+  };
+
+  buildInputs = [ libpng ];
+
+  LDFLAGS = optional static "-static";
+  # Workaround for crash in cexcept.h. See
+  # https://github.com/NixOS/nixpkgs/issues/28106
+  preConfigure = ''
+    export LD=$CC
+  '';
+
+  configureFlags = [
+    "--with-system-zlib"
+    "--with-system-libpng"
+  ] ++ stdenv.lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
+    #"-prefix=$out"
+  ];
+
+  postInstall = if stdenv.hostPlatform != stdenv.buildPlatform && stdenv.hostPlatform.isWindows then ''
+    mv "$out"/bin/optipng{,.exe}
+  '' else null;
+
+  meta = with stdenv.lib; {
+    homepage = http://optipng.sourceforge.net/;
+    description = "A PNG optimizer";
+    license = licenses.zlib;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/oxipng/default.nix b/nixpkgs/pkgs/tools/graphics/oxipng/default.nix
new file mode 100644
index 000000000000..0bbd7c21aa6e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/oxipng/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  version = "2.3.0";
+  pname = "oxipng";
+
+  src = fetchFromGitHub {
+    owner = "shssoichiro";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1cx026g1gdvk4qmnrbsmg46y2lizx0wqny25hhdjnh9pwzjc77mh";
+  };
+
+  cargoSha256 = "1213mg7xhv9ymgm0xqdai5wgammz9n07whw2d42m83208k94zss3";
+
+  # https://crates.io/crates/cloudflare-zlib#arm-vs-nightly-rust
+  cargoBuildFlags = [ "--features=cloudflare-zlib/arm-always" ];
+
+  doCheck = !stdenv.isAarch64 && !stdenv.isDarwin;
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/shssoichiro/oxipng;
+    description = "A multithreaded lossless PNG compression optimizer";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dywedir ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/pdf2svg/default.nix b/nixpkgs/pkgs/tools/graphics/pdf2svg/default.nix
new file mode 100644
index 000000000000..46eb61d1cf75
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pdf2svg/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig
+, cairo, gtk2, poppler }:
+
+stdenv.mkDerivation rec {
+  pname = "pdf2svg";
+  version = "0.2.3";
+
+  src = fetchFromGitHub {
+    owner = "db9052";
+    repo = "pdf2svg";
+    rev = "v${version}";
+    sha256 = "14ffdm4y26imq99wjhkrhy9lp33165xci1l5ndwfia8hz53bl02k";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  buildInputs = [ cairo poppler gtk2 ];
+
+  meta = with stdenv.lib; {
+    description = "PDF converter to SVG format";
+    homepage = http://www.cityinthesky.co.uk/opensource/pdf2svg;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.ianwookim ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/pdfread/default.nix b/nixpkgs/pkgs/tools/graphics/pdfread/default.nix
new file mode 100644
index 000000000000..8733b2c1caa0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pdfread/default.nix
@@ -0,0 +1,50 @@
+{stdenv, fetchurl, unzip, python, makeWrapper, ghostscript, pngnq, pillow, djvulibre
+, optipng, unrar}:
+
+stdenv.mkDerivation {
+  name = "pdfread-1.8.2";
+
+  src = fetchurl {
+    # I got it from http://www.mobileread.com/forums/showthread.php?t=21906
+    # But that needs user registration to allow downloading.
+    # This is an evolution from pdfread 1.7 in http://pdfread.sourceforge.net/
+    # Temporary place:
+    url = http://vicerveza.homeunix.net/~viric/soft/PDFRead-1.8.2-Source-noGUI-noInstaller.zip;
+    sha256 = "0mzxpnk97f0ww5ds7h4wsval3g4lnrhv6rhspjs7cy4i41gmk8an";
+  };
+
+  buildInputs = [ unzip python makeWrapper ];
+
+  broken = true; # Not found.
+
+  phases = "unpackPhase patchPhase installPhase";
+
+  unpackPhase = ''
+    unzip $src
+    sourceRoot=`pwd`/PDFRead/src
+  '';
+
+  patchPhase = ''
+    sed -i 's,#!/usr.*,#!${python}/bin/python,' pdfread.py
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp pdfread.py $out/bin
+    chmod +x $out/bin/pdfread.py
+
+    LIBSUFFIX=lib/${python.libPrefix}/site-packages/
+    PYDIR=$out/$LIBSUFFIX
+    mkdir -p $PYDIR
+    cp -R *.py pylrs $PYDIR
+
+    wrapProgram $out/bin/pdfread.py --prefix PYTHONPATH : $PYTHONPATH:${pillow}/$LIBSUFFIX/PIL:$PYDIR \
+      --prefix PATH : ${stdenv.lib.makeBinPath [ ghostscript pngnq djvulibre unrar optipng ]}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "PDF/DJVU to ebook format converter";
+    homepage = https://www.mobileread.com/forums/showthread.php?t=21906;
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/pdfredacttools/default.nix b/nixpkgs/pkgs/tools/graphics/pdfredacttools/default.nix
new file mode 100644
index 000000000000..28b13c782b91
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pdfredacttools/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchFromGitHub, python2Packages, imagemagick, exiftool, file, ghostscript }:
+
+python2Packages.buildPythonApplication rec {
+  pname = "pdf-redact-tools";
+  version = "0.1.2";
+
+  src = fetchFromGitHub {
+    owner = "firstlookmedia";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "01vs1bc0pfgk6x2m36vwra605fg59yc31d0hl9jmj86n8q6wwvss";
+  };
+
+  patchPhase = ''substituteInPlace pdf-redact-tools      \
+    --replace \'convert\' \'${imagemagick}/bin/convert\' \
+    --replace \'exiftool\' \'${exiftool}/bin/exiftool\'  \
+    --replace \'file\' \'${file}/bin/file\'
+   '';
+
+  propagatedBuildInputs = [ imagemagick exiftool ghostscript ];
+
+  meta = with stdenv.lib; {
+    description = "Redact and strip metadata from documents before publishing";
+    longDescription = ''
+	PDF Redact Tools helps with securely redacting and stripping metadata
+	from documents before publishing. Note that this is not a security tool.
+        It uses ImageMagick to parse PDFs.  While ImageMagick is a versatile tool, it has
+        a history of several security bugs. A malicious PDF could exploit a bug in
+        ImageMagick to take over your computer. If you're working with potentially
+        malicious PDFs, it's safest to run them through PDF Redact Tools in an isolated
+        environment, such as a virtual machine, or by using a tool such as the Qubes
+        PDF Converter instead.
+    '';
+    platforms = platforms.all;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ leenaars ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/pdftag/default.nix b/nixpkgs/pkgs/tools/graphics/pdftag/default.nix
new file mode 100644
index 000000000000..7e0229363188
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pdftag/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchFromGitHub, pkgconfig, meson, vala, ninja
+, gtk3, poppler, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "pdftag";
+  version = "1.0.5";
+
+  src = fetchFromGitHub {
+    owner = "arrufat";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1paj8hs27akzsivn01a30fl3zx5gfn1h89wxg2m72fd806hk0hql";
+  };
+
+  nativeBuildInputs = [ pkgconfig meson ninja wrapGAppsHook vala ];
+  buildInputs = [ gtk3 poppler ];
+
+  meta = with stdenv.lib; {
+    description = "Edit metadata found in PDFs";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ leenaars ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/perceptualdiff/default.nix b/nixpkgs/pkgs/tools/graphics/perceptualdiff/default.nix
new file mode 100644
index 000000000000..dc5acc9433f6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/perceptualdiff/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchFromGitHub, cmake, freeimage }:
+
+stdenv.mkDerivation rec {
+  pname = "perceptualdiff";
+  version = "2.1";
+
+  src = fetchFromGitHub {
+    owner = "myint";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "176n518xv0pczf1yyz9r5a8zw5r6sh5ym596kmvw30qznp8n4a8j";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ freeimage ];
+
+  meta = with stdenv.lib; {
+    description = "A program that compares two images using a perceptually based image metric";
+    homepage = "https://github.com/myint/perceptualdiff";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ uri-canva ];
+    platforms = platforms.x86;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/pfstools/default.nix b/nixpkgs/pkgs/tools/graphics/pfstools/default.nix
new file mode 100644
index 000000000000..6a0385614e87
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pfstools/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, fetchurl, cmake, pkgconfig, darwin
+, openexr, zlib, imagemagick, libGLU, libGL, freeglut, fftwFloat
+, fftw, gsl, libexif, perl, opencv, qt5, netpbm
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pfstools";
+  version = "2.1.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${version}/${pname}-${version}.tgz";
+    sha256 = "04rlb705gmdiphcybf9dyr0d5lla2cfs3c308zz37x0vwi445six";
+  };
+
+  outputs = [ "out" "dev" "man"];
+
+  cmakeFlags = [ "-DWITH_MATLAB=false" ];
+
+  preConfigure = ''
+    rm cmake/FindNETPBM.cmake
+    echo "SET(NETPBM_LIBRARY `find ${netpbm} -name "*.${stdenv.hostPlatform.extensions.sharedLibrary}*" -type f`)" >> cmake/FindNETPBM.cmake
+    echo "SET(NETPBM_LIBRARIES `find ${netpbm} -name "*.${stdenv.hostPlatform.extensions.sharedLibrary}*" -type f`)" >> cmake/FindNETPBM.cmake
+    echo "SET(NETPBM_INCLUDE_DIR ${netpbm}/include/netpbm)" >> cmake/FindNETPBM.cmake
+    echo "INCLUDE(FindPackageHandleStandardArgs)" >> cmake/FindNETPBM.cmake
+    echo "FIND_PACKAGE_HANDLE_STANDARD_ARGS(NETPBM DEFAULT_MSG NETPBM_LIBRARY NETPBM_INCLUDE_DIR)" >> cmake/FindNETPBM.cmake
+  '';
+
+  nativeBuildInputs = [ cmake pkgconfig ];
+  buildInputs = [
+    openexr zlib imagemagick fftwFloat
+    fftw gsl libexif perl opencv qt5.qtbase netpbm
+  ] ++ (if stdenv.isDarwin then (with darwin.apple_sdk.frameworks; [
+    OpenGL GLUT
+  ]) else [
+    libGLU libGL freeglut
+  ]);
+
+  patches = [ ./threads.patch ./pfstools.patch ./pfsalign.patch ];
+
+  meta = with stdenv.lib; {
+    homepage = http://pfstools.sourceforge.net/;
+    description = "Toolkit for manipulation of HDR images";
+    platforms = platforms.linux;
+    license = licenses.lgpl2;
+    maintainers = [ maintainers.juliendehos ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/pfstools/pfsalign.patch b/nixpkgs/pkgs/tools/graphics/pfstools/pfsalign.patch
new file mode 100644
index 000000000000..f079415ddcba
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pfstools/pfsalign.patch
@@ -0,0 +1,12 @@
+--- a/src/camera/CMakeLists.txt 2017-11-13 18:38:27.000000000 +0100
++++ b/src/camera/CMakeLists.txt 2018-12-30 14:55:30.235571520 +0100
+@@ -9,7 +9,7 @@ target_link_libraries(${TRG} pfs)
+ install (TARGETS ${TRG} DESTINATION bin)
+ install (FILES ${TRG}.1 DESTINATION ${MAN_DIR})
+ 
+-if( OpenCV_FOUND AND EXIF_FOUND )
++if( OpenCV_FOUND AND MYPKG_FOUND )
+ 
+        set(TRG pfsalign)
+        add_executable(${TRG} ${TRG}.cpp  "${GETOPT_OBJECT}")
+
diff --git a/nixpkgs/pkgs/tools/graphics/pfstools/pfstools.patch b/nixpkgs/pkgs/tools/graphics/pfstools/pfstools.patch
new file mode 100644
index 000000000000..c678a25b01bd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pfstools/pfstools.patch
@@ -0,0 +1,21 @@
+--- a/CMakeLists.txt	2016-05-26 11:31:16.000000000 +0200
++++ b/CMakeLists.txt	2016-07-22 19:07:22.074669909 +0200
+@@ -320,12 +320,12 @@
+ 
+ # ======== libexif ==========
+ 
+-find_package(EXIF)
+-if( NOT EXIF_FOUND )
+-    message( "EXIF library (libexif) not found. 'pfsalign' will not be compiled" )
+-else( NOT EXIF_FOUND )
+-    message(STATUS "libexif library found.")  
+-endif( NOT EXIF_FOUND )
++find_package( PkgConfig REQUIRED )
++pkg_check_modules( MYPKG REQUIRED libexif IlmBase )
++if( MYPKG_FOUND )
++    message( STATUS "libexif and IlmBase found." )
++endif( MYPKG_FOUND )
++include_directories( ${MYPKG_INCLUDE_DIRS} )
+ 
+ # ======== Config and sub dirs ===========
+ 
diff --git a/nixpkgs/pkgs/tools/graphics/pfstools/threads.patch b/nixpkgs/pkgs/tools/graphics/pfstools/threads.patch
new file mode 100644
index 000000000000..e3f61db60899
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pfstools/threads.patch
@@ -0,0 +1,20 @@
+--- a/src/fileformat/CMakeLists.txt	2016-05-26 11:31:23.000000000 +0200
++++ b/src/fileformat/CMakeLists.txt	2016-07-21 23:19:56.510958771 +0200
+@@ -53,13 +53,15 @@
+ if( OPENEXR_FOUND )
+     include_directories("${OPENEXR_INCLUDE_DIR}")
+ 
++    find_package (Threads)
++
+     add_executable(pfsinexr pfsinexr.cpp "${GETOPT_OBJECT}")
+-    target_link_libraries(pfsinexr pfs ${OPENEXR_LIBRARIES})
++    target_link_libraries(pfsinexr pfs ${OPENEXR_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
+     install (TARGETS pfsinexr DESTINATION bin)
+     install (FILES pfsinexr.1 DESTINATION ${MAN_DIR})
+ 
+     add_executable(pfsoutexr pfsoutexr.cpp "${GETOPT_OBJECT}")
+-    target_link_libraries(pfsoutexr pfs ${OPENEXR_LIBRARIES})
++    target_link_libraries(pfsoutexr pfs ${OPENEXR_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
+     install (TARGETS pfsoutexr DESTINATION bin)
+     install (FILES pfsoutexr.1 DESTINATION ${MAN_DIR})
+  endif( OPENEXR_FOUND )
diff --git a/nixpkgs/pkgs/tools/graphics/pgf/default.nix b/nixpkgs/pkgs/tools/graphics/pgf/default.nix
new file mode 100644
index 000000000000..6ae45cc85331
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pgf/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl, autoconf, automake, libtool, dos2unix, libpgf, freeimage, doxygen }:
+
+with stdenv.lib;
+
+let
+  version = "6.14.12";
+in
+stdenv.mkDerivation {
+  pname = "pgf";
+  inherit version;
+
+  src = fetchurl {
+    url = "mirror://sourceforge/libpgf/pgf-console-src-${version}.tar.gz";
+    sha256 = "1vfm12cfq3an3xg0679bcwdmjq2x1bbij1iwsmm60hwmrm3zvab0";
+  };
+
+  buildInputs = [ autoconf automake libtool dos2unix libpgf freeimage doxygen ];
+
+  patchPhase = ''
+      sed 1i'#include <inttypes.h>' -i src/PGF.cpp
+      sed s/__int64/int64_t/g -i src/PGF.cpp
+      rm include/FreeImage.h include/FreeImagePlus.h
+  '';
+
+  preConfigure = "dos2unix configure.ac; sh autogen.sh";
+
+# configureFlags = optional static "--enable-static --disable-shared";
+
+  meta = {
+    homepage = http://www.libpgf.org/;
+    description = "Progressive Graphics Format command line program";
+    license = stdenv.lib.licenses.lgpl21Plus;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/ploticus/builder.sh b/nixpkgs/pkgs/tools/graphics/ploticus/builder.sh
new file mode 100644
index 000000000000..2fb16b259bdc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/ploticus/builder.sh
@@ -0,0 +1,33 @@
+source $stdenv/setup
+
+preBuild() {
+  cd src
+}
+
+preInstall() {
+  mkdir -p $out/bin
+}
+
+postInstall() {
+  # Install the "prefabs".
+  mkdir -p $out/share/ploticus/prefabs &&		\
+  cd .. &&						\
+  cp -rv prefabs/* $out/share/ploticus/prefabs
+
+  # Create a wrapper that knows where to find them.  Debian's package
+  # does something similar by patching directly the C file that looks
+  # for `$PLOTICUS_PREFABS'.
+  cat > $out/bin/ploticus <<EOF
+#! $SHELL -e
+PLOTICUS_PREFABS="$out/share/ploticus/prefabs"
+export PLOTICUS_PREFABS
+exec "$out/bin/pl" \$@
+EOF
+  chmod +x $out/bin/ploticus
+
+  # Install the man pages.
+  cp -rv man $out
+  ln -s "$out/man/man1/pl.1" "$out/man/man1/ploticus.1"
+}
+
+genericBuild
diff --git a/nixpkgs/pkgs/tools/graphics/ploticus/default.nix b/nixpkgs/pkgs/tools/graphics/ploticus/default.nix
new file mode 100644
index 000000000000..d0e678578723
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/ploticus/default.nix
@@ -0,0 +1,37 @@
+{stdenv, fetchurl, zlib, libX11, libpng}:
+
+stdenv.mkDerivation {
+  name = "ploticus-2.42";
+
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = mirror://sourceforge/ploticus/ploticus/2.41/pl241src.tar.gz;
+    sha256 = "1065r0nizjixi9sxxfxrnwg10r458i6fgsd23nrxa200rypvdk7c";
+  };
+
+  buildInputs = [ zlib libX11 libpng ];
+
+  hardeningDisable = [ "format" ];
+
+  patches = [ ./ploticus-install.patch ];
+
+  # Make the symlink relative instead of absolute.
+  # Otherwise it breaks when auto-moved to $out/share.
+  preFixup = ''
+    ln -sf pl.1 "$out"/man/man1/ploticus.1
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A non-interactive software package for producing plots and charts";
+    longDescription = ''Ploticus is a free, GPL'd, non-interactive
+      software package for producing plots, charts, and graphics from
+      data.  Ploticus is good for automated or just-in-time graph
+      generation, handles date and time data nicely, and has basic
+      statistical capabilities.  It allows significant user control
+      over colors, styles, options and details.'';
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ pSub ];
+    homepage = http://ploticus.sourceforge.net/;
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/ploticus/ploticus-install.patch b/nixpkgs/pkgs/tools/graphics/ploticus/ploticus-install.patch
new file mode 100644
index 000000000000..04edbc709d0a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/ploticus/ploticus-install.patch
@@ -0,0 +1,12 @@
+--- pl240src/src/Makefile	2008-01-15 21:05:14.000000000 +0100
++++ pl240src/src/Makefile	2008-03-26 23:51:53.000000000 +0100
+@@ -131,7 +131,7 @@ ZFLAG = -DWZ
+ 
+ 
+ #### If you do a "make install", where do you want the executable(s) to be moved to?
+-INSTALLBIN = /usr/local/bin
++INSTALLBIN = $(out)/bin
+ 
+ 
+ #### For LOCALE support (non-roman alphabets & collation), uncomment the following..
+
diff --git a/nixpkgs/pkgs/tools/graphics/plotutils/debian-patches.nix b/nixpkgs/pkgs/tools/graphics/plotutils/debian-patches.nix
new file mode 100644
index 000000000000..d7c60a11eb67
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/plotutils/debian-patches.nix
@@ -0,0 +1,42 @@
+# Generated by debian-patches.sh from debian-patches.txt
+let
+  prefix = "https://sources.debian.org/data/main/p/plotutils/2.6-9/debian/patches";
+in
+[
+  {
+    url = "${prefix}/01_AC_PROG_CXX.diff";
+    sha256 = "0r7xgwbk2yqs7b29gwhr8pnbqvy3a3x698j17s4yg501ragw1gqv";
+  }
+  {
+    url = "${prefix}/10_repair_postscript";
+    sha256 = "01v4a8mdhgsjxbf9a2xppx2lb05lp818v8afp5x2njv64wpgla8p";
+  }
+  {
+    url = "${prefix}/11_manpages_sb_macro";
+    sha256 = "01vvhznw5z7lb7afwgw53cwg8w676s4v30kychlrl8kn5yks94qs";
+  }
+  {
+    url = "${prefix}/14_manpage_spline";
+    sha256 = "1xp3cx9y9njp5wp40dkp7rwd2flkiik2gb08nh4516vkm73avfrd";
+  }
+  {
+    url = "${prefix}/20_svg_attribute_syntax";
+    sha256 = "0vy089w00x2zh87igv3dcqq7kggqxpc4javb694pa5xl5bvddnqk";
+  }
+  {
+    url = "${prefix}/21_plot2svg_test.diff";
+    sha256 = "0lv8hj9fiqj6z72pnaw3imk3164n1kcy5ym0j9jl2pn3a19p1jmb";
+  }
+  {
+    url = "${prefix}/25_libpng15";
+    sha256 = "0l640rcsgc2mwpk7iqm0cf3b0gfcdgcn9wg4x88gaqxzx9rriph0";
+  }
+  {
+    url = "${prefix}/30_hershey_glyphs";
+    sha256 = "0n7rn6ln9ikzq2dialif58ag5pch7q7zqd5zcsxxdyyasx4s5gm2";
+  }
+  {
+    url = "${prefix}/35_spline.test.error.diff";
+    sha256 = "1kqj1n8myk8xmglj6qcybj34zm4kpn6aw320jbpqhblkgp7m0fb1";
+  }
+]
diff --git a/nixpkgs/pkgs/tools/graphics/plotutils/debian-patches.txt b/nixpkgs/pkgs/tools/graphics/plotutils/debian-patches.txt
new file mode 100644
index 000000000000..c28d96fdd5bc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/plotutils/debian-patches.txt
@@ -0,0 +1,10 @@
+plotutils/2.6-9
+01_AC_PROG_CXX.diff
+10_repair_postscript
+11_manpages_sb_macro
+14_manpage_spline
+20_svg_attribute_syntax
+21_plot2svg_test.diff
+25_libpng15
+30_hershey_glyphs
+35_spline.test.error.diff
diff --git a/nixpkgs/pkgs/tools/graphics/plotutils/default.nix b/nixpkgs/pkgs/tools/graphics/plotutils/default.nix
new file mode 100644
index 000000000000..61e21b1a33da
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/plotutils/default.nix
@@ -0,0 +1,58 @@
+{ fetchurl, stdenv, libpng, autoreconfHook }:
+
+# debian splits this package into plotutils and libplot2c2
+
+# gentoo passes X, this package contains fonts
+# I'm only interested in making pstoedit convert to svg
+
+stdenv.mkDerivation rec {
+  name = "plotutils-2.6";
+
+  src = fetchurl {
+    url = "mirror://gnu/plotutils/${name}.tar.gz";
+    sha256 = "1arkyizn5wbgvbh53aziv3s6lmd3wm9lqzkhxb3hijlp1y124hjg";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ libpng ];
+  patches = map fetchurl (import ./debian-patches.nix);
+
+  preBuild = ''
+    # Fix parallel building.
+    make -C libplot xmi.h
+  '';
+
+  configureFlags = [ "--enable-libplotter" ]; # required for pstoedit
+
+  hardeningDisable = [ "format" ];
+
+  doCheck = true;
+
+  enableParallelBuilding = true;
+
+  meta = {
+    description = "Powerful C/C++ library for exporting 2D vector graphics";
+
+    longDescription =
+      '' The GNU plotutils package contains software for both programmers and
+         technical users.  Its centerpiece is libplot, a powerful C/C++
+         function library for exporting 2-D vector graphics in many file
+         formats, both vector and raster.  It can also do vector graphics
+         animations.
+
+         libplot is device-independent in the sense that its API (application
+         programming interface) does not depend on the type of graphics file
+         to be exported.
+
+         Besides libplot, the package contains command-line programs for
+         plotting scientific data.  Many of them use libplot to export
+         graphics.
+      '';
+
+    homepage = https://www.gnu.org/software/plotutils/;
+
+    license = stdenv.lib.licenses.gpl2Plus;
+    maintainers = [ stdenv.lib.maintainers.marcweber ];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/pngcheck/default.nix b/nixpkgs/pkgs/tools/graphics/pngcheck/default.nix
new file mode 100644
index 000000000000..f7bd8d520c87
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pngcheck/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, zlib }:
+
+stdenv.mkDerivation rec {
+  name = "pngcheck-2.3.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/png-mng/${name}.tar.gz";
+    sha256 = "0pzkj1bb4kdybk6vbfq9s0wzdm5szmrgixkas3xmbpv4mhws1w3p";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  makefile = "Makefile.unx";
+  makeFlags = [ "ZPATH=${zlib.static}/lib" ];
+
+  buildInputs = [ zlib ];
+
+  installPhase = ''
+    mkdir -p $out/bin/
+    cp pngcheck $out/bin/pngcheck
+  '';
+
+  meta = {
+    homepage = http://pmt.sourceforge.net/pngcrush;
+    description = "Verifies the integrity of PNG, JNG and MNG files";
+    license = stdenv.lib.licenses.free;
+    platforms = with stdenv.lib.platforms; linux;
+    maintainers = with stdenv.lib.maintainers; [ the-kenny ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/pngcrush/default.nix b/nixpkgs/pkgs/tools/graphics/pngcrush/default.nix
new file mode 100644
index 000000000000..fce1f3f913cf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pngcrush/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, libpng }:
+
+stdenv.mkDerivation rec {
+  name = "pngcrush-1.8.13";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/pmt/${name}-nolib.tar.xz";
+    sha256 = "0l43c59d6v9l0g07z3q3ywhb8xb3vz74llv3mna0izk9bj6aqkiv";
+  };
+
+  makeFlags = [ "CC=cc" "LD=cc" ];      # gcc and/or clang compat
+
+  configurePhase = ''
+    sed -i s,/usr,$out, Makefile
+  '';
+
+  buildInputs = [ libpng ];
+
+  meta = {
+    homepage = http://pmt.sourceforge.net/pngcrush;
+    description = "A PNG optimizer";
+    license = stdenv.lib.licenses.free;
+    platforms = with stdenv.lib.platforms; linux ++ darwin;
+    maintainers = with stdenv.lib.maintainers; [ the-kenny ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/pngnq/default.nix b/nixpkgs/pkgs/tools/graphics/pngnq/default.nix
new file mode 100644
index 000000000000..e01f3ea2acc5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pngnq/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl, pkgconfig, libpng, zlib }:
+
+stdenv.mkDerivation rec {
+  name = "pngnq-1.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/pngnq/${name}.tar.gz";
+    sha256 = "1qmnnl846agg55i7h4vmrn11lgb8kg6gvs8byqz34bdkjh5gwiy1";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libpng zlib ];
+
+  patchPhase = ''
+    sed -i '/png.h/a \#include <zlib.h>' src/rwpng.c
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://pngnq.sourceforge.net/;
+    description = "A PNG quantizer";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ pSub ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/pngout/default.nix b/nixpkgs/pkgs/tools/graphics/pngout/default.nix
new file mode 100644
index 000000000000..9d0e1b0ea879
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pngout/default.nix
@@ -0,0 +1,33 @@
+{stdenv, fetchurl}:
+
+let
+  folder = if stdenv.hostPlatform.system == "i686-linux" then "i686"
+  else if stdenv.hostPlatform.system == "x86_64-linux" then "x86_64"
+  else throw "Unsupported system: ${stdenv.hostPlatform.system}";
+in
+stdenv.mkDerivation {
+  name = "pngout-20150319";
+
+  src = fetchurl {
+    url = http://static.jonof.id.au/dl/kenutils/pngout-20150319-linux.tar.gz;
+    sha256 = "0iwv941hgs2g7ljpx48fxs24a70m2whrwarkrb77jkfcd309x2h7";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ${folder}/pngout $out/bin
+    
+    ${if stdenv.hostPlatform.system == "i686-linux" then ''
+        patchelf --set-interpreter ${stdenv.glibc.out}/lib/ld-linux.so.2 $out/bin/pngout
+      '' else if stdenv.hostPlatform.system == "x86_64-linux" then ''
+        patchelf --set-interpreter ${stdenv.glibc.out}/lib/ld-linux-x86-64.so.2 $out/bin/pngout
+      '' else ""}
+  '';
+
+  meta = {
+    description = "A tool that aggressively optimizes the sizes of PNG images";
+    license = stdenv.lib.licenses.unfree;
+    homepage = http://advsys.net/ken/utils.htm;
+    maintainers = [ stdenv.lib.maintainers.sander ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/pngquant/default.nix b/nixpkgs/pkgs/tools/graphics/pngquant/default.nix
new file mode 100644
index 000000000000..51be6afd102e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pngquant/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub, pkgconfig, libpng, zlib, lcms2 }:
+
+stdenv.mkDerivation rec {
+  pname = "pngquant";
+  version = "2.12.5";
+
+  src = fetchFromGitHub {
+    owner = "pornel";
+    repo = "pngquant";
+    rev = version;
+    sha256 = "0sq398iv5cacblz6pb4j2hn16cnszsbkahikdpfq84rb9bj0ya40";
+    fetchSubmodules = true;
+  };
+
+  preConfigure = "patchShebangs .";
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libpng zlib lcms2 ];
+
+  meta = with stdenv.lib; {
+    homepage = https://pngquant.org/;
+    description = "A tool to convert 24/32-bit RGBA PNGs to 8-bit palette with alpha channel preserved";
+    platforms = platforms.unix;
+    license = licenses.gpl3;
+    maintainers = [ maintainers.volth ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/pngtoico/default.nix b/nixpkgs/pkgs/tools/graphics/pngtoico/default.nix
new file mode 100644
index 000000000000..ed8fa5ee5192
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pngtoico/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchurl, libpng }:
+
+stdenv.mkDerivation {
+  name = "pngtoico-1.0";
+
+  src = fetchurl {
+    url = mirror://kernel/software/graphics/pngtoico/pngtoico-1.0.tar.gz;
+    sha256 = "1xb4aa57sjvgqfp01br3dm72hf7q0gb2ad144s1ifrs09215fgph";
+  };
+
+  configurePhase = ''
+    sed -i s,/usr/local,$out, Makefile
+  '';
+
+  buildInputs = [ libpng ];
+
+  meta = {
+    homepage = https://www.kernel.org/pub/software/graphics/pngtoico/;
+    description = "Small utility to convert a set of PNG images to Microsoft ICO format";
+    license = stdenv.lib.licenses.gpl2Plus;
+    platforms = with stdenv.lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/povray/default.nix b/nixpkgs/pkgs/tools/graphics/povray/default.nix
new file mode 100644
index 000000000000..ead44897968f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/povray/default.nix
@@ -0,0 +1,49 @@
+{ stdenv, fetchFromGitHub, autoconf, automake, boost
+, zlib, libpng, libjpeg, libtiff, xlibsWrapper, SDL
+}:
+
+stdenv.mkDerivation rec {
+  pname = "povray";
+  version = "3.8.0-x.10064738";
+
+  src = fetchFromGitHub {
+    owner = "POV-Ray";
+    repo = "povray";
+    rev = "v${version}";
+    sha256 = "0hy5a3q5092szk2x3s9lpn1zkszgq9bp15rxzdncxlvnanyzsasf";
+  };
+
+
+  buildInputs = [ autoconf automake boost zlib libpng libjpeg libtiff xlibsWrapper SDL ];
+
+  # the installPhase wants to put files into $HOME. I let it put the files
+  # to $TMPDIR, so they don't get into the $out
+  postPatch = '' cd unix
+                 ./prebuild.sh
+                 cd ..
+                 sed -i -e 's/^povconfuser.*/povconfuser=$(TMPDIR)\/povray/' Makefile.{am,in}
+                 sed -i -e 's/^povuser.*/povuser=$(TMPDIR)\/.povray/' Makefile.{am,in}
+                 sed -i -e 's/^povowner.*/povowner=nobody/' Makefile.{am,in}
+                 sed -i -e 's/^povgroup.*/povgroup=nogroup/' Makefile.{am,in}
+               '';
+
+  configureFlags = [ "COMPILED_BY='nix'" "--with-boost-thread=boost_thread" "--with-x" ];
+
+  enableParallelBuilding = true;
+
+  preInstall = ''
+    mkdir "$TMP/bin"
+    for i in chown chgrp; do
+      echo '#!${stdenv.shell}' >> "$TMP/bin/$i"
+      chmod +x "$TMP/bin/$i"
+      PATH="$TMP/bin:$PATH"
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://www.povray.org/;
+    description = "Persistence of Vision Raytracer";
+    license = licenses.free;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/pstoedit/default.nix b/nixpkgs/pkgs/tools/graphics/pstoedit/default.nix
new file mode 100644
index 000000000000..ebd265b8a80c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pstoedit/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, pkgconfig, darwin, lib
+, zlib, ghostscript, imagemagick, plotutils, gd
+, libjpeg, libwebp, libiconv
+}:
+
+stdenv.mkDerivation rec {
+  name = "pstoedit-3.75";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/pstoedit/${name}.tar.gz";
+    sha256 = "1kv46g2wsvsvcngkavxl5gnw3l6g5xqnh4kmyx4b39a01d8xiddp";
+  };
+
+  #
+  # Turn on "-rdb" option (REALLYDELAYBIND) by default to ensure compatibility with gs-9.22
+  #
+  patches = [ ./pstoedit-gs-9.22-compat.patch  ];
+
+  outputs = [ "out" "dev" ];
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ zlib ghostscript imagemagick plotutils gd libjpeg libwebp ]
+  ++ lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [
+    libiconv ApplicationServices
+  ]);
+
+  # '@LIBPNG_LDFLAGS@' is no longer substituted by autoconf (the code is commented out)
+  # so we need to remove it from the pkg-config file as well
+  preConfigure = ''
+    substituteInPlace config/pstoedit.pc.in --replace '@LIBPNG_LDFLAGS@' ""
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Translates PostScript and PDF graphics into other vector formats";
+    homepage = https://sourceforge.net/projects/pstoedit/;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.marcweber ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/pstoedit/pstoedit-gs-9.22-compat.patch b/nixpkgs/pkgs/tools/graphics/pstoedit/pstoedit-gs-9.22-compat.patch
new file mode 100644
index 000000000000..64fe805d5015
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/pstoedit/pstoedit-gs-9.22-compat.patch
@@ -0,0 +1,13 @@
+diff --git a/src/pstoeditoptions.h b/src/pstoeditoptions.h
+index 7846883..0fb6a6f 100755
+--- a/src/pstoeditoptions.h
++++ b/src/pstoeditoptions.h
+@@ -453,7 +453,7 @@ private:
+ 		"Later versions of Ghostscript will probably support -dDELAYBIND again. "
+ 		"But also in that case the security risk remains. So be careful with what "
+ 		"files you process with pstoedit and Ghostscript.",
+-		false),	//
++		true),	//
+ #endif
+ 	pagetoextract		(true, "-page","page number",g_t,"extract a specific page: 0 means all pages",
+ 		"Select a single page from a multi-page PostScript or PDF file.",
diff --git a/nixpkgs/pkgs/tools/graphics/qrcode/default.nix b/nixpkgs/pkgs/tools/graphics/qrcode/default.nix
new file mode 100644
index 000000000000..909f0e397268
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/qrcode/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+  pname = "qrcode-git";
+  version = "20160804";
+
+  src = fetchFromGitHub {
+    owner  = "qsantos";
+    repo   = "qrcode";
+    rev    = "ad0fdb4aafd0d56b903f110f697abaeb27deee73";
+    sha256 = "0v81745nx5gny2g05946k8j553j18a29ikmlyh6c3syq6c15k8cf";
+  };
+
+  NIX_CFLAGS_COMPILE = "-Wno-error=unused-result";
+
+  installPhase = ''
+    mkdir -p "$out"/{bin,share/doc/qrcode}
+    cp qrcode "$out/bin"
+    cp DOCUMENTATION LICENCE "$out/share/doc/qrcode"
+  '';
+
+  meta = with stdenv.lib; {
+    description = ''A small QR-code tool'';
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ raskin ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/quirc/default.nix b/nixpkgs/pkgs/tools/graphics/quirc/default.nix
new file mode 100644
index 000000000000..4b610ebbfef2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/quirc/default.nix
@@ -0,0 +1,39 @@
+{stdenv, fetchgit, SDL_gfx, SDL, libjpeg, libpng, pkgconfig}:
+let
+  s =
+  rec {
+    date = "2016-08-16";
+    version = "git-${date}";
+    baseName = "quirc";
+    name = "${baseName}-${version}";
+    url = "https://github.com/dlbeer/quirc";
+    rev = "5b262480091d5f84a67a4a56c728fc8b39844339";
+    sha256 = "1w5qvjafn14s6jjs7kiwsqirlsqbgv0p152hrsq463pm34hp0lzy";
+  };
+in
+stdenv.mkDerivation {
+  inherit (s) name version;
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [
+    SDL SDL_gfx libjpeg libpng
+  ];
+  src = fetchgit {
+    inherit (s) url sha256 rev;
+  };
+  NIX_CFLAGS_COMPILE="-I${SDL.dev}/include/SDL -I${SDL_gfx}/include/SDL";
+  configurePhase = ''
+    sed -e 's/-[og] root//g' -i Makefile
+  '';
+  preInstall = ''
+    mkdir -p "$out"/{bin,lib,include}
+    find . -maxdepth 1 -type f -perm -0100 -exec cp '{}' "$out"/bin ';'
+  '';
+  makeFlags = [ "PREFIX=$(out)" ];
+  meta = {
+    inherit (s) version;
+    description = ''A small QR code decoding library'';
+    license = stdenv.lib.licenses.isc;
+    maintainers = [stdenv.lib.maintainers.raskin];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/rocket/default.nix b/nixpkgs/pkgs/tools/graphics/rocket/default.nix
new file mode 100644
index 000000000000..97c400fbc9e3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/rocket/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub, qmake, qtbase }:
+
+stdenv.mkDerivation {
+  pname = "rocket";
+  version = "2018-06-09";
+
+  src = fetchFromGitHub {
+    owner = "rocket";
+    repo = "rocket";
+    rev = "7bc1e9826cad5dbc63e56371c6aa1798b2a7b50b";
+    sha256 = "13bdg2dc6ypk17sz39spqdlb3wai2y085bdb36pls2as2nf22drp";
+  };
+
+  nativeBuildInputs = [ qmake ];
+  buildInputs = [ qtbase ];
+
+  dontConfigure = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -r editor/editor $out/bin/
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A tool for synchronizing music and visuals in demoscene productions";
+    homepage = "https://github.com/rocket/rocket";
+    license = licenses.zlib;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.dezgeg ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/s2png/default.nix b/nixpkgs/pkgs/tools/graphics/s2png/default.nix
new file mode 100644
index 000000000000..e7d3b8151a44
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/s2png/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchFromGitHub, diffutils, gd, pkgconfig }:
+
+stdenv.mkDerivation rec {
+  pname = "s2png";
+  version = "0.7.2";
+
+  src = fetchFromGitHub {
+    owner = "dbohdan";
+    repo = "s2png";
+    rev = "v${version}";
+    sha256 = "0y3crfm0jqprgxamlly713cka2x1bp6z63p1lw9wh4wc37kpira6";
+  };
+
+  buildInputs = [ diffutils gd pkgconfig ];
+  installFlags = [ "prefix=" "DESTDIR=$(out)" ];
+
+  meta = {
+    homepage = https://github.com/dbohdan/s2png/;
+    description = "Store any data in PNG images";
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = [ stdenv.lib.maintainers.dbohdan ];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/scanbd/default.nix b/nixpkgs/pkgs/tools/graphics/scanbd/default.nix
new file mode 100644
index 000000000000..fd26869d298b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/scanbd/default.nix
@@ -0,0 +1,56 @@
+{ stdenv, fetchurl, pkgconfig
+, dbus, libconfuse, libjpeg, sane-backends, systemd }:
+
+stdenv.mkDerivation rec {
+  pname = "scanbd";
+  version = "1.5.1";
+
+  src = fetchurl {
+    sha256 = "0pvy4qirfjdfm8aj6x5rkbgl7hk3jfa2s21qkk8ic5dqfjjab75n";
+    url = "mirror://sourceforge/scanbd/${pname}-${version}.tgz";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ dbus libconfuse libjpeg sane-backends systemd ];
+
+  configureFlags = [
+    "--disable-Werror"
+    "--enable-udev"
+    "--with-scanbdconfdir=/etc/scanbd"
+    "--with-systemdsystemunitdir=$out/lib/systemd/system"
+  ];
+
+  enableParallelBuilding = true;
+
+  installFlags = [
+    "scanbdconfdir=$(out)/etc/scanbd"
+    "scannerconfdir=$(scanbdconfdir)/scanner.d"
+  ];
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    description = "Scanner button daemon";
+    longDescription = ''
+      scanbd polls a scanner's buttons, looking for button presses, function
+      knob changes, or other scanner events such as paper inserts and removals,
+      while at the same time allowing scan-applications to access the scanner.
+      
+      Various actions can be submitted (scan, copy, email, ...) via action
+      scripts. The function knob values are passed to the action scripts as
+      well. Scan actions are also signaled via dbus. This can be useful for
+      foreign applications. Scans can also be triggered via dbus from foreign
+      applications.
+      
+      On platforms which support signaling of dynamic device insertion/removal
+      (libudev, dbus, hal), scanbd supports this as well.
+
+      scanbd can use all sane-backends or some special backends from the (old)
+      scanbuttond project. 
+    '';
+    homepage = http://scanbd.sourceforge.net/;
+    downloadPage = https://sourceforge.net/projects/scanbd/;
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/scrot/default.nix b/nixpkgs/pkgs/tools/graphics/scrot/default.nix
new file mode 100644
index 000000000000..413bc8c52f1e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/scrot/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub, giblib, xlibsWrapper, autoreconfHook
+, autoconf-archive, libXfixes, libXcursor }:
+
+stdenv.mkDerivation rec {
+  pname = "scrot";
+  version = "1.2";
+
+  src = fetchFromGitHub {
+    owner = "resurrecting-open-source-projects";
+    repo = pname;
+    rev = version;
+    sha256 = "08gkdby0ysx2mki57z81zlm7vfnq9c1gq692xw67cg5vv2p3320w";
+  };
+
+  nativeBuildInputs = [ autoreconfHook autoconf-archive ];
+  buildInputs = [ giblib xlibsWrapper libXfixes libXcursor ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/resurrecting-open-source-projects/scrot;
+    description = "A command-line screen capture utility";
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ globin ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/shotgun/default.nix b/nixpkgs/pkgs/tools/graphics/shotgun/default.nix
new file mode 100644
index 000000000000..1ab47dfce2de
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/shotgun/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, pkg-config, libXrandr, libX11 }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "shotgun";
+  version = "2.2.0";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ libXrandr libX11 ];
+
+  src = fetchFromGitHub {
+    owner = "neXromancers";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "tJnF1X+NI1hP0J/n3rGy8TD/yIveqRPVlJvJvn0C7Do=";
+  };
+
+  cargoSha256 = "TL2WehcCwygLMVVrBHOX1HgVtDhgVsIgUeiadEjCj1o=";
+
+  meta = with lib; {
+    description = "Minimal X screenshot utility";
+    homepage = "https://github.com/neXromancers/shotgun";
+    license = with licenses; [ mpl20 ];
+    maintainers = with maintainers; [ lumi ];
+    platforms = platforms.linux;
+    badPlatforms = [ "aarch64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/sng/default.nix b/nixpkgs/pkgs/tools/graphics/sng/default.nix
new file mode 100644
index 000000000000..c7d2f49406b7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/sng/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl, libpng, netpbm }:
+
+stdenv.mkDerivation rec {
+  pname = "sng";
+  version = "1.1.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/sng/sng-${version}.tar.gz";
+    sha256 = "06a6ydvx9xb3vxvrzdrg3hq0rjwwj9ibr7fyyxjxq6qx1j3mb70i";
+  };
+
+  buildInputs = [ libpng ];
+
+  configureFlags = [
+    "--with-rgbtxt=${netpbm}/share/netpbm/misc/rgb.txt"
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Minilanguage designed to represent the entire contents of a PNG file in an editable form";
+    homepage = http://sng.sourceforge.net/;
+    license = licenses.zlib;
+    maintainers = [ maintainers.dezgeg ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/structure-synth/default.nix b/nixpkgs/pkgs/tools/graphics/structure-synth/default.nix
new file mode 100644
index 000000000000..2c586cd3b1f6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/structure-synth/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, fetchurl, qt4, qmake4Hook, unzip, libGLU, makeWrapper }:
+
+stdenv.mkDerivation {
+
+  pname = "structure-synth";
+  version = "v1.5";
+
+  src = fetchurl {
+    url = mirror://sourceforge/structuresynth/StructureSynth-Source-v1.5.0.zip;
+    sha256 = "1kiammx46719az6jzrav8yrwz82nk4m72ybj0kpbnvp9wfl3swbb";
+  };
+
+  buildInputs = [ qt4 unzip libGLU makeWrapper ];
+  nativeBuildInputs = [ qmake4Hook ];
+
+  # Thanks to https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=672000#15:
+  patches = [ ./gcc47.patch ];
+
+  enableParallelBuilding = true;
+
+  preConfigure = ''
+    ${qt4}/bin/qmake -project -after "CONFIG+=opengl" -after "QT+=xml opengl script" -after "unix:LIBS+=-lGLU"
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin;
+    mkdir -p $out/share/Examples $out/share/Misc;
+    cp "Structure Synth Source Code" $out/bin/structure-synth;
+    cp -r Examples/* $out/share/Examples;
+    cp -r Misc/* $out/share/Misc;
+  '';
+
+  # Structure Synth expects to see 'Examples' and 'Misc' directory in
+  # either $HOME or $PWD - so help it along by moving $PWD to 'share',
+  # where we just copied those two directories:
+  preFixup = ''
+    wrapProgram "$out/bin/structure-synth" --run "cd $out/share"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Application for generating 3D structures by specifying a design grammar";
+    homepage = http://structuresynth.sourceforge.net;
+    maintainers = with maintainers; [ hodapp ];
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/structure-synth/gcc47.patch b/nixpkgs/pkgs/tools/graphics/structure-synth/gcc47.patch
new file mode 100644
index 000000000000..8726e89c8308
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/structure-synth/gcc47.patch
@@ -0,0 +1,50 @@
+diff -rc "Structure Synth Source Code/SyntopiaCore/GLEngine/Raytracer/RayTracer.cpp" "Structure Synth Source Code2/SyntopiaCore/GLEngine/Raytracer/RayTracer.cpp"
+*** "Structure Synth Source Code/SyntopiaCore/GLEngine/Raytracer/RayTracer.cpp"	2010-11-13 22:32:44.000000000 -0500
+--- "Structure Synth Source Code2/SyntopiaCore/GLEngine/Raytracer/RayTracer.cpp"	2018-06-24 14:23:30.794296776 -0400
+***************
+*** 1,5 ****
+  #include <QThread>

+! 

+  

+  #include "RayTracer.h"

+  

+--- 1,5 ----
+  #include <QThread>

+! #include <GL/glu.h>

+  

+  #include "RayTracer.h"

+  

+diff -rc "Structure Synth Source Code/SyntopiaCore/GLEngine/Raytracer/VoxelStepper.cpp" "Structure Synth Source Code2/SyntopiaCore/GLEngine/Raytracer/VoxelStepper.cpp"
+*** "Structure Synth Source Code/SyntopiaCore/GLEngine/Raytracer/VoxelStepper.cpp"	2010-09-08 21:25:30.000000000 -0400
+--- "Structure Synth Source Code2/SyntopiaCore/GLEngine/Raytracer/VoxelStepper.cpp"	2018-06-24 14:23:12.542868194 -0400
+***************
+*** 122,128 ****
+  						currentT = p;

+  

+  						// We do not intersect grid.

+! 						if (!found) return false;

+  				}

+  

+  				stepX = (dir.x() > 0) ? 1 : -1;

+--- 122,128 ----
+  						currentT = p;

+  

+  						// We do not intersect grid.

+! 						if (!found) return NULL;

+  				}

+  

+  				stepX = (dir.x() > 0) ? 1 : -1;

+Only in Structure Synth Source Code2/SyntopiaCore/GLEngine/Raytracer: VoxelStepper.cpp.orig
+diff -rc "Structure Synth Source Code/SyntopiaCore/GLEngine/Sphere.h" "Structure Synth Source Code2/SyntopiaCore/GLEngine/Sphere.h"
+*** "Structure Synth Source Code/SyntopiaCore/GLEngine/Sphere.h"	2010-08-11 15:12:22.000000000 -0400
+--- "Structure Synth Source Code2/SyntopiaCore/GLEngine/Sphere.h"	2018-06-24 14:23:30.793296807 -0400
+***************
+*** 2,7 ****
+--- 2,8 ----
+  

+  #include "SyntopiaCore/Math/Vector3.h"

+  #include "Object3D.h"

++ #include <GL/glu.h>

+  

+  namespace SyntopiaCore {

+  	namespace GLEngine {	

diff --git a/nixpkgs/pkgs/tools/graphics/svgbob/default.nix b/nixpkgs/pkgs/tools/graphics/svgbob/default.nix
new file mode 100644
index 000000000000..24736b8f0fff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/svgbob/default.nix
@@ -0,0 +1,28 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "svgbob";
+  version = "0.4.2";
+
+  src = fetchFromGitHub {
+    owner = "ivanceras";
+    repo = pname;
+    rev = "0febc4377134a2ea3b3cd43ebdf5ea688a0e7432";
+    sha256 = "1n0w5b3fjgbczy1iw52172x1p3y1bvw1qpz77fkaxkhrkgfd7vwr";
+  };
+
+  sourceRoot = "source/svgbob_cli";
+
+  cargoSha256 = "0mnq1s809f394x83gjv9zljr07c94k48zkrwxs6ibi19shgmrnnd";
+
+  # Test tries to build outdated examples
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Convert your ascii diagram scribbles into happy little SVG";
+    homepage = "https://github.com/ivanceras/svgbob";
+    license = licenses.asl20;
+    maintainers = [ maintainers.marsam ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/svgcleaner/default.nix b/nixpkgs/pkgs/tools/graphics/svgcleaner/default.nix
new file mode 100644
index 000000000000..50aeae78fce8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/svgcleaner/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "svgcleaner";
+  version = "0.9.2";
+
+  src = fetchFromGitHub {
+    owner = "RazrFalcon";
+    repo = "svgcleaner";
+    rev = "v${version}";
+    sha256 = "1jpnqsln37kkxz98vj7gly3c2170v6zamd876nc9nfl9vns41s0f";
+  };
+
+  cargoSha256 = "0kzrklw5nrzgvrfzq1mlnri06s19p4f3w38v39247baz2xd6j1n2";
+
+  meta = with stdenv.lib; {
+    description = "A tool for tidying and optimizing SVGs";
+    homepage = "https://github.com/RazrFalcon/svgcleaner";
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    maintainers = [ maintainers.mehandes ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/swfdec/default.nix b/nixpkgs/pkgs/tools/graphics/swfdec/default.nix
new file mode 100644
index 000000000000..8a64e25d879a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/swfdec/default.nix
@@ -0,0 +1,37 @@
+{stdenv, fetchurl
+, cairo, pango, glib, liboil, zlib, gstreamer, gst-plugins-base
+, gst-plugins-good , gtk2, libsoup, alsaLib, pkgconfig
+}:
+
+stdenv.mkDerivation rec {
+  pname = "swfdec";
+  version = "0.8.4";
+
+  src = fetchurl {
+    url = "http://swfdec.freedesktop.org/download/swfdec/0.8/swfdec-${version}.tar.gz";
+    sha256 = "00nqrd0fzf0g76rn80d7h56n6hxv7x1x6k89zj45bj564lzwc3vs";
+  };
+
+  buildInputs = [
+    cairo glib liboil pango zlib gstreamer gst-plugins-base gst-plugins-good
+    gtk2 libsoup alsaLib pkgconfig
+  ];
+  
+  postInstall = ''
+    mkdir "$out/bin"
+    cp tools/.libs/swfdec-extract "$out/bin"
+    cp tools/.libs/dump "$out/bin/swfdec-dump"
+    cp player/.libs/swfplay "$out/bin/swfplay"
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = {
+    inherit version;
+    description = "Decoder/renderer for Macromedia Flash animations";
+    license = stdenv.lib.licenses.lgpl21 ;
+    maintainers = [stdenv.lib.maintainers.raskin];
+    platforms = stdenv.lib.platforms.linux;
+    homepage = https://swfdec.freedesktop.org/wiki/;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/syntex/default.nix b/nixpkgs/pkgs/tools/graphics/syntex/default.nix
new file mode 100644
index 000000000000..693f116a6e80
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/syntex/default.nix
@@ -0,0 +1,34 @@
+{stdenv, fetchFromGitHub, mono}:
+stdenv.mkDerivation rec {
+  pname = "syntex";
+  version = "0.0pre20160915";
+  src = fetchFromGitHub {
+    owner = "mxgmn";
+    repo = "SynTex";
+    rev = "f499a7c8112be4a63eb44843ba72957c2c9a04db";
+    sha256 = "13fz6frlxsdz8qq94fsvim27cd5klmdsax5109yxm9175vgvpa0a";
+  };
+  buildPhase = ''
+    mcs *.cs -out:syntex.exe -r:System.Drawing
+    grep -m1 -B999 '^[*][/]' SynTex.cs > COPYING.MIT
+  '';
+  installPhase = ''
+    mkdir -p "$out"/{bin,share/doc/syntex,share/syntex}
+    cp README.md COPYING.MIT "$out"/share/doc/syntex
+    cp syntex.exe "$out"/bin
+    cp -r [Ss]amples samples.xml "$out/share/syntex"
+
+    echo "#! ${stdenv.shell}" >> "$out/bin/syntex"
+    echo "chmod u+w ." >> "$out/bin/syntex"
+    echo "'${mono}/bin/mono' '$out/bin/syntex.exe' \"\$@\"" >>  "$out/bin/syntex"
+    chmod a+x "$out/bin/syntex"
+  '';
+  buildInputs = [mono];
+  meta = {
+    inherit version;
+    description = ''Texture synthesis from examples'';
+    license = stdenv.lib.licenses.mit;
+    maintainers = [stdenv.lib.maintainers.raskin];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/transfig/default.nix b/nixpkgs/pkgs/tools/graphics/transfig/default.nix
new file mode 100644
index 000000000000..db204113226e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/transfig/default.nix
@@ -0,0 +1,61 @@
+{ stdenv, fetchurl, zlib, libjpeg, libpng, imake, gccmakedep }:
+
+stdenv.mkDerivation {
+  name = "transfig-3.2.4";
+  src = fetchurl {
+    url = ftp://ftp.tex.ac.uk/pub/archive/graphics/transfig/transfig.3.2.4.tar.gz;
+    sha256 = "0429snhp5acbz61pvblwlrwv8nxr6gf12p37f9xxwrkqv4ir7dd4";
+  };
+
+  nativeBuildInputs = [ imake gccmakedep ];
+  buildInputs = [ zlib libjpeg libpng ];
+
+  patches = [
+    ./patch-fig2dev-dev-Imakefile
+    ./patch-fig2dev-Imakefile
+    ./patch-transfig-Imakefile
+    ./patch-fig2dev-fig2dev.h
+    ./patch-fig2dev-dev-gensvg.c
+  ];
+
+  patchPhase = ''
+    runHook prePatch
+
+    configureImakefiles() {
+        local sedcmd=$1
+
+        sed "$sedcmd" fig2dev/Imakefile > tmpsed
+        cp tmpsed fig2dev/Imakefile
+
+        sed "$sedcmd" fig2dev/dev/Imakefile > tmpsed
+        cp tmpsed fig2dev/dev/Imakefile
+
+        sed "$sedcmd" transfig/Imakefile > tmpsed
+        cp tmpsed transfig/Imakefile
+    }
+
+    for i in $patches; do
+        header "applying patch $i" 3
+        patch -p0 < $i
+        stopNest
+    done
+
+    configureImakefiles "s:__PREFIX_PNG:${libpng}:"
+    configureImakefiles "s:__PREFIX:$out:"
+
+    runHook postPatch
+  '';
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  preInstall = ''
+    mkdir -p $out
+    mkdir -p $out/lib
+  '';
+
+  hardeningDisable = [ "format" ];
+
+  meta = {
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/transfig/patch-fig2dev-Imakefile b/nixpkgs/pkgs/tools/graphics/transfig/patch-fig2dev-Imakefile
new file mode 100644
index 000000000000..9c1895b15196
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/transfig/patch-fig2dev-Imakefile
@@ -0,0 +1,75 @@
+--- fig2dev/Imakefile.orig	Thu Mar 25 22:39:10 2004
++++ fig2dev/Imakefile	Thu Mar 25 22:41:01 2004
+@@ -16,17 +16,23 @@
+ XCOMM party to do so, with the only requirement being that this copyright 
+ XCOMM notice remain intact.
+ 
++BINDIR = __PREFIX/bin
++DESTDIR = __DESTROOT
++MKDIRHIER = mkdirhier
++MANDIR = __PREFIX/share/man/$(MANSUFFIX)
++INSTALLFLAGS = -c
++
+ XCOMM ******
+ XCOMM You should point XFIGLIBDIR to the same directory you did when you compiled
+ XCOMM and installed xfig.
+ 
+-XFIGLIBDIR =	/usr/local/lib/X11/xfig
++XFIGLIBDIR =	__PREFIX/lib/xfig
+ 
+ XCOMM ******
+ XCOMM If your system has the strerror() function (doesn't have sys_errlist) then
+ XCOMM comment out NEED_STRERROR with an XCOMM comment.
+ 
+-NEED_STRERROR = -DNEED_STRERROR
++XCOMM NEED_STRERROR = -DNEED_STRERROR
+ 
+ XCOMM The following probably only applies to Windows 9x/NT:
+ XCOMM If your system can open files in text and binary modes and has the
+@@ -39,7 +45,7 @@
+ XCOMM inline functions. With the "INLINE" keyword, you should notice that
+ XCOMM the display will be a bit faster in complex figures
+ 
+-XCOMM USEINLINE = -DUSE_INLINE
++USEINLINE = -DUSE_INLINE
+ 
+ XCOMM ****************
+ XCOMM Change RGB if necessary, to point to your rgb.txt color database
+@@ -60,8 +66,8 @@
+ XCOMM are in different places
+ 
+ #ifdef USEPNG
+-PNGLIBDIR = $(USRLIBDIR)
+-PNGINC = -I/usr/include/X11
++PNGLIBDIR = __PREFIX_PNG/lib
++PNGINC = -I__PREFIX_PNG/include
+ #endif
+ 
+ XCOMM ****************
+@@ -73,7 +79,7 @@
+ XCOMM Change XPMINC if necessary to point to the include file for xpm (xpm.h)
+ XCOMM
+ 
+-XCOMM #define USEXPM
++XCOMM #define USEXPM
+ 
+ #ifdef USEXPM
+ XPMLIBDIR = $(USRLIBDIR)
+@@ -126,7 +132,7 @@
+ 
+ #ifdef I18N
+ I18N_DEFS = -DI18N 
+-FIG2DEV_LIBDIR = /usr/local/lib/fig2dev
++FIG2DEV_LIBDIR = __PREFIX/lib/fig2dev
+ I18N_DEV_DEFS = $(I18N_DEFS) -DFIG2DEV_LIBDIR=\\\"$(FIG2DEV_LIBDIR)\\\"
+ 
+ install::
+@@ -177,7 +183,7 @@
+ 
+ IMAKE_DEFINES = $(DUSEPNG) $(DUSEXPM)
+ 
+-DEVDEFINES = $(DUSEPNG) $(DUSEXPM) $(XPMINC) $(DDNFSS) $(DDA4) \
++DEVDEFINES = $(DUSEPNG) $(DUSEXPM) $(PNGINC) $(XPMINC) $(DDNFSS) $(DDA4) \
+ 		$(DDLATEX2E_GRAPHICS) $(DDEPSFIG) $(DDIBMGEC) $(DDDVIPS) $(I18N_DEV_DEFS)
+ 
+ #define IHaveSubdirs
diff --git a/nixpkgs/pkgs/tools/graphics/transfig/patch-fig2dev-dev-Imakefile b/nixpkgs/pkgs/tools/graphics/transfig/patch-fig2dev-dev-Imakefile
new file mode 100644
index 000000000000..87f01f70d302
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/transfig/patch-fig2dev-dev-Imakefile
@@ -0,0 +1,15 @@
+--- fig2dev/dev/Imakefile.orig	Thu Mar 25 22:47:18 2004
++++ fig2dev/dev/Imakefile	Thu Mar 25 22:47:51 2004
+@@ -18,6 +18,12 @@
+ XCOMM party to do so, with the only requirement being that this copyright 
+ XCOMM notice remain intact.
+ 
++BINDIR = __PREFIX/bin
++USRLIBDIR = __PREFIX/lib
++DESTDIR = __DESTROOT
++MKDIRHIER = mkdirhier
++MANDIR = __PREFIX/share/man/$(MANSUFFIX)
++
+ INCLUDES = -I.. -I../..
+ 
+ #ifdef USE_PNG
diff --git a/nixpkgs/pkgs/tools/graphics/transfig/patch-fig2dev-dev-gensvg.c b/nixpkgs/pkgs/tools/graphics/transfig/patch-fig2dev-dev-gensvg.c
new file mode 100644
index 000000000000..5bd05c97be8e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/transfig/patch-fig2dev-dev-gensvg.c
@@ -0,0 +1,21 @@
+--- fig2dev/dev/gensvg.c.orig	Wed Jul 23 16:39:14 2003
++++ fig2dev/dev/gensvg.c	Wed Jul 23 16:39:52 2003
+@@ -692,16 +692,14 @@
+     if (t->angle != 0) {
+ 	fprintf (tfp, "<g transform=\"translate(%d,%d) rotate(%d)\" >\n",
+ 		 (int) (t->base_x * mag), (int) (t->base_y * mag), degrees (t->angle));
+-	fprintf (tfp, "<text x=\"0\" y=\"0\" fill=\"#%6.6x\"  font-family=\"%s\" 
+-		 font-style=\"%s\" font-weight=\"%s\" font-size=\"%d\" text-anchor=\"%s\" >\n",
++	fprintf (tfp, "<text x=\"0\" y=\"0\" fill=\"#%6.6x\"  font-family=\"%s\" font-style=\"%s\" font-weight=\"%s\" font-size=\"%d\" text-anchor=\"%s\" >\n",
+ 		 rgbColorVal (t->color), family[(int) ceil ((t->font + 1) / 4)],
+ 		 (t->font % 2 == 0 ? "normal" : "italic"),
+ 		 (t->font % 4 < 2 ? "normal" : "bold"), (int) (ceil (t->size * 12 * mag)),
+ 		 anchor[t->type]);
+     }
+     else
+-	fprintf (tfp, "<text x=\"%d\" y=\"%d\" fill=\"#%6.6x\"  font-family=\"%s\" 
+-		 font-style=\"%s\" font-weight=\"%s\" font-size=\"%d\" text-anchor=\"%s\" >\n",
++	fprintf (tfp, "<text x=\"%d\" y=\"%d\" fill=\"#%6.6x\"  font-family=\"%s\" font-style=\"%s\" font-weight=\"%s\" font-size=\"%d\" text-anchor=\"%s\" >\n",
+ 		 (int) (t->base_x * mag), (int) (t->base_y * mag), rgbColorVal (t->color),
+ 		 family[(int) ceil ((t->font + 1) / 4)],
+ 		 (t->font % 2 == 0 ? "normal" : "italic"),
diff --git a/nixpkgs/pkgs/tools/graphics/transfig/patch-fig2dev-fig2dev.h b/nixpkgs/pkgs/tools/graphics/transfig/patch-fig2dev-fig2dev.h
new file mode 100644
index 000000000000..3f330c164e7e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/transfig/patch-fig2dev-fig2dev.h
@@ -0,0 +1,19 @@
+--- fig2dev/fig2dev.h.orig	Thu Dec 19 07:45:28 2002
++++ fig2dev/fig2dev.h	Tue Jan  7 20:08:45 2003
+@@ -22,7 +22,6 @@
+ #include <sys/file.h>
+ #include <signal.h>
+ #include <string.h>
+-#include <varargs.h>
+ #include <pwd.h>
+ #include <errno.h>
+ #include <time.h>
+@@ -210,7 +209,7 @@
+ #endif /* MAXPATHLEN */
+ #endif /* PATH_MAX */
+ 
+-#if ( !defined(__NetBSD__) && !defined(__DARWIN__))
++#if ( !defined(__NetBSD__) && !defined(__FreeBSD__) && !defined(__DARWIN__))
+ extern int		sys_nerr, errno;
+ #endif
+ 
diff --git a/nixpkgs/pkgs/tools/graphics/transfig/patch-transfig-Imakefile b/nixpkgs/pkgs/tools/graphics/transfig/patch-transfig-Imakefile
new file mode 100644
index 000000000000..4639658dccd8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/transfig/patch-transfig-Imakefile
@@ -0,0 +1,22 @@
+--- transfig/Imakefile.orig	Thu Mar 25 22:10:42 2004
++++ transfig/Imakefile	Thu Mar 25 22:14:04 2004
+@@ -14,11 +14,18 @@
+ XCOMM party to do so, with the only requirement being that this copyright 
+ XCOMM notice remain intact.
+ 
++BINDIR = __PREFIX/bin
++USRLIBDIR = __PREFIX/lib
++DESTDIR = __DESTROOT
++MKDIRHIER = mkdirhier
++MANDIR = __PREFIX/share/man/$(MANSUFFIX)
++INSTALLFLAGS = -c
++
+ XCOMM Uncomment the USELATEX2E flag in the transfig/Imakefile file to use the
+ XCOMM \\usepackage{} command for LaTeX2e. 
+ XCOMM The default is to use \\documentstyle{} for LaTeX209.
+ 
+-XCOMM USELATEX2E = -DLATEX2E
++USELATEX2E = -DLATEX2E
+ 
+ XCOMM ******* DON'T CHANGE ANYTHIN BELOW THIS POINT *******
+ 
diff --git a/nixpkgs/pkgs/tools/graphics/twilight/default.nix b/nixpkgs/pkgs/tools/graphics/twilight/default.nix
new file mode 100644
index 000000000000..42a86187a72d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/twilight/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchFromGitHub
+, libGL, libGLU, freeglut, libX11 }:
+
+let
+  version = "2018-04-19";
+in stdenv.mkDerivation rec {
+  pname = "twilight";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "tweakoz";
+    repo = "twilight";
+    rev = "43f21d15c2a8923c9d707bdf3789f480bfd4b36d";
+    sha256 = "0mmmi4jj8yd8wnah6kx5na782sjycszgzim33dfalr0ph361m4pz";
+  };
+
+  buildInputs = [ libGL libGLU freeglut libX11 ];
+
+  installPhase = ''
+    install -Dm755 twilight $out/bin/twilight
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Redo of IRIX twilight backdrop in old school OpenGL";
+    homepage = src.meta.homepage;
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ gnidorah ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/unpaper/default.nix b/nixpkgs/pkgs/tools/graphics/unpaper/default.nix
new file mode 100644
index 000000000000..44a86e961ec8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/unpaper/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl, pkgconfig, libav, libxslt }:
+
+stdenv.mkDerivation rec {
+  pname = "unpaper";
+  version = "6.1";
+
+  src = fetchurl {
+    url = "https://www.flameeyes.eu/files/${pname}-${version}.tar.xz";
+    sha256 = "0c5rbkxbmy9k8vxjh4cv0bgnqd3wqc99yzw215vkyjslvbsq8z13";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libav libxslt ];
+
+  meta = with stdenv.lib; {
+    homepage = https://www.flameeyes.eu/projects/unpaper;
+    description = "Post-processing tool for scanned sheets of paper";
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    maintainers = [ maintainers.rycee ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/vips/default.nix b/nixpkgs/pkgs/tools/graphics/vips/default.nix
new file mode 100644
index 000000000000..e551fc382fbf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/vips/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, pkgconfig, glib, libxml2, expat,
+  fftw, orc, lcms, imagemagick, openexr, libtiff, libjpeg, libgsf, libexif,
+  ApplicationServices,
+  python27, libpng ? null,
+  fetchFromGitHub,
+  autoreconfHook,
+  gtk-doc,
+  gobject-introspection,
+}:
+
+stdenv.mkDerivation rec {
+  pname = "vips";
+  version = "8.8.4";
+
+  src = fetchFromGitHub {
+    owner = "libvips";
+    repo = "libvips";
+    rev = "v${version}";
+    sha256 = "1gw8srjf5r6dhg6g5hh91if302mcr44dzy87mv230ar7027kwwbi";
+    # Remove unicode file names which leads to different checksums on HFS+
+    # vs. other filesystems because of unicode normalisation.
+    extraPostFetch = ''
+      rm -r $out/test/test-suite/images/
+    '';
+  };
+
+  nativeBuildInputs = [ pkgconfig autoreconfHook gtk-doc gobject-introspection ];
+  buildInputs = [ glib libxml2 fftw orc lcms
+    imagemagick openexr libtiff libjpeg
+    libgsf libexif python27 libpng expat ]
+    ++ stdenv.lib.optional stdenv.isDarwin ApplicationServices;
+
+  autoreconfPhase = ''
+    ./autogen.sh
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = "https://libvips.github.io/libvips/";
+    description = "Image processing system for large images";
+    license = licenses.lgpl2Plus;
+    maintainers = with maintainers; [ kovirobi ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/viu/default.nix b/nixpkgs/pkgs/tools/graphics/viu/default.nix
new file mode 100644
index 000000000000..5de5b7e5be57
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/viu/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "viu";
+  version = "0.2.1";
+
+  src = fetchFromGitHub {
+    owner = "atanunq";
+    repo = "viu";
+    rev = "v${version}";
+    sha256 = "0p4ibvv0qrflqdc2bi9rjn7yhn01ncxrpqpxmh8cbq67rbvm7jnx";
+  };
+
+  cargoSha256 = "1h9dm2hhld2079dnx4x5nzkn3ivk6g5ijhv49jxnc200mx4mr1s5";
+
+  meta = with lib; {
+    description = "A command-line application to view images from the terminal written in Rust";
+    homepage = "https://github.com/atanunq/viu";
+    license = licenses.mit;
+    maintainers = with maintainers; [ petabyteboy ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/vulkan-tools/default.nix b/nixpkgs/pkgs/tools/graphics/vulkan-tools/default.nix
new file mode 100644
index 000000000000..5851e4a2d46a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/vulkan-tools/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub, cmake, python3, vulkan-loader, vulkan-headers,
+  glslang, pkgconfig, xlibsWrapper, libxcb, libXrandr, wayland }:
+
+stdenv.mkDerivation rec {
+  pname = "vulkan-tools";
+  version = "1.1.114.0";
+
+  src = fetchFromGitHub {
+    owner = "KhronosGroup";
+    repo = "Vulkan-Tools";
+    rev = "sdk-${version}";
+    sha256 = "1d4fcy11gk21x7r7vywdcc1dy9j1d2j78hvd5vfh3vy9fnahx107";
+  };
+
+  nativeBuildInputs = [ cmake pkgconfig ];
+  buildInputs = [ python3 vulkan-headers vulkan-loader xlibsWrapper libxcb libXrandr wayland ];
+  enableParallelBuilding = true;
+
+  cmakeFlags = [ "-DBUILD_ICD=OFF" "-DGLSLANG_INSTALL_DIR=${glslang}" ];
+
+  meta = with stdenv.lib; {
+    description = "LunarG Vulkan loader";
+    homepage    = https://www.lunarg.com;
+    platforms   = platforms.linux;
+    license     = licenses.asl20;
+    maintainers = [ maintainers.ralith ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/waifu2x-converter-cpp/default.nix b/nixpkgs/pkgs/tools/graphics/waifu2x-converter-cpp/default.nix
new file mode 100644
index 000000000000..5537540382bf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/waifu2x-converter-cpp/default.nix
@@ -0,0 +1,34 @@
+{ cmake, fetchFromGitHub, opencv3, stdenv, opencl-headers
+, cudaSupport ? false, cudatoolkit ? null
+}:
+
+stdenv.mkDerivation rec {
+  pname = "waifu2x-converter-cpp";
+  version = "5.2.4";
+
+  src = fetchFromGitHub {
+    owner = "DeadSix27";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0r7xcjqbyaa20gsgmjj7645640g3nb2bn1pc1nlfplwlzjxmz213";
+  };
+
+  patchPhase = ''
+    # https://github.com/DeadSix27/waifu2x-converter-cpp/issues/123
+    sed -i 's:{"PNG",  false},:{"PNG",  true},:' src/main.cpp
+  '';
+
+  buildInputs = [
+    opencv3 opencl-headers
+  ] ++ stdenv.lib.optional cudaSupport cudatoolkit;
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = {
+    description = "Improved fork of Waifu2X C++ using OpenCL and OpenCV";
+    homepage = https://github.com/DeadSix27/waifu2x-converter-cpp;
+    license = stdenv.lib.licenses.mit;
+    maintainers = [ stdenv.lib.maintainers.xzfc ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/wallutils/default.nix b/nixpkgs/pkgs/tools/graphics/wallutils/default.nix
new file mode 100644
index 000000000000..263425aef1dd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/wallutils/default.nix
@@ -0,0 +1,34 @@
+{ buildGoPackage, fetchFromGitHub, lib
+, wayland, libX11, xbitmaps, libXcursor, libXmu, libXpm
+}:
+
+buildGoPackage rec {
+  pname = "wallutils";
+  version = "5.8.3";
+
+  src = fetchFromGitHub {
+    owner = "xyproto";
+    repo = "wallutils";
+    rev = version;
+    sha256 = "1cc0bb6bdh3pm9mf6rcgk9myr62xhqc6l84xgw44lhm6hkkp16gb";
+  };
+
+  goPackagePath = "github.com/xyproto/wallutils";
+
+  patches = [ ./lscollection-Add-NixOS-paths-to-DefaultWallpaperDirectories.patch ];
+
+  postPatch = ''
+    # VersionString is sometimes not up-to-date:
+    sed -iE 's/VersionString = "[0-9].[0-9].[0-9]"/VersionString = "${version}"/' wallutils.go
+  '';
+
+  buildInputs = [ wayland libX11 xbitmaps libXcursor libXmu libXpm ];
+
+  meta = with lib; {
+    description = "Utilities for handling monitors, resolutions, and (timed) wallpapers";
+    inherit (src.meta) homepage;
+    license = licenses.mit;
+    maintainers = with maintainers; [ primeos ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/wallutils/lscollection-Add-NixOS-paths-to-DefaultWallpaperDirectories.patch b/nixpkgs/pkgs/tools/graphics/wallutils/lscollection-Add-NixOS-paths-to-DefaultWallpaperDirectories.patch
new file mode 100644
index 000000000000..77c55b35c96b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/wallutils/lscollection-Add-NixOS-paths-to-DefaultWallpaperDirectories.patch
@@ -0,0 +1,26 @@
+From 2643b06889605e6096174fb48dcb64a49b252217 Mon Sep 17 00:00:00 2001
+From: Michael Weiss <dev.primeos@gmail.com>
+Date: Sun, 17 Nov 2019 20:30:08 +0100
+Subject: [PATCH] lscollection: Add NixOS paths to DefaultWallpaperDirectories
+
+---
+ collections.go | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/collections.go b/collections.go
+index be04d41..cc79c56 100644
+--- a/collections.go
++++ b/collections.go
+@@ -22,6 +22,9 @@ const (
+ 
+ // DefaultWallpaperDirectories lists the default locations to look for wallpapers
+ var DefaultWallpaperDirectories = []string{
++	"/run/current-system/sw/share/pixmaps",
++	"/run/current-system/sw/share/wallpapers",
++	"/run/current-system/sw/share/backgrounds",
+ 	"/usr/share/pixmaps",
+ 	"/usr/share/wallpapers",
+ 	"/usr/share/backgrounds",
+-- 
+2.23.0
+
diff --git a/nixpkgs/pkgs/tools/graphics/wavefunctioncollapse/default.nix b/nixpkgs/pkgs/tools/graphics/wavefunctioncollapse/default.nix
new file mode 100644
index 000000000000..65fe38937dfb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/wavefunctioncollapse/default.nix
@@ -0,0 +1,34 @@
+{stdenv, fetchFromGitHub, mono}:
+stdenv.mkDerivation rec {
+  pname = "wavefunctioncollapse";
+  version = "0.0pre20170130";
+  src = fetchFromGitHub {
+    owner = "mxgmn";
+    repo = "WaveFunctionCollapse";
+    rev = "ef660c037b1d7c4ebce66efc625af2bb2f2111c0";
+    sha256 = "1dr5fvdgn1jqqacby6rrqm951adx3jw0j70r5i8pmrqnnw482l8m";
+  };
+  buildPhase = ''
+    mcs *.cs -out:wavefunctioncollapse.exe -r:System.Drawing
+    grep -m1 -B999 '^[*][/]' Main.cs > COPYING.MIT
+  '';
+  installPhase = ''
+    mkdir -p "$out"/{bin,share/doc/wavefunctioncollapse,share/wavefunctioncollapse}
+    cp README.md COPYING.MIT "$out"/share/doc/wavefunctioncollapse
+    cp wavefunctioncollapse.exe "$out"/bin
+    cp -r [Ss]amples samples.xml "$out/share/wavefunctioncollapse"
+
+    echo "#! ${stdenv.shell}" >> "$out/bin/wavefunctioncollapse"
+    echo "chmod u+w ." >> "$out/bin/wavefunctioncollapse"
+    echo "'${mono}/bin/mono' '$out/bin/wavefunctioncollapse.exe' \"\$@\"" >>  "$out/bin/wavefunctioncollapse"
+    chmod a+x "$out/bin/wavefunctioncollapse"
+  '';
+  buildInputs = [mono];
+  meta = {
+    inherit version;
+    description = ''A generator of bitmaps that are locally similar to the input bitmap'';
+    license = stdenv.lib.licenses.mit;
+    maintainers = [stdenv.lib.maintainers.raskin];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/wdisplays/default.nix b/nixpkgs/pkgs/tools/graphics/wdisplays/default.nix
new file mode 100644
index 000000000000..9b003868bd00
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/wdisplays/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchFromGitHub, meson, ninja, pkgconfig, gtk3, epoxy, wayland }:
+stdenv.mkDerivation {
+  pname = "wdisplays";
+  version = "2019-10-26-unstable";
+
+  nativeBuildInputs = [ meson ninja pkgconfig ];
+
+  buildInputs = [ gtk3 epoxy wayland ];
+
+  src = fetchFromGitHub {
+    owner = "cyclopsian";
+    repo = "wdisplays";
+    rev = "22669edadb8ff3478bdb51ddc140ef6e61e3d9ef";
+    sha256 = "127k5i98km6mh8yw4vf8n44b29kc3n0169xpkdh7yr0rhv6n9cdl";
+  };
+
+  meta = let inherit (stdenv) lib; in {
+    description = "A graphical application for configuring displays in Wayland compositors";
+    homepage = "https://github.com/cyclopsian/wdisplays";
+    maintainers = [ lib.maintainers.lheckemann ];
+    license = lib.licenses.mit;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/welkin/default.nix b/nixpkgs/pkgs/tools/graphics/welkin/default.nix
new file mode 100644
index 000000000000..be4ba53319ae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/welkin/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchsvn, jre, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "welkin";
+  version = "1.1";
+
+  src = fetchsvn {
+    url = "http://simile.mit.edu/repository/welkin";
+    rev = "9638";
+    sha256 = "1bqh3vam7y805xrmdw7k0ckcfwjg88wypxgv3njkkwyn7kxnfnqp";
+  };
+
+  sourceRoot = "welkin-r9638/tags/${version}";
+
+  buildInputs = [ jre makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/{bin,share}
+    cp -R . $out/share
+    cp $out/share/welkin.sh $out/bin/welkin
+    sed -e 's@\./lib/welkin\.jar@'"$out"'/share/lib/welkin.jar@' -i $out/bin/welkin
+    wrapProgram $out/bin/welkin \
+      --set JAVA_HOME ${jre}
+    chmod a+x $out/bin/welkin
+  '';
+
+  meta = {
+    description = "An RDF visualizer";
+    maintainers = with stdenv.lib.maintainers; [
+      raskin
+    ];
+    hydraPlatforms = [];
+    license = stdenv.lib.licenses.free;
+    platforms = with stdenv.lib.platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/wkhtmltopdf/default.nix b/nixpkgs/pkgs/tools/graphics/wkhtmltopdf/default.nix
new file mode 100644
index 000000000000..2aa6abcccfc4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/wkhtmltopdf/default.nix
@@ -0,0 +1,47 @@
+{ mkDerivation, lib, fetchFromGitHub, qtwebkit, qtsvg, qtxmlpatterns
+, fontconfig, freetype, libpng, zlib, libjpeg
+, openssl, libX11, libXext, libXrender }:
+
+mkDerivation rec {
+  version = "0.12.5";
+  pname = "wkhtmltopdf";
+
+  src = fetchFromGitHub {
+    owner  = "wkhtmltopdf";
+    repo   = "wkhtmltopdf";
+    rev    = version;
+    sha256 = "0i6b6z3f4szspbbi23qr3hv22j9bhmcj7c1jizr7y0ra43mrgws1";
+  };
+
+  buildInputs = [
+    fontconfig freetype libpng zlib libjpeg openssl
+    libX11 libXext libXrender
+    qtwebkit qtsvg qtxmlpatterns
+  ];
+
+  prePatch = ''
+    for f in src/image/image.pro src/pdf/pdf.pro ; do
+      substituteInPlace $f --replace '$(INSTALL_ROOT)' ""
+    done
+  '';
+
+  configurePhase = "qmake wkhtmltopdf.pro INSTALLBASE=$out";
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = https://wkhtmltopdf.org/;
+    description = "Tools for rendering web pages to PDF or images";
+    longDescription = ''
+      wkhtmltopdf and wkhtmltoimage are open source (LGPL) command line tools
+      to render HTML into PDF and various image formats using the QT Webkit
+      rendering engine. These run entirely "headless" and do not require a
+      display or display service.
+
+      There is also a C library, if you're into that kind of thing.
+    '';
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ jb55 ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/xcftools/default.nix b/nixpkgs/pkgs/tools/graphics/xcftools/default.nix
new file mode 100644
index 000000000000..749631999e49
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/xcftools/default.nix
@@ -0,0 +1,40 @@
+{stdenv, fetchurl, libpng, perl, gettext }:
+
+stdenv.mkDerivation {
+  name = "xcftools-1.0.7";
+
+  src = fetchurl {
+    url = "http://henning.makholm.net/xcftools/xcftools-1.0.7.tar.gz";
+    sha256 = "19i0x7yhlw6hd2gp013884zchg63yzjdj4hpany011il0n26vgqy";
+  };
+
+  buildInputs = [ libpng perl gettext ];
+
+  patchPhase = ''
+    # Required if building with libpng-1.6, innocuous otherwise
+    substituteInPlace xcf2png.c         \
+      --replace png_voidp_NULL NULL     \
+      --replace png_error_ptr_NULL NULL
+
+    # xcfview needs mailcap and isn't that useful anyway
+    sed -i -e '/BINARIES/s/xcfview//' Makefile.in
+  '';
+
+  meta = {
+    homepage = http://henning.makholm.net/software;
+    description = "Command-line tools for converting Gimp XCF files";
+    longDescription = ''
+      A set of fast command-line tools for extracting information from
+      the Gimp's native file format XCF.
+
+      The tools are designed to allow efficient use of layered XCF
+      files as sources in a build system that use 'make' and similar
+      tools to manage automatic processing of the graphics.
+
+      These tools work independently of the Gimp engine and do not
+      require the Gimp to even be installed.
+    '';
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/xcur2png/default.nix b/nixpkgs/pkgs/tools/graphics/xcur2png/default.nix
new file mode 100644
index 000000000000..1e3da5dddecf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/xcur2png/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, pkgconfig, libpng, xorg }:
+
+stdenv.mkDerivation rec {
+  pname = "xcur2png";
+  version = "0.7.1";
+
+  src = fetchFromGitHub {
+    owner = "eworm-de";
+    repo = pname;
+    rev = version;
+    sha256 = "0858wn2p14bxpv9lvaz2bz1rk6zk0g8zgxf8iy595m8fqv4q2fya";
+  };
+
+  nativeBuildInputs = [
+    pkgconfig
+  ];
+
+  buildInputs = [
+    libpng
+    xorg.libX11
+    xorg.libXcursor
+    xorg.xorgproto
+  ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/eworm-de/xcur2png/releases;
+    description = "Convert X cursors to PNG images";
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ romildo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/yafaray-core/default.nix b/nixpkgs/pkgs/tools/graphics/yafaray-core/default.nix
new file mode 100644
index 000000000000..6dd0b2068784
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/yafaray-core/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchFromGitHub, cmake, pkgconfig, opencv, zlib
+, libxml2, freetype, libjpeg, libtiff, swig, openexr
+, ilmbase, boost165
+, withPython ? true, python35
+}:
+
+stdenv.mkDerivation rec {
+
+    pname = "yafaray-core";
+    version = "3.3.0";
+
+    src = fetchFromGitHub {
+      owner  = "YafaRay";
+      repo   = "Core";
+      rev    = "v${version}";
+      sha256 = "04p3nlg1rv617qf8v1nzjl6f0w43rvi8w9j6l6ck4bvl77v6cjp6";
+    };
+
+    preConfigure = ''
+      NIX_CFLAGS_COMPILE+=" -isystem ${ilmbase.dev}/include/OpenEXR"
+    '';
+
+    buildInputs = [
+      cmake pkgconfig boost165 opencv zlib libxml2 freetype libjpeg libtiff
+      swig openexr ilmbase
+    ] ++ stdenv.lib.optional withPython python35;
+
+    meta = with stdenv.lib; {
+      description = "A free, open source raytracer";
+      homepage = http://www.yafaray.org;
+      maintainers = with maintainers; [ hodapp ];
+      license = licenses.lgpl21;
+      platforms = platforms.linux;
+    };
+  }
+
+# TODO: Add optional Ruby support
+# TODO: Add Qt support? (CMake looks for it, but what for?)
diff --git a/nixpkgs/pkgs/tools/graphics/yaxg/default.nix b/nixpkgs/pkgs/tools/graphics/yaxg/default.nix
new file mode 100644
index 000000000000..094ec2d5bc49
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/yaxg/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchFromGitHub, makeWrapper,
+  maim, slop, ffmpeg, byzanz, libnotify, xdpyinfo }:
+
+stdenv.mkDerivation rec {
+  pname = "yaxg";
+  version = "unstable-2018-05-03";
+
+  src = fetchFromGitHub {
+    owner = "DanielFGray";
+    repo = "yaxg";
+    rev = "9d6af75da2ec25dba4b8d784e431064033d67ad2";
+    sha256 = "01p6ghp1vfrlnrm78bgbl9ppqwsdxh761g0qa172dpvsqg91l1p6";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ maim slop ffmpeg byzanz libnotify xdpyinfo ];
+
+  installPhase = ''
+    mkdir -p $out/bin/
+    mv yaxg $out/bin/
+    chmod +x $out/bin/yaxg
+    wrapProgram $out/bin/yaxg --prefix PATH : ${ stdenv.lib.makeBinPath [ maim slop ffmpeg byzanz libnotify xdpyinfo ]}
+  '';
+
+  meta = with stdenv.lib; {
+    inherit (src.meta) homepage;
+    description = "Yet Another X Grabber script";
+    longDescription = ''
+      Capture and record your screen with callbacks. Wraps maim, slop, ffmpeg,
+      and byzanz to enable still image, video, or gif recording of part or all
+      of your screen. Similar command-line interface to scrot but is overall
+      more flexible and less buggy.
+    '';
+    platforms = platforms.all;
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ neonfuz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/zbar/default.nix b/nixpkgs/pkgs/tools/graphics/zbar/default.nix
new file mode 100644
index 000000000000..7610b4e56fb0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/zbar/default.nix
@@ -0,0 +1,94 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, imagemagickBig
+, pkgconfig
+, libX11
+, libv4l
+, qtbase
+, qtx11extras
+, wrapQtAppsHook
+, wrapGAppsHook
+, gtk3
+, xmlto
+, docbook_xsl
+, autoreconfHook
+, dbus
+, enableVideo ? stdenv.isLinux
+, enableDbus ? stdenv.isLinux
+}:
+
+stdenv.mkDerivation rec {
+  pname = "zbar";
+  version = "0.23";
+
+  outputs = [ "out" "lib" "dev" "doc" "man" ];
+
+  src = fetchFromGitHub {
+    owner = "mchehab";
+    repo = "zbar";
+    rev = version;
+    sha256 = "0hlxakpyjg4q9hp7yp3har1n78341b4knwyll28hn48vykg28pza";
+  };
+
+  nativeBuildInputs = [
+    pkgconfig
+    xmlto
+    autoreconfHook
+    docbook_xsl
+    wrapQtAppsHook
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    imagemagickBig
+    libX11
+  ] ++ lib.optionals enableDbus [
+    dbus
+  ] ++ lib.optionals enableVideo [
+    libv4l
+    gtk3
+    qtbase
+    qtx11extras
+  ];
+
+  # Disable assertions which include -dev QtBase file paths.
+  NIX_CFLAGS_COMPILE = "-DQT_NO_DEBUG";
+
+  configureFlags = [
+    "--without-python"
+  ] ++ (if enableDbus then [
+    "--with-dbusconfdir=${placeholder "out"}/share"
+  ] else [
+    "--without-dbus"
+  ]) ++ (if enableVideo then [
+    "--with-gtk=gtk3"
+  ] else [
+    "--disable-video"
+    "--without-gtk"
+    "--without-qt"
+  ]);
+
+  dontWrapQtApps = true;
+  dontWrapGApps = true;
+
+  postFixup = lib.optionalString enableVideo ''
+    wrapGApp "$out/bin/zbarcam-gtk"
+    wrapQtApp "$out/bin/zbarcam-qt"
+  '';
+
+  meta = with lib; {
+    description = "Bar code reader";
+    longDescription = ''
+      ZBar is an open source software suite for reading bar codes from various
+      sources, such as video streams, image files and raw intensity sensors. It
+      supports many popular symbologies (types of bar codes) including
+      EAN-13/UPC-A, UPC-E, EAN-8, Code 128, Code 39, Interleaved 2 of 5 and QR
+      Code.
+    '';
+    maintainers = with maintainers; [ delroth raskin ];
+    platforms = platforms.unix;
+    license = licenses.lgpl21;
+    homepage = https://github.com/mchehab/zbar;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/zxing/default.nix b/nixpkgs/pkgs/tools/graphics/zxing/default.nix
new file mode 100644
index 000000000000..97bbeb4d2d43
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/zxing/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, jre }:
+stdenv.mkDerivation rec {
+  pname = "zxing";
+  version = "3.1.0";
+  # Maven builds are hard to get right
+  core_jar = fetchurl {
+    url = "http://repo1.maven.org/maven2/com/google/zxing/core/${version}/core-${version}.jar";
+    sha256 = "199l4xvlcpafqn69r3k9qjpqkw9lvkl02hzpm0ackvdhl7vk42zh";
+  };
+  javase_jar = fetchurl {
+    url = "http://repo1.maven.org/maven2/com/google/zxing/javase/${version}/javase-${version}.jar";
+    sha256 = "0fzxvvf5dqyrs5m9rqw4ffm9h1s27bi7q3jb1dam34s80q2rp2zq";
+  };
+  inherit jre;
+  dontUnpack = true;
+  installPhase = ''
+    mkdir -p "$out/lib/java" "$out/bin"
+    cp "${core_jar}" "${javase_jar}" "$out/lib/java"
+    substituteAll "${./java-zxing.sh}" "$out/bin/java-zxing"
+    substituteAll "${./zxing-cmdline-runner.sh}" "$out/bin/zxing-cmdline-runner"
+    substituteAll "${./zxing-cmdline-encoder.sh}" "$out/bin/zxing-cmdline-encoder"
+    substituteAll "${./zxing.sh}" "$out/bin/zxing"
+    chmod a+x "$out/bin"/*
+    cd "$out/lib/java"; for i in *.jar; do mv "$i" "''${i#*-}"; done
+  '';
+  meta = {
+    inherit version;
+    description = ''1D and 2D code reading library'';
+    license = stdenv.lib.licenses.asl20;
+    maintainers = [stdenv.lib.maintainers.raskin];
+    platforms = stdenv.lib.platforms.linux;
+    homepage = https://github.com/zxing/zxing;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/graphics/zxing/java-zxing.sh b/nixpkgs/pkgs/tools/graphics/zxing/java-zxing.sh
new file mode 100644
index 000000000000..bee3ac9e27a6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/zxing/java-zxing.sh
@@ -0,0 +1,3 @@
+#! /bin/sh
+
+@jre@/bin/java -cp @out@/lib/java/core-@version@.jar:@out@/lib/java/javase-@version@.jar "$@"
diff --git a/nixpkgs/pkgs/tools/graphics/zxing/zxing-cmdline-encoder.sh b/nixpkgs/pkgs/tools/graphics/zxing/zxing-cmdline-encoder.sh
new file mode 100644
index 000000000000..a17ba49cecf0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/zxing/zxing-cmdline-encoder.sh
@@ -0,0 +1,3 @@
+#! /bin/sh
+
+java-zxing com.google.zxing.client.j2se.CommandLineEncoder "$@"
diff --git a/nixpkgs/pkgs/tools/graphics/zxing/zxing-cmdline-runner.sh b/nixpkgs/pkgs/tools/graphics/zxing/zxing-cmdline-runner.sh
new file mode 100644
index 000000000000..cb2a25dc03f7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/zxing/zxing-cmdline-runner.sh
@@ -0,0 +1,3 @@
+#! /bin/sh
+
+java-zxing com.google.zxing.client.j2se.CommandLineRunner "$@"
diff --git a/nixpkgs/pkgs/tools/graphics/zxing/zxing.sh b/nixpkgs/pkgs/tools/graphics/zxing/zxing.sh
new file mode 100644
index 000000000000..ca6ac60bab69
--- /dev/null
+++ b/nixpkgs/pkgs/tools/graphics/zxing/zxing.sh
@@ -0,0 +1,18 @@
+#! /bin/sh
+choice="$1";
+shift
+case "$choice" in
+	encode | create | write | CommandLineEncoder)
+		zxing-cmdline-encoder "$@";
+		;;
+	decode | read | run | CommandLineRunner)
+		zxing-cmdline-runner "$@";
+		;;
+	help | usage | --help | --usage | -h)
+		zxing read;
+		zxing write;
+		;;
+	*)
+		zxing read "$choice" "$@"
+		;;
+esac
diff --git a/nixpkgs/pkgs/tools/inputmethods/anthy/default.nix b/nixpkgs/pkgs/tools/inputmethods/anthy/default.nix
new file mode 100644
index 000000000000..9214edfefb05
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/anthy/default.nix
@@ -0,0 +1,18 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "anthy-9100h";
+
+  meta = with stdenv.lib; {
+    description = "Hiragana text to Kana Kanji mixed text Japanese input method";
+    homepage    = "https://anthy.osdn.jp/";
+    license     = licenses.gpl2Plus;
+    maintainers = with maintainers; [ ericsagnes ];
+    platforms   = platforms.linux;
+  };
+
+  src = fetchurl {
+    url = "mirror://osdn/anthy/37536/${name}.tar.gz";
+    sha256 = "0ism4zibcsa5nl77wwi12vdsfjys3waxcphn1p5s7d0qy1sz0mnj";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/evdevremapkeys/default.nix b/nixpkgs/pkgs/tools/inputmethods/evdevremapkeys/default.nix
new file mode 100644
index 000000000000..0dc6f6739257
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/evdevremapkeys/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub, python3Packages }:
+
+let
+  pythonPackages = python3Packages;
+
+in pythonPackages.buildPythonPackage rec {
+  name = "${pname}-0.1.0";
+  pname = "evdevremapkeys";
+
+  src = fetchFromGitHub {
+    owner = "philipl";
+    repo = pname;
+    rev = "68fb618b8142e1b45d7a1e19ea9a5a9bbb206144";
+    sha256 = "0c9slflakm5jqd8s1zpxm7gmrrk0335m040d7m70hnsak42jvs2f";
+  };
+
+  propagatedBuildInputs = with pythonPackages; [ 
+    pyyaml
+    pyxdg
+    python-daemon
+    evdev
+  ];
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/philipl/evdevremapkeys";
+    description = "Daemon to remap events on linux input devices";
+    license = licenses.mit;
+    maintainers = [ maintainers.q3k ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/evscript/default.nix b/nixpkgs/pkgs/tools/inputmethods/evscript/default.nix
new file mode 100644
index 000000000000..48ca5c0ac0f0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/evscript/default.nix
@@ -0,0 +1,23 @@
+{ rustPlatform, lib, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  name = "evscript-unstable-${version}";
+  version = "2019-02-11";
+
+  src = fetchFromGitHub {
+    owner = "myfreeweb";
+    repo = "evscript";
+    rev = "de6e09b6858ea15893e29293e954b906a4e074d9";
+    sha256 = "04sal72shn4vi7x4qzip0rmn14lzbk6fczzf6glvdhjjlia743q7";
+  };
+
+  cargoSha256 = "127ds8b5zb0i5klgcdalh8ik8a25mm5rldr3267mjy548p9q216m";
+
+  meta = with lib; {
+    description = "Dyon scripting environment for evdev input devices";
+    homepage = https://github.com/myfreeweb/evscript;
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ qyliss ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-anthy/default.nix b/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-anthy/default.nix
new file mode 100644
index 000000000000..d1e7f85f75f3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-anthy/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, cmake, fcitx, anthy, gettext, pkgconfig }:
+
+stdenv.mkDerivation rec {
+  pname = "fcitx-anthy";
+  version = "0.2.3";
+
+  src = fetchurl {
+    url = "http://download.fcitx-im.org/fcitx-anthy/${pname}-${version}.tar.xz";
+    sha256 = "01jx7wwq0mifqrzkswfglqhwkszbfcl4jinxgdgqx9kc6mb4k6zd";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ cmake fcitx anthy gettext ];
+
+  preInstall = ''
+    substituteInPlace src/cmake_install.cmake \
+      --replace ${fcitx} $out
+  '';
+
+  meta = with stdenv.lib; {
+    isFcitxEngine = true;
+    description   = "Fcitx Wrapper for anthy";
+    license       = licenses.gpl2Plus;
+    platforms     = platforms.linux;
+    maintainers   = with maintainers; [ ericsagnes ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-chewing/default.nix b/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-chewing/default.nix
new file mode 100644
index 000000000000..d9b202f7ef15
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-chewing/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, cmake, fcitx, gettext, libchewing, pkgconfig }:
+
+stdenv.mkDerivation rec {
+  pname = "fcitx-chewing";
+  version = "0.2.3";
+
+  src = fetchurl {
+    url = "http://download.fcitx-im.org/fcitx-chewing/${pname}-${version}.tar.xz";
+    sha256 = "1w5smp5zvjx681cp1znjypyr9sw5x6v0wnsk8a7ncwxi9q9wf4xk";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ cmake fcitx gettext libchewing ];
+
+  preInstall = ''
+   substituteInPlace src/cmake_install.cmake \
+      --replace ${fcitx} $out
+   substituteInPlace data/cmake_install.cmake \
+      --replace ${fcitx} $out
+  '';
+
+  meta = with stdenv.lib; {
+    isFcitxEngine = true;
+    homepage      = "https://github.com/fcitx/fcitx-chewing";
+    downloadPage  = "http://download.fcitx-im.org/fcitx-chewing/";
+    description   = "Fcitx engine for chewing";
+    license       = licenses.gpl2;
+    platforms     = platforms.linux;
+    maintainers   = with maintainers; [ ericsagnes ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-cloudpinyin/default.nix b/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-cloudpinyin/default.nix
new file mode 100644
index 000000000000..230b2926561b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-cloudpinyin/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, cmake, pkgconfig, fcitx, gettext, curl }:
+
+stdenv.mkDerivation rec {
+  pname = "fcitx-cloudpinyin";
+  version = "0.3.7";
+
+  src = fetchurl {
+    url = "http://download.fcitx-im.org/fcitx-cloudpinyin/${pname}-${version}.tar.xz";
+    sha256 = "0ai347wv3qdjzcbh0j9hdjpzwvh2kk57324xbxq37nzagrdgg5x0";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ cmake fcitx gettext curl ];
+
+  preInstall = ''
+    substituteInPlace src/cmake_install.cmake \
+      --replace ${fcitx} $out
+    substituteInPlace po/cmake_install.cmake \
+      --replace ${fcitx} $out
+  '';
+
+  meta = with stdenv.lib; {
+    isFcitxEngine = true;
+    description  = "A standalone module for fcitx that uses web API to provide better pinyin result";
+    homepage     = https://github.com/fcitx/fcitx-cloudpinyin;
+    license      = licenses.gpl3Plus;
+    platforms    = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-hangul/default.nix b/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-hangul/default.nix
new file mode 100644
index 000000000000..c9a40b84a6d9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-hangul/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl, cmake, fcitx, libhangul, gettext, pkgconfig }:
+
+stdenv.mkDerivation rec {
+  pname = "fcitx-hangul";
+  version = "0.3.1";
+
+  src = fetchurl {
+    url = "http://download.fcitx-im.org/fcitx-hangul/${pname}-${version}.tar.xz";
+    sha256 = "0ds4071ljq620w7vnprm2jl8zqqkw7qsxvzbjapqak4jarczvmbd";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ cmake fcitx libhangul gettext ];
+
+  preInstall = ''
+    substituteInPlace src/cmake_install.cmake \
+      --replace ${fcitx} $out
+    substituteInPlace data/cmake_install.cmake \
+      --replace ${fcitx} $out
+  '';
+
+  meta = with stdenv.lib; {
+    isFcitxEngine = true;
+    homepage      = "https://github.com/fcitx/fcitx-hangul";
+    downloadPage  = "http://download.fcitx-im.org/fcitx-hangul/";
+    description   = "Fcitx Wrapper for hangul";
+    license       = licenses.gpl2;
+    platforms     = platforms.linux;
+    maintainers   = with maintainers; [ ericsagnes ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-libpinyin/datapath.patch b/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-libpinyin/datapath.patch
new file mode 100644
index 000000000000..84dd5fc8f462
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-libpinyin/datapath.patch
@@ -0,0 +1,16 @@
+--- a/src/utils.cpp
++++ b/src/utils.cpp
+@@ -9,12 +9,7 @@ char* FcitxLibPinyinGetSysPath(LIBPINYIN_LANGUAGE_TYPE type)
+ #ifdef LIBPINYIN_TOOLS_FOUND
+     if (type == LPLT_Simplified) {
+ #endif
+-        /* portable detect here */
+-        if (getenv("FCITXDIR")) {
+-            syspath = fcitx_utils_get_fcitx_path_with_filename("datadir", "libpinyin/data");
+-        } else {
+-            syspath = strdup(LIBPINYIN_PKGDATADIR "/data");
+-        }
++        syspath = strdup(LIBPINYIN_PKGDATADIR "/data");
+ #ifdef LIBPINYIN_TOOLS_FOUND
+     }
+     else {
diff --git a/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-libpinyin/default.nix b/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-libpinyin/default.nix
new file mode 100644
index 000000000000..9e0ef551d82c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-libpinyin/default.nix
@@ -0,0 +1,53 @@
+{ stdenv, fetchurl, cmake, pkgconfig, fcitx, gettext, libpinyin, glib, pcre, dbus, qtwebengine, qtbase, fcitx-qt5 }:
+
+stdenv.mkDerivation rec {
+  pname = "fcitx-libpinyin";
+  version = "0.5.3";
+
+  src = fetchurl {
+    url = "http://download.fcitx-im.org/fcitx-libpinyin/${pname}-${version}.tar.xz";
+    sha256 = "196c229ckib3xvafkk4n3n3jk9rpksfcjsbbwka6a9k2f34qrjj6";
+  };
+
+  nativeBuildInputs = [ pkgconfig  ];
+  buildInputs = [ fcitx-qt5 qtbase qtwebengine.dev cmake fcitx gettext libpinyin glib pcre dbus ];
+
+  # With a typical installation via NixOS option i18n.inputMethod.fcitx.engines,
+  # the FCITXDIR environment variable is set to $out of fcitx-with-plugins,
+  # which leads to an incorrect path for pinyin data.
+  #
+  # It is impossible or difficult to fix this issue without patching. We want
+  # FCITXDIR to point into libpinyin, which is currently not symlinked within
+  # fcitx-with-plugins (only fcitx-libpinyin is symlinked). Also, FCITXDIR
+  # doesn't accept multiple directories.
+  patches = [ ./datapath.patch ];
+
+  preInstall = ''
+    substituteInPlace src/cmake_install.cmake \
+      --replace ${fcitx} $out
+    substituteInPlace data/cmake_install.cmake \
+      --replace ${fcitx} $out
+    substituteInPlace dictmanager/cmake_install.cmake \
+      --replace ${fcitx} $out
+  '';
+
+  preBuild = let
+    ZHUYIN_DATA_FILE_NAME = "model.text.20161206.tar.gz";
+    store_path = fetchurl {
+      url = "https://download.fcitx-im.org/data/${ZHUYIN_DATA_FILE_NAME}";
+      sha256 = "017p11si1b7bkwx36xaybq5a9icq1pd7x1jbymqw92akfgjj8w2w";
+    };
+  in
+    ''
+      cp -rv ${store_path} $NIX_BUILD_TOP/$name/data/${ZHUYIN_DATA_FILE_NAME}
+    '';
+
+  meta = with stdenv.lib; {
+    isFcitxEngine = true;
+    description  = "Fcitx Wrapper for libpinyin, Library to deal with pinyin";
+    homepage     = https://github.com/fcitx/fcitx-libpinyin;
+    license      = licenses.gpl3Plus;
+    maintainers = with maintainers; [ ericsagnes ];
+    platforms    = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-m17n/default.nix b/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-m17n/default.nix
new file mode 100644
index 000000000000..8b25b2846ff5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-m17n/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, cmake, fcitx, gettext, m17n_lib, m17n_db, pkgconfig }:
+
+stdenv.mkDerivation rec {
+  pname = "fcitx-m17n";
+  version = "0.2.4";
+
+  src = fetchurl {
+    url = "http://download.fcitx-im.org/fcitx-m17n/${pname}-${version}.tar.xz";
+    sha256 = "15s52h979xz967f8lm0r0qkplig2w3wjck1ymndbg9kvj25ib0ng";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ cmake fcitx gettext m17n_lib m17n_db ];
+
+  preInstall = ''
+    substituteInPlace im/cmake_install.cmake \
+    --replace ${fcitx} $out
+    '';
+
+  meta = with stdenv.lib; {
+    isFcitxEngine = true;
+    homepage      = "https://github.com/fcitx/fcitx-m17n";
+    downloadPage  = "http://download.fcitx-im.org/fcitx-table-other/";
+    description   = "Fcitx wrapper for m17n";
+    license       = licenses.gpl3Plus;
+    platforms     = platforms.linux;
+    maintainers   = with maintainers; [ ericsagnes ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-mozc/default.nix b/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-mozc/default.nix
new file mode 100644
index 000000000000..9f062036438f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-mozc/default.nix
@@ -0,0 +1,106 @@
+{ clangStdenv, fetchFromGitHub, fetchurl, fetchpatch, gyp, which, ninja,
+  python, pkgconfig, protobuf, gtk2, zinnia, qt5, libxcb,
+  fcitx, gettext }:
+let
+  japanese_usage_dictionary = fetchFromGitHub {
+    owner  = "hiroyuki-komatsu";
+    repo   = "japanese-usage-dictionary";
+    rev    = "e5b3425575734c323e1d947009dd74709437b684";
+    sha256 = "0pyrpz9c8nxccwpgyr36w314mi8h132cis8ijvlqmmhqxwsi30hm";
+  };
+  icons = fetchurl {
+    url    = "http://download.fcitx-im.org/fcitx-mozc/fcitx-mozc-icon.tar.gz";
+    sha256 = "10bdjn481jsh32vll7r756l392anz44h6207vjqwby3rplk31np1";
+  };
+in clangStdenv.mkDerivation rec {
+  name    = "fcitx-mozc-${version}";
+  version = "2.20.2673.102";
+
+  src = fetchFromGitHub {
+    owner  = "google";
+    repo   = "mozc";
+    rev    = "280e38fe3d9db4df52f0713acf2ca65898cd697a";
+    sha256 = "0s599f817gjgqynm4n1yll1ipd25ai2c55y8k6wvhg9s7qaxnyhs";
+  };
+
+  nativeBuildInputs = [ gyp which ninja python pkgconfig ];
+  buildInputs = [ protobuf gtk2 zinnia qt5.qtbase libxcb fcitx gettext ];
+
+  postUnpack = ''
+    rmdir $sourceRoot/src/third_party/japanese_usage_dictionary/
+    ln -s ${japanese_usage_dictionary} $sourceRoot/src/third_party/japanese_usage_dictionary
+    tar -xzf ${icons} -C $sourceRoot/src
+  '';
+
+  patch_version = "2.18.2612.102.1";
+  patches = [
+    (fetchpatch rec {
+      name   = "fcitx-mozc-${patch_version}.patch";
+      url    = "https://download.fcitx-im.org/fcitx-mozc/${name}";
+      sha256 = "1f9m4310kz09v5qvnv75ka2vq63m7by023qrkpddgq4dv7gxx3ca";
+     })
+    # https://github.com/google/mozc/pull/444 - fix for gcc8 STL
+    (fetchpatch {
+      url = "https://github.com/google/mozc/commit/82d38f929882a9c62289b179c6fe41efed249987.patch";
+      sha256 = "07cja1b7qfsd3i76nscf1zwiav74h7d6h2g9g2w4bs3h1mc9jwla";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace src/unix/fcitx/mozc.conf \
+      --replace "/usr/share/fcitx/mozc/icon/mozc.png" "mozc"
+  '';
+
+  configurePhase = ''
+    export GYP_DEFINES="document_dir=$out/share/doc/mozc use_libzinnia=1 use_libprotobuf=1"
+    cd src && python build_mozc.py gyp --gypdir=${gyp}/bin --server_dir=$out/lib/mozc
+  '';
+
+  buildPhase = ''
+    PYTHONPATH="$PWD:$PYTHONPATH" python build_mozc.py build -c Release \
+      server/server.gyp:mozc_server \
+      gui/gui.gyp:mozc_tool \
+      unix/fcitx/fcitx.gyp:fcitx-mozc
+  '';
+
+  installPhase = ''
+    install -d        $out/share/licenses/fcitx-mozc
+    head -n 29 server/mozc_server.cc > $out/share/licenses/fcitx-mozc/LICENSE
+    install -m 644    data/installer/*.html             $out/share/licenses/fcitx-mozc/
+
+    install -d        $out/share/doc/mozc
+    install -m    644 data/installer/*.html             $out/share/doc/mozc/
+
+    install -D -m 755 out_linux/Release/mozc_server     $out/lib/mozc/mozc_server
+    install    -m 755 out_linux/Release/mozc_tool       $out/lib/mozc/mozc_tool
+
+    install -D -m 755 out_linux/Release/fcitx-mozc.so   $out/lib/fcitx/fcitx-mozc.so
+    install -D -m 644 unix/fcitx/fcitx-mozc.conf        $out/share/fcitx/addon/fcitx-mozc.conf
+    install -D -m 644 unix/fcitx/mozc.conf              $out/share/fcitx/inputmethod/mozc.conf
+
+    install -d        $out/share/doc/mozc
+
+    for mofile in out_linux/Release/gen/unix/fcitx/po/*.mo
+    do
+      filename=`basename $mofile`
+      lang=$filename.mo
+      install -D -m 644 "$mofile" "$out/share/locale/$lang/LC_MESSAGES/fcitx-mozc.mo"
+    done
+
+    install -d        $out/share/fcitx/imicon
+    install    -m 644 fcitx-mozc-icons/mozc.png      $out/share/fcitx/imicon/mozc.png
+    install -d        $out/share/fcitx/mozc/icon
+    install    -m 644 fcitx-mozc-icons/*.png                 $out/share/fcitx/mozc/icon/
+  '';
+
+  meta = with clangStdenv.lib; {
+    isFcitxEngine = true;
+    description   = "Fcitx engine for Google japanese input method";
+    homepage      = https://github.com/google/mozc;
+    downloadPage  = "http://download.fcitx-im.org/fcitx-mozc/";
+    license       = licenses.free;
+    platforms     = platforms.linux;
+    maintainers   = [ maintainers.ericsagnes ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-rime/default.nix b/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-rime/default.nix
new file mode 100644
index 000000000000..095be7469cd8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-rime/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl, cmake, pkgconfig, fcitx, librime, brise, hicolor-icon-theme }:
+
+stdenv.mkDerivation rec {
+  pname = "fcitx-rime";
+  version = "0.3.2";
+
+  src = fetchurl {
+    url = "https://download.fcitx-im.org/fcitx-rime/${pname}-${version}.tar.xz";
+    sha256 = "0bd8snfa6jr8dhnm0s0z021iryh5pbaf7p15rhkgbigw2pssczpr";
+  };
+
+  buildInputs = [ cmake pkgconfig fcitx librime brise hicolor-icon-theme ];
+
+  # cmake cannont automatically find our nonstandard brise install location
+  cmakeFlags = [ "-DRIME_DATA_DIR=${brise}/share/rime-data" ];
+
+  preInstall = ''
+    substituteInPlace src/cmake_install.cmake \
+       --replace ${fcitx} $out
+    substituteInPlace data/cmake_install.cmake \
+       --replace ${fcitx} $out
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    isFcitxEngine = true;
+    homepage      = https://github.com/fcitx/fcitx-rime;
+    downloadPage  = https://download.fcitx-im.org/fcitx-rime/;
+    description   = "Rime support for Fcitx";
+    license       = licenses.gpl2;
+    platforms     = platforms.linux;
+    maintainers   = with maintainers; [ sifmelcara ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-skk/default.nix b/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-skk/default.nix
new file mode 100644
index 000000000000..187587fbfb49
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-skk/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, fetchFromGitHub, cmake, pkgconfig, fcitx, libskk, skk-dicts }:
+
+stdenv.mkDerivation {
+  pname = "fcitx-skk";
+  version = "0.1.4";
+  src = fetchFromGitHub {
+    owner = "fcitx";
+    repo = "fcitx-skk";
+    rev = "f66d0f56a40ff833edbfa68a4be4eaa2e93d0e3d";
+    sha256 = "1yl2syqrk212h26vzzkwl19fyp71inqmsli9411h4n2hbcp6m916";
+  };
+
+  nativeBuildInputs = [ cmake pkgconfig ];
+  buildInputs = [ fcitx libskk skk-dicts ];
+
+  cmakeFlags = [ "-DSKK_DEFAULT_PATH=${skk-dicts}/share/SKK-JISYO.combined"
+                 "-DENABLE_QT=FALSE"
+               ];
+  preInstall = ''
+    substituteInPlace src/cmake_install.cmake \
+      --replace ${fcitx} $out
+    substituteInPlace po/cmake_install.cmake \
+      --replace ${fcitx} $out
+    substituteInPlace data/cmake_install.cmake \
+      --replace ${fcitx} $out
+  '';
+
+  meta = with stdenv.lib; {
+    isFcitxEngine = true;
+    description   = "A SKK style input method engine for fcitx";
+    longDescription = ''
+      Fcitx-skk is an input method engine for fcitx. It is based on libskk and thus
+      provides basic features of SKK Japanese input method such as kana-to-kanji conversion,
+      new word registration, completion, numeric conversion, abbrev mode, kuten input,
+      hankaku-katakana input, and re-conversion.
+    '';
+    license       = licenses.gpl3Plus;
+    platforms     = platforms.linux;
+    maintainers   = with maintainers; [ yuriaisaka ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-table-extra/default.nix b/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-table-extra/default.nix
new file mode 100644
index 000000000000..833e417ae913
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-table-extra/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, cmake, fcitx, gettext }:
+
+stdenv.mkDerivation rec {
+  pname = "fcitx-table-extra";
+  version = "0.3.8";
+
+  src = fetchurl {
+    url = "http://download.fcitx-im.org/fcitx-table-extra/${pname}-${version}.tar.xz";
+    sha256 = "c91bb19c1a7b53c5339bf2f75ae83839020d337990f237a8b9bc0f4416c120ef";
+  };
+
+  buildInputs = [ cmake fcitx gettext ];
+
+  preInstall = ''
+   substituteInPlace tables/cmake_install.cmake \
+      --replace ${fcitx} $out
+  '';
+
+  meta = with stdenv.lib; {
+    isFcitxEngine = true;
+    homepage      = "https://github.com/fcitx/fcitx-table-extra";
+    downloadPage  = "http://download.fcitx-im.org/fcitx-table-extra/";
+    description   = "Provides extra table for Fcitx, including Boshiamy, Zhengma, Cangjie, and Quick";
+    license       = licenses.gpl2Plus;
+    platforms     = platforms.linux;
+    maintainers   = with maintainers; [ linc01n ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-table-other/default.nix b/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-table-other/default.nix
new file mode 100644
index 000000000000..ffee83875a17
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-table-other/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, cmake, fcitx, gettext }:
+
+stdenv.mkDerivation rec {
+  pname = "fcitx-table-other";
+  version = "0.2.4";
+
+  src = fetchurl {
+    url = "http://download.fcitx-im.org/fcitx-table-other/${pname}-${version}.tar.xz";
+    sha256 = "1di60lr6l5k2sdwi3yrc0hl89j2k0yipayrsn803vd040w1fgfhq";
+  };
+
+  buildInputs = [ cmake fcitx gettext ];
+
+  preInstall = ''
+   substituteInPlace tables/cmake_install.cmake \
+      --replace ${fcitx} $out
+  '';
+
+  meta = with stdenv.lib; {
+    isFcitxEngine = true;
+    homepage      = "https://github.com/fcitx/fcitx-table-other";
+    downloadPage  = "http://download.fcitx-im.org/fcitx-table-other/";
+    description   = "Provides some other tables for Fcitx";
+    license       = licenses.gpl3Plus;
+    platforms     = platforms.linux;
+    maintainers   = with maintainers; [ ericsagnes ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-unikey/default.nix b/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-unikey/default.nix
new file mode 100644
index 000000000000..1deff93e2016
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fcitx-engines/fcitx-unikey/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, cmake, fcitx, gettext, pkgconfig }:
+
+stdenv.mkDerivation rec {
+  pname = "fcitx-unikey";
+  version = "0.2.5";
+
+  src = fetchurl {
+    url = "http://download.fcitx-im.org/fcitx-unikey/${pname}-${version}.tar.xz";
+    sha256 = "063vc29v7ycaai98v3z4q319sv9sm91my17pmhblw1vifxnw02wf";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ cmake fcitx gettext ];
+
+  NIX_CFLAGS_COMPILE = "-Wno-narrowing";
+
+  preInstall = ''
+    substituteInPlace src/cmake_install.cmake \
+      --replace ${fcitx} $out
+    substituteInPlace data/cmake_install.cmake \
+      --replace ${fcitx} $out
+  '';
+  
+  meta = with stdenv.lib; {
+    isFcitxEngine = true;
+    homepage      = "https://github.com/fcitx/fcitx-unikey";
+    downloadPage  = "http://download.fcitx-im.org/fcitx-table-other/";
+    description   = "Fcitx wrapper for unikey";
+    license       = licenses.gpl3Plus;
+    platforms     = platforms.linux;
+    maintainers   = with maintainers; [ ericsagnes ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/fcitx/default.nix b/nixpkgs/pkgs/tools/inputmethods/fcitx/default.nix
new file mode 100644
index 000000000000..69e4425d8c3b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fcitx/default.nix
@@ -0,0 +1,11 @@
+{ callPackage, plugins ? [] }:
+
+let 
+  unwrapped = callPackage ./unwrapped.nix { };
+  wrapped   = callPackage ./wrapper.nix {
+    plugins = plugins;
+    fcitx   = unwrapped;
+  };
+in if plugins == [] 
+   then unwrapped
+   else wrapped
diff --git a/nixpkgs/pkgs/tools/inputmethods/fcitx/fcitx-configtool.nix b/nixpkgs/pkgs/tools/inputmethods/fcitx/fcitx-configtool.nix
new file mode 100644
index 000000000000..ae9d8d0f53f6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fcitx/fcitx-configtool.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl, makeWrapper, pkgconfig, cmake, fcitx, gtk3, isocodes, gnome3 }:
+
+stdenv.mkDerivation rec {
+  name = "fcitx-configtool-0.4.10";
+
+  meta = with stdenv.lib; {
+    description = "GTK-based config tool for Fcitx";
+    license     = licenses.gpl2;
+    platforms   = platforms.linux;
+    maintainers = with maintainers; [ cdepillabout ];
+  };
+
+  src = fetchurl {
+    url = "https://download.fcitx-im.org/fcitx-configtool/${name}.tar.xz";
+    sha256 = "1yyi9jhkwn49lx9a47k1zbvwgazv4y4z72gnqgzdpgdzfrlrgi5w";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ makeWrapper fcitx cmake isocodes gtk3
+    gnome3.adwaita-icon-theme ];
+
+  # Patch paths to `fcitx-remote`
+  prePatch = ''
+    for f in gtk{3,}/config_widget.c; do
+      substituteInPlace $f \
+        --replace 'EXEC_PREFIX "/bin/fcitx-remote"' '"${fcitx}/bin/fcitx-remote"'
+    done
+  '';
+
+  preFixup = ''
+    wrapProgram $out/bin/fcitx-config-gtk3 \
+      --prefix XDG_DATA_DIRS : "$XDG_ICON_DIRS";
+  '';
+}
+
diff --git a/nixpkgs/pkgs/tools/inputmethods/fcitx/fcitx-qt5.nix b/nixpkgs/pkgs/tools/inputmethods/fcitx/fcitx-qt5.nix
new file mode 100644
index 000000000000..3fd1efcc3434
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fcitx/fcitx-qt5.nix
@@ -0,0 +1,38 @@
+{ lib, mkDerivation, fetchFromGitLab
+, cmake
+, extra-cmake-modules
+, fcitx
+, pkgconfig
+, qtbase
+}:
+
+mkDerivation rec {
+  pname = "fcitx-qt5";
+  version = "1.2.3";
+
+  src = fetchFromGitLab {
+    owner = "fcitx";
+    repo = pname;
+    rev = version;
+    sha256 = "0860v3rxsh054wkkbawvyin5mk0flp4cwfcpmcpq147lvdm5lq2i";
+  };
+
+  nativeBuildInputs = [ cmake extra-cmake-modules pkgconfig ];
+
+  buildInputs = [ fcitx qtbase ];
+
+  preConfigure = ''
+    substituteInPlace platforminputcontext/CMakeLists.txt \
+      --replace \$"{CMAKE_INSTALL_QTPLUGINDIR}" $out/${qtbase.qtPluginPrefix}
+    substituteInPlace quickphrase-editor/CMakeLists.txt \
+      --replace \$"{FCITX4_ADDON_INSTALL_DIR}" $out/lib/fcitx
+  '';
+
+  meta = with lib; {
+    homepage    = "https://gitlab.com/fcitx/fcitx-qt5";
+    description = "Qt5 IM Module for Fcitx";
+    license     = licenses.gpl2;
+    platforms   = platforms.linux;
+    maintainers = with maintainers; [ ericsagnes ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/fcitx/find-enchant-lib.patch b/nixpkgs/pkgs/tools/inputmethods/fcitx/find-enchant-lib.patch
new file mode 100644
index 000000000000..90c9c79aa73d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fcitx/find-enchant-lib.patch
@@ -0,0 +1,42 @@
+diff --git a/cmake/FindEnchant.cmake b/cmake/FindEnchant.cmake
+index 7c182e6a..5537595e 100644
+--- a/cmake/FindEnchant.cmake
++++ b/cmake/FindEnchant.cmake
+@@ -16,7 +16,7 @@ if(ENCHANT_INCLUDE_DIR AND ENCHANT_LIBRARIES)
+ endif(ENCHANT_INCLUDE_DIR AND ENCHANT_LIBRARIES)
+ 
+ find_package(PkgConfig)
+-pkg_check_modules(PC_ENCHANT enchant)
++pkg_check_modules(PC_ENCHANT enchant-2)
+ 
+ find_path(ENCHANT_INCLUDE_DIR
+   NAMES enchant.h
+@@ -24,7 +24,7 @@ find_path(ENCHANT_INCLUDE_DIR
+   PATH_SUFFIXES "enchant")
+ 
+ find_library(ENCHANT_LIBRARIES
+-  NAMES enchant
++  NAMES enchant-2
+   HINTS ${PC_ENCHANT_LIBRARY_DIRS})
+ 
+ if(ENCHANT_INCLUDE_DIR AND ENCHANT_LIBRARIES)
+@@ -39,7 +39,7 @@ if(ENCHANT_INCLUDE_DIR AND ENCHANT_LIBRARIES)
+   #include <stdlib.h>
+   #include <stddef.h>
+   #include <string.h>
+-  #include <enchant/enchant.h>
++  #include <enchant-2/enchant.h>
+ 
+   EnchantBroker *enchant_broker_init();
+   char **enchant_dict_suggest(EnchantDict *dict, const char *str,
+@@ -78,6 +78,10 @@ if(ENCHANT_INCLUDE_DIR AND ENCHANT_LIBRARIES)
+   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS_BACKUP}")
+ endif()
+ 
++if(ENCHANT_API_COMPATIBLE)
++  set(ENCHANT_LIBRARY_FILENAME ${ENCHANT_LIBRARIES})
++endif(ENCHANT_API_COMPATIBLE)
++
+ include(FindPackageHandleStandardArgs)
+ find_package_handle_standard_args(Enchant DEFAULT_MSG ENCHANT_LIBRARIES
+   ENCHANT_INCLUDE_DIR ENCHANT_API_COMPATIBLE)
diff --git a/nixpkgs/pkgs/tools/inputmethods/fcitx/unwrapped.nix b/nixpkgs/pkgs/tools/inputmethods/fcitx/unwrapped.nix
new file mode 100644
index 000000000000..60de9e6910e3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fcitx/unwrapped.nix
@@ -0,0 +1,100 @@
+{ stdenv, fetchurl, pkgconfig, cmake, intltool, gettext
+, libxml2, enchant2, isocodes, icu, libpthreadstubs
+, pango, cairo, libxkbfile, libXau, libXdmcp, libxkbcommon
+, dbus, gtk2, gtk3, qt4, extra-cmake-modules
+, xkeyboard_config, pcre, libuuid
+, withPinyin ? true
+, fetchFromGitLab
+}:
+
+let
+  # releases at http://download.fcitx-im.org/fcitx/${name}_dict.tar.xz
+  # contains all data but if we want to compile from source, we need to
+  # fetch them ourselves
+  # to update the urls and where to unpack these, look into the
+  # src/module/*/data/CMakeLists.txt files
+  # fcitx_download tgt_name url output)
+  dicts = let SPELL_EN_DICT_VER="20121020"; in fetchurl {
+      url = "http://download.fcitx-im.org/data/en_dict-${SPELL_EN_DICT_VER}.tar.gz";
+      sha256 = "1svcb97sq7nrywp5f2ws57cqvlic8j6p811d9ngflplj8xw5sjn4";
+  };
+  table = fetchurl {
+      url = http://download.fcitx-im.org/data/table.tar.gz;
+      sha256 = "1dw7mgbaidv3vqy0sh8dbfv8631d2zwv5mlb7npf69a1f8y0b5k1";
+  };
+  pystroke-data = let PY_STROKE_VER="20121124"; in fetchurl {
+      url = "http://download.fcitx-im.org/data/py_stroke-${PY_STROKE_VER}.tar.gz";
+      sha256 = "0j72ckmza5d671n2zg0psg7z9iils4gyxz7jgkk54fd4pyljiccf";
+  };
+  pytable-data = let PY_TABLE_VER="20121124"; in fetchurl {
+      url = "http://download.fcitx-im.org/data/py_table-${PY_TABLE_VER}.tar.gz";
+      sha256 = "011cg7wssssm6hm564cwkrrnck2zj5rxi7p9z5akvhg6gp4nl522";
+  };
+  pinyin-data = fetchurl {
+      url = http://download.fcitx-im.org/data/pinyin.tar.gz;
+      sha256 = "1qfq5dy4czvd1lvdnxzyaiir9x8b1m46jjny11y0i33m9ar2jf2q";
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "fcitx";
+  version = "4.2.9.6";
+
+  src = fetchFromGitLab {
+    owner = "fcitx";
+    repo = "fcitx";
+    rev = version;
+    sha256 = "0j5vaf930lb21gx4h7z6mksh1fazqw32gajjjkyir94wbmml9n3s";
+  };
+
+  # put data at the correct locations else cmake tries to fetch them,
+  # which fails in sandboxed mode
+  prePatch = ''
+    cp ${dicts} src/module/spell/dict/$(stripHash ${dicts})
+    cp ${table} src/im/table/data/$(stripHash ${table})
+  ''
+  + stdenv.lib.optionalString withPinyin ''
+    cp ${pystroke-data} src/module/pinyin-enhance/data/$(stripHash ${pystroke-data})
+    cp ${pytable-data} src/module/pinyin-enhance/data/$(stripHash ${pytable-data})
+    cp ${pinyin-data} src/im/pinyin/data/$(stripHash ${pinyin-data})
+  ''
+  ;
+
+  patches = [ ./find-enchant-lib.patch ];
+
+  postPatch = ''
+    substituteInPlace src/frontend/qt/CMakeLists.txt \
+      --replace $\{QT_PLUGINS_DIR} $out/lib/qt4/plugins
+
+    patchShebangs cmake/
+  '';
+
+  nativeBuildInputs = [ cmake extra-cmake-modules intltool pkgconfig pcre ];
+
+  buildInputs = [
+    xkeyboard_config enchant2 gettext isocodes icu libpthreadstubs libXau libXdmcp libxkbfile
+    libxkbcommon libxml2 dbus cairo gtk2 gtk3 pango qt4 libuuid
+  ];
+
+  cmakeFlags = [
+    "-DENABLE_QT_IM_MODULE=ON"
+    "-DENABLE_GTK2_IM_MODULE=ON"
+    "-DENABLE_GTK3_IM_MODULE=ON"
+    "-DENABLE_GIR=OFF"
+    "-DENABLE_OPENCC=OFF"
+    "-DENABLE_PRESAGE=OFF"
+    "-DENABLE_XDGAUTOSTART=OFF"
+    "-DENABLE_PINYIN=${if withPinyin then "ON" else "OFF"}"
+    "-DENABLE_TABLE=ON"
+    "-DENABLE_SPELL=ON"
+    "-DENABLE_QT_GUI=ON"
+    "-DXKB_RULES_XML_FILE='${xkeyboard_config}/share/X11/xkb/rules/evdev.xml'"
+  ];
+
+  meta = with stdenv.lib; {
+    homepage    = https://github.com/fcitx/fcitx;
+    description = "A Flexible Input Method Framework";
+    license     = licenses.gpl2;
+    platforms   = platforms.linux;
+    maintainers = with maintainers; [ ericsagnes ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/fcitx/wrapper.nix b/nixpkgs/pkgs/tools/inputmethods/fcitx/wrapper.nix
new file mode 100644
index 000000000000..28a08e39b225
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fcitx/wrapper.nix
@@ -0,0 +1,14 @@
+{ symlinkJoin, fcitx, fcitx-configtool, makeWrapper, plugins, libsForQt5 }:
+
+symlinkJoin {
+  name = "fcitx-with-plugins-${fcitx.version}";
+
+  paths = [ fcitx fcitx-configtool libsForQt5.fcitx-qt5 ] ++ plugins;
+
+  buildInputs = [ makeWrapper ];
+
+  postBuild = ''
+    wrapProgram $out/bin/fcitx \
+      --set FCITXDIR "$out/"
+  '';
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/fusuma/Gemfile b/nixpkgs/pkgs/tools/inputmethods/fusuma/Gemfile
new file mode 100644
index 000000000000..9aa2c3ac71a8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fusuma/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem "fusuma"
diff --git a/nixpkgs/pkgs/tools/inputmethods/fusuma/Gemfile.lock b/nixpkgs/pkgs/tools/inputmethods/fusuma/Gemfile.lock
new file mode 100644
index 000000000000..c35e7658d635
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fusuma/Gemfile.lock
@@ -0,0 +1,13 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    fusuma (1.3.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  fusuma
+
+BUNDLED WITH
+   1.17.3
diff --git a/nixpkgs/pkgs/tools/inputmethods/fusuma/default.nix b/nixpkgs/pkgs/tools/inputmethods/fusuma/default.nix
new file mode 100644
index 000000000000..a8901dfb0e43
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fusuma/default.nix
@@ -0,0 +1,24 @@
+{ lib, bundlerApp, bundlerUpdateScript, makeWrapper, libinput }:
+
+bundlerApp {
+  pname = "fusuma";
+  gemdir = ./.;
+  exes = [ "fusuma" ];
+
+  buildInputs = [ makeWrapper ];
+
+  postBuild = ''
+    wrapProgram "$out/bin/fusuma" \
+      --prefix PATH : ${lib.makeBinPath [ libinput ]}
+  '';
+
+  passthru.updateScript = bundlerUpdateScript "fusuma";
+
+  meta = with lib; {
+    description = "Multitouch gestures with libinput driver on X11, Linux";
+    homepage = "https://github.com/iberianpig/fusuma";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jfrankenau nicknovitski filalex77 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/fusuma/gemset.nix b/nixpkgs/pkgs/tools/inputmethods/fusuma/gemset.nix
new file mode 100644
index 000000000000..2dd9af421ba9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/fusuma/gemset.nix
@@ -0,0 +1,12 @@
+{
+  fusuma = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "150jc8jyqj3w4k13lf1ihqmm2sld1yawp4jwnf43jixnc9rmzx6f";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/inputmethods/gebaar-libinput/default.nix b/nixpkgs/pkgs/tools/inputmethods/gebaar-libinput/default.nix
new file mode 100644
index 000000000000..6d4947e517e5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/gebaar-libinput/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, lib, fetchFromGitHub, pkgconfig, cmake, libinput, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "gebaar-libinput";
+  version = "0.0.5";
+
+  src = fetchFromGitHub {
+    owner = "Coffee2CodeNL";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1kqcgwkia1p195xr082838dvj1gqif9d63i8a52jb0lc32zzizh6";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ pkgconfig cmake ];
+  buildInputs = [ libinput zlib ];
+
+  meta = with lib; {
+    description = "Gebaar, A Super Simple WM Independent Touchpad Gesture Daemon for libinput";
+    homepage = "https://github.com/Coffee2CodeNL/gebaar-libinput";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ colemickens lovesegfault ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-anthy/default.nix b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-anthy/default.nix
new file mode 100644
index 000000000000..cfdfa85ad9f6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-anthy/default.nix
@@ -0,0 +1,57 @@
+{ stdenv
+, fetchurl
+, gettext
+, pkgconfig
+, wrapGAppsHook
+, anthy
+, ibus
+, glib
+, gobject-introspection
+, gtk3
+, python3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ibus-anthy";
+  version = "1.5.11";
+
+  src = fetchurl {
+    url = "https://github.com/ibus/ibus-anthy/releases/download/${version}/${pname}-${version}.tar.gz";
+    sha256 = "1zwgswpibh67sgbza8kvg03v06maxc08ihkgm5hmh333sjq9d5c0";
+  };
+
+  buildInputs = [
+    anthy
+    glib
+    gtk3
+    ibus
+    (python3.withPackages (ps: [
+      ps.pygobject3
+      (ps.toPythonModule ibus)
+    ]))
+  ];
+
+  nativeBuildInputs = [
+    gettext
+    gobject-introspection
+    pkgconfig
+    wrapGAppsHook
+  ];
+
+  configureFlags = [
+    "--with-anthy-zipcode=${anthy}/share/anthy/zipcode.t"
+  ];
+
+  postFixup = ''
+    substituteInPlace $out/share/ibus/component/anthy.xml --replace \$\{exec_prefix\} $out
+  '';
+
+  meta = with stdenv.lib; {
+    isIbusEngine = true;
+    description = "IBus interface to the anthy input method";
+    homepage = https://github.com/fujiwarat/ibus-anthy;
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ gebner ericsagnes ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-hangul/default.nix b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-hangul/default.nix
new file mode 100644
index 000000000000..d5e2f50299e3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-hangul/default.nix
@@ -0,0 +1,55 @@
+{ stdenv
+, fetchurl
+, substituteAll
+, appstream-glib
+, gettext
+, pkgconfig
+, wrapGAppsHook
+, gtk3
+, ibus
+, libhangul
+, python3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ibus-hangul";
+  version = "1.5.3";
+
+  src = fetchurl {
+    url = "https://github.com/choehwanjin/ibus-hangul/releases/download/${version}/${pname}-${version}.tar.gz";
+    sha256 = "1400ba2p34vr9q285lqvjm73f6m677cgfdymmjpiwyrjgbbiqrjy";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      libhangul = "${libhangul}/lib/libhangul.so.1";
+    })
+  ];
+
+  nativeBuildInputs = [
+    appstream-glib
+    gettext
+    pkgconfig
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtk3
+    ibus
+    libhangul
+    (python3.withPackages (pypkgs: with pypkgs; [
+      pygobject3
+      (toPythonModule ibus)
+    ]))
+  ];
+
+  meta = with stdenv.lib; {
+    isIbusEngine = true;
+    description = "Ibus Hangul engine";
+    homepage = https://github.com/choehwanjin/ibus-hangul;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ ericsagnes ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-hangul/fix-paths.patch b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-hangul/fix-paths.patch
new file mode 100644
index 000000000000..7487d074d559
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-hangul/fix-paths.patch
@@ -0,0 +1,13 @@
+diff --git a/setup/main.py b/setup/main.py
+index 8d581cd..2ac47b9 100644
+--- a/setup/main.py
++++ b/setup/main.py
+@@ -37,7 +37,7 @@
+ 
+ def get_hangul_keyboard_list():
+     from ctypes import CDLL, c_int, c_char_p
+-    libhangul = CDLL('libhangul.so.1')
++    libhangul = CDLL('@libhangul@')
+     libhangul.hangul_ic_get_n_keyboards.argtypes = []
+     libhangul.hangul_ic_get_n_keyboards.restype = c_int
+     libhangul.hangul_ic_get_keyboard_id.argtypes = [c_int]
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-kkc/default.nix b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-kkc/default.nix
new file mode 100644
index 000000000000..589ddd09144f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-kkc/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl
+, vala, intltool, pkgconfig
+, libkkc, ibus, skk-dicts
+, gtk3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ibus-kkc";
+  version = "1.5.22";
+
+  src = fetchurl {
+    url = "${meta.homepage}/releases/download/v${version}/${pname}-${version}.tar.gz";
+    sha256 = "1kj74c9zy9yxkjx7pz96mzqc13cf10yfmlgprr8sfd4ay192bzi2";
+  };
+
+  nativeBuildInputs = [
+    vala intltool pkgconfig
+  ];
+
+  buildInputs = [ libkkc ibus skk-dicts gtk3 ];
+
+  postInstall = ''
+    ln -s ${skk-dicts}/share $out/share/skk
+  '';
+
+  meta = with stdenv.lib; {
+    isIbusEngine = true;
+    description  = "libkkc (Japanese Kana Kanji input method) engine for ibus";
+    homepage     = https://github.com/ueno/ibus-kkc;
+    license      = licenses.gpl2;
+    platforms    = platforms.linux;
+    maintainers  = with maintainers; [ vanzef ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-libpinyin/default.nix b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-libpinyin/default.nix
new file mode 100644
index 000000000000..2c1d558f04d3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-libpinyin/default.nix
@@ -0,0 +1,54 @@
+{ stdenv
+, fetchFromGitHub
+, autoreconfHook
+, gettext
+, pkgconfig
+, wrapGAppsHook
+, sqlite
+, libpinyin
+, db
+, ibus
+, glib
+, gtk3
+, python3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ibus-libpinyin";
+  version = "1.11.1";
+
+  src = fetchFromGitHub {
+    owner = "libpinyin";
+    repo = "ibus-libpinyin";
+    rev = version;
+    sha256 = "0b8rilk9zil9gvfhlk3rphcby6ph11dw66j175wp0na6h6hjlaf2";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    gettext
+    pkgconfig
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    ibus
+    glib
+    sqlite
+    libpinyin
+    (python3.withPackages (pypkgs: with pypkgs; [
+      pygobject3
+      (toPythonModule ibus)
+    ]))
+    gtk3
+    db
+  ];
+
+  meta = with stdenv.lib; {
+    isIbusEngine = true;
+    description = "IBus interface to the libpinyin input method";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ ericsagnes ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-m17n/default.nix b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-m17n/default.nix
new file mode 100644
index 000000000000..c026a9d1a813
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-m17n/default.nix
@@ -0,0 +1,55 @@
+{ stdenv
+, fetchFromGitHub
+, autoreconfHook
+, pkgconfig
+, ibus
+, gtk3
+, m17n_lib
+, m17n_db
+, gettext
+, python3
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ibus-m17n";
+  version = "1.4.1";
+
+  src = fetchFromGitHub {
+    owner = "ibus";
+    repo = "ibus-m17n";
+    rev = version;
+    sha256 = "1xl7swqn46nhi43rka0zx666mpk667ykag3sz07x0zqrwi41frps";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    gettext
+    pkgconfig
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    ibus
+    gtk3
+    m17n_lib
+    m17n_db
+    (python3.withPackages (ps: [
+      ps.pygobject3
+      (ps.toPythonModule ibus)
+    ]))
+  ];
+
+  configureFlags = [
+    "--with-gtk=3.0"
+  ];
+
+  meta = with stdenv.lib; {
+    isIbusEngine = true;
+    description = "m17n engine for ibus";
+    homepage = https://github.com/ibus/ibus-m17n;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ericsagnes ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-mozc/default.nix b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-mozc/default.nix
new file mode 100644
index 000000000000..a33eb277926c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-mozc/default.nix
@@ -0,0 +1,86 @@
+{ clangStdenv, fetchFromGitHub, fetchpatch, which, ninja, python, gyp, pkgconfig
+, protobuf, ibus, gtk2, zinnia, qt5, libxcb }:
+
+let
+  japanese_usage_dictionary = fetchFromGitHub {
+    owner  = "hiroyuki-komatsu";
+    repo   = "japanese-usage-dictionary";
+    rev    = "e5b3425575734c323e1d947009dd74709437b684";
+    sha256 = "0pyrpz9c8nxccwpgyr36w314mi8h132cis8ijvlqmmhqxwsi30hm";
+  };
+in clangStdenv.mkDerivation rec {
+  name = "ibus-mozc-${version}";
+  version = "2.23.2815.102";
+
+  meta = with clangStdenv.lib; {
+    isIbusEngine = true;
+    description  = "Japanese input method from Google";
+    homepage     = https://github.com/google/mozc;
+    license      = licenses.free;
+    platforms    = platforms.linux;
+    maintainers  = with maintainers; [ gebner ericsagnes ];
+  };
+
+  nativeBuildInputs = [ which ninja python gyp pkgconfig ];
+  buildInputs = [ protobuf ibus gtk2 zinnia qt5.qtbase libxcb ];
+
+  src = fetchFromGitHub {
+    owner  = "google";
+    repo   = "mozc";
+    rev    = "afb03ddfe72dde4cf2409863a3bfea160f7a66d8";
+    sha256 = "0w2dy2j9x5nc7x3g95j17r3m60vbfyn5j617h7js9xryv33yzpgx";
+  };
+
+  patches = [
+    # https://github.com/google/mozc/pull/444 - fix for gcc8 STL
+    (fetchpatch {
+      url = "https://github.com/google/mozc/commit/82d38f929882a9c62289b179c6fe41efed249987.patch";
+      sha256 = "07cja1b7qfsd3i76nscf1zwiav74h7d6h2g9g2w4bs3h1mc9jwla";
+    })
+  ];
+
+  postUnpack = ''
+    rmdir $sourceRoot/src/third_party/japanese_usage_dictionary/
+    ln -s ${japanese_usage_dictionary} $sourceRoot/src/third_party/japanese_usage_dictionary
+  '';
+
+  configurePhase = ''
+    export GYP_DEFINES="document_dir=$out/share/doc/mozc use_libzinnia=1 use_libprotobuf=1 ibus_mozc_path=$out/lib/ibus-mozc/ibus-engine-mozc"
+    cd src && python build_mozc.py gyp --gypdir=${gyp}/bin --server_dir=$out/lib/mozc
+  '';
+
+  buildPhase = ''
+    PYTHONPATH="$PWD:$PYTHONPATH" python build_mozc.py build -c Release \
+      unix/ibus/ibus.gyp:ibus_mozc \
+      unix/emacs/emacs.gyp:mozc_emacs_helper \
+      server/server.gyp:mozc_server \
+      gui/gui.gyp:mozc_tool \
+      renderer/renderer.gyp:mozc_renderer
+  '';
+
+  installPhase = ''
+    install -d        $out/share/licenses/mozc
+    head -n 29 server/mozc_server.cc > $out/share/licenses/mozc/LICENSE
+    install -m 644    data/installer/*.html     $out/share/licenses/mozc/
+
+    install -D -m 755 out_linux/Release/mozc_server $out/lib/mozc/mozc_server
+    install    -m 755 out_linux/Release/mozc_tool   $out/lib/mozc/mozc_tool
+
+    install -d        $out/share/doc/mozc
+    install -m 644    data/installer/*.html         $out/share/doc/mozc/
+
+    install -D -m 755 out_linux/Release/ibus_mozc           $out/lib/ibus-mozc/ibus-engine-mozc
+    install -D -m 644 out_linux/Release/gen/unix/ibus/mozc.xml $out/share/ibus/component/mozc.xml
+    install -D -m 644 data/images/unix/ime_product_icon_opensource-32.png $out/share/ibus-mozc/product_icon.png
+    install    -m 644 data/images/unix/ui-tool.png          $out/share/ibus-mozc/tool.png
+    install    -m 644 data/images/unix/ui-properties.png    $out/share/ibus-mozc/properties.png
+    install    -m 644 data/images/unix/ui-dictionary.png    $out/share/ibus-mozc/dictionary.png
+    install    -m 644 data/images/unix/ui-direct.png        $out/share/ibus-mozc/direct.png
+    install    -m 644 data/images/unix/ui-hiragana.png      $out/share/ibus-mozc/hiragana.png
+    install    -m 644 data/images/unix/ui-katakana_half.png $out/share/ibus-mozc/katakana_half.png
+    install    -m 644 data/images/unix/ui-katakana_full.png $out/share/ibus-mozc/katakana_full.png
+    install    -m 644 data/images/unix/ui-alpha_half.png    $out/share/ibus-mozc/alpha_half.png
+    install    -m 644 data/images/unix/ui-alpha_full.png    $out/share/ibus-mozc/alpha_full.png
+    install -D -m 755 out_linux/Release/mozc_renderer       $out/lib/mozc/mozc_renderer
+  '';
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-table-chinese/default.nix b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-table-chinese/default.nix
new file mode 100644
index 000000000000..b77394f218b8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-table-chinese/default.nix
@@ -0,0 +1,64 @@
+{ stdenv, fetchgit, fetchFromGitHub, pkgconfig,  ibus, ibus-table, python3, cmake }:
+
+let
+  src = fetchFromGitHub {
+    owner = "definite";
+    repo = "ibus-table-chinese";
+    rev = "f1f6a3384f021caa3b84c517e2495086f9c34507";
+    sha256 = "14wpw3pvyrrqvg7al37jk2dxqfj9r4zf88j8k2n2lmdc50f3xs7k";
+  };
+
+  cmakeFedoraSrc = fetchgit {
+    url = "https://pagure.io/cmake-fedora.git";
+    rev = "7d5297759aef4cd086bdfa30cf6d4b2ad9446992";
+    sha256 = "0mx9jvxpiva9v2ffaqlyny48iqr073h84yw8ln43z2avv11ipr7n";
+  };
+in stdenv.mkDerivation {
+  pname = "ibus-table-chinese";
+  version = "1.8.2";
+
+  srcs = [ src cmakeFedoraSrc ];
+  sourceRoot = src.name;
+
+  postUnpack = ''
+    chmod u+w -R ${cmakeFedoraSrc.name}
+    mv ${cmakeFedoraSrc.name}/* source/cmake-fedora
+  '';
+
+  preConfigure = ''
+    # cmake script needs ./Modules folder to link to cmake-fedora
+    ln -s cmake-fedora/Modules ./
+  '';
+
+  # Fails when writing to /prj_info.cmake in https://pagure.io/cmake-fedora/blob/master/f/Modules/ManageVersion.cmake
+  cmakeFlags = [ "-DPRJ_INFO_CMAKE_FILE=/dev/null" "-DPRJ_DOC_DIR=REPLACE" "-DDATA_DIR=share" ];
+  # Must replace PRJ_DOC_DIR with actual share/ folder for ibus-table-chinese
+  # Otherwise it tries to write to /ibus-table-chinese if not defined (!)
+  postConfigure = ''
+    substituteInPlace cmake_install.cmake --replace '/build/source/REPLACE' $out/share/ibus-table-chinese
+  '';
+  # Fails otherwise with "no such file or directory: <table>.txt"
+  dontUseCmakeBuildDir = true;
+  # Fails otherwise sometimes with
+  # FileExistsError: [Errno 17] File exists: '/build/tmp.BfVAUM4llr/ibus-table-chinese/.local/share/ibus-table'
+  enableParallelBuilding = false;
+
+  preBuild = ''
+    export HOME=$(mktemp -d)/ibus-table-chinese
+  '';
+
+  postFixup = ''
+    rm -rf $HOME
+  '';
+
+  buildInputs = [ pkgconfig ibus ibus-table python3 cmake ];
+
+  meta = with stdenv.lib; {
+    isIbusEngine = true;
+    description  = "Chinese tables for IBus-Table";
+    homepage     = https://github.com/definite/ibus-table-chinese;
+    license      = licenses.gpl3;
+    platforms    = platforms.linux;
+    maintainers  = with maintainers; [ pneumaticat ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-table-others/default.nix b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-table-others/default.nix
new file mode 100644
index 000000000000..b74378f07934
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-table-others/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl, ibus, ibus-table, pkgconfig, python3 }:
+
+stdenv.mkDerivation rec {
+  pname = "ibus-table-others";
+  version = "1.3.11";
+
+  src = fetchurl {
+    url = "https://github.com/moebiuscurve/ibus-table-others/releases/download/${version}/${pname}-${version}.tar.gz";
+    sha256 = "0763wnlklcs3d8fk21nkp7dgn4qzqgxh1s24q3kl8gzgng2a88jj";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ ibus ibus-table python3 ];
+
+  preBuild = ''
+    export HOME=$(mktemp -d)/ibus-table-others
+  '';
+
+  postFixup = ''
+    rm -rf $HOME
+  '';
+
+  meta = with stdenv.lib; {
+    isIbusEngine = true;
+    description  = "Various table-based input methods for IBus";
+    homepage     = "https://github.com/moebiuscurve/ibus-table-others";
+    license      = licenses.gpl3;
+    platforms    = platforms.linux;
+    maintainers  = with maintainers; [ mudri ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-table/default.nix b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-table/default.nix
new file mode 100644
index 000000000000..c95a9c1651c7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-table/default.nix
@@ -0,0 +1,63 @@
+{ stdenv, fetchFromGitHub
+, autoreconfHook, docbook2x, pkgconfig
+, gtk3, dconf, gobject-introspection
+, ibus, python3, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "ibus-table";
+  version = "1.9.21";
+
+  src = fetchFromGitHub {
+    owner  = "kaio";
+    repo   = "ibus-table";
+    rev    = version;
+    sha256 = "1rswbhbfvir443mw3p7xw6calkpfss4fcgn8nhfnrbin49q6w1vm";
+  };
+
+  postPatch = ''
+    # Data paths will be set at run-time.
+    sed -e "/export IBUS_TABLE_LIB_LOCATION=/ s/^.*$//" \
+        -e "/export IBUS_TABLE_LOCATION=/ s/^.*$//" \
+        -i "engine/ibus-engine-table.in"
+    sed -e "/export IBUS_TABLE_BIN_PATH=/ s/^.*$//" \
+        -e "/export IBUS_TABLE_DATA_DIR=/ s/^.*$//" \
+        -i "engine/ibus-table-createdb.in"
+    sed -e "/export IBUS_PREFIX=/ s/^.*$//" \
+        -e "/export IBUS_DATAROOTDIR=/ s/^.$//" \
+        -e "/export IBUS_LOCALEDIR=/ s/^.$//" \
+        -i "setup/ibus-setup-table.in"
+    substituteInPlace engine/tabcreatedb.py --replace '/usr/share/ibus-table' $out/share/ibus-table
+  '';
+
+  buildInputs = [
+    dconf
+    gtk3
+    ibus
+    (python3.withPackages (pypkgs: with pypkgs; [
+      pygobject3
+      (toPythonModule ibus)
+    ]))
+  ];
+
+  nativeBuildInputs = [
+    autoreconfHook
+    docbook2x
+    pkgconfig
+    gobject-introspection
+    wrapGAppsHook
+  ];
+
+  postUnpack = ''
+    substituteInPlace $sourceRoot/engine/Makefile.am \
+      --replace "docbook2man" "docbook2man --sgml"
+  '';
+
+  meta = with stdenv.lib; {
+    isIbusEngine = true;
+    description  = "An IBus framework for table-based input methods";
+    homepage     = https://github.com/kaio/ibus-table/wiki;
+    license      = licenses.lgpl21;
+    platforms    = platforms.linux;
+    maintainers  = with maintainers; [ mudri ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/default.nix b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/default.nix
new file mode 100644
index 000000000000..f1ca4226b477
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, python3, ibus, pkgconfig, gtk3, m17n_lib
+, wrapGAppsHook, gobject-introspection
+}:
+
+let
+
+  python = python3.withPackages (ps: with ps; [
+    pygobject3
+    dbus-python
+  ]);
+
+in
+
+stdenv.mkDerivation rec {
+  pname = "ibus-typing-booster";
+  version = "2.7.4";
+
+  src = fetchFromGitHub {
+    owner = "mike-fabian";
+    repo = "ibus-typing-booster";
+    rev = version;
+    sha256 = "0wp9y6cgxsb2z1hk899q7wybl7v49vkgx6x5zl4l706jm3w9qmg8";
+  };
+
+  patches = [ ./hunspell-dirs.patch ];
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig wrapGAppsHook gobject-introspection ];
+  buildInputs = [ python ibus gtk3 m17n_lib ];
+
+  preFixup = ''
+    gappsWrapperArgs+=(--prefix LD_LIBRARY_PATH : "${m17n_lib}/lib")
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://mike-fabian.github.io/ibus-typing-booster/;
+    license = licenses.gpl3Plus;
+    description = "A typing booster engine for the IBus platform";
+    maintainers = with maintainers; [ ];
+    isIbusEngine = true;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/hunspell-dirs.patch b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/hunspell-dirs.patch
new file mode 100644
index 000000000000..7b624b379a26
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/hunspell-dirs.patch
@@ -0,0 +1,31 @@
+diff --git a/engine/itb_util.py b/engine/itb_util.py
+index ded236a..633525a 100755
+--- a/engine/itb_util.py
++++ b/engine/itb_util.py
+@@ -1876,14 +1876,18 @@ def find_hunspell_dictionary(language):
+             If no dictionary can be found for the requested language,
+             the return value is ('', '').
+     '''
+-    dirnames = [
+-        '/usr/share/hunspell',
+-        '/usr/share/myspell',
+-        '/usr/share/myspell/dicts',
+-        '/usr/local/share/hunspell', # On FreeBSD the dictionaries are here
+-        '/usr/local/share/myspell',
+-        '/usr/local/share/myspell/dicts',
+-    ]
++
++    if "NIX_HUNSPELL_DIRS" in os.environ:
++        dirnames = os.environ["NIX_HUNSPELL_DIRS"].split(":")
++    else:       # fallback to the original behavior
++        dirnames = [
++            '/usr/share/hunspell',
++            '/usr/share/myspell',
++            '/usr/share/myspell/dicts',
++            '/usr/local/share/hunspell', # On FreeBSD the dictionaries are here
++            '/usr/local/share/myspell',
++            '/usr/local/share/myspell/dicts',
++        ]
+     dic_path = ''
+     aff_path = ''
+     for language in expand_languages([language]):
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/wrapper.nix b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/wrapper.nix
new file mode 100644
index 000000000000..56ddf93af45f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/wrapper.nix
@@ -0,0 +1,30 @@
+{ typing-booster, symlinkJoin, hunspellDicts, lib, makeWrapper
+, langs ? [ "de-de" "en-us" "es-es" "fr-moderne" "it-it" "sv-se" "sv-fi" ]
+}:
+
+let
+
+  hunspellDirs = with lib; makeSearchPath ":" (flatten (forEach langs (lang: [
+    "${hunspellDicts.${lang}}/share/hunspell"
+    "${hunspellDicts.${lang}}/share/myspell"
+    "${hunspellDicts.${lang}}/share/myspell/dicts"
+  ])));
+
+in
+
+symlinkJoin {
+  name = "${typing-booster.name}-with-hunspell";
+  paths = [ typing-booster ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  postBuild = ''
+    for i in bin/emoji-picker libexec/ibus-{setup,engine}-typing-booster; do
+      wrapProgram "$out/$i" \
+        --prefix NIX_HUNSPELL_DIRS : ${hunspellDirs}
+    done
+
+    sed -i -e "s,${typing-booster},$out," $out/share/ibus/component/typing-booster.xml
+  '';
+
+  inherit (typing-booster) meta;
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-uniemoji/allow-wrapping.patch b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-uniemoji/allow-wrapping.patch
new file mode 100644
index 000000000000..434c85d3dbea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-uniemoji/allow-wrapping.patch
@@ -0,0 +1,13 @@
+diff --git a/uniemoji.xml.in b/uniemoji.xml.in
+index 5fbfd0f..6fb8ad3 100644
+--- a/uniemoji.xml.in
++++ b/uniemoji.xml.in
+@@ -7,7 +7,7 @@
+     <license>GPL</license>
+     <author>Lalo Martins &lt;lalo.martins@gmail.com&gt;</author>
+     <homepage>https://github.com/salty-horse/ibus-uniemoji</homepage>
+-    <exec>@PYTHON@ @DATADIR@/ibus-uniemoji/uniemoji.py --ibus</exec>
++    <exec>@DATADIR@/ibus-uniemoji/uniemoji.py --ibus</exec>
+     <textdomain>uniemoji</textdomain>
+     <engines>
+         <engine>
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-uniemoji/default.nix b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-uniemoji/default.nix
new file mode 100644
index 000000000000..435d1154d4ad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus-engines/ibus-uniemoji/default.nix
@@ -0,0 +1,62 @@
+{ stdenv
+, fetchFromGitHub
+, gobject-introspection
+, wrapGAppsHook
+, python3
+, ibus
+}:
+
+let
+  python = python3.withPackages (ps: with ps; [
+    pygobject3
+    (toPythonModule ibus)
+    pyxdg
+    python-Levenshtein
+  ]);
+in stdenv.mkDerivation rec {
+  pname = "ibus-uniemoji";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "salty-horse";
+    repo = "ibus-uniemoji";
+    rev = "v${version}";
+    sha256 = "121zh3q0li1k537fcvbd4ns4jgl9bbb9gm9ihy8cfxgirv38lcfa";
+  };
+
+  patches = [
+    # Do not run wrapper script with Python,
+    # the wrapped script will have Python in shebang anyway.
+    ./allow-wrapping.patch
+  ];
+
+
+  nativeBuildInputs = [
+    wrapGAppsHook
+    gobject-introspection
+  ];
+
+  buildInputs = [
+    python
+    ibus
+  ];
+
+  makeFlags = [
+    "PREFIX=${placeholder ''out''}"
+    "SYSCONFDIR=${placeholder ''out''}/etc"
+    "PYTHON=${python.interpreter}"
+  ];
+
+  postFixup = ''
+    wrapGApp $out/share/ibus-uniemoji/uniemoji.py
+  '';
+
+  meta = with stdenv.lib; {
+    isIbusEngine = true;
+    description = "Input method (ibus) for entering unicode symbols and emoji by name";
+    homepage = "https://github.com/salty-horse/ibus-uniemoji";
+    license = with licenses; [ gpl3 mit ];
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ aske ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus/default.nix b/nixpkgs/pkgs/tools/inputmethods/ibus/default.nix
new file mode 100644
index 000000000000..4951074bc43a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus/default.nix
@@ -0,0 +1,164 @@
+{ stdenv
+, substituteAll
+, fetchurl
+, fetchFromGitHub
+, autoreconfHook
+, gettext
+, makeWrapper
+, pkgconfig
+, vala
+, wrapGAppsHook
+, dbus
+, dconf ? null
+, glib
+, gdk-pixbuf
+, gobject-introspection
+, gtk2
+, gtk3
+, gtk-doc
+, isocodes
+, cldr-emoji-annotation
+, unicode-character-database
+, unicode-emoji
+, python3
+, json-glib
+, libnotify ? null
+, enablePython2Library ? false
+, enableUI ? true
+, withWayland ? false
+, libxkbcommon ? null
+, wayland ? null
+, buildPackages
+, runtimeShell
+, nixosTests
+}:
+
+assert withWayland -> wayland != null && libxkbcommon != null;
+
+with stdenv.lib;
+
+let
+  python3Runtime = python3.withPackages (ps: with ps; [ pygobject3 ]);
+  python3BuildEnv = python3.buildEnv.override {
+    # ImportError: No module named site
+    postBuild = ''
+      makeWrapper ${glib.dev}/bin/gdbus-codegen $out/bin/gdbus-codegen --unset PYTHONPATH
+      makeWrapper ${glib.dev}/bin/glib-genmarshal $out/bin/glib-genmarshal --unset PYTHONPATH
+      makeWrapper ${glib.dev}/bin/glib-mkenums $out/bin/glib-mkenums --unset PYTHONPATH
+    '';
+  };
+in
+
+stdenv.mkDerivation rec {
+  pname = "ibus";
+  version = "1.5.21";
+
+  src = fetchFromGitHub {
+    owner = "ibus";
+    repo = "ibus";
+    rev = version;
+    sha256 = "0fjbqj7d2g5c8i1wdggzhz269xisxv4xb1pa9swalm5p2b2vrjlx";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      pythonInterpreter = python3Runtime.interpreter;
+      pythonSitePackages = python3.sitePackages;
+    })
+  ];
+
+  outputs = [ "out" "dev" "installedTests" ];
+
+  postPatch = ''
+    echo \#!${runtimeShell} > data/dconf/make-dconf-override-db.sh
+    cp ${buildPackages.gtk-doc}/share/gtk-doc/data/gtk-doc.make .
+  '';
+
+  preAutoreconf = "touch ChangeLog";
+
+  configureFlags = [
+    "--disable-memconf"
+    (enableFeature (dconf != null) "dconf")
+    (enableFeature (libnotify != null) "libnotify")
+    (enableFeature withWayland "wayland")
+    (enableFeature enablePython2Library "python-library")
+    (enableFeature enablePython2Library "python2") # XXX: python2 library does not work anyway
+    (enableFeature enableUI "ui")
+    "--enable-install-tests"
+    "--with-unicode-emoji-dir=${unicode-emoji}/share/unicode/emoji"
+    "--with-emoji-annotation-dir=${cldr-emoji-annotation}/share/unicode/cldr/common/annotations"
+    "--with-ucd-dir=${unicode-character-database}/share/unicode"
+  ];
+
+  makeFlags = [
+    "test_execsdir=${placeholder ''installedTests''}/libexec/installed-tests/ibus"
+    "test_sourcesdir=${placeholder ''installedTests''}/share/installed-tests/ibus"
+  ];
+
+  nativeBuildInputs = [
+    autoreconfHook
+    gtk-doc
+    gettext
+    makeWrapper
+    pkgconfig
+    python3BuildEnv
+    vala
+    wrapGAppsHook
+  ];
+
+  propagatedBuildInputs = [
+    glib
+  ];
+
+  buildInputs = [
+    dbus
+    dconf
+    gdk-pixbuf
+    gobject-introspection
+    python3.pkgs.pygobject3 # for pygobject overrides
+    gtk2
+    gtk3
+    isocodes
+    json-glib
+    libnotify
+  ] ++ optionals withWayland [
+    libxkbcommon
+    wayland
+  ];
+
+  enableParallelBuilding = true;
+
+  doCheck = false; # requires X11 daemon
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/ibus version
+  '';
+
+  postInstall = ''
+    # It has some hardcoded FHS paths and also we do not use it
+    # since we set up the environment in NixOS tests anyway.
+    moveToOutput "bin/ibus-desktop-testing-runner" "$installedTests"
+  '';
+
+  postFixup = ''
+    # set necessary environment also for tests
+    for f in $installedTests/libexec/installed-tests/ibus/*; do
+        wrapGApp $f
+    done
+  '';
+
+  passthru = {
+    tests = {
+      installed-tests = nixosTests.installed-tests.ibus;
+    };
+  };
+
+  meta = {
+    homepage = "https://github.com/ibus/ibus";
+    description = "Intelligent Input Bus, input method framework";
+    license = licenses.lgpl21Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ttuegel yegortimoshenko ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus/fix-paths.patch b/nixpkgs/pkgs/tools/inputmethods/ibus/fix-paths.patch
new file mode 100644
index 000000000000..60269c6c2418
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus/fix-paths.patch
@@ -0,0 +1,45 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -429,11 +429,11 @@
+ if test "x$enable_pygobject" = "xyes"; then
+     PKG_CHECK_MODULES(PYTHON, [pygobject-3.0 >= $PYGOBJECT_REQUIRED])
+ 
+-    pyoverridesdir=`$PYTHON -c "import gi; print(gi._overridesdir)"`
++    pyoverridesdir="$prefix/@pythonSitePackages@/gi/overrides"
+     AC_SUBST(pyoverridesdir)
+ 
+     if test x"$enable_python2" = x"yes"; then
+-        py2overridesdir=`$PYTHON2 -c "import gi; print(gi._overridesdir)"`
++        py2overridesdir="$prefix/@pythonSitePackages@/gi/overrides"
+         AC_SUBST(py2overridesdir)
+     fi
+ fi
+@@ -462,7 +462,7 @@
+     PYTHON2_VERSION=`$PYTHON2 -c "import sys; sys.stdout.write(sys.version[[:3]])"`
+     PYTHON2_LIBDIR="$PYTHON2_PREFIX/lib/python$PYTHON2_VERSION"
+     python2dir="$PYTHON2_LIBDIR/site-packages"
+-    pkgpython2dir="$python2dir/ibus"
++    pkgpython2dir="$prefix/@pythonSitePackages@/ibus"
+     AC_SUBST(pkgpython2dir)
+ else
+     enable_python_library="no (disabled, use --enable-python-library to enable)"
+--- a/data/dconf/Makefile.am
++++ b/data/dconf/Makefile.am
+@@ -50,7 +50,7 @@
+ 
+ install-data-hook:
+ 	if test -z "$(DESTDIR)"; then \
+-	    dconf update; \
++	    true; \
+ 	fi
+ 
+ EXTRA_DIST = \
+--- a/setup/ibus-setup.in
++++ b/setup/ibus-setup.in
+@@ -27,5 +27,5 @@
+ export IBUS_DATAROOTDIR=@datarootdir@
+ export IBUS_LOCALEDIR=@localedir@
+ export IBUS_LIBEXECDIR=${libexecdir}
+-exec ${PYTHON:-@PYTHON@} @prefix@/share/ibus/setup/main.py $@
++exec @pythonInterpreter@ @prefix@/share/ibus/setup/main.py $@
+ 
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus/ibus-qt.nix b/nixpkgs/pkgs/tools/inputmethods/ibus/ibus-qt.nix
new file mode 100644
index 000000000000..85fccc46de08
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus/ibus-qt.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, ibus, cmake, pkgconfig, qt4, icu, doxygen }:
+
+stdenv.mkDerivation rec {
+  pname = "ibus-qt";
+  version = "1.3.3";
+
+  src = fetchurl {
+    url = "https://github.com/ibus/ibus-qt/releases/download/${version}/${pname}-${version}-Source.tar.gz";
+    sha256 = "1q9g7qghpcf07valc2ni7yf994xqx2pmdffknj7scxfidav6p19g";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [
+    ibus cmake qt4 icu doxygen
+  ];
+
+  cmakeFlags = [ "-DQT_PLUGINS_DIR=lib/qt4/plugins" ];
+
+  meta = with stdenv.lib; {
+    homepage    = https://github.com/ibus/ibus-qt/;
+    description = "Qt4 interface to the ibus input method";
+    platforms   = platforms.linux;
+    license     = licenses.gpl2Plus;
+    maintainers = with maintainers; [ gebner ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/ibus/wrapper.nix b/nixpkgs/pkgs/tools/inputmethods/ibus/wrapper.nix
new file mode 100644
index 000000000000..1b14629d2830
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/ibus/wrapper.nix
@@ -0,0 +1,64 @@
+{ stdenv, runCommand, makeWrapper, lndir
+, dconf, hicolor-icon-theme, ibus, librsvg, plugins ? []
+}:
+
+let
+  name = "ibus-with-plugins-" + stdenv.lib.getVersion ibus;
+  env = {
+    buildInputs = [ ibus ] ++ plugins;
+    nativeBuildInputs = [ lndir makeWrapper ];
+    propagatedUserEnvPackages = [ hicolor-icon-theme ];
+    paths = [ ibus ] ++ plugins;
+    inherit (ibus) meta;
+  };
+  command = ''
+    for dir in bin etc lib libexec share; do
+        mkdir -p "$out/$dir"
+        for pkg in $paths; do
+            if [ -d "$pkg/$dir" ]; then
+                lndir -silent "$pkg/$dir" "$out/$dir"
+            fi
+        done
+    done
+
+    for prog in ibus; do
+        wrapProgram "$out/bin/$prog" \
+          --set GDK_PIXBUF_MODULE_FILE ${librsvg.out}/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache \
+          --prefix GI_TYPELIB_PATH : "$GI_TYPELIB_PATH:$out/lib/girepository-1.0" \
+          --prefix GIO_EXTRA_MODULES : "${stdenv.lib.getLib dconf}/lib/gio/modules" \
+          --set IBUS_COMPONENT_PATH "$out/share/ibus/component/" \
+          --set IBUS_DATAROOTDIR "$out/share" \
+          --set IBUS_LIBEXECDIR "$out/libexec" \
+          --set IBUS_LOCALEDIR "$out/share/locale" \
+          --set IBUS_PREFIX "$out" \
+          --set IBUS_TABLE_BIN_PATH "$out/bin" \
+          --set IBUS_TABLE_DATA_DIR "$out/share" \
+          --set IBUS_TABLE_LIB_LOCATION "$out/libexec" \
+          --set IBUS_TABLE_LOCATION "$out/share/ibus-table" \
+          --prefix PYTHONPATH : "$PYTHONPATH" \
+          --prefix XDG_DATA_DIRS : "$out/share:$GSETTINGS_SCHEMAS_PATH" \
+          --suffix XDG_DATA_DIRS : "${hicolor-icon-theme}/share"
+    done
+
+    for prog in ibus-daemon; do
+        wrapProgram "$out/bin/$prog" \
+          --set GDK_PIXBUF_MODULE_FILE ${librsvg.out}/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache \
+          --prefix GI_TYPELIB_PATH : "$GI_TYPELIB_PATH:$out/lib/girepository-1.0" \
+          --prefix GIO_EXTRA_MODULES : "${stdenv.lib.getLib dconf}/lib/gio/modules" \
+          --set IBUS_COMPONENT_PATH "$out/share/ibus/component/" \
+          --set IBUS_DATAROOTDIR "$out/share" \
+          --set IBUS_LIBEXECDIR "$out/libexec" \
+          --set IBUS_LOCALEDIR "$out/share/locale" \
+          --set IBUS_PREFIX "$out" \
+          --set IBUS_TABLE_BIN_PATH "$out/bin" \
+          --set IBUS_TABLE_DATA_DIR "$out/share" \
+          --set IBUS_TABLE_LIB_LOCATION "$out/libexec" \
+          --set IBUS_TABLE_LOCATION "$out/share/ibus-table" \
+          --prefix PYTHONPATH : "$PYTHONPATH" \
+          --prefix XDG_DATA_DIRS : "$out/share:$GSETTINGS_SCHEMAS_PATH" \
+          --suffix XDG_DATA_DIRS : "${hicolor-icon-theme}/share" \
+          --add-flags "--cache=refresh"
+    done
+  '';
+in
+  runCommand name env command
diff --git a/nixpkgs/pkgs/tools/inputmethods/interception-tools/caps2esc.nix b/nixpkgs/pkgs/tools/inputmethods/interception-tools/caps2esc.nix
new file mode 100644
index 000000000000..994e9da3e430
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/interception-tools/caps2esc.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchurl, cmake }:
+
+let
+  version = "0.1.0";
+  pname = "interception-tools-caps2esc";
+in stdenv.mkDerivation {
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "https://gitlab.com/interception/linux/plugins/caps2esc/repository/v${version}/archive.tar.gz";
+    sha256 = "1fdxqp54gwsrm2c63168l256nfwdk4mvgr7nlwdv62wd3l7zzrg8";
+  };
+
+  buildInputs = [ cmake ];
+
+  meta = with stdenv.lib; {
+    homepage = "https://gitlab.com/interception/linux/plugins/caps2esc";
+    description = "Transforming the most useless key ever into the most useful one";
+    license = licenses.mit;
+    maintainers = [ maintainers.vyp ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/interception-tools/default.nix b/nixpkgs/pkgs/tools/inputmethods/interception-tools/default.nix
new file mode 100644
index 000000000000..a6aed47d964c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/interception-tools/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl, pkgconfig, cmake, libyamlcpp,
+  libevdev, udev }:
+
+let
+  version = "0.1.1";
+  baseName = "interception-tools";
+in stdenv.mkDerivation {
+  name = "${baseName}-${version}";
+
+  src = fetchurl {
+    url = "https://gitlab.com/interception/linux/tools/repository/v${version}/archive.tar.gz";
+    sha256 = "14g4pphvylqdb922va322z1pbp12ap753hcf7zf9sii1ikvif83j";
+  };
+
+  nativeBuildInputs = [ cmake pkgconfig ];
+  buildInputs = [ libevdev udev libyamlcpp ];
+
+  prePatch = ''
+    substituteInPlace CMakeLists.txt --replace \
+      '"/usr/include/libevdev-1.0"' \
+      "\"$(pkg-config --cflags libevdev | cut -c 3-)\""
+  '';
+
+  patches = [ ./fix-udevmon-configuration-job-path.patch ];
+
+  meta = {
+    description = "A minimal composable infrastructure on top of libudev and libevdev";
+    homepage = "https://gitlab.com/interception/linux/tools";
+    license = stdenv.lib.licenses.gpl3;
+    maintainers = [ stdenv.lib.maintainers.vyp ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/interception-tools/fix-udevmon-configuration-job-path.patch b/nixpkgs/pkgs/tools/inputmethods/interception-tools/fix-udevmon-configuration-job-path.patch
new file mode 100644
index 000000000000..469c96647d69
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/interception-tools/fix-udevmon-configuration-job-path.patch
@@ -0,0 +1,32 @@
+From d3a5d661b80f3597368f517ebaeddfdfaafc1bf2 Mon Sep 17 00:00:00 2001
+From: xd1le <elisp.vim@gmail.com>
+Date: Mon, 28 Aug 2017 00:19:09 +1000
+Subject: [PATCH] fix udevmon configuration job path
+
+For some reason, the udevmon job $PATH seems to be empty (or otherwise
+seems to point to `/no-such-path`). This commit fixes that by setting
+its $PATH to the same $PATH that the parent udevmon process has.
+---
+ udevmon.cpp | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/udevmon.cpp b/udevmon.cpp
+index ebdd909..b523efd 100644
+--- a/udevmon.cpp
++++ b/udevmon.cpp
+@@ -237,8 +237,11 @@ private:
+             case 0: {
+                 char *command[] = {(char *)"sh", (char *)"-c",
+                                    (char *)job.c_str(), nullptr};
++                std::string path = getenv("PATH");
+                 std::string variables = "DEVNODE=" + devnode;
+-                char *environment[]   = {(char *)variables.c_str(), nullptr};
++                std::string pathenv = "PATH=" + path;
++                char *environment[] = {(char *)variables.c_str(),
++                                       (char *)pathenv.c_str(), nullptr};
+                 execvpe(command[0], command, environment);
+                 std::fprintf(stderr,
+                              R"(exec failed for devnode %s, job "%s" )"
+-- 
+2.14.1
+
diff --git a/nixpkgs/pkgs/tools/inputmethods/keyfuzz/default.nix b/nixpkgs/pkgs/tools/inputmethods/keyfuzz/default.nix
new file mode 100644
index 000000000000..a2f01c7367c8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/keyfuzz/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation {
+  pname = "keyfuzz";
+  version = "0.2";
+
+  meta = with stdenv.lib; {
+    description = "Manipulate the scancode/keycode translation tables of keyboard drivers.";
+    homepage    = http://0pointer.de/lennart/projects/keyfuzz/;
+    license     = licenses.gpl2Plus;
+    platforms   = platforms.linux;
+    maintainers = with maintainers; [ mboes ];
+  };
+
+  src = fetchurl {
+    url = "http://0pointer.de/lennart/projects/keyfuzz/keyfuzz-0.2.tar.gz";
+    sha256 = "0xv9ymivp8fnyc5xcyh1vamxnx90bzw66wlld813fvm6q2gsiknk";
+  };
+
+  configureFlags = [ "--without-initdir" "--disable-lynx" ];
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/libinput-gestures/0001-hardcode-name.patch b/nixpkgs/pkgs/tools/inputmethods/libinput-gestures/0001-hardcode-name.patch
new file mode 100644
index 000000000000..4655879149d2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/libinput-gestures/0001-hardcode-name.patch
@@ -0,0 +1,13 @@
+diff --git a/libinput-gestures b/libinput-gestures
+index 66479b6..aca94ac 100755
+--- a/libinput-gestures
++++ b/libinput-gestures
+@@ -6,7 +6,7 @@ from collections import OrderedDict
+ from pathlib import Path
+ from distutils.version import LooseVersion as Version
+ 
+-PROG = Path(sys.argv[0]).stem
++PROG = "libinput-gestures"
+ 
+ # Conf file containing gesture commands.
+ # Search first for user file then system file.
diff --git a/nixpkgs/pkgs/tools/inputmethods/libinput-gestures/0002-paths.patch b/nixpkgs/pkgs/tools/inputmethods/libinput-gestures/0002-paths.patch
new file mode 100644
index 000000000000..407450c8bccd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/libinput-gestures/0002-paths.patch
@@ -0,0 +1,45 @@
+diff --git a/libinput-gestures b/libinput-gestures
+index aca94ac..c2f03ca 100755
+--- a/libinput-gestures
++++ b/libinput-gestures
+@@ -77,7 +77,7 @@ def get_libinput_vers():
+     'Return the libinput installed version number string'
+     # Try to use newer libinput interface then fall back to old
+     # (depreciated) interface.
+-    res = run(('libinput', '--version'), check=False)
++    res = run(('@libinput@', '--version'), check=False)
+     return res.strip() if res else \
+             run(('libinput-list-devices', '--version'), check=False)
+ 
+@@ -87,8 +87,8 @@ if not libvers:
+     sys.exit('libinput helper tools do not seem to be installed?')
+ 
+ if Version(libvers) >= Version('1.8'):
+-    cmd_debug_events = 'libinput debug-events'
+-    cmd_list_devices = 'libinput list-devices'
++    cmd_debug_events = '@libinput@ debug-events'
++    cmd_list_devices = '@libinput@ list-devices'
+ else:
+     cmd_debug_events = 'libinput-debug-events'
+     cmd_list_devices = 'libinput-list-devices'
+@@ -199,7 +199,7 @@ class COMMAND_internal(COMMAND):
+ 
+     def run(self):
+         'Get list of current workspaces and select next one'
+-        stdout = run(('wmctrl', '-d'), check=False)
++        stdout = run(('@wmctrl@', '-d'), check=False)
+         if not stdout:
+             # This command can fail on GNOME when you have only a single
+             # dynamic workspace using Xorg (probably a GNOME bug) so let's
+@@ -233,7 +233,7 @@ class COMMAND_internal(COMMAND):
+ 
+         # Switch to desired workspace
+         if index >= minindex and index < maxindex:
+-            run(('wmctrl', '-s', str(index)))
++            run(('@wmctrl@', '-s', str(index)))
+ 
+ # Table of gesture handlers
+ handlers = OrderedDict()
+-- 
+2.19.1
+
diff --git a/nixpkgs/pkgs/tools/inputmethods/libinput-gestures/default.nix b/nixpkgs/pkgs/tools/inputmethods/libinput-gestures/default.nix
new file mode 100644
index 000000000000..2764d2fee729
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/libinput-gestures/default.nix
@@ -0,0 +1,54 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper,
+  libinput, wmctrl, python3,
+  coreutils, xdotool ? null,
+  extraUtilsPath ? lib.optional (xdotool != null) xdotool
+}:
+stdenv.mkDerivation rec {
+  pname = "libinput-gestures";
+  version = "2.39";
+
+  src = fetchFromGitHub {
+    owner = "bulletmark";
+    repo = "libinput-gestures";
+    rev = version;
+    sha256 = "0bzyi55yhr9wyar9mnd09cr6pi88jkkp0f9lndm0a9jwi1xr4bdf";
+  };
+  patches = [
+    ./0001-hardcode-name.patch
+    ./0002-paths.patch
+  ];
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ python3 ];
+
+  postPatch =
+    ''
+      substituteInPlace libinput-gestures-setup --replace /usr/ /
+
+      substituteInPlace libinput-gestures \
+        --replace      /etc     "$out/etc" \
+        --subst-var-by libinput "${libinput}/bin/libinput" \
+        --subst-var-by wmctrl   "${wmctrl}/bin/wmctrl"
+    '';
+  installPhase =
+    ''
+      runHook preInstall
+      ${stdenv.shell} libinput-gestures-setup -d "$out" install
+      runHook postInstall
+    '';
+  postFixup =
+    ''
+      rm "$out/bin/libinput-gestures-setup"
+      substituteInPlace "$out/share/applications/libinput-gestures.desktop" --replace "/usr" "$out"
+      chmod +x "$out/share/applications/libinput-gestures.desktop"
+      wrapProgram "$out/bin/libinput-gestures" --prefix PATH : "${lib.makeBinPath ([coreutils] ++ extraUtilsPath)}"
+    '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/bulletmark/libinput-gestures;
+    description = "Gesture mapper for libinput";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ teozkr ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/libkkc/default.nix b/nixpkgs/pkgs/tools/inputmethods/libkkc/default.nix
new file mode 100644
index 000000000000..68889d45df04
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/libkkc/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchurl
+, vala, gobject-introspection, intltool, python2Packages, glib
+, pkgconfig
+, libgee, json-glib, marisa, libkkc-data
+}:
+
+stdenv.mkDerivation rec {
+  pname = "libkkc";
+  version = "0.3.5";
+
+  src = fetchurl {
+    url = "${meta.homepage}/releases/download/v${version}/${pname}-${version}.tar.gz";
+    sha256 = "89b07b042dae5726d306aaa1296d1695cb75c4516f4b4879bc3781fe52f62aef";
+  };
+
+  nativeBuildInputs = [
+    vala gobject-introspection
+    python2Packages.python python2Packages.marisa
+    intltool glib pkgconfig
+  ];
+
+  buildInputs = [ marisa libkkc-data ];
+  enableParallelBuilding = true;
+
+  propagatedBuildInputs = [ libgee json-glib ];
+
+  postInstall = ''
+    ln -s ${libkkc-data}/lib/libkkc/models $out/share/libkkc/models
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Japanese Kana Kanji conversion input method library";
+    homepage    = https://github.com/ueno/libkkc;
+    license     = licenses.gpl3Plus;
+    maintainers = with maintainers; [ vanzef ];
+    platforms   = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/m17n-db/default.nix b/nixpkgs/pkgs/tools/inputmethods/m17n-db/default.nix
new file mode 100644
index 000000000000..8732d1a816d1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/m17n-db/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, gettext }:
+
+stdenv.mkDerivation rec {
+  name = "m17n-db-1.8.0";
+
+  src = fetchurl {
+    url = "https://download.savannah.gnu.org/releases/m17n/${name}.tar.gz";
+    sha256 = "0vfw7z9i2s9np6nmx1d4dlsywm044rkaqarn7akffmb6bf1j6zv5";
+  };
+
+  buildInputs = [ gettext ];
+
+  configureFlags = stdenv.lib.optional (stdenv ? glibc)
+    "--with-charmaps=${stdenv.glibc.out}/share/i18n/charmaps"
+  ;
+
+  meta = {
+    homepage = https://www.nongnu.org/m17n/;
+    description = "Multilingual text processing library (database)";
+    license = stdenv.lib.licenses.lgpl21Plus;
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = with stdenv.lib.maintainers; [ astsmtl ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/m17n-lib/default.nix b/nixpkgs/pkgs/tools/inputmethods/m17n-lib/default.nix
new file mode 100644
index 000000000000..baf57ed90498
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/m17n-lib/default.nix
@@ -0,0 +1,19 @@
+{stdenv, fetchurl, m17n_db}:
+stdenv.mkDerivation rec {
+  name = "m17n-lib-1.8.0";
+
+  src = fetchurl {
+    url = "https://download.savannah.gnu.org/releases/m17n/${name}.tar.gz";
+    sha256 = "0jp61y09xqj10mclpip48qlfhniw8gwy8b28cbzxy8hq8pkwmfkq";
+  };
+
+  buildInputs = [ m17n_db ];
+
+  meta = {
+    homepage = https://www.nongnu.org/m17n/;
+    description = "Multilingual text processing library (runtime)";
+    license = stdenv.lib.licenses.lgpl21Plus;
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = with stdenv.lib.maintainers; [ astsmtl ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/m17n-lib/otf.nix b/nixpkgs/pkgs/tools/inputmethods/m17n-lib/otf.nix
new file mode 100644
index 000000000000..a69f46e9678c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/m17n-lib/otf.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, libXaw, freetype }:
+
+stdenv.mkDerivation rec {
+  name = "libotf-0.9.16";
+
+  src = fetchurl {
+    url = "https://download.savannah.gnu.org/releases/m17n/${name}.tar.gz";
+    sha256 = "0sq6g3xaxw388akws6qrllp3kp2sxgk2dv4j79k6mm52rnihrnv8";
+  };
+
+  outputs = [ "out" "dev" ];
+
+  buildInputs = [ libXaw freetype ];
+
+  postInstall =
+    ''
+      mkdir -p $dev/bin
+      mv $out/bin/libotf-config $dev/bin/
+    '';
+
+  meta = {
+    homepage = https://www.nongnu.org/m17n/;
+    description = "Multilingual text processing library (libotf)";
+    license = stdenv.lib.licenses.lgpl21Plus;
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = with stdenv.lib.maintainers; [ bendlas ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/nabi/default.nix b/nixpkgs/pkgs/tools/inputmethods/nabi/default.nix
new file mode 100644
index 000000000000..b93c59d9789b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/nabi/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchurl, pkgconfig, gtk2, libhangul }:
+
+stdenv.mkDerivation {
+  name = "nabi-1.0.0";
+
+  src = fetchurl {
+    url = "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/nabi/nabi-1.0.0.tar.gz";
+    sha256 = "0craa24pw7b70sh253arv9bg9sy4q3mhsjwfss3bnv5nf0xwnncw";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ gtk2 libhangul ];
+
+  meta = with stdenv.lib; {
+    description = "The Easy Hangul XIM";
+    homepage = https://github.com/choehwanjin/nabi;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.ianwookim ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/skk/skk-dicts/default.nix b/nixpkgs/pkgs/tools/inputmethods/skk/skk-dicts/default.nix
new file mode 100644
index 000000000000..2f8425bd8b54
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/skk/skk-dicts/default.nix
@@ -0,0 +1,73 @@
+{ stdenv, fetchurl, skktools }:
+
+let
+  # kana to kanji
+  small = fetchurl {
+    url = "https://raw.githubusercontent.com/skk-dev/dict/f61be71246602a49e9f05ded6ac4f9f82031a521/SKK-JISYO.S";
+    sha256 = "15kp4iwz58fp1zg0i13x7w9wwm15v8n2hhm0nf2zsl7az5mn5yi4";
+  };
+  medium = fetchurl {
+    url = "https://raw.githubusercontent.com/skk-dev/dict/f61be71246602a49e9f05ded6ac4f9f82031a521/SKK-JISYO.M";
+    sha256 = "1vhagixhrp9lq5x7dldxcanhznawazp00xivpp1z52kx10lnkmv0";
+  };
+  large = fetchurl {
+    url = "https://raw.githubusercontent.com/skk-dev/dict/f61be71246602a49e9f05ded6ac4f9f82031a521/SKK-JISYO.L";
+    sha256 = "07cv0j95iajkr48j4ln411vnhl3z93yx96zjc03bgs10dbpagaaz";
+  };
+
+  # english to japanese
+  edict = fetchurl {
+    url = "https://raw.githubusercontent.com/skk-dev/dict/f61be71246602a49e9f05ded6ac4f9f82031a521/SKK-JISYO.edict";
+    sha256 = "18k8z1wkgwgfwbs6sylf39h1nc1p5l2b00h7mfjlb8p91plkb45w";
+  };
+  # misc
+  assoc = fetchurl {
+    url = "https://raw.githubusercontent.com/skk-dev/dict/f61be71246602a49e9f05ded6ac4f9f82031a521/SKK-JISYO.assoc";
+    sha256 = "12d6xpp1bfin9nwl35ydl5yc6vx0qpwhxss0khi19n1nsbyqnixm";
+  };
+in
+
+stdenv.mkDerivation {
+  pname = "skk-dicts-unstable";
+  version = "2017-10-26";
+  srcs = [ small medium large edict assoc ];
+  nativeBuildInputs = [ skktools ];
+
+  phases = [ "installPhase" ];
+  installPhase = ''
+    function dictname() {
+      src=$1
+      name=$(basename $src)          # remove dir name
+      dict=$(echo $name | cut -b34-) # remove sha256 prefix
+      echo $dict
+    }
+    mkdir -p $out/share
+
+    for src in $srcs; do
+      dst=$out/share/$(dictname $src)
+      echo ";;; -*- coding: utf-8 -*-" > $dst  # libskk requires this on the first line
+      iconv -f EUC-JP -t UTF-8 $src |\
+        ${skktools}/bin/skkdic-expr2 >> $dst
+    done
+
+    # combine .L .edict and .assoc for convenience
+    dst=$out/share/SKK-JISYO.combined
+    echo ";;; -*- coding: utf-8 -*-" > $dst
+    ${skktools}/bin/skkdic-expr2 \
+      $out/share/$(dictname ${large}) + \
+      $out/share/$(dictname ${edict}) + \
+      $out/share/$(dictname ${assoc}) >> $dst
+  '';
+
+  meta = {
+    description = "A collection of standard SKK dictionaries";
+    longDescription = ''
+      This package provides a collection of standard kana-to-kanji
+      dictionaries for the SKK Japanese input method.
+    '';
+    homepage = https://github.com/skk-dev/dict;
+    license = stdenv.lib.licenses.gpl2Plus;
+    maintainers = with stdenv.lib.maintainers; [ yuriaisaka ];
+    platforms = with stdenv.lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/skk/skktools/default.nix b/nixpkgs/pkgs/tools/inputmethods/skk/skktools/default.nix
new file mode 100644
index 000000000000..19d871bc77fc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/skk/skktools/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, fetchFromGitHub, pkgconfig, gdbm, glib }:
+
+# Note (2017-10-24, yuriaisaka):
+# - Version 1.3.3 dates from Jul. 19, 2013.
+# - The latest commit to the github repo dates from Mar. 05, 2017
+# - The repo since appears to have become a kitchen sink place to keep
+#   misc tools to handle SKK dictionaries, and these tools have runtime
+#   dependencies on a Ruby interpreter etc.
+# - We for the moment do not package them to keep the dependencies slim.
+#   Probably, shall package the newer tools as skktools-extra in the future.
+stdenv.mkDerivation {
+  pname = "skktools";
+  version = "1.3.3";
+  src = fetchFromGitHub {
+    owner = "skk-dev";
+    repo = "skktools";
+    rev = "c8816fe720604d4fd79f3552e99e0430ca6f2769";
+    sha256 = "11v1i5gkxvfsipigc1w1m16ijzh85drpl694kg6ih4jfam1q4vdh";
+  };
+  # # See "12.2. Package naming"
+  # name = "skktools-unstable-${version}";
+  # version = "2017-03-05";
+  # src = fetchFromGitHub {
+  #   owner = "skk-dev";
+  #   repo = "skktools";
+  #   rev = "e14d98e734d2fdff611385c7df65826e94d929db";
+  #   sha256 = "1k9zxqybl1l5h0a8px2awc920qrdyp1qls50h3kfrj3g65d08aq2";
+  # };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ gdbm glib ];
+
+  meta = {
+    description = "A collection of tools to edit SKK dictionaries";
+    longDescription = ''
+      This package provides a collection of tools to manipulate
+      (merge, sort etc.) the dictionaries formatted for SKK Japanese
+      input method.
+    '';
+    homepage = https://github.com/skk-dev/skktools;
+    license = stdenv.lib.licenses.gpl2Plus;
+    maintainers = with stdenv.lib.maintainers; [ yuriaisaka ];
+    platforms = with stdenv.lib.platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/tegaki-zinnia-japanese/default.nix b/nixpkgs/pkgs/tools/inputmethods/tegaki-zinnia-japanese/default.nix
new file mode 100644
index 000000000000..afacc302eda1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/tegaki-zinnia-japanese/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchurl, unzip }:
+
+stdenv.mkDerivation {
+  pname = "tegaki-zinnia-japanese";
+  version = "0.3";
+
+  src = fetchurl {
+    url = "http://www.tegaki.org/releases/0.3/models/tegaki-zinnia-japanese-0.3.zip";
+    sha256 = "1nmg9acxhcqly9gwkyb9m0hpy76fll91ywk4b1q4xms0ajxip1h7";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Japanese handwriting model for the Zinnia engine";
+    homepage = http://tegaki.org/;
+    license = licenses.lgpl21;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.gebner ];
+  };
+
+  buildInputs = [ unzip ];
+
+  makeFlags = [ "installpath=$(out)/share/tegaki/models/zinnia/" ];
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/touchegg/default.nix b/nixpkgs/pkgs/tools/inputmethods/touchegg/default.nix
new file mode 100644
index 000000000000..c915e8128913
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/touchegg/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, xorg, xorgserver, qt4, libGLU, libGL, geis, qmake4Hook }:
+
+stdenv.mkDerivation rec {
+  pname = "touchegg";
+  version = "1.1.1";
+  src = fetchurl {
+    url = "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/touchegg/${pname}-${version}.tar.gz";
+    sha256 = "95734815c7219d9a71282f3144b3526f2542b4fa270a8e69d644722d024b4038";
+  };
+
+  buildInputs = [ xorgserver libGLU libGL xorg.libX11 xorg.libXtst xorg.libXext qt4 geis ];
+
+  nativeBuildInputs = [ qmake4Hook ];
+
+  preConfigure = ''
+    sed -e "s@/usr/@$out/@g" -i $(find . -name touchegg.pro)
+    sed -e "s@/usr/@$out/@g" -i $(find ./src/touchegg/config/ -name Config.cpp)
+  '';
+
+  meta = {
+    homepage = https://github.com/JoseExposito/touchegg;
+    description = "Macro binding for touch surfaces";
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/triggerhappy/default.nix b/nixpkgs/pkgs/tools/inputmethods/triggerhappy/default.nix
new file mode 100644
index 000000000000..a9e106f2c720
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/triggerhappy/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromGitHub, pkgconfig, perl, systemd }:
+
+stdenv.mkDerivation rec {
+  pname = "triggerhappy";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "wertarbyte";
+    repo = "triggerhappy";
+    rev = "release/${version}";
+    sha256 = "0gb1qhrxwq7i5abd408d01a2dpf28nr1fph1fg7w7n0i5i1nnk90";
+  };
+
+  nativeBuildInputs = [ pkgconfig perl ];
+  buildInputs = [ systemd ];
+
+  makeFlags = [ "PREFIX=$(out)" "BINDIR=$(out)/bin" ];
+
+  postInstall = ''
+    install -D -m 644 -t "$out/etc/triggerhappy/triggers.d" "triggerhappy.conf.examples"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A lightweight hotkey daemon";
+    longDescription = ''
+      Triggerhappy is a hotkey daemon developed with small and embedded systems in
+      mind, e.g. linux based routers. It attaches to the input device files and
+      interprets the event data received and executes scripts configured in its
+      configuration.
+    '';
+    homepage = https://github.com/wertarbyte/triggerhappy/;
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ jfrankenau taha ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/uim/data-hook.patch b/nixpkgs/pkgs/tools/inputmethods/uim/data-hook.patch
new file mode 100644
index 000000000000..be80962527ba
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/uim/data-hook.patch
@@ -0,0 +1,38 @@
+--- a/gtk2/immodule/Makefile.in	2015-11-24 16:21:08.967087208 +0900
++++ b/gtk2/immodule/Makefile.in	2015-11-24 16:22:53.316095150 +0900
+@@ -928,7 +928,6 @@
+ 
+ install-data-am: install-moduleLTLIBRARIES
+ 	@$(NORMAL_INSTALL)
+-	$(MAKE) $(AM_MAKEFLAGS) install-data-hook
+ install-dvi: install-dvi-am
+ 
+ install-dvi-am:
+@@ -993,7 +992,7 @@
+ 	distclean-compile distclean-generic distclean-libtool \
+ 	distclean-tags distdir dvi dvi-am html html-am info info-am \
+ 	install install-am install-data install-data-am \
+-	install-data-hook install-dvi install-dvi-am install-exec \
++	install-dvi install-dvi-am install-exec \
+ 	install-exec-am install-html install-html-am install-info \
+ 	install-info-am install-man install-moduleLTLIBRARIES \
+ 	install-pdf install-pdf-am install-ps install-ps-am \
+--- a/gtk3/immodule/Makefile.in	2015-11-24 16:21:08.971087209 +0900
++++ b/gtk3/immodule/Makefile.in	2015-11-24 16:23:28.251097832 +0900
+@@ -896,7 +896,6 @@
+ 
+ install-data-am: install-moduleLTLIBRARIES
+ 	@$(NORMAL_INSTALL)
+-	$(MAKE) $(AM_MAKEFLAGS) install-data-hook
+ install-dvi: install-dvi-am
+ 
+ install-dvi-am:
+@@ -959,7 +958,7 @@
+ 	cscopelist-am ctags ctags-am distclean distclean-compile \
+ 	distclean-generic distclean-libtool distclean-tags distdir dvi \
+ 	dvi-am html html-am info info-am install install-am \
+-	install-data install-data-am install-data-hook install-dvi \
++	install-data install-data-am install-dvi \
+ 	install-dvi-am install-exec install-exec-am install-html \
+ 	install-html-am install-info install-info-am install-man \
+ 	install-moduleLTLIBRARIES install-pdf install-pdf-am \
diff --git a/nixpkgs/pkgs/tools/inputmethods/uim/default.nix b/nixpkgs/pkgs/tools/inputmethods/uim/default.nix
new file mode 100644
index 000000000000..7fe00bd4dfce
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/uim/default.nix
@@ -0,0 +1,146 @@
+{ stdenv, fetchFromGitHub, shared-mime-info
+, autoconf, automake, intltool, libtool, pkgconfig, cmake
+, ruby, librsvg
+, ncurses, m17n_lib, m17n_db, expat
+, withAnthy ? true, anthy ? null
+, withGtk ? true
+, withGtk2 ? withGtk, gtk2 ? null
+, withGtk3 ? withGtk, gtk3 ? null
+, withQt ? true
+, withQt4 ? withQt, qt4 ? null
+, withQt5 ? false, qt5 ? null
+, withLibnotify ? true, libnotify ? null
+, withSqlite ? true, sqlite ? null
+, withNetworking ? true, curl ? null, openssl ? null
+, withFFI ? true, libffi ? null
+
+# Things that are clearly an overkill to be enabled by default
+, withMisc ? false, libeb ? null
+}:
+
+with stdenv.lib;
+
+assert withGtk2 -> gtk2 != null;
+assert withGtk3 -> gtk3 != null;
+
+# TODO(@oxij): ./configure can't find both qmakes at the same time
+# this can be fixed by adding an alias qmake -> qmaka${version} in qmake derivation
+assert withQt4 -> !withQt5 && qt4 != null;
+assert withQt5 -> !withQt4 && qt5 != null;
+
+assert !withQt5; # fails to build with "Makefile.qmake: No such file or directory"
+
+assert withAnthy -> anthy != null;
+assert withLibnotify -> libnotify != null;
+assert withSqlite -> sqlite != null;
+assert withNetworking -> curl != null && openssl != null;
+assert withFFI -> libffi != null;
+assert withMisc -> libeb != null;
+
+stdenv.mkDerivation rec {
+  version = "1.8.8";
+  pname = "uim";
+
+  src = fetchFromGitHub {
+    owner = "uim";
+    repo = "uim";
+    rev = "2c0958c9c505a87e70e344c2192e2e5123c71ea5";
+    fetchSubmodules = true;
+    sha256 = "1hkjxi5r49gcna37m3jvykny5hz9ram4y8a3q7lw4qzr52mz9pdp";
+  };
+
+  nativeBuildInputs = [
+    autoconf automake intltool libtool pkgconfig cmake
+
+    ruby # used by sigscheme build to generate function tables
+    librsvg # used by uim build to generate png pixmaps from svg
+  ];
+
+  buildInputs = [
+    ncurses m17n_lib m17n_db expat
+  ]
+  ++ optional withAnthy anthy
+  ++ optional withGtk2 gtk2
+  ++ optional withGtk3 gtk3
+  ++ optional withQt4 qt4
+  ++ optionals withQt5 [ qt5.qtbase.bin qt5.qtbase.dev ]
+  ++ optional withLibnotify libnotify
+  ++ optional withSqlite sqlite
+  ++ optionals withNetworking [
+    curl openssl
+  ]
+  ++ optional withFFI libffi
+  ++ optional withMisc libeb;
+
+  prePatch = ''
+    patchShebangs *.sh */*.sh */*/*.sh
+
+    # configure sigscheme in maintainer mode or else some function tables won't get autogenerated
+    substituteInPlace configure.ac \
+      --replace "--with-master-pkg=uim --enable-conf=uim" \
+                "--enable-maintainer-mode --with-master-pkg=uim --enable-conf=uim"
+
+    # generate ./configure files
+    (cd sigscheme/libgcroots; ./autogen.sh)
+    (cd sigscheme; ./autogen.sh)
+    ./autogen.sh
+  '';
+
+  patches = [ ./data-hook.patch ];
+
+  configureFlags = [
+    # configure in maintainer mode or else some pixmaps won't get autogenerated
+    # this should imply the above `--enable-maintainer-mode`, but it does not
+    "--enable-maintainer-mode"
+
+    "--enable-pref"
+    "--with-skk"
+    "--with-x"
+    "--with-xft"
+    "--with-expat=${expat.dev}"
+  ]
+  ++ optional withAnthy "--with-anthy-utf8"
+  ++ optional withGtk2 "--with-gtk2"
+  ++ optional withGtk3 "--with-gtk3"
+  ++ optionals withQt4 [
+    "--with-qt4"
+    "--with-qt4-immodule"
+  ]
+  ++ optionals withQt5 [
+    "--with-qt5"
+    "--with-qt5-immodule"
+  ]
+  ++ optional withLibnotify "--enable-notify=libnotify"
+  ++ optional withSqlite "--with-sqlite3"
+  ++ optionals withNetworking [
+    "--with-curl"
+    "--with-openssl-dir=${openssl.dev}"
+  ]
+  ++ optional withFFI "--with-ffi"
+  ++ optional withMisc "--with-eb";
+
+  # TODO: things in `./configure --help`, but not in nixpkgs
+  #--with-canna            Use Canna [default=no]
+  #--with-wnn              Build with libwnn [default=no]
+  #--with-mana             Build a plugin for Mana [default=yes]
+  #--with-prime            Build a plugin for PRIME [default=yes]
+  #--with-sj3              Use SJ3 [default=no]
+  #--with-osx-dcs          Build with OS X Dictionary Services [default=no]
+
+  # TODO: fix this in librsvg/glib later
+  # https://github.com/NixOS/nixpkgs/pull/57027#issuecomment-475461733
+  preBuild = ''
+    export XDG_DATA_DIRS="${shared-mime-info}/share"
+  '';
+
+  dontUseCmakeConfigure = true;
+
+  meta = with stdenv.lib; {
+    homepage    = src.meta.homepage;
+    description = "A multilingual input method framework";
+    license     = licenses.bsd3;
+    platforms   = platforms.unix;
+    broken      = stdenv.hostPlatform.isAarch64; # fails to build libgcroots (not supported on aarch64)
+    maintainers = with maintainers; [ ericsagnes oxij ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/inputmethods/zinnia/default.nix b/nixpkgs/pkgs/tools/inputmethods/zinnia/default.nix
new file mode 100644
index 000000000000..b23e0c369a62
--- /dev/null
+++ b/nixpkgs/pkgs/tools/inputmethods/zinnia/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+  pname = "zinnia";
+  version = "2016-08-28";
+
+  src = fetchFromGitHub {
+    owner = "taku910";
+    repo = "zinnia";
+    rev = "fd74d8c8680bb3df8692279151ea6339ab68e32b";
+    sha256 = "1izjy5qw6swg0rs2ym2i72zndb90mwrfbd1iv8xbpwckbm4899lg";
+  };
+
+  setSourceRoot = ''
+    sourceRoot=$(echo */zinnia)
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Online hand recognition system with machine learning";
+    homepage = http://taku910.github.io/zinnia/;
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.gebner ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/0x0/default.nix b/nixpkgs/pkgs/tools/misc/0x0/default.nix
new file mode 100644
index 000000000000..d78846922c6e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/0x0/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, xsel, curl, fetchFromGitLab, makeWrapper}:
+
+stdenv.mkDerivation {
+  pname = "0x0";
+  version = "2018-06-24";
+
+  src = fetchFromGitLab {
+    owner = "somasis";
+    repo = "scripts";
+    rev  = "70422c83b2ac5856559b0ddaf6e2dc3dbef40dee";
+    sha256 = "1qpylyxrisy3p2lyirfarfj5yzrdjgsgxwf8gqwljpcjn207hr72";
+  };
+
+  buildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    install -Dm755 0x0 $out/bin/0x0
+
+    patchShebangs $out/bin/0x0
+    wrapProgram $out/bin/0x0 \
+      --prefix PATH : '${stdenv.lib.makeBinPath [ curl xsel ]}'
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A client for 0x0.st";
+    homepage = "https://gitlab.com/somasis/scripts/";
+    maintainers = [ maintainers.ar1a ];
+    license = licenses.unlicense;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/3llo/Gemfile b/nixpkgs/pkgs/tools/misc/3llo/Gemfile
new file mode 100644
index 000000000000..17a1086d78f0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/3llo/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem '3llo', '0.3.0'
diff --git a/nixpkgs/pkgs/tools/misc/3llo/Gemfile.lock b/nixpkgs/pkgs/tools/misc/3llo/Gemfile.lock
new file mode 100644
index 000000000000..0696ba341651
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/3llo/Gemfile.lock
@@ -0,0 +1,27 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    3llo (0.3.0)
+      tty-prompt (~> 0.12.0)
+    equatable (0.6.1)
+    necromancer (0.4.0)
+    pastel (0.7.3)
+      equatable (~> 0.6)
+      tty-color (~> 0.5)
+    tty-color (0.5.0)
+    tty-cursor (0.4.0)
+    tty-prompt (0.12.0)
+      necromancer (~> 0.4.0)
+      pastel (~> 0.7.0)
+      tty-cursor (~> 0.4.0)
+      wisper (~> 1.6.1)
+    wisper (1.6.1)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  3llo (= 0.3.0)
+
+BUNDLED WITH
+   1.17.2
diff --git a/nixpkgs/pkgs/tools/misc/3llo/default.nix b/nixpkgs/pkgs/tools/misc/3llo/default.nix
new file mode 100644
index 000000000000..82a8d2aaad12
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/3llo/default.nix
@@ -0,0 +1,31 @@
+{ lib, ruby, bundlerApp, fetchpatch }:
+
+bundlerApp {
+  pname = "3llo";
+
+  gemfile = ./Gemfile;
+  lockfile = ./Gemfile.lock;
+
+  gemset = lib.recursiveUpdate (import ./gemset.nix) ({
+    "3llo" = {
+      dontBuild = false;
+      patches = [
+        (fetchpatch {
+          url = https://github.com/qcam/3llo/commit/7667c67fdc975bac315da027a3c69f49e7c06a2e.patch;
+          sha256 = "0ahp19igj77x23b2j9zk3znlmm7q7nija7mjgsmgqkgfbz2r1y7v";
+        })
+      ];
+    };
+  });
+
+  inherit ruby;
+
+  exes = [ "3llo" ];
+
+  meta = with lib; {
+    description = "Trello interactive CLI on terminal";
+    license = licenses.mit;
+    homepage = https://github.com/qcam/3llo;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/3llo/gemset.nix b/nixpkgs/pkgs/tools/misc/3llo/gemset.nix
new file mode 100644
index 000000000000..5c50ea9b2122
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/3llo/gemset.nix
@@ -0,0 +1,85 @@
+{
+  "3llo" = {
+    dependencies = ["tty-prompt"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "082g42lkkynnb2piz37ih696zm2ms63mz2q9rnfzjsd149ig39yy";
+      type = "gem";
+    };
+    version = "0.3.0";
+  };
+  equatable = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fzx2ishipnp6c124ka6fiw5wk42s7c7gxid2c4c1mb55b30dglf";
+      type = "gem";
+    };
+    version = "0.6.1";
+  };
+  necromancer = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0v9nhdkv6zrp7cn48xv7n2vjhsbslpvs0ha36mfkcd56cp27pavz";
+      type = "gem";
+    };
+    version = "0.4.0";
+  };
+  pastel = {
+    dependencies = ["equatable" "tty-color"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0m43wk7gswwkl6lfxwlliqc9v1qp8arfygihyz91jc9icf270xzm";
+      type = "gem";
+    };
+    version = "0.7.3";
+  };
+  tty-color = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zpp6zixkkchrc2lqnabrsy24pxikz2px87ggz5ph6355fs803da";
+      type = "gem";
+    };
+    version = "0.5.0";
+  };
+  tty-cursor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07whfm8mnp7l49s2cm2qy1snhsqq3a90sqwb71gvym4hm2kx822a";
+      type = "gem";
+    };
+    version = "0.4.0";
+  };
+  tty-prompt = {
+    dependencies = ["necromancer" "pastel" "tty-cursor" "wisper"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1026nyqhgmgxi2nmk8xk3hca07gy5rpisjs8y6w00wnw4f01kpv0";
+      type = "gem";
+    };
+    version = "0.12.0";
+  };
+  wisper = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19bw0z1qw1dhv7gn9lad25hgbgpb1bkw8d599744xdfam158ms2s";
+      type = "gem";
+    };
+    version = "1.6.1";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/misc/abduco/default.nix b/nixpkgs/pkgs/tools/misc/abduco/default.nix
new file mode 100644
index 000000000000..8545d86427a4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/abduco/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub, writeText, conf ? null }:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  name = "abduco-2018-05-16";
+
+  src = fetchFromGitHub {
+    owner = "martanne";
+    repo = "abduco";
+    rev = "8f80aa8044d7ecf0e43a0294a09007d056b20e4c";
+    sha256 = "0wqcif633nbgnznn46j0sng9l0wncppw1x1c42f75b4p9hrph203";
+  };
+
+  configFile = optionalString (conf!=null) (writeText "config.def.h" conf);
+  preBuild = optionalString (conf!=null) "cp ${configFile} config.def.h";
+
+  CFLAGS = stdenv.lib.optionalString stdenv.isDarwin "-D_DARWIN_C_SOURCE";
+
+  meta = {
+    homepage = http://brain-dump.org/projects/abduco;
+    license = licenses.isc;
+    description = "Allows programs to be run independently from its controlling terminal";
+    maintainers = with maintainers; [ pSub ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/adafruit-ampy/default.nix b/nixpkgs/pkgs/tools/misc/adafruit-ampy/default.nix
new file mode 100644
index 000000000000..be47d42dc89f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/adafruit-ampy/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, python3 }:
+
+with python3.pkgs;
+
+buildPythonApplication rec {
+  pname = "adafruit-ampy";
+  version = "1.0.7";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1dz5sksalccv4c3bzk3c1jxpg3s28lwlw8hfwc9dfxhw3a1np3fd";
+  };
+
+  nativeBuildInputs = [ setuptools_scm ];
+  propagatedBuildInputs = [ click python-dotenv pyserial ];
+
+  # No tests
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/pycampers/ampy";
+    license = licenses.mit;
+    description = "Utility to interact with a MicroPython board over a serial connection.";
+    maintainers = with maintainers; [ etu ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/aescrypt/default.nix b/nixpkgs/pkgs/tools/misc/aescrypt/default.nix
new file mode 100644
index 000000000000..75d8d71b8952
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/aescrypt/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl, libiconv }:
+
+stdenv.mkDerivation rec {
+  version = "3.14";
+  pname = "aescrypt";
+
+  src = fetchurl {
+    url = "https://www.aescrypt.com/download/v3/linux/${pname}-${version}.tgz";
+    sha256 = "1iziymcbpc64d44djgqfifpblsly4sr5bxsp5g29jgxz552kjlah";
+  };
+
+  NIX_LDFLAGS = stdenv.lib.optionalString stdenv.isDarwin "-liconv";
+
+  preBuild = ''
+    substituteInPlace src/Makefile --replace "CC=gcc" "CC?=gcc"
+    cd src
+  '';
+
+  installPhase= ''
+    mkdir -p $out/bin
+    cp aescrypt $out/bin
+    cp aescrypt_keygen $out/bin
+  '';
+
+  buildInputs = [ libiconv ];
+
+  meta = with stdenv.lib; {
+    description = "Encrypt files with Advanced Encryption Standard (AES)";
+    homepage    = https://www.aescrypt.com/;
+    license     = licenses.gpl2;
+    maintainers = with maintainers; [ lovek323 qknight ];
+    platforms   = stdenv.lib.platforms.all;
+    hydraPlatforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/agedu/default.nix b/nixpkgs/pkgs/tools/misc/agedu/default.nix
new file mode 100644
index 000000000000..d0254e9ce9f5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/agedu/default.nix
@@ -0,0 +1,35 @@
+{stdenv, fetchgit, autoreconfHook, halibut}:
+let
+  date = "20180918";
+  rev = "80c7beb";
+in
+stdenv.mkDerivation {
+  name = "agedu-${date}.${rev}";
+  # upstream provides tarballs but it seems they disappear after the next version is released
+  src = fetchgit {
+    url = https://git.tartarus.org/simon/agedu.git;
+    inherit rev;
+    sha256 = "0i930izna3s73p2q52qa377ixd14zij5q1n7w3irl7csyy78g0cd";
+  };
+
+  nativeBuildInputs = [autoreconfHook halibut];
+
+  meta = with stdenv.lib; {
+    description = "A Unix utility for tracking down wasted disk space";
+    longDescription = ''
+       Most Unix file systems, in their default mode, helpfully record when a
+       file was last accessed. So if you generated a large amount of data years
+       ago, forgot to clean it up, and have never used it since, then it ought
+       in principle to be possible to use those last-access time stamps to tell
+       the difference between that and a large amount of data you're still
+       using regularly.
+
+       agedu uses this information to tell you which files waste disk space when
+       you haven't used them since a long time.
+    '';
+    homepage = https://www.chiark.greenend.org.uk/~sgtatham/agedu/;
+    license = licenses.mit;
+    maintainers = with maintainers; [ symphorien ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/alarm-clock-applet/default.nix b/nixpkgs/pkgs/tools/misc/alarm-clock-applet/default.nix
new file mode 100644
index 000000000000..7b869d66d1c3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/alarm-clock-applet/default.nix
@@ -0,0 +1,66 @@
+{ stdenv, fetchFromGitHub
+, pkgconfig
+, autoconf
+, automake111x
+, libtool
+
+, glib
+, gtk2
+, gst_all_1
+, gnome2
+, libnotify
+, libxml2
+, libunique
+, intltool
+, gst_plugins ? with gst_all_1; [ gst-plugins-base gst-plugins-good gst-plugins-ugly ]
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  version = "0.3.4";
+  pname = "alarm-clock-applet";
+
+  src = fetchFromGitHub {
+    owner = "joh";
+    repo = "alarm-clock";
+    rev = version;
+    sha256 = "18blvgy8hmw3jidz7xrv9yiiilnzcj65m6wxhw58nrnbcqbpydwn";
+  };
+
+  nativeBuildInputs = [
+    pkgconfig
+    intltool
+    automake111x
+    autoconf
+    libtool
+
+    gnome2.gnome-common
+
+    wrapGAppsHook
+  ];
+
+  preConfigure = "./autogen.sh";
+
+  buildInputs = [
+    glib
+    gtk2
+    gst_all_1.gstreamer
+    gnome2.GConf
+    gnome2.gnome_icon_theme
+    libnotify
+    libxml2
+    libunique
+  ] ++ gst_plugins;
+
+  propagatedUserEnvPkgs = [ gnome2.GConf.out ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    homepage = http://alarm-clock.pseudoberries.com/;
+    description = "A fully-featured alarm clock for your GNOME panel or equivalent";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.rasendubi ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/antimicro/default.nix b/nixpkgs/pkgs/tools/misc/antimicro/default.nix
new file mode 100644
index 000000000000..ad86bdef80af
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/antimicro/default.nix
@@ -0,0 +1,27 @@
+{ mkDerivation, lib, cmake, pkgconfig, SDL2, qtbase, qttools, xorg, fetchFromGitHub }:
+
+mkDerivation rec {
+  pname = "antimicro";
+  version = "2.23";
+
+  src = fetchFromGitHub {
+    owner = "AntiMicro";
+    repo = "antimicro";
+    rev = version;
+    sha256 = "1q40ayxwwyq85lc89cnj1cm2nar625h4vhh8dvmb2qcxczaggf4v";
+  };
+
+  nativeBuildInputs = [ cmake pkgconfig ];
+  buildInputs = [
+    SDL2 qtbase qttools xorg.libXtst
+  ];
+
+  meta = with lib; {
+    description = "GUI for mapping keyboard and mouse controls to a gamepad";
+    inherit (src.meta) homepage;
+    maintainers = with maintainers; [ jb55 ];
+    license = licenses.gpl3;
+    platforms = with platforms; linux;
+    broken = true; # 2018-04-10
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/apparix/default.nix b/nixpkgs/pkgs/tools/misc/apparix/default.nix
new file mode 100644
index 000000000000..550ab4972d97
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/apparix/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "apparix-11-062";
+
+  src = fetchurl {
+    url = "https://micans.org/apparix/src/${name}.tar.gz";
+    sha256 = "211bb5f67b32ba7c3e044a13e4e79eb998ca017538e9f4b06bc92d5953615235";
+  };
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    homepage = http://micans.org/apparix;
+    description = "Add directory bookmarks, distant listing, and distant editing to the command line";
+    maintainers = with maintainers; [ lethalman ];
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/apt-offline/default.nix b/nixpkgs/pkgs/tools/misc/apt-offline/default.nix
new file mode 100644
index 000000000000..921c1af4ad6a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/apt-offline/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  version = "1.8.1";
+  pname = "apt-offline";
+
+  src = fetchFromGitHub {
+    owner = "rickysarraf";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0k79d1d8jiwg1s684r05njmk1dz8gsb8a9bl4agz7m31snc11j84";
+  };
+
+  doCheck = false;
+
+  # Requires python-qt4 (feel free to get it working).
+  preFixup = ''rm "$out/bin/apt-offline-gui"'';
+
+  meta = with stdenv.lib; {
+    description = "Offline APT package manager";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.falsifian ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/aptly/default.nix b/nixpkgs/pkgs/tools/misc/aptly/default.nix
new file mode 100644
index 000000000000..55cfa09aa24f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/aptly/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, buildGoPackage, fetchFromGitHub, makeWrapper, gnupg, bzip2, xz, graphviz }:
+
+let
+
+  version = "1.3.0";
+  rev = "v${version}";
+
+  aptlySrc = fetchFromGitHub {
+    inherit rev;
+    owner = "aptly-dev";
+    repo = "aptly";
+    sha256 = "032gw8qkxcgc0jyrvzqh7jkbmk4k0gf7j74hyhclfnjmd9548f5l";
+  };
+
+  aptlyCompletionSrc = fetchFromGitHub {
+    rev = "1.0.1";
+    owner = "aptly-dev";
+    repo = "aptly-bash-completion";
+    sha256 = "0dkc4z687yk912lpv8rirv0nby7iny1zgdvnhdm5b47qmjr1sm5q";
+  };
+
+in
+
+buildGoPackage {
+  pname = "aptly";
+  inherit version;
+
+  src = aptlySrc;
+
+  goPackagePath = "github.com/aptly-dev/aptly";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    mkdir -p $bin/share/bash-completion/completions
+    ln -s ${aptlyCompletionSrc}/aptly $bin/share/bash-completion/completions
+    wrapProgram "$bin/bin/aptly" \
+      --prefix PATH ":" "${stdenv.lib.makeBinPath [ gnupg bzip2 xz graphviz ]}"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://www.aptly.info;
+    description = "Debian repository management tool";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.montag451 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/argtable/default.nix b/nixpkgs/pkgs/tools/misc/argtable/default.nix
new file mode 100644
index 000000000000..c16e4aded0d0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/argtable/default.nix
@@ -0,0 +1,41 @@
+{ stdenv 
+, fetchgit
+}:
+stdenv.mkDerivation {
+  pname = "argtable";
+  version = "3.0.1";
+
+  src = fetchgit {
+    url = https://github.com/argtable/argtable3.git;
+    rev = "de93cfd85f755250285b337cba053a709a270721";
+    sha256 = "0fbvk78s3dwryrzgafdra0lb8w7lb873c6xgldl94ps9828x85i3";
+  };
+
+  buildPhase = ''
+    gcc -shared -o libargtable3.so -fPIC argtable3.c
+
+    pushd tests
+    make
+    popd
+  '';
+
+  installPhase = ''
+    mkdir -p $out/include
+    cp argtable3.h $out/include
+
+    mkdir -p $out/lib
+    cp libargtable3.so $out/lib
+
+    mkdir -p $out/src
+    cp argtable3.c $out/src
+    cp -r examples $out/src
+    ln -s $out/include/argtable3.h $out/src/argtable3.h
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://www.argtable.org/;
+    description = "A Cross-Platform, Single-File, ANSI C Command-Line Parsing Library";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ artuuge ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/arp-scan/default.nix b/nixpkgs/pkgs/tools/misc/arp-scan/default.nix
new file mode 100644
index 000000000000..9a3164db5d7c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/arp-scan/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, libpcap, makeWrapper, perlPackages }:
+
+stdenv.mkDerivation rec {
+  pname = "arp-scan";
+  version = "1.9.7";
+
+  src = fetchFromGitHub {
+    owner = "royhills";
+    repo = "arp-scan";
+    rev = version;
+    sha256 = "1mf7a4f9vzvnkiavc87aqyciswggsb4fpy7j05jxnvjyyxv3l7gp";
+  };
+
+  perlModules = with perlPackages; [
+    HTTPDate
+    HTTPMessage
+    LWP
+    URI
+  ];
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ perlPackages.perl libpcap makeWrapper ];
+
+  postInstall = ''
+    for name in get-{oui,iab}; do
+      wrapProgram "$out/bin/$name" --set PERL5LIB "${perlPackages.makeFullPerlPath perlModules}"
+    done;
+  '';
+
+  meta = with stdenv.lib; {
+    description = "ARP scanning and fingerprinting tool";
+    longDescription = ''
+      Arp-scan is a command-line tool that uses the ARP protocol to discover
+      and fingerprint IP hosts on the local network.
+    '';
+    homepage = "http://www.nta-monitor.com/wiki/index.php/Arp-scan_Documentation";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ bjornfor mikoim ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/asciinema/default.nix b/nixpkgs/pkgs/tools/misc/asciinema/default.nix
new file mode 100644
index 000000000000..d42c666e9674
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/asciinema/default.nix
@@ -0,0 +1,26 @@
+{ lib, python3Packages, fetchFromGitHub, glibcLocales }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "asciinema";
+  version = "2.0.2";
+
+  src = fetchFromGitHub {
+    owner = "asciinema";
+    repo = "asciinema";
+    rev = "v${version}";
+    sha256 = "1a2pysxnp6icyd08mgf66xr6f6j0irnfxdpf3fmzcz31ix7l9kc4";
+  };
+
+  checkInputs = [ glibcLocales python3Packages.nose ];
+
+  checkPhase = ''
+    LC_ALL=en_US.UTF-8 nosetests
+  '';
+
+  meta = {
+    description = "Terminal session recorder and the best companion of asciinema.org";
+    homepage = https://asciinema.org/;
+    license = with lib.licenses; [ gpl3 ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/aspcud/default.nix b/nixpkgs/pkgs/tools/misc/aspcud/default.nix
new file mode 100644
index 000000000000..b58f603ce594
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/aspcud/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchzip
+, boost, clasp, cmake, gringo, re2c
+}:
+
+stdenv.mkDerivation rec {
+  version = "1.9.4";
+  pname = "aspcud";
+
+  src = fetchzip {
+    url = "https://github.com/potassco/aspcud/archive/v${version}.tar.gz";
+    sha256 = "0vrf7h7g99vw1mybqfrpxamsnf89p18czlzgjmxl1zkiwc7vjpzw";
+  };
+
+  buildInputs = [ boost clasp cmake gringo re2c ];
+
+  cmakeFlags = [
+    "-DCMAKE_BUILD_TYPE=Release"
+    "-DASPCUD_GRINGO_PATH=${gringo}/bin/gringo"
+    "-DASPCUD_CLASP_PATH=${clasp}/bin/clasp"
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Solver for package problems in CUDF format using ASP";
+    homepage = "https://potassco.org/aspcud/";
+    platforms = platforms.all;
+    maintainers = [ maintainers.hakuch ];
+    license = licenses.gpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/autojump/default.nix b/nixpkgs/pkgs/tools/misc/autojump/default.nix
new file mode 100644
index 000000000000..8294e92d13f3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/autojump/default.nix
@@ -0,0 +1,53 @@
+{ stdenv, fetchFromGitHub, python, bash }:
+
+stdenv.mkDerivation rec {
+  pname = "autojump";
+  version = "22.5.3";
+
+  src = fetchFromGitHub {
+    owner = "wting";
+    repo = "autojump";
+    rev = "release-v${version}";
+    sha256 = "1rgpsh70manr2dydna9da4x7p8ahii7dgdgwir5fka340n1wrcws";
+  };
+
+  buildInputs = [ python bash ];
+  dontBuild = true;
+
+  installPhase = ''
+    python ./install.py -d "$out" -p "" -z "$out/share/zsh/site-functions/"
+
+    chmod +x "$out/etc/profile.d/autojump.sh"
+    install -Dt "$out/share/bash-completion/completions/" -m444 "$out/share/autojump/autojump.bash"
+    install -Dt "$out/share/fish/vendor_conf.d/" -m444 "$out/share/autojump/autojump.fish"
+    install -Dt "$out/share/zsh/site-functions/" -m444 "$out/share/autojump/autojump.zsh"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A `cd' command that learns";
+    longDescription = ''
+      One of the most used shell commands is “cd”.  A quick survey
+      among my friends revealed that between 10 and 20% of all
+      commands they type are actually cd commands! Unfortunately,
+      jumping from one part of your system to another with cd
+      requires to enter almost the full path, which isn’t very
+      practical and requires a lot of keystrokes.
+
+      Autojump is a faster way to navigate your filesystem.  It
+      works by maintaining a database of the directories you use the
+      most from the command line.  The jstat command shows you the
+      current contents of the database.  You need to work a little
+      bit before the database becomes usable.  Once your database
+      is reasonably complete, you can “jump” to a directory by
+      typing "j dirspec", where dirspec is a few characters of the
+      directory you want to jump to.  It will jump to the most used
+      directory whose name matches the pattern given in dirspec.
+
+      Autojump supports tab-completion.
+    '';
+    homepage = https://github.com/wting/autojump;
+    license = licenses.gpl3;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ domenkozar yurrriq ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/automirror/default.nix b/nixpkgs/pkgs/tools/misc/automirror/default.nix
new file mode 100644
index 000000000000..84778fb1c2d0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/automirror/default.nix
@@ -0,0 +1,26 @@
+{stdenv, fetchFromGitHub, git, ronn}:
+
+stdenv.mkDerivation rec {
+  pname = "automirror";
+  version = "49";
+
+  src = fetchFromGitHub {
+    owner = "schlomo";
+    repo = "automirror";
+    rev = "v${version}";
+    sha256 = "1syyf7dcm8fbyw31cpgmacg80h7pg036dayaaf0svvdsk0hqlsch";
+  };
+
+  patchPhase = "sed -i s#/usr##g Makefile";
+
+  buildInputs = [ git ronn ];
+
+  installFlags = [ "DESTDIR=$(out)" ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/schlomo/automirror;
+    description = "Automatic Display Mirror";
+    license = licenses.gpl3;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/autorandr/default.nix b/nixpkgs/pkgs/tools/misc/autorandr/default.nix
new file mode 100644
index 000000000000..adf73037af89
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/autorandr/default.nix
@@ -0,0 +1,62 @@
+{ stdenv
+, python3Packages
+, fetchFromGitHub
+, systemd
+, xrandr }:
+
+let
+  python = python3Packages.python;
+  version = "1.9";
+in
+  stdenv.mkDerivation {
+    pname = "autorandr";
+    inherit version;
+
+    buildInputs = [ python ];
+
+    # no wrapper, as autorandr --batch does os.environ.clear()
+    buildPhase = ''
+      substituteInPlace autorandr.py \
+        --replace 'os.popen("xrandr' 'os.popen("${xrandr}/bin/xrandr' \
+        --replace '["xrandr"]' '["${xrandr}/bin/xrandr"]'
+    '';
+
+    installPhase = ''
+      runHook preInstall
+      make install TARGETS='autorandr' PREFIX=$out
+
+      make install TARGETS='bash_completion' DESTDIR=$out/share/bash-completion/completions
+
+      make install TARGETS='autostart_config' PREFIX=$out DESTDIR=$out
+
+      ${if systemd != null then ''
+        make install TARGETS='systemd udev' PREFIX=$out DESTDIR=$out \
+          SYSTEMD_UNIT_DIR=/lib/systemd/system \
+          UDEV_RULES_DIR=/etc/udev/rules.d
+        substituteInPlace $out/etc/udev/rules.d/40-monitor-hotplug.rules \
+          --replace /bin/systemctl "${systemd}/bin/systemctl"
+      '' else ''
+        make install TARGETS='pmutils' DESTDIR=$out \
+          PM_SLEEPHOOKS_DIR=/lib/pm-utils/sleep.d
+        make install TARGETS='udev' PREFIX=$out DESTDIR=$out \
+          UDEV_RULES_DIR=/etc/udev/rules.d
+      ''}
+
+      runHook postInstall
+    '';
+
+    src = fetchFromGitHub {
+      owner = "phillipberndt";
+      repo = "autorandr";
+      rev = version;
+      sha256 = "1bb0l7fcm5lcx9y02zdxv7pfdqf4v4gsc5br3v1x9gzjvqj64l7n";
+    };
+
+    meta = with stdenv.lib; {
+      homepage = https://github.com/phillipberndt/autorandr/;
+      description = "Automatically select a display configuration based on connected devices";
+      license = licenses.gpl3Plus;
+      maintainers = with maintainers; [ coroa globin ];
+      platforms = platforms.unix;
+    };
+  }
diff --git a/nixpkgs/pkgs/tools/misc/autorevision/default.nix b/nixpkgs/pkgs/tools/misc/autorevision/default.nix
new file mode 100644
index 000000000000..ee07221b7559
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/autorevision/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchurl, asciidoc, libxml2, docbook_xml_dtd_45, libxslt
+, docbook_xsl, diffutils, coreutils, gnugrep, gnused
+}:
+
+stdenv.mkDerivation rec {
+  pname = "autorevision";
+  version = "1.21";
+
+  src = fetchurl {
+    url = "https://github.com/Autorevision/autorevision/releases/download/v%2F${version}/autorevision-${version}.tgz";
+    sha256 = "07ssirjy2mgbqxr792n3rqa408hm7qnhwfjzd73rqfwvjcahy1q8";
+  };
+
+  buildInputs = [
+    asciidoc libxml2 docbook_xml_dtd_45 libxslt docbook_xsl
+  ];
+
+  installFlags = [ "prefix=$(out)" ];
+
+  postInstall = ''
+    sed -e "s|\<cmp\>|${diffutils}/bin/cmp|g" \
+        -e "s|\<cat\>|${coreutils}/bin/cat|g" \
+        -e "s|\<grep\>|${gnugrep}/bin/grep|g" \
+        -e "s|\<sed\>|${gnused}/bin/sed|g" \
+        -e "s|\<tee\>|${coreutils}/bin/tee|g" \
+        -i "$out/bin/autorevision"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Extracts revision metadata from your VCS repository";
+    homepage = https://autorevision.github.io/;
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/aws-mturk-clt/default.nix b/nixpkgs/pkgs/tools/misc/aws-mturk-clt/default.nix
new file mode 100644
index 000000000000..c7829239c41f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/aws-mturk-clt/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, fetchurl, jre }:
+
+stdenv.mkDerivation rec {
+  name = "aws-mturk-clt-1.3.0";
+
+  src = fetchurl {
+    url = "https://mturk.s3.amazonaws.com/CLTSource/${name}.tar.gz";
+    sha256 = "00yyc7k3iygg83cknv9i2dsaxwpwzdkc8a2l9j56lg999hw3mqm3";
+  };
+
+  installPhase =
+    ''
+      mkdir -p $out
+      cp -prvd bin $out/
+
+      for i in $out/bin/*.sh; do
+        sed -i "$i" -e "s|^MTURK_CMD_HOME=.*|MTURK_CMD_HOME=$out\nexport JAVA_HOME=${jre}|"
+      done
+
+      mkdir -p $out/lib
+      cp -prvd lib/* $out/lib/
+    ''; # */
+
+  meta = {
+    homepage = https://requester.mturk.com/developer;
+    description = "Command line tools for interacting with the Amazon Mechanical Turk";
+    license = stdenv.lib.licenses.amazonsl;
+
+    longDescription =
+      ''
+        The Amazon Mechanical Turk is a crowdsourcing marketplace that
+        allows users (“requesters”) to submit tasks to be performed by
+        other humans (“workers”) for a small fee.  This package
+        contains command-line tools for submitting tasks, querying
+        results, and so on.
+
+        The command-line tools expect a file
+        <filename>mturk.properties<filename> in the current directory,
+        which should contain the following:
+
+        <screen>
+        access_key=[insert your access key here]
+        secret_key=[insert your secret key here]
+        service_url=http://mechanicalturk.amazonaws.com/?Service=AWSMechanicalTurkRequester
+        </screen>
+      '';
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/azure-vhd-utils/default.nix b/nixpkgs/pkgs/tools/misc/azure-vhd-utils/default.nix
new file mode 100644
index 000000000000..6f2afc888e84
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/azure-vhd-utils/default.nix
@@ -0,0 +1,27 @@
+# This file was generated by go2nix.
+{ stdenv, buildGoPackage, fetchgit }:
+
+buildGoPackage rec {
+  pname = "azure-vhd-utils";
+  version = "20160614-${stdenv.lib.strings.substring 0 7 rev}";
+  rev = "070db2d701a462ca2edcf89d677ed3cac309d8e8";
+
+  goPackagePath = "github.com/Microsoft/azure-vhd-utils";
+
+  src = fetchgit {
+    inherit rev;
+    url = "https://github.com/Microsoft/azure-vhd-utils";
+    sha256 = "0b9kbavlb92rhnb1swwq8bdn4l9a994rmf1ywyfq4yc0kd3gnhgh";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/Microsoft/azure-vhd-utils;
+    description = "Read, inspect and upload VHD files for Azure";
+    longDescription = "Go package to read Virtual Hard Disk (VHD) file, a CLI interface to upload local VHD to Azure storage and to inspect a local VHD";
+    license = licenses.mit;
+    platforms = platforms.unix;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/azure-vhd-utils/deps.nix b/nixpkgs/pkgs/tools/misc/azure-vhd-utils/deps.nix
new file mode 100644
index 000000000000..d07af99d5e59
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/azure-vhd-utils/deps.nix
@@ -0,0 +1,29 @@
+[
+  {
+    goPackagePath = "github.com/Azure/azure-sdk-for-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Azure/azure-sdk-for-go";
+      rev = "0884ebb4c8e7c980527348a4d134a65286042afc";
+      sha256 = "0ixsq409akq1ff12352kp5gkbh370rpbw0m0pbwjr42cqvnzs9k0";
+    };
+  }
+  {
+    goPackagePath = "github.com/Microsoft/azure-vhd-utils-for-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Microsoft/azure-vhd-utils-for-go";
+      rev = "070db2d701a462ca2edcf89d677ed3cac309d8e8";
+      sha256 = "0b9kbavlb92rhnb1swwq8bdn4l9a994rmf1ywyfq4yc0kd3gnhgh";
+    };
+  }
+  {
+    goPackagePath = "github.com/codegangsta/cli";
+    fetch = {
+      type = "git";
+      url = "https://github.com/codegangsta/cli";
+      rev = "f614c177b70c0f0e92c368d623c8770bf337c5d6";
+      sha256 = "1l70f07v0dsp2k2pm0lmr42fp4y72j1g0czf4fkxwhvgbly3al98";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/misc/bandwidth/default.nix b/nixpkgs/pkgs/tools/misc/bandwidth/default.nix
new file mode 100644
index 000000000000..b4cbc747b1dc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bandwidth/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchurl, nasm }:
+
+let
+  arch =
+    if      stdenv.hostPlatform.system == "x86_64-linux" then "bandwidth64"
+    else if stdenv.hostPlatform.system == "i686-linux" then "bandwidth32"
+    else if stdenv.hostPlatform.system == "x86_64-darwin" then "bandwidth-mac64"
+    else if stdenv.hostPlatform.system == "i686-darwin" then "bandwidth-mac32"
+    else if stdenv.hostPlatform.system == "i686-cygwin" then "bandwidth-win32"
+    else throw "Unknown architecture";
+in
+stdenv.mkDerivation rec {
+  pname = "bandwidth";
+  version = "1.9.3";
+
+  src = fetchurl {
+    url = "https://zsmith.co/archives/${pname}-${version}.tar.gz";
+    sha256 = "0zpv2qgkbak0llw47qcakhyh2z3zv4d69kasldmpdlpqryd9za84";
+  };
+
+  buildInputs = [ nasm ];
+
+  buildFlags = [ arch ]
+    ++ stdenv.lib.optionals stdenv.cc.isClang [ "CC=clang" "LD=clang" ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ${arch} $out/bin
+    ln -s ${arch} $out/bin/bandwidth
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://zsmith.co/bandwidth.html;
+    description = "Artificial benchmark for identifying weaknesses in the memory subsystem";
+    license = licenses.mit;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bash_unit/default.nix b/nixpkgs/pkgs/tools/misc/bash_unit/default.nix
new file mode 100644
index 000000000000..f23ab45cfab5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bash_unit/default.nix
@@ -0,0 +1,27 @@
+{ fetchFromGitHub
+, stdenv
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bash_unit";
+  version = "1.6.1";
+
+  src = fetchFromGitHub {
+    owner = "pgrange";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0jcjpcyf569b12vm4jrd53iqrrsjvr8sp9y29w2ls38fm8a16vr6";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp bash_unit $out/bin/
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Bash unit testing enterprise edition framework for professionals";
+    maintainers = with maintainers; [ pamplemousse ];
+    platforms = platforms.linux;
+    license = licenses.gpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bashplotlib/default.nix b/nixpkgs/pkgs/tools/misc/bashplotlib/default.nix
new file mode 100644
index 000000000000..14ab790d9c76
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bashplotlib/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, python3Packages, fetchFromGitHub }:
+
+python3Packages.buildPythonApplication {
+  pname = "bashplotlib";
+  version = "2019-01-02";
+
+  src = fetchFromGitHub {
+    owner = "glamp";
+    repo = "bashplotlib";
+    rev = "f7533172c4dc912b5accae42edd5c0f655d7468f";
+    sha256 = "1sifqslvvz2c05spwrl81kcdg792l6jwvfd3ih9q5wjkvkm0plz8";
+  };
+
+  # No tests
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/glamp/bashplotlib;
+    description = "Plotting in the terminal";
+    maintainers = with maintainers; [ dtzWill ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bat/default.nix b/nixpkgs/pkgs/tools/misc/bat/default.nix
new file mode 100644
index 000000000000..6f5dc209b964
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bat/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, rustPlatform, fetchFromGitHub, llvmPackages, pkgconfig, less
+, Security, libiconv, installShellFiles, makeWrapper
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname   = "bat";
+  version = "0.12.1";
+
+  src = fetchFromGitHub {
+    owner  = "sharkdp";
+    repo   = pname;
+    rev    = "v${version}";
+    sha256 = "1cpa8dal4c27pnbmmrar4vqzcl4h0zf8x1zx1dlf0riavdg9n56y";
+    fetchSubmodules = true;
+  };
+
+  cargoSha256 = "0d7h0kn41w6wm4w63vjy2i7r19jkansfvfjn7vgh2gqh5m60kal2";
+
+  nativeBuildInputs = [ pkgconfig llvmPackages.libclang installShellFiles makeWrapper ];
+
+  buildInputs = stdenv.lib.optionals stdenv.isDarwin [ Security libiconv ];
+
+  LIBCLANG_PATH = "${llvmPackages.libclang}/lib";
+
+  postInstall = ''
+    installManPage doc/bat.1
+    installShellCompletion assets/completions/bat.fish
+  '';
+
+  # Insert Nix-built `less` into PATH because the system-provided one may be too old to behave as
+  # expected with certain flag combinations.
+  postFixup = ''
+    wrapProgram "$out/bin/bat" \
+      --prefix PATH : "${stdenv.lib.makeBinPath [ less ]}"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A cat(1) clone with syntax highlighting and Git integration";
+    homepage    = https://github.com/sharkdp/bat;
+    license     = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ dywedir lilyball ];
+    platforms   = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bbe/default.nix b/nixpkgs/pkgs/tools/misc/bbe/default.nix
new file mode 100644
index 000000000000..b0af13160d21
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bbe/default.nix
@@ -0,0 +1,22 @@
+{ stdenv , fetchurl, autoreconfHook }:
+stdenv.mkDerivation rec {
+  pname = "bbe";
+  version = "0.2.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/bbe-/${version}/bbe-${version}.tar.gz";
+    sha256 = "1nyxdqi4425sffjrylh7gl57lrssyk4018afb7mvrnd6fmbszbms";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  outputs = [ "out" "doc" ];
+
+  meta = with stdenv.lib; {
+    description = "A sed-like editor for binary files";
+    homepage = "http://bbe-.sourceforge.net/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.hhm ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bc/cross-bc.patch b/nixpkgs/pkgs/tools/misc/bc/cross-bc.patch
new file mode 100644
index 000000000000..ba8857abb581
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bc/cross-bc.patch
@@ -0,0 +1,169 @@
+commit fdda59736ddc048cf38a2c7103f4f5d9eeaf995e
+Author: Ben Gamari <ben@smart-cactus.org>
+Date:   Tue Oct 17 10:51:34 2017 -0400
+
+    Try implementing cross-compilation
+
+diff --git a/bc/Makefile.am b/bc/Makefile.am
+index d9d412e..fdef633 100644
+--- a/bc/Makefile.am
++++ b/bc/Makefile.am
+@@ -17,6 +17,7 @@ MAINTAINERCLEANFILES = Makefile.in bc.c bc.h scan.c \
+ 
+ AM_CPPFLAGS = -I$(srcdir) -I$(srcdir)/../h
+ LIBBC = ../lib/libbc.a
++LIBBC_HOST = ../lib/libbc_host.a
+ LIBL = @LEXLIB@
+ LDADD = $(LIBBC) $(LIBL) @READLINELIB@
+ 
+@@ -29,12 +30,20 @@ $(PROGRAMS): libmath.h $(LIBBC)
+ scan.o: bc.h
+ global.o: libmath.h
++
++main_host.c : main.c
++	cp $< $@
+ 
+-fbcOBJ = main.o bc.o scan.o execute.o load.o storage.o util.o warranty.o
++fbcOBJ = $(addsuffix _host,main.o bc.o scan.o execute.o load.o storage.o util.o warranty.o)
++
++%.o_host : CC:=$(CC_FOR_BUILD)
++
++%.o_host : %.c
++	$(COMPILE) -c $(CFLAGS) $(INCLUDES) -o $@ $<
+ 
+-libmath.h: libmath.b $(fbcOBJ) $(LIBBC)
++libmath.h: libmath.b $(fbcOBJ) $(LIBBC_HOST)
+ 	echo '{0}' > libmath.h
+-	$(MAKE) global.o
+-	$(LINK) -o fbc $(fbcOBJ) global.o $(LIBBC) $(LIBL) $(READLINELIB) $(LIBS)
++	$(MAKE) global.o_host
++	$(CC_FOR_BUILD) -o fbc $(fbcOBJ) global.o_host $(LIBBC_HOST) $(LIBL) ${READLINELIB} $(LIBS)
+ 	./fbc -c $(srcdir)/libmath.b </dev/null >libmath.h
+ 	$(srcdir)/fix-libmath_h
+ 	rm -f ./fbc ./global.o
+diff --git a/configure.ac b/configure.ac
+index fc74573..5cabb73 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -20,6 +20,7 @@ m4_define([dc_version], 1.4.1)
+ 
+ AC_INIT([bc],[bc_version])
+ AC_CONFIG_SRCDIR(doc/bc.1)
++AC_CONFIG_MACRO_DIR([m4])
+ AM_INIT_AUTOMAKE([dist-bzip2])
+ AC_CONFIG_HEADERS(config.h)
+ 
+@@ -35,6 +36,7 @@ AC_DEFINE([DC_COPYRIGHT],
+ 	  [Define the dc copyright line.])
+ 
+ AC_PROG_CC
++AX_CC_FOR_BUILD
+ AC_USE_SYSTEM_EXTENSIONS
+ 
+ AM_PROG_LEX
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index ec4bf59..c670f5b 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -1,5 +1,5 @@
+ ## Process this file with automake to produce Makefile.in
+-noinst_LIBRARIES = libbc.a
++noinst_LIBRARIES = libbc.a libbc_host.a
+ 
+ AM_CPPFLAGS = -I. -I.. -I$(srcdir)/../h
+ 
+@@ -24,3 +24,11 @@ testmul: testmul.o number.o
+ 
+ specialnumber: newnumber.o
+ 	cp newnumber.o number.o
++
++%.o_host : CC:=$(CC_FOR_BUILD)
++%.o_host : %.c
++	$(COMPILE) -c $(CFLAGS) $(INCLUDES) -o $@ $<
++
++libbc_host.a : $(addsuffix _host,$(libbc_a_OBJECTS))
++	ar cru $@ $+
++	ranlib $@
+diff --git a/m4/cc_for_build.m4 b/m4/cc_for_build.m4
+new file mode 100644
+index 0000000..c62ffad
+--- /dev/null
++++ b/m4/cc_for_build.m4
+@@ -0,0 +1,77 @@
++# ===========================================================================
++#     https://www.gnu.org/software/autoconf-archive/ax_cc_for_build.html
++# ===========================================================================
++#
++# SYNOPSIS
++#
++#   AX_CC_FOR_BUILD
++#
++# DESCRIPTION
++#
++#   Find a build-time compiler. Sets CC_FOR_BUILD and EXEEXT_FOR_BUILD.
++#
++# LICENSE
++#
++#   Copyright (c) 2010 Reuben Thomas <rrt@sc3d.org>
++#   Copyright (c) 1999 Richard Henderson <rth@redhat.com>
++#
++#   This program is free software: you can redistribute it and/or modify it
++#   under the terms of the GNU General Public License as published by the
++#   Free Software Foundation, either version 3 of the License, or (at your
++#   option) any later version.
++#
++#   This program is distributed in the hope that it will be useful, but
++#   WITHOUT ANY WARRANTY; without even the implied warranty of
++#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
++#   Public License for more details.
++#
++#   You should have received a copy of the GNU General Public License along
++#   with this program. If not, see <https://www.gnu.org/licenses/>.
++#
++#   As a special exception, the respective Autoconf Macro's copyright owner
++#   gives unlimited permission to copy, distribute and modify the configure
++#   scripts that are the output of Autoconf when processing the Macro. You
++#   need not follow the terms of the GNU General Public License when using
++#   or distributing such scripts, even though portions of the text of the
++#   Macro appear in them. The GNU General Public License (GPL) does govern
++#   all other use of the material that constitutes the Autoconf Macro.
++#
++#   This special exception to the GPL applies to versions of the Autoconf
++#   Macro released by the Autoconf Archive. When you make and distribute a
++#   modified version of the Autoconf Macro, you may extend this special
++#   exception to the GPL to apply to your modified version as well.
++
++#serial 3
++
++dnl Get a default for CC_FOR_BUILD to put into Makefile.
++AC_DEFUN([AX_CC_FOR_BUILD],
++[# Put a plausible default for CC_FOR_BUILD in Makefile.
++if test -z "$CC_FOR_BUILD"; then
++  if test "x$cross_compiling" = "xno"; then
++    CC_FOR_BUILD='$(CC)'
++  else
++    CC_FOR_BUILD=gcc
++  fi
++fi
++AC_SUBST(CC_FOR_BUILD)
++# Also set EXEEXT_FOR_BUILD.
++if test "x$cross_compiling" = "xno"; then
++  EXEEXT_FOR_BUILD='$(EXEEXT)'
++else
++  AC_CACHE_CHECK([for build system executable suffix], bfd_cv_build_exeext,
++    [rm -f conftest*
++     echo 'int main () { return 0; }' > conftest.c
++     bfd_cv_build_exeext=
++     ${CC_FOR_BUILD} -o conftest conftest.c 1>&5 2>&5
++     for file in conftest.*; do
++       case $file in
++       *.c | *.o | *.obj | *.ilk | *.pdb) ;;
++       *) bfd_cv_build_exeext=`echo $file | sed -e s/conftest//` ;;
++       esac
++     done
++     rm -f conftest*
++     test x"${bfd_cv_build_exeext}" = x && bfd_cv_build_exeext=no])
++  EXEEXT_FOR_BUILD=""
++  test x"${bfd_cv_build_exeext}" != xno && EXEEXT_FOR_BUILD=${bfd_cv_build_exeext}
++fi
++AC_SUBST(EXEEXT_FOR_BUILD)])dnl
diff --git a/nixpkgs/pkgs/tools/misc/bc/default.nix b/nixpkgs/pkgs/tools/misc/bc/default.nix
new file mode 100644
index 000000000000..111ab254accb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bc/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, autoreconfHook, buildPackages
+, fetchurl, flex, readline, ed, texinfo
+}:
+
+stdenv.mkDerivation rec {
+  name = "bc-1.07.1";
+  src = fetchurl {
+    url = "mirror://gnu/bc/${name}.tar.gz";
+    sha256 = "62adfca89b0a1c0164c2cdca59ca210c1d44c3ffc46daf9931cf4942664cb02a";
+  };
+
+  configureFlags = [ "--with-readline" ];
+
+  # As of 1.07 cross-compilation is quite complicated as the build system wants
+  # to build a code generator, bc/fbc, on the build machine.
+  patches = [ ./cross-bc.patch ];
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+  nativeBuildInputs = [
+    # Tools
+    autoreconfHook ed flex texinfo
+    # Libraries for build
+    buildPackages.readline buildPackages.ncurses
+  ];
+  buildInputs = [ readline flex ];
+
+  doCheck = true; # not cross
+
+  # Hack to make sure we never to the relaxation `$PATH` and hooks support for
+  # compatability. This will be replaced with something clearer in a future
+  # masss-rebuild.
+  strictDeps = true;
+
+  meta = {
+    description = "GNU software calculator";
+    homepage = https://www.gnu.org/software/bc/;
+    license = stdenv.lib.licenses.gpl3;
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bcunit/default.nix b/nixpkgs/pkgs/tools/misc/bcunit/default.nix
new file mode 100644
index 000000000000..4a440e133feb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bcunit/default.nix
@@ -0,0 +1,22 @@
+{stdenv, fetchFromGitHub, cmake}:
+stdenv.mkDerivation rec {
+  name = "${baseName}-${version}";
+  baseName = "bcunit";
+  version = "3.0.2";
+  buildInputs = [cmake];
+  src = fetchFromGitHub {
+    owner = "BelledonneCommunications";
+    repo = baseName;
+    rev = version;
+    sha256 = "063yl7kxkix76r49qrj0h1qpz2p538d1yw8aih0x4i47g35k00y7";
+  };
+
+  meta = {
+    inherit version;
+    description = ''A fork of CUnit test framework'';
+    license = stdenv.lib.licenses.lgpl2Plus;
+    maintainers = [stdenv.lib.maintainers.raskin];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/bdf2psf/default.nix b/nixpkgs/pkgs/tools/misc/bdf2psf/default.nix
new file mode 100644
index 000000000000..defdd9494e51
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bdf2psf/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl, perl, dpkg }:
+
+stdenv.mkDerivation rec {
+  pname = "bdf2psf";
+  version = "1.194";
+
+  src = fetchurl {
+    url = "mirror://debian/pool/main/c/console-setup/bdf2psf_${version}_all.deb";
+    sha256 = "10c0rbhqscizfa063m6mms31i0knh25bxr35s008b6mp5pxr33mc";
+  };
+
+  buildInputs = [ dpkg ];
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  unpackPhase = "dpkg-deb -x $src .";
+  installPhase = "
+    substituteInPlace usr/bin/bdf2psf --replace /usr/bin/perl ${perl}/bin/perl
+    mv usr $out
+  ";
+
+  meta = with stdenv.lib; {
+    description = "BDF to PSF converter";
+    homepage = https://packages.debian.org/sid/bdf2psf;
+    longDescription = ''
+      Font converter to generate console fonts from BDF source fonts
+    '';
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ rnhmjoj vrthra ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bepasty/default.nix b/nixpkgs/pkgs/tools/misc/bepasty/default.nix
new file mode 100644
index 000000000000..532d1155fbe0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bepasty/default.nix
@@ -0,0 +1,45 @@
+{ python3Packages
+, lib
+}:
+
+with python3Packages;
+
+#We need to use buildPythonPackage here to get the PYTHONPATH build correctly.
+#This is needed for services.bepasty
+#https://github.com/NixOS/nixpkgs/pull/38300
+buildPythonPackage rec {
+  pname = "bepasty";
+  version = "0.5.0";
+
+  propagatedBuildInputs = [
+    flask
+    pygments
+    setuptools
+    xstatic
+    xstatic-bootbox
+    xstatic-bootstrap
+    xstatic-jquery
+    xstatic-jquery-file-upload
+    xstatic-jquery-ui
+    xstatic-pygments
+  ];
+
+  buildInputs = [ setuptools_scm ];
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1y3smw9620w2ia4zfsl2svb9j7mkfgc8z1bzjffyk1w5vryhwikh";
+  };
+
+  checkInputs = [
+    pytest
+    selenium
+  ];
+
+  meta = {
+    homepage = https://github.com/bepasty/bepasty-server;
+    description = "Binary pastebin server";
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.makefu ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bfr/default.nix b/nixpkgs/pkgs/tools/misc/bfr/default.nix
new file mode 100644
index 000000000000..4ec736418428
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bfr/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl, perl }:
+
+stdenv.mkDerivation rec {
+  name = "bfr-1.6";
+  version = "1.6";
+
+  src = fetchurl {
+    url = "http://www.sourcefiles.org/Utilities/Text_Utilities/bfr-${version}.tar.bz2";
+    sha256 = "0fadfssvj9klj4dq9wdrzys1k2a1z2j0p6kgnfgbjv0n1bq6h4cy";
+  };
+
+  patches =
+    [ (fetchurl {
+        url = "https://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/app-misc/bfr/files/bfr-1.6-perl.patch?revision=1.1";
+        sha256 = "1pk9jm3c1qzs727lh0bw61w3qbykaqg4jblywf9pvq5bypk88qfj";
+      })
+    ];
+
+  buildInputs = [ perl ];
+
+  meta = with stdenv.lib; {
+    description = "A general-purpose command-line pipe buffer";
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = with maintainers; [ pSub ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bibtex2html/default.nix b/nixpkgs/pkgs/tools/misc/bibtex2html/default.nix
new file mode 100644
index 000000000000..c0339834b649
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bibtex2html/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchurl, ocaml }:
+
+stdenv.mkDerivation {
+  pname = "bibtex2html";
+  version = "1.99";
+
+  src = fetchurl {
+    url = https://www.lri.fr/~filliatr/ftp/bibtex2html/bibtex2html-1.99.tar.gz;
+    sha256 = "07gzrs4lfrkvbn48cgn2gn6c7cx3jsanakkrb2irj0gmjzfxl96j";
+  };
+
+  buildInputs = [ ocaml ];
+
+  meta = with stdenv.lib; {
+    description = "A collection of tools for translating from BibTeX to HTML";
+    homepage = https://www.lri.fr/~filliatr/bibtex2html/;
+    license = licenses.gpl2;
+    platforms = ocaml.meta.platforms or [];
+    maintainers = [ maintainers.scolobb ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bibtool/default.nix b/nixpkgs/pkgs/tools/misc/bibtool/default.nix
new file mode 100644
index 000000000000..df7564a4b848
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bibtool/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "bibtool";
+  version = "2.67";
+
+  src = fetchurl {
+    url = "http://www.gerd-neugebauer.de/software/TeX/BibTool/BibTool-${version}.tar.gz";
+    sha256 = "116pv532mz0q954y5b7c6zipnamc05f0x7g5x1b674jsjxh42v2v";
+  };
+
+  # Perl for running test suite.
+  buildInputs = [ perl ];
+
+  installTargets = [ "install" "install.man" ];
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    description = "Tool for manipulating BibTeX bibliographies";
+    homepage = http://www.gerd-neugebauer.de/software/TeX/BibTool/index.en.html;
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    maintainers = [ maintainers.rycee ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bibutils/default.nix b/nixpkgs/pkgs/tools/misc/bibutils/default.nix
new file mode 100644
index 000000000000..d099a8aba9b0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bibutils/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "bibutils";
+  version = "6.8";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/bibutils/bibutils_${version}_src.tgz";
+    sha256 = "1n28fjrl7zxjxvcqzmrc9xj8ly6nkxviimxbzamj8dslnkzpzqw1";
+  };
+
+  configureFlags = [ "--dynamic" "--install-dir" "$(out)/bin" "--install-lib" "$(out)/lib" ];
+  dontAddPrefix = true;
+
+  doCheck = true;
+  checkTarget = "test";
+
+  meta = with stdenv.lib; {
+    description = "Bibliography format interconversion";
+    longDescription = "The bibutils program set interconverts between various bibliography formats using a common MODS-format XML intermediate. For example, one can convert RIS-format files to Bibtex by doing two transformations: RIS->MODS->Bibtex. By using a common intermediate for N formats, only 2N programs are required and not N²-N. These programs operate on the command line and are styled after standard UNIX-like filters.";
+    homepage = https://sourceforge.net/p/bibutils/home/Bibutils/;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.garrison ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/birdfont/default.nix b/nixpkgs/pkgs/tools/misc/birdfont/default.nix
new file mode 100644
index 000000000000..8cc21158e8a9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/birdfont/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, pkgconfig, python3, xmlbird,
+cairo, gdk-pixbuf, libgee, glib, gtk3, webkitgtk, libnotify, sqlite, vala_0_44,
+gobject-introspection, gsettings-desktop-schemas, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "birdfont";
+  version = "2.28.0";
+
+  src = fetchurl {
+    url = "https://birdfont.org/releases/${pname}-${version}.tar.xz";
+    sha256 = "19i7wzngi695dp4w0235wmfcnagdw3i40mzf89sddr1mqzvipfrz";
+  };
+
+  nativeBuildInputs = [ python3 pkgconfig vala_0_44 gobject-introspection wrapGAppsHook ];
+  buildInputs = [ xmlbird libgee cairo gdk-pixbuf glib gtk3 webkitgtk libnotify sqlite gsettings-desktop-schemas ];
+
+  postPatch = "patchShebangs .";
+
+  buildPhase = "./build.py";
+
+  installPhase = "./install.py";
+
+  meta = with stdenv.lib; {
+    description = "Font editor which can generate fonts in TTF, EOT, SVG and BIRDFONT format";
+    homepage = https://birdfont.org;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/birdfont/xmlbird.nix b/nixpkgs/pkgs/tools/misc/birdfont/xmlbird.nix
new file mode 100644
index 000000000000..3d51f282daef
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/birdfont/xmlbird.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, python3, pkgconfig, vala, glib, gobject-introspection }:
+
+stdenv.mkDerivation rec {
+  pname = "xmlbird";
+  version = "1.2.11";
+
+  src = fetchurl {
+    url = "https://birdfont.org/${pname}-releases/lib${pname}-${version}.tar.xz";
+    sha256 = "1ycbgjvywnlc0garw8qjqd18s0xnrwjvssdrb410yschv3wjq1i0";
+  };
+
+  nativeBuildInputs = [ python3 pkgconfig vala gobject-introspection ];
+
+  buildInputs = [ glib ];
+
+  postPatch = "patchShebangs .";
+
+  buildPhase = "./build.py";
+
+  installPhase = "./install.py";
+
+  meta = with stdenv.lib; {
+    description = "XML parser for Vala and C programs";
+    homepage = https://birdfont.org/xmlbird.php;
+    license = licenses.lgpl3;
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/blink1-tool/default.nix b/nixpkgs/pkgs/tools/misc/blink1-tool/default.nix
new file mode 100644
index 000000000000..8d587e34af46
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/blink1-tool/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, libusb1, pkgconfig, ... }:
+
+stdenv.mkDerivation rec {
+  pname = "blink1";
+  version = "1.98a";
+
+  src = fetchurl {
+    url = "https://github.com/todbot/blink1/archive/v${version}.tar.gz";
+    sha256 = "1waci6hccv5i50v5d3z7lx4h224fbkj66ywfynnsgn46w0jm6imv";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libusb1 ];
+
+  configurePhase = ''
+    cd commandline
+  '';
+
+  installPhase = ''
+    PREFIX=$out make install
+  '';
+
+  meta = {
+    description = "Command line client for the blink(1) notification light";
+    homepage = https://blink1.thingm.com/;
+    license = stdenv.lib.licenses.cc-by-sa-30;
+    maintainers = [ stdenv.lib.maintainers.cransom ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/blsd/default.nix b/nixpkgs/pkgs/tools/misc/blsd/default.nix
new file mode 100644
index 000000000000..23bd7ed172c4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/blsd/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, buildGoPackage, fetchFromGitHub, pkgconfig, libgit2 }:
+
+buildGoPackage {
+  pname = "blsd";
+  version = "2017-07-27";
+
+  goPackagePath = "github.com/junegunn/blsd";
+
+  src = fetchFromGitHub {
+    owner = "junegunn";
+    repo = "blsd";
+    rev = "a2ac619821e502452abdeae9ebab45026893b9e8";
+    sha256 = "0b0q6i4i28cjqgxqmwxbps22gp9rcd3jz562q5wvxrwlpbzlls2h";
+  };
+
+  goDeps = ./deps.nix;
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libgit2 ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/junegunn/blsd;
+    description = "List directories in breadth-first order";
+    license = licenses.mit;
+    maintainers = [ maintainers.magnetophon ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/blsd/deps.nix b/nixpkgs/pkgs/tools/misc/blsd/deps.nix
new file mode 100644
index 000000000000..d212f213a60e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/blsd/deps.nix
@@ -0,0 +1,12 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "github.com/libgit2/git2go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libgit2/git2go";
+      rev = "14280de4da0f392935854a7cbdd67b2a5505c3a8";
+      sha256 = "17ppd7byzir8rhdk645dmggi700scb8f401yiwx8zy81q41dk1qi";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/misc/bmap-tools/default.nix b/nixpkgs/pkgs/tools/misc/bmap-tools/default.nix
new file mode 100644
index 000000000000..6b7a51e08f51
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bmap-tools/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchFromGitHub, python2Packages }:
+
+python2Packages.buildPythonApplication rec {
+  pname = "bmap-tools";
+  version = "3.4";
+
+  src = fetchFromGitHub {
+    owner = "intel";
+    repo = "bmap-tools";
+    rev = "v${version}";
+    sha256 = "0p0pdwvyf9b4czi1pnhclm1ih8kw78nk2sj4if5hwi7s5423wk5q";
+  };
+
+  meta = with stdenv.lib; {
+    description = "bmap-related tools";
+    homepage = https://github.com/intel/bmap-tools;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.dezgeg ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bmon/default.nix b/nixpkgs/pkgs/tools/misc/bmon/default.nix
new file mode 100644
index 000000000000..e4664e34b964
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bmon/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, ncurses, libconfuse
+, libnl }:
+
+stdenv.mkDerivation rec {
+  pname = "bmon";
+  version = "4.0";
+
+  src = fetchFromGitHub {
+    owner = "tgraf";
+    repo = "bmon";
+    rev = "v${version}";
+    sha256 = "1ilba872c09mnlvylslv4hqv6c9cz36l76q74rr99jvis1dg69gf";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+
+  buildInputs = [ ncurses libconfuse libnl ];
+
+  meta = with stdenv.lib; {
+    description = "Network bandwidth monitor";
+    homepage = https://github.com/tgraf/bmon;
+    # Licensed unter BSD and MIT
+    #  - https://github.com/tgraf/bmon/blob/master/LICENSE.BSD
+    #  - https://github.com/tgraf/bmon/blob/master/LICENSE.MIT
+    license = licenses.bsd2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ bjornfor pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bogofilter/default.nix b/nixpkgs/pkgs/tools/misc/bogofilter/default.nix
new file mode 100644
index 000000000000..f86d44c580de
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bogofilter/default.nix
@@ -0,0 +1,29 @@
+{fetchurl, stdenv, flex, db}:
+
+stdenv.mkDerivation rec {
+  name = "bogofilter-1.2.4";
+  src = fetchurl {
+    url = "mirror://sourceforge/bogofilter/${name}.tar.bz2";
+    sha256 = "1d56n2m9inm8gnzm88aa27xl2a7sp7aff3484vmflpqkinjqf0p1";
+  };
+
+  # FIXME: We would need `pax' as a "propagated build input" (for use
+  # by the `bf_tar' script) but we don't have it currently.
+
+  buildInputs = [ flex db ];
+
+  doCheck = false; # needs "y" tool
+
+  meta = {
+    homepage = http://bogofilter.sourceforge.net/;
+    longDescription = ''
+      Bogofilter is a mail filter that classifies mail as spam or ham
+      (non-spam) by a statistical analysis of the message's header and
+      content (body).  The program is able to learn from the user's
+      classifications and corrections.  It is based on a Bayesian
+      filter.
+    '';
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bonfire/default.nix b/nixpkgs/pkgs/tools/misc/bonfire/default.nix
new file mode 100644
index 000000000000..12b0ad2abf1f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bonfire/default.nix
@@ -0,0 +1,49 @@
+{ stdenv, python3Packages, fetchFromGitHub }:
+
+with python3Packages;
+
+buildPythonApplication rec {
+  pname = "bonfire";
+  version = "unstable-2017-01-19";
+
+  # use latest git version with --endpoint flag
+  # https://github.com/blue-yonder/bonfire/pull/18
+  src = fetchFromGitHub {
+    owner = "blue-yonder";
+    repo = pname;
+    rev = "d0af9ca10394f366cfa3c60f0741f1f0918011c2";
+    sha256 = "193zcvzbhxwwkwbgmnlihhhazwkajycxf4r71jz1m12w301sjhq5";
+  };
+
+  postPatch = ''
+    # https://github.com/blue-yonder/bonfire/pull/24
+    substituteInPlace requirements.txt \
+      --replace "arrow>=0.5.4,<0.8" "arrow>=0.5.4" \
+      --replace "keyring>=9,<10"    "keyring>=9" \
+      --replace "click>=3.3,<7"     "click>=3.3"
+    # pip fails when encountering the git hash for the package version
+    substituteInPlace setup.py \
+      --replace "version=version," "version='${version}',"
+    # remove extraneous files
+    substituteInPlace setup.cfg \
+      --replace "data_files = *.rst, *.txt" ""
+  '';
+
+  buildInputs = [ httpretty pytest pytestcov ];
+
+  preCheck = ''
+    # fix compatibility with pytest 4
+    substituteInPlace setup.cfg --replace "[pytest]" "[tool:pytest]"
+  '';
+
+  propagatedBuildInputs = [ arrow click keyring parsedatetime requests six termcolor ];
+
+  meta = with stdenv.lib; {
+    homepage = https://pypi.python.org/pypi/bonfire;
+    description = "CLI Graylog Client with Follow Mode";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.womfoo ];
+    platforms = platforms.linux;
+    broken = true; # no longer compatible with new arrow package
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/brltty/default.nix b/nixpkgs/pkgs/tools/misc/brltty/default.nix
new file mode 100644
index 000000000000..fa7457b417e5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/brltty/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, fetchurl, pkgconfig, python3, bluez
+, alsaSupport ? stdenv.isLinux, alsaLib ? null
+, systemdSupport ? stdenv.isLinux, systemd ? null }:
+
+assert alsaSupport -> alsaLib != null;
+assert systemdSupport -> systemd != null;
+
+stdenv.mkDerivation rec {
+  name = "brltty-6.0";
+
+  src = fetchurl {
+    url = "http://brltty.com/archive/${name}.tar.gz";
+    sha256 = "0lmp9ab8gp4yv8m3qx4gxns3prrh7kvh8sfcd6vc45h40cgcsjxg";
+  };
+
+  nativeBuildInputs = [ pkgconfig python3.pkgs.cython ];
+  buildInputs = [ bluez ]
+    ++ stdenv.lib.optional alsaSupport alsaLib
+    ++ stdenv.lib.optional systemdSupport systemd;
+
+  meta = {
+    description = "Access software for a blind person using a braille display";
+    longDescription = ''
+      BRLTTY is a background process (daemon) which provides access to the Linux/Unix
+      console (when in text mode) for a blind person using a refreshable braille display.
+      It drives the braille display, and provides complete screen review functionality.
+      Some speech capability has also been incorporated.
+    '';
+    homepage = http://www.brltty.com/;
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = [ stdenv.lib.maintainers.bramd ];
+    platforms = stdenv.lib.platforms.all;
+  };
+
+  makeFlags = [ "PYTHON_PREFIX=$(out)" ];
+
+  preConfigurePhases = [ "preConfigure" ];
+
+  preConfigure = ''
+    substituteInPlace configure --replace /sbin/ldconfig ldconfig
+  '';
+}
diff --git a/nixpkgs/pkgs/tools/misc/broadlink-cli/default.nix b/nixpkgs/pkgs/tools/misc/broadlink-cli/default.nix
new file mode 100644
index 000000000000..c40ccad5e396
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/broadlink-cli/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, python2Packages, fetchFromGitHub }:
+
+python2Packages.buildPythonApplication {
+  pname = "broadlink-cli";
+  inherit (python2Packages.broadlink) version;
+
+  # the tools are available as part of the source distribution from GH but
+  # not pypi, so we have to fetch them here.
+  src = fetchFromGitHub {
+    owner  = "mjg59";
+    repo   = "python-broadlink";
+    # this rev is version 0.9
+    rev    = "766b7b00fb1cec868e3d5fca66f1aada208959ce";
+    sha256 = "0j0idzxmpwkb1lbgvi9df2hbxafm5hxjc6mgg5481lq7z4z1r4nb";
+  };
+
+  format = "other";
+
+  propagatedBuildInputs = with python2Packages; [
+    broadlink
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 -t $out/bin cli/broadlink_{cli,discovery}
+    install -Dm644 -t $out/share/doc/broadlink cli/README.md
+
+    runHook postInstall
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Tools for interfacing with Broadlink RM2/3 (Pro) remote controls, A1 sensor platforms and SP2/3 smartplugs";
+    maintainers = with maintainers; [ peterhoeg ];
+    inherit (python2Packages.broadlink.meta) homepage license;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/broot/default.nix b/nixpkgs/pkgs/tools/misc/broot/default.nix
new file mode 100644
index 000000000000..bca0f8099091
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/broot/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, rustPlatform, fetchFromGitHub, coreutils, installShellFiles }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "broot";
+  version = "0.11.9";
+
+  src = fetchFromGitHub {
+    owner = "Canop";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1kif1113qdxg4hr1mfgg1fh10zgl9cl117cm1bfjaabw11k75cvj";
+  };
+
+  cargoSha256 = "0636qkgkw027s5dz2mryhghlm6kn3s7cfy4i8rxywr8r3w8c40y0";
+  verifyCargoDeps = true;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postPatch = ''
+    substituteInPlace src/verb_store.rs --replace '"/bin/' '"${coreutils}/bin/'
+  '';
+
+  postInstall = ''
+    # install shell completion files
+    OUT_DIR=target/release/build/broot-*/out
+
+    installShellCompletion --bash $OUT_DIR/{br,broot}.bash
+    installShellCompletion --fish $OUT_DIR/{br,broot}.fish
+    installShellCompletion --zsh $OUT_DIR/{_br,_broot}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "An interactive tree view, a fuzzy search, a balanced BFS descent and customizable commands";
+    homepage = "https://dystroy.org/broot/";
+    maintainers = with maintainers; [ magnetophon ];
+    license = with licenses; [ mit ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/buildtorrent/default.nix b/nixpkgs/pkgs/tools/misc/buildtorrent/default.nix
new file mode 100644
index 000000000000..b86bc38cb267
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/buildtorrent/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl }:
+
+let version = "0.8"; in
+
+stdenv.mkDerivation rec {
+  pname = "buildtorrent";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://mathr.co.uk/blog/code/${pname}-${version}.tar.gz";
+    sha256 = "e8e27647bdb38873ac570d46c1a9689a92b01bb67f59089d1cdd08784f7052d0";
+  };
+
+  meta = {
+    description = "A simple commandline torrent creator";
+    homepage = http://mathr.co.uk/blog/torrent.html;
+    license = stdenv.lib.licenses.gpl3Plus;
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/byobu/default.nix b/nixpkgs/pkgs/tools/misc/byobu/default.nix
new file mode 100644
index 000000000000..94db365f6d6d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/byobu/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchurl, python3, perl, textual-window-manager }:
+
+stdenv.mkDerivation rec {
+  version = "5.130";
+  name = "byobu-" + version;
+
+  src = fetchurl {
+    url = "https://launchpad.net/byobu/trunk/${version}/+download/byobu_${version}.orig.tar.gz";
+    sha256 = "0qblw5vz90fixvpwfvlc8bkljsviri5gj77cp63l44ns3lb19r27";
+  };
+
+  doCheck = true;
+
+  buildInputs = [ python3 perl ];
+  propagatedBuildInputs = [ textual-window-manager ];
+
+  meta = {
+    homepage = https://launchpad.net/byobu/;
+    description = "Text-based window manager and terminal multiplexer";
+
+    longDescription =
+      ''Byobu is a GPLv3 open source text-based window manager and terminal multiplexer. 
+        It was originally designed to provide elegant enhancements to the otherwise functional, 
+        plain, practical GNU Screen, for the Ubuntu server distribution. 
+        Byobu now includes an enhanced profiles, convenient keybindings, 
+        configuration utilities, and toggle-able system status notifications for both 
+        the GNU Screen window manager and the more modern Tmux terminal multiplexer, 
+        and works on most Linux, BSD, and Mac distributions.
+      '';
+
+    license = stdenv.lib.licenses.gpl3;
+
+    platforms = stdenv.lib.platforms.unix;
+    maintainers = [ stdenv.lib.maintainers.qknight ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/calamares/default.nix b/nixpkgs/pkgs/tools/misc/calamares/default.nix
new file mode 100644
index 000000000000..8f365d023d2c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/calamares/default.nix
@@ -0,0 +1,63 @@
+{ lib, fetchurl, boost, cmake, extra-cmake-modules, kparts, kpmcore
+, kservice, libatasmart, libxcb, libyamlcpp, parted, polkit-qt, python, qtbase
+, qtquickcontrols, qtsvg, qttools, qtwebengine, utillinux, glibc, tzdata
+, ckbcomp, xkeyboard_config, mkDerivation
+}:
+
+mkDerivation rec {
+  pname = "calamares";
+  version = "3.2.17.1";
+
+  # release including submodule
+  src = fetchurl {
+    url = "https://github.com/${pname}/${pname}/releases/download/v${version}/${pname}-${version}.tar.gz";
+    sha256 = "156zpjyw8w4y23aa60mvg3d3mr0kzfq5jkl7ixgahq33zpc17ms8";
+  };
+
+  buildInputs = [
+    boost cmake extra-cmake-modules kparts.dev kpmcore.out kservice.dev
+    libatasmart libxcb libyamlcpp parted polkit-qt python qtbase
+    qtquickcontrols qtsvg qttools qtwebengine.dev utillinux
+  ];
+
+  enableParallelBuilding = false;
+
+  cmakeFlags = [
+    "-DPYTHON_LIBRARY=${python}/lib/lib${python.libPrefix}.so"
+    "-DPYTHON_INCLUDE_DIR=${python}/include/${python.libPrefix}"
+    "-DCMAKE_VERBOSE_MAKEFILE=True"
+    "-DCMAKE_BUILD_TYPE=Release"
+    "-DWITH_PYTHONQT:BOOL=ON"
+  ];
+
+  POLKITQT-1_POLICY_FILES_INSTALL_DIR = "$(out)/share/polkit-1/actions";
+
+  patchPhase = ''
+    sed -e "s,/usr/bin/calamares,$out/bin/calamares," \
+        -i calamares.desktop \
+        -i com.github.calamares.calamares.policy
+
+    sed -e 's,/usr/share/zoneinfo,${tzdata}/share/zoneinfo,' \
+        -i src/modules/locale/timezonewidget/localeconst.h \
+        -i src/modules/locale/SetTimezoneJob.cpp
+
+    sed -e 's,/usr/share/i18n/locales,${glibc.out}/share/i18n/locales,' \
+        -i src/modules/locale/timezonewidget/localeconst.h
+
+    sed -e 's,/usr/share/X11/xkb/rules/base.lst,${xkeyboard_config}/share/X11/xkb/rules/base.lst,' \
+        -i src/modules/keyboard/keyboardwidget/keyboardglobal.h
+
+    sed -e 's,"ckbcomp","${ckbcomp}/bin/ckbcomp",' \
+        -i src/modules/keyboard/keyboardwidget/keyboardpreview.cpp
+
+    sed "s,\''${POLKITQT-1_POLICY_FILES_INSTALL_DIR},''${out}/share/polkit-1/actions," \
+        -i CMakeLists.txt
+  '';
+
+  meta = with lib; {
+    description = "Distribution-independent installer framework";
+    license = licenses.gpl3;
+    maintainers = with lib.maintainers; [ manveru ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/capture/default.nix b/nixpkgs/pkgs/tools/misc/capture/default.nix
new file mode 100644
index 000000000000..e7134961c252
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/capture/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, slop, ffmpeg, fetchFromGitHub, makeWrapper}:
+
+stdenv.mkDerivation {
+  pname = "capture-unstable";
+  version = "2019-03-10";
+
+  src = fetchFromGitHub {
+    owner = "buhman";
+    repo = "capture";
+    rev  = "80dd9e7195aad5c132badef610f19509f3935b24";
+    sha256 = "0zyyg4mvrny7cc2xgvfip97b6yc75ka5ni39rwls93971jbk83d6";
+  };
+
+  buildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    install -Dm755 src/capture.sh $out/bin/capture
+
+    patchShebangs $out/bin/capture
+    wrapProgram $out/bin/capture \
+      --prefix PATH : '${stdenv.lib.makeBinPath [ slop ffmpeg ]}'
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A no bullshit screen capture tool";
+    homepage = "https://github.com/buhman/capture";
+    maintainers = [ maintainers.ar1a ];
+    license = licenses.gpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/catimg/default.nix b/nixpkgs/pkgs/tools/misc/catimg/default.nix
new file mode 100644
index 000000000000..ac2f3f3411a2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/catimg/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitHub, cmake } :
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  pname = "catimg";
+  version = "2.6.0";
+
+  src = fetchFromGitHub {
+    owner = "posva";
+    repo = pname;
+    rev = version;
+    sha256 = "0g9ywbgy162wiam9hc3yqpq5q4gyxa8fj4jskr3fdz8z8jjaabzz";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = {
+    license = licenses.mit;
+    homepage = "https://github.com/posva/catimg";
+    description = "Insanely fast image printing in your terminal";
+    maintainers = with maintainers; [ ryantm ];
+    platforms = platforms.unix;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/ccze/default.nix b/nixpkgs/pkgs/tools/misc/ccze/default.nix
new file mode 100644
index 000000000000..409297de9f75
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ccze/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, autoconf, ncurses, pcre }:
+
+stdenv.mkDerivation rec {
+  name = "ccze-0.2.1-2";
+
+  src = fetchurl {
+    url = "https://github.com/madhouse/ccze/archive/${name}.tar.gz";
+    sha256 = "1amavfvyls4v0gnikk43n2rpciaspxifgrmvi99qj6imv3mfg66n";
+  };
+
+  buildInputs = [ autoconf ncurses pcre ];
+
+  preConfigure = '' autoheader && autoconf '';
+
+  meta = with stdenv.lib; {
+    description = "Fast, modular log colorizer";
+    longDescription = ''
+      Fast log colorizer written in C, intended to be a drop-in replacement
+      for the Perl colorize tool.  Includes plugins for a variety of log
+      formats (Apache, Postfix, Procmail, etc.).
+    '';
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ malyn ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/chafa/default.nix b/nixpkgs/pkgs/tools/misc/chafa/default.nix
new file mode 100644
index 000000000000..5055ce67d306
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/chafa/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, fetchFromGitHub, autoconf, automake, libtool, pkgconfig, which, libxslt, libxml2, docbook_xml_dtd_412, docbook_xsl, glib, imagemagick, darwin }:
+
+
+stdenv.mkDerivation rec{
+  version = "1.2.1";
+  pname = "chafa";
+
+  src = fetchFromGitHub {
+    owner = "hpjansson";
+    repo = "chafa";
+    rev = version;
+    sha256 = "19dck47v4hd07q9742mgb928h7y1y9638qlh2rzsvqsfqvqmxh85";
+  };
+
+  nativeBuildInputs = [ autoconf
+                        automake
+                        libtool
+                        pkgconfig
+                        which
+                        libxslt
+                        libxml2
+                        docbook_xml_dtd_412
+                        docbook_xsl
+                      ];
+
+  buildInputs = [ glib imagemagick ] ++ stdenv.lib.optional stdenv.isDarwin [ darwin.apple_sdk.frameworks.ApplicationServices ];
+
+  patches = [ ./xmlcatalog_patch.patch ];
+
+  preConfigure = ''
+    ./autogen.sh
+  '';
+
+  configureFlags = [ "--enable-man"
+                     "--with-xml-catalog=${docbook_xml_dtd_412}/xml/dtd/docbook/catalog.xml"
+                   ];
+
+  meta = with stdenv.lib; {
+    description = "Terminal graphics for the 21st century.";
+    homepage = https://hpjansson.org/chafa/;
+    license = licenses.lgpl3Plus;
+    platforms = platforms.all;
+    maintainers = [ maintainers.mog ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/chafa/xmlcatalog_patch.patch b/nixpkgs/pkgs/tools/misc/chafa/xmlcatalog_patch.patch
new file mode 100644
index 000000000000..6bf988d6117f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/chafa/xmlcatalog_patch.patch
@@ -0,0 +1,23 @@
+diff --git a/configure.ac b/configure.ac
+index 0055a70..fd4a905 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -111,18 +111,6 @@ AS_IF([ test "$enable_man" != no ], [
+   ])
+ ])
+ 
+-AS_IF([test "$enable_man" != no], [
+-  dnl check for DocBook XSL stylesheets in the local catalog
+-  JH_CHECK_XML_CATALOG([http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl],
+-     [DocBook XSL Stylesheets], [have_docbook_style=yes],[have_docbook_style=no])
+-  AS_IF([ test "$have_docbook_style" != yes ], [
+-    AS_IF([ test "$enable_man" = yes ], [
+-      AC_MSG_ERROR([DocBook XSL Stylesheets are required for --enable-man])
+-    ])
+-    enable_man=no
+-  ])
+-])
+-
+ AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
+ 
+ AC_MSG_CHECKING([whether to generate man pages])
diff --git a/nixpkgs/pkgs/tools/misc/chelf/default.nix b/nixpkgs/pkgs/tools/misc/chelf/default.nix
new file mode 100644
index 000000000000..f9740f223754
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/chelf/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "chelf";
+  version = "0.2.2";
+
+  src = fetchFromGitHub {
+    owner = "Gottox";
+    repo = "chelf";
+    rev = "v${version}";
+    sha256 = "0xwd84aynyqsi2kcndbff176vmhrak3jmn3lfcwya59653pppjr6";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv chelf $out/bin/chelf
+  '';
+
+  meta = with stdenv.lib; {
+    description = "change or display the stack size of an ELF binary";
+    homepage = https://github.com/Gottox/chelf;
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/chezmoi/default.nix b/nixpkgs/pkgs/tools/misc/chezmoi/default.nix
new file mode 100644
index 000000000000..637f7a17695c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/chezmoi/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "chezmoi";
+  version = "1.7.10";
+
+  src = fetchFromGitHub {
+    owner = "twpayne";
+    repo = "chezmoi";
+    rev = "v${version}";
+    sha256 = "1miki6p611s0m3s0q5qsc9cks0akm59ks3x1gzi9wvhzf6k9h0dn";
+  };
+
+  modSha256 = "0rzwslpikadhqw8rcbg4hbasfcgjcc850ccfnprdxva4g1bb5rqc";
+
+  buildFlagsArray = [
+    "-ldflags=-s -w -X github.com/twpayne/chezmoi/cmd.VersionStr=${version}"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --bash completions/chezmoi-completion.bash
+    installShellCompletion --fish completions/chezmoi.fish
+    installShellCompletion --zsh completions/chezmoi.zsh
+  '';
+
+  subPackages = [ "." ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/twpayne/chezmoi;
+    description = "Manage your dotfiles across multiple machines, securely";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jhillyerd ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/chrome-export/default.nix b/nixpkgs/pkgs/tools/misc/chrome-export/default.nix
new file mode 100644
index 000000000000..8639f6f6f794
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/chrome-export/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchFromGitHub
+, python3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "chrome-export";
+  version = "2.0.2";
+
+  src = fetchFromGitHub {
+    owner = "bdesham";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0p1914wfjggjavw7a0dh2nb7z97z3wrkwrpwxkdc2pj5w5lv405m";
+  };
+
+  buildInputs = [ python3 ];
+
+  dontBuild = true;
+  installPhase = ''
+    mkdir -p $out/bin
+    cp export-chrome-bookmarks export-chrome-history $out/bin
+    mkdir -p $out/share/man/man1
+    cp man_pages/*.1 $out/share/man/man1
+  '';
+  doInstallCheck = true;
+  installCheckPhase = ''
+    bash test/run_tests $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Scripts to save Google Chrome's bookmarks and history as HTML bookmarks files";
+    homepage = "https://github.com/bdesham/chrome-export";
+    license = [ licenses.isc ];
+    maintainers = [ maintainers.bdesham ];
+    platforms = python3.meta.platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cht.sh/default.nix b/nixpkgs/pkgs/tools/misc/cht.sh/default.nix
new file mode 100644
index 000000000000..4d33d957b4d1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cht.sh/default.nix
@@ -0,0 +1,45 @@
+{ stdenv
+, fetchFromGitHub
+, makeWrapper
+, curl
+, ncurses
+, rlwrap
+, xsel
+}:
+
+stdenv.mkDerivation {
+  pname = "cht.sh";
+  version = "unstable-2019-08-06";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  src = fetchFromGitHub {
+    owner = "chubin";
+    repo = "cheat.sh";
+    rev = "f507ba51d6bc1ae6c7df808cadbe4f8603951b6b";
+    sha256 = "0r7x9a3qzzkbd1m5zdlkpmhx0p7b7ja42190s7fidls3dsm710g0";
+  };
+
+  # Fix ".cht.sh-wrapped" in the help message
+  postPatch = "substituteInPlace share/cht.sh.txt --replace '\${0##*/}' cht.sh";
+
+  installPhase = ''
+    install -m755 -D share/cht.sh.txt "$out/bin/cht.sh"
+
+    # install shell completion files
+    mkdir -p $out/share/bash-completion/completions $out/share/zsh/site-functions
+    mv share/bash_completion.txt $out/share/bash-completion/completions/cht.sh
+    cp share/zsh.txt $out/share/zsh/site-functions/_cht
+
+    wrapProgram "$out/bin/cht.sh" \
+      --prefix PATH : "${stdenv.lib.makeBinPath [ curl rlwrap ncurses xsel ]}"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "CLI client for cheat.sh, a community driven cheat sheet";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fgaz evanjs ];
+    homepage = https://github.com/chubin/cheat.sh;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/ckb-next/default.nix b/nixpkgs/pkgs/tools/misc/ckb-next/default.nix
new file mode 100644
index 000000000000..738430f561bd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ckb-next/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, mkDerivation, fetchFromGitHub, substituteAll, udev
+, pkgconfig, qtbase, cmake, zlib, kmod }:
+
+mkDerivation rec {
+  version = "0.4.2";
+  pname = "ckb-next";
+
+  src = fetchFromGitHub {
+    owner = "ckb-next";
+    repo = "ckb-next";
+    rev = "v${version}";
+    sha256 = "1mkx1psw5xnpscdfik1kpzsnfhhkn3571i7acr9gxyjr27sckplc";
+  };
+
+  buildInputs = [
+    udev
+    qtbase
+    zlib
+  ];
+
+  nativeBuildInputs = [
+    pkgconfig
+    cmake
+  ];
+
+  cmakeFlags = [
+    "-DINSTALL_DIR_ANIMATIONS=libexec"
+    "-DUDEV_RULE_DIRECTORY=lib/udev/rules.d"
+    "-DFORCE_INIT_SYSTEM=systemd"
+  ];
+
+  patches = [
+    ./install-dirs.patch
+    (substituteAll {
+      name = "ckb-next-modprobe.patch";
+      src = ./modprobe.patch;
+      inherit kmod;
+    })
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Driver and configuration tool for Corsair keyboards and mice";
+    homepage = https://github.com/ckb-next/ckb-next;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ kierdavis ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ckb-next/install-dirs.patch b/nixpkgs/pkgs/tools/misc/ckb-next/install-dirs.patch
new file mode 100644
index 000000000000..0f113d71aa3f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ckb-next/install-dirs.patch
@@ -0,0 +1,13 @@
+diff --git a/src/daemon/CMakeLists.txt b/src/daemon/CMakeLists.txt
+index 2fc10a8..22dbd14 100644
+--- a/src/daemon/CMakeLists.txt
++++ b/src/daemon/CMakeLists.txt
+@@ -421,7 +421,7 @@ if ("${CKB_NEXT_INIT_SYSTEM}" STREQUAL "launchd")
+ elseif ("${CKB_NEXT_INIT_SYSTEM}" STREQUAL "systemd")
+     install(
+         FILES "${CMAKE_CURRENT_BINARY_DIR}/service/ckb-next-daemon.service"
+-        DESTINATION "/usr/lib/systemd/system"
++        DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/systemd/system"
+         PERMISSIONS
+         OWNER_READ OWNER_WRITE
+         GROUP_READ
diff --git a/nixpkgs/pkgs/tools/misc/ckb-next/modprobe.patch b/nixpkgs/pkgs/tools/misc/ckb-next/modprobe.patch
new file mode 100644
index 000000000000..a2cbe262e89f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ckb-next/modprobe.patch
@@ -0,0 +1,26 @@
+diff --git a/src/daemon/input_linux.c b/src/daemon/input_linux.c
+index 8489f5b..b851419 100644
+--- a/src/daemon/input_linux.c
++++ b/src/daemon/input_linux.c
+@@ -63,7 +63,7 @@ int os_inputopen(usbdevice* kb){
+ 
+     // If not available, load the module
+     if(fd < 0){
+-        if(system("modprobe uinput") != 0) {
++        if(system("@kmod@/bin/modprobe uinput") != 0) {
+             ckb_fatal("Failed to load uinput module\n");
+             return 1;
+         }
+diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp
+index 1eb95bd..f7d38ba 100644
+--- a/src/gui/mainwindow.cpp
++++ b/src/gui/mainwindow.cpp
+@@ -284,7 +284,7 @@ void MainWindow::updateVersion(){
+ #elif defined(Q_OS_LINUX)
+             if(!(QFileInfo("/dev/uinput").exists() || QFileInfo("/dev/input/uinput").exists())){
+                 QProcess modprobe;
+-                modprobe.start("modprobe", QStringList("uinput"));
++                modprobe.start("@kmod@/bin/modprobe", QStringList("uinput"));
+ 
+                 if(!modprobe.waitForFinished())
+                     qDebug() << "Modprobe error";
diff --git a/nixpkgs/pkgs/tools/misc/clac/default.nix b/nixpkgs/pkgs/tools/misc/clac/default.nix
new file mode 100644
index 000000000000..544379d8d217
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/clac/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub }:
+stdenv.mkDerivation rec {
+  pname = "clac";
+  version = "0.0.0.20170503";
+
+  src = fetchFromGitHub {
+    owner = "soveran";
+    repo = "clac";
+    rev = "e92bd5cbab0d694cef945e3478820c9505e06f04";
+    sha256 = "0j8p1npgq32s377c9lw959h5i2csq4yb27cvg7av17bji46816bv";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  postInstall = ''
+    mkdir -p "$out/share/doc/${pname}"
+    cp README* LICENSE "$out/share/doc/${pname}"
+  '';
+
+  meta = {
+    inherit version;
+    description = "Interactive stack-based calculator";
+    license = stdenv.lib.licenses.bsd2;
+    maintainers = [stdenv.lib.maintainers.raskin];
+    platforms = stdenv.lib.platforms.unix;
+    homepage = https://github.com/soveran/clac;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/clasp/default.nix b/nixpkgs/pkgs/tools/misc/clasp/default.nix
new file mode 100644
index 000000000000..31c35af81186
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/clasp/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl }:
+
+let
+  version = "3.1.4";
+in
+
+stdenv.mkDerivation {
+  pname = "clasp";
+  inherit version;
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/potassco/clasp/${version}/clasp-${version}-source.tar.gz";
+    sha256 = "1zkjqc4gp4n9p2kf3k3z8x82g42any4p3shhhivny89z1jlxi9zn";
+  };
+
+  preConfigure = "patchShebangs ./configure.sh";
+  configureScript = "./configure.sh";
+
+  preBuild = "cd build/release";
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp bin/clasp $out/bin/clasp
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Answer set solver for (extended) normal and disjunctive logic programs";
+    homepage = http://potassco.sourceforge.net/;
+    platforms = platforms.all;
+    maintainers = [ maintainers.hakuch ];
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/claws/default.nix b/nixpkgs/pkgs/tools/misc/claws/default.nix
new file mode 100644
index 000000000000..10347e6e794d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/claws/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "claws";
+  version = "0.3.2";
+
+  goPackagePath = "github.com/thehowl/${pname}";
+
+  src = fetchFromGitHub {
+    rev = version;
+    owner = "thehowl";
+    repo = pname;
+    sha256 = "0nl7xvdivnabqr98mh3m1pwqznprsaqpagny6zcwwmz480x4pmfz";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/thehowl/claws";
+    description = "Interactive command line client for testing websocket servers";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ petabyteboy ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/clex/default.nix b/nixpkgs/pkgs/tools/misc/clex/default.nix
new file mode 100644
index 000000000000..d5fd4e97df10
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/clex/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "clex";
+  version = "4.6.patch9";
+
+  src = fetchurl {
+    sha256 = "1qj5yp8k90wag5sb3zrm2pn90qqx3zbrgf2gqpqpdqmlgffnv1jc";
+    url = "${meta.homepage}/download/${pname}-${version}.tar.gz";
+  };
+
+  buildInputs = [ ncurses ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "File manager with full-screen terminal interface";
+    longDescription = ''
+      CLEX (pronounced KLEKS) displays directory contents including the file
+      status details and provides features like command history, filename
+      insertion, or name completion in order to help users to create commands
+      to be executed by the shell. There are no built-in commands, CLEX is an
+      add-on to your favorite shell.
+    '';
+    homepage = http://www.clex.sk;
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/clipman/default.nix b/nixpkgs/pkgs/tools/misc/clipman/default.nix
new file mode 100644
index 000000000000..861d384f1f82
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/clipman/default.nix
@@ -0,0 +1,30 @@
+{ buildGoModule, fetchFromGitHub, lib, wl-clipboard, makeWrapper }:
+
+buildGoModule rec {
+  pname = "clipman";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "yory8";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0266qb8p5l8j25nn51ajsbiij8bh5r7ywphf2x1l7wfhbzgxz12d";
+  };
+
+  modSha256 = "0aw0ng8pk8qzn1iv79iw0v9zr8xdc8p9xnigr3ij86038f7aqdhv";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    wrapProgram $out/bin/clipman \
+      --prefix PATH : ${lib.makeBinPath [ wl-clipboard ]}
+  '';
+
+  meta = with lib; {
+    homepage = https://github.com/yory8/clipman;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ ma27 ];
+    description = "A simple clipboard manager for Wayland";
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/clipnotify/default.nix b/nixpkgs/pkgs/tools/misc/clipnotify/default.nix
new file mode 100644
index 000000000000..91c428def280
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/clipnotify/default.nix
@@ -0,0 +1,26 @@
+{ libX11, libXfixes, stdenv, fetchFromGitHub }:
+stdenv.mkDerivation rec {
+  pname = "clipnotify";
+  version = "git-2018-02-20";
+
+  src = fetchFromGitHub {
+    owner = "cdown";
+    repo  = "clipnotify";
+    rev   = "9cb223fbe494c5b71678a9eae704c21a97e3bddd";
+    sha256 = "1x9avjq0fgw0svcbw6b6873qnsqxbacls9sipmcv86xia4bxh8dn";
+  };
+
+  buildInputs = [ libX11 libXfixes ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp clipnotify $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Notify on new X clipboard events";
+    inherit (src.meta) homepage;
+    maintainers = with maintainers; [ jb55 ];
+    license = licenses.publicDomain;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/clipster/default.nix b/nixpkgs/pkgs/tools/misc/clipster/default.nix
new file mode 100644
index 000000000000..699285f26647
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/clipster/default.nix
@@ -0,0 +1,50 @@
+{fetchFromGitHub , stdenv, python3, gtk3, libwnck3,
+ gobject-introspection, wrapGAppsHook }:
+
+stdenv.mkDerivation  rec {
+  pname = "clipster";
+  version = "2.0.2";
+
+  src = fetchFromGitHub {
+    owner = "mrichar1";
+    repo = "clipster";
+    rev = version;
+    sha256 = "0582r8840dk4k4jj1zq6kmyh7z9drcng099bj7f4wvr468nb9z1p";
+  };
+
+  pythonEnv = python3.withPackages(ps: with ps; [ pygobject3 ]);
+
+  buildInputs =  [ pythonEnv gtk3 libwnck3 gobject-introspection wrapGAppsHook ];
+
+  installPhase = ''
+    sed -i 's/python/python3/g' clipster
+    mkdir -p $out/bin/
+    cp clipster $out/bin/
+  '';
+
+  meta = with stdenv.lib; {
+    description = "lightweight python clipboard manager";
+    longDescription = ''
+      Clipster was designed to try to add a good selection of useful features, while avoiding bad design decisions or becoming excessively large.
+      Its feature list includes:
+      - Event driven, rather than polling. More efficient, helps with power management.
+      - Control over when it write to disk, for similar reasons.
+      - Command-line options/config for everything.
+      - No global keybindings - that's the job of a Window Manager
+      - Sensible handling of unusual clipboard events. Some apps (Chrome, Emacs) trigger a clipboard 'update event' for every character you select, rather than just one event when you stop selecting.
+      - Preserves the last item in clipboard after an application closes. (Many apps clear the clipboard on exit).
+      - Minimal dependencies, no complicated build/install requirements.
+      - utf-8 support
+      - Proper handling of embedded newlines and control codes.
+      - Smart matching of urls, emails, regexes. (extract_*)
+      - Option to synchronise the SELECTION and CLIPBOARD clipboards. (sync_selections)
+      - Option to track one or both clipboards. (active_selections)
+      - Option to ignore clipboard updates form certain applications. (filter_classes)
+      - Ability to delete items in clipboard history.
+    '';
+    license = licenses.agpl3;
+    homepage = https://github.com/mrichar1/clipster;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.magnetophon ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cloc/default.nix b/nixpkgs/pkgs/tools/misc/cloc/default.nix
new file mode 100644
index 000000000000..6d567f6119ad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cloc/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchFromGitHub, makeWrapper, perlPackages }:
+
+stdenv.mkDerivation rec {
+  pname = "cloc";
+  version = "1.84";
+
+  src = fetchFromGitHub {
+    owner = "AlDanial";
+    repo = "cloc";
+    rev = version;
+    sha256 = "14xikdwcr6pcnkk2i43zrsj88z8b3mrv0svbnbvxvarw1id83pnn";
+  };
+
+  setSourceRoot = ''
+    sourceRoot=$(echo */Unix)
+  '';
+
+  buildInputs = [ makeWrapper ] ++ (with perlPackages; [
+    perl AlgorithmDiff ParallelForkManager RegexpCommon
+  ]);
+
+  makeFlags = [ "prefix=" "DESTDIR=$(out)" "INSTALL=install" ];
+
+  postFixup = "wrapProgram $out/bin/cloc --prefix PERL5LIB : $PERL5LIB";
+
+  meta = {
+    description = "A program that counts lines of source code";
+    homepage = https://github.com/AlDanial/cloc;
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.all;
+    maintainers = with stdenv.lib.maintainers; [ rycee ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cloud-sql-proxy/default.nix b/nixpkgs/pkgs/tools/misc/cloud-sql-proxy/default.nix
new file mode 100644
index 000000000000..bc23958b5815
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cloud-sql-proxy/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, buildGoPackage, fetchgit }:
+
+buildGoPackage rec {
+  pname = "cloud-sql-proxy";
+  version = "1.13";
+
+  goPackagePath = "github.com/GoogleCloudPlatform/cloudsql-proxy";
+
+  subPackages = [ "cmd/cloud_sql_proxy" ];
+
+  src = fetchgit {
+    rev = version;
+    url = "https://${goPackagePath}";
+    sha256 = "07n2hfhqa9hinabmx79aqqwxzzkky76x3jvpd89kch14fijbh532";
+  };
+
+  goDeps = ./deps.nix;
+
+  buildFlagsArray = [ "-ldflags=" "-X main.versionString=${version}" ];
+
+  meta = with stdenv.lib; {
+    description = "An authenticating proxy for Second Generation Google Cloud SQL databases";
+    homepage = "https://${goPackagePath}";
+    license = licenses.asl20;
+    maintainers = [ maintainers.nicknovitski ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cloud-sql-proxy/deps.nix b/nixpkgs/pkgs/tools/misc/cloud-sql-proxy/deps.nix
new file mode 100644
index 000000000000..6898833b6f12
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cloud-sql-proxy/deps.nix
@@ -0,0 +1,48 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "bazil.org/fuse";
+    fetch = {
+      type = "git";
+      url = "https://github.com/bazil/fuse";
+      rev = "65cc252bf6691cb3c7014bcb2c8dc29de91e3a7e";
+      sha256 = "0qjm9yrhc5h632wwhklqzhalid4lxcm9iwsqs3jahp303rm27vpk";
+    };
+  }
+  {
+    goPackagePath = "cloud.google.com/go";
+    fetch = {
+      type = "git";
+      url = "https://code.googlesource.com/gocloud";
+      rev = "dba8c2c195294739180b3e6865f8893eb808676e";
+      sha256 = "1l6aj26sd7byjcgi2b4k452fcg949v28lff2fkw5nq2qr2fjnqxy";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev = "9b4f9f5ad5197c79fd623a3638e70d8b26cef344";
+      sha256 = "06hvxy113h76f31gv1mq6vdr6xja1zv0fdig686l2b4y2b6swych";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/oauth2";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/oauth2";
+      rev = "9dcd33a902f40452422c2367fefcb95b54f9f8f8";
+      sha256 = "15lfa780h2ff50qvcdl7sfs9f9j13fa5kfj6fb292rk3fwxhnx4i";
+    };
+  }
+  {
+    goPackagePath = "google.golang.org/api";
+    fetch = {
+      type = "git";
+      url = "https://code.googlesource.com/google-api-go-client";
+      rev = "39567f0042a03aeb2691599961ed4454e43d5063";
+      sha256 = "0c5gx156v1pk0gqvl9w43l06z0rh9g2sackpl9ghds0asnyqx04d";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/misc/cloud-utils/default.nix b/nixpkgs/pkgs/tools/misc/cloud-utils/default.nix
new file mode 100644
index 000000000000..cdd1891fb405
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cloud-utils/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchurl, makeWrapper
+, gawk, gnused, utillinux, file
+, wget, python3, qemu-utils, euca2ools
+, e2fsprogs, cdrkit }:
+
+stdenv.mkDerivation rec {
+  # NOTICE: if you bump this, make sure to run
+  # $ nix-build nixos/release-combined.nix -A nixos.tests.ec2-nixops
+  # growpart is needed in initrd in nixos/system/boot/grow-partition.nix
+  pname = "cloud-utils";
+  version = "0.30";
+  src = fetchurl {
+    url = "https://launchpad.net/cloud-utils/trunk/0.3/+download/cloud-utils-${version}.tar.gz";
+    sha256 = "19ca9ckwwsvlqrjz19bc93rq4gv3y4ak7551li2qk95caqyxsq3k";
+  };
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ python3 ];
+  installFlags = [ "LIBDIR=$(out)/lib" "BINDIR=$(out)/bin" "MANDIR=$(out)/man/man1" "DOCDIR=$(out)/doc" ];
+
+  # according to https://packages.ubuntu.com/source/zesty/cloud-utils
+  binDeps = [
+    wget e2fsprogs file gnused gawk utillinux qemu-utils euca2ools cdrkit
+  ];
+
+  postFixup = ''
+    for i in $out/bin/*; do
+      wrapProgram $i --prefix PATH : "${stdenv.lib.makeBinPath binDeps}:$out/bin"
+    done
+  '';
+
+  dontBuild = true;
+
+  meta = with stdenv.lib; {
+    platforms = platforms.unix;
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/colord-gtk/default.nix b/nixpkgs/pkgs/tools/misc/colord-gtk/default.nix
new file mode 100644
index 000000000000..b2113f8304cf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/colord-gtk/default.nix
@@ -0,0 +1,58 @@
+{ stdenv
+, fetchurl
+, colord
+, gettext
+, meson
+, ninja
+, gobject-introspection
+, gtk-doc
+, docbook-xsl-ns
+, docbook_xsl
+, docbook_xml_dtd_412
+, libxslt
+, glib
+, gtk3
+, pkgconfig
+, lcms2
+}:
+
+stdenv.mkDerivation rec {
+  pname = "colord-gtk";
+  version = "0.2.0";
+
+  outputs = [ "out" "dev" "devdoc" ];
+
+  src = fetchurl {
+    url = "https://www.freedesktop.org/software/colord/releases/${pname}-${version}.tar.xz";
+    sha256 = "05y78jbcbar22sgyhzffhv98dbpl4v6k8j9p807h17y6ighglk1a";
+  };
+
+  nativeBuildInputs = [
+    pkgconfig
+    gettext
+    meson
+    ninja
+    gobject-introspection
+    gtk-doc
+    docbook-xsl-ns
+    docbook_xsl
+    docbook_xml_dtd_412
+    libxslt
+  ];
+
+  buildInputs = [
+    glib
+    lcms2
+  ];
+
+  propagatedBuildInputs = [
+    colord
+    gtk3
+  ];
+
+  meta = with stdenv.lib; {
+    homepage = "https://www.freedesktop.org/software/colord/intro.html";
+    license = licenses.lgpl21Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/colord-kde/default.nix b/nixpkgs/pkgs/tools/misc/colord-kde/default.nix
new file mode 100644
index 000000000000..41c80146e68f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/colord-kde/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, lib, fetchurl
+, extra-cmake-modules, ki18n
+, kconfig, kconfigwidgets, kcoreaddons, kdbusaddons, kiconthemes, kcmutils
+, kio, knotifications, plasma-framework, kwidgetsaddons, kwindowsystem
+, kitemviews, lcms2, libXrandr, qtx11extras
+}:
+
+stdenv.mkDerivation rec {
+  pname = "colord-kde";
+  version = "0.5.0";
+
+  src = fetchurl {
+    url = "http://download.kde.org/stable/colord-kde/${version}/src/${pname}-${version}.tar.xz";
+    sha256 = "0brdnpflm95vf4l41clrqxwvjrdwhs859n7401wxcykkmw4m0m3c";
+  };
+
+  nativeBuildInputs = [ extra-cmake-modules ];
+
+  buildInputs = [
+    kconfig kconfigwidgets kcoreaddons kdbusaddons kiconthemes
+    kcmutils ki18n kio knotifications plasma-framework kwidgetsaddons
+    kwindowsystem kitemviews lcms2 libXrandr qtx11extras
+  ];
+
+  meta = with lib; {
+    homepage = https://projects.kde.org/projects/playground/graphics/colord-kde;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ ttuegel ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/colord/default.nix b/nixpkgs/pkgs/tools/misc/colord/default.nix
new file mode 100644
index 000000000000..54379ec08f07
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/colord/default.nix
@@ -0,0 +1,114 @@
+{ stdenv
+, fetchurl
+, nixosTests
+, bash-completion
+, glib
+, polkit
+, pkgconfig
+, gettext
+, gusb
+, lcms2
+, sqlite
+, systemd
+, dbus
+, gobject-introspection
+, argyllcms
+, meson
+, ninja
+, vala
+, libgudev
+, wrapGAppsHook
+, shared-mime-info
+, sane-backends
+, docbook_xsl
+, docbook_xsl_ns
+, docbook_xml_dtd_412
+, gtk-doc
+, libxslt
+}:
+
+stdenv.mkDerivation rec {
+  pname = "colord";
+  version = "1.4.4";
+
+  outputs = [ "out" "dev" "devdoc" "man" "installedTests" ];
+
+  src = fetchurl {
+    url = "https://www.freedesktop.org/software/colord/releases/${pname}-${version}.tar.xz";
+    sha256 = "19f0938fr7nvvm3jr263dlknaq7md40zrac2npfyz25zc00yh3ws";
+  };
+
+  patches = [
+    # Put installed tests into its own output
+    ./installed-tests-path.patch
+  ];
+
+  postPatch = ''
+    for file in data/tests/meson.build lib/colord/cd-test-shared.c lib/colord/meson.build; do
+        substituteInPlace $file --subst-var-by installed_tests_dir "$installedTests"
+    done
+  '';
+
+  mesonFlags = [
+    "--localstatedir=/var"
+    "-Dinstalled_tests=true"
+    "-Dlibcolordcompat=true"
+    "-Dsane=true"
+    "-Dvapi=true"
+    "-Ddaemon_user=colord"
+  ];
+
+  nativeBuildInputs = [
+    docbook_xml_dtd_412
+    docbook_xsl
+    docbook_xsl_ns
+    gettext
+    gobject-introspection
+    gtk-doc
+    libxslt
+    meson
+    ninja
+    pkgconfig
+    shared-mime-info
+    vala
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    argyllcms
+    bash-completion
+    dbus
+    glib
+    gusb
+    lcms2
+    libgudev
+    polkit
+    sane-backends
+    sqlite
+    systemd
+  ];
+
+  postInstall = ''
+    glib-compile-schemas $out/share/glib-2.0/schemas
+  '';
+
+  PKG_CONFIG_SYSTEMD_SYSTEMDSYSTEMUNITDIR = "${placeholder "out"}/lib/systemd/system";
+  PKG_CONFIG_SYSTEMD_SYSTEMDUSERUNITDIR = "${placeholder "out"}/lib/systemd/user";
+  PKG_CONFIG_SYSTEMD_TMPFILESDIR = "${placeholder "out"}/lib/tmpfiles.d";
+  PKG_CONFIG_BASH_COMPLETION_COMPLETIONSDIR= "${placeholder "out"}/share/bash-completion/completions";
+  PKG_CONFIG_UDEV_UDEVDIR = "${placeholder "out"}/lib/udev";
+
+  passthru = {
+    tests = {
+      installedTests = nixosTests.installed-tests.colord;
+    };
+  };
+
+  meta = with stdenv.lib; {
+    description = "System service to manage, install and generate color profiles to accurately color manage input and output devices";
+    homepage = https://www.freedesktop.org/software/colord/;
+    license = licenses.lgpl2Plus;
+    maintainers = [ maintainers.marcweber ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/colord/installed-tests-path.patch b/nixpkgs/pkgs/tools/misc/colord/installed-tests-path.patch
new file mode 100644
index 000000000000..6d91cbbcb022
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/colord/installed-tests-path.patch
@@ -0,0 +1,72 @@
+diff --git a/data/tests/meson.build b/data/tests/meson.build
+index 8b38f10..250582c 100644
+--- a/data/tests/meson.build
++++ b/data/tests/meson.build
+@@ -17,6 +17,6 @@ if get_option('installed_tests')
+       'test.ccss',
+       'test.sp',
+     ],
+-    install_dir: join_paths(libexecdir, 'installed-tests', 'colord')
++    install_dir: join_paths('@installed_tests_dir@', 'libexec', 'installed-tests', 'colord')
+   )
+ endif
+diff --git a/lib/colord/cd-test-shared.c b/lib/colord/cd-test-shared.c
+index c3b9d23..7577e13 100644
+--- a/lib/colord/cd-test-shared.c
++++ b/lib/colord/cd-test-shared.c
+@@ -45,7 +45,8 @@ cd_test_get_filename (const gchar *filename)
+ 
+ 	/* running in the installed system */
+ 	if (g_getenv ("INSTALLED_TESTS") != NULL) {
+-		return g_build_filename (LIBEXECDIR,
++		return g_build_filename ("@installed_tests_dir@",
++					 "libexec",
+ 					 "installed-tests",
+ 					 PACKAGE_NAME,
+ 					 filename,
+diff --git a/lib/colord/meson.build b/lib/colord/meson.build
+index 61f0518..df71358 100644
+--- a/lib/colord/meson.build
++++ b/lib/colord/meson.build
+@@ -214,20 +214,20 @@ endif
+ if get_option('installed_tests')
+ con2 = configuration_data()
+ con2.set('installedtestsdir',
+-         join_paths(libexecdir, 'installed-tests', 'colord'))
++         join_paths('@installed_tests_dir@', 'libexec', 'installed-tests', 'colord'))
+ configure_file(
+   input : 'colord-daemon.test.in',
+   output : 'colord-daemon.test',
+   configuration : con2,
+   install: true,
+-  install_dir: join_paths('share', 'installed-tests', 'colord'),
++  install_dir: join_paths('@installed_tests_dir@', 'share', 'installed-tests', 'colord'),
+ )
+ configure_file(
+   input : 'colord-private.test.in',
+   output : 'colord-private.test',
+   configuration : con2,
+   install: true,
+-  install_dir: join_paths('share', 'installed-tests', 'colord'),
++  install_dir: join_paths('@installed_tests_dir@', 'share', 'installed-tests', 'colord'),
+ )
+ endif
+ 
+@@ -254,7 +254,7 @@ if get_option('tests')
+       '-DTESTDATADIR="' + testdatadir + '"',
+     ],
+     install : get_option('installed_tests'),
+-    install_dir : join_paths(libexecdir, 'installed-tests', 'colord'),
++    install_dir : join_paths('@installed_tests_dir@','libexec', 'installed-tests', 'colord'),
+   )
+   test('colord-test-private', e)
+   e = executable(
+@@ -278,7 +278,7 @@ if get_option('tests')
+       '-DTESTDATADIR="' + testdatadir + '"',
+     ],
+     install : get_option('installed_tests'),
+-    install_dir : join_paths(libexecdir, 'installed-tests', 'colord'),
++    install_dir : join_paths('@installed_tests_dir@', 'libexec', 'installed-tests', 'colord'),
+   )
+   test('colord-test-daemon', e)
+ endif
diff --git a/nixpkgs/pkgs/tools/misc/contacts/default.nix b/nixpkgs/pkgs/tools/misc/contacts/default.nix
new file mode 100644
index 000000000000..f3d7fbd81273
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/contacts/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, xcbuildHook, Foundation, AddressBook }:
+
+stdenv.mkDerivation {
+  version = "1.1a-3";
+  pname = "contacts";
+
+  src = fetchurl {
+    url = "https://github.com/dhess/contacts/archive/4092a3c6615d7a22852a3bafc44e4aeeb698aa8f.tar.gz";
+    sha256 = "0wdqc1ndgrdhqapvvgx5xihc750szv08lp91x4l6n0gh59cpxpg3";
+  };
+
+  nativeBuildInputs = [ xcbuildHook ];
+  buildInputs = [ Foundation AddressBook ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp Products/Default/contacts $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Access contacts from the Mac address book from command-line";
+    homepage    = http://www.gnufoo.org/contacts/contacts.html;
+    license     = licenses.gpl2;
+    maintainers = with maintainers; [ jwiegley ];
+    platforms   = stdenv.lib.platforms.darwin;
+    hydraPlatforms = stdenv.lib.platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/convmv/default.nix b/nixpkgs/pkgs/tools/misc/convmv/default.nix
new file mode 100644
index 000000000000..56b9d5c849a5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/convmv/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl, perl }:
+
+stdenv.mkDerivation rec {
+  name = "convmv-2.05";
+
+  src = fetchurl {
+    url = "https://www.j3e.de/linux/convmv/${name}.tar.gz";
+    sha256 = "19hwv197p7c23f43vvav5bs19z9b72jzca2npkjsxgprwj5ardjk";
+  };
+
+  preBuild=''
+    makeFlags="PREFIX=$out"
+  '';
+
+  patchPhase=''
+    tar -xf testsuite.tar
+    patchShebangs .
+  '';
+
+  doCheck = true;
+  checkTarget = "test";
+
+  buildInputs = [ perl ];
+
+  meta = with stdenv.lib; {
+    description = "Converts filenames from one encoding to another";
+    platforms = platforms.linux ++ platforms.freebsd ++ platforms.cygwin;
+    maintainers = [ ];
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/coreboot-utils/default.nix b/nixpkgs/pkgs/tools/misc/coreboot-utils/default.nix
new file mode 100644
index 000000000000..3f6988f1f657
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/coreboot-utils/default.nix
@@ -0,0 +1,104 @@
+{ stdenv, fetchurl, zlib, pciutils, coreutils, acpica-tools, iasl, makeWrapper, gnugrep, gnused, file, buildEnv }:
+
+let
+  version = "4.10";
+
+  meta = with stdenv.lib; {
+    description = "Various coreboot-related tools";
+    homepage = "https://www.coreboot.org";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.petabyteboy ];
+    platforms = platforms.linux;
+  };
+
+  generic = { pname, path ? "util/${pname}", ... }@args: stdenv.mkDerivation (rec {
+    inherit pname version meta;
+
+    src = fetchurl {
+      url = "https://coreboot.org/releases/coreboot-${version}.tar.xz";
+      sha256 = "1jsiz17afi2lqg1jv6lsl8s05w7vr7iwgg86y2qp369hcz6kcwfa";
+    };
+
+    enableParallelBuilding = true;
+
+    postPatch = ''
+      cd ${path}
+    '';
+
+    makeFlags = [
+      "INSTALL=install"
+      "PREFIX=${placeholder "out"}"
+    ];
+  } // args);
+
+  utils = {
+    msrtool = generic {
+      pname = "msrtool";
+      meta.description = "Dump chipset-specific MSR registers";
+      buildInputs = [ pciutils zlib ];
+      preConfigure = "export INSTALL=install";
+    };
+    cbmem = generic {
+      pname = "cbmem";
+      meta.description = "Coreboot console log reader";
+    };
+    ifdtool = generic {
+      pname = "ifdtool";
+      meta.description = "Extract and dump Intel Firmware Descriptor information";
+    };
+    intelmetool = generic {
+      pname = "intelmetool";
+      meta.description = "Dump interesting things about Management Engine";
+      buildInputs = [ pciutils zlib ];
+    };
+    cbfstool = generic {
+      pname = "cbfstool";
+      meta.description = "Management utility for CBFS formatted ROM images";
+    };
+    nvramtool = generic {
+      pname = "nvramtool";
+      meta.description = "Read and write coreboot parameters and display information from the coreboot table in CMOS/NVRAM";
+    };
+    superiotool = generic {
+      pname = "superiotool";
+      meta.description = "User-space utility to detect Super I/O of a mainboard and provide detailed information about the register contents of the Super I/O";
+      buildInputs = [ pciutils zlib ];
+    };
+    ectool = generic {
+      pname = "ectool";
+      meta.description = "Dump the RAM of a laptop's Embedded/Environmental Controller (EC)";
+      meta.platforms = [ "x86_64-linux" "i686-linux" ];
+      preInstall = "mkdir -p $out/sbin";
+    };
+    inteltool = generic {
+      pname = "inteltool";
+      meta.description = "Provides information about Intel CPU/chipset hardware configuration (register contents, MSRs, etc)";
+      buildInputs = [ pciutils zlib ];
+    };
+    amdfwtool = generic {
+      pname = "amdfwtool";
+      meta.description = "Create AMD firmware combination";
+      installPhase = "install -Dm755 amdfwtool $out/bin/amdfwtool";
+    };
+    acpidump-all = generic {
+      pname = "acpidump-all";
+      path = "util/acpi";
+      meta.description = "Walk through all ACPI tables with their addresses";
+      nativeBuildInputs = [ makeWrapper ];
+      dontBuild = true;
+      installPhase = "install -Dm755 acpidump-all $out/bin/acpidump-all";
+      postFixup = let 
+        binPath = [ coreutils  acpica-tools iasl gnugrep  gnused  file ];
+      in "wrapProgram $out/bin/acpidump-all --set PATH ${stdenv.lib.makeBinPath binPath}";
+    };
+  };
+
+in utils // {
+  coreboot-utils = (buildEnv {
+    name = "coreboot-utils-${version}";
+    paths = stdenv.lib.attrValues utils;
+    postBuild = "rm -rf $out/sbin";
+  }) // {
+    inherit meta version;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/coreutils/avoid-false-positive-in-date-debug-test.patch b/nixpkgs/pkgs/tools/misc/coreutils/avoid-false-positive-in-date-debug-test.patch
new file mode 100644
index 000000000000..ae1a02d4d202
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/coreutils/avoid-false-positive-in-date-debug-test.patch
@@ -0,0 +1,52 @@
+From 0251229bfd9617e8a35cf9dd7d338d63fff74a0c Mon Sep 17 00:00:00 2001
+From: Assaf Gordon <assafgordon@gmail.com>
+Date: Mon, 13 May 2019 16:37:40 -0600
+Subject: [PATCH] tests: avoid false-positive in date-debug test
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+When debugging an invalid date due to DST switching, the intermediate
+'normalized time' should not be checked - its value can differ between
+systems (e.g. glibc vs musl).
+
+Reported by Niklas Hambüchen in
+https://lists.gnu.org/r/coreutils/2019-05/msg00031.html
+Analyzed by Rich Felker in
+https://lists.gnu.org/r/coreutils/2019-05/msg00039.html
+
+* tests/misc/date-debug.sh: Replace the exact normalized time
+with 'XX:XX:XX' so different values would not trigger test failure.
+---
+ tests/misc/date-debug.sh | 11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
+
+diff --git a/tests/misc/date-debug.sh b/tests/misc/date-debug.sh
+index aa47f1abb..2ce6f4ce8 100755
+--- a/tests/misc/date-debug.sh
++++ b/tests/misc/date-debug.sh
+@@ -71,7 +71,7 @@ date: input timezone: TZ="America/Edmonton" in date string
+ date: using specified time as starting value: '02:30:00'
+ date: error: invalid date/time value:
+ date:     user provided time: '(Y-M-D) 2006-04-02 02:30:00'
+-date:        normalized time: '(Y-M-D) 2006-04-02 03:30:00'
++date:        normalized time: '(Y-M-D) 2006-04-02 XX:XX:XX'
+ date:                                             --
+ date:      possible reasons:
+ date:        non-existing due to daylight-saving time;
+@@ -81,7 +81,14 @@ date: invalid date 'TZ="America/Edmonton" 2006-04-02 02:30:00'
+ EOF
+ 
+ # date should return 1 (error) for invalid date
+-returns_ 1 date --debug -d "$in2" >out2 2>&1 || fail=1
++returns_ 1 date --debug -d "$in2" >out2-t 2>&1 || fail=1
++
++# The output line of "normalized time" can differ between systems
++# (e.g. glibc vs musl) and should not be checked.
++# See: https://lists.gnu.org/archive/html/coreutils/2019-05/msg00039.html
++sed '/normalized time:/s/ [0-9][0-9]:[0-9][0-9]:[0-9][0-9]/ XX:XX:XX/' \
++    out2-t > out2 || framework_failure_
++
+ compare exp2 out2 || fail=1
+ 
+ ##
diff --git a/nixpkgs/pkgs/tools/misc/coreutils/coreutils-8.23-4.cygwin.patch b/nixpkgs/pkgs/tools/misc/coreutils/coreutils-8.23-4.cygwin.patch
new file mode 100644
index 000000000000..2f69347ffabd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/coreutils/coreutils-8.23-4.cygwin.patch
@@ -0,0 +1,1259 @@
+--- coreutils-8.23/ChangeLog	2014-07-18 15:22:24.000000000 -0700
++++ coreutils-8.23/ChangeLog	2014-10-13 08:56:50.775188900 -0700
+@@ -1,3 +1,220 @@
++2014-10-13  U-WIN-RSJ0SJPBR3E\Administrator  <Administrator@WIN-KQ1OCEBI2E8>
++
++	Cygwin release 8.23-4
++	* copy.c (copy_internal): Fix typo that broke recursive copy
++	when dealing with directories.
++
++2014-09-24  Eric Blake  <eblake@redhat.com>
++
++	Cygwin release 8.23-3
++	* lib/cygwin.c (cygwin_spelling): Skip .exe magic if .exe is
++	already present.  Also honor .exe magic on symlinks.
++	* lib/same.c (same_name): Treat files as same if only difference
++	is .exe magic.
++	* copy.c (copy): Move symlink special casing here.
++	* install.c (strip): Update caller.
++	* ls.c (gobble_file): Likewise.
++	* stat.c (do_statfs, do_stat): Likewise.
++
++2014-08-12  Eric Blake  <eblake@redhat.com>
++
++	Cygwin release 8.23-2.
++	Drop hostname.
++
++2014-08-01  Eric Blake  <eblake@redhat.com>
++
++	Cygwin release 8.23-1.
++	* configure.ac: Disable stdbuf.
++	* lib/local.mk: Upstream switched to flat make, impacting how
++	we build local cygwin.c code.
++	* lib/canonicalize.c: Accepted upstream.
++	* lib/file-has-acl.c: Likewise.
++	* realpath.c: Likewise.
++	* su.c: Upstream dropped su.
++	* Makefile.am: Drop su changes.
++	* chroot.c: Adapt to new upstream code.
++
++2012-02-04  Eric Blake  <eblake@redhat.com>
++
++	Cygwin release 8.15-1.
++	* lib/fts.c: Early gnulib fix is now upstream.
++	* lib/canonicalize.c: Backport gnulib fix for /// -> /.
++	* realpath.c: Backport gnulib fix for --relative-to.
++
++2011-10-27  Eric Blake  <eblake@redhat.com>
++
++	Cygwin release 8.14-1.
++	* lib/ftc.c: Backport gnulib fix to make rm close before rmdir.
++	* lib/cygwin.c (cygwin_spelling): Fix logic when 'f' and 'f.exe'
++	exist but are different files.
++	* stat.c: Fix --append-exe.
++
++2011-02-04  Eric Blake  <eblake@redhat.com>
++
++	Cygwin release 8.10-1.
++
++2010-12-24  Eric Blake  <eblake@redhat.com>
++
++	Cygwin release 8.8-1.
++	* lib/mountlist.c (ME_REMOTE): Restore previous cygwin hack to
++	determine remote drives, lost since 6.11-1.
++
++2010-04-29  Eric Blake  <eblake@redhat.com>
++
++	Cygwin release 8.5-1.
++
++2010-03-11  Eric Blake  <eblake@redhat.com>
++
++	Cygwin release 8.4-1.
++	* lib/xfreopen.c (xfreopen): Consolidate workaround for broken
++	freopen usage into one place.
++	* copy.c (copy): Reinstate .exe magic handling when copying
++	files with implicit .exe.
++
++2008-12-13  Eric Blake  <ebb9@byu.net>
++
++	Cygwin release 7.0-1.
++
++2008-06-02  Eric Blake  <ebb9@byu.net>
++
++	Cygwin release 6.12-1.
++
++2008-05-12  Eric Blake  <ebb9@byu.net>
++
++	Cygwin release 6.11-1, requires cygwin 1.7.0.
++	* lib/cygwin.h (CYGWIN_APPEND_EXE): Accomodate new PATH_MAX.
++	* lib/cygwin.c (cygwin_spelling): Accomodate new trailing
++	`.' semantics.
++	* lib/same.c (same_name): Accomodate new PATH_MAX.
++
++2008-01-24  Eric Blake  <ebb9@byu.net>
++
++	Cygwin release 6.10-1.
++	* lib/hash-triple.c (triple_hash): Hash case-insensitively.
++	* lib/hash-pjw.h (hash_pjw_case): New interface.
++	* lib/hash-pjw.c (hash_pjw_case): New function.
++	* chcon.c (main): Support my root_dev_ino tweaks.
++
++2007-08-21  Eric Blake  <ebb9@byu.net>
++
++	Cygwin release 6.9-5.
++	* same.c (same_name): Detect same file differing only by case.
++	* copy.c (same_file_ok): Add parameter to detect when case
++	change is being attempted.
++	(triple_hash): Hash names case-insensitively.
++	(copy_internal): Accommodate case-change attempts.
++	* mv.c (do_move): Allow 'mv foo/ Foo/' as shorthand for
++	'mv -T foo/ Foo/'.
++
++2007-07-23  Eric Blake  <ebb9@byu.net>
++
++	Cygwin release 6.9-4.
++	* dd.c (main): Fix typo in earlier cygwin patch.
++
++2007-05-29  Eric Blake  <ebb9@byu.net>
++
++	Cygwin release 6.9-3.
++	* cksum.c (main): Don't lose append mode.
++	* md5sum.c (main): Likewise.
++	* cat.c (main): Likewise.
++	* head.c (main): Likewise.
++	* tac.c (main): Likewise.
++	* tail.c (main): Likewise.
++	* tee.c (main): Likewise.
++	* tr.c (main): Likewise.
++
++2006-11-24  Eric Blake  <ebb9@byu.net>
++
++	Cygwin release 6.6-2.
++	* lib/cygwin.c (cygwin_spelling): Work even with old-style
++	symlinks, which lacked .lnk suffix.
++
++2006-04-14  Eric Blake  <ebb9@byu.net>
++
++	Cygwin release 5.94-5. Experimental only, depends on cygwin
++	snapshot 20060329 or later.
++	* dd.c (main): Default to binary mode.
++	* system.h (rpl_freopen): Remove this hack, now that cygwin
++	freopen(NULL) works.
++	* lib/quotearg.c (quote_eight_bit): New variable, so I can...
++	(quotearg_buffer_restyled): treat 8-bit	characters as printable
++	when outputting to a terminal.
++	* lib/quote.c (quote_n): Use it.
++
++2006-02-28  Eric Blake  <ebb9@byu.net>
++
++	Cygwin release 5.94-4. Experimental only, depends on cygwin
++	snapshot 20060227 or later.
++	* lib/root-dev-ino.h (struct root_dev_ino): New struct.
++	(ROOT_DEV_INO_CHECK, ROOT_DEV_INO_WARN): Also track //.
++	* lib/root-dev-ino.c (get_root_dev_ino): Also track //.
++	* chmod.c (root_dev_ino): Use new type.
++	(main): Ditto.
++	* chown-core.h (struct Chown_option): Ditto.
++	* chown.c (main): Ditto.
++	* remove.h (struct rm_options): Ditto.
++	* rm.c (main): Ditto.
++	* pwd.c (robust_getcwd): Ditto.  Also fix bug when in / or //.
++
++2006-01-24  Eric Blake  <ebb9@byu.net>
++
++	Cygwin release 5.93-3, depends on cygwin-1.5.19-1 or later.
++	* cksum.c (main): Always output binary files.
++	* md5sum.c (main): Likewise.
++	* su.c (correct_password): On NT machines, attempt
++	passwordless login first, and give better error message if
++	password check fails.  I still don't know how to distinguish
++	between insufficient privileges vs. incorrect password.
++	* dircolors.c (main): Silence warning from tcsh 6.14.00.
++
++2005-10-15  Eric Blake  <ebb9@byu.net>
++
++	Cygwin release 5.90-3, depends on snapshot 20051003 or later (will
++	become cygwin 1.5.19).
++	* doc/coreutils.texi (ls invocation, stat invocation): Document
++	--append-exe.
++	* ls.c (usage): Ditto.
++	(gobble_file): Append .exe as needed when requested.
++	* stat.c (usage): Document --append-exe.
++	(do_stat, do_statfs): Append .exe as needed when requested.
++
++2005-10-08  Eric Blake  <ebb9@byu.net>
++
++	Cygwin release 5.90-2, depends on snapshot 20051003 or later (will
++	become cygwin 1.5.19).
++	* lib/mkdir-p.c (make_dir_parents): Fix bug in last patch.
++	* lib/cygwin.h (CYGWIN_APPEND_EXE): Factor into common macro.
++	* copy.c (copy): Use new macro.
++	* install.c (strip): Ditto.
++	* ln.c (do_link): Ditto.
++
++2005-07-13  Eric Blake  <ebb9@byu.net>
++
++	* doc/coreutils.texi (ln invocation): Document --disable-exe-magic.
++	* ln.c (usage): Likewise.
++	(do_link): Skip .exe magic when requested.
++
++2005-07-12  Eric Blake  <ebb9@byu.net>
++
++	* lib/cygwin.c (cygwin_spelling): Don't append .exe to directories.
++	Make sure .exe exists before returning 1, because otherwise
++	virtual directories such as /cygdrive have problems.
++
++2005-07-07  Eric Blake  <ebb9@byu.net>
++
++	* lib/cygwin.h: New file, defining cygwin_spelling.
++	* lib/cygwin.c: New file.
++	* lib/Makefile.am: Compile it.
++	* copy.c (copy_internal, copy): Use new cygwin_spelling() to
++	undo .exe magic.
++	* link.c (do_link): Likewise.
++	* install.c (strip): Likewise.
++
++2005-01-03  Corinna Vinschen  <corinna@vinschen.de>
++
++	* install.c (strip): Check for .exe here since strip doesn't.
++
++
+ 2014-07-18  Pádraig Brady  <P@draigBrady.com>
+ 
+ 	version 8.23
+--- coreutils-8.23/configure.ac	2014-07-17 18:40:57.000000000 -0700
++++ coreutils-8.23/configure.ac	2014-10-13 08:30:37.165262300 -0700
+@@ -473,7 +473,7 @@ AC_COMPILE_IFELSE(
+   [stdbuf_supported=yes],
+   [stdbuf_supported=no])
+ AC_MSG_RESULT([$stdbuf_supported])
+-if test "$stdbuf_supported" = "yes"; then
++if test "$stdbuf_supported" = "yes" && test -z "$EXEEXT"; then
+   gl_ADD_PROG([optional_bin_progs], [stdbuf])
+ fi
+ 
+--- coreutils-8.23/doc/coreutils.texi	2014-07-13 15:09:52.000000000 -0700
++++ coreutils-8.23/doc/coreutils.texi	2014-10-13 08:30:37.180881200 -0700
+@@ -7838,6 +7838,14 @@ These options change how file names them
+ 
+ @table @samp
+ 
++@item --append-exe
++@opindex --append-exe
++@cindex appending exe on cygwin
++Cygwin only: Cygwin normally performs @samp{.exe} magic, where a
++command line argument typed without an .exe extension transparently
++refers to the existing file with an extension.  Specifying this option
++will make the .exe show if cygwin magic was involved.
++
+ @item -b
+ @itemx --escape
+ @itemx --quoting-style=escape
+@@ -11799,6 +11807,14 @@ With this option, @command{stat} acts on
+ by each symbolic link argument.
+ Without it, @command{stat} acts on any symbolic link argument directly.
+ 
++@item --append-exe
++@opindex --append-exe
++@cindex appending exe on cygwin
++Cygwin only: Cygwin normally performs .exe magic, where a command line
++argument typed without an .exe extension transparently refers to the
++existing file with an extension.  Specifying this option will make
++the .exe show if cygwin magic was involved.
++
+ @item -f
+ @itemx --file-system
+ @opindex -f
+--- coreutils-8.23/lib/cygwin.c	1969-12-31 16:00:00.000000000 -0800
++++ coreutils-8.23/lib/cygwin.c	2014-10-13 08:30:37.180881200 -0700
+@@ -0,0 +1,67 @@
++/* cygwin.c - helper functions unique to Cygwin
++
++   Copyright (C) 2005, 2006, 2008, 2011 Free Software Foundation, Inc.
++
++   This program is free software; you can redistribute it and/or modify
++   it under the terms of the GNU General Public License as published by
++   the Free Software Foundation; either version 3, or (at your option)
++   any later version.
++
++   This program is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++   GNU General Public License for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with this program; if not, write to the Free Software Foundation,
++   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++   Written by Eric Blake.  */
++
++#include <config.h>
++
++#include "cygwin.h"
++
++#include <errno.h>
++#include <limits.h>
++#include <string.h>
++#include <unistd.h>
++
++/* Return -1 if PATH is not found, 0 if PATH will not have .exe
++   appended (it is possible that a PATH that does not exist still
++   returns 0 instead of -1, or fails for a PATH that exists but cannot
++   be stat'ed), and positive if PATH has ".exe" automatically appended
++   by cygwin (1 if PATH is a symlink, 2 otherwise).  Won't change errno.  */
++
++int
++cygwin_spelling (char const *path)
++{
++  int saved_errno = errno;
++  int result = 0; /* Start with assumption that PATH is okay.  */
++  int len;
++  struct stat st1;
++  struct stat st2;
++  char *path_exe;
++
++  if (! path || ! *path || len > PATH_MAX)
++    /* PATH will cause EINVAL or ENAMETOOLONG, treat it as non-existing.  */
++    return -1;
++  len = strlen (path);
++  if (path[len - 1] == '/'
++      || (len > 4 && !strcasecmp (&path[len - 4], ".exe")))
++    /* Don't change spelling if there is a trailing `/' or '.exe'.  */
++    return 0;
++  if (lstat (path, &st1) < 0 || S_ISDIR(st1.st_mode))
++    {
++      errno = saved_errno;
++      return -1;
++    }
++  path_exe = malloca (len + 5); /* adding ".exe" and NUL.  */
++  strcat (stpcpy (path_exe, path), ".exe");
++  if (lstat (path_exe, &st2) == 0 && st1.st_ino == st2.st_ino)
++    result = 1 + !S_ISLNK(st1.st_mode);
++  freea (path_exe);
++
++  errno = saved_errno;
++  return result;
++}
+--- coreutils-8.23/lib/cygwin.h	1969-12-31 16:00:00.000000000 -0800
++++ coreutils-8.23/lib/cygwin.h	2014-10-13 08:30:37.180881200 -0700
+@@ -0,0 +1,38 @@
++/* cygwin.h - helper functions unique to Cygwin
++
++   Copyright (C) 2005, 2006, 2008, 2010, 2011 Free Software Foundation, Inc.
++
++   This program is free software; you can redistribute it and/or modify
++   it under the terms of the GNU General Public License as published by
++   the Free Software Foundation; either version 3, or (at your option)
++   any later version.
++
++   This program is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++   GNU General Public License for more details.
++
++   You should have received a copy of the GNU General Public License
++   along with this program; if not, write to the Free Software Foundation,
++   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++   Written by Eric Blake.  */
++
++#ifndef CYGWIN_H
++# define CYGWIN_H 1
++
++#include "malloca.h"
++
++int cygwin_spelling (char const *);
++
++/* Append ".exe" to char *__NAME_ORIG, where __NAME is either NULL or
++   between __NAME_ORIG and the nul terminator.  Both params will be
++   evaluated more than once and assigned the new value.  The user must
++   later call freea(__NAME).  */
++#define CYGWIN_APPEND_EXE(__name, __name_orig)                          \
++  __name_orig = __name =                                                \
++    strcat (strcpy (malloca (strchr (__name ? __name : __name_orig, '\0') \
++                             - (__name_orig) + 5),                      \
++                    __name_orig), ".exe")
++
++#endif /* CYGWIN_H */
+--- coreutils-8.23/lib/hash-pjw.c	2014-05-29 05:05:50.000000000 -0700
++++ coreutils-8.23/lib/hash-pjw.c	2014-10-13 08:30:37.180881200 -0700
+@@ -19,6 +19,7 @@
+ 
+ #include "hash-pjw.h"
+ 
++#include <ctype.h>
+ #include <limits.h>
+ 
+ #define SIZE_BITS (sizeof (size_t) * CHAR_BIT)
+@@ -38,3 +39,16 @@ hash_pjw (const void *x, size_t tablesiz
+ 
+   return h % tablesize;
+ }
++
++/* Likewise, but case-insensitive.  */
++size_t
++hash_pjw_case (const void *x, size_t tablesize)
++{
++  const unsigned char *s;
++  size_t h = 0;
++
++  for (s = x; *s; s++)
++    h = tolower (*s) + ((h << 9) | (h >> (SIZE_BITS - 9)));
++
++  return h % tablesize;
++}
+--- coreutils-8.23/lib/hash-pjw.h	2014-05-29 05:05:50.000000000 -0700
++++ coreutils-8.23/lib/hash-pjw.h	2014-10-13 08:30:37.180881200 -0700
+@@ -21,3 +21,4 @@
+    The result is platform dependent: it depends on the size of the 'size_t'
+    type and on the signedness of the 'char' type.  */
+ extern size_t hash_pjw (void const *x, size_t tablesize) _GL_ATTRIBUTE_PURE;
++extern size_t hash_pjw_case (void const *x, size_t tablesize) _GL_ATTRIBUTE_PURE;
+--- coreutils-8.23/lib/hash-triple.c	2014-05-29 05:05:50.000000000 -0700
++++ coreutils-8.23/lib/hash-triple.c	2014-10-13 08:30:37.180881200 -0700
+@@ -34,7 +34,13 @@ size_t
+ triple_hash (void const *x, size_t table_size)
+ {
+   struct F_triple const *p = x;
++#if !__CYGWIN__
+   size_t tmp = hash_pjw (p->name, table_size);
++#else // cygwin
++  /* Hash case-insensitively, to force collisions on names that differ by
++     case; copy.c can then account for case-insensitive renames. */
++  size_t tmp = hash_pjw_case (p->name, table_size);
++#endif
+ 
+   /* Ignoring the device number here should be fine.  */
+   return (tmp ^ p->st_ino) % table_size;
+--- coreutils-8.23/lib/local.mk	2013-12-04 06:48:30.000000000 -0800
++++ coreutils-8.23/lib/local.mk	2014-10-13 08:30:37.180881200 -0700
+@@ -3,3 +3,6 @@ include lib/gnulib.mk
+ # Allow "make distdir" to succeed before "make all" has run.
+ dist-hook: $(noinst_LIBRARIES)
+ .PHONY: dist-hook
++
++# Hook in cygwin helper
++lib_libcoreutils_a_SOURCES += lib/cygwin.c lib/cygwin.h
+--- coreutils-8.23/lib/root-dev-ino.c	2014-07-11 04:00:07.000000000 -0700
++++ coreutils-8.23/lib/root-dev-ino.c	2014-10-13 08:30:37.180881200 -0700
+@@ -25,13 +25,17 @@
+ /* Call lstat to get the device and inode numbers for '/'.
+    Upon failure, return NULL.  Otherwise, set the members of
+    *ROOT_D_I accordingly and return ROOT_D_I.  */
+-struct dev_ino *
+-get_root_dev_ino (struct dev_ino *root_d_i)
++struct root_dev_ino *
++get_root_dev_ino (struct root_dev_ino *root_d_i)
+ {
+   struct stat statbuf;
+   if (lstat ("/", &statbuf))
+     return NULL;
+-  root_d_i->st_ino = statbuf.st_ino;
+-  root_d_i->st_dev = statbuf.st_dev;
++  root_d_i->single_slash.st_ino = statbuf.st_ino;
++  root_d_i->single_slash.st_dev = statbuf.st_dev;
++  if (lstat ("//", &statbuf))
++    return NULL;
++  root_d_i->double_slash.st_ino = statbuf.st_ino;
++  root_d_i->double_slash.st_dev = statbuf.st_dev;
+   return root_d_i;
+ }
+--- coreutils-8.23/lib/root-dev-ino.h	2014-07-11 04:00:07.000000000 -0700
++++ coreutils-8.23/lib/root-dev-ino.h	2014-10-13 08:30:37.180881200 -0700
+@@ -21,19 +21,26 @@
+ # include "dev-ino.h"
+ # include "same-inode.h"
+ 
+-struct dev_ino *
+-get_root_dev_ino (struct dev_ino *root_d_i);
++struct root_dev_ino
++{
++  struct dev_ino single_slash;
++  struct dev_ino double_slash;
++};
++
++struct root_dev_ino *
++get_root_dev_ino (struct root_dev_ino *root_d_i);
+ 
+ /* These macros are common to the programs that support the
+    --preserve-root and --no-preserve-root options.  */
+ 
+ # define ROOT_DEV_INO_CHECK(Root_dev_ino, Dir_statbuf) \
+-    (Root_dev_ino && SAME_INODE (*Dir_statbuf, *Root_dev_ino))
++  (Root_dev_ino && (SAME_INODE (*Dir_statbuf, (Root_dev_ino)->single_slash) \
++                    || SAME_INODE (*Dir_statbuf, (Root_dev_ino)->double_slash)))
+ 
+ # define ROOT_DEV_INO_WARN(Dirname)					\
+   do									\
+     {									\
+-      if (STREQ (Dirname, "/"))						\
++      if (STREQ (Dirname, "/") || STREQ (Dirname, "//"))                \
+         error (0, 0, _("it is dangerous to operate recursively on %s"),	\
+                quote (Dirname));					\
+       else								\
+--- coreutils-8.23/lib/same.c	2014-05-29 05:05:50.000000000 -0700
++++ coreutils-8.23/lib/same.c	2014-10-13 08:30:37.180881200 -0700
+@@ -40,6 +40,13 @@
+ #include "error.h"
+ #include "same-inode.h"
+ 
++#if __CYGWIN__
++# include <sys/cygwin.h>
++# include "cygwin.h"
++# include "malloca.h"
++# include "memcasecmp.h"
++#endif
++
+ #ifndef MIN
+ # define MIN(a, b) ((a) < (b) ? (a) : (b))
+ #endif
+@@ -59,6 +66,45 @@ same_name (const char *source, const cha
+     (source_baselen == dest_baselen
+      && memcmp (source_basename, dest_basename, dest_baselen) == 0);
+   bool compare_dirs = identical_basenames;
++#if __CYGWIN__
++  /* If two names differ case-insensitively by only an '.exe' suffix,
++     do some sleuthing to see if .exe magic matters on the shorter
++     name.  Swapping the longer name to dest avoids duplication.  */
++  if (source_baselen == dest_baselen + 4)
++    {
++      char const *tmp_basename = source_basename;
++      size_t tmp_baselen = source_baselen;
++      source_basename = dest_basename;
++      source_baselen = dest_baselen;
++      dest_basename = tmp_basename;
++      dest_baselen = tmp_baselen;
++    }
++  if (source_baselen + 4 == dest_baselen
++      && !memcasecmp (dest_basename - 4, ".exe", 4)
++      && !memcasecmp (source_basename, dest_basename, source_baselen)
++      && 0 < cygwin_spelling(source))
++    dest_baselen -= 4;
++  /* Some, but not all, files are case-insensitive (depending on mount
++     options, CYGWIN=case settings, and virtual file systems).  Do
++     some sleuthing to decide whether case-insensitivity matters.  */
++  if (! compare_dirs && source_baselen == dest_baselen)
++    {
++      ssize_t wsrclen = cygwin_conv_path (CCP_POSIX_TO_WIN_W,
++                                          source, NULL, 0);
++      ssize_t wdstlen = cygwin_conv_path (CCP_POSIX_TO_WIN_W,
++                                          dest, NULL, 0);
++      char *wsrc = malloca (wsrclen);
++      char *wdst = malloca (wdstlen);
++      if (cygwin_conv_path (CCP_POSIX_TO_WIN_W, source, wsrc, wsrclen))
++        error (EXIT_FAILURE, errno, "unable to convert path name %s", source);
++      if (cygwin_conv_path (CCP_POSIX_TO_WIN_W, dest, wdst, wdstlen))
++        error (EXIT_FAILURE, errno, "unable to convert path name %s", dest);
++      if (wsrclen == wdstlen && memcasecmp (wsrc, wdst, wsrclen) == 0)
++        compare_dirs = true;
++      freea (wsrc);
++      freea (wdst);
++    }
++#endif /* __CYGWIN__ */
+   bool same = false;
+ 
+ #if ! _POSIX_NO_TRUNC && HAVE_PATHCONF && defined _PC_NAME_MAX
+--- coreutils-8.23/lib/xfreopen.c	2014-05-29 05:05:50.000000000 -0700
++++ coreutils-8.23/lib/xfreopen.c	2014-10-13 08:30:37.180881200 -0700
+@@ -18,6 +18,7 @@
+ #include "xfreopen.h"
+ 
+ #include <errno.h>
++#include <fcntl.h>
+ #include "error.h"
+ #include "exitfail.h"
+ #include "quote.h"
+@@ -26,9 +27,17 @@
+ #include "gettext.h"
+ #define _(msgid) gettext (msgid)
+ 
++#define STREQ(s1, s2) (strcmp (s1, s2) == 0)
++
+ void
+ xfreopen (char const *filename, char const *mode, FILE *fp)
+ {
++  if (!filename && STREQ (mode, "wb"))
++    {
++      int flag = fcntl (fileno (fp), F_GETFL);
++      if (0 <= flag && (flag & O_APPEND))
++        mode = "ab";
++    }
+   if (!freopen (filename, mode, fp))
+     {
+       char const *f = (filename ? filename
+--- coreutils-8.23/chcon.c	2014-07-13 15:09:52.000000000 -0700
++++ coreutils-8.23/src/chcon.c	2014-10-13 08:30:37.180881200 -0700
+@@ -48,7 +48,7 @@ static bool verbose;
+ 
+ /* Pointer to the device and inode numbers of '/', when --recursive.
+    Otherwise NULL.  */
+-static struct dev_ino *root_dev_ino;
++static struct root_dev_ino *root_dev_ino;
+ 
+ /* The name of the context file is being given. */
+ static char const *specified_context;
+@@ -569,7 +569,7 @@ main (int argc, char **argv)
+ 
+   if (recurse && preserve_root)
+     {
+-      static struct dev_ino dev_ino_buf;
++      static struct root_dev_ino dev_ino_buf;
+       root_dev_ino = get_root_dev_ino (&dev_ino_buf);
+       if (root_dev_ino == NULL)
+         error (EXIT_FAILURE, errno, _("failed to get attributes of %s"),
+--- coreutils-8.23/chgrp.c	2014-07-11 04:00:07.000000000 -0700
++++ coreutils-8.23/src/chgrp.c	2014-10-13 08:30:37.180881200 -0700
+@@ -299,7 +299,7 @@ main (int argc, char **argv)
+ 
+   if (chopt.recurse && preserve_root)
+     {
+-      static struct dev_ino dev_ino_buf;
++      static struct root_dev_ino dev_ino_buf;
+       chopt.root_dev_ino = get_root_dev_ino (&dev_ino_buf);
+       if (chopt.root_dev_ino == NULL)
+         error (EXIT_FAILURE, errno, _("failed to get attributes of %s"),
+--- coreutils-8.23/chmod.c	2014-07-11 04:00:07.000000000 -0700
++++ coreutils-8.23/src/chmod.c	2014-10-13 08:30:37.180881200 -0700
+@@ -81,7 +81,7 @@ static enum Verbosity verbosity = V_off;
+ 
+ /* Pointer to the device and inode numbers of '/', when --recursive.
+    Otherwise NULL.  */
+-static struct dev_ino *root_dev_ino;
++static struct root_dev_ino *root_dev_ino;
+ 
+ /* For long options that have no equivalent short option, use a
+    non-character as a pseudo short option, starting with CHAR_MAX + 1.  */
+@@ -552,7 +552,7 @@ main (int argc, char **argv)
+ 
+   if (recurse && preserve_root)
+     {
+-      static struct dev_ino dev_ino_buf;
++      static struct root_dev_ino dev_ino_buf;
+       root_dev_ino = get_root_dev_ino (&dev_ino_buf);
+       if (root_dev_ino == NULL)
+         error (EXIT_FAILURE, errno, _("failed to get attributes of %s"),
+--- coreutils-8.23/chown-core.h	2014-07-11 04:00:07.000000000 -0700
++++ coreutils-8.23/src/chown-core.h	2014-10-13 08:30:37.196451900 -0700
+@@ -50,7 +50,7 @@ struct Chown_option
+ 
+   /* Pointer to the device and inode numbers of '/', when --recursive.
+      Need not be freed.  Otherwise NULL.  */
+-  struct dev_ino *root_dev_ino;
++  struct root_dev_ino *root_dev_ino;
+ 
+   /* This corresponds to the --dereference (opposite of -h) option.  */
+   bool affect_symlink_referent;
+--- coreutils-8.23/chown.c	2014-07-11 04:00:07.000000000 -0700
++++ coreutils-8.23/src/chown.c	2014-10-13 08:30:37.196451900 -0700
+@@ -312,7 +312,7 @@ main (int argc, char **argv)
+ 
+   if (chopt.recurse && preserve_root)
+     {
+-      static struct dev_ino dev_ino_buf;
++      static struct root_dev_ino dev_ino_buf;
+       chopt.root_dev_ino = get_root_dev_ino (&dev_ino_buf);
+       if (chopt.root_dev_ino == NULL)
+         error (EXIT_FAILURE, errno, _("failed to get attributes of %s"),
+--- coreutils-8.23/chroot.c	2014-07-13 16:59:20.000000000 -0700
++++ coreutils-8.23/src/chroot.c	2014-10-13 08:30:37.196451900 -0700
+@@ -163,7 +163,7 @@ parse_additional_groups (char const *gro
+ static bool
+ is_root (const char* dir)
+ {
+-  struct dev_ino root_ino;
++  struct root_dev_ino root_ino;
+   if (! get_root_dev_ino (&root_ino))
+     error (EXIT_CANCELED, errno, _("failed to get attributes of %s"),
+            quote ("/"));
+@@ -173,7 +173,7 @@ is_root (const char* dir)
+     error (EXIT_CANCELED, errno, _("failed to get attributes of %s"),
+            quote (dir));
+ 
+-  return SAME_INODE (root_ino, arg_st);
++  return ROOT_DEV_INO_CHECK (&root_ino, &arg_st);
+ }
+ 
+ void
+--- coreutils-8.23/cksum.c	2014-07-11 04:00:07.000000000 -0700
++++ coreutils-8.23/src/cksum.c	2014-10-13 08:30:37.196451900 -0700
+@@ -301,6 +301,9 @@ main (int argc, char **argv)
+ 
+   have_read_stdin = false;
+ 
++  if (O_BINARY)
++    xfreopen (NULL, "wb", stdout);
++
+   if (optind == argc)
+     ok = cksum ("-", false);
+   else
+--- coreutils-8.23/copy.c	2014-07-13 15:09:52.000000000 -0700
++++ coreutils-8.23/src/copy.c	2014-10-13 08:49:30.450181800 -0700
+@@ -70,6 +70,10 @@
+ # include "verror.h"
+ #endif
+ 
++#if __CYGWIN__
++# include "cygwin.h"
++#endif
++
+ #ifndef HAVE_FCHOWN
+ # define HAVE_FCHOWN false
+ # define fchown(fd, uid, gid) (-1)
+@@ -1313,7 +1317,11 @@ close_src_desc:
+ static bool
+ same_file_ok (char const *src_name, struct stat const *src_sb,
+               char const *dst_name, struct stat const *dst_sb,
+-              const struct cp_options *x, bool *return_now, bool *unlink_src)
++              const struct cp_options *x, bool *return_now, bool *unlink_src
++#if __CYGWIN__
++	      , bool *case_change
++#endif
++	      )
+ {
+   const struct stat *src_sb_link;
+   const struct stat *dst_sb_link;
+@@ -1461,6 +1469,18 @@ same_file_ok (char const *src_name, stru
+       if (S_ISLNK (dst_sb_link->st_mode))
+         return true;
+ 
++#if __CYGWIN__
++      /* If the files have the same name, but differ in case, then let
++        rename() change the case.  */
++      if (same_link && x->move_mode && same_name (src_name, dst_name)
++         && memcmp (last_component (src_name), last_component (dst_name),
++                    base_len (src_name)) != 0)
++       {
++         *case_change = true;
++         return true;
++       }
++#endif /* __CYGWIN__ */
++
+       if (same_link
+           && 1 < dst_sb_link->st_nlink
+           && ! same_name (src_name, dst_name))
+@@ -1813,10 +1833,20 @@ copy_internal (char const *src_name, cha
+          && ! (x->move_mode || x->symbolic_link || x->hard_link
+                || x->backup_type != no_backups
+                || x->unlink_dest_before_opening));
+-      if ((use_stat
+-           ? stat (dst_name, &dst_sb)
+-           : lstat (dst_name, &dst_sb))
+-          != 0)
++      int res = (use_stat
++                 ? stat (dst_name, &dst_sb)
++                 : lstat (dst_name, &dst_sb));
++#if __CYGWIN__
++      /* stat("a") succeeds even if it was really "a.exe".  */
++      if (! res && 0 < cygwin_spelling (dst_name))
++        {
++          /* Only DST_NAME.exe exists, but we want the non-existant
++             DST_NAME.  */
++          res = -1;
++          errno = ENOENT;
++        }
++#endif /* __CYGWIN__ */
++      if (res != 0)
+         {
+           if (errno != ENOENT)
+             {
+@@ -1833,10 +1863,17 @@ copy_internal (char const *src_name, cha
+              that it is stat'able or lstat'able.  */
+           bool return_now;
+           bool unlink_src;
++#if __CYGWIN__
++          bool case_change = false;
++#endif /* __CYGWIN__ */
+ 
+           have_dst_lstat = !use_stat;
+           if (! same_file_ok (src_name, &src_sb, dst_name, &dst_sb,
+-                              x, &return_now, &unlink_src))
++                              x, &return_now, &unlink_src
++#if __CYGWIN__
++                              , &case_change
++#endif
++))
+             {
+               error (0, 0, _("%s and %s are the same file"),
+                      quote_n (0, src_name), quote_n (1, dst_name));
+@@ -1895,6 +1932,9 @@ copy_internal (char const *src_name, cha
+              cp and mv treat -i and -f differently.  */
+           if (x->move_mode)
+             {
++#if __CYGWIN__
++              if (!case_change)
++#endif /* __CYGWIN__ */
+               if (abandon_move (x, dst_name, &dst_sb)
+                   || (unlink_src && unlink (src_name) == 0))
+                 {
+@@ -2058,7 +2098,11 @@ copy_internal (char const *src_name, cha
+                    /* Never unlink dst_name when in move mode.  */
+                    && ! x->move_mode
+                    && (x->unlink_dest_before_opening
+-                       || (x->preserve_links && 1 < dst_sb.st_nlink)
++                       || (x->preserve_links && 1 < dst_sb.st_nlink
++#if __CYGWIN__
++                           && !case_change
++#endif /* __CYGWIN__ */
++			   )
+                        || (x->dereference == DEREF_NEVER
+                            && ! S_ISREG (src_sb.st_mode))
+                        ))
+@@ -2816,6 +2860,21 @@ copy (char const *src_name, char const *
+ {
+   assert (valid_options (options));
+ 
++#if __CYGWIN__
++  /* .exe magic - if src exists with an implicit .exe suffix and is
++     not a symlink, but dst does not exist and was also specified
++     without a suffix, then append .exe to dst.  */
++  int cygwin = cygwin_spelling (src_name);
++  char *p;
++  if (cygwin == 2
++      && ((p = strchr (dst_name, '\0') - 4) <= dst_name
++          || strcasecmp (p, ".exe") != 0))
++    {
++      cygwin = 3;
++      CYGWIN_APPEND_EXE (p, dst_name);
++    }
++#endif /* __CYGWIN__ */
++
+   /* Record the file names: they're used in case of error, when copying
+      a directory into itself.  I don't like to make these tools do *any*
+      extra work in the common case when that work is solely to handle
+@@ -2827,10 +2886,15 @@ copy (char const *src_name, char const *
+   top_level_dst_name = dst_name;
+ 
+   bool first_dir_created_per_command_line_arg = false;
+-  return copy_internal (src_name, dst_name, nonexistent_dst, NULL, NULL,
++  bool result = copy_internal (src_name, dst_name, nonexistent_dst, NULL, NULL,
+                         options, true,
+                         &first_dir_created_per_command_line_arg,
+                         copy_into_self, rename_succeeded);
++#if __CYGWIN__
++  if (cygwin == 3)
++    freea ((char *) dst_name);
++#endif /* __CYGWIN__ */
++  return result;
+ }
+ 
+ /* Set *X to the default options for a value of type struct cp_options.  */
+--- coreutils-8.23/dd.c	2014-07-11 04:00:07.000000000 -0700
++++ coreutils-8.23/src/dd.c	2014-10-13 08:30:37.196451900 -0700
+@@ -37,6 +37,10 @@
+ #include "xstrtol.h"
+ #include "xtime.h"
+ 
++#if __CYGWIN__
++# include <io.h>
++#endif
++
+ /* The official name of this program (e.g., no 'g' prefix).  */
+ #define PROGRAM_NAME "dd"
+ 
+@@ -1862,6 +1866,13 @@ copy_with_unblock (char const *buf, size
+ static void
+ set_fd_flags (int fd, int add_flags, char const *name)
+ {
++#if __CYGWIN__
++  /* Cygwin does not allow fcntl to set the mode.  */
++  int mode_flags = add_flags & (O_BINARY | O_TEXT);
++  add_flags &= ~(O_BINARY | O_TEXT);
++  if (mode_flags && setmode (fd, mode_flags) == -1)
++    error (EXIT_FAILURE, errno, _("setting flags for %s"), quote (name));
++#endif /* __CYGWIN__ */
+   /* Ignore file creation flags that are no-ops on file descriptors.  */
+   add_flags &= ~ (O_NOCTTY | O_NOFOLLOW);
+ 
+@@ -2242,6 +2253,8 @@ main (int argc, char **argv)
+     }
+   else
+     {
++      if ((input_flags & (O_BINARY | O_TEXT)) == 0)
++	input_flags |= O_BINARY;
+       if (fd_reopen (STDIN_FILENO, input_file, O_RDONLY | input_flags, 0) < 0)
+         error (EXIT_FAILURE, errno, _("failed to open %s"), quote (input_file));
+     }
+@@ -2264,6 +2277,8 @@ main (int argc, char **argv)
+            | (conversions_mask & C_NOCREAT ? 0 : O_CREAT)
+            | (conversions_mask & C_EXCL ? O_EXCL : 0)
+            | (seek_records || (conversions_mask & C_NOTRUNC) ? 0 : O_TRUNC));
++      if ((opts & (O_BINARY | O_TEXT)) == 0)
++        opts |= O_BINARY;
+ 
+       /* Open the output file with *read* access only if we might
+          need to read to satisfy a 'seek=' request.  If we can't read
+--- coreutils-8.23/dircolors.c	2014-07-11 04:00:07.000000000 -0700
++++ coreutils-8.23/src/dircolors.c	2014-10-13 08:30:37.196451900 -0700
+@@ -494,8 +494,12 @@ main (int argc, char **argv)
+             }
+           else
+             {
++              /* tcsh treats LS_COLORS as a magic shell variable for its
++                 builtin ls-F, but does not recognize all the categories
++                 that coreutils ls does.  Therefore, silence stderr to
++                 avoid messages like "Unknown colorls variable `su'.".  */
+               prefix = "setenv LS_COLORS '";
+-              suffix = "'\n";
++              suffix = "' >&/dev/null\n";
+             }
+           fputs (prefix, stdout);
+           fwrite (s, 1, len, stdout);
+--- coreutils-8.23/install.c	2014-07-13 15:09:52.000000000 -0700
++++ coreutils-8.23/src/install.c	2014-10-13 08:30:37.196451900 -0700
+@@ -44,6 +44,10 @@
+ #include "utimens.h"
+ #include "xstrtol.h"
+ 
++#if __CYGWIN__
++# include "cygwin.h"
++#endif
++
+ /* The official name of this program (e.g., no 'g' prefix).  */
+ #define PROGRAM_NAME "install"
+ 
+@@ -531,6 +535,16 @@ strip (char const *name)
+       error (0, errno, _("fork system call failed"));
+       break;
+     case 0:			/* Child. */
++#if __CYGWIN__
++      {
++	/* Check for .exe here, since strip doesn't.  */
++	char *p;
++	if (((p = strchr (name, '\0') - 4) <= name
++	     || strcasecmp (p, ".exe") != 0)
++	    && 0 < cygwin_spelling (name))
++          CYGWIN_APPEND_EXE (p, name);
++      }
++#endif /* __CYGWIN__ */
+       execlp (strip_program, strip_program, name, NULL);
+       error (EXIT_FAILURE, errno, _("cannot run %s"), strip_program);
+       break;
+--- coreutils-8.23/ls.c	2014-07-13 15:09:52.000000000 -0700
++++ coreutils-8.23/src/ls.c	2014-10-13 08:30:37.196451900 -0700
+@@ -117,6 +117,10 @@
+ # include <sys/capability.h>
+ #endif
+ 
++#if __CYGWIN__
++# include "cygwin.h"
++#endif
++
+ #define PROGRAM_NAME (ls_mode == LS_LS ? "ls" \
+                       : (ls_mode == LS_MULTI_COL \
+                          ? "dir" : "vdir"))
+@@ -747,6 +751,11 @@ static char const *long_time_format[2] =
+     N_("%b %e %H:%M")
+   };
+ 
++#if __CYGWIN__
++/* Whether .exe should be appended to command-line args as needed.  */
++static bool append_exe;
++#endif /* __CYGWIN__ */
++
+ /* The set of signals that are caught.  */
+ 
+ static sigset_t caught_signals;
+@@ -782,6 +791,9 @@ enum
+ enum
+ {
+   AUTHOR_OPTION = CHAR_MAX + 1,
++#if __CYGWIN__
++  APPEND_EXE_OPTION,
++#endif /* __CYGWIN__ */
+   BLOCK_SIZE_OPTION,
+   COLOR_OPTION,
+   DEREFERENCE_COMMAND_LINE_SYMLINK_TO_DIR_OPTION,
+@@ -843,6 +855,9 @@ static struct option const long_options[
+   {"block-size", required_argument, NULL, BLOCK_SIZE_OPTION},
+   {"context", no_argument, 0, 'Z'},
+   {"author", no_argument, NULL, AUTHOR_OPTION},
++#if __CYGWIN__
++  {"append-exe", no_argument, NULL, APPEND_EXE_OPTION},
++#endif /* __CYGWIN__ */
+   {GETOPT_HELP_OPTION_DECL},
+   {GETOPT_VERSION_OPTION_DECL},
+   {NULL, 0, NULL, 0}
+@@ -1954,6 +1969,12 @@ decode_switches (int argc, char **argv)
+           print_scontext = true;
+           break;
+ 
++#if __CYGWIN__
++        case APPEND_EXE_OPTION:
++          append_exe = true;
++          break;
++#endif /* __CYGWIN__ */
++
+         case_GETOPT_HELP_CHAR;
+ 
+         case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);
+@@ -2924,6 +2945,12 @@ gobble_file (char const *name, enum file
+   uintmax_t blocks = 0;
+   struct fileinfo *f;
+ 
++#if __CYGWIN__
++  char *name_alt = NULL;
++  if (command_line_arg && append_exe && 0 < cygwin_spelling (name))
++    CYGWIN_APPEND_EXE (name_alt, name);
++#endif /* __CYGWIN__ */
++
+   /* An inode value prior to gobble_file necessarily came from readdir,
+      which is not used for command line arguments.  */
+   assert (! command_line_arg || inode == NOT_AN_INODE_NUMBER);
+@@ -3035,11 +3062,19 @@ gobble_file (char const *name, enum file
+           file_failure (command_line_arg,
+                         _("cannot access %s"), absolute_name);
+           if (command_line_arg)
+-            return 0;
++            {
++#if __CYGWIN__
++              freea (name_alt);
++#endif /* __CYGWIN__ */
++              return 0;
++            }
+ 
+           f->name = xstrdup (name);
+           cwd_n_used++;
+ 
++#if __CYGWIN__
++          freea (name_alt);
++#endif /* __CYGWIN__ */
+           return 0;
+         }
+ 
+@@ -3223,6 +3258,9 @@ gobble_file (char const *name, enum file
+   f->name = xstrdup (name);
+   cwd_n_used++;
+ 
++#if __CYGWIN__
++  freea (name_alt);
++#endif /* __CYGWIN__ */
+   return blocks;
+ }
+ 
+@@ -4923,6 +4961,11 @@ Sort entries alphabetically if none of -
+   -Z, --context              print any security context of each file\n\
+   -1                         list one file per line\n\
+ "), stdout);
++#if __CYGWIN__
++      fputs (_("\
++      --append-exe           append .exe if cygwin magic was needed\n\
++"), stdout);
++#endif /* __CYGWIN__ */
+       fputs (HELP_OPTION_DESCRIPTION, stdout);
+       fputs (VERSION_OPTION_DESCRIPTION, stdout);
+       emit_size_note ();
+--- coreutils-8.23/md5sum.c	2014-07-11 04:00:07.000000000 -0700
++++ coreutils-8.23/src/md5sum.c	2014-10-13 08:30:37.212072800 -0700
+@@ -813,6 +813,9 @@ main (int argc, char **argv)
+   if (optind == argc)
+     argv[argc++] = bad_cast ("-");
+ 
++  if (O_BINARY)
++    xfreopen (NULL, "wb", stdout);
++
+   for (; optind < argc; ++optind)
+     {
+       char *file = argv[optind];
+--- coreutils-8.23/mv.c	2014-07-11 04:00:07.000000000 -0700
++++ coreutils-8.23/src/mv.c	2014-10-13 08:30:37.212072800 -0700
+@@ -92,7 +92,7 @@ rm_option_init (struct rm_options *x)
+   x->require_restore_cwd = true;
+ 
+   {
+-    static struct dev_ino dev_ino_buf;
++    static struct root_dev_ino dev_ino_buf;
+     x->root_dev_ino = get_root_dev_ino (&dev_ino_buf);
+     if (x->root_dev_ino == NULL)
+       error (EXIT_FAILURE, errno, _("failed to get attributes of %s"),
+@@ -467,6 +467,16 @@ main (int argc, char **argv)
+   else if (!target_directory)
+     {
+       assert (2 <= n_files);
++#if __CYGWIN__
++      struct stat s1, s2;
++      if (2 == n_files
++	  && lstat (file[0], &s1) == 0 && lstat (file[1], &s2) == 0
++	  && s1.st_ino == s2.st_ino)
++	{
++	  /* Allow 'mv foo Foo' to change case of the directory foo.  */
++	}
++      else
++#endif /* __CYGWIN__ */
+       if (target_directory_operand (file[n_files - 1]))
+         target_directory = file[--n_files];
+       else if (2 < n_files)
+--- coreutils-8.23/pwd.c	2014-07-13 15:09:52.000000000 -0700
++++ coreutils-8.23/src/pwd.c	2014-10-13 08:30:37.212072800 -0700
+@@ -268,8 +268,8 @@ static void
+ robust_getcwd (struct file_name *file_name)
+ {
+   size_t height = 1;
+-  struct dev_ino dev_ino_buf;
+-  struct dev_ino *root_dev_ino = get_root_dev_ino (&dev_ino_buf);
++  struct root_dev_ino dev_ino_buf;
++  struct root_dev_ino *root_dev_ino = get_root_dev_ino (&dev_ino_buf);
+   struct stat dot_sb;
+ 
+   if (root_dev_ino == NULL)
+@@ -282,7 +282,7 @@ robust_getcwd (struct file_name *file_na
+   while (1)
+     {
+       /* If we've reached the root, we're done.  */
+-      if (SAME_INODE (dot_sb, *root_dev_ino))
++      if (ROOT_DEV_INO_CHECK (root_dev_ino, &dot_sb))
+         break;
+ 
+       find_dir_entry (&dot_sb, file_name, height++);
+@@ -291,6 +291,9 @@ robust_getcwd (struct file_name *file_na
+   /* See if a leading slash is needed; file_name_prepend adds one.  */
+   if (file_name->start[0] == '\0')
+     file_name_prepend (file_name, "", 0);
++  /* If we aren't in `/', we must be in `//'.  */
++  if (! SAME_INODE (root_dev_ino->single_slash, dot_sb))
++    file_name_prepend (file_name, "", 0);
+ }
+ 
+ 
+--- coreutils-8.23/remove.h	2014-07-11 04:00:07.000000000 -0700
++++ coreutils-8.23/src/remove.h	2014-10-13 08:30:37.212072800 -0700
+@@ -54,7 +54,7 @@ struct rm_options
+ 
+   /* Pointer to the device and inode numbers of '/', when --recursive
+      and preserving '/'.  Otherwise NULL.  */
+-  struct dev_ino *root_dev_ino;
++  struct root_dev_ino *root_dev_ino;
+ 
+   /* If nonzero, stdin is a tty.  */
+   bool stdin_tty;
+--- coreutils-8.23/rm.c	2014-07-11 04:00:07.000000000 -0700
++++ coreutils-8.23/src/rm.c	2014-10-13 08:30:37.212072800 -0700
+@@ -325,7 +325,7 @@ main (int argc, char **argv)
+ 
+   if (x.recursive && preserve_root)
+     {
+-      static struct dev_ino dev_ino_buf;
++      static struct root_dev_ino dev_ino_buf;
+       x.root_dev_ino = get_root_dev_ino (&dev_ino_buf);
+       if (x.root_dev_ino == NULL)
+         error (EXIT_FAILURE, errno, _("failed to get attributes of %s"),
+--- coreutils-8.23/stat.c	2014-07-11 04:00:07.000000000 -0700
++++ coreutils-8.23/src/stat.c	2014-10-13 08:30:37.212072800 -0700
+@@ -73,6 +73,13 @@
+ #include "find-mount-point.h"
+ #include "xvasprintf.h"
+ 
++#if __CYGWIN__
++# include "cygwin.h"
++/* Whether .exe should be appended to command-line args as needed.  */
++static bool append_exe;
++# define APPEND_EXE_OPTION 10000
++#endif
++
+ #if USE_STATVFS
+ # define STRUCT_STATVFS struct statvfs
+ # define STRUCT_STATXFS_F_FSID_IS_INTEGER STRUCT_STATVFS_F_FSID_IS_INTEGER
+@@ -189,6 +196,9 @@ static struct option const long_options[
+   {"format", required_argument, NULL, 'c'},
+   {"printf", required_argument, NULL, PRINTF_OPTION},
+   {"terse", no_argument, NULL, 't'},
++#if __CYGWIN__
++  {"append-exe", no_argument, NULL, APPEND_EXE_OPTION},
++#endif /* __CYGWIN__ */
+   {GETOPT_HELP_OPTION_DECL},
+   {GETOPT_VERSION_OPTION_DECL},
+   {NULL, 0, NULL, 0}
+@@ -1264,14 +1274,26 @@ do_statfs (char const *filename, char co
+       return false;
+     }
+ 
++#if __CYGWIN__
++  char *name_alt = NULL;
++  if (append_exe && 0 < cygwin_spelling (filename))
++    CYGWIN_APPEND_EXE (name_alt, filename);
++#endif /* __CYGWIN__ */
++
+   if (STATFS (filename, &statfsbuf) != 0)
+     {
+       error (0, errno, _("cannot read file system information for %s"),
+              quote (filename));
++#if __CYGWIN__
++      freea (name_alt);
++#endif /* __CYGWIN__ */
+       return false;
+     }
+ 
+   bool fail = print_it (format, -1, filename, print_statfs, &statfsbuf);
++#if __CYGWIN__
++  freea (name_alt);
++#endif /* __CYGWIN__ */
+   return ! fail;
+ }
+ 
+@@ -1282,6 +1304,7 @@ do_stat (char const *filename, char cons
+ {
+   int fd = STREQ (filename, "-") ? 0 : -1;
+   struct stat statbuf;
++  char *name_alt = NULL;
+ 
+   if (0 <= fd)
+     {
+@@ -1294,18 +1317,29 @@ do_stat (char const *filename, char cons
+   /* We can't use the shorter
+      (follow_links?stat:lstat) (filename, &statbug)
+      since stat might be a function-like macro.  */
+-  else if ((follow_links
+-            ? stat (filename, &statbuf)
+-            : lstat (filename, &statbuf)) != 0)
++  else
+     {
+-      error (0, errno, _("cannot stat %s"), quote (filename));
+-      return false;
++      if ((follow_links
++	   ? stat (filename, &statbuf)
++	   : lstat (filename, &statbuf)) != 0)
++	{
++	  error (0, errno, _("cannot stat %s"), quote (filename));
++	  return false;
++	}
++
++#if __CYGWIN__
++      if (append_exe && 0 < cygwin_spelling (filename))
++        CYGWIN_APPEND_EXE (name_alt, filename);
++#endif /* __CYGWIN__ */
+     }
+ 
+   if (S_ISBLK (statbuf.st_mode) || S_ISCHR (statbuf.st_mode))
+     format = format2;
+ 
+   bool fail = print_it (format, fd, filename, print_stat, &statbuf);
++#if __CYGWIN__
++  freea (name_alt);
++#endif /* __CYGWIN__ */
+   return ! fail;
+ }
+ 
+@@ -1427,6 +1461,11 @@ Display file or file system status.\n\
+                           if you want a newline, include \\n in FORMAT\n\
+   -t, --terse           print the information in terse form\n\
+ "), stdout);
++#if __CYGWIN__
++      fputs (_("\
++      --append-exe      append .exe if cygwin magic was needed\n\
++"), stdout);
++#endif /* __CYGWIN__ */
+       fputs (HELP_OPTION_DESCRIPTION, stdout);
+       fputs (VERSION_OPTION_DESCRIPTION, stdout);
+ 
+@@ -1547,6 +1586,12 @@ main (int argc, char *argv[])
+           terse = true;
+           break;
+ 
++#if __CYGWIN__
++        case APPEND_EXE_OPTION:
++          append_exe = true;
++          break;
++#endif /* __CYGWIN__ */
++
+         case_GETOPT_HELP_CHAR;
+ 
+         case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);
diff --git a/nixpkgs/pkgs/tools/misc/coreutils/coreutils-8.31-musl-cross.patch b/nixpkgs/pkgs/tools/misc/coreutils/coreutils-8.31-musl-cross.patch
new file mode 100644
index 000000000000..02b0b85db312
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/coreutils/coreutils-8.31-musl-cross.patch
@@ -0,0 +1,1153 @@
+From 453ff940449bbbde9ec00f0bbf82a359c5598fc7 Mon Sep 17 00:00:00 2001
+From: Bruno Haible <bruno@clisp.org>
+Date: Sat, 23 Mar 2019 23:00:52 +0100
+Subject: [PATCH 1/1] Support cross-compilation to musl libc.
+
+Reported by Necktwi Ozfguah <necktwi@ferryfair.com>.
+
+* m4/calloc.m4 (_AC_FUNC_CALLOC_IF): Add cross-compilation guesses for
+musl libc.
+* m4/canonicalize.m4 (gl_FUNC_REALPATH_WORKS): Likewise.
+* m4/chown.m4 (gl_FUNC_CHOWN): Likewise.
+* m4/d-ino.m4 (gl_CHECK_TYPE_STRUCT_DIRENT_D_INO): Likewise.
+* m4/fdopendir.m4 (gl_FUNC_FDOPENDIR): Likewise.
+* m4/fnmatch.m4 (gl_FUNC_FNMATCH_POSIX): Likewise.
+* m4/fpurge.m4 (gl_FUNC_FPURGE): Likewise.
+* m4/getcwd.m4 (gl_FUNC_GETCWD_NULL): Likewise.
+* m4/getcwd-abort-bug.m4 (gl_FUNC_GETCWD_ABORT_BUG): Likewise.
+* m4/getdelim.m4 (gl_FUNC_GETDELIM): Likewise.
+* m4/getgroups.m4 (AC_FUNC_GETGROUPS, gl_FUNC_GETGROUPS): Likewise.
+* m4/getline.m4 (gl_FUNC_GETLINE): Likewise.
+* m4/gettimeofday.m4 (gl_FUNC_GETTIMEOFDAY_CLOBBER): Likewise.
+* m4/hypot.m4 (gl_FUNC_HYPOT): Likewise.  // removed
+* m4/hypotf.m4 (gl_FUNC_HYPOTF): Likewise.  // removed
+* m4/hypotl.m4 (gl_FUNC_HYPOTL): Likewise.  // removed
+* m4/iconv_open-utf.m4 (gl_FUNC_ICONV_OPEN_UTF_SUPPORT): Likewise.  // removed
+* m4/link-follow.m4 (gl_FUNC_LINK_FOLLOWS_SYMLINK): Likewise.
+* m4/log.m4 (gl_FUNC_LOG): Likewise.  // removed
+* m4/logf.m4 (gl_FUNC_LOGF): Likewise.  // removed
+* m4/logl.m4 (gl_FUNC_LOGL_WORKS): Likewise.  // removed
+* m4/log10.m4 (gl_FUNC_LOG10): Likewise.  // removed
+* m4/log10f.m4 (gl_FUNC_LOG10F): Likewise.  // removed
+* m4/log10l.m4 (gl_FUNC_LOG10L): Likewise.  // removed
+* m4/log1p.m4 (gl_FUNC_LOG1P): Likewise.  // removed
+* m4/log1pf.m4 (gl_FUNC_LOG1PF): Likewise.  // removed
+* m4/log1pl.m4 (gl_FUNC_LOG1PL): Likewise.  // removed
+* m4/log2.m4 (gl_FUNC_LOG2): Likewise.  // removed
+* m4/log2f.m4 (gl_FUNC_LOG2F): Likewise.  // removed
+* m4/malloc.m4 (_AC_FUNC_MALLOC_IF): Likewise.
+* m4/mkdir.m4 (gl_FUNC_MKDIR): Likewise.
+* m4/mkstemp.m4 (gl_FUNC_MKSTEMP): Likewise.
+* m4/modf.m4 (gl_FUNC_MODF): Likewise.  // removed
+* m4/modff.m4 (gl_FUNC_MODFF): Likewise.  // removed
+* m4/modfl.m4 (gl_FUNC_MODFL): Likewise.  // removed
+* m4/perror.m4 (gl_FUNC_PERROR): Likewise.
+* m4/printf.m4 (gl_PRINTF_SIZES_C99, gl_PRINTF_INFINITE,
+gl_PRINTF_INFINITE_LONG_DOUBLE, gl_PRINTF_DIRECTIVE_A,
+gl_PRINTF_DIRECTIVE_F, gl_PRINTF_FLAG_ZERO, gl_SNPRINTF_TRUNCATION_C99,
+gl_SNPRINTF_RETVAL_C99, gl_SNPRINTF_DIRECTIVE_N,
+gl_VSNPRINTF_ZEROSIZE_C99): Likewise.
+* m4/ptsname.m4 (gl_FUNC_PTSNAME): Likewise.  // removed
+* m4/putenv.m4 (gl_FUNC_PUTENV): Likewise.
+* m4/realloc.m4 (_AC_FUNC_REALLOC_IF): Likewise.
+* m4/remainder.m4 (gl_FUNC_REMAINDER): Likewise.  // removed
+* m4/remainderf.m4 (gl_FUNC_REMAINDERF): Likewise.  // removed
+* m4/remainderl.m4 (gl_FUNC_REMAINDERL): Likewise.  // removed
+* m4/rintl.m4 (gl_FUNC_RINTL): Likewise.  // removed
+* m4/round.m4 (gl_FUNC_ROUND): Likewise.  // removed
+* m4/roundf.m4 (gl_FUNC_ROUNDF): Likewise.  // removed
+* m4/roundl.m4 (gl_FUNC_ROUNDL): Likewise.  // removed
+* m4/setenv.m4 (gl_FUNC_SETENV): Likewise.
+* m4/signbit.m4 (gl_SIGNBIT): Likewise.
+* m4/sleep.m4 (gl_FUNC_SLEEP): Likewise.
+* m4/stpncpy.m4 (gl_FUNC_STPNCPY): Likewise.
+* m4/strerror.m4 (gl_FUNC_STRERROR, gl_FUNC_STRERROR_0): Likewise.
+* m4/strtod.m4 (gl_FUNC_STRTOD): Likewise.
+* m4/strtold.m4 (gl_FUNC_STRTOLD): Likewise.
+* m4/trunc.m4 (gl_FUNC_TRUNC): Likewise.    // removed
+* m4/truncf.m4 (gl_FUNC_TRUNCF): Likewise.  // removed
+* m4/truncl.m4 (gl_FUNC_TRUNCL): Likewise.  // removed
+* m4/tzset.m4 (gl_FUNC_TZSET_CLOBBER): Likewise.
+* m4/ungetc.m4 (gl_FUNC_UNGETC_WORKS): Likewise.
+* m4/usleep.m4 (gl_FUNC_USLEEP): Likewise.
+* m4/utimes.m4 (gl_FUNC_UTIMES): Likewise.
+* m4/wcwidth.m4 (gl_FUNC_WCWIDTH): Likewise.
+---
+ m4/calloc.m4           |  4 ++-
+ m4/canonicalize.m4     |  4 ++-
+ m4/chown.m4            | 22 +++++++------
+ m4/d-ino.m4            | 16 +++++-----
+ m4/fdopendir.m4        | 12 ++++---
+ m4/fnmatch.m4          | 18 ++++++++---
+ m4/fpurge.m4           | 24 +++++++++-----
+ m4/getcwd-abort-bug.m4 | 11 +++++--
+ m4/getcwd.m4           |  4 ++-
+ m4/getdelim.m4         | 40 ++++++++++++++----------
+ m4/getgroups.m4        |  6 +++-
+ m4/getline.m4          | 38 +++++++++++++---------
+ m4/gettimeofday.m4     |  4 ++-
+ m4/link-follow.m4      |  4 ++-
+ m4/malloc.m4           |  4 +--
+ m4/mkdir.m4            |  4 ++-
+ m4/mkstemp.m4          |  4 ++-
+ m4/perror.m4           | 12 ++++---
+ m4/printf.m4           | 22 ++++++++++++-
+ m4/putenv.m4           |  4 ++-
+ m4/realloc.m4          |  4 +--
+ m4/setenv.m4           |  4 ++-
+ m4/signbit.m4          |  6 +++-
+ m4/sleep.m4            |  4 ++-
+ m4/stpncpy.m4          | 14 +++++++--
+ m4/strerror.m4         |  6 +++-
+ m4/strtod.m4           | 10 +++---
+ m4/strtold.m4          |  9 ++++--
+ m4/tzset.m4            |  4 ++-
+ m4/ungetc.m4           | 18 ++++++-----
+ m4/usleep.m4           |  4 ++-
+ m4/utimes.m4           | 10 +++---
+ m4/wcwidth.m4          | 12 ++++---
+ 76 files changed, 461 insertions(+), 157 deletions(-)
+
+diff --git a/m4/calloc.m4 b/m4/calloc.m4
+index 012a5bf..d76535d 100644
+--- a/m4/calloc.m4
++++ b/m4/calloc.m4
+@@ -1,4 +1,4 @@
+-# calloc.m4 serial 18
++# calloc.m4 serial 19
+
+ # Copyright (C) 2004-2019 Free Software Foundation, Inc.
+ # This file is free software; the Free Software Foundation
+@@ -40,6 +40,8 @@ AC_DEFUN([_AC_FUNC_CALLOC_IF],
+        [case "$host_os" in
+                          # Guess yes on glibc systems.
+           *-gnu* | gnu*) ac_cv_func_calloc_0_nonnull="guessing yes" ;;
++                         # Guess yes on musl systems.
++          *-musl*)       ac_cv_func_calloc_0_nonnull="guessing yes" ;;
+                          # Guess yes on native Windows.
+           mingw*)        ac_cv_func_calloc_0_nonnull="guessing yes" ;;
+                          # If we don't know, assume the worst.
+diff --git a/m4/canonicalize.m4 b/m4/canonicalize.m4
+index 5b6e25d..b61747b 100644
+--- a/m4/canonicalize.m4
++++ b/m4/canonicalize.m4
+@@ -1,4 +1,4 @@
+-# canonicalize.m4 serial 29
++# canonicalize.m4 serial 30
+
+ dnl Copyright (C) 2003-2007, 2009-2019 Free Software Foundation, Inc.
+
+@@ -113,6 +113,8 @@ AC_DEFUN([gl_FUNC_REALPATH_WORKS],
+      [case "$host_os" in
+                        # Guess yes on glibc systems.
+         *-gnu* | gnu*) gl_cv_func_realpath_works="guessing yes" ;;
++                       # Guess yes on musl systems.
++        *-musl*)       gl_cv_func_realpath_works="guessing yes" ;;
+                        # Guess no on native Windows.
+         mingw*)        gl_cv_func_realpath_works="guessing no" ;;
+                        # If we don't know, assume the worst.
+diff --git a/m4/chown.m4 b/m4/chown.m4
+index ecfc0c0..b798325 100644
+--- a/m4/chown.m4
++++ b/m4/chown.m4
+@@ -1,4 +1,4 @@
+-# serial 30
++# serial 32
+ # Determine whether we need the chown wrapper.
+
+ dnl Copyright (C) 1997-2001, 2003-2005, 2007, 2009-2019 Free Software
+@@ -109,10 +109,12 @@ AC_DEFUN_ONCE([gl_FUNC_CHOWN],
+         [gl_cv_func_chown_slash_works=yes],
+         [gl_cv_func_chown_slash_works=no],
+         [case "$host_os" in
+-                   # Guess yes on glibc systems.
+-           *-gnu*) gl_cv_func_chown_slash_works="guessing yes" ;;
+-                   # If we don't know, assume the worst.
+-           *)      gl_cv_func_chown_slash_works="guessing no" ;;
++                    # Guess yes on glibc systems.
++           *-gnu*)  gl_cv_func_chown_slash_works="guessing yes" ;;
++                    # Guess yes on musl systems.
++           *-musl*) gl_cv_func_chown_slash_works="guessing yes" ;;
++                    # If we don't know, assume the worst.
++           *)       gl_cv_func_chown_slash_works="guessing no" ;;
+          esac
+         ])
+       rm -f conftest.link conftest.file])
+@@ -145,10 +147,12 @@ AC_DEFUN_ONCE([gl_FUNC_CHOWN],
+         [gl_cv_func_chown_ctime_works=yes],
+         [gl_cv_func_chown_ctime_works=no],
+         [case "$host_os" in
+-                   # Guess yes on glibc systems.
+-           *-gnu*) gl_cv_func_chown_ctime_works="guessing yes" ;;
+-                   # If we don't know, assume the worst.
+-           *)      gl_cv_func_chown_ctime_works="guessing no" ;;
++                    # Guess yes on glibc systems.
++           *-gnu*)  gl_cv_func_chown_ctime_works="guessing yes" ;;
++                    # Guess yes on musl systems.
++           *-musl*) gl_cv_func_chown_ctime_works="guessing yes" ;;
++                    # If we don't know, assume the worst.
++           *)       gl_cv_func_chown_ctime_works="guessing no" ;;
+          esac
+         ])
+       rm -f conftest.file])
+diff --git a/m4/d-ino.m4 b/m4/d-ino.m4
+index f1420cc..87dcacc 100644
+--- a/m4/d-ino.m4
++++ b/m4/d-ino.m4
+@@ -1,4 +1,4 @@
+-# serial 18
++# serial 19
+
+ dnl From Jim Meyering.
+ dnl
+@@ -40,12 +40,14 @@ AC_DEFUN([gl_CHECK_TYPE_STRUCT_DIRENT_D_INO],
+            [gl_cv_struct_dirent_d_ino=yes],
+            [gl_cv_struct_dirent_d_ino=no],
+            [case "$host_os" in
+-                           # Guess yes on glibc systems with Linux kernel.
+-              linux*-gnu*) gl_cv_struct_dirent_d_ino="guessing yes" ;;
+-                           # Guess no on native Windows.
+-              mingw*)      gl_cv_struct_dirent_d_ino="guessing no" ;;
+-                           # If we don't know, assume the worst.
+-              *)           gl_cv_struct_dirent_d_ino="guessing no" ;;
++                            # Guess yes on glibc systems with Linux kernel.
++              linux*-gnu*)  gl_cv_struct_dirent_d_ino="guessing yes" ;;
++                            # Guess yes on musl systems with Linux kernel.
++              linux*-musl*) gl_cv_struct_dirent_d_ino="guessing yes" ;;
++                            # Guess no on native Windows.
++              mingw*)       gl_cv_struct_dirent_d_ino="guessing no" ;;
++                            # If we don't know, assume the worst.
++              *)            gl_cv_struct_dirent_d_ino="guessing no" ;;
+             esac
+            ])])
+    case "$gl_cv_struct_dirent_d_ino" in
+diff --git a/m4/fdopendir.m4 b/m4/fdopendir.m4
+index 0490551..b2b3b03 100644
+--- a/m4/fdopendir.m4
++++ b/m4/fdopendir.m4
+@@ -1,4 +1,4 @@
+-# serial 10
++# serial 11
+ # See if we need to provide fdopendir.
+
+ dnl Copyright (C) 2009-2019 Free Software Foundation, Inc.
+@@ -45,10 +45,12 @@ DIR *fdopendir (int);
+          [gl_cv_func_fdopendir_works=yes],
+          [gl_cv_func_fdopendir_works=no],
+          [case "$host_os" in
+-                    # Guess yes on glibc systems.
+-            *-gnu*) gl_cv_func_fdopendir_works="guessing yes" ;;
+-                    # If we don't know, assume the worst.
+-            *)      gl_cv_func_fdopendir_works="guessing no" ;;
++                     # Guess yes on glibc systems.
++            *-gnu*)  gl_cv_func_fdopendir_works="guessing yes" ;;
++                     # Guess yes on musl systems.
++            *-musl*) gl_cv_func_fdopendir_works="guessing yes" ;;
++                     # If we don't know, assume the worst.
++            *)       gl_cv_func_fdopendir_works="guessing no" ;;
+           esac
+          ])])
+     case "$gl_cv_func_fdopendir_works" in
+diff --git a/m4/fnmatch.m4 b/m4/fnmatch.m4
+index c264ca7..75ba55b 100644
+--- a/m4/fnmatch.m4
++++ b/m4/fnmatch.m4
+@@ -1,4 +1,4 @@
+-# Check for fnmatch - serial 13.  -*- coding: utf-8 -*-
++# Check for fnmatch - serial 14.  -*- coding: utf-8 -*-
+
+ # Copyright (C) 2000-2007, 2009-2019 Free Software Foundation, Inc.
+ # This file is free software; the Free Software Foundation
+@@ -14,6 +14,7 @@ AC_DEFUN([gl_FUNC_FNMATCH_POSIX],
+   m4_divert_text([DEFAULTS], [gl_fnmatch_required=POSIX])
+
+   AC_REQUIRE([gl_FNMATCH_H])
++  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+   gl_fnmatch_required_lowercase=`
+     echo $gl_fnmatch_required | LC_ALL=C tr '[[A-Z]]' '[[a-z]]'
+   `
+@@ -117,12 +118,19 @@ AC_DEFUN([gl_FUNC_FNMATCH_POSIX],
+             ]])],
+          [eval "$gl_fnmatch_cache_var=yes"],
+          [eval "$gl_fnmatch_cache_var=no"],
+-         [eval "$gl_fnmatch_cache_var=\"guessing no\""])
++         [case "$host_os" in
++                     # Guess yes on musl systems.
++            *-musl*) eval "$gl_fnmatch_cache_var=\"guessing yes\"" ;;
++                     # Guess no otherwise, even on glibc systems.
++            *)       eval "$gl_fnmatch_cache_var=\"guessing no\"" ;;
++          esac
++         ])
+       ])
+     eval "gl_fnmatch_result=\"\$$gl_fnmatch_cache_var\""
+-    if test "$gl_fnmatch_result" != yes; then
+-      REPLACE_FNMATCH=1
+-    fi
++    case "$gl_fnmatch_result" in
++      *yes) ;;
++      *) REPLACE_FNMATCH=1 ;;
++    esac
+   fi
+   if test $HAVE_FNMATCH = 0 || test $REPLACE_FNMATCH = 1; then
+     gl_REPLACE_FNMATCH_H
+diff --git a/m4/fpurge.m4 b/m4/fpurge.m4
+index cb21f56..6c5b3e9 100644
+--- a/m4/fpurge.m4
++++ b/m4/fpurge.m4
+@@ -1,4 +1,4 @@
+-# fpurge.m4 serial 8
++# fpurge.m4 serial 9
+ dnl Copyright (C) 2007, 2009-2019 Free Software Foundation, Inc.
+ dnl This file is free software; the Free Software Foundation
+ dnl gives unlimited permission to copy and/or distribute it,
+@@ -7,12 +7,13 @@ dnl with or without modifications, as long as this notice is preserved.
+ AC_DEFUN([gl_FUNC_FPURGE],
+ [
+   AC_REQUIRE([gl_STDIO_H_DEFAULTS])
++  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+   AC_CHECK_FUNCS_ONCE([fpurge])
+   AC_CHECK_FUNCS_ONCE([__fpurge])
+   AC_CHECK_DECLS([fpurge], , , [[#include <stdio.h>]])
+   if test "x$ac_cv_func_fpurge" = xyes; then
+     HAVE_FPURGE=1
+-    # Detect BSD bug.  Only cygwin 1.7 is known to be immune.
++    # Detect BSD bug.  Only cygwin 1.7 and musl are known to be immune.
+     AC_CACHE_CHECK([whether fpurge works], [gl_cv_func_fpurge_works],
+       [AC_RUN_IFELSE(
+          [AC_LANG_PROGRAM(
+@@ -48,11 +49,20 @@ AC_DEFUN([gl_FUNC_FPURGE],
+                return 13;
+              return 0;
+             ])],
+-      [gl_cv_func_fpurge_works=yes], [gl_cv_func_fpurge_works=no],
+-      [gl_cv_func_fpurge_works='guessing no'])])
+-    if test "x$gl_cv_func_fpurge_works" != xyes; then
+-      REPLACE_FPURGE=1
+-    fi
++         [gl_cv_func_fpurge_works=yes],
++         [gl_cv_func_fpurge_works=no],
++         [case "$host_os" in
++                     # Guess yes on musl systems.
++            *-musl*) gl_cv_func_fpurge_works="guessing yes" ;;
++                     # Guess no otherwise.
++            *)       gl_cv_func_fpurge_works="guessing no" ;;
++          esac
++         ])
++      ])
++    case "$gl_cv_func_fpurge_works" in
++      *yes) ;;
++      *) REPLACE_FPURGE=1 ;;
++    esac
+   else
+     HAVE_FPURGE=0
+   fi
+diff --git a/m4/getcwd-abort-bug.m4 b/m4/getcwd-abort-bug.m4
+index f0f24a5..7227f08 100644
+--- a/m4/getcwd-abort-bug.m4
++++ b/m4/getcwd-abort-bug.m4
+@@ -1,4 +1,4 @@
+-# serial 9
++# serial 11
+ # Determine whether getcwd aborts when the length of the working directory
+ # name is unusually large.  Any length between 4k and 16k trigger the bug
+ # when using glibc-2.4.90-9 or older.
+@@ -13,6 +13,7 @@
+ # gl_FUNC_GETCWD_ABORT_BUG([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
+ AC_DEFUN([gl_FUNC_GETCWD_ABORT_BUG],
+ [
++  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+   AC_CHECK_DECLS_ONCE([getcwd])
+   AC_CHECK_HEADERS_ONCE([unistd.h])
+   AC_REQUIRE([gl_PATHMAX_SNIPPET_PREREQ])
+@@ -142,7 +143,13 @@ main ()
+         else
+           gl_cv_func_getcwd_abort_bug=no
+         fi],
+-       [gl_cv_func_getcwd_abort_bug=yes])
++       [case "$host_os" in
++                   # Guess no on musl systems.
++          *-musl*) gl_cv_func_getcwd_abort_bug="guessing no" ;;
++                   # Guess yes otherwise, even on glibc systems.
++          *)       gl_cv_func_getcwd_abort_bug="guessing yes"
++        esac
++       ])
+     ])
+   AS_IF([test $gl_cv_func_getcwd_abort_bug = yes], [$1], [$2])
+ ])
+diff --git a/m4/getcwd.m4 b/m4/getcwd.m4
+index 4929b51..625171a 100644
+--- a/m4/getcwd.m4
++++ b/m4/getcwd.m4
+@@ -6,7 +6,7 @@
+ # with or without modifications, as long as this notice is preserved.
+
+ # Written by Paul Eggert.
+-# serial 16
++# serial 17
+
+ AC_DEFUN([gl_FUNC_GETCWD_NULL],
+   [
+@@ -50,6 +50,8 @@ AC_DEFUN([gl_FUNC_GETCWD_NULL],
+         [[case "$host_os" in
+                            # Guess yes on glibc systems.
+             *-gnu* | gnu*) gl_cv_func_getcwd_null="guessing yes";;
++                           # Guess yes on musl systems.
++            *-musl*)       gl_cv_func_getcwd_null="guessing yes";;
+                            # Guess yes on Cygwin.
+             cygwin*)       gl_cv_func_getcwd_null="guessing yes";;
+                            # If we don't know, assume the worst.
+diff --git a/m4/getdelim.m4 b/m4/getdelim.m4
+index bf17c57..e77c379 100644
+--- a/m4/getdelim.m4
++++ b/m4/getdelim.m4
+@@ -1,4 +1,4 @@
+-# getdelim.m4 serial 12
++# getdelim.m4 serial 13
+
+ dnl Copyright (C) 2005-2007, 2009-2019 Free Software Foundation, Inc.
+ dnl
+@@ -11,6 +11,7 @@ AC_PREREQ([2.59])
+ AC_DEFUN([gl_FUNC_GETDELIM],
+ [
+   AC_REQUIRE([gl_STDIO_H_DEFAULTS])
++  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
+   dnl Persuade glibc <stdio.h> to declare getdelim().
+   AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+@@ -21,9 +22,10 @@ AC_DEFUN([gl_FUNC_GETDELIM],
+   if test $ac_cv_func_getdelim = yes; then
+     HAVE_GETDELIM=1
+     dnl Found it in some library.  Verify that it works.
+-    AC_CACHE_CHECK([for working getdelim function], [gl_cv_func_working_getdelim],
+-    [echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data
+-    AC_RUN_IFELSE([AC_LANG_SOURCE([[
++    AC_CACHE_CHECK([for working getdelim function],
++      [gl_cv_func_working_getdelim],
++      [echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data
++       AC_RUN_IFELSE([AC_LANG_SOURCE([[
+ #    include <stdio.h>
+ #    include <stdlib.h>
+ #    include <string.h>
+@@ -53,25 +55,31 @@ AC_DEFUN([gl_FUNC_GETDELIM],
+       fclose (in);
+       return 0;
+     }
+-    ]])], [gl_cv_func_working_getdelim=yes] dnl The library version works.
+-    , [gl_cv_func_working_getdelim=no] dnl The library version does NOT work.
+-    , dnl We're cross compiling. Assume it works on glibc2 systems.
+-      [AC_EGREP_CPP([Lucky GNU user],
+-         [
++    ]])],
++         [gl_cv_func_working_getdelim=yes],
++         [gl_cv_func_working_getdelim=no],
++         [dnl We're cross compiling.
++          dnl Guess it works on glibc2 systems and musl systems.
++          AC_EGREP_CPP([Lucky GNU user],
++            [
+ #include <features.h>
+ #ifdef __GNU_LIBRARY__
+  #if (__GLIBC__ >= 2) && !defined __UCLIBC__
+   Lucky GNU user
+  #endif
+ #endif
+-         ],
+-         [gl_cv_func_working_getdelim="guessing yes"],
+-         [gl_cv_func_working_getdelim="guessing no"])]
+-    )])
++            ],
++            [gl_cv_func_working_getdelim="guessing yes"],
++            [case "$host_os" in
++               *-musl*) gl_cv_func_working_getdelim="guessing yes" ;;
++               *)       gl_cv_func_working_getdelim="guessing no" ;;
++             esac
++            ])
++         ])
++      ])
+     case "$gl_cv_func_working_getdelim" in
+-      *no)
+-        REPLACE_GETDELIM=1
+-        ;;
++      *yes) ;;
++      *) REPLACE_GETDELIM=1 ;;
+     esac
+   else
+     HAVE_GETDELIM=0
+diff --git a/m4/getgroups.m4 b/m4/getgroups.m4
+index 2ce986e..c93447b 100644
+--- a/m4/getgroups.m4
++++ b/m4/getgroups.m4
+@@ -1,4 +1,4 @@
+-# serial 21
++# serial 22
+
+ dnl From Jim Meyering.
+ dnl A wrapper around AC_FUNC_GETGROUPS.
+@@ -42,6 +42,8 @@ AC_DEFUN([AC_FUNC_GETGROUPS],
+          [case "$host_os" in # ((
+                            # Guess yes on glibc systems.
+             *-gnu* | gnu*) ac_cv_func_getgroups_works="guessing yes" ;;
++                           # Guess yes on musl systems.
++            *-musl*)       ac_cv_func_getgroups_works="guessing yes" ;;
+                            # If we don't know, assume the worst.
+             *)             ac_cv_func_getgroups_works="guessing no" ;;
+           esac
+@@ -95,6 +97,8 @@ AC_DEFUN([gl_FUNC_GETGROUPS],
+           [case "$host_os" in
+                             # Guess yes on glibc systems.
+              *-gnu* | gnu*) gl_cv_func_getgroups_works="guessing yes" ;;
++                            # Guess yes on musl systems.
++             *-musl*)       gl_cv_func_getgroups_works="guessing yes" ;;
+                             # If we don't know, assume the worst.
+              *)             gl_cv_func_getgroups_works="guessing no" ;;
+            esac
+diff --git a/m4/getline.m4 b/m4/getline.m4
+index 5b2ead2..32f771c 100644
+--- a/m4/getline.m4
++++ b/m4/getline.m4
+@@ -1,4 +1,4 @@
+-# getline.m4 serial 28
++# getline.m4 serial 29
+
+ dnl Copyright (C) 1998-2003, 2005-2007, 2009-2019 Free Software Foundation,
+ dnl Inc.
+@@ -16,6 +16,7 @@ dnl to do with the function we need.
+ AC_DEFUN([gl_FUNC_GETLINE],
+ [
+   AC_REQUIRE([gl_STDIO_H_DEFAULTS])
++  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
+   dnl Persuade glibc <stdio.h> to declare getline().
+   AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+@@ -28,9 +29,10 @@ AC_DEFUN([gl_FUNC_GETLINE],
+                  gl_getline_needs_run_time_check=yes],
+                 [am_cv_func_working_getline=no])
+   if test $gl_getline_needs_run_time_check = yes; then
+-    AC_CACHE_CHECK([for working getline function], [am_cv_func_working_getline],
+-    [echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data
+-    AC_RUN_IFELSE([AC_LANG_SOURCE([[
++    AC_CACHE_CHECK([for working getline function],
++      [am_cv_func_working_getline],
++      [echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data
++       AC_RUN_IFELSE([AC_LANG_SOURCE([[
+ #    include <stdio.h>
+ #    include <stdlib.h>
+ #    include <string.h>
+@@ -61,21 +63,28 @@ AC_DEFUN([gl_FUNC_GETLINE],
+       fclose (in);
+       return 0;
+     }
+-    ]])], [am_cv_func_working_getline=yes] dnl The library version works.
+-    , [am_cv_func_working_getline=no] dnl The library version does NOT work.
+-    , dnl We're cross compiling. Assume it works on glibc2 systems.
+-      [AC_EGREP_CPP([Lucky GNU user],
+-         [
++    ]])],
++         [am_cv_func_working_getline=yes],
++         [am_cv_func_working_getline=no],
++         [dnl We're cross compiling.
++          dnl Guess it works on glibc2 systems and musl systems.
++          AC_EGREP_CPP([Lucky GNU user],
++            [
+ #include <features.h>
+ #ifdef __GNU_LIBRARY__
+  #if (__GLIBC__ >= 2) && !defined __UCLIBC__
+   Lucky GNU user
+  #endif
+ #endif
+-         ],
+-         [am_cv_func_working_getline="guessing yes"],
+-         [am_cv_func_working_getline="guessing no"])]
+-    )])
++            ],
++            [am_cv_func_working_getline="guessing yes"],
++            [case "$host_os" in
++               *-musl*) am_cv_func_working_getline="guessing yes" ;;
++               *)       am_cv_func_working_getline="guessing no" ;;
++             esac
++            ])
++         ])
++      ])
+   fi
+
+   if test $ac_cv_have_decl_getline = no; then
+@@ -83,7 +92,8 @@ AC_DEFUN([gl_FUNC_GETLINE],
+   fi
+
+   case "$am_cv_func_working_getline" in
+-    *no)
++    *yes) ;;
++    *)
+       dnl Set REPLACE_GETLINE always: Even if we have not found the broken
+       dnl getline function among $LIBS, it may exist in libinet and the
+       dnl executable may be linked with -linet.
+diff --git a/m4/gettimeofday.m4 b/m4/gettimeofday.m4
+index d29b4bf..5e2ef6f 100644
+--- a/m4/gettimeofday.m4
++++ b/m4/gettimeofday.m4
+@@ -1,4 +1,4 @@
+-# serial 25
++# serial 26
+
+ # Copyright (C) 2001-2003, 2005, 2007, 2009-2019 Free Software Foundation, Inc.
+ # This file is free software; the Free Software Foundation
+@@ -105,6 +105,8 @@ AC_DEFUN([gl_FUNC_GETTIMEOFDAY_CLOBBER],
+       case "$host_os" in
+                        # Guess all is fine on glibc systems.
+         *-gnu* | gnu*) gl_cv_func_gettimeofday_clobber="guessing no" ;;
++                       # Guess all is fine on musl systems.
++        *-musl*)       gl_cv_func_gettimeofday_clobber="guessing no" ;;
+                        # Guess no on native Windows.
+         mingw*)        gl_cv_func_gettimeofday_clobber="guessing no" ;;
+                        # If we don't know, assume the worst.
+diff --git a/m4/link-follow.m4 b/m4/link-follow.m4
+index cbd2dca..8ac7301 100644
+--- a/m4/link-follow.m4
++++ b/m4/link-follow.m4
+@@ -1,4 +1,4 @@
+-# serial 20
++# serial 21
+ dnl Run a program to determine whether link(2) follows symlinks.
+ dnl Set LINK_FOLLOWS_SYMLINKS accordingly.
+
+@@ -88,6 +88,8 @@ AC_DEFUN([gl_FUNC_LINK_FOLLOWS_SYMLINK],
+             case "$host_os" in
+                                   # On glibc/Linux we know the result.
+               linux*-gnu* | gnu*) gl_cv_func_link_follows_symlink="guessing no" ;;
++                                  # On musl/Linux we know the result.
++              linux*-musl*)       gl_cv_func_link_follows_symlink="guessing no" ;;
+                                   # Otherwise, we don't know.
+               *)                  gl_cv_func_link_follows_symlink=unknown ;;
+             esac
+diff --git a/m4/malloc.m4 b/m4/malloc.m4
+index b9b8d4b..c469c45 100644
+--- a/m4/malloc.m4
++++ b/m4/malloc.m4
+@@ -1,4 +1,4 @@
+-# malloc.m4 serial 17
++# malloc.m4 serial 19
+ dnl Copyright (C) 2007, 2009-2019 Free Software Foundation, Inc.
+ dnl This file is free software; the Free Software Foundation
+ dnl gives unlimited permission to copy and/or distribute it,
+@@ -32,7 +32,7 @@ AC_DEFUN([_AC_FUNC_MALLOC_IF],
+        [ac_cv_func_malloc_0_nonnull=no],
+        [case "$host_os" in
+           # Guess yes on platforms where we know the result.
+-          *-gnu* | gnu* | freebsd* | netbsd* | openbsd* \
++          *-gnu* | gnu* | *-musl* | freebsd* | netbsd* | openbsd* \
+           | hpux* | solaris* | cygwin* | mingw*)
+             ac_cv_func_malloc_0_nonnull="guessing yes" ;;
+           # If we don't know, assume the worst.
+diff --git a/m4/mkdir.m4 b/m4/mkdir.m4
+index 4cd9590..366a3cd 100644
+--- a/m4/mkdir.m4
++++ b/m4/mkdir.m4
+@@ -1,4 +1,4 @@
+-# serial 14
++# serial 15
+
+ # Copyright (C) 2001, 2003-2004, 2006, 2008-2019 Free Software Foundation, Inc.
+ # This file is free software; the Free Software Foundation
+@@ -62,6 +62,8 @@ AC_DEFUN([gl_FUNC_MKDIR],
+       [case "$host_os" in
+                         # Guess yes on glibc systems.
+          *-gnu* | gnu*) gl_cv_func_mkdir_trailing_dot_works="guessing yes" ;;
++                        # Guess yes on musl systems.
++         *-musl*)       gl_cv_func_mkdir_trailing_dot_works="guessing yes" ;;
+                         # Guess no on native Windows.
+          mingw*)        gl_cv_func_mkdir_trailing_dot_works="guessing no" ;;
+                         # If we don't know, assume the worst.
+diff --git a/m4/mkstemp.m4 b/m4/mkstemp.m4
+index ae24c3b..1b15c2e 100644
+--- a/m4/mkstemp.m4
++++ b/m4/mkstemp.m4
+@@ -1,4 +1,4 @@
+-#serial 25
++#serial 26
+
+ # Copyright (C) 2001, 2003-2007, 2009-2019 Free Software Foundation, Inc.
+ # This file is free software; the Free Software Foundation
+@@ -59,6 +59,8 @@ AC_DEFUN([gl_FUNC_MKSTEMP],
+           [case "$host_os" in
+                             # Guess yes on glibc systems.
+              *-gnu* | gnu*) gl_cv_func_working_mkstemp="guessing yes" ;;
++                            # Guess yes on musl systems.
++             *-musl*)       gl_cv_func_working_mkstemp="guessing yes" ;;
+                             # Guess no on native Windows.
+              mingw*)        gl_cv_func_working_mkstemp="guessing no" ;;
+                             # If we don't know, assume the worst.
+diff --git a/m4/perror.m4 b/m4/perror.m4
+index 335be72..08e2db1 100644
+--- a/m4/perror.m4
++++ b/m4/perror.m4
+@@ -1,4 +1,4 @@
+-# perror.m4 serial 7
++# perror.m4 serial 8
+ dnl Copyright (C) 2008-2019 Free Software Foundation, Inc.
+ dnl This file is free software; the Free Software Foundation
+ dnl gives unlimited permission to copy and/or distribute it,
+@@ -48,10 +48,12 @@ AC_DEFUN([gl_FUNC_PERROR],
+             rm -rf conftest.txt1 conftest.txt2],
+            [gl_cv_func_perror_works=no],
+            [case "$host_os" in
+-                      # Guess yes on native Windows.
+-              mingw*) gl_cv_func_perror_works="guessing yes" ;;
+-                      # Otherwise guess no.
+-              *)      gl_cv_func_perror_works="guessing no" ;;
++                       # Guess yes on musl systems.
++              *-musl*) gl_cv_func_perror_works="guessing yes" ;;
++                       # Guess yes on native Windows.
++              mingw*)  gl_cv_func_perror_works="guessing yes" ;;
++                       # Otherwise guess no.
++              *)       gl_cv_func_perror_works="guessing no" ;;
+             esac
+            ])
+         ])
+diff --git a/m4/printf.m4 b/m4/printf.m4
+index cbf6ae4..6d2280e 100644
+--- a/m4/printf.m4
++++ b/m4/printf.m4
+@@ -1,4 +1,4 @@
+-# printf.m4 serial 60
++# printf.m4 serial 61
+ dnl Copyright (C) 2003, 2007-2019 Free Software Foundation, Inc.
+ dnl This file is free software; the Free Software Foundation
+ dnl gives unlimited permission to copy and/or distribute it,
+@@ -62,6 +62,8 @@ int main ()
+ changequote(,)dnl
+                                  # Guess yes on glibc systems.
+            *-gnu* | gnu*)        gl_cv_func_printf_sizes_c99="guessing yes";;
++                                 # Guess yes on musl systems.
++           *-musl*)              gl_cv_func_printf_sizes_c99="guessing yes";;
+                                  # Guess yes on FreeBSD >= 5.
+            freebsd[1-4].*)       gl_cv_func_printf_sizes_c99="guessing no";;
+            freebsd* | kfreebsd*) gl_cv_func_printf_sizes_c99="guessing yes";;
+@@ -240,6 +242,8 @@ int main ()
+ changequote(,)dnl
+                                  # Guess yes on glibc systems.
+            *-gnu* | gnu*)        gl_cv_func_printf_infinite="guessing yes";;
++                                 # Guess yes on musl systems.
++           *-musl*)              gl_cv_func_printf_infinite="guessing yes";;
+                                  # Guess yes on FreeBSD >= 6.
+            freebsd[1-5].*)       gl_cv_func_printf_infinite="guessing no";;
+            freebsd* | kfreebsd*) gl_cv_func_printf_infinite="guessing yes";;
+@@ -457,6 +461,8 @@ int main ()
+ changequote(,)dnl
+                                          # Guess yes on glibc systems.
+                    *-gnu* | gnu*)        gl_cv_func_printf_infinite_long_double="guessing yes";;
++                                         # Guess yes on musl systems.
++                   *-musl*)              gl_cv_func_printf_infinite_long_double="guessing yes";;
+                                          # Guess yes on FreeBSD >= 6.
+                    freebsd[1-5].*)       gl_cv_func_printf_infinite_long_double="guessing no";;
+                    freebsd* | kfreebsd*) gl_cv_func_printf_infinite_long_double="guessing yes";;
+@@ -575,6 +581,8 @@ int main ()
+                [gl_cv_func_printf_directive_a="guessing yes"],
+                [gl_cv_func_printf_directive_a="guessing no"])
+              ;;
++                                 # Guess yes on musl systems.
++           *-musl*)              gl_cv_func_printf_directive_a="guessing yes";;
+                                  # Guess no on Android.
+            linux*-android*)      gl_cv_func_printf_directive_a="guessing no";;
+                                  # Guess no on native Windows.
+@@ -625,6 +633,8 @@ int main ()
+ changequote(,)dnl
+                                  # Guess yes on glibc systems.
+            *-gnu* | gnu*)        gl_cv_func_printf_directive_f="guessing yes";;
++                                 # Guess yes on musl systems.
++           *-musl*)              gl_cv_func_printf_directive_f="guessing yes";;
+                                  # Guess yes on FreeBSD >= 6.
+            freebsd[1-5].*)       gl_cv_func_printf_directive_f="guessing no";;
+            freebsd* | kfreebsd*) gl_cv_func_printf_directive_f="guessing yes";;
+@@ -960,6 +970,8 @@ changequote(,)dnl
+          case "$host_os" in
+                             # Guess yes on glibc systems.
+            *-gnu* | gnu*)   gl_cv_func_printf_flag_zero="guessing yes";;
++                            # Guess yes on musl systems.
++           *-musl*)         gl_cv_func_printf_flag_zero="guessing yes";;
+                             # Guess yes on BeOS.
+            beos*)           gl_cv_func_printf_flag_zero="guessing yes";;
+                             # Guess no on Android.
+@@ -1206,6 +1218,8 @@ changequote(,)dnl
+          case "$host_os" in
+                                  # Guess yes on glibc systems.
+            *-gnu* | gnu*)        gl_cv_func_snprintf_truncation_c99="guessing yes";;
++                                 # Guess yes on musl systems.
++           *-musl*)              gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                  # Guess yes on FreeBSD >= 5.
+            freebsd[1-4].*)       gl_cv_func_snprintf_truncation_c99="guessing no";;
+            freebsd* | kfreebsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
+@@ -1308,6 +1322,8 @@ int main ()
+ changequote(,)dnl
+                                  # Guess yes on glibc systems.
+            *-gnu* | gnu*)        gl_cv_func_snprintf_retval_c99="guessing yes";;
++                                 # Guess yes on musl systems.
++           *-musl*)              gl_cv_func_snprintf_retval_c99="guessing yes";;
+                                  # Guess yes on FreeBSD >= 5.
+            freebsd[1-4].*)       gl_cv_func_snprintf_retval_c99="guessing no";;
+            freebsd* | kfreebsd*) gl_cv_func_snprintf_retval_c99="guessing yes";;
+@@ -1400,6 +1416,8 @@ changequote(,)dnl
+          case "$host_os" in
+                                  # Guess yes on glibc systems.
+            *-gnu* | gnu*)        gl_cv_func_snprintf_directive_n="guessing yes";;
++                                 # Guess yes on musl systems.
++           *-musl*)              gl_cv_func_snprintf_directive_n="guessing yes";;
+                                  # Guess yes on FreeBSD >= 5.
+            freebsd[1-4].*)       gl_cv_func_snprintf_directive_n="guessing no";;
+            freebsd* | kfreebsd*) gl_cv_func_snprintf_directive_n="guessing yes";;
+@@ -1554,6 +1572,8 @@ changequote(,)dnl
+          case "$host_os" in
+                                  # Guess yes on glibc systems.
+            *-gnu* | gnu*)        gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
++                                 # Guess yes on musl systems.
++           *-musl*)              gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                  # Guess yes on FreeBSD >= 5.
+            freebsd[1-4].*)       gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
+            freebsd* | kfreebsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+diff --git a/m4/putenv.m4 b/m4/putenv.m4
+index f8960f6..342ba26 100644
+--- a/m4/putenv.m4
++++ b/m4/putenv.m4
+@@ -1,4 +1,4 @@
+-# putenv.m4 serial 22
++# putenv.m4 serial 23
+ dnl Copyright (C) 2002-2019 Free Software Foundation, Inc.
+ dnl This file is free software; the Free Software Foundation
+ dnl gives unlimited permission to copy and/or distribute it,
+@@ -36,6 +36,8 @@ AC_DEFUN([gl_FUNC_PUTENV],
+              [case "$host_os" in
+                                # Guess yes on glibc systems.
+                 *-gnu* | gnu*) gl_cv_func_svid_putenv="guessing yes" ;;
++                               # Guess yes on musl systems.
++                *-musl*)       gl_cv_func_svid_putenv="guessing yes" ;;
+                                # Guess no on native Windows.
+                 mingw*)        gl_cv_func_svid_putenv="guessing no" ;;
+                                # If we don't know, assume the worst.
+diff --git a/m4/realloc.m4 b/m4/realloc.m4
+index f9f15ad..93066e8 100644
+--- a/m4/realloc.m4
++++ b/m4/realloc.m4
+@@ -1,4 +1,4 @@
+-# realloc.m4 serial 15
++# realloc.m4 serial 17
+ dnl Copyright (C) 2007, 2009-2019 Free Software Foundation, Inc.
+ dnl This file is free software; the Free Software Foundation
+ dnl gives unlimited permission to copy and/or distribute it,
+@@ -32,7 +32,7 @@ AC_DEFUN([_AC_FUNC_REALLOC_IF],
+        [ac_cv_func_realloc_0_nonnull=no],
+        [case "$host_os" in
+           # Guess yes on platforms where we know the result.
+-          *-gnu* | gnu* | freebsd* | netbsd* | openbsd* \
++          *-gnu* | gnu* | *-musl* | freebsd* | netbsd* | openbsd* \
+           | hpux* | solaris* | cygwin* | mingw*)
+             ac_cv_func_realloc_0_nonnull="guessing yes" ;;
+           # If we don't know, assume the worst.
+diff --git a/m4/setenv.m4 b/m4/setenv.m4
+index 6101274..a8f83d6 100644
+--- a/m4/setenv.m4
++++ b/m4/setenv.m4
+@@ -1,4 +1,4 @@
+-# setenv.m4 serial 27
++# setenv.m4 serial 28
+ dnl Copyright (C) 2001-2004, 2006-2019 Free Software Foundation, Inc.
+ dnl This file is free software; the Free Software Foundation
+ dnl gives unlimited permission to copy and/or distribute it,
+@@ -37,6 +37,8 @@ AC_DEFUN([gl_FUNC_SETENV],
+       [case "$host_os" in
+                         # Guess yes on glibc systems.
+          *-gnu* | gnu*) gl_cv_func_setenv_works="guessing yes" ;;
++                        # Guess yes on musl systems.
++         *-musl*)       gl_cv_func_setenv_works="guessing yes" ;;
+                         # If we don't know, assume the worst.
+          *)             gl_cv_func_setenv_works="guessing no" ;;
+        esac
+diff --git a/m4/signbit.m4 b/m4/signbit.m4
+index bf5bce5..f7f2f3d 100644
+--- a/m4/signbit.m4
++++ b/m4/signbit.m4
+@@ -1,4 +1,4 @@
+-# signbit.m4 serial 16
++# signbit.m4 serial 17
+ dnl Copyright (C) 2007-2019 Free Software Foundation, Inc.
+ dnl This file is free software; the Free Software Foundation
+ dnl gives unlimited permission to copy and/or distribute it,
+@@ -31,6 +31,8 @@ AC_DEFUN([gl_SIGNBIT],
+         [case "$host_os" in
+                           # Guess yes on glibc systems.
+            *-gnu* | gnu*) gl_cv_func_signbit="guessing yes" ;;
++                          # Guess yes on musl systems.
++           *-musl*)       gl_cv_func_signbit="guessing yes" ;;
+                           # Guess yes on native Windows.
+            mingw*)        gl_cv_func_signbit="guessing yes" ;;
+                           # If we don't know, assume the worst.
+@@ -62,6 +64,8 @@ AC_DEFUN([gl_SIGNBIT],
+         [case "$host_os" in
+                           # Guess yes on glibc systems.
+            *-gnu* | gnu*) gl_cv_func_signbit_gcc="guessing yes" ;;
++                          # Guess yes on musl systems.
++           *-musl*)       gl_cv_func_signbit_gcc="guessing yes" ;;
+                           # Guess yes on mingw, no on MSVC.
+            mingw*)        if test -n "$GCC"; then
+                             gl_cv_func_signbit_gcc="guessing yes"
+diff --git a/m4/sleep.m4 b/m4/sleep.m4
+index 5f71cc7..7bab467 100644
+--- a/m4/sleep.m4
++++ b/m4/sleep.m4
+@@ -1,4 +1,4 @@
+-# sleep.m4 serial 9
++# sleep.m4 serial 10
+ dnl Copyright (C) 2007-2019 Free Software Foundation, Inc.
+ dnl This file is free software; the Free Software Foundation
+ dnl gives unlimited permission to copy and/or distribute it,
+@@ -48,6 +48,8 @@ handle_alarm (int sig)
+       [case "$host_os" in
+                         # Guess yes on glibc systems.
+          *-gnu* | gnu*) gl_cv_func_sleep_works="guessing yes" ;;
++                        # Guess yes on musl systems.
++         *-musl*)       gl_cv_func_sleep_works="guessing yes" ;;
+                         # Guess no on native Windows.
+          mingw*)        gl_cv_func_sleep_works="guessing no" ;;
+                         # If we don't know, assume the worst.
+diff --git a/m4/stpncpy.m4 b/m4/stpncpy.m4
+index 83425dd..f8e1a7c 100644
+--- a/m4/stpncpy.m4
++++ b/m4/stpncpy.m4
+@@ -1,4 +1,4 @@
+-# stpncpy.m4 serial 16
++# stpncpy.m4 serial 17
+ dnl Copyright (C) 2002-2003, 2005-2007, 2009-2019 Free Software Foundation,
+ dnl Inc.
+ dnl This file is free software; the Free Software Foundation
+@@ -7,6 +7,8 @@ dnl with or without modifications, as long as this notice is preserved.
+
+ AC_DEFUN([gl_FUNC_STPNCPY],
+ [
++  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
++
+   dnl Persuade glibc <string.h> to declare stpncpy().
+   AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+
+@@ -69,12 +71,18 @@ int main ()
+ ]])],
+         [gl_cv_func_stpncpy=yes],
+         [gl_cv_func_stpncpy=no],
+-        [AC_EGREP_CPP([Thanks for using GNU], [
++        [dnl Guess yes on glibc systems and musl systems.
++         AC_EGREP_CPP([Thanks for using GNU], [
+ #include <features.h>
+ #ifdef __GNU_LIBRARY__
+   Thanks for using GNU
+ #endif
+-], [gl_cv_func_stpncpy="guessing yes"], [gl_cv_func_stpncpy="guessing no"])
++],         [gl_cv_func_stpncpy="guessing yes"],
++           [case "$host_os" in
++              *-musl*) gl_cv_func_stpncpy="guessing yes" ;;
++              *)       gl_cv_func_stpncpy="guessing no" ;;
++            esac
++           ])
+         ])
+     ])
+     case "$gl_cv_func_stpncpy" in
+diff --git a/m4/strerror.m4 b/m4/strerror.m4
+index b452f7f..2c90f31 100644
+--- a/m4/strerror.m4
++++ b/m4/strerror.m4
+@@ -1,4 +1,4 @@
+-# strerror.m4 serial 19
++# strerror.m4 serial 20
+ dnl Copyright (C) 2002, 2007-2019 Free Software Foundation, Inc.
+ dnl This file is free software; the Free Software Foundation
+ dnl gives unlimited permission to copy and/or distribute it,
+@@ -26,6 +26,8 @@ AC_DEFUN([gl_FUNC_STRERROR],
+         [case "$host_os" in
+                           # Guess yes on glibc systems.
+            *-gnu* | gnu*) gl_cv_func_working_strerror="guessing yes" ;;
++                          # Guess yes on musl systems.
++           *-musl*)       gl_cv_func_working_strerror="guessing yes" ;;
+                           # If we don't know, assume the worst.
+            *)             gl_cv_func_working_strerror="guessing no" ;;
+          esac
+@@ -80,6 +82,8 @@ AC_DEFUN([gl_FUNC_STRERROR_0],
+       [case "$host_os" in
+                         # Guess yes on glibc systems.
+          *-gnu* | gnu*) gl_cv_func_strerror_0_works="guessing yes" ;;
++                        # Guess yes on musl systems.
++         *-musl*)       gl_cv_func_strerror_0_works="guessing yes" ;;
+                         # Guess yes on native Windows.
+          mingw*)        gl_cv_func_strerror_0_works="guessing yes" ;;
+                         # If we don't know, assume the worst.
+diff --git a/m4/strtod.m4 b/m4/strtod.m4
+index 9912217..d68ab75 100644
+--- a/m4/strtod.m4
++++ b/m4/strtod.m4
+@@ -1,4 +1,4 @@
+-# strtod.m4 serial 24
++# strtod.m4 serial 25
+ dnl Copyright (C) 2002-2003, 2006-2019 Free Software Foundation, Inc.
+ dnl This file is free software; the Free Software Foundation
+ dnl gives unlimited permission to copy and/or distribute it,
+@@ -115,9 +115,11 @@ numeric_equal (double x, double y)
+            ],
+            [gl_cv_func_strtod_works="guessing yes"],
+            [case "$host_os" in
+-                      # Guess yes on native Windows.
+-              mingw*) gl_cv_func_strtod_works="guessing yes" ;;
+-              *)      gl_cv_func_strtod_works="guessing no" ;;
++                       # Guess yes on musl systems.
++              *-musl*) gl_cv_func_strtod_works="guessing yes" ;;
++                       # Guess yes on native Windows.
++              mingw*)  gl_cv_func_strtod_works="guessing yes" ;;
++              *)       gl_cv_func_strtod_works="guessing no" ;;
+             esac
+            ])
+         ])
+diff --git a/m4/strtold.m4 b/m4/strtold.m4
+index 16b4eda..17125fe 100644
+--- a/m4/strtold.m4
++++ b/m4/strtold.m4
+@@ -1,4 +1,4 @@
+-# strtold.m4 serial 2
++# strtold.m4 serial 4
+ dnl Copyright (C) 2002-2003, 2006-2019 Free Software Foundation, Inc.
+ dnl This file is free software; the Free Software Foundation
+ dnl gives unlimited permission to copy and/or distribute it,
+@@ -98,7 +98,12 @@ numeric_equal (long double x, long double y)
+ #endif
+            ],
+            [gl_cv_func_strtold_works="guessing yes"],
+-           [gl_cv_func_strtod_works="guessing no"])
++           [case "$host_os" in
++                       # Guess yes on musl systems.
++              *-musl*) gl_cv_func_strtold_works="guessing yes" ;;
++              *)       gl_cv_func_strtold_works="guessing no" ;;
++            esac
++           ])
+         ])
+       ])
+     case "$gl_cv_func_strtold_works" in
+diff --git a/m4/tzset.m4 b/m4/tzset.m4
+index 1278801..afdfa8e 100644
+--- a/m4/tzset.m4
++++ b/m4/tzset.m4
+@@ -1,4 +1,4 @@
+-# serial 11
++# serial 12
+
+ # Copyright (C) 2003, 2007, 2009-2019 Free Software Foundation, Inc.
+ # This file is free software; the Free Software Foundation
+@@ -70,6 +70,8 @@ main ()
+        [case "$host_os" in
+                          # Guess all is fine on glibc systems.
+           *-gnu* | gnu*) gl_cv_func_tzset_clobber="guessing no" ;;
++                         # Guess all is fine on musl systems.
++          *-musl*)       gl_cv_func_tzset_clobber="guessing no" ;;
+                          # Guess no on native Windows.
+           mingw*)        gl_cv_func_tzset_clobber="guessing no" ;;
+                          # If we don't know, assume the worst.
+diff --git a/m4/ungetc.m4 b/m4/ungetc.m4
+index ab8757b..08baf33 100644
+--- a/m4/ungetc.m4
++++ b/m4/ungetc.m4
+@@ -1,4 +1,4 @@
+-# ungetc.m4 serial 6
++# ungetc.m4 serial 7
+ dnl Copyright (C) 2009-2019 Free Software Foundation, Inc.
+ dnl This file is free software; the Free Software Foundation
+ dnl gives unlimited permission to copy and/or distribute it,
+@@ -41,12 +41,16 @@ AC_DEFUN_ONCE([gl_FUNC_UNGETC_WORKS],
+            remove ("conftest.tmp");])],
+         [gl_cv_func_ungetc_works=yes], [gl_cv_func_ungetc_works=no],
+         [case "$host_os" in
+-                                       # Guess yes on glibc and bionic systems.
+-           *-gnu* | gnu* | *-android*) gl_cv_func_ungetc_works="guessing yes" ;;
+-                                       # Guess yes on native Windows.
+-           mingw*)                     gl_cv_func_ungetc_works="guessing yes" ;;
+-                                       # If we don't know, assume the worst.
+-           *)                          gl_cv_func_ungetc_works="guessing no" ;;
++                          # Guess yes on glibc systems.
++           *-gnu* | gnu*) gl_cv_func_ungetc_works="guessing yes" ;;
++                          # Guess yes on musl systems.
++           *-musl*)       gl_cv_func_ungetc_works="guessing yes" ;;
++                          # Guess yes on bionic systems.
++           *-android*)    gl_cv_func_ungetc_works="guessing yes" ;;
++                          # Guess yes on native Windows.
++           mingw*)        gl_cv_func_ungetc_works="guessing yes" ;;
++                          # If we don't know, assume the worst.
++           *)             gl_cv_func_ungetc_works="guessing no" ;;
+          esac
+         ])
+     ])
+diff --git a/m4/usleep.m4 b/m4/usleep.m4
+index 59605a8..4a6bff0 100644
+--- a/m4/usleep.m4
++++ b/m4/usleep.m4
+@@ -1,4 +1,4 @@
+-# usleep.m4 serial 5
++# usleep.m4 serial 6
+ dnl Copyright (C) 2009-2019 Free Software Foundation, Inc.
+ dnl This file is free software; the Free Software Foundation
+ dnl gives unlimited permission to copy and/or distribute it,
+@@ -31,6 +31,8 @@ AC_DEFUN([gl_FUNC_USLEEP],
+         [case "$host_os" in
+                           # Guess yes on glibc systems.
+            *-gnu* | gnu*) gl_cv_func_usleep_works="guessing yes" ;;
++                          # Guess yes on musl systems.
++           *-musl*)       gl_cv_func_usleep_works="guessing yes" ;;
+                           # Guess no on native Windows.
+            mingw*)        gl_cv_func_usleep_works="guessing no" ;;
+                           # If we don't know, assume the worst.
+diff --git a/m4/utimes.m4 b/m4/utimes.m4
+index 7209b6d..5806d8f 100644
+--- a/m4/utimes.m4
++++ b/m4/utimes.m4
+@@ -1,5 +1,5 @@
+ # Detect some bugs in glibc's implementation of utimes.
+-# serial 5
++# serial 6
+
+ dnl Copyright (C) 2003-2005, 2009-2019 Free Software Foundation, Inc.
+ dnl This file is free software; the Free Software Foundation
+@@ -143,9 +143,11 @@ main ()
+        [gl_cv_func_working_utimes=yes],
+        [gl_cv_func_working_utimes=no],
+        [case "$host_os" in
+-                  # Guess no on native Windows.
+-          mingw*) gl_cv_func_working_utimes="guessing no" ;;
+-          *)      gl_cv_func_working_utimes="guessing no" ;;
++                   # Guess yes on musl systems.
++          *-musl*) gl_cv_func_working_utimes="guessing yes" ;;
++                   # Guess no on native Windows.
++          mingw*)  gl_cv_func_working_utimes="guessing no" ;;
++          *)       gl_cv_func_working_utimes="guessing no" ;;
+         esac
+        ])
+     ])
+diff --git a/m4/wcwidth.m4 b/m4/wcwidth.m4
+index baa2002..3952fd2 100644
+--- a/m4/wcwidth.m4
++++ b/m4/wcwidth.m4
+@@ -1,4 +1,4 @@
+-# wcwidth.m4 serial 27
++# wcwidth.m4 serial 28
+ dnl Copyright (C) 2006-2019 Free Software Foundation, Inc.
+ dnl This file is free software; the Free Software Foundation
+ dnl gives unlimited permission to copy and/or distribute it,
+@@ -98,9 +98,13 @@ int main ()
+           [
+ changequote(,)dnl
+            case "$host_os" in
+-                                        # Guess yes on glibc and AIX 7 systems.
+-             *-gnu* | gnu* | aix[7-9]*) gl_cv_func_wcwidth_works="guessing yes";;
+-             *)                         gl_cv_func_wcwidth_works="guessing no";;
++                            # Guess yes on glibc systems.
++             *-gnu* | gnu*) gl_cv_func_wcwidth_works="guessing yes";;
++                            # Guess yes on musl systems.
++             *-musl*)       gl_cv_func_wcwidth_works="guessing yes";;
++                            # Guess yes on AIX 7 systems.
++             aix[7-9]*)     gl_cv_func_wcwidth_works="guessing yes";;
++             *)             gl_cv_func_wcwidth_works="guessing no";;
+            esac
+ changequote([,])dnl
+           ])
+--
+1.9.1
+
+
diff --git a/nixpkgs/pkgs/tools/misc/coreutils/default.nix b/nixpkgs/pkgs/tools/misc/coreutils/default.nix
new file mode 100644
index 000000000000..cbe97dda9e5a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/coreutils/default.nix
@@ -0,0 +1,150 @@
+{ stdenv, lib, buildPackages
+, autoreconfHook, bison, texinfo, fetchurl, perl, xz, libiconv, gmp ? null
+, aclSupport ? stdenv.isLinux, acl ? null
+, attrSupport ? stdenv.isLinux, attr ? null
+, selinuxSupport? false, libselinux ? null, libsepol ? null
+# No openssl in default version, so openssl-induced rebuilds aren't too big.
+# It makes *sum functions significantly faster.
+, minimal ? true, withOpenssl ? !minimal, openssl ? null
+, withPrefix ? false
+, singleBinary ? "symlinks" # you can also pass "shebangs" or false
+}:
+
+assert aclSupport -> acl != null;
+assert selinuxSupport -> libselinux != null && libsepol != null;
+
+with lib;
+
+stdenv.mkDerivation rec {
+  pname = "coreutils";
+  version = "8.31";
+
+  src = fetchurl {
+    url = "mirror://gnu/${pname}/${pname}-${version}.tar.xz";
+    sha256 = "1zg9m79x1i2nifj4kb0waf9x3i5h6ydkypkjnbsb9rnwis8rqypz";
+  };
+
+  patches = optional stdenv.hostPlatform.isCygwin ./coreutils-8.23-4.cygwin.patch
+         # Fix failing test with musl. See https://lists.gnu.org/r/coreutils/2019-05/msg00031.html
+         # To be removed in coreutils-8.32.
+         ++ optional stdenv.hostPlatform.isMusl ./avoid-false-positive-in-date-debug-test.patch
+         # Fix compilation in musl-cross environments. To be removed in coreutils-8.32.
+         ++ optional stdenv.hostPlatform.isMusl ./coreutils-8.31-musl-cross.patch;
+
+  postPatch = ''
+    # The test tends to fail on btrfs,f2fs and maybe other unusual filesystems.
+    sed '2i echo Skipping dd sparse test && exit 77' -i ./tests/dd/sparse.sh
+    sed '2i echo Skipping du threshold test && exit 77' -i ./tests/du/threshold.sh
+    sed '2i echo Skipping cp sparse test && exit 77' -i ./tests/cp/sparse.sh
+    sed '2i echo Skipping rm deep-2 test && exit 77' -i ./tests/rm/deep-2.sh
+    sed '2i echo Skipping du long-from-unreadable test && exit 77' -i ./tests/du/long-from-unreadable.sh
+
+    # Some target platforms, especially when building inside a container have
+    # issues with the inotify test.
+    sed '2i echo Skipping tail inotify dir recreate test && exit 77' -i ./tests/tail-2/inotify-dir-recreate.sh
+
+    # sandbox does not allow setgid
+    sed '2i echo Skipping chmod setgid test && exit 77' -i ./tests/chmod/setgid.sh
+    substituteInPlace ./tests/install/install-C.sh \
+      --replace 'mode3=2755' 'mode3=1755'
+
+    sed '2i print "Skipping env -S test";  exit 77;' -i ./tests/misc/env-S.pl
+
+    # these tests fail in the unprivileged nix sandbox (without nix-daemon) as we break posix assumptions
+    for f in ./tests/chgrp/{basic.sh,recurse.sh,default-no-deref.sh,no-x.sh,posix-H.sh}; do
+      sed '2i echo Skipping chgrp && exit 77' -i "$f"
+    done
+    for f in gnulib-tests/{test-chown.c,test-fchownat.c,test-lchown.c}; do
+      echo "int main() { return 77; }" > "$f"
+    done
+  '' + optionalString (stdenv.hostPlatform.libc == "musl") (lib.concatStringsSep "\n" [
+    ''
+      echo "int main() { return 77; }" > gnulib-tests/test-parse-datetime.c
+      echo "int main() { return 77; }" > gnulib-tests/test-getlogin.c
+    ''
+  ]);
+
+  outputs = [ "out" "info" ];
+
+  nativeBuildInputs = [ perl xz.bin ]
+    ++ optionals stdenv.hostPlatform.isCygwin [ autoreconfHook texinfo ]   # due to patch
+    ++ optionals stdenv.hostPlatform.isMusl [ autoreconfHook bison ];   # due to patch
+  configureFlags = [ "--with-packager=https://NixOS.org" ]
+    ++ optional (singleBinary != false)
+      ("--enable-single-binary" + optionalString (isString singleBinary) "=${singleBinary}")
+    ++ optional withOpenssl "--with-openssl"
+    ++ optional stdenv.hostPlatform.isSunOS "ac_cv_func_inotify_init=no"
+    ++ optional withPrefix "--program-prefix=g"
+    ++ optionals (stdenv.hostPlatform != stdenv.buildPlatform && stdenv.hostPlatform.libc == "glibc") [
+      # TODO(19b98110126fde7cbb1127af7e3fe1568eacad3d): Needed for fstatfs() I
+      # don't know why it is not properly detected cross building with glibc.
+      "fu_cv_sys_stat_statfs2_bsize=yes"
+    ];
+
+
+  buildInputs = [ gmp ]
+    ++ optional aclSupport acl
+    ++ optional attrSupport attr
+    ++ optional withOpenssl openssl
+    ++ optionals selinuxSupport [ libselinux libsepol ]
+       # TODO(@Ericson2314): Investigate whether Darwin could benefit too
+    ++ optional (stdenv.hostPlatform != stdenv.buildPlatform && stdenv.hostPlatform.libc != "glibc") libiconv;
+
+  # The tests are known broken on Cygwin
+  # (http://article.gmane.org/gmane.comp.gnu.core-utils.bugs/19025),
+  # Darwin (http://article.gmane.org/gmane.comp.gnu.core-utils.bugs/19351),
+  # and {Open,Free}BSD.
+  # With non-standard storeDir: https://github.com/NixOS/nix/issues/512
+  doCheck = stdenv.hostPlatform == stdenv.buildPlatform
+    && (stdenv.hostPlatform.libc == "glibc" || stdenv.hostPlatform.isMusl)
+    && builtins.storeDir == "/nix/store";
+
+  # Prevents attempts of running 'help2man' on cross-built binaries.
+  PERL = if stdenv.hostPlatform == stdenv.buildPlatform then null else "missing";
+
+  # Saw random failures like ‘help2man: can't get '--help' info from
+  # man/sha512sum.td/sha512sum’.
+  enableParallelBuilding = false;
+
+  NIX_LDFLAGS = optionalString selinuxSupport "-lsepol";
+  FORCE_UNSAFE_CONFIGURE = optionalString stdenv.hostPlatform.isSunOS "1";
+
+  # Works around a bug with 8.26:
+  # Makefile:3440: *** Recursive variable 'INSTALL' references itself (eventually).  Stop.
+  preInstall = optionalString (stdenv.hostPlatform != stdenv.buildPlatform) ''
+    sed -i Makefile -e 's|^INSTALL =.*|INSTALL = ${buildPackages.coreutils}/bin/install -c|'
+  '';
+
+  postInstall = optionalString (stdenv.hostPlatform != stdenv.buildPlatform && !minimal) ''
+    rm $out/share/man/man1/*
+    cp ${buildPackages.coreutils-full}/share/man/man1/* $out/share/man/man1
+  ''
+  # du: 8.7 M locale + 0.4 M man pages
+  + optionalString minimal ''
+    rm -r "$out/share"
+  '';
+
+  meta = {
+    homepage = https://www.gnu.org/software/coreutils/;
+    description = "The basic file, shell and text manipulation utilities of the GNU operating system";
+
+    longDescription = ''
+      The GNU Core Utilities are the basic file, shell and text
+      manipulation utilities of the GNU operating system.  These are
+      the core utilities which are expected to exist on every
+      operating system.
+    '';
+
+    license = licenses.gpl3Plus;
+
+    platforms = platforms.unix ++ platforms.windows;
+
+    priority = 10;
+
+    maintainers = [ maintainers.eelco ];
+  };
+
+} // optionalAttrs stdenv.hostPlatform.isMusl {
+  # Work around a bogus warning in conjunction with musl.
+  NIX_CFLAGS_COMPILE = "-Wno-error";
+}
diff --git a/nixpkgs/pkgs/tools/misc/cowsay/default.nix b/nixpkgs/pkgs/tools/misc/cowsay/default.nix
new file mode 100644
index 000000000000..fb44b051b7ee
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cowsay/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl, perl }:
+
+stdenv.mkDerivation rec{
+  version = "3.03+dfsg2";
+  pname = "cowsay";
+
+  src = fetchurl {
+    url = "http://http.debian.net/debian/pool/main/c/cowsay/cowsay_${version}.orig.tar.gz";
+    sha256 = "0ghqnkp8njc3wyqx4mlg0qv0v0pc996x2nbyhqhz66bbgmf9d29v";
+  };
+
+  buildInputs = [ perl ];
+
+  postBuild = ''
+    substituteInPlace cowsay --replace "%BANGPERL%" "!${perl}/bin/perl" \
+      --replace "%PREFIX%" "$out"
+  '';
+
+  installPhase = ''
+    mkdir -p $out/{bin,man/man1,share/cows}
+    install -m755 cowsay $out/bin/cowsay
+    ln -s cowsay $out/bin/cowthink
+    install -m644 cowsay.1 $out/man/man1/cowsay.1
+    ln -s cowsay.1 $out/man/man1/cowthink.1
+    install -m644 cows/* -t $out/share/cows/
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A program which generates ASCII pictures of a cow with a message";
+    homepage = https://en.wikipedia.org/wiki/Cowsay;
+    license = licenses.gpl1;
+    platforms = platforms.all;
+    maintainers = [ maintainers.rob ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cpulimit/default.nix b/nixpkgs/pkgs/tools/misc/cpulimit/default.nix
new file mode 100644
index 000000000000..1978476a12d6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cpulimit/default.nix
@@ -0,0 +1,27 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  pname = "cpulimit";
+  version = "2.6";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/limitcpu/${pname}-${version}.tar.gz";
+    sha256 = "0xf0r6zxaqan1drz61nqf95p2pkiiihpvrjhrr9dx9j3vswyx31g";
+  };
+
+  buildFlags = with stdenv; [ (
+    if isDarwin then "osx"
+    else if isFreeBSD then "freebsd"
+    else "cpulimit"
+  ) ];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with stdenv.lib; {
+    homepage = http://limitcpu.sourceforge.net/;
+    description = "A tool to throttle the CPU usage of programs";
+    platforms = with platforms; linux ++ freebsd;
+    license = licenses.gpl2;
+    maintainers = [maintainers.rycee];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cpuminer-multi/default.nix b/nixpkgs/pkgs/tools/misc/cpuminer-multi/default.nix
new file mode 100644
index 000000000000..5792fa4121b4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cpuminer-multi/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchgit, curl, jansson, autoconf, automake
+, aesni ? true }:
+
+let
+  rev = "8393e03089c0abde61bd5d72aba8f926c3d6eca4";
+  date = "20160316";
+in
+stdenv.mkDerivation {
+  name = "cpuminer-multi-${date}-${stdenv.lib.strings.substring 0 7 rev}";
+
+  src = fetchgit {
+    inherit rev;
+    url = https://github.com/wolf9466/cpuminer-multi.git;
+    sha256 = "11dg4rra4dgfb9x6q85irn0hrkx2lkwyrdpgdh10pag09s3vhy4v";
+  };
+
+  buildInputs = [ autoconf automake curl jansson ];
+
+  preConfigure = ''
+    ./autogen.sh
+  '';
+
+  configureFlags = [ (if aesni then "--enable-aes-ni" else "--disable-aes-ni") ];
+
+  meta = with stdenv.lib; {
+    description = "Multi-algo CPUMiner";
+    homepage = https://github.com/wolf9466/cpuminer-multi;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.ehmry ];
+    # does not build on i686 https://github.com/lucasjones/cpuminer-multi/issues/27
+    platforms = [ "x86_64-linux" ]; 
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cpuminer/default.nix b/nixpkgs/pkgs/tools/misc/cpuminer/default.nix
new file mode 100644
index 000000000000..db0ab75d9166
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cpuminer/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl, curl, jansson, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "cpuminer";
+  version = "2.5.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/cpuminer/pooler-${pname}-${version}.tar.gz";
+    sha256 = "1xalrfrk5hvh1jh9kbqhib2an82ypd46vl9glaxhz3rbjld7c5pa";
+  };
+
+  patchPhase = if stdenv.cc.isClang then "${perl}/bin/perl ./nomacro.pl" else null;
+
+  buildInputs = [ curl jansson ];
+
+  configureFlags = [ "CFLAGS=-O3" ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/pooler/cpuminer;
+    description = "CPU miner for Litecoin and Bitcoin";
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/crex/default.nix b/nixpkgs/pkgs/tools/misc/crex/default.nix
new file mode 100644
index 000000000000..a00f8d6654f5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/crex/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "crex";
+  version = "0.2.5";
+
+  src = fetchFromGitHub {
+    owner = "octobanana";
+    repo = "crex";
+    rev = version;
+    sha256 = "086rvwl494z48acgsq3yq11qh1nxm8kbf11adn16aszai4d4ipr3";
+  };
+
+  postPatch = ''
+    substituteInPlace CMakeLists.txt --replace "/usr/local/bin" "bin"
+  '';
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = with stdenv.lib; {
+    description = "Explore, test, and check regular expressions in the terminal";
+    homepage = https://octobanana.com/software/crex;
+    license = licenses.mit;
+    maintainers = with maintainers; [ dtzWill ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/crudini/default.nix b/nixpkgs/pkgs/tools/misc/crudini/default.nix
new file mode 100644
index 000000000000..f63cd0d32c9c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/crudini/default.nix
@@ -0,0 +1,54 @@
+{ stdenv, fetchFromGitHub, python2Packages, help2man, installShellFiles }:
+
+let
+  # py3 is supposedly working in version 0.9.3 but the tests fail so stick to py2
+  pypkgs = python2Packages;
+
+in
+pypkgs.buildPythonApplication rec {
+  pname = "crudini";
+  version = "0.9.3";
+
+  src = fetchFromGitHub {
+    owner  = "pixelb";
+    repo   = "crudini";
+    rev    = version;
+    sha256 = "0298hvg0fpk0m0bjpwryj3icksbckwqqsr9w1ain55wf5s0v24k3";
+  };
+
+  nativeBuildInputs = [ help2man installShellFiles ];
+
+  propagatedBuildInputs = with pypkgs; [ iniparse ];
+
+  postPatch = ''
+    substituteInPlace crudini-help \
+      --replace ./crudini $out/bin/crudini
+    substituteInPlace tests/test.sh \
+      --replace ..: $out/bin:
+  '';
+
+  postInstall = ''
+    # this just creates the man page
+    make all
+
+    install -Dm444 -t $out/share/doc/${pname} README EXAMPLES
+    installManPage *.1
+  '';
+
+  checkPhase = ''
+    runHook preCheck
+
+    pushd tests >/dev/null
+    bash ./test.sh
+    popd >/dev/null
+
+    runHook postCheck
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A utility for manipulating ini files ";
+    homepage = "https://www.pixelbeat.org/programs/crudini/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ peterhoeg ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cunit/default.nix b/nixpkgs/pkgs/tools/misc/cunit/default.nix
new file mode 100644
index 000000000000..f1930c925ff4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cunit/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, autoconf, automake, libtool, autoreconfHook}:
+
+stdenv.mkDerivation rec {
+  pname = "CUnit";
+  version = "2.1-3";
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [autoconf automake libtool];
+
+  src = fetchurl {
+    url = "mirror://sourceforge/cunit/CUnit/${version}/${pname}-${version}.tar.bz2";
+    sha256 = "057j82da9vv4li4z5ri3227ybd18nzyq81f6gsvhifs5z0vr3cpm";
+  };
+
+  meta = {
+    description = "A Unit Testing Framework for C";
+
+    longDescription = ''
+      CUnit is a lightweight system for writing, administering, and running
+      unit tests in C.  It provides C programmers a basic testing functionality
+      with a flexible variety of user interfaces.
+    '';
+
+    homepage = http://cunit.sourceforge.net/;
+
+    license = stdenv.lib.licenses.lgpl2;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cutecom/default.nix b/nixpkgs/pkgs/tools/misc/cutecom/default.nix
new file mode 100644
index 000000000000..d825b555e195
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cutecom/default.nix
@@ -0,0 +1,29 @@
+{ mkDerivation, lib, fetchFromGitLab, qtbase, qtserialport, cmake }:
+
+mkDerivation rec {
+  pname = "cutecom";
+  version = "0.51.0";
+
+  src = fetchFromGitLab {
+    owner = "cutecom";
+    repo = "cutecom";
+    rev = "v${version}";
+    sha256 = "1zprabjs4z26hsb64fc3k790aiiqiz9d88j666xrzi4983m1bfv8";
+  };
+
+  preConfigure = ''
+    substituteInPlace CMakeLists.txt \
+      --replace "#find_package(Serialport REQUIRED)" "find_package(Qt5SerialPort REQUIRED)"
+  '';
+
+  buildInputs = [ qtbase qtserialport ];
+  nativeBuildInputs = [ cmake ];
+
+  meta = with lib; {
+    description = "A graphical serial terminal";
+    homepage = "https://gitlab.com/cutecom/cutecom/";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ bennofs ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dashing/default.nix b/nixpkgs/pkgs/tools/misc/dashing/default.nix
new file mode 100644
index 000000000000..f45889e78d85
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dashing/default.nix
@@ -0,0 +1,26 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+{ stdenv, buildGoPackage, fetchgit }:
+
+buildGoPackage rec {
+  pname = "dashing-unstable";
+  version = "2018-02-15";
+  rev = "0e0519d76ed6bbbe02b00ee1d1ac24697d349f49";
+
+  goPackagePath = "github.com/technosophos/dashing";
+
+  src = fetchgit {
+    inherit rev;
+    url = "https://github.com/technosophos/dashing";
+    sha256 = "066njyk3c1fqqr0v6aa6knp3dnksmh6hnl9d84fgd4wzyw3ma2an";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    description = "A Dash Generator Script for Any HTML";
+    homepage    = https://github.com/technosophos/dashing;
+    license     = licenses.mit;
+    maintainers = [ ];
+    platforms   = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dashing/deps.nix b/nixpkgs/pkgs/tools/misc/dashing/deps.nix
new file mode 100644
index 000000000000..4ad5a10149ec
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dashing/deps.nix
@@ -0,0 +1,39 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "github.com/andybalholm/cascadia";
+    fetch = {
+      type = "git";
+      url = "https://github.com/andybalholm/cascadia";
+      rev = "901648c87902174f774fac311d7f176f8647bdaa";
+      sha256 = "09j8cavbhqqdxjqrkwbc40g8p0i49zf3184rpjm5p2rjbprcghcc";
+    };
+  }
+  {
+    goPackagePath = "github.com/codegangsta/cli";
+    fetch = {
+      type = "git";
+      url = "https://github.com/codegangsta/cli";
+      rev = "8e01ec4cd3e2d84ab2fe90d8210528ffbb06d8ff";
+      sha256 = "0cpr10n4ps3gcdbcink71ry9hzhdb5rrcysmylybs8h2lzxqgc1i";
+    };
+  }
+  {
+    goPackagePath = "github.com/mattn/go-sqlite3";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-sqlite3";
+      rev = "d896508f87298565da02ed92730e7065c3de10b8";
+      sha256 = "19q0rv171wx73rwdp81rkj9ys3r5jaav94b3j06gprg59phb98bs";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev = "61147c48b25b599e5b561d2e9c4f3e1ef489ca41";
+      sha256 = "1520pdlw9a9s41ad1cf1z6y2ff4j96zbn82qffrxqk02bqlr9f5w";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/misc/dasht/default.nix b/nixpkgs/pkgs/tools/misc/dasht/default.nix
new file mode 100644
index 000000000000..e12868207970
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dasht/default.nix
@@ -0,0 +1,64 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, makeWrapper
+, coreutils
+, gnused
+, gnugrep
+, sqlite
+, wget
+, w3m
+, socat
+, gawk
+}:
+
+stdenv.mkDerivation rec {
+  pname   = "dasht";
+  version = "2.3.0";
+
+  src = fetchFromGitHub {
+    owner  = "sunaku";
+    repo   = pname;
+    rev    = "v${version}";
+    sha256 = "0d0pcjalba58nvxdgn39m4b6n9ifajf3ygyjaqgvzwxzgpzw0a60";
+  };
+
+  deps = lib.makeBinPath [
+    coreutils
+    gnused
+    gnugrep
+    sqlite
+    wget
+    w3m
+    socat
+    gawk
+    (placeholder "out")
+  ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp bin/* $out/bin/
+
+    mkdir -p $out/share/man/man1
+    cp man/man1/* $out/share/man/man1/
+
+    for i in $out/bin/*; do
+      echo "Wrapping $i"
+      wrapProgram $i --prefix PATH : ${deps};
+    done;
+
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "Search API docs offline, in terminal or browser";
+    homepage    = "https://sunaku.github.io/dasht/man";
+    license     = stdenv.lib.licenses.isc;
+    platforms   = stdenv.lib.platforms.unix; #cannot test other
+    maintainers = with stdenv.lib.maintainers; [ matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/datamash/default.nix b/nixpkgs/pkgs/tools/misc/datamash/default.nix
new file mode 100644
index 000000000000..18e80ab6e4aa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/datamash/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "datamash";
+  version = "1.5";
+
+  src = fetchurl {
+    url = "mirror://gnu/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "1b91pbdarnfmbhid8aa2f50k0fln8n7pg62782b4y0jlzvaljqi2";
+  };
+
+  meta = with stdenv.lib; {
+    description = "A command-line program which performs basic numeric,textual and statistical operations on input textual data files";
+    homepage = https://www.gnu.org/software/datamash/;
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ pSub vrthra ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/dateutils/default.nix b/nixpkgs/pkgs/tools/misc/dateutils/default.nix
new file mode 100644
index 000000000000..b440808833fc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dateutils/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl, autoreconfHook, tzdata }:
+
+stdenv.mkDerivation rec {
+  version = "0.4.6";
+  pname = "dateutils";
+
+  src = fetchurl {
+    url = "https://bitbucket.org/hroptatyr/dateutils/downloads/${pname}-${version}.tar.xz";
+    sha256 = "1kaphw474lz7336awr9rzsgcsr1p9njsjsryd8i0ywg5g8qp3816";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ tzdata ]; # needed for datezone
+  enableParallelBuilding = true;
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    description = "A bunch of tools that revolve around fiddling with dates and times in the command line";
+    homepage = http://www.fresse.org/dateutils/;
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.paperdigits ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dbacl/default.nix b/nixpkgs/pkgs/tools/misc/dbacl/default.nix
new file mode 100644
index 000000000000..9107debfd12c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dbacl/default.nix
@@ -0,0 +1,17 @@
+{fetchurl, stdenv}:
+
+stdenv.mkDerivation rec {
+  name = "dbacl-1.14";
+  src = fetchurl {
+    url = "https://www.lbreyer.com/gpl/${name}.tar.gz";
+    sha256 = "0224g6x71hyvy7jikfxmgcwww1r5lvk0jx36cva319cb9nmrbrq7";
+  };
+
+  meta = {
+    homepage = http://dbacl.sourceforge.net/;
+    longDescription = "a digramic Bayesian classifier for text recognition.";
+    maintainers = [];
+    license = stdenv.lib.licenses.gpl3;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dbus-map/default.nix b/nixpkgs/pkgs/tools/misc/dbus-map/default.nix
new file mode 100644
index 000000000000..72687f4bfa48
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dbus-map/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, lib, fetchFromGitHub, pkgconfig, glib, procps, libxml2 }:
+
+stdenv.mkDerivation {
+  pname = "dbus-map";
+  version = "2015-05-28";
+  src = fetchFromGitHub {
+    owner = "taviso";
+    repo = "dbusmap";
+    rev = "43703fc5e15743309b67131b5ba457b0d6ea7667";
+    sha256 = "1pjqn6w29ci8hfxkn1aynzfc8nvy3pqv3hixbxwr7qx20g4rwvdc";
+  };
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [
+    glib procps libxml2
+  ];
+  installPhase = ''
+    mkdir -p $out/bin
+    mv dbus-map $out/bin
+  '';
+  meta = with lib; {
+    description = "Simple utility for enumerating D-Bus endpoints, an nmap for D-Bus";
+    homepage = https://github.com/taviso/dbusmap;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ cstrahan ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ddate/default.nix b/nixpkgs/pkgs/tools/misc/ddate/default.nix
new file mode 100644
index 000000000000..c602a4c9235e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ddate/default.nix
@@ -0,0 +1,20 @@
+{stdenv, fetchgit, cmake} :
+
+stdenv.mkDerivation {
+  name = "ddate-0.2.2";
+  src = fetchgit {
+    url = "https://github.com/bo0ts/ddate";
+    rev = "refs/tags/v0.2.2";
+    sha256 = "1qchxnxvghbma6gp1g78wnjxsri0b72ha9axyk31cplssl7yn73f";
+  };
+
+  buildInputs = [ cmake ];
+
+  meta = {
+    homepage = https://github.com/bo0ts/ddate;
+    description = "Discordian version of the date program";
+    license = stdenv.lib.licenses.publicDomain;
+    maintainers = with stdenv.lib.maintainers; [kovirobi];
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ddccontrol/default.nix b/nixpkgs/pkgs/tools/misc/ddccontrol/default.nix
new file mode 100644
index 000000000000..0d5efb2ca22b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ddccontrol/default.nix
@@ -0,0 +1,65 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, intltool, libxml2
+, pciutils, pkgconfig, gtk2, ddccontrol-db
+, makeDesktopItem
+}:
+
+let version = "0.4.4"; in
+stdenv.mkDerivation rec {
+  pname = "ddccontrol";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "ddccontrol";
+    repo = "ddccontrol";
+    rev = "0.4.4";
+    sha256 = "09npy6z2j3jrvpvlr46vih31y2mbrh7wsqlbrjprxjv1j0kkz5q2";
+  };
+
+  nativeBuildInputs = [ autoreconfHook intltool pkgconfig ];
+
+  buildInputs = [
+    libxml2
+    pciutils
+    gtk2
+    ddccontrol-db
+  ];
+
+  hardeningDisable = [ "format" "bindnow" ];
+
+  prePatch = ''
+    oldPath="\$""{datadir}/ddccontrol-db"
+    newPath="${ddccontrol-db}/share/ddccontrol-db"
+    sed -i -e "s|$oldPath|$newPath|" configure.ac
+    sed -i -e "s/chmod 4711/chmod 0711/" src/ddcpci/Makefile*
+  '';
+
+  preConfigure = ''
+    intltoolize --force
+  '';
+
+  postInstall = ''
+    mkdir -p $out/share/applications/
+    cp $desktopItem/share/applications/* $out/share/applications/
+    for entry in $out/share/applications/*.desktop; do
+      substituteAllInPlace $entry
+    done
+  '';
+
+  desktopItem = makeDesktopItem {
+    name = "gddccontrol";
+    desktopName = "gddccontrol";
+    genericName = "DDC/CI control";
+    comment = meta.description;
+    exec = "@out@/bin/gddccontrol";
+    icon = "gddccontrol";
+    categories = "Settings;HardwareSettings;";
+  };
+
+  meta = with stdenv.lib; {
+    description = "A program used to control monitor parameters by software";
+    homepage = https://github.com/ddccontrol/ddccontrol;
+    license = licenses.gpl2;
+    platforms = [ "i686-linux" "x86_64-linux" ];
+    maintainers = [ stdenv.lib.maintainers.pakhfn ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ddcutil/default.nix b/nixpkgs/pkgs/tools/misc/ddcutil/default.nix
new file mode 100644
index 000000000000..e3ba0abb8bc3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ddcutil/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig
+, glib, i2c-tools, udev, libgudev, libusb, libdrm, xorg }:
+
+stdenv.mkDerivation rec {
+  pname = "ddcutil";
+  version = "0.9.8";
+
+  src = fetchFromGitHub {
+    owner  = "rockowitz";
+    repo   = "ddcutil";
+    rev    = "v${version}";
+    sha256 = "1r89cfw3ycqwvpfwwiqg8ykc1vyr1gf3ah30mvrmmalgmi6bnx5w";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  buildInputs = [
+    i2c-tools udev libgudev
+    glib libusb libdrm xorg.libXrandr
+  ];
+
+  meta = with stdenv.lib; {
+    homepage    = http://www.ddcutil.com/;
+    description = "Query and change Linux monitor settings using DDC/CI and USB";
+    license     = licenses.gpl2;
+    platforms   = platforms.linux;
+    maintainers = with maintainers; [ rnhmjoj ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/debian-devscripts/default.nix b/nixpkgs/pkgs/tools/misc/debian-devscripts/default.nix
new file mode 100644
index 000000000000..35db9ef7db36
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/debian-devscripts/default.nix
@@ -0,0 +1,66 @@
+{stdenv, fetchurl, unzip, xz, dpkg
+, libxslt, docbook_xsl, makeWrapper
+, python3Packages
+, perlPackages, curl, gnupg, diffutils
+, sendmailPath ? "/run/wrappers/bin/sendmail"
+}:
+
+let
+  inherit (python3Packages) python setuptools;
+in stdenv.mkDerivation rec {
+  version = "2.16.8";
+  pname = "debian-devscripts";
+
+  src = fetchurl {
+    url = "mirror://debian/pool/main/d/devscripts/devscripts_${version}.tar.xz";
+    sha256 = "0xy1nvqrnifx46g8ch69pk31by0va6hn10wpi1fkrsrgncanjjh1";
+  };
+
+  buildInputs = [ unzip xz dpkg libxslt python setuptools makeWrapper curl gnupg diffutils ] ++
+    (with perlPackages; [ perl CryptSSLeay LWP TimeDate DBFile FileDesktopEntry ParseDebControl LWPProtocolHttps ]);
+
+  preConfigure = ''
+    export PERL5LIB="$PERL5LIB''${PERL5LIB:+:}${dpkg}";
+    tgtpy="$out/lib/${python.libPrefix}/site-packages"
+    mkdir -p "$tgtpy"
+    export PYTHONPATH="$PYTHONPATH''${PYTHONPATH:+:}$tgtpy"
+    find po4a scripts -type f -exec sed -r \
+      -e "s@/usr/bin/gpg(2|)@${gnupg}/bin/gpg@g" \
+      -e "s@/usr/(s|)bin/sendmail@${sendmailPath}@g" \
+      -e "s@/usr/bin/diff@${diffutils}/bin/diff@g" \
+      -e "s@/usr/bin/gpgv(2|)@${gnupg}/bin/gpgv@g" \
+      -e "s@(command -v|/usr/bin/)curl@${curl.bin}/bin/curl@g" \
+      -i {} +
+    sed -e "s@/usr/share/sgml/[^ ]*/manpages/docbook.xsl@${docbook_xsl}/xml/xsl/docbook/manpages/docbook.xsl@" -i scripts/Makefile
+    sed -r \
+      -e "s@/usr( |$|/)@$out\\1@g" \
+      -e "s@/etc( |$|/)@$out/etc\\1@g" \
+      -e 's/ translated_manpages//; s/--install-layout=deb//; s@--root="[^ ]*"@--prefix="'"$out"'"@' \
+      -i Makefile* */Makefile*
+  '';
+
+  makeFlags = [
+    "DESTDIR=$(out)"
+    "PREFIX="
+    "COMPL_DIR=/share/bash-completion/completions"
+    "PERLMOD_DIR=/share/devscripts"
+  ];
+
+  postInstall = ''
+    sed -re 's@(^|[ !`"])/bin/bash@\1${stdenv.shell}@g' -i "$out/bin"/*
+    for i in "$out/bin"/*; do
+      wrapProgram "$i" \
+        --prefix PERL5LIB : "$PERL5LIB" \
+        --prefix PERL5LIB : "$out/share/devscripts" \
+        --prefix PYTHONPATH : "$out/lib/python3.4/site-packages" \
+        --prefix PATH : "${dpkg}/bin"
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    description = ''Debian package maintenance scripts'';
+    license = licenses.free; # Mix of public domain, Artistic+GPL, GPL1+, GPL2+, GPL3+, and GPL2-only... TODO
+    maintainers = with maintainers; [raskin];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/debianutils/default.nix b/nixpkgs/pkgs/tools/misc/debianutils/default.nix
new file mode 100644
index 000000000000..74aec9bae6a0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/debianutils/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "debianutils";
+  version = "4.9.1";
+
+  src = fetchurl {
+    url = "mirror://debian/pool/main/d/${pname}/${pname}_${version}.tar.xz";
+    sha256 = "14a0fqdpwdw72790jjm01g5n7lwwaf9d6k78fflbysn5v62nd0mg";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Miscellaneous utilities specific to Debian";
+    longDescription = ''
+       This package provides a number of small utilities which are used primarily by the installation scripts of Debian packages, although you may use them directly.
+
+       The specific utilities included are: add-shell installkernel ischroot remove-shell run-parts savelog tempfile which
+    '';
+    downloadPage = https://packages.debian.org/sid/debianutils;
+    license = with licenses; [ gpl2Plus publicDomain smail ];
+    maintainers = [];
+    platforms = platforms.all;
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/debootstrap/default.nix b/nixpkgs/pkgs/tools/misc/debootstrap/default.nix
new file mode 100644
index 000000000000..da810b3c9d87
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/debootstrap/default.nix
@@ -0,0 +1,67 @@
+{ stdenv, fetchurl, dpkg, gawk, perl, wget, coreutils, utillinux
+, gnugrep, gnutar, gnused, gzip, makeWrapper }:
+# USAGE like this: debootstrap sid /tmp/target-chroot-directory
+# There is also cdebootstrap now. Is that easier to maintain?
+let binPath = stdenv.lib.makeBinPath [
+    coreutils
+    dpkg
+    gawk
+    gnugrep
+    gnused
+    gnutar
+    gzip
+    perl
+    wget
+  ];
+in stdenv.mkDerivation rec {
+  pname = "debootstrap";
+  version = "1.0.116";
+
+  src = fetchurl {
+    # git clone git://git.debian.org/d-i/debootstrap.git
+    # I'd like to use the source. However it's lacking the lanny script ? (still true?)
+    url = "mirror://debian/pool/main/d/${pname}/${pname}_${version}.tar.gz";
+    sha256 = "06gh7hks8flpg327wnrwwmp7h9s6knz2kk794s5wpd91iwnjfcyb";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    substituteInPlace debootstrap \
+      --replace 'CHROOT_CMD="chroot '  'CHROOT_CMD="${coreutils}/bin/chroot ' \
+      --replace 'CHROOT_CMD="unshare ' 'CHROOT_CMD="${utillinux}/bin/unshare ' \
+      --replace /usr/bin/dpkg ${dpkg}/bin/dpkg \
+      --replace '#!/bin/sh' '#!/bin/bash' \
+      --subst-var-by VERSION ${version}
+
+    d=$out/share/debootstrap
+    mkdir -p $out/{share/debootstrap,bin}
+
+    mv debootstrap $out/bin
+
+    cp -r . $d
+
+    wrapProgram $out/bin/debootstrap \
+      --set PATH ${binPath} \
+      --set-default DEBOOTSTRAP_DIR $d
+
+    mkdir -p $out/man/man8
+    mv debootstrap.8 $out/man/man8
+
+    rm -rf $d/debian
+
+    runHook postInstall
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Tool to create a Debian system in a chroot";
+    homepage = https://wiki.debian.org/Debootstrap;
+    license = licenses.mit;
+    maintainers = with maintainers; [ marcweber ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/desktop-file-utils/default.nix b/nixpkgs/pkgs/tools/misc/desktop-file-utils/default.nix
new file mode 100644
index 000000000000..6b47027a5b9e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/desktop-file-utils/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl, pkgconfig, glib, libintl }:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  pname = "desktop-file-utils";
+  version = "0.24";
+
+  src = fetchurl {
+    url = "https://www.freedesktop.org/software/${pname}/releases/${pname}-${version}.tar.xz";
+    sha256 = "1nc3bwjdrpcrkbdmzvhckq0yngbcxspwj2n1r7jr3gmx1jk5vpm1";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ glib libintl ];
+
+  setupHook = ./setup-hook.sh;
+
+  meta = {
+    homepage = http://www.freedesktop.org/wiki/Software/desktop-file-utils;
+    description = "Command line utilities for working with .desktop files";
+    platforms = platforms.linux ++ platforms.darwin;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/desktop-file-utils/setup-hook.sh b/nixpkgs/pkgs/tools/misc/desktop-file-utils/setup-hook.sh
new file mode 100644
index 000000000000..728070e34581
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/desktop-file-utils/setup-hook.sh
@@ -0,0 +1,6 @@
+# Remove mimeinfo cache
+mimeinfoPreFixupPhase() {
+    rm -f $out/share/applications/mimeinfo.cache
+}
+
+preFixupPhases="${preFixupPhases-} mimeinfoPreFixupPhase"
diff --git a/nixpkgs/pkgs/tools/misc/detox/default.nix b/nixpkgs/pkgs/tools/misc/detox/default.nix
new file mode 100644
index 000000000000..9ad891fd9bd8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/detox/default.nix
@@ -0,0 +1,32 @@
+{stdenv, fetchurl, flex}:
+
+stdenv.mkDerivation {
+  name = "detox-1.2.0";
+
+  src = fetchurl {
+    url = mirror://sourceforge/detox/1.2.0/detox-1.2.0.tar.gz;
+    sha256 = "02cfkf3yhw64xg8mksln8w24gdwgm2x9g3vps7gn6jbjbfd8mh45";
+  };
+
+  buildInputs = [flex];
+
+  hardeningDisable = [ "format" ];
+
+  postInstall = ''
+    install -m644 safe.tbl $out/share/detox/
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://detox.sourceforge.net/;
+    description = "Utility designed to clean up filenames";
+    longDescription = ''
+      Detox is a utility designed to clean up filenames. It replaces
+      difficult to work with characters, such as spaces, with standard
+      equivalents. It will also clean up filenames with UTF-8 or Latin-1
+      (or CP-1252) characters in them.
+    '';
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/diffoscope/default.nix b/nixpkgs/pkgs/tools/misc/diffoscope/default.nix
new file mode 100644
index 000000000000..97b4aa1db281
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/diffoscope/default.nix
@@ -0,0 +1,77 @@
+{ lib, stdenv, fetchurl, python3Packages, docutils, help2man
+, acl, apktool, binutils-unwrapped, bzip2, cbfstool, cdrkit, colord, colordiff, coreutils, cpio, db, diffutils, dtc
+, e2fsprogs, file, findutils, fontforge-fonttools, fpc, gettext, ghc, ghostscriptX, giflib, gnumeric, gnupg, gnutar
+, gzip, imagemagick, jdk, libarchive, libcaca, llvm, lz4, mono, openssh, pdftk, pgpdump, poppler_utils, sng, sqlite
+, squashfsTools, tcpdump, unoconv, unzip, xxd, xz
+, enableBloat ? false
+}:
+
+# Note: when upgrading this package, please run the list-missing-tools.sh script as described below!
+python3Packages.buildPythonApplication rec {
+  pname = "diffoscope";
+  version = "135";
+
+  src = fetchurl {
+    url    = "https://diffoscope.org/archive/diffoscope-${version}.tar.bz2";
+    sha256 = "1grf28mb6lyxdqbmvws4h7inalda9z7qnjx7dc859mzkf54cn3yd";
+  };
+
+  patches = [
+    ./ignore_links.patch
+  ];
+
+  postPatch = ''
+    # Upstream doesn't provide a PKG-INFO file
+    sed -i setup.py -e "/'rpm-python',/d"
+
+    # When generating manpage, use the installed version
+    substituteInPlace doc/Makefile --replace "../bin" "$out/bin"
+  '';
+
+  nativeBuildInputs = [ docutils help2man ];
+
+  # Most of the non-Python dependencies here are optional command-line tools for various file-format parsers.
+  # To help figuring out what's missing from the list, run: ./pkgs/tools/misc/diffoscope/list-missing-tools.sh
+  #
+  # Still missing these tools: abootimg docx2txt dumpxsb enjarify js-beautify lipo oggDump otool procyon-decompiler Rscript wasm2wat zipnode
+  # Also these libraries: python3-guestfs
+  pythonPath = [
+      binutils-unwrapped bzip2 colordiff coreutils cpio db diffutils
+      dtc e2fsprogs file findutils fontforge-fonttools gettext gnutar gzip
+      libarchive libcaca lz4 pgpdump sng sqlite squashfsTools unzip xxd xz
+    ]
+    ++ (with python3Packages; [ debian libarchive-c python_magic tlsh rpm progressbar33 ])
+    ++ lib.optionals stdenv.isLinux [ python3Packages.pyxattr acl cdrkit ]
+    ++ lib.optionals enableBloat [
+      apktool cbfstool colord fpc ghc ghostscriptX giflib gnupg gnumeric imagemagick
+      llvm jdk mono openssh pdftk poppler_utils tcpdump unoconv
+      python3Packages.guestfs
+    ];
+
+  doCheck = false; # Calls 'mknod' in squashfs tests, which needs root
+  checkInputs = with python3Packages; [ pytest ];
+
+  postInstall = ''
+    make -C doc
+    mkdir -p $out/share/man/man1
+    cp doc/diffoscope.1 $out/share/man/man1/diffoscope.1
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Perform in-depth comparison of files, archives, and directories";
+    longDescription = ''
+      diffoscope will try to get to the bottom of what makes files or directories
+      different. It will recursively unpack archives of many kinds and transform
+      various binary formats into more human readable form to compare them. It can
+      compare two tarballs, ISO images, or PDF just as easily. The differences can
+      be shown in a text or HTML report.
+
+      diffoscope is developed as part of the "reproducible builds" Debian
+      project and was formerly known as "debbindiff".
+    '';
+    homepage    = https://wiki.debian.org/ReproducibleBuilds;
+    license     = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dezgeg ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/diffoscope/ignore_links.patch b/nixpkgs/pkgs/tools/misc/diffoscope/ignore_links.patch
new file mode 100644
index 000000000000..b0841ce0bb57
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/diffoscope/ignore_links.patch
@@ -0,0 +1,32 @@
+From a33e8018092e4a91dbc45e15bbeff760b3418512 Mon Sep 17 00:00:00 2001
+From: Tuomas Tynkkynen <tuomas.tynkkynen@iki.fi>
+Date: Wed, 13 Sep 2017 16:53:38 +0300
+Subject: [PATCH] Ignore hard link counts
+
+---
+ diffoscope/comparators/directory.py | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/diffoscope/comparators/directory.py b/diffoscope/comparators/directory.py
+index 3b195bc..9071bb3 100644
+--- a/diffoscope/comparators/directory.py
++++ b/diffoscope/comparators/directory.py
+@@ -66,6 +66,7 @@ else:
+         FILE_RE = re.compile(r'^\s*File:.*$')
+         DEVICE_RE = re.compile(r'Device: [0-9a-f]+h/[0-9]+d\s+')
+         INODE_RE = re.compile(r'Inode: [0-9]+\s+')
++        LINKS_RE = re.compile(r'Links: [0-9]+\s+')
+         ACCESS_TIME_RE = re.compile(r'^Access: [0-9]{4}-[0-9]{2}-[0-9]{2}.*$')
+         CHANGE_TIME_RE = re.compile(r'^Change: [0-9]{4}-[0-9]{2}-[0-9]{2}.*$')
+ 
+@@ -74,6 +75,7 @@ else:
+             line = Stat.FILE_RE.sub('', line)
+             line = Stat.DEVICE_RE.sub('', line)
+             line = Stat.INODE_RE.sub('', line)
++            line = Stat.LINKS_RE.sub('', line)
+             line = Stat.ACCESS_TIME_RE.sub('', line)
+             line = Stat.CHANGE_TIME_RE.sub('', line)
+             return line.encode('utf-8')
+-- 
+2.13.0
+
diff --git a/nixpkgs/pkgs/tools/misc/diffoscope/list-missing-tools.sh b/nixpkgs/pkgs/tools/misc/diffoscope/list-missing-tools.sh
new file mode 100755
index 000000000000..5f4d118cfed7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/diffoscope/list-missing-tools.sh
@@ -0,0 +1,23 @@
+#!/usr/bin/env bash
+
+# This script lists all the optional command-line tools that diffoscope can use
+# (i.e. `diffoscope --list-tools`) but are missing from the Nix expression.
+
+diffoscope=$(nix-build --no-out-link -E 'with import ./. {}; diffoscope.override { enableBloat = true; }')/bin/diffoscope
+
+required=$($diffoscope --list-tools | \
+    grep '^External-Tools-Required:' | \
+    cut -d ' ' -f2- | \
+    tr -d ,)
+
+# Uber-hacky!
+pathScript=$(cat $diffoscope | grep PATH)
+
+export PATH=$(nix-build --no-out-link -A which)/bin
+eval "$pathScript"
+
+for tool in $required; do
+    if ! which $tool >/dev/null 2>&1; then
+        echo $tool
+    fi
+done | sort
diff --git a/nixpkgs/pkgs/tools/misc/ding-libs/default.nix b/nixpkgs/pkgs/tools/misc/ding-libs/default.nix
new file mode 100644
index 000000000000..e99e9289b676
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ding-libs/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, check }:
+
+stdenv.mkDerivation rec {
+  pname = "ding-libs";
+  version = "0.6.1";
+
+  src = fetchurl {
+    url = "https://fedorahosted.org/released/ding-libs/ding-libs-${version}.tar.gz";
+    sha256 = "1h97mx2jdv4caiz4r7y8rxfsq78fx0k4jjnfp7x2s7xqvqks66d3";
+  };
+
+  enableParallelBuilding = true;
+  buildInputs = [ check ];
+
+  doCheck = true;
+
+  meta = {
+    description = "'D is not GLib' utility libraries";
+    homepage = https://fedorahosted.org/sssd/;
+    platforms = with stdenv.lib.platforms; linux;
+    maintainers = with stdenv.lib.maintainers; [ e-user ];
+    license = [ stdenv.lib.licenses.gpl3 stdenv.lib.licenses.lgpl3 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/direnv/default.nix b/nixpkgs/pkgs/tools/misc/direnv/default.nix
new file mode 100644
index 000000000000..22c0721d79d8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/direnv/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, fetchFromGitHub, buildGoPackage, bash }:
+
+buildGoPackage rec {
+  pname = "direnv";
+  version = "2.20.1";
+  goPackagePath = "github.com/direnv/direnv";
+
+  src = fetchFromGitHub {
+    owner = "direnv";
+    repo = "direnv";
+    rev = "v${version}";
+    sha256 = "0v8mqxb5g8z9kdnvbwfg39hlb9l3wpb8qwslwgln42k4bs8kg9hs";
+  };
+
+  postConfigure = ''
+    cd $NIX_BUILD_TOP/go/src/$goPackagePath
+  '';
+
+  # we have no bash at the moment for windows
+  makeFlags = stdenv.lib.optional (!stdenv.hostPlatform.isWindows) [
+    "BASH_PATH=${bash}/bin/bash"
+  ];
+
+  installPhase = ''
+    mkdir -p $out
+    make install DESTDIR=$bin
+    mkdir -p $bin/share/fish/vendor_conf.d
+    echo "eval ($bin/bin/direnv hook fish)" > $bin/share/fish/vendor_conf.d/direnv.fish
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A shell extension that manages your environment";
+    longDescription = ''
+      Once hooked into your shell direnv is looking for an .envrc file in your
+      current directory before every prompt.
+
+      If found it will load the exported environment variables from that bash
+      script into your current environment, and unload them if the .envrc is
+      not reachable from the current path anymore.
+
+      In short, this little tool allows you to have project-specific
+      environment variables.
+    '';
+    homepage = https://direnv.net;
+    license = licenses.mit;
+    maintainers = with maintainers; [ zimbatm ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/diskscan/default.nix b/nixpkgs/pkgs/tools/misc/diskscan/default.nix
new file mode 100644
index 000000000000..10406b8bf03b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/diskscan/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitHub, cmake, ncurses, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "diskscan";
+  version = "0.20";
+
+  src = fetchFromGitHub {
+    owner  = "baruch";
+    repo   = "diskscan";
+    rev    = version;
+    sha256 = "1s2df082yrnr3gqnapdsqz0yd0ld75bin37g0rms83ymzkh4ysgv";
+  };
+
+  buildInputs = [ ncurses zlib ];
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/baruch/diskscan;
+    description = "Scan HDD/SSD for failed and near failed sectors";
+    platforms = with platforms; linux;
+    maintainers = with maintainers; [ peterhoeg ];
+    inherit version;
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/diskus/default.nix b/nixpkgs/pkgs/tools/misc/diskus/default.nix
new file mode 100644
index 000000000000..7b1e5ed6c0af
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/diskus/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub, rustPlatform, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "diskus";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "sharkdp";
+    repo = "diskus";
+    rev = "v${version}";
+    sha256 = "087w58q5kd3r23a9qnhqgvq4vhv69b5a6a7n3kh09g5cjszy8s05";
+  };
+
+  buildInputs = stdenv.lib.optionals stdenv.isDarwin [ Security ];
+
+  cargoSha256 = "07wsl1vw2aimgmrlri03pfcxv13klqxyvmmsbzgnq9sc9qzzy8gp";
+
+  meta = with stdenv.lib; {
+    description = "A minimal, fast alternative to 'du -sh'";
+    homepage = https://github.com/sharkdp/diskus;
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = [ maintainers.fuerbringer ];
+    platforms = platforms.unix;
+    longDescription = ''
+      diskus is a very simple program that computes the total size of the
+      current directory. It is a parallelized version of du -sh.
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/disper/default.nix b/nixpkgs/pkgs/tools/misc/disper/default.nix
new file mode 100644
index 000000000000..167b4a547f82
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/disper/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchFromGitHub, python, xorg, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "disper";
+  version = "0.3.1.1";
+
+  src = fetchFromGitHub {
+    owner = "apeyser";
+    repo = pname;
+    rev = "${pname}-${version}";
+    sha256 = "1kl4py26n95q0690npy5mc95cv1cyfvh6kxn8rvk62gb8scwg9zn";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = [ python ];
+
+  preConfigure = ''
+    export makeFlags="PREFIX=$out"
+  '';
+
+  postInstall = ''
+      wrapProgram $out/bin/disper \
+        --prefix "LD_LIBRARY_PATH" : "${stdenv.lib.makeLibraryPath [ xorg.libXrandr xorg.libX11 ]}"
+  '';
+
+  meta = {
+    description = "On-the-fly display switch utility";
+    homepage = http://willem.engen.nl/projects/disper/;
+    platforms = stdenv.lib.platforms.unix;
+    license = stdenv.lib.licenses.gpl3;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/dmg2img/default.nix b/nixpkgs/pkgs/tools/misc/dmg2img/default.nix
new file mode 100644
index 000000000000..df084579b79a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dmg2img/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchurl, zlib, bzip2, openssl }:
+
+stdenv.mkDerivation rec {
+  name = "dmg2img-1.6.7";
+
+  src = fetchurl {
+    url = "http://vu1tur.eu.org/tools/${name}.tar.gz";
+    sha256 = "066hqhg7k90xcw5aq86pgr4l7apzvnb4559vj5s010avbk8adbh2";
+  };
+
+  buildInputs = [zlib bzip2 openssl];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp dmg2img $out/bin
+  '';
+
+  meta = {
+    platforms = stdenv.lib.platforms.unix;
+    description = "An Apple's compressed dmg to standard (hfsplus) image disk file convert tool.";
+    license = stdenv.lib.licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/docbook2mdoc/default.nix b/nixpkgs/pkgs/tools/misc/docbook2mdoc/default.nix
new file mode 100644
index 000000000000..efe65683e07b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/docbook2mdoc/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchurl, expat }:
+
+stdenv.mkDerivation rec {
+  pname = "docbook2mdoc";
+  version = "0.0.9";
+
+  src = fetchurl {
+    url = "http://mdocml.bsd.lv/docbook2mdoc/snapshots/${pname}-${version}.tgz";
+    sha256 = "07il80sg89xf6ym4bry6hxdacfzqgbwkxzyf7bjaihmw5jj0lclk";
+  };
+
+  buildInputs = [ expat.dev ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with stdenv.lib; {
+    homepage = http://mdocml.bsd.lv/;
+    description = "converter from DocBook V4.x and v5.x XML into mdoc";
+    license = licenses.isc;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ ramkromberg ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/docker-ls/default.nix b/nixpkgs/pkgs/tools/misc/docker-ls/default.nix
new file mode 100644
index 000000000000..c1baf8e82f5f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/docker-ls/default.nix
@@ -0,0 +1,29 @@
+{ buildGoPackage, fetchFromGitHub, stdenv, docker }:
+
+buildGoPackage rec {
+  pname = "docker-ls";
+  version = "0.3.2";
+
+  src = fetchFromGitHub {
+    owner = "mayflower";
+    repo = "docker-ls";
+    rev = "v${version}";
+    sha256 = "1hb9b0jhaf01zlmkm353mz608kwb79dzic3gvb2fhyrh8d17w2iv";
+  };
+
+  goPackagePath = "github.com/mayflower/docker-ls";
+
+  meta = with stdenv.lib; {
+    description = "Tools for browsing and manipulating docker registries";
+    longDescription = ''
+      Docker-ls is a set of CLI tools for browsing and manipulating docker registries.
+      In particular, docker-ls can handle authentication and display the sha256 content digests associated
+      with tags.
+    '';
+
+    homepage = https://github.com/mayflower/docker-ls;
+    maintainers = with maintainers; [ ma27 ];
+    platforms = docker.meta.platforms;
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/docker-sync/Gemfile b/nixpkgs/pkgs/tools/misc/docker-sync/Gemfile
new file mode 100644
index 000000000000..2c8125a46165
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/docker-sync/Gemfile
@@ -0,0 +1,3 @@
+source 'https://rubygems.org' do
+  gem 'docker-sync'
+end
diff --git a/nixpkgs/pkgs/tools/misc/docker-sync/Gemfile.lock b/nixpkgs/pkgs/tools/misc/docker-sync/Gemfile.lock
new file mode 100644
index 000000000000..ff7aa6b3f9fc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/docker-sync/Gemfile.lock
@@ -0,0 +1,29 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    backticks (1.0.2)
+    daemons (1.3.1)
+    docker-compose (1.1.10)
+      backticks (~> 1.0)
+    docker-sync (0.5.9)
+      daemons (~> 1.2, >= 1.2.3)
+      docker-compose (~> 1.1, >= 1.1.7)
+      dotenv (~> 2.1, >= 2.1.1)
+      gem_update_checker (~> 0.2.0, >= 0.2.0)
+      os
+      terminal-notifier (= 2.0.0)
+      thor (~> 0.20, >= 0.20.0)
+    dotenv (2.6.0)
+    gem_update_checker (0.2.0)
+    os (1.0.0)
+    terminal-notifier (2.0.0)
+    thor (0.20.3)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  docker-sync!
+
+BUNDLED WITH
+   1.16.2
diff --git a/nixpkgs/pkgs/tools/misc/docker-sync/default.nix b/nixpkgs/pkgs/tools/misc/docker-sync/default.nix
new file mode 100644
index 000000000000..e75b83475681
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/docker-sync/default.nix
@@ -0,0 +1,20 @@
+{ lib, ruby, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "docker-sync";
+  gemdir = ./.;
+
+  inherit ruby;
+
+  exes = ["docker-sync"];
+
+  passthru.updateScript = bundlerUpdateScript "docker-sync";
+
+  meta = with lib; {
+    description = "Run your application at full speed while syncing your code for development";
+    homepage = http://docker-sync.io;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ manveru nicknovitski ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/docker-sync/gemset.nix b/nixpkgs/pkgs/tools/misc/docker-sync/gemset.nix
new file mode 100644
index 000000000000..739d11c7b5ab
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/docker-sync/gemset.nix
@@ -0,0 +1,76 @@
+{
+  backticks = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vr28l9vckavnrb9pnqrhcmnk3wsvvpas8jjh165w2rzv3sdkws5";
+      type = "gem";
+    };
+    version = "1.0.2";
+  };
+  daemons = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0l5gai3vd4g7aqff0k1mp41j9zcsvm2rbwmqn115a325k9r7pf4w";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  docker-compose = {
+    dependencies = ["backticks"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00v3y182rmpq34dl91iprvhc50vw8hysy2h7iy3ihmmm9pgg71gc";
+      type = "gem";
+    };
+    version = "1.1.10";
+  };
+  docker-sync = {
+    dependencies = ["daemons" "docker-compose" "dotenv" "gem_update_checker" "os" "terminal-notifier" "thor"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vrlcggj7k8w30b76f23p64yx4wg7p7mq9lp6lsnh2ysq9n3cjqg";
+      type = "gem";
+    };
+    version = "0.5.9";
+  };
+  dotenv = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rgl2kqhnxqbjvi9brbvb52iaq1z8yi0pl0bawk4fm6kl9igxr8f";
+      type = "gem";
+    };
+    version = "2.6.0";
+  };
+  gem_update_checker = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ckbz4q3q59kkv138n0cmsyida0wg45pwscxzf5vshxcrxhmq3x7";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+  os = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1s401gvhqgs2r8hh43ia205mxsy1wc0ib4k76wzkdpspfcnfr1rk";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  terminal-notifier = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1slc0y8pjpw30hy21v8ypafi8r7z9jlj4bjbgz03b65b28i2n3bs";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  thor = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yhrnp9x8qcy5vc7g438amd5j9sw83ih7c30dr6g6slgw9zj3g29";
+      type = "gem";
+    };
+    version = "0.20.3";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/misc/docui/default.nix b/nixpkgs/pkgs/tools/misc/docui/default.nix
new file mode 100644
index 000000000000..66c0cfc82b1b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/docui/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "docui";
+  version = "2.0.0";
+
+  src = fetchFromGitHub {
+    owner = "skanehira";
+    repo = "docui";
+    rev = version;
+    sha256 = "0rizl4rxmb3brzvqxw5llbgvq3rncix3h60pgq50djdf0jjnn5hs";
+  };
+
+  modSha256 = "0asqz9nnx80g2wi7dzxrfmppcraywrwdqi9vzr66vaihwpfpfnwz";
+
+  meta = with stdenv.lib; {
+    description = "TUI Client for Docker";
+    homepage = https://github.com/skanehira/docui;
+    license = licenses.mit;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ aethelz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/doitlive/default.nix b/nixpkgs/pkgs/tools/misc/doitlive/default.nix
new file mode 100644
index 000000000000..6edcefb11d5e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/doitlive/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "doitlive";
+  version = "4.3.0";
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "03qrs032x206xrl0x3z0fpvxgjivzz9rkmb11bqlk1id10707cac";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ click click-completion click-didyoumean ];
+
+  # disable tests (too many failures)
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "Tool for live presentations in the terminal";
+    homepage = https://pypi.python.org/pypi/doitlive;
+    license = licenses.mit;
+    maintainers = with maintainers; [ mbode ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dpt-rp1-py/default.nix b/nixpkgs/pkgs/tools/misc/dpt-rp1-py/default.nix
new file mode 100644
index 000000000000..88359adc3185
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dpt-rp1-py/default.nix
@@ -0,0 +1,28 @@
+{ lib, python3Packages, fetchFromGitHub }:
+python3Packages.buildPythonApplication rec {
+  pname = "dpt-rp1-py";
+  version = "unstable-2018-10-16";
+
+  src = fetchFromGitHub {
+    owner = "janten";
+    repo = pname;
+    rev = "4551b4432f8470de5f2ad9171105f731a6259395";
+    sha256 = "176y5j31aci1vpi8v6r5ki55432fbdsazh9bsyzr90im9zimkffl";
+  };
+
+  doCheck = false;
+
+  propagatedBuildInputs = with python3Packages; [
+    httpsig
+    requests
+    pbkdf2
+    urllib3
+  ];
+
+  meta = with lib; {
+    homepage = https://github.com/janten/dpt-rp1-py;
+    description = "Python script to manage Sony DPT-RP1 without Digital Paper App";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mt-caret ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dtach/default.nix b/nixpkgs/pkgs/tools/misc/dtach/default.nix
new file mode 100644
index 000000000000..7d85decbb84b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dtach/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "dtach";
+  version = "0.9";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/dtach/dtach/${version}/${pname}-${version}.tar.gz";
+    sha256 = "1wwj2hlngi8qn2pisvhyfxxs8gyqjlgrrv5lz91w8ly54dlzvs9j";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp dtach $out/bin/dtach
+  '';
+
+  meta = {
+    homepage = http://dtach.sourceforge.net/;
+    description = "A program that emulates the detach feature of screen";
+
+    longDescription = ''
+      dtach is a tiny program that emulates the detach feature of
+      screen, allowing you to run a program in an environment that is
+      protected from the controlling terminal and attach to it later.
+      dtach does not keep track of the contents of the screen, and
+      thus works best with programs that know how to redraw
+      themselves.
+    '';
+
+    license = stdenv.lib.licenses.gpl2Plus;
+
+    platforms = stdenv.lib.platforms.unix;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dua/default.nix b/nixpkgs/pkgs/tools/misc/dua/default.nix
new file mode 100644
index 000000000000..5ac8a661c9ac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dua/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "dua";
+  version = "2.1.11";
+
+  src = fetchFromGitHub {
+    owner = "Byron";
+    repo = "dua-cli";
+    rev = "v${version}";
+    sha256 = "08zgi2yiynb20l1f9rhly4a7zgqnr7lq3cr5vkmh1jnfs6z27dv6";
+  };
+
+  cargoSha256 = "0hd46h4wwh81hnida0in3142884y8n6ygk7qm09i5wj52g73bivv";
+
+  meta = with lib; {
+    description = "A tool to conveniently learn about the disk usage of directories, fast!";
+    homepage = "https://github.com/Byron/dua-cli";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ killercup ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/duc/default.nix b/nixpkgs/pkgs/tools/misc/duc/default.nix
new file mode 100644
index 000000000000..c5ea2cd46a16
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/duc/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig
+, tokyocabinet, ncurses
+, cairo ? null, pango ? null
+, enableCairo ? stdenv.isLinux
+}:
+
+assert enableCairo -> cairo != null && pango != null;
+
+stdenv.mkDerivation rec {
+  pname = "duc";
+  version = "1.4.4";
+
+  src = fetchFromGitHub {
+    owner = "zevv";
+    repo = "duc";
+    rev = version;
+    sha256 = "1i7ry25xzy027g6ysv6qlf09ax04q4vy0kikl8h0aq5jbxsl9q52";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  buildInputs = [ tokyocabinet ncurses ] ++
+    stdenv.lib.optionals enableCairo [ cairo pango ];
+
+  configureFlags =
+    stdenv.lib.optionals (!enableCairo) [ "--disable-x11" "--disable-cairo" ];
+
+  meta = with stdenv.lib; {
+    homepage = http://duc.zevv.nl/;
+    description = "Collection of tools for inspecting and visualizing disk usage";
+    license = licenses.gpl2;
+
+    platforms = platforms.all;
+    maintainers = [ maintainers.lethalman ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dumptorrent/default.nix b/nixpkgs/pkgs/tools/misc/dumptorrent/default.nix
new file mode 100644
index 000000000000..1b9a6c9bbea2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dumptorrent/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+    pname = "dumptorrent";
+    version = "1.2";
+    
+    src = fetchurl {
+      url = "mirror://sourceforge/dumptorrent/dumptorrent-${version}.tar.gz";
+      sha256 = "073h03bmpfdy15qh37lvppayld2747i4acpyk0pm5nf2raiak0zm";
+    };
+
+    patchPhase = ''
+      substituteInPlace Makefile \
+        --replace "gcc" "cc"
+    '';
+
+    installPhase = ''
+      mkdir -p $out/bin
+      cp ./dumptorrent $out/bin
+    '';
+
+    meta = with stdenv.lib; {
+      description = "Dump .torrent file information";
+      homepage = https://sourceforge.net/projects/dumptorrent/;
+      license = licenses.gpl2;
+      maintainers = [ maintainers.zohl ];
+      platforms = platforms.all;
+    };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dupd/default.nix b/nixpkgs/pkgs/tools/misc/dupd/default.nix
new file mode 100644
index 000000000000..06b9f3adac92
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dupd/default.nix
@@ -0,0 +1,49 @@
+{ stdenv, fetchFromGitHub, perl, which
+, openssl, sqlite }:
+
+# Instead of writing directly into $HOME, we change the default db location
+# from $HOME/.dupd_sqlite to $HOME/.cache/dupd.sqlite3
+
+stdenv.mkDerivation rec {
+  pname = "dupd";
+  version = "1.7";
+
+  src = fetchFromGitHub {
+    owner = "jvirkki";
+    repo  = "dupd";
+    rev   = version;
+    sha256 = "0vg4vbiwjc5p22cisj8970mym4y2r29fcm08ibik92786vsbxcqk";
+  };
+
+  postPatch = ''
+    patchShebangs tests
+
+    # tests need HOME to write the database
+    export HOME=$TMPDIR
+
+    mkdir -p $HOME/.cache
+
+    for f in man/dupd man/dupd.1 src/main.c tests/test.56 tests/test.57 ; do
+      substituteInPlace $f --replace .dupd_sqlite .cache/dupd.sqlite3
+    done
+  '';
+
+  buildInputs = [ openssl sqlite ];
+
+  nativeBuildInputs = [ perl which ];
+
+  makeFlags = [
+    "INSTALL_PREFIX=$(out)"
+  ];
+
+  enableParallelBuilding = true;
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    description = "CLI utility to find duplicate files";
+    homepage = http://www.virkki.com/dupd;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ peterhoeg ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dust/default.nix b/nixpkgs/pkgs/tools/misc/dust/default.nix
new file mode 100644
index 000000000000..caa8451585e7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dust/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "dust";
+  version = "0.4.4";
+
+  src = fetchFromGitHub {
+    owner = "bootandy";
+    repo = "dust";
+    rev = "v${version}";
+    sha256 = "1qbh9vgdh0xmh4c78fm0rd1sgb01n656p3cr4my7ymsy81ypx9y7";
+  };
+
+  cargoSha256 = "07ynz6y1z3rz84662d4rfl2sw1sx46a3k48z8dckr0b3fqs2zj6a";
+
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "du + rust = dust. Like du but more intuitive";
+    homepage = https://github.com/bootandy/dust;
+    license = licenses.asl20;
+    maintainers = [ maintainers.infinisil ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dvtm/default.nix b/nixpkgs/pkgs/tools/misc/dvtm/default.nix
new file mode 100644
index 000000000000..bedfebd96812
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dvtm/default.nix
@@ -0,0 +1,19 @@
+{callPackage, fetchurl}:
+callPackage ./dvtm.nix rec {
+  name = "dvtm-0.15";
+
+  src = fetchurl {
+    url = "http://www.brain-dump.org/projects/dvtm/${name}.tar.gz";
+    sha256 = "0475w514b7i3gxk6khy8pfj2gx9l7lv2pwacmq92zn1abv01a84g";
+  };
+
+  patches = [
+    # https://github.com/martanne/dvtm/pull/69
+    # Use self-pipe instead of signal blocking fixes issues on darwin.
+    (fetchurl {
+      url = "https://github.com/martanne/dvtm/commit/1f1ed664d64603f3f1ce1388571227dc723901b2.patch";
+      sha256 = "1cby8x3ckvhzqa8yxlfrwzgm8wk7yz84kr9psdjr7xwpnca1cqrd";
+    })
+  ];
+}
+    
diff --git a/nixpkgs/pkgs/tools/misc/dvtm/dvtm.nix b/nixpkgs/pkgs/tools/misc/dvtm/dvtm.nix
new file mode 100644
index 000000000000..df2e25c7ea33
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dvtm/dvtm.nix
@@ -0,0 +1,30 @@
+{ stdenv, ncurses, customConfig ? null, name, src, patches ? [] }:
+stdenv.mkDerivation {
+
+  inherit name src patches;
+
+  CFLAGS = stdenv.lib.optionalString stdenv.isDarwin "-D_DARWIN_C_SOURCE";
+
+  postPatch = stdenv.lib.optionalString (customConfig != null) ''
+    cp ${builtins.toFile "config.h" customConfig} ./config.h
+  '';
+
+  buildInputs = [ ncurses ];
+
+  prePatch = ''
+    substituteInPlace Makefile \
+      --replace /usr/share/terminfo $out/share/terminfo
+  '';
+
+  installPhase = ''
+    make PREFIX=$out install
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Dynamic virtual terminal manager";
+    homepage = http://www.brain-dump.org/projects/dvtm;
+    license = licenses.mit;
+    maintainers = [ maintainers.vrthra ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dvtm/unstable.nix b/nixpkgs/pkgs/tools/misc/dvtm/unstable.nix
new file mode 100644
index 000000000000..6ee2a465c69a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dvtm/unstable.nix
@@ -0,0 +1,29 @@
+{callPackage, fetchFromGitHub, fetchpatch}:
+callPackage ./dvtm.nix {
+  name = "dvtm-unstable-2018-03-31";
+
+  src = fetchFromGitHub {
+    owner = "martanne";
+    repo = "dvtm";
+    rev = "311a8c0c28296f8f87fb63349e0f3254c7481e14";
+    sha256 = "0pyxjkaxh8n97kccnmd3p98vi9h8mcfy5lswzqiplsxmxxmlbpx2";
+  };
+
+  patches = [
+    # https://github.com/martanne/dvtm/pull/69
+    # Use self-pipe instead of signal blocking fixes issues on darwin.
+    (fetchpatch {
+      name = "use-self-pipe-fix-darwin";
+      url = "https://github.com/martanne/dvtm/commit/1f1ed664d64603f3f1ce1388571227dc723901b2.patch";
+      sha256 = "14j3kks7b1v6qq12442v1da3h7khp02rp0vi0qrz0rfgkg1zilpb";
+    })
+
+    # https://github.com/martanne/dvtm/pull/86
+    # Fix buffer corruption when title is updated
+    (fetchpatch {
+      name = "fix-buffer-corruption-on-title-update";
+      url = "https://github.com/martanne/dvtm/commit/be6c3f8f615daeab214d484e6fff22e19631a0d1.patch";
+      sha256 = "1wdrl3sg815lhs22fwbc4w5dn4ifpdgl7v1kqfnhg752av4im7h7";
+    })
+  ];
+}
diff --git a/nixpkgs/pkgs/tools/misc/dylibbundler/default.nix b/nixpkgs/pkgs/tools/misc/dylibbundler/default.nix
new file mode 100644
index 000000000000..c4209442de8d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dylibbundler/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+  name = "dylibbundler";
+
+  src  = fetchFromGitHub {
+    owner  = "auriamg";
+    repo   = "/macdylibbundler";
+    rev    = "27923fbf6d1bc4d18c18e118280c4fe51fc41a80";
+    sha256 = "1mpd43hvpfp7pskfrjnd6vcmfii9v3p97q0ws50krkdvshp0bv2h";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with stdenv.lib; {
+    description = "Small command-line program that aims to make bundling .dylibs as easy as possible";
+    homepage    = "https://github.com/auriamg/macdylibbundler";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ alexfmpe ];
+    platforms   = with platforms; darwin ++ linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dynamic-colors/default.nix b/nixpkgs/pkgs/tools/misc/dynamic-colors/default.nix
new file mode 100644
index 000000000000..6cb01f14a2c0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dynamic-colors/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "dynamic-colors";
+  version = "0.2.2.2";
+
+  src = fetchFromGitHub {
+    owner  = "peterhoeg";
+    repo   = "dynamic-colors";
+    rev    = "v${version}";
+    sha256 = "0i63570z9aqbxa8ixh4ayb3akgjdnlqyl2sbf9d7x8f1pxhk5kd5";
+  };
+
+  PREFIX = placeholder "out";
+
+  postPatch = ''
+    substituteInPlace bin/dynamic-colors \
+      --replace /usr/share/dynamic-colors $out/share/dynamic-colors
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Change terminal colors on the fly";
+    homepage    = "https://github.com/peterhoeg/dynamic-colors";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/edid-decode/default.nix b/nixpkgs/pkgs/tools/misc/edid-decode/default.nix
new file mode 100644
index 000000000000..11a46f620c0a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/edid-decode/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchgit }:
+let
+  version = "2018-12-06";
+in stdenv.mkDerivation {
+  pname = "edid-decode-unstable";
+  inherit version;
+
+  src = fetchgit {
+    url = "git://linuxtv.org/edid-decode.git";
+    rev = "6def7bc83dfb0338632e06a8b14c93faa6af8879";
+    sha256 = "0v6d6jy309pb02l377l0fpmgfsvcpiqc5bvyrli34v413mhq6p15";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp edid-decode $out/bin
+  '';
+
+  meta = {
+    description = "EDID decoder and conformance tester";
+    homepage = https://cgit.freedesktop.org/xorg/app/edid-decode/;
+    license = stdenv.lib.licenses.mit;
+    maintainers = [ stdenv.lib.maintainers.chiiruno ];
+    platforms = stdenv.lib.platforms.all;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/emv/default.nix b/nixpkgs/pkgs/tools/misc/emv/default.nix
new file mode 100644
index 000000000000..6a5fcfb12174
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/emv/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation {
+  pname = "emv";
+  version = "1.95";
+
+  src = fetchurl {
+    url = "http://www.i0i0.de/toolchest/emv";
+    sha256 = "7e0e12afa45ef5ed8025e5f2c6deea0ff5f512644a721f7b1b95b63406a8f7ce";
+  };
+
+  phases = [ "installPhase" ];
+
+  installPhase = ''
+    mkdir -pv $out/bin
+    cp $src $out/bin/emv
+    chmod +x $out/bin/emv
+  '';
+
+  meta = {
+    homepage = http://www.i0i0.de/toolchest/emv;
+    description = "Editor Move: Rename files with your favourite text editor";
+    license = stdenv.lib.licenses.publicDomain;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ent/default.nix b/nixpkgs/pkgs/tools/misc/ent/default.nix
new file mode 100644
index 000000000000..7e8d04b42092
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ent/default.nix
@@ -0,0 +1,30 @@
+{stdenv, fetchurl, unzip}:
+
+stdenv.mkDerivation {
+  name = "ent-1.1";
+
+  src = fetchurl {
+    url = "https://www.fourmilab.ch/random/random.zip";
+    sha256 = "1v39jlj3lzr5f99avzs2j2z6anqqd64bzm1pdf6q84a5n8nxckn1";
+  };
+
+  # Work around the "unpacker appears to have produced no directories"
+  # case that happens when the archive doesn't have a subdirectory.
+  setSourceRoot = "sourceRoot=`pwd`";
+
+  buildInputs = [ unzip ];
+
+  buildFlags = stdenv.lib.optional stdenv.cc.isClang "CC=clang";
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ent $out/bin/
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Pseudorandom Number Sequence Test Program";
+    homepage = http://www.fourmilab.ch/random/;
+    platforms = platforms.all;
+    license = licenses.publicDomain;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/entr/default.nix b/nixpkgs/pkgs/tools/misc/entr/default.nix
new file mode 100644
index 000000000000..247572a379f7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/entr/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl, coreutils, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "entr";
+  version = "4.4";
+
+  src = fetchurl {
+    url = "http://entrproject.org/code/${pname}-${version}.tar.gz";
+    sha256 = "1x2hyc8vc5dz6k7b3291vxz36wllhinvqrb0d8zx9bv0ydj6qmjl";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile.bsd --replace /bin/echo echo
+    substituteInPlace entr.c --replace /bin/cat ${coreutils}/bin/cat
+    substituteInPlace entr.c --replace /usr/bin/clear ${ncurses.out}/bin/clear
+    substituteInPlace entr.1 --replace /bin/cat cat
+    substituteInPlace entr.1 --replace /usr/bin/clear clear
+  '';
+  dontAddPrefix = true;
+  doCheck = true;
+  checkTarget = "test";
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with stdenv.lib; {
+    homepage = http://entrproject.org/;
+    description = "Run arbitrary commands when files change";
+    license = licenses.isc;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ pSub synthetica ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/envdir-go/default.nix b/nixpkgs/pkgs/tools/misc/envdir-go/default.nix
new file mode 100644
index 000000000000..db31df982cf8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/envdir-go/default.nix
@@ -0,0 +1,27 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  version = "1.0.0";
+  pname = "envdir";
+
+  goPackagePath = "github.com/d10n/envdir";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "d10n";
+    repo = "envdir";
+    sha256 = "1wdlblj127skgynf9amk7waabc3abbyxys9dvyc6c72zpcpdy5nc";
+  };
+
+  preBuild = ''
+   # TODO: is there a way to get the commit ref so we can set main.buildCommit?
+		buildFlagsArray+=("-ldflags" "-X main.buildDate=1970-01-01T00:00:00+0000 -X main.buildVersion=${version}")
+'';
+
+  meta = {
+    description = "A go rewrite of envdir";
+    homepage = https://github.com/d10n/envdir;
+    maintainers = with stdenv.lib.maintainers; [ edude03 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/envsubst/default.nix b/nixpkgs/pkgs/tools/misc/envsubst/default.nix
new file mode 100644
index 000000000000..9b2153d17cb1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/envsubst/default.nix
@@ -0,0 +1,22 @@
+{ lib, fetchFromGitHub, buildGoPackage }:
+
+buildGoPackage rec {
+  pname = "envsubst";
+  version = "1.1.0";
+
+  goPackagePath = "github.com/a8m/envsubst";
+  src = fetchFromGitHub {
+    owner = "a8m";
+    repo = "envsubst";
+    rev = "v${version}";
+    sha256 = "1d6nipagjn40n6iw1p3r489l2km5xjd5db9gbh1vc5sxc617l7yk";
+  };
+
+  meta = with lib; {
+    description = "Environment variables substitution for Go";
+    homepage = https://github.com/a8m/envsubst;
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ nicknovitski ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/eot-utilities/default.nix b/nixpkgs/pkgs/tools/misc/eot-utilities/default.nix
new file mode 100644
index 000000000000..8d65aee9e7a8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/eot-utilities/default.nix
@@ -0,0 +1,21 @@
+{stdenv, fetchurl, pkgconfig }:
+
+stdenv.mkDerivation rec {
+  pname = "eot_utilities";
+  version = "1.1";
+
+  src = fetchurl {
+    url = "https://www.w3.org/Tools/eot-utils/eot-utilities-${version}.tar.gz";
+    sha256 = "0cb41riabss23hgfg7vxhky09d6zqwjy1nxdvr3l2bh5qzd4kvaf";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+
+  meta = {
+    homepage = http://www.w3.org/Tools/eot-utils/;
+    description = "Create Embedded Open Type from OpenType or TrueType font";
+    license = stdenv.lib.licenses.w3c;
+    maintainers = with stdenv.lib.maintainers; [ leenaars ];
+    platforms = with stdenv.lib.platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/esptool-ck/default.nix b/nixpkgs/pkgs/tools/misc/esptool-ck/default.nix
new file mode 100644
index 000000000000..52b56f10ea97
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/esptool-ck/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "esptool-ck";
+  version = "0.4.13";
+
+  src = fetchFromGitHub {
+    owner = "igrr";
+    repo = "esptool-ck";
+    rev = "0.4.13";
+    sha256 = "1cb81b30a71r7i0gmkh2qagfx9lhq0myq5i37fk881bq6g7i5n2k";
+  };
+
+  makeFlags = [ "VERSION=${version}" ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp esptool $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "ESP8266/ESP32 build helper tool";
+    homepage = https://github.com/igrr/esptool-ck;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.dezgeg ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/esptool/default.nix b/nixpkgs/pkgs/tools/misc/esptool/default.nix
new file mode 100644
index 000000000000..8793685069a0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/esptool/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchFromGitHub, python3, openssl }:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "esptool";
+  version = "2.7";
+
+  src = fetchFromGitHub {
+    owner = "espressif";
+    repo = "esptool";
+    rev = "v${version}";
+    sha256 = "1p5hx0rhs986ffqz78rdxg7jayndsq632399xby39k17kvd3mb31";
+  };
+
+  checkInputs = with python3.pkgs; [ flake8 flake8-future-import flake8-import-order openssl ];
+  propagatedBuildInputs = with python3.pkgs; [ pyserial pyaes ecdsa ];
+
+  meta = with stdenv.lib; {
+    description = "ESP8266 and ESP32 serial bootloader utility";
+    homepage = https://github.com/espressif/esptool;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ dezgeg dotlambda ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/etcher/default.nix b/nixpkgs/pkgs/tools/misc/etcher/default.nix
new file mode 100644
index 000000000000..4944600108ae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/etcher/default.nix
@@ -0,0 +1,94 @@
+{ lib
+, stdenv
+, fetchurl
+, gcc-unwrapped
+, dpkg
+, polkit
+, bash
+, nodePackages
+, electron_3
+, gtk3
+, wrapGAppsHook
+}:
+
+let
+  libPath = lib.makeLibraryPath [
+    # for libstdc++.so.6
+    gcc-unwrapped.lib
+  ];
+
+  sha256 = {
+    "x86_64-linux" = "0zb9j34dz7ybjix018bm8g0b6kilw9300q4ahcm22p0ggg528dh7";
+    "i686-linux" = "0wsv4mvwrvsaz1pwiqs94b3854h5l8ff2dbb1ybxmvwjbfrkdcqc";
+  }."${stdenv.system}";
+
+  arch = {
+    "x86_64-linux" = "amd64";
+    "i686-linux" = "i386";
+  }."${stdenv.system}";
+
+in stdenv.mkDerivation rec {
+  pname = "etcher";
+  version = "1.5.60";
+
+  src = fetchurl {
+    url = "https://github.com/balena-io/etcher/releases/download/v${version}/balena-etcher-electron_${version}_${arch}.deb";
+    inherit sha256;
+  };
+
+  buildInputs = [
+    gtk3
+  ];
+
+  nativeBuildInputs = [
+    wrapGAppsHook
+  ];
+
+  dontBuild = true;
+  dontConfigure = true;
+
+  unpackPhase = ''
+    ${dpkg}/bin/dpkg-deb -x $src .
+  '';
+
+  # sudo-prompt has hardcoded binary paths on Linux and we patch them here
+  # along with some other paths
+  patchPhase = ''
+    ${nodePackages.asar}/bin/asar extract opt/balenaEtcher/resources/app.asar tmp
+    # Use Nix(OS) paths
+    sed -i "s|/usr/bin/pkexec|/usr/bin/pkexec', '/run/wrappers/bin/pkexec|" tmp/node_modules/sudo-prompt/index.js
+    sed -i 's|/bin/bash|${bash}/bin/bash|' tmp/node_modules/sudo-prompt/index.js
+    sed -i "s|process.resourcesPath|'$out/opt/balenaEtcher/resources/'|" tmp/generated/gui.js
+    ${nodePackages.asar}/bin/asar pack tmp opt/balenaEtcher/resources/app.asar
+    rm -rf tmp
+    # Fix up .desktop file
+    substituteInPlace usr/share/applications/balena-etcher-electron.desktop \
+      --replace "/opt/balenaEtcher/balena-etcher-electron" "$out/bin/balena-etcher-electron"
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -r opt $out/
+    cp -r usr/share $out/
+
+    # We'll use our Nixpkgs electron_3 instead
+    rm $out/opt/balenaEtcher/balena-etcher-electron
+
+    ln -s ${electron_3}/bin/electron $out/bin/balena-etcher-electron
+  '';
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      --add-flags $out/opt/balenaEtcher/resources/app.asar
+      --prefix LD_LIBRARY_PATH : ${libPath}
+    )
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Flash OS images to SD cards and USB drives, safely and easily";
+    homepage = "https://etcher.io/";
+    license = licenses.asl20;
+    maintainers = [ maintainers.shou ];
+    platforms = [ "i686-linux" "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ethminer/default.nix b/nixpkgs/pkgs/tools/misc/ethminer/default.nix
new file mode 100644
index 000000000000..1ec99f12d821
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ethminer/default.nix
@@ -0,0 +1,76 @@
+{
+  stdenv,
+  fetchFromGitHub,
+  opencl-headers,
+  cmake,
+  jsoncpp,
+  boost,
+  makeWrapper,
+  cudatoolkit,
+  mesa,
+  ethash,
+  opencl-info,
+  ocl-icd,
+  openssl,
+  pkg-config,
+  cli11
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ethminer";
+  version = "0.18.0";
+
+  src =
+    fetchFromGitHub {
+      owner = "ethereum-mining";
+      repo = "ethminer";
+      rev = "v${version}";
+      sha256 = "10b6s35axmx8kyzn2vid6l5nnzcaf4nkk7f5f7lg3cizv6lsj707";
+      fetchSubmodules = true;
+    };
+
+  # NOTE: dbus is broken
+  cmakeFlags = [
+    "-DHUNTER_ENABLED=OFF"
+    "-DETHASHCUDA=ON"
+    "-DAPICORE=ON"
+    "-DETHDBUS=OFF"
+    "-DCMAKE_BUILD_TYPE=Release"
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    makeWrapper
+  ];
+
+  buildInputs = [
+    cli11
+    boost
+    opencl-headers
+    mesa
+    cudatoolkit
+    ethash
+    opencl-info
+    ocl-icd
+    openssl
+    jsoncpp
+  ];
+
+  preConfigure = ''
+    sed -i 's/_lib_static//' libpoolprotocols/CMakeLists.txt
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/ethminer --prefix LD_LIBRARY_PATH : /run/opengl-driver/lib
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Ethereum miner with OpenCL, CUDA and stratum support";
+    homepage = https://github.com/ethereum-mining/ethminer;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ nand0p ];
+    license = licenses.gpl2;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/ethtool/default.nix b/nixpkgs/pkgs/tools/misc/ethtool/default.nix
new file mode 100644
index 000000000000..bffc8a01f920
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ethtool/default.nix
@@ -0,0 +1,19 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "ethtool";
+  version = "5.3";
+
+  src = fetchurl {
+    url = "mirror://kernel/software/network/ethtool/${pname}-${version}.tar.xz";
+    sha256 = "1i14zrg4a84zjpwvqi8an0zx0hm06g614a79zc2syrkhrvdw1npk";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Utility for controlling network drivers and hardware";
+    homepage = https://www.kernel.org/pub/software/network/ethtool/;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/eva/Cargo.lock.patch b/nixpkgs/pkgs/tools/misc/eva/Cargo.lock.patch
new file mode 100644
index 000000000000..67553f0d6d83
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/eva/Cargo.lock.patch
@@ -0,0 +1,589 @@
+diff --git a/Cargo.lock b/Cargo.lock
+new file mode 100644
+index 0000000..ac198e7
+--- /dev/null
++++ b/Cargo.lock
+@@ -0,0 +1,583 @@
++# This file is automatically @generated by Cargo.
++# It is not intended for manual editing.
++[[package]]
++name = "aho-corasick"
++version = "0.7.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "ansi_term"
++version = "0.11.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "arrayref"
++version = "0.3.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "arrayvec"
++version = "0.5.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "atty"
++version = "0.2.13"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "autocfg"
++version = "0.1.7"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "backtrace"
++version = "0.3.40"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "backtrace-sys 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "backtrace-sys"
++version = "0.1.32"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "cc 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "base64"
++version = "0.10.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "bitflags"
++version = "1.2.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "blake2b_simd"
++version = "0.5.9"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "arrayref 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
++ "arrayvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "constant_time_eq 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "byteorder"
++version = "1.3.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "cc"
++version = "1.0.48"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "cfg-if"
++version = "0.1.10"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "clap"
++version = "2.33.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
++ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "cloudabi"
++version = "0.0.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "constant_time_eq"
++version = "0.1.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "crossbeam-utils"
++version = "0.6.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
++ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "directories"
++version = "2.0.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
++ "dirs-sys 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "dirs"
++version = "1.0.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
++ "redox_users 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "dirs-sys"
++version = "0.3.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
++ "redox_users 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "eva"
++version = "0.2.7"
++dependencies = [
++ "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "directories 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "num 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "radix_fmt 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rustyline 4.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "failure"
++version = "0.1.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "backtrace 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)",
++ "failure_derive 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "failure_derive"
++version = "0.1.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)",
++ "synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "fuchsia-cprng"
++version = "0.1.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "lazy_static"
++version = "1.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "libc"
++version = "0.2.66"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "log"
++version = "0.4.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "memchr"
++version = "2.2.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "nix"
++version = "0.13.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cc 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
++ "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "num"
++version = "0.2.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "num-bigint 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "num-complex 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
++ "num-iter 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
++ "num-rational 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "num-bigint"
++version = "0.2.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
++ "num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
++ "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "num-complex"
++version = "0.2.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
++ "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "num-integer"
++version = "0.1.41"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
++ "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "num-iter"
++version = "0.1.39"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
++ "num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
++ "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "num-rational"
++version = "0.2.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
++ "num-bigint 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
++ "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "num-traits"
++version = "0.2.10"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "proc-macro2"
++version = "1.0.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "quote"
++version = "1.0.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "radix_fmt"
++version = "1.0.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "rand_core"
++version = "0.3.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "rand_core"
++version = "0.4.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "rand_os"
++version = "0.1.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "rdrand"
++version = "0.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "redox_syscall"
++version = "0.1.56"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "redox_users"
++version = "0.3.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rust-argon2 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "regex"
++version = "1.3.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "regex-syntax 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)",
++ "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "regex-syntax"
++version = "0.6.12"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "rust-argon2"
++version = "0.5.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "blake2b_simd 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)",
++ "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "rustc-demangle"
++version = "0.1.16"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "rustyline"
++version = "4.1.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "dirs 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
++ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "nix 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "utf8parse 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "strsim"
++version = "0.8.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "syn"
++version = "1.0.11"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "synstructure"
++version = "0.12.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)",
++ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "textwrap"
++version = "0.11.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "thread_local"
++version = "0.3.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "unicode-segmentation"
++version = "1.6.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "unicode-width"
++version = "0.1.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "unicode-xid"
++version = "0.2.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "utf8parse"
++version = "0.1.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "vec_map"
++version = "0.8.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "void"
++version = "1.0.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "winapi"
++version = "0.3.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "winapi-i686-pc-windows-gnu"
++version = "0.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "winapi-x86_64-pc-windows-gnu"
++version = "0.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[metadata]
++"checksum aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "58fb5e95d83b38284460a5fda7d6470aa0b8844d283a0b614b8535e880800d2d"
++"checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
++"checksum arrayref 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "0d382e583f07208808f6b1249e60848879ba3543f57c32277bf52d69c2f0f0ee"
++"checksum arrayvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cff77d8686867eceff3105329d4698d96c2391c176d5d03adc90c7389162b5b8"
++"checksum atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "1803c647a3ec87095e7ae7acfca019e98de5ec9a7d01343f611cf3152ed71a90"
++"checksum autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2"
++"checksum backtrace 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)" = "924c76597f0d9ca25d762c25a4d369d51267536465dc5064bdf0eb073ed477ea"
++"checksum backtrace-sys 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)" = "5d6575f128516de27e3ce99689419835fce9643a9b215a14d2b5b685be018491"
++"checksum base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e"
++"checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
++"checksum blake2b_simd 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b83b7baab1e671718d78204225800d6b170e648188ac7dc992e9d6bddf87d0c0"
++"checksum byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5"
++"checksum cc 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)" = "f52a465a666ca3d838ebbf08b241383421412fe7ebb463527bba275526d89f76"
++"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
++"checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9"
++"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
++"checksum constant_time_eq 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "995a44c877f9212528ccc74b21a232f66ad69001e40ede5bcee2ac9ef2657120"
++"checksum crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "04973fa96e96579258a5091af6003abde64af786b860f18622b82e026cca60e6"
++"checksum directories 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "551a778172a450d7fc12e629ca3b0428d00f6afa9a43da1b630d54604e97371c"
++"checksum dirs 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "3fd78930633bd1c6e35c4b42b1df7b0cbc6bc191146e512bb3bedf243fcc3901"
++"checksum dirs-sys 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "afa0b23de8fd801745c471deffa6e12d248f962c9fd4b4c33787b055599bde7b"
++"checksum failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "f8273f13c977665c5db7eb2b99ae520952fe5ac831ae4cd09d80c4c7042b5ed9"
++"checksum failure_derive 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0bc225b78e0391e4b8683440bf2e63c2deeeb2ce5189eab46e2b68c6d3725d08"
++"checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
++"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
++"checksum libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)" = "d515b1f41455adea1313a4a2ac8a8a477634fbae63cc6100e3aebb207ce61558"
++"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7"
++"checksum memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "88579771288728879b57485cc7d6b07d648c9f0141eb955f8ab7f9d45394468e"
++"checksum nix 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4dbdc256eaac2e3bd236d93ad999d3479ef775c863dbda3068c4006a92eec51b"
++"checksum num 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cf4825417e1e1406b3782a8ce92f4d53f26ec055e3622e1881ca8e9f5f9e08db"
++"checksum num-bigint 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "f9c3f34cdd24f334cb265d9bf8bfa8a241920d026916785747a92f0e55541a1a"
++"checksum num-complex 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "fcb0cf31fb3ff77e6d2a6ebd6800df7fdcd106f2ad89113c9130bcd07f93dffc"
++"checksum num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "b85e541ef8255f6cf42bbfe4ef361305c6c135d10919ecc26126c4e5ae94bc09"
++"checksum num-iter 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "76bd5272412d173d6bf9afdf98db8612bbabc9a7a830b7bfc9c188911716132e"
++"checksum num-rational 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f2885278d5fe2adc2f75ced642d52d879bffaceb5a2e0b1d4309ffdfb239b454"
++"checksum num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c81ffc11c212fa327657cb19dd85eb7419e163b5b076bede2bdb5c974c07e4"
++"checksum proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "9c9e470a8dc4aeae2dee2f335e8f533e2d4b347e1434e5671afc49b054592f27"
++"checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe"
++"checksum radix_fmt 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ce082a9940a7ace2ad4a8b7d0b1eac6aa378895f18be598230c5f2284ac05426"
++"checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
++"checksum rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
++"checksum rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071"
++"checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
++"checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84"
++"checksum redox_users 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4ecedbca3bf205f8d8f5c2b44d83cd0690e39ee84b951ed649e9f1841132b66d"
++"checksum regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dc220bd33bdce8f093101afe22a037b8eb0e5af33592e6a9caafff0d4cb81cbd"
++"checksum regex-syntax 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)" = "11a7e20d1cce64ef2fed88b66d347f88bd9babb82845b2b858f3edbf59a4f716"
++"checksum rust-argon2 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4ca4eaef519b494d1f2848fc602d18816fed808a981aedf4f1f00ceb7c9d32cf"
++"checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783"
++"checksum rustyline 4.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0f47ea1ceb347d2deae482d655dc8eef4bd82363d3329baffa3818bd76fea48b"
++"checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
++"checksum syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)" = "dff0acdb207ae2fe6d5976617f887eb1e35a2ba52c13c7234c790960cdad9238"
++"checksum synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545"
++"checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
++"checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b"
++"checksum unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0"
++"checksum unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7007dbd421b92cc6e28410fe7362e2e0a2503394908f417b68ec8d1c364c4e20"
++"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
++"checksum utf8parse 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8772a4ccbb4e89959023bc5b7cb8623a795caa7092d99f3aa9501b9484d4557d"
++"checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a"
++"checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
++"checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6"
++"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
++"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
diff --git a/nixpkgs/pkgs/tools/misc/eva/default.nix b/nixpkgs/pkgs/tools/misc/eva/default.nix
new file mode 100644
index 000000000000..bf43d11e5666
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/eva/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, rustPlatform, fetchpatch }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "eva";
+  version = "0.2.7";
+
+  cargoSha256 = "0n3xvlmp4l925nbz8lx6dr9yrrfh6z7b9z8wd6sli3a1dq26d6bg";
+
+  src = fetchFromGitHub {
+    owner = "NerdyPepper";
+    repo = "${pname}";
+    rev = "6ce0fc0212a34ffb647b24d9d903029ac4518165";
+    sha256 = "10242vnq2ph0g3p2hdacs4lmx3f474xm04nadplxbpv9xh4nbag3";
+  };
+
+  cargoPatches = [ ./Cargo.lock.patch ];
+
+  patches = [
+    # to fix the test suite (can be removed as soon as #33 is merged).
+    (fetchpatch {
+      url = https://github.com/NerdyPepper/eva/commit/cacf51dbb9748b1dbe97b35f3c593a0a272bd4db.patch;
+      sha256 = "11q7dkz2x1888f3awnlr1nbbxzzfjrr46kd0kk6sgjdkyfh50cvv";
+    })
+  ];
+
+  meta = with stdenv.lib; {
+    description = "A calculator REPL, similar to bc";
+    homepage = https://github.com/NerdyPepper/eva;
+    license = licenses.mit;
+    maintainers = with maintainers; [ nrdxp ma27 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/exa/default.nix b/nixpkgs/pkgs/tools/misc/exa/default.nix
new file mode 100644
index 000000000000..0edd8a1b318f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/exa/default.nix
@@ -0,0 +1,62 @@
+{ stdenv, fetchFromGitHub, fetchpatch, rustPlatform, cmake, perl, pkgconfig, zlib
+, darwin, libiconv, installShellFiles
+}:
+
+with rustPlatform;
+
+buildRustPackage rec {
+  pname = "exa";
+  version = "0.9.0";
+
+  cargoSha256 = "1hgjp23rjd90wyf0nq6d5akjxdfjlaps54dv23zgwjvkhw24fidf";
+
+  src = fetchFromGitHub {
+    owner = "ogham";
+    repo = "exa";
+    rev = "v${version}";
+    sha256 = "14qlm9zb9v22hxbbi833xaq2b7qsxnmh15s317200vz5f1305hhw";
+  };
+
+  patches = [
+    (fetchpatch {
+      # https://github.com/ogham/exa/pull/584
+      name = "fix-panic-on-broken-symlink-in-git-repository.patch";
+      url = "https://github.com/ogham/exa/pull/584/commits/a7a8e99cf3a15992afb2383435da0231917ffb54.patch";
+      sha256 = "0n5q483sz300jkp0sbb350hdinmkw7s6bmigdyr6ypz3fvygd9hx";
+    })
+  ];
+
+  nativeBuildInputs = [ cmake pkgconfig perl installShellFiles ];
+  buildInputs = [ zlib ]
+  ++ stdenv.lib.optionals stdenv.isDarwin [
+    libiconv darwin.apple_sdk.frameworks.Security ]
+  ;
+
+  outputs = [ "out" "man" ];
+
+  postInstall = ''
+    installManPage contrib/man/exa.1
+    installShellCompletion \
+      --name exa contrib/completions.bash \
+      --name exa.fish contrib/completions.fish \
+      --name _exa contrib/completions.zsh
+  '';
+
+  # Some tests fail, but Travis ensures a proper build
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "Replacement for 'ls' written in Rust";
+    longDescription = ''
+      exa is a modern replacement for ls. It uses colours for information by
+      default, helping you distinguish between many types of files, such as
+      whether you are the owner, or in the owning group. It also has extra
+      features not present in the original ls, such as viewing the Git status
+      for a directory, or recursing into directories with a tree view. exa is
+      written in Rust, so it’s small, fast, and portable.
+    '';
+    homepage = https://the.exa.website;
+    license = licenses.mit;
+    maintainers = with maintainers; [ ehegnes lilyball globin ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/execline/default.nix b/nixpkgs/pkgs/tools/misc/execline/default.nix
new file mode 100644
index 000000000000..d06798e5d6dd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/execline/default.nix
@@ -0,0 +1,85 @@
+{ lib, skawarePackages
+# for execlineb-with-builtins
+, coreutils, gnugrep, writeScriptBin, runCommand, runCommandCC
+# Whether to wrap bin/execlineb to have the execline tools on its PATH.
+, execlineb-with-builtins ? true
+}:
+
+with skawarePackages;
+
+let
+  outputs = [ "bin" "lib" "dev" "doc" "out" ];
+
+  execline =
+    buildPackage {
+      pname = "execline";
+      version = "2.5.3.0";
+      sha256 = "0czdrv9m8mnx94nf28dafij6z03k4mbhbs6hccfaardfd5l5q805";
+
+      description = "A small scripting language, to be used in place of a shell in non-interactive scripts";
+
+      inherit outputs;
+
+      # TODO: nsss support
+      configureFlags = [
+        "--libdir=\${lib}/lib"
+        "--dynlibdir=\${lib}/lib"
+        "--bindir=\${bin}/bin"
+        "--includedir=\${dev}/include"
+        "--with-sysdeps=${skalibs.lib}/lib/skalibs/sysdeps"
+        "--with-include=${skalibs.dev}/include"
+        "--with-lib=${skalibs.lib}/lib"
+        "--with-dynlib=${skalibs.lib}/lib"
+      ];
+
+      postInstall = ''
+        # remove all execline executables from build directory
+        rm $(find -type f -mindepth 1 -maxdepth 1 -executable)
+        rm libexecline.*
+
+        mv doc $doc/share/doc/execline/html
+        mv examples $doc/share/doc/execline/examples
+      '';
+
+    };
+
+  # A wrapper around execlineb, which provides all execline
+  # tools on `execlineb`’s PATH.
+  # It is implemented as a C script, because on non-Linux,
+  # nested shebang lines are not supported.
+  execlineb-with-builtins-drv = runCommandCC "execlineb" {} ''
+    mkdir -p $out/bin
+    cc \
+      -O \
+      -Wall -Wpedantic \
+      -D 'EXECLINEB_PATH()="${execline}/bin/execlineb"' \
+      -D 'EXECLINE_BIN_PATH()="${execline}/bin"' \
+      -I "${skalibs.dev}/include" \
+      -L "${skalibs.lib}/lib" \
+      -l"skarnet" \
+      -o "$out/bin/execlineb" \
+      ${./execlineb-wrapper.c}
+  '';
+
+
+  # the original execline package, with bin/execlineb overwritten
+  execline-with-builtins = runCommand "my-execline"
+    (execline.drvAttrs // {
+      preferLocalBuild = true;
+      allowSubstitutes = false;
+    })
+    # copy every output and just overwrite the execlineb binary in $bin
+    ''
+      ${lib.concatMapStringsSep "\n"
+        (output: ''
+          cp -r ${execline.${output}} "''$${output}"
+          chmod --recursive +w "''$${output}"
+        '')
+        outputs}
+      install ${execlineb-with-builtins-drv}/bin/execlineb $bin/bin/execlineb
+    '';
+
+in
+  if execlineb-with-builtins
+  then execline-with-builtins
+  else execline
diff --git a/nixpkgs/pkgs/tools/misc/execline/execlineb-wrapper.c b/nixpkgs/pkgs/tools/misc/execline/execlineb-wrapper.c
new file mode 100644
index 000000000000..09ccf990af7f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/execline/execlineb-wrapper.c
@@ -0,0 +1,43 @@
+#include <stdlib.h>
+#include <string.h>
+
+#include <skalibs/stralloc.h>
+#include <skalibs/djbunix.h>
+#include <skalibs/strerr2.h>
+#include <skalibs/env.h>
+
+#define dienomem() strerr_diefu1sys(111, "stralloc_catb")
+
+// macros from outside
+/* const char* EXECLINEB_PATH; */
+/* const char* EXECLINE_BIN_PATH; */
+
+int main(int argc, char const* argv[], char const *const *envp)
+{
+  PROG = "execlineb-wrapper";
+
+  char const* path = getenv("PATH");
+  stralloc path_modif = STRALLOC_ZERO;
+
+  // modify PATH if unset or EXECLINEB_BIN_PATH is not yet there
+  if ( !path || ! strstr(path, EXECLINE_BIN_PATH())) {
+    // prepend our execline path
+    if ( ! stralloc_cats(&path_modif, "PATH=")
+         || ! stralloc_cats(&path_modif, EXECLINE_BIN_PATH()) ) dienomem();
+    // old path was not empty
+    if ( path && path[0] ) {
+      if ( ! stralloc_catb(&path_modif, ":", 1)
+           || ! stralloc_cats(&path_modif, path) ) dienomem();
+    }
+    // append final \0
+    if ( ! stralloc_0(&path_modif) ) dienomem();
+  }
+
+  // exec into execlineb and append path_modif to the environment
+  xpathexec_r_name(
+    EXECLINEB_PATH(),
+    argv,
+    envp, env_len(envp),
+    path_modif.s, path_modif.len
+  );
+}
diff --git a/nixpkgs/pkgs/tools/misc/expect/default.nix b/nixpkgs/pkgs/tools/misc/expect/default.nix
new file mode 100644
index 000000000000..fe18a5065608
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/expect/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, fetchurl, tcl, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  version = "5.45.4";
+  pname = "expect";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/expect/Expect/${version}/expect${version}.tar.gz";
+    sha256 = "0d1cp5hggjl93xwc8h1y6adbnrvpkk0ywkd00inz9ndxn21xm9s9";
+  };
+
+  buildInputs = [ tcl ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  hardeningDisable = [ "format" ];
+
+  patchPhase = ''
+    sed -i "s,/bin/stty,$(type -p stty),g" configure
+  '';
+
+  configureFlags = [
+    "--with-tcl=${tcl}/lib"
+    "--with-tclinclude=${tcl}/include"
+    "--exec-prefix=\${out}"
+  ];
+
+  postInstall = ''
+    for i in $out/bin/*; do
+      wrapProgram $i \
+        --prefix PATH : "${tcl}/bin" \
+        --prefix TCLLIBPATH ' ' $out/lib/* \
+        ${stdenv.lib.optionalString stdenv.isDarwin "--prefix DYLD_LIBRARY_PATH : $out/lib/expect${version}"}
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A tool for automating interactive applications";
+    homepage = http://expect.sourceforge.net/;
+    license = "Expect";
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fasd/default.nix b/nixpkgs/pkgs/tools/misc/fasd/default.nix
new file mode 100644
index 000000000000..6c2cbd257442
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fasd/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchFromGitHub } :
+
+stdenv.mkDerivation rec {
+  pname = "fasd";
+  name = "${pname}-unstable-2016-08-11";
+
+  src = fetchFromGitHub {
+    owner = "clvv";
+    repo = pname;
+    rev = "90b531a5daaa545c74c7d98974b54cbdb92659fc";
+    sha256 = "0i22qmhq3indpvwbxz7c472rdyp8grag55x7iyjz8gmyn8gxjc11";
+  };
+
+  installPhase = ''
+    PREFIX=$out make install
+  '';
+
+  meta = {
+    homepage = "https://github.com/clvv/${pname}";
+    description = "Quick command-line access to files and directories for POSIX shells";
+    license = stdenv.lib.licenses.mit;
+
+    longDescription = ''
+      Fasd is a command-line productivity booster.
+      Fasd offers quick access to files and directories for POSIX shells. It is
+      inspired by tools like autojump, z and v. Fasd keeps track of files and
+      directories you have accessed, so that you can quickly reference them in the
+      command line.
+    '';
+
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fd/default.nix b/nixpkgs/pkgs/tools/misc/fd/default.nix
new file mode 100644
index 000000000000..76661c77f7be
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fd/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fd";
+  version = "7.4.0";
+
+  src = fetchFromGitHub {
+    owner = "sharkdp";
+    repo = "fd";
+    rev = "v${version}";
+    sha256 = "108p1p9bxhg4qzwfs6wqcakcvlpqw3w498jkz1vhmg6jp1mbmgdr";
+  };
+
+  cargoSha256 = "0ylanxcb1vrhvm9h3lvq8nh28362wi5hjy0pqdv5lh40pphcknnz";
+
+  preFixup = ''
+    install -Dm644 "$src/doc/fd.1" "$out/man/man1/fd.1"
+
+    install -Dm644 target/release/build/fd-find-*/out/fd.bash \
+      "$out/share/bash-completion/completions/fd.bash"
+    install -Dm644 target/release/build/fd-find-*/out/fd.fish \
+      "$out/share/fish/vendor_completions.d/fd.fish"
+    install -Dm644 target/release/build/fd-find-*/out/_fd \
+      "$out/share/zsh/site-functions/_fd"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A simple, fast and user-friendly alternative to find";
+    longDescription = ''
+      `fd` is a simple, fast and user-friendly alternative to `find`.
+
+      While it does not seek to mirror all of `find`'s powerful functionality,
+      it provides sensible (opinionated) defaults for 80% of the use cases.
+    '';
+    homepage = "https://github.com/sharkdp/fd";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ dywedir globin ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fdupes/default.nix b/nixpkgs/pkgs/tools/misc/fdupes/default.nix
new file mode 100644
index 000000000000..af9a7c9a1332
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fdupes/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "fdupes";
+  version = "1.6.1";
+
+  src = fetchFromGitHub {
+    owner = "adrianlopezroche";
+    repo  = "fdupes";
+    rev   = "v${version}";
+    sha256 = "19b6vqblddaw8ccw4sn0qsqzbswlhrz8ia6n4m3hymvcxn8skpz9";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with stdenv.lib; {
+    description = "Identifies duplicate files residing within specified directories";
+    longDescription = ''
+      fdupes searches the given path for duplicate files.
+      Such files are found by comparing file sizes and MD5 signatures,
+      followed by a byte-by-byte comparison.
+    '';
+    homepage = https://github.com/adrianlopezroche/fdupes;
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = [ maintainers.maggesi ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fffuu/default.nix b/nixpkgs/pkgs/tools/misc/fffuu/default.nix
new file mode 100644
index 000000000000..5d79b26f2308
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fffuu/default.nix
@@ -0,0 +1,51 @@
+{ mkDerivation, haskellPackages, fetchFromGitHub, lib }:
+
+mkDerivation {
+  pname = "fffuu";
+  version = "unstable-2018-05-26";
+
+  src = fetchFromGitHub {
+    owner = "diekmann";
+    repo = "Iptables_Semantics";
+    rev = "e0a2516bd885708fce875023b474ae341cbdee29";
+    sha256 = "1qc7p44dqja6qrjbjdc2xn7n9v41j5v59sgjnxjj5k0mxp58y1ch";
+  };
+
+  postPatch = ''
+    substituteInPlace haskell_tool/fffuu.cabal \
+      --replace "containers >=0.5 && <0.6" "containers >= 0.6" \
+      --replace "optparse-generic >= 1.2.3 && < 1.3" "optparse-generic >= 1.2.3"
+  '';
+
+  preCompileBuildDriver = ''
+    cd haskell_tool
+  '';
+
+  isLibrary = false;
+
+  isExecutable = true;
+
+  # fails with sandbox
+  doCheck = false;
+
+  libraryHaskellDepends = with haskellPackages; [
+    base
+    containers
+    split
+    parsec
+    optparse-generic
+  ];
+
+  executableHaskellDepends = with haskellPackages; [ base ];
+
+  testHaskellDepends = with haskellPackages; [
+    tasty
+    tasty-hunit
+    tasty-golden
+  ];
+
+  description = "Fancy Formal Firewall Universal Understander";
+  homepage = https://github.com/diekmann/Iptables_Semantics/tree/master/haskell_tool;
+  license = lib.licenses.bsd2;
+  maintainers = [ lib.maintainers.marsam ];
+}
diff --git a/nixpkgs/pkgs/tools/misc/ffsend/default.nix b/nixpkgs/pkgs/tools/misc/ffsend/default.nix
new file mode 100644
index 000000000000..bb10bfe2ec76
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ffsend/default.nix
@@ -0,0 +1,61 @@
+{ stdenv, fetchFromGitLab, rustPlatform, cmake, pkgconfig, openssl
+, darwin, installShellFiles
+
+, x11Support ? stdenv.isLinux || stdenv.hostPlatform.isBSD
+, xclip ? null, xsel ? null
+, preferXsel ? false # if true and xsel is non-null, use it instead of xclip
+}:
+
+let
+  usesX11 = stdenv.isLinux || stdenv.hostPlatform.isBSD;
+in
+
+assert (x11Support && usesX11) -> xclip != null || xsel != null;
+
+with rustPlatform;
+
+buildRustPackage rec {
+  pname = "ffsend";
+  version = "0.2.58";
+
+  src = fetchFromGitLab {
+    owner = "timvisee";
+    repo = "ffsend";
+    rev = "v${version}";
+    sha256 = "0yqigqh5vldzmp7wc1mxi5a4bxzm81xycx5h0ghak74vbjibps49";
+  };
+
+  cargoSha256 = "1wwdnm6a5g4gpd1f89qii8v4f6mcfc1bif1v6mdlcbrpwax5skh4";
+
+  nativeBuildInputs = [ cmake pkgconfig installShellFiles ];
+  buildInputs = [ openssl ]
+  ++ stdenv.lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [ CoreFoundation CoreServices Security AppKit ])
+  ;
+
+  preBuild = stdenv.lib.optionalString (x11Support && usesX11) (
+    if preferXsel && xsel != null then ''
+      export XSEL_PATH="${xsel}/bin/xsel"
+    '' else ''
+      export XCLIP_PATH="${xclip}/bin/xclip"
+    ''
+  );
+
+  postInstall = ''
+    installShellCompletion contrib/completions/ffsend.{bash,fish} --zsh contrib/completions/_ffsend
+  '';
+  # There's also .elv and .ps1 completion files but I don't know where to install those
+
+  meta = with stdenv.lib; {
+    description = "Easily and securely share files from the command line. A fully featured Firefox Send client";
+    longDescription = ''
+      Easily and securely share files and directories from the command line through a safe, private
+      and encrypted link using a single simple command. Files are shared using the Send service and
+      may be up to 2GB. Others are able to download these files with this tool, or through their
+      web browser.
+    '';
+    homepage = https://gitlab.com/timvisee/ffsend;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ lilyball equirosa ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/figlet/default.nix b/nixpkgs/pkgs/tools/misc/figlet/default.nix
new file mode 100644
index 000000000000..86434847b4a2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/figlet/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, fetchpatch }:
+
+stdenv.mkDerivation {
+  name = "figlet-2.2.5";
+
+  # some tools can be found here ftp://ftp.figlet.org/pub/figlet/util/
+  src = fetchurl {
+    url = ftp://ftp.figlet.org/pub/figlet/program/unix/figlet-2.2.5.tar.gz;
+    sha256 = "0za1ax15x7myjl8jz271ybly8ln9kb9zhm1gf6rdlxzhs07w925z";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = https://git.alpinelinux.org/cgit/aports/plain/main/figlet/musl-fix-cplusplus-decls.patch?h=3.4-stable&id=71776c73a6f04b6f671430f702bcd40b29d48399;
+      name = "musl-fix-cplusplus-decls.patch";
+      sha256 = "1720zgrfk9makznqkbjrnlxm7nnhk6zx7g458fv53337n3g3zn7j";
+    })
+  ];
+
+  makeFlags = [ "prefix=$(out)" "CC:=$(CC)" "LD:=$(CC)" ];
+
+  doCheck = true;
+
+  meta = {
+    description = "Program for making large letters out of ordinary text";
+    homepage = http://www.figlet.org/;
+    license = stdenv.lib.licenses.afl21;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/file/default.nix b/nixpkgs/pkgs/tools/misc/file/default.nix
new file mode 100644
index 000000000000..24a7143d8e11
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/file/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, file, zlib, libgnurx }:
+
+stdenv.mkDerivation rec {
+  pname = "file";
+  version = "5.38";
+
+  src = fetchurl {
+    urls = [
+      "ftp://ftp.astron.com/pub/file/${pname}-${version}.tar.gz"
+      "https://distfiles.macports.org/file/${pname}-${version}.tar.gz"
+    ];
+    sha256 = "0d7s376b4xqymnrsjxi3nsv3f5v89pzfspzml2pcajdk5by2yg2r";
+  };
+
+  nativeBuildInputs = stdenv.lib.optional (stdenv.hostPlatform != stdenv.buildPlatform) file;
+  buildInputs = [ zlib ]
+              ++ stdenv.lib.optional stdenv.hostPlatform.isWindows libgnurx;
+
+  doCheck = true;
+
+  makeFlags = stdenv.lib.optional stdenv.hostPlatform.isWindows "FILE_COMPILE=file";
+
+  meta = with stdenv.lib; {
+    homepage = https://darwinsys.com/file;
+    description = "A program that shows the type of files";
+    license = licenses.bsd2;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/filebench/default.nix b/nixpkgs/pkgs/tools/misc/filebench/default.nix
new file mode 100644
index 000000000000..a16695cf7c32
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/filebench/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchurl, autoreconfHook, bison, flex }:
+
+stdenv.mkDerivation rec {
+  pname = "filebench";
+  version = "1.4.9.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/filebench/${pname}-${version}.tar.gz";
+    sha256 = "13hmx67lsz367sn8lrvz1780mfczlbiz8v80gig9kpkpf009yksc";
+  };
+
+  nativeBuildInputs = [ autoreconfHook bison flex ];
+
+  meta = with stdenv.lib; {
+    description = "File system and storage benchmark that can generate both micro and macro workloads";
+    homepage = https://sourceforge.net/projects/filebench/;
+    license = licenses.cddl;
+    maintainers = [ maintainers.dezgeg ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fileschanged/default.nix b/nixpkgs/pkgs/tools/misc/fileschanged/default.nix
new file mode 100644
index 000000000000..6818bb708bb6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fileschanged/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, gamin }:
+
+stdenv.mkDerivation rec {
+  name = "fileschanged-0.6.9";
+
+  src = fetchurl {
+    url = "mirror://savannah/fileschanged/${name}.tar.gz";
+    sha256 = "0ajc9h023vzpnlqqjli4wbvs0q36nr5p9msc3wzbic8rk687qcxc";
+  };
+
+  buildInputs = [ gamin ];
+
+  patches = [./unused-variables.debian.patch];
+
+  doCheck = true;
+
+  meta = {
+    homepage = https://www.nongnu.org/fileschanged/;
+    description = "A command-line utility that reports when files have been altered";
+    license = stdenv.lib.licenses.gpl3Plus;
+
+    longDescription = ''
+      This utility is a client to FAM (File Alteration Monitor) servers
+      like FAM or Gamin. You give it some filenames on the command line
+      and then it monitors those files for changes. When it discovers
+      that a file has been altered, it displays the filename on the
+      standard-output or executes a given command.
+    '';
+
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fileschanged/unused-variables.debian.patch b/nixpkgs/pkgs/tools/misc/fileschanged/unused-variables.debian.patch
new file mode 100644
index 000000000000..73d307f9413d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fileschanged/unused-variables.debian.patch
@@ -0,0 +1,48 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 07_unused_variables.dpatch by Colin Watson <cjwatson@ubuntu.com>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: GCC 4.6 warns about unused variables, and fileschanged builds with
+## DP: -Werror, so deal with unused variable warnings.
+
+@DPATCH@
+diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' fileschanged-0.6.5~/src/monitor.c fileschanged-0.6.5/src/monitor.c
+--- fileschanged-0.6.5~/src/monitor.c	2006-04-19 20:42:29.000000000 +0100
++++ fileschanged-0.6.5/src/monitor.c	2011-09-14 01:17:23.000000000 +0100
+@@ -84,6 +84,7 @@
+ 	  retval = FAMMonitorDirectory (c, node->filename, &node->request,
+ 					(void *) node);
+ 	  //printf ("FAMMonitorDirectory returns %d (reqnum %d)\n", retval, node->request.reqnum);
++	  (void) retval;
+ 	}
+       else if (S_ISREG (node->statbuf.st_mode))
+ 	{
+@@ -91,6 +92,7 @@
+ 	  retval = FAMMonitorFile (c, node->filename, &node->request,
+ 				   (void *) node);
+ 	  //printf ("FAMMonitorFile returns %d (reqnum %d)\n", retval, node->request.reqnum);
++	  (void) retval;
+ 	}
+       monitor_handle_events (c, list, 0, 30);
+     }
+
+diff -r -U3 fileschanged-0.6.9-orig/src/main.c fileschanged-0.6.9/src/main.c
+--- fileschanged-0.6.9-orig/src/main.c  2012-04-13 01:31:59.160601022 +0400
++++ fileschanged-0.6.9/src/main.c       2012-04-13 01:32:47.549599643 +0400
+@@ -126,6 +126,7 @@
+     {
+       retval = process_file (filelist, filelist_len, arguments.args[i]);
+     }
++  (void) retval;
+   return 0;
+ }
+ 
+@@ -168,6 +169,7 @@
+ 
+   if (fileptr != stdin)
+     fclose (fileptr);
++  (void) retval;
+   return 0;
+ }
+ int 
+
diff --git a/nixpkgs/pkgs/tools/misc/findutils/default.nix b/nixpkgs/pkgs/tools/misc/findutils/default.nix
new file mode 100644
index 000000000000..2df8ee420fae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/findutils/default.nix
@@ -0,0 +1,61 @@
+{ stdenv, fetchurl
+, coreutils
+}:
+
+stdenv.mkDerivation rec {
+  pname = "findutils";
+  version = "4.7.0";
+
+  src = fetchurl {
+    url = "mirror://gnu/findutils/${pname}-${version}.tar.xz";
+    sha256 = "16kqz9yz98dasmj70jwf5py7jk558w96w0vgp3zf9xsqk3gzpzn5";
+  };
+
+  patches = [
+    ./no-install-statedir.patch
+  ];
+
+  buildInputs = [ coreutils ]; # bin/updatedb script needs to call sort
+
+  # Since glibc-2.25 the i686 tests hang reliably right after test-sleep.
+  doCheck
+    =  !stdenv.hostPlatform.isDarwin
+    && !(stdenv.hostPlatform.libc == "glibc" && stdenv.hostPlatform.isi686)
+    && (stdenv.hostPlatform.libc != "musl")
+    && stdenv.hostPlatform == stdenv.buildPlatform;
+
+  outputs = [ "out" "info" ];
+
+  configureFlags = [
+    # "sort" need not be on the PATH as a run-time dep, so we need to tell
+    # configure where it is. Covers the cross and native case alike.
+    "SORT=${coreutils}/bin/sort"
+    "--localstatedir=/var/cache"
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = {
+    homepage = https://www.gnu.org/software/findutils/;
+    description = "GNU Find Utilities, the basic directory searching utilities of the GNU operating system";
+
+    longDescription = ''
+      The GNU Find Utilities are the basic directory searching
+      utilities of the GNU operating system.  These programs are
+      typically used in conjunction with other programs to provide
+      modular and powerful directory search and file locating
+      capabilities to other commands.
+
+      The tools supplied with this package are:
+
+          * find - search for files in a directory hierarchy;
+          * locate - list files in databases that match a pattern;
+          * updatedb - update a file name database;
+          * xargs - build and execute command lines from standard input.
+    '';
+
+    platforms = stdenv.lib.platforms.all;
+
+    license = stdenv.lib.licenses.gpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/findutils/no-install-statedir.patch b/nixpkgs/pkgs/tools/misc/findutils/no-install-statedir.patch
new file mode 100644
index 000000000000..a7a48038a3aa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/findutils/no-install-statedir.patch
@@ -0,0 +1,11 @@
+--- a/locate/Makefile.in
++++ b/locate/Makefile.in
+@@ -2357,7 +2357,7 @@ updatedb: updatedb.sh Makefile
+ 	chmod +x $@
+ 
+ install-data-hook:
+-	$(top_srcdir)/build-aux/mkinstalldirs $(DESTDIR)$(localstatedir)
++	#$(top_srcdir)/build-aux/mkinstalldirs $(DESTDIR)$(localstatedir)
+ 
+ dblocation.texi:
+ 	echo '@set LOCATE_DB $(LOCATE_DB)' > $@.tmp
diff --git a/nixpkgs/pkgs/tools/misc/flameshot/default.nix b/nixpkgs/pkgs/tools/misc/flameshot/default.nix
new file mode 100644
index 000000000000..ad6ed6acb4cc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/flameshot/default.nix
@@ -0,0 +1,44 @@
+{ mkDerivation, lib, fetchFromGitHub, qtbase, qmake, qttools, qtsvg }:
+
+# To use `flameshot gui`, you will also need to put flameshot in `services.dbus.packages`
+# in configuration.nix so that the daemon gets launched properly:
+#
+#   services.dbus.packages = [ pkgs.flameshot ];
+#   environment.systemPackages = [ pkgs.flameshot ];
+mkDerivation rec {
+  pname = "flameshot";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "lupoDharkael";
+    repo = "flameshot";
+    rev = "v${version}";
+    sha256 = "193szslh55v44jzxzx5g9kxhl8p8di7vbcnxlid4acfidhnvgazm";
+  };
+
+  nativeBuildInputs = [ qmake qttools qtsvg ];
+  buildInputs = [ qtbase ];
+
+  qmakeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  preConfigure = ''
+    # flameshot.pro assumes qmake is being run in a git checkout.
+    git() { echo ${version}; }
+    export -f git
+  '';
+
+  postFixup = ''
+    substituteInPlace $out/share/dbus-1/services/org.dharkael.Flameshot.service \
+      --replace "/usr/local" "$out"
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Powerful yet simple to use screenshot software";
+    homepage = https://github.com/lupoDharkael/flameshot;
+    maintainers = [ maintainers.scode ];
+    license = lib.licenses.gpl3;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/flashrom/default.nix b/nixpkgs/pkgs/tools/misc/flashrom/default.nix
new file mode 100644
index 000000000000..18914a304f34
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/flashrom/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchurl, pkgconfig, libftdi, pciutils }:
+
+stdenv.mkDerivation rec {
+  pname = "flashrom";
+  version = "1.1";
+
+  src = fetchurl {
+    url = "https://download.flashrom.org/releases/flashrom-v${version}.tar.bz2";
+    sha256 = "06afq680n9p34hi3vrkn12vd1pfyq2062db9qqbi4hi21k3skbdf";
+  };
+
+  # Newer versions of libusb deprecate some API flashrom uses.
+  #postPatch = ''
+  #  substituteInPlace Makefile \
+  #    --replace "-Werror" "-Werror -Wno-error=deprecated-declarations -Wno-error=unused-const-variable="
+  #'';
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libftdi pciutils ];
+
+  preConfigure = "export PREFIX=$out";
+
+  meta = with lib; {
+    homepage = http://www.flashrom.org;
+    description = "Utility for reading, writing, erasing and verifying flash ROM chips";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ funfunctor fpletz ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fltrdr/default.nix b/nixpkgs/pkgs/tools/misc/fltrdr/default.nix
new file mode 100644
index 000000000000..8c2c5adfb5f4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fltrdr/default.nix
@@ -0,0 +1,43 @@
+{ stdenv
+, fetchFromGitHub
+, cmake
+, icu, openssl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fltrdr";
+  version = "0.3.1";
+
+  src = fetchFromGitHub {
+    repo   = "fltrdr";
+    owner  = "octobanana";
+    rev    = version;
+    sha256 = "1vpci7vqzcpdd21zgigyz38k77r9fc81dmiwsvfr8w7gad5sg6sj";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [ icu openssl ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    homepage = https://octobanana.com/software/fltrdr;
+    description = "A TUI text reader for the terminal";
+
+    longDescription = ''
+      Fltrdr, or flat-reader, is an interactive text reader for the terminal. It
+      is flat in the sense that the reader is word-based. It creates a
+      horizontal stream of words, ignoring all newline characters and reducing
+      extra whitespace. Its purpose is to facilitate reading, scanning, and
+      searching text. The program has a play mode that moves the reader forward
+      one word at a time, along with a configurable words per minute (WPM),
+      setting.
+    '';
+
+    platforms   = platforms.linux; # can only test linux
+    license     = licenses.mit;
+    maintainers = [ maintainers.matthiasbeyer ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/fluent-bit/default.nix b/nixpkgs/pkgs/tools/misc/fluent-bit/default.nix
new file mode 100644
index 000000000000..4e1a18efde4d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fluent-bit/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchFromGitHub, cmake, flex, bison }:
+
+stdenv.mkDerivation rec {
+  pname = "fluent-bit";
+  version = "1.3.6";
+
+  src = fetchFromGitHub {
+    owner = "fluent";
+    repo = "fluent-bit";
+    rev = "v${version}";
+    sha256 = "0gkn5axjxaa52f3w2qxwwab4m46xrxymbkcpw1v1jihil34pxw7a";
+  };
+
+  nativeBuildInputs = [ cmake flex bison ];
+
+  postPatch = ''
+    substituteInPlace src/CMakeLists.txt \
+      --replace /lib/systemd $out/lib/systemd
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Log forwarder and processor, part of Fluentd ecosystem";
+    homepage = "https://fluentbit.io";
+    maintainers = with maintainers; [
+      samrose
+    ];
+    license = licenses.asl20;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fluentd/Gemfile b/nixpkgs/pkgs/tools/misc/fluentd/Gemfile
new file mode 100644
index 000000000000..952c419ad313
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fluentd/Gemfile
@@ -0,0 +1,12 @@
+source "https://rubygems.org"
+
+gem 'fluentd'
+gem 'fluent-plugin-record-reformer'
+gem 'fluent-plugin-s3'
+gem 'fluent-plugin-kinesis'
+gem 'fluent-plugin-kafka'
+gem 'fluent-plugin-elasticsearch'
+gem 'fluent-plugin-scribe'
+gem 'fluent-plugin-mongo'
+gem 'fluent-plugin-webhdfs'
+gem 'fluent-plugin-rewrite-tag-filter'
diff --git a/nixpkgs/pkgs/tools/misc/fluentd/Gemfile.lock b/nixpkgs/pkgs/tools/misc/fluentd/Gemfile.lock
new file mode 100644
index 000000000000..e86371aed3ba
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fluentd/Gemfile.lock
@@ -0,0 +1,132 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    addressable (2.6.0)
+      public_suffix (>= 2.0.2, < 4.0)
+    aws-eventstream (1.0.3)
+    aws-partitions (1.193.0)
+    aws-sdk-core (3.61.1)
+      aws-eventstream (~> 1.0, >= 1.0.2)
+      aws-partitions (~> 1.0)
+      aws-sigv4 (~> 1.1)
+      jmespath (~> 1.0)
+    aws-sdk-firehose (1.20.0)
+      aws-sdk-core (~> 3, >= 3.61.1)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-kinesis (1.19.0)
+      aws-sdk-core (~> 3, >= 3.61.1)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-kms (1.24.0)
+      aws-sdk-core (~> 3, >= 3.61.1)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-s3 (1.46.0)
+      aws-sdk-core (~> 3, >= 3.61.1)
+      aws-sdk-kms (~> 1)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-sqs (1.20.0)
+      aws-sdk-core (~> 3, >= 3.61.1)
+      aws-sigv4 (~> 1.1)
+    aws-sigv4 (1.1.0)
+      aws-eventstream (~> 1.0, >= 1.0.2)
+    bson (4.5.0)
+    cool.io (1.5.4)
+    dig_rb (1.0.1)
+    digest-crc (0.4.1)
+    elasticsearch (7.2.1)
+      elasticsearch-api (= 7.2.1)
+      elasticsearch-transport (= 7.2.1)
+    elasticsearch-api (7.2.1)
+      multi_json
+    elasticsearch-transport (7.2.1)
+      faraday
+      multi_json
+    excon (0.65.0)
+    faraday (0.15.4)
+      multipart-post (>= 1.2, < 3)
+    fluent-config-regexp-type (1.0.0)
+      fluentd (> 1.0.0, < 2)
+    fluent-plugin-elasticsearch (3.5.3)
+      elasticsearch
+      excon
+      fluentd (>= 0.14.22)
+    fluent-plugin-kafka (0.11.0)
+      fluentd (>= 0.10.58, < 2)
+      ltsv
+      ruby-kafka (>= 0.7.8, < 0.8.0)
+    fluent-plugin-kinesis (3.1.0)
+      aws-sdk-firehose (~> 1, != 1.9, != 1.5)
+      aws-sdk-kinesis (~> 1, != 1.5, != 1.4)
+      fluentd (>= 0.14.10, < 2)
+      google-protobuf (~> 3)
+    fluent-plugin-mongo (1.3.0)
+      fluentd (>= 0.14.22, < 2)
+      mongo (~> 2.6.0)
+    fluent-plugin-record-reformer (0.9.1)
+      fluentd
+    fluent-plugin-rewrite-tag-filter (2.2.0)
+      fluent-config-regexp-type
+      fluentd (>= 0.14.2, < 2)
+    fluent-plugin-s3 (1.1.11)
+      aws-sdk-s3 (~> 1.0)
+      aws-sdk-sqs (~> 1.0)
+      fluentd (>= 0.14.22, < 2)
+    fluent-plugin-scribe (1.0.0)
+      fluentd
+      thrift (~> 0.8.0)
+    fluent-plugin-webhdfs (1.2.4)
+      fluentd (>= 0.14.22)
+      webhdfs (>= 0.6.0)
+    fluentd (1.6.2)
+      cool.io (>= 1.4.5, < 2.0.0)
+      dig_rb (~> 1.0.0)
+      http_parser.rb (>= 0.5.1, < 0.7.0)
+      msgpack (>= 0.7.0, < 2.0.0)
+      serverengine (>= 2.0.4, < 3.0.0)
+      sigdump (~> 0.2.2)
+      strptime (>= 0.2.2, < 1.0.0)
+      tzinfo (~> 1.0)
+      tzinfo-data (~> 1.0)
+      yajl-ruby (~> 1.0)
+    google-protobuf (3.9.0)
+    http_parser.rb (0.6.0)
+    jmespath (1.4.0)
+    ltsv (0.1.2)
+    mongo (2.6.4)
+      bson (>= 4.3.0, < 5.0.0)
+    msgpack (1.3.0)
+    multi_json (1.13.1)
+    multipart-post (2.1.1)
+    public_suffix (3.1.1)
+    ruby-kafka (0.7.9)
+      digest-crc
+    serverengine (2.1.1)
+      sigdump (~> 0.2.2)
+    sigdump (0.2.4)
+    strptime (0.2.3)
+    thread_safe (0.3.6)
+    thrift (0.8.0)
+    tzinfo (1.2.5)
+      thread_safe (~> 0.1)
+    tzinfo-data (1.2019.2)
+      tzinfo (>= 1.0.0)
+    webhdfs (0.8.0)
+      addressable
+    yajl-ruby (1.4.1)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  fluent-plugin-elasticsearch
+  fluent-plugin-kafka
+  fluent-plugin-kinesis
+  fluent-plugin-mongo
+  fluent-plugin-record-reformer
+  fluent-plugin-rewrite-tag-filter
+  fluent-plugin-s3
+  fluent-plugin-scribe
+  fluent-plugin-webhdfs
+  fluentd
+
+BUNDLED WITH
+   1.17.2
diff --git a/nixpkgs/pkgs/tools/misc/fluentd/default.nix b/nixpkgs/pkgs/tools/misc/fluentd/default.nix
new file mode 100644
index 000000000000..18d03982f37c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fluentd/default.nix
@@ -0,0 +1,18 @@
+{ lib, bundlerEnv, ruby, bundlerUpdateScript }:
+
+bundlerEnv {
+  inherit ruby;
+
+  pname = "fluentd";
+  gemdir = ./.;
+
+  passthru.updateScript = bundlerUpdateScript "fluentd";
+
+  meta = with lib; {
+    description = "A data collector";
+    homepage    = https://www.fluentd.org/;
+    license     = licenses.asl20;
+    maintainers = with maintainers; [ offline nicknovitski ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fluentd/gemset.nix b/nixpkgs/pkgs/tools/misc/fluentd/gemset.nix
new file mode 100644
index 000000000000..9c8343eb44ad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fluentd/gemset.nix
@@ -0,0 +1,521 @@
+{
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bcm2hchn897xjhqj9zzsxf3n9xhddymj4lsclz508f4vw3av46l";
+      type = "gem";
+    };
+    version = "2.6.0";
+  };
+  aws-eventstream = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "100g77a5ixg4p5zwq77f28n2pdkk0y481f7v83qrlmnj22318qq6";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  aws-partitions = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12fbibkq9gp8b9az3s87zi6dcalx92aam98jmbzacw9cvafzm7af";
+      type = "gem";
+    };
+    version = "1.193.0";
+  };
+  aws-sdk-core = {
+    dependencies = ["aws-eventstream" "aws-partitions" "aws-sigv4" "jmespath"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wir5q6qpj3lxxmzynmybsfabzgbfkk1cjyy7dkfsy5fmxcgm6qq";
+      type = "gem";
+    };
+    version = "3.61.1";
+  };
+  aws-sdk-firehose = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1s2rksdk3iv9jvcnyvnpvmh35vbs0ppan9iw4zq6fg87y44j9i74";
+      type = "gem";
+    };
+    version = "1.20.0";
+  };
+  aws-sdk-kinesis = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1w2azv19xi1jmp4dsqjh8af1xdyw4ajd1l5abmx3wpwd8zngxvlp";
+      type = "gem";
+    };
+    version = "1.19.0";
+  };
+  aws-sdk-kms = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14blvvfz67rhffi4ahby50jiip5f0hm85mcxlx6y93g0cfrnxh3m";
+      type = "gem";
+    };
+    version = "1.24.0";
+  };
+  aws-sdk-s3 = {
+    dependencies = ["aws-sdk-core" "aws-sdk-kms" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1871mqf6b92rcmcgc6061xx9h35dlfvj7r27q2khidb5dzp7yd33";
+      type = "gem";
+    };
+    version = "1.46.0";
+  };
+  aws-sdk-sqs = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0946yrabarr5hvzxkfh6f8mvm19ivpybhd64xnsk3hlk71xc9bip";
+      type = "gem";
+    };
+    version = "1.20.0";
+  };
+  aws-sigv4 = {
+    dependencies = ["aws-eventstream"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1dfc8i5cxjwlvi4b665lbpbwvks8a6wfy3vfmwr3pjdmxwdmc2cs";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  bson = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gxdavhccppnfbmh2cx0qxv6b6rzr5s00dsigazw808dhb34yyg7";
+      type = "gem";
+    };
+    version = "4.5.0";
+  };
+  "cool.io" = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0l836z3qgrl5829q48qaz1zngqqxy2k0l61swqm0amhyfcgfbz1m";
+      type = "gem";
+    };
+    version = "1.5.4";
+  };
+  dig_rb = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12dbb1pl2vr9z7yy2zsbsjaj4hw89y56wll6kd8422mylmcw7bx4";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  digest-crc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08q8p0fk51aa6dwhy2xmjaj76arcq9nn22gyia162jmqpccfx50l";
+      type = "gem";
+    };
+    version = "0.4.1";
+  };
+  elasticsearch = {
+    dependencies = ["elasticsearch-api" "elasticsearch-transport"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1800algjigydip0855xcfdlyl1cfbl630sl68a0y39xvpvd2fq68";
+      type = "gem";
+    };
+    version = "7.2.1";
+  };
+  elasticsearch-api = {
+    dependencies = ["multi_json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18rd6xxvdjr8h7n6ziwjkrdzxwsx0rf9vd1krz7kgi61q5897jmz";
+      type = "gem";
+    };
+    version = "7.2.1";
+  };
+  elasticsearch-transport = {
+    dependencies = ["faraday" "multi_json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1k0324sbwz292l0nj50k318k2qlznzpimj5mpg7557rkk0b7plrz";
+      type = "gem";
+    };
+    version = "7.2.1";
+  };
+  excon = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mc6y6n7i0hhk7i8wwi4qjnpkm013p7z3xr994s696hk74f91a7j";
+      type = "gem";
+    };
+    version = "0.65.0";
+  };
+  faraday = {
+    dependencies = ["multipart-post"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0s72m05jvzc1pd6cw1i289chas399q0a14xrwg4rvkdwy7bgzrh0";
+      type = "gem";
+    };
+    version = "0.15.4";
+  };
+  fluent-config-regexp-type = {
+    dependencies = ["fluentd"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hk0vxcmlbid7n6piyv3x83j5gyiz7in397l9x3c6nh69wicy7gm";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  fluent-plugin-elasticsearch = {
+    dependencies = ["elasticsearch" "excon" "fluentd"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18j0q9x006gps03sh93v8nc83b9w45a6ynic8kd9x6zr2g58ynh7";
+      type = "gem";
+    };
+    version = "3.5.3";
+  };
+  fluent-plugin-kafka = {
+    dependencies = ["fluentd" "ltsv" "ruby-kafka"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1p7xsm6v84z61hkhvg9fmrxahaid7fqdarnpvpp5qj8qnzximkyd";
+      type = "gem";
+    };
+    version = "0.11.0";
+  };
+  fluent-plugin-kinesis = {
+    dependencies = ["aws-sdk-firehose" "aws-sdk-kinesis" "fluentd" "google-protobuf"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1j0qs09g53xsvbxpdlylwm3h2v8rvr3xpn0kwy63cjnpdf012m8f";
+      type = "gem";
+    };
+    version = "3.1.0";
+  };
+  fluent-plugin-mongo = {
+    dependencies = ["fluentd" "mongo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "108gxrgbn0ib70n7gvdlx8xr1i0jdh1cb2n4m4m24ihyfb8i6vli";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+  fluent-plugin-record-reformer = {
+    dependencies = ["fluentd"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gwfrfyi9is4l9q4ih3c4l3c9qvyh00jnd2qajdpdh5xjj2m7akn";
+      type = "gem";
+    };
+    version = "0.9.1";
+  };
+  fluent-plugin-rewrite-tag-filter = {
+    dependencies = ["fluent-config-regexp-type" "fluentd"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0kf8p1s02pwhkks82kmkkbfbf4qlhhqiczqah4w0dnp86wp6xyw5";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  fluent-plugin-s3 = {
+    dependencies = ["aws-sdk-s3" "aws-sdk-sqs" "fluentd"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "093fs43bixd0lmjfpkk1fl24asa1w8kacqrm82lbfx4cq4dg4fif";
+      type = "gem";
+    };
+    version = "1.1.11";
+  };
+  fluent-plugin-scribe = {
+    dependencies = ["fluentd" "thrift"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19m37d0saknifjg8kva96pgsc7zsmdlwvwiy9gvhi2d6c7bq3q30";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  fluent-plugin-webhdfs = {
+    dependencies = ["fluentd" "webhdfs"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mhy321gxb59yk0rsawnqf3kfx33ncdlnpmn4rdfzgi0v8ya0fp4";
+      type = "gem";
+    };
+    version = "1.2.4";
+  };
+  fluentd = {
+    dependencies = ["cool.io" "dig_rb" "http_parser.rb" "msgpack" "serverengine" "sigdump" "strptime" "tzinfo" "tzinfo-data" "yajl-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1h6zvb4qhhyl8hm19015ha5rbdvg9wpv3ipbyr1ab491igqln1j6";
+      type = "gem";
+    };
+    version = "1.6.2";
+  };
+  google-protobuf = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0b7r1y30cgm03cj0l8pr6npz4w9i1lh70ycd2w15zf2qcbi9gpng";
+      type = "gem";
+    };
+    version = "3.9.0";
+  };
+  "http_parser.rb" = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15nidriy0v5yqfjsgsra51wmknxci2n2grliz78sf9pga3n0l7gi";
+      type = "gem";
+    };
+    version = "0.6.0";
+  };
+  jmespath = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1d4wac0dcd1jf6kc57891glih9w57552zgqswgy74d1xhgnk0ngf";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  ltsv = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wrjvc5079zhpn62k1yflrf7js6vaysrg1qwggf7bj2zi0p5rhys";
+      type = "gem";
+    };
+    version = "0.1.2";
+  };
+  mongo = {
+    dependencies = ["bson"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0k0f1826hixqfqgsc9g6rdqrzr5pzy46hszmk6869pmvm638jah1";
+      type = "gem";
+    };
+    version = "2.6.4";
+  };
+  msgpack = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1186lhwnxiw5ryv6dbxrsfy0fajfll2l95kf9pmca50iyiqi86zn";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rl0qy4inf1mp8mybfk56dfga0mvx97zwpmq5xmiwl5r770171nv";
+      type = "gem";
+    };
+    version = "1.13.1";
+  };
+  multipart-post = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zgw9zlwh2a6i1yvhhc4a84ry1hv824d6g2iw2chs3k5aylpmpfj";
+      type = "gem";
+    };
+    version = "2.1.1";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0g9ds2ffzljl6jjmkjffwxc1z6lh5nkqqmhhkxjk71q5ggv0rkpm";
+      type = "gem";
+    };
+    version = "3.1.1";
+  };
+  ruby-kafka = {
+    dependencies = ["digest-crc"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10q92n67s4x80q87ibirvsaryvq4lqyna6xabl5vgnr59xrap6ym";
+      type = "gem";
+    };
+    version = "0.7.9";
+  };
+  serverengine = {
+    dependencies = ["sigdump"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10y535621y0kyn40bkcnl01zrsf3z4abf4mdl8m3fdcmj30mazlw";
+      type = "gem";
+    };
+    version = "2.1.1";
+  };
+  sigdump = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mqf06iw7rymv54y7rgbmfi6ppddgjjmxzi3hrw658n1amp1gwhb";
+      type = "gem";
+    };
+    version = "0.2.4";
+  };
+  strptime = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yj5wwa7wbhgi7w8d9ihpzpf99niw956fhyxddhayj09fgmdcxd8";
+      type = "gem";
+    };
+    version = "0.2.3";
+  };
+  thread_safe = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy";
+      type = "gem";
+    };
+    version = "0.3.6";
+  };
+  thrift = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0aj23ndh5n5yqcvp4c12y7vl5wvxpl66zncf6n6ax2zvb6ig44cv";
+      type = "gem";
+    };
+    version = "0.8.0";
+  };
+  tzinfo = {
+    dependencies = ["thread_safe"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fjx9j327xpkkdlxwmkl3a8wqj7i4l4jwlrv3z13mg95z9wl253z";
+      type = "gem";
+    };
+    version = "1.2.5";
+  };
+  tzinfo-data = {
+    dependencies = ["tzinfo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1m507in0d7vlfgasxpkz3y1a44zp532k9qlqcaz90ay939sz9h5q";
+      type = "gem";
+    };
+    version = "1.2019.2";
+  };
+  webhdfs = {
+    dependencies = ["addressable"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gs6xb9dz9bp5xc38yplfy48jcgj7jrj0zg0vgi7ydkxnkzkhbf2";
+      type = "gem";
+    };
+    version = "0.8.0";
+  };
+  yajl-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16v0w5749qjp13xhjgr2gcsvjv6mf35br7iqwycix1n2h7kfcckf";
+      type = "gem";
+    };
+    version = "1.4.1";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/misc/fondu/default.nix b/nixpkgs/pkgs/tools/misc/fondu/default.nix
new file mode 100644
index 000000000000..772ae236764c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fondu/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  version = "060102";
+  pname = "fondu";
+
+  src = fetchurl {
+    url = "http://fondu.sourceforge.net/fondu_src-${version}.tgz";
+    sha256 = "152prqad9jszjmm4wwqrq83zk13ypsz09n02nrk1gg0fcxfm7fr2";
+  };
+
+  makeFlags = [ "DESTDIR=$(out)" ];
+
+  hardeningDisable = [ "fortify" ];
+
+  meta = {
+    platforms = stdenv.lib.platforms.unix;
+    license = stdenv.lib.licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fontforge/default.nix b/nixpkgs/pkgs/tools/misc/fontforge/default.nix
new file mode 100644
index 000000000000..6239e8395981
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fontforge/default.nix
@@ -0,0 +1,78 @@
+{ stdenv, fetchurl, lib
+, autoconf, automake, gnum4, libtool, perl, gnulib, uthash, pkgconfig, gettext
+, python, freetype, zlib, glib, libungif, libpng, libjpeg, libtiff, libxml2, cairo, pango
+, readline, woff2, zeromq
+, withSpiro ? false, libspiro
+, withGTK ? false, gtk2
+, withPython ? true
+, withExtras ? true
+, Carbon ? null, Cocoa ? null
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fontforge";
+  version = "20190413";
+
+  src = fetchurl {
+    url = "https://github.com/${pname}/${pname}/releases/download/${version}/${pname}-${version}.tar.gz";
+    sha256 = "05v640mnk4fy4jzmxb6c4n4qm800x7hy4sl5gcdgzmm3md2s0qk7";
+  };
+
+  patches = [ ./fontforge-20140813-use-system-uthash.patch ];
+
+  # use $SOURCE_DATE_EPOCH instead of non-deterministic timestamps
+  postPatch = ''
+    find . -type f -name '*.c' -exec sed -r -i 's#\btime\(&(.+)\)#if (getenv("SOURCE_DATE_EPOCH")) \1=atol(getenv("SOURCE_DATE_EPOCH")); else &#g' {} \;
+    sed -r -i 's#author\s*!=\s*NULL#& \&\& !getenv("SOURCE_DATE_EPOCH")#g'                            fontforge/cvexport.c fontforge/dumppfa.c fontforge/print.c fontforge/svg.c fontforge/splineutil2.c
+    sed -r -i 's#\bb.st_mtime#getenv("SOURCE_DATE_EPOCH") ? atol(getenv("SOURCE_DATE_EPOCH")) : &#g'  fontforge/parsepfa.c fontforge/sfd.c fontforge/svg.c
+    sed -r -i 's#^\s*ttf_fftm_dump#if (!getenv("SOURCE_DATE_EPOCH")) ttf_fftm_dump#g'                 fontforge/tottf.c
+    sed -r -i 's#sprintf\(.+ author \);#if (!getenv("SOURCE_DATE_EPOCH")) &#g'                        fontforgeexe/fontinfo.c
+  '';
+
+  # do not use x87's 80-bit arithmetic, rouding errors result in very different font binaries
+  NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isi686 "-msse2 -mfpmath=sse";
+
+  nativeBuildInputs = [ pkgconfig autoconf automake gnum4 libtool perl gettext ];
+  buildInputs = [
+    readline uthash woff2 zeromq
+    python freetype zlib glib libungif libpng libjpeg libtiff libxml2
+  ]
+    ++ lib.optionals withSpiro [libspiro]
+    ++ lib.optionals withGTK [ gtk2 cairo pango ]
+    ++ lib.optionals stdenv.isDarwin [ Carbon Cocoa ];
+
+    configureFlags = [ "--enable-woff2" ]
+    ++ lib.optionals (!withPython) [ "--disable-python-scripting" "--disable-python-extension" ]
+    ++ lib.optional withGTK "--enable-gtk2-use"
+    ++ lib.optional (!withGTK) "--without-x"
+    ++ lib.optional withExtras "--enable-fontforge-extras";
+
+  # work-around: git isn't really used, but configuration fails without it
+  preConfigure = ''
+    # The way $version propagates to $version of .pe-scripts (https://github.com/dejavu-fonts/dejavu-fonts/blob/358190f/scripts/generate.pe#L19)
+    export SOURCE_DATE_EPOCH=$(date -d ${version} +%s)
+
+    export GIT="$(type -P true)"
+    cp -r "${gnulib}" ./gnulib
+    chmod +w -R ./gnulib
+    ./bootstrap --skip-git --gnulib-srcdir=./gnulib --force
+  '';
+
+  doCheck = false; # tries to wget some fonts
+  doInstallCheck = doCheck;
+
+  postInstall =
+    # get rid of the runtime dependency on python
+    lib.optionalString (!withPython) ''
+      rm -r "$out/share/fontforge/python"
+    '';
+
+  enableParallelBuilding = true;
+
+  meta = {
+    description = "A font editor";
+    homepage = http://fontforge.github.io;
+    platforms = stdenv.lib.platforms.all;
+    license = stdenv.lib.licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fontforge/fontforge-20140813-use-system-uthash.patch b/nixpkgs/pkgs/tools/misc/fontforge/fontforge-20140813-use-system-uthash.patch
new file mode 100644
index 000000000000..fb53c619b2bc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fontforge/fontforge-20140813-use-system-uthash.patch
@@ -0,0 +1,31 @@
+--- a/Makefile.am.old	2014-08-12 10:07:32.000000000 +0530
++++ b/Makefile.am	2014-09-08 16:23:56.046996941 +0530
+@@ -43,7 +43,6 @@
+ AM_CPPFLAGS =
+ AM_LDFLAGS =
+ 
+-BUILT_SOURCES = uthash/src
+ EXTRA_DIST =
+ CLEANFILES =
+ MOSTLYCLEANFILES =
+@@ -113,8 +112,7 @@
+ 	Packaging/FontForge-doc.spec \
+ 	Packaging/FontForge.spec \
+ 	Packaging/FontForge.static.spec \
+ 	README \
+-	uthash/src \
+ 	$(NULL)
+ 
+ #--------------------------------------------------------------------------
+@@ -129,11 +127,6 @@
+ 
+ 
+ #--------------------------------------------------------------------------
+-uthash/src:
+-	if [ ! -e uthash/src ]; then \
+-	if [ -e uthash ] ; then rm -r uthash ; fi ; \
+-	git clone https://github.com/troydhanson/uthash ; \
+-	fi ;
+ 
+ # We import a selection of targets from Frank's standard packaging Makefile.
+ 
diff --git a/nixpkgs/pkgs/tools/misc/fontforge/fontforge-fonttools.nix b/nixpkgs/pkgs/tools/misc/fontforge/fontforge-fonttools.nix
new file mode 100644
index 000000000000..ea4acfc5f0bb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fontforge/fontforge-fonttools.nix
@@ -0,0 +1 @@
+{ fontforge }: fontforge.override { withExtras = true; }
diff --git a/nixpkgs/pkgs/tools/misc/fortune/default.nix b/nixpkgs/pkgs/tools/misc/fortune/default.nix
new file mode 100644
index 000000000000..74c21d21fcc3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fortune/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, fetchurl, cmake, recode, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "fortune-mod";
+  version = "2.10.0";
+
+  src = fetchurl {
+    url = "https://www.shlomifish.org/open-source/projects/fortune-mod/arcs/fortune-mod-${version}.tar.xz";
+    sha256 = "07g50hij87jb7m40pkvgd47qfvv4s805lwiz79jbqcxzd7zdyax7";
+  };
+
+  nativeBuildInputs = [ cmake perl ];
+
+  buildInputs = [ recode ];
+
+  cmakeFlags = [
+    "-DLOCALDIR=${placeholder "out"}/share/fortunes"
+  ];
+
+  patches = [ (builtins.toFile "not-a-game.patch" ''
+    diff --git a/CMakeLists.txt b/CMakeLists.txt
+    index 865e855..5a59370 100644
+    --- a/CMakeLists.txt
+    +++ b/CMakeLists.txt
+    @@ -154,7 +154,7 @@ ENDMACRO()
+     my_exe(
+         "fortune"
+         "fortune/fortune.c"
+    -    "games"
+    +    "bin"
+     )
+
+     my_exe(
+    -- 
+  '') ];
+
+  meta = with stdenv.lib; {
+    description = "A program that displays a pseudorandom message from a database of quotations";
+    license = licenses.bsdOriginal;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fpart/default.nix b/nixpkgs/pkgs/tools/misc/fpart/default.nix
new file mode 100644
index 000000000000..e673c73d0961
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fpart/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, fts }:
+
+stdenv.mkDerivation rec {
+  pname = "fpart";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "martymac";
+    repo = "fpart";
+    rev = "${pname}-${version}";
+    sha256 = "17zm3cgp3f2plynqhj8a0hbma5rvawrx5kqygjqyynn7cljv458v";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ fts ];
+
+  postInstall = ''
+    sed "s|^FPART_BIN=.*|FPART_BIN=\"$out/bin/fpart\"|" \
+        -i "$out/bin/fpsync"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Split file trees into bags (called \"partitions\")";
+    longDescription = ''
+      Fpart is a tool that helps you sort file trees and pack them into bags
+      (called "partitions").
+
+      It splits a list of directories and file trees into a certain number of
+      partitions, trying to produce partitions with the same size and number of
+      files. It can also produce partitions with a given number of files or a
+      limited size.
+
+      Once generated, partitions are either printed as file lists to stdout
+      (default) or to files. Those lists can then be used by third party programs.
+
+      Fpart also includes a live mode, which allows it to crawl very large
+      filesystems and produce partitions in live. Hooks are available to act on
+      those partitions (e.g. immediatly start a transfer using rsync(1))
+      without having to wait for the filesystem traversal job to be finished.
+      Used this way, fpart can be seen as a powerful data migration tool.
+    '';
+    homepage = "http://contribs.martymac.org/";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fpp/default.nix b/nixpkgs/pkgs/tools/misc/fpp/default.nix
new file mode 100644
index 000000000000..7f036cb1f908
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fpp/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchFromGitHub, python3 }:
+
+stdenv.mkDerivation rec {
+  pname = "fpp";
+  version = "0.9.2";
+
+  src = fetchFromGitHub {
+    owner = "facebook";
+    repo = "PathPicker";
+    rev = version;
+    sha256 = "08p2xlz045fqyb0aj9pwwf2s5nb4b02i8zj81732q59yx5c6lrlv";
+  };
+
+  postPatch = ''
+    substituteInPlace fpp --replace 'PYTHONCMD="python"' 'PYTHONCMD="${python3.interpreter}"'
+  '';
+
+  installPhase = ''
+    mkdir -p $out/share/fpp $out/bin
+    cp -r fpp src $out/share/fpp
+    ln -s $out/share/fpp/fpp $out/bin/fpp
+  '';
+
+  meta = {
+    description = "CLI program that accepts piped input and presents files for selection";
+    homepage = https://facebook.github.io/PathPicker/;
+    license = stdenv.lib.licenses.bsd3;
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fselect/default.nix b/nixpkgs/pkgs/tools/misc/fselect/default.nix
new file mode 100644
index 000000000000..0685ecf2440a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fselect/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fselect";
+  version = "0.6.8";
+
+  src = fetchFromGitHub {
+    owner = "jhspetersson";
+    repo = "fselect";
+    rev = version;
+    sha256 = "1zccl60l557lhaaqb33myys4vp3jsnjqh3dxb22i46bff28s1w6c";
+  };
+
+  cargoSha256 = "1496zjrkwj5bv08k575m064x0hfk0gpci0dmxvvspj6jf8f8bfm6";
+
+  meta = with stdenv.lib; {
+    description = "Find files with SQL-like queries";
+    homepage = "https://github.com/jhspetersson/fselect";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ filalex77 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fsmark/default.nix b/nixpkgs/pkgs/tools/misc/fsmark/default.nix
new file mode 100644
index 000000000000..ac56d948bdad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fsmark/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "fsmark";
+  version = "3.3";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/fsmark/${version}/fs_mark-${version}.tar.gz";
+    sha256 = "15f8clcz49qsfijdmcz165ysp8v4ybsm57d3dxhhlnq1bp1i9w33";
+  };
+
+  patchPhase = ''
+    sed -i Makefile -e 's/-static //'
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp fs_mark $out/bin/
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Synchronous write workload file system benchmark";
+    homepage = https://sourceforge.net/projects/fsmark/;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.dezgeg ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fsmon/default.nix b/nixpkgs/pkgs/tools/misc/fsmon/default.nix
new file mode 100644
index 000000000000..e8e48d7879a7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fsmon/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "fsmon";
+  version = "1.6.1";
+
+  src = fetchFromGitHub {
+    owner = "nowsecure";
+    repo = "fsmon";
+    rev = version;
+    sha256 = "1zpac37biy8jz8234q0krn7pjggz33k0grz590ravbjgfawm1ccy";
+  };
+
+  installPhase = ''
+    make install PREFIX=$out
+  '';
+
+  meta = with stdenv.lib; {
+    description = "FileSystem Monitor utility";
+    homepage = https://github.com/nowsecure/fsmon;
+    license = licenses.mit;
+    maintainers = [ maintainers.dezgeg ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fsql/default.nix b/nixpkgs/pkgs/tools/misc/fsql/default.nix
new file mode 100644
index 000000000000..4e7db2dc4847
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fsql/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "fsql";
+  version = "0.3.1";
+
+  goPackagePath = "github.com/kshvmdn/fsql";
+
+  src = fetchFromGitHub {
+    owner = "kshvmdn";
+    repo = "fsql";
+    rev = "v${version}";
+    sha256 = "1accpxryk4744ydfrqc3la5k376ji11yr84n66dz5cx0f3n71vmz";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Search through your filesystem with SQL-esque queries";
+    homepage = https://github.com/kshvmdn/fsql;
+    license = licenses.mit;
+    maintainers = with maintainers; [ pSub ];
+    platforms = platforms.unix;
+    inherit version;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/fwup/default.nix b/nixpkgs/pkgs/tools/misc/fwup/default.nix
new file mode 100644
index 000000000000..99dcc194d011
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fwup/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, lib, fetchFromGitHub, autoreconfHook, makeWrapper, pkgconfig
+, zlib, lzma, bzip2, mtools, dosfstools, zip, unzip, libconfuse, libsodium
+, libarchive, darwin, coreutils }:
+
+stdenv.mkDerivation rec {
+  pname = "fwup";
+  version = "1.5.1";
+
+  src = fetchFromGitHub {
+    owner = "fhunleth";
+    repo = "fwup";
+    rev = "v${version}";
+    sha256 = "08gscwdq7fwfpk3mf7dfdf64n5ijm5kjb7f5wrzzvpnnqz24xnb0";
+  };
+
+  doCheck = true;
+  patches = lib.optional stdenv.isDarwin [ ./fix-testrunner-darwin.patch ];
+
+  nativeBuildInputs = [ pkgconfig autoreconfHook makeWrapper ];
+  buildInputs = [ zlib lzma bzip2 libconfuse libsodium libarchive ]
+    ++ lib.optionals stdenv.isDarwin [
+      darwin.apple_sdk.frameworks.DiskArbitration
+    ];
+  propagatedBuildInputs = [ zip unzip mtools dosfstools coreutils ];
+
+  meta = with stdenv.lib; {
+    description = "Configurable embedded Linux firmware update creator and runner";
+    homepage = https://github.com/fhunleth/fwup;
+    license = licenses.asl20;
+    maintainers = [ maintainers.georgewhewell ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fwup/fix-testrunner-darwin.patch b/nixpkgs/pkgs/tools/misc/fwup/fix-testrunner-darwin.patch
new file mode 100644
index 000000000000..b04b436ff5b1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fwup/fix-testrunner-darwin.patch
@@ -0,0 +1,25 @@
+diff --git a/tests/common-orig.sh b/tests/common.sh
+index 1f2673f..79dcf74 100755
+--- a/tests/common-orig.sh
++++ b/tests/common.sh
+@@ -21,20 +21,6 @@ else
+ fi
+ 
+ case "$HOST_OS" in
+-    Darwin)
+-	# BSD stat
+-        STAT_FILESIZE_FLAGS="-f %z"
+-
+-	# Not -d?
+-        BASE64_DECODE=-D
+-
+-        READLINK=/usr/local/bin/greadlink
+-        [ -e $READLINK ] || ( echo "Please run 'brew install coreutils' to install greadlink"; exit 1 )
+-        [ -e /usr/local/bin/mdir ] || ( echo "Please run 'brew install mtools' to install mdir"; exit 1 )
+-
+-        FSCK_FAT=fsck_msdos
+-        TIMEOUT=gtimeout
+-        ;;
+     FreeBSD|NetBSD|OpenBSD|DragonFly)
+ 	# BSD stat
+         STAT_FILESIZE_FLAGS="-f %z"
diff --git a/nixpkgs/pkgs/tools/misc/fxlinuxprintutil/default.nix b/nixpkgs/pkgs/tools/misc/fxlinuxprintutil/default.nix
new file mode 100644
index 000000000000..7965b591afbb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fxlinuxprintutil/default.nix
@@ -0,0 +1,59 @@
+{ stdenv, lib, fetchzip, substituteAll, dpkg, autoPatchelfHook, cups, tcl, tk, xorg, makeWrapper }:
+let
+  debPlatform =
+    if stdenv.hostPlatform.system == "x86_64-linux" then "amd64"
+    else if stdenv.hostPlatform.system == "i686-linux" then "i386"
+         else throw "Unsupported system: ${stdenv.hostPlatform.system}";
+in
+stdenv.mkDerivation rec {
+  pname = "fxlinuxprintutil";
+  version = "1.1.1-1";
+
+  src = fetchzip {
+    url = "https://onlinesupport.fujixerox.com/driver_downloads/fxlinuxpdf112119031.zip";
+    sha256 = "1mv07ch6ysk9bknfmjqsgxb803sj6vfin29s9knaqv17jvgyh0n3";
+    curlOpts = "--user-agent Mozilla/5.0";  # HTTP 410 otherwise
+  };
+
+  patches = [
+    # replaces references to “path/to/fxlputil” via $0 that are broken by our wrapProgram
+    # with /nix/store/fxlinuxprintutil/bin/fxlputil
+    ./fxlputil.patch
+
+    # replaces the code that looks for Tcl packages in the working directory and /usr/lib
+    # or /usr/lib64 with /nix/store/fxlinuxprintutil/lib
+    ./fxlputil.tcl.patch
+
+    # replaces the code that looks for X11’s locale.alias in /usr/share/X11/locale or
+    # /usr/lib/X11/locale with /nix/store/libX11/share/X11/locale
+    (substituteAll {
+      src = ./fxlocalechk.tcl.patch;
+      inherit (xorg) libX11;
+    })
+  ];
+
+  nativeBuildInputs = [ dpkg autoPatchelfHook makeWrapper ];
+  buildInputs = [ cups tcl tk ];
+
+  sourceRoot = ".";
+  unpackCmd = "dpkg-deb -x $curSrc/${pname}_${version}_${debPlatform}.deb .";
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out
+    mv usr/bin $out
+    mv usr/lib $out
+
+    wrapProgram $out/bin/fxlputil --prefix PATH : ${lib.makeBinPath [ tcl tk ]}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Optional configuration tool for fxlinuxprint";
+    homepage = https://onlinesupport.fujixerox.com;
+    license = licenses.unfree;
+    maintainers = with maintainers; [ delan ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fxlinuxprintutil/fxlocalechk.tcl.patch b/nixpkgs/pkgs/tools/misc/fxlinuxprintutil/fxlocalechk.tcl.patch
new file mode 100644
index 000000000000..fbf211065e9b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fxlinuxprintutil/fxlocalechk.tcl.patch
@@ -0,0 +1,18 @@
+diff --git a/usr/bin/fxlocalechk.tcl b/usr/bin/fxlocalechk.tcl
+index f0ebc6c..c3486fe 100755
+--- a/usr/bin/fxlocalechk.tcl
++++ b/usr/bin/fxlocalechk.tcl
+@@ -12,12 +12,7 @@
+ #THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ 
+ #i18N
+-#---- check locale with environment variable
+-set locale_alias_path  /usr/share/X11/locale
+-
+-if {[file exists $locale_alias_path/locale.alias] != 1} {
+-    set locale_alias_path /usr/lib/X11/locale
+-}
++set locale_alias_path @libX11@/share/X11/locale
+ 
+ proc conv_locale {alias} {
+     global env envL locale_alias_path
diff --git a/nixpkgs/pkgs/tools/misc/fxlinuxprintutil/fxlputil.patch b/nixpkgs/pkgs/tools/misc/fxlinuxprintutil/fxlputil.patch
new file mode 100644
index 000000000000..972152b2cc3e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fxlinuxprintutil/fxlputil.patch
@@ -0,0 +1,28 @@
+diff --git a/usr/bin/fxlputil b/usr/bin/fxlputil
+index cdac66d..aa86d02 100755
+--- a/usr/bin/fxlputil
++++ b/usr/bin/fxlputil
+@@ -7,17 +7,19 @@
+ #	TCL=`which fxlputil`
+ #fi
+ 
++wrapper=$(dirname $0)/fxlputil
++
+ #set LC_ALL
+-locale=`tclsh $0lo.tcl`
++locale=`tclsh ${wrapper}lo.tcl`
+ 
+ case $locale in
+ 	"ja")
+-		env LC_ALL=ja_JP.UTF-8 wish $0.tcl $1
++		env LC_ALL=ja_JP.UTF-8 wish ${wrapper}.tcl $1
+ 		;;
+ 	"en")
+-		env LC_ALL=en_US.ISO8859-1 wish $0.tcl $1
++		env LC_ALL=en_US.ISO8859-1 wish ${wrapper}.tcl $1
+ 		;;
+ 	*)
+-		env LC_ALL=C wish $0.tcl $1
++		env LC_ALL=C wish ${wrapper}.tcl $1
+ 		;;
+ esac
diff --git a/nixpkgs/pkgs/tools/misc/fxlinuxprintutil/fxlputil.tcl.patch b/nixpkgs/pkgs/tools/misc/fxlinuxprintutil/fxlputil.tcl.patch
new file mode 100644
index 000000000000..2bfbab450cb0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fxlinuxprintutil/fxlputil.tcl.patch
@@ -0,0 +1,21 @@
+diff --git a/usr/bin/fxlputil.tcl b/usr/bin/fxlputil.tcl
+index 02eeaf6..788ed5a 100755
+--- a/usr/bin/fxlputil.tcl
++++ b/usr/bin/fxlputil.tcl
+@@ -25,14 +25,8 @@ catch {namespace import combobox::*}
+ 
+ 
+ 
+-lappend auto_path $cwd
+-
+-if {[lsearch $auto_path /usr/lib] == -1} {
+-	lappend auto_path /usr/lib
+-}
+-if {[lsearch $auto_path /usr/lib64] == -1} {
+-	lappend auto_path /usr/lib64
+-}
++# https://stackoverflow.com/a/23287132
++lappend auto_path [file join [file dirname [file dirname [info script]]] lib]
+ 
+ package require fxlputil
+ 
diff --git a/nixpkgs/pkgs/tools/misc/fzf/default.nix b/nixpkgs/pkgs/tools/misc/fzf/default.nix
new file mode 100644
index 000000000000..960373e7e5fc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fzf/default.nix
@@ -0,0 +1,64 @@
+{ lib, buildGoModule, fetchFromGitHub, writeText, runtimeShell, ncurses, }:
+
+buildGoModule rec {
+  pname = "fzf";
+  version = "0.20.0";
+
+  src = fetchFromGitHub {
+    owner = "junegunn";
+    repo = pname;
+    rev = version;
+    sha256 = "02zy3c4k84rzqdkaf04idbj10v286hi0ix1xl2qsz1wrblh168w8";
+  };
+
+  modSha256 = "12lnv8b96adpcg9qfizcyd9nxz590nxd82xch6ij719zlqyps143";
+
+  outputs = [ "out" "man" ];
+
+  fishHook = writeText "load-fzf-keybindings.fish" "fzf_key_bindings";
+
+  buildInputs = [ ncurses ];
+
+  patchPhase = ''
+    sed -i -e "s|expand('<sfile>:h:h')|'$bin'|" plugin/fzf.vim
+
+    # Original and output files can't be the same
+    if cmp -s $src/plugin/fzf.vim plugin/fzf.vim; then
+      echo "Vim plugin patch not applied properly. Aborting" && \
+      exit 1
+    fi
+  '';
+
+  preInstall = ''
+    mkdir -p $out/share/fish/{vendor_functions.d,vendor_conf.d}
+    cp $src/shell/key-bindings.fish $out/share/fish/vendor_functions.d/fzf_key_bindings.fish
+    cp ${fishHook} $out/share/fish/vendor_conf.d/load-fzf-key-bindings.fish
+  '';
+
+  postInstall = ''
+    cp $src/bin/fzf-tmux $out/bin
+
+    mkdir -p $man/share/man
+    cp -r $src/man/man1 $man/share/man
+
+    mkdir -p $out/share/vim-plugins/${pname}
+    cp -r $src/plugin $out/share/vim-plugins/${pname}
+
+    cp -R $src/shell $out/share/fzf
+    cat <<SCRIPT > $out/bin/fzf-share
+    #!${runtimeShell}
+    # Run this script to find the fzf shared folder where all the shell
+    # integration scripts are living.
+    echo $out/share/fzf
+    SCRIPT
+    chmod +x $out/bin/fzf-share
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/junegunn/fzf";
+    description = "A command-line fuzzy finder written in Go";
+    license = licenses.mit;
+    maintainers = with maintainers; [ filalex77 ma27 ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fzy/default.nix b/nixpkgs/pkgs/tools/misc/fzy/default.nix
new file mode 100644
index 000000000000..24daa7fc81fa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fzy/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "fzy";
+  version = "1.0";
+
+  src = fetchFromGitHub {
+    owner = "jhawthorn";
+    repo = "fzy";
+    rev = version;
+    sha256 = "1gkzdvj73f71388jvym47075l9zw61v6l8wdv2lnc0mns6dxig0k";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with stdenv.lib; {
+    description = "A better fuzzy finder";
+    homepage = https://github.com/jhawthorn/fzy;
+    license = licenses.mit;
+    maintainers = with maintainers; [ dywedir ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gams/default.nix b/nixpkgs/pkgs/tools/misc/gams/default.nix
new file mode 100644
index 000000000000..ba0b76026a58
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gams/default.nix
@@ -0,0 +1,50 @@
+{ stdenv, fetchurl, unzip, file, licenseFile ? null, optgamsFile ? null}:
+
+assert licenseFile != null;
+
+stdenv.mkDerivation rec {
+  version = "25.0.2";
+  pname = "gams";
+  src = fetchurl {
+    url = "https://d37drm4t2jghv5.cloudfront.net/distributions/${version}/linux/linux_x64_64_sfx.exe";
+    sha256 = "4f95389579f33ff7c2586838a2c19021aa0746279555cbb51aa6e0efd09bd297";
+  };
+  unpackCmd = "unzip $src";
+  buildInputs = [ unzip file ];
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p "$out/bin" "$out/share/gams"
+    cp -a * "$out/share/gams"
+
+    cp ${licenseFile} $out/share/gams/gamslice.txt
+  '' + stdenv.lib.optionalString (optgamsFile != null) ''
+    cp ${optgamsFile} $out/share/gams/optgams.def
+    ln -s $out/share/gams/optgams.def $out/bin/optgams.def
+  '';
+
+  postFixup = ''
+    for f in $out/share/gams/*; do
+      if [[ -x $f ]] && [[ -f $f ]] && [[ ! $f =~ .*\.so$ ]]; then
+        if patchelf \
+          --set-rpath "$out/share/gams" \
+          --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) $f; then
+          ln -s $f $out/bin/$(basename $f)
+        fi
+      fi
+    done
+  '';
+
+  meta = with stdenv.lib;{
+    description = "General Algebraic Modeling System";
+    longDescription = ''
+      The General Algebraic Modeling System is a high-level modeling system for mathematical optimization.
+      GAMS is designed for modeling and solving linear, nonlinear, and mixed-integer optimization problems.
+    '';
+    homepage = https://www.gams.com/;
+    license = licenses.unfree;
+    maintainers = [ maintainers.Scriptkiddi ];
+    platforms = platforms.linux;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/gawp/default.nix b/nixpkgs/pkgs/tools/misc/gawp/default.nix
new file mode 100644
index 000000000000..865ce3c440d1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gawp/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, buildGoPackage, fetchgit }:
+
+with builtins;
+
+buildGoPackage rec {
+  pname = "gawp";
+  version = "20160121-${stdenv.lib.strings.substring 0 7 rev}";
+  rev = "5db2d8faa220e8d6eaf8677354bd197bf621ff7f";
+  
+  goPackagePath = "github.com/martingallagher/gawp";
+
+  src = fetchgit {
+    inherit rev;
+    url = "https://github.com/martingallagher/gawp";
+    sha256 = "0bbmbb1xxdgvqvg1ssn9d4j213li7bbbx3y42iz4fs10xv7x4r0c";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = {
+    homepage = "https://github.com/martingallagher/gawp";
+    description = "A simple, configurable, file watching, job execution tool";
+    license = stdenv.lib.licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gawp/deps.nix b/nixpkgs/pkgs/tools/misc/gawp/deps.nix
new file mode 100644
index 000000000000..cf577a30354c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gawp/deps.nix
@@ -0,0 +1,29 @@
+[
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "d9157a9621b69ad1d8d77a1933590c416593f24f";
+      sha256 = "1asdbp7rj1j1m1aar1a022wpcwbml6zih6cpbxaw7b2m8v8is931";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/fsnotify.v1";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/fsnotify.v1";
+      rev = "96c060f6a6b7e0d6f75fddd10efeaca3e5d1bcb0";
+      sha256 = "1308z1by82fbymcra26wjzw7lpjy91kbpp2skmwqcq4q1iwwzvk2";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/yaml.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/yaml.v2";
+      rev = "a83829b6f1293c91addabc89d0571c246397bbf4";
+      sha256 = "1m4dsmk90sbi17571h6pld44zxz7jc4lrnl4f27dpd1l8g5xvjhh";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/misc/gbdfed/Makefile.patch b/nixpkgs/pkgs/tools/misc/gbdfed/Makefile.patch
new file mode 100644
index 000000000000..9c437deca07c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gbdfed/Makefile.patch
@@ -0,0 +1,15 @@
+diff --git "a/Makefile.in" "b/Makefile.in"
+index b482958..472b8da 100644
+--- "a/Makefile.in"
++++ "b/Makefile.in"
+@@ -27,9 +27,7 @@ MKINSTALLDIRS = ./mkinstalldirs
+ CC = @CC@
+ CFLAGS = @XX_CFLAGS@ @CFLAGS@
+ 
+-DEFINES = @DEFINES@ -DG_DISABLE_DEPRECATED \
+-	-DGDK_DISABLE_DEPRECATED -DGDK_PIXBUF_DISABLE_DEPRECATED \
+-	-DGTK_DISABLE_DEPRECATED
++DEFINES = @DEFINES@
+ 
+ SRCS = bdf.c \
+        bdfcons.c \
diff --git a/nixpkgs/pkgs/tools/misc/gbdfed/default.nix b/nixpkgs/pkgs/tools/misc/gbdfed/default.nix
new file mode 100644
index 000000000000..9b41dba4e259
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gbdfed/default.nix
@@ -0,0 +1,32 @@
+ { stdenv, fetchurl, pkgconfig, freetype, gtk }:
+
+stdenv.mkDerivation rec {
+  version = "1.6";
+  pname = "gbdfed";
+
+  src = fetchurl {
+    url = "http://sofia.nmsu.edu/~mleisher/Software/gbdfed/${pname}-${version}.tar.bz2";
+    sha256 = "0g09k6wim58hngxncq2brr7mwjm92j3famp0vs4b3p48wr65vcjx";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ freetype gtk ];
+
+  patches = [ ./Makefile.patch ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = {
+    description = "Bitmap Font Editor";
+    longDescription = ''
+      gbdfed lets you interactively create new bitmap font files or modify existing ones.
+      It allows editing multiple fonts and multiple glyphs, 
+      it allows cut and paste operations between fonts and glyphs and editing font properties.
+      The editor works natively with BDF fonts. 
+    '';
+    homepage = http://sofia.nmsu.edu/~mleisher/Software/gbdfed/;
+    license = stdenv.lib.licenses.mit;
+    maintainers = [ stdenv.lib.maintainers.linquize ];
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/geekbench/default.nix b/nixpkgs/pkgs/tools/misc/geekbench/default.nix
new file mode 100644
index 000000000000..b18ac1093829
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/geekbench/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "geekbench";
+  version = "5.1.0";
+
+  src = fetchurl {
+    url = "https://cdn.geekbench.com/Geekbench-${version}-Linux.tar.gz";
+    sha256 = "1hqqwk5hbqgrxfqlcbgk6rv3a71k65psxcqa6hw41y9jymnm3dp3";
+  };
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -r geekbench.plar geekbench5 geekbench_x86_64 $out/bin
+
+    for f in geekbench5 geekbench_x86_64 ; do
+      patchelf --set-interpreter $(cat ${stdenv.cc}/nix-support/dynamic-linker) $out/bin/$f
+      wrapProgram $out/bin/$f --prefix LD_LIBRARY_PATH : "${stdenv.lib.makeLibraryPath [ stdenv.cc.cc.lib ]}"
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Cross-platform benchmark";
+    homepage = https://geekbench.com/;
+    license = licenses.unfree;
+    maintainers = [ maintainers.michalrus ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/geteltorito/default.nix b/nixpkgs/pkgs/tools/misc/geteltorito/default.nix
new file mode 100644
index 000000000000..d6fbb6233312
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/geteltorito/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, perl, ronn, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "geteltorito";
+  version = "0.6";
+
+  src = fetchurl {
+    url = "https://userpages.uni-koblenz.de/~krienke/ftp/noarch/geteltorito/geteltorito-${version}.tar.gz";
+    sha256 = "1gkbm9ahj2mgqrkrfpibzclsriqgsbsvjh19fr815vpd9f6snkxv";
+  };
+
+  buildInputs = [ perl ronn ];
+
+  unpackCmd = "";
+  dontBuild = true;
+  configurePhase = "";
+  installPhase = ''
+    # reformat README to ronn markdown
+    cat > README.new <<EOF
+    geteltorito -- ${meta.description}
+    ===========
+
+    ## SYNOPSIS
+
+    EOF
+
+    # skip the first two lines
+    # -e reformat function call
+    # -e reformat example
+    # -e make everything else (that is no code) that contains `: ` a list item
+    tail -n +3 README | sed \
+        -e 's/^\(call:\s*\)\(getelt.*\)$/\1`\2`/' \
+        -e 's/^\(example:\s*\)\(getelt.*\)$/\1 `\2`/' \
+        -e 's/^\(.*: \)/- \1/g' \
+           >> README.new
+    mkdir -p $out/man/man1
+    ronn --roff README.new --pipe > $out/man/man1/geteltorito.1
+    install -vD geteltorito $out/bin/geteltorito
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Extract the initial/default boot image from a CD image if existent";
+    homepage = https://userpages.uni-koblenz.de/~krienke/ftp/noarch/geteltorito/;
+    maintainers = [ maintainers.Profpatsch ];
+    license = licenses.gpl2;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/getopt/default.nix b/nixpkgs/pkgs/tools/misc/getopt/default.nix
new file mode 100644
index 000000000000..d168c8aaa14e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/getopt/default.nix
@@ -0,0 +1,23 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  pname = "getopt";
+  version = "1.1.6";
+  src = fetchurl {
+    url = "http://frodo.looijaard.name/system/files/software/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "1zn5kp8ar853rin0ay2j3p17blxy16agpp8wi8wfg4x98b31vgyh";
+  };
+
+  makeFlags = [
+    "WITHOUT_GETTEXT=1"
+    "LIBCGETOPT=0"
+    "prefix=${placeholder "out"}"
+    "CC:=$(CC)"
+  ];
+
+  meta = {
+    platforms = stdenv.lib.platforms.unix;
+    homepage = http://frodo.looijaard.name/project/getopt;
+    description = "Parses command-line arguments from shell scripts";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gh-ost/default.nix b/nixpkgs/pkgs/tools/misc/gh-ost/default.nix
new file mode 100644
index 000000000000..e5c0997c8e3e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gh-ost/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+let
+  goPackagePath = "github.com/github/gh-ost";
+  version = "1.0.47";
+  sha256 = "0yyhkqis4j2cl6w2drrjxdy5j8x9zp4j89gsny6w4ql8gm5qgvvk";
+
+in
+buildGoPackage ({
+    pname = "gh-ost";
+    inherit version;
+    inherit goPackagePath;
+
+    src = fetchFromGitHub {
+      owner = "github";
+      repo  = "gh-ost";
+      rev   = "v${version}";
+      inherit sha256;
+    };
+
+    meta = with stdenv.lib; {
+      description = "Triggerless online schema migration solution for MySQL";
+      homepage = https://github.com/github/gh-ost;
+      license = licenses.mit;
+    };
+})
+
diff --git a/nixpkgs/pkgs/tools/misc/gibo/default.nix b/nixpkgs/pkgs/tools/misc/gibo/default.nix
new file mode 100644
index 000000000000..a8e957ce4840
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gibo/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchFromGitHub, coreutils, findutils, git }:
+
+stdenv.mkDerivation rec {
+  pname = "gibo";
+  version = "1.0.6";
+
+  src = fetchFromGitHub {
+    owner = "simonwhitaker";
+    repo = "gibo";
+    rev = version;
+    sha256 = "07j3sv9ar9l074krajw8nfmsfmdp836irsbd053dbqk2v880gfm6";
+  };
+
+  phases = [ "unpackPhase" "installPhase" "fixupPhase" ];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/etc/bash_completion.d
+    cp gibo $out/bin
+    cp gibo-completion.bash $out/etc/bash_completion.d
+
+    sed -e 's|\<git |${git}/bin/git |g' \
+        -e 's|\<basename |${coreutils}/bin/basename |g' \
+        -i "$out/bin/gibo"
+    sed -e 's|\<find |${findutils}/bin/find |g' \
+        -i "$out/etc/bash_completion.d/gibo-completion.bash"
+  '';
+
+  meta = {
+    homepage = https://github.com/simonwhitaker/gibo;
+    license = stdenv.lib.licenses.publicDomain;
+    description = "A shell script for easily accessing gitignore boilerplates";
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gif-for-cli/default.nix b/nixpkgs/pkgs/tools/misc/gif-for-cli/default.nix
new file mode 100644
index 000000000000..771fc354da42
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gif-for-cli/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitHub, python3Packages, ffmpeg, zlib, libjpeg }:
+
+python3Packages.buildPythonApplication {
+  pname = "gif-for-cli";
+  version = "unstable-2018-08-14";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "gif-for-cli";
+    rev = "9696f25fea2e38499b7c248a3151030c3c68bb00";
+    sha256 = "1rj8wjfsabn27k1ds7a5fdqgf2r28zpz4lvhbzssjfj1yf0mfh7s";
+  };
+
+  checkInputs = [ python3Packages.coverage ];
+  buildInputs = [ ffmpeg zlib libjpeg ];
+  propagatedBuildInputs = with python3Packages; [ pillow requests x256 ];
+
+  meta = with stdenv.lib; {
+    description = "Render gifs as ASCII art in your cli";
+    longDescription = "Takes in a GIF, short video, or a query to the Tenor GIF API and converts it to animated ASCII art.";
+    homepage = https://github.com/google/gif-for-cli;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ Scriptkiddi ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/git-fire/default.nix b/nixpkgs/pkgs/tools/misc/git-fire/default.nix
new file mode 100644
index 000000000000..0b5deccaa904
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/git-fire/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+  name = "git-fire-unstable-2017-08-27";
+
+  src = fetchFromGitHub {
+    owner = "qw3rtman";
+    repo = "git-fire";
+    rev = "d72b68ed356f726c77c60294f9220275f16c9931";
+    sha256 = "1hdwkhyjjx31y0lpjkhbb4f5y9f7g70fnd4c2246cmk2rbsvj5b2";
+  };
+
+  installPhase = ''
+    install -D -m755 $src/git-fire $out/bin/git-fire
+  '';
+
+  meta = with stdenv.lib; {
+    description = ''
+      Push ALL changes in a git repository
+    '';
+    longDescription = ''
+      In the event of an emergency (fire, etc.), automatically commit all changes/files in a repository, pushing to all known remotes all commits and stashes.
+    '';
+    homepage = "https://github.com/qw3rtman/git-fire";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.swflint ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/git-town/default.nix b/nixpkgs/pkgs/tools/misc/git-town/default.nix
new file mode 100644
index 000000000000..5438f71930da
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/git-town/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }: 
+
+  buildGoPackage rec {
+    pname = "git-town";
+    version = "7.2.0";
+
+    goPackagePath = "github.com/Originate/git-town";
+
+    src = fetchFromGitHub {
+      owner = "Originate";
+      repo = "git-town";
+      rev = "v${version}";
+      sha256 = "0hr0c6iya34lanfhsg9kj03l4ajalcfxkbn4bgwh0749smhi6mrj";
+    };
+
+    buildFlagsArray = [ "-ldflags=-X github.com/Originate/git-town/src/cmd.version=v${version} -X github.com/Originate/git-town/src/cmd.buildDate=nix" ];
+
+    meta = with stdenv.lib; {
+      description = "Generic, high-level git support for git-flow workflows";
+      homepage = http://www.git-town.com/;
+      maintainers = [ maintainers.allonsy ];
+      license = licenses.mit;
+    };
+  }
+
diff --git a/nixpkgs/pkgs/tools/misc/gnokii/default.nix b/nixpkgs/pkgs/tools/misc/gnokii/default.nix
new file mode 100644
index 000000000000..581a1f84fc7f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gnokii/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, intltool, perl, gettext, libusb, pkgconfig, bluez
+, readline, pcsclite, libical, gtk2, glib, libXpm }:
+
+stdenv.mkDerivation rec {
+  pname = "gnokii";
+  version = "0.6.31";
+
+  src = fetchurl {
+    sha256 = "0sjjhm40662bj6j0jh3sd25b8nww54nirpwamz618rg6pb5hjwm8";
+    url = "https://www.gnokii.org/download/gnokii/${pname}-${version}.tar.gz";
+  };
+
+  buildInputs = [
+    perl intltool gettext libusb
+    glib gtk2 pkgconfig bluez readline
+    libXpm pcsclite libical
+  ];
+
+  meta = {
+    description = "Cellphone tool";
+    homepage = http://www.gnokii.org;
+    maintainers = [ stdenv.lib.maintainers.raskin ];
+    platforms = stdenv.lib.platforms.linux;
+    broken = true; # 2018-04-10
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gnuvd/default.nix b/nixpkgs/pkgs/tools/misc/gnuvd/default.nix
new file mode 100644
index 000000000000..9369c31fdeb5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gnuvd/default.nix
@@ -0,0 +1,17 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation {
+  name = "gnuvd-1.0.12";
+
+  src = fetchurl {
+    url = https://www.djcbsoftware.nl/code/gnuvd/gnuvd-1.0.12.tar.gz ;
+    sha256 = "0mpy76a0pxy62zjiihlzmvl4752hiwxhfs8rm1v5zgdr78acxyxz";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Command-line dutch dictionary application";
+    homepage = http://www.djcbsoftware.nl/code/gnuvd/;
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/goaccess/default.nix b/nixpkgs/pkgs/tools/misc/goaccess/default.nix
new file mode 100644
index 000000000000..0fe9001fcdbe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/goaccess/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl, pkgconfig, ncurses, glib, libmaxminddb }:
+
+stdenv.mkDerivation rec {
+  version = "1.3";
+  pname = "goaccess";
+
+  src = fetchurl {
+    url = "https://tar.goaccess.io/goaccess-${version}.tar.gz";
+    sha256 = "16vv3pj7pbraq173wlxa89jjsd279004j4kgzlrsk1dz4if5qxwc";
+  };
+
+  configureFlags = [
+    "--enable-geoip=mmdb"
+    "--enable-utf8"
+  ];
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [
+    libmaxminddb
+    ncurses
+    glib
+  ];
+
+  meta = {
+    description = "Real-time web log analyzer and interactive viewer that runs in a terminal in *nix systems";
+    homepage    = https://goaccess.io;
+    license     = stdenv.lib.licenses.mit;
+    platforms   = stdenv.lib.platforms.linux ++ stdenv.lib.platforms.darwin;
+    maintainers = with stdenv.lib.maintainers; [ ederoyd46 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gosu/default.nix b/nixpkgs/pkgs/tools/misc/gosu/default.nix
new file mode 100644
index 000000000000..bd53529a5d25
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gosu/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, buildGoPackage, fetchgit }:
+
+buildGoPackage rec {
+  pname = "gosu";
+  version = "2017-05-09";
+  rev = "e87cf95808a7b16208515c49012aa3410bc5bba8";
+
+  goPackagePath = "github.com/tianon/gosu";
+
+  src = fetchgit {
+    inherit rev;
+    url = "https://github.com/tianon/gosu";
+    sha256 = "1qp1cfx0hrr4qlnh7rhjb4xlxv9697flmgzzl6jcdkrpk1f0bz8m";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = {
+    description= "Tool that avoids TTY and signal-forwarding behavior of sudo and su";
+    homepage = "https://github.com/tianon/gosu";
+    license = stdenv.lib.licenses.gpl3;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gosu/deps.nix b/nixpkgs/pkgs/tools/misc/gosu/deps.nix
new file mode 100644
index 000000000000..9bdfa3923401
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gosu/deps.nix
@@ -0,0 +1,11 @@
+[
+  {
+    goPackagePath = "github.com/opencontainers/runc";
+    fetch = {
+      type = "git";
+      url = "https://github.com/opencontainers/runc";
+      rev = "5274430fee9bc930598cfd9c9dbd33213f79f96e";
+      sha256 = "149057gm2y1mc45s7bh43c1ngjg1m54jkpaxw534ir9v5mb1zsxx";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/misc/gotify-cli/default.nix b/nixpkgs/pkgs/tools/misc/gotify-cli/default.nix
new file mode 100644
index 000000000000..a4b9af09712e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gotify-cli/default.nix
@@ -0,0 +1,26 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "gotify-cli";
+  version = "2.1.1";
+
+  src = fetchFromGitHub {
+    owner = "gotify";
+    repo = "cli";
+    rev = "v${version}";
+    sha256 = "131gs6xzfggnrzq5jgyky23zvcmhx3q3hd17xvqxd02s2i9x1mg4";
+  };
+
+  modSha256 = "1lrsg33zd7m24za2gv407hz02n3lmz9qljfk82whlj44hx7kim1z";
+
+  postInstall = ''
+    mv $out/bin/cli $out/bin/gotify
+  '';
+
+  meta = with lib; {
+    license = licenses.mit;
+    homepage = https://github.com/gotify/cli;
+    description = "A command line interface for pushing messages to gotify/server.";
+    maintainers = with maintainers; [ ma27 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gparted/default.nix b/nixpkgs/pkgs/tools/misc/gparted/default.nix
new file mode 100644
index 000000000000..6b32c408ed93
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gparted/default.nix
@@ -0,0 +1,52 @@
+{ stdenv, fetchurl, intltool, gettext, makeWrapper, coreutils, gnused, gnome3
+, gnugrep, parted, glib, libuuid, pkgconfig, gtkmm3, libxml2
+, gpart, hdparm, procps, utillinux, polkit, wrapGAppsHook, substituteAll
+}:
+
+stdenv.mkDerivation rec {
+  name = "gparted-1.0.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/gparted/${name}.tar.gz";
+    sha256 = "0mdvn85jvy72ff7nds3dakx9kzknh8gx1z8i0w2sf970q03qp2z4";
+  };
+
+  # Tries to run `pkexec --version` to get version.
+  # however the binary won't be suid so it returns
+  # an error preventing the program from detection
+  patches = [
+    (substituteAll {
+      src = ./polkit.patch;
+      polkit_version = polkit.version;
+    })
+  ];
+
+  configureFlags = [ "--disable-doc" ];
+
+  buildInputs = [ parted glib libuuid gtkmm3 libxml2 polkit.bin gnome3.adwaita-icon-theme  ];
+  nativeBuildInputs = [ intltool gettext pkgconfig wrapGAppsHook ];
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+       --prefix PATH : "${stdenv.lib.makeBinPath [ gpart hdparm utillinux procps coreutils gnused gnugrep ]}"
+    )
+  '';
+
+  # Doesn't get installed automaticallly if PREFIX != /usr
+  postInstall = ''
+    install -D -m0644 org.gnome.gparted.policy \
+      $out/share/polkit-1/actions/org.gnome.gparted.policy
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Graphical disk partitioning tool";
+    longDescription = ''
+      GNOME Partition Editor for creating, reorganizing, and deleting disk
+      partitions. GParted enables you to change the partition organization
+      while preserving the partition contents.
+    '';
+    homepage = https://gparted.org;
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gparted/polkit.patch b/nixpkgs/pkgs/tools/misc/gparted/polkit.patch
new file mode 100644
index 000000000000..a42ed785de94
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gparted/polkit.patch
@@ -0,0 +1,12 @@
+diff -ru old/gparted-1.0.0/configure gparted-1.0.0/configure
+--- old/gparted-1.0.0/configure	2019-05-29 12:02:13.000000000 -0400
++++ gparted-1.0.0/configure	2019-08-08 18:09:52.792795781 -0400
+@@ -16145,7 +16145,7 @@
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pkexec >= $PKEXEC_REQUIRED_VERSION" >&5
+ $as_echo_n "checking for pkexec >= $PKEXEC_REQUIRED_VERSION... " >&6; }
+ PKEXEC_REQUIRED_INT=`echo "$PKEXEC_REQUIRED_VERSION" | $AWK -F. '{print $1 * 10000 + $2}'`
+-PKEXEC_VERSION_OUTPUT=`pkexec --version 2> /dev/null` ||
++PKEXEC_VERSION_OUTPUT='pkexec version @polkit_version@' ||
+ 	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
+ $as_echo "not found" >&6; }
+ if test "x$PKEXEC_VERSION_OUTPUT" != 'x'; then
diff --git a/nixpkgs/pkgs/tools/misc/graylog/default.nix b/nixpkgs/pkgs/tools/misc/graylog/default.nix
new file mode 100644
index 000000000000..46812da8954b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/graylog/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl, makeWrapper, jre_headless }:
+
+stdenv.mkDerivation rec {
+  pname = "graylog";
+  version = "3.1.4";
+
+  src = fetchurl {
+    url = "https://packages.graylog2.org/releases/graylog/graylog-${version}.tgz";
+    sha256 = "1z7jy82dk5l2yxmcb7y0jws4p1l367fxj69pfi10ajssj66vwjfw";
+  };
+
+  dontBuild = true;
+  dontStrip = true;
+
+  buildInputs = [ makeWrapper ];
+  makeWrapperArgs = [ "--prefix" "PATH" ":" "${jre_headless}/bin" ];
+
+  installPhase = ''
+    mkdir -p $out
+    cp -r {graylog.jar,lib,bin,plugin} $out
+    wrapProgram $out/bin/graylogctl $makeWrapperArgs
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Open source log management solution";
+    homepage    = https://www.graylog.org/;
+    license     = licenses.gpl3;
+    platforms   = platforms.unix;
+    maintainers = [ maintainers.fadenb ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/graylog/plugins.nix b/nixpkgs/pkgs/tools/misc/graylog/plugins.nix
new file mode 100644
index 000000000000..e7d32dd4b373
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/graylog/plugins.nix
@@ -0,0 +1,220 @@
+{ pkgs,  stdenv, fetchurl, unzip, graylog }:
+
+with pkgs.lib;
+
+let
+  glPlugin = a@{
+    pluginName,
+    version,
+    installPhase ? ''
+      mkdir -p $out/bin
+      cp $src $out/bin/${pluginName}-${version}.jar
+    '',
+    ...
+  }:
+    stdenv.mkDerivation (a // {
+      inherit installPhase;
+      dontUnpack = true;
+      buildInputs = [ unzip ];
+      meta = a.meta // {
+        platforms = graylog.meta.platforms;
+        maintainers = (a.meta.maintainers or []) ++ [ maintainers.fadenb ];
+      };
+    });
+in {
+  aggregates = glPlugin rec {
+    name = "graylog-aggregates-${version}";
+    pluginName = "graylog-plugin-aggregates";
+    version = "2.4.0";
+    src = fetchurl {
+      url = "https://github.com/cvtienhoven/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "1c48almnjr0b6nvzagnb9yddqbcjs7yhrd5yc5fx9q7w3vxi50zp";
+    };
+    meta = {
+      homepage = https://github.com/cvtienhoven/graylog-plugin-aggregates;
+      description = "SSO support for Graylog through trusted HTTP headers set by load balancers or authentication proxies";
+    };
+  };
+  auth_sso = glPlugin rec {
+    name = "graylog-auth-sso-${version}";
+    pluginName = "graylog-plugin-auth-sso";
+    version = "3.1.0";
+    src = fetchurl {
+      url = "https://github.com/Graylog2/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "0hwgpq1j3qk0j1zgap5f1avh2nvkcscgds81x8xr0gamphgps8y2";
+    };
+    meta = {
+      homepage = https://github.com/Graylog2/graylog-plugin-auth-sso;
+      description = "SSO support for Graylog through trusted HTTP headers set by load balancers or authentication proxies";
+    };
+  };
+  dnsresolver = glPlugin rec {
+    name = "graylog-dnsresolver-${version}";
+    pluginName = "graylog-plugin-dnsresolver";
+    version = "1.2.0";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "0djlyd4w4mrrqfbrs20j1xw0fygqsb81snz437v9bf80avmcyzg1";
+    };
+    meta = {
+      homepage = https://github.com/graylog-labs/graylog-plugin-dnsresolver;
+      description = "Message filter plugin can be used to do DNS lookups for the source field in Graylog messages";
+    };
+  };
+  filter-messagesize = glPlugin rec {
+    name = "graylog-filter-messagesize-${version}";
+    pluginName = "graylog-plugin-filter-messagesize";
+    version = "0.0.2";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "1vx62yikd6d3lbwsfiyf9j6kx8drvn4xhffwv27fw5jzhfqr61ji";
+    };
+    meta = {
+      homepage = https://github.com/graylog-labs/graylog-plugin-filter-messagesize;
+      description = "Prints out all messages that have an estimated size crossing a configured threshold during processing";
+    };
+  };
+  internal-logs = glPlugin rec {
+    name = "graylog-internal-logs-${version}";
+    pluginName = "graylog-plugin-internal-logs";
+    version = "2.4.0";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "1jyy0wkjapv3xv5q957xxv2pcnd4n1yivkvkvg6cx7kv1ip75xwc";
+    };
+    meta = {
+      homepage = https://github.com/graylog-labs/graylog-plugin-internal-logs;
+      description = "Graylog plugin to record internal logs of Graylog efficiently instead of sending them over the network";
+    };
+  };
+  ipanonymizer = glPlugin rec {
+    name = "graylog-ipanonymizer-${version}";
+    pluginName = "graylog-plugin-ipanonymizer";
+    version = "1.1.2";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "0hd66751hp97ddkn29s1cmjmc2h1nrp431bq7d2wq16iyxxlygri";
+    };
+    meta = {
+      homepage = https://github.com/graylog-labs/graylog-plugin-ipanonymizer;
+      description = "A graylog-server plugin that replaces the last octet of IP addresses in messages with xxx";
+    };
+  };
+  jabber = glPlugin rec {
+    name = "graylog-jabber-${version}";
+    pluginName = "graylog-plugin-jabber";
+    version = "2.4.0";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "0zy27q8y0bv7i5nypsfxad4yiw121sbwzd194jsz2w08jhk3skl5";
+    };
+    meta = {
+      homepage = https://github.com/graylog-labs/graylog-plugin-jabber;
+      description = "Jabber Alarmcallback Plugin for Graylog";
+    };
+  };
+  metrics = glPlugin rec {
+    name = "graylog-metrics-${version}";
+    pluginName = "graylog-plugin-metrics";
+    version = "1.3.0";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "1v1yzmqp43kxigh3fymdwki7pn21sk2ym3kk4nn4qv4zzkhz59vp";
+    };
+    meta = {
+      homepage = https://github.com/graylog-labs/graylog-plugin-metrics;
+      description = "An output plugin for integrating Graphite, Ganglia and StatsD with Graylog";
+    };
+  };
+  mongodb-profiler = glPlugin rec {
+    name = "graylog-mongodb-profiler-${version}";
+    pluginName = "graylog-plugin-mongodb-profiler";
+    version = "2.0.1";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "1hadxyawdz234lal3dq5cy3zppl7ixxviw96iallyav83xyi23i8";
+    };
+    meta = {
+      homepage = https://github.com/graylog-labs/graylog-plugin-mongodb-profiler;
+      description = "Graylog input plugin that reads MongoDB profiler data";
+    };
+  };
+  pagerduty = glPlugin rec {
+    name = "graylog-pagerduty-${version}";
+    pluginName = "graylog-plugin-pagerduty";
+    version = "1.3.0";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "1g63c6rm5pkz7f0d73wb2lmk4zm430jqnhihbyq112cm4i7ymglh";
+    };
+    meta = {
+      homepage = https://github.com/graylog-labs/graylog-plugin-pagerduty;
+      description = "An alarm callback plugin for integrating PagerDuty into Graylog";
+    };
+  };
+  redis = glPlugin rec {
+    name = "graylog-redis-${version}";
+    pluginName = "graylog-plugin-redis";
+    version = "0.1.1";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "0dfgh6w293ssagas5y0ixwn0vf54i5iv61r5p2q0rbv2da6xvhbw";
+    };
+    meta = {
+      homepage = https://github.com/graylog-labs/graylog-plugin-redis;
+      description = "Redis plugin for Graylog";
+    };
+  };
+  slack = glPlugin rec {
+    name = "graylog-slack-${version}";
+    pluginName = "graylog-plugin-slack";
+    version = "3.1.0";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "067p8g94b007gypwyyi8vb6qhwdanpk8ah57abik54vv14jxg94k";
+    };
+    meta = {
+      homepage = https://github.com/graylog-labs/graylog-plugin-slack;
+      description = "Can notify Slack or Mattermost channels about triggered alerts in Graylog (Alarm Callback)";
+    };
+  };
+  spaceweather = glPlugin rec {
+    name = "graylog-spaceweather-${version}";
+    pluginName = "graylog-plugin-spaceweather";
+    version = "1.0";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/spaceweather-input.jar";
+      sha256 = "1mwqy3fhyy4zdwyrzvbr565xwf96xs9d3l70l0khmrm848xf8wz4";
+    };
+    meta = {
+      homepage = https://github.com/graylog-labs/graylog-plugin-spaceweather;
+      description = "Correlate proton density to the response time of your app and the ion temperature to your exception rate.";
+    };
+  };
+  twiliosms = glPlugin rec {
+    name = "graylog-twiliosms-${version}";
+    pluginName = "graylog-plugin-twiliosms";
+    version = "1.0.0";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "0kwfv1zfj0fmxh9i6413bcsaxrn1vdwrzb6dphvg3dx27wxn1j1a";
+    };
+    meta = {
+      homepage = https://github.com/graylog-labs/graylog-plugin-twiliosms;
+      description = "An alarm callback plugin for integrating the Twilio SMS API into Graylog";
+    };
+  };
+  twitter = glPlugin rec {
+    name = "graylog-twitter-${version}";
+    pluginName = "graylog-plugin-twitter";
+    version = "2.0.0";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "1pi34swy9nzq35a823zzvqrjhb6wsg302z31vk2y656sw6ljjxyh";
+    };
+    meta = {
+      homepage = https://github.com/graylog-labs/graylog-plugin-twitter;
+      description = "Graylog input plugin that reads Twitter messages based on keywords in realtime";
+    };
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/grc/default.nix b/nixpkgs/pkgs/tools/misc/grc/default.nix
new file mode 100644
index 000000000000..828d4e4dab78
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grc/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchFromGitHub, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "grc";
+  version = "1.11.3";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner  = "garabik";
+    repo   = "grc";
+    rev    = "v${version}";
+    sha256 = "0b3wx9zr7l642hizk93ysbdss7rfymn22b2ykj4kpkf1agjkbv35";
+  };
+
+  postPatch = ''
+    for f in grc grcat; do
+      substituteInPlace $f \
+        --replace /usr/local/ $out/
+    done
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    ./install.sh "$out" "$out"
+    install -Dm444 -t $out/share/zsh/vendor-completions _grc
+
+    runHook postInstall
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Yet another colouriser for beautifying your logfiles or output of commands";
+    homepage    = http://korpus.juls.savba.sk/~garabik/software/grc.html;
+    license     = licenses.gpl2;
+    maintainers = with maintainers; [ lovek323 AndersonTorres peterhoeg ];
+    platforms   = platforms.unix;
+
+    longDescription = ''
+      Generic Colouriser is yet another colouriser (written in Python) for
+      beautifying your logfiles or output of commands.
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gringo/default.nix b/nixpkgs/pkgs/tools/misc/gringo/default.nix
new file mode 100644
index 000000000000..705c1a7e1d6a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gringo/default.nix
@@ -0,0 +1,59 @@
+{ stdenv, fetchurl,
+  bison, re2c, scons,
+  libcxx
+}:
+
+let
+  version = "4.5.4";
+in
+
+stdenv.mkDerivation {
+  pname = "gringo";
+  inherit version;
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/potassco/gringo/${version}/gringo-${version}-source.tar.gz";
+    sha256 = "16k4pkwyr2mh5w8j91vhxh9aff7f4y31npwf09w6f8q63fxvpy41";
+  };
+
+  buildInputs = [ bison re2c scons ];
+
+  patches = [
+    ./gringo-4.5.4-cmath.patch
+    ./gringo-4.5.4-to_string.patch
+  ];
+
+  postPatch = stdenv.lib.optionalString stdenv.isDarwin ''
+    substituteInPlace ./SConstruct \
+      --replace \
+        "env['CXX']            = 'g++'" \
+        "env['CXX']            = '$CXX'"
+
+    substituteInPlace ./SConstruct \
+      --replace \
+        "env['CPPPATH']        = []" \
+        "env['CPPPATH']        = ['${libcxx}/include/c++/v1']"
+
+    substituteInPlace ./SConstruct \
+      --replace \
+        "env['LIBPATH']        = []" \
+        "env['LIBPATH']        = ['${libcxx}/lib']"
+  '';
+
+  buildPhase = ''
+    scons WITH_PYTHON= --build-dir=release
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp build/release/gringo $out/bin/gringo
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Converts input programs with first-order variables to equivalent ground programs";
+    homepage = http://potassco.sourceforge.net/;
+    platforms = platforms.all;
+    maintainers = [ maintainers.hakuch ];
+    license = licenses.gpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gringo/gringo-4.5.4-cmath.patch b/nixpkgs/pkgs/tools/misc/gringo/gringo-4.5.4-cmath.patch
new file mode 100644
index 000000000000..7b5510e2344b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gringo/gringo-4.5.4-cmath.patch
@@ -0,0 +1,11 @@
+--- gringo/libgringo/src/term.cc~	2016-07-12 23:56:10.593577749 -0400
++++ gringo/libgringo/src/term.cc	2016-07-12 23:52:35.169968338 -0400
+@@ -22,6 +22,8 @@
+ #include "gringo/logger.hh"
+ #include "gringo/graph.hh"
+ 
++#include <cmath>
++
+ namespace Gringo {
+ 
+ // {{{ definition of Defines
diff --git a/nixpkgs/pkgs/tools/misc/gringo/gringo-4.5.4-to_string.patch b/nixpkgs/pkgs/tools/misc/gringo/gringo-4.5.4-to_string.patch
new file mode 100644
index 000000000000..b81eab4cd678
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gringo/gringo-4.5.4-to_string.patch
@@ -0,0 +1,11 @@
+--- gringo/libgringo/gringo/bug.hh~	2014-03-10 12:19:26.000000000 -0400
++++ gringo/libgringo/gringo/bug.hh	2016-11-12 07:51:55.288563663 -0500
+@@ -32,7 +32,7 @@
+ #define _GLIBCXX_MAKE_MOVE_ITERATOR(_Iter) std::make_move_iterator(_Iter)
+ #define _GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR(_Iter) std::make_move_iterator(_Iter)
+ 
+-#ifdef MISSING_STD_TO_STRING
++#if 0
+ 
+ #include <sstream>
+ 
diff --git a/nixpkgs/pkgs/tools/misc/grub/2.0x.nix b/nixpkgs/pkgs/tools/misc/grub/2.0x.nix
new file mode 100644
index 000000000000..3f5485718dc5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grub/2.0x.nix
@@ -0,0 +1,137 @@
+{ stdenv, fetchgit, flex, bison, python, autoconf, automake, gnulib, libtool
+, gettext, ncurses, libusb, freetype, qemu, lvm2, unifont, pkgconfig
+, fuse # only needed for grub-mount
+, zfs ? null
+, efiSupport ? false
+, zfsSupport ? true
+, xenSupport ? false
+}:
+
+with stdenv.lib;
+let
+  pcSystems = {
+    i686-linux.target = "i386";
+    x86_64-linux.target = "i386";
+  };
+
+  efiSystemsBuild = {
+    i686-linux.target = "i386";
+    x86_64-linux.target = "x86_64";
+    aarch64-linux.target = "aarch64";
+  };
+
+  # For aarch64, we need to use '--target=aarch64-efi' when building,
+  # but '--target=arm64-efi' when installing. Insanity!
+  efiSystemsInstall = {
+    i686-linux.target = "i386";
+    x86_64-linux.target = "x86_64";
+    aarch64-linux.target = "arm64";
+  };
+
+  canEfi = any (system: stdenv.hostPlatform.system == system) (mapAttrsToList (name: _: name) efiSystemsBuild);
+  inPCSystems = any (system: stdenv.hostPlatform.system == system) (mapAttrsToList (name: _: name) pcSystems);
+
+  version = "2.04";
+
+in (
+
+assert efiSupport -> canEfi;
+assert zfsSupport -> zfs != null;
+assert !(efiSupport && xenSupport);
+
+stdenv.mkDerivation rec {
+  pname = "grub";
+  inherit version;
+
+  src = fetchgit {
+    url = "git://git.savannah.gnu.org/grub.git";
+    rev = "${pname}-${version}";
+    sha256 = "02gly3xw88pj4zzqjniv1fxa1ilknbq1mdk30bj6qy8n44g90i8w";
+  };
+
+  patches = [
+    ./fix-bash-completion.patch
+  ];
+
+  nativeBuildInputs = [ bison flex python pkgconfig autoconf automake ];
+  buildInputs = [ ncurses libusb freetype gettext lvm2 fuse libtool ]
+    ++ optional doCheck qemu
+    ++ optional zfsSupport zfs;
+
+  hardeningDisable = [ "all" ];
+
+  # Work around a bug in the generated flex lexer (upstream flex bug?)
+  NIX_CFLAGS_COMPILE = "-Wno-error";
+
+  preConfigure =
+    '' for i in "tests/util/"*.in
+       do
+         sed -i "$i" -e's|/bin/bash|${stdenv.shell}|g'
+       done
+
+       # Apparently, the QEMU executable is no longer called
+       # `qemu-system-i386', even on i386.
+       #
+       # In addition, use `-nodefaults' to avoid errors like:
+       #
+       #  chardev: opening backend "stdio" failed
+       #  qemu: could not open serial device 'stdio': Invalid argument
+       #
+       # See <http://www.mail-archive.com/qemu-devel@nongnu.org/msg22775.html>.
+       sed -i "tests/util/grub-shell.in" \
+           -e's/qemu-system-i386/qemu-system-x86_64 -nodefaults/g'
+
+      unset CPP # setting CPP intereferes with dependency calculation
+
+      cp -r ${gnulib} $PWD/gnulib
+      chmod u+w -R $PWD/gnulib
+
+      patchShebangs .
+
+      ./bootstrap --no-git --gnulib-srcdir=$PWD/gnulib
+
+      substituteInPlace ./configure --replace '/usr/share/fonts/unifont' '${unifont}/share/fonts'
+    '';
+
+  configureFlags = [ "--enable-grub-mount" ] # dep of os-prober
+    ++ optional zfsSupport "--enable-libzfs"
+    ++ optionals efiSupport [ "--with-platform=efi" "--target=${efiSystemsBuild.${stdenv.hostPlatform.system}.target}" "--program-prefix=" ]
+    ++ optionals xenSupport [ "--with-platform=xen" "--target=${efiSystemsBuild.${stdenv.hostPlatform.system}.target}"];
+
+  # save target that grub is compiled for
+  grubTarget = if efiSupport
+               then "${efiSystemsInstall.${stdenv.hostPlatform.system}.target}-efi"
+               else if inPCSystems
+                    then "${pcSystems.${stdenv.hostPlatform.system}.target}-pc"
+                    else "";
+
+  doCheck = false;
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    # Avoid a runtime reference to gcc
+    sed -i $out/lib/grub/*/modinfo.sh -e "/grub_target_cppflags=/ s|'.*'|' '|"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "GNU GRUB, the Grand Unified Boot Loader (2.x beta)";
+
+    longDescription =
+      '' GNU GRUB is a Multiboot boot loader. It was derived from GRUB, GRand
+         Unified Bootloader, which was originally designed and implemented by
+         Erich Stefan Boleyn.
+
+         Briefly, the boot loader is the first software program that runs when a
+         computer starts.  It is responsible for loading and transferring
+         control to the operating system kernel software (such as the Hurd or
+         the Linux).  The kernel, in turn, initializes the rest of the
+         operating system (e.g., GNU).
+      '';
+
+    homepage = https://www.gnu.org/software/grub/;
+
+    license = licenses.gpl3Plus;
+
+    platforms = platforms.gnu ++ platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/grub/buggybios.patch b/nixpkgs/pkgs/tools/misc/grub/buggybios.patch
new file mode 100644
index 000000000000..1453a8adaa00
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grub/buggybios.patch
@@ -0,0 +1,11 @@
+Taken from: http://savannah.gnu.org/bugs/?func=detailitem&item_id=10433
+--- grub-0.95.orig/stage2/bios.c 2004-03-27 17:34:04.000000000 +0100
++++ grub-0.95/stage2/bios.c 2005-03-02 01:02:29.192582200 +0100
+@@ -147,6 +147,7 @@
+   grub_memset (&cdrp, 0, sizeof (cdrp));
+   cdrp.size = sizeof (cdrp) - sizeof (cdrp.dummy);
+   err = biosdisk_int13_extensions (0x4B01, drive, &cdrp);
++  err = 0; /* really ugly hack to circumvent faulty BIOS versions like Acer 292LMi */
+   if (! err && cdrp.drive_no == drive)
+     {
+        if ((cdrp.media_type & 0x0F) == 0)
diff --git a/nixpkgs/pkgs/tools/misc/grub/default.nix b/nixpkgs/pkgs/tools/misc/grub/default.nix
new file mode 100644
index 000000000000..87e9814d8993
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grub/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl, autoreconfHook, texinfo, buggyBiosCDSupport ? true }:
+
+stdenv.mkDerivation {
+  name = "grub-0.97-73";
+
+  src = fetchurl {
+    url = https://alpha.gnu.org/gnu/grub/grub-0.97.tar.gz;
+    sha256 = "02r6b52r0nsp6ryqfiqchnl7r1d9smm80sqx24494gmx5p8ia7af";
+  };
+
+  patches = [
+    # Properly handle the case of symlinks such as
+    # /dev/disk/by-label/bla.  The symlink resolution code in
+    # grub-install isn't smart enough.
+    ./symlink.patch
+  ]
+  ++ (stdenv.lib.optional buggyBiosCDSupport ./buggybios.patch)
+  ++ map fetchurl (import ./grub1.patches.nix)
+  ;
+
+  # autoreconfHook required for the splashimage patch.
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ texinfo ];
+
+  hardeningDisable = [ "format" "stackprotector" ];
+
+  passthru.grubTarget = "";
+
+  meta = with stdenv.lib; {
+    homepage = https://www.gnu.org/software/grub;
+    description = "GRand Unified Bootloader";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/grub/fix-bash-completion.patch b/nixpkgs/pkgs/tools/misc/grub/fix-bash-completion.patch
new file mode 100644
index 000000000000..97cecdce373f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grub/fix-bash-completion.patch
@@ -0,0 +1,24 @@
+diff -ubr grub-2.00-orig/util/bash-completion.d/grub-completion.bash.in grub-2.00/util/bash-completion.d/grub-completion.bash.in
+--- grub-2.00-orig/util/bash-completion.d/grub-completion.bash.in	2012-10-16 19:02:36.342733957 +0200
++++ grub-2.00/util/bash-completion.d/grub-completion.bash.in	2012-10-16 19:04:48.262733941 +0200
+@@ -17,6 +17,12 @@
+ # along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
+ # bash completion for grub
+ 
++have()
++{
++    unset -v have
++    _have $1 && have=yes
++}
++
+ __grub_dir() {
+     local i c=1 boot_dir
+ 
+@@ -479,6 +485,7 @@
+ have ${__grub_script_check_program} && \
+  complete -F _grub_script_check -o filenames ${__grub_script_check_program}
+ 
++unset -f have
+ 
+ # Local variables:
+ # mode: shell-script
diff --git a/nixpkgs/pkgs/tools/misc/grub/grub1.patches.nix b/nixpkgs/pkgs/tools/misc/grub/grub1.patches.nix
new file mode 100644
index 000000000000..5ee8722b5eca
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grub/grub1.patches.nix
@@ -0,0 +1,34 @@
+# Generated by grub1-patches.sh
+let
+  prefix = "https://salsa.debian.org/grub-team/grub-legacy/raw/1dad5507d74ef97fdd3c6cf2a028084f6f2850c3/debian/patches";
+in
+[
+{ url = "${prefix}/snapshot.patch"; sha256 = "0ixymrn5w1dq0kkxnzdjwwvhjchgyrlivfvnrfncxcv30v84xzna"; }
+{ url = "${prefix}/menu.lst_gnu-hurd.patch"; sha256 = "0mz8dvgmxlyrl28dza1ncfq1xipihxgymw4aw688bgg7xxmw7jbs"; }
+{ url = "${prefix}/graphics.patch"; sha256 = "1v9kp832f3rhncfdrd28djhw0zfrznfmiadch33mclnkcxprcqcs"; }
+{ url = "${prefix}/raid.patch"; sha256 = "0cq6dz5s7m48g76frvbf296bv4pvqkxqcbydsvs43ymqdsary7hj"; }
+{ url = "${prefix}/raid_cciss.patch"; sha256 = "0sy5xvzjsllgbn26nykkq4b69lp1fcwjkjs2kmxq38sk3dzadjfl"; }
+{ url = "${prefix}/xfs_freeze.patch"; sha256 = "1wqgj8ar4x4zwa37bj4a7kldiz5v92msigy3cv879nnk6sz4rmhg"; }
+{ url = "${prefix}/2gb_limit.patch"; sha256 = "06f9lfl4va3alz87wzli0df5ay0xxlqj2akr2dcay6jr27z6ks29"; }
+{ url = "${prefix}/grub-special_device_names.patch"; sha256 = "098608xh20sqdjqf42fm2z23r8xd9ify1v0vmy1j9qhrhk3g9qyz"; }
+{ url = "${prefix}/grub-xvd_drives.patch"; sha256 = "13k0m1c1w5d1d4qd1bshjc8kp7qba4agk2j64gb7mg8vfzjd35bj"; }
+{ url = "${prefix}/initrd_max_address.patch"; sha256 = "05q90rxdnyncpanhbkrknshkk7g8ff4v8fpk7wj4sg8666d9llg3"; }
+{ url = "${prefix}/splashimage_help.patch"; sha256 = "1lj3xh56wf1pdcf0fg585vmggrz7qqfzbhg91qv0rf4snf3ybfvr"; }
+{ url = "${prefix}/grub-install_addsyncs.patch"; sha256 = "1dzcpxi806kw3j8mx4amyy4ibc0ir3qhqyyyxz3w43741p351r65"; }
+{ url = "${prefix}/grub-install_regexp.patch"; sha256 = "0ph9lb63x858019c25aa3fpsm8rzn00ad8fp88yqqvq0xq2jxq69"; }
+{ url = "${prefix}/grub-install_aoe_support.patch"; sha256 = "19szmvg13h2hhijrwbgdszldg26iz7vjnagvajxb7nav7vca6k3n"; }
+{ url = "${prefix}/grub-install_xvd.patch"; sha256 = "1cgh731nhs0chj2r2dzh5dcfj5xmap34i3fk0i0aq59j83cwflgz"; }
+{ url = "${prefix}/geometry-26kernel.patch"; sha256 = "01vka7jrxrwlj9m1d6schygyh964a3k1rdrm3j9x910xkz74i13n"; }
+{ url = "${prefix}/print_func.patch"; sha256 = "0dvrcy1i58fgrv2x1qniqfr5az9b834hm5l94k0cy8ii2nfvk27g"; }
+{ url = "${prefix}/mprotect.patch"; sha256 = "0ahgnhgw2b86j024ajs6m3h2fy2shqdssjzz0ahk8ny9f4mnvns6"; }
+{ url = "${prefix}/savedefault.patch"; sha256 = "1l6x1s9mxkrf3k4j9dpg7qhvrk816vs70sw073iiisvqspnrz2j3"; }
+{ url = "${prefix}/find-grub-dir.patch"; sha256 = "1vkgig4dylji03jflwikhap87lz8l470ck1bhmcy8jh0slg6ndbf"; }
+{ url = "${prefix}/intelmac.patch"; sha256 = "04l9mk9xm9ml8vdlpbv3qbj7gbaa0g5k4dl7xp8wm7kmqwxd9l3m"; }
+{ url = "${prefix}/crossreference_manpages.patch"; sha256 = "0kd12ck4s4bg414fmllgvq8n4b58i3kgdhmcx6riaz43gg2g2b9p"; }
+{ url = "${prefix}/ext3_256byte_inode.patch"; sha256 = "0ay9svbdj7mw8p1ld0iiryg6nhd9hc1xpmr9rqg9990xzmg2h4pi"; }
+{ url = "${prefix}/objcopy-absolute.patch"; sha256 = "0hkmicjli7bsmc56kr40ls21v6x3yd188xpwc08dvqxnb0763077"; }
+{ url = "${prefix}/no-reorder-functions.patch"; sha256 = "0gmv0nzkqim2901hd0an90kwnr83155qp2zjp52biznad2p415gw"; }
+{ url = "${prefix}/modern-automake.patch"; sha256 = "08l3y6cbk6gfj63kpqlpzrlain7nmvki7jjjxq86n7himj078znj"; }
+{ url = "${prefix}/no-combine-stack-adjustments.patch"; sha256 = "0h4di8zja0rg45rs02x9qm8q1vxly1bcl6ms08wgdl5ywn6849nr"; }
+{ url = "${prefix}/no-pie.patch"; sha256 = "0kshdsclza7lsd31apd28qq04arv42nd6wsj2v6q6jx7f8bgdaqw"; }
+]
diff --git a/nixpkgs/pkgs/tools/misc/grub/grub1.patches.sh b/nixpkgs/pkgs/tools/misc/grub/grub1.patches.sh
new file mode 100755
index 000000000000..d3b138ad3577
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grub/grub1.patches.sh
@@ -0,0 +1,70 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -p nix -i bash --pure
+
+# Does like `maintainers/scripts/debian-patches.sh`, but specialized for
+# grub1 patches, and using the new salsa service.
+
+# Most common usage: `pkgs/tools/misc/grub/grub1.patches.sh pkgs/tools/misc/grub/grub1.patches.nix`
+# That is, after updating the script with the new list from the series file,
+# removing (by commenting) patches as required.
+
+set -e
+set -u
+
+# https://salsa.debian.org/grub-team/grub-legacy/tree/master/debian/patches
+SERIES=(
+	snapshot.patch
+	menu.lst_gnu-hurd.patch
+	graphics.patch
+	raid.patch
+	raid_cciss.patch
+	xfs_freeze.patch
+	2gb_limit.patch
+	grub-special_device_names.patch
+	grub-xvd_drives.patch
+	initrd_max_address.patch
+	splashimage_help.patch
+	grub-install_addsyncs.patch
+	grub-install_regexp.patch
+	grub-install_aoe_support.patch
+	grub-install_xvd.patch
+	geometry-26kernel.patch
+	print_func.patch
+	mprotect.patch
+	savedefault.patch
+	find-grub-dir.patch
+	intelmac.patch
+	crossreference_manpages.patch
+	ext3_256byte_inode.patch
+    # Breaks on NixOS.
+	#use_grub-probe_in_grub-install.patch
+	objcopy-absolute.patch
+	no-reorder-functions.patch
+
+	# We aren't building amd64 binaries, see #244498
+	#fix_amd64_compile.patch
+	modern-automake.patch
+	no-combine-stack-adjustments.patch
+	no-pie.patch
+)
+
+# Revision mapping to current tip of the 0.97-73 branch.
+rev="1dad5507d74ef97fdd3c6cf2a028084f6f2850c3"
+prefix="https://salsa.debian.org/grub-team/grub-legacy/raw/${rev}/debian/patches"
+FILE="$1"
+shift
+
+cat <<EOF > "$FILE"
+# Generated by grub1-patches.sh
+let
+  prefix = "${prefix}";
+in
+[
+EOF
+
+for PATCH in "${SERIES[@]}"; do
+	URL="$prefix/$PATCH"
+	HASH="$(nix-prefetch-url "$URL")"
+	echo "{ url = \"\${prefix}/$PATCH\"; sha256 = \"$HASH\"; }" >> "$FILE"
+done
+echo "]" >> "$FILE"
diff --git a/nixpkgs/pkgs/tools/misc/grub/pvgrub_image/configs/grub-bootstrap.cfg b/nixpkgs/pkgs/tools/misc/grub/pvgrub_image/configs/grub-bootstrap.cfg
new file mode 100644
index 000000000000..e9883149ab5d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grub/pvgrub_image/configs/grub-bootstrap.cfg
@@ -0,0 +1 @@
+normal (memdisk)/grub.cfg
diff --git a/nixpkgs/pkgs/tools/misc/grub/pvgrub_image/configs/grub.cfg b/nixpkgs/pkgs/tools/misc/grub/pvgrub_image/configs/grub.cfg
new file mode 100644
index 000000000000..69115b7101c9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grub/pvgrub_image/configs/grub.cfg
@@ -0,0 +1,10 @@
+# The parentheses around ${root} here to match Grub's config file syntax
+if search -s -f /boot/grub/grub.cfg ; then
+        echo "Reading (${root})/boot/grub/grub.cfg"
+	configfile /boot/grub/grub.cfg
+fi
+
+if search -s -f /grub/grub.cfg ; then
+	echo "Reading (${root})/grub/grub.cfg"
+	configfile /grub/grub.cfg
+fi
diff --git a/nixpkgs/pkgs/tools/misc/grub/pvgrub_image/default.nix b/nixpkgs/pkgs/tools/misc/grub/pvgrub_image/default.nix
new file mode 100644
index 000000000000..6b796dedb0ad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grub/pvgrub_image/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, grub2_xen }:
+
+with stdenv.lib;
+let
+  efiSystemsBuild = {
+    i686-linux.target = "i386";
+    x86_64-linux.target = "x86_64";
+    aarch64-linux.target = "aarch64";
+  };
+
+in (
+
+stdenv.mkDerivation rec {
+  name = "pvgrub-image";
+
+  configs = ./configs;
+
+  buildInputs = [ grub2_xen ];
+
+  buildCommand = ''
+    cp "${configs}"/* .
+    tar -cf memdisk.tar grub.cfg
+    # We include all modules except all_video.mod as otherwise grub will fail printing "no symbol table"
+    # if we include it.
+    grub-mkimage -O "${efiSystemsBuild.${stdenv.hostPlatform.system}.target}-xen" -c grub-bootstrap.cfg \
+      -m memdisk.tar -o "grub-${efiSystemsBuild.${stdenv.hostPlatform.system}.target}-xen.bin" \
+      $(ls "${grub2_xen}/lib/grub/${efiSystemsBuild.${stdenv.hostPlatform.system}.target}-xen/" |grep 'mod''$'|grep -v '^all_video\.mod''$')
+    mkdir -p "$out/lib/grub-xen"
+    cp "grub-${efiSystemsBuild.${stdenv.hostPlatform.system}.target}-xen.bin" $out/lib/grub-xen/
+  '';
+
+  meta = with stdenv.lib; {
+    description = "PvGrub image for use for booting PV Xen guests";
+
+    longDescription =
+      '' This package provides a PvGrub image for booting Para-Virtualized (PV)
+         Xen guests
+      '';
+
+    platforms = platforms.gnu ++ platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/grub/symlink.patch b/nixpkgs/pkgs/tools/misc/grub/symlink.patch
new file mode 100644
index 000000000000..ac38be046188
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grub/symlink.patch
@@ -0,0 +1,37 @@
+diff -rc grub-0.97-orig/util/grub-install.in grub-0.97/util/grub-install.in
+*** grub-0.97-orig/util/grub-install.in	2008-09-18 11:32:13.000000000 +0200
+--- grub-0.97/util/grub-install.in	2008-09-18 11:36:40.000000000 +0200
+***************
+*** 194,217 ****
+  # Usage: resolve_symlink file
+  # Find the real file/device that file points at
+  resolve_symlink () {
+! 	tmp_fname=$1
+! 	# Resolve symlinks
+! 	while test -L $tmp_fname; do
+! 		tmp_new_fname=`ls -al $tmp_fname | sed -n 's%.*-> \(.*\)%\1%p'`
+! 		if test -z "$tmp_new_fname"; then
+! 			echo "Unrecognized ls output" 2>&1
+! 			exit 1
+! 		fi
+! 
+! 		# Convert relative symlinks
+! 		case $tmp_new_fname in
+! 			/*) tmp_fname="$tmp_new_fname"
+! 			;;
+! 			*) tmp_fname="`echo $tmp_fname | sed 's%/[^/]*$%%'`/$tmp_new_fname"
+! 			;;
+! 		esac
+! 	done
+! 	echo "$tmp_fname"
+  }
+  
+  # Usage: find_device file
+--- 194,200 ----
+  # Usage: resolve_symlink file
+  # Find the real file/device that file points at
+  resolve_symlink () {
+! 	readlink -f $1
+  }
+  
+  # Usage: find_device file
diff --git a/nixpkgs/pkgs/tools/misc/grub/trusted.nix b/nixpkgs/pkgs/tools/misc/grub/trusted.nix
new file mode 100644
index 000000000000..1033a489c767
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grub/trusted.nix
@@ -0,0 +1,100 @@
+{ stdenv, fetchurl, fetchgit, autogen, flex, bison, python, autoconf, automake
+, gettext, ncurses, libusb, freetype, qemu, lvm2
+, for_HP_laptop ? false
+}:
+
+with stdenv.lib;
+let
+  pcSystems = {
+    i686-linux.target = "i386";
+    x86_64-linux.target = "i386";
+  };
+
+  inPCSystems = any (system: stdenv.hostPlatform.system == system) (mapAttrsToList (name: _: name) pcSystems);
+
+  version = if for_HP_laptop then "1.2.1" else "1.2.0";
+
+  unifont_bdf = fetchurl {
+    url = "http://unifoundry.com/unifont-5.1.20080820.bdf.gz";
+    sha256 = "0s0qfff6n6282q28nwwblp5x295zd6n71kl43xj40vgvdqxv0fxx";
+  };
+
+  po_src = fetchurl {
+    name = "grub-2.02-beta2.tar.gz";
+    url = "https://alpha.gnu.org/gnu/grub/grub-2.02~beta2.tar.gz";
+    sha256 = "1lr9h3xcx0wwrnkxdnkfjwy08j7g7mdlmmbdip2db4zfgi69h0rm";
+
+  };
+
+in
+
+stdenv.mkDerivation rec {
+  pname = "trustedGRUB2";
+  inherit version;
+
+  src = if for_HP_laptop
+        then fetchgit {
+          url = "https://github.com/Sirrix-AG/TrustedGRUB2";
+          rev = "ab483d389bda3115ca0ae4202fd71f2e4a31ad41";
+          sha256 = "1760d9hsnqkdvlag9nn8f613mqhnsxmidgvdkpmb37b0yi7p6lhz";
+        }
+        else fetchgit {
+          url = "https://github.com/Sirrix-AG/TrustedGRUB2";
+          rev = "1ff54a5fbe02ea01df5a7de59b1e0201e08d4f76";
+          sha256 = "0yrfwx67gpg9gij5raq0cfbx3jj769lkg3diqgb7i9n86hgcdh4k";
+        };
+
+  nativeBuildInputs = [ autogen flex bison python autoconf automake ];
+  buildInputs = [ ncurses libusb freetype gettext lvm2 ]
+    ++ optional doCheck qemu;
+
+  hardeningDisable = [ "stackprotector" "pic" ];
+
+  NIX_CFLAGS_COMPILE = "-Wno-error"; # generated code redefines yyfree
+
+  preConfigure =
+    '' for i in "tests/util/"*.in
+       do
+         sed -i "$i" -e's|/bin/bash|${stdenv.shell}|g'
+       done
+
+       # Apparently, the QEMU executable is no longer called
+       # `qemu-system-i386', even on i386.
+       #
+       # In addition, use `-nodefaults' to avoid errors like:
+       #
+       #  chardev: opening backend "stdio" failed
+       #  qemu: could not open serial device 'stdio': Invalid argument
+       #
+       # See <http://www.mail-archive.com/qemu-devel@nongnu.org/msg22775.html>.
+       sed -i "tests/util/grub-shell.in" \
+           -e's/qemu-system-i386/qemu-system-x86_64 -nodefaults/g'
+    '';
+
+  prePatch =
+    '' tar zxf ${po_src} grub-2.02~beta2/po
+       rm -rf po
+       mv grub-2.02~beta2/po po
+       sh autogen.sh
+       gunzip < "${unifont_bdf}" > "unifont.bdf"
+       sed -i "configure" \
+           -e "s|/usr/src/unifont.bdf|$PWD/unifont.bdf|g"
+    '';
+
+  patches = [ ./fix-bash-completion.patch ];
+
+  # save target that grub is compiled for
+  grubTarget = if inPCSystems
+               then "${pcSystems.${stdenv.hostPlatform.system}.target}-pc"
+               else "";
+
+  doCheck = false;
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "GRUB 2.0 extended with TCG (TPM) support for integrity measured boot process (trusted boot)";
+    homepage = https://github.com/Sirrix-AG/TrustedGRUB2;
+    license = licenses.gpl3Plus;
+    platforms = platforms.gnu ++ platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/grub4dos/default.nix b/nixpkgs/pkgs/tools/misc/grub4dos/default.nix
new file mode 100644
index 000000000000..2dd8688232f8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grub4dos/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchFromGitHub, nasm }:
+
+let arch =
+  if stdenv.isi686 then "i386"
+  else if stdenv.isx86_64 then "x86_64"
+  else throw "Unknown architecture";
+in stdenv.mkDerivation {
+  pname = "grub4dos";
+  version = "0.4.6a-2019-05-12";
+
+  src = fetchFromGitHub {
+    owner = "chenall";
+    repo = "grub4dos";
+    rev = "e8224a2d20760139ffaeafa07838e2c3c54de783";
+    sha256 = "0i7n71za43qnlsxfvjrv1z5g1w5jl9snpbnas7rw97rry7cgyswf";
+  };
+
+  nativeBuildInputs = [ nasm ];
+
+  hardeningDisable = [ "stackprotector" ];
+
+  configureFlags = [ "--host=${arch}-pc-linux-gnu" ];
+
+  postInstall = ''
+    mv $out/lib/grub/${arch}-pc/* $out/lib/grub
+    rmdir $out/lib/grub/${arch}-pc
+    chmod +x $out/lib/grub/bootlace.com
+  '';
+
+  dontStrip = true;
+  dontPatchELF = true;
+
+  # make[2]: *** No rule to make target 'pre_stage2_fullsize', needed by 'all-am'.  Stop.
+  enableParallelBuilding = false;
+
+  meta = with stdenv.lib; {
+    homepage = http://grub4dos.chenall.net/;
+    description = "GRUB for DOS is the dos extension of GRUB";
+    maintainers = with maintainers; [ abbradar ];
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gsmartcontrol/default.nix b/nixpkgs/pkgs/tools/misc/gsmartcontrol/default.nix
new file mode 100644
index 000000000000..78a678f0714d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gsmartcontrol/default.nix
@@ -0,0 +1,43 @@
+{ fetchurl, stdenv, smartmontools, autoreconfHook, gettext, gtkmm3, pkgconfig, wrapGAppsHook, pcre-cpp, gnome3 }:
+
+stdenv.mkDerivation rec {
+  version="1.1.3";
+  pname = "gsmartcontrol";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/gsmartcontrol/gsmartcontrol-${version}.tar.bz2";
+    sha256 = "1a8j7dkml9zvgpk83xcdajfz7g6mmpmm5k86dl5sjc24zb7n4kxn";
+  };
+
+  patches = [
+    ./fix-paths.patch
+  ];
+
+  nativeBuildInputs = [ autoreconfHook gettext pkgconfig wrapGAppsHook ];
+  buildInputs = [ gtkmm3 pcre-cpp gnome3.adwaita-icon-theme ];
+
+  enableParallelBuilding = true;
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      --prefix PATH : "${stdenv.lib.makeBinPath [ smartmontools ]}"
+    )
+  '';
+
+  meta = {
+    description = "Hard disk drive health inspection tool";
+    longDescription = ''
+      GSmartControl is a graphical user interface for smartctl (from
+      smartmontools package), which is a tool for querying and controlling
+      SMART (Self-Monitoring, Analysis, and Reporting Technology) data on
+      modern hard disk drives.
+
+      It allows you to inspect the drive's SMART data to determine its health,
+      as well as run various tests on it.
+    '';
+    homepage = https://gsmartcontrol.sourceforge.io/;
+    license = stdenv.lib.licenses.gpl2Plus;
+    maintainers = with stdenv.lib.maintainers; [qknight];
+    platforms = with stdenv.lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gsmartcontrol/fix-paths.patch b/nixpkgs/pkgs/tools/misc/gsmartcontrol/fix-paths.patch
new file mode 100644
index 000000000000..905b63bee0c4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gsmartcontrol/fix-paths.patch
@@ -0,0 +1,58 @@
+diff --git a/configure.ac b/configure.ac
+--- a/configure.ac
++++ b/configure.ac
+@@ -475,6 +475,7 @@
+ 
+ 
+ AC_CONFIG_FILES([ data/gsmartcontrol.desktop data/gsmartcontrol.appdata.xml \
++	data/org.gsmartcontrol.policy \
+ 	data/nsis/distribution.txt data/nsis/gsmartcontrol.nsi \
+ 	debian.dist/changelog \
+ 	src/gsc_winres.rc src/gsmartcontrol.exe.manifest \
+diff --git a/data/gsmartcontrol-root.in b/data/gsmartcontrol-root.in
+--- a/data/gsmartcontrol-root.in
++++ b/data/gsmartcontrol-root.in
+@@ -8,7 +8,7 @@
+ # Run gsmartcontrol with root, asking for root password first.
+ # export GSMARTCONTROL_SU to override a su command (e.g. "kdesu -c").
+ 
+-EXEC_BIN="@prefix@/sbin/gsmartcontrol";
++EXEC_BIN="@prefix@/bin/gsmartcontrol";
+ prog_name="gsmartcontrol"
+ 
+ 
+@@ -118,7 +118,7 @@
+ # Add @prefix@/sbin as well (freebsd seems to require it).
+ # Note that beesu won't show a GUI login box if /usr/sbin is before /usr/bin,
+ # so add it first as well.
+-EXTRA_PATHS="/usr/bin:/usr/sbin:/usr/local/sbin:@prefix@/sbin";
++EXTRA_PATHS="/usr/bin:/usr/sbin:/usr/local/sbin:@prefix@/bin";
+ export PATH="$EXTRA_PATHS:$PATH"
+ 
+ 
+diff --git a/data/org.gsmartcontrol.policy b/data/org.gsmartcontrol.policy.in
+rename from data/org.gsmartcontrol.policy
+rename to data/org.gsmartcontrol.policy.in
+--- a/data/org.gsmartcontrol.policy
++++ b/data/org.gsmartcontrol.policy.in
+@@ -12,7 +12,7 @@
+       <allow_inactive>auth_admin</allow_inactive>
+       <allow_active>auth_admin</allow_active>
+     </defaults>
+-    <annotate key="org.freedesktop.policykit.exec.path">/usr/sbin/gsmartcontrol</annotate>
++    <annotate key="org.freedesktop.policykit.exec.path">@prefix@/bin/gsmartcontrol</annotate>
+     <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
+   </action>
+ 
+diff --git a/src/Makefile.am b/src/Makefile.am
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -24,7 +24,7 @@
+ # endif
+ 
+ 
+-sbin_PROGRAMS = gsmartcontrol
++bin_PROGRAMS = gsmartcontrol
+ 
+ gsmartcontrol_LDADD = $(top_builddir)/src/applib/libapplib.a \
+ 	$(top_builddir)/src/libdebug/libdebug.a \
diff --git a/nixpkgs/pkgs/tools/misc/gti/default.nix b/nixpkgs/pkgs/tools/misc/gti/default.nix
new file mode 100644
index 000000000000..bca481cade45
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gti/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "gti";
+  version = "1.6.1";
+
+  src = fetchFromGitHub {
+    owner = "rwos";
+    repo = "gti";
+    rev = "v${version}";
+    sha256 = "19q3r4v22z2q1j4njap356f3mcq6kwh6v8nbbq2rw4x3cdxwdv51";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man/man6
+    cp gti $out/bin
+    cp gti.6 $out/share/man/man6
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://r-wos.org/hacks/gti;
+    license = licenses.mit;
+    description = "Humorous typo-based git runner; drives a car over the terminal";
+    maintainers = with maintainers; [ fadenb ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/h5utils/default.nix b/nixpkgs/pkgs/tools/misc/h5utils/default.nix
new file mode 100644
index 000000000000..9fe267771102
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/h5utils/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchurl, lib
+, hdf5, libpng, libjpeg
+, hdf4 ? null
+, libmatheval ? null
+}:
+
+stdenv.mkDerivation rec {
+  version = "1.13.1";
+  pname = "h5utils";
+
+  # fetchurl is used instead of fetchFromGitHub because the git repo version requires
+  # additional tools to build compared to the tarball release; see the README for details.
+  src = fetchurl {
+    url = "https://github.com/stevengj/h5utils/releases/download/${version}/h5utils-${version}.tar.gz";
+    sha256 = "0rbx3m8p5am8z5m0f3sryryfc41541hjpkixb1jkxakd9l36z9y5";
+  };
+
+  # libdf is an alternative name for libhdf (hdf4)
+  preConfigure = lib.optionalString (hdf4 != null)
+  ''
+    substituteInPlace configure \
+    --replace "-ldf" "-lhdf" \
+  '';
+
+  preBuild = lib.optionalString hdf5.mpiSupport "export CC=${hdf5.mpi}/bin/mpicc";
+
+  buildInputs = with lib; [ hdf5 libjpeg libpng ] ++ optional hdf5.mpiSupport hdf5.mpi
+    ++ optional (hdf4 != null) hdf4
+    ++ optional (libmatheval != null) libmatheval;
+
+  meta = with lib; {
+    description = "A set of utilities for visualization and conversion of scientific data in the free, portable HDF5 format";
+    homepage = https://github.com/stevengj/h5utils;
+    license = with licenses; [ mit gpl2 ];
+    maintainers = with maintainers; [ sfrijters ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/hackertyper/default.nix b/nixpkgs/pkgs/tools/misc/hackertyper/default.nix
new file mode 100644
index 000000000000..4b5973e7eeca
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hackertyper/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub, ncurses }:
+
+stdenv.mkDerivation {
+  pname = "hackertyper";
+  version = "2.1";
+
+  src = fetchFromGitHub {
+    owner  = "Hurricane996";
+    repo   = "Hackertyper";
+    rev    = "8d08e3200c65817bd8c5bd0baa5032919315853b";
+    sha256 = "0shri0srihw9fk027k61qkxr9ikwkn28aaamrhps6lg0vpbqpx2w";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+  buildInputs = [ ncurses ];
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/hackertyper -v
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A C rewrite of hackertyper.net";
+    homepage = "https://github.com/Hurricane996/Hackertyper";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.marius851000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hakuneko/default.nix b/nixpkgs/pkgs/tools/misc/hakuneko/default.nix
new file mode 100644
index 000000000000..34405ccc7bea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hakuneko/default.nix
@@ -0,0 +1,84 @@
+{ atomEnv
+, autoPatchelfHook
+, dpkg
+, fetchurl
+, makeDesktopItem
+, makeWrapper
+, udev
+, stdenv
+, wrapGAppsHook
+}:
+let
+  desktopItem = makeDesktopItem {
+    desktopName = "HakuNeko Desktop";
+    genericName = "Manga & Anime Downloader";
+    categories = "Network;FileTransfer;";
+    exec = "hakuneko";
+    icon = "hakuneko-desktop";
+    name = "hakuneko-desktop";
+    type = "Application";
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "hakuneko";
+  version = "6.1.7";
+
+  src = {
+    "x86_64-linux" = fetchurl {
+      url = "https://github.com/manga-download/hakuneko/releases/download/v${version}/hakuneko-desktop_${version}_linux_amd64.deb";
+      sha256 = "06bb17d7a06bb0601053eaaf423f9176f06ff3636cc43ffc024438e1962dcd02";
+    };
+    "i686-linux" = fetchurl {
+      url = "https://github.com/manga-download/hakuneko/releases/download/v${version}/hakuneko-desktop_${version}_linux_i386.deb";
+      sha256 = "32017d26bafffaaf0a83dd6954d3926557014af4022a972371169c56c0e3d98b";
+    };
+  }."${stdenv.hostPlatform.system}";
+
+  dontBuild = true;
+  dontConfigure = true;
+  dontPatchELF = true;
+  dontWrapGApps = true;
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    dpkg
+    makeWrapper
+    wrapGAppsHook
+  ];
+
+  buildInputs = atomEnv.packages;
+
+  unpackPhase = ''
+    # The deb file contains a setuid binary, so 'dpkg -x' doesn't work here
+    dpkg --fsys-tarfile $src | tar --extract
+  '';
+
+  installPhase = ''
+    cp -R usr "$out"
+    # Overwrite existing .desktop file.
+    cp "${desktopItem}/share/applications/hakuneko-desktop.desktop" \
+       "$out/share/applications/hakuneko-desktop.desktop"
+  '';
+
+  runtimeDependencies = [
+    udev.lib
+  ];
+
+  postFixup = ''
+    makeWrapper $out/lib/hakuneko-desktop/hakuneko $out/bin/hakuneko \
+      "''${gappsWrapperArgs[@]}"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Manga & Anime Downloader";
+    homepage = "https://sourceforge.net/projects/hakuneko/";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [
+      nloomans
+    ];
+    platforms = [
+      "x86_64-linux"
+      "i686-linux"
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hashit/default.nix b/nixpkgs/pkgs/tools/misc/hashit/default.nix
new file mode 100644
index 000000000000..9a3ffe935102
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hashit/default.nix
@@ -0,0 +1,49 @@
+{ stdenv, fetchFromGitHub, meson, ninja, pkgconfig, vala, pantheon, python3, libgee, gtk3, desktop-file-utils, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "hashit";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "artemanufrij";
+    repo = pname;
+    rev = version;
+    sha256 = "1s8fbzg1z2ypn55xg1pfm5xh15waq55fkp49j8rsqiq8flvg6ybf";
+  };
+
+  nativeBuildInputs = [
+    desktop-file-utils
+    meson
+    ninja
+    vala
+    pkgconfig
+    python3
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtk3
+    libgee
+    pantheon.elementary-icon-theme
+    pantheon.granite
+  ];
+
+  postPatch = ''
+    chmod +x meson/post_install.py
+    patchShebangs meson/post_install.py
+  '';
+
+  passthru = {
+    updateScript = pantheon.updateScript {
+      attrPath = pname;
+    };
+  };
+
+  meta = with stdenv.lib; {
+    description = "A simple app for checking usual checksums - Designed for elementary OS";
+    homepage = https://github.com/artemanufrij/hashit;
+    license = licenses.gpl2Plus;
+    maintainers = pantheon.maintainers;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hdaps-gl/default.nix b/nixpkgs/pkgs/tools/misc/hdaps-gl/default.nix
new file mode 100644
index 000000000000..af4d4228c2c6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hdaps-gl/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchzip, freeglut, libGL, libGLU }:
+
+let version = "0.0.5"; in
+stdenv.mkDerivation {
+      pname = "hdaps-gl";
+      inherit version;
+      src = fetchzip {
+            url = "mirror://sourceforge/project/hdaps/hdaps-gl/hdaps-gl-${version}/hdaps-gl-${version}.tar.gz";
+            sha256 = "16fk4k0lvr4c95vd6c7qdylcqa1h5yjp3xm4xwipdjbp0bvsgxq4";
+      };
+
+      buildInputs = [ freeglut libGL libGLU ];
+
+      # the Makefile has no install target
+      installPhase = ''
+            install -Dt $out/bin ./hdaps-gl
+      '';
+
+      meta = with stdenv.lib; {
+            description = "GL-based laptop model that rotates in real-time via hdaps";
+            homepage = https://sourceforge.net/projects/hdaps/;
+            license = licenses.gpl2;
+            platforms = platforms.linux;
+            maintainers = [ maintainers.symphorien ];
+      };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hddtemp/byteswap.patch b/nixpkgs/pkgs/tools/misc/hddtemp/byteswap.patch
new file mode 100644
index 000000000000..7b0dddc2ae47
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hddtemp/byteswap.patch
@@ -0,0 +1,28 @@
+diff -Nuar --exclude '*~' hddtemp-0.3-beta15.orig/src/sata.c hddtemp-0.3-beta15/src/sata.c
+--- hddtemp-0.3-beta15.orig/src/sata.c	2006-05-14 02:09:55.579437498 -0700
++++ hddtemp-0.3-beta15/src/sata.c	2006-05-14 02:06:08.495948437 -0700
+@@ -88,7 +88,9 @@
+     return strdup(_("unknown"));
+   else
+   {
++		//fprintf(stderr,"sata_model1=%s\n",identify + 54);
+     sata_fixstring(identify + 54, 24);
++		//fprintf(stderr,"sata_model2=%s\n",identify + 54);
+     return strdup(identify + 54);
+   }
+ }
+diff -Nuar --exclude '*~' hddtemp-0.3-beta15.orig/src/satacmds.c hddtemp-0.3-beta15/src/satacmds.c
+--- hddtemp-0.3-beta15.orig/src/satacmds.c	2006-05-14 02:09:40.983470339 -0700
++++ hddtemp-0.3-beta15/src/satacmds.c	2006-05-14 02:09:02.319557333 -0700
+@@ -98,7 +98,10 @@
+   /* convert from big-endian to host byte order */
+   for (p = end ; p != s;) {
+     unsigned short *pp = (unsigned short *) (p -= 2);
+-    *pp = ntohs(*pp);
++		char tmp = p[0];
++		p[0] = p[1];
++		p[1] = tmp;
++    //*pp = ntohs(*pp);
+   }
+ 
+   /* strip leading blanks */
diff --git a/nixpkgs/pkgs/tools/misc/hddtemp/default.nix b/nixpkgs/pkgs/tools/misc/hddtemp/default.nix
new file mode 100644
index 000000000000..13b69dad971f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hddtemp/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation {
+  name = "hddtemp-0.3_beta15";
+
+  db = fetchurl{
+    url = mirror://savannah/hddtemp/hddtemp.db;
+    sha256 = "1fr6qgns6qv7cr40lic5yqwkkc7yjmmgx8j0z6d93csg3smzhhya";
+  };
+
+  src = fetchurl {
+    url = mirror://savannah/hddtemp/hddtemp-0.3-beta15.tar.bz2;
+    sha256 = "0nzgg4nl8zm9023wp4dg007z6x3ir60rwbcapr9ks2al81c431b1";
+  };
+
+  # from Gentoo
+  patches = [ ./byteswap.patch ./dontwake.patch ./execinfo.patch ./satacmds.patch ];
+
+  configurePhase =
+    ''
+      mkdir -p $out/nix-support
+      cp $db $out/nix-support/hddtemp.db
+      ./configure --prefix=$out --with-db-path=$out/nix-support/hddtemp.db
+    '';
+
+  meta = with stdenv.lib; {
+    description = "Tool for displaying hard disk temperature";
+    homepage = https://savannah.nongnu.org/projects/hddtemp/;
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hddtemp/dontwake.patch b/nixpkgs/pkgs/tools/misc/hddtemp/dontwake.patch
new file mode 100644
index 000000000000..969da7a70e40
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hddtemp/dontwake.patch
@@ -0,0 +1,20 @@
+--- hddtemp-0.3-beta15/src/sata.c	2012-07-01 16:35:01.681708074 +0200
++++ hddtemp-0.3-beta15/src/sata.c	2012-07-01 16:33:58.172109699 +0200
+@@ -125,6 +125,17 @@
+     dsk->fd = -1;
+     return GETTEMP_NOSENSOR;
+   }
++
++  switch(ata_get_powermode(dsk->fd)) {
++  case PWM_STANDBY:
++  case PWM_SLEEPING:
++    if (!wakeup)
++      return GETTEMP_DRIVE_SLEEP;
++  case PWM_UNKNOWN:
++  case PWM_ACTIVE: /* active or idle */
++  default:
++    break;
++  }
+   
+   /* get SMART values */
+   if(sata_enable_smart(dsk->fd) != 0) {
diff --git a/nixpkgs/pkgs/tools/misc/hddtemp/execinfo.patch b/nixpkgs/pkgs/tools/misc/hddtemp/execinfo.patch
new file mode 100644
index 000000000000..1e7239535d4d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hddtemp/execinfo.patch
@@ -0,0 +1,21 @@
+--- hddtemp-0.3-beta15/configure.in~	2005-10-17 19:14:19 +0000
++++ hddtemp-0.3-beta15/configure.in	2006-12-11 18:23:22 +0000
+@@ -18,6 +18,7 @@
+ AC_HEADER_STDC
+ AC_CHECK_HEADERS(fcntl.h)
+ AC_CHECK_HEADERS(netinet/in.h)
++AC_CHECK_HEADERS(execinfo.h)
+ AC_CHECK_TYPE(in_addr_t, ,[AC_DEFINE_UNQUOTED([in_addr_t], [uint32_t], [Define to 'uint32_t' if <netinet/in.h> does not define.])], [#include <netinet/in.h>])
+ 
+ # Checks for typedefs, structures, and compiler characteristics.
+--- hddtemp-0.3-beta15/src/backtrace.c-orig	2006-12-11 18:20:41 +0000
++++ hddtemp-0.3-beta15/src/backtrace.c	2006-12-11 18:23:28 +0000
+@@ -18,7 +18,7 @@
+ 
+ #include <features.h>
+ 
+-#if defined(__i386__) && defined(__GLIBC__)
++#ifdef HAS_EXECINFO_H
+ 
+ #include <execinfo.h>
+ 
diff --git a/nixpkgs/pkgs/tools/misc/hddtemp/satacmds.patch b/nixpkgs/pkgs/tools/misc/hddtemp/satacmds.patch
new file mode 100644
index 000000000000..d67e0681f33f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hddtemp/satacmds.patch
@@ -0,0 +1,26 @@
+diff -Naurp hddtemp-0.3-beta15-orig/src/satacmds.c hddtemp-0.3-beta15/src/satacmds.c
+--- hddtemp-0.3-beta15-orig/src/satacmds.c	2007-02-10 14:25:15.000000000 +0100
++++ hddtemp-0.3-beta15/src/satacmds.c	2007-02-10 14:26:53.000000000 +0100
+@@ -54,7 +54,6 @@ int sata_pass_thru(int device, unsigned 
+   unsigned char cdb[16];
+   unsigned char sense[32];
+   int dxfer_direction;
+-  int ret;
+   
+   memset(cdb, 0, sizeof(cdb));
+   cdb[0] = ATA_16;
+@@ -78,13 +77,7 @@ int sata_pass_thru(int device, unsigned 
+     cdb[6] = cmd[1];
+   cdb[14] = cmd[0];
+ 
+-  ret = scsi_SG_IO(device, cdb, sizeof(cdb), buffer, cmd[3] * 512, sense, sizeof(sense), dxfer_direction);
+- 
+-  /* Verify SATA magics */
+-  if (sense[0] != 0x72 || sense[7] != 0x0e || sense[9] != 0x0e || sense[10] != 0x00)
+-    return 1;		  
+-  else 
+-    return ret;
++  return scsi_SG_IO(device, cdb, sizeof(cdb), buffer, cmd[3] * 512, sense, sizeof(sense), dxfer_direction);
+ }
+ 
+ void sata_fixstring(unsigned char *s, int bytecount)
diff --git a/nixpkgs/pkgs/tools/misc/hdf4/default.nix b/nixpkgs/pkgs/tools/misc/hdf4/default.nix
new file mode 100644
index 000000000000..e765e9234745
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hdf4/default.nix
@@ -0,0 +1,93 @@
+{ stdenv
+, fetchpatch
+, fetchurl
+, cmake
+, libjpeg
+, zlib
+, szip ? null
+}:
+
+stdenv.mkDerivation rec {
+  pname = "hdf";
+  version = "4.2.14";
+  src = fetchurl {
+    url = "https://support.hdfgroup.org/ftp/HDF/releases/HDF${version}/src/hdf-${version}.tar.bz2";
+    sha256 = "0n29klrrbwan9307np0d9hr128dlpc4nnlf57a140080ll3jmp8l";
+  };
+
+  patches = let
+    # The Debian patch revision to fetch from; this may differ from our package
+    # version, but older patches should still apply.
+    patchRev = "4.2.13-4";
+    getPatch = name: sha256: fetchpatch {
+      inherit sha256;
+      url = "https://salsa.debian.org/debian-gis-team/hdf4/raw/debian/${patchRev}/debian/patches/${name}";
+    };
+
+  in [
+    (getPatch "64bit"                     "1xqk9zpch4m6ipa0f3x2cm8rwaz4p0ppp1vqglvz18j6q91p8b5y")
+    (getPatch "hdfi.h"                    "01fr9csylnvk9jd9jn9y23bvxy192s07p32pr76mm3gwhgs9h7r4")
+    (getPatch "hdf-4.2.10-aarch64.patch"  "1hl0xw5pd9xhpq49xpwgg7c4z6vv5p19x6qayixw0myvgwj1r4zn")
+    (getPatch "reproducible-builds.patch" "02j639w26xkxpxx3pdhbi18ywz8w3qmjpqjb83n47gq29y4g13hc")
+  ];
+
+  buildInputs = [
+    cmake
+    libjpeg
+    szip
+    zlib
+  ];
+
+  preConfigure = stdenv.lib.optionalString (szip != null) "export SZIP_INSTALL=${szip}";
+
+  cmakeFlags = [
+    "-DBUILD_SHARED_LIBS=ON"
+    "-DHDF4_BUILD_TOOLS=ON"
+    "-DHDF4_BUILD_UTILS=ON"
+    "-DHDF4_BUILD_WITH_INSTALL_NAME=OFF"
+    "-DHDF4_ENABLE_JPEG_LIB_SUPPORT=ON"
+    "-DHDF4_ENABLE_NETCDF=OFF"
+    "-DHDF4_ENABLE_Z_LIB_SUPPORT=ON"
+    "-DHDF4_BUILD_FORTRAN=OFF"
+    "-DJPEG_DIR=${libjpeg}"
+  ] ++ stdenv.lib.optionals (szip != null) [
+    "-DHDF4_ENABLE_SZIP_ENCODING=ON"
+    "-DHDF4_ENABLE_SZIP_SUPPORT=ON"
+  ];
+
+  doCheck = true;
+
+  preCheck = ''
+    export LD_LIBRARY_PATH=$(pwd)/bin
+  '' + stdenv.lib.optionalString (stdenv.isDarwin) ''
+    export DYLD_LIBRARY_PATH=$(pwd)/bin
+  '';
+
+  excludedTests = stdenv.lib.optionals stdenv.isDarwin [
+    "MFHDF_TEST-hdftest"
+    "MFHDF_TEST-hdftest-shared"
+    "HDP-dumpsds-18"
+    "NC_TEST-nctest"
+  ];
+
+  checkPhase = let excludedTestsRegex = if (excludedTests != [])
+    then "(" + (stdenv.lib.concatStringsSep "|" excludedTests) + ")"
+    else ""; in ''
+    runHook preCheck
+    ctest -E "${excludedTestsRegex}" --output-on-failure
+    runHook postCheck
+  '';
+
+  outputs = [ "bin" "dev" "out" ];
+
+  postInstall = ''
+    moveToOutput bin "$bin"
+  '';
+
+  meta = {
+    description = "Data model, library, and file format for storing and managing data";
+    homepage = https://support.hdfgroup.org/products/hdf4/;
+    maintainers = with stdenv.lib.maintainers; [ knedlsepp ];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hdf5/1_8.nix b/nixpkgs/pkgs/tools/misc/hdf5/1_8.nix
new file mode 100644
index 000000000000..d27f6fc01bce
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hdf5/1_8.nix
@@ -0,0 +1,75 @@
+{ stdenv
+, fetchurl
+, removeReferencesTo
+, cpp ? false
+, gfortran ? null
+, fortran2003 ? false
+, zlib ? null
+, szip ? null
+, mpi ? null
+, enableShared ? true
+}:
+
+# cpp and mpi options are mutually exclusive
+# (--enable-unsupported could be used to force the build)
+assert !cpp || mpi == null;
+
+# Need a Fortran compiler for Fortran2003 bindings
+assert fortran2003 -> gfortran != null;
+
+# No point splitting version 1.8.18 into multiple outputs.
+# The library /lib/libhdf5.so has a reference to gcc-wrapper
+
+let inherit (stdenv.lib) optional optionals; in
+
+stdenv.mkDerivation rec {
+  version = "1.8.19";
+  pname = "hdf5";
+  src = fetchurl {
+    url = "https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.8/${pname}-${version}/src/${pname}-${version}.tar.bz2";
+    sha256 = "0f3jfbqpaaq21ighi40qzs52nb52kc2d2yjk541rjmsx20b3ih2r" ;
+ };
+
+  passthru = {
+    mpiSupport = (mpi != null);
+    inherit mpi;
+  };
+
+  nativeBuildInputs = [ removeReferencesTo ];
+
+  buildInputs = []
+    ++ optional (gfortran != null) gfortran
+    ++ optional (szip != null) szip;
+
+  propagatedBuildInputs = []
+    ++ optional (zlib != null) zlib
+    ++ optional (mpi != null) mpi;
+
+  configureFlags = []
+    ++ optional cpp "--enable-cxx"
+    ++ optional (gfortran != null) "--enable-fortran"
+    ++ optional fortran2003 "--enable-fortran2003"
+    ++ optional (szip != null) "--with-szlib=${szip}"
+    ++ optionals (mpi != null) ["--enable-parallel" "CC=${mpi}/bin/mpicc"]
+    ++ optional enableShared "--enable-shared";
+
+  patches = [./bin-mv.patch];
+
+  postInstall = ''
+    find "$out" -type f -exec remove-references-to -t ${stdenv.cc} '{}' +
+  '';
+
+  meta = {
+    description = "Data model, library, and file format for storing and managing data";
+    longDescription = ''
+      HDF5 supports an unlimited variety of datatypes, and is designed for flexible and efficient
+      I/O and for high volume and complex data. HDF5 is portable and is extensible, allowing
+      applications to evolve in their use of HDF5. The HDF5 Technology suite includes tools and
+      applications for managing, manipulating, viewing, and analyzing data in the HDF5 format.
+    '';
+    license = stdenv.lib.licenses.free; # BSD-like
+    homepage = https://www.hdfgroup.org/HDF5/;
+    platforms = stdenv.lib.platforms.unix;
+    broken = (gfortran != null) && stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hdf5/bin-mv.patch b/nixpkgs/pkgs/tools/misc/hdf5/bin-mv.patch
new file mode 100644
index 000000000000..45649977e566
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hdf5/bin-mv.patch
@@ -0,0 +1,30 @@
+diff -rc hdf5-1.8.5/configure hdf5-1.8.5-new/configure
+*** hdf5-1.8.5/configure	2010-06-04 20:26:04.000000000 +0200
+--- hdf5-1.8.5-new/configure	2010-08-02 10:30:26.000000000 +0200
+***************
+*** 30587,30598 ****
+    sed 's/#define /#define H5_/' <src/H5config.h |\
+      sed 's/#undef /#undef H5_/' >pubconf
+    if test ! -f src/H5pubconf.h; then
+!     /bin/mv -f pubconf src/H5pubconf.h
+    elif (diff pubconf src/H5pubconf.h >/dev/null); then
+      rm -f pubconf
+      echo "src/H5pubconf.h is unchanged"
+    else
+!     /bin/mv -f pubconf src/H5pubconf.h
+    fi
+    echo "Post process src/libhdf5.settings"
+    sed '/^#/d' < src/libhdf5.settings > libhdf5.settings.TMP
+--- 30587,30598 ----
+    sed 's/#define /#define H5_/' <src/H5config.h |\
+      sed 's/#undef /#undef H5_/' >pubconf
+    if test ! -f src/H5pubconf.h; then
+!     mv -f pubconf src/H5pubconf.h
+    elif (diff pubconf src/H5pubconf.h >/dev/null); then
+      rm -f pubconf
+      echo "src/H5pubconf.h is unchanged"
+    else
+!     mv -f pubconf src/H5pubconf.h
+    fi
+    echo "Post process src/libhdf5.settings"
+    sed '/^#/d' < src/libhdf5.settings > libhdf5.settings.TMP
diff --git a/nixpkgs/pkgs/tools/misc/hdf5/default.nix b/nixpkgs/pkgs/tools/misc/hdf5/default.nix
new file mode 100644
index 000000000000..332938601901
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hdf5/default.nix
@@ -0,0 +1,75 @@
+{ stdenv
+, fetchurl
+, removeReferencesTo
+, cpp ? false
+, gfortran ? null
+, zlib ? null
+, szip ? null
+, mpi ? null
+, enableShared ? true
+}:
+
+# cpp and mpi options are mutually exclusive
+# (--enable-unsupported could be used to force the build)
+assert !cpp || mpi == null;
+
+let inherit (stdenv.lib) optional optionals; in
+
+stdenv.mkDerivation rec {
+  version = "1.10.5";
+  pname = "hdf5";
+  src = fetchurl {
+    url = "https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/${pname}-${version}/src/${pname}-${version}.tar.bz2";
+    sha256 = "0i3g6v521vigzbx8wpd32ibsiiw92r65ca3qdbn0d8fj8f4fmmk8";
+  };
+
+  passthru = {
+    mpiSupport = (mpi != null);
+    inherit mpi;
+  };
+
+  outputs = [ "out" "dev" ];
+
+  nativeBuildInputs = [ removeReferencesTo ];
+
+  buildInputs = []
+    ++ optional (gfortran != null) gfortran
+    ++ optional (szip != null) szip;
+
+  propagatedBuildInputs = []
+    ++ optional (zlib != null) zlib
+    ++ optional (mpi != null) mpi;
+
+  configureFlags = []
+    ++ optional cpp "--enable-cxx"
+    ++ optional (gfortran != null) "--enable-fortran"
+    ++ optional (szip != null) "--with-szlib=${szip}"
+    ++ optionals (mpi != null) ["--enable-parallel" "CC=${mpi}/bin/mpicc"]
+    ++ optional enableShared "--enable-shared";
+
+  patches = [
+    ./bin-mv.patch
+  ];
+
+  postInstall = ''
+    find "$out" -type f -exec remove-references-to -t ${stdenv.cc} '{}' +
+    moveToOutput 'bin/h5cc' "''${!outputDev}"
+    moveToOutput 'bin/h5c++' "''${!outputDev}"
+    moveToOutput 'bin/h5fc' "''${!outputDev}"
+    moveToOutput 'bin/h5pcc' "''${!outputDev}"
+  '';
+
+  meta = {
+    description = "Data model, library, and file format for storing and managing data";
+    longDescription = ''
+      HDF5 supports an unlimited variety of datatypes, and is designed for flexible and efficient
+      I/O and for high volume and complex data. HDF5 is portable and is extensible, allowing
+      applications to evolve in their use of HDF5. The HDF5 Technology suite includes tools and
+      applications for managing, manipulating, viewing, and analyzing data in the HDF5 format.
+    '';
+    license = stdenv.lib.licenses.bsd3; # Lawrence Berkeley National Labs BSD 3-Clause variant
+    homepage = https://www.hdfgroup.org/HDF5/;
+    platforms = stdenv.lib.platforms.unix;
+    broken = (gfortran != null) && stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hdfjava/default.nix b/nixpkgs/pkgs/tools/misc/hdfjava/default.nix
new file mode 100644
index 000000000000..6087a76e6bd1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hdfjava/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl, cmake, javac }:
+
+stdenv.mkDerivation rec {
+  pname = "hdf-java";
+  version = "3.3.2";
+
+  src = fetchurl {
+    url = "http://www.hdfgroup.org/ftp/HDF5/releases/HDF-JAVA/hdfjni-${version}/src/CMake-hdfjava-${version}.tar.gz";
+    sha256 = "0m1gp2aspcblqzmpqbdpfp6giskws85ds6p5gz8sx7asyp7wznpr";
+  };
+
+  nativeBuildInputs = [ cmake javac ];
+
+  dontConfigure = true;
+  buildPhase = "./build-hdfjava-unix.sh";
+  installPhase = ''
+    mkdir -p $out
+    cp -r build/_CPack_Packages/Linux/TGZ/HDFJava-3.3.2-Linux/HDF_Group/HDFJava/${version}/* $out/
+  '';
+
+  meta = {
+    description = "A Java package that implements HDF4 and HDF5 data objects in an object-oriented form";
+    license = stdenv.lib.licenses.free; # BSD-like
+    homepage = https://support.hdfgroup.org/products/java/index.html;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hdfview/default.nix b/nixpkgs/pkgs/tools/misc/hdfview/default.nix
new file mode 100644
index 000000000000..fb6914c01d0a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hdfview/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, ant, javac, hdf_java }:
+
+stdenv.mkDerivation rec {
+  pname = "hdfview";
+  version = "2.14";
+
+  src = fetchurl {
+    url = "https://support.hdfgroup.org/ftp/HDF5/hdf-java/current/src/${pname}-${version}.tar.gz";
+    sha256 = "0lv9djfm7hnp14mcyzbiax3xjb8vkbzhh7bdl6cvgy53pc08784p";
+  };
+
+  nativeBuildInputs = [ ant javac ];
+
+  HDFLIBS = hdf_java;
+
+  buildPhase = ''
+    ant run
+    ant package
+  '';
+
+  installPhase = ''
+    mkdir $out
+    # exclude jre
+    cp -r build/HDF_Group/HDFView/*/{lib,share} $out/
+    mkdir $out/bin
+    cp -r build/HDF_Group/HDFView/*/hdfview.sh $out/bin/hdfview
+    chmod +x $out/bin/hdfview
+    substituteInPlace $out/bin/hdfview \
+      --replace "@JAVABIN@" "${javac}/bin/" \
+      --replace "@INSTALLDIR@" "$out"
+  '';
+
+  meta = {
+    description = "A visual tool for browsing and editing HDF4 and HDF5 files";
+    license = stdenv.lib.licenses.free; # BSD-like
+    homepage = https://support.hdfgroup.org/products/java/index.html;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/heatseeker/default.nix b/nixpkgs/pkgs/tools/misc/heatseeker/default.nix
new file mode 100644
index 000000000000..bf6740d7ee4a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/heatseeker/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub, rustPlatform }:
+
+with rustPlatform;
+
+buildRustPackage rec {
+  pname = "heatseeker";
+  version = "1.5.1";
+
+  src = fetchFromGitHub {
+    owner = "rschmitt";
+    repo = "heatseeker";
+    rev = "v${version}";
+    sha256 = "1fcrbjwnhcz71i70ppy0rcgk5crwwmbkm9nrk1kapvks33pv0az7";
+  };
+
+  cargoSha256 = "0m3sxbz1iii31s30cnv1970i1mwfhl6gm19k8wv0n7zji30ayx07";
+
+  # some tests require a tty, this variable turns them off for Travis CI,
+  # which we can also make use of
+  TRAVIS = "true";
+
+  meta = with stdenv.lib; {
+    description = "A general-purpose fuzzy selector";
+    homepage = https://github.com/rschmitt/heatseeker;
+    license = licenses.mit;
+    maintainers = [ maintainers.michaelpj ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hebcal/default.nix b/nixpkgs/pkgs/tools/misc/hebcal/default.nix
new file mode 100644
index 000000000000..8b435fcef565
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hebcal/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  version = "4.19";
+  pname = "hebcal";
+
+  src = fetchFromGitHub {
+    owner = "hebcal";
+    repo = "hebcal";
+    rev = "v${version}";
+    sha256 = "028y2bw0bs0bx58gnxzbrg2c14a2pgkni2carf5i7kb6dg4wnkaq";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    homepage = https://hebcal.github.io;
+    description = "A perpetual Jewish Calendar";
+    longDescription = "Hebcal is a program which prints out the days in the Jewish calendar for a given Gregorian year. Hebcal is fairly flexible in terms of which events in the Jewish calendar it displays.";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.hhm ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/heimdall/default.nix b/nixpkgs/pkgs/tools/misc/heimdall/default.nix
new file mode 100644
index 000000000000..26396fee507e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/heimdall/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, mkDerivation, fetchFromGitHub, cmake, zlib, libusb1
+, enableGUI ? false, qtbase ? null
+}:
+
+let version = "1.4.2"; in
+
+mkDerivation {
+  name = "heimdall-${if enableGUI then "gui-" else ""}${version}";
+
+  src = fetchFromGitHub {
+    owner  = "Benjamin-Dobell";
+    repo   = "Heimdall";
+    rev    = "v${version}";
+    sha256 = "1ygn4snvcmi98rgldgxf5hwm7zzi1zcsihfvm6awf9s6mpcjzbqz";
+  };
+
+  buildInputs = [
+    zlib libusb1
+  ] ++ stdenv.lib.optional enableGUI qtbase;
+  nativeBuildInputs = [ cmake ];
+
+  cmakeFlags = [
+    "-DDISABLE_FRONTEND=${if enableGUI then "OFF" else "ON"}"
+    "-DLIBUSB_LIBRARY=${libusb1}"
+  ];
+
+  preConfigure = ''
+    # Give ownership of the Galaxy S USB device to the logged in user.
+    substituteInPlace heimdall/60-heimdall.rules --replace 'MODE="0666"' 'TAG+="uaccess"'
+  '' + stdenv.lib.optionalString stdenv.isDarwin ''
+    substituteInPlace libpit/CMakeLists.txt --replace "-std=gnu++11" ""
+  '';
+
+  installPhase = ''
+    mkdir -p $out/{bin,share/doc/heimdall,lib/udev/rules.d}
+    install -m755 -t $out/bin                bin/*
+    install -m644 -t $out/lib/udev/rules.d   ../heimdall/60-heimdall.rules
+    install -m644 ../Linux/README   $out/share/doc/heimdall/README.linux
+    install -m644 ../OSX/README.txt $out/share/doc/heimdall/README.osx
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    homepage    = http://www.glassechidna.com.au/products/heimdall/;
+    description = "A cross-platform tool suite to flash firmware onto Samsung Galaxy S devices";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hexd/default.nix b/nixpkgs/pkgs/tools/misc/hexd/default.nix
new file mode 100644
index 000000000000..eabb7838e8ac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hexd/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub }:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  pname = "hexd";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "FireyFly";
+    repo = "hexd";
+    rev = "v${version}";
+    sha256 = "1lm0mj5c71id5kpqar8n44023s1kymb3q45nsz0hjh9v7p8libp0";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = {
+    description = "Colourful, human-friendly hexdump tool";
+    homepage = https://github.com/FireyFly/hexd;
+    maintainers = [ maintainers.FireyFly ];
+    license = licenses.mit;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hexyl/default.nix b/nixpkgs/pkgs/tools/misc/hexyl/default.nix
new file mode 100644
index 000000000000..c00e47433c1a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hexyl/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname   = "hexyl";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner  = "sharkdp";
+    repo   = pname;
+    rev    = "v${version}";
+    sha256 = "1n2q5a6697bxvl0askywhad2x560cajv456gxihdqqmmyq2vf63h";
+  };
+
+  cargoSha256 = "1wcpbqlglf9r0xhfjmyym8bnd4pgrsf9lrmb14hn1ml5zlshpd7p";
+
+  meta = with stdenv.lib; {
+    description = "A command-line hex viewer";
+    longDescription = ''
+      `hexyl` is a simple hex viewer for the terminal. It uses a colored
+      output to distinguish different categories of bytes (NULL bytes,
+      printable ASCII characters, ASCII whitespace characters, other ASCII
+      characters and non-ASCII).
+    '';
+    homepage    = https://github.com/sharkdp/hexyl;
+    license     = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ dywedir ];
+    platforms   = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hhpc/default.nix b/nixpkgs/pkgs/tools/misc/hhpc/default.nix
new file mode 100644
index 000000000000..4b1b0d0c7623
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hhpc/default.nix
@@ -0,0 +1,28 @@
+{stdenv, fetchFromGitHub, xorg, pkgconfig}:
+
+stdenv.mkDerivation rec {
+  pname = "hhpc";
+  version = "0.3.1";
+
+  src = fetchFromGitHub {
+    owner = "aktau";
+    repo = "hhpc";
+    rev = "v${version}";
+    sha256 = "1djsw1r38mh6zx0rbyn2cfa931hyddib4fl3i27c4z7xinl709ss";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ xorg.libX11 ];
+
+  installPhase = ''
+      mkdir -p $out/bin
+      cp hhpc $out/bin/
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Hides the mouse pointer in X11";
+    maintainers = with maintainers; [ nico202 ];
+    platforms = platforms.unix;
+    license = stdenv.lib.licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hid-listen/default.nix b/nixpkgs/pkgs/tools/misc/hid-listen/default.nix
new file mode 100644
index 000000000000..6bbe4888d1b8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hid-listen/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchzip }:
+stdenv.mkDerivation rec {
+  pname = "hid-listen";
+  version = "1.01";
+
+  src = fetchzip {
+    name = "hid_listen_${version}";
+    url = "https://www.pjrc.com/teensy/hid_listen_${version}.zip";
+    sha256 = "0sd4dvi39fl4vy880mg531ryks5zglfz5mdyyqr7x6qv056ffx9w";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv ./hid_listen $out/bin/hid_listen
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A tool thats prints debugging information from usb HID devices";
+    homepage = https://www.pjrc.com/teensy/hid_listen.html;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ tomsmeets ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/homesick/Gemfile b/nixpkgs/pkgs/tools/misc/homesick/Gemfile
new file mode 100644
index 000000000000..fb1d6a5584f9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/homesick/Gemfile
@@ -0,0 +1,3 @@
+source "https://rubygems.org"
+
+gem "homesick"
diff --git a/nixpkgs/pkgs/tools/misc/homesick/Gemfile.lock b/nixpkgs/pkgs/tools/misc/homesick/Gemfile.lock
new file mode 100644
index 000000000000..42ab916db3e3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/homesick/Gemfile.lock
@@ -0,0 +1,15 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    homesick (1.1.6)
+      thor (>= 0.14.0)
+    thor (0.20.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  homesick
+
+BUNDLED WITH
+   1.14.6
diff --git a/nixpkgs/pkgs/tools/misc/homesick/default.nix b/nixpkgs/pkgs/tools/misc/homesick/default.nix
new file mode 100644
index 000000000000..00a9bf85650c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/homesick/default.nix
@@ -0,0 +1,28 @@
+{ lib, bundlerEnv, bundlerUpdateScript, git }:
+bundlerEnv {
+  pname = "homesick";
+
+  gemdir = ./.;
+
+  # Cannot use `wrapProgram` because the the help is aware of the file name.
+  postInstall = ''
+    rm $out/bin/thor
+    sed 1a'ENV["PATH"] = "${git}/bin:#{ENV["PATH"] ? ":#{ENV["PATH"]}" : "" }"' -i $out/bin/homesick
+  '';
+
+  passthru.updateScript = bundlerUpdateScript "homesick";
+
+  meta = with lib; {
+    description = "Your home directory is your castle. Don't leave your dotfiles behind";
+    longDescription =
+      ''
+        Homesick is sorta like rip, but for dotfiles. It uses git to clone a repository containing
+        dotfiles, and saves them in ~/.homesick. It then allows you to symlink all the dotfiles into
+        place with a single command.
+      '';
+    homepage = https://github.com/technicalpickles/homesick;
+    license = licenses.mit;
+    maintainers = with maintainers; [ aaronschif nicknovitski ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/homesick/gemset.nix b/nixpkgs/pkgs/tools/misc/homesick/gemset.nix
new file mode 100644
index 000000000000..f51448276802
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/homesick/gemset.nix
@@ -0,0 +1,19 @@
+{
+  homesick = {
+    dependencies = ["thor"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lxvnp4ncbx0irlblfxbd1f8h4hl11hgmyiy35q79w137r3prxml";
+      type = "gem";
+    };
+    version = "1.1.6";
+  };
+  thor = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nmqpyj642sk4g16nkbq6pj856adpv91lp4krwhqkh2iw63aszdl";
+      type = "gem";
+    };
+    version = "0.20.0";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/misc/hostsblock/default.nix b/nixpkgs/pkgs/tools/misc/hostsblock/default.nix
new file mode 100644
index 000000000000..a6ed7bf92ff9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hostsblock/default.nix
@@ -0,0 +1,73 @@
+{ lib, coreutils, curl, fetchFromGitHub, unzip, p7zip, gnused, gnugrep, stdenv
+, blacklist ? [ "adwords.google.com" ]
+, whitelist ? [
+  ".dropbox.com"
+  " www.malwaredomainlists.com"
+  " www.arcamax.com"
+  " www.instructables.com"
+  " goo.gl"
+  " www.reddit.com"
+  " t.co"
+  " bit.ly"
+  " www.viddler.com"
+  " viddler.com"
+  " tinyurl.com"
+  " ompldr.org"
+  " www.ompldr.org"
+  "login.yahoo.com"
+  " l.yimg.com"
+  ".bp.blogspot.com"
+] }:
+
+stdenv.mkDerivation {
+  pname = "hostsblock";
+  version = "20161213";
+
+  src = fetchFromGitHub {
+    owner = "gaenserich";
+    repo = "hostsblock";
+    rev = "91cacbdfbfb5e7ae9ba3babf8de41e135270c310";
+    sha256 = "1w91fbgf8v2nn0a6m8l6kd455km2j1lvpvqil4yxhrg018aigax0";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install -Dm744 src/hostsblock.sh $out/bin/hostsblock
+    install -Dm744 src/hostsblock-urlcheck.sh $out/bin/hostsblock-urlcheck
+
+    mkdir -p $out/lib
+    install -Dm644 src/hostsblock-common.sh $out/lib/
+
+    mkdir -p $out/etc
+    install -Dm644 conf/hostsblock.conf $out/etc/
+    ${lib.concatMapStrings (d: "echo ${d} >> $out/etc/black.list\n") blacklist}
+    ${lib.concatMapStrings (d: "echo ${d} >> $out/etc/white.list\n") whitelist}
+    install -Dm644 conf/hosts.head $out/etc/
+
+    for f in $out/bin/* $out/lib/* $out/etc/hostsblock.conf; do
+      substituteInPlace $f --replace "/dev/shm" "/tmp"
+      substituteInPlace $f --replace "/usr/lib/" "$out/lib/"
+      substituteInPlace $f --replace "/etc/hostsblock/" "$out/etc/"
+      sed --in-place --regexp-extended "s|([\` ])curl |\1${curl}/bin/curl |g" $f
+      substituteInPlace $f --replace grep ${gnugrep}/bin/grep
+      substituteInPlace $f --replace " sed " " ${gnused}/bin/sed "
+      sed --in-place --regexp-extended "s|([^_])unzip |\1${unzip}/bin/unzip |" $f
+      sed --in-place --regexp-extended "s|7za([^,])|${p7zip}/bin/7za\1|g" $f
+    done
+
+    echo "postprocess(){ ${coreutils}/bin/true; }" >> $out/etc/hostsblock.conf
+
+    mkdir -p $out/share/dbus-1/system-services
+    install -Dm644 systemd/hostsblock.service $out/share/dbus-1/system-services
+    install -Dm644 systemd/hostsblock.timer $out/share/dbus-1/system-services
+  '';
+
+  meta = with lib; {
+    description = "An ad- and malware-blocking script for Linux";
+    homepage = http://gaenserich.github.io/hostsblock/;
+    license = licenses.gpl3;
+    maintainers = [ maintainers.nicknovitski ];
+    platforms = platforms.unix;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/hpl/default.nix b/nixpkgs/pkgs/tools/misc/hpl/default.nix
new file mode 100644
index 000000000000..16bc0393f23c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hpl/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl, openblasCompat, mpi } :
+
+stdenv.mkDerivation rec {
+  pname = "hpl";
+  version = "2.3";
+
+  src = fetchurl {
+    url = "http://www.netlib.org/benchmark/hpl/${pname}-${version}.tar.gz";
+    sha256 = "0c18c7fzlqxifz1bf3izil0bczv3a7nsv0dn6winy3ik49yw3i9j";
+  };
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    # only contains the static lib
+    rm -r $out/lib
+
+    install -D testing/ptest/HPL.dat $out/share/hpl/HPL.dat
+  '';
+
+  buildInputs = [ openblasCompat mpi ];
+
+  meta = with stdenv.lib; {
+    description = "Portable Implementation of the Linpack Benchmark for Distributed-Memory Computers";
+    homepage = http://www.netlib.org/benchmark/hpl/;
+    platforms = platforms.unix;
+    license = licenses.bsdOriginal;
+    maintainers = [ maintainers.markuskowa ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/html-proofer/Gemfile b/nixpkgs/pkgs/tools/misc/html-proofer/Gemfile
new file mode 100644
index 000000000000..a7c369cc6804
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/html-proofer/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'html-proofer'
diff --git a/nixpkgs/pkgs/tools/misc/html-proofer/Gemfile.lock b/nixpkgs/pkgs/tools/misc/html-proofer/Gemfile.lock
new file mode 100644
index 000000000000..cab69d41f936
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/html-proofer/Gemfile.lock
@@ -0,0 +1,37 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    addressable (2.7.0)
+      public_suffix (>= 2.0.2, < 5.0)
+    ethon (0.12.0)
+      ffi (>= 1.3.0)
+    ffi (1.12.1)
+    html-proofer (3.15.1)
+      addressable (~> 2.3)
+      mercenary (~> 0.3)
+      nokogumbo (~> 2.0)
+      parallel (~> 1.3)
+      rainbow (~> 3.0)
+      typhoeus (~> 1.3)
+      yell (~> 2.0)
+    mercenary (0.4.0)
+    mini_portile2 (2.4.0)
+    nokogiri (1.10.7)
+      mini_portile2 (~> 2.4.0)
+    nokogumbo (2.0.2)
+      nokogiri (~> 1.8, >= 1.8.4)
+    parallel (1.19.1)
+    public_suffix (4.0.3)
+    rainbow (3.0.0)
+    typhoeus (1.3.1)
+      ethon (>= 0.9.0)
+    yell (2.2.1)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  html-proofer
+
+BUNDLED WITH
+   1.17.3
diff --git a/nixpkgs/pkgs/tools/misc/html-proofer/default.nix b/nixpkgs/pkgs/tools/misc/html-proofer/default.nix
new file mode 100644
index 000000000000..49881f1b0b49
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/html-proofer/default.nix
@@ -0,0 +1,18 @@
+{ bundlerEnv, ruby, lib }:
+
+bundlerEnv rec {
+  name = "${pname}-${version}";
+  pname = "html-proofer";
+  version = (import ./gemset.nix).html-proofer.version;
+
+  inherit ruby;
+  gemdir = ./.;
+
+  meta = with lib; {
+    description = "A tool to validate HTML files";
+    homepage    = https://github.com/gjtorikian/html-proofer;
+    license     = licenses.mit;
+    maintainers = with maintainers; [ primeos ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/html-proofer/gemset.nix b/nixpkgs/pkgs/tools/misc/html-proofer/gemset.nix
new file mode 100644
index 000000000000..fbf65a8a0c03
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/html-proofer/gemset.nix
@@ -0,0 +1,138 @@
+{
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fvchp2rhp2rmigx7qglf69xvjqvzq7x0g49naliw29r2bz656sy";
+      type = "gem";
+    };
+    version = "2.7.0";
+  };
+  ethon = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gggrgkcq839mamx7a8jbnp2h7x2ykfn34ixwskwb0lzx2ak17g9";
+      type = "gem";
+    };
+    version = "0.12.0";
+  };
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0i2vxj3ryvih5y06mgsa19dwy8fpyx58byh5szp7m6i702p78rni";
+      type = "gem";
+    };
+    version = "1.12.1";
+  };
+  html-proofer = {
+    dependencies = ["addressable" "mercenary" "nokogumbo" "parallel" "rainbow" "typhoeus" "yell"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0krd80ga7qcms469l55jbm711a7ph2lmyn88l929nhbxc7sgm81g";
+      type = "gem";
+    };
+    version = "3.15.1";
+  };
+  mercenary = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0f2i827w4lmsizrxixsrv2ssa3gk1b7lmqh8brk8ijmdb551wnmj";
+      type = "gem";
+    };
+    version = "0.4.0";
+  };
+  mini_portile2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15zplpfw3knqifj9bpf604rb3wc1vhq6363pd6lvhayng8wql5vy";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+  nokogiri = {
+    dependencies = ["mini_portile2"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0r0qpgf80h764k176yr63gqbs2z0xbsp8vlvs2a79d5r9vs83kln";
+      type = "gem";
+    };
+    version = "1.10.7";
+  };
+  nokogumbo = {
+    dependencies = ["nokogiri"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sxjnpjvrn10gdmfw2dimhch861lz00f28hvkkz0b1gc2rb65k9s";
+      type = "gem";
+    };
+    version = "2.0.2";
+  };
+  parallel = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12jijkap4akzdv11lm08dglsc8jmc87xcgq6947i1s3qb69f4zn2";
+      type = "gem";
+    };
+    version = "1.19.1";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1c6kq6s13idl2036b5lch8r7390f8w82cal8hcp4ml76fm2vdac7";
+      type = "gem";
+    };
+    version = "4.0.3";
+  };
+  rainbow = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bb2fpjspydr6x0s8pn1pqkzmxszvkfapv0p4627mywl7ky4zkhk";
+      type = "gem";
+    };
+    version = "3.0.0";
+  };
+  typhoeus = {
+    dependencies = ["ethon"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0cni8b1idcp0dk8kybmxydadhfpaj3lbs99w5kjibv8bsmip2zi5";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  yell = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1r2kygdh193qdbjjwhfghzl9czj4jr9xrw3gqyg5hmvmn7lygjwm";
+      type = "gem";
+    };
+    version = "2.2.1";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/misc/hyperfine/default.nix b/nixpkgs/pkgs/tools/misc/hyperfine/default.nix
new file mode 100644
index 000000000000..9a27c4df7721
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hyperfine/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub, rustPlatform
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "hyperfine";
+  version = "1.9.0";
+
+  src = fetchFromGitHub {
+    owner  = "sharkdp";
+    repo   = pname;
+    rev    = "refs/tags/v${version}";
+    sha256 = "0jx2lqhayp14c51dfvgmqrmmadyvxf0p4dsn770ndqpzv66rh6zb";
+  };
+
+  cargoSha256 = "0sqmqfig40ragjx3jvwrng6hqz8l1zbmxzq470lk66x0gy4gziag";
+
+  buildInputs = stdenv.lib.optional stdenv.isDarwin Security;
+
+  meta = with stdenv.lib; {
+    description = "Command-line benchmarking tool";
+    homepage    = "https://github.com/sharkdp/hyperfine";
+    license     = with licenses; [ asl20 /* or */ mit ];
+    maintainers = [ maintainers.thoughtpolice ];
+    platforms   = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hyperledger-fabric/default.nix b/nixpkgs/pkgs/tools/misc/hyperledger-fabric/default.nix
new file mode 100644
index 000000000000..a66923b03f49
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hyperledger-fabric/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "hyperledger-fabric";
+  version = "1.3.0";
+
+  goPackagePath = "github.com/hyperledger/fabric";
+
+  # taken from https://github.com/hyperledger/fabric/blob/v1.3.0/Makefile#L108
+  subPackages = [
+    "common/tools/configtxgen"
+    "common/tools/configtxlator"
+    "common/tools/cryptogen"
+    "common/tools/idemixgen"
+    "cmd/discover"
+    "peer"
+    "orderer"
+  ];
+
+  src = fetchFromGitHub {
+    owner = "hyperledger";
+    repo = "fabric";
+    rev = "v${version}";
+    sha256 = "08qrrxzgkqg9v7n3y8f2vggyqx9j65wisxi17hrabz5mzaq299xs";
+  };
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    description = "An implementation of blockchain technology, leveraging familiar and proven technologies";
+    homepage = https://wiki.hyperledger.org/projects/Fabric;
+    license = licenses.asl20;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/i3cat/default.nix b/nixpkgs/pkgs/tools/misc/i3cat/default.nix
new file mode 100644
index 000000000000..bc934c424f30
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/i3cat/default.nix
@@ -0,0 +1,17 @@
+{ stdenv, buildGoPackage, fetchgit }:
+
+buildGoPackage rec {
+  pname = "i3cat";
+  version = "20150321-${stdenv.lib.strings.substring 0 7 rev}";
+  rev = "b9ba886a7c769994ccd8d4627978ef4b51fcf576";
+
+  goPackagePath = "github.com/vincent-petithory/i3cat";
+
+  src = fetchgit {
+    inherit rev;
+    url = "https://github.com/vincent-petithory/i3cat";
+    sha256 = "1xlm5c9ajdb71985nq7hcsaraq2z06przbl6r4ykvzi8w2lwgv72";
+  };
+
+  goDeps = ./deps.nix;
+}
diff --git a/nixpkgs/pkgs/tools/misc/i3cat/deps.nix b/nixpkgs/pkgs/tools/misc/i3cat/deps.nix
new file mode 100644
index 000000000000..01e85cbd824d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/i3cat/deps.nix
@@ -0,0 +1,11 @@
+[
+  {
+    goPackagePath = "github.com/vincent-petithory/structfield";
+    fetch = {
+      type = "git";
+      url = "https://github.com/vincent-petithory/structfield";
+      rev = "01a738558a47fbf16712994d1737fb31c77e7d11";
+      sha256 = "1kyx71z13mf6hc8ly0j0b9zblgvj5lzzvgnc3fqh61wgxrsw24dw";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/misc/i3minator/default.nix b/nixpkgs/pkgs/tools/misc/i3minator/default.nix
new file mode 100644
index 000000000000..372eebb59f61
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/i3minator/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchFromGitHub, pythonPackages, glibcLocales }:
+
+pythonPackages.buildPythonApplication rec {
+  pname = "i3minator";
+  version = "0.0.4";
+
+  src = fetchFromGitHub {
+    owner = "carlesso";
+    repo = "i3minator";
+    rev = version;
+    sha256 = "07dic5d2m0zw0psginpl43xn0mpxw7wilj49d02knz69f7c416lm";
+  };
+
+  LC_ALL = "en_US.UTF-8";
+  buildInputs = [ glibcLocales ];
+  propagatedBuildInputs = [ pythonPackages.pyyaml pythonPackages.i3-py ];
+
+  # No tests
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "i3 project manager similar to tmuxinator";
+    longDescription = ''
+      A simple "workspace manager" for i3. It allows to quickly
+      manage workspaces defining windows and their layout. The
+      project is inspired by tmuxinator and uses i3-py.
+    '';
+    homepage = https://github.com/carlesso/i3minator;
+    license = stdenv.lib.licenses.wtfpl;
+    maintainers = with maintainers; [ domenkozar ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/ical2org/default.nix b/nixpkgs/pkgs/tools/misc/ical2org/default.nix
new file mode 100644
index 000000000000..872de2c702b6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ical2org/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub, buildGoPackage}:
+
+buildGoPackage rec {
+  pname = "ical2org";
+  version="1.1.5";
+
+  goPackagePath = "github.com/rjhorniii/ical2org";
+
+  src = fetchFromGitHub {
+    owner = "rjhorniii";
+    repo = "ical2org";
+    rev = "v.${version}";
+    sha256 = "0hdx2j2innjh0z4kxcfzwdl2d54nv0g9ai9fyacfiagjhnzgf7cm";
+    fetchSubmodules = true;
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    description = "Convert an iCal file to org agenda format, optionally deduplicating entries.";
+    homepage = https://github.com/rjhorniii/ical2org;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ swflint ];
+    platforms = platforms.unix;
+  };
+  
+}
diff --git a/nixpkgs/pkgs/tools/misc/ical2org/deps.nix b/nixpkgs/pkgs/tools/misc/ical2org/deps.nix
new file mode 100644
index 000000000000..b948fac3d116
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ical2org/deps.nix
@@ -0,0 +1,11 @@
+[
+  {
+    goPackagePath = "github.com/rjhorniii/ics-golang";
+    fetch = {
+      type = "git";
+      url = "https://github.com/rjhorniii/ics-golang";
+      rev = "da66d6f502fac65073773ea3779cae2959545cb2";
+      sha256 = "1mm5rssvyjk29n1gq4l5xw26gm8bhvbzrs5c059i41zh9af121px";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/misc/ideviceinstaller/default.nix b/nixpkgs/pkgs/tools/misc/ideviceinstaller/default.nix
new file mode 100644
index 000000000000..98b039e3f8ae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ideviceinstaller/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, usbmuxd, libzip, libimobiledevice }:
+
+stdenv.mkDerivation rec {
+  pname = "ideviceinstaller";
+  version = "2018-10-01";
+
+  src = fetchFromGitHub {
+    owner = "libimobiledevice";
+    repo = pname;
+    rev = "f14def7cd9303a0fe622732fae9830ae702fdd7c";
+    sha256 = "1biwhbldvgdhn8ygp7w79ca0rivzdjpykr76pyhy7r2fa56mrwq8";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig usbmuxd libimobiledevice libzip ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/libimobiledevice/ideviceinstaller;
+    description = "List/modify installed apps of iOS devices";
+    longDescription = ''
+      ideviceinstaller is a tool to interact with the installation_proxy
+      of an iOS device allowing to install, upgrade, uninstall, archive, restore
+      and enumerate installed or archived apps.
+    '';
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ aristid infinisil ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/idevicerestore/default.nix b/nixpkgs/pkgs/tools/misc/idevicerestore/default.nix
new file mode 100644
index 000000000000..a12fa04c5fce
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/idevicerestore/default.nix
@@ -0,0 +1,58 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig
+, curl
+, libimobiledevice
+, libirecovery
+, libzip
+, libusbmuxd
+}:
+
+stdenv.mkDerivation rec {
+  pname = "idevicerestore";
+  version = "2019-02-14";
+
+  src = fetchFromGitHub {
+    owner = "libimobiledevice";
+    repo = pname;
+    rev = "8a882038b2b1e022fbd19eaf8bea51006a373c06";
+    sha256 = "17lisl7ll43ixl1zqwchn7jljrdyl2p9q99w30i6qaci71mas37m";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkgconfig
+  ];
+
+  buildInputs = [
+    curl
+    libimobiledevice
+    libirecovery
+    libzip
+    libusbmuxd
+    # Not listing other dependencies specified in
+    # https://github.com/libimobiledevice/idevicerestore/blob/8a882038b2b1e022fbd19eaf8bea51006a373c06/README#L20
+    # because they are inherited `libimobiledevice`.
+  ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/libimobiledevice/idevicerestore;
+    description = "Restore/upgrade firmware of iOS devices";
+    longDescription = ''
+      The idevicerestore tool allows to restore firmware files to iOS devices.
+
+      It is a full reimplementation of all granular steps which are performed during
+      restore of a firmware to a device.
+
+      In general, upgrades and downgrades are possible, however subject to
+      availability of SHSH blobs from Apple for signing the firmare files.
+
+      To restore a device to some firmware, simply run the following:
+      $ sudo idevicerestore -l
+
+      This will download and restore a device to the latest firmware available.
+    '';
+    license = licenses.lgpl21Plus;
+    # configure.ac suggests it should work for darwin and mingw as well but not tried yet
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ nh2 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/idutils/default.nix b/nixpkgs/pkgs/tools/misc/idutils/default.nix
new file mode 100644
index 000000000000..959be2a4eb12
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/idutils/default.nix
@@ -0,0 +1,54 @@
+{ fetchurl, stdenv, emacs }:
+
+stdenv.mkDerivation rec {
+  name = "idutils-4.6";
+
+  src = fetchurl {
+    url = "mirror://gnu/idutils/${name}.tar.xz";
+    sha256 = "1hmai3422iaqnp34kkzxdnywl7n7pvlxp11vrw66ybxn9wxg90c1";
+  };
+
+  preConfigure =
+    ''
+       # Fix for building on Glibc 2.16.  Won't be needed once the
+       # gnulib in idutils is updated.
+       sed -i '/gets is a security hole/d' lib/stdio.in.h
+    '';
+
+  buildInputs = stdenv.lib.optional stdenv.isLinux emacs;
+
+  doCheck = !stdenv.isDarwin;
+
+  patches = [ ./nix-mapping.patch ];
+
+  meta = {
+    description = "Text searching utility";
+
+    longDescription = ''
+      An "ID database" is a binary file containing a list of file
+      names, a list of tokens, and a sparse matrix indicating which
+      tokens appear in which files.
+
+      With this database and some tools to query it, many
+      text-searching tasks become simpler and faster.  For example,
+      you can list all files that reference a particular `\#include'
+      file throughout a huge source hierarchy, search for all the
+      memos containing references to a project, or automatically
+      invoke an editor on all files containing references to some
+      function or variable.  Anyone with a large software project to
+      maintain, or a large set of text files to organize, can benefit
+      from the ID utilities.
+
+      Although the name `ID' is short for `identifier', the ID
+      utilities handle more than just identifiers; they also treat
+      other kinds of tokens, most notably numeric constants, and the
+      contents of certain character strings.
+    '';
+
+    homepage = https://www.gnu.org/software/idutils/;
+    license = stdenv.lib.licenses.gpl3Plus;
+
+    maintainers = [ ];
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/idutils/nix-mapping.patch b/nixpkgs/pkgs/tools/misc/idutils/nix-mapping.patch
new file mode 100644
index 000000000000..6f92ffa07b52
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/idutils/nix-mapping.patch
@@ -0,0 +1,12 @@
+Recognize `.nix' files as text files.
+
+--- idutils-4.5/libidu/id-lang.map	2009-05-17 16:38:42.000000000 +0200
++++ idutils-4.5/libidu/id-lang.map	2010-07-04 15:52:48.000000000 +0200
+@@ -88,6 +88,7 @@ GNUmakefile		make
+ *.doc			text
+ *.txt			text
+ *.org			text
++*.nix			text
+ 
+ *.m4			m4
+ *.ac			m4
diff --git a/nixpkgs/pkgs/tools/misc/ili2c/default.nix b/nixpkgs/pkgs/tools/misc/ili2c/default.nix
new file mode 100644
index 000000000000..4d78f797f109
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ili2c/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchFromGitHub, jdk, ant, makeWrapper, jre }:
+
+stdenv.mkDerivation rec {
+  pname = "ili2c";
+  version = "5.0.0";
+
+  nativeBuildInputs = [ ant jdk makeWrapper ];
+
+  src = fetchFromGitHub {
+    owner = "claeis";
+    repo = pname;
+    rev = "${pname}-${version}";
+    sha256 = "0xps2343d5gdr2aj8j3l4cjq4k9zbxxlhnp8sjlhxh1wdczxlwx6";
+  };
+
+  buildPhase = "ant jar";
+
+  installPhase =
+    ''
+      mkdir -p $out/share/${pname}
+      cp $build/build/source/build/jar/ili2c.jar $out/share/${pname}
+
+      mkdir -p $out/bin
+      makeWrapper ${jre}/bin/java $out/bin/ili2c \
+        --add-flags "-jar $out/share/${pname}/ili2c.jar"
+    '';
+
+  meta = with stdenv.lib; {
+    description = "The INTERLIS Compiler";
+    longDescription = ''
+      Checks the syntactical correctness of an INTERLIS data model.
+    '';
+    homepage = "https://www.interlis.ch/downloads/ili2c";
+    license = licenses.lgpl21Plus;
+    maintainers = [ maintainers.das-g ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ipad_charge/default.nix b/nixpkgs/pkgs/tools/misc/ipad_charge/default.nix
new file mode 100644
index 000000000000..981d9f2dc6cf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ipad_charge/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, fetchFromGitHub, libusb1 }:
+
+stdenv.mkDerivation rec {
+  pname = "ipad_charge";
+  version = "2015-02-03";
+
+  src = fetchFromGitHub {
+    sha256 = "0f40hqx1dbqpwrhyf42h5982jwqv8j5zp5hwwakz6600hyqvnnz7";
+    rev = "bb24e1c3a79016cfdffb9d28189485766d655ec6";
+    repo = "ipad_charge";
+    owner = "mkorenkov";
+  };
+
+  buildInputs = [ libusb1 ];
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace " -o root -g root" "" \
+      --replace "/usr" "$out" \
+      --replace "/etc/udev" "$out/lib/udev"
+    substituteInPlace *.rules \
+      --replace "/usr" "$out"
+  '';
+
+  enableParallelBuilding = true;
+
+  preInstall = ''
+    mkdir -p $out/{bin,lib/udev/rules.d}
+  '';
+
+  meta = with stdenv.lib; {
+    inherit (src.meta) homepage;
+    description = "Apple device USB charging utility for Linux";
+    longDescription = ''
+      USB charging control utility used to enable/disable charging of an Apple
+      device connected to USB port. For a list of supported devices, see
+      https://github.com/mkorenkov/ipad_charge#supported-devices.
+    '';
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ipxe/default.nix b/nixpkgs/pkgs/tools/misc/ipxe/default.nix
new file mode 100644
index 000000000000..219c03f263c7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ipxe/default.nix
@@ -0,0 +1,85 @@
+{ stdenv, lib, fetchgit, perl, cdrkit, syslinux, xz, openssl, gnu-efi, mtools
+, embedScript ? null
+, additionalTargets ? {}
+}:
+
+let
+  date = "20190318";
+  rev = "ebf2eaf515e46abd43bc798e7e4ba77bfe529218";
+  targets = additionalTargets // lib.optionalAttrs stdenv.isx86_64 {
+    "bin-x86_64-efi/ipxe.efi" = null;
+    "bin-x86_64-efi/ipxe.efirom" = null;
+    "bin-x86_64-efi/ipxe.usb" = "ipxe-efi.usb";
+  } // {
+    "bin/ipxe.dsk" = null;
+    "bin/ipxe.usb" = null;
+    "bin/ipxe.iso" = null;
+    "bin/ipxe.lkrn" = null;
+    "bin/undionly.kpxe" = null;
+  };
+in
+
+stdenv.mkDerivation {
+  name = "ipxe-${date}-${builtins.substring 0 7 rev}";
+
+  nativeBuildInputs = [ perl cdrkit syslinux xz openssl gnu-efi mtools ];
+
+  src = fetchgit {
+    url = https://git.ipxe.org/ipxe.git;
+    sha256 = "0if3m8h1nfxy4n37cwlfbc5kand52290v80m4zvjppc81im3nr5g";
+    inherit rev;
+  };
+
+  # not possible due to assembler code
+  hardeningDisable = [ "pic" "stackprotector" ];
+
+  NIX_CFLAGS_COMPILE = "-Wno-error";
+
+  makeFlags =
+    [ "ECHO_E_BIN_ECHO=echo" "ECHO_E_BIN_ECHO_E=echo" # No /bin/echo here.
+      "ISOLINUX_BIN_LIST=${syslinux}/share/syslinux/isolinux.bin"
+      "LDLINUX_C32=${syslinux}/share/syslinux/ldlinux.c32"
+    ] ++ lib.optional (embedScript != null) "EMBED=${embedScript}";
+
+
+  enabledOptions = [
+    "PING_CMD"
+    "IMAGE_TRUST_CMD"
+    "DOWNLOAD_PROTO_HTTP"
+    "DOWNLOAD_PROTO_HTTPS"
+  ];
+
+  configurePhase = ''
+    runHook preConfigure
+    for opt in $enabledOptions; do echo "#define $opt" >> src/config/general.h; done
+    sed -i '/cp \''${ISOLINUX_BIN}/s/$/ --no-preserve=mode/' src/util/geniso
+    substituteInPlace src/Makefile.housekeeping --replace '/bin/echo' echo
+    runHook postConfigure
+  '';
+
+  preBuild = "cd src";
+
+  buildFlags = lib.attrNames targets;
+
+  installPhase = ''
+    mkdir -p $out
+    ${lib.concatStringsSep "\n" (lib.mapAttrsToList (from: to:
+      if to == null
+      then "cp -v ${from} $out"
+      else "cp -v ${from} $out/${to}") targets)}
+
+    # Some PXE constellations especially with dnsmasq are looking for the file with .0 ending
+    # let's provide it as a symlink to be compatible in this case.
+    ln -s undionly.kpxe $out/undionly.kpxe.0
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib;
+    { description = "Network boot firmware";
+      homepage = http://ipxe.org/;
+      license = licenses.gpl2;
+      maintainers = with maintainers; [ ehmry ];
+      platforms = [ "x86_64-linux" "i686-linux" ];
+    };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ised/default.nix b/nixpkgs/pkgs/tools/misc/ised/default.nix
new file mode 100644
index 000000000000..3529324b30ad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ised/default.nix
@@ -0,0 +1,17 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "ised";
+  version = "2.7.1";
+  src = fetchurl {
+    url = "mirror://sourceforge/project/ised/${pname}-${version}.tar.bz2";
+    sha256 = "0fhha61whkkqranqdxg792g0f5kgp5m3m6z1iqcvjh2c34rczbmb";
+  };
+
+  meta = {
+    description = "A numeric sequence editor";
+    maintainers = with stdenv.lib.maintainers; [ raskin ];
+    platforms = with stdenv.lib.platforms; linux;
+    license = stdenv.lib.licenses.gpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ised/default.upstream b/nixpkgs/pkgs/tools/misc/ised/default.upstream
new file mode 100644
index 000000000000..6539bf477e54
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ised/default.upstream
@@ -0,0 +1,4 @@
+url http://ised.sourceforge.net/web_nav.html
+SF_version_tarball
+SF_redirect
+minimize_overwrite
diff --git a/nixpkgs/pkgs/tools/misc/ix/default.nix b/nixpkgs/pkgs/tools/misc/ix/default.nix
new file mode 100644
index 000000000000..cedaa13b74a0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ix/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, makeWrapper, curl }:
+
+stdenv.mkDerivation {
+  pname = "ix";
+  version = "20190815";
+
+  src = fetchurl {
+    url = "http://ix.io/client";
+    sha256 =  "0xc2s4s1aq143zz8lgkq5k25dpf049dw253qxiav5k7d7qvzzy57";
+  };
+
+  buildInputs = [ makeWrapper ];
+
+  phases = [ "installPhase" "fixupPhase" ];
+
+  installPhase = ''
+    install -Dm +x $src $out/bin/ix
+  '';
+
+  postFixup = ''
+    wrapProgram $out/bin/ix --prefix PATH : "${stdenv.lib.makeBinPath [ curl ]}"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = "http://ix.io";
+    description = "Command line pastebin";
+    maintainers = with maintainers; [ asymmetric ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/jdiskreport/builder.sh b/nixpkgs/pkgs/tools/misc/jdiskreport/builder.sh
new file mode 100644
index 000000000000..f95dafedd32a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/jdiskreport/builder.sh
@@ -0,0 +1,15 @@
+source $stdenv/setup
+
+unzip $src
+
+jar=$(ls */*.jar)
+
+mkdir -p $out/share/java
+mv $jar $out/share/java
+
+mkdir -p $out/bin
+cat > $out/bin/jdiskreport <<EOF
+#! $SHELL -e
+exec $jre/bin/java -jar $out/share/java/$(basename $jar)
+EOF
+chmod +x $out/bin/jdiskreport
diff --git a/nixpkgs/pkgs/tools/misc/jdiskreport/default.nix b/nixpkgs/pkgs/tools/misc/jdiskreport/default.nix
new file mode 100644
index 000000000000..b1d71a892d6f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/jdiskreport/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl, unzip, jre }:
+
+stdenv.mkDerivation {
+  name = "jdiskreport-1.4.1";
+
+  builder = ./builder.sh;
+
+  src = fetchurl {
+    url = http://www.jgoodies.com/download/jdiskreport/jdiskreport-1_4_1.zip;
+    sha256 = "0d5mzkwsbh9s9b1vyvpaawqc09b0q41l2a7pmwf7386b1fsx6d58";
+  };
+
+  buildInputs = [ unzip ];
+
+  inherit jre;
+
+  meta = {
+    homepage = http://www.jgoodies.com/freeware/jdiskreport/;
+    description = "A graphical utility to visualize disk usage";
+    license = stdenv.lib.licenses.unfreeRedistributable; #TODO freedist, libs under BSD-3
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/jdupes/default.nix b/nixpkgs/pkgs/tools/misc/jdupes/default.nix
new file mode 100644
index 000000000000..109a84de6310
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/jdupes/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "jdupes";
+  version = "1.14.0";
+
+  src = fetchFromGitHub {
+    owner = "jbruchon";
+    repo  = "jdupes";
+    rev   = "v${version}";
+    sha256 = "18hn25f7cdz1li0vvx74al7a8z2220xhzjp9j6idhldsmjnscgq8";
+    # Unicode file names lead to different checksums on HFS+ vs. other
+    # filesystems because of unicode normalisation. The testdir
+    # directories have such files and will be removed.
+    extraPostFetch = "rm -r $out/testdir";
+  };
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+  ] ++ stdenv.lib.optionals stdenv.isLinux [
+    "ENABLE_DEDUPE=1"
+    "STATIC_DEDUPE_H=1"
+  ];
+
+  enableParallelBuilding = true;
+
+  doCheck = false; # broken Makefile, the above also removes tests
+
+  postInstall = ''
+    install -Dm644 -t $out/share/doc/jdupes CHANGES LICENSE README.md
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A powerful duplicate file finder and an enhanced fork of 'fdupes'";
+    longDescription = ''
+      jdupes is a program for identifying and taking actions upon
+      duplicate files. This fork known as 'jdupes' is heavily modified
+      from and improved over the original.
+    '';
+    homepage = "https://github.com/jbruchon/jdupes";
+    license = licenses.mit;
+    maintainers = with maintainers; [ romildo ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/journaldriver/default.nix b/nixpkgs/pkgs/tools/misc/journaldriver/default.nix
new file mode 100644
index 000000000000..56a1dc75a455
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/journaldriver/default.nix
@@ -0,0 +1,25 @@
+{ lib, fetchFromGitHub, rustPlatform, pkgconfig, openssl, systemd }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "journaldriver";
+  version     = "1.1.0";
+  cargoSha256 = "0wmr0r54ar7gvhvhv76a49ap74lx8hl79bf73vc4f4xlj7hj303g";
+
+  src = fetchFromGitHub {
+    owner  = "tazjin";
+    repo   = "journaldriver";
+    rev    = "v${version}";
+    sha256 = "0672iq6s9klb1p37hciyl7snbjgjw98kwrbfkypv07lplc5qcnrf";
+  };
+
+  buildInputs       = [ openssl systemd ];
+  nativeBuildInputs = [ pkgconfig ];
+
+  meta = with lib; {
+    description = "Log forwarder from journald to Stackdriver Logging";
+    homepage    = "https://github.com/tazjin/journaldriver";
+    license     = licenses.gpl3;
+    maintainers = [ maintainers.tazjin ];
+    platforms   = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/kak-lsp/default.nix b/nixpkgs/pkgs/tools/misc/kak-lsp/default.nix
new file mode 100644
index 000000000000..e3551b8f404f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kak-lsp/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, lib, darwin, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "kak-lsp";
+  version = "7.0.0";
+
+  src = fetchFromGitHub {
+    owner = "ul";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1b9v417g0z9q1sqgnms5vy740xggg4fcz0fdwbc4hfvfj6jkyaad";
+  };
+
+  cargoSha256 = "0kzrrphlilnyl79yfmlvd6an8iyi8zcs0inwiq74z383lnbdpk7q";
+
+  buildInputs = lib.optional stdenv.isDarwin [ darwin.apple_sdk.frameworks.Security ];
+
+  meta = with lib; {
+    description = "Kakoune Language Server Protocol Client";
+    homepage = https://github.com/ul/kak-lsp;
+    license = with licenses; [ unlicense /* or */ mit ];
+    maintainers = [ maintainers.spacekookie ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/kanshi/default.nix b/nixpkgs/pkgs/tools/misc/kanshi/default.nix
new file mode 100644
index 000000000000..d3e0ba029f3f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kanshi/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchFromGitHub, meson, ninja, pkgconfig, scdoc, wayland }:
+
+stdenv.mkDerivation rec {
+  pname = "kanshi";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "emersion";
+    repo = "kanshi";
+    rev = "v${version}";
+    sha256 = "0v50q1s105c2rar6mi1pijm8llsnsp62gv4swd3ddjn5rwallg46";
+  };
+
+  nativeBuildInputs = [ meson ninja pkgconfig scdoc ];
+  buildInputs = [ wayland ];
+
+  meta = with stdenv.lib; {
+    description = "Dynamic display configuration tool";
+    longDescription = ''
+      kanshi allows you to define output profiles that are automatically enabled
+      and disabled on hotplug. For instance, this can be used to turn a laptop's
+      internal screen off when docked.
+
+      kanshi can be used on Wayland compositors supporting the
+      wlr-output-management protocol.
+    '';
+    homepage = "https://github.com/emersion/kanshi";
+    downloadPage = "https://github.com/emersion/kanshi";
+    license = licenses.mit;
+    maintainers = with maintainers; [ balsoft ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/kargo/default.nix b/nixpkgs/pkgs/tools/misc/kargo/default.nix
new file mode 100644
index 000000000000..480c0abc728d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kargo/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl, python2Packages }:
+
+python2Packages.buildPythonApplication rec {
+  version = "0.4.6";
+  pname = "kargo";
+
+  src = fetchurl {
+    url = "mirror://pypi/k/kargo/${pname}-${version}.tar.gz";
+    sha256 = "1sm721c3d4scpc1gj2j3qwssr6jjvw6aq3p7ipvhbd9ywmm9dd7b";
+  };
+
+  doCheck = false;
+
+  propagatedBuildInputs = with python2Packages; [
+    ansible
+    boto
+    cffi
+    cryptography
+    libcloud
+    markupsafe
+    netaddr
+    pyasn1
+    requests
+    setuptools
+  ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/kubespray/kargo-cli;
+    description = "A tool helps to deploy a kubernetes cluster with Ansible.";
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/kdecoration-viewer/default.nix b/nixpkgs/pkgs/tools/misc/kdecoration-viewer/default.nix
new file mode 100644
index 000000000000..0fd1c7c5cd73
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kdecoration-viewer/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub, mkDerivation
+, cmake, extra-cmake-modules, qtquickcontrols, kconfigwidgets, kdeclarative, kdecoration }:
+
+mkDerivation {
+  name = "kdecoration-viewer-2018-07-24";
+
+  src = fetchFromGitHub {
+    owner = "KDE";
+    repo = "kdecoration-viewer";
+    rev = "6e50b39c651bbf92fd7e7116d43bf57288254288";
+    sha256 = "01v6i081vx0mydqvnj05xli86m52v6bxxc3z1zlyyap9cfhag7lj";
+  };
+
+  nativeBuildInputs = [ cmake extra-cmake-modules ];
+  buildInputs = [ qtquickcontrols kconfigwidgets kdeclarative kdecoration ];
+
+  meta = with stdenv.lib; {
+    description = "Allows to preview a KDecoration plugin";
+    longDescription = ''
+      kdecoration-viewer allows to preview a KDecoration plugin. Put your plugins under
+      $QT_PLUGIN_PATH/org.kde.kdecoration2 to preview.
+    '';
+    homepage = https://blog.martin-graesslin.com/blog/2014/07/kdecoration2-the-road-ahead/;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.gnidorah ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/kermit/default.nix b/nixpkgs/pkgs/tools/misc/kermit/default.nix
new file mode 100644
index 000000000000..9f739da0afa0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kermit/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, ncurses, glibc }:
+
+stdenv.mkDerivation {
+  name = "kermit-9.0.302";
+
+  src = fetchurl {
+    url = ftp://ftp.kermitproject.org/kermit/archives/cku302.tar.gz;
+    sha256 = "0487mh6s99ijqf1pfmbm302pa5i4pzmm8s439hdl1ffs5g8jqpqd";
+  };
+
+  buildInputs = [ ncurses glibc ];
+
+  unpackPhase = ''
+    mkdir -p src
+    pushd src
+    tar xvzf $src
+  '';
+
+  patchPhase = ''
+    sed -i -e 's@-I/usr/include/ncurses@@' \
+      -e 's@/usr/local@'"$out"@ makefile
+  '';
+
+  buildPhase = "make -f makefile linux LNKFLAGS='-lcrypt -lresolv'";
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mkdir -p $out/man/man1
+    make -f makefile install
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://www.kermitproject.org/ck90.html;
+    description = "Portable Scriptable Network and Serial Communication Software";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ pSub ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/keychain/default.nix b/nixpkgs/pkgs/tools/misc/keychain/default.nix
new file mode 100644
index 000000000000..e10b42273be8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/keychain/default.nix
@@ -0,0 +1,54 @@
+{ stdenv, fetchFromGitHub, makeWrapper, coreutils, openssh, gnupg
+, perl, procps, gnugrep, gawk, findutils, gnused }:
+
+stdenv.mkDerivation rec {
+  pname = "keychain";
+  version = "2.8.5";
+
+  src = fetchFromGitHub {
+    owner = "funtoo";
+    repo = "keychain";
+    rev = version;
+    sha256 = "1bkjlg0a2bbdjhwp37ci1rwikvrl4s3xlbf2jq2z4azc96dr83mj";
+  };
+
+  buildInputs = [ makeWrapper perl ];
+
+  installPhase = ''
+    mkdir -p $out/{bin,share/man/man1}
+    cp keychain $out/bin/keychain
+    cp keychain.1 $out/share/man/man1
+    wrapProgram $out/bin/keychain \
+      --prefix PATH ":" "${coreutils}/bin" \
+      --prefix PATH ":" "${openssh}/bin" \
+      --prefix PATH ":" "${gnupg}/bin" \
+      --prefix PATH ":" "${gnugrep}/bin" \
+      --prefix PATH ":" "${gnused}/bin" \
+      --prefix PATH ":" "${findutils}/bin" \
+      --prefix PATH ":" "${gawk}/bin" \
+      --prefix PATH ":" "${procps}/bin"
+  '';
+
+  meta = {
+    description = "Keychain management tool";
+    homepage = https://www.funtoo.org/Keychain;
+    license = stdenv.lib.licenses.gpl2;
+    # other platforms are untested (AFAIK)
+    platforms =
+      with stdenv.lib;
+      platforms.linux ++ platforms.darwin;
+    maintainers = with stdenv.lib.maintainers; [ sigma ];
+    longDescription = ''
+			Keychain helps you to manage SSH and GPG keys in a convenient and secure
+			manner. It acts as a frontend to ssh-agent and ssh-add, but allows you
+			to easily have one long running ssh-agent process per system, rather
+			than the norm of one ssh-agent per login session.
+
+			This dramatically reduces the number of times you need to enter your
+			passphrase. With keychain, you only need to enter a passphrase once
+			every time your local machine is rebooted. Keychain also makes it easy
+			for remote cron jobs to securely "hook in" to a long-running ssh-agent
+			process, allowing your scripts to take advantage of key-based logins.
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/kisslicer/default.nix b/nixpkgs/pkgs/tools/misc/kisslicer/default.nix
new file mode 100644
index 000000000000..5e5a7174a149
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kisslicer/default.nix
@@ -0,0 +1,58 @@
+{ fetchzip
+, libX11
+, libGLU, libGL
+, makeWrapper
+, stdenv
+}:
+
+let
+
+  libPath = stdenv.lib.makeLibraryPath [
+    libGLU libGL
+    stdenv.cc.cc
+    libX11
+  ];
+
+  inidir = "\\\${XDG_CONFIG_HOME:-\\$HOME/.config}/kisslicer";
+
+in
+
+stdenv.mkDerivation {
+  name = "kisslicer-1.6.3";
+
+  src = fetchzip {
+    url = "http://www.kisslicer.com/uploads/1/5/3/8/15381852/kisslicer_linux64_1.6.3_release.zip";
+    sha256 = "1xmywj5jrcsqv1d5x3mphhvafs4mfm9l12npkhk7l03qxbwg9j82";
+    stripRoot = false;
+  };
+
+  phases = [ "unpackPhase" "installPhase" "fixupPhase" ];
+
+  buildInputs = [
+    makeWrapper
+    libGLU libGL
+    libX11
+  ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -p * $out/bin
+  '';
+
+  fixupPhase = ''
+    chmod 755 $out/bin/KISSlicer
+    patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      --set-rpath ${libPath}   $out/bin/KISSlicer
+    wrapProgram $out/bin/KISSlicer \
+      --add-flags "-inidir ${inidir}" \
+      --run "mkdir -p ${inidir}"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Convert STL files into Gcode";
+    homepage = http://www.kisslicer.com;
+    license = licenses.unfree;
+    maintainers = [ maintainers.cransom ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/kodi-cli/default.nix b/nixpkgs/pkgs/tools/misc/kodi-cli/default.nix
new file mode 100644
index 000000000000..d2fb32319bf7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kodi-cli/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub, makeWrapper, curl, bash, jq, youtube-dl, gnome3 }:
+
+stdenv.mkDerivation rec {
+  pname = "kodi-cli";
+  version = "1.1.1";
+  
+  src = fetchFromGitHub {
+    owner = "nawar";
+    repo = pname;
+    rev = version;
+    sha256 = "0f9wdq2fg8hlpk3qbjfkb3imprxkvdrhxfkcvr3dwfma0j2yfwam";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -a kodi-cli $out/bin
+    wrapProgram $out/bin/kodi-cli --prefix PATH : ${stdenv.lib.makeBinPath [ curl bash ]}
+    cp -a playlist_to_kodi $out/bin
+    wrapProgram $out/bin/playlist_to_kodi --prefix PATH : ${stdenv.lib.makeBinPath [ curl bash gnome3.zenity jq youtube-dl ]}
+  '';
+  
+  meta = with stdenv.lib; {
+    homepage = https://github.com/nawar/kodi-cli;
+    description = "Kodi/XBMC bash script to send Kodi commands using JSON RPC. It also allows sending YouTube videos to Kodi";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.pstn ];
+ };
+}
diff --git a/nixpkgs/pkgs/tools/misc/kronometer/default.nix b/nixpkgs/pkgs/tools/misc/kronometer/default.nix
new file mode 100644
index 000000000000..632001f6329a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kronometer/default.nix
@@ -0,0 +1,24 @@
+{
+  mkDerivation, fetchurl, lib,
+  extra-cmake-modules, kdoctools, wrapGAppsHook,
+  kconfig, kcrash, kinit
+}:
+
+mkDerivation rec {
+  pname = "kronometer";
+  version = "2.2.3";
+
+  src = fetchurl {
+    url = "mirror://kde/stable/${pname}/${version}/src/${pname}-${version}.tar.xz";
+    sha256 = "05hs8729a3aqjpwmn2xdf2sriacrll4sj4ax3lm4s1ravj09n9bm";
+  };
+
+  meta = with lib; {
+    homepage = "https://kde.org/applications/utilities/kronometer/";
+    description = "A stopwatch application";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ peterhoeg ];
+  };
+  nativeBuildInputs = [ extra-cmake-modules kdoctools ];
+  propagatedBuildInputs = [ kconfig kcrash kinit ];
+}
diff --git a/nixpkgs/pkgs/tools/misc/kt/default.nix b/nixpkgs/pkgs/tools/misc/kt/default.nix
new file mode 100644
index 000000000000..c272584e2c05
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kt/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchFromGitHub, buildGoPackage }:
+
+buildGoPackage rec {
+  pname = "kt";
+  version = "12.1.0";
+
+  src = fetchFromGitHub {
+    owner = "fgeller";
+    repo = "kt";
+    rev = "v${version}";
+    sha256 = "014q39bg88vg1xdq1bz6wj982zb148sip3a42hbrinh8qj41y4yg";
+  };
+
+  goPackagePath = "github.com/fgeller/kt";
+
+  meta = with stdenv.lib; {
+    description = "Kafka command line tool";
+    homepage = https://github.com/fgeller/kt;
+    maintainers = with maintainers; [ utdemir ];
+    platforms = with platforms; unix;
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/latex2html/default.nix b/nixpkgs/pkgs/tools/misc/latex2html/default.nix
new file mode 100644
index 000000000000..59f52c5cf6f3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/latex2html/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, fetchFromGitHub, makeWrapper
+, ghostscript, netpbm, perl }:
+# TODO: withTex
+
+stdenv.mkDerivation rec {
+  pname = "latex2html";
+  version = "2019.2";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1bcdhbaxf334wlxzkw5samj2y2q173709y0km3x8xs4bbh70ds6c";
+  };
+
+  buildInputs = [ ghostscript netpbm perl ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  configurePhase = ''
+    ./configure \
+      --prefix="$out" \
+      --without-mktexlsr \
+      --with-texpath=$out/share/texmf/tex/latex/html
+  '';
+
+  postInstall = ''
+    for p in $out/bin/{latex2html,pstoimg}; do \
+      wrapProgram $p --add-flags '--tmp="''${TMPDIR:-/tmp}"'
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    description = "LaTeX-to-HTML translator";
+    longDescription = ''
+      A Perl program that translates LaTeX into HTML (HyperText Markup
+      Language), optionally creating separate HTML files corresponding to each
+      unit (e.g., section) of the document. LaTeX2HTML proceeds by interpreting
+      LaTeX (to the best of its abilities). It contains definitions from a wide
+      variety of classes and packages, and users may add further definitions by
+      writing Perl scripts that provide information about class/package
+      commands.
+    '';
+
+    homepage = https://www.ctan.org/pkg/latex2html;
+
+    license = licenses.gpl2;
+    platforms = with platforms; linux ++ darwin;
+    maintainers = with maintainers; [ yurrriq ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lazydocker/default.nix b/nixpkgs/pkgs/tools/misc/lazydocker/default.nix
new file mode 100644
index 000000000000..96c13010fac2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lazydocker/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "lazydocker";
+  version = "0.7.6";
+
+  src = fetchFromGitHub {
+    owner = "jesseduffield";
+    repo = "lazydocker";
+    rev = "v${version}";
+    sha256 = "1sp5f9lkysqkyhd6gvrlpszrih78bj67yidkkd6azv9ianrndx0b";
+  };
+
+  goPackagePath = "github.com/jesseduffield/lazydocker";
+
+  subPackages = [ "." ];
+
+  meta = with stdenv.lib; {
+    description = "A simple terminal UI for both docker and docker-compose";
+    homepage = "https://github.com/jesseduffield/lazydocker";
+    license = licenses.mit;
+    maintainers = with maintainers; [ das-g filalex77 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lbdb/add-methods-to-rc.patch b/nixpkgs/pkgs/tools/misc/lbdb/add-methods-to-rc.patch
new file mode 100644
index 000000000000..d388467559a4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lbdb/add-methods-to-rc.patch
@@ -0,0 +1,11 @@
+--- a/lbdb.rc.in
++++ b/lbdb.rc.in
+@@ -40,7 +40,7 @@
+ # - m_vcf        search a vcard (according to RFC2426) file.
+ # - m_khard      search a CardDAV address book via khard
+ 
+-METHODS="m_inmail m_passwd m_finger"
++METHODS="@MODULES@"
+ 
+ 
+ #
diff --git a/nixpkgs/pkgs/tools/misc/lbdb/default.nix b/nixpkgs/pkgs/tools/misc/lbdb/default.nix
new file mode 100644
index 000000000000..6624eb5102d3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lbdb/default.nix
@@ -0,0 +1,56 @@
+{ stdenv, fetchurl, fetchpatch, perl, perlPackages, finger_bsd, makeWrapper
+, abook ? null
+, gnupg ? null
+, goobook ? null
+, khard ? null
+, mu ? null
+}:
+
+let
+  version = "0.48.1";
+in
+with stdenv.lib;
+with perlPackages;
+stdenv.mkDerivation {
+  pname = "lbdb";
+  inherit version;
+  src = fetchurl {
+    url = "http://www.spinnaker.de/lbdb/download/lbdb_${version}.tar.gz";
+    sha256 = "1gr5l2fr9qbdccga8bhsrpvz6jxigvfkdxrln9wyf2xpps5cdjxh";
+  };
+
+  buildInputs = [ goobook makeWrapper perl ConvertASN1 perlldap AuthenSASL ]
+    ++ optional (!stdenv.isDarwin) finger_bsd
+    ++ optional   (abook != null) abook
+    ++ optional   (gnupg != null) gnupg
+    ++ optional (goobook != null) goobook
+    ++ optional   (khard != null) khard
+    ++ optional      (mu != null) mu;
+  configureFlags = [ ]
+    ++ optional   (abook != null) "--with-abook"
+    ++ optional   (gnupg != null) "--with-gpg"
+    ++ optional (goobook != null) "--with-goobook"
+    ++ optional   (khard != null) "--with-khard"
+    ++ optional      (mu != null) "--with-mu";
+
+  patches = [ ./add-methods-to-rc.patch
+    # fix undefined exec_prefix. Remove with the next release
+    (fetchpatch {
+      url = "https://github.com/RolandRosenfeld/lbdb/commit/60b7bae255011f59212d96adfbded459d6a27129.patch";
+      sha256 = "129zg086glmlalrg395jq8ljcp787dl3rxjf9v7apsd8mqfdkl2v";
+      excludes = [ "debian/changelog" ];
+    })
+  ];
+  postFixup = "wrapProgram $out/lib/mutt_ldap_query --prefix PERL5LIB : "
+    + "${AuthenSASL}/${perl.libPrefix}"
+    + ":${ConvertASN1}/${perl.libPrefix}"
+    + ":${perlldap}/${perl.libPrefix}";
+
+  meta = {
+    homepage = http://www.spinnaker.de/lbdb/;
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    description = "The Little Brother's Database";
+    maintainers = [ maintainers.kaiha maintainers.bfortz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ldapvi/default.nix b/nixpkgs/pkgs/tools/misc/ldapvi/default.nix
new file mode 100644
index 000000000000..3d2b7c5b214c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ldapvi/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchgit, openldap, openssl, popt, glib, ncurses, readline, pkgconfig, cyrus_sasl, autoconf, automake }:
+
+stdenv.mkDerivation {
+  pname = "ldapvi";
+  version = "0lz1sb5r0y9ypy8d7hm0l2wfa8l69f8ll0i5c78c0apz40nyjqkg";
+
+  # use latest git, it includes some important patches since 2007 release
+  src = fetchgit {
+    url = "http://www.lichteblau.com/git/ldapvi.git";
+    sha256 = "3ef3103030ecb04d7fe80180e3fd490377cf81fb2af96782323fddabc3225030";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ openldap openssl popt glib ncurses readline cyrus_sasl autoconf automake ];
+
+  preConfigure = ''
+    cd ldapvi
+    ./autogen.sh
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Interactive LDAP client for Unix terminals";
+    longDescription = ''
+      ldapvi is an interactive LDAP client for Unix terminals. Using it, you
+      can update LDAP entries with a text editor.
+    '';
+    homepage = http://www.lichteblau.com/ldapvi/;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ domenkozar ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ldmtool/default.nix b/nixpkgs/pkgs/tools/misc/ldmtool/default.nix
new file mode 100644
index 000000000000..2ec683484958
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ldmtool/default.nix
@@ -0,0 +1,46 @@
+{ stdenv, fetchFromGitHub, autoconf, automake, gtk-doc, pkgconfig, libuuid,
+  libtool, readline, gobject-introspection, json-glib, lvm2, libxslt, docbook_xsl
+, fetchpatch }:
+
+stdenv.mkDerivation rec {
+  pname = "ldmtool";
+  version = "0.2.4";
+
+  src = fetchFromGitHub {
+    owner = "mdbooth";
+    repo = "libldm";
+    rev = "libldm-${version}";
+    sha256 = "1fy5wbmk8kwl86lzswq0d1z2j5y023qzfm2ppm8knzv9c47kniqk";
+  };
+
+  patches = [
+    # Remove useage of deprecrated G_PARAM_PRIVATE
+    (fetchpatch {
+      url = "https://github.com/mdbooth/libldm/commit/ee1b37a034038f09d61b121cc8b3651024acc46f.patch";
+      sha256 = "02y34kbcpcpffvy1n9yqngvdldmxmvdkha1v2xjqvrnclanpigcp";
+    })
+  ];
+
+  preConfigure = ''
+    sed -i docs/reference/ldmtool/Makefile.am \
+      -e 's|-nonet http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl|--nonet ${docbook_xsl}/xml/xsl/docbook/manpages/docbook.xsl|g'
+  '';
+
+  # glib-2.62 deprecations
+  NIX_CFLAGS_COMPILE = "-DGLIB_DISABLE_DEPRECATION_WARNINGS";
+
+  configureScript = "sh autogen.sh";
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ autoconf automake gtk-doc lvm2 libxslt.bin
+    libtool readline gobject-introspection json-glib libuuid
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Tool and library for managing Microsoft Windows Dynamic Disks";
+    homepage = https://github.com/mdbooth/libldm;
+    maintainers = with maintainers; [ jensbin ];
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/less/default.nix b/nixpkgs/pkgs/tools/misc/less/default.nix
new file mode 100644
index 000000000000..e98b085c78d5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/less/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, ncurses, lessSecure ? false }:
+
+stdenv.mkDerivation rec {
+  pname = "less";
+  version = "551";
+
+  src = fetchurl {
+    url = "http://www.greenwoodsoftware.com/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "0ggyjl3yzn7c450zk1rixi9ls6asdhgqynhk34zsd0ckhmsm45pz";
+  };
+
+  configureFlags = [ "--sysconfdir=/etc" ] # Look for ‘sysless’ in /etc.
+    ++ stdenv.lib.optional lessSecure [ "--with-secure" ];
+
+  buildInputs = [ ncurses ];
+
+  meta = with stdenv.lib; {
+    homepage = http://www.greenwoodsoftware.com/less/;
+    description = "A more advanced file pager than ‘more’";
+    platforms = platforms.unix;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ eelco dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lesspipe/default.nix b/nixpkgs/pkgs/tools/misc/lesspipe/default.nix
new file mode 100644
index 000000000000..bb99521cc27e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lesspipe/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchFromGitHub, substituteAll, perl, file, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "lesspipe";
+  version = "1.84";
+
+  buildInputs = [ perl ];
+  preConfigure = "patchShebangs .";
+
+  src = fetchFromGitHub {
+    owner = "wofr06";
+    repo = "lesspipe";
+    rev = version;
+    sha256 = "124ffhzrikr88ab14rk6753n8adxijpmg7q3zx7nmqc52wpkfd8q";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      file = "${file}/bin/file";
+      tput = "${ncurses}/bin/tput";
+    })
+  ];
+
+  meta = with stdenv.lib; {
+    description = "A preprocessor for less";
+    longDescription = ''
+      Usually lesspipe.sh is called as an input filter to less. With the help
+      of that filter less will display the uncompressed contents of compressed
+      (gzip, bzip2, compress, rar, 7-zip, lzip, xz or lzma) files. For files
+      containing archives and directories, a table of contents will be
+      displayed (e.g tar, ar, rar, jar, rpm and deb formats). Other supported
+      formats include nroff, pdf, ps, dvi, shared library, MS word, OASIS
+      (e.g. Openoffice), NetCDF, html, mp3, jpg, png, iso images, MacOSX bom,
+      plist and archive formats, perl storable data and gpg encrypted files.
+      This does require additional helper programs being installed.
+    '';
+    homepage = https://github.com/wofr06/lesspipe;
+    platforms = platforms.all;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.martijnvermaat ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lesspipe/fix-paths.patch b/nixpkgs/pkgs/tools/misc/lesspipe/fix-paths.patch
new file mode 100644
index 000000000000..1bffcf53c827
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lesspipe/fix-paths.patch
@@ -0,0 +1,22 @@
+--- a/lesspipe.sh.in
++++ b/lesspipe.sh.in
+@@ -48,8 +48,8 @@ if [[ "$LESS_ADVANCED_PREPROCESSOR" = '' ]]; then
+ fi
+ 
+ filecmd() {
+-  file -L -s "$@"
+-  file -L -s -i "$@" 2> /dev/null | sed -n 's/.*charset=/;/p' | tr a-z A-Z
++  @file@ -L -s "$@"
++  @file@ -L -s -i "$@" 2> /dev/null | sed -n 's/.*charset=/;/p' | tr a-z A-Z
+ }
+ 
+ sep=:						# file name separator
+@@ -546,7 +546,7 @@ isfinal() {
+ 
+   # color requires -r or -R when calling less
+   typeset COLOR
+-  if [[ $(tput colors) -ge 8 && ("$LESS" = *-*r* || "$LESS" = *-*R*) ]]; then
++  if [[ $(@tput@ colors) -ge 8 && ("$LESS" = *-*r* || "$LESS" = *-*R*) ]]; then
+     COLOR="--color=always"
+   fi
+ 
diff --git a/nixpkgs/pkgs/tools/misc/lf/default.nix b/nixpkgs/pkgs/tools/misc/lf/default.nix
new file mode 100644
index 000000000000..c2f281ecb17b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lf/default.nix
@@ -0,0 +1,45 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "lf";
+  version = "13";
+
+  src = fetchFromGitHub {
+    owner = "gokcehan";
+    repo = "lf";
+    rev = "r${version}";
+    sha256 = "1ld3q75v8rvp169w5p85z1vznqs9bhck6bm2f6fykxx16hmpb6ga";
+  };
+
+  modSha256 = "14fvn8yjm9cnpsmzgxw2dypr3h8h36mxrbk7zma42w8rsp46jpz7";
+
+  # TODO: Setting buildFlags probably isn't working properly. I've tried a few
+  # variants, e.g.:
+  # - buildFlags = [ "-ldflags" "\"-s" "-w"" ""-X 'main.gVersion=${version}'\"" ];
+  # - buildFlags = [ "-ldflags" "\\\"-X" "${goPackagePath}/main.gVersion=${version}\\\"" ];
+  # Override the build phase (to set buildFlags):
+  buildPhase = ''
+    runHook preBuild
+    runHook renameImports
+    go install -ldflags="-s -w -X main.gVersion=r${version}"
+    runHook postBuild
+  '';
+
+  postInstall = ''
+    install -D --mode=444 lf.1 $out/share/man/man1/lf.1
+  '';
+
+  meta = with lib; {
+    description = "A terminal file manager written in Go and heavily inspired by ranger";
+    longDescription = ''
+      lf (as in "list files") is a terminal file manager written in Go. It is
+      heavily inspired by ranger with some missing and extra features. Some of
+      the missing features are deliberately omitted since it is better if they
+      are handled by external tools.
+    '';
+    homepage = https://godoc.org/github.com/gokcehan/lf;
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ primeos ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-client.nix b/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-client.nix
new file mode 100644
index 000000000000..eb3b6aa11e6a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-client.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchFromGitHub, pkgconfig, autoreconfHook
+, boost, libbitcoin, libbitcoin-protocol }:
+
+let
+  pname = "libbitcoin-client";
+  version = "3.5.0";
+
+in stdenv.mkDerivation {
+  name = "${pname}-${version}";
+
+  src = fetchFromGitHub {
+    owner = "libbitcoin";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0a9c00f1pfi8wczbfd1djkvr7di3iw1ynak6if910w01dkhbm6v4";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  propagatedBuildInputs = [ libbitcoin libbitcoin-protocol ];
+
+  enableParallelBuilding = true;
+
+  configureFlags = [
+    "--with-tests=no"
+    "--with-boost=${boost.dev}"
+    "--with-boost-libdir=${boost.out}/lib"
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Bitcoin client query library";
+    homepage = https://github.com/libbitcoin/libbitcoin-client;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ chris-martin ];
+
+    # AGPL with a lesser clause
+    license = licenses.agpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-explorer.nix b/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-explorer.nix
new file mode 100644
index 000000000000..d0395ecbd7f0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-explorer.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchFromGitHub, pkgconfig, autoreconfHook
+, boost, libbitcoin-client, libbitcoin-network }:
+
+let
+  pname = "libbitcoin-explorer";
+  version = "3.5.0";
+
+in stdenv.mkDerivation {
+  name = "${pname}-${version}";
+
+  src = fetchFromGitHub {
+    owner = "libbitcoin";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "033nrdzrha4kypxk4biixjsbjd16r4m2mjvpid4gdj5hzbbj1p93";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  buildInputs = [ libbitcoin-client libbitcoin-network ];
+
+  enableParallelBuilding = true;
+
+  configureFlags = [
+    "--with-tests=no"
+    "--with-boost=${boost.dev}"
+    "--with-boost-libdir=${boost.out}/lib"
+    "--with-bash-completiondir=$out/share/bash-completion/completions"
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Bitcoin command line tool";
+    homepage = https://github.com/libbitcoin/libbitcoin-explorer;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ chris-martin asymmetric ];
+
+    # AGPL with a lesser clause
+    license = licenses.agpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-network.nix b/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-network.nix
new file mode 100644
index 000000000000..cb9e2cbf1e84
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-network.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchFromGitHub, pkgconfig, autoreconfHook
+, boost, libbitcoin, zeromq }:
+
+let
+  pname = "libbitcoin-network";
+  version = "3.5.0";
+
+in stdenv.mkDerivation {
+  name = "${pname}-${version}";
+
+  src = fetchFromGitHub {
+    owner = "libbitcoin";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0vqg3i40kwmbys4lyp82xvg2nx3ik4qhc66gcm8k66a86wpj9ji6";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  buildInputs = [ libbitcoin zeromq ];
+
+  enableParallelBuilding = true;
+
+  configureFlags = [
+    "--with-tests=no"
+    "--with-boost=${boost.dev}"
+    "--with-boost-libdir=${boost.out}/lib"
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Bitcoin P2P Network Library";
+    homepage = https://libbitcoin.org/;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ asymmetric ];
+
+    # AGPL with a lesser clause
+    license = licenses.agpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-protocol.nix b/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-protocol.nix
new file mode 100644
index 000000000000..2c13927dfad8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-protocol.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchFromGitHub, pkgconfig, autoreconfHook
+, boost, libbitcoin, secp256k1, zeromq }:
+
+let
+  pname = "libbitcoin-protocol";
+  version = "3.5.0";
+
+in stdenv.mkDerivation {
+  name = "${pname}-${version}";
+
+  src = fetchFromGitHub {
+    owner = "libbitcoin";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1ln9r04hlnc7qmv17rakyhrnzw1a541pg5jc1sw3ccn90a5x6cfv";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  buildInputs = [ libbitcoin secp256k1 ];
+  propagatedBuildInputs = [ zeromq ];
+
+  enableParallelBuilding = true;
+
+  configureFlags = [
+    "--with-tests=no"
+    "--with-boost=${boost.dev}"
+    "--with-boost-libdir=${boost.out}/lib"
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Bitcoin Blockchain Query Protocol";
+    homepage = https://libbitcoin.org/;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ asymmetric ];
+
+    # AGPL with a lesser clause
+    license = licenses.agpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin.nix b/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin.nix
new file mode 100644
index 000000000000..8009fe563ee1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchFromGitHub, pkgconfig, autoreconfHook
+, boost, secp256k1 }:
+
+let
+  pname = "libbitcoin";
+  version = "3.6.0";
+
+in stdenv.mkDerivation {
+  name = "${pname}-${version}";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1rppyp3zpb6ymwangjpblwf6qh4y3d1hczrjx8aavmrq7hznnrhq";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+
+  propagatedBuildInputs = [ secp256k1 ];
+
+  enableParallelBuilding = true;
+
+  configureFlags = [
+    "--with-tests=no"
+    "--with-boost=${boost.dev}"
+    "--with-boost-libdir=${boost.out}/lib"
+  ];
+
+  meta = with stdenv.lib; {
+    description = "C++ library for building bitcoin applications";
+    homepage = https://libbitcoin.org/;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ chris-martin ];
+
+    # AGPL with a lesser clause
+    license = licenses.agpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/libcpuid/default.nix b/nixpkgs/pkgs/tools/misc/libcpuid/default.nix
new file mode 100644
index 000000000000..e31112a74d8a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/libcpuid/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "libcpuid";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "anrieff";
+    repo = "libcpuid";
+    rev = "v${version}";
+    sha256 = "03sya0fs76g86syl299lrn0vqjjcf8i0xd7fzaf42qhizbx03b88";
+  };
+
+  patches = [
+    # Work around https://github.com/anrieff/libcpuid/pull/102.
+    ./stdint.patch
+  ];
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with stdenv.lib; {
+    homepage = http://libcpuid.sourceforge.net/;
+    description = "A small C library for x86 CPU detection and feature extraction";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ orivej artuuge ];
+    platforms = platforms.x86;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/libcpuid/stdint.patch b/nixpkgs/pkgs/tools/misc/libcpuid/stdint.patch
new file mode 100644
index 000000000000..beb8890c5a28
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/libcpuid/stdint.patch
@@ -0,0 +1,5 @@
+--- a/libcpuid/libcpuid.h
++++ b/libcpuid/libcpuid.h
+@@ -88 +88 @@
+-#include "libcpuid_types.h"
++#include <stdint.h>
diff --git a/nixpkgs/pkgs/tools/misc/lice/default.nix b/nixpkgs/pkgs/tools/misc/lice/default.nix
new file mode 100644
index 000000000000..bb0f93ba3283
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lice/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchFromGitHub, python3Packages }:
+
+python3Packages.buildPythonPackage rec {
+
+  version = "0.4";
+  name = "lice-${version}";
+
+  src = fetchFromGitHub {
+    owner = "licenses";
+    repo = "lice";
+    rev = version;
+    sha256 = "0yxf70fi8ds3hmwjply2815k466r99k8n22r0ppfhwjvp3rn60qx";
+    fetchSubmodules = true;
+  };
+
+  meta = with stdenv.lib; {
+    description = "Print license based on selection and user options.";
+    homepage = https://github.com/licenses/lice;
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ swflint ];
+    platforms = platforms.unix;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/licensor/default.nix b/nixpkgs/pkgs/tools/misc/licensor/default.nix
new file mode 100644
index 000000000000..0913b9afbf5e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/licensor/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "licensor";
+  version = "2.1.0";
+
+  src = fetchFromGitHub {
+    owner = "raftario";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0zr8hcq7crmhrdhwcclc0nap68wvg5kqn5l93ha0vn9xgjy8z11p";
+  };
+
+  cargoSha256 = "042dplm0cdxkv73m5qlkc61h0x9fpzxn2b0c8gjx2hwvigcia139";
+
+  meta = with lib; {
+    description = "Write licenses to stdout";
+    homepage = "https://github.com/raftario/licensor";
+    license = licenses.mit;
+    maintainers = with maintainers; [ filalex77 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/linuxquota/default.nix b/nixpkgs/pkgs/tools/misc/linuxquota/default.nix
new file mode 100644
index 000000000000..9bc7c372d93c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/linuxquota/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, e2fsprogs, openldap, pkgconfig }:
+
+stdenv.mkDerivation rec {
+  version = "4.05";
+  pname = "quota";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/linuxquota/quota-${version}.tar.gz";
+    sha256 = "1fbsrxhhf1ls7i025db7p66yzjr0bqa2c63cni217v8l21fmnfzg";
+  };
+
+  outputs = [ "out" "dev" "doc" "man" ];
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ e2fsprogs openldap ];
+
+  meta = with stdenv.lib; {
+    description = "Tools to manage kernel-level quotas in Linux";
+    homepage = https://sourceforge.net/projects/linuxquota/;
+    license = licenses.gpl2; # With some files being BSD as an exception
+    platforms = platforms.linux;
+    maintainers = [ maintainers.dezgeg ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lnav/default.nix b/nixpkgs/pkgs/tools/misc/lnav/default.nix
new file mode 100644
index 000000000000..90560d321573
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lnav/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, fetchFromGitHub, pcre-cpp, sqlite, ncurses
+, readline, zlib, bzip2, autoconf, automake, curl }:
+
+stdenv.mkDerivation rec {
+
+  name = "lnav-${meta.version}";
+
+  src = fetchFromGitHub {
+    owner = "tstack";
+    repo = "lnav";
+    rev = "v${meta.version}";
+    sha256 = "0z8bsr0falxlkmd1b5gy871vyafyih0sw7lgg858lqnbsy0q2m4i";
+    inherit name;
+  };
+
+  buildInputs = [
+    autoconf
+    automake
+    zlib
+    bzip2
+    ncurses
+    pcre-cpp
+    readline
+    sqlite
+    curl
+  ];
+
+  preConfigure = ''
+    ./autogen.sh
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/tstack/lnav;
+    description = "The Logfile Navigator";
+    longDescription = ''
+      The log file navigator, lnav, is an enhanced log file viewer that takes
+      advantage of any semantic information that can be gleaned from the files
+      being viewed, such as timestamps and log levels. Using this extra
+      semantic information, lnav can do things like interleaving messages from
+      different files, generate histograms of messages over time, and providing
+      hotkeys for navigating through the file. It is hoped that these features
+      will allow the user to quickly and efficiently zero in on problems.
+    '';
+    downloadPage = "https://github.com/tstack/lnav/releases";
+    license = licenses.bsd2;
+    version = "0.8.5";
+    maintainers = with maintainers; [ dochang ma27 ];
+    platforms = platforms.unix;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/loadlibrary/default.nix b/nixpkgs/pkgs/tools/misc/loadlibrary/default.nix
new file mode 100644
index 000000000000..bc52598ff800
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/loadlibrary/default.nix
@@ -0,0 +1,31 @@
+{ cabextract, fetchFromGitHub, readline, stdenv_32bit }:
+
+# stdenv_32bit is needed because the program depends upon 32-bit libraries and does not have
+# support for 64-bit yet: it requires libc6-dev:i386, libreadline-dev:i386.
+
+stdenv_32bit.mkDerivation rec {
+  name = "loadlibrary-${version}";
+  version = "20170525-${stdenv_32bit.lib.strings.substring 0 7 rev}";
+  rev = "721b084c088d779075405b7f20c77c2578e2a961";
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "taviso";
+    repo = "loadlibrary";
+    sha256 = "01hb7wzfh1s5b8cvmrmr1gqknpq5zpzj9prq3wrpsgg129jpsjkb";
+  };
+
+  buildInputs = [ cabextract readline ];
+
+  installPhase = ''
+    mkdir -p $out/bin/
+    cp mpclient $out/bin/
+  '';
+
+  meta = with stdenv_32bit.lib; {
+    homepage = https://github.com/taviso/loadlibrary;
+    description = "Porting Windows Dynamic Link Libraries to Linux";
+    platforms = platforms.linux;
+    maintainers = [ maintainers.eleanor ];
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lockfile-progs/default.nix b/nixpkgs/pkgs/tools/misc/lockfile-progs/default.nix
new file mode 100644
index 000000000000..e851855834a4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lockfile-progs/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, liblockfile }:
+
+stdenv.mkDerivation rec {
+  _name   = "lockfile-progs";
+  version = "0.1.18";
+  name    = "${_name}-${version}";
+
+  src = fetchurl {
+    url = "mirror://debian/pool/main/l/${_name}/${_name}_${version}.tar.gz";
+    sha256 = "1rjwn3fh2hy8hmpr66y8yp7v5i3325v1mk0gr7pqhqbyp6j9aad4";
+  };
+
+  buildInputs = [ liblockfile ];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/man/man1
+    install -s bin/* $out/bin
+    install man/*.1 $out/man/man1
+  '';
+
+  meta = {
+    description = "Programs for locking and unlocking files and mailboxes";
+    homepage = http://packages.debian.org/sid/lockfile-progs;
+    license = stdenv.lib.licenses.gpl2;
+
+    maintainers = [ stdenv.lib.maintainers.bluescreen303 ];
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/logstash/6.x.nix b/nixpkgs/pkgs/tools/misc/logstash/6.x.nix
new file mode 100644
index 000000000000..c926d220b05d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/logstash/6.x.nix
@@ -0,0 +1,53 @@
+{ elk6Version
+, enableUnfree ? true
+, stdenv
+, fetchurl
+, makeWrapper
+, jre
+}:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  version = elk6Version;
+  name = "logstash-${optionalString (!enableUnfree) "oss-"}${version}";
+
+  src = fetchurl {
+    url = "https://artifacts.elastic.co/downloads/logstash/${name}.tar.gz";
+    sha256 =
+      if enableUnfree
+      then "00pwi7clgdflzzg15bh3y30gzikvvy7p5fl88fww7xhhy47q8053"
+      else "0spxgqsyh72n0l0xh6rljp0lbqz46xmr02sqz25ybycr4qkxdhgk";
+  };
+
+  dontBuild         = true;
+  dontPatchELF      = true;
+  dontStrip         = true;
+  dontPatchShebangs = true;
+
+  buildInputs = [
+    makeWrapper jre
+  ];
+
+  installPhase = ''
+    mkdir -p $out
+    cp -r {Gemfile*,modules,vendor,lib,bin,config,data,logstash-core,logstash-core-plugin-api} $out
+
+    patchShebangs $out/bin/logstash
+    patchShebangs $out/bin/logstash-plugin
+
+    wrapProgram $out/bin/logstash \
+       --set JAVA_HOME "${jre}"
+
+    wrapProgram $out/bin/logstash-plugin \
+       --set JAVA_HOME "${jre}"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Logstash is a data pipeline that helps you process logs and other event data from a variety of systems";
+    homepage    = https://www.elastic.co/products/logstash;
+    license     = if enableUnfree then licenses.elastic else licenses.asl20;
+    platforms   = platforms.unix;
+    maintainers = with maintainers; [ wjlroe offline basvandijk ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/logstash/7.x.nix b/nixpkgs/pkgs/tools/misc/logstash/7.x.nix
new file mode 100644
index 000000000000..1bd307337655
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/logstash/7.x.nix
@@ -0,0 +1,53 @@
+{ elk7Version
+, enableUnfree ? true
+, stdenv
+, fetchurl
+, makeWrapper
+, jre
+}:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  version = elk7Version;
+  name = "logstash-${optionalString (!enableUnfree) "oss-"}${version}";
+
+  src = fetchurl {
+    url = "https://artifacts.elastic.co/downloads/logstash/${name}.tar.gz";
+    sha256 =
+      if enableUnfree
+      then "01l6alwgsq6yf0z9d08i0hi8g708nph1vm78nl4xbpg8h964bybj"
+      else "0nlwgaw6rmhp5b68zpp1pzsjs30b0bjzdg8f7xy6rarpk338s8yb";
+  };
+
+  dontBuild         = true;
+  dontPatchELF      = true;
+  dontStrip         = true;
+  dontPatchShebangs = true;
+
+  buildInputs = [
+    makeWrapper jre
+  ];
+
+  installPhase = ''
+    mkdir -p $out
+    cp -r {Gemfile*,modules,vendor,lib,bin,config,data,logstash-core,logstash-core-plugin-api} $out
+
+    patchShebangs $out/bin/logstash
+    patchShebangs $out/bin/logstash-plugin
+
+    wrapProgram $out/bin/logstash \
+       --set JAVA_HOME "${jre}"
+
+    wrapProgram $out/bin/logstash-plugin \
+       --set JAVA_HOME "${jre}"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Logstash is a data pipeline that helps you process logs and other event data from a variety of systems";
+    homepage    = https://www.elastic.co/products/logstash;
+    license     = if enableUnfree then licenses.elastic else licenses.asl20;
+    platforms   = platforms.unix;
+    maintainers = with maintainers; [ wjlroe offline basvandijk ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/logstash/contrib.nix b/nixpkgs/pkgs/tools/misc/logstash/contrib.nix
new file mode 100644
index 000000000000..b580d559868b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/logstash/contrib.nix
@@ -0,0 +1,31 @@
+{ stdenv, lib, fetchzip }:
+
+# Note that plugins are supposed to be installed as:
+#   $path/logstash/{inputs,codecs,filters,outputs}/*.rb 
+stdenv.mkDerivation rec {
+  version = "1.4.2";
+  pname = "logstash-contrib";
+
+  src = fetchzip {
+   url = "https://download.elasticsearch.org/logstash/logstash/logstash-contrib-${version}.tar.gz";
+   sha256 = "1yj8sf3b526gixh3c6zhgkfpg4f0c72p1lzhfhdx8b3lw7zjkj0k";
+  };
+
+  dontBuild    = true;
+  dontPatchELF = true;
+  dontStrip    = true;
+  dontPatchShebangs = true;
+
+  installPhase = ''
+    mkdir -p $out/logstash
+    cp -r lib/* $out
+  '';
+
+  meta = with lib; {
+    description = "Community-maintained logstash plugins";
+    homepage    = https://github.com/elasticsearch/logstash-contrib;
+    license     = stdenv.lib.licenses.asl20;
+    platforms   = stdenv.lib.platforms.unix;
+    maintainers = with maintainers; [ cstrahan ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lolcat/Gemfile b/nixpkgs/pkgs/tools/misc/lolcat/Gemfile
new file mode 100644
index 000000000000..ea1216e2405d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lolcat/Gemfile
@@ -0,0 +1,2 @@
+source "https://rubygems.org"
+gem "lolcat"
diff --git a/nixpkgs/pkgs/tools/misc/lolcat/Gemfile.lock b/nixpkgs/pkgs/tools/misc/lolcat/Gemfile.lock
new file mode 100644
index 000000000000..ed48cc5921b0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lolcat/Gemfile.lock
@@ -0,0 +1,19 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    lolcat (100.0.0)
+      manpages (~> 0.6.1)
+      optimist (~> 3.0.0)
+      paint (~> 2.1.0)
+    manpages (0.6.1)
+    optimist (3.0.0)
+    paint (2.1.1)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  lolcat
+
+BUNDLED WITH
+   1.17.2
diff --git a/nixpkgs/pkgs/tools/misc/lolcat/default.nix b/nixpkgs/pkgs/tools/misc/lolcat/default.nix
new file mode 100644
index 000000000000..25efcdf34611
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lolcat/default.nix
@@ -0,0 +1,16 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "lolcat";
+  gemdir = ./.;
+  exes = [ "lolcat" ];
+
+  passthru.updateScript = bundlerUpdateScript "lolcat";
+
+  meta = with lib; {
+    description = "A rainbow version of cat";
+    homepage    = https://github.com/busyloop/lolcat;
+    license     = licenses.bsd3;
+    maintainers = with maintainers; [ StillerHarpo manveru nicknovitski ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lolcat/gemset.nix b/nixpkgs/pkgs/tools/misc/lolcat/gemset.nix
new file mode 100644
index 000000000000..2c2bc9cead10
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lolcat/gemset.nix
@@ -0,0 +1,43 @@
+{
+  lolcat = {
+    dependencies = ["manpages" "optimist" "paint"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0k1m2ihcprjq9jdmq2v3xlf27hqbpr2vjnnyfwp3z2zspzbl0nys";
+      type = "gem";
+    };
+    version = "100.0.0";
+  };
+  manpages = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11p6ilnfda6af15ks3xiz2pr0hkvdvadnk1xm4ahqlf84dld3fnd";
+      type = "gem";
+    };
+    version = "0.6.1";
+  };
+  optimist = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05jxrp3nbn5iilc1k7ir90mfnwc5abc9h78s5rpm3qafwqxvcj4j";
+      type = "gem";
+    };
+    version = "3.0.0";
+  };
+  paint = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rrb2p2yk6ffhm0gz8ba431mf63kq7w27gwavxl7n8qd2splj4mh";
+      type = "gem";
+    };
+    version = "2.1.1";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/misc/loop/default.nix b/nixpkgs/pkgs/tools/misc/loop/default.nix
new file mode 100644
index 000000000000..ef7a3e3ada40
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/loop/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage {
+  name = "loop-unstable-2018-12-04";
+
+  src = fetchFromGitHub {
+    owner = "Miserlou";
+    repo  = "Loop";
+    rev   = "598ccc8e52bb13b8aff78b61cfe5b10ff576cecf";
+    sha256 = "0f33sc1slg97q1aisdrb465c3p7fgdh2swv8k3yphpnja37f5nl4";
+  };
+
+  cargoSha256 = "19x8n39yaa924naldw6fv7mq9qb500arkhwj9jz2fsbhz5nz607r";
+
+  meta = with stdenv.lib; {
+    description = "UNIX's missing `loop` command";
+    homepage = https://github.com/Miserlou/Loop;
+    maintainers = with maintainers; [ koral ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lorri/default.nix b/nixpkgs/pkgs/tools/misc/lorri/default.nix
new file mode 100644
index 000000000000..ea0bbe3dfe2c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lorri/default.nix
@@ -0,0 +1,55 @@
+{ stdenv
+, pkgs
+, fetchFromGitHub
+, rustPlatform
+  # Updater script
+, runtimeShell
+, writeScript
+  # Tests
+, nixosTests
+  # Apple dependencies
+, CoreServices
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "lorri";
+  version = "unstable-2020-01-09";
+
+  meta = with stdenv.lib; {
+    description = "Your project's nix-env";
+    homepage = "https://github.com/target/lorri";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ grahamc Profpatsch ];
+  };
+
+  src = fetchFromGitHub {
+    owner = "target";
+    repo = pname;
+    # Run `eval $(nix-build -A lorri.updater)` after updating the revision!
+    rev = "7b84837b9988d121dd72178e81afd440288106c5";
+    sha256 = "0rkga944jl6i0051vbsddfqbvzy12168cbg4ly2ng1rk0x97dbr8";
+  };
+
+  cargoSha256 = "0k7l0zhk2vzf4nlwv4xr207irqib2dqjxfdjk1fprff84c4kblx8";
+  doCheck = false;
+
+  BUILD_REV_COUNT = src.revCount or 1;
+  RUN_TIME_CLOSURE = pkgs.callPackage ./runtime.nix {};
+
+  nativeBuildInputs = with pkgs; [ rustPackages.rustfmt ];
+  buildInputs =
+    stdenv.lib.optionals stdenv.isDarwin [ CoreServices Security ];
+
+  passthru = {
+    updater = with builtins; writeScript "copy-runtime-nix.sh" ''
+      #!${runtimeShell}
+      set -euo pipefail
+      cp ${src}/nix/runtime.nix ${toString ./runtime.nix}
+      cp ${src}/nix/runtime-closure.nix.template ${toString ./runtime-closure.nix.template}
+    '';
+    tests = {
+      nixos = nixosTests.lorri;
+    };
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lorri/runtime-closure.nix.template b/nixpkgs/pkgs/tools/misc/lorri/runtime-closure.nix.template
new file mode 100644
index 000000000000..2cb2ec4bbb9f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lorri/runtime-closure.nix.template
@@ -0,0 +1,37 @@
+# Nix with sandboxing requires every path used at build time be
+# explicitly declared. If we simply passed in the paths, they
+# would be copied in as sources. Using builtins.storePath we're
+# able to tell Nix that, no, in fact, treat these not as sources
+# to copy, but instead of a regular store path.
+#
+# Include the explicit closure, too, otherwise we'll get mysterious
+# "file not found" errors due to the glibc interpreter being
+# missing.
+let
+  # Magic inspired by Nix's config.nix:
+  # https://github.com/NixOS/nix/blob/f9a2ea44867cd1dbb408bca4df0ced806137b7f7/corepkgs/config.nix.in#L23
+  #
+  # If the dependency is in the Nix store we're using, refer to
+  # it as a literal store path. If it isn't, refer to it "normally".
+  #
+  # This makes sandboxing happy when in a nix-build, and the
+  # evaluation happy when in a «cargo build».
+  tools_build_host = @tools_build_host@;
+
+  # Compare the stringified version of the tools_build_host Nix store
+  # path to the evaluator's stringified Nix store path. Otherwise,
+  # Nix will read the sources in to the /nix/store, and, well,
+  # you can only copy the /nix/store in to the /nix/store so many
+  # times before you run out of disk space.
+  dep = if ("${toString (dirOf tools_build_host)}" == "${toString builtins.storeDir}")
+    then (builtins.trace "using storePath"  builtins.storePath)
+    else (builtins.trace "using toString" toString) # assume we have no sandboxing
+    ;
+
+  tools = dep tools_build_host;
+
+in {
+  path = "${tools}/bin";
+  builder = "${tools}/bin/bash";
+  closure = import @runtime_closure_list@ { inherit dep; };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lorri/runtime.nix b/nixpkgs/pkgs/tools/misc/lorri/runtime.nix
new file mode 100644
index 000000000000..96b14b26e82c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lorri/runtime.nix
@@ -0,0 +1,38 @@
+{
+  # Plumbing tools:
+  closureInfo
+, runCommand
+, writeText
+, buildEnv
+, # Actual dependencies to propagate:
+  bash
+, coreutils
+}:
+let
+  tools = buildEnv {
+    name = "lorri-runtime-tools";
+    paths = [ coreutils bash ];
+  };
+
+  runtimeClosureInfo = closureInfo {
+    rootPaths = [ tools ];
+  };
+
+  closureToNix = runCommand "closure.nix" {}
+    ''
+      (
+        echo '{ dep, ... }: ['
+        sed -E 's/^(.*)$/    (dep \1)/' ${runtimeClosureInfo}/store-paths
+        echo ']'
+      ) > $out
+    '';
+
+  runtimeClosureInfoAsNix = runCommand "runtime-closure.nix" {
+    runtime_closure_list = closureToNix;
+    tools_build_host = tools;
+  }
+    ''
+      substituteAll ${./runtime-closure.nix.template} $out
+    '';
+in
+runtimeClosureInfoAsNix
diff --git a/nixpkgs/pkgs/tools/misc/lrzsz/default.nix b/nixpkgs/pkgs/tools/misc/lrzsz/default.nix
new file mode 100644
index 000000000000..11351790becc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lrzsz/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "lrzsz-0.12.20";
+
+  src = fetchurl {
+    url = "https://ohse.de/uwe/releases/${name}.tar.gz";
+    sha256 = "1wcgfa9fsigf1gri74gq0pa7pyajk12m4z69x7ci9c6x9fqkd2y2";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  configureFlags = [ "--program-transform-name=s/^l//" ];
+
+  meta = with stdenv.lib; {
+    homepage = https://ohse.de/uwe/software/lrzsz.html;
+    description = "Communication package providing the XMODEM, YMODEM ZMODEM file transfer protocols";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lsd/default.nix b/nixpkgs/pkgs/tools/misc/lsd/default.nix
new file mode 100644
index 000000000000..9b7ff7fd600a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lsd/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "lsd";
+  version = "0.16.0";
+
+  src = fetchFromGitHub {
+    owner = "Peltoche";
+    repo = pname;
+    rev = version;
+    sha256 = "0fh5rz6slyjzz03bpjcl9gplk36vm7qcc0i0gvhsikwvw0cf3hym";
+  };
+
+  cargoSha256 = "0377jbjkrrjss3w8xmjsjjynycpdk19grp20hffxschg4ryvniin";
+
+  preFixup = ''
+    install -Dm644 -t $out/share/zsh/site-functions/ target/release/build/lsd-*/out/_lsd
+    install -Dm644 -t $out/share/fish/vendor_completions.d/ target/release/build/lsd-*/out/lsd.fish
+    install -Dm644 -t $out/share/bash-completion/completions/ target/release/build/lsd-*/out/lsd.bash
+  '';
+
+  # Some tests fail, but Travis ensures a proper build
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/Peltoche/lsd;
+    description = "The next gen ls command";
+    license = licenses.asl20;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ltunify/default.nix b/nixpkgs/pkgs/tools/misc/ltunify/default.nix
new file mode 100644
index 000000000000..84a92ec77128
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ltunify/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitHub }:
+
+# Although we copy in the udev rules here, you probably just want to use logitech-udev-rules instead of
+# adding this to services.udev.packages on NixOS
+
+stdenv.mkDerivation {
+  pname = "ltunify";
+  version = "unstable-20180330";
+
+  src = fetchFromGitHub {
+    owner  = "Lekensteyn";
+    repo   = "ltunify";
+    rev    = "f664d1d41d5c4beeac5b81e485c3498f13109db7";
+    sha256 = "07sqhih9jmm7vgiwqsjzihd307cj7l096sxjl25p7nwr1q4180wv";
+  };
+
+  makeFlags = [ "DESTDIR=$(out)" "bindir=/bin" ];
+
+  meta = with stdenv.lib; {
+    description = "Tool for working with Logitech Unifying receivers and devices";
+    homepage = https://lekensteyn.nl/logitech-unifying.html;
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ abbradar ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/makebootfat/default.nix b/nixpkgs/pkgs/tools/misc/makebootfat/default.nix
new file mode 100644
index 000000000000..e23e12bcb307
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/makebootfat/default.nix
@@ -0,0 +1,18 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "makebootfat-1.4";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/advancemame/${name}.tar.gz";
+    sha256 = "0v0g1xax0y6hmw2x10nfhchp9n7vqyvgc33gcxqax8jdq2pxm1q2";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Create bootable USB disks using the FAT filesystem and syslinux";
+    homepage = http://advancemame.sourceforge.net/boot-readme.html;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.ehmry ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/man-db/default.nix b/nixpkgs/pkgs/tools/misc/man-db/default.nix
new file mode 100644
index 000000000000..918e8372dcbb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/man-db/default.nix
@@ -0,0 +1,83 @@
+{ stdenv, fetchurl, pkgconfig, libpipeline, db, groff, libiconv, makeWrapper, buildPackages }:
+
+stdenv.mkDerivation rec {
+  name = "man-db-2.9.0";
+
+  src = fetchurl {
+    url = "mirror://savannah/man-db/${name}.tar.xz";
+    sha256 = "0qg2sdn8mayya0ril484iz1r7hi46l68d2d80cr6lvc7x3csqjjx";
+  };
+
+  outputs = [ "out" "doc" ];
+  outputMan = "out"; # users will want `man man` to work
+
+  nativeBuildInputs = [ pkgconfig makeWrapper groff ];
+  buildInputs = [ libpipeline db groff ]; # (Yes, 'groff' is both native and build input)
+  checkInputs = [ libiconv /* for 'iconv' binary */ ];
+
+  postPatch = ''
+    # Remove all mandatory manpaths. Nixpkgs makes no requirements on
+    # these directories existing.
+    sed -i 's/^MANDATORY_MANPATH/# &/' src/man_db.conf.in
+
+    # Add Nixpkgs and NixOS-related manpaths
+    echo "MANPATH_MAP	/run/current-system/sw/bin		/run/current-system/sw/share/man" >> src/man_db.conf.in
+    echo "MANPATH_MAP	/run/wrappers/bin			/run/current-system/sw/share/man" >> src/man_db.conf.in
+    echo "MANPATH_MAP	/nix/var/nix/profiles/default/bin	/nix/var/nix/profiles/default/share/man" >> src/man_db.conf.in
+
+    # Add mandb locations for the above
+    echo "MANDB_MAP	/run/current-system/sw/share/man	/var/cache/man/nixos" >> src/man_db.conf.in
+    echo "MANDB_MAP	/nix/var/nix/profiles/default/share/man	/var/cache/man/nixpkgs" >> src/man_db.conf.in
+  '';
+
+  configureFlags = [
+    "--disable-setuid"
+    "--disable-cache-owner"
+    "--localstatedir=/var"
+    # Don't try /etc/man_db.conf by default, so we avoid error messages.
+    "--with-config-file=${placeholder "out"}/etc/man_db.conf"
+    "--with-systemdtmpfilesdir=${placeholder "out"}/lib/tmpfiles.d"
+    "--with-systemdsystemunitdir=${placeholder "out"}/lib/systemd/system"
+    "--with-pager=less"
+  ] ++ stdenv.lib.optional stdenv.hostPlatform.isDarwin [
+    "ac_cv_func__set_invalid_parameter_handler=no"
+    "ac_cv_func_posix_fadvise=no"
+    "ac_cv_func_mempcpy=no"
+  ];
+
+  preConfigure = ''
+    configureFlagsArray+=("--with-sections=1 n l 8 3 0 2 5 4 9 6 7")
+  '';
+
+  postInstall = ''
+    # apropos/whatis uses program name to decide whether to act like apropos or whatis
+    # (multi-call binary). `apropos` is actually just a symlink to whatis. So we need to
+    # make sure that we don't wrap symlinks (since that changes argv[0] to the -wrapped name)
+    find "$out/bin" -type f | while read file; do
+      wrapProgram "$file" --prefix PATH : "${groff}/bin"
+    done
+  '';
+
+  postFixup = stdenv.lib.optionalString (buildPackages.groff != groff) ''
+    # Check to make sure none of the outputs depend on build-time-only groff:
+    for outName in $outputs; do
+      out=''${!outName}
+      echo "Checking $outName(=$out) for references to build-time groff..."
+      if grep -r '${buildPackages.groff}' $out; then
+        echo "Found an erroneous dependency on groff ^^^" >&2
+        exit 1
+      fi
+    done
+  '';
+
+  enableParallelBuilding = true;
+
+  doCheck = !stdenv.hostPlatform.isMusl /* iconv binary */ && !stdenv.hostPlatform.isDarwin;
+
+  meta = with stdenv.lib; {
+    homepage = http://man-db.nongnu.org;
+    description = "An implementation of the standard Unix documentation system accessed using the man command";
+    license = licenses.gpl2;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mandoc/default.nix b/nixpkgs/pkgs/tools/misc/mandoc/default.nix
new file mode 100644
index 000000000000..828e23582363
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mandoc/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchurl, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "mandoc";
+  version = "1.14.5";
+
+  src = fetchurl {
+    url = "https://mandoc.bsd.lv/snapshots/mandoc-${version}.tar.gz";
+    sha256 = "1xyqllxpjj1kimlipx11pzyywf5c25i4wmv0lqm7ph3gnlnb86c2";
+  };
+
+  buildInputs = [ zlib ];
+
+  configureLocal = ''
+    HAVE_WCHAR=1
+    MANPATH_DEFAULT="/run/current-system/sw/share/man"
+    OSNAME="NixOS"
+    PREFIX="$out"
+    HAVE_MANPATH=1
+    LD_OHASH="-lutil"
+    BUILD_DB=0
+    CC=${stdenv.cc.targetPrefix}cc
+  '';
+
+  patches = [
+    ./remove-broken-cc-check.patch
+  ];
+
+  preConfigure = ''
+    echo $configureLocal > configure.local
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://mandoc.bsd.lv/;
+    description = "suite of tools compiling mdoc and man";
+    downloadPage = "http://mandoc.bsd.lv/snapshots/";
+    license = licenses.bsd3;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ bb010g ramkromberg ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mandoc/remove-broken-cc-check.patch b/nixpkgs/pkgs/tools/misc/mandoc/remove-broken-cc-check.patch
new file mode 100644
index 000000000000..580226d165bb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mandoc/remove-broken-cc-check.patch
@@ -0,0 +1,11 @@
+--- mandoc-1.14.4.org/configure	2018-08-08 15:51:51.000000000 +0100
++++ mandoc-1.14.4/configure	2018-08-27 08:19:40.391912427 +0100
+@@ -40,7 +40,7 @@
+ OSNAME=
+ UTF8_LOCALE=
+ 
+-CC=`printf "all:\\n\\t@echo \\\$(CC)\\n" | env -i make -sf -`
++CC=
+ CFLAGS=
+ LDADD=
+ LDFLAGS=
diff --git a/nixpkgs/pkgs/tools/misc/marlin-calc/default.nix b/nixpkgs/pkgs/tools/misc/marlin-calc/default.nix
new file mode 100644
index 000000000000..c7222f696c99
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/marlin-calc/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+  pname = "marlin-calc";
+  version = "2019-10-17";
+
+  src = fetchFromGitHub {
+    owner = "eyal0";
+    repo = "Marlin";
+    rev = "3d5a5c86bea35a2a169eb56c70128bf2d070feef";
+    sha256 = "14sqajm361gnrcqv84g7kbmyqm8pppbhqsabszc4j2cn7vbwkdg5";
+  };
+
+  buildPhase = ''
+    cd Marlin/src
+    c++ module/planner.cpp module/calc.cpp feature/fwretract.cpp \
+      -O2 -Wall -std=gnu++11 -o marlin-calc
+  '';
+
+  installPhase = ''
+    install -Dm0755 {,$out/bin/}marlin-calc
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/eyal0/Marlin";
+    description = "Marlin 3D printer timing simulator";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ gebner ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/massren/default.nix b/nixpkgs/pkgs/tools/misc/massren/default.nix
new file mode 100644
index 000000000000..6d198a35605d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/massren/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "massren";
+  version = "1.5.4";
+
+  src = fetchFromGitHub {
+    owner = "laurent22";
+    repo = "massren";
+    rev = "v${version}";
+    sha256 = "1bn6qy30kpxi3rkr3bplsc80xnhj0hgfl0qaczbg3zmykfmsl3bl";
+  };
+
+  goPackagePath = "github.com/laurent22/massren";
+
+  meta = with lib; {
+    description = "Easily rename multiple files using your text editor";
+    license = licenses.mit;
+    homepage = https://github.com/laurent22/massren;
+    maintainers = with maintainers; [ andrew-d ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mbuffer/default.nix b/nixpkgs/pkgs/tools/misc/mbuffer/default.nix
new file mode 100644
index 000000000000..7edfb280e430
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mbuffer/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl,
+	openssl,
+ } :
+
+stdenv.mkDerivation rec {
+  version = "20191016";
+  pname = "mbuffer";
+
+  src = fetchurl {
+    url = "http://www.maier-komor.de/software/mbuffer/mbuffer-${version}.tgz";
+    sha256 = "05xyvmbs2x5gbj2njgg7hsj3alb5dh96xhab0w0qkhb58x2i1hld";
+  };
+
+  buildInputs = [ openssl ];
+  doCheck = true;
+
+  meta = {
+    homepage = "http://www.maier-komor.de/mbuffer.html";
+    description  = "A tool for buffering data streams with a large set of unique features";
+    license = stdenv.lib.licenses.gpl3;
+    maintainers = with stdenv.lib.maintainers; [ tokudan ];
+    platforms = stdenv.lib.platforms.linux; # Maybe other non-darwin Unix
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mc/default.nix b/nixpkgs/pkgs/tools/misc/mc/default.nix
new file mode 100644
index 000000000000..b2711903ead1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mc/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchurl, pkgconfig, glib, gpm, file, e2fsprogs
+, libX11, libICE, perl, zip, unzip, gettext, slang, libssh2, openssl}:
+
+stdenv.mkDerivation rec {
+  pname = "mc";
+  version = "4.8.23";
+
+  src = fetchurl {
+    url = "http://www.midnight-commander.org/downloads/${pname}-${version}.tar.xz";
+    sha256 = "077z7phzq3m1sxyz7li77lyzv4rjmmh3wp2vy86pnc4387kpqzyx";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+
+  buildInputs = [
+    perl glib slang zip unzip file gettext libX11 libICE libssh2 openssl
+  ] ++ stdenv.lib.optionals (!stdenv.isDarwin) [ e2fsprogs gpm ];
+
+  enableParallelBuilding = true;
+
+  configureFlags = [ "--enable-vfs-smb" ];
+
+  postFixup = ''
+    # remove unwanted build-dependency references
+    sed -i -e "s!PKG_CONFIG_PATH=''${PKG_CONFIG_PATH}!PKG_CONFIG_PATH=$(echo "$PKG_CONFIG_PATH" | sed -e 's/./0/g')!" $out/bin/mc
+  '';
+
+  meta = {
+    description = "File Manager and User Shell for the GNU Project";
+    homepage = http://www.midnight-commander.org;
+    downloadPage = "http://www.midnight-commander.org/downloads/";
+    repositories.git = git://github.com/MidnightCommander/mc.git;
+    license = stdenv.lib.licenses.gpl2Plus;
+    maintainers = [ stdenv.lib.maintainers.sander ];
+    platforms = with stdenv.lib.platforms; linux ++ darwin;
+    updateWalker = true;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mcfly/default.nix b/nixpkgs/pkgs/tools/misc/mcfly/default.nix
new file mode 100644
index 000000000000..4ea27ce092f7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mcfly/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mcfly";
+  version = "0.3.1";
+
+  src = fetchFromGitHub {
+    owner = "cantino";
+    repo = "mcfly";
+    rev = "v${version}";
+    sha256 = "0pmyw21zns4zn7pffji4yvbj63fx3g15cx81pk4bs6lzyz5zbdc2";
+  };
+
+  preInstall = ''
+    mkdir -p $out/share/mcfly
+    cp mcfly.bash $out/share/mcfly/
+    chmod +x $out/share/mcfly/mcfly.bash
+  '';
+
+  cargoSha256 = "1bf65kagvhsi6lg8187ihi5j45hkq9d8v6j7rzmmfhngdzvcfr69";
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/cantino/mcfly;
+    description = "An upgraded ctrl-r for Bash whose history results make sense for what you're working on right now.";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.melkor333 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mcrypt/default.nix b/nixpkgs/pkgs/tools/misc/mcrypt/default.nix
new file mode 100644
index 000000000000..bc520c57a338
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mcrypt/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, libmcrypt, libmhash }:
+
+stdenv.mkDerivation rec {
+  version = "2.6.8";
+  pname = "mcrypt";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/mcrypt/MCrypt/${version}/${pname}-${version}.tar.gz";
+    sha256 = "5145aa844e54cca89ddab6fb7dd9e5952811d8d787c4f4bf27eb261e6c182098";
+  };
+
+  patches = [ ./format-string.patch ./overflow.patch ./segv.patch ./sprintf.patch ];
+
+  buildInputs = [ libmcrypt libmhash ];
+
+  meta = {
+    description = "Replacement for old UNIX crypt(1)";
+    longDescription = ''
+      mcrypt, and the accompanying libmcrypt, are intended to be replacements
+      for the old Unix crypt, except that they are under the GPL and support an
+      ever-wider range of algorithms and modes.
+    '';
+    homepage = http://mcrypt.sourceforge.net;
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.all;
+    maintainers = [ stdenv.lib.maintainers.qknight ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mcrypt/format-string.patch b/nixpkgs/pkgs/tools/misc/mcrypt/format-string.patch
new file mode 100644
index 000000000000..322ab473811f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mcrypt/format-string.patch
@@ -0,0 +1,31 @@
+--- mcrypt-2.6.8/src/errors.c
++++ mcrypt-2.6.8/src/errors.c
+@@ -25,24 +25,24 @@
+
+ void err_quit(char *errmsg)
+ {
+-	fprintf(stderr, errmsg);
++	fprintf(stderr, "%s", errmsg);
+ 	exit(-1);
+ }
+
+ void err_warn(char *errmsg)
+ {
+ 	if (quiet <= 1)
+-		fprintf(stderr, errmsg);
++		fprintf(stderr, "%s", errmsg);
+ }
+
+ void err_info(char *errmsg)
+ {
+ 	if (quiet == 0)
+-		fprintf(stderr, errmsg);
++		fprintf(stderr, "%s", errmsg);
+ }
+
+ void err_crit(char *errmsg)
+ {
+ 	if (quiet <= 2)
+-		fprintf(stderr, errmsg);
++		fprintf(stderr, "%s", errmsg);
+ }
diff --git a/nixpkgs/pkgs/tools/misc/mcrypt/overflow.patch b/nixpkgs/pkgs/tools/misc/mcrypt/overflow.patch
new file mode 100644
index 000000000000..bf747a58266a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mcrypt/overflow.patch
@@ -0,0 +1,24 @@
+From 3efb40e17ce4f76717ae17a1ce1e1f747ddf59fd Mon Sep 17 00:00:00 2001
+From: Alon Bar-Lev <alon.barlev@gmail.com>
+Date: Sat, 22 Dec 2012 22:37:06 +0200
+Subject: [PATCH] cleanup: buffer overflow
+
+---
+ mcrypt-2.6.8/src/extra.c |    2 ++
+ 1 files changed, 2 insertions(+), 0 deletions(-)
+
+diff --git a/mcrypt-2.6.8/src/extra.c b/mcrypt-2.6.8/src/extra.c
+index 3082f82..c7a1ac0 100644
+--- a/src/extra.c
++++ b/src/extra.c
+@@ -241,6 +241,8 @@ int check_file_head(FILE * fstream, char *algorithm, char *mode,
+ 		if (m_getbit(6, flags) == 1) { /* if the salt bit is set */
+ 			if (m_getbit(0, sflag) != 0) { /* if the first bit is set */
+ 				*salt_size = m_setbit(0, sflag, 0);
++				if (*salt_size > sizeof(tmp_buf))
++					err_quit(_("Salt is too long\n"));
+ 				if (*salt_size > 0) {
+ 					fread(tmp_buf, 1, *salt_size,
+ 					      fstream);
+--
+1.7.8.6
diff --git a/nixpkgs/pkgs/tools/misc/mcrypt/segv.patch b/nixpkgs/pkgs/tools/misc/mcrypt/segv.patch
new file mode 100644
index 000000000000..6796163418f5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mcrypt/segv.patch
@@ -0,0 +1,39 @@
+From 5bee29fae8f0e936ad4c957aef6035d09532a57a Mon Sep 17 00:00:00 2001
+From: Alon Bar-Lev <alon.barlev@gmail.com>
+Date: Sat, 22 Dec 2012 22:04:27 +0200
+Subject: [PATCH] cleanup: fixup segv on buffer access
+
+use exact buffer size instead of guess.
+
+do not copy out of source buffer.
+
+Signed-off-by: Alon Bar-Lev <alon.barlev@gmail.com>
+---
+ mcrypt-2.6.8/src/rfc2440.c |    5 +++--
+ 1 files changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/mcrypt-2.6.8/src/rfc2440.c b/mcrypt-2.6.8/src/rfc2440.c
+index 5a1f296..929b9ab 100644
+--- a/src/rfc2440.c
++++ b/src/rfc2440.c
+@@ -497,7 +497,7 @@ plaintext_encode(const USTRING dat)
+     time_t t;
+
+     assert(dat->len > 0);
+-    result = make_ustring( NULL,  2 * dat->len); /* xxx */
++    result = make_ustring( NULL,  dat->len + 12); /* xxx */
+     newdat = (USTRING)dat;
+     result->d[pos++] = (0x80 | 0x40 | PKT_PLAINTEXT);
+
+@@ -810,7 +810,8 @@ encrypted_encode(const USTRING pt, const DEK *dek)
+     _mcrypt_encrypt(dek->hd, rndpref, dek->blocklen + 2, NULL, 0);
+     _mcrypt_sync(dek->hd, rndpref, dek->blocklen);
+
+-    ct = make_ustring( rndpref,   2 * pt->len); /* xxx */
++    ct = make_ustring( NULL, dek->blocklen + 2 + pt->len + 12); /* xxx */
++    memcpy(ct->d, rndpref, dek->blocklen + 2);
+     pos = dek->blocklen + 2;
+
+     _mcrypt_encrypt(dek->hd, ct->d + pos, pt->len, pt->d, pt->len);
+--
+1.7.8.6
diff --git a/nixpkgs/pkgs/tools/misc/mcrypt/sprintf.patch b/nixpkgs/pkgs/tools/misc/mcrypt/sprintf.patch
new file mode 100644
index 000000000000..1c9ade807778
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mcrypt/sprintf.patch
@@ -0,0 +1,108 @@
+Description: [CVE-2012-4527] Stack-based buffer overflow with long file names
+ .
+ A buffer overflow in mcrypt version 2.6.8 and earlier due to long filenames.
+ If a user were tricked into attempting to encrypt/decrypt specially crafted
+ long filename(s), this flaw would cause a stack-based buffer overflow that
+ could potentially lead to arbitrary code execution.
+ .
+ Note that this is caught by FORTIFY_SOURCE, which makes this a crash-only
+ bug on wheezy.
+Author: Attila Bogar, Jean-Michel Vourgère <jmv_deb@nirgal.com>
+Origin: https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2012-4527
+Bug: CVE-2012-4527
+Bug-Debian: http://bugs.debian.org/690924
+Forwarded: no
+Last-Update: 2012-11-01
+Index: mcrypt-2.6.8/src/mcrypt.c
+===================================================================
+--- mcrypt-2.6.8.orig/src/mcrypt.c
++++ mcrypt-2.6.8/src/mcrypt.c
+@@ -41,4 +41,6 @@
+
++/* Temporary error message can contain one file name and 1k of text */
++#define ERRWIDTH ((PATH_MAX)+1024)
+-char tmperr[128];
++char tmperr[ERRWIDTH];
+ unsigned int stream_flag = FALSE;
+ char *keymode = NULL;
+ char *mode = NULL;
+@@ -482,7 +485,7 @@
+ #ifdef HAVE_STAT
+       if (stream_flag == FALSE) {
+ 	 if (is_normal_file(file[i]) == FALSE) {
+-	    sprintf(tmperr,
++	    snprintf(tmperr, ERRWIDTH,
+ 		    _
+ 		    ("%s: %s is not a regular file. Skipping...\n"),
+ 		    program_name, file[i]);
+@@ -501,7 +504,7 @@
+ 	    dinfile = file[i];
+ 	 if ((isatty(fileno((FILE *) (stdin))) == 1)
+ 	     && (stream_flag == TRUE) && (force == 0)) {	/* not a tty */
+-	    sprintf(tmperr,
++	    snprintf(tmperr, ERRWIDTH,
+ 		    _
+ 		    ("%s: Encrypted data will not be read from a terminal.\n"),
+ 		    program_name);
+@@ -520,7 +523,7 @@
+ 	    einfile = file[i];
+ 	 if ((isatty(fileno((FILE *) (stdout))) == 1)
+ 	     && (stream_flag == TRUE) && (force == 0)) {	/* not a tty */
+-	    sprintf(tmperr,
++	    snprintf(tmperr, ERRWIDTH,
+ 		    _
+ 		    ("%s: Encrypted data will not be written to a terminal.\n"),
+ 		    program_name);
+@@ -544,7 +547,7 @@
+ 	    strcpy(outfile, einfile);
+ 	    /* if file has already the .nc ignore it */
+ 	    if (strstr(outfile, ".nc") != NULL) {
+-	       sprintf(tmperr,
++	       snprintf(tmperr, ERRWIDTH,
+ 		       _
+ 		       ("%s: file %s has the .nc suffix... skipping...\n"),
+ 		       program_name, outfile);
+@@ -590,10 +593,10 @@
+
+ 	 if (x == 0) {
+ 	    if (stream_flag == FALSE) {
+-	       sprintf(tmperr, _("File %s was decrypted.\n"), dinfile);
++	       snprintf(tmperr, ERRWIDTH, _("File %s was decrypted.\n"), dinfile);
+ 	       err_warn(tmperr);
+ 	    } else {
+-	       sprintf(tmperr, _("Stdin was decrypted.\n"));
++	       snprintf(tmperr, ERRWIDTH, _("Stdin was decrypted.\n"));
+ 	       err_warn(tmperr);
+ 	    }
+ #ifdef HAVE_STAT
+@@ -610,7 +613,7 @@
+
+ 	 } else {
+ 	    if (stream_flag == FALSE) {
+-	       sprintf(tmperr,
++	       snprintf(tmperr, ERRWIDTH,
+ 		       _
+ 		       ("File %s was NOT decrypted successfully.\n"),
+ 		       dinfile);
+@@ -636,10 +639,10 @@
+
+ 	 if (x == 0) {
+ 	    if (stream_flag == FALSE) {
+-	       sprintf(tmperr, _("File %s was encrypted.\n"), einfile);
++	       snprintf(tmperr, ERRWIDTH, _("File %s was encrypted.\n"), einfile);
+ 	       err_warn(tmperr);
+ 	    } else {
+-	       sprintf(tmperr, _("Stdin was encrypted.\n"));
++	       snprintf(tmperr, ERRWIDTH, _("Stdin was encrypted.\n"));
+ 	       err_warn(tmperr);
+ 	    }
+ #ifdef HAVE_STAT
+@@ -655,7 +658,7 @@
+
+ 	 } else {
+ 	    if (stream_flag == FALSE) {
+-	       sprintf(tmperr,
++	       snprintf(tmperr, ERRWIDTH,
+ 		       _
+ 		       ("File %s was NOT encrypted successfully.\n"),
+ 		       einfile);
diff --git a/nixpkgs/pkgs/tools/misc/mdbtools/default.nix b/nixpkgs/pkgs/tools/misc/mdbtools/default.nix
new file mode 100644
index 000000000000..b365086c46d3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mdbtools/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchFromGitHub, glib, readline
+, bison, flex, pkgconfig, autoreconfHook
+, txt2man, which }:
+
+let version = "0.7.1";
+in stdenv.mkDerivation {
+  pname = "mdbtools";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "brianb";
+    repo = "mdbtools";
+    rev = version;
+    sha256 = "0gwcpp9y09xhs21g7my2fs8ncb8i6ahlyixcx8jd3q97jbzj441l";
+  };
+
+  nativeBuildInputs = [ pkgconfig bison flex autoreconfHook txt2man which ];
+  buildInputs = [ glib readline ];
+
+  preConfigure = ''
+    sed -e 's@static \(GHashTable [*]mdb_backends;\)@\1@' -i src/libmdb/backend.c
+  '';
+
+  meta = with stdenv.lib; {
+    description = ".mdb (MS Access) format tools";
+    homepage = http://mdbtools.sourceforge.net;
+    platforms = platforms.unix;
+    license = with licenses; [ gpl2 lgpl2 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/me_cleaner/default.nix b/nixpkgs/pkgs/tools/misc/me_cleaner/default.nix
new file mode 100644
index 000000000000..d224ad1dcc5d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/me_cleaner/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, buildPythonPackage, fetchFromGitHub }:
+
+buildPythonPackage rec {
+  pname = "me_cleaner";
+  version = "1.2";
+
+  src = fetchFromGitHub {
+    owner = "corna";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1bdj2clm13ir441vn7sv860xsc5gh71ja5lc2wn0gggnff0adxj4";
+  };
+
+  meta = with stdenv.lib; {
+    inherit (src.meta) homepage;
+    description = "Tool for partial deblobbing of Intel ME/TXE firmware images";
+    longDescription = ''
+      me_cleaner is a Python script able to modify an Intel ME firmware image
+      with the final purpose of reducing its ability to interact with the system.
+    '';
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ gnidorah ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/megacli/default.nix b/nixpkgs/pkgs/tools/misc/megacli/default.nix
new file mode 100644
index 000000000000..e202cc7ae469
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/megacli/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, rpmextract, ncurses5, patchelf, fetchurl, unzip }:
+
+stdenv.mkDerivation rec {
+  pname = "megacli";
+  version = "8.07.14";
+
+  src = fetchurl {
+    url = "https://docs.broadcom.com/docs-and-downloads/raid-controllers/raid-controllers-common-files/${builtins.replaceStrings ["."] ["-"] version}_MegaCLI.zip";
+    sha256 = "1sdn58fbmd3fj4nzbajq3gcyw71ilgdh45r5p4sa6xmb7np55cfr";
+  };
+
+  buildInputs = [rpmextract ncurses5 unzip];
+  libPath =
+    stdenv.lib.makeLibraryPath
+       [ stdenv.cc.cc stdenv.cc.libc ncurses5 ];
+
+  buildCommand = ''
+    unzip ${src}
+    rpmextract Linux/MegaCli-${version}-1.noarch.rpm
+
+    mkdir -p $out/{bin,share/MegaRAID/MegaCli}
+    cp -r opt $out
+    cp ${version}_MegaCLI.txt $out/share/MegaRAID/MegaCli
+
+    ${patchelf}/bin/patchelf \
+      --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      --set-rpath ${libPath}:${stdenv.cc.cc.lib}/lib64:${stdenv.cc.cc.lib}/lib \
+      $out/opt/MegaRAID/MegaCli/MegaCli64
+
+    ln -s $out/opt/MegaRAID/MegaCli/MegaCli64 $out/bin/MegaCli64
+    eval fixupPhase
+  '';
+
+  meta = {
+    description = "CLI program for LSI MegaRAID cards, which also works with some Dell PERC RAID cards";
+    license = stdenv.lib.licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/memtest86+/default.nix b/nixpkgs/pkgs/tools/misc/memtest86+/default.nix
new file mode 100644
index 000000000000..57cf5bb97e2e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/memtest86+/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchgit }:
+
+stdenv.mkDerivation {
+  pname = "memtest86+";
+  version = "5.01-coreboot-002";
+
+  src = fetchgit {
+    url = "https://review.coreboot.org/memtest86plus.git";
+    rev = "v002";
+    sha256 = "0cwx20yja24bfknqh1rjb5rl2c0kwnppzsisg1dibbak0l8mxchk";
+  };
+
+  NIX_CFLAGS_COMPILE = "-I. -std=gnu90";
+
+  hardeningDisable = [ "all" ];
+
+  buildFlags = [ "memtest.bin" ];
+
+  doCheck = false; # fails
+
+  installPhase = ''
+    install -Dm0444 -t $out/ memtest.bin
+  '';
+
+  meta = {
+    homepage = "http://www.memtest.org/";
+    description = "A tool to detect memory errors";
+    license = stdenv.lib.licenses.gpl2;
+    platforms = [ "x86_64-linux" "i686-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/memtest86-efi/default.nix b/nixpkgs/pkgs/tools/misc/memtest86-efi/default.nix
new file mode 100644
index 000000000000..71409b1c3a8b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/memtest86-efi/default.nix
@@ -0,0 +1,57 @@
+{ fetchzip, lib, p7zip, stdenv }:
+
+stdenv.mkDerivation rec {
+  pname = "memtest86-efi";
+  version = "8.2";
+
+  src = fetchzip {
+    # TODO: The latest version of memtest86 is actually 8.2, but the
+    # company developing memtest86 has stopped providing a versioned download
+    # link for the latest version:
+    #
+    # https://www.passmark.com/forum/memtest86/44494-version-8-1-distribution-file-is-not-versioned?p=44505#post44505
+    #
+    # However, versioned links for the previous version are available, so that
+    # is what is being used.
+    #
+    # It does look like redistribution is okay, so if we had somewhere to host
+    # binaries that we make sure to version, then we could probably keep up
+    # with the latest versions released by the company.
+    url = "https://www.memtest86.com/downloads/memtest86-${version}-usb.zip";
+    sha256 = "1x1wjssr4nnbnfan0pi7ni2dfwnm3288kq584hkfqcyza8xdx03i";
+    stripRoot = false;
+  };
+
+  nativeBuildInputs = [ p7zip ];
+
+  installPhase = ''
+    mkdir -p $out
+
+    # memtest86 is distributed as a bootable USB image.  It contains the actual
+    # memtest86 EFI app.
+    #
+    # The following command uses p7zip to extract the actual EFI app from the
+    # usb image so that it can be installed directly on the hard drive.
+    7z x -o$TEMP/temp-efi-dirs $src/memtest86-usb.img
+    7z x -o$TEMP/memtest86-files $TEMP/temp-efi-dirs/EFI\ System\ Partition.img
+    cp -r $TEMP/memtest86-files/EFI/BOOT/* $out/
+  '';
+
+  meta = with lib; {
+    homepage = "http://memtest86.com/";
+    downloadPage = "https://www.memtest86.com/download.htm";
+    description = "A tool to detect memory errors, to be run from a bootloader";
+    longDescription = ''
+      A UEFI app that is able to detect errors in RAM.  It can be run from a
+      bootloader.  Released under a proprietary freeware license.
+    '';
+    # The Memtest86 License for the Free Edition states,
+    # "MemTest86 Free Edition is free to download with no restrictions on usage".
+    # However the source code for Memtest86 does not appear to be available.
+    #
+    # https://www.memtest86.com/license.htm
+    license = licenses.unfreeRedistributable;
+    maintainers = with maintainers; [ cdepillabout ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mht2htm/default.nix b/nixpkgs/pkgs/tools/misc/mht2htm/default.nix
new file mode 100644
index 000000000000..e382db0b92c3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mht2htm/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, fetchurl, unzip, fpc, lazarus }:
+
+let
+  date = "07.apr.2016";
+
+in stdenv.mkDerivation rec {
+  pname = "mht2mht";
+  version = "1.8.1.35";
+
+  src = fetchurl {
+    # there is a disconnect between the directory name date and file name date
+    # you should verify if that is still then case when the next version is released
+    url    = "mirror://sourceforge/mht2htm/mht2htm/1.8.1%20%2805.apr.2016%29/mht2htmcl-${version}_${date}.source.zip";
+    sha256 = "16r6zkihp84yqllp2hyaf0nvymdn9ji3g30mc5scfwycdfanja6f";
+  };
+
+  sourceRoot = ".";
+
+  buildInputs = [ fpc lazarus ];
+
+  nativeBuildInputs = [ unzip ];
+
+  buildPhase = ''
+    runHook preBuild
+    lazbuild --lazarusdir=${lazarus}/share/lazarus mht2htmcl.lpi
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 -t $out/bin               mht2htmcl
+    install -Dm644 -t $out/share/doc/mht2htm CHANGELOG COPYING README
+    runHook postInstall
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Convert .mht files to .html";
+    homepage    = http://pgm.bpalanka.com/mht2htm.html;
+    license     = licenses.gpl3;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms   = platforms.all;
+    broken = true; # 2018-04-11
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mimeo/default.nix b/nixpkgs/pkgs/tools/misc/mimeo/default.nix
new file mode 100644
index 000000000000..ea596a942137
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mimeo/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl, desktop-file-utils, file, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  name = "mimeo-${version}";
+  version = "2019.7";
+
+  src = fetchurl {
+    url = "https://xyne.archlinux.ca/projects/mimeo/src/${name}.tar.xz";
+    sha256 = "0nzn7qvmpbb17d6q16llnhz1qdmyg718q59ic4gw2rq23cd6q47r";
+  };
+
+  buildInputs = [ file desktop-file-utils ];
+
+  propagatedBuildInputs = [ python3Packages.pyxdg ];
+
+  preConfigure = ''
+    substituteInPlace Mimeo.py \
+      --replace "EXE_UPDATE_DESKTOP_DATABASE = 'update-desktop-database'" \
+                "EXE_UPDATE_DESKTOP_DATABASE = '${desktop-file-utils}/bin/update-desktop-database'" \
+      --replace "EXE_FILE = 'file'" \
+                "EXE_FILE = '${file}/bin/file'"
+  '';
+
+  installPhase = "install -Dm755 Mimeo.py $out/bin/mimeo";
+
+  meta = with stdenv.lib; {
+    description = "Open files by MIME-type or file name using regular expressions";
+    homepage = http://xyne.archlinux.ca/projects/mimeo/;
+    license = [ licenses.gpl2 ];
+    maintainers = [ maintainers.rycee ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/minicom/default.nix b/nixpkgs/pkgs/tools/misc/minicom/default.nix
new file mode 100644
index 000000000000..168e1dac3a32
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/minicom/default.nix
@@ -0,0 +1,53 @@
+{ stdenv, fetchgit, autoreconfHook, makeWrapper, pkgconfig
+, lrzsz, ncurses, libiconv }:
+
+stdenv.mkDerivation {
+  pname = "minicom";
+  version = "2.7.1";
+
+  # The repository isn't tagged properly, so we need to use commit refs
+  src = fetchgit {
+    url    = "https://salsa.debian.org/minicom-team/minicom.git";
+    rev    = "6ea8033b6864aa35d14fb8b87e104e4f783635ce";
+    sha256 = "0j95727xni4r122dalp09963gvc1nqa18l1d4wzz8746kw5s2rrb";
+  };
+
+  buildInputs = [ ncurses ] ++ stdenv.lib.optional stdenv.isDarwin libiconv;
+
+  nativeBuildInputs = [ autoreconfHook makeWrapper pkgconfig ];
+
+  enableParallelBuilding = true;
+
+  configureFlags = [
+    "--sysconfdir=/etc"
+    "--enable-lock-dir=/var/lock"
+  ];
+
+  patches = [ ./xminicom_terminal_paths.patch ];
+
+  preConfigure = ''
+    # Have `configure' assume that the lock directory exists.
+    substituteInPlace configure \
+      --replace 'test -d $UUCPLOCK' true
+  '';
+
+  postInstall = ''
+    for f in $out/bin/*minicom ; do
+      wrapProgram $f \
+        --prefix PATH : ${stdenv.lib.makeBinPath [ lrzsz ]}:$out/bin
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Modem control and terminal emulation program";
+    homepage = https://salsa.debian.org/minicom-team/minicom;
+    license = licenses.gpl2;
+    longDescription = ''
+      Minicom is a menu driven communications program. It emulates ANSI
+      and VT102 terminals. It has a dialing directory and auto zmodem
+      download.
+    '';
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/minicom/xminicom_terminal_paths.patch b/nixpkgs/pkgs/tools/misc/minicom/xminicom_terminal_paths.patch
new file mode 100644
index 000000000000..18535253d9f5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/minicom/xminicom_terminal_paths.patch
@@ -0,0 +1,79 @@
+diff --git a/src/xminicom b/src/xminicom
+index a59aa08..cef153b 100755
+--- a/src/xminicom
++++ b/src/xminicom
+@@ -7,57 +7,39 @@
+ #
+ # version	$Id: xminicom,v 1.4 2008-06-09 20:48:35 al-guest Exp $
+
+-findcmd()
+-{
+-  IFS=:
+-  for i in $PATH
+-  do
+-	if [ -x $i\/$1 ]
+-	then
+-		result=$i\/$1
+-		IFS=
+-		return 0
+-	fi
+-  done
+-  result=
+-  IFS=
+-  return 1
++findcmd() {
++  result=$(command -v $1)
+ }
+
+-if findcmd x-terminal-emulator
+-then
++if findcmd x-terminal-emulator ; then
+   exec $result -T minicom -e "if ! minicom -m -c on $*; then echo Press ENTER to continue...; read; fi"
+   exit 1
+ fi
+
+-if findcmd color_xterm
+-then
++if findcmd konsole ; then
++  exec $result -T minicom -geometry 80x25 -e minicom -m -c on "$@"
++  exit 1
++fi
++
++if findcmd gnome-terminal ; then
++  exec $result -T minicom -geometry 80x25 -e "if ! minicom -m -c on $*; then echo Press ENTER to continue...; read; fi"
++  exit 1
++fi
++
++if findcmd color_xterm ; then
+   exec $result -T minicom -bg black -fg grey -n minicom -geometry 80x25 -e "if ! minicom -m -c on $*; then echo Press ENTER to continue...; read; fi"
+   exit 1
+ fi
+
+-if findcmd rxvt
+-then
++if findcmd rxvt ; then
+   exec $result -bg black -fg grey -n minicom -T minicom -sl 0 -geometry 80x25 -e "if ! minicom -m -c on $*; then echo Press ENTER to continue...; read; fi"
+   exit 1
+ fi
+
+-if findcmd kterm
+-then
++if findcmd xterm ; then
+   exec $result -T minicom -n minicom -geometry 80x25 -e "if ! minicom -m -c on $*; then echo Press ENTER to continue...; read; fi"
+   exit 1
+ fi
+
+-if findcmd xterm
+-then
+-  if [ -f /etc/debian_version ]
+-  then
+-  exec $result -T minicom -n minicom -bg black -fg grey -geometry 80x25 -e "if ! minicom -m -c on $*; then echo Press ENTER to continue...; read; fi"
+-  else
+-  exec $result -T minicom -n minicom -geometry 80x25 -e "if ! minicom -m -c on $*; then echo Press ENTER to continue...; read; fi"
+-  fi
+-  exit 1
+-fi
+-
+-echo "xminicom: rxvt, color_xterm or xterm NOT found!" 1>&2
++echo "xminicom: konsole, gnome-terminal, rxvt, color_xterm or xterm NOT found!" 1>&2
+ exit 1
diff --git a/nixpkgs/pkgs/tools/misc/miniserve/default.nix b/nixpkgs/pkgs/tools/misc/miniserve/default.nix
new file mode 100644
index 000000000000..09640b30be90
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/miniserve/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, rustPlatform, fetchFromGitHub, cmake, pkgconfig, zlib, openssl }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "miniserve";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner  = "svenstaro";
+    repo   = "miniserve";
+    rev    = "v${version}";
+    sha256 = "06cxkkf3sf84prba65dymr1hg7mwizmsax0dlljh0lcmvlcpzi08";
+  };
+
+  cargoSha256 = "046xxxqcf1sdsi9dlilsn0nk36gyca20ck1a70ihj1k9kl7yj8sn";
+
+  RUSTC_BOOTSTRAP = 1;
+
+  nativeBuildInputs = [ cmake pkgconfig zlib ];
+  buildInputs = [ openssl ];
+
+  meta = with stdenv.lib; {
+    description = "For when you really just want to serve some files over HTTP right now!";
+    homepage    = https://github.com/svenstaro/miniserve;
+    license     = with licenses; [ mit ];
+    maintainers = with maintainers; [ nequissimus ];
+    platforms   = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ministat/default.nix b/nixpkgs/pkgs/tools/misc/ministat/default.nix
new file mode 100644
index 000000000000..7b8b8a82b727
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ministat/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchgit }:
+
+stdenv.mkDerivation rec {
+  pname = "ministat";
+  version = "20150715-1";
+
+  src = fetchgit {
+    url = "https://git.decadent.org.uk/git/ministat.git";
+    rev = "refs/tags/debian/${version}";
+    sha256 = "1p4g0yqgsy4hiqhr8gqp8d38zxzrss5qz70s0bw3i2pg4w668k6f";
+  };
+
+  postPatch = ''
+    patch -p1 < debian/patches/fix-ctype-usage.patch
+    patch -p1 < debian/patches/not-bsd
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man/man1
+    cp ministat $out/bin
+    cp ministat.1 $out/share/man/man1/
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Simple tool for statistical comparison of data sets";
+    homepage = https://git.decadent.org.uk/gitweb/?p=ministat.git;
+    license = licenses.beerware;
+    maintainers = [ maintainers.dezgeg ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mktorrent/default.nix b/nixpkgs/pkgs/tools/misc/mktorrent/default.nix
new file mode 100644
index 000000000000..c88f12c74d1a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mktorrent/default.nix
@@ -0,0 +1,28 @@
+{stdenv, fetchFromGitHub, openssl}:
+
+stdenv.mkDerivation rec {
+  pname = "mktorrent";
+  version = "1.1";
+
+  src = fetchFromGitHub {
+    owner = "Rudde";
+    repo = "mktorrent";
+    rev = "v${version}";
+    sha256 = "17pdc5mandl739f8q26n5is8ga56s83aqcrwhlnnplbxwx2inidr";
+  };
+
+  makeFlags = [ "USE_PTHREADS=1" "USE_OPENSSL=1" "USE_LONG_OPTIONS=1" ]
+    ++ stdenv.lib.optional stdenv.isi686 "USE_LARGE_FILES=1"
+    ++ stdenv.lib.optional stdenv.isLinux "CFLAGS=-lgcc_s";
+
+  installFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  buildInputs = [ openssl ];
+
+  meta = {
+    homepage = http://mktorrent.sourceforge.net/;
+    license = stdenv.lib.licenses.gpl2Plus;
+    description = "Command line utility to create BitTorrent metainfo files";
+    maintainers = with stdenv.lib.maintainers; [Profpatsch];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mlocate/default.nix b/nixpkgs/pkgs/tools/misc/mlocate/default.nix
new file mode 100644
index 000000000000..f8fb253af471
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mlocate/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, config }:
+
+let
+  dbfile = stdenv.lib.attrByPath [ "locate" "dbfile" ] "/var/cache/locatedb" config;
+in stdenv.mkDerivation rec {
+  pname = "mlocate";
+  version = "0.26";
+
+  src = fetchurl {
+    url = "https://releases.pagure.org/mlocate/${pname}-${version}.tar.xz";
+    sha256 = "0gi6y52gkakhhlnzy0p6izc36nqhyfx5830qirhvk3qrzrwxyqrh";
+  };
+
+  buildInputs = [ ];
+  makeFlags = [ "dbfile=${dbfile}" ];
+
+  meta = with stdenv.lib; {
+    description = "Merging locate is an utility to index and quickly search for files";
+    homepage = https://pagure.io/mlocate;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mmake/default.nix b/nixpkgs/pkgs/tools/misc/mmake/default.nix
new file mode 100644
index 000000000000..a791cbe5d482
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mmake/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "mmake";
+  version = "1.2.0";
+
+  goPackagePath = "github.com/tj/mmake";
+
+  src = fetchFromGitHub {
+    owner = "tj";
+    repo = "mmake";
+    rev = "v${version}";
+    sha256 = "1pyqgk04v0f7a28cwq9c40bd2cgrkrv4wqcijdzpgn4bqhrqab4f";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/tj/mmake;
+    description = "A small program  which wraps make to provide additional functionality";
+    longDescription = ''
+      Mmake is a small program  which wraps make to provide additional
+      functionality,  such   as  user-friendly  help   output,  remote
+      includes,  and   eventually  more.   It  otherwise  acts   as  a
+      pass-through to standard make.
+      '';
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = [ maintainers.gabesoft ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mmake/deps.nix b/nixpkgs/pkgs/tools/misc/mmake/deps.nix
new file mode 100644
index 000000000000..0721ad0af608
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mmake/deps.nix
@@ -0,0 +1,30 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "github.com/apex/log";
+    fetch = {
+      type = "git";
+      url = "https://github.com/apex/log";
+      rev = "0296d6eb16bb28f8a0c55668affcf4876dc269be";
+      sha256 = "067px84y73h60bai1yy6xqf2l05gq6zsp64fn58d4fwzk04aa16v";
+    };
+  }
+  {
+    goPackagePath = "github.com/pkg/errors";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pkg/errors";
+      rev = "c605e284fe17294bda444b34710735b29d1a9d90";
+      sha256 = "1izjk4msnc6wn1mclg0ypa6i31zfwb1r3032k8q4jfbd57hp0bz6";
+    };
+  }
+  {
+    goPackagePath = "github.com/segmentio/go-env";
+    fetch = {
+      type = "git";
+      url = "https://github.com/segmentio/go-env";
+      rev = "ea0600a7760cd15ccca9057be4a87d68e95ee876";
+      sha256 = "0rgclbi0na5042cirr52lriwyb5a2rdpqx211zfwyrrvc3zq4lwq";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/misc/mmv/default.nix b/nixpkgs/pkgs/tools/misc/mmv/default.nix
new file mode 100644
index 000000000000..6129f15c734f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mmv/default.nix
@@ -0,0 +1,49 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "mmv";
+  version = "1.01b";
+
+  src = fetchurl {
+    url = "mirror://debian/pool/main/m/mmv/mmv_${version}.orig.tar.gz";
+    sha256 = "0399c027ea1e51fd607266c1e33573866d4db89f64a74be8b4a1d2d1ff1fdeef";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  patches = [
+    # Use Debian patched version, as upstream is no longer maintained and it
+    # contains a _lot_ of fixes.
+    (fetchurl {
+      url = "mirror://debian/pool/main/m/mmv/mmv_${version}-15.diff.gz";
+      sha256 = "9ad3e3d47510f816b4a18bae04ea75913588eec92248182f85dd09bc5ad2df13";
+    })
+  ];
+
+  postPatch = ''
+    sed -i \
+      -e 's/^\s*LDFLAGS\s*=\s*-s\s*-N/LDFLAGS = -s/' \
+      -e "s|/usr/bin|$out/bin|" \
+      -e "s|/usr/man|$out/share/man|" \
+      Makefile
+  '';
+
+  preInstall = ''
+    mkdir -p "$out/bin" "$out/share/man/man1"
+  '';
+
+  postInstall = ''
+    for variant in mcp mad mln
+    do
+      ln -s mmv "$out/bin/$variant"
+      ln -s mmv.1 "$out/share/man/man1/$variant.1"
+    done
+  '';
+
+  meta = {
+    homepage = http://linux.maruhn.com/sec/mmv.html;
+    description = "Utility for wildcard renaming, copying, etc";
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mongodb-compass/default.nix b/nixpkgs/pkgs/tools/misc/mongodb-compass/default.nix
new file mode 100644
index 000000000000..95c87cb35fc6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mongodb-compass/default.nix
@@ -0,0 +1,88 @@
+{ stdenv, fetchurl, dpkg
+, alsaLib, atk, cairo, cups, curl, dbus, expat, fontconfig, freetype, glib
+, gnome2, gnome3, libnotify, libxcb, nspr, nss, systemd, xorg, wrapGAppsHook }:
+
+let
+
+  version = "1.17.0";
+
+  rpath = stdenv.lib.makeLibraryPath [
+    alsaLib
+    atk
+    cairo
+    cups
+    curl
+    dbus
+    expat
+    fontconfig
+    freetype
+    glib
+    gnome2.GConf
+    gnome2.gdk_pixbuf
+    gnome3.gtk
+    gnome2.pango
+    libnotify
+    libxcb
+    nspr
+    nss
+    stdenv.cc.cc
+    systemd
+
+    xorg.libxkbfile
+    xorg.libX11
+    xorg.libXcomposite
+    xorg.libXcursor
+    xorg.libXdamage
+    xorg.libXext
+    xorg.libXfixes
+    xorg.libXi
+    xorg.libXrandr
+    xorg.libXrender
+    xorg.libXtst
+    xorg.libXScrnSaver
+  ] + ":${stdenv.cc.cc.lib}/lib64";
+
+  src =
+    if stdenv.hostPlatform.system == "x86_64-linux" then
+      fetchurl {
+        url = "https://downloads.mongodb.com/compass/mongodb-compass_${version}_amd64.deb";
+        sha256 = "085xq1ik8kyza1kq9kn0pf98zk6g2qa21clxhn48rgnqk20aninv";
+      }
+    else
+      throw "MongoDB compass is not supported on ${stdenv.hostPlatform.system}";
+
+in stdenv.mkDerivation {
+  pname = "mongodb-compass";
+  inherit version;
+
+  inherit src;
+
+  buildInputs = [ dpkg wrapGAppsHook gnome3.gtk ];
+  dontUnpack = true;
+
+  buildCommand = ''
+    IFS=$'\n'
+    dpkg -x $src $out
+    cp -av $out/usr/* $out
+    rm -rf $out/share/lintian
+    #The node_modules are bringing in non-linux files/dependencies
+    find $out -name "*.app" -exec rm -rf {} \; || true
+    find $out -name "*.dll" -delete
+    find $out -name "*.exe" -delete
+    # Otherwise it looks "suspicious"
+    chmod -R g-w $out
+    for file in `find $out -type f -perm /0111 -o -name \*.so\*`; do
+      echo "Manipulating file: $file"
+      patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" "$file" || true
+      patchelf --set-rpath ${rpath}:$out/share/mongodb-compass "$file" || true
+    done
+    wrapGAppsHook $out/bin/mongodb-compass
+  '';
+
+  meta = with stdenv.lib; {
+    description = "The GUI for MongoDB";
+    homepage = https://www.mongodb.com/products/compass;
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mongodb-tools/default.nix b/nixpkgs/pkgs/tools/misc/mongodb-tools/default.nix
new file mode 100644
index 000000000000..dbccbf9b2f64
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mongodb-tools/default.nix
@@ -0,0 +1,59 @@
+{ stdenv
+, lib
+, buildGoPackage
+, fetchFromGitHub
+, openssl
+, pkgconfig
+, libpcap
+}:
+
+let
+  tools = [
+    "bsondump"
+    "mongoimport"
+    "mongoexport"
+    "mongodump"
+    "mongorestore"
+    "mongostat"
+    "mongofiles"
+    "mongotop"
+    "mongoreplay"
+  ];
+  version = "4.2.0";
+
+in buildGoPackage {
+  pname = "mongo-tools";
+  inherit version;
+
+  goPackagePath = "github.com/mongodb/mongo-tools";
+  subPackages = tools;
+
+  src = fetchFromGitHub {
+    rev = "r${version}";
+    owner = "mongodb";
+    repo = "mongo-tools";
+    sha256 = "0mjwvx0cxvb6zam6jyr3753xjnwcygxcjzqhhlsq0b3xnwws9yh7";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ openssl libpcap ];
+
+  # Mongodb incorrectly names all of their binaries main
+  # Let's work around this with our own installer
+  buildPhase = ''
+    # move vendored codes so nixpkgs go builder could find it
+    runHook preBuild
+
+    ${stdenv.lib.concatMapStrings (t: ''
+      go build -o "$bin/bin/${t}" -tags ssl -ldflags "-s -w" $goPackagePath/${t}/main
+    '') tools}
+
+    runHook postBuild
+  '';
+
+  meta = {
+    homepage = https://github.com/mongodb/mongo-tools;
+    description = "Tools for the MongoDB";
+    license = lib.licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/moreutils/default.nix b/nixpkgs/pkgs/tools/misc/moreutils/default.nix
new file mode 100644
index 000000000000..44f791e5b8aa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/moreutils/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchgit, libxml2, libxslt, docbook-xsl, docbook_xml_dtd_44, perlPackages, makeWrapper, darwin }:
+
+with stdenv.lib;
+stdenv.mkDerivation rec {
+  pname = "moreutils";
+  version = "0.63";
+
+  src = fetchgit {
+    url = "git://git.joeyh.name/moreutils";
+    rev = "refs/tags/${version}";
+    sha256 = "17sszmcdck4w01hgcq7vd25p2iw3yzvjwx1yf20jg85gzs1dplrd";
+  };
+
+  preBuild = ''
+    substituteInPlace Makefile --replace /usr/share/xml/docbook/stylesheet/docbook-xsl ${docbook-xsl}/xml/xsl/docbook
+  '';
+
+  buildInputs = [ libxml2 libxslt docbook-xsl docbook_xml_dtd_44 makeWrapper ]
+    ++ optional stdenv.isDarwin darwin.cctools;
+
+  propagatedBuildInputs = with perlPackages; [ perl IPCRun TimeDate TimeDuration ];
+
+  buildFlags = [ "CC=cc" ];
+  installFlags = [ "PREFIX=$(out)" ];
+
+  postInstall = ''
+    wrapProgram $out/bin/chronic --prefix PERL5LIB : $PERL5LIB
+    wrapProgram $out/bin/ts --prefix PERL5LIB : $PERL5LIB
+  '';
+
+  meta = {
+    description = "Growing collection of the unix tools that nobody thought to write long ago when unix was young";
+    homepage = https://joeyh.name/code/moreutils/;
+    maintainers = with maintainers; [ koral pSub ];
+    platforms = platforms.all;
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/most/default.nix b/nixpkgs/pkgs/tools/misc/most/default.nix
new file mode 100644
index 000000000000..7adac5ee2ee6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/most/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchurl, slang, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "most";
+  version = "5.1.0";
+
+  src = fetchurl {
+    url = "https://www.jedsoft.org/releases/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "008537ns659pw2aag15imwjrxj73j26aqq90h285is6kz8gmv06v";
+  };
+
+  outputs = [ "out" "doc" ];
+
+  makeFlags = [
+    "DOC_DIR=${placeholder "doc"}/share/doc/most"
+  ];
+
+  preConfigure = ''
+    sed -i -e "s|-ltermcap|-lncurses|" configure
+    sed -i autoconf/Makefile.in src/Makefile.in \
+      -e "s|/bin/cp|cp|"  \
+      -e "s|/bin/rm|rm|"
+  '';
+
+  configureFlags = [ "--with-slang=${slang.dev}" ];
+
+  buildInputs = [ slang ncurses ];
+
+  meta = with stdenv.lib; {
+    description = "A terminal pager similar to 'more' and 'less'";
+    longDescription = ''
+      MOST is a powerful paging program for Unix, VMS, MSDOS, and win32
+      systems. Unlike other well-known paging programs most supports multiple
+      windows and can scroll left and right. Why settle for less?
+    '';
+    homepage = "https://www.jedsoft.org/most/index.html";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mpdscribble/default.nix b/nixpkgs/pkgs/tools/misc/mpdscribble/default.nix
new file mode 100644
index 000000000000..df84084fc9c1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mpdscribble/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchurl, mpd_clientlib, curl, glib, pkgconfig }:
+
+stdenv.mkDerivation rec {
+  pname = "mpdscribble";
+  version = "0.22";
+
+  src = fetchurl {
+    url =
+    "https://www.musicpd.org/download/mpdscribble/${version}/mpdscribble-${version}.tar.bz2";
+    sha256 = "0hgb7xh3w455m00lpldwkyrc5spjn3q1pl2ry3kf7w3hiigjpphw";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ mpd_clientlib curl glib ];
+
+  meta = with stdenv.lib; {
+    description = "A Music Player Daemon (MPD) client which submits information about tracks beeing played to a scrobbler (e.g. last.fm)";
+    homepage = https://www.musicpd.org/clients/mpdscribble/;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.matthiasbeyer ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mprime/default.nix b/nixpkgs/pkgs/tools/misc/mprime/default.nix
new file mode 100644
index 000000000000..363e90ab5f23
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mprime/default.nix
@@ -0,0 +1,57 @@
+{ stdenv, lib, fetchurl, unzip, curl, hwloc, gmp }:
+
+let
+  srcDir =
+    if stdenv.hostPlatform.system == "x86_64-linux" then "linux64"
+    else if stdenv.hostPlatform.system == "i686-linux" then "linux"
+    else if stdenv.hostPlatform.system == "x86_64-darwin" then "macosx64"
+    else throwSystem;
+  throwSystem = throw "Unsupported system: ${stdenv.hostPlatform.system}";
+  gwnum =
+    if stdenv.hostPlatform.system == "x86_64-linux" then "make64"
+    else if stdenv.hostPlatform.system == "i686-linux" then "makefile"
+    else if stdenv.hostPlatform.system == "x86_64-darwin" then "makemac"
+    else throwSystem;
+in
+
+stdenv.mkDerivation rec {
+  pname = "mprime";
+  version = "29.4b7";
+
+  src = fetchurl {
+    url = "https://www.mersenne.org/ftp_root/gimps/p95v${lib.replaceStrings ["."] [""] version}.source.zip";
+    sha256 = "0idaqm46m4yis7vl014scx57lpccvjbnyy79gmj8caxghyajws0m";
+  };
+
+  unpackCmd = "unzip -d src -q $curSrc || true";
+
+  nativeBuildInputs = [ unzip ];
+  buildInputs = [ curl hwloc gmp ];
+
+  patches = [ ./makefile.patch ];
+
+  buildPhase = ''
+    make -C gwnum -f ${gwnum}
+    make -C ${srcDir}
+  '';
+
+  installPhase = ''
+    install -D ${srcDir}/mprime $out/bin/mprime
+  '';
+  
+  meta = {
+    description = "Mersenne prime search / System stability tester";
+    longDescription = ''
+      MPrime is the Linux command-line interface version of Prime95, to be run
+      in a text terminal or in a terminal emulator window as a remote shell
+      client. It is identical to Prime95 in functionality, except it lacks a
+      graphical user interface.
+    '';
+    homepage = "https://www.mersenne.org/";
+    # Unfree, because of a license requirement to share prize money if you find
+    # a suitable prime. http://www.mersenne.org/legal/#EULA
+    license = stdenv.lib.licenses.unfree;
+    # Untested on linux-32 and osx. Works in theory.
+    platforms = ["i686-linux" "x86_64-linux" "x86_64-darwin"];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mprime/makefile.patch b/nixpkgs/pkgs/tools/misc/mprime/makefile.patch
new file mode 100644
index 000000000000..6ed9cf69384d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mprime/makefile.patch
@@ -0,0 +1,41 @@
+diff -dur src.old/linux/makefile src.new/linux/makefile
+--- src.old/linux/makefile	2018-01-04 20:49:00.000000000 +0300
++++ src.new/linux/makefile	2018-02-15 12:32:02.913011604 +0300
+@@ -28,8 +28,8 @@
+ CPP = g++
+ CPPFLAGS = -I.. -I../gwnum -O2 -march=i486 -malign-double
+ 
+-LFLAGS = -Wl,-M -Wl,-L/usr/local/lib
+-LIBS = ../gwnum/gwnum.a ../gwnum/gwnum.ld -lm -lpthread -Wl,-Bstatic -lhwloc -Wl,-Bstatic -lcurl -Wl,-Bdynamic -lrt -lstdc++ -ldl -lgmp
++LFLAGS =
++LIBS = ../gwnum/gwnum.a ../gwnum/gwnum.ld -lm -lpthread -lhwloc -lcurl -lrt -lstdc++ -ldl -lgmp
+ 
+ FACTOROBJ = factor32.o
+ LINUXOBJS = prime.o menu.o
+diff -dur src.old/linux64/makefile src.new/linux64/makefile
+--- src.old/linux64/makefile	2018-01-04 20:49:00.000000000 +0300
++++ src.new/linux64/makefile	2018-02-15 12:32:28.836286995 +0300
+@@ -26,9 +26,9 @@
+ CPP = g++
+ CPPFLAGS = -I.. -I../gwnum -DX86_64 -O2
+ 
+-LFLAGS = -Wl,-M -Wl,-L/usr/local/lib
++LFLAGS =
+ #LIBS = ../gwnum/gwnum.a ../gwnum/gwnum.ld -lm -lpthread -Wl,-Bstatic -lhwloc -Wl,-Bstatic -lcurl -Wl,-Bdynamic -lrt -lstdc++ -lz -lxml2 -ldl -lgmp
+-LIBS = ../gwnum/gwnum.a ../gwnum/gwnum.ld -lm -lpthread -Wl,-Bstatic -lhwloc -Wl,-Bstatic -lcurl -Wl,-Bdynamic -lrt -lstdc++ -ldl -lgmp
++LIBS = ../gwnum/gwnum.a ../gwnum/gwnum.ld -lm -lpthread -lhwloc -lcurl -lrt -lstdc++ -ldl -lgmp
+ 
+ FACTOROBJ = factor64.o
+ LINUXOBJS = prime.o menu.o
+diff -dur src.old/macosx64/makefile src.new/macosx64/makefile
+--- src.old/macosx64/makefile	2018-01-04 20:49:02.000000000 +0300
++++ src.new/macosx64/makefile	2018-02-15 12:33:32.401902535 +0300
+@@ -12,7 +12,7 @@
+ CPP = g++
+ CPPFLAGS = -I.. -I../gwnum -I../linux -O2 -DX86_64 -DCOMMAND_LINE_MPRIME -m64
+ 
+-LFLAGS = -m64 -Wl,-no_pie -L/usr/local/lib
++LFLAGS = -m64 -Wl,-no_pie
+ LIBS   = ../gwnum/amd64/release/gwnum.a -lm -lpthread -lhwloc -lcurl -framework IOKit -framework CoreFoundation -lstdc++ -lgmp
+ 
+ FACTOROBJ = ../prime95/macosx64/factor64.o
diff --git a/nixpkgs/pkgs/tools/misc/mrtg/default.nix b/nixpkgs/pkgs/tools/misc/mrtg/default.nix
new file mode 100644
index 000000000000..922592a256d0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mrtg/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, perl, gd, rrdtool }:
+
+stdenv.mkDerivation rec {
+
+  version = "2.17.7";
+  pname = "mrtg";
+
+  src = fetchurl {
+    url = "https://oss.oetiker.ch/mrtg/pub/${pname}-${version}.tar.gz";
+    sha256 = "1hrjqfi290i936nblwpfzjn6v8d8p69frcrvml206nxiiwkcp54v";
+  };
+
+  buildInputs = [
+    perl gd rrdtool
+  ];
+
+  meta = {
+    description = "The Multi Router Traffic Grapher";
+    homepage = https://oss.oetiker.ch/mrtg/;
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = [ stdenv.lib.maintainers.robberer ];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ms-sys/default.nix b/nixpkgs/pkgs/tools/misc/ms-sys/default.nix
new file mode 100644
index 000000000000..0a862834dfb7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ms-sys/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, gettext }:
+
+stdenv.mkDerivation rec {
+  pname = "ms-sys";
+  version = "2.6.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/ms-sys/${pname}-${version}.tar.gz";
+    sha256 = "06xqpm2s9cg8fj7a1822wmh3p4arii0sifssazg1gr6i7xg7kbjz";
+  };
+  # TODO: Remove with next release, see https://sourceforge.net/p/ms-sys/patches/8/
+  patches = [ ./manpages-without-build-timestamps.patch ];
+
+  nativeBuildInputs = [ gettext ];
+
+  enableParallelBuilding = true;
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with stdenv.lib; {
+    description = "A program for writing Microsoft-compatible boot records";
+    homepage = http://ms-sys.sourceforge.net/;
+    license = licenses.gpl2Plus;
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ms-sys/manpages-without-build-timestamps.patch b/nixpkgs/pkgs/tools/misc/ms-sys/manpages-without-build-timestamps.patch
new file mode 100644
index 000000000000..7b031cb34f1a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ms-sys/manpages-without-build-timestamps.patch
@@ -0,0 +1,12 @@
+diff -u ms-sys-2.6.0/Makefile ms-sys-2.6.0-fixed/Makefile
+--- ms-sys-2.6.0/Makefile	2015-09-27 20:39:45.000000000 +0200
++++ ms-sys-2.6.0-fixed/Makefile2020-01-06 16:43:55.181477511 +0100
+@@ -121,7 +121,7 @@
+
+ $(DESTDIR)$(MANDIR)/%: $(MAN)/$(dir $(*D))/$(*F)
+ 	install -D -m 644 $(MAN)/$(dir $(*D))$(*F) $@
+-	gzip -f $@
++	gzip -n -f $@
+
+ #$(DESTDIR)$(MANDIR)/%: $(MAN)/$(*F)
+ #	echo t: $<
diff --git a/nixpkgs/pkgs/tools/misc/mstflint/default.nix b/nixpkgs/pkgs/tools/misc/mstflint/default.nix
new file mode 100644
index 000000000000..f3cd1c6e5277
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mstflint/default.nix
@@ -0,0 +1,19 @@
+{ stdenv, fetchurl, zlib, libibmad }:
+
+stdenv.mkDerivation rec {
+  name = "mstflint-4.4.0-1.12.gd1edd58";
+
+  src = fetchurl {
+    url = "https://www.openfabrics.org/downloads/mstflint/${name}.tar.gz";
+    sha256 = "0kg33i5s5zdc7kigww62r0b824zfw06r757fl6jwrq7lj91j0380";
+  };
+
+  buildInputs = [ zlib libibmad ];
+
+  meta = with stdenv.lib; {
+    homepage = https://www.openfabrics.org/;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    broken = true; # 2018-04-11
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mtm/default.nix b/nixpkgs/pkgs/tools/misc/mtm/default.nix
new file mode 100644
index 000000000000..5b45c0b712bf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mtm/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromGitHub, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "mtm";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "deadpixi";
+    repo = pname;
+    rev = version;
+    sha256 = "0b2arkmbmabxmrqxlpvvvhll2qx0xgj7r4r6p0ymnm9p70idris4";
+  };
+
+  buildInputs = [ ncurses ];
+
+  preBuild = ''
+    substituteInPlace Makefile --replace "strip -s mtm" ""
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 -t $out/bin mtm
+    install -Dm644 -t $out/share/man/man1 mtm.1
+
+    runHook postInstall
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Perhaps the smallest useful terminal multiplexer in the world";
+    homepage = "https://github.com/deadpixi/mtm";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/multitail/default.nix b/nixpkgs/pkgs/tools/misc/multitail/default.nix
new file mode 100644
index 000000000000..6ca0c6e8e08f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/multitail/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, ncurses }:
+
+stdenv.mkDerivation rec {
+  version = "6.5.0";
+  pname = "multitail";
+
+  src = fetchurl {
+    url = "https://www.vanheusden.com/multitail/${pname}-${version}.tgz";
+    sha256 = "1vd9vdxyxsccl64ilx542ya5vlw2bpg6gnkq1x8cfqy6vxvmx7dj";
+  };
+
+  buildInputs = [ ncurses ];
+
+  makeFlags = stdenv.lib.optionals stdenv.isDarwin [ "-f" "makefile.macosx" ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp multitail $out/bin
+  '';
+
+  meta = {
+    homepage = http://www.vanheusden.com/multitail/;
+    description = "tail on Steroids";
+    maintainers = with stdenv.lib.maintainers; [ matthiasbeyer ];
+    platforms = stdenv.lib.platforms.unix;
+    license = stdenv.lib.licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/multitime/default.nix b/nixpkgs/pkgs/tools/misc/multitime/default.nix
new file mode 100644
index 000000000000..a46ee2b7c9c1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/multitime/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "multitime";
+  version = "1.4";
+
+  src = fetchFromGitHub {
+    owner = "ltratt";
+    repo = pname;
+    rev = "${pname}-${version}";
+    sha256 = "1p6m4gyy6dw7nxnpsk32qiijagmiq9vwch0fbc25qvmybwqp8qc0";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = {
+    description = "Time command execution over multiple executions";
+
+    longDescription = ''
+      Unix's `time` utility is a simple and often effective way of measuring
+      how long a command takes to run. Unfortunately, running a command once
+      can give misleading timings: the process may create a cache on its first
+      execution, running faster subsequently; other processes may cause the
+      command to be starved of CPU or IO time; etc. It is common to see people
+      run `time` several times and take whichever values they feel most
+      comfortable with. Inevitably, this causes problems.
+
+      `multitime` is, in essence, a simple extension to time which runs a
+      command multiple times and prints the timing means (with confidence
+      intervals), standard deviations, minimums, medians, and maximums having
+      done so. This can give a much better understanding of the command's
+      performance.
+    '';
+
+    license = stdenv.lib.licenses.mit;
+    homepage = "https://tratt.net/laurie/src/multitime/";
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mutagen/default.nix b/nixpkgs/pkgs/tools/misc/mutagen/default.nix
new file mode 100644
index 000000000000..7045a5b5140d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mutagen/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "mutagen";
+  version = "0.10.2";
+
+  src = fetchFromGitHub {
+    owner = "mutagen-io";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0andmgzg2dbnahfh6ncnk9b7d5jlwss7rddsf9z3nmw2q3lj90iz";
+  };
+
+  modSha256 = "0zb6wqfgp5v0hpm8ad6s9lc1n3wayyqindv4vfkmp3980ikb8qwx";
+
+  subPackages = [ "cmd/mutagen" "cmd/mutagen-agent" ];
+
+  meta = with lib; {
+    description = "Make remote development work with your local tools";
+    homepage = "https://mutagen.io/";
+    maintainers = [ maintainers.marsam ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mysql2pgsql/default.nix b/nixpkgs/pkgs/tools/misc/mysql2pgsql/default.nix
new file mode 100644
index 000000000000..83e6ee5b5ca4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mysql2pgsql/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl, perl }:
+
+# The homepage says this script is mature..
+stdenv.mkDerivation {
+  name = "mysql2pgsql-0.0.1a";
+
+  src = fetchurl {
+    url = http://ftp.plusline.de/ftp.postgresql.org/projects/gborg/mysql2psql/devel/mysql2psql-0.0.1a.tgz;
+    sha256 = "0dpbxf3kdvpihz9cisx6wi3zzd0cnifaqvjxavrbwm4k4sz1qamp";
+  };
+
+  buildInputs = [ perl ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv {,$out/bin/}mysql2psql
+  '';
+
+  meta = {
+    description = "Convert MySQL dump files to PostgreSQL-loadable files";
+    homepage = http://pgfoundry.org/projects/mysql2pgsql/;
+    license = stdenv.lib.licenses.bsdOriginal;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mysqltuner/default.nix b/nixpkgs/pkgs/tools/misc/mysqltuner/default.nix
new file mode 100644
index 000000000000..9b7453ad1cc7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mysqltuner/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "mysqltuner";
+  version = "1.7.17";
+
+  src = fetchFromGitHub {
+    owner  = "major";
+    repo   = "MySQLTuner-perl";
+    rev    = version;
+    sha256 = "0wjdqraa6r6kd6rsgrn177dq6xsnnr1sgnbs9whknjbs4fn3wwl5";
+  };
+
+  buildInputs = [ perl ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install -m0755 mysqltuner.pl $out/bin/mysqltuner
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Make recommendations for increased performance and stability of MariaDB/MySQL";
+    homepage = http://mysqltuner.com;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ peterhoeg ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/nagstamon/default.nix b/nixpkgs/pkgs/tools/misc/nagstamon/default.nix
new file mode 100644
index 000000000000..525c16b6024b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nagstamon/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl, pythonPackages }:
+
+pythonPackages.buildPythonApplication rec {
+  pname = "nagstamon";
+  version = "3.2.1";
+
+  src = fetchurl {
+    url = "https://nagstamon.ifw-dresden.de/files/stable/Nagstamon-${version}.tar.gz";
+    sha256 = "1048x55g3nlyyggn6a36xmj24w4hv08llg58f4hzc0fwg074cd58";
+  };
+
+  # Test assumes darwin
+  doCheck = false;
+
+  propagatedBuildInputs = with pythonPackages; [ configparser pyqt5 psutil requests
+     beautifulsoup4 keyring requests-kerberos kerberos lxml ];
+
+  meta = with stdenv.lib; {
+    description = "A status monitor for the desktop";
+    homepage = https://nagstamon.ifw-dresden.de/;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ pSub ];
+    inherit version;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/nbench/default.nix b/nixpkgs/pkgs/tools/misc/nbench/default.nix
new file mode 100644
index 000000000000..a1a6347642b6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nbench/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "nbench-byte";
+  version = "2.2.3";
+
+  src = fetchurl {
+    url = "http://www.math.utah.edu/~mayer/linux/${pname}-${version}.tar.gz";
+    sha256 = "1b01j7nmm3wd92ngvsmn2sbw43sl9fpx4xxmkrink68fz1rx0gbj";
+  };
+
+  buildInputs = [ stdenv.cc.libc.static ];
+  prePatch = ''
+    substituteInPlace nbench1.h --replace '"NNET.DAT"' "\"$out/NNET.DAT\""
+  '';
+  preBuild = ''
+    makeFlagsArray=(CC=$CC)
+  '';
+  installPhase = ''
+    mkdir -p $out/bin
+    cp nbench $out/bin
+    cp NNET.DAT $out
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://www.math.utah.edu/~mayer/linux/bmark.html;
+    description = "A synthetic computing benchmark program";
+    platforms = platforms.linux;
+    maintainers = with stdenv.lib.maintainers; [ bennofs ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ncdu/default.nix b/nixpkgs/pkgs/tools/misc/ncdu/default.nix
new file mode 100644
index 000000000000..d29626c99d18
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ncdu/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchurl, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "ncdu";
+  version = "1.14.1";
+
+  src = fetchurl {
+    url = "https://dev.yorhel.nl/download/${pname}-${version}.tar.gz";
+    sha256 = "0gp1aszzrh8b6fhv8fspvkmr0qwc55z6z4w6l7r8j09sq7lf0cdy";
+  };
+
+  buildInputs = [ ncurses ];
+
+  meta = with stdenv.lib; {
+    description = "Disk usage analyzer with an ncurses interface";
+    homepage = https://dev.yorhel.nl/ncdu;
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/neo-cowsay/default.nix b/nixpkgs/pkgs/tools/misc/neo-cowsay/default.nix
new file mode 100644
index 000000000000..128d582e32e7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/neo-cowsay/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "neo-cowsay";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "Code-Hex";
+    repo = "Neo-cowsay";
+    rev = "v${version}";
+    sha256 = "1in6kadczv05v62qhskqbdx7wppch0gwl0bshr5ihmi39k8l7v3z";
+  };
+
+  modSha256 = "063ds35dzv8m4bjk7v1q3f6jwyp7j5jrkrhrl41z1c1mbzzkagkq";
+
+  subPackages = [ "cmd/cowsay" "cmd/cowthink" ];
+
+  meta = with lib; {
+    description = "Cowsay reborn, written in Go";
+    homepage = "https://github.com/Code-Hex/Neo-cowsay";
+    license = with licenses; [artistic1 /* or */ gpl3];
+    maintainers = with maintainers; [ filalex77 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/neofetch/default.nix b/nixpkgs/pkgs/tools/misc/neofetch/default.nix
new file mode 100644
index 000000000000..5850c4a90af7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/neofetch/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "neofetch";
+  version = "6.1.0";
+
+  src = fetchFromGitHub {
+    owner = "dylanaraps";
+    repo = "neofetch";
+    rev = version;
+    sha256 = "022xzn9jk18k2f4b6011d8jk5nbl84i3mw3inlz4q52p2hvk8fch";
+  };
+
+  dontBuild = true;
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+    "SYSCONFDIR=${placeholder "out"}/etc"
+  ];
+
+  meta = with stdenv.lib; {
+    description = "A fast, highly customizable system info script";
+    homepage = https://github.com/dylanaraps/neofetch;
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ alibabzo konimex ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/nginx-config-formatter/default.nix b/nixpkgs/pkgs/tools/misc/nginx-config-formatter/default.nix
new file mode 100644
index 000000000000..db60010490e5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nginx-config-formatter/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, python3 }:
+
+stdenv.mkDerivation {
+  version = "2019-02-13";
+  pname = "nginx-config-formatter";
+
+  src = fetchFromGitHub {
+    owner = "1connect";
+    repo = "nginx-config-formatter";
+    rev = "4ea6bbc1bdeb1d28419548aeca90f323e64e0e05";
+    sha256 = "0h6pj9i0wim9pzkafi92l1nhlnl2a530vnm7qqi3n2ra8iwfyw4f";
+  };
+
+  buildInputs = [ python3 ];
+
+  doCheck = true;
+  checkPhase = ''
+    python3 $src/test_nginxfmt.py
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install -m 0755 $src/nginxfmt.py $out/bin/nginxfmt
+  '';
+
+  meta = with stdenv.lib; {
+    description = "nginx config file formatter";
+    maintainers = with maintainers; [ Baughn ];
+    license = licenses.asl20;
+    homepage = https://github.com/1connect/nginx-config-formatter;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/nms/default.nix b/nixpkgs/pkgs/tools/misc/nms/default.nix
new file mode 100644
index 000000000000..0005ffe824b0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nms/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "nms";
+  version = "0.3.3";
+
+  src = fetchFromGitHub {
+    owner = "bartobri";
+    repo = "no-more-secrets";
+    rev = "v${version}";
+    sha256 = "1zfv4qabikf8w9winsr4brxrdvs3f0d7xvydksyx8bydadsm2v2h";
+  };
+
+  buildFlags = [ "nms" "sneakers" ];
+  installFlags = [ "prefix=$(out)" ];
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/bartobri/no-more-secrets";
+    description = ''
+      A command line tool that recreates the famous data decryption
+      effect seen in the 1992 movie Sneakers.
+    '';
+    license = licenses.gpl3;
+    maintainers = [ maintainers.infinisil ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/noteshrink/default.nix b/nixpkgs/pkgs/tools/misc/noteshrink/default.nix
new file mode 100644
index 000000000000..b197e9bc5d2e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/noteshrink/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchFromGitHub, python3, imagemagick }:
+
+with python3.pkgs;
+
+buildPythonApplication rec {
+  pname = "noteshrink";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner  = "mzucker";
+    repo   = "noteshrink";
+    rev    = version;
+    sha256 = "0xhrvg3d8ffnbbizsrfppcd2y98znvkgxjdmvbvin458m2rwccka";
+  };
+
+  propagatedBuildInputs = [ numpy scipy imagemagick pillow ];
+
+  meta = with stdenv.lib; {
+    description = "Convert scans of handwritten notes to beautiful, compact PDFs";
+    homepage    = https://mzucker.github.io/2016/09/20/noteshrink.html;
+    license     = licenses.mit;
+    maintainers = with maintainers; [ rnhmjoj ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/noti/default.nix b/nixpkgs/pkgs/tools/misc/noti/default.nix
new file mode 100644
index 000000000000..a6288b322957
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/noti/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, lib, buildGoPackage, fetchFromGitHub
+, Cocoa ? null }:
+
+buildGoPackage rec {
+  pname = "noti";
+  version = "3.4.0";
+
+  src = fetchFromGitHub {
+    owner = "variadico";
+    repo = "noti";
+    rev = version;
+    sha256 = "0bcwfyd93fx0rzjc9jgg4pvvqbpxwizr044yqqa5rx70gaasz7qa";
+  };
+
+  buildInputs = lib.optional stdenv.isDarwin Cocoa;
+
+  goPackagePath = "github.com/variadico/noti";
+
+  preBuild = ''
+    buildFlagsArray+=("-ldflags" "-X ${goPackagePath}/internal/command.Version=${version}")
+  '';
+
+  postInstall = ''
+    install -Dm444 -t $out/share/man/man1 $src/docs/man/*.1
+    install -Dm444 -t $out/share/man/man5 $src/docs/man/*.5
+  '';
+
+  meta = with lib; {
+    description = "Monitor a process and trigger a notification.";
+    longDescription = ''
+      Monitor a process and trigger a notification.
+
+      Never sit and wait for some long-running process to finish. Noti can alert you when it's done. You can receive messages on your computer or phone.
+    '';
+    homepage = https://github.com/variadico/noti;
+    license = licenses.mit;
+    maintainers = with maintainers; [ stites marsam ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/notify-desktop/default.nix b/nixpkgs/pkgs/tools/misc/notify-desktop/default.nix
new file mode 100644
index 000000000000..61aa2c41c4fc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/notify-desktop/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchFromGitHub, dbus, pkgconfig }:
+
+stdenv.mkDerivation {
+  pname = "notify-desktop";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "nowrep";
+    repo = "notify-desktop";
+    rev = "9863919fb4ce7820810ac14a09a46ee73c3d56cc";
+    sha256 = "1brcvl2fx0yzxj9mc8hzfl32zdka1f1bxpzsclcsjplyakyinr1a";
+  };
+
+  buildInputs = [ dbus pkgconfig ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install -m 755 bin/notify-desktop $out/bin/notify-desktop
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Little application that lets you send desktop notifications with one command";
+    longDescription = ''
+      It's basically clone of notify-send from libnotify,
+      but it supports reusing notifications on screen by passing its ID.
+      It also does not use any external dependencies (except from libdbus of course).
+    '';
+    homepage = "https://github.com/nowrep/notify-desktop";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ylwghst ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ntfy/default.nix b/nixpkgs/pkgs/tools/misc/ntfy/default.nix
new file mode 100644
index 000000000000..26517361ae2d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ntfy/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, pythonPackages, fetchFromGitHub }:
+
+pythonPackages.buildPythonApplication rec {
+  pname = "ntfy";
+  version = "2.7.0";
+
+  src = fetchFromGitHub {
+    owner = "dschep";
+    repo = "ntfy";
+    rev = "v${version}";
+    sha256 = "09f02cn4i1l2aksb3azwfb70axqhn7d0d0vl2r6640hqr74nc1cv";
+  };
+
+  checkInputs = with pythonPackages; [
+    mock
+  ];
+
+  propagatedBuildInputs = with pythonPackages; [
+    requests ruamel_yaml appdirs
+    sleekxmpp dns
+    emoji
+    psutil
+    matrix-client
+    dbus-python
+  ];
+
+  checkPhase = ''
+    HOME=$(mktemp -d) ${pythonPackages.python.interpreter} setup.py test
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A utility for sending notifications, on demand and when commands finish";
+    homepage = http://ntfy.rtfd.org/;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ jfrankenau kamilchm ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/nyancat/default.nix b/nixpkgs/pkgs/tools/misc/nyancat/default.nix
new file mode 100644
index 000000000000..47a91915c431
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nyancat/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "nyancat";
+  version = "1.5.2";
+
+  src = fetchFromGitHub {
+    owner = "klange";
+    repo = "nyancat";
+    rev = version;
+    sha256 = "1mg8nm5xzcq1xr8cvx24ym2vmafkw53rijllwcdm9miiz0p5ky9k";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace /usr/bin "$out/bin" \
+      --replace /usr/share "$out/share"
+  '';
+
+  preInstall = ''
+    mkdir -p $out/bin
+    mkdir -p $out/share/man/man1
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Nyancat in your terminal, rendered through ANSI escape sequences.";
+    homepage = https://nyancat.dakko.us;
+    license = licenses.ncsa;
+    maintainers = with maintainers; [ midchildan ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/oci-image-tool/default.nix b/nixpkgs/pkgs/tools/misc/oci-image-tool/default.nix
new file mode 100644
index 000000000000..3b45b7b06442
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/oci-image-tool/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, buildGoPackage }:
+
+buildGoPackage rec {
+  pname = "oci-image-tool";
+  version = "1.0.0-rc1";
+
+  goPackagePath = "github.com/opencontainers/image-tools";
+  subPackages = [ "cmd/oci-image-tool" ];
+
+  src = fetchFromGitHub {
+    owner = "opencontainers";
+    repo = "image-tools";
+    rev = "v${version}";
+    sha256 = "0c4n69smqlkf0r6khy9gbg5f810qh9g8jqsl9kibb0dyswizr14r";
+  };
+
+  meta = {
+    description = "A collection of tools for working with the OCI image format specification";
+    homepage = https://github.com/opencontainers/image-tools;
+    license = lib.licenses.asl20;
+    maintainers = with lib.maintainers; [ nzhang-zh ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ocz-ssd-guru/default.nix b/nixpkgs/pkgs/tools/misc/ocz-ssd-guru/default.nix
new file mode 100644
index 000000000000..d54302b31d1d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ocz-ssd-guru/default.nix
@@ -0,0 +1,53 @@
+{ fetchurl, stdenv, xorg, freetype, fontconfig, libGLU, libGL, glibc, makeWrapper }:
+
+let
+  system = if stdenv.hostPlatform.system == "x86_64-linux" then "linux64" else "linux32";
+in
+stdenv.mkDerivation rec {
+  pname = "ocz-ssd-guru";
+  version = "1.0.1170";
+
+  src = fetchurl {
+    url = "http://ocz.com/consumer/download/ssd-guru/SSDGuru_${version}.tar.gz";
+    sha256 = "0ri7qmpc1xpy12lpzl6k298c641wcibcwrzz8jn75wdg4rr176r5";
+  };
+
+  buildInputs = [ makeWrapper ];
+
+  libPath = stdenv.lib.makeLibraryPath [
+      xorg.libX11
+      xorg.libxcb
+      freetype
+      fontconfig
+      xorg.libXext
+      xorg.libXi
+      xorg.libXrender
+      stdenv.cc.cc
+      glibc
+      libGLU libGL
+  ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ${system}/SSDGuru $out/bin/
+    rm -rf linux{32,64}
+    patchelf \
+      --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      --set-rpath $libPath:$out \
+      $out/bin/SSDGuru
+
+    wrapProgram $out/bin/SSDGuru --prefix LD_LIBRARY_PATH : $libPath
+  '';
+
+  dontStrip = true;
+  dontPatchELF = true;
+
+  meta = {
+    homepage = http://ocz.com/ssd-guru;
+    description = "SSD Management Tool for OCZ disks";
+    license = stdenv.lib.licenses.unfree;
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = with stdenv.lib.maintainers; [ jagajaga ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/odroid-xu3-bootloader/default.nix b/nixpkgs/pkgs/tools/misc/odroid-xu3-bootloader/default.nix
new file mode 100644
index 000000000000..3896ca77a166
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/odroid-xu3-bootloader/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, lib, fetchFromGitHub, coreutils, ubootOdroidXU3, runtimeShell }:
+
+stdenv.mkDerivation {
+  name = "odroid-xu3-bootloader-2015-12-04";
+
+  src = fetchFromGitHub {
+    owner = "hardkernel";
+    repo = "u-boot";
+    rev = "fe2f831fd44a4071f58a42f260164544697aa666";
+    sha256 = "1h5yvawzla0vqhkk98gxcwc824bhc936bh6j77qkyspvqcw761fr";
+  };
+
+  buildCommand = ''
+    install -Dm644 -t $out/lib/sd_fuse-xu3 $src/sd_fuse/hardkernel_1mb_uboot/{bl2,tzsw}.*
+    install -Dm644 -t $out/lib/sd_fuse-xu3 $src/sd_fuse/hardkernel/bl1.*
+    ln -sf ${ubootOdroidXU3}/u-boot-dtb.bin $out/lib/sd_fuse-xu3/u-boot-dtb.bin
+
+    install -Dm755 $src/sd_fuse/hardkernel_1mb_uboot/sd_fusing.1M.sh $out/bin/sd_fuse-xu3
+    sed -i \
+      -e '1i#!${runtimeShell}' \
+      -e '1iPATH=${lib.makeBinPath [ coreutils ]}:$PATH' \
+      -e '/set -x/d' \
+      -e 's,.\/sd_fusing\.sh,sd_fuse-xu3,g' \
+      -e "s,\./,$out/lib/sd_fuse-xu3/,g" \
+      $out/bin/sd_fuse-xu3
+  '';
+
+  meta = with stdenv.lib; {
+    platforms = platforms.linux;
+    license = licenses.unfreeRedistributableFirmware;
+    description = "Secure boot enabled boot loader for ODROID-XU{3,4}";
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/odyssey/default.nix b/nixpkgs/pkgs/tools/misc/odyssey/default.nix
new file mode 100644
index 000000000000..160474f81523
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/odyssey/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub, cmake, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "odyssey";
+  version = "1.0rc1";
+
+  src = fetchFromGitHub {
+    owner = "yandex";
+    repo = pname;
+    rev = version;
+    sha256 = "0p9zzazx3bhwz7sz8l757lwdj8qx0ij2k3g0d12prs0xfi1qhcmz";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ openssl ];
+
+  installPhase = ''
+    install -Dm755 -t $out/bin sources/odyssey
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Scalable PostgreSQL connection pooler";
+    homepage = https://github.com/yandex/odyssey;
+    license = licenses.bsd3;
+    maintainers = [ maintainers.marsam ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/onefetch/default.nix b/nixpkgs/pkgs/tools/misc/onefetch/default.nix
new file mode 100644
index 000000000000..e51a00dc7bd0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/onefetch/default.nix
@@ -0,0 +1,34 @@
+{ fetchFromGitHub, rustPlatform, stdenv, fetchpatch
+, CoreFoundation, libiconv, libresolv, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "onefetch";
+  version = "2.2.0";
+
+  src = fetchFromGitHub {
+    owner = "o2sh";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1sgpai3gx3w7w3ilmbnmzgdxdim6klkfiqaqxmffpyap6qgksfqs";
+  };
+
+  cargoSha256 = "1phv06zf47bv5cmhypivljfiynrblha0kj13c5al9l0hd1xx749h";
+
+  buildInputs = with stdenv;
+    lib.optionals isDarwin [ CoreFoundation libiconv libresolv Security ];
+
+  cargoPatches = [
+    # fix wrong version in Cargo.lock
+    (fetchpatch {
+      url = "https://github.com/o2sh/onefetch/commit/b69fe660d72b65d7efac99ac5db3b03a82d8667f.patch";
+      sha256 = "14przkdyd4yd11xpdgyscs70w9gpnh02j3xdzxf6h895w3mn84lx";
+    })
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Git repository summary on your terminal";
+    homepage = "https://github.com/o2sh/onefetch";
+    license = licenses.mit;
+    maintainers = with maintainers; [ filalex77 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/opentimestamps-client/default.nix b/nixpkgs/pkgs/tools/misc/opentimestamps-client/default.nix
new file mode 100644
index 000000000000..94984c57e49c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/opentimestamps-client/default.nix
@@ -0,0 +1,35 @@
+{ lib, buildPythonApplication, fetchFromGitHub, isPy3k
+, opentimestamps, appdirs, GitPython, pysocks, fetchpatch, git
+}:
+
+buildPythonApplication rec {
+  pname = "opentimestamps-client";
+  version = "0.6.0";
+  disabled = (!isPy3k);
+
+  # We can't use the pypi source because it doesn't include README.md which is
+  # needed in setup.py
+  src = fetchFromGitHub {
+    owner = "opentimestamps";
+    repo = "opentimestamps-client";
+    rev = "opentimestamps-client-v${version}";
+    sha256 = "05m8nllqad3k69mvby5q08y22i0wrj84gqifdgcldimrrn1i00xp";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/opentimestamps/opentimestamps-client/commit/1b328269ceee66916e9a639e8d5d7d13cd70d5d8.patch";
+      sha256 = "0bd3yalyvk5n4sflw9zilpay5k653ybdgkkfppyrk7c8z3i81hbl";
+    })
+  ];
+
+  checkInputs = [ git ];
+
+  propagatedBuildInputs = [ opentimestamps appdirs GitPython pysocks ];
+
+  meta = {
+    description = "Command-line tool to create and verify OpenTimestamps proofs";
+    homepage = https://github.com/opentimestamps/opentimestamps-client;
+    license = lib.licenses.lgpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/opentsdb/default.nix b/nixpkgs/pkgs/tools/misc/opentsdb/default.nix
new file mode 100644
index 000000000000..2a0846dd5116
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/opentsdb/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, autoconf, automake, curl, fetchurl, jdk, jre, makeWrapper, nettools
+, python, git
+}:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  pname = "opentsdb";
+  version = "2.3.1";
+
+  src = fetchurl {
+    url = "https://github.com/OpenTSDB/opentsdb/releases/download/v${version}/${pname}-${version}.tar.gz";
+    sha256 = "1lf1gynr11silla4bsrkwqv023dxirsb88ncs2qmc2ng35593fjd";
+  };
+
+  buildInputs = [ autoconf automake curl jdk makeWrapper nettools python git ];
+
+  preConfigure = ''
+    patchShebangs ./build-aux/
+    ./bootstrap
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/tsdb \
+      --set JAVA_HOME "${jre}" \
+      --set JAVA "${jre}/bin/java"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Time series database with millisecond precision";
+    homepage = http://opentsdb.net;
+    license = licenses.lgpl21Plus;
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ maintainers.ocharles ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/oppai-ng/default.nix b/nixpkgs/pkgs/tools/misc/oppai-ng/default.nix
new file mode 100644
index 000000000000..46b2fd444ec4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/oppai-ng/default.nix
@@ -0,0 +1,34 @@
+{ stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "oppai-ng";
+  version = "3.2.3";
+
+  src = fetchFromGitHub {
+    owner = "Francesco149";
+    repo = pname;
+    rev = version;
+    sha256 = "1wrnpnx1yl0pdzmla4knlpcwy7baamy2wpdypnbdqxrn0zkw7kzk";
+  };
+
+  buildPhase = ''
+    ./build
+    ./libbuild
+  '';
+
+  installPhase = ''
+    install -D oppai $out/bin/oppai
+    install -D oppai.c $out/include/oppai.c
+    install -D liboppai.so $out/lib/liboppai.so
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Difficulty and pp calculator for osu!";
+    homepage = "https://github.com/Francesco149/oppai-ng";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ tadeokondrak ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/os-prober/default.nix b/nixpkgs/pkgs/tools/misc/os-prober/default.nix
new file mode 100644
index 000000000000..d68ed9c5cd39
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/os-prober/default.nix
@@ -0,0 +1,71 @@
+{ stdenv, fetchFromGitLab, makeWrapper, nixosTests,
+# optional dependencies, the command(s) they provide
+coreutils,  # mktemp
+grub2,      # grub-mount and grub-probe
+cryptsetup, # cryptsetup
+libuuid,    # blkid and blockdev
+udev,    # udevadm udevinfo
+ntfs3g      # ntfs3g
+}:
+
+stdenv.mkDerivation rec {
+  version = "1.77";
+  pname = "os-prober";
+  src = fetchFromGitLab {
+    domain = "salsa.debian.org";
+    owner = "installer-team";
+    repo = pname;
+    rev = version;
+    sha256 = "05sji756xdl67pp2sf7rk0ih9h6f6kgk9nvxlyv1bzbmcizlh2d2";
+  };
+
+  buildInputs = [ makeWrapper ];
+  installPhase = ''
+    # executables
+    install -Dt $out/bin os-prober linux-boot-prober
+    install -Dt $out/lib newns
+    install -Dt $out/share common.sh
+
+    # probes
+    case "${stdenv.hostPlatform.system}" in
+        i686*|x86_64*) ARCH=x86;;
+        powerpc*) ARCH=powerpc;;
+        arm*) ARCH=arm;;
+        *) ARCH=other;;
+    esac;
+    for probes in os-probes os-probes/mounted os-probes/init linux-boot-probes linux-boot-probes/mounted; do
+      install -Dt $out/lib/$probes $probes/common/*;
+      if [ -e "$probes/$ARCH" ]; then
+        mkdir -p $out/lib/$probes
+        cp -r $probes/$ARCH/* $out/lib/$probes;
+      fi;
+    done
+    if [ $ARCH = "x86" ]; then
+        cp -r os-probes/mounted/powerpc/20macosx $out/lib/os-probes/mounted;
+    fi;
+  '';
+  postFixup = ''
+    for file in $(find $out  -type f ! -name newns) ; do
+      substituteInPlace $file \
+        --replace /usr/share/os-prober/ $out/share/ \
+        --replace /usr/lib/os-probes/ $out/lib/os-probes/ \
+        --replace /usr/lib/linux-boot-probes/ $out/lib/linux-boot-probes/ \
+        --replace /usr/lib/os-prober/ $out/lib/
+    done;
+    for file in $out/bin/*; do
+      wrapProgram $file \
+        --suffix PATH : ${stdenv.lib.makeBinPath [ grub2 udev coreutils cryptsetup libuuid ntfs3g ]} \
+        --run "[ -d /var/lib/os-prober ] || mkdir /var/lib/os-prober"
+    done;
+  '';
+
+  passthru.tests = {
+    os-prober = nixosTests.os-prober;
+  };
+  meta = with stdenv.lib; {
+    description = "Utility to detect other OSs on a set of drives";
+    homepage = http://packages.debian.org/source/sid/os-prober;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ symphorien ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/osinfo-db-tools/default.nix b/nixpkgs/pkgs/tools/misc/osinfo-db-tools/default.nix
new file mode 100644
index 000000000000..0b7a7826a972
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/osinfo-db-tools/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, pkgconfig, gettext, glib, libxml2, perl
+, libxslt, libarchive, bzip2, lzma, json-glib, libsoup
+}:
+
+stdenv.mkDerivation rec {
+  pname = "osinfo-db-tools";
+  version = "1.6.0";
+
+  src = fetchurl {
+    url = "https://releases.pagure.org/libosinfo/${pname}-${version}.tar.gz";
+    sha256 = "0x155d4hqz7mabgqvgydqjm9d8aabc78vr0v0pnsp9vkdlcv3mfh";
+  };
+
+  nativeBuildInputs = [ pkgconfig gettext perl ];
+  buildInputs = [ glib json-glib libxml2 libxslt libarchive bzip2 lzma libsoup ];
+
+  meta = with stdenv.lib; {
+    description = "Tools for managing the osinfo database";
+    homepage = https://libosinfo.org/;
+    license = licenses.lgpl2Plus;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/osm2pgsql/default.nix b/nixpkgs/pkgs/tools/misc/osm2pgsql/default.nix
new file mode 100644
index 000000000000..8905f9eb36ad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/osm2pgsql/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub, cmake, expat, proj, bzip2, zlib, boost, postgresql, lua}:
+
+stdenv.mkDerivation rec {
+  pname = "osm2pgsql";
+  version = "1.2.1";
+
+  src = fetchFromGitHub {
+    owner = "openstreetmap";
+    repo = pname;
+    rev = version;
+    sha256 = "1ysan01lpqzjxlq3y2kdminfjs5d9zksicpf9vvzpdk3fzq51fc9";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [ expat proj bzip2 zlib boost postgresql lua ];
+
+  NIX_CFLAGS_COMPILE = "-DACCEPT_USE_OF_DEPRECATED_PROJ_API_H";
+
+  meta = with stdenv.lib; {
+    description = "OpenStreetMap data to PostgreSQL converter";
+    homepage = "https://github.com/openstreetmap/osm2pgsql";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ jglukasik ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ostree/01-Drop-ostree-trivial-httpd-CLI-move-to-tests-director.patch b/nixpkgs/pkgs/tools/misc/ostree/01-Drop-ostree-trivial-httpd-CLI-move-to-tests-director.patch
new file mode 100644
index 000000000000..9c334436162b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ostree/01-Drop-ostree-trivial-httpd-CLI-move-to-tests-director.patch
@@ -0,0 +1,271 @@
+From a9a62d7c7adf6fc0237c7d04937b538a4cea87ad Mon Sep 17 00:00:00 2001
+From: Colin Walters <walters@verbum.org>
+Date: Tue, 19 Jun 2018 09:34:18 -0400
+Subject: [PATCH] Drop "ostree trivial-httpd" CLI, move to tests directory
+
+See https://github.com/ostreedev/ostree/issues/1593
+
+Basically this makes it easier for people packaging, as the trivial-httpd
+is only for tests, and this way the binary will live with the tests.
+
+Also at this point nothing should depend on `ostree trivial-httpd`.
+---
+ Makefile-man.am              |   6 --
+ Makefile-ostree.am           |   7 ---
+ Makefile-tests.am            |   7 +++
+ configure.ac                 |  10 ---
+ man/ostree-trivial-httpd.xml | 118 -----------------------------------
+ src/ostree/main.c            |   5 --
+ tests/libtest.sh             |  13 ++--
+ 7 files changed, 12 insertions(+), 154 deletions(-)
+ delete mode 100644 man/ostree-trivial-httpd.xml
+
+diff --git a/Makefile-man.am b/Makefile-man.am
+index 8ccbba8c..d204aa3e 100644
+--- a/Makefile-man.am
++++ b/Makefile-man.am
+@@ -34,12 +34,6 @@ ostree-init.1 ostree-log.1 ostree-ls.1 ostree-prune.1 ostree-pull-local.1 \
+ ostree-pull.1 ostree-refs.1 ostree-remote.1 ostree-reset.1 \
+ ostree-rev-parse.1 ostree-show.1 ostree-summary.1 \
+ ostree-static-delta.1
+-if BUILDOPT_TRIVIAL_HTTPD
+-man1_files += ostree-trivial-httpd.1
+-else
+-# We still want to distribute the source, even if we are not building it
+-EXTRA_DIST += man/ostree-trivial-httpd.xml
+-endif
+ 
+ if BUILDOPT_FUSE
+ man1_files += rofiles-fuse.1
+diff --git a/Makefile-ostree.am b/Makefile-ostree.am
+index 8d352e38..1471b3e5 100644
+--- a/Makefile-ostree.am
++++ b/Makefile-ostree.am
+@@ -133,13 +133,6 @@ ostree_SOURCES += src/ostree/ot-builtin-pull.c
+ endif
+ 
+ if USE_LIBSOUP
+-# Eventually once we stop things from using this, we should support disabling this
+-ostree_SOURCES += src/ostree/ot-builtin-trivial-httpd.c
+-pkglibexec_PROGRAMS += ostree-trivial-httpd
+-ostree_trivial_httpd_SOURCES = src/ostree/ostree-trivial-httpd.c
+-ostree_trivial_httpd_CFLAGS = $(ostree_bin_shared_cflags) $(OT_INTERNAL_SOUP_CFLAGS)
+-ostree_trivial_httpd_LDADD = $(ostree_bin_shared_ldadd) $(OT_INTERNAL_SOUP_LIBS)
+-
+ if !USE_CURL
+ # This is necessary for the cookie jar bits
+ ostree_CFLAGS += $(OT_INTERNAL_SOUP_CFLAGS)
+diff --git a/Makefile-tests.am b/Makefile-tests.am
+index 2c0916f6..b11fde89 100644
+--- a/Makefile-tests.am
++++ b/Makefile-tests.am
+@@ -248,6 +248,13 @@ _installed_or_uninstalled_test_programs = tests/test-varint tests/test-ot-unix-u
+ 	tests/test-gpg-verify-result tests/test-checksum tests/test-lzma tests/test-rollsum \
+ 	tests/test-basic-c tests/test-sysroot-c tests/test-pull-c tests/test-repo tests/test-include-ostree-h
+ 
++if USE_LIBSOUP
++test_extra_programs += ostree-trivial-httpd
++ostree_trivial_httpd_SOURCES = src/ostree/ostree-trivial-httpd.c
++ostree_trivial_httpd_CFLAGS = $(common_tests_cflags) $(OT_INTERNAL_SOUP_CFLAGS)
++ostree_trivial_httpd_LDADD = $(common_tests_ldadd) $(OT_INTERNAL_SOUP_LIBS)
++endif
++
+ if USE_AVAHI
+ test_programs += tests/test-repo-finder-avahi
+ endif
+diff --git a/configure.ac b/configure.ac
+index e6e145db..1e36e6a0 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -187,15 +187,6 @@ if test x$with_soup != xno; then OSTREE_FEATURES="$OSTREE_FEATURES libsoup"; fi
+ AM_CONDITIONAL(USE_LIBSOUP, test x$with_soup != xno)
+ AM_CONDITIONAL(HAVE_LIBSOUP_CLIENT_CERTS, test x$have_libsoup_client_certs = xyes)
+ 
+-AC_ARG_ENABLE(trivial-httpd-cmdline,
+-  [AS_HELP_STRING([--enable-trivial-httpd-cmdline],
+-  [Continue to support "ostree trivial-httpd" [default=no]])],,
+-  enable_trivial_httpd_cmdline=no)
+-AM_CONDITIONAL(BUILDOPT_TRIVIAL_HTTPD, test x$enable_trivial_httpd_cmdline = xyes)
+-AM_COND_IF(BUILDOPT_TRIVIAL_HTTPD,
+-  [AC_DEFINE([BUILDOPT_ENABLE_TRIVIAL_HTTPD_CMDLINE], 1, [Define if we are enabling ostree trivial-httpd entrypoint])]
+-)
+-
+ AS_IF([test x$with_curl = xyes && test x$with_soup = xno], [
+   AC_MSG_WARN([Curl enabled, but libsoup is not; libsoup is needed for tests (make check, etc.)])
+ ])
+@@ -602,7 +593,6 @@ echo "
+     Rust (internal oxidation):                    $rust_debug_release
+     rofiles-fuse:                                 $enable_rofiles_fuse
+     HTTP backend:                                 $fetcher_backend
+-    \"ostree trivial-httpd\":                       $enable_trivial_httpd_cmdline
+     SELinux:                                      $with_selinux
+     cryptographic checksums:                      $with_crypto
+     systemd:                                      $have_libsystemd
+diff --git a/man/ostree-trivial-httpd.xml b/man/ostree-trivial-httpd.xml
+deleted file mode 100644
+index d03c12be..00000000
+--- a/man/ostree-trivial-httpd.xml
++++ /dev/null
+@@ -1,118 +0,0 @@
+-<?xml version='1.0'?> <!--*-nxml-*-->
+-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+-    "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+-
+-<!--
+-Copyright 2011,2013 Colin Walters <walters@verbum.org>
+-
+-SPDX-License-Identifier: LGPL-2.0+
+-
+-This library is free software; you can redistribute it and/or
+-modify it under the terms of the GNU Lesser General Public
+-License as published by the Free Software Foundation; either
+-version 2 of the License, or (at your option) any later version.
+-
+-This library is distributed in the hope that it will be useful,
+-but WITHOUT ANY WARRANTY; without even the implied warranty of
+-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+-Lesser General Public License for more details.
+-
+-You should have received a copy of the GNU Lesser General Public
+-License along with this library; if not, write to the
+-Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+-Boston, MA 02111-1307, USA.
+--->
+-
+-<refentry id="ostree">
+-
+-    <refentryinfo>
+-        <title>ostree trivial-httpd</title>
+-        <productname>OSTree</productname>
+-
+-        <authorgroup>
+-            <author>
+-                <contrib>Developer</contrib>
+-                <firstname>Colin</firstname>
+-                <surname>Walters</surname>
+-                <email>walters@verbum.org</email>
+-            </author>
+-        </authorgroup>
+-    </refentryinfo>
+-
+-    <refmeta>
+-        <refentrytitle>ostree trivial-httpd</refentrytitle>
+-        <manvolnum>1</manvolnum>
+-    </refmeta>
+-
+-    <refnamediv>
+-        <refname>ostree-trivial-httpd</refname>
+-        <refpurpose>Simple webserver</refpurpose>
+-    </refnamediv>
+-
+-    <refsynopsisdiv>
+-            <cmdsynopsis>
+-                <command>ostree trivial-httpd</command> <arg choice="opt" rep="repeat">OPTIONS</arg> <arg choice="opt">DIR</arg>
+-            </cmdsynopsis>
+-    </refsynopsisdiv>
+-
+-<!-- Don't entirely understand this command.  Needs details, better content-->
+-    <refsect1>
+-        <title>Description</title>
+-
+-        <para>
+-            This runs a simple webserver and keeps it running until killed.  If DIR is not specified, it defaults to the current directory.
+-        </para>
+-    </refsect1>
+-
+-    <refsect1>
+-        <title>Options</title>
+-
+-        <variablelist>
+-            <varlistentry>
+-                <term><option>--daemonize</option>,<option>-d</option></term>
+-
+-                <listitem><para>
+-                    Fork into background when ready.
+-                </para></listitem>
+-            </varlistentry>
+-
+-            <varlistentry>
+-                <term><option>--autoexit</option></term>
+-
+-                <listitem><para>
+-                    Automatically exit when directory is deleted.
+-                </para></listitem>
+-            </varlistentry>
+-
+-            <varlistentry>
+-                <term><option>--port-file</option>,<option>-p</option>="PATH"</term>
+-
+-                <listitem><para>
+-                    Write port number to PATH (- for standard output).
+-                </para></listitem>
+-            </varlistentry>
+-
+-            <varlistentry>
+-                <term><option>--port</option>,<option>-P</option></term>
+-
+-                <listitem><para>
+-                    Use the specified TCP port to listen on.
+-                </para></listitem>
+-            </varlistentry>
+-
+-            <varlistentry>
+-                <term><option>--force-range-requests</option></term>
+-
+-                <listitem><para>
+-                    Force range requests by only serving half of files.
+-                </para></listitem>
+-            </varlistentry>
+-        </variablelist>
+-    </refsect1>
+-
+-<!-- NEED EXAMPLE OUTPUT HERE!-->
+-    <refsect1>
+-        <title>Example</title>
+-        <para><command>$ ostree trivial-httpd</command></para>
+-    </refsect1>
+-</refentry>
+diff --git a/src/ostree/main.c b/src/ostree/main.c
+index c5b45012..6478a62b 100644
+--- a/src/ostree/main.c
++++ b/src/ostree/main.c
+@@ -116,11 +116,6 @@ static OstreeCommand commands[] = {
+   { "summary", OSTREE_BUILTIN_FLAG_NONE,
+     ostree_builtin_summary,
+     "Manage summary metadata" },
+-#if defined(HAVE_LIBSOUP) && defined(BUILDOPT_ENABLE_TRIVIAL_HTTPD_CMDLINE)
+-  { "trivial-httpd", OSTREE_BUILTIN_FLAG_NONE,
+-    ostree_builtin_trivial_httpd,
+-    NULL },
+-#endif
+   { NULL }
+ };
+ 
+diff --git a/tests/libtest.sh b/tests/libtest.sh
+index e0022512..b07dc962 100755
+--- a/tests/libtest.sh
++++ b/tests/libtest.sh
+@@ -149,15 +149,12 @@ fi
+ if test -n "${OSTREE_UNINSTALLED:-}"; then
+     OSTREE_HTTPD=${OSTREE_UNINSTALLED}/ostree-trivial-httpd
+ else
+-    # trivial-httpd is now in $libexecdir by default, which we don't
+-    # know at this point. Fortunately, libtest.sh is also in
+-    # $libexecdir, so make an educated guess. If it's not found, assume
+-    # it's still runnable as "ostree trivial-httpd".
+-    if [ -x "${test_srcdir}/../../libostree/ostree-trivial-httpd" ]; then
+-        OSTREE_HTTPD="${CMD_PREFIX} ${test_srcdir}/../../libostree/ostree-trivial-httpd"
+-    else
+-        OSTREE_HTTPD="${CMD_PREFIX} ostree trivial-httpd"
++    # trivial-httpd is now the test directory.
++    OSTREE_HTTPD="${G_TEST_BUILDDIR}/ostree-trivial-httpd"
++    if ! [ -x "${OSTREE_HTTPD}" ]; then
++        fatal "Failed to find ${OSTREE_HTTPD}"
+     fi
++    OSTREE_HTTPD="${CMD_PREFIX} ${OSTREE_HTTPD}"
+ fi
+ 
+ files_are_hardlinked() {
+-- 
+2.22.0
+
diff --git a/nixpkgs/pkgs/tools/misc/ostree/default.nix b/nixpkgs/pkgs/tools/misc/ostree/default.nix
new file mode 100644
index 000000000000..8ec9fc1d4886
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ostree/default.nix
@@ -0,0 +1,70 @@
+{ stdenv, fetchurl, fetchpatch, pkgconfig, gtk-doc, gobject-introspection, gjs, nixosTests
+, glib, systemd, xz, e2fsprogs, libsoup, gpgme, which, autoconf, automake, libtool, fuse, utillinuxMinimal, libselinux
+, libarchive, libcap, bzip2, yacc, libxslt, docbook_xsl, docbook_xml_dtd_42, python3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ostree";
+  version = "2019.2";
+
+  outputs = [ "out" "dev" "man" "installedTests" ];
+
+  src = fetchurl {
+    url = "https://github.com/ostreedev/ostree/releases/download/v${version}/libostree-${version}.tar.xz";
+    sha256 = "0nbbrz3p4ms6vpl272q6fimqvizryw2a8mnfqcn69xf03sz5204y";
+  };
+
+  patches = [
+    # Workarounds for https://github.com/ostreedev/ostree/issues/1592
+    ./fix-1592.patch
+    # Disable test-gpg-verify-result.test,
+    # https://github.com/ostreedev/ostree/issues/1634
+    ./disable-test-gpg-verify-result.patch
+    # Tests access the helper using relative path
+    # https://github.com/ostreedev/ostree/issues/1593
+    ./01-Drop-ostree-trivial-httpd-CLI-move-to-tests-director.patch
+  ];
+
+  nativeBuildInputs = [
+    autoconf automake libtool pkgconfig gtk-doc gobject-introspection which yacc
+    libxslt docbook_xsl docbook_xml_dtd_42
+  ];
+
+  buildInputs = [
+    glib systemd e2fsprogs libsoup gpgme fuse libselinux libcap
+    libarchive bzip2 xz
+    utillinuxMinimal # for libmount
+    (python3.withPackages (p: with p; [ pyyaml ])) gjs # for tests
+  ];
+
+  preConfigure = ''
+    env NOCONFIGURE=1 ./autogen.sh
+  '';
+
+  enableParallelBuilding = true;
+
+  configureFlags = [
+    "--with-systemdsystemunitdir=${placeholder "out"}/lib/systemd/system"
+    "--with-systemdsystemgeneratordir=${placeholder "out"}/lib/systemd/system-generators"
+    "--enable-installed-tests"
+  ];
+
+  makeFlags = [
+    "installed_testdir=${placeholder "installedTests"}/libexec/installed-tests/libostree"
+    "installed_test_metadir=${placeholder "installedTests"}/share/installed-tests/libostree"
+  ];
+
+  passthru = {
+    tests = {
+      installedTests = nixosTests.installed-tests.ostree;
+    };
+  };
+
+  meta = with stdenv.lib; {
+    description = "Git for operating system binaries";
+    homepage = https://ostree.readthedocs.io/en/latest/;
+    license = licenses.lgpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ copumpkin ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ostree/disable-test-gpg-verify-result.patch b/nixpkgs/pkgs/tools/misc/ostree/disable-test-gpg-verify-result.patch
new file mode 100644
index 000000000000..8da2fb82dd0e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ostree/disable-test-gpg-verify-result.patch
@@ -0,0 +1,12 @@
+diff --git a/Makefile-tests.am b/Makefile-tests.am
+index b11fde89..82937a67 100644
+--- a/Makefile-tests.am
++++ b/Makefile-tests.am
+@@ -245,7 +245,6 @@ endif
+ 
+ _installed_or_uninstalled_test_programs = tests/test-varint tests/test-ot-unix-utils tests/test-bsdiff tests/test-mutable-tree \
+ 	tests/test-keyfile-utils tests/test-ot-opt-utils tests/test-ot-tool-util \
+-	tests/test-gpg-verify-result tests/test-checksum tests/test-lzma tests/test-rollsum \
+ 	tests/test-basic-c tests/test-sysroot-c tests/test-pull-c tests/test-repo tests/test-include-ostree-h
+ 
+ if USE_LIBSOUP
diff --git a/nixpkgs/pkgs/tools/misc/ostree/fix-1592.patch b/nixpkgs/pkgs/tools/misc/ostree/fix-1592.patch
new file mode 100644
index 000000000000..1eccd74bfa7d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ostree/fix-1592.patch
@@ -0,0 +1,138 @@
+diff --git a/tests/pull-test.sh b/tests/pull-test.sh
+index a8bc49a9..4a08ebb5 100644
+--- a/tests/pull-test.sh
++++ b/tests/pull-test.sh
+@@ -275,7 +275,7 @@
+ if ${CMD_PREFIX} ostree --repo=mirrorrepo-local pull-local otherrepo 2>err.txt; then
+     fatal "pull with mixed refs succeeded?"
+ fi
+-assert_file_has_content err.txt "error: Invalid ref name origin:main"
++assert_file_has_content err.txt "Invalid ref name origin:main"
+ ${CMD_PREFIX} ostree --repo=mirrorrepo-local pull-local otherrepo localbranch
+ ${CMD_PREFIX} ostree --repo=mirrorrepo-local rev-parse localbranch
+ ${CMD_PREFIX} ostree --repo=mirrorrepo-local fsck
+@@ -286,7 +286,7 @@
+     fatal "pulled nonexistent branch"
+ fi
+ # So true
+-assert_file_has_content_literal err.txt "error: Refspec 'nosuchbranch' not found"
++assert_file_has_content_literal err.txt "Refspec 'nosuchbranch' not found"
+ echo "ok pull-local nonexistent branch"
+ 
+ cd ${test_tmpdir}
+@@ -593,5 +593,5 @@
+ if ${CMD_PREFIX} ostree --repo=repo pull origin main 2>err.txt; then
+     fatal "pull of invalid ref succeeded"
+ fi
+-assert_file_has_content_literal err.txt 'error: Fetching checksum for ref ((empty), main): Invalid rev lots of html here  lots of html here  lots of html here  lots of'
++assert_file_has_content_literal err.txt 'Fetching checksum for ref ((empty), main): Invalid rev lots of html here  lots of html here  lots of html here  lots of'
+ echo "ok pull got HTML for a ref"
+diff --git a/tests/test-config.sh b/tests/test-config.sh
+index 7e913d32..69d1675d 100755
+--- a/tests/test-config.sh
++++ b/tests/test-config.sh
+@@ -46,7 +46,7 @@
+ if ${CMD_PREFIX} ostree config --repo=repo get --group=core lock-timeout-secs extra 2>err.txt; then
+     assert_not_reached "ostree config get should error out if too many arguments are given"
+ fi
+-assert_file_has_content err.txt "error: Too many arguments given"
++assert_file_has_content err.txt "Too many arguments given"
+ echo "ok config get"
+ 
+ ${CMD_PREFIX} ostree config --repo=repo set core.mode bare-user-only
+@@ -63,7 +63,7 @@
+ if ${CMD_PREFIX} ostree config --repo=repo set --group=core lock-timeout-secs 120 extra 2>err.txt; then
+     assert_not_reached "ostree config set should error out if too many arguments are given"
+ fi
+-assert_file_has_content err.txt "error: Too many arguments given"
++assert_file_has_content err.txt "Too many arguments given"
+ echo "ok config set"
+ 
+ # Check that "ostree config unset" works
+@@ -78,7 +78,7 @@
+ fi
+ # Check for any character where quotation marks would be as they appear differently in the Fedora and Debian
+ # test suites (“” and '' respectively). See: https://github.com/ostreedev/ostree/pull/1839
+-assert_file_has_content err.txt "error: Key file does not have key .lock-timeout-secs. in group .core."
++assert_file_has_content err.txt "Key file does not have key .lock-timeout-secs. in group .core."
+ 
+ # Check that it's idempotent
+ ${CMD_PREFIX} ostree config --repo=repo unset core.lock-timeout-secs
+@@ -95,5 +95,5 @@
+ if ${CMD_PREFIX} ostree config --repo=repo unset core.lock-timeout-secs extra 2>err.txt; then
+     assert_not_reached "ostree config unset should error out if too many arguments are given"
+ fi
+-assert_file_has_content err.txt "error: Too many arguments given"
++assert_file_has_content err.txt "Too many arguments given"
+ echo "ok config unset"
+diff --git a/tests/test-fsck-collections.sh b/tests/test-fsck-collections.sh
+index dc6bcfeb..4a5eef55 100755
+--- a/tests/test-fsck-collections.sh
++++ b/tests/test-fsck-collections.sh
+@@ -100,7 +100,7 @@
+ if ${CMD_PREFIX} ostree fsck --repo=repo --verify-bindings > fsck 2> fsck-error; then
+     assert_not_reached "fsck unexpectedly succeeded after adding unbound ref!"
+ fi
+-assert_file_has_content fsck-error "Commit has no requested ref ‘new-ref’ in ref binding metadata (‘ref1’)"
++assert_file_has_content fsck-error "Commit has no requested ref .new-ref. in ref binding metadata (.ref1.)"
+ assert_file_has_content fsck "^Validating refs\.\.\.$"
+ 
+ echo "ok 3 fsck detects missing ref bindings"
+@@ -113,7 +113,7 @@
+ if ${CMD_PREFIX} ostree fsck --repo=repo --verify-bindings > fsck 2> fsck-error; then
+     assert_not_reached "fsck unexpectedly succeeded after adding unbound ref!"
+ fi
+-assert_file_has_content fsck-error "Commit has no requested ref ‘new-ref’ in ref binding metadata (‘ref1’)"
++assert_file_has_content fsck-error "Commit has no requested ref .new-ref. in ref binding metadata (.ref1.)"
+ assert_file_has_content fsck "^Validating refs\.\.\.$"
+ assert_file_has_content fsck "^Validating refs in collections\.\.\.$"
+ 
+@@ -127,7 +127,7 @@
+ if ${CMD_PREFIX} ostree fsck --repo=repo --verify-bindings > fsck 2> fsck-error; then
+     assert_not_reached "fsck unexpectedly succeeded after adding unbound ref!"
+ fi
+-assert_file_has_content fsck-error "Commit has collection ID ‘org\.example\.Collection’ in collection binding metadata, while the remote it came from has collection ID ‘org\.example\.Collection2’"
++assert_file_has_content fsck-error "Commit has collection ID .org\.example\.Collection. in collection binding metadata, while the remote it came from has collection ID .org\.example\.Collection2."
+ assert_file_has_content fsck "^Validating refs\.\.\.$"
+ assert_file_has_content fsck "^Validating refs in collections\.\.\.$"
+ 
+@@ -147,7 +147,7 @@
+ if ${CMD_PREFIX} ostree fsck --repo=repo --verify-back-refs > fsck 2> fsck-error; then
+     assert_not_reached "fsck unexpectedly succeeded after adding unbound ref!"
+ fi
+-assert_file_has_content fsck-error "Collection–ref (org\.example\.Collection, ref1) in bindings for commit .* does not exist"
++assert_file_has_content fsck-error 'Collection.ref (org\.example\.Collection, ref1) in bindings for commit .* does not exist'
+ assert_file_has_content fsck "^Validating refs\.\.\.$"
+ assert_file_has_content fsck "^Validating refs in collections\.\.\.$"
+ 
+@@ -186,7 +186,7 @@
+ if ${CMD_PREFIX} ostree fsck --repo=repo --verify-bindings > fsck 2> fsck-error; then
+     assert_not_reached "fsck unexpectedly succeeded after adding unbound ref!"
+ fi
+-assert_file_has_content fsck-error "Commit has no requested ref ‘new-ref’ in ref binding metadata (‘ref3’, ‘ref4’)"
++assert_file_has_content fsck-error "Commit has no requested ref .new-ref. in ref binding metadata (.ref3., .ref4.)"
+ assert_file_has_content fsck "^Validating refs\.\.\.$"
+ 
+ echo "ok 9 fsck detects missing ref bindings"
+@@ -205,7 +205,7 @@
+ if ${CMD_PREFIX} ostree fsck --repo=repo --verify-back-refs > fsck 2> fsck-error; then
+     assert_not_reached "fsck unexpectedly succeeded after adding unbound ref!"
+ fi
+-assert_file_has_content fsck-error "Ref ‘ref3’ in bindings for commit .* does not exist"
++assert_file_has_content fsck-error 'Ref .ref3. in bindings for commit .* does not exist'
+ assert_file_has_content fsck "^Validating refs\.\.\.$"
+ 
+ echo "ok 11 fsck ignores unreferenced ref bindings"
+diff --git a/tests/test-remote-add.sh b/tests/test-remote-add.sh
+index bb7eae89..62a3bcd7 100755
+--- a/tests/test-remote-add.sh
++++ b/tests/test-remote-add.sh
+@@ -83,7 +83,7 @@
+ if $OSTREE remote delete nosuchremote 2>err.txt; then
+     assert_not_reached "Deleting remote unexpectedly succeeded"
+ fi
+-assert_file_has_content err.txt "error: "
++assert_file_has_content err.txt "not found"
+ 
+ $OSTREE remote delete --if-exists nosuchremote
+ echo "ok"
diff --git a/nixpkgs/pkgs/tools/misc/otfcc/default.nix b/nixpkgs/pkgs/tools/misc/otfcc/default.nix
new file mode 100644
index 000000000000..4b28a7c45e5d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/otfcc/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchFromGitHub, premake5 }:
+
+stdenv.mkDerivation rec {
+  pname = "otfcc";
+  version = "0.9.6";
+
+  src = fetchFromGitHub {
+    owner = "caryll";
+    repo = "otfcc";
+    rev = "v${version}";
+    sha256 = "1rnjfqqyc6d9nhlh8if9k37wk94mcwz4wf3k239v6idg48nrk10b";
+  };
+
+  nativeBuildInputs = [ premake5 ];
+
+  # Don’t guess where our makefiles will end up. Just use current
+  # directory.
+  patchPhase = ''
+    substituteInPlace premake5.lua \
+      --replace 'location "build/gmake"' 'location "."'
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp bin/release-x*/otfcc* $out/bin/
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "Optimized OpenType builder and inspector";
+    homepage = https://github.com/caryll/otfcc;
+    license = licenses.asl20;
+    platforms = [ "i686-linux" "x86_64-linux" "x86_64-darwin" ];
+    maintainers = with maintainers; [ jfrankenau ttuegel ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/pal/default.nix b/nixpkgs/pkgs/tools/misc/pal/default.nix
new file mode 100644
index 000000000000..85bad70edc9c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pal/default.nix
@@ -0,0 +1,29 @@
+{stdenv, fetchurl, glib, gettext, readline, pkgconfig }:
+
+stdenv.mkDerivation rec {
+  name = "pal-0.4.3";
+  src = fetchurl {
+    url = "mirror://sourceforge/palcal/${name}.tgz";
+    sha256 = "072mahxvd7lcvrayl32y589w4v3vh7bmlcnhiksjylknpsvhqiyf";
+  };
+
+  patchPhase = ''
+    sed -i -e 's/-o root//' -e 's,ESTDIR}/etc,ESTDIR}'$out/etc, src/Makefile
+    sed -i -e 's,/etc/pal\.conf,'$out/etc/pal.conf, src/input.c
+  '';
+
+  makeFlags = [ "prefix=$(out)" ];
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ glib gettext readline ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = {
+    homepage = http://palcal.sourceforge.net/;
+    description = "Command-line calendar program that can keep track of events";
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = with stdenv.lib.maintainers; [viric];
+    platforms = with stdenv.lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pandoc-imagine/default.nix b/nixpkgs/pkgs/tools/misc/pandoc-imagine/default.nix
new file mode 100644
index 000000000000..811e44a6ce8e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pandoc-imagine/default.nix
@@ -0,0 +1,28 @@
+{ fetchFromGitHub, buildPythonApplication, lib, pandocfilters, six }:
+
+buildPythonApplication rec {
+  pname = "pandoc-imagine";
+  version = "unstable-2018-11-19";
+
+  src = fetchFromGitHub {
+    repo = "imagine";
+    owner = "hertogp";
+    rev = "cc9be85155666c2d12d47a71690ba618cea1fac2";
+    sha256 = "0iksh9081g488yfjzd24bz4lm1nrrjamph1vynx3imrcfgyq7nsb";
+  };
+
+  propagatedBuildInputs = [ pandocfilters six ];
+
+  # No tests in archive
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = src.meta.homepage;
+    description = ''
+      A pandoc filter that will turn code blocks tagged with certain classes
+      into images or ASCII art
+    '';
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ synthetica ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/paps/default.nix b/nixpkgs/pkgs/tools/misc/paps/default.nix
new file mode 100644
index 000000000000..8084f49f1b38
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/paps/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub
+, autoconf, automake, pkgconfig, intltool, pango }:
+
+stdenv.mkDerivation rec {
+  pname = "paps";
+  version = "0.7.1";
+
+  src = fetchFromGitHub {
+    owner = "dov";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "129wpm2ayxs6qfh2761d4x9c034ivb2bcmmcnl56qs4448qb9495";
+  };
+
+  nativeBuildInputs = [ autoconf automake pkgconfig intltool ];
+  buildInputs = [ pango ];
+
+  preConfigure = ''
+    ./autogen.sh
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Pango to PostScript converter";
+    homepage = "https://github.com/dov/paps";
+    license = licenses.lgpl2;
+    maintainers = with maintainers; [ etu ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/parallel-rust/default.nix b/nixpkgs/pkgs/tools/misc/parallel-rust/default.nix
new file mode 100644
index 000000000000..c77ca56655ab
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/parallel-rust/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "parallel-rust";
+  version = "0.11.3";
+
+  src = fetchFromGitHub {
+    owner = "mmstick";
+    repo = "parallel";
+    rev = version;
+    sha256 = "1bb1m3ckkrxlnw9w24ig70bd1zwyrbaw914q3xz5yv43c0l6pn9c";
+  };
+
+  cargoSha256 = "0ssawp06fidsppvfzk0balf4fink2vym9688r7k7x7pb2z7cvyqc";
+
+  patches = [ ./fix_cargo_lock_version.patch ];
+
+  meta = with stdenv.lib; {
+    description = "A command-line CPU load balancer written in Rust";
+    homepage = https://github.com/mmstick/parallel;
+    license = licenses.mit;
+    maintainers = [];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/parallel-rust/fix_cargo_lock_version.patch b/nixpkgs/pkgs/tools/misc/parallel-rust/fix_cargo_lock_version.patch
new file mode 100644
index 000000000000..75a1ba35e129
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/parallel-rust/fix_cargo_lock_version.patch
@@ -0,0 +1,12 @@
+diff --git a/Cargo.lock b/Cargo.lock
+index c01308d..dba3927 100644
+--- a/Cargo.lock
++++ b/Cargo.lock
+@@ -1,6 +1,6 @@
+ [root]
+ name = "parallel"
+-version = "0.11.2"
++version = "0.11.3"
+ dependencies = [
+  "arrayvec 0.3.23 (registry+https://github.com/rust-lang/crates.io-index)",
+  "itoa 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
diff --git a/nixpkgs/pkgs/tools/misc/parallel/default.nix b/nixpkgs/pkgs/tools/misc/parallel/default.nix
new file mode 100644
index 000000000000..d1a786b3b916
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/parallel/default.nix
@@ -0,0 +1,45 @@
+{ fetchurl, stdenv, perl, makeWrapper, procps }:
+
+stdenv.mkDerivation rec {
+  name = "parallel-20191222";
+
+  src = fetchurl {
+    url = "mirror://gnu/parallel/${name}.tar.bz2";
+    sha256 = "0xvw578440s9cc382n7z2l8npj30nwr6wwmkyxn2pj1pcszfjagy";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perl procps ];
+
+  postInstall = ''
+    wrapProgram $out/bin/parallel \
+      --prefix PATH : "${stdenv.lib.makeBinPath [ procps perl ]}"
+  '';
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    description = "Shell tool for executing jobs in parallel";
+    longDescription =
+      '' GNU Parallel is a shell tool for executing jobs in parallel.  A job
+         is typically a single command or a small script that has to be run
+         for each of the lines in the input.  The typical input is a list of
+         files, a list of hosts, a list of users, or a list of tables.
+
+         If you use xargs today you will find GNU Parallel very easy to use.
+         If you write loops in shell, you will find GNU Parallel may be able
+         to replace most of the loops and make them run faster by running
+         jobs in parallel.  If you use ppss or pexec you will find GNU
+         Parallel will often make the command easier to read.
+
+         GNU Parallel makes sure output from the commands is the same output
+         as you would get had you run the commands sequentially.  This makes
+         it possible to use output from GNU Parallel as input for other
+         programs.
+      '';
+    homepage = https://www.gnu.org/software/parallel/;
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ pSub vrthra ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/parcellite/default.nix b/nixpkgs/pkgs/tools/misc/parcellite/default.nix
new file mode 100644
index 000000000000..46606e3b43be
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/parcellite/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub, autoreconfHook
+, gtk2, hicolor-icon-theme, intltool, pkgconfig
+, which, wrapGAppsHook, xdotool }:
+
+stdenv.mkDerivation rec {
+  pname = "parcellite";
+  version = "1.2.1";
+
+  src = fetchFromGitHub {
+    owner = "rickyrockrat";
+    repo = "parcellite";
+    rev = version;
+    sha256 = "19q4x6x984s6gxk1wpzaxawgvly5vnihivrhmja2kcxhzqrnfhiy";
+  };
+
+  nativeBuildInputs = [ autoreconfHook intltool pkgconfig wrapGAppsHook ];
+  buildInputs = [ gtk2 hicolor-icon-theme ];
+  NIX_LDFLAGS = "-lgio-2.0";
+
+  preFixup = ''
+    # Need which and xdotool on path to fix auto-pasting.
+    gappsWrapperArgs+=(--prefix PATH : "${which}/bin:${xdotool}/bin")
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Lightweight GTK clipboard manager";
+    homepage = https://github.com/rickyrockrat/parcellite;
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/parted/default.nix b/nixpkgs/pkgs/tools/misc/parted/default.nix
new file mode 100644
index 000000000000..0eed491e8a90
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/parted/default.nix
@@ -0,0 +1,71 @@
+{ stdenv
+, fetchurl
+, fetchpatch
+, lvm2
+, libuuid
+, gettext
+, readline
+, dosfstools
+, e2fsprogs
+, perl
+, python2
+, utillinux
+, check
+, enableStatic ? false
+}:
+
+stdenv.mkDerivation rec {
+  name = "parted-3.3";
+
+  src = fetchurl {
+    url = "mirror://gnu/parted/${name}.tar.xz";
+    sha256 = "0i1xp367wpqw75b20c3jnism3dg3yqj4a7a22p2jb1h1hyyv9qjp";
+  };
+
+  outputs = [ "out" "dev" "man" "info" ];
+
+  postPatch = ''
+    patchShebangs tests
+  '';
+
+  buildInputs = [ libuuid ]
+    ++ stdenv.lib.optional (readline != null) readline
+    ++ stdenv.lib.optional (gettext != null) gettext
+    ++ stdenv.lib.optional (lvm2 != null) lvm2;
+
+  configureFlags =
+       (if (readline != null)
+        then [ "--with-readline" ]
+        else [ "--without-readline" ])
+    ++ stdenv.lib.optional (lvm2 == null) "--disable-device-mapper"
+    ++ stdenv.lib.optional enableStatic "--enable-static";
+
+  # Tests were previously failing due to Hydra running builds as uid 0.
+  # That should hopefully be fixed now.
+  doCheck = !stdenv.hostPlatform.isMusl; /* translation test */
+  checkInputs = [ check dosfstools e2fsprogs perl python2 utillinux ];
+
+  meta = {
+    description = "Create, destroy, resize, check, and copy partitions";
+
+    longDescription = ''
+      GNU Parted is an industrial-strength package for creating, destroying,
+      resizing, checking and copying partitions, and the file systems on
+      them.  This is useful for creating space for new operating systems,
+      reorganising disk usage, copying data on hard disks and disk imaging.
+
+      It contains a library, libparted, and a command-line frontend, parted,
+      which also serves as a sample implementation and script backend.
+    '';
+
+    homepage = https://www.gnu.org/software/parted/;
+    license = stdenv.lib.licenses.gpl3Plus;
+
+    maintainers = [
+      # Add your name here!
+    ];
+
+    # GNU Parted requires libuuid, which is part of util-linux-ng.
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/partition-manager/default.nix b/nixpkgs/pkgs/tools/misc/partition-manager/default.nix
new file mode 100644
index 000000000000..ab3c4b5a6c46
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/partition-manager/default.nix
@@ -0,0 +1,32 @@
+{ mkDerivation, fetchurl, lib
+, extra-cmake-modules, kdoctools, wrapGAppsHook, wrapQtAppsHook
+, kconfig, kcrash, kinit, kpmcore
+, eject, libatasmart , utillinux, qtbase
+}:
+
+let
+  pname = "partitionmanager";
+in mkDerivation rec {
+  name = "${pname}-${version}";
+  version = "3.3.1";
+
+  src = fetchurl {
+    url = "mirror://kde/stable/${pname}/${version}/src/${name}.tar.xz";
+    sha256 = "0jhggb4xksb0k0mj752n6pz0xmccnbzlp984xydqbz3hkigra1si";
+  };
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [ extra-cmake-modules kdoctools wrapGAppsHook wrapQtAppsHook ];
+
+  # refer to kpmcore for the use of eject
+  buildInputs = [ eject libatasmart utillinux ];
+  propagatedBuildInputs = [ kconfig kcrash kinit kpmcore ];
+
+  meta = with lib; {
+    description = "KDE Partition Manager";
+    license = licenses.gpl2;
+    homepage = https://www.kde.org/applications/system/kdepartitionmanager/;
+    maintainers = with maintainers; [ peterhoeg ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pastebinit/default.nix b/nixpkgs/pkgs/tools/misc/pastebinit/default.nix
new file mode 100644
index 000000000000..c2c8e2b85733
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pastebinit/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, python3 }:
+
+stdenv.mkDerivation rec {
+  version = "1.5";
+  pname = "pastebinit";
+
+  src = fetchurl {
+    url = "https://launchpad.net/pastebinit/trunk/${version}/+download/${pname}-${version}.tar.bz2";
+    sha256 = "0mw48fgm9lyh9d3pw997fccmglzsjccf2y347gxjas74wx6aira2";
+  };
+
+  buildInputs = [ python3 ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mkdir -p $out/etc
+    cp -a pastebinit $out/bin
+    cp -a pastebin.d $out/etc
+    substituteInPlace $out/bin/pastebinit --replace "'/etc/pastebin.d" "'$out/etc/pastebin.d"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://launchpad.net/pastebinit;
+    description = "A software that lets you send anything you want directly to a pastebin from the command line";
+    maintainers = with maintainers; [ lethalman ];
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/patdiff/default.nix b/nixpkgs/pkgs/tools/misc/patdiff/default.nix
new file mode 100644
index 000000000000..1c5e5b044741
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/patdiff/default.nix
@@ -0,0 +1,12 @@
+{ ocamlPackages }:
+
+with ocamlPackages;
+
+janePackage {
+  pname = "patdiff";
+  hash = "04krzn6rj2r81z55pms5ayk6bxhlxrm006cbhy0m6rc69a0h00lh";
+  buildInputs = [ core_extended expect_test_helpers patience_diff ocaml_pcre shell ];
+  meta = {
+    description = "File Diff using the Patience Diff algorithm";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pazi/default.nix b/nixpkgs/pkgs/tools/misc/pazi/default.nix
new file mode 100644
index 000000000000..d3df890385f8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pazi/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchFromGitHub, rustPlatform, darwin }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "pazi";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "euank";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0z8x70mwg0mvz6iap92gil37d4kpg5dizlyfx3zk7984ynycgap8";
+  };
+
+  buildInputs = stdenv.lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.Security ];
+
+  cargoSha256 = "0nqcp54nwv4ic5jc3cgg15rh8dgkixfgkwb5q47rv8ding4cd0j5";
+
+  meta = with stdenv.lib; {
+    description = "An autojump \"zap to directory\" helper";
+    homepage = https://github.com/euank/pazi;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ bbigras ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pb_cli/default.nix b/nixpkgs/pkgs/tools/misc/pb_cli/default.nix
new file mode 100644
index 000000000000..858422b85328
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pb_cli/default.nix
@@ -0,0 +1,39 @@
+{ screenshots ? true, video ? false, clipboard ? true
+, stdenv, jq, curl, fetchFromGitHub, makeWrapper, maim ? null, xclip ? null, capture ? null }:
+
+assert screenshots -> maim != null;
+assert video -> capture != null;
+assert clipboard -> xclip != null;
+
+stdenv.mkDerivation rec {
+  pname = "pb_cli-unstable";
+  version = "2019-03-10";
+
+  src = fetchFromGitHub {
+    owner = "ptpb";
+    repo = "pb_cli";
+    rev  = "6b9ce1ee45fe651d06d7c479a20026a173dd328b";
+    sha256 = "0w6a789zffvz4ixsb92q45n5s4xyx7s2l2f07972i3dajaaai8z7";
+  };
+
+  buildInputs = [ makeWrapper ];
+
+  liveDeps = [ jq curl ] ++ stdenv.lib.optional screenshots maim
+                         ++ stdenv.lib.optional video capture
+                         ++ stdenv.lib.optional clipboard xclip;
+
+  installPhase = ''
+    install -Dm755 src/pb.sh $out/bin/pb
+
+    patchShebangs $out/bin/pb
+    wrapProgram $out/bin/pb \
+      --prefix PATH : '${stdenv.lib.makeBinPath liveDeps}'
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A no bullshit 0x0.st client";
+    homepage = "https://github.com/ptpb/pb_cli";
+    maintainers = [ maintainers.ar1a ];
+    license = licenses.gpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pdd/default.nix b/nixpkgs/pkgs/tools/misc/pdd/default.nix
new file mode 100644
index 000000000000..f94d2cc27379
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pdd/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchFromGitHub, buildPythonApplication, dateutil }:
+
+buildPythonApplication rec {
+  pname = "pdd";
+  version = "1.4";
+
+  src = fetchFromGitHub {
+    owner = "jarun";
+    repo = "pdd";
+    rev = "v${version}";
+    sha256 = "1cirb8mmxxadks7az6a3a4sp8djv45cwa9dx0zrarzfmw0x7xb9g";
+  };
+
+  format = "other";
+
+  propagatedBuildInputs = [ dateutil ];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/jarun/pdd";
+    description = "Tiny date, time diff calculator";
+    longDescription = ''
+      There are times you want to check how old you are (in years, months, days)
+      or how long you need to wait for the next flash sale or the number of days
+      left of your notice period in your current job. pdd (Python3 Date Diff) is
+      a small cmdline utility to calculate date and time difference. If no
+      program arguments are specified it shows the current date, time and
+      timezone.
+    '';
+    maintainers = [ maintainers.infinisil ];
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/peruse/default.nix b/nixpkgs/pkgs/tools/misc/peruse/default.nix
new file mode 100644
index 000000000000..a5ce018545a7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/peruse/default.nix
@@ -0,0 +1,35 @@
+{
+  mkDerivation, fetchFromGitHub, lib,
+  extra-cmake-modules, kdoctools, wrapGAppsHook,
+  baloo, karchive, kconfig, kcrash, kfilemetadata, kinit, kirigami2, knewstuff, plasma-framework
+}:
+
+let
+  pname = "peruse";
+  version = "1.2.20180816";
+
+in mkDerivation {
+  name = "${pname}-${version}";
+
+  # The last formal release from 2016 uses kirigami1 which is deprecated
+  src = fetchFromGitHub {
+    owner  = "KDE";
+    repo   = pname;
+    rev    = "f50027c6c9c680c4e2ce1dba4ec43364e661e7a3";
+    sha256 = "1217fa6w9ryh499agcc67mnp8k9dah4r0sw74qzsbk4p154jbgch";
+  };
+
+  nativeBuildInputs = [ extra-cmake-modules kdoctools wrapGAppsHook ];
+
+  propagatedBuildInputs = [ baloo karchive kconfig kcrash kfilemetadata kinit kirigami2 knewstuff plasma-framework ];
+
+  pathsToLink = [ "/etc/xdg/peruse.knsrc"];
+
+  meta = with lib; {
+    homepage = "https://peruse.kde.org";
+    description = "A comic book reader";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ peterhoeg ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/pfetch/default.nix b/nixpkgs/pkgs/tools/misc/pfetch/default.nix
new file mode 100644
index 000000000000..a858ad696af8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pfetch/default.nix
@@ -0,0 +1,27 @@
+{ stdenvNoCC, lib, fetchFromGitHub }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "pfetch";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "dylanaraps";
+    repo = "pfetch";
+    rev = version;
+    sha256 = "180vvbmvak888vs4dgzlmqk0ss4qfsz09700n4p8s68j7krkxsfq";
+  };
+
+  dontBuild = true;
+
+  installPhase = ''
+    install -Dm755 -t $out/bin pfetch
+  '';
+
+  meta = with lib; {
+    description = "A pretty system information tool written in POSIX sh";
+    homepage = https://github.com/dylanaraps/pfetch;
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ equirosa ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pg_flame/default.nix b/nixpkgs/pkgs/tools/misc/pg_flame/default.nix
new file mode 100644
index 000000000000..fbeba0ff1bdc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pg_flame/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "pg_flame";
+  version = "1.2";
+
+  src = fetchFromGitHub {
+    owner = "mgartner";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1a03vxqnga83mhjp7pkl0klhkyfaby7ncbwm45xbl8c7s6zwhnw2";
+  };
+
+  modSha256 = "0j7qpvji546z0cfjijdd66l0vsl0jmny6i1n9fsjqjgjpwg26naq";
+
+  meta = with lib; {
+    description = "Flamegraph generator for Postgres EXPLAIN ANALYZE output";
+    homepage = "https://github.com/mgartner/pg_flame";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ filalex77 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pg_top/default.nix b/nixpkgs/pkgs/tools/misc/pg_top/default.nix
new file mode 100644
index 000000000000..4f4bd7e754c4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pg_top/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, ncurses, postgresql }:
+
+stdenv.mkDerivation rec {
+  name = "pg_top-3.7.0";
+
+  src = fetchurl {
+    url = "http://pgfoundry.org/frs/download.php/1781/${name}.tar.gz";
+    sha256 = "17xrv0l58rv3an06gkajzw0gg6v810xx6vl137an1iykmhvfh7h2";
+  };
+
+  buildInputs = [ ncurses postgresql ];
+
+  meta = with stdenv.lib; {
+    description = "A 'top' like tool for PostgreSQL";
+    longDescription = '' 
+      pg_top allows you to: 
+       * View currently running SQL statement of a process.
+       * View query plan of a currently running SQL statement.
+       * View locks held by a process.
+       * View user table statistics.
+       * View user index statistics.
+    '';
+
+    homepage = http://ptop.projects.postgresql.org/;
+    platforms = platforms.linux;
+    license = licenses.free; # see commands.c
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pgcenter/default.nix b/nixpkgs/pkgs/tools/misc/pgcenter/default.nix
new file mode 100644
index 000000000000..7cb810b2fe2d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pgcenter/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "pgcenter";
+  version = "0.6.4";
+
+  src = fetchFromGitHub {
+    owner  = "lesovsky";
+    repo   = "pgcenter";
+    rev    = "v${version}";
+    sha256 = "0p8ck4s5jj53nc638darhwbylcsslfmfz72bwy6wxby9iqi9kq6b";
+  };
+
+  modSha256 = "0kassq52v07zmffs6l066g0d3kfv6wmrh9g5cgk79bmyq13clqjj";
+
+  meta = with stdenv.lib; {
+    homepage = https://pgcenter.org/;
+    description = "Command-line admin tool for observing and troubleshooting PostgreSQL";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pgmetrics/default.nix b/nixpkgs/pkgs/tools/misc/pgmetrics/default.nix
new file mode 100644
index 000000000000..bfacb7135672
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pgmetrics/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "pgmetrics";
+  version = "1.7.1";
+
+  src = fetchFromGitHub {
+    owner  = "rapidloop";
+    repo   = pname;
+    rev    = "v${version}";
+    sha256 = "17rr6rjdxg8gdljf65zkn3bl1kmnlp2gkhiq7slxslh8n9iz4wjs";
+  };
+
+  modSha256 = "0llbx2sgcx95ym2q4l3334rdj3nkgr9z5jyp8406cp3k1ixi7gdb";
+
+  meta = with stdenv.lib; {
+    homepage = https://pgmetrics.io/;
+    description = "Collect and display information and stats from a running PostgreSQL server";
+    license = licenses.asl20;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/phoronix-test-suite/default.nix b/nixpkgs/pkgs/tools/misc/phoronix-test-suite/default.nix
new file mode 100644
index 000000000000..bdb86cbb8020
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/phoronix-test-suite/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, php, which, gnused, makeWrapper, gnumake, gcc }:
+
+stdenv.mkDerivation rec {
+  pname = "phoronix-test-suite";
+  version = "9.2.1";
+
+  src = fetchurl {
+    url = "https://phoronix-test-suite.com/releases/${pname}-${version}.tar.gz";
+    sha256 = "00c5xgyn34psj538zrzql16z16532c9444vc5asg7qhrcylpqpk7";
+  };
+
+  buildInputs = [ php ];
+  nativeBuildInputs = [ which gnused makeWrapper ];
+
+  installPhase = ''
+    ./install-sh $out
+    wrapProgram $out/bin/phoronix-test-suite \
+    --set PHP_BIN ${php}/bin/php \
+    --prefix PATH : ${stdenv.lib.makeBinPath [ gnumake gcc ]}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Open-Source, Automated Benchmarking";
+    homepage = https://www.phoronix-test-suite.com/;
+    maintainers = with maintainers; [ davidak ];
+    license = licenses.gpl3;
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/phraseapp-client/default.nix b/nixpkgs/pkgs/tools/misc/phraseapp-client/default.nix
new file mode 100644
index 000000000000..dd07fee34054
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/phraseapp-client/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "phraseapp-client";
+  version = "1.11.0";
+
+  goPackagePath = "github.com/phrase/phraseapp-client";
+  subPackages = [ "." ];
+
+  src = fetchFromGitHub {
+    owner = "phrase";
+    repo = "phraseapp-client";
+    rev = version;
+    sha256 = "0lfx0wv95hgczi74qnkw2cripwgvl53z2gi5i6nyflisy4r7vvkr";
+  };
+
+  postInstall = ''
+    ln -s $bin/bin/phraseapp-client $bin/bin/phraseapp
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://docs.phraseapp.com;
+    description = "PhraseApp API v2 Command Line Client";
+    platforms = platforms.all;
+    license = licenses.mit;
+    maintainers = with maintainers; [ manveru ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pick/default.nix b/nixpkgs/pkgs/tools/misc/pick/default.nix
new file mode 100644
index 000000000000..ceb2bace7db9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pick/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, ncurses, pkgconfig }:
+
+stdenv.mkDerivation rec {
+  pname = "pick";
+  version = "2.0.2";
+
+  src = fetchFromGitHub {
+    owner = "calleerlandsson";
+    repo = "pick";
+    rev = "v${version}";
+    sha256 = "0wm3220gqrwldiq0rjdraq5mw3i7d58zwzls8234sx9maf59h0k0";
+  };
+
+  buildInputs = [ ncurses ];
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+
+  meta = with stdenv.lib; {
+    inherit (src.meta) homepage;
+    description = "Fuzzy text selection utility";
+    license = licenses.mit;
+    maintainers = [ maintainers.womfoo ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/picocom/default.nix b/nixpkgs/pkgs/tools/misc/picocom/default.nix
new file mode 100644
index 000000000000..1ad219403687
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/picocom/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromGitHub, makeWrapper, lrzsz, IOKit }:
+
+assert stdenv.isDarwin -> IOKit != null;
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  pname = "picocom";
+  version = "3.1";
+
+  src = fetchFromGitHub {
+    owner = "npat-efault";
+    repo = "picocom";
+    rev = version;
+    sha256 = "1vvjydqf0ax47nvdyyl67jafw5b3sfsav00xid6qpgia1gs2r72n";
+  };
+
+  buildInputs = [ makeWrapper ]
+    ++ optionals stdenv.isDarwin [ IOKit ];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man/man1
+    cp picocom $out/bin
+    cp picocom.1 $out/share/man/man1
+
+    wrapProgram $out/bin/picocom \
+      --prefix PATH ":" "${lrzsz}/bin"
+  '';
+
+  meta = {
+    description = "Minimal dumb-terminal emulation program";
+    homepage = https://github.com/npat-efault/picocom/;
+    license = stdenv.lib.licenses.gpl2Plus;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pipelight/default.nix b/nixpkgs/pkgs/tools/misc/pipelight/default.nix
new file mode 100644
index 000000000000..4c7e9d0892ca
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pipelight/default.nix
@@ -0,0 +1,61 @@
+{ stdenv, fetchurl, bash, cabextract, curl, gnupg, libX11, libGLU, libGL, wine-staging }:
+
+let
+  wine_custom = wine-staging;
+
+  mozillaPluginPath = "/lib/mozilla/plugins";
+
+
+in stdenv.mkDerivation rec {
+
+  version = "0.2.8.2";
+
+  pname = "pipelight";
+
+  src = fetchurl {
+    url = "https://bitbucket.org/mmueller2012/pipelight/get/v${version}.tar.gz";
+    sha256 = "1kyy6knkr42k34rs661r0f5sf6l1s2jdbphdg89n73ynijqmzjhk";
+  };
+
+  buildInputs = [ wine_custom libX11 libGLU libGL curl ];
+
+  NIX_CFLAGS_COMPILE = [ "-fpermissive" ];
+
+  patches = [ ./pipelight.patch ];
+
+  configurePhase = ''
+    patchShebangs .
+    ./configure \
+      --prefix=$out \
+      --moz-plugin-path=$out/${mozillaPluginPath} \
+      --wine-path=${wine_custom} \
+      --gpg-exec=${gnupg}/bin/gpg \
+      --bash-interp=${bash}/bin/bash \
+      --downloader=${curl.bin}/bin/curl
+      $configureFlags
+  '';
+
+  passthru = {
+    mozillaPlugin = mozillaPluginPath;
+    wine = wine_custom;
+  };
+
+  postInstall = ''
+    $out/bin/pipelight-plugin --create-mozilla-plugins
+  '';
+
+  preFixup = ''
+    substituteInPlace $out/share/pipelight/install-dependency \
+      --replace cabextract ${cabextract}/bin/cabextract
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = {
+    homepage = http://pipelight.net/;
+    license = with stdenv.lib.licenses; [ mpl11 gpl2 lgpl21 ];
+    description = "A wrapper for using Windows plugins in Linux browsers";
+    maintainers = with stdenv.lib.maintainers; [ skeidel ];
+    platforms = [ "x86_64-linux" "i686-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pipelight/pipelight.patch b/nixpkgs/pkgs/tools/misc/pipelight/pipelight.patch
new file mode 100644
index 000000000000..fc6666f8f12b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pipelight/pipelight.patch
@@ -0,0 +1,122 @@
+diff -urN pipelight.old/bin/pipelight-plugin.in pipelight.new/bin/pipelight-plugin.in
+--- pipelight.old/bin/pipelight-plugin.in	2014-07-19 22:53:02.000000000 +0200
++++ pipelight.new/bin/pipelight-plugin.in	2014-07-27 00:02:39.275834030 +0200
+@@ -92,7 +92,7 @@
+	PLUGIN_PATH=$(realpath "$PLUGIN_PATH")
+
+	# Global installation
+-	if [ $(/usr/bin/id -u) -eq 0 ]; then
++	if [ $(id -u) -eq 0 ]; then
+		INSTALLDIR="$PLUGIN_PATH"
+
+	# Use environment variable (only if it doesn't point to the global directory)
+@@ -594,7 +594,7 @@
+	fi
+
+	# Ensure the signature is valid, extract the content
+-	if ! @@GPG@@ --batch --no-default-keyring --keyring "$PIPELIGHT_SHARE_PATH/sig-install-dependency.gpg" --decrypt "$tmpfile" > "$decfile"; then
++	if ! @@GPG@@ --homedir /tmp --batch --no-default-keyring --keyring "$PIPELIGHT_SHARE_PATH/sig-install-dependency.gpg" --decrypt "$tmpfile" > "$decfile"; then
+		rm "$tmpfile"
+		rm "$decfile"
+		echo ""
+@@ -630,24 +630,10 @@
+	return 0
+ }
+
+-# Use fetch on FreeBSD if wget is not available
+-if command -v wget >/dev/null 2>&1; then
+-	download_file()
+-	{
+-		wget -O "$1" "$2"
+-	}
+-elif command -v fetch >/dev/null 2>&1; then
+-	download_file()
+-	{
+-		fetch -o "$1" "$2"
+-	}
+-else
+-	download_file()
+-	{
+-		echo "ERROR: Could neither find wget nor fetch. Unable to download file!" >&2
+-		return 1
+-	}
+-fi
++download_file()
++{
++	curl --cacert /etc/ssl/certs/ca-certificates.crt -o "$1" "$2"
++}
+
+ # Use shasum instead of sha256sum on MacOS / *BSD
+ if ! command -v sha256sum >/dev/null 2>&1 && command -v shasum >/dev/null 2>&1; then
+diff -urN pipelight.old/configure pipelight.new/configure
+--- pipelight.old/configure	2014-07-19 22:53:02.000000000 +0200
++++ pipelight.new/configure	2014-07-26 23:52:13.690881447 +0200
+@@ -66,12 +66,8 @@
+ datadir=""
+ libdir=""
+ mandir=""
+-bash_interp="$(which bash)"
+-if which gpg &> /dev/null; then
+-	gpg_exec="$(which gpg)"
+-else
+-	gpg_exec="/usr/bin/gpg"
+-fi
++bash_interp=bash
++gpg_exec=gpg
+ moz_plugin_path=""
+ gcc_runtime_dlls=""
+ so_mode="0644"
+diff -urN pipelight.old/share/install-dependency pipelight.new/share/install-dependency
+--- pipelight.old/share/install-dependency	2014-07-19 22:53:02.000000000 +0200
++++ pipelight.new/share/install-dependency	2014-07-26 23:26:18.431938546 +0200
+@@ -734,42 +734,14 @@
+	return 0
+ }
+
+-# Use fetch on FreeBSD if wget is not available
+-if command -v wget >/dev/null 2>&1; then
+-	download_file()
+-	{
+-		wget -O "$1" "$2"
+-	}
+-	get_download_size()
+-	{
+-		local filesize="$(wget -O- "$1" --spider --server-response 2>&1 | sed -ne '/Content-Length/{s/.*: //;p}')"
+-		local re='^[0-9]+$'
+-		if [[ "$filesize" -ne "0" ]] && [[ "$filesize" =~ $re ]]; then
+-			echo "$(($filesize/(1024*1024)))"
+-		else
+-			echo "N/A"
+-		fi
+-	}
+-elif command -v fetch >/dev/null 2>&1; then
+-	download_file()
+-	{
+-		fetch -o "$1" "$2"
+-	}
+-	get_download_size()
+-	{
+-		echo "N/A"
+-	}
+-else
+-	download_file()
+-	{
+-		echo "ERROR: Could neither find wget nor fetch. Unable to download file!" >&2
+-		return 1
+-	}
+-	get_download_size()
+-	{
+-		echo "N/A"
+-	}
+-fi
++download_file()
++{
++	curl --cacert /etc/ssl/certs/ca-certificates.crt -o "$1" "$2"
++}
++get_download_size()
++{
++	echo "N/A"
++}
+
+ # Use shasum instead of sha256sum on MacOS / *BSD
+ if ! command -v sha256sum >/dev/null 2>&1 && command -v shasum >/dev/null 2>&1; then
diff --git a/nixpkgs/pkgs/tools/misc/pipreqs/default.nix b/nixpkgs/pkgs/tools/misc/pipreqs/default.nix
new file mode 100644
index 000000000000..9925021b3f64
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pipreqs/default.nix
@@ -0,0 +1,24 @@
+{ lib, python2Packages }:
+
+# Using python 2 because when packaging with python 3 pipreqs fails to parse python 2 code.
+python2Packages.buildPythonApplication rec {
+  pname = "pipreqs";
+  version = "0.4.10";
+
+  src = python2Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "0fdr3mbxjpmrxr7yfc1sn9kbpcyb0qwafimhhrrqvf989dj1sdcy";
+  };
+
+  propagatedBuildInputs = with python2Packages; [ yarg docopt ];
+
+  # Tests requires network access. Works fine without sandboxing
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Generate requirements.txt file for any project based on imports";
+    homepage = https://github.com/bndr/pipreqs;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ psyanticy ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pixd/default.nix b/nixpkgs/pkgs/tools/misc/pixd/default.nix
new file mode 100644
index 000000000000..a16333f6e440
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pixd/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub }:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  pname = "pixd";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "FireyFly";
+    repo = "pixd";
+    rev = "v${version}";
+    sha256 = "1vmkbs39mg5vwmkzfcrxqm6p8zr9sj4qdwng9icmyf5k34c34xdg";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = {
+    description = "Colourful visualization tool for binary files";
+    homepage = https://github.com/FireyFly/pixd;
+    maintainers = [ maintainers.FireyFly ];
+    license = licenses.mit;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pk2cmd/default.nix b/nixpkgs/pkgs/tools/misc/pk2cmd/default.nix
new file mode 100644
index 000000000000..c1db4f9d5978
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pk2cmd/default.nix
@@ -0,0 +1,26 @@
+{stdenv, fetchurl, libusb, makeWrapper}:
+
+stdenv.mkDerivation {
+  name = "pk2cmd-1.20";
+  src = fetchurl {
+    url = https://ww1.microchip.com/downloads/en/DeviceDoc/pk2cmdv1.20LinuxMacSource.tar.gz;
+    sha256 = "1yjpi2qshnqfpan4w3ggakkr3znfrx5cxkny92ka7v9na3g2fc4h";
+  };
+
+  makeFlags = [ "LIBUSB=${libusb.dev}" "linux" ];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/pk2
+    cp pk2cmd $out/bin
+    cp PK2DeviceFile.dat $out/share/pk2
+    wrapProgram $out/bin/pk2cmd --prefix PATH : $out/share/pk2
+  '';
+
+  buildInputs = [ libusb makeWrapper ];
+
+  meta = {
+    homepage = https://www.microchip.com/pickit2;
+    license = stdenv.lib.licenses.unfree; #MicroChip-PK2
+    description = "Microchip PIC programming software for the PICKit2 programmer";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pkgdiff/default.nix b/nixpkgs/pkgs/tools/misc/pkgdiff/default.nix
new file mode 100644
index 000000000000..3c9c0f9bfaff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pkgdiff/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, perl, wdiff }:
+
+stdenv.mkDerivation rec {
+  version = "1.7.2";
+  pname = "pkgdiff";
+
+  src = fetchFromGitHub {
+    owner = "lvc";
+    repo = "pkgdiff";
+    rev = version;
+    sha256 = "1ahknyx0s54frbd3gqh070lkv3j1b344jrs6m6p1s1lgwbd70vnb";
+  };
+
+  buildInputs = [ perl ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontBuild = true;
+
+  makeFlags = [ "prefix=$(out)" ];
+
+  postInstall = ''
+    wrapProgram $out/bin/pkgdiff --prefix PATH : ${lib.makeBinPath [ wdiff ]}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A tool for visualizing changes in Linux software packages";
+    homepage = https://lvc.github.io/pkgdiff/;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ sweber ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/plantuml/default.nix b/nixpkgs/pkgs/tools/misc/plantuml/default.nix
new file mode 100644
index 000000000000..ec56bb2b6684
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/plantuml/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, makeWrapper, jre, graphviz }:
+
+stdenv.mkDerivation rec {
+  version = "1.2019.13";
+  pname = "plantuml";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/plantuml/${version}/plantuml.${version}.jar";
+    sha256 = "0r8ahcnim7is7np68ci6ppzr07iyx417wi81gkckfyy5p4pwk8kz";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildCommand = ''
+    install -Dm644 $src $out/lib/plantuml.jar
+
+    mkdir -p $out/bin
+    makeWrapper ${jre}/bin/java $out/bin/plantuml \
+      --argv0 plantuml \
+      --set GRAPHVIZ_DOT ${graphviz}/bin/dot \
+      --add-flags "-jar $out/lib/plantuml.jar"
+
+    $out/bin/plantuml -help
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Draw UML diagrams using a simple and human readable text description";
+    homepage = http://plantuml.sourceforge.net/;
+    # "plantuml -license" says GPLv3 or later
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ bjornfor ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/plotinus/default.nix b/nixpkgs/pkgs/tools/misc/plotinus/default.nix
new file mode 100644
index 000000000000..58a6c7c4071d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/plotinus/default.nix
@@ -0,0 +1,44 @@
+{ stdenv
+, fetchFromGitHub
+, gettext
+, libxml2
+, pkgconfig
+, gtk3
+, cmake
+, ninja
+, vala
+, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "plotinus";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "p-e-w";
+    repo = "plotinus";
+    rev = "v${version}";
+    sha256 = "19k6f6ivg4ab57m62g6fkg85q9sv049snmzq1fyqnqijggwshxfz";
+  };
+
+  nativeBuildInputs = [
+    pkgconfig
+    wrapGAppsHook
+    vala
+    cmake
+    ninja
+    gettext
+    libxml2
+  ];
+  buildInputs = [
+    gtk3
+  ];
+
+  meta = with stdenv.lib; {
+    description = "A searchable command palette in every modern GTK application";
+    homepage = https://github.com/p-e-w/plotinus;
+    maintainers = with maintainers; [ samdroid-apps ];
+    platforms = platforms.linux;
+    # No COPYING file, but headers in the source code
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/plowshare/default.nix b/nixpkgs/pkgs/tools/misc/plowshare/default.nix
new file mode 100644
index 000000000000..1d3e8c6c33db
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/plowshare/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, makeWrapper, curl, recode, spidermonkey }:
+
+stdenv.mkDerivation rec {
+
+  pname = "plowshare";
+  version = "2.1.7";
+
+  src = fetchFromGitHub {
+    owner = "mcrapet";
+    repo = "plowshare";
+    rev = "v${version}";
+    sha256 = "1p8s60dlzaldp006yj710s371aan915asyjhd99188vrj4jj1x79";
+  };
+
+  buildInputs = [ makeWrapper ];
+
+  phases = [ "unpackPhase" "installPhase" "fixupPhase" ];
+
+  installPhase = ''
+    make PREFIX="$out" install
+
+    for fn in plow{del,down,list,mod,probe,up}; do
+      wrapProgram "$out/bin/$fn" --prefix PATH : "${stdenv.lib.makeBinPath [ curl recode spidermonkey ]}"
+    done
+  '';
+
+  meta = {
+    description = ''
+      A command-line download/upload tool for popular file sharing websites
+    '';
+    license = stdenv.lib.licenses.gpl3;
+    maintainers = with stdenv.lib.maintainers; [ aforemny jfrankenau ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pod2mdoc/default.nix b/nixpkgs/pkgs/tools/misc/pod2mdoc/default.nix
new file mode 100644
index 000000000000..5712e02e8ea0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pod2mdoc/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "pod2mdoc";
+  version = "0.0.10";
+
+  src = fetchurl {
+    url = "http://mdocml.bsd.lv/pod2mdoc/snapshots/${pname}-${version}.tgz";
+    sha256 = "0nwa9zv9gmfi5ysz1wfm60kahc7nv0133n3dfc2vh2y3gj8mxr4f";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mkdir -p $out/share/man/man1
+    install -m 0755 pod2mdoc $out/bin
+    install -m 0444 pod2mdoc.1 $out/share/man/man1
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://mdocml.bsd.lv/;
+    description = "converter from POD into mdoc";
+    license = licenses.isc;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ ramkromberg ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ponysay/default.nix b/nixpkgs/pkgs/tools/misc/ponysay/default.nix
new file mode 100644
index 000000000000..3fc3efa0eda0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ponysay/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, python3, texinfo, makeWrapper }:
+
+stdenv.mkDerivation {
+  name = "ponysay-3.0.3";
+
+  src = fetchurl {
+    url = "https://github.com/erkin/ponysay/archive/3.0.3.tar.gz";
+    sha256 = "12mjabf5cpp5dgg63s19rlyq3dhhpzzy2sa439yncqzsk7rdg0n3";
+  };
+
+  buildInputs = [ python3 texinfo makeWrapper ];
+
+  inherit python3;
+
+  phases = "unpackPhase installPhase fixupPhase";
+
+  installPhase = ''
+    find -type f -name "*.py" | xargs sed -i "s@/usr/bin/env python3@$python3/bin/python3@g"
+    substituteInPlace setup.py --replace \
+        "fileout.write(('#!/usr/bin/env %s\n' % env).encode('utf-8'))" \
+        "fileout.write(('#!%s/bin/%s\n' % (os.environ['python3'], env)).encode('utf-8'))"
+    python3 setup.py --prefix=$out --freedom=partial install \
+        --with-shared-cache=$out/share/ponysay \
+        --with-bash
+  '';
+
+  meta = {
+    description = "Cowsay reimplemention for ponies";
+    homepage = "https://github.com/erkin/ponysay";
+    license = stdenv.lib.licenses.gpl3;
+    maintainers = with stdenv.lib.maintainers; [ bodil ];
+    platforms = with stdenv.lib.platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/powerline-go/default.nix b/nixpkgs/pkgs/tools/misc/powerline-go/default.nix
new file mode 100644
index 000000000000..47336e54d67e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/powerline-go/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "powerline-go";
+  version = "1.15.0";
+
+  src = fetchFromGitHub {
+    owner = "justjanne";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "06i07m68l24v29j01qp2y91rwsfqh4x1nc8sxkjzrc7q1c7fsc1r";
+  };
+
+  modSha256 = "0mz1qrwar9cgrhrgw4z3gwhjj62bnfnn59ji31zkyvwlc1mqh9an";
+
+  meta = with stdenv.lib; {
+    description = "A Powerline like prompt for Bash, ZSH and Fish";
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ sifmelcara ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/powerline-rs/default.nix b/nixpkgs/pkgs/tools/misc/powerline-rs/default.nix
new file mode 100644
index 000000000000..309ccf8070b6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/powerline-rs/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, lib, rustPlatform, fetchFromGitLab, pkgconfig, file, perl, curl, cmake, openssl, libssh2, libgit2, libzip, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "powerline-rs";
+  version = "0.2.0";
+
+  src = fetchFromGitLab {
+    owner = "jD91mZM2";
+    repo = "powerline-rs";
+    rev = version;
+
+    sha256 = "0rqlxxl58dpfvm2idhi0vzinraf4bgiapmawiih9wxs599fnhm3y";
+  };
+
+  cargoSha256 = "1vdx5nwj4qmkb3rdgnchd9xixc5pmhvskvn6dmqgm91s41p2al1p";
+
+  nativeBuildInputs = [ pkgconfig file perl cmake curl ];
+  buildInputs = [ openssl libssh2 libgit2 libzip ] ++ lib.optional stdenv.isDarwin Security;
+
+  COMPLETION_OUT = "out";
+  postInstall = ''
+    install -Dm 755 "${COMPLETION_OUT}/${pname}.bash" "$out/etc/bash_completion.d/${pname}"
+    install -Dm 755 "${COMPLETION_OUT}/${pname}.fish" "$out/share/fish/vendor_completions.d/${pname}"
+  '';
+
+  meta = with lib; {
+    description = "powerline-shell rewritten in Rust, inspired by powerline-go";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jD91mZM2 ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/profile-cleaner/default.nix b/nixpkgs/pkgs/tools/misc/profile-cleaner/default.nix
new file mode 100644
index 000000000000..0c9d3a0ea799
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/profile-cleaner/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, makeWrapper, parallel, sqlite, bc, file }:
+
+stdenv.mkDerivation rec {
+  version = "2.37";
+  pname = "profile-cleaner";
+
+  src = fetchFromGitHub {
+    owner = "graysky2";
+    repo = "profile-cleaner";
+    rev = "v${version}";
+    sha256 = "1fbsn2xvcjkqhhkhidn04iwc0zha68cpkyc9vs5yly38qr1q238a";
+  };
+
+  buildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    PREFIX=\"\" DESTDIR=$out make install
+    wrapProgram $out/bin/profile-cleaner \
+      --prefix PATH : "${stdenv.lib.makeBinPath [ parallel sqlite bc file ]}"
+  '';
+
+  meta = {
+    description = "Reduces browser profile sizes by cleaning their sqlite databases";
+    longDescription = ''
+      Use profile-cleaner to reduce the size of browser profiles by organizing
+      their sqlite databases using sqlite3's vacuum and reindex functions. The
+      term "browser" is used loosely since profile-cleaner happily works on
+      some email clients and newsreaders too.
+    '';
+    homepage = https://github.com/graysky2/profile-cleaner;
+    license = stdenv.lib.licenses.mit;
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ stdenv.lib.maintainers.devhell ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/profile-sync-daemon/default.nix b/nixpkgs/pkgs/tools/misc/profile-sync-daemon/default.nix
new file mode 100644
index 000000000000..c1496e0dbc9e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/profile-sync-daemon/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchurl, utillinux}:
+
+stdenv.mkDerivation rec {
+  version = "6.35";
+  pname = "profile-sync-daemon";
+
+  src = fetchurl {
+    url = "https://github.com/graysky2/profile-sync-daemon/archive/v${version}.tar.gz";
+    sha256 = "0hd3cjhf9nv4q5gvc8lbh5c82095lll7mxll1mj5hkzmnijzsf0v";
+  };
+
+  installPhase = ''
+    PREFIX=\"\" DESTDIR=$out make install
+    substituteInPlace $out/bin/profile-sync-daemon \
+      --replace "/usr/" "$out/" \
+      --replace "sudo " "/run/wrappers/bin/sudo "
+    # $HOME detection fails (and is unnecessary)
+    sed -i '/^HOME/d' $out/bin/profile-sync-daemon
+    substituteInPlace $out/bin/psd-overlay-helper \
+      --replace "PATH=/usr/bin:/bin" "PATH=${utillinux.bin}/bin"
+  '';
+
+  preferLocalBuild = true;
+
+  meta = with stdenv.lib; {
+    description = "Syncs browser profile dirs to RAM";
+    longDescription = ''
+      Profile-sync-daemon (psd) is a tiny pseudo-daemon designed to manage your
+      browser's profile in tmpfs and to periodically sync it back to your
+      physical disc (HDD/SSD). This is accomplished via a symlinking step and
+      an innovative use of rsync to maintain back-up and synchronization
+      between the two. One of the major design goals of psd is a completely
+      transparent user experience.
+    '';
+    homepage = https://github.com/graysky2/profile-sync-daemon;
+    downloadPage = https://github.com/graysky2/profile-sync-daemon/releases;
+    license = licenses.mit;
+    maintainers = [ maintainers.prikhi ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/progress/default.nix b/nixpkgs/pkgs/tools/misc/progress/default.nix
new file mode 100644
index 000000000000..3edca413f3aa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/progress/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitHub, pkgconfig, ncurses, which }:
+
+stdenv.mkDerivation rec {
+  pname = "progress";
+  version = "0.14";
+
+  src = fetchFromGitHub {
+    owner = "Xfennec";
+    repo = "progress";
+    rev = "v${version}";
+    sha256 = "1lk2v4b767klib93an4g3f7z5qrv9kdk9jf7545vw1immc4kamrl";
+  };
+
+  nativeBuildInputs = [ pkgconfig which ];
+  buildInputs = [ ncurses ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/Xfennec/progress;
+    description = "Tool that shows the progress of coreutils programs";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/proxytunnel/default.nix b/nixpkgs/pkgs/tools/misc/proxytunnel/default.nix
new file mode 100644
index 000000000000..335bddd6730e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/proxytunnel/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchurl, openssl }:
+
+stdenv.mkDerivation {
+  name = "proxytunnel-1.9.0";
+
+  src = fetchurl {
+    url = mirror://sourceforge/proxytunnel/proxytunnel-1.9.0.tgz;
+    sha256 = "1fd644kldsg14czkqjybqh3wrzwsp3dcargqf4fjkpqxv3wbpx9f";
+  };
+
+  buildInputs = [ openssl ];
+
+  installPhase = ''make DESTDIR="$out" PREFIX="" install'';
+
+  meta = {
+    description = "Program that connects stdin and stdout to a server somewhere on the network, through a standard HTTPS proxy";
+    homepage = http://proxytunnel.sourceforge.net/download.php;
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pspg/default.nix b/nixpkgs/pkgs/tools/misc/pspg/default.nix
new file mode 100644
index 000000000000..4cf98ef8b485
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pspg/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitHub, gnugrep, ncurses, pkgconfig, readline, postgresql }:
+
+stdenv.mkDerivation rec {
+  pname = "pspg";
+  version = "2.6.6";
+
+  src = fetchFromGitHub {
+    owner = "okbob";
+    repo = pname;
+    rev = version;
+    sha256 = "0l20ysr61y99zxvm8cqsgj7arv4m7h7gqq8lrq65bmh9fxncfpsd";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ gnugrep ncurses readline postgresql ];
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/okbob/pspg";
+    description = "Postgres Pager";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.jlesquembre ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/psrecord/default.nix b/nixpkgs/pkgs/tools/misc/psrecord/default.nix
new file mode 100644
index 000000000000..7df2b47497f0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/psrecord/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildPythonApplication, fetchPypi, psutil, matplotlib, pytest }:
+buildPythonApplication rec {
+  pname = "psrecord";
+  version = "1.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "151rynca97v5wq1drl2yfrqmqil1km72cizn3159c2ip14626mp6";
+  };
+
+  propagatedBuildInputs = [
+    psutil matplotlib
+  ];
+
+  checkInputs = [
+    pytest
+  ];
+
+  checkPhase = ''
+    runHook preCheck
+    pytest psrecord
+    runHook postCheck
+  '';
+
+  meta = {
+    description = "Record the CPU and memory activity of a process";
+    homepage = "https://github.com/astrofrog/psrecord";
+    license = lib.licenses.bsd2;
+    maintainers = with lib.maintainers; [ johnazoidberg ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pubs/default.nix b/nixpkgs/pkgs/tools/misc/pubs/default.nix
new file mode 100644
index 000000000000..4e840957ce32
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pubs/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchFromGitHub, fetchpatch, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "pubs";
+  version = "0.8.2";
+
+  src = fetchFromGitHub {
+    owner = "pubs";
+    repo = "pubs";
+    rev = "v${version}";
+    sha256 = "16zwdqfbmlla6906g3a57a4nj8wnl11fq78r20qms717bzv211j0";
+  };
+
+  patches = [
+    # Fix for bibtexparser 1.1.0
+    (fetchpatch {
+      url = https://github.com/pubs/pubs/pull/185/commits/e58ae98b93b8364a07fd5f5f452ba88ad332c948.patch;
+      sha256 = "1n7zrk119v395jj8wqg8wlymc9l9pq3v752yy3kam9kflc0aashp";
+    })
+    # Fix test broken by PyYAML 5.1
+    (fetchpatch {
+      url = https://github.com/pubs/pubs/pull/194/commits/c3cb713ae76528eeeaaeb948fe319a76ab3934d8.patch;
+      sha256 = "05as418m7wzs65839bb91b2jrs8l68z8ldcjcd9cn4b9fcgsf3rk";
+    })
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    argcomplete dateutil configobj feedparser bibtexparser pyyaml requests six beautifulsoup4
+  ];
+
+  checkInputs = with python3Packages; [ pyfakefs mock ddt ];
+
+  meta = with stdenv.lib; {
+    description = "Command-line bibliography manager";
+    homepage = https://github.com/pubs/pubs;
+    license = licenses.lgpl3;
+    maintainers = with maintainers; [ gebner ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pv/default.nix b/nixpkgs/pkgs/tools/misc/pv/default.nix
new file mode 100644
index 000000000000..3642653944b3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pv/default.nix
@@ -0,0 +1,18 @@
+{ stdenv, fetchurl } :
+
+stdenv.mkDerivation rec {
+  name = "pv-1.6.6";
+
+  src = fetchurl {
+    url = "https://www.ivarch.com/programs/sources/${name}.tar.bz2";
+    sha256 = "1wbk14xh9rfypiwyy68ssl8dliyji30ly70qki1y2xx3ywszk3k0";
+  };
+
+  meta = {
+    homepage = http://www.ivarch.com/programs/pv;
+    description = "Tool for monitoring the progress of data through a pipeline";
+    license = stdenv.lib.licenses.artistic2;
+    maintainers = with stdenv.lib.maintainers; [ ];
+    platforms = with stdenv.lib.platforms; all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pws/Gemfile b/nixpkgs/pkgs/tools/misc/pws/Gemfile
new file mode 100644
index 000000000000..43b6b931860c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pws/Gemfile
@@ -0,0 +1,3 @@
+source 'https://rubygems.org'
+
+gem 'pws'
diff --git a/nixpkgs/pkgs/tools/misc/pws/Gemfile.lock b/nixpkgs/pkgs/tools/misc/pws/Gemfile.lock
new file mode 100644
index 000000000000..c9cf6a3157c1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pws/Gemfile.lock
@@ -0,0 +1,19 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    clipboard (1.0.6)
+    paint (1.0.1)
+    pbkdf2-ruby (0.2.1)
+    pws (1.0.6)
+      clipboard (~> 1.0.5)
+      paint (>= 0.8.7)
+      pbkdf2-ruby
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  pws
+
+BUNDLED WITH
+   1.11.2
diff --git a/nixpkgs/pkgs/tools/misc/pws/default.nix b/nixpkgs/pkgs/tools/misc/pws/default.nix
new file mode 100644
index 000000000000..50952435dd76
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pws/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, lib, bundlerEnv, ruby, bundlerUpdateScript, xsel, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  name = "pws-${(import ./gemset.nix).pws.version}";
+
+  buildInputs = [ makeWrapper ];
+
+  phases = ["installPhase"];
+
+  installPhase = let
+    env = bundlerEnv {
+      name = "${name}-gems";
+
+      inherit ruby;
+
+      gemdir = ./.;
+    };
+  in ''
+    mkdir -p $out/bin
+    makeWrapper ${env}/bin/pws $out/bin/pws \
+      --set PATH '"${xsel}/bin/:$PATH"'
+  '';
+
+  passthru.updateScript = bundlerUpdateScript "pws";
+
+  meta = with lib; {
+    description = "Command-line password safe";
+    homepage    = https://github.com/janlelis/pws;
+    license     = licenses.mit;
+    maintainers = with maintainers; [ swistak35 nicknovitski ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pws/gemset.nix b/nixpkgs/pkgs/tools/misc/pws/gemset.nix
new file mode 100644
index 000000000000..2aa26f9a0202
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pws/gemset.nix
@@ -0,0 +1,34 @@
+{
+  clipboard = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11r5xi1fhll4qxna2sg83vmnphjzqc4pzwdnmc5qwvdps5jbz7cq";
+      type = "gem";
+    };
+    version = "1.0.6";
+  };
+  paint = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1z1fqyyc2jiv6yabv467h652cxr2lmxl5gqqg7p14y28kdqf0nhj";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  pbkdf2-ruby = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "014vb5k8klvh192idqrda2571dxsp7ai2v72hj265zd2awy0zyg1";
+      type = "gem";
+    };
+    version = "0.2.1";
+  };
+  pws = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1brn123mmrw09ji60sa13ylgfjjp7aicz07hm9h0dc3162zlw5wn";
+      type = "gem";
+    };
+    version = "1.0.6";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/misc/q-text-as-data/default.nix b/nixpkgs/pkgs/tools/misc/q-text-as-data/default.nix
new file mode 100644
index 000000000000..e70b8274d364
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/q-text-as-data/default.nix
@@ -0,0 +1,35 @@
+{ stdenvNoCC, fetchFromGitHub, python2 }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "q-text-as-data";
+  version = "1.7.4";
+
+  src = fetchFromGitHub {
+    owner = "harelba";
+    repo = "q";
+    rev = version;
+    sha256 = "0p8rbfwwcqjyrix51v52zp9b03z4xg1fv2raf2ygqp9a4l27dca8";
+  };
+
+  buildInputs = [ python2 ];
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp bin/q $out/bin
+    chmod +x $out/bin/q
+  '';
+
+  meta = with stdenvNoCC.lib; {
+    description = "Run SQL directly on CSV or TSV files";
+    longDescription = ''
+      q is a command line tool that allows direct execution of SQL-like queries on CSVs/TSVs (and any other tabular text files).
+
+      q treats ordinary files as database tables, and supports all SQL constructs, such as WHERE, GROUP BY, JOINs etc. It supports automatic column name and column type detection, and provides full support for multiple encodings.
+    '';
+    homepage = "http://harelba.github.io/q/";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.taneb ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/qjoypad/default.nix b/nixpkgs/pkgs/tools/misc/qjoypad/default.nix
new file mode 100644
index 000000000000..3e7e3870959b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/qjoypad/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchurl, pkgconfig, libX11, libXtst, qt4 }:
+stdenv.mkDerivation rec {
+  name = "qjoypad-4.1.0";
+  src = fetchurl {
+    url = "mirror://sourceforge/qjoypad/${name}.tar.gz";
+    sha256 = "1jlm7i26nfp185xrl41kz5z6fgvyj51bjpz48cg27xx64y40iamm";
+  };
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libX11 libXtst qt4 ];
+  NIX_LDFLAGS = "-lX11";
+  patchPhase = ''
+    cd src
+    substituteInPlace config --replace /bin/bash ${stdenv.shell}
+    mkdir -p $out
+    export NIX_LDFLAGS="$NIX_LDFLAGS -rpath ${libX11}/lib"
+  '';
+  meta = {
+    description = "A program that lets you use gaming devices anywhere";
+    longDescription = ''
+      A simple Linux/QT program that lets you use your gaming devices
+      where you want them: in your games! QJoyPad takes input from a
+      gamepad or joystick and translates it into key strokes or mouse
+      actions, letting you control any XWindows program with your game
+      controller. This lets you play all those games that for some
+      reason don't have joystick support with your joystick. QJoyPad
+      also gives you the advantage of multiple saved layouts so you
+      can have a separate setting for every game, or for every class
+      of game! That way you can play your games the way you want, not
+      the way the programmers decided, and you can have the same
+      button be "fire" in every one of your space fighters. QJoyPad
+      gives you the freedom and flexibility to really take advantage
+      of gaming devices in Linux, and makes the Linux gaming
+      experience just a little bit nicer.
+    '';
+    homepage = http://qjoypad.sourceforge.net;
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = with stdenv.lib.maintainers; [ astsmtl ];
+    platforms = with stdenv.lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/qt5ct/default.nix b/nixpkgs/pkgs/tools/misc/qt5ct/default.nix
new file mode 100644
index 000000000000..d7598b0c6dd5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/qt5ct/default.nix
@@ -0,0 +1,32 @@
+{ mkDerivation, lib, fetchurl, qtbase, qtsvg, qttools, qmake }:
+
+let inherit (lib) getDev; in
+
+mkDerivation rec {
+  pname = "qt5ct";
+  version = "0.41";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}-${version}.tar.bz2";
+    sha256 = "1p2p6116wg5bc0hcbi2sygwlgk0g9idxpci0qdh3p4lb1plk0h7j";
+  };
+
+  nativeBuildInputs = [ qmake qttools ];
+
+  buildInputs = [ qtbase qtsvg ];
+
+  qmakeFlags = [
+    "LRELEASE_EXECUTABLE=${getDev qttools}/bin/lrelease"
+    "PLUGINDIR=${placeholder "out"}/${qtbase.qtPluginPrefix}"
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Qt5 Configuration Tool";
+    homepage = https://www.opendesktop.org/content/show.php?content=168066;
+    platforms = platforms.linux;
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ ralith ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/radeon-profile/default.nix b/nixpkgs/pkgs/tools/misc/radeon-profile/default.nix
new file mode 100644
index 000000000000..90498767c995
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/radeon-profile/default.nix
@@ -0,0 +1,32 @@
+{ lib, mkDerivation, fetchFromGitHub
+, qtbase, qtcharts, qmake, libXrandr, libdrm
+}:
+
+mkDerivation rec {
+
+  pname = "radeon-profile";
+  version = "20190903";
+
+  nativeBuildInputs = [ qmake ];
+  buildInputs = [ qtbase qtcharts libXrandr libdrm ];
+
+  src = (fetchFromGitHub {
+    owner  = "marazmista";
+    repo   = "radeon-profile";
+    rev    = version;
+    sha256 = "0ax5417q03xjwi3pn7yyjdb90ssaygdprfgb1pz9nkyk6773ckx5";
+  }) + "/radeon-profile";
+
+  preConfigure = ''
+    substituteInPlace radeon-profile.pro \
+      --replace "/usr/" "$out/"
+  '';
+
+  meta = with lib; {
+    description = "Application to read current clocks of AMD Radeon cards";
+    homepage    = https://github.com/marazmista/radeon-profile;
+    license     = licenses.gpl2Plus;
+    platforms   = platforms.linux;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/rcm/default.nix b/nixpkgs/pkgs/tools/misc/rcm/default.nix
new file mode 100644
index 000000000000..3d97874df7de
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rcm/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "rcm";
+  version = "1.3.3";
+
+  src = fetchurl {
+    url = "https://thoughtbot.github.io/rcm/dist/rcm-${version}.tar.gz";
+    sha256 = "1bqk7rrp1ckzvsvl9wghsr77m8xl3a7yc5gqdsisz492dx2j8mck";
+  };
+
+  patches = [ ./fix-rcmlib-path.patch ];
+
+  postPatch = ''
+    for f in bin/*.in; do
+      substituteInPlace $f --subst-var-by rcm $out
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Management Suite for Dotfiles";
+    homepage = https://github.com/thoughtbot/rcm;
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ malyn ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rcm/fix-rcmlib-path.patch b/nixpkgs/pkgs/tools/misc/rcm/fix-rcmlib-path.patch
new file mode 100644
index 000000000000..e7d600d2a1f2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rcm/fix-rcmlib-path.patch
@@ -0,0 +1,48 @@
+diff --git a/bin/lsrc.in b/bin/lsrc.in
+index fcf5fbe..119d659 100755
+--- a/bin/lsrc.in
++++ b/bin/lsrc.in
+@@ -1,6 +1,6 @@
+ #!@SHELL@
+ 
+-: ${RCM_LIB:=$(dirname "$0")/../share/rcm}
++RCM_LIB=@rcm@/share/rcm
+ . "$RCM_LIB/rcm.sh"
+ 
+ pushdir() {
+diff --git a/bin/mkrc.in b/bin/mkrc.in
+index da22a63..a6bb0ad 100755
+--- a/bin/mkrc.in
++++ b/bin/mkrc.in
+@@ -1,6 +1,6 @@
+ #!@SHELL@
+ 
+-: ${RCM_LIB:=$(dirname "$0")/../share/rcm}
++RCM_LIB=@rcm@/share/rcm
+ . "$RCM_LIB/rcm.sh"
+ 
+ destination() {
+diff --git a/bin/rcdn.in b/bin/rcdn.in
+index ae7aad8..c210599 100755
+--- a/bin/rcdn.in
++++ b/bin/rcdn.in
+@@ -1,6 +1,6 @@
+ #!@SHELL@
+ 
+-: ${RCM_LIB:=$(dirname "$0")/../share/rcm}
++RCM_LIB=@rcm@/share/rcm
+ . "$RCM_LIB/rcm.sh"
+ 
+ remove_link() {
+diff --git a/bin/rcup.in b/bin/rcup.in
+index bdae664..2076f53 100755
+--- a/bin/rcup.in
++++ b/bin/rcup.in
+@@ -1,6 +1,6 @@
+ #!@SHELL@
+ 
+-: ${RCM_LIB:=$(dirname "$0")/../share/rcm}
++RCM_LIB=@rcm@/share/rcm
+ . "$RCM_LIB/rcm.sh"
+ 
+ print_ln_v() {
diff --git a/nixpkgs/pkgs/tools/misc/recoverjpeg/default.nix b/nixpkgs/pkgs/tools/misc/recoverjpeg/default.nix
new file mode 100644
index 000000000000..88aff4f3c084
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/recoverjpeg/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, makeWrapper, python2, exif, imagemagick }:
+
+stdenv.mkDerivation rec {
+  pname = "recoverjpeg";
+  version = "2.6.3";
+
+  src = fetchurl {
+    url = "https://www.rfc1149.net/download/recoverjpeg/${pname}-${version}.tar.gz";
+    sha256 = "009jgxi8lvdp00dwfj0n4x5yqrf64x00xdkpxpwgl2v8wcqn56fv";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = [ python2 ];
+
+  postFixup = ''
+    wrapProgram $out/bin/sort-pictures \
+      --prefix PATH : ${stdenv.lib.makeBinPath [ exif imagemagick ]}
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://rfc1149.net/devel/recoverjpeg.html;
+    description = "Recover lost JPEGs and MOV files on a bogus memory card or disk";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ dotlambda ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/recutils/default.nix b/nixpkgs/pkgs/tools/misc/recutils/default.nix
new file mode 100644
index 000000000000..8d648e293c5a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/recutils/default.nix
@@ -0,0 +1,35 @@
+{ fetchurl, stdenv, emacs, curl, check, bc }:
+
+stdenv.mkDerivation rec {
+  name = "recutils-1.8";
+
+  src = fetchurl {
+    url = "mirror://gnu/recutils/${name}.tar.gz";
+    sha256 = "14xiln4immfsw8isnvwvq0h23f6z0wilpgsc4qzabnrzb5lsx3nz";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  buildInputs = [ curl emacs ];
+
+  checkInputs = [ check bc ];
+  doCheck = true;
+
+  meta = {
+    description = "Tools and libraries to access human-editable, text-based databases";
+
+    longDescription =
+      '' GNU Recutils is a set of tools and libraries to access
+         human-editable, text-based databases called recfiles.  The data is
+         stored as a sequence of records, each record containing an arbitrary
+         number of named fields.
+      '';
+
+    homepage = https://www.gnu.org/software/recutils/;
+
+    license = stdenv.lib.licenses.gpl3Plus;
+
+    platforms = stdenv.lib.platforms.all;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/remind/default.nix b/nixpkgs/pkgs/tools/misc/remind/default.nix
new file mode 100644
index 000000000000..91d8e4721307
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/remind/default.nix
@@ -0,0 +1,47 @@
+{stdenv, fetchurl, tk, tcllib, makeWrapper
+, tkremind ? true
+} :
+
+assert tkremind -> tk != null;
+assert tkremind -> tcllib != null;
+assert tkremind -> makeWrapper != null;
+
+let
+  inherit (stdenv.lib) optional optionalString;
+  tclLibraries = stdenv.lib.optionals tkremind [ tcllib tk ];
+  tclLibPaths = stdenv.lib.concatStringsSep " "
+    (map (p: "${p}/lib/${p.libPrefix}") tclLibraries);
+  tkremindPatch = optionalString tkremind ''
+    substituteInPlace scripts/tkremind --replace "exec wish" "exec ${tk}/bin/wish"
+  '';
+in stdenv.mkDerivation {
+  name = "remind-3.1.16";
+  src = fetchurl {
+    url = https://dianne.skoll.ca/projects/remind/download/remind-03.01.16.tar.gz;
+    sha256 = "14yavwqmimba8rdpwx3wlav9sfb0v5rcd1iyzqrs08wx07a9pdzf";
+  };
+
+  nativeBuildInputs = optional tkremind makeWrapper;
+  propagatedBuildInputs = tclLibraries;
+
+  postPatch = ''
+    substituteInPlace ./configure \
+      --replace "sleep 1" "true"
+    substituteInPlace ./src/init.c \
+      --replace "rkrphgvba(0);" "" \
+      --replace "rkrphgvba(1);" ""
+    ${tkremindPatch}
+  '';
+
+  postInstall = optionalString tkremind ''
+    wrapProgram $out/bin/tkremind --set TCLLIBPATH "${tclLibPaths}"
+  '';
+
+  meta = {
+    homepage = https://dianne.skoll.ca/projects/remind/;
+    description = "Sophisticated calendar and alarm program for the console";
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = with stdenv.lib.maintainers; [raskin kovirobi];
+    platforms = with stdenv.lib.platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rename/default.nix b/nixpkgs/pkgs/tools/misc/rename/default.nix
new file mode 100644
index 000000000000..e32b016016bd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rename/default.nix
@@ -0,0 +1,19 @@
+{ stdenv, fetchFromGitHub, perlPackages }:
+
+perlPackages.buildPerlPackage {
+  pname = "rename";
+  version = "1.9";
+  outputs = [ "out" ];
+  src = fetchFromGitHub {
+    owner = "pstray";
+    repo = "rename";
+    rev = "d46f1d0ced25dc5849acb5d5974a3e2e9d97d536";
+    sha256 = "0qahs1cqfaci2hdf1xncrz4k0z5skkfr43apnm3kybs7za33apzw";
+  };
+  meta = with stdenv.lib; {
+    description = "Rename files according to a Perl rewrite expression";
+    homepage = "https://github.com/pstray/rename";
+    maintainers = with maintainers; [ mkg ];
+    license = with licenses; [ gpl1Plus ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/renameutils/default.nix b/nixpkgs/pkgs/tools/misc/renameutils/default.nix
new file mode 100644
index 000000000000..b5e5d64dda68
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/renameutils/default.nix
@@ -0,0 +1,21 @@
+{stdenv, fetchurl, readline}:
+
+stdenv.mkDerivation {
+  name = "renameutils-0.12.0";
+
+  src = fetchurl {
+    url = mirror://savannah/renameutils/renameutils-0.12.0.tar.gz;
+    sha256 = "18xlkr56jdyajjihcmfqlyyanzyiqqlzbhrm6695mkvw081g1lnb";
+  };
+
+  patches = [ ./install-exec.patch ];
+
+  nativeBuildInputs = [ readline ];
+
+  meta = {
+    homepage = https://www.nongnu.org/renameutils/;
+    description = "A set of programs to make renaming of files faster";
+    platforms = stdenv.lib.platforms.unix;
+    license = stdenv.lib.licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/renameutils/install-exec.patch b/nixpkgs/pkgs/tools/misc/renameutils/install-exec.patch
new file mode 100644
index 000000000000..32b8de5adb80
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/renameutils/install-exec.patch
@@ -0,0 +1,24 @@
+diff -Naur renameutils-0.12.0-orig/src/Makefile.am renameutils-0.12.0/src/Makefile.am
+--- renameutils-0.12.0-orig/src/Makefile.am	2012-04-23 12:10:43.000000000 +0100
++++ renameutils-0.12.0/src/Makefile.am	2013-03-25 11:13:21.605447377 +0000
+@@ -49,7 +49,7 @@
+ 	@[ -f icp ] || (echo $(LN_S) icmd icp ; $(LN_S) icmd icp)
+ 
+ install-exec-local:
+-	$(mkdir_p) $(DESTDIR)($bindir)
++	$(mkdir_p) $(DESTDIR)$(bindir)
+ 	@[ -f $(DESTDIR)$(bindir)/qmv ] || (echo $(LN_S) qcmd $(DESTDIR)$(bindir)/qmv ; $(LN_S) qcmd $(DESTDIR)$(bindir)/qmv)
+ 	@[ -f $(DESTDIR)$(bindir)/qcp ] || (echo $(LN_S) qcmd $(DESTDIR)$(bindir)/qcp ; $(LN_S) qcmd $(DESTDIR)$(bindir)/qcp)
+ 	@[ -f $(DESTDIR)$(bindir)/imv ] || (echo $(LN_S) icmd $(DESTDIR)$(bindir)/imv ; $(LN_S) icmd $(DESTDIR)$(bindir)/imv)
+diff -Naur renameutils-0.12.0-orig/src/Makefile.in renameutils-0.12.0/src/Makefile.in
+--- renameutils-0.12.0-orig/src/Makefile.in	2012-04-23 12:24:10.000000000 +0100
++++ renameutils-0.12.0/src/Makefile.in	2013-03-25 11:13:40.549847891 +0000
+@@ -1577,7 +1577,7 @@
+ 	@[ -f icp ] || (echo $(LN_S) icmd icp ; $(LN_S) icmd icp)
+ 
+ install-exec-local:
+-	$(mkdir_p) $(DESTDIR)($bindir)
++	$(mkdir_p) $(DESTDIR)$(bindir)
+ 	@[ -f $(DESTDIR)$(bindir)/qmv ] || (echo $(LN_S) qcmd $(DESTDIR)$(bindir)/qmv ; $(LN_S) qcmd $(DESTDIR)$(bindir)/qmv)
+ 	@[ -f $(DESTDIR)$(bindir)/qcp ] || (echo $(LN_S) qcmd $(DESTDIR)$(bindir)/qcp ; $(LN_S) qcmd $(DESTDIR)$(bindir)/qcp)
+ 	@[ -f $(DESTDIR)$(bindir)/imv ] || (echo $(LN_S) icmd $(DESTDIR)$(bindir)/imv ; $(LN_S) icmd $(DESTDIR)$(bindir)/imv)
diff --git a/nixpkgs/pkgs/tools/misc/reredirect/default.nix b/nixpkgs/pkgs/tools/misc/reredirect/default.nix
new file mode 100644
index 000000000000..15045d4bd8ad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/reredirect/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "reredirect";
+  version = "0.2";
+
+  src = fetchFromGitHub {
+    owner = "jerome-pouiller";
+    repo = "reredirect";
+    rev = "v${version}";
+    sha256 = "0aqzs940kwvw80lhkszx8spcdh9ilsx5ncl9vnp611hwlryfw7kk";
+  };
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  postFixup = ''
+    substituteInPlace ${placeholder "out"}/bin/relink \
+      --replace "reredirect" "${placeholder "out"}/bin/reredirect"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Tool to dynamicly redirect outputs of a running process";
+    homepage = "https://github.com/jerome-pouiller/reredirect";
+    license = licenses.mit;
+    maintainers = [ maintainers.tobim ];
+    platforms = [ "i686-linux" "x86_64-linux" ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/riemann-c-client/default.nix b/nixpkgs/pkgs/tools/misc/riemann-c-client/default.nix
new file mode 100644
index 000000000000..d52910b5a848
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/riemann-c-client/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, file , protobufc }:
+
+stdenv.mkDerivation rec {
+  name = "riemann-c-client-1.10.4";
+
+  src = fetchFromGitHub {
+    owner = "algernon";
+    repo = "riemann-c-client";
+    rev = name;
+    sha256 = "01gzqxqm1xvki2vd78c7my2kgp4fyhkcf5j5fmy8z0l93lgj82rr";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  buildInputs = [ file protobufc ];
+
+  preBuild = ''
+    make lib/riemann/proto/riemann.pb-c.h
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/algernon/riemann-c-client;
+    description = "A C client library for the Riemann monitoring system";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ pradeepchhetri ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/riemann-tools/Gemfile b/nixpkgs/pkgs/tools/misc/riemann-tools/Gemfile
new file mode 100644
index 000000000000..b2e34d5120e0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/riemann-tools/Gemfile
@@ -0,0 +1,3 @@
+source 'https://rubygems.org'
+
+gem "riemann-tools"
diff --git a/nixpkgs/pkgs/tools/misc/riemann-tools/Gemfile.lock b/nixpkgs/pkgs/tools/misc/riemann-tools/Gemfile.lock
new file mode 100644
index 000000000000..881b8aefcdf8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/riemann-tools/Gemfile.lock
@@ -0,0 +1,25 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    beefcake (1.0.0)
+    json (1.8.6)
+    mtrc (0.0.4)
+    optimist (3.0.0)
+    riemann-client (0.2.6)
+      beefcake (>= 0.3.5, <= 1.0.0)
+      mtrc (>= 0.0.4)
+      trollop (>= 1.16.2)
+    riemann-tools (0.2.14)
+      json (~> 1.8)
+      optimist (~> 3.0, >= 3.0.0)
+      riemann-client (~> 0.2, >= 0.2.6)
+    trollop (2.9.9)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  riemann-tools
+
+BUNDLED WITH
+   1.17.2
diff --git a/nixpkgs/pkgs/tools/misc/riemann-tools/default.nix b/nixpkgs/pkgs/tools/misc/riemann-tools/default.nix
new file mode 100644
index 000000000000..a9977aefd66c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/riemann-tools/default.nix
@@ -0,0 +1,37 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "riemann-tools";
+  gemdir = ./.;
+  exes = [
+    "riemann-apache-status"
+    "riemann-bench"
+    "riemann-cloudant"
+    "riemann-consul"
+    "riemann-dir-files-count"
+    "riemann-dir-space"
+    "riemann-diskstats"
+    "riemann-fd"
+    "riemann-freeswitch"
+    "riemann-haproxy"
+    "riemann-health"
+    "riemann-kvminstance"
+    "riemann-memcached"
+    "riemann-net"
+    "riemann-nginx-status"
+    "riemann-ntp"
+    "riemann-portcheck"
+    "riemann-proc"
+    "riemann-varnish"
+    "riemann-zookeeper"
+  ];
+
+  passthru.updateScript = bundlerUpdateScript "riemann-tools";
+
+  meta = with lib; {
+    description = "Tools to submit data to Riemann";
+    homepage = "https://riemann.io";
+    maintainers = with maintainers; [ manveru nicknovitski ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/riemann-tools/gemset.nix b/nixpkgs/pkgs/tools/misc/riemann-tools/gemset.nix
new file mode 100644
index 000000000000..e775de987d67
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/riemann-tools/gemset.nix
@@ -0,0 +1,74 @@
+{
+  beefcake = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10gid0a7pdllh3qmjiqkqxgfqvd7m1f2dmcm4gcd19s63pv620gv";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qmj7fypgb9vag723w1a49qihxrcf5shzars106ynw2zk352gbv5";
+      type = "gem";
+    };
+    version = "1.8.6";
+  };
+  mtrc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xj2pv4cpn0ad1xw38sinsxfzwhgqs6ff18hw0cwz5xmsf3zqmiz";
+      type = "gem";
+    };
+    version = "0.0.4";
+  };
+  optimist = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05jxrp3nbn5iilc1k7ir90mfnwc5abc9h78s5rpm3qafwqxvcj4j";
+      type = "gem";
+    };
+    version = "3.0.0";
+  };
+  riemann-client = {
+    dependencies = ["beefcake" "mtrc" "trollop"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02rp8x2y8h61x8mx9c8kwgm2yyvgg63g8km93zmwmkpp5fyi3fi8";
+      type = "gem";
+    };
+    version = "0.2.6";
+  };
+  riemann-tools = {
+    dependencies = ["json" "optimist" "riemann-client"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07w9x3iw32zwpzsm9l63vn0nv1778qls1blqysr45m7l7x6n5wjx";
+      type = "gem";
+    };
+    version = "0.2.14";
+  };
+  trollop = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "074h7lns72kg1dl5gvz5apl3xz1i0axbnbc01pf2kbw4q0lkpnp4";
+      type = "gem";
+    };
+    version = "2.9.9";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/misc/rig/default.nix b/nixpkgs/pkgs/tools/misc/rig/default.nix
new file mode 100644
index 000000000000..627758e9c5e7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rig/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl } :
+
+stdenv.mkDerivation rec {
+  version = "1.11";
+  pname = "rig";
+
+  src = fetchurl {
+    url = "https://ayera.dl.sourceforge.net/project/rig/rig/${version}/rig-${version}.tar.gz";
+    sha256 = "1f3snysjqqlpk2kgvm5p2icrj4lsdymccmn3igkc2f60smqckgq0";
+  };
+
+  # Note: diff modified from Debian: Norbert Veber <nveber@debian.org>
+  # http://deb.debian.org/debian/pool/main/r/rig/rig_1.11-1.diff.gz
+  patches = [ ./rig_1.11-1.diff ];
+
+  meta = {
+    homepage = http://rig.sourceforge.net/; 
+    description = "Random identity generator";
+    longDescription = ''
+      RIG (Random Identity Generator) is a free replacement for a shareware
+      program out there called 'fake'. It generates random, yet real-looking,
+      personal data. It is useful if you need to feed a name to a Web site,
+      BBS, or real person, and are too lazy to think of one yourself. Also,
+      if the Web site/BBS/person you are giving the information to tries to
+      cross-check the city, state, zip, or area code, it will check out.
+    '';
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = with stdenv.lib.maintainers; [ tomberek ];
+    platforms = with stdenv.lib.platforms; all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rig/rig_1.11-1.diff b/nixpkgs/pkgs/tools/misc/rig/rig_1.11-1.diff
new file mode 100644
index 000000000000..301cf78b5a9b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rig/rig_1.11-1.diff
@@ -0,0 +1,39 @@
+--- rig-1.11.orig/Makefile
++++ rig-1.11/Makefile
+@@ -1,20 +1,21 @@
+-PREFIX=/usr/local
++PREFIX=${out}
+ BINDIR=${PREFIX}/bin
+ MANDIR=${PREFIX}/man
+ DATADIR=${PREFIX}/share/rig
++CXX=g++
+ 
+ all: rig rig.6
+ rig: rig.cc
+-	g++ -g rig.cc -o rig -Wall -DDATADIR="\"$(DATADIR)\""
++	${CXX} -O2 -g rig.cc -o rig -Wall -DDATADIR="\"$(DATADIR)\""
+ 
+ rig.6: rig.6.in
+ 	sed s@DATADIR@"$(DATADIR)"@g < rig.6.in > rig.6
+ 
+ install: rig rig.6
+-	install -g 0 -m 755 -o 0 -s rig $(BINDIR)
+-	install -g 0 -m 644 -o 0 rig.6 $(MANDIR)/man6/rig.6
+-	install -g 0 -m 755 -o 0 -d $(DATADIR)
+-	install -g 0 -m 644 -o 0 data/*.idx $(DATADIR)
++	install -m 755 -d $(DESTDIR)$(DATADIR)
++	install -m 755 -d $(DESTDIR)$(BINDIR)
++	install -m 755 rig $(DESTDIR)$(BINDIR)/rig
++	install -m 644 data/*.idx $(DESTDIR)$(DATADIR)
+ 
+ clean:
+ 	rm -rf *~ *.rej *.orig *.o rig rig.6
+--- rig-1.11.orig/rig.cc
++++ rig-1.11/rig.cc
+@@ -26,6 +26,7 @@
+ #include <time.h>
+ #include <errno.h>
+ #include <assert.h>
++#include <string.h>
+ 
+ using namespace std;
diff --git a/nixpkgs/pkgs/tools/misc/rkflashtool/default.nix b/nixpkgs/pkgs/tools/misc/rkflashtool/default.nix
new file mode 100644
index 000000000000..fb55b15bbd55
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rkflashtool/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, libusb1 }:
+
+stdenv.mkDerivation rec {
+  name = "rkflashtool-5.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/rkflashtool/${name}-src.tar.bz2";
+    sha256 = "0dbp1crw7pjav9gffrnskhkf0gxlj4xgp65clqhvfmv32460xb9c";
+  };
+
+  versionh = fetchurl {
+    url = "mirror://sourceforge/rkflashtool/version.h";
+    sha256 = "1mkcy3yyfaddhzg524hjnhvmwdmdfzbavib8d9p5y38pcqy8xgdp";
+  };
+
+  buildInputs = [ libusb1 ];
+
+  preBuild = ''
+    cp $versionh version.h
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp rkunpack rkcrc rkflashtool rkparameters rkparametersblock rkunsign rkmisc $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://sourceforge.net/projects/rkflashtool/;
+    description = "Tools for flashing Rockchip devices";
+    platforms = platforms.linux;
+    maintainers = [ maintainers.viric ];
+    license = licenses.bsd2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rlwrap/default.nix b/nixpkgs/pkgs/tools/misc/rlwrap/default.nix
new file mode 100644
index 000000000000..96df0707153f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rlwrap/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, readline }:
+
+stdenv.mkDerivation rec {
+  pname = "rlwrap";
+  version = "0.43";
+
+  src = fetchurl {
+    url = "https://github.com/hanslub42/rlwrap/releases/download/v${version}/${pname}-${version}.tar.gz";
+    sha256 = "0bzb7ylk2770iv59v2d0gypb21y2xn87m299s9rqm6rdi2vx11lf";
+  };
+
+  buildInputs = [ readline ];
+
+  # Be high-bit-friendly
+  preBuild = ''
+    sed -i src/readline.c -e "s@[*]p [<] ' '@(*p >= 0) \\&\\& (*p < ' ')@"
+  '';
+
+  meta = {
+    description = "Readline wrapper for console programs";
+    homepage = https://github.com/hanslub42/rlwrap;
+    license = stdenv.lib.licenses.gpl2Plus;
+    platforms = stdenv.lib.platforms.unix;
+    maintainers = with stdenv.lib.maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rmlint/default.nix b/nixpkgs/pkgs/tools/misc/rmlint/default.nix
new file mode 100644
index 000000000000..408660bf3d9a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rmlint/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromGitHub
+, gettext, pkgconfig, scons
+, glib, json-glib, libelf, sphinx, utillinux }:
+
+with stdenv.lib;
+stdenv.mkDerivation rec {
+  pname = "rmlint";
+  version = "2.9.0";
+
+  src = fetchFromGitHub {
+    owner = "sahib";
+    repo = "rmlint";
+    rev = "v${version}";
+    sha256 = "1b5cziam14h80xrfb285fmfrzz2rligxcpsq1xsig14xf4l2875i";
+  };
+
+  CFLAGS="-I${stdenv.lib.getDev utillinux}/include";
+
+  nativeBuildInputs = [
+    pkgconfig sphinx gettext scons
+  ];
+
+  buildInputs = [
+    glib json-glib libelf utillinux
+  ];
+
+  prefixKey = "--prefix=";
+
+  meta = {
+    description = "Extremely fast tool to remove duplicates and other lint from your filesystem";
+    homepage = https://rmlint.readthedocs.org;
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+    maintainers = [ maintainers.koral ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rockbox-utility/default.nix b/nixpkgs/pkgs/tools/misc/rockbox-utility/default.nix
new file mode 100644
index 000000000000..232949b7dace
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rockbox-utility/default.nix
@@ -0,0 +1,55 @@
+{ stdenv, fetchurl, pkgconfig, libusb1
+, qtbase, qttools, makeWrapper, qmake
+, withEspeak ? false, espeak ? null }:
+
+let inherit (stdenv.lib) getDev; in
+
+stdenv.mkDerivation  rec {
+  pname = "rockbox-utility";
+  version = "1.4.0";
+
+  src = fetchurl {
+    url = "https://download.rockbox.org/rbutil/source/RockboxUtility-v${version}-src.tar.bz2";
+    sha256 = "0k3ycga3b0jnj13whwiip2l0gx32l50pnbh7kfima87nq65aaa5w";
+  };
+
+  buildInputs = [ libusb1 qtbase qttools ]
+    ++ stdenv.lib.optional withEspeak espeak;
+  nativeBuildInputs = [ makeWrapper pkgconfig qmake ];
+
+  postPatch = ''
+    sed -i rbutil/rbutilqt/rbutilqt.pro \
+        -e '/^lrelease.commands =/ s|$$\[QT_INSTALL_BINS\]/lrelease -silent|${getDev qttools}/bin/lrelease|'
+  '';
+
+  preConfigure = ''
+    cd rbutil/rbutilqt
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 RockboxUtility $out/bin/rockboxutility
+    ln -s $out/bin/rockboxutility $out/bin/RockboxUtility
+    wrapProgram $out/bin/rockboxutility \
+    ${stdenv.lib.optionalString withEspeak ''
+      --prefix PATH : ${espeak}/bin
+    ''}
+
+    runHook postInstall
+  '';
+
+  # `make build/rcc/qrc_rbutilqt-lang.cpp` fails with
+  #      RCC: Error in 'rbutilqt-lang.qrc': Cannot find file 'lang/rbutil_cs.qm'
+  # Do not add `lrelease rbutilqt.pro` into preConfigure, otherwise `make lrelease`
+  # may clobber the files read by the parallel `make build/rcc/qrc_rbutilqt-lang.cpp`.
+  enableParallelBuilding = false;
+
+  meta = with stdenv.lib; {
+    description = "Open source firmware for mp3 players";
+    homepage = https://www.rockbox.org;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ goibhniu ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/roundup/default.nix b/nixpkgs/pkgs/tools/misc/roundup/default.nix
new file mode 100644
index 000000000000..7eebc1943009
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/roundup/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchFromGitHub, ronn, shocco }:
+
+stdenv.mkDerivation rec {
+  pname = "roundup";
+  version = "0.0.6";
+
+  src = fetchFromGitHub {
+    owner = "bmizerany";
+    repo = "roundup";
+    rev = "v${version}";
+    sha256 = "0nxaqmbv8mdvq9wcaqxk6k5mr31i68jzxf1wxa6pp7xp4prwdc9z";
+  };
+
+  prePatch = ''
+    # Don't change $PATH
+    substituteInPlace configure --replace PATH= NIRVANA=
+    # There are only man pages in sections 1 and 5 \
+    substituteInPlace Makefile --replace "{1..9}" "1 5"
+  '';
+
+  nativeBuildInputs = [ ronn shocco ];
+
+  installTargets = [ "install" "install-man" ];
+
+  preInstall = ''
+    for i in 1 5; do
+      mkdir -p $out/share/man/man$i
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A unit testing tool for running test plans which are written in any POSIX shell";
+    homepage = http://bmizerany.github.io/roundup/;
+    license = licenses.mit;
+    maintainers = with maintainers; [ dotlambda ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/routino/default.nix b/nixpkgs/pkgs/tools/misc/routino/default.nix
new file mode 100644
index 000000000000..d946ed91c726
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/routino/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl, perl, zlib, bzip2 }:
+
+stdenv.mkDerivation rec {
+  pname = "routino";
+  version = "3.3.2";
+
+  src = fetchurl {
+    url = "https://routino.org/download/${pname}-${version}.tgz";
+    sha256 = "1ccx3s99j8syxc1gqkzsaqkmyf44l7h3adildnc5iq2md7bp8wab";
+  };
+
+  nativeBuildInputs = [ perl ];
+
+  buildInputs = [ zlib bzip2 ];
+
+  outputs = [ "out" "doc" ];
+
+  makeFlags = [ "prefix=$(out)" ];
+
+  meta = with stdenv.lib; {
+    homepage = http://www.routino.org/;
+    description = "OpenStreetMap Routing Software";
+    license = licenses.agpl3;
+    maintainers = with maintainers; [ dotlambda ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rpm-ostree/default.nix b/nixpkgs/pkgs/tools/misc/rpm-ostree/default.nix
new file mode 100644
index 000000000000..09f2150cdce3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rpm-ostree/default.nix
@@ -0,0 +1,68 @@
+{ stdenv, fetchurl, ostree, rpm, which, autoconf, automake, libtool, pkgconfig, cargo, rustc,
+  gobject-introspection, gtk-doc, libxml2, libxslt, docbook_xsl, docbook_xml_dtd_42, docbook_xml_dtd_43, gperf, cmake,
+  libcap, glib, systemd, json-glib, libarchive, libsolv, librepo, polkit,
+  bubblewrap, pcre, check, python, json_c, libmodulemd_1, utillinux, sqlite, cppunit, fetchpatch }:
+
+stdenv.mkDerivation rec {
+  pname = "rpm-ostree";
+  version = "2019.5";
+
+  src = fetchurl {
+    url = "https://github.com/projectatomic/${pname}/releases/download/v${version}/${pname}-${version}.tar.xz";
+    sha256 = "0innbrjj086mslbf55bcvs9a3rv9hg1y2nhzxdjy3nhpqxqlzdnn";
+  };
+
+  patches = [
+    # gobject-introspection requires curl in cflags
+    # https://github.com/NixOS/nixpkgs/pull/50953#issuecomment-449777169
+    # https://github.com/NixOS/nixpkgs/pull/50953#issuecomment-452177080
+    ./fix-introspection-build.patch
+
+    # Don't use etc/dbus-1/system.d
+    (fetchpatch {
+      url = "https://github.com/coreos/rpm-ostree/commit/60053d0d3d2279d120ae7007c6048e499d2c4d14.patch";
+      sha256 = "0ig21zip09iy2da7ksg87jykaj3q8jyzh8r7yrpzyql85qxiwm0m";
+    })
+  ];
+
+  outputs = [ "out" "dev" "man" "devdoc" ];
+  nativeBuildInputs = [
+    pkgconfig which autoconf automake libtool cmake gperf cargo rustc
+    gobject-introspection gtk-doc libxml2 libxslt docbook_xsl docbook_xml_dtd_42 docbook_xml_dtd_43
+  ];
+  buildInputs = [
+    libcap ostree rpm glib systemd polkit bubblewrap
+    json-glib libarchive libsolv librepo
+    pcre check python
+     # libdnf
+    json_c libmodulemd_1 utillinux sqlite cppunit
+  ];
+
+  configureFlags = [
+    "--enable-gtk-doc"
+    "--with-bubblewrap=${bubblewrap}/bin/bwrap"
+  ];
+
+  dontUseCmakeConfigure = true;
+
+  prePatch = ''
+    # According to #cmake on freenode, libdnf should bundle the FindLibSolv.cmake module
+    cp ${libsolv}/share/cmake/Modules/FindLibSolv.cmake libdnf/cmake/modules/
+
+    # Let's not hardcode the rpm-gpg path...
+    substituteInPlace libdnf/libdnf/dnf-keyring.cpp \
+      --replace '"/etc/pki/rpm-gpg"' 'getenv("LIBDNF_RPM_GPG_PATH_OVERRIDE") ? getenv("LIBDNF_RPM_GPG_PATH_OVERRIDE") : "/etc/pki/rpm-gpg"'
+  '';
+
+  preConfigure = ''
+    env NOCONFIGURE=1 ./autogen.sh
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A hybrid image/package system. It uses OSTree as an image format, and uses RPM as a component model";
+    homepage = https://rpm-ostree.readthedocs.io/en/latest/;
+    license = licenses.lgpl2Plus;
+    maintainers = with maintainers; [ copumpkin ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rpm-ostree/fix-introspection-build.patch b/nixpkgs/pkgs/tools/misc/rpm-ostree/fix-introspection-build.patch
new file mode 100644
index 000000000000..b82ad5b24b5c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rpm-ostree/fix-introspection-build.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -103,7 +103,7 @@
+ 				     ostree-1 >= 2018.9
+ 				     libsystemd
+ 				     polkit-gobject-1
+-				     rpm librepo libsolv
++				     rpm librepo libsolv libcurl
+ 				     libarchive])
+ 
+ dnl -ldl: https://github.com/ostreedev/ostree/commit/1f832597fc83fda6cb8daf48c4495a9e1590774c
diff --git a/nixpkgs/pkgs/tools/misc/rrdtool/default.nix b/nixpkgs/pkgs/tools/misc/rrdtool/default.nix
new file mode 100644
index 000000000000..8365a47830ad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rrdtool/default.nix
@@ -0,0 +1,30 @@
+{ fetchurl, stdenv, gettext, perl, pkgconfig, libxml2, pango, cairo, groff
+, tcl-8_5, darwin }:
+
+stdenv.mkDerivation rec {
+  name = "rrdtool-1.7.2";
+
+  src = fetchurl {
+    url = "https://oss.oetiker.ch/rrdtool/pub/${name}.tar.gz";
+    sha256 = "1nsqra0g2nja19akmf9x5y9hhgc35ml3w9dcdz2ayz7zgvmzm6d1";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+
+  buildInputs = [ gettext perl libxml2 pango cairo groff ]
+    ++ stdenv.lib.optionals stdenv.isDarwin [ tcl-8_5 darwin.apple_sdk.frameworks.ApplicationServices ];
+
+  postInstall = ''
+    # for munin and rrdtool support
+    mkdir -p $out/${perl.libPrefix}
+    mv $out/lib/perl/5* $out/${perl.libPrefix}
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://oss.oetiker.ch/rrdtool/;
+    description = "High performance logging in Round Robin Databases";
+    license = licenses.gpl2;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rw/default.nix b/nixpkgs/pkgs/tools/misc/rw/default.nix
new file mode 100644
index 000000000000..b6e53e465360
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rw/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "rw";
+  version = "1.0";
+
+  src = fetchurl {
+    url = "https://sortix.org/rw/release/rw-portable-${version}.tar.gz";
+    # Use hash provided by upstream
+    sha256 = "50009730e36991dfe579716f91f4f616f5ba05ffb7bf69c03d41bf305ed93b6d";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with stdenv.lib; {
+    homepage = https://sortix.org/rw;
+    description = "Block device and byte copying program similar to dd";
+    longDescription = ''
+      rw is a command line program which copies information between files
+      or byte streams. The rw command is designed to be a replacement for
+      dd with standard style command line flags.
+    '';
+    license = licenses.isc;
+    maintainers = with maintainers; [ dtzWill ];
+
+    broken = stdenv.hostPlatform.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/s6-portable-utils/default.nix b/nixpkgs/pkgs/tools/misc/s6-portable-utils/default.nix
new file mode 100644
index 000000000000..18813531033f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/s6-portable-utils/default.nix
@@ -0,0 +1,35 @@
+{ skawarePackages }:
+
+with skawarePackages;
+
+let
+  pname = "s6-portable-utils";
+
+in buildPackage {
+  pname = pname;
+  version = "2.2.2.1";
+  sha256 = "074kizkxjwvmxspxg69fr8r0lbiy61l2n5nzgbfvwvhc6lj34iqy";
+
+  description = "A set of tiny general Unix utilities optimized for simplicity and small size";
+
+  outputs = [ "bin" "dev" "doc" "out" ];
+
+  configureFlags = [
+    "--bindir=\${bin}/bin"
+    "--includedir=\${dev}/include"
+    "--with-sysdeps=${skalibs.lib}/lib/skalibs/sysdeps"
+    "--with-include=${skalibs.dev}/include"
+    "--with-lib=${skalibs.lib}/lib"
+    "--with-dynlib=${skalibs.lib}/lib"
+  ];
+
+  postInstall = ''
+    # remove all s6 executables from build directory
+    rm $(find -name "s6-*" -type f -mindepth 1 -maxdepth 1 -executable)
+    rm seekablepipe
+
+    mv doc $doc/share/doc/${pname}/html
+  '';
+
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/sam-ba/default.nix b/nixpkgs/pkgs/tools/misc/sam-ba/default.nix
new file mode 100644
index 000000000000..acab41e8ff54
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sam-ba/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, fetchzip, libX11, libXScrnSaver, libXext, libXft, libXrender
+, freetype, zlib, fontconfig
+}:
+
+let
+  maybe64 = if stdenv.isx86_64 then "_64" else "";
+  libPath = stdenv.lib.makeLibraryPath
+    [ stdenv.cc.cc.lib libX11 libXScrnSaver libXext libXft libXrender freetype
+      zlib fontconfig
+    ];
+in
+stdenv.mkDerivation rec {
+  version = "2.16";
+  pname = "sam-ba";
+
+  src = fetchzip {
+    url = "http://www.atmel.com/dyn/resources/prod_documents/sam-ba_${version}_linux.zip";
+    sha256 = "18lsi4747900cazq3bf0a87n3pc7751j5papj9sxarjymcz9vks4";
+  };
+
+  # Pre-built binary package. Install everything to /opt/sam-ba to not mess up
+  # the internal directory structure. Then create wrapper in /bin. Attemts to
+  # use "patchelf --set-rpath" instead of setting LD_PRELOAD_PATH failed.
+  installPhase = ''
+    mkdir -p "$out/bin/" \
+             "$out/opt/sam-ba/"
+    cp -a . "$out/opt/sam-ba/"
+    patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" "$out/opt/sam-ba/sam-ba${maybe64}"
+    cat > "$out/bin/sam-ba" << EOF
+    export LD_LIBRARY_PATH="${libPath}"
+    exec "$out/opt/sam-ba/sam-ba${maybe64}"
+    EOF
+    chmod +x "$out/bin/sam-ba"
+  '';
+
+  # Do our own thing
+  dontPatchELF = true;
+
+  meta = with stdenv.lib; {
+    description = "Programming tools for Atmel SAM3/7/9 ARM-based microcontrollers";
+    longDescription = ''
+      Atmel SAM-BA software provides an open set of tools for programming the
+      Atmel SAM3, SAM7 and SAM9 ARM-based microcontrollers.
+    '';
+    homepage = http://www.at91.com/linux4sam/bin/view/Linux4SAM/SoftwareTools;
+    # License in <source>/doc/readme.txt
+    license = "BSD-like (partly binary-only)";  # according to Buildroot
+    platforms = [ "x86_64-linux" ];  # patchelf fails on i686-linux
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/scanmem/default.nix b/nixpkgs/pkgs/tools/misc/scanmem/default.nix
new file mode 100644
index 000000000000..65b7b47256a8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/scanmem/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, autoconf, automake, intltool, libtool, fetchFromGitHub, readline }:
+
+stdenv.mkDerivation rec {
+  version = "0.17";
+  pname = "scanmem";
+
+  src = fetchFromGitHub {
+    owner  = "scanmem";
+    repo   = "scanmem";
+    rev    = "v${version}";
+    sha256 = "17p8sh0rj8yqz36ria5bp48c8523zzw3y9g8sbm2jwq7sc27i7s9";
+  };
+
+  nativeBuildInputs = [ autoconf automake intltool libtool ];
+  buildInputs = [ readline ];
+
+  preConfigure = ''
+    ./autogen.sh
+  '';
+  meta = with stdenv.lib; {
+    homepage = https://github.com/scanmem/scanmem;
+    description = "Memory scanner for finding and poking addresses in executing processes";
+    maintainers = [ maintainers.chattered ];
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/scfbuild/default.nix b/nixpkgs/pkgs/tools/misc/scfbuild/default.nix
new file mode 100644
index 000000000000..7fbe13fd44e3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/scfbuild/default.nix
@@ -0,0 +1,40 @@
+{ lib, buildPythonApplication, fetchFromGitHub, python, pyyaml, fonttools, fontforge }:
+
+buildPythonApplication {
+  pname = "scfbuild";
+  version = "1.0.3";
+
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "13rac1";
+    repo = "scfbuild";
+    rev = "9acc7fc5fedbf48683d8932dd5bd7583bf922bae";
+    sha256 = "1zlqsxkpg7zvmhdjgbqwwc9qgac2b8amzq8c5kwyh5cv95zcp6qn";
+  };
+
+  patches = [
+    # Convert to Python 3
+    # https://github.com/13rac1/scfbuild/pull/19
+    ./python-3.patch
+  ];
+
+  propagatedBuildInputs = [ pyyaml fonttools fontforge ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/${python.sitePackages}
+    cp -r scfbuild $out/${python.sitePackages}
+    cp -r bin $out
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "SVGinOT color font builder";
+    homepage = https://github.com/13rac1/scfbuild;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/scfbuild/python-3.patch b/nixpkgs/pkgs/tools/misc/scfbuild/python-3.patch
new file mode 100644
index 000000000000..5a0178ad8c8e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/scfbuild/python-3.patch
@@ -0,0 +1,46 @@
+--- a/bin/scfbuild
++++ b/bin/scfbuild
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python2
++#!/usr/bin/env python3
+ # -*- coding: utf-8 -*-
+ 
+ from __future__ import (absolute_import, division, print_function,
+--- a/scfbuild/builder.py
++++ b/scfbuild/builder.py
+@@ -287,8 +287,8 @@ def _add_name_record(self, text, name_id, platform_id, plat_enc_id, lang_id):
+         # TODO: The installed version of fontTools doesn't have
+         # table__n_a_m_e.setName().
+         record = NameRecord()
+-        # PyYAML creates strings, force to Unicode
+-        record.string = unicode(text)
++        # PyYAML creates strings, which are unicode as of Python3
++        record.string = text
+         record.nameID = name_id
+         record.platformID = platform_id
+         record.platEncID = plat_enc_id
+--- a/scfbuild/fforge.py
++++ b/scfbuild/fforge.py
+@@ -84,7 +84,7 @@ def add_glyphs(font, svg_filepaths, conf):
+             u_ids = [int(u_id, 16) for u_id in filename.split("-")]
+             # Example: (0x1f441, 0x1f5e8)
+ 
+-            u_str = ''.join(map(unichr, u_ids))
++            u_str = ''.join(map(chr, u_ids))
+             # Example: "U\0001f441U\0001f5e8"
+ 
+             # Replace sequences with correct ZWJ/VS16 versions as needed
+--- a/scfbuild/main.py
++++ b/scfbuild/main.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python2
++#!/usr/bin/env python3
+ # -*- coding: utf-8 -*-
+ 
+ # SCFBuild is released under the GNU General Public License v3.
+index 0000000..99418b5
+--- /dev/null
++++ b/scfbuild/requirements.txt
+@@ -0,0 +1,2 @@
++fonttools>=3.41.2
++PyYAML>=5.1
diff --git a/nixpkgs/pkgs/tools/misc/screen/default.nix b/nixpkgs/pkgs/tools/misc/screen/default.nix
new file mode 100644
index 000000000000..bb02c286c4d3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/screen/default.nix
@@ -0,0 +1,67 @@
+{ stdenv, fetchurl, fetchpatch, ncurses, utmp, pam ? null }:
+
+stdenv.mkDerivation rec {
+  pname = "screen";
+  version = "4.7.0";
+
+  src = fetchurl {
+    url = "mirror://gnu/screen/${pname}-${version}.tar.gz";
+    sha256 = "1h90bpy2wk304xw367y1zwz0kilrpm6h28nphykx4fvqz8l56xys";
+  };
+
+  configureFlags= [
+    "--enable-telnet"
+    "--enable-pam"
+    "--with-sys-screenrc=/etc/screenrc"
+    "--enable-colors256"
+  ];
+
+  patches = stdenv.lib.optional stdenv.hostPlatform.isMusl
+    (fetchpatch {
+      url = https://gist.githubusercontent.com/yujinakayama/4608863/raw/76b9f89af5e5a2e97d9a0f36aac989fb56cf1447/gistfile1.diff;
+      sha256 = "0f9bf83p8zdxaa1pr75jyf5g8xr3r8kv7cyzzbpraa1q4j15ss1p";
+      stripLen = 1;
+    });
+
+  postPatch = stdenv.lib.optionalString (stdenv.buildPlatform != stdenv.hostPlatform)
+    # XXX: Awful hack to allow cross-compilation.
+    '' sed -i ./configure \
+           -e 's/^as_fn_error .. \("cannot run test program while cross compiling\)/$as_echo \1/g'
+    ''; # "
+
+  buildInputs = [ ncurses ] ++ stdenv.lib.optional stdenv.isLinux pam
+                            ++ stdenv.lib.optional stdenv.isDarwin utmp;
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    homepage = https://www.gnu.org/software/screen/;
+    description = "A window manager that multiplexes a physical terminal";
+    license = licenses.gpl2Plus;
+
+    longDescription =
+      '' GNU Screen is a full-screen window manager that multiplexes a physical
+         terminal between several processes, typically interactive shells.
+         Each virtual terminal provides the functions of the DEC VT100
+         terminal and, in addition, several control functions from the ANSI
+         X3.64 (ISO 6429) and ISO 2022 standards (e.g., insert/delete line
+         and support for multiple character sets).  There is a scrollback
+         history buffer for each virtual terminal and a copy-and-paste
+         mechanism that allows the user to move text regions between windows.
+         When screen is called, it creates a single window with a shell in it
+         (or the specified command) and then gets out of your way so that you
+         can use the program as you normally would.  Then, at any time, you
+         can create new (full-screen) windows with other programs in them
+         (including more shells), kill the current window, view a list of the
+         active windows, turn output logging on and off, copy text between
+         windows, view the scrollback history, switch between windows, etc.
+         All windows run their programs completely independent of each other.
+         Programs continue to run when their window is currently not visible
+         and even when the whole screen session is detached from the users
+         terminal.
+      '';
+
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ peti vrthra ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/screenfetch/default.nix b/nixpkgs/pkgs/tools/misc/screenfetch/default.nix
new file mode 100644
index 000000000000..d01a3a877f2b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/screenfetch/default.nix
@@ -0,0 +1,62 @@
+{ stdenv, lib, fetchFromGitHub, makeWrapper, coreutils, gawk, procps, gnused
+, bc, findutils, xdpyinfo, xprop, gnugrep, ncurses, pciutils
+, darwin
+}:
+
+let
+  path = lib.makeBinPath ([
+    coreutils gawk gnused findutils
+    gnugrep ncurses bc pciutils
+  ] ++ lib.optionals stdenv.isLinux [
+    procps
+    xdpyinfo
+    xprop
+  ] ++ lib.optionals stdenv.isDarwin (with darwin; [
+    adv_cmds
+    DarwinTools
+    system_cmds
+    "/usr" # some commands like defaults is not available to us
+  ]));
+
+in stdenv.mkDerivation rec {
+  pname = "screenFetch";
+  version = "3.9.1";
+
+  src = fetchFromGitHub {
+    owner  = "KittyKatt";
+    repo   = "screenFetch";
+    rev    = "v${version}";
+    sha256 = "04l8aqr474pb115nagn9f6y48jw92n1qfszgw7dbhgl4mpn95lcr";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    install -Dm 0755 screenfetch-dev $out/bin/screenfetch
+    install -Dm 0644 screenfetch.1 $out/share/man/man1/screenfetch.1
+    install -Dm 0644 -t $out/share/doc/screenfetch CHANGELOG COPYING README.mkdn TODO
+
+    # Fix all of the dependencies of screenfetch
+    patchShebangs $out/bin/screenfetch
+    wrapProgram "$out/bin/screenfetch" \
+      --prefix PATH : ${path}
+  '';
+
+  meta = with lib; {
+    description = "Fetches system/theme information in terminal for Linux desktop screenshots";
+    longDescription = ''
+      screenFetch is a "Bash Screenshot Information Tool". This handy Bash
+      script can be used to generate one of those nifty terminal theme
+      information + ASCII distribution logos you see in everyone's screenshots
+      nowadays. It will auto-detect your distribution and display an ASCII
+      version of that distribution's logo and some valuable information to the
+      right. There are options to specify no ascii art, colors, taking a
+      screenshot upon displaying info, and even customizing the screenshot
+      command! This script is very easy to add to and can easily be extended.
+    '';
+    license = licenses.gpl3;
+    homepage = https://github.com/KittyKatt/screenFetch;
+    maintainers = with maintainers; [ relrod ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sdate/default.nix b/nixpkgs/pkgs/tools/misc/sdate/default.nix
new file mode 100644
index 000000000000..742b25601c08
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sdate/default.nix
@@ -0,0 +1,19 @@
+{ stdenv, fetchurl, autoreconfHook }:
+stdenv.mkDerivation rec {
+  pname = "sdate";
+  version = "0.5";
+  src = fetchurl {
+    url = "https://github.com/ChristophBerg/sdate/archive/${version}.tar.gz";
+    sha256 = "0gbjl1jfxjwiiwf9rz38yp6rb1mgzhawcyg0g9byl6m4kgivf0cx";
+  };
+
+  buildInputs = [ autoreconfHook ];
+
+  meta = {
+    homepage = https://www.df7cb.de/projects/sdate;
+    description = "Eternal september version of the date program";
+    license = stdenv.lib.licenses.gpl2Plus;
+    maintainers = with stdenv.lib.maintainers; [ edef ];
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sdl-jstest/default.nix b/nixpkgs/pkgs/tools/misc/sdl-jstest/default.nix
new file mode 100644
index 000000000000..0be5b8d13796
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sdl-jstest/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchgit, cmake, pkgconfig, SDL, SDL2, ncurses, docbook_xsl, git }:
+
+stdenv.mkDerivation {
+  pname = "sdl-jstest";
+  version = "2018-06-15";
+
+  # Submodules
+  src = fetchgit {
+    url = "https://github.com/Grumbel/sdl-jstest";
+    rev = "aafbdb1ed3e687583037ba55ae88b1210d6ce98b";
+    sha256 = "0p4cjzcq0bbkzad19jwdklylqhq2q390q7dpg8bfzl2rwls883rk";
+  };
+
+  buildInputs = [ SDL SDL2 ncurses ];
+  nativeBuildInputs = [ cmake pkgconfig docbook_xsl git ];
+  
+  meta = with stdenv.lib; {
+    homepage = https://github.com/Grumbel/sdl-jstest;
+    description = "Simple SDL joystick test application for the console";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/shadowenv/default.nix b/nixpkgs/pkgs/tools/misc/shadowenv/default.nix
new file mode 100644
index 000000000000..faa4220200cc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/shadowenv/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchFromGitHub, rustPlatform, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "shadowenv";
+  version = "1.3.1";
+
+  src = fetchFromGitHub {
+    owner = "Shopify";
+    repo = pname;
+    rev = version;
+    sha256 = "1s59ra99wcyyqz8gzly4qmcq5rh22c50c75cdi2kyajm7ghgryy9";
+  };
+
+  cargoSha256 = "0s4p4mpz1p5v9hr4flxlzqvc1b3zbqr3nxp1nxjw39ng9g3hplpg";
+
+  buildInputs = stdenv.lib.optionals stdenv.isDarwin [ Security ];
+
+  meta = with stdenv.lib; {
+    homepage = "https://shopify.github.io/shadowenv/";
+    description = "reversible directory-local environment variable manipulations";
+    license = licenses.mit;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/shallot/default.nix b/nixpkgs/pkgs/tools/misc/shallot/default.nix
new file mode 100644
index 000000000000..ced15038b0c1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/shallot/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, fetchFromGitHub, fetchpatch
+, openssl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "shallot";
+  version = "0.0.3";
+
+  src = fetchFromGitHub {
+    owner = "katmagic";
+    repo = "Shallot";
+    rev = "shallot-${version}";
+    sha256 = "0cjafdxvjkwb9vyifhh11mw0la7yfqswqwqmrfp1fy9jl7m0il9k";
+  };
+
+  buildInputs = [ openssl ];
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/katmagic/Shallot/commit/c913088dfaaaf249494514f20a62f2a17b5c6606.patch";
+      sha256 = "19l1ppbxpdb0736f7plhybj08wh6rqk1lr3bxsp8jpzpnkh114b2";
+    })
+    (fetchpatch {
+      url = "https://github.com/katmagic/Shallot/commit/cd6628d97b981325e700a38f408a43df426fd569.patch";
+      sha256 = "1gaffp5wp1l5p2qdk0ix3i5fhzpx4xphl0haa6ajhqn8db7hbr9y";
+    })
+    (fetchpatch {
+      url = "https://github.com/katmagic/Shallot/commit/5c7c1ccecbbad5a121c50ba7153cbbee7ee0ebf9.patch";
+      sha256 = "1zmll4iqz39zwk8vj40n1dpvyq3403l64p2127gsjgh2l2v91s4k";
+    })
+  ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ./shallot $out/bin/
+  '';
+
+  meta = {
+    description = "Shallot allows you to create customized .onion addresses for your hidden service";
+
+    license = stdenv.lib.licenses.mit;
+    homepage = https://github.com/katmagic/Shallot;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/shell-hist/default.nix b/nixpkgs/pkgs/tools/misc/shell-hist/default.nix
new file mode 100644
index 000000000000..b44cbf100e8a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/shell-hist/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage {
+  pname = "shell-hist";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "jamesmunns";
+    repo = "shell-hist";
+    rev = "158de8c3908b49530ecd76bf6e65c210f351ef82";
+    sha256 = "0kc128xnnp1d56if70vfv0w3qnwhljhbnvzwwb7hfm3x2m0vqrqf";
+  };
+
+  cargoSha256 = "1nqnkzwqk879qy1261g1gds668xz6islhzq7chzhilaqpmvf6039";
+
+  meta = with lib; {
+    description = "Inspect your shell history";
+    homepage = "https://github.com/jamesmunns/shell-hist";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = [ maintainers.spacekookie ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/shelldap/default.nix b/nixpkgs/pkgs/tools/misc/shelldap/default.nix
new file mode 100644
index 000000000000..89257c8ffc46
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/shelldap/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, perlPackages }:
+perlPackages.buildPerlPackage rec {
+  pname = "shelldap";
+  version = "1.4.0";
+  src = fetchurl {
+    url = "https://bitbucket.org/mahlon/shelldap/downloads/shelldap-${version}.tar.gz";
+    sha256 = "07gkvvxcgw3pgkfy8p9mmidakciaq1rsq5zhmdqd8zcwgqkrr24i";
+  };
+  buildInputs = with perlPackages; [ perl YAMLSyck NetLDAP AlgorithmDiff IOSocketSSL AuthenSASL TermReadLineGnu TermShell ];
+  prePatch = ''
+    touch Makefile.PL
+  '';
+  installPhase = ''
+    runHook preInstall
+    install -Dm555 -t $out/bin shelldap
+    runHook preInstall
+  '';
+  outputs = [ "out" ];
+  meta = with stdenv.lib; {
+    homepage = https://bitbucket.org/mahlon/shelldap/;
+    description = "A handy shell-like interface for browsing LDAP servers and editing their content";
+    license = with licenses; [ bsd3 ];
+    maintainers = with maintainers; [ tobiasBora ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/shunit2/default.nix b/nixpkgs/pkgs/tools/misc/shunit2/default.nix
new file mode 100644
index 000000000000..acfbd48c606f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/shunit2/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+  pname = "shunit2";
+  version = "2019-08-10";
+
+  src = fetchFromGitHub {
+    owner = "kward";
+    repo = "shunit2";
+    rev = "ba130d69bbff304c0c6a9c5e8ab549ae140d6225";
+    sha256 = "1bsn8dhxbjfmh01lq80yhnld3w3fw1flh7nwx12csrp58zsvlmgk";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin/
+    cp ./shunit2 $out/bin/shunit2
+    chmod +x $out/bin/shunit2
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/shunit2
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/kward/shunit2;
+    description = "A xUnit based unit test framework for Bourne based shell scripts.";
+    maintainers = with maintainers; [ cdepillabout utdemir ];
+    license = licenses.asl20;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sixpair/default.nix b/nixpkgs/pkgs/tools/misc/sixpair/default.nix
new file mode 100644
index 000000000000..055fa9418a9a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sixpair/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchurl, libusb }:
+stdenv.mkDerivation {
+  name = "sixpair-2007-04-18";
+
+  src = fetchurl {
+    url = http://www.pabr.org/sixlinux/sixpair.c;
+    sha256 = "1b0a3k7gs544cbji7n29jxlrsscwfx6s1r2sgwdl6hmkc1l9gagr";
+  };
+
+  # hcitool is depricated
+  patches = [ ./hcitool.patch ];
+
+  buildInputs = [ libusb ];
+
+  unpackPhase = ''
+    cp $src sixpair.c
+  '';
+
+  buildPhase = ''
+    cc -o sixpair sixpair.c -lusb
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp sixpair $out/bin/sixpair
+  '';
+
+  meta = {
+    description = "Pair with SIXAXIS controllers over USB";
+    longDescription = ''
+      This command-line utility searches USB buses for SIXAXIS controllers and tells them to connect to a new Bluetooth master.
+    '';
+    homepage = http://www.pabr.org/sixlinux/;
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = [ stdenv.lib.maintainers.tomsmeets ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sixpair/hcitool.patch b/nixpkgs/pkgs/tools/misc/sixpair/hcitool.patch
new file mode 100644
index 000000000000..b66e791dd0e0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sixpair/hcitool.patch
@@ -0,0 +1,19 @@
+diff --git a/sixpair.c b/sixpair.c
+index b009a6f..78b7ef0 100644
+--- a/sixpair.c
++++ b/sixpair.c
+@@ -76,11 +76,11 @@ void process_device(int argc, char **argv, struct usb_device *dev,
+       exit(1);
+     }
+   } else {
+-    FILE *f = popen("hcitool dev", "r");
++    FILE *f = popen("bluetoothctl list", "r");
+     if ( !f ||
+-	 fscanf(f, "%*s\n%*s %x:%x:%x:%x:%x:%x",
++	 fscanf(f, "%*s %x:%x:%x:%x:%x:%x",
+ 		&mac[0],&mac[1],&mac[2],&mac[3],&mac[4],&mac[5]) != 6 ) {
+-      printf("Unable to retrieve local bd_addr from `hcitool dev`.\n");
++      printf("Unable to retrieve local bd_addr from `bluetoothctl list`.\n");
+       printf("Please enable Bluetooth or specify an address manually.\n");
+       exit(1);
+     }
diff --git a/nixpkgs/pkgs/tools/misc/skim/default.nix b/nixpkgs/pkgs/tools/misc/skim/default.nix
new file mode 100644
index 000000000000..0c8e2da36df1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/skim/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "skim";
+  version = "0.7.0";
+
+  src = fetchFromGitHub {
+    owner = "lotabout";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0is6zymvy673f1g466i3ayi4jawdl7pm9l3cbdxcw32h3snbkgqp";
+  };
+
+  outputs = [ "out" "vim" ];
+
+  cargoSha256 = "1dl530ac8i4wdw7lziskl7rhh3ak9ykcws3kpy64808kxg3b1jnz";
+
+  patchPhase = ''
+    sed -i -e "s|expand('<sfile>:h:h')|'$out'|" plugin/skim.vim
+  '';
+
+  postInstall = ''
+    install -D -m 555 bin/sk-tmux -t $out/bin
+    install -D -m 644 man/man1/* -t $out/man/man1
+    install -D -m 444 shell/* -t $out/share/skim
+    install -D -m 444 plugin/skim.vim -t $vim/plugin
+
+    cat <<SCRIPT > $out/bin/sk-share
+    #! ${stdenv.shell}
+    # Run this script to find the skim shared folder where all the shell
+    # integration scripts are living.
+    echo $out/share/skim
+    SCRIPT
+    chmod +x $out/bin/sk-share
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Command-line fuzzy finder written in Rust";
+    homepage = "https://github.com/lotabout/skim";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dywedir ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sl/default.nix b/nixpkgs/pkgs/tools/misc/sl/default.nix
new file mode 100644
index 000000000000..4ef91f6c55a3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sl/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchFromGitHub, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "sl";
+  version = "5.05";
+
+  src = fetchFromGitHub {
+    owner = "eyJhb";
+    repo = "sl";
+    rev = version;
+    sha256 = "11a1rdgb8wagikhxgm81g80g5qsl59mv4qgsval3isykqh8729bj";
+  };
+
+  buildInputs = [ ncurses ];
+
+  makeFlags = [ "CC:=$(CC)" ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 -t $out/bin sl
+    install -Dm644 -t $out/share/man/man1 sl.1{,.ja}
+
+    runHook postInstall
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Steam Locomotive runs across your terminal when you type 'sl'";
+    homepage = http://www.tkl.iis.u-tokyo.ac.jp/~toyoda/index_e.html;
+    license = rec {
+      shortName = "Toyoda Masashi's free software license";
+      fullName = shortName;
+      url = https://github.com/eyJhb/sl/blob/master/LICENSE;
+    };
+    maintainers = with maintainers; [ eyjhb ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/slop/default.nix b/nixpkgs/pkgs/tools/misc/slop/default.nix
new file mode 100644
index 000000000000..335a687dbc28
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/slop/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchFromGitHub, cmake, pkgconfig
+, glew, glm, libGLU, libGL, libX11, libXext, libXrender, icu
+, cppcheck
+}:
+
+stdenv.mkDerivation rec {
+  pname = "slop";
+  version = "7.4";
+
+  src = fetchFromGitHub {
+    owner = "naelstrof";
+    repo = "slop";
+    rev = "v${version}";
+    sha256 = "0fgd8a2dqkg64all0f96sca92sdss9r3pzmv5kck46b99z2325z6";
+  };
+
+  nativeBuildInputs = [ cmake pkgconfig ];
+  buildInputs = [ glew glm libGLU libGL libX11 libXext libXrender icu ]
+                ++ stdenv.lib.optional doCheck cppcheck;
+
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    inherit (src.meta) homepage;
+    description = "Queries a selection from the user and prints to stdout";
+    platforms = stdenv.lib.platforms.linux;
+    license = stdenv.lib.licenses.gpl3Plus;
+    maintainers = with maintainers; [ primeos mbakke ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/slsnif/default.nix b/nixpkgs/pkgs/tools/misc/slsnif/default.nix
new file mode 100644
index 000000000000..72363de7653e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/slsnif/default.nix
@@ -0,0 +1,17 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation {
+  name = "slsnif-0.4.4";
+
+  src = fetchurl {
+    url = mirror://sourceforge/slsnif/slsnif-0.4.4.tar.gz;
+    sha256 = "0gn8c5hj8m3sywpwdgn6w5xl4rzsvg0z7d2w8dxi6p152j5b0pii";
+  };
+
+  meta = { 
+    description = "Serial line sniffer";
+    homepage = http://slsnif.sourceforge.net/;
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/slurp/default.nix b/nixpkgs/pkgs/tools/misc/slurp/default.nix
new file mode 100644
index 000000000000..bc0e86f1b518
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/slurp/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchFromGitHub, meson, ninja, pkgconfig
+, cairo, wayland, wayland-protocols
+, buildDocs ? true, scdoc
+}:
+
+stdenv.mkDerivation rec {
+  pname = "slurp";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "emersion";
+    repo = "slurp";
+    rev = "v${version}";
+    sha256 = "0580m6kaiilgsrcj608r837r37sl6a25y7w21p7d6ij20fs3gvg1";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkgconfig
+  ] ++ stdenv.lib.optional buildDocs scdoc;
+
+  buildInputs = [
+    cairo
+    wayland
+    wayland-protocols
+  ];
+
+  mesonFlags = stdenv.lib.optional buildDocs "-Dman-pages=enabled";
+
+  meta = with stdenv.lib; {
+    description = "Select a region in a Wayland compositor";
+    homepage = https://github.com/emersion/slurp;
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ buffet ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/smc/default.nix b/nixpkgs/pkgs/tools/misc/smc/default.nix
new file mode 100644
index 000000000000..f442df399d90
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/smc/default.nix
@@ -0,0 +1,49 @@
+{ stdenv, fetchurl, jre, runtimeShell }:
+
+stdenv.mkDerivation {
+  name = "smc-6.6.3";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/smc/smc/6_6_3/smc_6_6_3.tgz";
+    sha256 = "1gv0hrgdl4wp562virpf9sib6pdhapwv4zvwbl0d5f5xyx04il11";
+  };
+
+  # Prebuilt Java package.
+  installPhase = ''
+    mkdir -p "$out/bin"
+    mkdir -p "$out/share/smc"
+    mkdir -p "$out/share/smc/lib"
+    mkdir -p "$out/share/icons"
+    mkdir -p "$out/share/java"
+
+    cp bin/Smc.jar "$out/share/java/"
+    cp -r examples/ docs/ tools/ README.txt LICENSE.txt "$out/share/smc/"
+    cp -r lib/* "$out/share/smc/lib/"
+    cp misc/smc.ico "$out/share/icons/"
+
+    cat > "$out/bin/smc" << EOF
+    #!${runtimeShell}
+    ${jre}/bin/java -jar "$out/share/java/Smc.jar" "\$@"
+    EOF
+    chmod a+x "$out/bin/smc"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Generate state machine code from text input (state diagram)";
+    longDescription = ''
+      SMC (State Machine Compiler) takes a text input file describing states,
+      events and actions of a state machine and generates source code that
+      implements the state machine.
+
+      SMC supports many target languages:
+      C, C++, DotNet, Groovy, java, Java, JavaScript, Lua, ObjC, Perl, Php,
+      Python, Ruby, Scala, Tcl.
+
+      SMC can also generate GraphViz state diagrams from the input file.
+    '';
+    homepage = http://smc.sourceforge.net/;
+    license = licenses.mpl11;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/smenu/default.nix b/nixpkgs/pkgs/tools/misc/smenu/default.nix
new file mode 100644
index 000000000000..c6661ee62e46
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/smenu/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub, ncurses }:
+
+stdenv.mkDerivation rec {
+  version = "0.9.15";
+  pname = "smenu";
+
+  src = fetchFromGitHub {
+    owner  = "p-gen";
+    repo   = "smenu";
+    rev    = "v${version}";
+    sha256 = "0s9qhg6dln33x8r2g8igvgkyrv8g1z26wf8gcnqp3kbp6fw12izi";
+  };
+
+  buildInputs = [ ncurses ];
+
+  meta = with stdenv.lib; {
+    homepage        = https://github.com/p-gen/smenu;
+    description     = "Terminal selection utility";
+    longDescription = ''
+      Terminal utility that allows you to use words coming from the standard
+      input to create a nice selection window just below the cursor. Once done,
+      your selection will be sent to standard output.
+    '';
+    license     = licenses.gpl2;
+    maintainers = [ maintainers.matthiasbeyer ];
+    platforms   = platforms.unix;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/snapper/default.nix b/nixpkgs/pkgs/tools/misc/snapper/default.nix
new file mode 100644
index 000000000000..283503f28788
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/snapper/default.nix
@@ -0,0 +1,73 @@
+{ stdenv, fetchFromGitHub
+, autoreconfHook, pkgconfig, docbook_xsl, libxslt, docbook_xml_dtd_45
+, acl, attr, boost, btrfs-progs, dbus, diffutils, e2fsprogs, libxml2
+, lvm2, pam, python, utillinux, fetchpatch, json_c }:
+
+stdenv.mkDerivation rec {
+  pname = "snapper";
+  version = "0.8.8";
+
+  src = fetchFromGitHub {
+    owner = "openSUSE";
+    repo = "snapper";
+    rev = "v${version}";
+    sha256 = "0wpf82xf61r9r20whhb83wk3408wac1if8awqm3bb36b9j7ni5jr";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook pkgconfig
+    docbook_xsl libxslt docbook_xml_dtd_45
+  ];
+  buildInputs = [
+    acl attr boost btrfs-progs dbus diffutils e2fsprogs libxml2
+    lvm2 pam python utillinux json_c
+  ];
+
+  patches = [
+    # Don't use etc/dbus-1/system.d
+    (fetchpatch {
+      url = "https://github.com/openSUSE/snapper/commit/c51708aea22d9436da287cba84424557ad03644b.patch";
+      sha256 = "106pf7pv8z3q37c8ckmgwxs1phf2fy7l53a9g5xq5kk2rjj1cx34";
+    })
+  ];
+
+  postPatch = ''
+    # Hard-coded root paths, hard-coded root paths everywhere...
+    for file in {client,data,pam,scripts,zypp-plugin}/Makefile.am; do
+      substituteInPlace $file \
+        --replace '$(DESTDIR)/usr' "$out" \
+        --replace "DESTDIR" "out" \
+        --replace "/usr" "$out"
+    done
+    substituteInPlace pam/Makefile.am \
+      --replace '/`basename $(libdir)`' "$out/lib"
+  '';
+
+  configureFlags = [
+    "--disable-ext4"	# requires patched kernel & e2fsprogs
+  ];
+
+  enableParallelBuilding = true;
+
+  NIX_CFLAGS_COMPILE = "-I${libxml2.dev}/include/libxml2";
+
+  postInstall = ''
+    rm -r $out/etc/cron.*
+    patchShebangs $out/lib/zypp/plugins/commit/*
+    for file in \
+      $out/lib/pam_snapper/* \
+      $out/lib/systemd/system/* \
+      $out/share/dbus-1/system-services/* \
+    ; do
+      substituteInPlace $file --replace "/usr" "$out"
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Tool for Linux filesystem snapshot management";
+    homepage = http://snapper.io;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ tstrobel markuskowa ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/snore/default.nix b/nixpkgs/pkgs/tools/misc/snore/default.nix
new file mode 100644
index 000000000000..f6f177811b02
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/snore/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  version = "0.1";
+  pname = "snore";
+
+  src = fetchFromGitHub {
+    owner = "clamiax";
+    repo = pname;
+    rev = version;
+    sha256 = "1ic1qy6ybnjlkz5rb1hpvq6dcdmxw5xcx34qcadrsfdjizxcv8pp";
+  };
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  meta = with stdenv.lib; {
+    description = "sleep with feedback";
+    homepage = "https://github.com/clamiax/snore";
+    license = licenses.mit;
+    maintainers = [ maintainers.marsam ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sonota/default.nix b/nixpkgs/pkgs/tools/misc/sonota/default.nix
new file mode 100644
index 000000000000..d111e0b2b717
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sonota/default.nix
@@ -0,0 +1,54 @@
+{ fetchFromGitHub, fetchurl, lib, python3Packages
+, coreVersion ? "1.13.3" # the version of the binary espurna image to flash
+, coreSize    ? "1MB"    # size of the binary image to flash
+, coreSha256  ? "0pkb2nmml0blrfiqpc46xpjc2dw927i89k1lfyqx827wanhc704x" }:
+
+with python3Packages;
+
+let
+  core = fetchurl {
+    url    = "https://github.com/xoseperez/espurna/releases/download/${coreVersion}/espurna-${coreVersion}-espurna-core-${coreSize}.bin";
+    sha256 = coreSha256;
+  };
+
+in buildPythonApplication rec {
+  pname = "sonota-unstable";
+  version = "2018-10-07";
+
+  src = fetchFromGitHub {
+    owner  = "mirko";
+    repo   = "SonOTA";
+    rev    = "d7f4b353858aae7ac403f95475a35560fb7ffeae";
+    sha256 = "0jd9xrhcyk8d2plbjnrlpn87536zr6n708797n0k5blf109q3c1z";
+  };
+
+  patches = [
+    ./set_resource_path.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace sonota.py --subst-var out
+  '';
+
+  format = "other";
+
+  propagatedBuildInputs = [ httplib2 netifaces tornado ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 sonota.py $out/bin/sonota
+    install -d $out/share/sonota
+    cp -r ssl static $out/share/sonota
+    cp ${core} $out/share/sonota/static/image_arduino.bin
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Flash Itead Sonoff devices with custom firmware via original OTA mechanism";
+    homepage = src.meta.homepage;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ peterhoeg ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sonota/set_resource_path.patch b/nixpkgs/pkgs/tools/misc/sonota/set_resource_path.patch
new file mode 100644
index 000000000000..f9a802657762
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sonota/set_resource_path.patch
@@ -0,0 +1,20 @@
+diff --git a/sonota.py b/sonota.py
+index f67128b..9f2752e 100644
+--- a/sonota.py
++++ b/sonota.py
+@@ -475,14 +475,7 @@ def promptforval(msg):
+             return val
+
+ def resource_path(relative_path):
+-    """ Get absolute path to resource, works for dev and for PyInstaller """
+-    try:
+-        # PyInstaller creates a temp folder and stores path in _MEIPASS
+-        base_path = sys._MEIPASS
+-    except Exception:
+-        base_path = os.path.dirname(sys.argv[0])
+-
+-    return os.path.join(base_path, relative_path)
++    return os.path.join("@out@/share/sonota", relative_path)
+
+ def checkargs():
+     # Make sure all of the binary files that are needed are there
diff --git a/nixpkgs/pkgs/tools/misc/starship/default.nix b/nixpkgs/pkgs/tools/misc/starship/default.nix
new file mode 100644
index 000000000000..9c9a4450ee8b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/starship/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, rustPlatform
+, libiconv, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "starship";
+  version = "0.33.1";
+
+  src = fetchFromGitHub {
+    owner = "starship";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "15z8iwig10brjxirr9nm1aibjz6qpd82v7n9c4i2q1q9qvb3j5cs";
+  };
+
+  buildInputs = stdenv.lib.optionals stdenv.isDarwin [ libiconv Security ];
+
+  postPatch = ''
+    substituteInPlace src/utils.rs \
+      --replace "/bin/echo" "echo"
+  '';
+
+  cargoSha256 = "16jr96ljd34x3fa2jahcqmjm1ds8519hx391wv1snk7y70fz1314";
+  checkPhase = "cargo test -- --skip directory::home_directory --skip directory::directory_in_root";
+
+  meta = with stdenv.lib; {
+    description = "A minimal, blazing fast, and extremely customizable prompt for any shell";
+    homepage = "https://starship.rs";
+    license = licenses.isc;
+    maintainers = with maintainers; [ bbigras davidtwco filalex77 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/staruml/default.nix b/nixpkgs/pkgs/tools/misc/staruml/default.nix
new file mode 100644
index 000000000000..e4e1adf20016
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/staruml/default.nix
@@ -0,0 +1,55 @@
+{ stdenv, fetchurl, makeWrapper
+, dpkg, patchelf
+, gtk2, glib, gdk-pixbuf, alsaLib, nss, nspr, GConf, cups, libgcrypt, dbus, systemd
+, libXdamage, expat }:
+
+let
+  inherit (stdenv) lib;
+  LD_LIBRARY_PATH = lib.makeLibraryPath
+    [ glib gtk2 gdk-pixbuf alsaLib nss nspr GConf cups libgcrypt dbus libXdamage expat ];
+in
+stdenv.mkDerivation rec {
+  version = "2.8.1";
+  pname = "staruml";
+
+  src =
+    if stdenv.hostPlatform.system == "i686-linux" then fetchurl {
+      url = "https://s3.amazonaws.com/staruml-bucket/releases-v2/StarUML-v${version}-32-bit.deb";
+      sha256 = "0vb3k9m3l6pmsid4shlk0xdjsriq3gxzm8q7l04didsppg0vvq1n";
+    } else fetchurl {
+      url = "https://s3.amazonaws.com/staruml-bucket/releases-v2/StarUML-v${version}-64-bit.deb";
+      sha256 = "05gzrnlssjkhyh0wv019d4r7p40lxnsa1sghazll6f233yrqmxb0";
+    };
+
+  nativeBuildInputs = [ makeWrapper dpkg ];
+
+  unpackPhase = ''
+    mkdir pkg
+    dpkg-deb -x $src pkg
+    sourceRoot=pkg
+  '';
+
+  installPhase = ''
+    mkdir $out
+    mv opt/staruml $out/bin
+
+    mkdir -p $out/lib
+    ln -s ${stdenv.cc.cc.lib}/lib/libstdc++.so.6 $out/lib/
+    ln -s ${systemd.lib}/lib/libudev.so.1 $out/lib/libudev.so.0
+
+    for binary in StarUML Brackets-node; do
+      ${patchelf}/bin/patchelf \
+        --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+        $out/bin/$binary
+      wrapProgram $out/bin/$binary \
+        --prefix LD_LIBRARY_PATH : $out/lib:${LD_LIBRARY_PATH}
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A sophisticated software modeler";
+    homepage = http://staruml.io/;
+    license = licenses.unfree;
+    platforms = [ "i686-linux" "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/stow/default.nix b/nixpkgs/pkgs/tools/misc/stow/default.nix
new file mode 100644
index 000000000000..d5eecff72781
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/stow/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchurl, perl, perlPackages }:
+
+let
+  pname = "stow";
+  version = "2.3.1";
+in
+stdenv.mkDerivation {
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "mirror://gnu/stow/stow-${version}.tar.bz2";
+    sha256 = "0bs2b90wjkk1camcasy8kn403kazq6c7fj5m5msfl3navbgwz9i6";
+  };
+
+  buildInputs = with perlPackages; [ perl IOStringy TestOutput ];
+
+  doCheck = true;
+
+  meta = {
+    description = "A tool for managing the installation of multiple software packages in the same run-time directory tree";
+
+    longDescription = ''
+      GNU Stow is a symlink farm manager which takes distinct packages
+      of software and/or data located in separate directories on the
+      filesystem, and makes them appear to be installed in the same
+      place. For example, /usr/local/bin could contain symlinks to
+      files within /usr/local/stow/emacs/bin, /usr/local/stow/perl/bin
+      etc., and likewise recursively for any other subdirectories such
+      as .../share, .../man, and so on.
+    '';
+
+    license = stdenv.lib.licenses.gpl3Plus;
+    homepage = https://www.gnu.org/software/stow/;
+
+    maintainers = with stdenv.lib.maintainers; [ the-kenny ];
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/subberthehut/default.nix b/nixpkgs/pkgs/tools/misc/subberthehut/default.nix
new file mode 100644
index 000000000000..e54dc3b3f2b6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/subberthehut/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub, pkgconfig, xmlrpc_c, glib, zlib }:
+stdenv.mkDerivation rec {
+  pname = "subberthehut";
+  version = "20";
+
+  src = fetchFromGitHub {
+    owner  = "mus65";
+    repo   = "subberthehut";
+    rev    = version;
+    sha256 = "19prdqbk19h0wak318g2jn1mnfm7l7f83a633bh0rhskysmqrsj1";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ xmlrpc_c glib zlib ];
+
+  installPhase = ''
+    install -Dm755 subberthehut $out/bin/subberthehut
+    install -Dm644 bash_completion $out/share/bash-completion/completions/subberthehut
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/mus65/subberthehut;
+    description = "An OpenSubtitles.org downloader";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ jqueiroz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sutils/default.nix b/nixpkgs/pkgs/tools/misc/sutils/default.nix
new file mode 100644
index 000000000000..8d42d2d823f3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sutils/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub, alsaLib }:
+
+stdenv.mkDerivation rec {
+   version = "0.2";
+   pname = "sutils";
+
+   src = fetchFromGitHub {
+     owner = "baskerville";
+     repo = "sutils";
+     rev = version;
+     sha256 = "0i2g6a6xdaq3w613dhq7mnsz4ymwqn6kvkyan5kgy49mzq97va6j";
+   };
+
+   hardeningDisable = [ "format" ];
+
+   buildInputs = [ alsaLib ];
+
+   prePatch = ''sed -i "s@/usr/local@$out@" Makefile'';
+
+   meta = {
+     description = "Small command-line utilities";
+     homepage = https://github.com/baskerville/sutils;
+     maintainers = [ stdenv.lib.maintainers.meisternu ];
+     license = "Custom";
+     platforms = stdenv.lib.platforms.linux;
+   };
+}
diff --git a/nixpkgs/pkgs/tools/misc/svtplay-dl/default.nix b/nixpkgs/pkgs/tools/misc/svtplay-dl/default.nix
new file mode 100644
index 000000000000..66ed0a11fd92
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/svtplay-dl/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, fetchFromGitHub, makeWrapper, python3Packages, perl, zip
+, gitMinimal }:
+
+let
+
+  inherit (python3Packages)
+    python nose pycrypto pyyaml requests mock python-dateutil setuptools;
+
+in stdenv.mkDerivation rec {
+  pname = "svtplay-dl";
+  version = "2.4";
+
+  src = fetchFromGitHub {
+    owner = "spaam";
+    repo = "svtplay-dl";
+    rev = version;
+    sha256 = "146ss7pzh61yw84crk6hzfxkfdnf6bq07m11b6lgsw4hsn71g59w";
+  };
+
+  pythonPaths = [ pycrypto pyyaml requests ];
+  buildInputs = [ python perl nose mock makeWrapper python-dateutil setuptools ] ++ pythonPaths;
+  nativeBuildInputs = [ gitMinimal zip ];
+
+  postPatch = ''
+    substituteInPlace scripts/run-tests.sh \
+      --replace 'PYTHONPATH=lib' 'PYTHONPATH=lib:$PYTHONPATH'
+  '';
+
+  makeFlags = [ "PREFIX=$(out)" "SYSCONFDIR=$(out)/etc" "PYTHON=${python.interpreter}" ];
+
+  postInstall = ''
+    wrapProgram "$out/bin/svtplay-dl" \
+      --prefix PYTHONPATH : "$PYTHONPATH"
+  '';
+
+  doCheck = true;
+  checkPhase = ''
+    sh scripts/run-tests.sh -2
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/spaam/svtplay-dl;
+    description = "Command-line tool to download videos from svtplay.se and other sites";
+    license = licenses.mit;
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ maintainers.rycee ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sweep-visualizer/default.nix b/nixpkgs/pkgs/tools/misc/sweep-visualizer/default.nix
new file mode 100644
index 000000000000..0d1ebd70041f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sweep-visualizer/default.nix
@@ -0,0 +1,59 @@
+{ stdenv, lib, makeWrapper, fetchurl,
+  alsaLib, atk, cairo, cups, dbus, expat, fontconfig, freetype, gdk-pixbuf, glib,
+  gnome2, gtk2-x11, nspr, nss,
+  libX11, libxcb, libXcomposite, libXcursor, libXdamage, libXext, libXfixes,
+  libXi, libXrandr, libXrender, libXScrnSaver, libXtst,
+  libudev0-shim
+}:
+  stdenv.mkDerivation rec {
+    pname = "sweep-visualizer";
+    version = "0.15.0";
+
+    src = fetchurl {
+      url = "https://s3.amazonaws.com/scanse/Visualizer/v${version}/sweepvisualizer_${version}_amd64.deb";
+      sha256 = "1k6rdjw2340qrzafv6hjxvbvyh3s1wad6d3629nchdcrpyx9xy1c";
+    };
+
+    nativeBuildInputs = [ makeWrapper ];
+
+    sourceRoot = ".";
+    unpackCmd = ''
+      ar p "$src" data.tar.xz | tar xJ
+    '';
+
+    buildPhase = ":";
+
+    installPhase = ''
+      mkdir -p $out/bin $out/share/sweep-visualizer
+      mv usr/share/* $out/share
+      mv opt/Sweep\ Visualizer\ BETA/* $out/share/sweep-visualizer/
+      ln -s $out/share/sweep-visualizer/sweep_visualizer $out/bin/sweep_visualizer
+    '';
+
+    preFixup = let
+      libPath = lib.makeLibraryPath [
+        alsaLib atk cairo cups.lib dbus.lib expat fontconfig.lib freetype
+        gdk-pixbuf glib gnome2.GConf gnome2.pango gtk2-x11 nspr nss stdenv.cc.cc.lib
+        libX11 libxcb libXcomposite libXcursor libXdamage libXext libXfixes
+        libXi libXrandr libXrender libXScrnSaver libXtst
+      ];
+      runtimeLibs = lib.makeLibraryPath [ libudev0-shim ];
+    in ''
+      for lib in $out/share/sweep-visualizer/*.so; do
+        patchelf --set-rpath "$out/share/sweep-visualizer:${libPath}" $lib
+      done
+      patchelf \
+        --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+        --set-rpath "$out/share/sweep-visualizer:${libPath}" \
+        $out/share/sweep-visualizer/sweep_visualizer
+      wrapProgram "$out/bin/sweep_visualizer" --prefix LD_LIBRARY_PATH : ${runtimeLibs}
+    '';
+
+    meta = with stdenv.lib; {
+      homepage = https://support.scanse.io/hc/en-us/articles/115006008948-Visualizer-Overview;
+      description = "A minimal desktop application for interfacing with the Sweep device";
+      license = licenses.unfree;
+      platforms = [ "x86_64-linux" ];
+      maintainers = with maintainers; [ mt-caret ];
+    };
+  }
diff --git a/nixpkgs/pkgs/tools/misc/system-config-printer/default.nix b/nixpkgs/pkgs/tools/misc/system-config-printer/default.nix
new file mode 100644
index 000000000000..e9ee91de6776
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/system-config-printer/default.nix
@@ -0,0 +1,77 @@
+{ stdenv, fetchFromGitHub, udev, intltool, pkgconfig, glib, xmlto, wrapGAppsHook
+, docbook_xml_dtd_412, docbook_xsl
+, libxml2, desktop-file-utils, libusb1, cups, gdk-pixbuf, pango, atk, libnotify
+, gobject-introspection, libsecret, packagekit
+, cups-filters
+, python3Packages, autoreconfHook, bash
+}:
+
+stdenv.mkDerivation rec {
+  pname = "system-config-printer";
+  version = "1.5.12";
+
+  src = fetchFromGitHub {
+    owner = "openPrinting";
+    repo = pname;
+    rev = version;
+    sha256 = "1a812jsd9pb02jbz9bq16qj5j6k2kw44g7s1xdqqkg7061rd7mwf";
+  };
+
+  prePatch = ''
+    # for automake
+    touch README ChangeLog
+    # for tests
+    substituteInPlace Makefile.am --replace /bin/bash ${bash}/bin/bash
+  '';
+
+  patches = [ ./detect_serverbindir.patch ];
+
+  buildInputs = [
+    glib udev libusb1 cups
+    python3Packages.python
+    libnotify gobject-introspection gdk-pixbuf pango atk packagekit
+    libsecret
+  ];
+
+  nativeBuildInputs = [
+    intltool pkgconfig
+    xmlto libxml2 docbook_xml_dtd_412 docbook_xsl desktop-file-utils
+    python3Packages.wrapPython
+    wrapGAppsHook autoreconfHook
+  ];
+
+  pythonPath = with python3Packages; requiredPythonModules [ pycups pycurl dbus-python pygobject3 requests pycairo pysmbc ];
+
+  configureFlags = [
+    "--with-udev-rules"
+    "--with-udevdir=${placeholder "out"}/etc/udev"
+    "--with-systemdsystemunitdir=${placeholder "out"}/etc/systemd/system"
+  ];
+
+  stripDebugList = [ "bin" "lib" "etc/udev" ];
+
+  doCheck = true;
+
+  postInstall =
+    ''
+      buildPythonPath "$out $pythonPath"
+      gappsWrapperArgs+=(
+        --prefix PATH : "$program_PATH"
+        --set CUPS_DATADIR "${cups-filters}/share/cups"
+      )
+
+      find $out/share/system-config-printer -name \*.py -type f -perm -0100 -print0 | while read -d "" f; do
+        patchPythonScript "$f"
+      done
+      patchPythonScript $out/etc/udev/udev-add-printer
+
+      substituteInPlace $out/etc/udev/rules.d/70-printers.rules \
+        --replace "udev-configure-printer" "$out/etc/udev/udev-configure-printer"
+    '';
+
+  meta = {
+    homepage = "https://github.com/openprinting/system-config-printer";
+    platforms = stdenv.lib.platforms.linux;
+    license = stdenv.lib.licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/system-config-printer/detect_serverbindir.patch b/nixpkgs/pkgs/tools/misc/system-config-printer/detect_serverbindir.patch
new file mode 100644
index 000000000000..2cd3058f2330
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/system-config-printer/detect_serverbindir.patch
@@ -0,0 +1,17 @@
+diff --git a/cupshelpers/config.py.in b/cupshelpers/config.py.in
+index 55abbfc..1244327 100644
+--- a/cupshelpers/config.py.in
++++ b/cupshelpers/config.py.in
+@@ -22,3 +22,12 @@
+ prefix="@prefix@"
+ sysconfdir="@sysconfdir@"
+ cupsserverbindir="@cupsserverbindir@"
++
++try:
++    with open("/etc/cups/cups-files.conf") as config:
++        for cfgline in config:
++            args = cfgline.split(" ")
++            if len(args) == 2 and args[0] == "ServerBin":
++                cupsserverbindir = args[1].strip()
++except OSError:
++    pass
diff --git a/nixpkgs/pkgs/tools/misc/systrayhelper/default.nix b/nixpkgs/pkgs/tools/misc/systrayhelper/default.nix
new file mode 100644
index 000000000000..dd48156d4564
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/systrayhelper/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, pkgconfig, libappindicator-gtk3, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "systrayhelper";
+  version = "0.0.4";
+  rev = "ded1f2ed4d30f6ca2c89a13db0bd3046c6d6d0f9";
+
+  goPackagePath = "github.com/ssbc/systrayhelper";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "ssbc";
+    repo = "systrayhelper";
+    sha256 = "1iq643brha5q6w2v1hz5l3d1z0pqzqr43gpwih4cnx3m5br0wg2k";
+  };
+
+  goDeps = ./deps.nix;
+
+  # re date: https://github.com/NixOS/nixpkgs/pull/45997#issuecomment-418186178
+  # > .. keep the derivation deterministic. Otherwise, we would have to rebuild it every time.
+  buildFlagsArray = [ ''-ldflags=
+    -X main.version=v${version}
+    -X main.commit=${rev}
+    -X main.date="nix-byrev"
+    -s
+    -w
+  '' ];
+
+  nativeBuildInputs = [ pkgconfig libappindicator-gtk3 ];
+  buildInputs = [ libappindicator-gtk3 ];
+
+  meta = with stdenv.lib; {
+    description = "A systray utility written in go, using json over stdio for control and events";
+    homepage    = "https://github.com/ssbc/systrayhelper";
+    maintainers = with maintainers; [ cryptix ];
+    license     = licenses.mit;
+    # It depends on the inputs, i guess? not sure about solaris, for instance. go supports it though
+    # I hope nix can figure this out?! ¯\\_(ツ)_/¯
+    platforms   = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/systrayhelper/deps.nix b/nixpkgs/pkgs/tools/misc/systrayhelper/deps.nix
new file mode 100644
index 000000000000..93c984337e6b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/systrayhelper/deps.nix
@@ -0,0 +1,102 @@
+# file generated from Gopkg.lock using dep2nix (https://github.com/nixcloud/dep2nix)
+[
+  {
+    goPackagePath  = "github.com/getlantern/context";
+    fetch = {
+      type = "git";
+      url = "https://github.com/getlantern/context";
+      rev =  "624d99b1798d7c5375ea1d3ca4c5b04d58f7c775";
+      sha256 = "09yf9x6478a5z01hybr98zwa8ax3fx7l6wwsvdkxp3fdg9dqm13b";
+    };
+  }
+  {
+    goPackagePath  = "github.com/getlantern/errors";
+    fetch = {
+      type = "git";
+      url = "https://github.com/getlantern/errors";
+      rev =  "e24b7f4ff7c70be59bbefca6b7695d68cda8b399";
+      sha256 = "1wshagslgl3r07gniq0g55cqgi1j1gk0yrri5ywjz7wm8da42qcr";
+    };
+  }
+  {
+    goPackagePath  = "github.com/getlantern/golog";
+    fetch = {
+      type = "git";
+      url = "https://github.com/getlantern/golog";
+      rev =  "cca714f7feb5df8e455f409b549d384441ac4578";
+      sha256 = "0gnf30n38zkx356cqc6jdv1kbzy59ddqhqndwrxsm2n2zc3b5p7q";
+    };
+  }
+  {
+    goPackagePath  = "github.com/getlantern/hex";
+    fetch = {
+      type = "git";
+      url = "https://github.com/getlantern/hex";
+      rev =  "083fba3033ad473db3dd31c9bb368473d37581a7";
+      sha256 = "18q6rypmcqmcwlfzrrdcz08nff0a289saplvd9y3ifnfcqdw3j77";
+    };
+  }
+  {
+    goPackagePath  = "github.com/getlantern/hidden";
+    fetch = {
+      type = "git";
+      url = "https://github.com/getlantern/hidden";
+      rev =  "d52a649ab33af200943bb599898dbdcfdbc94cb7";
+      sha256 = "0133qmp4sjq8da5di3459vc5g5nqbpqra0f558zd95js3fdmkmsi";
+    };
+  }
+  {
+    goPackagePath  = "github.com/getlantern/ops";
+    fetch = {
+      type = "git";
+      url = "https://github.com/getlantern/ops";
+      rev =  "37353306c90844c8e0591956f56611f46299d202";
+      sha256 = "0q8j2963jqf3p7fcnsfinkvz71mfylrkk2xjar775zjx5a23sa5i";
+    };
+  }
+  {
+    goPackagePath  = "github.com/getlantern/systray";
+    fetch = {
+      type = "git";
+      url = "https://github.com/getlantern/systray";
+      rev =  "e31397f8c6928d98a8a9a7e80087aebcf0090beb";
+      sha256 = "0ahb6qjd2c43nbbg0ssm76ilbzs9dq43a89f7fj6c029nympjmqn";
+    };
+  }
+  {
+    goPackagePath  = "github.com/go-stack/stack";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-stack/stack";
+      rev =  "2fee6af1a9795aafbe0253a0cfbdf668e1fb8a9a";
+      sha256 = "0wk25751ryyvxclyp8jdk5c3ar0cmfr8lrjb66qbg4808x66b96v";
+    };
+  }
+  {
+    goPackagePath  = "github.com/oxtoacart/bpool";
+    fetch = {
+      type = "git";
+      url = "https://github.com/oxtoacart/bpool";
+      rev =  "4e1c5567d7c2dd59fa4c7c83d34c2f3528b025d6";
+      sha256 = "01kk6dhkz96yhp3p5v2rjwq8mbrwrdsn6glqw7jp4h7g5za7yi95";
+    };
+  }
+  {
+    goPackagePath  = "github.com/pkg/errors";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pkg/errors";
+      rev =  "645ef00459ed84a119197bfb8d8205042c6df63d";
+      sha256 = "001i6n71ghp2l6kdl3qq1v2vmghcz3kicv9a5wgcihrzigm75pp5";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev =  "8e24a49d80f82323e1c4db1b5da3e0f31171a151";
+      sha256 = "0zsdnyb8dy98jw6f9yn6g5gdhaqwk39hqridr0mh4dhwvwvlj724";
+    };
+  }
+]
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/misc/t/Gemfile b/nixpkgs/pkgs/tools/misc/t/Gemfile
new file mode 100644
index 000000000000..29813d30ba6b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/t/Gemfile
@@ -0,0 +1,6 @@
+source "https://rubygems.org"
+
+gem 't'
+# Needed because the twitter gem changed API.
+# https://github.com/sferik/t/issues/402
+gem 'twitter', '~> 6.1.0'
diff --git a/nixpkgs/pkgs/tools/misc/t/Gemfile.lock b/nixpkgs/pkgs/tools/misc/t/Gemfile.lock
new file mode 100644
index 000000000000..0aa9ef4e6da8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/t/Gemfile.lock
@@ -0,0 +1,65 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    addressable (2.6.0)
+      public_suffix (>= 2.0.2, < 4.0)
+    buftok (0.2.0)
+    domain_name (0.5.20180417)
+      unf (>= 0.0.5, < 1.0.0)
+    equalizer (0.0.11)
+    faraday (0.11.0)
+      multipart-post (>= 1.2, < 3)
+    geokit (1.13.1)
+    htmlentities (4.3.4)
+    http (2.2.2)
+      addressable (~> 2.3)
+      http-cookie (~> 1.0)
+      http-form_data (~> 1.0.1)
+      http_parser.rb (~> 0.6.0)
+    http-cookie (1.0.3)
+      domain_name (~> 0.5)
+    http-form_data (1.0.3)
+    http_parser.rb (0.6.0)
+    launchy (2.4.3)
+      addressable (~> 2.3)
+    memoizable (0.4.2)
+      thread_safe (~> 0.3, >= 0.3.1)
+    multipart-post (2.0.0)
+    naught (1.1.0)
+    oauth (0.5.4)
+    public_suffix (3.0.3)
+    retryable (2.0.4)
+    simple_oauth (0.3.1)
+    t (3.1.0)
+      geokit (~> 1.9)
+      htmlentities (~> 4.3)
+      launchy (~> 2.4)
+      oauth (~> 0.5.1)
+      retryable (~> 2.0)
+      thor (>= 0.19.1, < 2)
+      twitter (~> 6.0)
+    thor (0.20.3)
+    thread_safe (0.3.6)
+    twitter (6.1.0)
+      addressable (~> 2.5)
+      buftok (~> 0.2.0)
+      equalizer (= 0.0.11)
+      faraday (~> 0.11.0)
+      http (~> 2.1)
+      http_parser.rb (~> 0.6.0)
+      memoizable (~> 0.4.2)
+      naught (~> 1.1)
+      simple_oauth (~> 0.3.1)
+    unf (0.1.4)
+      unf_ext
+    unf_ext (0.0.7.6)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  t
+  twitter (~> 6.1.0)
+
+BUNDLED WITH
+   1.17.2
diff --git a/nixpkgs/pkgs/tools/misc/t/default.nix b/nixpkgs/pkgs/tools/misc/t/default.nix
new file mode 100644
index 000000000000..aa34b98bbe29
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/t/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "t";
+  gemdir = ./.;
+  exes = [ "t" ];
+
+  passthru.updateScript = bundlerUpdateScript "t";
+
+  meta = with lib; {
+    description = "A command-line power tool for Twitter";
+    homepage    = http://sferik.github.io/t/;
+    license     = licenses.asl20;
+    maintainers = with maintainers; [ offline manveru nicknovitski ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/t/gemset.nix b/nixpkgs/pkgs/tools/misc/t/gemset.nix
new file mode 100644
index 000000000000..f3627e8d6e95
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/t/gemset.nix
@@ -0,0 +1,262 @@
+{
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bcm2hchn897xjhqj9zzsxf3n9xhddymj4lsclz508f4vw3av46l";
+      type = "gem";
+    };
+    version = "2.6.0";
+  };
+  buftok = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rzsy1vy50v55x9z0nivf23y0r9jkmq6i130xa75pq9i8qrn1mxs";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+  domain_name = {
+    dependencies = ["unf"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0abdlwb64ns7ssmiqhdwgl27ly40x2l27l8hs8hn0z4kb3zd2x3v";
+      type = "gem";
+    };
+    version = "0.5.20180417";
+  };
+  equalizer = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kjmx3fygx8njxfrwcmn7clfhjhb6bvv3scy2lyyi0wqyi3brra4";
+      type = "gem";
+    };
+    version = "0.0.11";
+  };
+  faraday = {
+    dependencies = ["multipart-post"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18p1csdivgwmshfw3mb698a3bn0yrykg30khk5qxjf6n168g91jr";
+      type = "gem";
+    };
+    version = "0.11.0";
+  };
+  geokit = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0mvdpbx88wflqqrcrfa54a5sckvj2sqzm304p7ji3c06frbhmxw8";
+      type = "gem";
+    };
+    version = "1.13.1";
+  };
+  htmlentities = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nkklqsn8ir8wizzlakncfv42i32wc0w9hxp00hvdlgjr7376nhj";
+      type = "gem";
+    };
+    version = "4.3.4";
+  };
+  http = {
+    dependencies = ["addressable" "http-cookie" "http-form_data" "http_parser.rb"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kcd9qp8vm1rkyp7gfh8j0dbl3zpi97vz2vbhpbcsdsa7l21a59r";
+      type = "gem";
+    };
+    version = "2.2.2";
+  };
+  http-cookie = {
+    dependencies = ["domain_name"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "004cgs4xg5n6byjs7qld0xhsjq3n6ydfh897myr2mibvh6fjc49g";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  http-form_data = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j8dwwbfpf8kc0lcsqcgy29lflszd1x4d7kc0f7227892m7r6y0m";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  "http_parser.rb" = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15nidriy0v5yqfjsgsra51wmknxci2n2grliz78sf9pga3n0l7gi";
+      type = "gem";
+    };
+    version = "0.6.0";
+  };
+  launchy = {
+    dependencies = ["addressable"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "190lfbiy1vwxhbgn4nl4dcbzxvm049jwc158r2x7kq3g5khjrxa2";
+      type = "gem";
+    };
+    version = "2.4.3";
+  };
+  memoizable = {
+    dependencies = ["thread_safe"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0v42bvghsvfpzybfazl14qhkrjvx0xlmxz0wwqc960ga1wld5x5c";
+      type = "gem";
+    };
+    version = "0.4.2";
+  };
+  multipart-post = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09k0b3cybqilk1gwrwwain95rdypixb2q9w65gd44gfzsd84xi1x";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  naught = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wwjx35zgbc0nplp8a866iafk4zsrbhwwz4pav5gydr2wm26nksg";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  oauth = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zszdg8q1b135z7l7crjj234k4j0m347hywp5kj6zsq7q78pw09y";
+      type = "gem";
+    };
+    version = "0.5.4";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08q64b5br692dd3v0a9wq9q5dvycc6kmiqmjbdxkxbfizggsvx6l";
+      type = "gem";
+    };
+    version = "3.0.3";
+  };
+  retryable = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pxv5xgr08s9gv5npj7h3raxibywznrv2wcrb85ibhlhzgzcxggf";
+      type = "gem";
+    };
+    version = "2.0.4";
+  };
+  simple_oauth = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dw9ii6m7wckml100xhjc6vxpjcry174lbi9jz5v7ibjr3i94y8l";
+      type = "gem";
+    };
+    version = "0.3.1";
+  };
+  t = {
+    dependencies = ["geokit" "htmlentities" "launchy" "oauth" "retryable" "thor" "twitter"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qj5zqc819yiscqbyb93alxillyli5ajvrr4gzq52clgkvyap7bd";
+      type = "gem";
+    };
+    version = "3.1.0";
+  };
+  thor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yhrnp9x8qcy5vc7g438amd5j9sw83ih7c30dr6g6slgw9zj3g29";
+      type = "gem";
+    };
+    version = "0.20.3";
+  };
+  thread_safe = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy";
+      type = "gem";
+    };
+    version = "0.3.6";
+  };
+  twitter = {
+    dependencies = ["addressable" "buftok" "equalizer" "faraday" "http" "http_parser.rb" "memoizable" "naught" "simple_oauth"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1l9zv0pg0q4mgcxyhzk2fj57bcs907mbargdr9l0ccnp6xi5sp8v";
+      type = "gem";
+    };
+    version = "6.1.0";
+  };
+  unf = {
+    dependencies = ["unf_ext"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bh2cf73i2ffh4fcpdn9ir4mhq8zi50ik0zqa1braahzadx536a9";
+      type = "gem";
+    };
+    version = "0.1.4";
+  };
+  unf_ext = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ll6w64ibh81qwvjx19h8nj7mngxgffg7aigjx11klvf5k2g4nxf";
+      type = "gem";
+    };
+    version = "0.0.7.6";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/misc/t1utils/default.nix b/nixpkgs/pkgs/tools/misc/t1utils/default.nix
new file mode 100644
index 000000000000..03926b955383
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/t1utils/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "t1utils-1.41";
+
+  src = fetchurl {
+    url = "https://www.lcdf.org/type/${name}.tar.gz";
+    sha256 = "09rlc837dr69hyiiicha3il37mchsvz84qw8hnvb60lrh9zdsppw";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Collection of simple Type 1 font manipulation programs";
+    longDescription = ''
+      t1utils is a collection of simple type-1 font manipulation programs.
+      Together, they allow you to convert between PFA (ASCII) and PFB (binary)
+      formats, disassemble PFA or PFB files into human-readable form,
+      reassemble them into PFA or PFB format. Additionally you can extract font
+      resources from a Macintosh font file or create a Macintosh Type 1 font
+      file from a PFA or PFB font.
+    '';
+    homepage = http://www.lcdf.org/type/;
+    # README from tarball says "BSD-like" and points to non-existing LICENSE
+    # file...
+    license = "Click"; # MIT with extra clause, https://github.com/kohler/t1utils/blob/master/LICENSE
+    platforms = platforms.all;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/td/Gemfile b/nixpkgs/pkgs/tools/misc/td/Gemfile
new file mode 100644
index 000000000000..d22bf73732c5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/td/Gemfile
@@ -0,0 +1,3 @@
+source "https://rubygems.org"
+
+gem 'td'
diff --git a/nixpkgs/pkgs/tools/misc/td/Gemfile.lock b/nixpkgs/pkgs/tools/misc/td/Gemfile.lock
new file mode 100644
index 000000000000..5726611b9af7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/td/Gemfile.lock
@@ -0,0 +1,40 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    fluent-logger (0.8.0)
+      msgpack (>= 1.0.0, < 2)
+    hirb (0.7.3)
+    httpclient (2.8.3)
+    msgpack (1.2.6)
+    parallel (1.13.0)
+    ruby-progressbar (1.10.0)
+    rubyzip (1.2.2)
+    td (0.16.4)
+      hirb (>= 0.4.5)
+      msgpack
+      parallel (~> 1.8)
+      ruby-progressbar (~> 1.7)
+      rubyzip (>= 1.2.1)
+      td-client (>= 1.0.6, < 2)
+      td-logger (>= 0.3.21, < 2)
+      yajl-ruby (~> 1.1)
+      zip-zip (~> 0.3)
+    td-client (1.0.6)
+      httpclient (>= 2.7)
+      msgpack (>= 0.5.6, < 2)
+    td-logger (0.3.27)
+      fluent-logger (>= 0.5.0, < 2.0)
+      msgpack (>= 0.5.6, < 2.0)
+      td-client (>= 0.8.66, < 2.0)
+    yajl-ruby (1.4.1)
+    zip-zip (0.3)
+      rubyzip (>= 1.0.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  td
+
+BUNDLED WITH
+   1.16.3
diff --git a/nixpkgs/pkgs/tools/misc/td/default.nix b/nixpkgs/pkgs/tools/misc/td/default.nix
new file mode 100644
index 000000000000..437bdb0373f8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/td/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "td";
+  gemdir = ./.;
+  exes = [ "td" ];
+
+  passthru.updateScript = bundlerUpdateScript "td";
+
+  meta = with lib; {
+    description = "CLI to manage data on Treasure Data, the Hadoop-based cloud data warehousing.";
+    homepage    = https://github.com/treasure-data/td;
+    license     = licenses.asl20;
+    maintainers =  with maintainers; [ groodt nicknovitski ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/td/gemset.nix b/nixpkgs/pkgs/tools/misc/td/gemset.nix
new file mode 100644
index 000000000000..e4680640ae2b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/td/gemset.nix
@@ -0,0 +1,103 @@
+{
+  fluent-logger = {
+    dependencies = ["msgpack"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yr6vrai4fqajpzybmdlajf8wzsgy29kr1318amn21y9nhjlnys5";
+      type = "gem";
+    };
+    version = "0.8.0";
+  };
+  hirb = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0mzch3c2lvmf8gskgzlx6j53d10j42ir6ik2dkrl27sblhy76cji";
+      type = "gem";
+    };
+    version = "0.7.3";
+  };
+  httpclient = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19mxmvghp7ki3klsxwrlwr431li7hm1lczhhj8z4qihl2acy8l99";
+      type = "gem";
+    };
+    version = "2.8.3";
+  };
+  msgpack = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0031gd2mjyba6jb7m97sqa149zjkr0vzn2s2gpb3m9nb67gqkm13";
+      type = "gem";
+    };
+    version = "1.2.6";
+  };
+  parallel = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "005shcy8dabc7lwydpkbhd3fx8bfqzvsj6g04r90mx0wky10lz84";
+      type = "gem";
+    };
+    version = "1.13.0";
+  };
+  ruby-progressbar = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cv2ym3rl09svw8940ny67bav7b2db4ms39i4raaqzkf59jmhglk";
+      type = "gem";
+    };
+    version = "1.10.0";
+  };
+  rubyzip = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1n1lb2sdwh9h27y244hxzg1lrxxg2m53pk1vq7p33bna003qkyrj";
+      type = "gem";
+    };
+    version = "1.2.2";
+  };
+  td = {
+    dependencies = ["hirb" "msgpack" "parallel" "ruby-progressbar" "rubyzip" "td-client" "td-logger" "yajl-ruby" "zip-zip"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nlxpc4nasgmv6mqanb6ag1q3wmryja2c174dzgwxngxa0y2j1yn";
+      type = "gem";
+    };
+    version = "0.16.4";
+  };
+  td-client = {
+    dependencies = ["httpclient" "msgpack"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j5jcsgg020cm8xarbbw67mca4k8cx5pfyd2mm3wcqrnc1cl2bgp";
+      type = "gem";
+    };
+    version = "1.0.6";
+  };
+  td-logger = {
+    dependencies = ["fluent-logger" "msgpack" "td-client"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1y56gilaqk9a4lfhzb777ysmsq77pi1aqkr4q485a7f5dwnpwl1p";
+      type = "gem";
+    };
+    version = "0.3.27";
+  };
+  yajl-ruby = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16v0w5749qjp13xhjgr2gcsvjv6mf35br7iqwycix1n2h7kfcckf";
+      type = "gem";
+    };
+    version = "1.4.1";
+  };
+  zip-zip = {
+    dependencies = ["rubyzip"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ny3zv1sn9wasamykfkg7b7xgs6w7k5fy8kggiyjj9vrwfzzavqg";
+      type = "gem";
+    };
+    version = "0.3";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/misc/tealdeer/default.nix b/nixpkgs/pkgs/tools/misc/tealdeer/default.nix
new file mode 100644
index 000000000000..547cb2d10759
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tealdeer/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, rustPlatform, fetchFromGitHub, pkgconfig, openssl, cacert, curl
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tealdeer";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "dbrgn";
+    repo = "tealdeer";
+    rev = "v${version}";
+    sha256 = "1v9wq4k7k4lmdz6xy6kabchjpbx9lds20yh6va87shypdh9iva29";
+  };
+
+  cargoSha256 = "0y1y74fgxcv8a3cmyf30p6gg12r79ln7inir8scj88wbmwgkbxsp";
+
+  buildInputs = [ openssl cacert curl ]
+    ++ (stdenv.lib.optional stdenv.isDarwin Security);
+
+  nativeBuildInputs = [ pkgconfig ];
+  
+  NIX_SSL_CERT_FILE = "${cacert}/etc/ssl/certs/ca-bundle.crt";
+
+  # disable tests for now since one needs network
+  # what is unavailable in sandbox build
+  # and i can't disable just this one
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "A very fast implementation of tldr in Rust";
+    homepage = "https://github.com/dbrgn/tealdeer";
+    maintainers = with maintainers; [ davidak ];
+    license = with licenses; [ asl20 mit ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/teamocil/Gemfile b/nixpkgs/pkgs/tools/misc/teamocil/Gemfile
new file mode 100644
index 000000000000..046ba3d536e0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/teamocil/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'teamocil'
diff --git a/nixpkgs/pkgs/tools/misc/teamocil/Gemfile.lock b/nixpkgs/pkgs/tools/misc/teamocil/Gemfile.lock
new file mode 100644
index 000000000000..419c2ae49d31
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/teamocil/Gemfile.lock
@@ -0,0 +1,13 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    teamocil (1.4.2)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  teamocil
+
+BUNDLED WITH
+   1.16.3
diff --git a/nixpkgs/pkgs/tools/misc/teamocil/default.nix b/nixpkgs/pkgs/tools/misc/teamocil/default.nix
new file mode 100644
index 000000000000..a5e356edbf48
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/teamocil/default.nix
@@ -0,0 +1,20 @@
+{ lib, bundlerEnv, ruby, bundlerUpdateScript }:
+
+bundlerEnv {
+  inherit ruby;
+  pname = "teamocil";
+  gemdir = ./.;
+
+  passthru.updateScript = bundlerUpdateScript "teamocil";
+
+  meta = with lib; {
+    description     = "A simple tool used to automatically create windows and panes in tmux with YAML files";
+    homepage        = https://github.com/remiprev/teamocil;
+    license         = licenses.mit;
+    platforms       = platforms.all;
+    maintainers     = with maintainers; [
+      zachcoyle 
+      nicknovitski
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/teamocil/gemset.nix b/nixpkgs/pkgs/tools/misc/teamocil/gemset.nix
new file mode 100644
index 000000000000..f363d62b6d68
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/teamocil/gemset.nix
@@ -0,0 +1,10 @@
+{
+  teamocil = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1l5f33faipb45xx7ds67s7dqgvjlljlcxgpgig4pg8p002vg06r2";
+      type = "gem";
+    };
+    version = "1.4.2";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/misc/teleconsole/default.nix b/nixpkgs/pkgs/tools/misc/teleconsole/default.nix
new file mode 100644
index 000000000000..b8e984e90c43
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/teleconsole/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "teleconsole";
+  version = "0.4.0";
+
+  goPackagePath = "github.com/gravitational/teleconsole";
+
+  src = fetchFromGitHub {
+    owner = "gravitational";
+    repo = "teleconsole";
+    rev = version;
+    sha256 = "01552422n0bj1iaaw6pvg9l1qr66r69sdsngxbcdjn1xh3mj74sm";
+  };
+
+  goDeps = ./deps.nix;
+
+  CGO_ENABLED = 1;
+  buildFlags = [ "-ldflags" ];
+
+  meta = with stdenv.lib; {
+    homepage = "https://www.teleconsole.com/";
+    description = "Share your terminal session with people you trust";
+    license = licenses.asl20;
+    platforms = platforms.all;
+    # Builds for Aarch64 not possible in the current release due to
+    # incompatibilities further up the dependency chain.
+    # See:
+    #  - https://github.com/gravitational/teleport/issues/679
+    #  - https://github.com/kr/pty/issues/27
+    broken = stdenv.isAarch64;
+    maintainers = [ maintainers.kimburgess ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/teleconsole/deps.nix b/nixpkgs/pkgs/tools/misc/teleconsole/deps.nix
new file mode 100644
index 000000000000..f13529d4b25a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/teleconsole/deps.nix
@@ -0,0 +1,13 @@
+[
+    # Teleport v2.0.0-alpha.4 required for build.
+    # See https://github.com/gravitational/teleconsole/blob/09591f227c2a8df4c68af8bc4adfadfc596f4ed2/Makefile#L8
+    {
+      goPackagePath = "github.com/gravitational/teleport";
+      fetch = {
+        type = "git";
+        url = "https://github.com/gravitational/teleport";
+        rev = "2cb40abd8ea8fb2915304ea4888b5b9f3e5bc223";
+        sha256 = "1xw3bfnjbj88x465snwwzn4bmpmzmsrq9r0pkj388qwvfrclgnfk";
+      };
+    }
+]
diff --git a/nixpkgs/pkgs/tools/misc/tensorman/default.nix b/nixpkgs/pkgs/tools/misc/tensorman/default.nix
new file mode 100644
index 000000000000..97912b3c5fa1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tensorman/default.nix
@@ -0,0 +1,24 @@
+{ pkgconfig, stdenv, rustPlatform, rustc, cargo, docker, openssl, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tensorman";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "pop-os";
+    repo = "tensorman";
+    rev = version;
+    sha256 = "0ywb53snvymmwh10hm6whckz7dwmpqa4rxiggd24y178jdfrm2ns";
+  };
+
+  buildInputs = [ pkgconfig openssl ];
+  cargoSha256 = "1gh5w6zzrvjk60bqaf355fagijy723rvmqjh4laksd96pmzdfwn9";
+
+  meta = with stdenv.lib; {
+    description = "Utility for easy management of Tensorflow containers";
+    homepage = "https://github.com/pop-os/tensorman/";
+    license = stdenv.lib.licenses.gpl3;
+    platforms =  [ "x86_64-linux" ];
+    maintainers = with maintainers; [ thefenriswolf ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/termplay/default.nix b/nixpkgs/pkgs/tools/misc/termplay/default.nix
new file mode 100644
index 000000000000..dd045f1cfac4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/termplay/default.nix
@@ -0,0 +1,39 @@
+{ rustPlatform, fetchFromGitHub, lib, makeWrapper, gst_all_1, libsixel }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "termplay";
+  version = "2.0.6";
+
+  src = fetchFromGitHub {
+    owner = "jD91mZM2";
+    repo = "termplay";
+    rev = "v${version}";
+
+    sha256 = "1w7hdqgqr1jgxid3k7f2j52wz31gv8bzr9rsm6xzp7nnihp6i45p";
+  };
+
+  cargoBuildFlags = ["--features" "bin"];
+  cargoSha256 = "15i7qid91awlk74n823im1n6isqanf4vlcal90n1w9izyddzs9j0";
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [
+    gst_all_1.gstreamer
+    gst_all_1.gst-plugins-base
+    gst_all_1.gst-plugins-good
+    gst_all_1.gst-plugins-ugly
+    gst_all_1.gst-plugins-bad
+    libsixel
+  ];
+
+  postInstall = ''
+    wrapProgram $out/bin/termplay --prefix GST_PLUGIN_SYSTEM_PATH_1_0 : "$GST_PLUGIN_SYSTEM_PATH_1_0"
+  '';
+
+  meta = with lib; {
+    description = "Play an image/video in your terminal";
+    homepage = https://jd91mzm2.github.io/termplay/;
+    license = licenses.mit;
+    maintainers = with maintainers; [ jD91mZM2 ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/termtosvg/default.nix b/nixpkgs/pkgs/tools/misc/termtosvg/default.nix
new file mode 100644
index 000000000000..7dc2bc618ea6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/termtosvg/default.nix
@@ -0,0 +1,20 @@
+{ lib, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "termtosvg";
+  version = "1.0.0";
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "1d0lmvprraspdqpn0rsqzvkkmpj8zk0crid5l39kxpjpxrv2irfg";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ lxml pyte wcwidth ];
+
+  meta = with lib; {
+    homepage = https://nbedos.github.io/termtosvg/;
+    description = "Record terminal sessions as SVG animations";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ ma27 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tewisay/default.nix b/nixpkgs/pkgs/tools/misc/tewisay/default.nix
new file mode 100644
index 000000000000..d875b098ab56
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tewisay/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, buildGoPackage, fetchFromGitHub, makeWrapper }:
+
+buildGoPackage rec {
+  pname = "tewisay-unstable";
+  version = "2017-04-14";
+
+  goPackagePath = "github.com/lucy/tewisay";
+
+  src = fetchFromGitHub {
+    owner = "lucy";
+    repo = "tewisay";
+    rev = "e3fc38737cedb79d93b8cee07207c6c86db4e488";
+    sha256 = "1na3xi4z90v8qydcvd3454ia9jg7qhinciy6kvgyz61q837cw5dk";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  goDeps = ./deps.nix;
+
+  postInstall = ''
+    install -D -t $bin/share/tewisay/cows go/src/${goPackagePath}/cows/*.cow
+  '';
+
+  preFixup = ''
+    wrapProgram $bin/bin/tewisay \
+      --prefix COWPATH : $bin/share/tewisay/cows
+  '';
+
+  meta = {
+    homepage = https://github.com/lucy/tewisay;
+    description = "Cowsay replacement with unicode and partial ansi escape support";
+    license = stdenv.lib.licenses.cc0;
+    maintainers = [ stdenv.lib.maintainers.chiiruno ];
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tewisay/deps.nix b/nixpkgs/pkgs/tools/misc/tewisay/deps.nix
new file mode 100644
index 000000000000..b6b1356dcf80
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tewisay/deps.nix
@@ -0,0 +1,21 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "github.com/mattn/go-runewidth";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-runewidth";
+      rev = "97311d9f7767e3d6f422ea06661bc2c7a19e8a5d";
+      sha256 = "0dxlrzn570xl7gb11hjy1v4p3gw3r41yvqhrffgw95ha3q9p50cg";
+    };
+  }
+  {
+    goPackagePath = "github.com/ogier/pflag";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ogier/pflag";
+      rev = "45c278ab3607870051a2ea9040bb85fcb8557481";
+      sha256 = "0620v75wppfd84d95n312wpngcb73cph4q3ivs1h0waljfnsrd5l";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/misc/texi2mdoc/default.nix b/nixpkgs/pkgs/tools/misc/texi2mdoc/default.nix
new file mode 100644
index 000000000000..abc25db2fa7e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/texi2mdoc/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "texi2mdoc";
+  version = "0.1.2";
+
+  src = fetchurl {
+    url = "http://mdocml.bsd.lv/texi2mdoc/snapshots/${pname}-${version}.tgz";
+    sha256 = "1zjb61ymwfkw6z5g0aqmsn6qpw895zdxv7fv3059gj3wqa3zsibs";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with stdenv.lib; {
+    homepage = http://mdocml.bsd.lv/;
+    description = "converter from Texinfo into mdoc";
+    license = licenses.isc;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ ramkromberg ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/thefuck/default.nix b/nixpkgs/pkgs/tools/misc/thefuck/default.nix
new file mode 100644
index 000000000000..4ac9b32b3556
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/thefuck/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchFromGitHub, buildPythonApplication
+, colorama, decorator, psutil, pyte, six
+, pytest, pytest-mock
+}:
+
+buildPythonApplication rec {
+  pname = "thefuck";
+  version = "3.29";
+
+  src = fetchFromGitHub {
+    owner = "nvbn";
+    repo = pname;
+    rev = version;
+    sha256 = "1qhxwjjgrzpqrqjv7l2847ywpln76lyd6j8bl9gz2r6kl0fx2fqs";
+  };
+
+  propagatedBuildInputs = [ colorama decorator psutil pyte six ];
+
+  checkInputs = [ pytest pytest-mock ];
+
+  checkPhase = ''
+    export HOME=$TMPDIR
+    export LANG=en_US.UTF-8
+    export XDG_CACHE_HOME=$TMPDIR/cache
+    export XDG_CONFIG_HOME=$TMPDIR/config
+    py.test
+  '';
+
+  doCheck = false; # The above is only enough for tests to pass outside the sandbox.
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/nvbn/thefuck;
+    description = "Magnificent app which corrects your previous console command.";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ma27 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/thin-provisioning-tools/default.nix b/nixpkgs/pkgs/tools/misc/thin-provisioning-tools/default.nix
new file mode 100644
index 000000000000..0739435084d2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/thin-provisioning-tools/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchFromGitHub, fetchpatch, autoreconfHook, expat, libaio, boost }:
+
+stdenv.mkDerivation rec {
+  pname = "thin-provisioning-tools";
+  version = "0.7.6";
+
+  src = fetchFromGitHub {
+    owner = "jthornber";
+    repo = "thin-provisioning-tools";
+    rev = "v${version}";
+    sha256 = "175mk3krfdmn43cjw378s32hs62gq8fmq549rjmyc651sz6jnj0g";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  buildInputs = [ expat libaio boost ];
+
+  patches = [
+    (fetchpatch {
+      # a) Fix build if limits.h provides definition for PAGE_SIZE, as musl does w/musl per XSI[1] although it's apparently optional [2].
+      #    This value is only provided when it's known to be a constant, to avoid the need to discover the value dynamically.
+      # b) If not using system-provided (kernel headers, or libc headers, or something) use the POSIX approach of querying the value
+      #    dynamically using sysconf(_SC_PAGE_SIZE) instead of hardcoded value that hopefully is correct.
+      # [1] http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/limits.h.html
+      # [2] http://www.openwall.com/lists/musl/2015/09/11/8
+      url = "https://raw.githubusercontent.com/void-linux/void-packages/a0ece13ad7ab2aae760e09e41e0459bd999a3695/srcpkgs/thin-provisioning-tools/patches/musl.patch";
+      sha256 = "1m8r3vhrnsy8drgs0svs3fgpi3mmxzdcqsv6bmvc0j52cvfqvhvy";
+      extraPrefix = ""; # empty means add 'a/' and 'b/'
+    })
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/jthornber/thin-provisioning-tools/;
+    description = "A suite of tools for manipulating the metadata of the dm-thin device-mapper target";
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/time/default.nix b/nixpkgs/pkgs/tools/misc/time/default.nix
new file mode 100644
index 000000000000..bb6276f70655
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/time/default.nix
@@ -0,0 +1,33 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  pname = "time";
+  version = "1.9";
+
+  src = fetchurl {
+    url = "mirror://gnu/time/${pname}-${version}.tar.gz";
+    sha256 = "07jj7cz6lc13iqrpgn81ivqh8rkm73p4rnivwgrrshk23v4g1b7v";
+  };
+
+  meta = {
+    description = "Tool that runs programs and summarizes the system resources they use";
+
+    longDescription = ''
+      The `time' command runs another program, then displays
+      information about the resources used by that program, collected
+      by the system while the program was running.  You can select
+      which information is reported and the format in which it is
+      shown, or have `time' save the information in a file instead of
+      displaying it on the screen.
+
+      The resources that `time' can report on fall into the general
+      categories of time, memory, and I/O and IPC calls.  Some systems
+      do not provide much information about program resource use;
+      `time' reports unavailable information as zero values.
+    '';
+
+    license = stdenv.lib.licenses.gpl3Plus;
+    homepage = https://www.gnu.org/software/time/;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/timidity/default.nix b/nixpkgs/pkgs/tools/misc/timidity/default.nix
new file mode 100644
index 000000000000..c307c96199f2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/timidity/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchurl, alsaLib, libjack2, ncurses, pkgconfig }:
+
+stdenv.mkDerivation {
+  name = "timidity-2.15.0";
+
+  src = fetchurl {
+    url = mirror://sourceforge/timidity/TiMidity++-2.15.0.tar.bz2;
+    sha256 = "1xf8n6dqzvi6nr2asags12ijbj1lwk1hgl3s27vm2szib8ww07qn";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ alsaLib libjack2 ncurses ];
+
+  configureFlags = [ "--enable-audio=oss,alsa,jack" "--enable-alsaseq" "--with-default-output=alsa" "--enable-ncurses" ];
+
+  NIX_LDFLAGS = "-ljack -L${libjack2}/lib";
+
+  instruments = fetchurl {
+    url = http://www.csee.umbc.edu/pub/midia/instruments.tar.gz;
+    sha256 = "0lsh9l8l5h46z0y8ybsjd4pf6c22n33jsjvapfv3rjlfnasnqw67";
+  };
+
+  # the instruments could be compressed (?)
+  postInstall = ''
+    mkdir -p $out/share/timidity/;
+    cp ${./timidity.cfg} $out/share/timidity/timidity.cfg
+    tar --strip-components=1 -xf $instruments -C $out/share/timidity/
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://sourceforge.net/projects/timidity/;
+    license = licenses.gpl2;
+    description = "A software MIDI renderer";
+    maintainers = [ maintainers.marcweber ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/timidity/timidity.cfg b/nixpkgs/pkgs/tools/misc/timidity/timidity.cfg
new file mode 100644
index 000000000000..fa07eb43eee6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/timidity/timidity.cfg
@@ -0,0 +1,369 @@
+##############################################################################
+# 
+# Instrument configuration file for timidity
+#
+# ----------------------------------------
+#
+#   Johan Hagman (Johan.Hagman@mailbox.swipnet.se) 26-Sep-96:
+#
+# This config file is for the uncompressed MIDIA GM patches from
+# ftp://archive.cs.umbc.edu/pub/midia/instruments.tar.gz. The
+# patches assumed to be installed are
+#
+#   in /usr/local/lib/timidity/patch		original piano & guitar
+#   in /usr/local/lib/timidity/instruments	MIDIA patches
+#
+# ----------------------------------------
+#
+# Specify library directory:		dir <directory>
+#
+# - Multiple library directories may be given. The ones given last will be
+#   searched first so you can override them in later configuration files.
+#   Extra configuration files and MIDI files will also be searched in these
+#   directories.
+#
+# Set tone bank or drum set to modify:	bank <number>
+#					drumset <number>
+#
+# Map program number to patch map:	<program number> <patch name>
+#
+# - If the patch can't be found in the library directories, TiMidity will 
+#   search again with ".pat" appended to the name.
+#   Programs without a loaded patch will be silent, except that for
+#   banks/drumsets >0, the corresponding patch in  bank/drumset 0 will
+#   be used (if one exists).
+#
+# Read another configuration file:	source <file name>
+#
+
+##############################################################################
+# If you've moved things around since compiling, uncomment and edit this to
+# point to the library directory: 
+#
+
+dir /run/current-system/sw/share/timidity/instruments
+dir /run/current-system/sw/share/timidity/patch
+
+##############################################################################
+# This sets up the default patches in the TiMidity support package
+# "timidity-lib-0.1.tar.gz":
+
+#bank 0
+#   0 acpiano.pat
+#  24 nylongt2.pat
+
+##############################################################################
+# If you have Dustin McCartney's "wowpats" patches, you can source the 
+# config file to set them up for TiMidity:
+#
+# (Note that later entries in config files always override earlier ones)
+#
+#source wowpats.cfg
+#
+
+##############################################################################
+# If you have Dustin McCartney's GS drum sets, you can source the config
+# file to set them up for TiMidity:
+#
+#source gsdrum.cfg
+#
+
+##############################################################################
+# If you have the GUS General MIDI patch set, uncomment the following lines 
+# and edit the "dir" statement to point to your GUS patch directory. 
+#
+#dir /dos-C/ultrasnd/midi
+#source gravis.cfg
+#
+
+##############################################################################
+# If you have the Midia patch set, you can source midia.cfg to set them up.
+# Note that midia.cfg sources gravis.cfg in turn, since the filenames are 
+# almost identical.
+#
+#source midia.cfg
+#
+
+##############################################################################
+# A config file for the Midia patch set. The patch filenames are identical
+# to the GUS ones, although many of the patches themselves are different.
+
+#source gravis.cfg
+
+##############################################################################
+# These are the standard patches that come with the GUS, mapped into GM
+# programs. 
+#
+
+bank 0
+
+	0 acpiano
+	# The Midia set doesn't have a bright piano,
+	# so we substitute acpiano instead.
+	#1 britepno
+	1 acpiano
+	2 synpiano
+	3 honky
+	4 epiano1
+	5 epiano2
+	6 hrpschrd
+	7 clavinet
+	8 celeste
+	9 glocken
+	10 musicbox
+	11 vibes
+	12 marimba
+	13 xylophon amp=200
+	14 tubebell
+	15 santur
+	16 homeorg
+	17 percorg
+	18 rockorg
+	19 church
+	20 reedorg
+	21 accordn
+	22 harmonca
+	23 concrtna
+	#24 nyguitar
+	# Replace with the guitar that comes with Timidity
+	24 nylongt2
+	25 acguitar
+	26 jazzgtr
+	27 cleangtr
+	28 mutegtr
+	29 odguitar
+	30 distgtr
+	31 gtrharm
+	32 acbass
+	33 fngrbass
+	34 pickbass
+	35 fretless
+	36 slapbas1
+	37 slapbas2
+	38 synbass1
+	39 synbass2
+	40 violin
+	41 viola
+	42 cello
+	43 contraba
+	44 tremstr
+	45 pizzcato
+	46 harp
+	47 timpani
+	# This sounds pretty dumb with the default panning
+	48 marcato pan=center
+	49 slowstr
+	50 synstr1
+	51 synstr2
+	52 choir
+	53 doo
+	54 voices
+	55 orchhit
+	56 trumpet
+	57 trombone
+	58 tuba
+	59 mutetrum
+	60 frenchrn
+	61 hitbrass
+	62 synbras1
+	63 synbras2
+	64 sprnosax
+	65 altosax
+	66 tenorsax
+	67 barisax
+	68 oboe
+	69 englhorn
+	70 bassoon
+	71 clarinet
+	72 piccolo
+	73 flute
+	74 recorder
+	75 woodflut
+	76 bottle
+	77 shakazul
+	78 whistle
+	79 ocarina
+	80 sqrwave
+	81 sawwave
+	82 calliope
+	83 chiflead
+	84 charang
+	85 voxlead
+	86 lead5th
+	87 basslead
+	88 fantasia
+	89 warmpad
+	90 polysyn
+	91 ghostie
+	92 bowglass
+	93 metalpad
+	94 halopad
+	95 sweeper
+	96 aurora
+	97 soundtrk
+	98 crystal
+	99 atmosphr
+	100 freshair
+	101 unicorn
+	102 echovox
+	103 startrak
+	104 sitar
+	105 banjo
+	106 shamisen
+	107 koto
+	108 kalimba
+	109 bagpipes
+	110 fiddle
+	111 shannai
+	112 carillon
+	113 agogo
+	114 steeldrm
+	115 woodblk
+	116 taiko
+	117 toms
+	118 syntom
+	119 revcym
+	120 fx-fret
+	121 fx-blow
+	122 seashore
+	123 jungle
+	124 telephon
+	125 helicptr
+	126 applause note=69
+	127 pistol
+
+##############################################################################
+# The GUS drum patches
+
+drumset 0
+
+	27 highq
+	28 slap
+	29 scratch1
+	30 scratch2
+	31 sticks strip=tail
+	32 sqrclick
+	33 metclick
+	34 metbell keep=loop keep=env
+	35 kick1
+	36 kick2
+	37 stickrim strip=tail
+	38 snare1
+	39 claps
+	40 snare2 note=38
+	41 tomlo2
+	42 hihatcl
+	43 tomlo1
+	44 hihatpd
+	45 tommid2
+	46 hihatop
+	47 tommid1
+	48 tomhi2
+	49 cymcrsh1
+	50 tomhi1
+	51 cymride1
+	52 cymchina
+	53 cymbell
+	54 tamborin
+	55 cymsplsh
+	56 cowbell
+	57 cymcrsh2
+	58 vibslap
+	59 cymride2
+	60 bongohi
+	61 bongolo
+	62 congahi1
+	63 congahi2
+	64 congalo
+	65 timbaleh
+	66 timbalel
+	67 agogohi
+	68 agogolo
+	69 cabasa strip=tail
+	70 maracas
+	71 whistle1 keep=loop keep=env
+	72 whistle2 keep=loop keep=env
+	73 guiro1
+	74 guiro2
+	75 clave
+	76 woodblk1
+	77 woodblk2
+	78 cuica1
+	79 cuica2
+	80 triangl1
+	81 triangl2
+	82 shaker
+	83 jingles
+	84 belltree keep=loop keep=env
+	85 castinet
+	86 surdo1
+	87 surdo2
+	# There's no pistol, but I can't think of a reasonable substitute.
+
+# Drumset 1 is identical to set 0
+drumset 1
+
+	27 highq
+	28 slap
+	29 scratch1
+	30 scratch2
+	31 sticks strip=tail
+	32 sqrclick
+	33 metclick
+	34 metbell keep=loop keep=env
+	35 kick1
+	36 kick2
+	37 stickrim strip=tail
+	38 snare1
+	39 claps
+	40 snare2 note=38
+	41 tomlo2
+	42 hihatcl
+	43 tomlo1
+	44 hihatpd
+	45 tommid2
+	46 hihatop
+	47 tommid1
+	48 tomhi2
+	49 cymcrsh1
+	50 tomhi1
+	51 cymride1
+	52 cymchina
+	53 cymbell
+	54 tamborin
+	55 cymsplsh
+	56 cowbell
+	57 cymcrsh2
+	58 vibslap
+	59 cymride2
+	60 bongohi
+	61 bongolo
+	62 congahi1
+	63 congahi2
+	64 congalo
+	65 timbaleh
+	66 timbalel
+	67 agogohi
+	68 agogolo
+	69 cabasa strip=tail
+	70 maracas
+	71 whistle1 keep=loop keep=env
+	72 whistle2 keep=loop keep=env
+	73 guiro1
+	74 guiro2
+	75 clave
+	76 woodblk1
+	77 woodblk2
+	78 cuica1
+	79 cuica2
+	80 triangl1
+	81 triangl2
+	82 shaker
+	83 jingles
+	84 belltree keep=loop keep=env
+	85 castinet
+	86 surdo1
+	87 surdo2
+
+##############################################################################
+# End of configuration file
diff --git a/nixpkgs/pkgs/tools/misc/tio/default.nix b/nixpkgs/pkgs/tools/misc/tio/default.nix
new file mode 100644
index 000000000000..9ee9b977ab29
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tio/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchzip, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "tio";
+  version = "1.32";
+
+  src = fetchzip {
+    url = "https://github.com/tio/tio/archive/v${version}.tar.gz";
+    sha256 = "0lwqdm73kshi9qs8pks1b4by6yb9jf3bbyw3bv52xmggnr5s1hcv";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with stdenv.lib; {
+    description = "Serial console TTY";
+    homepage = https://tio.github.io/;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ yegortimoshenko ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tldr/default.nix b/nixpkgs/pkgs/tools/misc/tldr/default.nix
new file mode 100644
index 000000000000..d4ff9d8c8442
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tldr/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, curl, libzip, pkgconfig }:
+
+stdenv.mkDerivation rec {
+  pname = "tldr";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "tldr-pages";
+    repo = "tldr-cpp-client";
+    rev = "v${version}";
+    sha256 = "10ylpiqc06p0qpma72vwksd7hd107s0vlx9c6s9rz4vc3i274lb6";
+  };
+
+  buildInputs = [ curl libzip ];
+  nativeBuildInputs = [ pkgconfig ];
+
+  makeFlags = ["CC=cc" "LD=cc" "CFLAGS="];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with stdenv.lib; {
+    description = "Simplified and community-driven man pages";
+    longDescription = ''
+      tldr pages gives common use cases for commands, so you don't need to hunt
+      through a man page for the correct flags.
+    '';
+    homepage = http://tldr-pages.github.io;
+    license = licenses.mit;
+    maintainers = with maintainers; [ taeer carlosdagos ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tlp/default.nix b/nixpkgs/pkgs/tools/misc/tlp/default.nix
new file mode 100644
index 000000000000..e5932d9e9462
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tlp/default.nix
@@ -0,0 +1,81 @@
+{ stdenv, lib, fetchFromGitHub, perl, makeWrapper, file, systemd, iw, rfkill
+, hdparm, ethtool, inetutils , kmod, pciutils, smartmontools
+, x86_energy_perf_policy, gawk, gnugrep, coreutils, utillinux
+, checkbashisms, shellcheck
+, enableRDW ? false, networkmanager
+}:
+
+let
+  paths = lib.makeBinPath
+          ([ iw rfkill hdparm ethtool inetutils systemd kmod pciutils smartmontools
+             x86_energy_perf_policy gawk gnugrep coreutils utillinux
+           ]
+           ++ lib.optional enableRDW networkmanager
+          );
+
+in stdenv.mkDerivation rec {
+  pname = "tlp";
+  version = "1.2.2";
+
+  src = fetchFromGitHub {
+    owner = "linrunner";
+    repo = "TLP";
+    rev = version;
+    sha256 = "0vm31ca6kdak9xzwskz7a8hvdp67drfh2zcdwlz3260r8r2ypgg1";
+  };
+
+  outRef = placeholder "out";
+
+  makeFlags = [
+    "DESTDIR=${outRef}"
+    "TLP_SBIN=${outRef}/bin"
+    "TLP_BIN=${outRef}/bin"
+    "TLP_TLIB=${outRef}/share/tlp"
+    "TLP_FLIB=${outRef}/share/tlp/func.d"
+    "TLP_ULIB=${outRef}/lib/udev"
+    "TLP_NMDSP=${outRef}/etc/NetworkManager/dispatcher.d"
+    "TLP_SHCPL=${outRef}/share/bash-completion/completions"
+    "TLP_MAN=${outRef}/share/man"
+    "TLP_META=${outRef}/share/metainfo"
+
+    "TLP_NO_INIT=1"
+  ];
+
+  nativeBuildInputs = [ makeWrapper file ];
+
+  buildInputs = [ perl ];
+
+  installTargets = [ "install-tlp" "install-man" ] ++ stdenv.lib.optional enableRDW "install-rdw";
+
+  checkInputs = [
+    checkbashisms
+    shellcheck
+  ];
+
+  doCheck = true;
+  checkTarget = [ "checkall" ];
+
+  postInstall = ''
+    cp -r $out/$out/* $out
+    rm -rf $out/$(echo "$NIX_STORE" | cut -d "/" -f2)
+
+    for i in $out/bin/* $out/lib/udev/tlp-* ${lib.optionalString enableRDW "$out/etc/NetworkManager/dispatcher.d/*"}; do
+      if file "$i" | grep -q Perl; then
+        # Perl script; use wrapProgram
+        wrapProgram "$i" \
+          --prefix PATH : "${paths}"
+      else
+        # Bash script
+        sed -i '2iexport PATH=${paths}:$PATH' "$i"
+      fi
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Advanced Power Management for Linux";
+    homepage = https://linrunner.de/en/tlp/docs/tlp-linux-advanced-power-management.html;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ abbradar ];
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tmate/default.nix b/nixpkgs/pkgs/tools/misc/tmate/default.nix
new file mode 100644
index 000000000000..86ab24928777
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tmate/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, cmake, libtool, pkgconfig
+, zlib, openssl, libevent, ncurses, ruby, msgpack, libssh }:
+
+stdenv.mkDerivation rec {
+  pname = "tmate";
+  version = "2.4.0";
+
+  src = fetchFromGitHub {
+    owner  = "tmate-io";
+    repo   = "tmate";
+    rev    = version;
+    sha256 = "0x5c31yq7ansmiy20a0qf59wagba9v3pq97mlkxrqxn4n1gcc6vi";
+  };
+
+  dontUseCmakeConfigure = true;
+
+  buildInputs = [ libtool zlib openssl libevent ncurses ruby msgpack libssh ];
+  nativeBuildInputs = [ autoreconfHook cmake pkgconfig ];
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    homepage    = https://tmate.io/;
+    description = "Instant Terminal Sharing";
+    license     = licenses.mit;
+    platforms   = platforms.unix;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tmpwatch/default.nix b/nixpkgs/pkgs/tools/misc/tmpwatch/default.nix
new file mode 100644
index 000000000000..006cef6f1027
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tmpwatch/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl, psmisc }:
+
+stdenv.mkDerivation {
+  name = "tmpwatch-2.11";
+
+  src = fetchurl {
+    url = "https://fedorahosted.org/releases/t/m/tmpwatch/tmpwatch-2.11.tar.bz2";
+    sha256 = "1m5859ngwx61l1i4s6fja2avf1hyv6w170by273w8nsin89825lk";
+  };
+
+  configureFlags = [ "--with-fuser=${psmisc}/bin/fuser" ];
+
+  meta = with stdenv.lib; {
+    homepage = https://fedorahosted.org/tmpwatch/;
+    description = "Recursively searches through specified directories and removes files which have not been accessed in a specified period of time";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ vlstill ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tmux-cssh/default.nix b/nixpkgs/pkgs/tools/misc/tmux-cssh/default.nix
new file mode 100644
index 000000000000..f54cd2756eb1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tmux-cssh/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchFromGitHub, makeWrapper, tmux }:
+
+stdenv.mkDerivation {
+  name = "tmux-cssh-20151015";
+
+  src = fetchFromGitHub {
+    owner = "dennishafemann";
+    repo = "tmux-cssh";
+    rev = "21750733c5b6fa2fe23b9e50ce69d8564f2f742a";
+    sha256 = "473e27f3b69864b905d1340d97917cd202705c761611eb3aec4c24521f69b52c";
+  };
+
+  buildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp tmux-cssh $out/bin/tmux-cssh
+    wrapProgram $out/bin/tmux-cssh --suffix PATH : ${tmux}/bin
+  '';
+
+  meta = {
+    homepage = https://github.com/dennishafemann/tmux-cssh;
+    description = "SSH to multiple hosts at the same time using tmux";
+
+    longDescription =
+      ''
+      tmux is a terminal multiplexer, like e.g. screen, which gives you a
+      possibility to use multiple virtual terminal session within one real
+      terminal session. tmux-cssh (tmux-cluster-ssh) sets a comfortable and
+      easy to use functionality, clustering and synchronizing virtual
+      tmux-sessions, on top of tmux. No need for a x-server or x-forwarding.
+      tmux-cssh works just with tmux and in an low-level terminal-environment,
+      like most server do.
+      '';
+
+    license = stdenv.lib.licenses.asl20;
+
+    platforms = stdenv.lib.platforms.unix;
+    maintainers = with stdenv.lib.maintainers; [ zimbatm ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tmux-xpanes/default.nix b/nixpkgs/pkgs/tools/misc/tmux-xpanes/default.nix
new file mode 100644
index 000000000000..3ea5f758050d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tmux-xpanes/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchFromGitHub, openssl, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "tmux-xpanes";
+  version = "4.1.0";
+
+  src = fetchFromGitHub {
+    owner = "greymd";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "11yz6rh2ckd1z8q80n8giv2gcz2i22fgf3pnfxq96qrzflb0d96a";
+  };
+
+  buildInputs = [ openssl perl ];
+
+  installPhase = ''
+    # Create directories.
+    install -m 755 -d $out/bin/
+    install -m 755 -d $out/share/man/man1/
+
+    # Perform installation.
+    install -m 755 bin/* $out/bin/
+    install -m 644 man/*.1 $out/share/man/man1/
+  '';
+
+  meta = with stdenv.lib; {
+    description = "tmux-based terminal divider";
+    homepage = "https://github.com/greymd/tmux-xpanes";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ monsieurp ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tmux/default.nix b/nixpkgs/pkgs/tools/misc/tmux/default.nix
new file mode 100644
index 000000000000..1aa221bd59e3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tmux/default.nix
@@ -0,0 +1,80 @@
+{ stdenv
+, fetchFromGitHub
+, autoreconfHook
+, pkgconfig
+, makeWrapper
+, bison
+, ncurses
+, libevent
+}:
+
+let
+
+  bashCompletion = fetchFromGitHub {
+    owner = "imomaliev";
+    repo = "tmux-bash-completion";
+    rev = "fcda450d452f07d36d2f9f27e7e863ba5241200d";
+    sha256 = "092jpkhggjqspmknw7h3icm0154rg21mkhbc71j5bxfmfjdxmya8";
+  };
+
+in
+
+stdenv.mkDerivation rec {
+  pname = "tmux";
+  version = "3.0a";
+
+  outputs = [ "out" "man" ];
+
+  src = fetchFromGitHub {
+    owner = "tmux";
+    repo = "tmux";
+    rev = version;
+    sha256 = "0y9lv1yr0x50v3k70vzkc8hfr7yijlsi30p7dr7i8akp3lwmmc7h";
+  };
+
+  nativeBuildInputs = [
+    pkgconfig
+    autoreconfHook
+    bison
+  ];
+
+  buildInputs = [
+    ncurses
+    libevent
+    makeWrapper
+  ];
+
+  configureFlags = [
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+  ];
+
+  postInstall = ''
+    mkdir -p $out/share/bash-completion/completions
+    cp -v ${bashCompletion}/completions/tmux $out/share/bash-completion/completions/tmux
+  '';
+
+  meta = {
+    homepage = "http://tmux.github.io/";
+    description = "Terminal multiplexer";
+
+    longDescription =
+      '' tmux is intended to be a modern, BSD-licensed alternative to programs such as GNU screen. Major features include:
+
+          * A powerful, consistent, well-documented and easily scriptable command interface.
+          * A window may be split horizontally and vertically into panes.
+          * Panes can be freely moved and resized, or arranged into preset layouts.
+          * Support for UTF-8 and 256-colour terminals.
+          * Copy and paste with multiple buffers.
+          * Interactive menus to select windows, sessions or clients.
+          * Change the current window by searching for text in the target.
+          * Terminal locking, manually or after a timeout.
+          * A clean, easily extended, BSD-licensed codebase, under active development.
+      '';
+
+    license = stdenv.lib.licenses.bsd3;
+
+    platforms = stdenv.lib.platforms.unix;
+    maintainers = with stdenv.lib.maintainers; [ thammers fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tmuxinator/default.nix b/nixpkgs/pkgs/tools/misc/tmuxinator/default.nix
new file mode 100644
index 000000000000..b7c9150e12d7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tmuxinator/default.nix
@@ -0,0 +1,47 @@
+{ lib, buildRubyGem, ruby }:
+
+# Cannot use bundleEnv because bundleEnv create stub with
+# BUNDLE_FROZEN='1' environment variable set, which broke everything
+# that rely on Bundler that runs under Tmuxinator.
+
+buildRubyGem rec {
+  inherit ruby;
+  name = "${gemName}-${version}";
+  gemName = "tmuxinator";
+  version = "1.1.4";
+  source.sha256 = "06ajfvsmq2040b7nk2ifih3sqxgwzih5j1d25nh4ilgjlrfmha98";
+
+  erubis = buildRubyGem rec {
+    inherit ruby;
+    name = "ruby${ruby.version}-${gemName}-${version}";
+    gemName = "erubis";
+    version = "2.7.0";
+    source.sha256 = "1fj827xqjs91yqsydf0zmfyw9p4l2jz5yikg3mppz6d7fi8kyrb3";
+  };
+
+  thor = buildRubyGem rec {
+    inherit ruby;
+    name = "ruby${ruby.version}-${gemName}-${version}";
+    gemName = "thor";
+    version = "1.0.1";
+    source.sha256 = "1xbhkmyhlxwzshaqa7swy2bx6vd64mm0wrr8g3jywvxy7hg0cwkm";
+  };
+
+  xdg = buildRubyGem rec {
+    inherit ruby;
+    name = "ruby${ruby.version}-${gemName}-${version}";
+    gemName = "xdg";
+    version = "2.2.5";
+    source.sha256 = "04xr4cavnzxlk926pkji7b5yiqy4qsd3gdvv8mg6jliq6sczg9gk";
+  };
+
+  propagatedBuildInputs = [ erubis thor xdg ];
+
+  meta = with lib; {
+    description = "Manage complex tmux sessions easily";
+    homepage    = https://github.com/tmuxinator/tmuxinator;
+    license     = licenses.mit;
+    maintainers = with maintainers; [ auntie ericsagnes ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tmuxp/default.nix b/nixpkgs/pkgs/tools/misc/tmuxp/default.nix
new file mode 100644
index 000000000000..9ffa89f59196
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tmuxp/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, python }:
+
+with python.pkgs;
+
+buildPythonApplication rec {
+  pname = "tmuxp";
+  version = "1.5.4";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "13qnacqlcih731wfrsalbff1g81inkh6sypvabg5gi7gd7mha49p";
+  };
+
+  postPatch = ''
+    sed -i 's/==.*$//' requirements/base.txt requirements/test.txt
+  '';
+
+  checkInputs = [
+    pytest
+    pytest-rerunfailures
+  ];
+
+  # No tests in archive
+  doCheck = false;
+
+  propagatedBuildInputs = [
+    click colorama kaptan libtmux
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Manage tmux workspaces from JSON and YAML";
+    homepage = https://tmuxp.git-pull.com/;
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/togglesg-download/default.nix b/nixpkgs/pkgs/tools/misc/togglesg-download/default.nix
new file mode 100644
index 000000000000..e2d263817ee7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/togglesg-download/default.nix
@@ -0,0 +1,46 @@
+{ stdenv, lib, fetchFromGitHub, pythonPackages, makeWrapper, ffmpeg_3 }:
+
+pythonPackages.buildPythonApplication {
+
+  pname = "togglesg-download-git";
+  version = "2017-12-07";
+
+  src = fetchFromGitHub {
+    owner  = "0x776b7364";
+    repo   = "toggle.sg-download";
+    rev    = "e64959f99ac48920249987a644eefceee923282f";
+    sha256 = "0j317wmyzpwfcixjkybbq2vkg52vij21bs40zg3n1bs61rgmzrn8";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  doCheck = false;
+  dontBuild = true;
+  dontStrip = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/{bin,share/doc/togglesg-download}
+    substitute $src/download_toggle_video2.py $out/bin/download_toggle_video2.py \
+      --replace "ffmpeg_download_cmd = 'ffmpeg" "ffmpeg_download_cmd = '${lib.getBin ffmpeg_3}/bin/ffmpeg"
+    chmod 0755 $out/bin/download_toggle_video2.py
+
+    cp LICENSE README.md $out/share/doc/togglesg-download
+
+    runHook postInstall
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/0x776b7364/toggle.sg-download;
+    description = "Command-line tool to download videos from toggle.sg written in Python";
+    longDescription = ''
+      toggle.sg requires SilverLight in order to view videos. This tool will
+      allow you to download the video files for viewing in your media player and
+      on your OS of choice.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/toilet/default.nix b/nixpkgs/pkgs/tools/misc/toilet/default.nix
new file mode 100644
index 000000000000..abc6933a777e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/toilet/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl, pkgconfig, libcaca }:
+
+stdenv.mkDerivation rec {
+  pname = "toilet";
+  version = "0.3";
+
+  src = fetchurl {
+    url = "http://caca.zoy.org/raw-attachment/wiki/toilet/${pname}-${version}.tar.gz";
+    sha256 = "1pl118qb7g0frpgl9ps43w4sd0psjirpmq54yg1kqcclqcqbbm49";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libcaca ];
+
+  meta = with stdenv.lib; {
+    description = "Display large colourful characters in text mode";
+    homepage = http://caca.zoy.org/wiki/toilet;
+    license = licenses.wtfpl;
+    maintainers = with maintainers; [ pSub ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/topgrade/default.nix b/nixpkgs/pkgs/tools/misc/topgrade/default.nix
new file mode 100644
index 000000000000..17d11d7e48a1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/topgrade/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, lib, fetchFromGitHub, rustPlatform, Foundation }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "topgrade";
+  version = "3.7.1";
+
+  src = fetchFromGitHub {
+    owner = "r-darwish";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0vs0gnfs9swlmzsj7m3b88xfzcfy7n68bgm4i94csc3qsbip6m0j";
+  };
+
+  cargoSha256 = "1y85hl7xl60vsj3ivm6pyd6bvk39wqg25bqxfx00r9myha94iqmd";
+
+  buildInputs = lib.optional stdenv.isDarwin Foundation;
+
+  meta = with lib; {
+    description = "Upgrade all the things";
+    homepage = "https://github.com/r-darwish/topgrade";
+    license = licenses.gpl3;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ filalex77 hugoreeves ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/toybox/default.nix b/nixpkgs/pkgs/tools/misc/toybox/default.nix
new file mode 100644
index 000000000000..b863786145c6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/toybox/default.nix
@@ -0,0 +1,66 @@
+{
+  stdenv, lib, fetchFromGitHub, which,
+  enableStatic ? false,
+  enableMinimal ? false,
+  extraConfig ? ""
+}:
+
+stdenv.mkDerivation rec {
+  pname = "toybox";
+  version = "0.8.2";
+
+  src = fetchFromGitHub {
+    owner = "landley";
+    repo = pname;
+    rev = version;
+    sha256 = "02mliqz2lry779ba6vmyaa13nxcmj91f8pyhzim9wvcnjq8vc5cj";
+  };
+
+  buildInputs = lib.optionals enableStatic [ stdenv.cc.libc stdenv.cc.libc.static ];
+
+  postPatch = "patchShebangs .";
+
+  inherit extraConfig;
+  passAsFile = [ "extraConfig" ];
+
+  configurePhase = ''
+    make ${if enableMinimal then
+      "allnoconfig"
+    else
+      if stdenv.isFreeBSD then
+        "freebsd_defconfig"
+      else
+        if stdenv.isDarwin then
+          "macos_defconfig"
+        else
+          "defconfig"
+    }
+
+    cat $extraConfigPath .config > .config-
+    mv .config- .config
+
+    make oldconfig
+  '';
+
+  makeFlags = [ "PREFIX=$(out)/bin" ] ++ lib.optional enableStatic "LDFLAGS=--static";
+
+  installTargets = [ "install_flat" ];
+
+  # tests currently (as of 0.8.0) get stuck in an infinite loop...
+  # ...this is fixed in latest git, so doCheck can likely be enabled for next release
+  # see https://github.com/landley/toybox/commit/b928ec480cd73fd83511c0f5ca786d1b9f3167c3
+  #doCheck = true;
+  checkInputs = [ which ]; # used for tests with checkFlags = [ "DEBUG=true" ];
+  checkTarget = "tests";
+
+  NIX_CFLAGS_COMPILE = "-Wno-error";
+
+  meta = with stdenv.lib; {
+    description = "Lightweight implementation of some Unix command line utilities";
+    homepage = https://landley.net/toybox/;
+    license = licenses.bsd0;
+    platforms = with platforms; linux ++ darwin ++ freebsd;
+    maintainers = with maintainers; [ hhm ];
+    priority = 10;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/trac/default.nix b/nixpkgs/pkgs/tools/misc/trac/default.nix
new file mode 100644
index 000000000000..39bbf6850eb6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/trac/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, buildPythonApplication
+, fetchPypi
+, Babel
+, docutils
+, pygments
+, pytz
+, jinja2
+, pysqlite
+, psycopg2
+, pymysql
+, git
+, setuptools
+}:
+
+
+buildPythonApplication rec {
+  pname = "trac";
+  version = "1.4";
+
+  src = fetchPypi {
+    inherit version;
+    pname = "Trac";
+    sha256 = "1cg51rg0vb9vf23wgn28z3szlxhwnxprj5m0mvibqyypi123bvx1";
+  };
+
+  prePatch = ''
+    # Removing the date format tests as they are outdated
+    substituteInPlace trac/util/tests/__init__.py \
+      --replace "suite.addTest(datefmt.test_suite())" ""
+  '';
+
+  propagatedBuildInputs = [
+    Babel
+    docutils
+    pygments
+    pytz
+    jinja2
+    pysqlite
+    psycopg2
+    pymysql
+    git
+    setuptools
+  ];
+
+  meta = with lib; {
+    description = "Integrated SCM, wiki, issue tracker and project environment";
+    homepage = "https://trac.edgewall.org/";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ mmahut ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/trash-cli/default.nix b/nixpkgs/pkgs/tools/misc/trash-cli/default.nix
new file mode 100644
index 000000000000..ac8feaef2758
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/trash-cli/default.nix
@@ -0,0 +1,50 @@
+{ stdenv, fetchFromGitHub, fetchpatch, coreutils
+, python3Packages, substituteAll }:
+
+python3Packages.buildPythonApplication rec {
+  name = "trash-cli-${version}";
+  version = "0.17.1.14";
+  namePrefix = "";
+
+  src = fetchFromGitHub {
+    owner = "andreafrancia";
+    repo = "trash-cli";
+    rev = version;
+    sha256 = "1bqazna223ibqjwbc1wfvfnspfyrvjy8347qlrgv4cpng72n7gfi";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./nix-paths.patch;
+      df = "${coreutils}/bin/df";
+      libc = let ext = if stdenv.isDarwin then ".dylib" else ".so.6";
+             in "${stdenv.cc.libc}/lib/libc${ext}";
+    })
+
+    # Fix build on Python 3.6.
+    (fetchpatch {
+      url = "https://github.com/andreafrancia/trash-cli/commit/a21b80d1e69783bb09376c3f60dd2f2a10578805.patch";
+      sha256 = "0w49rjh433sjfc2cl5a9wlbr6kcn9f1qg905qsyv7ay3ar75wvyp";
+    })
+
+    # Fix listing trashed files over mount points, see https://github.com/andreafrancia/trash-cli/issues/95
+    (fetchpatch {
+      url = "https://github.com/andreafrancia/trash-cli/commit/436dfddb4c2932ba3ff696e4732750b7bdc58461.patch";
+      sha256 = "02pkcz7nj67jbnqpw1943nrv95m8xyjvab4j62fa64r73fagm8m4";
+    })
+  ];
+
+  checkInputs = with python3Packages; [
+    nose
+    mock
+  ];
+  checkPhase = "nosetests";
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/andreafrancia/trash-cli;
+    description = "Command line tool for the desktop trash can";
+    maintainers = [ maintainers.rycee ];
+    platforms = platforms.unix;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/trash-cli/nix-paths.patch b/nixpkgs/pkgs/tools/misc/trash-cli/nix-paths.patch
new file mode 100644
index 000000000000..d7b485eec158
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/trash-cli/nix-paths.patch
@@ -0,0 +1,26 @@
+--- a/trashcli/list_mount_points.py	2014-12-23 10:10:43.808470486 +0100
++++ a/trashcli/list_mount_points.py	2014-12-23 10:19:04.954796457 +0100
+@@ -12,7 +12,7 @@ def mount_points_from_getmnt():
+ 
+ def mount_points_from_df():
+     import subprocess
+-    df_output = subprocess.Popen(["df", "-P"], stdout=subprocess.PIPE).stdout
++    df_output = subprocess.Popen(["@df@", "-P"], stdout=subprocess.PIPE).stdout
+     return list(_mount_points_from_df_output(df_output))
+ 
+ def _mount_points_from_df_output(df_output):
+@@ -46,13 +46,7 @@ def _mounted_filesystems_from_getmnt() :
+                     ("mnt_freq", c_int),       # Dump frequency (in days).
+                     ("mnt_passno", c_int)]     # Pass number for `fsck'.
+ 
+-    if sys.platform == "cygwin":
+-        libc_name = "cygwin1.dll"
+-    else:
+-        libc_name = find_library("c")
+-
+-    if libc_name == None :
+-        libc_name="/lib/libc.so.6" # fix for my Gentoo 4.0
++    libc_name = "@libc@"
+ 
+     libc = cdll.LoadLibrary(libc_name)
+     libc.getmntent.restype = POINTER(mntent_struct)
diff --git a/nixpkgs/pkgs/tools/misc/ttf2pt1/default.nix b/nixpkgs/pkgs/tools/misc/ttf2pt1/default.nix
new file mode 100644
index 000000000000..7142d346336a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ttf2pt1/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, perl, freetype }:
+
+stdenv.mkDerivation {
+  name = "ttf2pt1-3.4.4";
+
+  src = fetchurl {
+    url = mirror://sourceforge/ttf2pt1/ttf2pt1-3.4.4.tgz;
+    sha256 = "1l718n4k4widx49xz7qrj4mybzb8q67kp2jw7f47604ips4654mf";
+  };
+
+  preConfigure = ''
+    find -type f | xargs sed -i 's@/usr/bin/perl@${perl}/bin/perl@'
+    mkdir -p $out
+    sed -e 's/chown/true/' \
+        -e 's/chgrp/true/' \
+        -e 's@^CFLAGS_FT =.*@CFLAGS_FT=-DUSE_FREETYPE -I${freetype.dev}/include/freetype2@' \
+        -i scripts/{inst_dir,inst_file} Makefile
+    makeFlags="INSTDIR=$out OWNER=`id -u`"
+  '';
+
+  buildInputs = [ freetype ];
+  nativeBuildInputs = [ perl ];
+  
+  patches = ./gentoo-makefile.patch; # also contains the freetype patch
+
+  meta = { 
+    description = "True Type to Postscript Type 3 converter, fpdf";
+    homepage = http://ttf2pt1.sourceforge.net/index.html;
+    license = "ttf2pt1";
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ttf2pt1/gentoo-makefile.patch b/nixpkgs/pkgs/tools/misc/ttf2pt1/gentoo-makefile.patch
new file mode 100644
index 000000000000..84854606131f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ttf2pt1/gentoo-makefile.patch
@@ -0,0 +1,98 @@
+diff -Naur ttf2pt1-3.4.4-orig/Makefile ttf2pt1-3.4.4/Makefile
+--- ttf2pt1-3.4.4-orig/Makefile	2007-07-15 20:06:50.000000000 -0600
++++ ttf2pt1-3.4.4/Makefile	2007-07-15 20:12:40.000000000 -0600
+@@ -9,7 +9,7 @@
+ #
+ # Use GNU C even if it's not the default compiler
+ #
+-#CC=gcc
++CC=gcc
+ #
+ # Use the standard ANSI C compiler on HP-UX even if it's not default
+ #
+@@ -60,18 +60,18 @@
+ # (if the include and lib directory do not match your installation,
+ # modify them), also uncomment LIBS_FT
+ #
+-#CFLAGS_FT = -DUSE_FREETYPE -I/usr/local/include/freetype2 -I/usr/local/include
++CFLAGS_FT = -DUSE_FREETYPE -I/usr/include/freetype2 -I/usr/include
+ 
+ # 
+ # The FreeType-2 library flags (disabled by default)
+ 
+-LIBS_FT=
++#LIBS_FT=
+ 
+ # To enable use of the FreeType-2 library
+ # (if the include and lib directory do not match your installation,
+ # modify them), also uncomment CFLAGS_FT
+ #
+-#LIBS_FT= -L/usr/local/lib -lfreetype
++LIBS_FT= -L/usr/lib -lfreetype
+ 
+ #
+ # The flags for C compiler for the Autotrace library (disabled by default). 
+@@ -120,18 +120,18 @@
+ # Installation-related stuff
+ # 
+ # The base dir for installation and subdirs in it
+-INSTDIR = /usr/local
++INSTDIR = /usr
+ # for binaries
+ BINDIR = $(INSTDIR)/bin
+ # for binaries of little general interest
+ LIBXDIR = $(INSTDIR)/libexec/ttf2pt1
+ # for scripts, maps/encodings etc.
+ SHAREDIR = $(INSTDIR)/share/ttf2pt1
+-MANDIR = $(INSTDIR)/man
++MANDIR = $(INSTDIR)/share/man
+ 
+ # owner and group of installed files
+ OWNER = root
+-GROUP = bin
++GROUP = root
+ 
+ # After you have configured the Makefile, comment out the following
+ # definition:
+@@ -244,17 +244,19 @@
+ 	chmod -R go-w $(SHAREDIR)
+ 	scripts/inst_file ttf2pt1 $(BINDIR)/ttf2pt1 $(OWNER) $(GROUP) 0755
+ 	[ -f $(BINDIR)/t1asm ] || scripts/inst_file t1asm $(LIBXDIR)/t1asm $(OWNER) $(GROUP) 0755
+-	sed 's|^TTF2PT1_BINDIR=$$|TTF2PT1_BINDIR=$(BINDIR)|;\
+-		s|^TTF2PT1_LIBXDIR=$$|TTF2PT1_LIBXDIR=$(LIBXDIR)|;\
+-		s|^TTF2PT1_SHAREDIR=$$|TTF2PT1_SHAREDIR=$(SHAREDIR)|;' <scripts/convert >cvt.tmp
++	sed -e 's|^TTF2PT1_BINDIR=$$|TTF2PT1_BINDIR=$(BINDIR)|' \
++		-e 's|^TTF2PT1_LIBXDIR=$$|TTF2PT1_LIBXDIR=$(LIBXDIR)|' \
++		-e 's|^TTF2PT1_SHAREDIR=$$|TTF2PT1_SHAREDIR=$(SHAREDIR)|' \
++		<scripts/convert >cvt.tmp
+ 	scripts/inst_file cvt.tmp $(BINDIR)/ttf2pt1_convert $(OWNER) $(GROUP) 0755
+ 	scripts/inst_file cvt.tmp $(SHAREDIR)/scripts/convert $(OWNER) $(GROUP) 0755
+ 	rm cvt.tmp
+ 	scripts/inst_file scripts/x2gs $(BINDIR)/ttf2pt1_x2gs $(OWNER) $(GROUP) 0755
+ 	for i in $(MANS1); do { \
+-		sed 's|TTF2PT1_BINDIR|$(BINDIR)|;\
+-			s|TTF2PT1_LIBXDIR|$(LIBXDIR)|;\
+-			s|TTF2PT1_SHAREDIR|$(SHAREDIR)|;' <$$i >$(MANDIR)/man1/$$i \
++		sed -e 's|TTF2PT1_BINDIR|$(BINDIR)|' \
++			-e 's|TTF2PT1_LIBXDIR|$(LIBXDIR)|' \
++			-e 's|TTF2PT1_SHAREDIR|$(SHAREDIR)|' \
++			<$$i >$(MANDIR)/man1/$$i \
+ 		&& chown $(OWNER) $(MANDIR)/man1/$$i \
+ 		&& chgrp $(GROUP) $(MANDIR)/man1/$$i \
+ 		&& chmod 0644 $(MANDIR)/man1/$$i \
+
+
+
+
+
+diff -Naur ttf2pt1-3.4.4-orig/ft.c ttf2pt1-3.4.4/ft.c
+--- ttf2pt1-3.4.4-orig/ft.c	2007-07-15 20:23:43.000000000 -0600
++++ ttf2pt1-3.4.4/ft.c	2007-07-15 20:24:02.000000000 -0600
+@@ -12,6 +12,7 @@
+ #include <stdlib.h>
+ #include <ctype.h>
+ #include <sys/types.h>
++#include <ft2build.h>
+ #include <freetype/freetype.h>
+ #include <freetype/ftglyph.h>
+ #include <freetype/ftsnames.h>
diff --git a/nixpkgs/pkgs/tools/misc/ttfautohint/default.nix b/nixpkgs/pkgs/tools/misc/ttfautohint/default.nix
new file mode 100644
index 000000000000..f82917239e64
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ttfautohint/default.nix
@@ -0,0 +1,42 @@
+{
+  stdenv, lib, fetchurl, pkgconfig, autoreconfHook
+, freetype, harfbuzz, libiconv, qtbase
+, enableGUI ? true
+}:
+
+stdenv.mkDerivation rec {
+  version = "1.8.3";
+  pname = "ttfautohint";
+
+  src = fetchurl {
+    url = "mirror://savannah/freetype/${pname}-${version}.tar.gz";
+    sha256 = "0zpqgihn3yh3v51ynxwr8asqrijvs4gv686clwv7bm8sawr4kfw7";
+  };
+
+  postAutoreconf = ''
+    substituteInPlace configure --replace "macx-g++" "macx-clang"
+  '';
+
+  nativeBuildInputs = [ pkgconfig autoreconfHook ];
+
+  buildInputs = [ freetype harfbuzz libiconv ] ++ lib.optional enableGUI qtbase;
+
+  configureFlags = [ ''--with-qt=${if enableGUI then "${qtbase}/lib" else "no"}'' ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "An automatic hinter for TrueType fonts";
+    longDescription = ''
+      A library and two programs which take a TrueType font as the
+      input, remove its bytecode instructions (if any), and return a
+      new font where all glyphs are bytecode hinted using the
+      information given by FreeType’s auto-hinting module.
+    '';
+    homepage = https://www.freetype.org/ttfautohint;
+    license = licenses.gpl2Plus; # or the FreeType License (BSD + advertising clause)
+    maintainers = with maintainers; [ goibhniu ];
+    platforms = platforms.unix;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/ttmkfdir/cstring.patch b/nixpkgs/pkgs/tools/misc/ttmkfdir/cstring.patch
new file mode 100644
index 000000000000..e1da347c64f1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ttmkfdir/cstring.patch
@@ -0,0 +1,78 @@
+diff --git a/Makefile b/Makefile
+index e65b64c..52af5ed 100644
+--- a/Makefile
++++ b/Makefile
+@@ -41,8 +41,9 @@ all: ttmkfdir
+ .cpp.o:
+ 	libtool --mode=compile $(CXX) $(CXXFLAGS) -o $@ -c $^
+ 
++# ulgy hack for libtool to find .o files !!
+ ttmkfdir: ttmkfdir.o directory.o commandline.o ttf.o encoding.o parser.o builtin.o
+-	libtool --mode=link $(CXX) -o $@ $^ $(LDFLAGS)
++	libtool --mode=link $(CXX) -o $@ ./.libs/ttmkfdir.o ./.libs/directory.o ./.libs/commandline.o ./.libs/ttf.o ./.libs/encoding.o ./.libs/parser.o ./.libs/builtin.o $(LDFLAGS)
+ 
+ parser.cpp: encoding.l
+ 	    flex -i -8 -o$@ $<
+diff --git a/encoding.cpp b/encoding.cpp
+index 9035d35..b4e9733 100644
+--- a/encoding.cpp
++++ b/encoding.cpp
+@@ -2,7 +2,9 @@
+ #include <cstdio>
+ #include <cstdlib>
+ #include <cstring>
+-#include "freetype/freetype.h"
++#include <ft2build.h>
++#include FT_FREETYPE_H
++#include <freetype/ftsnames.h>
+ 
+ #include "ttmkfdir.h"
+ #include "encoding.h"
+diff --git a/encoding.h b/encoding.h
+index fc618bc..e01518f 100644
+--- a/encoding.h
++++ b/encoding.h
+@@ -6,7 +6,8 @@
+ #include <map>
+ #include <string>
+ 
+-#include "freetype/freetype.h"
++#include <ft2build.h>
++#include FT_FREETYPE_H
+ 
+ #include "util.h"
+ 
+diff --git a/ttf.cpp b/ttf.cpp
+index 1dda774..97b37f3 100644
+--- a/ttf.cpp
++++ b/ttf.cpp
+@@ -239,7 +239,7 @@ Face::FontFamilyName (void) const
+ 	for (i = 0; i < n; i++) {
+ 	    if ((fterror = FT_Get_Sfnt_Name (face, i, &NamePtr)) != FT_Err_Ok) {
+                     std::cout << "Warning: Can't SFNT name : " << FileName << "(" << fterror << ")" << std::endl;
+-	            return;
++	            return 0;
+             };
+             platform = NamePtr.platform_id;
+             encoding = NamePtr.encoding_id;
+diff --git a/ttf.h b/ttf.h
+index 4261ef8..c4a0f1f 100644
+--- a/ttf.h
++++ b/ttf.h
+@@ -3,13 +3,14 @@
+ #define TTF_H__
+ 
+ #include <string>
++#include <ft2build.h>
++#include FT_FREETYPE_H
+ #include "freetype/freetype.h"
+ #include "freetype/tttables.h"
+ #include "freetype/ftsnames.h"
+ #include "freetype/ttnameid.h"
+ #include "freetype/fterrors.h"
+-#include "freetype/ftmodule.h"
+-
++#include "freetype/ftmodapi.h"
+ #include "util.h"
+ #include "encoding.h"
+ 
diff --git a/nixpkgs/pkgs/tools/misc/ttmkfdir/default.nix b/nixpkgs/pkgs/tools/misc/ttmkfdir/default.nix
new file mode 100644
index 000000000000..4a2ab0d3475c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ttmkfdir/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, freetype, fontconfig, libunwind, libtool, flex, bison }:
+
+stdenv.mkDerivation {
+  name = "ttf-mkfontdir-3.0.9-6";
+
+  src = fetchurl {
+    url = http://mirror.fsf.org/trisquel/pool/main/t/ttmkfdir/ttmkfdir_3.0.9.orig.tar.gz;
+    sha256 = "0n6bmmndmp4c1myisvv7cby559gzgvwsw4rfw065a3f92m87jxiq";
+  };
+    
+  # all the patches up from ttmkfdir-3.0.9/Makefile should be reviewed by someone
+  # who knows more about C/C++ ..
+  patches =
+    [ (fetchurl {
+        url = http://mirror.fsf.org/trisquel/pool/main/t/ttmkfdir/ttmkfdir_3.0.9-6.diff.gz;
+        sha256 = "141kxaf2by8nf87hqyszaxi0n7nnmswr1nh2i5r5bsvxxmaj9633";
+      })
+    
+      ./cstring.patch # also fixes some other compilation issues (freetype includes)
+    ];
+
+  preInstall = ''
+    mkdir -p $out; makeFlags="DESTDIR=$out BINDIR=/bin"
+  '';
+
+  buildInputs = [freetype fontconfig libunwind libtool flex bison];
+
+  meta = {
+    description = "Create fonts.dir for TTF font directory";
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ttwatch/default.nix b/nixpkgs/pkgs/tools/misc/ttwatch/default.nix
new file mode 100644
index 000000000000..5a2d1aaa4279
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ttwatch/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub, cmake, perl, openssl, curl, libusb1
+, enableUnsafe ? false }:
+
+stdenv.mkDerivation {
+  pname = "ttwatch";
+  version = "2018-12-04";
+
+  src = fetchFromGitHub {
+    owner = "ryanbinns";
+    repo = "ttwatch";
+    rev = "eeb4e19bf7ca7ca2cee7f5fbeb483b27198d86a1";
+    sha256 = "18384apdkq35120cgmda686d293354aibwcq2hwhvvjmnq49fnzr";
+  };
+
+  nativeBuildInputs = [ cmake perl ];
+  buildInputs = [ openssl curl libusb1 ];
+
+  cmakeFlags = stdenv.lib.optional enableUnsafe [ "-Dunsafe=on" ];
+
+  preFixup = ''
+    chmod +x $out/bin/ttbin2mysports
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/ryanbinns/ttwatch;
+    description = "Linux TomTom GPS Watch Utilities";
+    maintainers = with maintainers; [ dotlambda ];
+    license = licenses.mit;
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tty-clock/default.nix b/nixpkgs/pkgs/tools/misc/tty-clock/default.nix
new file mode 100644
index 000000000000..b261f0ef8411
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tty-clock/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitHub, ncurses, pkgconfig }:
+
+stdenv.mkDerivation rec {
+  pname = "tty-clock";
+  version = "2.3";
+
+  src = fetchFromGitHub {
+    owner = "xorg62";
+    repo = "tty-clock";
+    rev = "v${version}";
+    sha256 = "16v3pmva13skpfjja96zacjpxrwzs1nb1iqmrp2qzvdbcm9061pp";
+  };
+  
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ ncurses ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/xorg62/tty-clock;
+    license = licenses.free;
+    description = "Digital clock in ncurses";
+    platforms = platforms.all;
+    maintainers = [ maintainers.koral ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ttygif/default.nix b/nixpkgs/pkgs/tools/misc/ttygif/default.nix
new file mode 100644
index 000000000000..2fbd43606988
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ttygif/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "ttygif";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "icholy";
+    repo = pname;
+    rev = version;
+    sha256 = "18l26iacpfn4xqqv1ai6ncabn83mqv98c48gl265gfld66y7zbzn";
+  };
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/icholy/ttygif";
+    description = "Convert terminal recordings to animated gifs";
+    platforms = platforms.linux;
+    license = licenses.mit;
+    maintainers = with maintainers; [ moaxcp ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ttylog/default.nix b/nixpkgs/pkgs/tools/misc/ttylog/default.nix
new file mode 100644
index 000000000000..70856fba7319
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ttylog/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitHub, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "ttylog";
+  version = "0.31";
+
+  src = fetchFromGitHub {
+    owner = "rocasa";
+    repo = "ttylog";
+    rev = version;
+    sha256 = "0c746bpjpa77vsr88fxk8h1803p5np1di1mpjf4jy5bv5x3zwm07";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = with stdenv.lib; {
+    homepage = http://ttylog.sourceforge.net;
+    description = "Simple serial port logger";
+    longDescription = ''
+      A serial port logger which can be used to print everything to stdout
+      that comes from a serial device.
+    '';
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ttyplot/default.nix b/nixpkgs/pkgs/tools/misc/ttyplot/default.nix
new file mode 100644
index 000000000000..45aa9ea5c0b2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ttyplot/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "ttyplot";
+  version = "1.4";
+
+  src = fetchFromGitHub {
+    owner = "tenox7";
+    repo = "ttyplot";
+    rev = version;
+    sha256 = "19qm0hx9ljdw9qg78lydn3c627xy7xnx3knq5f7caw9lf0cdp7kf";
+  };
+
+  buildInputs = [ ncurses ];
+
+  buildPhase = ''
+   ${stdenv.cc}/bin/cc ./ttyplot.c -lncurses -o ttyplot
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ttyplot $out/bin/
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A simple general purpose plotting utility for tty with data input from stdin";
+    homepage = https://github.com/tenox7/ttyplot;
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ lassulus ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ttyrec/clang-fixes.patch b/nixpkgs/pkgs/tools/misc/ttyrec/clang-fixes.patch
new file mode 100644
index 000000000000..126ab44090eb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ttyrec/clang-fixes.patch
@@ -0,0 +1,21 @@
+diff -ru ttyrec-1.0.8.orig/io.h ttyrec-1.0.8/io.h
+--- ttyrec-1.0.8.orig/io.h	2006-06-11 17:52:50.000000000 +0200
++++ ttyrec-1.0.8/io.h	2015-11-15 09:59:54.000000000 +0100
+@@ -9,5 +9,6 @@
+ int     edup            (int oldfd);
+ int     edup2           (int oldfd, int newfd);
+ FILE*   efdopen         (int fd, const char *mode);
++void    set_progname    (const char *name);
+ 
+ #endif
+diff -ru ttyrec-1.0.8.orig/ttyrec.c ttyrec-1.0.8/ttyrec.c
+--- ttyrec-1.0.8.orig/ttyrec.c	2006-06-11 17:52:50.000000000 +0200
++++ ttyrec-1.0.8/ttyrec.c	2015-11-15 09:59:41.000000000 +0100
+@@ -54,6 +54,7 @@
+ #include <unistd.h>
+ #include <string.h>
+ #include <stdlib.h>
++#include <signal.h>
+ 
+ #if defined(SVR4)
+ #include <fcntl.h>
diff --git a/nixpkgs/pkgs/tools/misc/ttyrec/default.nix b/nixpkgs/pkgs/tools/misc/ttyrec/default.nix
new file mode 100644
index 000000000000..56ec9afea438
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ttyrec/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "ttyrec";
+  version = "1.0.8";
+
+  src = fetchurl {
+    url = "http://0xcc.net/ttyrec/${pname}-${version}.tar.gz";
+    sha256 = "ef5e9bf276b65bb831f9c2554cd8784bd5b4ee65353808f82b7e2aef851587ec";
+  };
+
+  patches = [ ./clang-fixes.patch ];
+
+  makeFlags = stdenv.lib.optional stdenv.buildPlatform.isLinux "CFLAGS=-DSVR4"
+    ++ stdenv.lib.optional stdenv.cc.isClang "CC=clang";
+
+  installPhase = ''
+    mkdir -p $out/{bin,man}
+    cp ttytime ttyplay ttyrec $out/bin
+    cp *.1 $out/man
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://0xcc.net/ttyrec/;
+    description = "Terminal interaction recorder and player";
+    license = licenses.bsd3;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ zimbatm ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/txr/default.nix b/nixpkgs/pkgs/tools/misc/txr/default.nix
new file mode 100644
index 000000000000..a6b851e18aef
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/txr/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, fetchurl, bison, flex, libffi }:
+
+stdenv.mkDerivation rec {
+  pname = "txr";
+  version = "231";
+
+  src = fetchurl {
+    url = "http://www.kylheku.com/cgit/txr/snapshot/${pname}-${version}.tar.bz2";
+    sha256 = "0mcglb84zfmrai2bcdg9j0ck8jp8h7ii2rf4m38yjggy0dvii2lc";
+  };
+
+  nativeBuildInputs = [ bison flex ];
+  buildInputs = [ libffi ];
+
+  enableParallelBuilding = true;
+
+  doCheck = true;
+  checkTarget = "tests";
+
+  # Remove failing test-- mentions 'usr/bin' so probably related :)
+  preCheck = "rm -rf tests/017";
+
+  postInstall = ''
+    d=$out/share/vim-plugins/txr
+    mkdir -p $d/{syntax,ftdetect}
+
+    cp {tl,txr}.vim $d/syntax/
+
+    cat > $d/ftdetect/txr.vim <<EOF
+      au BufRead,BufNewFile *.txr set filetype=txr | set lisp
+      au BufRead,BufNewFile *.tl,*.tlo set filetype=tl | set lisp
+    EOF
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Programming language for convenient data munging";
+    license = licenses.bsd2;
+    homepage = http://nongnu.org/txr;
+    maintainers = with stdenv.lib.maintainers; [ dtzWill ];
+    platforms = platforms.linux; # Darwin fails although it should work AFAIK
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/txt2man/default.nix b/nixpkgs/pkgs/tools/misc/txt2man/default.nix
new file mode 100644
index 000000000000..90f9559e6b7c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/txt2man/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchurl, coreutils, gawk }:
+
+stdenv.mkDerivation rec {
+  pname = "txt2man";
+  version = "1.6.0";
+
+  src = fetchurl {
+    url = "https://github.com/mvertes/txt2man/archive/${pname}-${version}.tar.gz";
+    sha256 = "168cj96974n2z0igin6j1ic1m45zyic7nm5ark7frq8j78rrx4zn";
+  };
+
+  preConfigure = ''
+    makeFlags=prefix="$out"
+  '';
+
+  patchPhase = ''
+    for f in bookman src2man txt2man; do
+        substituteInPlace $f --replace "gawk" "${gawk}/bin/gawk"
+
+        substituteInPlace $f --replace "(date" "(${coreutils}/bin/date"
+        substituteInPlace $f --replace "=cat" "=${coreutils}/bin/cat"
+        substituteInPlace $f --replace "cat <<" "${coreutils}/bin/cat <<"
+        substituteInPlace $f --replace "expand" "${coreutils}/bin/expand"
+        substituteInPlace $f --replace "(uname" "(${coreutils}/bin/uname"
+    done
+  '';
+
+  doCheck = true;
+
+  checkPhase = ''
+    # gawk and coreutils are part of stdenv but will not
+    # necessarily be in PATH at runtime.
+    sh -c 'unset PATH; printf hello | ./txt2man'
+  '';
+
+  meta = {
+    description = "Convert flat ASCII text to man page format";
+    homepage = http://mvertes.free.fr/;
+    license = stdenv.lib.licenses.gpl2;
+    platforms = with stdenv.lib.platforms; linux ++ darwin;
+    maintainers = with stdenv.lib.maintainers; [ bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/txtw/default.nix b/nixpkgs/pkgs/tools/misc/txtw/default.nix
new file mode 100644
index 000000000000..ab8256842aed
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/txtw/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub, cairo }:
+
+stdenv.mkDerivation rec {
+  version = "0.4";
+  pname = "txtw";
+
+  src = fetchFromGitHub {
+    owner = "baskerville";
+    repo = "txtw";
+    rev = version;
+    sha256 = "17yjdgdd080fsf5r1wzgk6vvzwsa15gcwc9z64v7x588jm1ryy3k";
+  };
+
+  buildInputs = [ cairo ];
+
+  prePatch = ''sed -i "s@/usr/local@$out@" Makefile'';
+
+  meta = with stdenv.lib; {
+    description = "Compute text widths";
+    homepage = https://github.com/baskerville/txtw;
+    maintainers = with maintainers; [ lihop ];
+    license = licenses.unlicense;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/uhubctl/default.nix b/nixpkgs/pkgs/tools/misc/uhubctl/default.nix
new file mode 100644
index 000000000000..a6fe1853ae55
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/uhubctl/default.nix
@@ -0,0 +1,27 @@
+{ stdenv
+, fetchFromGitHub
+, libusb
+}:
+
+stdenv.mkDerivation rec {
+  pname = "uhubctl";
+  version = "2.1.0";
+
+  src = fetchFromGitHub {
+    owner = "mvp";
+    repo = "uhubctl";
+    rev = "refs/tags/v${version}";
+    sha256 = "1cgmwsf68g49k6q4jvz073bpjhg5p73kk1a4kbgkxmvx01gmbcmq";
+  };
+
+  buildInputs = [ libusb ];
+
+  installFlags = [ "prefix=${placeholder "out"}" ];
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/mvp/uhubctl";
+    description = "Utility to control USB power per-port on smart USB hubs";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ prusnak ];
+    platforms = with platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ultrastar-creator/default.nix b/nixpkgs/pkgs/tools/misc/ultrastar-creator/default.nix
new file mode 100644
index 000000000000..dd9742293ac7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ultrastar-creator/default.nix
@@ -0,0 +1,45 @@
+{ lib, mkDerivation, fetchFromGitHub
+, qmake, qtbase, pkgconfig, taglib, libbass, libbass_fx }:
+
+# TODO: get rid of (unfree) libbass
+# issue:https://github.com/UltraStar-Deluxe/UltraStar-Creator/issues/3
+# there’s a WIP branch here:
+# https://github.com/UltraStar-Deluxe/UltraStar-Creator/commits/BASS_removed
+
+mkDerivation {
+  pname = "ultrastar-creator";
+  version = "2019-04-23";
+
+  src = fetchFromGitHub {
+    owner = "UltraStar-Deluxe";
+    repo = "UltraStar-Creator";
+    rev = "36583b4e482b68f6aa949e77ef2744776aa587b1";
+    sha256 = "1rzz04l7s7pxj74xam0cxlq569lfpgig35kpbsplq531d4007pc9";
+  };
+
+  postPatch = with lib; ''
+    # we don’t want prebuild binaries checked into version control!
+    rm -rf lib include
+    sed -e "s|DESTDIR =.*$|DESTDIR = $out/bin|" \
+        -e 's|-L".*unix"||' \
+        -e "/QMAKE_POST_LINK/d" \
+        -e "s|../include/bass|${getLib libbass}/include|g" \
+        -e "s|../include/bass_fx|${getLib libbass_fx}/include|g" \
+        -e "s|../include/taglib|${getLib taglib}/include|g" \
+        -i src/UltraStar-Creator.pro
+  '';
+
+  preConfigure = ''
+    cd src
+  '';
+
+  nativeBuildInputs = [ qmake pkgconfig ];
+  buildInputs = [ qtbase taglib libbass libbass_fx ];
+
+  meta = with lib; {
+    description = "Ultrastar karaoke song creation tool";
+    homepage = https://github.com/UltraStar-Deluxe/UltraStar-Creator;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ Profpatsch ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ultrastar-manager/default.nix b/nixpkgs/pkgs/tools/misc/ultrastar-manager/default.nix
new file mode 100644
index 000000000000..19d126d98f64
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ultrastar-manager/default.nix
@@ -0,0 +1,121 @@
+{ lib, mkDerivation, fetchFromGitHub, pkgconfig, symlinkJoin, qmake, diffPlugins
+, qtbase, qtmultimedia, taglib, libmediainfo, libzen, libbass }:
+
+let
+  version = "2019-04-23";
+  rev = "ef4524e2239ddbb60f26e05bfba1f4f28cb7b54f";
+  sha256 = "0dl2qp686vbs160b3i9qypb7sv37phy2wn21kgzljbk3wnci3yv4";
+  buildInputs = [ qtbase qtmultimedia taglib libmediainfo libzen libbass ];
+
+  plugins = [
+    "albumartex"
+    "amazon"
+    "audiotag"
+    "cleanup"
+    "freecovers"
+    "lyric"
+    "preparatory"
+    "rename"
+ ];
+
+  patchedSrc =
+    let src = fetchFromGitHub {
+      owner = "UltraStar-Deluxe";
+      repo = "UltraStar-Manager";
+      inherit rev sha256;
+    };
+    in mkDerivation {
+      name = "${src.name}-patched";
+      inherit src;
+      phases = [ "unpackPhase" "patchPhase" ];
+
+      patchPhase = with lib; ''
+        # we don’t want prebuild binaries checked into version control!
+        rm -rf lib include
+
+        # fix up main project file
+        sed -e 's|-L.*unix.*lbass.*$|-lbass|' \
+            -e "/QMAKE_POST_LINK/d" \
+            -e "s|../include/bass|${getLib libbass}/include|g" \
+            -e "s|../include/taglib|${getLib taglib}/include|g" \
+            -e "s|../include/mediainfo|${getLib libmediainfo}/include|g" \
+            -i src/UltraStar-Manager.pro
+
+        # if more plugins start depending on ../../../include,
+        # it should be abstracted out for all .pro files
+        sed -e "s|../../../include/taglib|${getLib taglib}/include/taglib|g" \
+            -i src/plugins/audiotag/audiotag.pro
+
+        mkdir $out
+        mv * $out
+      '';
+    };
+
+  patchApplicationPath = file: path: ''
+    sed -e "s|QCore.*applicationDirPath()|QString(\"${path}\")|" -i "${file}"
+  '';
+
+  buildPlugin = name: mkDerivation {
+    name = "ultrastar-manager-${name}-plugin-${version}";
+    src = patchedSrc;
+
+    buildInputs = [ qmake ] ++ buildInputs;
+
+    postPatch = ''
+      sed -e "s|DESTDIR = .*$|DESTDIR = $out|" \
+          -i src/plugins/${name}/${name}.pro
+
+      # plugins use the application’s binary folder (wtf)
+      for f in $(grep -lr "QCoreApplication::applicationDirPath" src/plugins); do
+        ${patchApplicationPath "$f" "\$out"}
+      done
+
+    '';
+    preConfigure = ''
+      cd src/plugins/${name}
+    '';
+  };
+
+  builtPlugins =
+    symlinkJoin {
+      name = "ultrastar-manager-plugins-${version}";
+      paths = map buildPlugin plugins;
+    };
+
+in mkDerivation {
+  pname = "ultrastar-manager";
+  inherit version;
+  src = patchedSrc;
+
+  postPatch = ''
+    sed -e "s|DESTDIR =.*$|DESTDIR = $out/bin|" \
+        -i src/UltraStar-Manager.pro
+    # patch plugin manager to point to the collected plugin folder
+    ${patchApplicationPath "src/plugins/QUPluginManager.cpp" builtPlugins}
+  '';
+
+  buildPhase = ''
+    find -path './src/plugins/*' -prune -type d -print0 \
+      | xargs -0 -i'{}' basename '{}' \
+      | sed -e '/shared/d' \
+      > found_plugins
+    ${diffPlugins plugins "found_plugins"}
+
+    cd src && qmake && make
+  '';
+
+  # is not installPhase so that qt post hooks can run
+  preInstall = ''
+    make install
+  '';
+
+  nativeBuildInputs = [ pkgconfig ];
+  inherit buildInputs;
+
+  meta = with lib; {
+    description = "Ultrastar karaoke song manager";
+    homepage = https://github.com/UltraStar-Deluxe/UltraStar-Manager;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ Profpatsch ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/umlet/default.nix b/nixpkgs/pkgs/tools/misc/umlet/default.nix
new file mode 100644
index 000000000000..2b70848cbb81
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/umlet/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, fetchurl, jre, unzip, runtimeShell }:
+
+stdenv.mkDerivation rec {
+  major = "14";
+  minor = "3";
+  version = "${major}.${minor}.0";
+  pname = "umlet";
+
+  src = fetchurl {
+    url = "http://www.umlet.com/umlet_${major}_${minor}/umlet-standalone-${version}.zip";
+    sha256 = "0jfyxjxsjx29xhs3fl0f574nyncmk9j5jp8zlgd401mcaznn9c7l";
+  };
+
+  buildInputs = [ unzip ];
+
+  installPhase = ''
+    mkdir -p "$out/bin"
+    mkdir -p "$out/lib"
+
+    cp -R * "$out/lib"
+
+    cat > "$out/bin/umlet" << EOF
+    #!${runtimeShell}
+
+    programDir="$out/lib"
+    cd "\$programDir"
+    if [ \$# -eq 1 ]
+     then "${jre}/bin/java" -jar "\$programDir/umlet.jar" -filename="\$1"
+     else "${jre}/bin/java" -jar "\$programDir/umlet.jar" "\$@"
+    fi
+
+    EOF
+    chmod a+x "$out/bin/umlet"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Free, open-source UML tool with a simple user interface";
+    longDescription = ''
+      UMLet is a free, open-source UML tool with a simple user interface:
+      draw UML diagrams fast, produce sequence and activity diagrams from
+      plain text, export diagrams to eps, pdf, jpg, svg, and clipboard,
+      share diagrams using Eclipse, and create new, custom UML elements.
+      UMLet runs stand-alone or as Eclipse plug-in on Windows, macOS and
+      Linux.
+    '';
+    homepage = http://www.umlet.com;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ geistesk ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/unclutter-xfixes/default.nix b/nixpkgs/pkgs/tools/misc/unclutter-xfixes/default.nix
new file mode 100644
index 000000000000..7d2e5e0c367d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/unclutter-xfixes/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchFromGitHub,
+  xlibsWrapper, libev, libXi, libXfixes,
+  pkgconfig, asciidoc, libxslt, docbook_xsl }:
+
+stdenv.mkDerivation rec {
+  pname = "unclutter-xfixes";
+  version = "1.5";
+
+  src = fetchFromGitHub {
+    owner = "Airblader";
+    repo = "unclutter-xfixes";
+    rev = "v${version}";
+    sha256 = "148m4wx8v57s3l2wb69y9imb00y8ca2li27hsxibwnl1wrkb7z4b";
+  };
+
+  nativeBuildInputs = [ pkgconfig asciidoc libxslt docbook_xsl ];
+  buildInputs = [ xlibsWrapper libev libXi libXfixes ];
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with stdenv.lib; {
+    description = "Rewrite of unclutter using the X11 Xfixes extension";
+    platforms = platforms.unix;
+    license = stdenv.lib.licenses.mit;
+    inherit version;
+    maintainers = [ maintainers.globin ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/unclutter/default.nix b/nixpkgs/pkgs/tools/misc/unclutter/default.nix
new file mode 100644
index 000000000000..978a3d541ab0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/unclutter/default.nix
@@ -0,0 +1,37 @@
+{stdenv, fetchurl, xlibsWrapper}:
+
+stdenv.mkDerivation {
+  name = "unclutter-8";
+  src = fetchurl {
+    url = https://www.ibiblio.org/pub/X11/contrib/utilities/unclutter-8.tar.gz;
+    sha256 = "33a78949a7dedf2e8669ae7b5b2c72067896497820292c96afaa60bb71d1f2a6";
+  };
+
+  buildInputs = [xlibsWrapper];
+
+  buildFlags = [ "CC=cc" ];
+
+  installPhase = ''
+    mkdir -pv "$out/bin"
+    mkdir -pv "$out/share/man/man1"
+    make DESTDIR="$out" BINDIR="$out/bin" PREFIX="" install
+    make DESTDIR="$out" MANPATH="$out/share/man" PREFIX="" install.man
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Hides mouse pointer while not in use";
+    longDescription = ''
+      Unclutter hides your X mouse cursor when you do not need it, to prevent
+      it from getting in the way. You have only to move the mouse to restore
+      the mouse cursor. Unclutter is very useful in tiling wm's where you do
+      not need the mouse often.
+
+      Just run it from your .bash_profile like that:
+
+          unclutter -idle 1 &
+    '';
+    maintainers = with maintainers; [ domenkozar ];
+    platforms = platforms.unix;
+    license = stdenv.lib.licenses.publicDomain;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/unicode/default.nix b/nixpkgs/pkgs/tools/misc/unicode/default.nix
new file mode 100644
index 000000000000..9ace1f137b82
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/unicode/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub, fetchurl, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  name = "unicode-${version}";
+  version = "2.6";
+
+  src = fetchFromGitHub {
+    owner = "garabik";
+    repo = "unicode";
+    rev = "v${version}";
+    sha256 = "17hh4nwl5njsh7lnff583j2axn6rfvfbiqwp72n7vcsgkiszw4kg";
+  };
+
+  ucdtxt = fetchurl {
+    url = http://www.unicode.org/Public/11.0.0/ucd/UnicodeData.txt;
+    sha256 = "16b0jzvvzarnlxdvs2izd5ia0ipbd87md143dc6lv6xpdqcs75s9";
+  };
+
+  postFixup = ''
+    substituteInPlace "$out/bin/.unicode-wrapped" \
+      --replace "/usr/share/unicode/UnicodeData.txt" "$ucdtxt"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Display unicode character properties";
+    homepage = https://github.com/garabik/unicode;
+    license = licenses.gpl3;
+    maintainers = [ maintainers.woffs ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/units/default.nix b/nixpkgs/pkgs/tools/misc/units/default.nix
new file mode 100644
index 000000000000..8bea94770ba6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/units/default.nix
@@ -0,0 +1,47 @@
+{
+  stdenv,
+  lib,
+  fetchurl,
+  readline,
+  enableCurrenciesUpdater ? true,
+  pythonPackages ? null
+}:
+
+assert enableCurrenciesUpdater -> pythonPackages != null;
+
+stdenv.mkDerivation rec {
+  pname = "units";
+  version = "2.19";
+
+  src = fetchurl {
+    url = "mirror://gnu/units/${pname}-${version}.tar.gz";
+    sha256 = "0mk562g7dnidjgfgvkxxpvlba66fh1ykmfd9ylzvcln1vxmi6qj2";
+  };
+
+  pythonEnv = pythonPackages.python.withPackages(ps: [
+    ps.requests
+  ]);
+
+  buildInputs = [ readline ]
+    ++ lib.optionals enableCurrenciesUpdater [
+      pythonEnv
+    ]
+  ;
+  prePatch = ''
+    substituteInPlace units_cur \
+      --replace "#!/usr/bin/env python" ${pythonEnv}/bin/python
+  '';
+  postInstall = ''
+    cp units_cur ${placeholder "out"}/bin/
+  '';
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    description = "Unit conversion tool";
+    homepage = https://www.gnu.org/software/units/;
+    license = [ licenses.gpl3Plus ];
+    platforms = platforms.all;
+    maintainers = [ maintainers.vrthra ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/up/default.nix b/nixpkgs/pkgs/tools/misc/up/default.nix
new file mode 100644
index 000000000000..b3937175604d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/up/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "up";
+  version = "0.3.2";
+
+  src = fetchFromGitHub {
+    owner = "akavel";
+    repo = "up";
+    rev = "v${version}";
+    sha256 = "1psixyymk98z52yy92lwb75yfins45dw6rif9cxwd7yiascwg2if";
+  };
+
+  modSha256 = "0nfs190rzabphhhyacypz3ic5c4ajlqpx9jiiincs0vxfkmfwnjd";
+
+  meta = with lib; {
+    description = "Ultimate Plumber is a tool for writing Linux pipes with instant live preview";
+    homepage = https://github.com/akavel/up;
+    maintainers = with maintainers; [ ma27 ];
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/upower-notify/default.nix b/nixpkgs/pkgs/tools/misc/upower-notify/default.nix
new file mode 100644
index 000000000000..607cb47ed4e8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/upower-notify/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, buildGoPackage, fetchgit }:
+
+# To use upower-notify, the maintainer suggests adding something like this to your configuration.nix:
+#
+# service.xserver.displayManager.sessionCommands = ''
+#   ${pkgs.dunst}/bin/dunst -shrink -geometry 0x0-50-50 -key space & # ...if don't already have a dbus notification display app
+#   (sleep 3; exec ${pkgs.yeshup}/bin/yeshup ${pkgs.go-upower-notify}/bin/upower-notify) &
+# '';
+buildGoPackage rec {
+  pname = "upower-notify";
+  version = "20160310-${stdenv.lib.strings.substring 0 7 rev}";
+  rev = "14c581e683a7e90ec9fa6d409413c16599a5323c";
+  
+  goPackagePath = "github.com/omeid/upower-notify";
+
+  src = fetchgit {
+    inherit rev;
+    url = "https://github.com/omeid/upower-notify";
+    sha256 = "16zlvn53p9m10ph8n9gps51fkkvl6sf4afdzni6azk05j0ng49jw";
+  };
+
+  goDeps = ./deps.nix;
+}
diff --git a/nixpkgs/pkgs/tools/misc/upower-notify/deps.nix b/nixpkgs/pkgs/tools/misc/upower-notify/deps.nix
new file mode 100644
index 000000000000..8a729857b819
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/upower-notify/deps.nix
@@ -0,0 +1,11 @@
+[
+  {
+    goPackagePath = "github.com/godbus/dbus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/godbus/dbus";
+      rev = "32c6cc29c14570de4cf6d7e7737d68fb2d01ad15";
+      sha256 = "0v401f761l88yapiaw23pxvxviqrwl2r2vfd6lq02044i7x4i5r3";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/misc/urjtag/default.nix b/nixpkgs/pkgs/tools/misc/urjtag/default.nix
new file mode 100644
index 000000000000..865fd4f44f84
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/urjtag/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, autoconf, automake, pkgconfig, gettext, libtool, bison
+, flex, which, subversion, fetchsvn, makeWrapper, libftdi, libusb, readline
+, python3
+, svfSupport ? true
+, bsdlSupport ? true
+, staplSupport ? true
+, jedecSupport ? true
+}:
+
+stdenv.mkDerivation {
+  version = "0.10";
+  pname = "urjtag";
+
+  src = fetchsvn {
+    url = "svn://svn.code.sf.net/p/urjtag/svn/trunk/urjtag";
+    rev = "2051";
+    sha256 = "0pyl0y27136nr8mmjdml7zjnfnpbjmgqzkjk99j3hvj38k10wq7f";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ gettext autoconf automake libtool bison flex which
+    subversion makeWrapper readline libftdi libusb python3 ];
+
+  configureFlags = [
+    (stdenv.lib.enableFeature svfSupport   "svf")
+    (stdenv.lib.enableFeature bsdlSupport  "bsdl")
+    (stdenv.lib.enableFeature staplSupport "stapl")
+    (stdenv.lib.enableFeature jedecSupport "jedec-exp")
+  ];
+
+  preConfigure = "./autogen.sh";
+
+  meta = {
+    description = "Enhanced, modern tool for communicating over JTAG with flash chips, CPUs,and many more";
+    homepage = http://urjtag.org/;
+    license = with stdenv.lib.licenses; [ gpl2Plus lgpl21Plus ];
+    platforms = stdenv.lib.platforms.gnu ++ stdenv.lib.platforms.linux;  # arbitrary choice
+    maintainers = with stdenv.lib.maintainers; [ lowfatcomputing ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/usbmuxd/default.nix b/nixpkgs/pkgs/tools/misc/usbmuxd/default.nix
new file mode 100644
index 000000000000..5935710164c4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/usbmuxd/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, libusb1, libimobiledevice }:
+
+stdenv.mkDerivation rec {
+  pname = "usbmuxd";
+  version = "2019-11-11";
+
+  src = fetchFromGitHub {
+    owner = "libimobiledevice";
+    repo = pname;
+    rev = "9af2b12552693a47601347e1eafc1e94132d727e";
+    sha256 = "0w8mf2wfpqijg882vhb8xarlp6zja23xf0b59z5zi774pnpjbqvj";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  propagatedBuildInputs = [ libimobiledevice libusb1 ];
+
+  preConfigure = ''
+    configureFlags="$configureFlags --with-udevrulesdir=$out/lib/udev/rules.d"
+    configureFlags="$configureFlags --with-systemdsystemunitdir=$out/lib/systemd/system"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/libimobiledevice/usbmuxd;
+    description = "A socket daemon to multiplex connections from and to iOS devices";
+    longDescription = ''
+      usbmuxd stands for "USB multiplexing daemon". This daemon is in charge of
+      multiplexing connections over USB to an iOS device. To users, it means
+      you can sync your music, contacts, photos, etc. over USB. To developers, it
+      means you can connect to any listening localhost socket on the device. usbmuxd
+      is not used for tethering data transfer which uses a dedicated USB interface as
+      a virtual network device. Multiple connections to different TCP ports can happen
+      in parallel. The higher-level layers are handled by libimobiledevice.
+    '';
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ infinisil ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/uucp/default.nix b/nixpkgs/pkgs/tools/misc/uucp/default.nix
new file mode 100644
index 000000000000..0fae40a5c964
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/uucp/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "uucp-1.07";
+
+  src = fetchurl {
+    url = "mirror://gnu/uucp/${name}.tar.gz";
+    sha256 = "0b5nhl9vvif1w3wdipjsk8ckw49jj1w85xw1mmqi3zbcpazia306";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  prePatch = ''
+    # do not set sticky bit in nix store
+    substituteInPlace Makefile.in \
+      --replace 4555 0555
+    sed -i '/chown $(OWNER)/d' Makefile.in
+  '';
+
+  meta = {
+    description = "Unix-unix cp over serial line, also includes cu program";
+
+    longDescription =
+      '' Taylor UUCP is a free implementation of UUCP and is the standard
+         UUCP used on the GNU system.  If you don't know what UUCP is chances
+         are, nowadays, that you won't need it.  If you do need it, you've
+         just found one of the finest UUCP implementations available.
+      '';
+
+    homepage = https://www.gnu.org/software/uucp/uucp.html;
+
+    license = stdenv.lib.licenses.gpl2Plus;
+
+    platforms = stdenv.lib.platforms.all;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/uudeview/default.nix b/nixpkgs/pkgs/tools/misc/uudeview/default.nix
new file mode 100644
index 000000000000..3e8b7d494deb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/uudeview/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl, tcl, tk }:
+
+stdenv.mkDerivation rec {
+  name = "uudeview-0.5.20";
+  src = fetchurl {
+    url = "http://www.fpx.de/fp/Software/UUDeview/download/${name}.tar.gz";
+    sha256 = "0dg4v888fxhmf51vxq1z1gd57fslsidn15jf42pj4817vw6m36p4";
+  };
+
+  buildInputs = [ tcl tk ];
+  hardeningDisable = [ "format" ];
+  configureFlags = [ "--enable-tk=${tk.dev}" "--enable-tcl=${tcl}" ];
+
+  # https://wiki.tcl.tk/3577
+  patches = [ ./matherr.patch ];
+  postPatch = ''
+    substituteInPlace tcl/xdeview --replace "exec uuwish" "exec $out/bin/uuwish"
+  '';
+
+  meta = {
+    description = "The Nice and Friendly Decoder";
+    homepage = http://www.fpx.de/fp/Software/UUDeview/;
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = with stdenv.lib.maintainers; [ woffs ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/uudeview/matherr.patch b/nixpkgs/pkgs/tools/misc/uudeview/matherr.patch
new file mode 100644
index 000000000000..a93db7d7858d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/uudeview/matherr.patch
@@ -0,0 +1,19 @@
+diff --git a/tcl/uutcl.c b/tcl/uutcl.c
+index f101f2ce52b..71c24688dc4 100644
+--- a/tcl/uutcl.c
++++ b/tcl/uutcl.c
+@@ -48,14 +48,6 @@
+ #include <tcl.h>
+ #endif
+
+-/*
+- * The following variable is a special hack that is needed in order for
+- * Sun shared libraries to be used for Tcl.
+- */
+-
+-extern int matherr();
+-int *tclDummyMathPtr = (int *) matherr;
+-
+ #include <uudeview.h>
+ #include <uuint.h>
+ #include <fptools.h>
diff --git a/nixpkgs/pkgs/tools/misc/uutils-coreutils/default.nix b/nixpkgs/pkgs/tools/misc/uutils-coreutils/default.nix
new file mode 100644
index 000000000000..5aa9f8c34a47
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/uutils-coreutils/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchFromGitHub, rustPlatform, cargo, cmake, sphinx, lib, prefix ? "uutils-"
+, Security
+}:
+
+rustPlatform.buildRustPackage {
+  name = "uutils-coreutils-2019-05-03";
+  src = fetchFromGitHub {
+    owner = "uutils";
+    repo = "coreutils";
+    rev = "036dd812958ace22d973acf7b370f58072049dac";
+    sha256 = "0d9w3iiphhsk7l5l34682wayp90rgq5a3d94l3qdvhcqkfmpg727";
+  };
+
+  # too many impure/platform-dependent tests
+  doCheck = false;
+
+  cargoSha256 = "0qnpx2xhckb45q8cgn0xh31dg5k73hqp5mz5zg3micmg7as4b621";
+
+  makeFlags =
+    [ "CARGO=${cargo}/bin/cargo" "PREFIX=$(out)" "PROFILE=release" "INSTALLDIR_MAN=$(out)/share/man/man1" ]
+    ++ lib.optional (prefix != null) [ "PROG_PREFIX=${prefix}" ];
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ cargo sphinx ] ++ lib.optional stdenv.isDarwin Security;
+
+  # empty {build,install}Phase to use defaults of `stdenv.mkDerivation` rather than rust defaults
+  buildPhase = "";
+  installPhase = "";
+
+  meta = with lib; {
+    description = "Cross-platform Rust rewrite of the GNU coreutils";
+    longDescription = ''
+      uutils is an attempt at writing universal (as in cross-platform)
+      CLI utils in Rust. This repo is to aggregate the GNU coreutils rewrites.
+    '';
+    homepage = https://github.com/uutils/coreutils;
+    maintainers = with maintainers; [ ];
+    license = licenses.mit;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vcs_query/default.nix b/nixpkgs/pkgs/tools/misc/vcs_query/default.nix
new file mode 100644
index 000000000000..a39619f354bd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vcs_query/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, python3, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "vcs_query";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "mageta";
+    repo = "vcs_query";
+    rev = "v${version}";
+    sha256 = "05va0na9yxkpqhm9v0x3k58148qcf2bbcv5bnmj7vn9r7fwyjrlx";
+  };
+
+  nativeBuildInputs = [ python3 python3.pkgs.wrapPython ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    install -Dm0755 vcs_query.py $out/bin/vcs_query
+    patchShebangs $out/bin
+    buildPythonPath ${python3.pkgs.vobject};
+    patchPythonScript $out/bin/vcs_query
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/mageta/vcs_query;
+    description = "eMail query-command to use vCards in mutt and Vim";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ma27 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vdirsyncer/default.nix b/nixpkgs/pkgs/tools/misc/vdirsyncer/default.nix
new file mode 100644
index 000000000000..328c343ba702
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vdirsyncer/default.nix
@@ -0,0 +1,73 @@
+{ stdenv, python3Packages, fetchFromGitHub, fetchpatch, rustPlatform, pkgconfig, openssl, CoreServices, Security }:
+
+# Packaging documentation at:
+# https://github.com/untitaker/vdirsyncer/blob/master/docs/packaging.rst
+python3Packages.buildPythonApplication rec {
+  version = "unstable-2018-08-05";
+  pname = "vdirsyncer";
+  name = "${pname}-${version}";
+
+  src = fetchFromGitHub {
+    owner = "spk";
+    repo = pname;
+    # fix-build-style branch, see https://github.com/pimutils/vdirsyncer/pull/798
+    rev = "2c62d03bd73f8b44a47c2e769ade046697896ae9";
+    sha256 = "1q6xvzz5rf5sqdaj3mdvhpgwy5b16isavgg7vardgjwqwv1yal28";
+  };
+
+  native = rustPlatform.buildRustPackage {
+    name = "${name}-native";
+    inherit src;
+    sourceRoot = "source/rust";
+    cargoSha256 = "1n1dxq3klsry5mmbfff2jv7ih8mr5zvpncrdgba6qs93wi77qi0y";
+    buildInputs = [ pkgconfig openssl ] ++ stdenv.lib.optionals stdenv.isDarwin [ CoreServices Security ];
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    click click-log click-threading
+    requests_toolbelt
+    requests
+    requests_oauthlib # required for google oauth sync
+    atomicwrites
+    milksnake
+    shippai
+  ];
+
+  nativeBuildInputs = with python3Packages; [ setuptools_scm ];
+
+  checkInputs = with python3Packages; [ hypothesis pytest pytest-localserver pytest-subtesthack ];
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/pimutils/vdirsyncer/commit/7b636e8e40d69c495901f965b9c0686513659e44.patch";
+      sha256 = "0vl942ii5iad47y63v0ngmhfp37n30nxyk4j7h64b95fk38vfwx9";
+    })
+  ];
+
+  postPatch = ''
+    # see https://github.com/pimutils/vdirsyncer/pull/805
+    substituteInPlace setup.cfg --replace --duration --durations
+
+    # for setuptools_scm:
+    echo 'Version: ${version}' >PKG-INFO
+
+    sed -i 's/spec.add_external_build(cmd=cmd/spec.add_external_build(cmd="true"/g' setup.py
+  '';
+
+  preBuild = ''
+    mkdir -p rust/target/release
+    ln -s ${native}/lib/libvdirsyncer_rustext* rust/target/release/
+  '';
+
+  checkPhase = ''
+    rm -rf vdirsyncer
+    make DETERMINISTIC_TESTS=true test
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/pimutils/vdirsyncer;
+    description = "Synchronize calendars and contacts";
+    maintainers = with maintainers; [ matthiasbeyer gebner ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vdirsyncer/stable.nix b/nixpkgs/pkgs/tools/misc/vdirsyncer/stable.nix
new file mode 100644
index 000000000000..ac950894035b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vdirsyncer/stable.nix
@@ -0,0 +1,52 @@
+{ lib, python3Packages, fetchpatch }:
+
+# Packaging documentation at:
+# https://github.com/pimutils/vdirsyncer/blob/0.16.7/docs/packaging.rst
+python3Packages.buildPythonApplication rec {
+  version = "0.16.7";
+  pname = "vdirsyncer";
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "6c9bcfb9bcb01246c83ba6f8551cf54c58af3323210755485fc23bb7848512ef";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    click click-log click-threading
+    requests_toolbelt
+    requests
+    requests_oauthlib # required for google oauth sync
+    atomicwrites
+  ];
+
+  nativeBuildInputs = with python3Packages; [ setuptools_scm ];
+
+  checkInputs = with python3Packages; [ hypothesis pytest pytest-localserver pytest-subtesthack ];
+
+  patches = [
+    # Fixes for hypothesis: https://github.com/pimutils/vdirsyncer/pull/779
+    (fetchpatch {
+      url = https://github.com/pimutils/vdirsyncer/commit/22ad88a6b18b0979c5d1f1d610c1d2f8f87f4b89.patch;
+      sha256 = "0dbzj6jlxhdidnm3i21a758z83sdiwzhpd45pbkhycfhgmqmhjpl";
+    })
+  ];
+
+  postPatch = ''
+    # Invalid argument: 'perform_health_check' is not a valid setting
+    substituteInPlace tests/conftest.py \
+      --replace "perform_health_check=False" ""
+    substituteInPlace tests/unit/test_repair.py \
+      --replace $'@settings(perform_health_check=False)  # Using the random module for UIDs\n' ""
+  '';
+
+  checkPhase = ''
+    make DETERMINISTIC_TESTS=true test
+  '';
+
+  meta = with lib; {
+    homepage = https://github.com/pimutils/vdirsyncer;
+    description = "Synchronize calendars and contacts";
+    license = licenses.mit;
+    maintainers = with maintainers; [ loewenheim ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vector/default.nix b/nixpkgs/pkgs/tools/misc/vector/default.nix
new file mode 100644
index 000000000000..18ae7b5e211c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vector/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, lib, fetchFromGitHub, rustPlatform
+, openssl, pkgconfig, protobuf
+, Security, libiconv, rdkafka
+
+, features ?
+    (if stdenv.isAarch64
+     then [ "shiplift/unix-socket" "jemallocator" "rdkafka" "rdkafka/dynamic_linking" ]
+     else [ "leveldb" "leveldb/leveldb-sys-2" "shiplift/unix-socket" "jemallocator" "rdkafka" "rdkafka/dynamic_linking" ])
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "vector";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner  = "timberio";
+    repo   = pname;
+    rev    = "refs/tags/v${version}";
+    sha256 = "0bb4552nwkdpnxhaq2mn4iz5w92ggqxc1b78jq2vjbh1317sj9hw";
+  };
+
+  cargoSha256 = "1akyzrscc6pv7ggb1kna05vvxhfzrf1b4kji4bah1ry3yyqxdjsj";
+  buildInputs = [ openssl pkgconfig protobuf rdkafka ]
+                ++ stdenv.lib.optional stdenv.isDarwin [ Security libiconv ];
+
+  # needed for internal protobuf c wrapper library
+  PROTOC="${protobuf}/bin/protoc";
+  PROTOC_INCLUDE="${protobuf}/include";
+
+  cargoBuildFlags = [ "--no-default-features" "--features" "${lib.concatStringsSep "," features}" ];
+  checkPhase = ":"; # skip tests, too -- they don't respect the rdkafka flag...
+
+  meta = with stdenv.lib; {
+    description = "A high-performance logs, metrics, and events router";
+    homepage    = "https://github.com/timberio/vector";
+    license     = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ thoughtpolice ];
+    platforms   = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/venus/default.nix b/nixpkgs/pkgs/tools/misc/venus/default.nix
new file mode 100644
index 000000000000..534a500c7bcc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/venus/default.nix
@@ -0,0 +1,53 @@
+{ stdenv, fetchFromGitHub, python, pythonPackages, libxslt, libxml2, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "venus";
+  version = "unstable-2011-02-18";
+
+  src = fetchFromGitHub {
+    owner = "rubys";
+    repo = "venus";
+    rev = "9de21094a8cf565bdfcf75688e121a5ad1f5397b";
+    sha256 = "10yyx4jaxxbwhica12aiw119aywghcr7b24gs9lrmafpa6xd3an2";
+  };
+
+  preConfigure = ''
+    substituteInPlace tests/test_spider.py \
+        --replace "urllib.urlopen('http://127.0.0.1:%d/' % _PORT).read()" "" \
+        --replace "[200,200,200,200,404]" "[200,200,200,404]"
+    substituteInPlace planet.py \
+        --replace "#!/usr/bin/env python" "#!${python}/bin/python"
+    substituteInPlace tests/test_apply.py \
+        --replace "'xsltproc" "'${libxslt.bin}/bin/xsltproc"
+    substituteInPlace planet/shell/xslt.py \
+        --replace "'xsltproc" "'${libxslt.bin}/bin/xsltproc"
+  '';
+
+  doCheck = true;
+  checkPhase = "python runtests.py";
+
+  buildInputs = [ python libxslt
+    libxml2 pythonPackages.genshi pythonPackages.lxml makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -R ./* $out/
+    ln -s $out/planet.py $out/bin/venus-planet
+    wrapProgram $out/planet.py \
+        --prefix PYTHONPATH : $PYTHONPATH:${pythonPackages.lxml}/lib/${python.libPrefix}/site-packages:${pythonPackages.genshi}/lib/${python.libPrefix}/site-packages
+    python runtests.py
+  '';
+
+  meta = {
+    description = "News feed reader";
+    longDescription = ''
+      Planet Venus is an awesome ‘river of news’ feed reader. It downloads news
+      feeds published by web sites and aggregates their content together into a
+      single combined feed, latest news first.
+    '';
+    homepage = http://intertwingly.net/code/venus/docs/index.html;
+    license = stdenv.lib.licenses.psfl;
+    platforms = stdenv.lib.platforms.all;
+    maintainers = [];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vimer/default.nix b/nixpkgs/pkgs/tools/misc/vimer/default.nix
new file mode 100644
index 000000000000..7f81774aebee
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vimer/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  version = "0.2.0";
+  pname = "vimer";
+
+  src = fetchFromGitHub {
+    owner = "susam";
+    repo = "vimer";
+    rev = version;
+    sha256 = "01qhr3i7wasbaxvms39c81infpry2vk0nzh7r5m5b9p713p0phsi";
+  };
+
+  installPhase = ''
+    mkdir $out/bin/ -p
+    cp vimer $out/bin/
+    chmod +x $out/bin/vimer
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/susam/vimer;
+    description = ''
+      A convenience wrapper for gvim/mvim --remote(-tab)-silent to open files
+      in an existing instance of GVim or MacVim.
+    '';
+    license = licenses.mit;
+    maintainers = [ maintainers.matthiasbeyer ];
+    platforms = platforms.linux;
+  };
+
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/vimpager/build.nix b/nixpkgs/pkgs/tools/misc/vimpager/build.nix
new file mode 100644
index 000000000000..60389f6862b6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vimpager/build.nix
@@ -0,0 +1,39 @@
+{ stdenv
+, fetchFromGitHub
+, coreutils
+, sharutils
+, version
+, sha256
+}:
+
+stdenv.mkDerivation {
+  inherit version;
+  pname = "vimpager";
+
+  src = fetchFromGitHub {
+    inherit sha256;
+
+    owner  = "rkitover";
+    repo   = "vimpager";
+    rev    = version;
+  };
+
+  buildInputs = [ coreutils sharutils ]; # for uuencode
+
+  makeFlags = [
+    "PREFIX=$(out)"
+  ];
+
+  buildPhase = ''
+    sed -i 's,/bin/cat,${coreutils}/bin/cat,g' vimpager
+    make
+  '';
+
+
+  meta = with stdenv.lib; {
+    description = "Use Vim as PAGER";
+    homepage    = "https://www.vim.org/scripts/script.php?script_id=1723";
+    license     = with licenses; [ bsd2 mit vim ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vimpager/default.nix b/nixpkgs/pkgs/tools/misc/vimpager/default.nix
new file mode 100644
index 000000000000..1b1512db3cfe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vimpager/default.nix
@@ -0,0 +1,6 @@
+{ callPackage }:
+
+callPackage ./build.nix {
+  version = "2.06";
+  sha256  = "05yr7j72bw64nx7a0y6w9fjmz54zd4g46fn1qjfbbqvbc19fjpl8";
+}
diff --git a/nixpkgs/pkgs/tools/misc/vimpager/latest.nix b/nixpkgs/pkgs/tools/misc/vimpager/latest.nix
new file mode 100644
index 000000000000..c98b9a000147
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vimpager/latest.nix
@@ -0,0 +1,7 @@
+{ callPackage }:
+
+callPackage ./build.nix {
+  version = "a4da4dfac44d1bbc6986c5c76fea45a60ebdd8e5";
+  sha256  = "0gcjpw2q263hh8w2sjvq3f3k2d28qpkkv0jnl8hw1l7v604i8zxg";
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/vimwiki-markdown/default.nix b/nixpkgs/pkgs/tools/misc/vimwiki-markdown/default.nix
new file mode 100644
index 000000000000..241da2acbb44
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vimwiki-markdown/default.nix
@@ -0,0 +1,28 @@
+{ stdenv
+, buildPythonApplication
+, fetchPypi
+, markdown
+, pygments
+}:
+
+buildPythonApplication rec {
+  version = "0.2.0";
+  pname = "vimwiki-markdown";
+
+  src = fetchPypi {
+    inherit version pname;
+    sha256 = "0k7srlglhq4bm85kgd5ismslrk1fk8v16mm41a8k0kmcr9k4vi4a";
+  };
+
+  propagatedBuildInputs= [
+    markdown
+    pygments
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Vimwiki markdown plugin";
+    homepage = https://github.com/WnP/vimwiki_markdown;
+    license = licenses.mit;
+    maintainers = with maintainers; [ seqizz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vivid/default.nix b/nixpkgs/pkgs/tools/misc/vivid/default.nix
new file mode 100644
index 000000000000..a3df78abd25a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vivid/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "vivid";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "sharkdp";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "00xxk1ipr3hndd717q52j7s2wfxis1p4glaa9lvp72gwwzmv5k9w";
+  };
+
+  postPatch = ''
+    substituteInPlace src/main.rs --replace /usr/share $out/share
+  '';
+
+  cargoSha256 = "04xx26ngz7hx7bv5g01q9h6dqa96xkx0xm3jb0qk6c3hp6500zpn";
+
+  postInstall = ''
+    mkdir -p $out/share/${pname}
+    cp -rv config/* themes $out/share/${pname}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A generator for LS_COLORS with support for multiple color themes";
+    homepage = https://github.com/sharkdp/vivid;
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = [ maintainers.dtzWill ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vmtouch/default.nix b/nixpkgs/pkgs/tools/misc/vmtouch/default.nix
new file mode 100644
index 000000000000..6397a0933476
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vmtouch/default.nix
@@ -0,0 +1,26 @@
+{stdenv, fetchFromGitHub, perl}:
+
+stdenv.mkDerivation rec {
+  pname = "vmtouch";
+  version = "1.3.1";
+
+  src = fetchFromGitHub {
+    owner = "hoytech";
+    repo = "vmtouch";
+    rev = "v${version}";
+    sha256 = "08da6apzfkfjwasn4dxrlfxqfx7arl28apdzac5nvm0fhvws0dxk";
+  };
+
+  buildInputs = [perl];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = {
+    description = "Portable file system cache diagnostics and control";
+    longDescription = "vmtouch is a tool for learning about and controlling the file system cache of unix and unix-like systems.";
+    homepage = https://hoytech.com/vmtouch/;
+    license = stdenv.lib.licenses.bsd3;
+    maintainers = [ stdenv.lib.maintainers.garrison ];
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/void/default.nix b/nixpkgs/pkgs/tools/misc/void/default.nix
new file mode 100644
index 000000000000..ec19ae5bd18e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/void/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "void";
+  version = "1.1.5";
+
+  src = fetchFromGitHub {
+    owner = "spacejam";
+    repo = "void";
+    rev = version;
+    sha256 = "08vazw4rszqscjz988k89z28skyj3grm81bm5iwknxxagmrb20fz";
+  };
+
+  # The tests are long-running and not that useful
+  doCheck = false;
+
+  cargoSha256 = "03g7155jpg8k1ymk95m8rlhlszkxyq0rv32966n4gk5yziijvk4k";
+
+  meta = with stdenv.lib; {
+    description = "Terminal-based personal organizer";
+    homepage = https://github.com/spacejam/void;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ spacekookie ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vorbisgain/default.nix b/nixpkgs/pkgs/tools/misc/vorbisgain/default.nix
new file mode 100644
index 000000000000..90b721ad58ae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vorbisgain/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl, unzip, libogg, libvorbis }:
+
+stdenv.mkDerivation rec {
+  name = "vorbisgain-0.37";
+
+  src = fetchurl {
+    url = "https://sjeng.org/ftp/vorbis/${name}.tar.gz";
+    sha256 = "1v1h6mhnckmvvn7345hzi9abn5z282g4lyyl4nnbqwnrr98v0vfx";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  buildInputs = [ unzip libogg libvorbis ];
+
+  patchPhase = ''
+    chmod -v +x configure
+    configureFlags="--mandir=$out/share/man"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://sjeng.org/vorbisgain.html;
+    description = "A utility that corrects the volume of an Ogg Vorbis file to a predefined standardized loudness";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vttest/default.nix b/nixpkgs/pkgs/tools/misc/vttest/default.nix
new file mode 100644
index 000000000000..0aa51363ff8f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vttest/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "vttest";
+  version = "20190710";
+
+  src = fetchurl {
+    urls = [
+      "https://invisible-mirror.net/archives/${pname}/${pname}-${version}.tgz"
+      "ftp://ftp.invisible-island.net/${pname}/${pname}-${version}.tgz"
+    ];
+    sha256 = "00v3a94vpmbdziizdw2dj4bfwzfzfs2lc0ijxv98ln1w01w412q4";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Tests the compatibility so-called 'VT100-compatible' terminals";
+    homepage = https://invisible-island.net/vttest/;
+    license = licenses.mit;
+    platforms = platforms.all;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/wacomtablet/default.nix b/nixpkgs/pkgs/tools/misc/wacomtablet/default.nix
new file mode 100644
index 000000000000..d0fbcecf0270
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wacomtablet/default.nix
@@ -0,0 +1,30 @@
+{ lib, mkDerivation, fetchurl, extra-cmake-modules, qtx11extras,
+  plasma-workspace, libwacom, xf86_input_wacom
+}:
+
+mkDerivation rec {
+  pname = "wacomtablet";
+  version = "3.2.0";
+  src = fetchurl {
+    url = "mirror://kde/stable/${pname}/${version}/${pname}-${version}.tar.xz";
+    sha256 = "197pwpl87gqlnza36bp68jvw8ww25znk08acmi8bpz7n84xfc368";
+  };
+
+  nativeBuildInputs = [ extra-cmake-modules ];
+  buildInputs = [
+    qtx11extras plasma-workspace
+    libwacom xf86_input_wacom
+  ];
+
+  meta = {
+    description = "KDE Configuration Module for Wacom Graphics Tablets";
+    longDescription = ''
+      This module implements a GUI for the Wacom Linux Drivers and extends it
+      with profile support to handle different button / pen layouts per profile.
+    '';
+    homepage = https://cgit.kde.org/wacomtablet.git/about/;
+    license = lib.licenses.gpl2;
+    maintainers = [ lib.maintainers.Thra11 ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wagyu/default.nix b/nixpkgs/pkgs/tools/misc/wagyu/default.nix
new file mode 100644
index 000000000000..d56d21b15166
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wagyu/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "wagyu";
+  version = "0.6.1";
+
+  src = fetchFromGitHub {
+    owner = "ArgusHQ";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1646j0lgg3hhznifvbkvr672p3yqlcavswijawaxq7n33ll8vmcn";
+  };
+
+  cargoSha256 = "10b96l0b32zxq0xrnhivv3gihmi5y31rllbizv67hrg1axz095vn";
+  verifyCargoDeps = true;
+
+  meta = with lib; {
+    description = "Rust library for generating cryptocurrency wallets";
+    homepage = https://github.com/ArgusHQ/wagyu;
+    license = with licenses; [ mit asl20 ];
+    maintainers = [ maintainers.offline ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wakatime/default.nix b/nixpkgs/pkgs/tools/misc/wakatime/default.nix
new file mode 100644
index 000000000000..58ad9182261b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wakatime/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, python3Packages, fetchFromGitHub, glibcLocales }:
+
+with python3Packages;
+buildPythonApplication rec {
+  pname = "wakatime";
+  version = "13.0.3";
+
+  src = fetchFromGitHub {
+    owner = "wakatime";
+    repo = "wakatime";
+    rev = version;
+    sha256 = "16g23nm1x1a142rmnljdclq03c5anfzyiiazxaxyka8bggzhfmmc";
+  };
+
+  # needs more dependencies from https://github.com/wakatime/wakatime/blob/191b302bfb5f272ae928c6d3867d06f3dfcba4a8/dev-requirements.txt
+  # especially nose-capturestderr, which we do not package yet.
+  doCheck = false;
+  checkInputs = [ mock testfixtures pytest glibcLocales ];
+
+  checkPhase = ''
+    export HOME=$(mktemp -d) LC_ALL=en_US.utf-8
+    pytest tests
+  '';
+
+  meta = with stdenv.lib; {
+    inherit (src.meta) homepage;
+    description = "WakaTime command line interface";
+    longDescription = ''
+      Command line interface to WakaTime used by all WakaTime text editor
+      plugins. You shouldn't need to directly use this package unless you
+      are building your own plugin or your text editor's plugin asks you
+      to install the wakatime CLI interface manually.
+    '';
+    license = licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/watchexec/default.nix b/nixpkgs/pkgs/tools/misc/watchexec/default.nix
new file mode 100644
index 000000000000..9729f110bb74
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/watchexec/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, rustPlatform, fetchFromGitHub, CoreServices, installShellFiles }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "watchexec";
+  version = "1.12.0";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = version;
+    sha256 = "03s9nsss4895x4lp90y65jajavk8c2nj1jjnmx0vbbwl210ghlv1";
+  };
+
+  cargoSha256 = "07whi9w51ddh8s7v06c3k6n5q9gfx74rdkhgfysi180y2rgnbanj";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = stdenv.lib.optionals stdenv.isDarwin [ CoreServices ];
+
+  postInstall = ''
+    installManPage doc/watchexec.1
+    installShellCompletion --zsh --name _watchexec completions/zsh
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Executes commands in response to file modifications";
+    homepage = https://github.com/watchexec/watchexec;
+    license = with licenses; [ asl20 ];
+    maintainers = [ maintainers.michalrus ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/websocat/default.nix b/nixpkgs/pkgs/tools/misc/websocat/default.nix
new file mode 100644
index 000000000000..f682bb3d2eba
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/websocat/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub, pkgconfig, openssl, rustPlatform, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "websocat";
+  version = "1.5.0";
+
+  src = fetchFromGitHub {
+    owner = "vi";
+    repo = "websocat";
+    rev = "v${version}";
+    sha256 = "1lmra91ahpk4gamhnbdr066hl4vzwfh5i09fbabzdnxcvylbx8zf";
+  };
+
+  cargoBuildFlags = [ "--features=ssl" ];
+  cargoSha256 = "163kwpahrbb9v88kjkrc0jx2np3c068pspr8rqrm9cb8jyl2njrr";
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ openssl ] ++ stdenv.lib.optional stdenv.isDarwin Security;
+
+  meta = with stdenv.lib; {
+    description = "Command-line client for WebSockets (like netcat/socat)";
+    homepage = "https://github.com/vi/websocat";
+    license = licenses.mit;
+    maintainers = with maintainers; [ thoughtpolice filalex77 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wev/default.nix b/nixpkgs/pkgs/tools/misc/wev/default.nix
new file mode 100644
index 000000000000..fa69cc4445ee
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wev/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl
+, pkg-config, scdoc
+, wayland, wayland-protocols, libxkbcommon
+}:
+
+let
+  version = "2019-08-11";
+  commit = "47d17393473be152cf601272faf5704fff1c3f92";
+in stdenv.mkDerivation {
+  pname = "wev-unstable";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://git.sr.ht/~sircmpwn/wev/archive/${commit}.tar.gz";
+    sha256 = "0a5kvrviz77bf7357gqs2iy7a1bvb3izgkmiv1rdxzzmihd563ga";
+  };
+
+  nativeBuildInputs = [ pkg-config scdoc ];
+  buildInputs = [ wayland wayland-protocols libxkbcommon ];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with stdenv.lib; {
+    description = "Wayland event viewer";
+    longDescription = ''
+      This is a tool for debugging events on a Wayland window, analagous to the
+      X11 tool xev.
+    '';
+    homepage = https://git.sr.ht/~sircmpwn/wev;
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ primeos ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wl-clipboard/default.nix b/nixpkgs/pkgs/tools/misc/wl-clipboard/default.nix
new file mode 100644
index 000000000000..349d910dafc3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wl-clipboard/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub, meson, ninja, pkgconfig
+, wayland, wayland-protocols }:
+
+stdenv.mkDerivation rec {
+  pname = "wl-clipboard";
+  version = "2.0.0";
+
+  src = fetchFromGitHub {
+    owner = "bugaevc";
+    repo = "wl-clipboard";
+    rev = "v${version}";
+    sha256 = "0c4w87ipsw09aii34szj9p0xfy0m00wyjpll0gb0aqmwa60p0c5d";
+  };
+
+  nativeBuildInputs = [ meson ninja pkgconfig wayland-protocols ];
+  buildInputs = [ wayland ];
+
+  meta = with stdenv.lib; {
+    description = "Command-line copy/paste utilities for Wayland";
+    homepage = https://github.com/bugaevc/wl-clipboard;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ dywedir ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wlr-randr/default.nix b/nixpkgs/pkgs/tools/misc/wlr-randr/default.nix
new file mode 100644
index 000000000000..c9f439646961
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wlr-randr/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchFromGitHub, meson, ninja, cmake, pkgconfig, wayland }:
+
+stdenv.mkDerivation rec {
+  pname = "wlr-randr";
+  version = "unstable-2019-03-21";
+
+  src = fetchFromGitHub {
+    owner = "emersion";
+    repo = pname;
+    rev = "c4066aa3249963dc7877119cffce10f3fa8b6304";
+    sha256 = "1ahw4sv07xg5rh9vr7j28636iaxs06vnybm3li6y8dz2sky7hk88";
+  };
+
+  nativeBuildInputs = [ meson ninja cmake pkgconfig ];
+  buildInputs = [ wayland ];
+
+  meta = with stdenv.lib; {
+    license = licenses.mit;
+    description = "An xrandr clone for wlroots compositors";
+    homepage = "https://github.com/emersion/wlr-randr";
+    maintainers = with maintainers; [ ma27 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wob/default.nix b/nixpkgs/pkgs/tools/misc/wob/default.nix
new file mode 100644
index 000000000000..c3b3cd112398
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wob/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub
+, meson, ninja, pkg-config, scdoc, wayland # wayland-scanner
+, wayland-protocols
+}:
+
+stdenv.mkDerivation rec {
+  pname = "wob";
+  version = "0.6";
+
+  src = fetchFromGitHub {
+    owner = "francma";
+    repo = pname;
+    rev = version;
+    sha256 = "0cfglwh1inv6ng55vgznhll51m9g1lxfh37k4ridyxl64rc9jfq8";
+  };
+
+  nativeBuildInputs = [ meson ninja pkg-config scdoc wayland ];
+  buildInputs = [ wayland-protocols ];
+
+  meta = with stdenv.lib; {
+    description = "A lightweight overlay bar for Wayland";
+    longDescription = ''
+      A lightweight overlay volume/backlight/progress/anything bar for Wayland,
+      inspired by xob.
+    '';
+    inherit (src.meta) homepage;
+    license = licenses.isc;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ primeos ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/woeusb/default.nix b/nixpkgs/pkgs/tools/misc/woeusb/default.nix
new file mode 100644
index 000000000000..cc53b26e2388
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/woeusb/default.nix
@@ -0,0 +1,60 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, makeWrapper
+, coreutils, dosfstools, findutils, gawk, gnugrep, grub2_light, ncurses, ntfs3g, parted, p7zip, utillinux, wget
+, wxGTK30 }:
+
+stdenv.mkDerivation rec {
+  version = "3.3.0";
+  pname = "woeusb";
+
+  src = fetchFromGitHub {
+    owner = "slacka";
+    repo = "WoeUSB";
+    rev = "v${version}";
+    sha256 = "1w3m3qbjn0igydsbpf22w29lzf1pkxv7dlny5mbyrb6j0q6wlx0b";
+  };
+
+  patches = [ ./remove-workaround.patch ];
+
+  nativeBuildInputs = [ autoreconfHook makeWrapper ];
+  buildInputs = [ wxGTK30 ];
+
+  postPatch = ''
+    # Emulate version smudge filter (see .gitattributes, .gitconfig).
+    for file in configure.ac debian/changelog src/woeusb src/woeusb.1 src/woeusbgui.1; do
+      substituteInPlace "$file" \
+        --replace '@@WOEUSB_VERSION@@' '${version}'
+    done
+
+    substituteInPlace src/MainPanel.cpp \
+      --replace "'woeusb " "'$out/bin/woeusb "
+  '';
+
+  postInstall = ''
+    # don't write data into /
+    substituteInPlace "$out/bin/woeusb" \
+      --replace /media/ /run/woeusb/
+
+    # woeusbgui launches woeusb with pkexec, which sets
+    # PATH=/usr/sbin:/usr/bin:/sbin:/bin:/root/bin.  Perhaps pkexec
+    # should be patched with a less useless default PATH, but for now
+    # we add everything we need manually.
+    wrapProgram "$out/bin/woeusb" \
+      --set PATH '${stdenv.lib.makeBinPath [ coreutils dosfstools findutils gawk gnugrep grub2_light ncurses ntfs3g parted utillinux wget p7zip ]}'
+  '';
+
+  doInstallCheck = true;
+
+  postInstallCheck = ''
+    # woeusb --version checks for missing runtime dependencies.
+    out_version="$("$out/bin/woeusb" --version)"
+    [ "$out_version" = '${version}' ]
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Create bootable USB disks from Windows ISO images";
+    homepage = https://github.com/slacka/WoeUSB;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ bjornfor gnidorah ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/woeusb/remove-workaround.patch b/nixpkgs/pkgs/tools/misc/woeusb/remove-workaround.patch
new file mode 100644
index 000000000000..094da2cb2bc1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/woeusb/remove-workaround.patch
@@ -0,0 +1,82 @@
+From 3cf93fd595bd3fca98c98a0bdc8fc86b36ee1403 Mon Sep 17 00:00:00 2001
+From: Michael Hoang <enzime@users.noreply.github.com>
+Date: Wed, 9 Oct 2019 12:42:53 +1100
+Subject: [PATCH] Remove writeback buffering workaround
+
+---
+ src/woeusb | 45 ---------------------------------------------
+ 1 file changed, 45 deletions(-)
+
+diff --git a/src/woeusb b/src/woeusb
+index 3284259..0d3ea20 100755
+--- a/src/woeusb
++++ b/src/woeusb
+@@ -308,9 +308,6 @@ init(){
+ 
+ 	current_state=copying-filesystem
+ 
+-	workaround_linux_make_writeback_buffering_not_suck \
+-		apply
+-
+ 	copy_filesystem_files \
+ 		"${source_fs_mountpoint}" \
+ 		"${target_fs_mountpoint}" \
+@@ -1650,41 +1647,6 @@ workaround_support_windows_7_uefi_boot(){
+ 		> "${efi_boot_directory}/bootx64.efi"
+ }; declare -fr workaround_support_windows_7_uefi_boot
+ 
+-## Currently WoeUSB indirectly causes severely unresponsive system on 64-bit architecture with large primary memory during file copy process due to a flaw of the writeback buffer size handling in Linux kernel, workaround it before it is fixed
+-## Refer: 
+-## - System lagging while copying data · Issue #113 · slacka/WoeUSB <https://github.com/slacka/WoeUSB/issues/113>
+-## - The pernicious USB-stick stall problem [LWN.net] <https://lwn.net/Articles/572911/>
+-workaround_linux_make_writeback_buffering_not_suck(){
+-	util_check_function_parameters_quantity 1 "${#}"
+-	local -r mode="${1}"
+-
+-	local -ir VM_DIRTY_BACKGROUND_BYTES=$((16*1024*1024)) # 16MiB
+-	local -ir VM_DIRTY_BYTES=$((48*1024*1024)) # 48MiB
+-
+-	case "${mode}" in
+-		apply)
+-			echo_with_color \
+-				yellow \
+-				'Applying workaround to prevent 64-bit systems with big primary memory from being unresponsive during copying files.'
+-			echo "${VM_DIRTY_BACKGROUND_BYTES}" > /proc/sys/vm/dirty_background_bytes
+-			echo "${VM_DIRTY_BYTES}" > /proc/sys/vm/dirty_bytes
+-		;;
+-		reset)
+-			echo_with_color \
+-				yellow \
+-				'Resetting workaround to prevent 64-bit systems with big primary memory from being unresponsive during copying files.'
+-			echo 0 > /proc/sys/vm/dirty_background_bytes
+-			echo 0 > /proc/sys/vm/dirty_bytes
+-		;;
+-		*)
+-			printf_with_color \
+-				red \
+-				'Fatal: %s: Unexpected *mode* encountered, please report bug.\n' \
+-				"${FUNCNAME[0]}"
+-		;;
+-	esac
+-}; declare -fr workaround_linux_make_writeback_buffering_not_suck
+-
+ install_legacy_pc_bootloader_grub(){
+ 	util_check_function_parameters_quantity 3 "${#}"
+ 	local -r target_fs_mountpoint="${1}"; shift 1
+@@ -1836,13 +1798,6 @@ trap_exit(){
+ 		off \
+ 		"${global_only_for_gui}"
+ 
+-	case "${current_state}" in
+-		copying-filesystem|finished)
+-			workaround_linux_make_writeback_buffering_not_suck \
+-				reset
+-		;;
+-	esac
+-
+ 	if util_is_parameter_set_and_not_empty \
+ 		source_fs_mountpoint; then
+ 		if ! cleanup_mountpoint  \
+-- 
+2.23.0
+
diff --git a/nixpkgs/pkgs/tools/misc/woof/default.nix b/nixpkgs/pkgs/tools/misc/woof/default.nix
new file mode 100644
index 000000000000..fa3ab747f64f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/woof/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl, python }:
+
+stdenv.mkDerivation rec {
+  version = "2012-05-31";
+  pname = "woof";
+
+  src = fetchurl {
+    url = "http://www.home.unix-ag.org/simon/woof-${version}.py";
+    sha256 = "d84353d07f768321a1921a67193510bf292cf0213295e8c7689176f32e945572";
+  };
+
+  buildInputs = [ python ];
+
+  dontUnpack = true;
+
+  installPhase =
+    ''
+      mkdir -p $out/bin
+      cp $src $out/bin/woof
+      chmod +x $out/bin/woof
+    '';
+
+  meta = with stdenv.lib; {
+    homepage = http://www.home.unix-ag.org/simon/woof.html;
+    description = "Web Offer One File - Command-line utility to easily exchange files over a local network";
+    license = stdenv.lib.licenses.gpl2Plus;
+    platforms = stdenv.lib.platforms.unix;
+    maintainers = with maintainers; [ lschuermann ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/wv/default.nix b/nixpkgs/pkgs/tools/misc/wv/default.nix
new file mode 100644
index 000000000000..78affe34b58b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wv/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchurl, zlib, imagemagick, libpng, glib, pkgconfig, libgsf
+, libxml2, bzip2 }:
+
+stdenv.mkDerivation rec {
+  pname = "wv";
+  version = "1.2.9";
+
+  src = fetchurl {
+    url = "http://www.abisource.com/downloads/${pname}/${version}/${pname}-${version}.tar.gz";
+    sha256 = "17f16lkdv1c3amaz2hagiicih59ynpp4786k1m2qa1sw68xhswsc";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ zlib imagemagick libpng glib libgsf libxml2 bzip2 ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = {
+    description = "Converter from Microsoft Word formats to human-editable ones";
+    platforms = stdenv.lib.platforms.unix;
+    license = stdenv.lib.licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wv2/default.nix b/nixpkgs/pkgs/tools/misc/wv2/default.nix
new file mode 100644
index 000000000000..b9a8f70ff71a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wv2/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl, pkgconfig, cmake, libgsf, glib, libxml2 }:
+
+stdenv.mkDerivation rec {
+  name = "wv2-0.4.2";
+  src = fetchurl {
+    url = "mirror://sourceforge/wvware/${name}.tar.bz2";
+    sha256 = "1p1qxr8z5bsiq8pvlina3c8c1vjcb5d96bs3zz4jj3nb20wnsawz";
+  };
+
+  patches = [ ./fix-include.patch ];
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ cmake libgsf glib libxml2 ];
+
+  NIX_CFLAGS_COMPILE = "-I${libxml2.dev}/include/libxml2";
+
+  meta = {
+    description = "Excellent MS Word filter lib, used in most Office suites";
+    license = stdenv.lib.licenses.lgpl2;
+    homepage = http://wvware.sourceforge.net;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wv2/fix-include.patch b/nixpkgs/pkgs/tools/misc/wv2/fix-include.patch
new file mode 100644
index 000000000000..df34d24af942
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wv2/fix-include.patch
@@ -0,0 +1,12 @@
+From: http://sourceforge.net/tracker/?func=detail&aid=3544851&group_id=10501&atid=110501
+--- a/src/olestream.h
++++ b/src/olestream.h
+@@ -23,7 +23,7 @@
+ #include "global.h"  // U8,... typedefs
+ #include <stack>
+ 
+-#include <glib/giochannel.h> // GSeekType
++#include <glib.h> // GSeekType
+ 
+ namespace wvWare {
+ 
diff --git a/nixpkgs/pkgs/tools/misc/wyrd/default.nix b/nixpkgs/pkgs/tools/misc/wyrd/default.nix
new file mode 100644
index 000000000000..6a5ec8672224
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wyrd/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchurl, ocamlPackages, ncurses, remind }:
+
+stdenv.mkDerivation rec {
+  version = "1.4.6";
+  pname = "wyrd";
+
+  src = fetchurl {
+    url = "http://pessimization.com/software/wyrd/wyrd-${version}.tar.gz";
+    sha256 = "0zlrg602q781q8dij62lwdprpfliyy9j1rqfqcz8p2wgndpivddj";
+  };
+
+  NIX_CFLAGS_COMPILE = "-DNCURSES_INTERNALS=1";
+
+  preConfigure = ''
+    substituteInPlace curses/curses.ml --replace 'pp gcc' "pp $CC"
+  '';
+
+  buildInputs = [ ocamlPackages.ocaml ncurses remind ocamlPackages.camlp4 ];
+
+  preferLocalBuild = true;
+
+  meta = with stdenv.lib; {
+    description = "A text-based front-end to Remind";
+    longDescription = ''
+      Wyrd is a text-based front-end to Remind, a sophisticated
+      calendar and alarm program. Remind's power lies in its
+      programmability, and Wyrd does not hide this capability behind
+      flashy GUI dialogs. Rather, Wyrd is designed to make you more
+      efficient at editing your reminder files directly.
+    '';
+    homepage = http://pessimization.com/software/wyrd/;
+    downloadPage = http://pessimization.com/software/wyrd/;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.prikhi ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/x11idle/default.nix b/nixpkgs/pkgs/tools/misc/x11idle/default.nix
new file mode 100644
index 000000000000..f4a397ed9ddc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/x11idle/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchgit, libXScrnSaver, libX11 }:
+
+stdenv.mkDerivation {
+  name = "x11idle-unstable-2017-07-01";
+
+  src = fetchgit {
+    url = "git://orgmode.org/org-mode.git";
+    rev = "fbd865941f3105f689f78bf053bb3b353b9b8a23";
+    sha256 = "0ma3m48f4s38xln0gl1ww9i5x28ij0ipxc94kx5h2931zy7lqzvz";
+  };
+
+  buildInputs = [ libXScrnSaver libX11 ];
+
+  dontUnpack = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    gcc -lXss -lX11 $src/contrib/scripts/x11idle.c -o $out/bin/x11idle
+  '';
+
+  meta = with stdenv.lib; {
+    description = ''
+      Compute consecutive idle time for current X11 session with millisecond resolution
+    '';
+    longDescription = ''
+      Idle time passes when the user does not act, i.e. when the user doesn't move the mouse or use the keyboard.
+    '';
+    homepage = http://orgmode.org/;
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.swflint ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xburst-tools/default.nix b/nixpkgs/pkgs/tools/misc/xburst-tools/default.nix
new file mode 100644
index 000000000000..62e2b31fa153
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xburst-tools/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchgit, libusb, libusb1, autoconf, automake, libconfuse, pkgconfig
+, gccCross ? null
+}:
+
+let
+  version = "2011-12-26";
+in
+stdenv.mkDerivation {
+  pname = "xburst-tools";
+  inherit version;
+
+  src = fetchgit {
+    url = git://projects.qi-hardware.com/xburst-tools.git;
+    rev = "c71ce8e15db25fe49ce8702917cb17720882e341";
+    sha256 = "1hzdngs1l5ivvwnxjwzc246am6w1mj1aidcf0awh9yw0crzcjnjr";
+  };
+
+  preConfigure = ''
+    sh autogen.sh
+  '';
+
+  configureFlags = stdenv.lib.optionals (gccCross != null) [
+    "--enable-firmware"
+    "CROSS_COMPILE=${gccCross.targetPrefix}"
+  ];
+
+  hardeningDisable = [ "pic" "stackprotector" ];
+
+  # Not to strip cross build binaries (this is for the gcc-cross-wrapper)
+  dontCrossStrip = true;
+
+  nativeBuildInputs = [ autoconf automake pkgconfig ];
+  buildInputs = [ libusb libusb1 libconfuse ] ++
+    stdenv.lib.optional (gccCross != null) gccCross;
+
+  meta = {
+    description = "Qi tools to access the Ben Nanonote USB_BOOT mode";
+    license = stdenv.lib.licenses.gpl3;
+    homepage = http://www.linux-mtd.infradead.org/;
+    maintainers = with stdenv.lib.maintainers; [viric];
+    platforms = stdenv.lib.platforms.x86_64;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xclip/default.nix b/nixpkgs/pkgs/tools/misc/xclip/default.nix
new file mode 100644
index 000000000000..69009b86af8c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xclip/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, libXmu }:
+
+stdenv.mkDerivation rec {
+  pname = "xclip";
+  version = "0.13";
+
+  src = fetchFromGitHub {
+    owner = "astrand";
+    repo = "xclip";
+    rev = version;
+    sha256 = "0q0hmvcjlv8arhh1pzhja2wglyj6n7z209jnpnzd281kqqv4czcs";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  buildInputs = [ libXmu ];
+
+  meta = {
+    description = "Tool to access the X clipboard from a console application";
+    homepage = https://github.com/astrand/xclip;
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xdaliclock/default.nix b/nixpkgs/pkgs/tools/misc/xdaliclock/default.nix
new file mode 100644
index 000000000000..28268052826c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xdaliclock/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, libX11, xorgproto, libXt, libICE, libSM, libXext }:
+
+stdenv.mkDerivation rec {
+  pname = "xdaliclock";
+  version = "2.44";
+
+  src = fetchurl {
+    url="https://www.jwz.org/xdaliclock/${pname}-${version}.tar.gz";
+    sha256 = "1gsgnsm6ql0mcg9zpdkhws3g23r3a92bc3rpg4qbgbmd02nvj3c0";
+  };
+
+  # Note: don't change this to set sourceRoot, or updateAutotoolsGnuConfigScriptsHook
+  # on aarch64 doesn't find the files to patch and the aarch64 build fails!
+  preConfigure = "cd X11";
+
+  buildInputs = [ libX11 xorgproto libXt libICE libSM libXext ];
+
+  preInstall = ''
+    mkdir -vp $out/bin $out/share/man/man1
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A clock application that morphs digits when they are changed";
+    maintainers = with maintainers; [ raskin rycee ];
+    platforms = with platforms; linux ++ freebsd;
+    license = licenses.free; #TODO BSD on Gentoo, looks like MIT
+    downloadPage = http://www.jwz.org/xdaliclock/;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xdo/default.nix b/nixpkgs/pkgs/tools/misc/xdo/default.nix
new file mode 100644
index 000000000000..77a2ef763a97
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xdo/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub, libxcb, xcbutil, xcbutilwm }:
+
+stdenv.mkDerivation rec {
+   pname = "xdo";
+   version = "0.5.7";
+
+   src = fetchFromGitHub {
+     owner = "baskerville";
+     repo = "xdo";
+     rev = version;
+     sha256 = "1h3jrygcjjbavdbkpx2hscsf0yf97gk487lzjdlvymd7dxdv9hy9";
+   };
+
+   makeFlags = [ "PREFIX=$(out)" ];
+
+   buildInputs = [ libxcb xcbutilwm xcbutil ];
+
+   meta = with stdenv.lib; {
+     description = "Small X utility to perform elementary actions on windows";
+     homepage = https://github.com/baskerville/xdo;
+     maintainers = with maintainers; [ meisternu ];
+     license = licenses.bsd2;
+     platforms = platforms.linux;
+   };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xdummy/default.nix b/nixpkgs/pkgs/tools/misc/xdummy/default.nix
new file mode 100644
index 000000000000..7d7942f7ca98
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xdummy/default.nix
@@ -0,0 +1,82 @@
+{ writeText, writeScriptBin, xorg, xkeyboard_config, runtimeShell }:
+
+let
+  xorgConfig = writeText "dummy-xorg.conf" ''
+    Section "ServerLayout"
+      Identifier     "dummy_layout"
+      Screen         0 "dummy_screen"
+      InputDevice    "dummy_keyboard" "CoreKeyboard"
+      InputDevice    "dummy_mouse" "CorePointer"
+    EndSection
+
+    Section "ServerFlags"
+      Option "DontVTSwitch" "true"
+      Option "AllowMouseOpenFail" "true"
+      Option "PciForceNone" "true"
+      Option "AutoEnableDevices" "false"
+      Option "AutoAddDevices" "false"
+    EndSection
+
+    Section "Files"
+      ModulePath "${xorg.xorgserver.out}/lib/xorg/modules"
+      ModulePath "${xorg.xf86videodummy}/lib/xorg/modules"
+      XkbDir "${xkeyboard_config}/share/X11/xkb"
+      FontPath "${xorg.fontadobe75dpi}/lib/X11/fonts/75dpi"
+      FontPath "${xorg.fontadobe100dpi}/lib/X11/fonts/100dpi"
+      FontPath "${xorg.fontbhlucidatypewriter75dpi}/lib/X11/fonts/75dpi"
+      FontPath "${xorg.fontbhlucidatypewriter100dpi}/lib/X11/fonts/100dpi"
+      FontPath "${xorg.fontbh100dpi}/lib/X11/fonts/100dpi"
+      FontPath "${xorg.fontmiscmisc}/lib/X11/fonts/misc"
+      FontPath "${xorg.fontcursormisc}/lib/X11/fonts/misc"
+    EndSection
+
+    Section "Module"
+      Load           "dbe"
+      Load           "extmod"
+      Load           "freetype"
+      Load           "glx"
+    EndSection
+
+    Section "InputDevice"
+      Identifier     "dummy_mouse"
+      Driver         "void"
+    EndSection
+
+    Section "InputDevice"
+      Identifier     "dummy_keyboard"
+      Driver         "void"
+    EndSection
+
+    Section "Monitor"
+      Identifier     "dummy_monitor"
+      HorizSync       30.0 - 130.0
+      VertRefresh     50.0 - 250.0
+      Option         "DPMS"
+    EndSection
+
+    Section "Device"
+      Identifier     "dummy_device"
+      Driver         "dummy"
+      VideoRam       192000
+    EndSection
+
+    Section "Screen"
+      Identifier     "dummy_screen"
+      Device         "dummy_device"
+      Monitor        "dummy_monitor"
+      DefaultDepth    24
+      SubSection     "Display"
+        Depth       24
+        Modes      "1280x1024"
+      EndSubSection
+    EndSection
+  '';
+
+in writeScriptBin "xdummy" ''
+  #!${runtimeShell}
+  exec ${xorg.xorgserver.out}/bin/Xorg \
+    -noreset \
+    -logfile /dev/null \
+    "$@" \
+    -config "${xorgConfig}"
+''
diff --git a/nixpkgs/pkgs/tools/misc/xdxf2slob/default.nix b/nixpkgs/pkgs/tools/misc/xdxf2slob/default.nix
new file mode 100644
index 000000000000..b6801130a45d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xdxf2slob/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchFromGitHub, python3Packages }:
+
+python3Packages.buildPythonApplication {
+  name = "xdxf2slob-unstable-2015-06-30";
+
+  src = fetchFromGitHub {
+    owner = "itkach";
+    repo = "xdxf2slob";
+    rev = "6831b93c3db8c73200900fa4ddcb17350a677e1b";
+    sha256 = "0m3dnc3816ja3kmik1wabb706dkqdf5sxvabwgf2rcrq891xcddd";
+  };
+
+  propagatedBuildInputs = [ python3Packages.PyICU python3Packages.slob ];
+
+  meta = with stdenv.lib; {
+    description = "Tool to convert XDXF dictionary files to slob format";
+    homepage = https://github.com/itkach/xdxf2slob/;
+    license = licenses.gpl3;
+    maintainers = [ maintainers.rycee ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xflux/default.nix b/nixpkgs/pkgs/tools/misc/xflux/default.nix
new file mode 100644
index 000000000000..d0f358446952
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xflux/default.nix
@@ -0,0 +1,39 @@
+{stdenv, fetchurl, libXxf86vm, libXext, libX11, libXrandr, gcc}:
+stdenv.mkDerivation {
+  name = "xflux-2013-09-01";
+  src = fetchurl {
+    url = https://justgetflux.com/linux/xflux64.tgz;
+    sha256 = "cc50158fabaeee58c331f006cc1c08fd2940a126e99d37b76c8e878ef20c2021";
+  };
+
+  libPath = stdenv.lib.makeLibraryPath [
+    gcc.cc
+    libXxf86vm
+    libXext
+    libX11
+    libXrandr
+  ];
+
+  unpackPhase = ''
+    unpackFile $src;
+  '';
+  installPhase = ''
+    mkdir -p "$out/bin"
+    cp  xflux "$out/bin"
+  '';
+  postFixup = ''
+    patchelf --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) --set-rpath "$libPath" "$out/bin/xflux"
+  '';
+  meta = {
+    description = "Adjusts your screen to emit warmer light at night";
+    longDescription = ''
+      xflux changes the color temperature of your screen to be much warmer
+      when the sun sets, and then changes it back its colder temperature
+      when the sun rises.
+    '';
+    homepage = https://justgetflux.com/;
+    license = stdenv.lib.licenses.unfree;
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ stdenv.lib.maintainers.paholg ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xflux/gui.nix b/nixpkgs/pkgs/tools/misc/xflux/gui.nix
new file mode 100644
index 000000000000..6a629af61ba2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xflux/gui.nix
@@ -0,0 +1,49 @@
+{ stdenv, fetchFromGitHub, buildPythonApplication, python3Packages, wrapGAppsHook
+, xflux, librsvg, gtk3, gobject-introspection, pango, gdk-pixbuf, atk
+, pexpect, pyGtkGlade, pygobject3, pyxdg, libappindicator-gtk3
+}:
+buildPythonApplication rec {
+  pname = "xflux-gui";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    repo = "xflux-gui";
+    owner = "xflux-gui";
+    rev = "v${version}";
+    sha256 = "09zphcd9821ink63636swql4g85hg6lpsazqg1mawlk9ikc8zbps";
+  };
+
+  propagatedBuildInputs = [
+    pyxdg
+    pexpect
+    pygobject3
+  ];
+
+  buildInputs = [
+    xflux gtk3
+  ];
+
+  nativeBuildInputs = [
+    wrapGAppsHook gobject-introspection
+    pango gdk-pixbuf atk libappindicator-gtk3
+  ];
+
+  postPatch = ''
+     substituteInPlace src/fluxgui/xfluxcontroller.py \
+       --replace "pexpect.spawn(\"xflux\"" "pexpect.spawn(\"${xflux}/bin/xflux\""
+  '';
+
+  postFixup = ''
+    wrapGAppsHook
+    wrapPythonPrograms
+    patchPythonScript $out/${python3Packages.python.sitePackages}/fluxgui/fluxapp.py
+  '';
+
+  meta = {
+    description = "Better lighting for Linux. Open source GUI for xflux";
+    homepage = https://justgetflux.com/linux.html;
+    license = stdenv.lib.licenses.unfree; # marked as unfree since the source code contains a copy of the unfree xflux binary
+    maintainers = [ stdenv.lib.maintainers.sheenobu ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xfstests/default.nix b/nixpkgs/pkgs/tools/misc/xfstests/default.nix
new file mode 100644
index 000000000000..204059913318
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xfstests/default.nix
@@ -0,0 +1,110 @@
+{ stdenv, acl, attr, autoconf, automake, bash, bc, coreutils, e2fsprogs
+, fetchgit, fio, gawk, keyutils, killall, lib, libaio, libcap, libtool
+, libuuid, libxfs, lvm2, openssl, perl, procps, quota
+, time, utillinux, which, writeScript, xfsprogs, runtimeShell }:
+
+stdenv.mkDerivation {
+  name = "xfstests-2019-09-08";
+
+  src = fetchgit {
+    url = "git://git.kernel.org/pub/scm/fs/xfs/xfstests-dev.git";
+    rev = "0837e907988a5f410cae0ae714f42f9c4242e072";
+    sha256 = "1f5cv0vwc1g9difzp69k49rc5nfd08y72vdg318j25nv3rwv7wc9";
+  };
+
+  nativeBuildInputs = [
+    autoconf automake libtool
+  ];
+  buildInputs = [
+    acl attr gawk libaio libuuid libxfs openssl perl
+  ];
+
+  hardeningDisable = [ "format" ];
+  enableParallelBuilding = true;
+
+  patchPhase = ''
+    substituteInPlace Makefile \
+      --replace "cp include/install-sh ." "cp -f include/install-sh ."
+
+    # Patch the destination directory
+    sed -i include/builddefs.in -e "s|^PKG_LIB_DIR\s*=.*|PKG_LIB_DIR=$out/lib/xfstests|"
+
+    # Don't canonicalize path to mkfs (in util-linux) - otherwise e.g. mkfs.ext4 isn't found
+    sed -i common/config -e 's|^export MKFS_PROG=.*|export MKFS_PROG=mkfs|'
+
+    # Move the Linux-specific test output files to the correct place, or else it will
+    # try to move them at runtime. Also nuke all the irix crap.
+    for f in tests/*/*.out.linux; do
+      mv $f $(echo $f | sed -e 's/\.linux$//')
+    done
+    rm -f tests/*/*.out.irix
+
+    # Fix up lots of impure paths
+    for f in common/* tools/* tests/*/*; do
+      sed -i $f -e 's|/bin/bash|${bash}/bin/bash|'
+      sed -i $f -e 's|/bin/true|true|'
+      sed -i $f -e 's|/usr/sbin/filefrag|${e2fsprogs}/bin/filefrag|'
+      sed -i $f -e 's|hostname -s|hostname|'   # `hostname -s` seems problematic on NixOS
+      sed -i $f -e 's|$(_yp_active)|1|'        # NixOS won't ever have Yellow Pages enabled
+    done
+
+    for f in src/*.c src/*.sh; do
+      sed -e 's|/bin/rm|${coreutils}/bin/rm|' -i $f
+      sed -e 's|/usr/bin/time|${time}/bin/time|' -i $f
+    done
+
+    patchShebangs .
+  '';
+
+  preConfigure = ''
+    # The configure scripts really don't like looking in PATH at all...
+    export AWK=$(type -P awk)
+    export ECHO=$(type -P echo)
+    export LIBTOOL=$(type -P libtool)
+    export MAKE=$(type -P make)
+    export SED=$(type -P sed)
+    export SORT=$(type -P sort)
+
+    make configure
+  '';
+
+  postInstall = ''
+    patchShebangs $out/lib/xfstests
+
+    mkdir -p $out/bin
+    substitute $wrapperScript $out/bin/xfstests-check --subst-var out
+    chmod a+x $out/bin/xfstests-check
+  '';
+
+  # The upstream package is pretty hostile to packaging; it looks up
+  # various paths relative to current working directory, and also
+  # wants to write temporary files there. So create a temporary
+  # to run from and symlink the runtime files to it.
+  wrapperScript = writeScript "xfstests-check" ''
+    #!${runtimeShell}
+    set -e
+    export RESULT_BASE="$(pwd)/results"
+
+    dir=$(mktemp --tmpdir -d xfstests.XXXXXX)
+    trap "rm -rf $dir" EXIT
+
+    chmod a+rx "$dir"
+    cd "$dir"
+    for f in $(cd @out@/lib/xfstests; echo *); do
+      ln -s @out@/lib/xfstests/$f $f
+    done
+
+    export PATH=${lib.makeBinPath [acl attr bc e2fsprogs fio gawk keyutils
+                                   libcap lvm2 perl procps killall quota
+                                   utillinux which xfsprogs]}:$PATH
+    exec ./check "$@"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Torture test suite for filesystems";
+    homepage = https://git.kernel.org/pub/scm/fs/xfs/xfstests-dev.git/;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.dezgeg ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xiccd/default.nix b/nixpkgs/pkgs/tools/misc/xiccd/default.nix
new file mode 100644
index 000000000000..43a674069706
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xiccd/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, libX11, libXrandr, glib, colord }:
+
+stdenv.mkDerivation rec {
+  pname = "xiccd";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "agalakhov";
+    repo = "xiccd";
+    rev = "v${version}";
+    sha256 = "159fyz5535lcabi5bzmxgmjdgxlqcjaiqgzr00mi3ax0i5fdldwn";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  buildInputs = [ libX11 libXrandr glib colord ];
+
+  meta = with stdenv.lib; {
+    description = "X color profile daemon";
+    homepage = https://github.com/agalakhov/xiccd;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ abbradar ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xilinx-bootgen/default.nix b/nixpkgs/pkgs/tools/misc/xilinx-bootgen/default.nix
new file mode 100644
index 000000000000..e7aa30ac0591
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xilinx-bootgen/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchFromGitHub, openssl }:
+
+stdenv.mkDerivation {
+  pname = "xilinx-bootgen";
+  version = "unstable-2019-10-23";
+
+  src = fetchFromGitHub {
+    owner = "xilinx";
+    repo = "bootgen";
+    rev = "f9f477adf243fa40bc8c7316a7aac37a0efd426d";
+    sha256 = "1qciz3jkzy0z0lcgqnhch9pqj0202mk5ghzp2m9as5pzk8n8hrbz";
+  };
+
+  buildInputs = [ openssl ];
+
+  enableParallelBuilding = true;
+
+  installPhase = ''
+    install -Dm755 bootgen $out/bin/bootgen
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Generate Boot Images for Xilinx Zynq and ZU+ SoCs";
+    longDescription = ''
+      Bootgen for Xilinx Zynq and ZU+ SoCs, without code related to generating
+      obfuscated key and without code to support FPGA encryption and
+      authentication. These features are only available as part of Bootgen
+      shipped with Vivado tools.
+
+      For more details about Bootgen, please refer to Xilinx UG1283.
+    '';
+    homepage = "https://github.com/Xilinx/bootgen";
+    license = licenses.asl20;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.flokli ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xmonad-log/default.nix b/nixpkgs/pkgs/tools/misc/xmonad-log/default.nix
new file mode 100644
index 000000000000..ad5086f2f595
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xmonad-log/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "xmonad-log";
+  version = "0.1.0";
+
+  goPackagePath = "github.com/xintron/xmonad-log";
+
+  src = fetchFromGitHub {
+    owner = "xintron";
+    repo = "xmonad-log";
+    rev = version;
+    sha256 = "1il6v0zcjw0pfb1hjj198y94jmlcx255h422ph0f1zr7afqkzmaw";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    description = "xmonad DBus monitoring solution";
+    homepage = https://github.com/xintron/xmonad-log;
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ joko ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xmonad-log/deps.nix b/nixpkgs/pkgs/tools/misc/xmonad-log/deps.nix
new file mode 100644
index 000000000000..f5a7c7e5dd1d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xmonad-log/deps.nix
@@ -0,0 +1,12 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "github.com/godbus/dbus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/godbus/dbus";
+      rev = "a389bdde4dd695d414e47b755e95e72b7826432c";
+      sha256 = "1ckvg15zdsgmbn4mi36cazkb407ixc9mmyf7vwj8b8wi3d00rgn9";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/misc/xprite-editor/default.nix b/nixpkgs/pkgs/tools/misc/xprite-editor/default.nix
new file mode 100644
index 000000000000..e2615bef6ce1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xprite-editor/default.nix
@@ -0,0 +1,43 @@
+{ stdenv
+, fetchFromGitHub
+, rustPlatform
+, gtk3
+, AppKit
+, pkg-config
+, python3
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "xprite-editor-unstable";
+  version = "2019-09-22";
+
+  src = fetchFromGitHub {
+    owner = "rickyhan";
+    repo = "xprite-editor";
+    rev = "7f899dff982642927024540e4bafd74e4ea5e52a";
+    sha256 = "1k6k8y8gg1vdmyjz27q689q9rliw0rrnzwlpjcd4vlc6swaq9ahx";
+    fetchSubmodules = true;
+    # Rename unicode file name which leads to different checksums on HFS+
+    # vs. other filesystems because of unicode normalization.
+    postFetch = ''
+      mv $out/config/palettes/Sweet\ Guaran*.hex $out/config/palettes/Sweet\ Guarana.hex
+    '';
+  };
+
+  buildInputs = stdenv.lib.optionals stdenv.isLinux [ gtk3 ]
+    ++ stdenv.lib.optionals stdenv.isDarwin [ AppKit ];
+
+  nativeBuildInputs = stdenv.lib.optionals stdenv.isLinux [ pkg-config python3 ];
+
+  cargoSha256 = "0cd58888l7pjmghin31ha780yhs2pz67b10jysyasdw0a88m0dwy";
+
+  cargoBuildFlags = [ "--bin" "xprite-native" ];
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/rickyhan/xprite-editor";
+    description = "Pixel art editor";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.marsam ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xsel/default.nix b/nixpkgs/pkgs/tools/misc/xsel/default.nix
new file mode 100644
index 000000000000..4c39babc3176
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xsel/default.nix
@@ -0,0 +1,25 @@
+{stdenv, lib, fetchFromGitHub, libX11, autoreconfHook }:
+
+stdenv.mkDerivation {
+  pname = "xsel-unstable";
+
+  version = "2019-08-21";
+
+  src = fetchFromGitHub {
+    owner = "kfish";
+    repo = "xsel";
+    rev = "ef01f3c72a195dbce682184c842b81b17d7d7ad1";
+    sha256 = "191qa6022b7nww3bicfxpgp4d9x6c8s3sgixi780383ghkxds08c";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ libX11 ];
+
+  meta = with lib; {
+    description = "Command-line program for getting and setting the contents of the X selection";
+    homepage = http://www.kfish.org/software/xsel;
+    license = licenses.mit;
+    maintainers = [ maintainers.cstrahan ];
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xtitle/default.nix b/nixpkgs/pkgs/tools/misc/xtitle/default.nix
new file mode 100644
index 000000000000..84cf506fb631
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xtitle/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchurl, libxcb, xcbutil, xcbutilwm, git }:
+
+stdenv.mkDerivation {
+   name = "xtitle-0.4.4";
+
+   src = fetchurl {
+     url = "https://github.com/baskerville/xtitle/archive/0.4.4.tar.gz";
+     sha256 = "0w490a6ki90si1ri48jzhma473a598l1b12j8dp4ckici41z9yy2";
+   };
+
+
+   buildInputs = [ libxcb git xcbutil xcbutilwm ];
+
+   prePatch = ''sed -i "s@/usr/local@$out@" Makefile'';
+
+   meta = {
+     description = "Outputs X window titles";
+     homepage = https://github.com/baskerville/xtitle;
+     maintainers = [ stdenv.lib.maintainers.meisternu ];
+     license = "Custom";
+     platforms = stdenv.lib.platforms.linux;
+   };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xv/default.nix b/nixpkgs/pkgs/tools/misc/xv/default.nix
new file mode 100644
index 000000000000..8d8c2fa55b28
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xv/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, lib, fetchFromGitHub, rustPlatform
+, ncurses ? null
+, darwin ? null }:
+
+let useNcurses = !stdenv.hostPlatform.isWindows; in
+
+assert useNcurses -> ncurses != null;
+
+rustPlatform.buildRustPackage rec {
+  pname   = "xv";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner  = "chrisvest";
+    repo   = pname;
+    rev    = version;
+    sha256 = "0x2yd21sr4wik3z22rknkx1fgb64j119ynjls919za8gd83zk81g";
+  };
+
+  cargoSha256 = "0m69pcmnx3c3q7lgvbhxc8dl6lavv5ch4r6wg2bhdmapcmb4p7jq";
+
+  buildInputs = lib.optionals useNcurses [ ncurses ]
+  ++ lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [ Security ])
+  ;
+
+  # I'm picking pancurses for Windows simply because that's the example given in Cursive's
+  # documentation for picking an alternative backend. We could just as easily pick crossterm.
+  cargoBuildFlags = lib.optionals (!useNcurses) [ "--no-default-features" "--features pancurses-backend" ];
+
+  meta = with lib; {
+    description = "A visual hex viewer for the terminal";
+    longDescription = ''
+      XV is a terminal hex viewer with a text user interface, written in 100% safe Rust.
+    '';
+    homepage    = https://chrisvest.github.io/xv/;
+    license     = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ lilyball ];
+    platforms   = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xvfb-run/default.nix b/nixpkgs/pkgs/tools/misc/xvfb-run/default.nix
new file mode 100644
index 000000000000..d6adbde5ea9e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xvfb-run/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, makeWrapper, xorgserver, getopt
+, xauth, utillinux, which, fontsConf, gawk, coreutils }:
+let
+  xvfb_run = fetchurl {
+    name = "xvfb-run";
+    # https://git.archlinux.org/svntogit/packages.git/?h=packages/xorg-server
+    url = https://git.archlinux.org/svntogit/packages.git/plain/trunk/xvfb-run?h=packages/xorg-server&id=9cb733cefa92af3fca608fb051d5251160c9bbff;
+    sha256 = "1307mz4nr8ga3qz73i8hbcdphky75rq8lrvfk2zm4kmv6pkbk611";
+  };
+in
+stdenv.mkDerivation {
+  name = "xvfb-run";
+  buildInputs = [makeWrapper];
+  buildCommand = ''
+    mkdir -p $out/bin
+    cp ${xvfb_run} $out/bin/xvfb-run
+
+    chmod a+x $out/bin/xvfb-run
+    patchShebangs $out/bin/xvfb-run
+    wrapProgram $out/bin/xvfb-run \
+      --set FONTCONFIG_FILE "${fontsConf}" \
+      --prefix PATH : ${stdenv.lib.makeBinPath [ getopt xorgserver xauth which utillinux gawk coreutils ]}
+  '';
+
+  meta = with stdenv.lib; {
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/yad/default.nix b/nixpkgs/pkgs/tools/misc/yad/default.nix
new file mode 100644
index 000000000000..776b41ac1aaf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/yad/default.nix
@@ -0,0 +1,50 @@
+{ stdenv, fetchFromGitHub, pkgconfig, intltool, autoreconfHook, wrapGAppsHook
+, gtk3, hicolor-icon-theme, netpbm }:
+
+stdenv.mkDerivation rec {
+  pname = "yad";
+  version = "5.0";
+
+  src = fetchFromGitHub {
+    owner = "v1cont";
+    repo = "yad";
+    rev = "v${version}";
+    sha256 = "07rd61hvilsxxrj7lf8c9k0a8glj07s48m7ya8d45030r90g3lvc";
+  };
+
+  configureFlags = [
+    "--enable-icon-browser"
+    "--with-gtk=gtk3"
+    "--with-rgb=${placeholder "out"}/share/yad/rgb.txt"
+  ];
+
+  buildInputs = [ gtk3 hicolor-icon-theme ];
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig intltool wrapGAppsHook ];
+
+  postPatch = ''
+    sed -i src/file.c -e '21i#include <glib/gprintf.h>'
+    sed -i src/form.c -e '21i#include <stdlib.h>'
+
+    # there is no point to bring in the whole netpbm package just for this file
+    install -Dm644 ${netpbm}/share/netpbm/misc/rgb.txt $out/share/yad/rgb.txt
+  '';
+
+  postAutoreconf = ''
+    intltoolize
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://sourceforge.net/projects/yad-dialog/;
+    description = "GUI dialog tool for shell scripts";
+    longDescription = ''
+      Yad (yet another dialog) is a GUI dialog tool for shell scripts. It is a
+      fork of Zenity with many improvements, such as custom buttons, additional
+      dialogs, pop-up menu in notification icon and more.
+    '';
+
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ smironov ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/yank/default.nix b/nixpkgs/pkgs/tools/misc/yank/default.nix
new file mode 100644
index 000000000000..9fb5399fd724
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/yank/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, xsel }:
+
+stdenv.mkDerivation rec {
+
+  name = "yank-${meta.version}";
+
+  src = fetchFromGitHub {
+    owner = "mptre";
+    repo = "yank";
+    rev = "v${meta.version}";
+    sha256 = "1izygx7f1z35li74i2cwca0p28c3v8fbr7w72dwpiqdaiwywa8xc";
+    inherit name;
+  };
+
+  installFlags = [ "PREFIX=$(out)" ];
+  makeFlags = [ "YANKCMD=${xsel}/bin/xsel" ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/mptre/yank;
+    description = "Yank terminal output to clipboard";
+    longDescription = ''
+      Read input from stdin and display a selection interface that allows a
+      field to be selected and copied to the clipboard. Fields are determined
+      by splitting the input on a delimiter sequence, optionally specified
+      using the -d option. New line, carriage return and tab characters are
+      always treated as delimiters.
+    '';
+    downloadPage = "https://github.com/mptre/yank/releases";
+    license = licenses.mit;
+    version = "1.2.0";
+    maintainers = [ maintainers.dochang ];
+    platforms = platforms.unix;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/yle-dl/default.nix b/nixpkgs/pkgs/tools/misc/yle-dl/default.nix
new file mode 100644
index 000000000000..e106c3b8595a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/yle-dl/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub, rtmpdump, php, pythonPackages, ffmpeg }:
+
+pythonPackages.buildPythonApplication rec {
+  pname = "yle-dl";
+  version = "2.31";
+
+  src = fetchFromGitHub {
+    owner = "aajanki";
+    repo = "yle-dl";
+    rev = version;
+    sha256 = "0k93p9csyjm0w33diwl5s22kzs3g78jl3n9k8nxxpqrybfjl912f";
+  };
+
+  propagatedBuildInputs = with pythonPackages; [
+    lxml pyamf pycrypto requests future ffmpeg setuptools
+  ];
+  pythonPath = [ rtmpdump php ];
+
+  doCheck = false; # tests require network access
+  checkInputs = with pythonPackages; [ pytest pytestrunner ];
+
+  meta = with stdenv.lib; {
+    description = "Downloads videos from Yle (Finnish Broadcasting Company) servers";
+    homepage = https://aajanki.github.io/yle-dl/;
+    license = licenses.gpl3;
+    maintainers = [ maintainers.dezgeg ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/you-get/default.nix b/nixpkgs/pkgs/tools/misc/you-get/default.nix
new file mode 100644
index 000000000000..eb599caa7027
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/you-get/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, buildPythonApplication, fetchPypi }:
+
+buildPythonApplication rec {
+  pname = "you-get";
+  version = "0.4.1355";
+
+  # Tests aren't packaged, but they all hit the real network so
+  # probably aren't suitable for a build environment anyway.
+  doCheck = false;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "06y9q336az8dzkxc13rzhl0m6l298saaida75wsd9fjm8pych6fx";
+  };
+
+  meta = with stdenv.lib; {
+    description = "A tiny command line utility to download media contents from the web";
+    homepage = https://you-get.org;
+    license = licenses.mit;
+    maintainers = with maintainers; [ ryneeverett ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/youtube-dl/default.nix b/nixpkgs/pkgs/tools/misc/youtube-dl/default.nix
new file mode 100644
index 000000000000..875eccac942f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/youtube-dl/default.nix
@@ -0,0 +1,70 @@
+{ lib, fetchurl, buildPythonPackage
+, zip, ffmpeg_4, rtmpdump, phantomjs2, atomicparsley, pycryptodome, pandoc
+# Pandoc is required to build the package's man page. Release tarballs contain a
+# formatted man page already, though, it will still be installed. We keep the
+# manpage argument in place in case someone wants to use this derivation to
+# build a Git version of the tool that doesn't have the formatted man page
+# included.
+, generateManPage ? false
+, ffmpegSupport ? true
+, rtmpSupport ? true
+, phantomjsSupport ? false
+, hlsEncryptedSupport ? true
+, makeWrapper }:
+
+buildPythonPackage rec {
+
+  pname = "youtube-dl";
+  # The websites youtube-dl deals with are a very moving target. That means that
+  # downloads break constantly. Because of that, updates should always be backported
+  # to the latest stable release.
+  version = "2020.01.15";
+
+  src = fetchurl {
+    url = "https://yt-dl.org/downloads/${version}/${pname}-${version}.tar.gz";
+    sha256 = "0dyjc8nxyg9ry2ylmblh3fwavpais3mdfj6ndw4i0yc2vkw12rsm";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ zip ] ++ lib.optional generateManPage pandoc;
+  propagatedBuildInputs = lib.optional hlsEncryptedSupport pycryptodome;
+
+  # Ensure these utilities are available in $PATH:
+  # - ffmpeg: post-processing & transcoding support
+  # - rtmpdump: download files over RTMP
+  # - atomicparsley: embedding thumbnails
+  makeWrapperArgs = let
+      packagesToBinPath =
+        [ atomicparsley ]
+        ++ lib.optional ffmpegSupport ffmpeg_4
+        ++ lib.optional rtmpSupport rtmpdump
+        ++ lib.optional phantomjsSupport phantomjs2;
+    in [ ''--prefix PATH : "${lib.makeBinPath packagesToBinPath}"'' ];
+
+  setupPyBuildFlags = [
+    "build_lazy_extractors"
+  ];
+
+  postInstall = ''
+    mkdir -p $out/share/zsh/site-functions
+    cp youtube-dl.zsh $out/share/zsh/site-functions/_youtube-dl
+  '';
+
+  # Requires network
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = https://rg3.github.io/youtube-dl/;
+    repositories.git = https://github.com/rg3/youtube-dl.git;
+    description = "Command-line tool to download videos from YouTube.com and other sites";
+    longDescription = ''
+      youtube-dl is a small, Python-based command-line program
+      to download videos from YouTube.com and a few more sites.
+      youtube-dl is released to the public domain, which means
+      you can modify it, redistribute it or use it however you like.
+    '';
+    license = licenses.publicDomain;
+    platforms = with platforms; linux ++ darwin;
+    maintainers = with maintainers; [ bluescreen303 phreedom AndersonTorres fpletz enzime ma27 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/yubico-piv-tool/default.nix b/nixpkgs/pkgs/tools/misc/yubico-piv-tool/default.nix
new file mode 100644
index 000000000000..b5c5aca0883b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/yubico-piv-tool/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, pkgconfig, openssl, pcsclite, check }:
+
+stdenv.mkDerivation rec {
+  name = "yubico-piv-tool-1.7.0";
+
+  src = fetchurl {
+    url = "https://developers.yubico.com/yubico-piv-tool/Releases/${name}.tar.gz";
+    sha256 = "0zzxh8p9p097zkh9b3prbnigxsc2wy1pj1r8f5ikli9i81z54a5l";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ openssl pcsclite check ];
+
+  configureFlags = [ "--with-backend=pcsc" ];
+
+  meta = with stdenv.lib; {
+    homepage = https://developers.yubico.com/yubico-piv-tool/;
+    description = ''
+      Used for interacting with the Privilege and Identification Card (PIV)
+      application on a YubiKey
+    '';
+    longDescription = ''
+      The Yubico PIV tool is used for interacting with the Privilege and
+      Identification Card (PIV) application on a YubiKey.
+      With it you may generate keys on the device, importing keys and
+      certificates, and create certificate requests, and other operations.
+      A shared library and a command-line tool is included.
+    '';
+    license = licenses.bsd2;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/yubikey-manager-qt/default.nix b/nixpkgs/pkgs/tools/misc/yubikey-manager-qt/default.nix
new file mode 100644
index 000000000000..810c2f49a5ec
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/yubikey-manager-qt/default.nix
@@ -0,0 +1,66 @@
+{ stdenv
+, fetchurl
+, wrapQtAppsHook
+, pcsclite
+, pyotherside
+, pythonPackages
+, python3
+, qmake
+, qtbase
+, qtgraphicaleffects
+, qtquickcontrols
+, qtquickcontrols2
+, qtdeclarative
+, qtsvg
+, yubikey-manager
+, yubikey-personalization
+}:
+
+let inherit (stdenv) lib; in
+
+stdenv.mkDerivation rec {
+  pname = "yubikey-manager-qt";
+  version = "1.1.3";
+
+  src = fetchurl {
+    url = "https://developers.yubico.com/${pname}/Releases/${pname}-${version}.tar.gz";
+    sha256 = "087ms9i0n3rm8a0hvc4a2dk3rffbm6rmgz0m8gbjk6g37iml6nb7";
+  };
+
+  nativeBuildInputs = [ wrapQtAppsHook python3.pkgs.wrapPython qmake ];
+
+  postPatch = ''
+    substituteInPlace ykman-gui/deployment.pri --replace '/usr/bin' "$out/bin"
+  '';
+
+  buildInputs = [ pythonPackages.python qtbase qtgraphicaleffects qtquickcontrols qtquickcontrols2 pyotherside ];
+
+  enableParallelBuilding = true;
+
+  pythonPath = [ yubikey-manager ];
+
+  dontWrapQtApps = true;
+  postInstall = ''
+    buildPythonPath "$pythonPath"
+
+    wrapQtApp $out/bin/ykman-gui \
+      --prefix LD_LIBRARY_PATH : "${stdenv.lib.getLib pcsclite}/lib:${yubikey-personalization}/lib" \
+      --prefix PYTHONPATH : "$program_PYTHONPATH"
+
+    mkdir -p $out/share/applications
+    cp resources/ykman-gui.desktop $out/share/applications/ykman-gui.desktop
+    mkdir -p $out/share/ykman-gui/icons
+    cp resources/icons/*.{icns,ico,png,xpm} $out/share/ykman-gui/icons
+    substituteInPlace $out/share/applications/ykman-gui.desktop \
+      --replace 'Exec=ykman-gui' "Exec=$out/bin/ykman-gui" \
+  '';
+
+  meta = with lib; {
+    inherit version;
+    description = "Cross-platform application for configuring any YubiKey over all USB interfaces.";
+    homepage = https://developers.yubico.com/yubikey-manager-qt/;
+    license = licenses.bsd2;
+    maintainers = [ maintainers.cbley ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/yubikey-manager/default.nix b/nixpkgs/pkgs/tools/misc/yubikey-manager/default.nix
new file mode 100644
index 000000000000..ee5556374742
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/yubikey-manager/default.nix
@@ -0,0 +1,56 @@
+{ python3Packages, fetchurl, lib,
+  yubikey-personalization, libu2f-host, libusb1 }:
+
+python3Packages.buildPythonPackage rec {
+  pname = "yubikey-manager";
+  version = "3.1.0";
+
+  srcs = fetchurl {
+    url = "https://developers.yubico.com/${pname}/Releases/${pname}-${version}.tar.gz";
+    sha256 = "0nb3qzpggyp61lchvprnklby5mf5n0xpn9z8vlhh99pz1k9sqdq1";
+  };
+
+  propagatedBuildInputs =
+    with python3Packages; [
+      click
+      cryptography
+      pyscard
+      pyusb
+      pyopenssl
+      six
+      fido2
+    ] ++ [
+      libu2f-host
+      libusb1
+      yubikey-personalization
+    ];
+
+  makeWrapperArgs = [
+    "--prefix" "LD_LIBRARY_PATH" ":"
+    (lib.makeLibraryPath [ libu2f-host libusb1 yubikey-personalization ])
+  ];
+
+  postInstall = ''
+    mkdir -p "$out/man/man1"
+    cp man/ykman.1 "$out/man/man1"
+
+    mkdir -p $out/share/bash-completion/completions
+    _YKMAN_COMPLETE=source $out/bin/ykman > $out/share/bash-completion/completions/ykman || :
+    mkdir -p $out/share/zsh/site-functions/
+    _YKMAN_COMPLETE=source_zsh "$out/bin/ykman" > "$out/share/zsh/site-functions/_ykman" || :
+    substituteInPlace "$out/share/zsh/site-functions/_ykman" \
+      --replace 'compdef _ykman_completion ykman;' '_ykman_completion "$@"'
+  '';
+
+  # See https://github.com/NixOS/nixpkgs/issues/29169
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = https://developers.yubico.com/yubikey-manager;
+    description = "Command line tool for configuring any YubiKey over all USB transports.";
+
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ benley mic92 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/yubikey-neo-manager/default.nix b/nixpkgs/pkgs/tools/misc/yubikey-neo-manager/default.nix
new file mode 100644
index 000000000000..acc0bac04ff6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/yubikey-neo-manager/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, python27Packages
+, libykneomgr, yubikey-personalization, libu2f-host }:
+
+python27Packages.buildPythonPackage rec {
+  namePrefix = "";
+  name = "yubikey-neo-manager-${version}";
+  version = "1.4.0";
+  src = fetchurl {
+    url = "https://developers.yubico.com/yubikey-neo-manager/Releases/${name}.tar.gz";
+    sha256 = "1isxvx27hk0avxwgwcwys2z8ickfs816ii1aklvmi09ak1rgrf1g";
+  };
+
+  propagatedBuildInputs = with python27Packages; [ pyside pycrypto ];
+  patches = [ ./fix-pyside-requirement.diff ];
+
+  # aid ctypes load_libary()
+  makeWrapperArgs = [
+    "--set LD_PRELOAD '${libykneomgr}/lib/libykneomgr.so ${yubikey-personalization}/lib/libykpers-1.so ${libu2f-host}/lib/libu2f-host.so'"
+  ];
+
+  meta = with stdenv.lib; {
+    homepage = https://developers.yubico.com/yubikey-neo-manager;
+    description = "Cross platform personalization tool for the YubiKey NEO";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ mbakke ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/yubikey-neo-manager/fix-pyside-requirement.diff b/nixpkgs/pkgs/tools/misc/yubikey-neo-manager/fix-pyside-requirement.diff
new file mode 100644
index 000000000000..d11a3a1cc6d9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/yubikey-neo-manager/fix-pyside-requirement.diff
@@ -0,0 +1,17 @@
+Description: Remove PySide requirement, since python-pyside does not register itself correctly
+Author: Dain Nilsson <dain@yubico.com>
+Forwarded: no
+--- a/setup.py
++++ b/setup.py
+@@ -44,8 +44,9 @@
+     entry_points={
+         'gui_scripts': ['neoman=neoman.__main__:main']
+     },
+-    install_requires=['PySide', 'pycrypto'],
+-    yc_requires=['ctypes', 'qt'],
++    install_requires=['pycrypto'],
++    yc_requires=['ctypes'],
++    packages=['neoman', 'neoman.model', 'neoman.view', 'neoman.yubicommon', 'neoman.yubicommon.setup', 'neoman.yubicommon.ctypes', 'neoman.yubicommon.qt'],
+     cmdclass={'executable': executable, 'qt_resources': qt_resources('neoman')},
+     classifiers=[
+         'License :: OSI Approved :: BSD License',
diff --git a/nixpkgs/pkgs/tools/misc/yubikey-personalization-gui/default.nix b/nixpkgs/pkgs/tools/misc/yubikey-personalization-gui/default.nix
new file mode 100644
index 000000000000..59685aa721a9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/yubikey-personalization-gui/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchurl, mkDerivation, pkgconfig, qtbase, qmake, imagemagick
+, libyubikey, yubikey-personalization }:
+
+mkDerivation rec {
+  name = "yubikey-personalization-gui-3.1.25";
+
+  src = fetchurl {
+    url = "https://developers.yubico.com/yubikey-personalization-gui/Releases/${name}.tar.gz";
+    sha256 = "1knyv5yss8lhzaff6jpfqv12fjf1b8b21mfxzx3qi0hw4nl8n2v8";
+  };
+
+  nativeBuildInputs = [ pkgconfig qmake imagemagick ];
+  buildInputs = [ yubikey-personalization qtbase libyubikey ];
+
+  installPhase = ''
+    install -D -m0755 build/release/yubikey-personalization-gui "$out/bin/yubikey-personalization-gui"
+    install -D -m0644 resources/lin/yubikey-personalization-gui.1 "$out/share/man/man1/yubikey-personalization-gui.1"
+
+    # Desktop files
+    install -D -m0644 resources/lin/yubikey-personalization-gui.desktop "$out/share/applications/yubikey-personalization-gui.desktop"
+    install -D -m0644 resources/lin/yubikey-personalization-gui.desktop "$out/share/pixmaps/yubikey-personalization-gui.xpm"
+
+    # Icons
+    install -D -m0644 resources/lin/yubikey-personalization-gui.png "$out/share/icons/hicolor/128x128/apps/yubikey-personalization-gui.png"
+    for SIZE in 16 24 32 48 64 96; do
+      # set modify/create for reproducible builds
+      convert -scale ''${SIZE} +set date:create +set date:modify \
+        resources/lin/yubikey-personalization-gui.png \
+        yubikey-personalization-gui.png
+
+      install -D -m0644 yubikey-personalization-gui.png "$out/share/icons/hicolor/''${SIZE}x''${SIZE}/apps/yubikey-personalization-gui.png"
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://developers.yubico.com/yubikey-personalization-gui;
+    description = "A QT based cross-platform utility designed to facilitate reconfiguration of the Yubikey";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/yubikey-personalization/default.nix b/nixpkgs/pkgs/tools/misc/yubikey-personalization/default.nix
new file mode 100644
index 000000000000..c20fe68b7b22
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/yubikey-personalization/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, pkgconfig, libusb, libyubikey, json_c }:
+
+stdenv.mkDerivation rec {
+  pname = "yubikey-personalization";
+  version = "1.20.0";
+
+  src = fetchurl {
+    url = "https://developers.yubico.com/yubikey-personalization/Releases/ykpers-${version}.tar.gz";
+    sha256 = "14wvlwqnwj0gllkpvfqiy8ns938bwvjsz8x1hmymmx32m074vj0f";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libusb libyubikey json_c ];
+
+  configureFlags = [
+    "--with-backend=libusb-1.0"
+  ];
+
+  doCheck = true;
+
+  postInstall = ''
+    # Don't use 70-yubikey.rules because it depends on ConsoleKit
+    install -D -t $out/lib/udev/rules.d 69-yubikey.rules
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://developers.yubico.com/yubikey-personalization;
+    description = "A library and command line tool to personalize YubiKeys";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/z-lua/default.nix b/nixpkgs/pkgs/tools/misc/z-lua/default.nix
new file mode 100644
index 000000000000..9c637d3ae806
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/z-lua/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, lua52Packages, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "z-lua";
+  version = "1.7.3";
+
+  src = fetchFromGitHub {
+    owner = "skywind3000";
+    repo = "z.lua";
+    rev = "v${version}";
+    sha256 = "13cfdghkprkaxgrbwsjndbza2mjxm2x774lnq7q4gfyc48mzwi70";
+  };
+
+  dontBuild = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = [ lua52Packages.lua ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 z.lua $out/bin/z
+    wrapProgram $out/bin/z --set LUA_CPATH "${lua52Packages.luafilesystem}/lib/lua/5.2/lfs.so" --set _ZL_USE_LFS 1;
+
+    runHook postInstall
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/skywind3000/z.lua;
+    description = "A new cd command that helps you navigate faster by learning your habits";
+    license = licenses.mit;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/zabbix-cli/default.nix b/nixpkgs/pkgs/tools/misc/zabbix-cli/default.nix
new file mode 100644
index 000000000000..d21573885123
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/zabbix-cli/default.nix
@@ -0,0 +1,29 @@
+{ fetchFromGitHub, lib, python2Packages }:
+let
+  pythonPackages = python2Packages;
+
+in pythonPackages.buildPythonApplication rec {
+  pname = "zabbix-cli";
+  version = "2.1.1";
+
+  propagatedBuildInputs = with pythonPackages; [ ipaddr requests ];
+
+  # argparse is part of the standardlib
+  prePatch = ''
+    substituteInPlace setup.py --replace "'argparse'," ""
+  '';
+
+  src = fetchFromGitHub {
+    owner = "usit-gd";
+    repo = "zabbix-cli";
+    rev = version;
+    sha256 = "10a1cvjqwlqqfz52ajv9i53h6v95w8y7xmgqr79q2c4v1nz5bfks";
+  };
+
+  meta = with lib; {
+    description = "Command-line interface for Zabbix";
+    homepage = src.meta.homepage;
+    license = [ licenses.gpl3 ];
+    maintainers = [ maintainers.womfoo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/zabbixctl/default.nix b/nixpkgs/pkgs/tools/misc/zabbixctl/default.nix
new file mode 100644
index 000000000000..b74ab51680d1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/zabbixctl/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "zabbixctl";
+  version = "unstable-2019-07-06";
+
+  goPackagePath = "github.com/kovetskiy/zabbixctl";
+
+  src = fetchFromGitHub {
+    owner = "kovetskiy";
+    repo = pname;
+    rev = "f2e856b7ab7d8ff9f494fe9f481bbaef18ea6ff7";
+    sha256 = "1lr3g9h3aa2px2kh5b2qcpj3aqyhqwq7kj1s9wifgmri9q7fsdzy";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    description = "Most effective way for operating in Zabbix Server";
+    homepage = "https://github.com/kovetskiy/zabbixctl";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ mmahut ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/zabbixctl/deps.nix b/nixpkgs/pkgs/tools/misc/zabbixctl/deps.nix
new file mode 100644
index 000000000000..2bf015acf5f5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/zabbixctl/deps.nix
@@ -0,0 +1,111 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.3.0
+[
+  {
+    goPackagePath = "github.com/BurntSushi/toml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/BurntSushi/toml";
+      rev = "3012a1dbe2e4bd1391d42b32f0577cb7bbc7f005";
+      sha256 = "1fjdwwfzyzllgiwydknf1pwjvy49qxfsczqx5gz3y0izs7as99j6";
+    };
+  }
+  {
+    goPackagePath = "github.com/jinzhu/configor";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jinzhu/configor";
+      rev = "9064de4b2535f218bde55dc8de50a3904ef800d0";
+      sha256 = "13wd7s2kff3s0bz5mi0m2zcz1r8mwnwhd944gxymzkwij71lhasn";
+    };
+  }
+  {
+    goPackagePath = "github.com/kovetskiy/godocs";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kovetskiy/godocs";
+      rev = "2d9428f80f3442e07f67daf7ba378cd0ff6cfe24";
+      sha256 = "128dlvxqk31crzl9p3ps0nir724cjzxv4lxpgdvsir0wvfp8f83j";
+    };
+  }
+  {
+    goPackagePath = "github.com/kovetskiy/lorg";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kovetskiy/lorg";
+      rev = "9c6042b7edb0c491dd0722fad91e2b5e833d6b43";
+      sha256 = "0j1cm7mni47vraxnyigc55cq0yxw8zdyjmrq2c7vnm5s4kiia8pi";
+    };
+  }
+  {
+    goPackagePath = "github.com/kovetskiy/spinner-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kovetskiy/spinner-go";
+      rev = "00597fd24fe0d8079821b68f71d73b0661401752";
+      sha256 = "19qcpnvs61fsk7xgcj5b6s3zksnkc5rk9n5hx73v9ya7m2k7xr2n";
+    };
+  }
+  {
+    goPackagePath = "github.com/mattn/go-runewidth";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-runewidth";
+      rev = "703b5e6b11ae25aeb2af9ebb5d5fdf8fa2575211";
+      sha256 = "0znpyz71gajx3g0j2zp63nhjj2c07g16885vxv4ykwnrfmzbgk4w";
+    };
+  }
+  {
+    goPackagePath = "github.com/olekukonko/tablewriter";
+    fetch = {
+      type = "git";
+      url = "https://github.com/olekukonko/tablewriter";
+      rev = "cc27d85e17cec9768d2ac401ea5d619a9628f16d";
+      sha256 = "1y3pkvypkxjrhlnsv8lcyd0c2q8mn5asfny2zi9j2vs77s5bd9qm";
+    };
+  }
+  {
+    goPackagePath = "github.com/reconquest/karma-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/reconquest/karma-go";
+      rev = "1094651bd246b1685f7b368e099aba6fca9efd8f";
+      sha256 = "0jiayzxwp0h7skg86q58rh58m2imdg3ng2vzpc2bxiz67lzcpk3r";
+    };
+  }
+  {
+    goPackagePath = "github.com/simplereach/timeutils";
+    fetch = {
+      type = "git";
+      url = "https://github.com/simplereach/timeutils";
+      rev = "1a719258b86a08630289b86902ab16817ba641e9";
+      sha256 = "08mf2j0dk07c9p279ydbrjxbjf113azmq0x8vhf7jvldcgjpw3m6";
+    };
+  }
+  {
+    goPackagePath = "github.com/zazab/zhash";
+    fetch = {
+      type = "git";
+      url = "https://github.com/zazab/zhash";
+      rev = "ad45b89afe7af57319ca32f174e4dabeb00c44e4";
+      sha256 = "16b6f70qwfyg0zvbpk0yj5jx4cv2ggkyiqc5nk8n0165z46i62hs";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/mgo.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/mgo.v2";
+      rev = "9856a29383ce1c59f308dd1cf0363a79b5bef6b5";
+      sha256 = "1gfbcmvpwwf1lydxj3g42wv2g9w3pf0y02igqk4f4f21h02sazkw";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/yaml.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/yaml.v2";
+      rev = "51d6538a90f86fe93ac480b35f37b2be17fef232";
+      sha256 = "01wj12jzsdqlnidpyjssmj0r4yavlqy7dwrg7adqd8dicjc4ncsa";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/misc/zsh-autoenv/default.nix b/nixpkgs/pkgs/tools/misc/zsh-autoenv/default.nix
new file mode 100644
index 000000000000..4b19331f3925
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/zsh-autoenv/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchFromGitHub, runtimeShell }:
+
+stdenv.mkDerivation {
+  pname = "zsh-autoenv";
+  version = "2017-12-16";
+
+  src = fetchFromGitHub {
+    owner = "Tarrasch";
+    repo = "zsh-autoenv";
+    rev = "2c8cfbcea8e7286649840d7ec98d7e9d5e1d45a0";
+    sha256 = "004svkfzhc3ab6q2qvwzgj36wvicg5bs8d2gcibx6adq042di7zj";
+  };
+
+  buildPhase = ":";
+
+  installPhase = ''
+    mkdir -p $out/{bin,share}
+    cp -R $src $out/share/zsh-autoenv
+
+    cat <<SCRIPT > $out/bin/zsh-autoenv-share
+    #!${runtimeShell}
+    # Run this script to find the fzf shared folder where all the shell
+    # integration scripts are living.
+    echo $out/share/zsh-autoenv
+    SCRIPT
+    chmod +x $out/bin/zsh-autoenv-share
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Automatically sources whitelisted .autoenv.zsh files";
+    longDescription = ''
+      zsh-autoenv automatically sources (known/whitelisted)
+      .autoenv.zsh files, typically used in project root directories.
+      It handles "enter" and "leave" events, nesting, and stashing of
+      variables (overwriting and restoring).
+    '';
+    homepage = https://github.com/Tarrasch/zsh-autoenv;
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/zsh-navigation-tools/default.nix b/nixpkgs/pkgs/tools/misc/zsh-navigation-tools/default.nix
new file mode 100644
index 000000000000..be64ff47e6be
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/zsh-navigation-tools/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "zsh-navigation-tools";
+  version = "2.2.7";
+
+  src = fetchFromGitHub {
+    owner = "psprint";
+    repo = "zsh-navigation-tools";
+    rev = "v${version}";
+    sha256 = "0c4kb19aprb868xnlyq8h1nd2d32r0zkrqblsrzvg7m9gx8vqps8";
+  };
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/share/zsh/site-functions/
+    cp zsh-navigation-tools.plugin.zsh $out/share/zsh/site-functions/
+    cp n-* $out/share/zsh/site-functions/
+    cp znt-* $out/share/zsh/site-functions/
+    mkdir -p $out/share/zsh/site-functions/.config/znt
+    cp .config/znt/n-* $out/share/zsh/site-functions/.config/znt
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Curses-based tools for ZSH";
+    homepage = https://github.com/psprint/zsh-navigation-tools;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ pSub ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/6tunnel/default.nix b/nixpkgs/pkgs/tools/networking/6tunnel/default.nix
new file mode 100644
index 000000000000..bf0e8ba33162
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/6tunnel/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, lib, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "6tunnel";
+  version = "0.13";
+
+  src = fetchFromGitHub {
+    owner = "wojtekka";
+    repo = pname;
+    rev = version;
+    sha256 = "0zsx9d6xz5w8zvrqsm8r625gpbqqhjzvjdzc3z8yix668yg8ff8h";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with lib; {
+    description = "Tunnelling for application that don't speak IPv6";
+    homepage = "https://github.com/wojtekka/6tunnel";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ filalex77 ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/acme-client/default.nix b/nixpkgs/pkgs/tools/networking/acme-client/default.nix
new file mode 100644
index 000000000000..06c2898248d0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/acme-client/default.nix
@@ -0,0 +1,36 @@
+{ stdenv
+, fetchFromGitHub
+, autoreconfHook
+, bison
+, apple_sdk ? null
+, libbsd
+, libressl
+, pkgconfig
+}:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  pname = "acme-client";
+  version = "0.2.5";
+
+  src = fetchFromGitHub {
+    owner = "graywolf";
+    repo = "acme-client-portable";
+    rev = "v${version}";
+    sha256 = "1d9yk87nj5gizkq26m4wqfh4xhlrn5xlfj7mfgvrpsdiwibqxrrw";
+  };
+
+  nativeBuildInputs = [ autoreconfHook bison pkgconfig ];
+  buildInputs = [ libbsd libressl ] ++ optional stdenv.isDarwin apple_sdk.sdk;
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  meta = {
+    homepage = "https://github.com/graywolf/acme-client-portable";
+    description = "Secure ACME/Let's Encrypt client";
+    platforms = platforms.unix;
+    license = licenses.isc;
+    maintainers = with maintainers; [ pmahoney ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ahcpd/default.nix b/nixpkgs/pkgs/tools/networking/ahcpd/default.nix
new file mode 100644
index 000000000000..4b03c3cf2787
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ahcpd/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "ahcpd-0.53";
+
+  src = fetchurl {
+    url = "http://www.pps.univ-paris-diderot.fr/~jch/software/files/${name}.tar.gz";
+    sha256 = "0lhdmky3zdyk51hclv2lrhw3hzymbdc8bw2khs3rnaibgn0jwqm4";
+  };
+
+  preBuild = ''
+    makeFlags="PREFIX=$out ETCDIR=$out/etc"
+    sed -i -e s,etc,$out/etc, Makefile
+  '';
+
+  meta = {
+    homepage = http://www.pps.univ-paris-diderot.fr/~jch/software/ahcp/;
+    description = "Autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 networks";
+    license = stdenv.lib.licenses.mit;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/aircrack-ng/default.nix b/nixpkgs/pkgs/tools/networking/aircrack-ng/default.nix
new file mode 100644
index 000000000000..9d948eaf8221
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/aircrack-ng/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl, libpcap, openssl, zlib, wirelesstools
+, iw, ethtool, pciutils, libnl, pkgconfig, makeWrapper
+, autoreconfHook, usbutils }:
+
+stdenv.mkDerivation rec {
+  name = "aircrack-ng-1.5.2";
+
+  src = fetchurl {
+    url = "https://download.aircrack-ng.org/${name}.tar.gz";
+    sha256 = "0hc2x17bxk2n00z8jj5jfwq3z41681fd19n018724il0cpkjyncy";
+  };
+
+  nativeBuildInputs = [ pkgconfig makeWrapper autoreconfHook ];
+  buildInputs = [ libpcap openssl zlib libnl iw ethtool pciutils ];
+
+  patchPhase = ''
+    sed -e 's@/usr/local/bin@'${wirelesstools}@ -i src/aircrack-osdep/linux.c
+  '';
+
+  postFixup = ''
+    wrapProgram $out/bin/airmon-ng --prefix PATH : ${stdenv.lib.makeBinPath [
+      ethtool iw pciutils usbutils
+    ]}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Wireless encryption cracking tools";
+    homepage = http://www.aircrack-ng.org/;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ domenkozar ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/airfield/default.nix b/nixpkgs/pkgs/tools/networking/airfield/default.nix
new file mode 100644
index 000000000000..a31bc57904d5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/airfield/default.nix
@@ -0,0 +1,70 @@
+{ stdenv, fetchFromGitHub
+, pkgs, makeWrapper, buildEnv
+, nodejs, runtimeShell
+}:
+
+let
+  nodePackages = import ./node.nix {
+    inherit pkgs;
+    system = stdenv.hostPlatform.system;
+  };
+
+  runtimeEnv = buildEnv {
+    name = "airfield-runtime";
+    paths = with nodePackages; [
+      nodePackages."express-3.0.5" nodePackages."swig-0.14.0"
+      nodePackages."consolidate-0.10.0" redis connect-redis
+      async request
+    ];
+  };
+
+  name = "airfield-${version}";
+  version = "2015-01-04";
+
+  src = stdenv.mkDerivation {
+    name = "${name}-src";
+    inherit version;
+
+    src = fetchFromGitHub {
+      owner = "emblica";
+      repo = "airfield";
+      rev = "f021b19a35be3db9be7780318860f3b528c48641";
+      sha256 = "1xk69x89kgg98hm7c2ysyfmg7pkvgkpg4wym6v5cmdkdid08fsgs";
+    };
+
+    dontBuild = true;
+
+    installPhase = ''
+      mkdir $out
+      cp -R . $out
+    '';
+  };
+in stdenv.mkDerivation {
+  inherit name version src;
+
+  buildInputs = [ makeWrapper nodejs ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cat >$out/bin/airfield <<EOF
+      #!${runtimeShell}
+      ${nodejs}/bin/node ${src}/airfield.js
+    EOF
+  '';
+
+  postFixup = ''
+    chmod +x $out/bin/airfield
+    wrapProgram $out/bin/airfield \
+      --set NODE_PATH "${runtimeEnv}/lib/node_modules"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A web-interface for hipache-proxy";
+    license = licenses.mit;
+    homepage = https://github.com/emblica/airfield;
+    maintainers = with maintainers; [ offline ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/airfield/deps.json b/nixpkgs/pkgs/tools/networking/airfield/deps.json
new file mode 100644
index 000000000000..f6b3c5a91468
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/airfield/deps.json
@@ -0,0 +1,8 @@
+[ { "express": "3.0.5" }
+, { "swig": "0.14.0" }
+, { "consolidate": "0.10.0" }
+, "redis"
+, "connect-redis"
+, "async"
+, "request"
+]
diff --git a/nixpkgs/pkgs/tools/networking/airfield/deps.sh b/nixpkgs/pkgs/tools/networking/airfield/deps.sh
new file mode 100755
index 000000000000..77648e2fbfbc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/airfield/deps.sh
@@ -0,0 +1,6 @@
+#!/usr/bin/env nix-shell
+#! nix-shell -i bash -p nodePackages.node2nix
+
+node2nix -8 -i deps.json \
+  --no-copy-node-env \
+  -e ../../../development/node-packages/node-env.nix -c node.nix
diff --git a/nixpkgs/pkgs/tools/networking/airfield/node-packages.nix b/nixpkgs/pkgs/tools/networking/airfield/node-packages.nix
new file mode 100644
index 000000000000..1febe36898b2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/airfield/node-packages.nix
@@ -0,0 +1,849 @@
+# This file has been generated by node2nix 1.7.0. Do not edit!
+
+{nodeEnv, fetchurl, fetchgit, globalBuildInputs ? []}:
+
+let
+  sources = {
+    "ajv-6.10.0" = {
+      name = "ajv";
+      packageName = "ajv";
+      version = "6.10.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz";
+        sha512 = "nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==";
+      };
+    };
+    "asn1-0.2.4" = {
+      name = "asn1";
+      packageName = "asn1";
+      version = "0.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz";
+        sha512 = "jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==";
+      };
+    };
+    "assert-plus-1.0.0" = {
+      name = "assert-plus";
+      packageName = "assert-plus";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz";
+        sha1 = "f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525";
+      };
+    };
+    "asynckit-0.4.0" = {
+      name = "asynckit";
+      packageName = "asynckit";
+      version = "0.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz";
+        sha1 = "c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79";
+      };
+    };
+    "aws-sign2-0.7.0" = {
+      name = "aws-sign2";
+      packageName = "aws-sign2";
+      version = "0.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz";
+        sha1 = "b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8";
+      };
+    };
+    "aws4-1.8.0" = {
+      name = "aws4";
+      packageName = "aws4";
+      version = "1.8.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz";
+        sha512 = "ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==";
+      };
+    };
+    "bcrypt-pbkdf-1.0.2" = {
+      name = "bcrypt-pbkdf";
+      packageName = "bcrypt-pbkdf";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz";
+        sha1 = "a4301d389b6a43f9b67ff3ca11a3f6637e360e9e";
+      };
+    };
+    "buffer-crc32-0.1.1" = {
+      name = "buffer-crc32";
+      packageName = "buffer-crc32";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.1.1.tgz";
+        sha1 = "7e110dc9953908ab7c32acdc70c9f945b1cbc526";
+      };
+    };
+    "bytes-0.1.0" = {
+      name = "bytes";
+      packageName = "bytes";
+      version = "0.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bytes/-/bytes-0.1.0.tgz";
+        sha1 = "c574812228126d6369d1576925a8579db3f8e5a2";
+      };
+    };
+    "caseless-0.12.0" = {
+      name = "caseless";
+      packageName = "caseless";
+      version = "0.12.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz";
+        sha1 = "1b681c21ff84033c826543090689420d187151dc";
+      };
+    };
+    "combined-stream-1.0.8" = {
+      name = "combined-stream";
+      packageName = "combined-stream";
+      version = "1.0.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz";
+        sha512 = "FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==";
+      };
+    };
+    "commander-0.6.1" = {
+      name = "commander";
+      packageName = "commander";
+      version = "0.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz";
+        sha1 = "fa68a14f6a945d54dbbe50d8cdb3320e9e3b1a06";
+      };
+    };
+    "connect-2.7.1" = {
+      name = "connect";
+      packageName = "connect";
+      version = "2.7.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/connect/-/connect-2.7.1.tgz";
+        sha1 = "b869df9acf3dd8a0af7523c7c6f1aa8b4b761daa";
+      };
+    };
+    "cookie-0.0.5" = {
+      name = "cookie";
+      packageName = "cookie";
+      version = "0.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cookie/-/cookie-0.0.5.tgz";
+        sha1 = "f9acf9db57eb7568c9fcc596256b7bb22e307c81";
+      };
+    };
+    "cookie-signature-0.0.1" = {
+      name = "cookie-signature";
+      packageName = "cookie-signature";
+      version = "0.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cookie-signature/-/cookie-signature-0.0.1.tgz";
+        sha1 = "13d3603b5cf63befbf85a8801e37aa900db46985";
+      };
+    };
+    "core-util-is-1.0.2" = {
+      name = "core-util-is";
+      packageName = "core-util-is";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz";
+        sha1 = "b5fd54220aa2bc5ab57aab7140c940754503c1a7";
+      };
+    };
+    "crc-0.2.0" = {
+      name = "crc";
+      packageName = "crc";
+      version = "0.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/crc/-/crc-0.2.0.tgz";
+        sha1 = "f4486b9bf0a12df83c3fca14e31e030fdabd9454";
+      };
+    };
+    "dashdash-1.14.1" = {
+      name = "dashdash";
+      packageName = "dashdash";
+      version = "1.14.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz";
+        sha1 = "853cfa0f7cbe2fed5de20326b8dd581035f6e2f0";
+      };
+    };
+    "debug-4.1.1" = {
+      name = "debug";
+      packageName = "debug";
+      version = "4.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz";
+        sha512 = "pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==";
+      };
+    };
+    "delayed-stream-1.0.0" = {
+      name = "delayed-stream";
+      packageName = "delayed-stream";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz";
+        sha1 = "df3ae199acadfb7d440aaae0b29e2272b24ec619";
+      };
+    };
+    "double-ended-queue-2.1.0-0" = {
+      name = "double-ended-queue";
+      packageName = "double-ended-queue";
+      version = "2.1.0-0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz";
+        sha1 = "103d3527fd31528f40188130c841efdd78264e5c";
+      };
+    };
+    "ecc-jsbn-0.1.2" = {
+      name = "ecc-jsbn";
+      packageName = "ecc-jsbn";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz";
+        sha1 = "3a83a904e54353287874c564b7549386849a98c9";
+      };
+    };
+    "extend-3.0.2" = {
+      name = "extend";
+      packageName = "extend";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz";
+        sha512 = "fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==";
+      };
+    };
+    "extsprintf-1.3.0" = {
+      name = "extsprintf";
+      packageName = "extsprintf";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz";
+        sha1 = "96918440e3041a7a414f8c52e3c574eb3c3e1e05";
+      };
+    };
+    "fast-deep-equal-2.0.1" = {
+      name = "fast-deep-equal";
+      packageName = "fast-deep-equal";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz";
+        sha1 = "7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49";
+      };
+    };
+    "fast-json-stable-stringify-2.0.0" = {
+      name = "fast-json-stable-stringify";
+      packageName = "fast-json-stable-stringify";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz";
+        sha1 = "d5142c0caee6b1189f87d3a76111064f86c8bbf2";
+      };
+    };
+    "forever-agent-0.6.1" = {
+      name = "forever-agent";
+      packageName = "forever-agent";
+      version = "0.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz";
+        sha1 = "fbc71f0c41adeb37f96c577ad1ed42d8fdacca91";
+      };
+    };
+    "form-data-2.3.3" = {
+      name = "form-data";
+      packageName = "form-data";
+      version = "2.3.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz";
+        sha512 = "1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==";
+      };
+    };
+    "formidable-1.0.11" = {
+      name = "formidable";
+      packageName = "formidable";
+      version = "1.0.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/formidable/-/formidable-1.0.11.tgz";
+        sha1 = "68f63325a035e644b6f7bb3d11243b9761de1b30";
+      };
+    };
+    "fresh-0.1.0" = {
+      name = "fresh";
+      packageName = "fresh";
+      version = "0.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fresh/-/fresh-0.1.0.tgz";
+        sha1 = "03e4b0178424e4c2d5d19a54d8814cdc97934850";
+      };
+    };
+    "getpass-0.1.7" = {
+      name = "getpass";
+      packageName = "getpass";
+      version = "0.1.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz";
+        sha1 = "5eff8e3e684d569ae4cb2b1282604e8ba62149fa";
+      };
+    };
+    "har-schema-2.0.0" = {
+      name = "har-schema";
+      packageName = "har-schema";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz";
+        sha1 = "a94c2224ebcac04782a0d9035521f24735b7ec92";
+      };
+    };
+    "har-validator-5.1.3" = {
+      name = "har-validator";
+      packageName = "har-validator";
+      version = "5.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz";
+        sha512 = "sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==";
+      };
+    };
+    "http-signature-1.2.0" = {
+      name = "http-signature";
+      packageName = "http-signature";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz";
+        sha1 = "9aecd925114772f3d95b65a60abb8f7c18fbace1";
+      };
+    };
+    "is-typedarray-1.0.0" = {
+      name = "is-typedarray";
+      packageName = "is-typedarray";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz";
+        sha1 = "e479c80858df0c1b11ddda6940f96011fcda4a9a";
+      };
+    };
+    "isstream-0.1.2" = {
+      name = "isstream";
+      packageName = "isstream";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz";
+        sha1 = "47e63f7af55afa6f92e1500e690eb8b8529c099a";
+      };
+    };
+    "jsbn-0.1.1" = {
+      name = "jsbn";
+      packageName = "jsbn";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz";
+        sha1 = "a5e654c2e5a2deb5f201d96cefbca80c0ef2f513";
+      };
+    };
+    "json-schema-0.2.3" = {
+      name = "json-schema";
+      packageName = "json-schema";
+      version = "0.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz";
+        sha1 = "b480c892e59a2f05954ce727bd3f2a4e882f9e13";
+      };
+    };
+    "json-schema-traverse-0.4.1" = {
+      name = "json-schema-traverse";
+      packageName = "json-schema-traverse";
+      version = "0.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz";
+        sha512 = "xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==";
+      };
+    };
+    "json-stringify-safe-5.0.1" = {
+      name = "json-stringify-safe";
+      packageName = "json-stringify-safe";
+      version = "5.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz";
+        sha1 = "1296a2d58fd45f19a0f6ce01d65701e2c735b6eb";
+      };
+    };
+    "jsprim-1.4.1" = {
+      name = "jsprim";
+      packageName = "jsprim";
+      version = "1.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz";
+        sha1 = "313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2";
+      };
+    };
+    "methods-0.0.1" = {
+      name = "methods";
+      packageName = "methods";
+      version = "0.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/methods/-/methods-0.0.1.tgz";
+        sha1 = "277c90f8bef39709645a8371c51c3b6c648e068c";
+      };
+    };
+    "mime-1.2.6" = {
+      name = "mime";
+      packageName = "mime";
+      version = "1.2.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mime/-/mime-1.2.6.tgz";
+        sha1 = "b1f86c768c025fa87b48075f1709f28aeaf20365";
+      };
+    };
+    "mime-db-1.40.0" = {
+      name = "mime-db";
+      packageName = "mime-db";
+      version = "1.40.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz";
+        sha512 = "jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==";
+      };
+    };
+    "mime-types-2.1.24" = {
+      name = "mime-types";
+      packageName = "mime-types";
+      version = "2.1.24";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz";
+        sha512 = "WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==";
+      };
+    };
+    "mkdirp-0.3.3" = {
+      name = "mkdirp";
+      packageName = "mkdirp";
+      version = "0.3.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.3.tgz";
+        sha1 = "595e251c1370c3a68bab2136d0e348b8105adf13";
+      };
+    };
+    "ms-2.1.1" = {
+      name = "ms";
+      packageName = "ms";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz";
+        sha512 = "tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==";
+      };
+    };
+    "oauth-sign-0.9.0" = {
+      name = "oauth-sign";
+      packageName = "oauth-sign";
+      version = "0.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz";
+        sha512 = "fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==";
+      };
+    };
+    "pause-0.0.1" = {
+      name = "pause";
+      packageName = "pause";
+      version = "0.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz";
+        sha1 = "1d408b3fdb76923b9543d96fb4c9dfd535d9cb5d";
+      };
+    };
+    "performance-now-2.1.0" = {
+      name = "performance-now";
+      packageName = "performance-now";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz";
+        sha1 = "6309f4e0e5fa913ec1c69307ae364b4b377c9e7b";
+      };
+    };
+    "psl-1.1.32" = {
+      name = "psl";
+      packageName = "psl";
+      version = "1.1.32";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/psl/-/psl-1.1.32.tgz";
+        sha512 = "MHACAkHpihU/REGGPLj4sEfc/XKW2bheigvHO1dUqjaKigMp1C8+WLQYRGgeKFMsw5PMfegZcaN8IDXK/cD0+g==";
+      };
+    };
+    "punycode-1.4.1" = {
+      name = "punycode";
+      packageName = "punycode";
+      version = "1.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz";
+        sha1 = "c0d5a63b2718800ad8e1eb0fa5269c84dd41845e";
+      };
+    };
+    "punycode-2.1.1" = {
+      name = "punycode";
+      packageName = "punycode";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz";
+        sha512 = "XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==";
+      };
+    };
+    "qs-0.5.1" = {
+      name = "qs";
+      packageName = "qs";
+      version = "0.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/qs/-/qs-0.5.1.tgz";
+        sha1 = "9f6bf5d9ac6c76384e95d36d15b48980e5e4add0";
+      };
+    };
+    "qs-6.5.2" = {
+      name = "qs";
+      packageName = "qs";
+      version = "6.5.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz";
+        sha512 = "N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==";
+      };
+    };
+    "range-parser-0.0.4" = {
+      name = "range-parser";
+      packageName = "range-parser";
+      version = "0.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/range-parser/-/range-parser-0.0.4.tgz";
+        sha1 = "c0427ffef51c10acba0782a46c9602e744ff620b";
+      };
+    };
+    "redis-2.8.0" = {
+      name = "redis";
+      packageName = "redis";
+      version = "2.8.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/redis/-/redis-2.8.0.tgz";
+        sha512 = "M1OkonEQwtRmZv4tEWF2VgpG0JWJ8Fv1PhlgT5+B+uNq2cA3Rt1Yt/ryoR+vQNOQcIEgdCdfH0jr3bDpihAw1A==";
+      };
+    };
+    "redis-commands-1.5.0" = {
+      name = "redis-commands";
+      packageName = "redis-commands";
+      version = "1.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/redis-commands/-/redis-commands-1.5.0.tgz";
+        sha512 = "6KxamqpZ468MeQC3bkWmCB1fp56XL64D4Kf0zJSwDZbVLLm7KFkoIcHrgRvQ+sk8dnhySs7+yBg94yIkAK7aJg==";
+      };
+    };
+    "redis-parser-2.6.0" = {
+      name = "redis-parser";
+      packageName = "redis-parser";
+      version = "2.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/redis-parser/-/redis-parser-2.6.0.tgz";
+        sha1 = "52ed09dacac108f1a631c07e9b69941e7a19504b";
+      };
+    };
+    "safe-buffer-5.1.2" = {
+      name = "safe-buffer";
+      packageName = "safe-buffer";
+      version = "5.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz";
+        sha512 = "Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==";
+      };
+    };
+    "safer-buffer-2.1.2" = {
+      name = "safer-buffer";
+      packageName = "safer-buffer";
+      version = "2.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz";
+        sha512 = "YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==";
+      };
+    };
+    "send-0.1.0" = {
+      name = "send";
+      packageName = "send";
+      version = "0.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/send/-/send-0.1.0.tgz";
+        sha1 = "cfb08ebd3cec9b7fc1a37d9ff9e875a971cf4640";
+      };
+    };
+    "sshpk-1.16.1" = {
+      name = "sshpk";
+      packageName = "sshpk";
+      version = "1.16.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz";
+        sha512 = "HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==";
+      };
+    };
+    "tough-cookie-2.4.3" = {
+      name = "tough-cookie";
+      packageName = "tough-cookie";
+      version = "2.4.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz";
+        sha512 = "Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==";
+      };
+    };
+    "tunnel-agent-0.6.0" = {
+      name = "tunnel-agent";
+      packageName = "tunnel-agent";
+      version = "0.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz";
+        sha1 = "27a5dea06b36b04a0a9966774b290868f0fc40fd";
+      };
+    };
+    "tweetnacl-0.14.5" = {
+      name = "tweetnacl";
+      packageName = "tweetnacl";
+      version = "0.14.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz";
+        sha1 = "5ae68177f192d4456269d108afa93ff8743f4f64";
+      };
+    };
+    "underscore-1.9.1" = {
+      name = "underscore";
+      packageName = "underscore";
+      version = "1.9.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz";
+        sha512 = "5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==";
+      };
+    };
+    "uri-js-4.2.2" = {
+      name = "uri-js";
+      packageName = "uri-js";
+      version = "4.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz";
+        sha512 = "KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==";
+      };
+    };
+    "uuid-3.3.2" = {
+      name = "uuid";
+      packageName = "uuid";
+      version = "3.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz";
+        sha512 = "yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==";
+      };
+    };
+    "verror-1.10.0" = {
+      name = "verror";
+      packageName = "verror";
+      version = "1.10.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz";
+        sha1 = "3a105ca17053af55d6e270c1f8288682e18da400";
+      };
+    };
+  };
+in
+{
+  "express-3.0.5" = nodeEnv.buildNodePackage {
+    name = "express";
+    packageName = "express";
+    version = "3.0.5";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/express/-/express-3.0.5.tgz";
+      sha1 = "4c6e5850e6b5e8ca2af57f21ed7097de50948b73";
+    };
+    dependencies = [
+      sources."buffer-crc32-0.1.1"
+      sources."bytes-0.1.0"
+      sources."commander-0.6.1"
+      sources."connect-2.7.1"
+      sources."cookie-0.0.5"
+      sources."cookie-signature-0.0.1"
+      sources."crc-0.2.0"
+      sources."debug-4.1.1"
+      sources."formidable-1.0.11"
+      sources."fresh-0.1.0"
+      sources."methods-0.0.1"
+      sources."mime-1.2.6"
+      sources."mkdirp-0.3.3"
+      sources."ms-2.1.1"
+      sources."pause-0.0.1"
+      sources."qs-0.5.1"
+      sources."range-parser-0.0.4"
+      sources."send-0.1.0"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Sinatra inspired web development framework";
+    };
+    production = true;
+    bypassCache = true;
+    reconstructLock = true;
+  };
+  "swig-0.14.0" = nodeEnv.buildNodePackage {
+    name = "swig";
+    packageName = "swig";
+    version = "0.14.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/swig/-/swig-0.14.0.tgz";
+      sha1 = "544bfb3bd837608873eed6a72c672a28cb1f1b3f";
+    };
+    dependencies = [
+      sources."underscore-1.9.1"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "A fast django-like templating engine for node.js and browsers.";
+    };
+    production = true;
+    bypassCache = true;
+    reconstructLock = true;
+  };
+  "consolidate-0.10.0" = nodeEnv.buildNodePackage {
+    name = "consolidate";
+    packageName = "consolidate";
+    version = "0.10.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/consolidate/-/consolidate-0.10.0.tgz";
+      sha1 = "81f1a6ceba1247df9cef7a261ce527c2ce538f7a";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Template engine consolidation library";
+      homepage = https://github.com/visionmedia/consolidate.js;
+    };
+    production = true;
+    bypassCache = true;
+    reconstructLock = true;
+  };
+  redis = nodeEnv.buildNodePackage {
+    name = "redis";
+    packageName = "redis";
+    version = "2.8.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/redis/-/redis-2.8.0.tgz";
+      sha512 = "M1OkonEQwtRmZv4tEWF2VgpG0JWJ8Fv1PhlgT5+B+uNq2cA3Rt1Yt/ryoR+vQNOQcIEgdCdfH0jr3bDpihAw1A==";
+    };
+    dependencies = [
+      sources."double-ended-queue-2.1.0-0"
+      sources."redis-commands-1.5.0"
+      sources."redis-parser-2.6.0"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Redis client library";
+      homepage = https://github.com/NodeRedis/node_redis;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = true;
+    reconstructLock = true;
+  };
+  connect-redis = nodeEnv.buildNodePackage {
+    name = "connect-redis";
+    packageName = "connect-redis";
+    version = "3.4.1";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/connect-redis/-/connect-redis-3.4.1.tgz";
+      sha512 = "oXNcpLg/PJ6G4gbhyGwrQK9mUQTKYa2aEnOH9kWIxbNUjIFPqUmzz75RdLp5JTPSjrBVcz+9ll4sSxfvlW0ZLA==";
+    };
+    dependencies = [
+      sources."debug-4.1.1"
+      sources."double-ended-queue-2.1.0-0"
+      sources."ms-2.1.1"
+      sources."redis-2.8.0"
+      sources."redis-commands-1.5.0"
+      sources."redis-parser-2.6.0"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Redis session store for Connect";
+      homepage = "https://github.com/visionmedia/connect-redis#readme";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = true;
+    reconstructLock = true;
+  };
+  async = nodeEnv.buildNodePackage {
+    name = "async";
+    packageName = "async";
+    version = "3.0.1";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/async/-/async-3.0.1.tgz";
+      sha512 = "ZswD8vwPtmBZzbn9xyi8XBQWXH3AvOQ43Za1KWYq7JeycrZuUYzx01KvHcVbXltjqH4y0MWrQ33008uLTqXuDw==";
+    };
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Higher-order functions and common patterns for asynchronous code";
+      homepage = https://caolan.github.io/async/;
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = true;
+    reconstructLock = true;
+  };
+  request = nodeEnv.buildNodePackage {
+    name = "request";
+    packageName = "request";
+    version = "2.88.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/request/-/request-2.88.0.tgz";
+      sha512 = "NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==";
+    };
+    dependencies = [
+      sources."ajv-6.10.0"
+      sources."asn1-0.2.4"
+      sources."assert-plus-1.0.0"
+      sources."asynckit-0.4.0"
+      sources."aws-sign2-0.7.0"
+      sources."aws4-1.8.0"
+      sources."bcrypt-pbkdf-1.0.2"
+      sources."caseless-0.12.0"
+      sources."combined-stream-1.0.8"
+      sources."core-util-is-1.0.2"
+      sources."dashdash-1.14.1"
+      sources."delayed-stream-1.0.0"
+      sources."ecc-jsbn-0.1.2"
+      sources."extend-3.0.2"
+      sources."extsprintf-1.3.0"
+      sources."fast-deep-equal-2.0.1"
+      sources."fast-json-stable-stringify-2.0.0"
+      sources."forever-agent-0.6.1"
+      sources."form-data-2.3.3"
+      sources."getpass-0.1.7"
+      sources."har-schema-2.0.0"
+      sources."har-validator-5.1.3"
+      sources."http-signature-1.2.0"
+      sources."is-typedarray-1.0.0"
+      sources."isstream-0.1.2"
+      sources."jsbn-0.1.1"
+      sources."json-schema-0.2.3"
+      sources."json-schema-traverse-0.4.1"
+      sources."json-stringify-safe-5.0.1"
+      sources."jsprim-1.4.1"
+      sources."mime-db-1.40.0"
+      sources."mime-types-2.1.24"
+      sources."oauth-sign-0.9.0"
+      sources."performance-now-2.1.0"
+      sources."psl-1.1.32"
+      sources."punycode-2.1.1"
+      sources."qs-6.5.2"
+      sources."safe-buffer-5.1.2"
+      sources."safer-buffer-2.1.2"
+      sources."sshpk-1.16.1"
+      (sources."tough-cookie-2.4.3" // {
+        dependencies = [
+          sources."punycode-1.4.1"
+        ];
+      })
+      sources."tunnel-agent-0.6.0"
+      sources."tweetnacl-0.14.5"
+      sources."uri-js-4.2.2"
+      sources."uuid-3.3.2"
+      sources."verror-1.10.0"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "Simplified HTTP request client.";
+      homepage = "https://github.com/request/request#readme";
+      license = "Apache-2.0";
+    };
+    production = true;
+    bypassCache = true;
+    reconstructLock = true;
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/networking/airfield/node.nix b/nixpkgs/pkgs/tools/networking/airfield/node.nix
new file mode 100644
index 000000000000..4377681e20d8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/airfield/node.nix
@@ -0,0 +1,17 @@
+# This file has been generated by node2nix 1.7.0. Do not edit!
+
+{pkgs ? import <nixpkgs> {
+    inherit system;
+  }, system ? builtins.currentSystem, nodejs ? pkgs.nodejs-10_x}:
+
+let
+  nodeEnv = import ../../../development/node-packages/node-env.nix {
+    inherit (pkgs) stdenv python2 utillinux runCommand writeTextFile;
+    inherit nodejs;
+    libtool = if pkgs.stdenv.isDarwin then pkgs.darwin.cctools else null;
+  };
+in
+import ./node-packages.nix {
+  inherit (pkgs) fetchurl fetchgit;
+  inherit nodeEnv;
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/networking/altermime/default.nix b/nixpkgs/pkgs/tools/networking/altermime/default.nix
new file mode 100644
index 000000000000..b1481b2208c6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/altermime/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  baseName = "altermime";
+  name = "${baseName}-${version}";
+  version = "0.3.11";
+
+  src = fetchurl {
+    url = "https://pldaniels.com/${baseName}/${name}.tar.gz";
+    sha256 = "15zxg6spcmd35r6xbidq2fgcg2nzyv1sbbqds08lzll70mqx4pj7";
+  };
+
+  NIX_CFLAGS_COMPILE = toString [
+    "-Wno-error=format"
+    "-Wno-error=format-truncation"
+    "-Wno-error=pointer-compare"
+    "-Wno-error=memset-elt-size"
+    "-Wno-error=restrict"
+  ];
+
+  postPatch = ''
+    sed -i Makefile -e "s@/usr/local@$out@"
+    mkdir -p "$out/bin"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "MIME alteration tool";
+    maintainers = [ maintainers.raskin ];
+    platforms = platforms.linux;
+    license.fullName = "alterMIME LICENSE";
+    downloadPage = "https://pldaniels.com/altermime/";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/amass/default.nix b/nixpkgs/pkgs/tools/networking/amass/default.nix
new file mode 100644
index 000000000000..73f54f7dbff7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/amass/default.nix
@@ -0,0 +1,44 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "amass";
+  version = "3.0.25";
+
+  src = fetchFromGitHub {
+    owner = "OWASP";
+    repo = "Amass";
+    rev = "v${version}";
+    sha256 = "04vsahqmbs9rysdwyjq0zgwcn6dgdvkyz8lsp1g1p9d3amrgbqjy";
+  };
+
+  modSha256 = "0kwi4pys08kszrh5kz64gs68k20y00v2zqh5hyrgpy9nivqrlj62";
+
+  outputs = [ "out" "wordlists" ];
+
+  postInstall = ''
+    mkdir -p $wordlists
+    cp -R $src/wordlists/*.txt $wordlists
+    gzip $wordlists/*.txt
+  '';
+
+  meta = with lib; {
+    description = "In-Depth DNS Enumeration and Network Mapping";
+    longDescription = ''
+      The OWASP Amass tool suite obtains subdomain names by scraping data
+      sources, recursive brute forcing, crawling web archives,
+      permuting/altering names and reverse DNS sweeping. Additionally, Amass
+      uses the IP addresses obtained during resolution to discover associated
+      netblocks and ASNs. All the information is then used to build maps of the
+      target networks.
+
+      Amass ships with a set of wordlist (to be used with the amass -w flag)
+      that are found under the wordlists output.
+      '';
+    homepage = "https://www.owasp.org/index.php/OWASP_Amass_Project";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ kalbasit ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/argus-clients/default.nix b/nixpkgs/pkgs/tools/networking/argus-clients/default.nix
new file mode 100644
index 000000000000..08db7b4f58d8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/argus-clients/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchurl, libpcap, bison, flex, cyrus_sasl, tcp_wrappers, pkgconfig, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "argus-clients";
+  version = "3.0.8.2";
+
+  src = fetchurl {
+    url = "http://qosient.com/argus/src/${pname}-${version}.tar.gz";
+    sha256 = "1c9vj6ma00gqq9h92fg71sxcsjzz912166sdg90ahvnmvmh3l1rj";
+  };
+
+  patchPhase = ''
+    for file in ./examples/*/*.pl; do
+      substituteInPlace $file \
+        --subst-var-by PERLBIN ${perl}/bin/perl
+    done
+    '';
+
+  configureFlags = [ "--with-perl=${perl}/bin/perl" ];
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libpcap bison cyrus_sasl tcp_wrappers flex ];
+
+  meta = with stdenv.lib; {
+    description = "Clients for ARGUS";
+    longDescription = ''Clients for Audit Record Generation and
+    Utilization System (ARGUS). The Argus Project is focused on developing all
+    aspects of large scale network situtational awareness derived from
+    network activity audit. Argus, itself, is next-generation network
+    flow technology, processing packets, either on the wire or in
+    captures, into advanced network flow data. The data, its models,
+    formats, and attributes are designed to support Network
+    Operations, Performance and Security Management. If you need to
+    know what is going on in your network, right now or historically,
+    you will find Argus a useful tool. '';
+    homepage = http://qosient.com/argus;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ leenaars ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/argus/default.nix b/nixpkgs/pkgs/tools/networking/argus/default.nix
new file mode 100644
index 000000000000..bb9abccc933a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/argus/default.nix
@@ -0,0 +1,46 @@
+{ stdenv, fetchurl, libpcap, bison, flex, cyrus_sasl, tcp_wrappers,
+  pkgconfig, procps, which, wget, lsof, net-snmp, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "argus";
+  version = "3.0.8.2";
+
+  src = fetchurl {
+    url = "http://qosient.com/argus/src/${pname}-${version}.tar.gz";
+    sha256 = "1zzf688dbbcb5z2r9v1p28rddns6znzx35nc05ygza6lp7aknkna";
+  };
+
+  nativeBuildInputs = [ pkgconfig bison flex ];
+  buildInputs = [ libpcap cyrus_sasl tcp_wrappers ];
+  propagatedBuildInputs = [ procps which wget lsof net-snmp ];
+
+  patchPhase = ''
+     substituteInPlace events/argus-extip.pl \
+       --subst-var-by PERLBIN ${perl}/bin/perl
+    substituteInPlace events/argus-lsof.pl \
+      --replace "\`which lsof\`" "\"${lsof}/bin/lsof\"" \
+      --subst-var-by PERLBIN ${perl}/bin/perl
+    substituteInPlace events/argus-vmstat.sh \
+      --replace vm_stat ${procps}/bin/vmstat
+    substituteInPlace events/argus-snmp.sh \
+      --replace /usr/bin/snmpget ${stdenv.lib.getBin net-snmp}/bin/snmpget \
+      --replace /usr/bin/snmpwalk ${stdenv.lib.getBin net-snmp}/bin/snmpwalk
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Audit Record Generation and Utilization System for networks";
+    longDescription = ''The Argus Project is focused on developing all
+    aspects of large scale network situtational awareness derived from
+    network activity audit. Argus, itself, is next-generation network
+    flow technology, processing packets, either on the wire or in
+    captures, into advanced network flow data. The data, its models,
+    formats, and attributes are designed to support Network
+    Operations, Performance and Security Management. If you need to
+    know what is going on in your network, right now or historically,
+    you will find Argus a useful tool. '';
+    homepage = http://qosient.com/argus;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ leenaars ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/aria2/default.nix b/nixpkgs/pkgs/tools/networking/aria2/default.nix
new file mode 100644
index 000000000000..0b4d77881b4d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/aria2/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchpatch, fetchFromGitHub, pkgconfig, autoreconfHook
+, openssl, c-ares, libxml2, sqlite, zlib, libssh2
+, cppunit, sphinx
+, Security
+}:
+
+stdenv.mkDerivation rec {
+  pname = "aria2";
+  version = "1.35.0";
+
+  src = fetchFromGitHub {
+    owner = "aria2";
+    repo = "aria2";
+    rev = "release-${version}";
+    sha256 = "195r3711ly3drf9jkygwdc2m7q99hiqlfrig3ip1127b837gzsf9";
+  };
+
+  nativeBuildInputs = [ pkgconfig autoreconfHook sphinx ];
+
+  buildInputs = [ openssl c-ares libxml2 sqlite zlib libssh2 ] ++
+    stdenv.lib.optional stdenv.isDarwin Security;
+
+  configureFlags = [ "--with-ca-bundle=/etc/ssl/certs/ca-certificates.crt" ];
+
+  prePatch = ''
+    patchShebangs doc/manual-src/en/mkapiref.py
+  '';
+
+  checkInputs = [ cppunit ];
+  doCheck = false; # needs the net
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    homepage = https://aria2.github.io;
+    description = "A lightweight, multi-protocol, multi-source, command-line download utility";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ filalex77 koral ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/arping/default.nix b/nixpkgs/pkgs/tools/networking/arping/default.nix
new file mode 100644
index 000000000000..5d1ebc748003
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/arping/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, libnet, libpcap }:
+
+stdenv.mkDerivation rec {
+  version = "2.20";
+  pname = "arping";
+
+  buildInputs = [ libnet libpcap ];
+
+  src = fetchFromGitHub {
+    owner = "ThomasHabets";
+    repo = pname;
+    rev = "${pname}-${version}";
+    sha256 = "0gmyip552k6mq7013cvy5yc4akn2rz28s3g4x4vdq35vnxf66cyk";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with stdenv.lib; {
+    description = "Broadcasts a who-has ARP packet on the network and prints answers";
+    homepage = https://github.com/ThomasHabets/arping;
+    license = with licenses; [ gpl2 ];
+    maintainers = [ maintainers.michalrus ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/arpoison/default.nix b/nixpkgs/pkgs/tools/networking/arpoison/default.nix
new file mode 100644
index 000000000000..cedd8597870b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/arpoison/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchzip, libnet }:
+
+stdenv.mkDerivation rec {
+  name = "arpoison-0.7";
+
+  buildInputs = [ libnet ];
+
+  src = fetchzip {
+    url = "http://www.arpoison.net/${name}.tar.gz";
+    sha256 = "0krhszx3s0qwfg4rma5a51ak71nnd9xfs2ibggc3hwiz506s2x37";
+  };
+
+  postPatch = "substituteInPlace Makefile --replace gcc cc";
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man/man8
+    gzip arpoison.8
+    cp arpoison $out/bin
+    cp arpoison.8.gz $out/share/man/man8
+  '';
+
+  meta = with stdenv.lib; {
+    description = "UNIX arp cache update utility";
+    homepage = http://www.arpoison.net/;
+    license = with licenses; [ gpl2 ];
+    maintainers = [ maintainers.michalrus ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/assh/default.nix b/nixpkgs/pkgs/tools/networking/assh/default.nix
new file mode 100644
index 000000000000..bfb1abaeaf23
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/assh/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, buildGoPackage, fetchFromGitHub, openssh, makeWrapper }:
+
+buildGoPackage rec {
+  pname = "assh";
+  version = "2.7.0";
+
+  goPackagePath = "github.com/moul/advanced-ssh-config";
+  subPackages = [ "cmd/assh" ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    wrapProgram "$bin/bin/assh" \
+      --prefix PATH : ${openssh}/bin
+  '';
+
+  src = fetchFromGitHub {
+    repo = "advanced-ssh-config";
+    owner = "moul";
+    rev = "v${version}";
+    sha256 = "0jfpcr8990lb7kacadbishdkz5l8spw24ksdlb79x34sdbbp3fm6";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Advanced SSH config - Regex, aliases, gateways, includes and dynamic hosts";
+    homepage = https://github.com/moul/advanced-ssh-config;
+    license = licenses.mit;
+    maintainers = with maintainers; [ zzamboni ];
+    platforms = with platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/asynk/default.nix b/nixpkgs/pkgs/tools/networking/asynk/default.nix
new file mode 100644
index 000000000000..4d069a7e6d7d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/asynk/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, fetchurl, python2, python2Packages, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  version = "2.0.0";
+  pname = "ASynK";
+
+  src = fetchurl {
+    name = "${pname}-${version}.tar.gz";
+    url = "https://github.com/skarra/ASynK/archive/v${version}.tar.gz";
+    sha256 = "1bp30437mnls0kzm0525p3bg5nw9alpqrqhw186f6zp9i4y5znp1";
+  };
+
+  propagatedBuildInputs = with python2Packages;
+    [ python2 makeWrapper tornado requests dateutil
+      vobject gdata caldavclientlibrary-asynk ];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/lib
+    cp asynk.py $out/bin/
+    cp state.init.json $out/
+    cp -R config $out/
+    cp lib/*.py $out/lib # */
+    cp -R lib/s $out/lib/
+    cp -R asynk $out/
+
+    substituteInPlace $out/bin/asynk.py \
+      --replace "ASYNK_BASE_DIR    = os.path.dirname(os.path.abspath(__file__))" "ASYNK_BASE_DIR    = \"$out\""
+
+    for file in `find $out/asynk -type f`; do
+      # Oh yeah, tab characters!
+      substituteInPlace $file \
+        --replace 'from   vobject        import vobject' 'from vobject import *' \
+        --replace 'from   vobject    import vobject' 'from vobject import *'
+    done
+
+    wrapProgram "$out/bin/asynk.py" \
+      --prefix PYTHONPATH : "$PYTHONPATH"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://asynk.io/;
+    description = "Flexible contacts synchronization program";
+    license = licenses.agpl3;
+    maintainers = [ ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/atftp/default.nix b/nixpkgs/pkgs/tools/networking/atftp/default.nix
new file mode 100644
index 000000000000..7fcd677044fe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/atftp/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchurl, readline, tcp_wrappers, pcre, makeWrapper, gcc }:
+
+stdenv.mkDerivation rec {
+  pname = "atftp";
+  version = "0.7.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/atftp/${pname}-${version}.tar.gz";
+    sha256 = "0hah3fhzl6vfs381883vbvf4d13cdhsyf0x7ncbl55wz9rkq1l0s";
+  };
+
+  buildInputs = [ readline tcp_wrappers pcre makeWrapper gcc ];
+
+  # Expects pre-GCC5 inline semantics
+  NIX_CFLAGS_COMPILE = "-std=gnu89";
+
+  doCheck = false; # fails
+
+  meta = {
+    description = "Advanced tftp tools";
+    maintainers = [ lib.maintainers.raskin ];
+    platforms = lib.platforms.linux;
+    license = lib.licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/atinout/default.nix b/nixpkgs/pkgs/tools/networking/atinout/default.nix
new file mode 100644
index 000000000000..16b3ee668da6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/atinout/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchgit, ronn, mount }:
+
+stdenv.mkDerivation rec {
+  name = "atinout-${version}";
+  version = "0.9.2-alpha";
+
+  NIX_CFLAGS_COMPILE = "-Werror=implicit-fallthrough=0";
+  LANG = "C.UTF-8";
+  nativeBuildInputs = [ ronn mount ];
+
+  src = fetchgit {
+    url = "git://git.code.sf.net/p/atinout/code";
+    rev = "4976a6cb5237373b7e23cd02d7cd5517f306e3f6";
+    sha256 = "0bninv2bklz7ly140cxx8iyaqjlq809jjx6xqpimn34ghwsaxbpv";
+  };
+
+  installPhase = ''
+    make PREFIX=$out install
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://atinout.sourceforge.net;
+    description = "Tool for talking to modems";
+    platforms = platforms.unix;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ bendlas ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/autossh/default.nix b/nixpkgs/pkgs/tools/networking/autossh/default.nix
new file mode 100644
index 000000000000..55b464607b11
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/autossh/default.nix
@@ -0,0 +1,34 @@
+{stdenv, fetchurl, openssh}:
+
+stdenv.mkDerivation rec {
+  name = "autossh-1.4g";
+
+  src = fetchurl {
+    url = "http://www.harding.motd.ca/autossh/${name}.tgz";
+    sha256 = "0xqjw8df68f4kzkns5gcah61s5wk0m44qdk2z1d6388w6viwxhsz";
+  };
+
+  preConfigure = ''
+    export ac_cv_func_malloc_0_nonnull=yes
+    export ac_cv_func_realloc_0_nonnull=yes
+  '';
+
+  nativeBuildInputs = [ openssh ];
+
+  installPhase =
+    ''
+      install -D -m755 autossh      $out/bin/autossh                          || return 1
+      install -D -m644 CHANGES      $out/share/doc/autossh/CHANGES            || return 1
+      install -D -m644 README       $out/share/doc/autossh/README             || return 1
+      install -D -m644 autossh.host $out/share/autossh/examples/autossh.host  || return 1
+      install -D -m644 rscreen      $out/share/autossh/examples/rscreen       || return 1
+      install -D -m644 autossh.1    $out/man/man1/autossh.1                   || return 1
+    '';
+
+  meta = with stdenv.lib; {
+    homepage = https://www.harding.motd.ca/autossh/;
+    description = "Automatically restart SSH sessions and tunnels";
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/axel/default.nix b/nixpkgs/pkgs/tools/networking/axel/default.nix
new file mode 100644
index 000000000000..a9ddd9a8b682
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/axel/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, autoconf-archive
+, pkgconfig, gettext, libssl, txt2man }:
+
+stdenv.mkDerivation rec {
+  pname = "axel";
+  version = "2.17.6";
+
+  src = fetchFromGitHub {
+    owner = "axel-download-accelerator";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "011cpkf6hpia5b5wfhy84fxfqpishdkvrg0kpbfprymq9bxjp0yl";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig autoconf-archive txt2man ];
+
+  buildInputs = [ gettext libssl ];
+
+  installFlags = [ "ETCDIR=${placeholder "out"}/etc" ];
+
+  meta = with stdenv.lib; {
+    description = "Console downloading program with some features for parallel connections for faster downloading";
+    homepage = "https://github.com/axel-download-accelerator/axel";
+    maintainers = with maintainers; [ pSub ];
+    platforms = with platforms; unix;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/babeld/default.nix b/nixpkgs/pkgs/tools/networking/babeld/default.nix
new file mode 100644
index 000000000000..5fccd9c0ebcb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/babeld/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl, nixosTests }:
+
+stdenv.mkDerivation rec {
+  pname = "babeld";
+  version = "1.9.1";
+
+  src = fetchurl {
+    url = "http://www.pps.univ-paris-diderot.fr/~jch/software/files/${pname}-${version}.tar.gz";
+    sha256 = "1d503igqv9s5pgrhvxp1czjy2xfsjhagyyh2iny7g4cjvl0kq6qy";
+  };
+
+  preBuild = ''
+    makeFlags="PREFIX=$out ETCDIR=$out/etc"
+  '';
+
+  passthru.tests.babeld = nixosTests.babeld;
+
+  meta = {
+    homepage = http://www.pps.univ-paris-diderot.fr/~jch/software/babel/;
+    description = "Loop-avoiding distance-vector routing protocol";
+    license = stdenv.lib.licenses.mit;
+    maintainers = with stdenv.lib.maintainers; [ fpletz ];
+    platforms = with stdenv.lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/badvpn/default.nix b/nixpkgs/pkgs/tools/networking/badvpn/default.nix
new file mode 100644
index 000000000000..c9ebc12b0db8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/badvpn/default.nix
@@ -0,0 +1,39 @@
+{stdenv, fetchurl, cmake, openssl, nss, pkgconfig, nspr, bash, debug ? false}:
+let
+  s = # Generated upstream information
+  rec {
+    baseName="badvpn";
+    version="1.999.130";
+    name="${baseName}-${version}";
+    hash="02b1fra43l75mljkhrq45vcrrqv0znicjn15g7nbqx3jppzbpm5z";
+    url="https://github.com/ambrop72/badvpn/archive/1.999.130.tar.gz";
+    sha256="02b1fra43l75mljkhrq45vcrrqv0znicjn15g7nbqx3jppzbpm5z";
+  };
+
+  buildInputs = [
+    cmake openssl nss nspr
+  ];
+  compileFlags = "-O3 ${stdenv.lib.optionalString (!debug) "-DNDEBUG"}";
+in
+stdenv.mkDerivation {
+  inherit (s) name version;
+  nativeBuildInputs = [ pkgconfig ];
+  inherit buildInputs;
+  src = fetchurl {
+    inherit (s) url sha256;
+  };
+
+  preConfigure = ''
+    find . -name '*.sh' -exec sed -e 's@#!/bin/sh@${stdenv.shell}@' -i '{}' ';'
+    find . -name '*.sh' -exec sed -e 's@#!/bin/bash@${bash}/bin/bash@' -i '{}' ';'
+    cmakeFlagsArray=("-DCMAKE_BUILD_TYPE=" "-DCMAKE_C_FLAGS=${compileFlags}");
+  '';
+
+  meta = {
+    inherit (s) version;
+    description = ''A set of network-related (mostly VPN-related) tools'';
+    license = stdenv.lib.licenses.bsd3 ;
+    maintainers = [stdenv.lib.maintainers.raskin];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/badvpn/default.upstream b/nixpkgs/pkgs/tools/networking/badvpn/default.upstream
new file mode 100644
index 000000000000..2a85ba7cb519
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/badvpn/default.upstream
@@ -0,0 +1,3 @@
+url https://github.com/ambrop72/badvpn/releases
+version_link '[0-9][.]tar[.][a-z0-9]+$'
+version '.*/([0-9.]+)[.]tar[.].*' '\1'
diff --git a/nixpkgs/pkgs/tools/networking/bandwhich/default.nix b/nixpkgs/pkgs/tools/networking/bandwhich/default.nix
new file mode 100644
index 000000000000..a399e7209af3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/bandwhich/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, rustPlatform, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "bandwhich";
+  version = "0.10.0";
+
+  src = fetchFromGitHub {
+    owner = "imsnif";
+    repo = pname;
+    rev = version;
+    sha256 = "0xq2lv06dx7g00b4amk131krlsb6acsz7b228pn3iz6gy31fhz3y";
+  };
+
+  cargoSha256 = "1sa81570cvvpqgdcpnb08b0q4c6ap8a2wxfp2z336jzbv0zgv8a6";
+
+  buildInputs = stdenv.lib.optional stdenv.isDarwin Security;
+
+  meta = with stdenv.lib; {
+    description = "A CLI utility for displaying current network utilization";
+    longDescription = ''
+      bandwhich sniffs a given network interface and records IP packet size, cross
+      referencing it with the /proc filesystem on linux or lsof on MacOS. It is
+      responsive to the terminal window size, displaying less info if there is
+      no room for it. It will also attempt to resolve ips to their host name in
+      the background using reverse DNS on a best effort basis.
+    '';
+    homepage = "https://github.com/imsnif/bandwhich";
+    license = licenses.mit;
+    maintainers = with maintainers; [ filalex77 ma27 ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/bgpdump/default.nix b/nixpkgs/pkgs/tools/networking/bgpdump/default.nix
new file mode 100644
index 000000000000..3c84de29bf1f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/bgpdump/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl, autoreconfHook, zlib, bzip2 }:
+
+stdenv.mkDerivation rec {
+  pname = "bgpdump";
+  version = "1.6.0";
+
+  src = fetchurl {
+    url = "https://ris.ripe.net/source/bgpdump/libbgpdump-1.6.0.tgz";
+    sha256 = "144369gj35mf63nz4idqwsvgsirw7fybm8kkk07yymrjp8jr3aqk";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ zlib bzip2 ];
+
+  meta = {
+    homepage = https://bitbucket.org/ripencc/bgpdump/;
+    description = ''Analyze dump files produced by Zebra/Quagga or MRT'';
+    license = stdenv.lib.licenses.hpnd;
+    maintainers = with stdenv.lib.maintainers; [ lewo ];
+    platforms = with stdenv.lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/biosdevname/default.nix b/nixpkgs/pkgs/tools/networking/biosdevname/default.nix
new file mode 100644
index 000000000000..7cd7254518ad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/biosdevname/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, zlib, pciutils }:
+
+stdenv.mkDerivation rec {
+  pname = "biosdevname";
+  version = "0.7.3";
+
+  src = fetchFromGitHub {
+    owner = "dell";
+    repo = "biosdevname";
+    rev = "v${version}";
+    sha256 = "19wbb79x9h79k55sgd4dylvdbhhrvfaiaknbw9s1wvfmirkxa1dz";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ zlib pciutils ];
+
+  # Don't install /lib/udev/rules.d/*-biosdevname.rules
+  patches = [ ./makefile.patch ];
+
+  configureFlags = [ "--sbindir=\${out}/bin" ];
+
+  meta = with stdenv.lib; {
+    description = "Udev helper for naming devices per BIOS names";
+    license = licenses.gpl2;
+    platforms = ["x86_64-linux" "i686-linux"];
+    maintainers = with maintainers; [ cstrahan ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/biosdevname/makefile.patch b/nixpkgs/pkgs/tools/networking/biosdevname/makefile.patch
new file mode 100644
index 000000000000..0fc083f9096f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/biosdevname/makefile.patch
@@ -0,0 +1,13 @@
+diff --git a/Makefile.am b/Makefile.am
+index 14d9a92..9e324d2 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -8,8 +8,6 @@ dist_noinst_DATA = biosdevname.rules.in biosdevname.spec.fedora biosdevname.spec
+ 
+ CLEANFILES = version src/bios_dev_name.h
+ install-data-local:
+-	mkdir -p $(DESTDIR)@RULEDIR@
+-	$(INSTALL_DATA) $(top_srcdir)/biosdevname.rules.in $(DESTDIR)@RULEDEST@
+ 
+ uninstall-local:
+ 	rm -f $(DESTDIR)@RULEDEST@
diff --git a/nixpkgs/pkgs/tools/networking/boringtun/default.nix b/nixpkgs/pkgs/tools/networking/boringtun/default.nix
new file mode 100644
index 000000000000..dfb13f2168b4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/boringtun/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub, rustPlatform, darwin }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "boringtun";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "cloudflare";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1mijy51hd8c4as9g4ivpfxismc9m5m3nhibfvclh3wrlcmp1ha9c";
+  };
+
+  cargoSha256 = "1gvmshwg9b486933vfgkg2r8nn6w6dyz42hqjy74p785fcg0v5hs";
+
+  buildInputs = stdenv.lib.optional stdenv.isDarwin darwin.apple_sdk.frameworks.Security;
+
+  # Testing this project requires sudo, Docker and network access, etc.
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "Userspace WireGuard® implementation in Rust";
+    homepage = https://github.com/cloudflare/boringtun;
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ xrelkd marsam ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/brook/default.nix b/nixpkgs/pkgs/tools/networking/brook/default.nix
new file mode 100644
index 000000000000..482a949482ff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/brook/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "brook";
+  version = "20190601";
+
+  goPackagePath = "github.com/txthinking/brook";
+
+  src = fetchFromGitHub {
+    owner = "txthinking";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "04gx1p447wabw3d18s9sm8ynlvj2bp8ac9dsgs08kd1dyrsjlljk";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/txthinking/brook;
+    description = "A cross-platform Proxy/VPN software";
+    license = with licenses; [ gpl3 ];
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ xrelkd ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/networking/brook/deps.nix b/nixpkgs/pkgs/tools/networking/brook/deps.nix
new file mode 100644
index 000000000000..a9a8d5e43e3b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/brook/deps.nix
@@ -0,0 +1,119 @@
+[
+  {
+    goPackagePath = "github.com/urfave/cli";
+    fetch = {
+      type = "git";
+      url = "https://github.com/urfave/cli";
+      rev = "a1c7408de3f632d86eee604a3bb755f1ffb68226";
+      sha256 = "1fq0amfgpccf35nll7xw0k6smwrb7h0wy62n70kfd9kvh64n8hbn";
+    };
+  }
+  {
+    goPackagePath = "github.com/mdp/qrterminal";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mdp/qrterminal";
+      rev = "ee9ef6b3f704870848e4022c4bc8c4d8c192516c";
+      sha256 = "19dwrmkd1hqjngpmz05y9d0gxzxmdx1plya91ja08s1c1nqc264f";
+    };
+  }
+  {
+    goPackagePath = "github.com/miekg/dns";
+    fetch = {
+      type = "git";
+      url = "https://github.com/miekg/dns";
+      rev = "d16ecb693e3f8d524769fefce2192a4c92207ff9";
+      sha256 = "0x0danna6nzkbiprwjpj0bix2m25lsbvna1bncdm233l3prh8sb1";
+    };
+  }
+  {
+    goPackagePath = "github.com/patrickmn/go-cache";
+    fetch = {
+      type = "git";
+      url = "https://github.com/patrickmn/go-cache";
+      rev = "5633e0862627c011927fa39556acae8b1f1df58a";
+      sha256 = "1zjk6yvig68zcbipa85dxz9xa82fk4zp4q33hwzxdv6h68wga5bs";
+    };
+  }
+  {
+    goPackagePath = "github.com/shurcooL/sanitized_anchor_name";
+    fetch = {
+      type = "git";
+      url = "https://github.com/shurcooL/sanitized_anchor_name";
+      rev = "7bfe4c7ecddb3666a94b053b422cdd8f5aaa3615";
+      sha256 = "1gv9p2nr46z80dnfjsklc6zxbgk96349sdsxjz05f3z6wb6m5l8f";
+    };
+  }
+  {
+    goPackagePath = "github.com/txthinking/gotun2socks";
+    fetch = {
+      type = "git";
+      url = "https://github.com/txthinking/gotun2socks";
+      rev = "35016fdae05e78db993d43f55eb96ddbe3958252";
+      sha256 = "11rl8pqyd6jzi5alpymzi0i5q7pk2492di44v85g7r24y6livrjg";
+    };
+  }
+  {
+    goPackagePath = "github.com/txthinking/socks5";
+    fetch = {
+      type = "git";
+      url = "https://github.com/txthinking/socks5";
+      rev = "254e122c4eaf8657900905ed5bed5777870b9df8";
+      sha256 = "1q43sxzacj216mdzl44khhx51w1z78jpraw955dnjv9va0zqbhmi";
+    };
+  }
+  {
+    goPackagePath = "github.com/txthinking/x";
+    fetch = {
+      type = "git";
+      url = "https://github.com/txthinking/x";
+      rev = "8956479d309307bcd91c2ec89370118aef61abf7";
+      sha256 = "0vfsbm5025cpmqpc506vz1vqlzmcw5sc1zrjgx8z22kp1q1slylv";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev = "20be4c3c3ed52bfccdb2d59a412ee1a936d175a7";
+      sha256 = "1ph7y8v30hc95h1dwr7vrhg1nzs47a261qin6zg8mhf12g5k2lxb";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev = "f3200d17e092c607f615320ecaad13d87ad9a2b3";
+      sha256 = "1mskh7p80dd8j1ffy16917d3cyy7lfh1gb56n4rq9g1bwckz4lwy";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/text";
+      rev = "342b2e1fbaa52c93f31447ad2c6abc048c63e475";
+      sha256 = "0flv9idw0jm5nm8lx25xqanbkqgfiym6619w575p7nrdh0riqwqh";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/russross/blackfriday.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/russross/blackfriday.v2";
+      rev = "d3b5b032dc8e8927d31a5071b56e14c89f045135";
+      sha256 = "0nlz7isdd4rgnwzs68499hlwicxz34j2k2a0b8jy0y7ycd2bcr5j";
+    };
+  }
+  {
+    goPackagePath = "rsc.io/qr";
+    fetch = {
+      type = "git";
+      url = "https://github.com/rsc/qr";
+      rev = "ca9a01fc2f9505024045632c50e5e8cd6142fafe";
+      sha256 = "04yx493g0fqp8i59zjxnl4k3s0cl0kr5m8xh0ph8m10r1hkw0xr3";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/networking/bsd-finger/default.nix b/nixpkgs/pkgs/tools/networking/bsd-finger/default.nix
new file mode 100644
index 000000000000..d011665a492b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/bsd-finger/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl }:
+
+# !!! Duplication: this package is almost exactly the same as `bsd-finger'.
+
+stdenv.mkDerivation rec {
+  name = "bsd-finger-0.17";
+
+  src = fetchurl {
+    url = "ftp://ftp.metalab.unc.edu/pub/linux/system/network/finger/${name}.tar.gz";
+    sha256 = "1yhkiv0in588il7f84k2xiy78g9lv12ll0y7047gazhiimk5v244";
+  };
+
+  NIX_CFLAGS_COMPILE = "-D_GNU_SOURCE";
+
+  patches = [ ./ubuntu-0.17-9.patch ];
+
+  preBuild = "cd finger";
+
+  preInstall = '' mkdir -p $out/man/man1 $out/bin '';
+
+  meta = with stdenv.lib; {
+    platforms = platforms.linux;
+    license = licenses.bsdOriginal;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/bsd-finger/ubuntu-0.17-9.patch b/nixpkgs/pkgs/tools/networking/bsd-finger/ubuntu-0.17-9.patch
new file mode 100644
index 000000000000..24decb60281f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/bsd-finger/ubuntu-0.17-9.patch
@@ -0,0 +1,261 @@
+--- bsd-finger-0.17.orig/finger/finger.1
++++ bsd-finger-0.17/finger/finger.1
+@@ -169,16 +169,14 @@
+ must be able to see the
+ .Pa .nofinger
+ file. This generally means that the home directory containing the file
+-must have the other-users-execute bit set (o+w). See
++must have the other-users-execute bit set (o+x). See
+ .Xr chmod 1 .
+ If you use this feature for privacy, please test it with ``finger
+ @localhost'' before relying on it, just in case.
+ .It ~/.plan
+ .It ~/.project
+-.It ~/.pgp
++.It ~/.pgpkey
+ These files are printed as part of a long-format request. The
+-.Pa .project
+-file is limited to one line; the
+ .Pa .plan
+ file may be arbitrarily long.
+ .El
+--- bsd-finger-0.17.orig/finger/finger.c
++++ bsd-finger-0.17/finger/finger.c
+@@ -77,7 +77,7 @@
+ #include "../version.h"
+ 
+ static void loginlist(void);
+-static void userlist(int argc, char *argv[]);
++static int userlist(int argc, char *argv[]);
+ 
+ int lflag, pplan;
+ static int sflag, mflag;
+@@ -92,6 +92,7 @@
+ 
+ int main(int argc, char *argv[]) {
+ 	int ch;
++	int err = 0;
+ 	struct sockaddr_in sin;
+ 	socklen_t slen = sizeof(sin);
+ 
+@@ -159,7 +160,7 @@
+ 		}
+ 	} 
+ 	else {
+-		userlist(argc, argv);
++		err = userlist(argc, argv);
+ 		/*
+ 		 * Assign explicit "large" format if names given and -s not
+ 		 * explicitly stated.  Force the -l AFTER we get names so any
+@@ -172,7 +173,7 @@
+ 		if (lflag) lflag_print();
+ 		else sflag_print();
+ 	}
+-	return 0;
++	return err;
+ }
+ 
+ /* Returns 1 if .nofinger is found and enable_nofinger is set. */
+@@ -181,10 +182,16 @@
+ check_nofinger(struct passwd *pw)
+ {
+ 	if (enable_nofinger) {
+-		char path[PATH_MAX];
+ 		struct stat tripe;
+-		snprintf(path, sizeof(path), "%s/.nofinger", pw->pw_dir);
+-		if (stat(path, &tripe)==0) {
++		int ret;
++		char *path;
++		if (asprintf(&path, "%s/.nofinger", pw->pw_dir) < 0) {
++			eprintf("finger: Out of space.\n");
++			exit(1);
++		}
++		ret = stat(path, &tripe);
++		free(path);
++		if (!ret) {
+ 			return 1;
+ 		}
+ 	}
+@@ -264,10 +271,11 @@
+ 
+ }
+ 
+-static void
++static int
+ userlist(int argc, char *argv[])
+ {
+ 	int i;
++	int err = 0;
+ 	PERSON *pn;
+ 	PERSON *nethead, **nettail;
+ 	struct utmp *uptr;
+@@ -297,13 +305,13 @@
+ 
+ 	/* handle network requests */
+ 	for (pn = nethead; pn; pn = pn->next) {
+-		netfinger(pn->name);
++		err |= netfinger(pn->name);
+ 		if (pn->next || entries)
+ 			xputc('\n');
+ 	}
+ 
+ 	if (entries == 0)
+-		return;
++		return err;
+ 
+ 	/*
+ 	 * Scan thru the list of users currently logged in, saving
+@@ -331,4 +339,6 @@
+ 		enter_lastlog(pn);
+ 	}
+ 	endutent();
++
++	return err;
+ }
+--- bsd-finger-0.17.orig/finger/finger.h
++++ bsd-finger-0.17/finger/finger.h
+@@ -92,7 +92,7 @@
+ void enter_where(struct utmp *ut, PERSON *pn);
+ void enter_lastlog(PERSON *pn);
+ int match(struct passwd *pw, const char *user);
+-void netfinger(const char *name);
++int netfinger(const char *name);
+ const char *prphone(const char *num);
+ 
+ #ifndef DAYSPERNYEAR
+--- bsd-finger-0.17.orig/finger/lprint.c
++++ bsd-finger-0.17/finger/lprint.c
+@@ -48,7 +48,7 @@
+ #include <sys/types.h>
+ #include <sys/file.h>
+ #include <sys/stat.h>
+-#include <sys/time.h>
++#include <time.h>
+ #include "finger.h"
+ 
+ static void lprint(PERSON *pn);
+@@ -100,7 +100,7 @@
+ 	 *	office, office phone, home phone if available
+ 	 */
+ 	xprintf("Login: %-15s\t\t\tName: %s\nDirectory: %-25s",
+-		pn->name, pn->realname, pn->dir);
++		pn->name, pn->realname ? pn->realname : "", pn->dir);
+ 	xprintf("\tShell: %-s\n", *pn->shell ? pn->shell : _PATH_BSHELL);
+ 
+ 	/*
+--- bsd-finger-0.17.orig/finger/net.c
++++ bsd-finger-0.17/finger/net.c
+@@ -51,7 +51,7 @@
+ #include <ctype.h>
+ #include "finger.h"
+ 
+-void netfinger(const char *name) {
++int netfinger(const char *name) {
+ 	register FILE *fp;
+ 	struct in_addr defaddr;
+ 	register int c, sawret, ateol;
+@@ -62,7 +62,7 @@
+ 	char *alist[1], *host;
+ 
+ 	host = strrchr(name, '@');
+-	if (!host) return;
++	if (!host) return 1;
+ 	*host++ = '\0';
+ 
+ 	memset(&sn, 0, sizeof(sn));
+@@ -70,7 +70,7 @@
+ 	sp = getservbyname("finger", "tcp");
+ 	if (!sp) {
+ 		eprintf("finger: tcp/finger: unknown service\n");
+-		return;
++		return 1;
+ 	}
+ 	sn.sin_port = sp->s_port;
+ 
+@@ -78,7 +78,7 @@
+ 	if (!hp) {
+ 		if (!inet_aton(host, &defaddr)) {
+ 			eprintf("finger: unknown host: %s\n", host);
+-			return;
++			return 1;
+ 		}
+ 		def.h_name = host;
+ 		def.h_addr_list = alist;
+@@ -96,7 +96,7 @@
+ 
+ 	if ((s = socket(hp->h_addrtype, SOCK_STREAM, 0)) < 0) {
+ 		eprintf("finger: socket: %s\n", strerror(errno));
+-		return;
++		return 1;
+ 	}
+ 
+ 	/* print hostname before connecting, in case it takes a while */
+@@ -104,7 +104,7 @@
+ 	if (connect(s, (struct sockaddr *)&sn, sizeof(sn)) < 0) {
+ 		eprintf("finger: connect: %s\n", strerror(errno));
+ 		close(s);
+-		return;
++		return 1;
+ 	}
+ 
+ 	/* -l flag for remote fingerd  */
+@@ -128,7 +128,7 @@
+ 	if (!fp) {
+ 		eprintf("finger: fdopen: %s\n", strerror(errno));
+ 		close(s);
+-		return;
++		return 1;
+ 	}
+ 
+ 	sawret = 0;
+@@ -152,4 +152,6 @@
+ 	}
+ 	if (!ateol) xputc('\n');
+ 	fclose(fp);
++
++	return 0;
+ }
+--- bsd-finger-0.17.orig/finger/sprint.c
++++ bsd-finger-0.17/finger/sprint.c
+@@ -40,7 +40,7 @@
+ #endif /* not lint */
+ 
+ #include <sys/types.h>
+-#include <sys/time.h>
++#include <time.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+--- bsd-finger-0.17.orig/finger/util.c
++++ bsd-finger-0.17/finger/util.c
+@@ -64,7 +64,7 @@
+ 	struct stat sb;
+ 
+ 	/* No device for X console. Utmp entry by XDM login (":0"). */
+-	if (w->tty[0] == ':') {
++	if (strchr(w->tty, ':')) {
+ 		w->idletime = 0;  /* would be nice to have it emit ??? */
+ 		w->writable = 0;
+ 		return;
+@@ -109,9 +109,8 @@
+ 	 * fields[3] -> homephone
+ 	 */
+ 	nfields = 0;
+-	for (p = strtok(bp, ","); p; p = strtok(NULL, ",")) {
+-		if (*p==0) p = NULL;  // skip empties
+-		if (nfields < 4) fields[nfields++] = p;
++	while ((p = strsep(&bp, ","))) {
++		if (nfields < 4) fields[nfields++] = *p ? p : NULL;
+ 	}
+ 	while (nfields<4) fields[nfields++] = NULL;
+ 
+@@ -150,6 +149,9 @@
+ 
+ 		pn->realname = rname;
+ 	}
++	else {
++		pn->realname = NULL;
++	}
+ 
+ 	pn->office =      fields[1] ? strdup(fields[1]) : NULL;
+ 	pn->officephone = fields[2] ? strdup(fields[2]) : NULL;
diff --git a/nixpkgs/pkgs/tools/networking/bud/default.nix b/nixpkgs/pkgs/tools/networking/bud/default.nix
new file mode 100644
index 000000000000..a79cbdc8bbd8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/bud/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, lib, fetchgit, python, gyp, utillinux }:
+
+stdenv.mkDerivation {
+  pname = "bud";
+
+  version = "0.34.1";
+
+  src = fetchgit {
+    url = "https://github.com/indutny/bud.git";
+    rev = "b112852c9667632f692d2ce3dcd9a8312b61155a";
+    sha256 = "08yr6l4lc2m6rng06253fcaznf6sq0v053wfr8bbym42c32z0xdh";
+  };
+
+  buildInputs = [
+    python gyp
+  ] ++ lib.optional stdenv.isLinux utillinux;
+
+  buildPhase = ''
+    python ./gyp_bud -f make
+    make -C out
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp out/Release/bud $out/bin
+  '';
+
+  meta = with lib; {
+    description = "A TLS terminating proxy";
+    license     = licenses.mit;
+    platforms   = platforms.linux;
+    # Does not build on aarch64-linux.
+    badPlatforms = [ "aarch64-linux" ];
+    maintainers = with maintainers; [ cstrahan ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/bukubrow/default.nix b/nixpkgs/pkgs/tools/networking/bukubrow/default.nix
new file mode 100644
index 000000000000..e83e72cbfb44
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/bukubrow/default.nix
@@ -0,0 +1,49 @@
+{ stdenv, rustPlatform, fetchFromGitHub, sqlite }: let
+
+manifest = {
+  description = "Bukubrow extension host application";
+  name = "com.samhh.bukubrow";
+  path = "@out@/bin/bukubrow";
+  type = "stdio";
+};
+
+in rustPlatform.buildRustPackage rec {
+  pname = "bukubrow-host";
+  version = "5.0.0";
+
+  src = fetchFromGitHub {
+    owner = "SamHH";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1a3gqxj6d1shv3w0v9m8x2xr0bvcynchy778yqalxkc3x4vr0nbn";
+  };
+
+  cargoSha256 = "06nh99cvg3y4f98fs0j5bkidzq6fg46wk47z5jfzz5lf72ha54lk";
+
+  buildInputs = [ sqlite ];
+
+  passAsFile = [ "firefoxManifest" "chromeManifest" ];
+  firefoxManifest = builtins.toJSON (manifest // {
+    allowed_extensions = [ "bukubrow@samhh.com" ];
+  });
+  chromeManifest = builtins.toJSON (manifest // {
+    allowed_origins = [ "chrome-extension://ghniladkapjacfajiooekgkfopkjblpn/" ];
+  });
+  postBuild = ''
+    substituteAll $firefoxManifestPath firefox.json
+    substituteAll $chromeManifestPath chrome.json
+  '';
+  postInstall = ''
+    install -Dm0644 firefox.json $out/lib/mozilla/native-messaging-hosts/com.samhh.bukubrow.json
+    install -Dm0644 chrome.json $out/etc/chromium/native-messaging-hosts/com.samhh.bukubrow.json
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Bukubrow is a WebExtension for Buku, a command-line bookmark manager";
+    homepage = https://github.com/SamHH/bukubrow-host;
+    license = licenses.gpl3;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ infinisil ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/networking/bully/default.nix b/nixpkgs/pkgs/tools/networking/bully/default.nix
new file mode 100644
index 000000000000..46bac3d5b5b2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/bully/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchFromGitHub, openssl, libpcap }:
+
+stdenv.mkDerivation rec {
+
+  pname = "bully";
+  version = "1.1";
+
+  src = fetchFromGitHub {
+    sha256 = "1qvbbf72ryd85bp4v62fk93ag2sn25rj7kipgagbv22hnq8yl3zd";
+    rev = version;
+    repo = "bully";
+    owner = "aanarchyy";
+  };
+  buildInputs = [ openssl libpcap ];
+
+  buildPhase = ''
+    cd src
+    make
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv bully $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Retrieve WPA/WPA2 passphrase from a WPS enabled access point";
+    homepage = https://github.com/aanarchyy/bully;
+    maintainers = with maintainers; [ edwtjo ];
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/burpsuite/default.nix b/nixpkgs/pkgs/tools/networking/burpsuite/default.nix
new file mode 100644
index 000000000000..12885982d26d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/burpsuite/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchurl, jre, runtimeShell }:
+
+let
+  version = "1.7.36";
+  jar = fetchurl {
+    name = "burpsuite.jar";
+    url = "https://portswigger.net/Burp/Releases/Download?productId=100&version=${version}&type=Jar";
+    sha256 = "12m4fn04yd89r6x4m4yd668p5v0bs9b1h6p239bjj11ykyi3g51a";
+  };
+  launcher = ''
+    #!${runtimeShell}
+    exec ${jre}/bin/java -jar ${jar} "$@"
+  '';
+in stdenv.mkDerivation {
+  pname = "burpsuite";
+  inherit version;
+  buildCommand = ''
+    mkdir -p $out/bin
+    echo "${launcher}" > $out/bin/burpsuite
+    chmod +x $out/bin/burpsuite
+  '';
+
+  preferLocalBuild = true;
+
+  meta = {
+    description = "An integrated platform for performing security testing of web applications";
+    longDescription = ''
+      Burp Suite is an integrated platform for performing security testing of web applications.
+      Its various tools work seamlessly together to support the entire testing process, from
+      initial mapping and analysis of an application's attack surface, through to finding and
+      exploiting security vulnerabilities.
+    '';
+    homepage = https://portswigger.net/burp/;
+    downloadPage = "https://portswigger.net/burp/freedownload";
+    license = [ stdenv.lib.licenses.unfree ];
+    platforms = jre.meta.platforms;
+    hydraPlatforms = [];
+    maintainers = [ stdenv.lib.maintainers.bennofs ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/bwm-ng/default.nix b/nixpkgs/pkgs/tools/networking/bwm-ng/default.nix
new file mode 100644
index 000000000000..8e766cdeeb5c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/bwm-ng/default.nix
@@ -0,0 +1,79 @@
+{ writeText, stdenv, fetchurl, ncurses }:
+
+let
+  version = "0.6.1";
+in
+stdenv.mkDerivation rec {
+  pname = "bwm-ng";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://www.gropp.org/bwm-ng/${pname}-${version}.tar.gz";
+    sha256 = "1w0dwpjjm9pqi613i8glxrgca3rdyqyp3xydzagzr5ndc34z6z02";
+  };
+
+  buildInputs = [ ncurses ];
+
+  # gcc7 has some issues with inline functions
+  patches = [
+    (writeText "gcc7.patch"
+    ''
+    --- a/src/bwm-ng.c
+    +++ b/src/bwm-ng.c
+    @@ -27,5 +27,5 @@
+     /* handle interrupt signal */
+     void sigint(int sig) FUNCATTR_NORETURN;
+    -inline void init(void);
+    +static inline void init(void);
+
+     /* clear stuff and exit */
+    --- a/src/options.c
+    +++ b/src/options.c
+    @@ -35,5 +35,5 @@
+     inline int str2output_type(char *optarg);
+     #endif
+    -inline int str2out_method(char *optarg);
+    +static inline int str2out_method(char *optarg);
+     inline int str2in_method(char *optarg);
+
+    '')
+  ];
+
+
+  # This code uses inline in the gnu89 sense: see http://clang.llvm.org/compatibility.html#inline
+  NIX_CFLAGS_COMPILE = stdenv.lib.optionalString stdenv.cc.isClang "-std=gnu89";
+
+  meta = with stdenv.lib; {
+    description = "A small and simple console-based live network and disk io bandwidth monitor";
+    homepage = http://www.gropp.org/?id=projects&sub=bwm-ng;
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+
+    longDescription = ''
+        Features
+
+            supports /proc/net/dev, netstat, getifaddr, sysctl, kstat, /proc/diskstats /proc/partitions, IOKit, devstat and libstatgrab
+            unlimited number of interfaces/devices supported
+            interfaces/devices are added or removed dynamically from list
+            white-/blacklist of interfaces/devices
+            output of KB/s, Kb/s, packets, errors, average, max and total sum
+            output in curses, plain console, CSV or HTML
+            configfile
+
+        Short list of changes since 0.5 (for full list read changelog):
+
+            curses2 output, a nice bar chart
+            disk input for bsd/macosx/linux/solaris
+            win32 network bandwidth support
+            moved to autotools
+            alot fixes
+
+        Info
+        This was influenced by the old bwm util written by Barney (barney@freewill.tzo.com) which had some issues with faster interfaces and was very simple. Since i had almost all code done anyway for other projects, i decided to create my own version.
+
+        I actually don't know if netstat input is useful at all. I saw this elsewhere, so i added it. Its target is "netstat 1.42 (2001-04-15)" linux or Free/Open/netBSD. If there are other formats i would be happy to add them.
+
+        (from homepage)
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/cadaver/default.nix b/nixpkgs/pkgs/tools/networking/cadaver/default.nix
new file mode 100644
index 000000000000..95012208129a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/cadaver/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, fetchpatch, openssl, readline }:
+
+stdenv.mkDerivation rec {
+  name = "cadaver-0.23.3";
+
+  src = fetchurl {
+    url = "http://www.webdav.org/cadaver/${name}.tar.gz";
+    sha256 = "1jizq69ifrjbjvz5y79wh1ny94gsdby4gdxwjad4bfih6a5fck7x";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = https://projects.archlinux.org/svntogit/community.git/plain/trunk/disable-sslv2.patch?h=packages/cadaver;
+      name = "disable-sslv2.patch";
+      sha256 = "1qx65hv584wdarks51yhd3y38g54affkphm5wz27xiz4nhmbssrr";
+    })
+  ];
+
+  configureFlags = [ "--with-ssl" "--with-readline" ];
+
+  buildInputs = [ openssl readline ];
+
+  meta = with stdenv.lib; {
+    description = "A command-line WebDAV client";
+    homepage    = http://www.webdav.org/cadaver;
+    maintainers = with maintainers; [ ianwookim ];
+    license     = licenses.gpl2;
+    platforms   = with platforms; linux ++ freebsd ++ openbsd;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/carddav-util/default.nix b/nixpkgs/pkgs/tools/networking/carddav-util/default.nix
new file mode 100644
index 000000000000..08014ed12269
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/carddav-util/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchgit, python, pythonPackages, makeWrapper }:
+
+stdenv.mkDerivation {
+
+  name = "carddav-0.1-2014-02-26";
+
+  src = fetchgit {
+    url = git://github.com/ljanyst/carddav-util;
+    rev = "53b181faff5f154bcd180467dd04c0ce69405564";
+    sha256 = "0f0raffdy032wlnxfck6ky60r163nhqfbr311y4ry55l60s4497n";
+  };
+
+  buildInputs = [makeWrapper];
+
+  propagatedBuildInputs = with pythonPackages; [ requests vobject lxml ];
+
+  doCheck = false; # no test
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp $src/carddav-util.py $out/bin
+
+    pythondir="$out/lib/${python.libPrefix}/site-packages"
+    mkdir -p "$pythondir"
+    cp $src/carddav.py "$pythondir"
+  '';
+
+  preFixup = ''
+    wrapProgram "$out/bin/carddav-util.py" \
+      --prefix PYTHONPATH : "$PYTHONPATH:$(toPythonPath $out)" \
+      --prefix PATH : "$prefix/bin:$PATH"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/ljanyst/carddav-util;
+    description = "A CardDAV import/export utility";
+    platforms = platforms.unix;
+    license = licenses.isc;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/cassowary/default.nix b/nixpkgs/pkgs/tools/networking/cassowary/default.nix
new file mode 100644
index 000000000000..bc1f9cebb42f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/cassowary/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub, writeText, runtimeShell, ncurses, }:
+
+buildGoModule rec {
+  pname = "cassowary";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "rogerwelin";
+    repo = pname;
+    rev = "33b7e81a5d147980f4ddc689818df2b071f6ab4e";
+    sha256 = "01cdmh2v9rz8rna08hdsddllck6zp9wcrhxdy6hs77zfsbzyfflx";
+  };
+
+  modSha256 = "1iylnnmj5slji89pkb3shp4xqar1zbpl7bzwddbzpp8y52fmsv1c";
+
+  meta = with lib; {
+    homepage = "https://github.com/rogerwelin/cassowary";
+    description = "Modern cross-platform HTTP load-testing tool written in Go ";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hugoreeves ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ccnet/default.nix b/nixpkgs/pkgs/tools/networking/ccnet/default.nix
new file mode 100644
index 000000000000..2c78b20138aa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ccnet/default.nix
@@ -0,0 +1,25 @@
+{stdenv, fetchurl, which, autoreconfHook, pkgconfig, vala, python, libsearpc, libzdb, libuuid, libevent, sqlite, openssl}:
+
+stdenv.mkDerivation rec {
+  version = "6.1.8";
+  seafileVersion = "6.1.8";
+  pname = "ccnet";
+
+  src = fetchurl {
+    url = "https://github.com/haiwen/ccnet/archive/v${version}.tar.gz";
+    sha256 = "0qlpnrz30ldrqnvbj59d54qdghxpxc5lsq6kf3dw2b93jnzkcmmm";
+  };
+
+  nativeBuildInputs = [ pkgconfig which autoreconfHook vala python ];
+  propagatedBuildInputs = [ libsearpc libzdb libuuid libevent sqlite openssl ];
+
+  configureFlags = [ "--enable-server" ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/haiwen/ccnet;
+    description = "A framework for writing networked applications in C";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/chrony/allow-clock_adjtime.patch b/nixpkgs/pkgs/tools/networking/chrony/allow-clock_adjtime.patch
new file mode 100644
index 000000000000..2fa3baca7221
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/chrony/allow-clock_adjtime.patch
@@ -0,0 +1,26 @@
+From 0cf506c92967c84f9ed83ba9e1be946a7fda6425 Mon Sep 17 00:00:00 2001
+From: Miroslav Lichvar <mlichvar@redhat.com>
+Date: Mon, 2 Dec 2019 12:47:13 +0100
+Subject: sys_linux: allow clock_adjtime in seccomp filter
+
+The adjtimex() function in glibc was switched to the clock_adjtime
+system call.
+
+diff --git a/sys_linux.c b/sys_linux.c
+index 63eb8f1..fcf89c2 100644
+--- a/sys_linux.c
++++ b/sys_linux.c
+@@ -478,8 +478,8 @@ SYS_Linux_EnableSystemCallFilter(int level)
+ {
+   const int syscalls[] = {
+     /* Clock */
+-    SCMP_SYS(adjtimex), SCMP_SYS(clock_gettime), SCMP_SYS(gettimeofday),
+-    SCMP_SYS(settimeofday), SCMP_SYS(time),
++    SCMP_SYS(adjtimex), SCMP_SYS(clock_adjtime), SCMP_SYS(clock_gettime),
++    SCMP_SYS(gettimeofday), SCMP_SYS(settimeofday), SCMP_SYS(time),
+     /* Process */
+     SCMP_SYS(clone), SCMP_SYS(exit), SCMP_SYS(exit_group), SCMP_SYS(getpid),
+     SCMP_SYS(getrlimit), SCMP_SYS(rt_sigaction), SCMP_SYS(rt_sigreturn),
+-- 
+cgit v0.10.2
+
diff --git a/nixpkgs/pkgs/tools/networking/chrony/default.nix b/nixpkgs/pkgs/tools/networking/chrony/default.nix
new file mode 100644
index 000000000000..2ec16aa430a3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/chrony/default.nix
@@ -0,0 +1,56 @@
+{ stdenv, fetchurl, pkgconfig, libcap, readline, texinfo, nss, nspr
+, libseccomp, pps-tools }:
+
+assert stdenv.isLinux -> libcap != null;
+
+stdenv.mkDerivation rec {
+  pname = "chrony";
+  version = "3.5";
+
+  src = fetchurl {
+    url = "https://download.tuxfamily.org/chrony/${pname}-${version}.tar.gz";
+    sha256 = "1d9r2dhslll4kzdmxrj0qfgwq1b30d4l3s5cwr8yr93029dpj0jf";
+  };
+
+  patches = [
+    ./allow-clock_adjtime.patch
+    ./fix-seccomp-build.patch
+  ];
+
+  postPatch = ''
+    patchShebangs test
+  '';
+
+  buildInputs = [ readline texinfo nss nspr ]
+    ++ stdenv.lib.optionals stdenv.isLinux [ libcap libseccomp pps-tools ];
+  nativeBuildInputs = [ pkgconfig ];
+
+  hardeningEnable = [ "pie" ];
+
+  configureFlags = [ "--chronyvardir=$(out)/var/lib/chrony" ]
+    ++ stdenv.lib.optional stdenv.isLinux "--enable-scfilter";
+
+  meta = with stdenv.lib; {
+    description = "Sets your computer's clock from time servers on the Net";
+    homepage = https://chrony.tuxfamily.org/;
+    repositories.git = git://git.tuxfamily.org/gitroot/chrony/chrony.git;
+    license = licenses.gpl2;
+    platforms = with platforms; linux ++ freebsd ++ openbsd;
+    maintainers = with maintainers; [ fpletz thoughtpolice ];
+
+    longDescription = ''
+      Chronyd is a daemon which runs in background on the system. It obtains
+      measurements via the network of the system clock’s offset relative to
+      time servers on other systems and adjusts the system time accordingly.
+      For isolated systems, the user can periodically enter the correct time by
+      hand (using Chronyc). In either case, Chronyd determines the rate at
+      which the computer gains or loses time, and compensates for this. Chronyd
+      implements the NTP protocol and can act as either a client or a server.
+
+      Chronyc provides a user interface to Chronyd for monitoring its
+      performance and configuring various settings. It can do so while running
+      on the same computer as the Chronyd instance it is controlling or a
+      different computer.
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/chrony/fix-seccomp-build.patch b/nixpkgs/pkgs/tools/networking/chrony/fix-seccomp-build.patch
new file mode 100644
index 000000000000..6888e7efeb72
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/chrony/fix-seccomp-build.patch
@@ -0,0 +1,13 @@
+diff --git a/sys_linux.c b/sys_linux.c
+index 898dc7a7f75..fcd334ecf03 100644
+--- a/sys_linux.c
++++ b/sys_linux.c
+@@ -503,7 +503,7 @@ SYS_Linux_EnableSystemCallFilter(int level)
+     SCMP_SYS(socketcall),
+     /* General I/O */
+     SCMP_SYS(_newselect), SCMP_SYS(close), SCMP_SYS(open), SCMP_SYS(openat), SCMP_SYS(pipe),
+-    SCMP_SYS(pipe2), SCMP_SYS(poll), SCMP_SYS(ppoll), SCMP_SYS(pselect6), SCMP_SYS(read),
++    SCMP_SYS(pipe2), SCMP_SYS(poll), SCMP_SYS(pselect6), SCMP_SYS(read),
+     SCMP_SYS(futex), SCMP_SYS(select), SCMP_SYS(set_robust_list), SCMP_SYS(write),
+     /* Miscellaneous */
+     SCMP_SYS(getrandom), SCMP_SYS(sysinfo), SCMP_SYS(uname),
diff --git a/nixpkgs/pkgs/tools/networking/circus/default.nix b/nixpkgs/pkgs/tools/networking/circus/default.nix
new file mode 100644
index 000000000000..10edc92a9951
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/circus/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, python3Packages }:
+
+let
+  inherit (python3Packages) buildPythonApplication fetchPypi iowait psutil pyzmq tornado_4 mock;
+in
+
+buildPythonApplication rec {
+  pname = "circus";
+  version = "0.15.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "d1603cf4c4f620ce6593d3d2a67fad25bf0242183ea24110d8bb1c8079c55d1b";
+  };
+
+  postPatch = ''
+    # relax version restrictions to fix build
+    substituteInPlace setup.py \
+      --replace "pyzmq>=13.1.0,<17.0" "pyzmq>13.1.0"
+  '';
+
+  checkInputs = [ mock ];
+
+  doCheck = false; # weird error
+
+  propagatedBuildInputs = [ iowait psutil pyzmq tornado_4 ];
+
+  meta = with stdenv.lib; {
+    description = "A process and socket manager";
+    homepage = "https://github.circus.com/circus-tent/circus";
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/cjdns/default.nix b/nixpkgs/pkgs/tools/networking/cjdns/default.nix
new file mode 100644
index 000000000000..df94de882be6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/cjdns/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchFromGitHub, nodejs, which, python27, utillinux }:
+
+let version = "20.4"; in
+stdenv.mkDerivation {
+  name = "cjdns-"+version;
+
+  src = fetchFromGitHub {
+    owner = "cjdelisle";
+    repo = "cjdns";
+    rev = "cjdns-v${version}";
+    sha256 = "1d8li7vws1dmdgs96dmy4vh55gqy2ir4dnkrvgkv3fjq9pffr7vx";
+  };
+
+  buildInputs = [ which python27 nodejs ] ++
+    # for flock
+    stdenv.lib.optional stdenv.isLinux utillinux;
+
+  CFLAGS = "-O2 -Wno-error=stringop-truncation";
+  buildPhase =
+    stdenv.lib.optionalString stdenv.isAarch32 "Seccomp_NO=1 "
+    + "bash do";
+  installPhase = ''
+    install -Dt "$out/bin/" cjdroute makekeys privatetopublic publictoip6
+    sed -i 's,/usr/bin/env node,'$(type -P node), \
+      $(find contrib -name "*.js")
+    sed -i 's,/usr/bin/env python,'$(type -P python), \
+      $(find contrib -type f)
+    mkdir -p $out/share/cjdns
+    cp -R contrib tools node_build node_modules $out/share/cjdns/
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/cjdelisle/cjdns;
+    description = "Encrypted networking for regular people";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ ehmry ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/cksfv/default.nix b/nixpkgs/pkgs/tools/networking/cksfv/default.nix
new file mode 100644
index 000000000000..3098b091dc64
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/cksfv/default.nix
@@ -0,0 +1,17 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  name = "cksfv-1.3.14";
+
+  src = fetchurl {
+    url = "http://zakalwe.fi/~shd/foss/cksfv/files/${name}.tar.bz2";
+    sha256 = "0lnz0z57phl6s52hjvlryn96xrlph9b0h89ahhv027sa79pj8g4g";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = http://zakalwe.fi/~shd/foss/cksfv/;
+    description = "A tool for verifying files against a SFV checksum file";
+    platforms = platforms.all;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/clash/default.nix b/nixpkgs/pkgs/tools/networking/clash/default.nix
new file mode 100644
index 000000000000..f3d0a584593b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/clash/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "clash";
+  version = "0.17.1";
+
+  src = fetchFromGitHub {
+    owner = "Dreamacro";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0zhbaw9jzl9wqc7yx8yxqlb6fwkss4pqkv26069qg6nsk584ndnf";
+  };
+
+  goPackagePath = "github.com/Dreamacro/clash";
+  modSha256 = "0vyd61bin7hmpdqrmrikc776mgif9v25627n8hzi65kiycv40kgx";
+
+  buildFlagsArray = [
+    "-ldflags="
+    "-X ${goPackagePath}/constant.Version=${version}"
+  ];
+
+  meta = with stdenv.lib; {
+    description = "A rule-based tunnel in Go";
+    homepage = "https://github.com/Dreamacro/clash";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ contrun filalex77 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/cloud-custodian/default.nix b/nixpkgs/pkgs/tools/networking/cloud-custodian/default.nix
new file mode 100644
index 000000000000..a57d9f13d785
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/cloud-custodian/default.nix
@@ -0,0 +1,48 @@
+{ lib, buildPythonApplication, fetchPypi
+, argcomplete
+, boto3
+, botocore
+, certifi
+, dateutil
+, jsonpatch
+, jsonschema
+, pyyaml
+, tabulate
+, urllib3
+}:
+
+buildPythonApplication rec {
+  pname = "cloud-custodian";
+  version = "0.8.45.1";
+
+  src = fetchPypi {
+    pname = "c7n";
+    inherit version;
+    sha256 = "0c199gdmpm83xfghrbzp02xliyxiygsnx2fvb35j9qpf37wzzp3z";
+  };
+
+  propagatedBuildInputs = [
+    argcomplete
+    boto3
+    botocore
+    certifi
+    dateutil
+    jsonpatch
+    jsonschema
+    pyyaml
+    tabulate
+    urllib3
+  ];
+
+  # Requires tox, many packages, and network access
+  checkPhase = ''
+    $out/bin/custodian --help
+  '';
+
+  meta = with lib; {
+    description = "Rules engine for cloud security, cost optimization, and governance";
+    homepage = "https://cloudcustodian.io";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ bhipple ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/cmst/default.nix b/nixpkgs/pkgs/tools/networking/cmst/default.nix
new file mode 100644
index 000000000000..dcda354e4b42
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/cmst/default.nix
@@ -0,0 +1,33 @@
+{ mkDerivation, lib, fetchFromGitHub, qmake, qtbase }:
+
+mkDerivation rec {
+  pname = "cmst";
+  version = "2019.01.13";
+
+  src = fetchFromGitHub {
+    repo = "cmst";
+    owner = "andrew-bibb";
+    rev = "${pname}-${version}";
+    sha256 = "13739f0ddld34dcqlfhylzn1zqz5a7jbp4a4id7gj7pcxjx1lafh";
+  };
+
+  nativeBuildInputs = [ qmake ];
+
+  buildInputs = [ qtbase ];
+
+  enableParallelBuilding = true;
+
+  postPatch = ''
+    for f in $(find . -name \*.cpp -o -name \*.pri -o -name \*.pro); do
+      substituteInPlace $f --replace /etc $out/etc --replace /usr $out
+    done
+  '';
+
+  meta = {
+    description = "QT GUI for Connman with system tray icon";
+    homepage = https://github.com/andrew-bibb/cmst;
+    maintainers = [ lib.maintainers.matejc ];
+    platforms = lib.platforms.linux;
+    license = lib.licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/cntlm/default.nix b/nixpkgs/pkgs/tools/networking/cntlm/default.nix
new file mode 100644
index 000000000000..9b8a1f0e7904
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/cntlm/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchurl, which}:
+
+stdenv.mkDerivation rec {
+  pname = "cntlm";
+  version = "0.92.3";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/cntlm/${pname}-${version}.tar.gz";
+    sha256 = "1632szz849wasvh5sm6rm1zbvbrkq35k7kcyvx474gyl4h4x2flw";
+  };
+
+  buildInputs = [ which ];
+
+  preConfigure = stdenv.lib.optionalString stdenv.isDarwin ''
+    substituteInPlace configure --replace "xlc_r gcc" "xlc_r gcc $CC"
+    substitute Makefile Makefile.$CC --replace "CC=gcc" "CC=$CC"
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin; cp cntlm $out/bin/;
+    mkdir -p $out/share/; cp COPYRIGHT README VERSION doc/cntlm.conf $out/share/;
+    mkdir -p $out/man/; cp doc/cntlm.1 $out/man/;
+  '';
+
+  meta = with stdenv.lib; {
+    description = "NTLM/NTLMv2 authenticating HTTP proxy";
+    homepage = http://cntlm.sourceforge.net/;
+    license = licenses.gpl2;
+    maintainers =
+      [
+        maintainers.qknight
+        maintainers.markWot
+        maintainers.carlosdagos
+      ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/connect/default.nix b/nixpkgs/pkgs/tools/networking/connect/default.nix
new file mode 100644
index 000000000000..17923081dfdf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/connect/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "connect";
+  version ="1.105";
+
+  src = fetchurl {
+    url = "https://bitbucket.org/gotoh/connect/get/${version}.tar.bz2";
+    sha256 = "00yld6yinc8s4xv3b8kbvzn2f4rja5dmp6ysv3n4847qn4k60dh7";
+  };
+
+  makeFlags = [ "CC=cc" ];      # gcc and/or clang compat
+
+  installPhase = ''
+    install -D -m ugo=rx connect $out/bin/connect
+  '';
+
+  meta = {
+    description = "Make network connection via SOCKS and https proxy";
+    longDescription = ''
+      This proxy traversal tool is intended to assist OpenSSH (via ProxyCommand
+      in ~/.ssh/config) and GIT (via $GIT_PROXY_COMMAND) utilize SOCKS and https proxies. 
+      '';
+    homepage = https://bitbucket.org/gotoh/connect/wiki/Home;
+    license = stdenv.lib.licenses.gpl2Plus;
+    platforms = stdenv.lib.platforms.gnu ++ stdenv.lib.platforms.linux ++ stdenv.lib.platforms.darwin;
+    maintainers = with stdenv.lib.maintainers; [ jcumming ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/connman/connman-gtk/default.nix b/nixpkgs/pkgs/tools/networking/connman/connman-gtk/default.nix
new file mode 100644
index 000000000000..a3c774a62b11
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/connman/connman-gtk/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchFromGitHub, autoconf, automake, intltool, pkgconfig,
+gtk3, connman, openconnect, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "connman-gtk";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "jgke";
+    repo = "connman-gtk";
+    rev = "v${version}";
+    sha256 = "09k0hx5hxpbykvslv12l2fq9pxdwpd311mxj038hbqzjghcyidyr";
+  };
+
+  nativeBuildInputs = [
+    autoconf
+    automake
+    intltool
+    pkgconfig
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtk3
+    openconnect
+    connman
+  ];
+
+  preConfigure = ''
+    # m4/intltool.m4 is an invalid symbolic link
+    rm m4/intltool.m4
+    ln -s ${intltool}/share/aclocal/intltool.m4 m4/
+    ./autogen.sh
+  '';
+
+  meta = with stdenv.lib; {
+    description = "GTK GUI for Connman";
+    homepage = https://github.com/jgke/connman-gtk;
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.romildo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/connman/connman-ncurses/default.nix b/nixpkgs/pkgs/tools/networking/connman/connman-ncurses/default.nix
new file mode 100644
index 000000000000..140105c24754
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/connman/connman-ncurses/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, dbus, json_c, ncurses, connman }:
+
+stdenv.mkDerivation {
+  pname = "connman-ncurses";
+  version = "2015-07-21";
+
+  src = fetchFromGitHub {
+    owner = "eurogiciel-oss";
+    repo = "connman-json-client";
+    rev = "3c34b2ee62d2e188090d20e7ed2fd94bab9c47f2";
+    sha256 = "1831r0776fv481g8kgy1dkl750pzv47835dw11sslq2k6mm6i9p1";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+
+  buildInputs = [ dbus ncurses json_c connman ];
+
+  NIX_CFLAGS_COMPILE = "-Wno-error";
+  
+  installPhase = ''
+    mkdir -p "$out/bin"
+    cp -va connman_ncurses "$out/bin/"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Simple ncurses UI for connman";
+    homepage = https://github.com/eurogiciel-oss/connman-json-client;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.romildo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/connman/connman-notify/default.nix b/nixpkgs/pkgs/tools/networking/connman/connman-notify/default.nix
new file mode 100644
index 000000000000..d17729c691d3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/connman/connman-notify/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromGitLab, python3Packages, glib, gobject-introspection, wrapGAppsHook }:
+
+python3Packages.buildPythonApplication {
+  pname = "connman-notify";
+  version = "2019-10-05";
+
+  src = fetchFromGitLab {
+    owner = "wavexx";
+    repo = "connman-notify";
+    rev = "24b10a51721b54d932f4cd61ef2756423768c015";
+    sha256 = "1k5b5y6114yna2cm0cq82xilicran63hrhlklgv7k3p89057xh8j";
+  };
+
+  format = "other";
+
+  nativeBuildInputs = [ gobject-introspection wrapGAppsHook ];
+
+  buildInputs = [ glib ];
+
+  pythonPath = with python3Packages; [ dbus-python pygobject3 ];
+
+  strictDeps = false;
+
+  installPhase = ''
+    install -D -t $out/bin connman-notify
+    install -D -t $out/share/doc README.rst
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Desktop notification integration for connman";
+    homepage = https://gitlab.com/wavexx/connman-notify;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.romildo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/connman/connman_dmenu/default.nix b/nixpkgs/pkgs/tools/networking/connman/connman_dmenu/default.nix
new file mode 100644
index 000000000000..7096b9b75861
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/connman/connman_dmenu/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, connman, dmenu }:
+
+stdenv.mkDerivation {
+  pname = "connman_dmenu";
+  version = "git-29-9-2015";
+
+  src = fetchFromGitHub {
+    owner = "march-linux";
+    repo = "connman_dmenu";
+    rev = "cc89fec40b574b0d234afeb70ea3c94626ca3f5c";
+    sha256 = "061fi83pai4n19l9d7wq6wwj2d7cixwkhkh742c5ibmw1wb274yk";
+  };
+
+  buildInputs = [ connman dmenu ];
+
+  dontBuild = true;
+
+  # remove root requirement, see: https://github.com/march-linux/connman_dmenu/issues/3
+  postPatch = ''
+    sed -i '89,92d' connman_dmenu
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp connman_dmenu $out/bin/
+  '';
+
+  meta = {
+    description  = "A dmenu wrapper for connmann";
+    homepage     = https://github.com/march-linux/connman_dmenu;
+    license      = stdenv.lib.licenses.free;
+    maintainers  = [ stdenv.lib.maintainers.magnetophon ];
+    platforms    = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/connman/connmanui/default.nix b/nixpkgs/pkgs/tools/networking/connman/connmanui/default.nix
new file mode 100644
index 000000000000..17e8551fdda0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/connman/connmanui/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchgit, autoconf, automake, libtool, glib, gtk3, dbus, pkgconfig, file, intltool, connman }:
+
+stdenv.mkDerivation rec {
+  pname = "connmanui";
+  rev = "fce0af94e121bde77c7fa2ebd6a319f0180c5516";
+  version = "22062015-${rev}";
+
+  src = fetchgit {
+    inherit rev;
+    url = "git://github.com/tbursztyka/connman-ui.git";
+    sha256 = "0ixx8c9cfdp480z21xfjb7n1x27sf1g8gmgbmcfhr0k888dmziyy";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ autoconf automake libtool glib gtk3 dbus file intltool connman ];
+
+  preConfigure = ''
+    rm m4/intltool.m4
+    ln -s ${intltool}/share/aclocal/intltool.m4 m4/
+    set -e
+    ./autogen.sh
+    sed -i "s/\/usr\/bin\/file/file/g" ./configure
+  '';
+
+  configureScript = "./configure";
+
+  meta = {
+    description = "A full-featured GTK based trayicon UI for ConnMan";
+    homepage = https://github.com/tbursztyka/connman-ui;
+    maintainers = [ stdenv.lib.maintainers.matejc ];
+    platforms = stdenv.lib.platforms.linux;
+    license = stdenv.lib.licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/connman/default.nix b/nixpkgs/pkgs/tools/networking/connman/default.nix
new file mode 100644
index 000000000000..e58b8362f951
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/connman/default.nix
@@ -0,0 +1,61 @@
+{ stdenv, fetchurl, pkgconfig, openconnect, file, gawk,
+  openvpn, vpnc, glib, dbus, iptables, gnutls, polkit,
+  wpa_supplicant, readline6, pptp, ppp }:
+
+stdenv.mkDerivation rec {
+  pname = "connman";
+  version = "1.37";
+  src = fetchurl {
+    url = "mirror://kernel/linux/network/connman/${pname}-${version}.tar.xz";
+    sha256 = "05kfjiqhqfmbbwc4snnyvi5hc4zxanac62f6gcwaf5mvn0z9pqkc";
+  };
+
+  buildInputs = [ openconnect polkit
+                  openvpn vpnc glib dbus iptables gnutls
+                  wpa_supplicant readline6 pptp ppp ];
+
+  nativeBuildInputs = [ pkgconfig file gawk ];
+
+  preConfigure = ''
+    export WPASUPPLICANT=${wpa_supplicant}/sbin/wpa_supplicant
+    export PPPD=${ppp}/sbin/pppd
+    export AWK=${gawk}/bin/gawk
+    sed -i "s/\/usr\/bin\/file/file/g" ./configure
+  '';
+
+  configureFlags = [
+    "--sysconfdir=\${out}/etc"
+    "--localstatedir=/var"
+    "--with-dbusconfdir=${placeholder "out"}/share"
+    "--with-dbusdatadir=${placeholder "out"}/share"
+    "--disable-maintainer-mode"
+    "--enable-openconnect=builtin"
+    "--with-openconnect=${openconnect}/sbin/openconnect"
+    "--enable-openvpn=builtin"
+    "--with-openvpn=${openvpn}/sbin/openvpn"
+    "--enable-vpnc=builtin"
+    "--with-vpnc=${vpnc}/sbin/vpnc"
+    "--enable-session-policy-local=builtin"
+    "--enable-client"
+    "--enable-bluetooth"
+    "--enable-wifi"
+    "--enable-polkit"
+    "--enable-tools"
+    "--enable-datafiles"
+    "--enable-pptp"
+    "--with-pptp=${pptp}/sbin/pptp"
+    "--enable-iwd"
+  ];
+
+  postInstall = ''
+    cp ./client/connmanctl $out/sbin/connmanctl
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A daemon for managing internet connections";
+    homepage = https://01.org/connman;
+    maintainers = [ maintainers.matejc ];
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/corerad/default.nix b/nixpkgs/pkgs/tools/networking/corerad/default.nix
new file mode 100644
index 000000000000..c5cbd8c21f52
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/corerad/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "corerad";
+  version = "0.1.8";
+
+  goPackagePath = "github.com/mdlayher/corerad";
+
+  src = fetchFromGitHub {
+    owner = "mdlayher";
+    repo = "corerad";
+    rev = "v${version}";
+    sha256 = "13js6p3svx2xp20yjpb5w71rnyrhiiqbbvsck45i756j1lndaqxr";
+  };
+
+  modSha256 = "03x7r392bwchmd3jzwwykdfkr9lfdn77phfwh8xfk2avhzq7qs89";
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/mdlayher/corerad";
+    description = "CoreRAD extensible and observable IPv6 NDP RA daemon";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ mdlayher ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/corkscrew/default.nix b/nixpkgs/pkgs/tools/networking/corkscrew/default.nix
new file mode 100644
index 000000000000..9394b123bbe6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/corkscrew/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl, automake }:
+
+stdenv.mkDerivation rec {
+  name = "corkscrew-2.0";
+
+  src = fetchurl {
+    url = "http://agroman.net/corkscrew/${name}.tar.gz";
+    sha256 = "0d0fcbb41cba4a81c4ab494459472086f377f9edb78a2e2238ed19b58956b0be";
+  };
+
+  preConfigure = ''
+    ln -sf ${automake}/share/automake-*/config.sub config.sub
+    ln -sf ${automake}/share/automake-*/config.guess config.guess
+  '';
+
+  meta = with stdenv.lib; {
+    homepage    = http://agroman.net/corkscrew/;
+    description = "A tool for tunneling SSH through HTTP proxies";
+    license = stdenv.lib.licenses.gpl2;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/croc/default.nix b/nixpkgs/pkgs/tools/networking/croc/default.nix
new file mode 100644
index 000000000000..fee1e9ee3acf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/croc/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "croc";
+  version = "6.4.8";
+
+  goPackagePath = "github.com/schollz/croc";
+
+  src = fetchFromGitHub {
+    owner = "schollz";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "03wm7agjwky9ma321x6as76rg053cagmni9ygwls82jjs2pvv0bv";
+  };
+
+  modSha256 = "011pcmfih8lg8l7hwdsq51p5brnhsddzv7mvsaw5sfv8nq9p8zc2";
+  subPackages = [ "." ];
+
+  meta = with stdenv.lib; {
+    description = "Easily and securely send things from one computer to another";
+    homepage = https://github.com/schollz/croc;
+    license = licenses.mit;
+    maintainers = with maintainers; [ hugoreeves equirosa ];
+
+    longDescription = ''
+      Croc is a command line tool written in Go that allows any two computers to
+      simply and securely transfer files and folders.
+
+      Croc does all of the following:
+      - Allows any two computers to transfer data (using a relay)
+      - Provides end-to-end encryption (using PAKE)
+      - Enables easy cross-platform transfers (Windows, Linux, Mac)
+      - Allows multiple file transfers
+      - Allows resuming transfers that are interrupted
+      - Does not require a server or port-forwarding
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/curl-unix-socket/default.nix b/nixpkgs/pkgs/tools/networking/curl-unix-socket/default.nix
new file mode 100644
index 000000000000..e6f2dec30e6a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/curl-unix-socket/default.nix
@@ -0,0 +1,31 @@
+{ buildGoPackage, stdenv, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "curl-unix-socket-2015-04-10";
+
+  src = fetchFromGitHub {
+    owner = "Soulou";
+    repo = "curl-unix-socket";
+    rev = "a7da90b01ed43e8c0d606f760c9da82f8e3ed307";
+    sha256 = "1ynrrav90y3dhk8jq2fxm3jswj5nvrffwslgykj429hk6n0czb3d";
+  };
+
+  goPackagePath = "github.com/Soulou/curl-unix-socket";
+
+  buildPhase = ''
+    runHook preBuild
+    (
+      cd go/src/${goPackagePath}
+      go build -o $NIX_BUILD_TOP/go/bin/curl-unix-socket
+    )
+    runHook postBuild
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Run HTTP requests over UNIX socket";
+    license = licenses.mit;
+    homepage = https://github.com/Soulou/curl-unix-socket;
+    maintainers = with maintainers; [offline];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/curl/default.nix b/nixpkgs/pkgs/tools/networking/curl/default.nix
new file mode 100644
index 000000000000..051271e97884
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/curl/default.nix
@@ -0,0 +1,126 @@
+{ stdenv, lib, fetchurl, pkgconfig, perl
+, http2Support ? true, nghttp2
+, idnSupport ? false, libidn ? null
+, ldapSupport ? false, openldap ? null
+, zlibSupport ? true, zlib ? null
+, sslSupport ? zlibSupport, openssl ? null
+, gnutlsSupport ? false, gnutls ? null
+, wolfsslSupport ? false, wolfssl ? null
+, scpSupport ? zlibSupport && !stdenv.isSunOS && !stdenv.isCygwin, libssh2 ? null
+, gssSupport ? !stdenv.hostPlatform.isWindows, libkrb5 ? null
+, c-aresSupport ? false, c-ares ? null
+, brotliSupport ? false, brotli ? null
+}:
+
+assert http2Support -> nghttp2 != null;
+assert idnSupport -> libidn != null;
+assert ldapSupport -> openldap != null;
+assert zlibSupport -> zlib != null;
+assert sslSupport -> openssl != null;
+assert !(gnutlsSupport && sslSupport);
+assert !(gnutlsSupport && wolfsslSupport);
+assert !(sslSupport && wolfsslSupport);
+assert gnutlsSupport -> gnutls != null;
+assert wolfsslSupport -> wolfssl != null;
+assert scpSupport -> libssh2 != null;
+assert c-aresSupport -> c-ares != null;
+assert brotliSupport -> brotli != null;
+assert gssSupport -> libkrb5 != null;
+
+stdenv.mkDerivation rec {
+  name = "curl-7.67.0";
+
+  src = fetchurl {
+    urls = [
+      "https://curl.haxx.se/download/${name}.tar.bz2"
+      "https://github.com/curl/curl/releases/download/${lib.replaceStrings ["."] ["_"] name}/${name}.tar.bz2"
+    ];
+    sha256 = "0v2qb1c82m3qzkiyglsg1745qi791i9pl1jgnks8nm0sh9b6jpyx";
+  };
+
+  outputs = [ "bin" "dev" "out" "man" "devdoc" ];
+  separateDebugInfo = stdenv.isLinux;
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [ pkgconfig perl ];
+
+  # Zlib and OpenSSL must be propagated because `libcurl.la' contains
+  # "-lz -lssl", which aren't necessary direct build inputs of
+  # applications that use Curl.
+  propagatedBuildInputs = with stdenv.lib;
+    optional http2Support nghttp2 ++
+    optional idnSupport libidn ++
+    optional ldapSupport openldap ++
+    optional zlibSupport zlib ++
+    optional gssSupport libkrb5 ++
+    optional c-aresSupport c-ares ++
+    optional sslSupport openssl ++
+    optional gnutlsSupport gnutls ++
+    optional wolfsslSupport wolfssl ++
+    optional scpSupport libssh2 ++
+    optional brotliSupport brotli;
+
+  # for the second line see https://curl.haxx.se/mail/tracker-2014-03/0087.html
+  preConfigure = ''
+    sed -e 's|/usr/bin|/no-such-path|g' -i.bak configure
+    rm src/tool_hugehelp.c
+  '';
+
+  configureFlags = [
+      # Disable default CA bundle, use NIX_SSL_CERT_FILE or fallback
+      # to nss-cacert from the default profile.
+      "--without-ca-bundle"
+      "--without-ca-path"
+      # The build fails when using wolfssl with --with-ca-fallback
+      ( if wolfsslSupport then "--without-ca-fallback" else "--with-ca-fallback")
+      "--disable-manual"
+      ( if sslSupport then "--with-ssl=${openssl.dev}" else "--without-ssl" )
+      ( if gnutlsSupport then "--with-gnutls=${gnutls.dev}" else "--without-gnutls" )
+      ( if scpSupport then "--with-libssh2=${libssh2.dev}" else "--without-libssh2" )
+      ( if ldapSupport then "--enable-ldap" else "--disable-ldap" )
+      ( if ldapSupport then "--enable-ldaps" else "--disable-ldaps" )
+      ( if idnSupport then "--with-libidn=${libidn.dev}" else "--without-libidn" )
+      ( if brotliSupport then "--with-brotli" else "--without-brotli" )
+    ]
+    ++ stdenv.lib.optional wolfsslSupport "--with-wolfssl=${wolfssl.dev}"
+    ++ stdenv.lib.optional c-aresSupport "--enable-ares=${c-ares}"
+    ++ stdenv.lib.optional gssSupport "--with-gssapi=${libkrb5.dev}"
+       # For the 'urandom', maybe it should be a cross-system option
+    ++ stdenv.lib.optional (stdenv.hostPlatform != stdenv.buildPlatform)
+       "--with-random=/dev/urandom"
+    ++ stdenv.lib.optionals stdenv.hostPlatform.isWindows [
+      "--disable-shared"
+      "--enable-static"
+    ];
+
+  CXX = "${stdenv.cc.targetPrefix}c++";
+  CXXCPP = "${stdenv.cc.targetPrefix}c++ -E";
+
+  doCheck = false; # expensive, fails
+
+  postInstall = ''
+    moveToOutput bin/curl-config "$dev"
+
+    # Install completions
+    make -C scripts install
+  '' + stdenv.lib.optionalString scpSupport ''
+    sed '/^dependency_libs/s|${libssh2.dev}|${libssh2.out}|' -i "$out"/lib/*.la
+  '' + stdenv.lib.optionalString gnutlsSupport ''
+    ln $out/lib/libcurl.so $out/lib/libcurl-gnutls.so
+    ln $out/lib/libcurl.so $out/lib/libcurl-gnutls.so.4
+    ln $out/lib/libcurl.so $out/lib/libcurl-gnutls.so.4.4.0
+  '';
+
+  passthru = {
+    inherit sslSupport openssl;
+  };
+
+  meta = with stdenv.lib; {
+    description = "A command line tool for transferring files with URL syntax";
+    homepage    = https://curl.haxx.se/;
+    maintainers = with maintainers; [ lovek323 ];
+    license = licenses.curl;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/curlie/default.nix b/nixpkgs/pkgs/tools/networking/curlie/default.nix
new file mode 100644
index 000000000000..fa1471aa6203
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/curlie/default.nix
@@ -0,0 +1,22 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "curlie";
+  version = "1.3.1";
+
+  src= fetchFromGitHub {
+    owner = "rs";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "09v8alrbw6qva3q3bcqxnyjm7svagfxqvhdff7cqf5pbmkxnhln9";
+  };
+
+  modSha256 = "18nwq99vv3nbdwfilfn8v64mn58jviwybi93li0lcg7779nxab3d";
+
+  meta = with lib; {
+    description = "Curlie is a frontend to curl that adds the ease of use of httpie, without compromising on features and performance";
+    homepage = https://curlie.io/;
+    maintainers = with maintainers; [ ma27 ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/cutter/default.nix b/nixpkgs/pkgs/tools/networking/cutter/default.nix
new file mode 100644
index 000000000000..28eab7f495aa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/cutter/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "cutter-1.04";
+
+  src = fetchurl {
+    url = "http://www.digitage.co.uk/digitage/files/cutter/${name}.tgz";
+    sha256 = "100iy31a3njif6vh9gfsqrm14hac05rrflla275gd4rkxdlnqcqv";
+  };
+
+  installPhase = ''
+    install -D -m 0755 cutter $out/bin/tcp-cutter
+  '';
+
+  meta = with stdenv.lib; {
+    description = "TCP/IP Connection cutting on Linux Firewalls and Routers";
+    homepage = http://www.digitage.co.uk/digitage/software/linux-security/cutter;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.offline ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/darkstat/default.nix b/nixpkgs/pkgs/tools/networking/darkstat/default.nix
new file mode 100644
index 000000000000..6509c9c31060
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/darkstat/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl, libpcap, zlib }:
+
+stdenv.mkDerivation rec {
+  version = "3.0.719";
+  pname = "darkstat";
+
+  src = fetchurl {
+    url = "${meta.homepage}/${pname}-${version}.tar.bz2";
+    sha256 = "1mzddlim6dhd7jhr4smh0n2fa511nvyjhlx76b03vx7phnar1bxf";
+  };
+
+  buildInputs = [ libpcap zlib ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "Network statistics web interface";
+    longDescription = ''
+      Captures network traffic, calculates statistics about usage, and serves
+      reports over HTTP. Features:
+      - Traffic graphs, reports per host, shows ports for each host.
+      - Embedded web-server with deflate compression.
+      - Asynchronous reverse DNS resolution using a child process.
+      - Small. Portable. Single-threaded. Efficient.
+      - Supports IPv6.
+    '';
+    homepage = http://unix4lyfe.org/darkstat;
+    license = licenses.gpl2;
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/davix/default.nix b/nixpkgs/pkgs/tools/networking/davix/default.nix
new file mode 100644
index 000000000000..9faad3775209
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/davix/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl, cmake, pkgconfig, openssl, libxml2, boost, python3, libuuid }:
+
+stdenv.mkDerivation rec {
+  version = "0.7.5";
+  pname = "davix";
+  nativeBuildInputs = [ cmake pkgconfig python3 ];
+  buildInputs = [ openssl libxml2 boost libuuid ];
+
+  # using the url below since the 0.7.5 release did carry a broken CMake file,
+  # supposedly fixed in the next release
+  # https://github.com/cern-fts/davix/issues/40
+  src = fetchurl {
+    url = "http://grid-deployment.web.cern.ch/grid-deployment/dms/lcgutil/tar/davix/${version}/davix-${version}.tar.gz";
+    sha256 = "1j3gzsjhzrsk6irxalc3rwgp9cqb52chriadmy1mv1s6d2bwl86r";
+  };
+
+
+  meta = with stdenv.lib; {
+    description = "Toolkit for Http-based file management";
+
+    longDescription = "Davix is a toolkit designed for file
+    operations with Http based protocols (WebDav, Amazon S3, ...).
+    Davix provides an API and a set of command line tools";
+
+    license     = licenses.lgpl2Plus;
+    homepage    = http://dmc.web.cern.ch/projects/davix/home;
+    maintainers = [ maintainers.adev ];
+    platforms   = platforms.all;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/networking/dd-agent/40103-iostat-fix.patch b/nixpkgs/pkgs/tools/networking/dd-agent/40103-iostat-fix.patch
new file mode 100644
index 000000000000..9897a76c957d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dd-agent/40103-iostat-fix.patch
@@ -0,0 +1,30 @@
+diff --git a/checks/system/unix.py b/checks/system/unix.py
+index c37af3c3..58c72626 100644
+--- a/checks/system/unix.py
++++ b/checks/system/unix.py
+@@ -39,7 +39,7 @@ class IO(Check):
+         self.value_re = re.compile(r'\d+\.\d+')
+ 
+     def _parse_linux2(self, output):
+-        recentStats = output.split('Device:')[2].split('\n')
++        recentStats = output.split('Device')[2].split('\n')
+         header = recentStats[0]
+         headerNames = re.findall(self.header_re, header)
+         device = None
+@@ -123,14 +123,14 @@ class IO(Check):
+ 
+                 #                 Linux 2.6.32-343-ec2 (ip-10-35-95-10)   12/11/2012      _x86_64_        (2 CPU)
+                 #
+-                # Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
++                # Device         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
+                 # sda1              0.00    17.61    0.26   32.63     4.23   201.04    12.48     0.16    4.81   0.53   1.73
+                 # sdb               0.00     2.68    0.19    3.84     5.79    26.07    15.82     0.02    4.93   0.22   0.09
+                 # sdg               0.00     0.13    2.29    3.84   100.53    30.61    42.78     0.05    8.41   0.88   0.54
+                 # sdf               0.00     0.13    2.30    3.84   100.54    30.61    42.78     0.06    9.12   0.90   0.55
+                 # md0               0.00     0.00    0.05    3.37     1.41    30.01    18.35     0.00    0.00   0.00   0.00
+                 #
+-                # Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
++                # Device         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
+                 # sda1              0.00     0.00    0.00   10.89     0.00    43.56     8.00     0.03    2.73   2.73   2.97
+                 # sdb               0.00     0.00    0.00    2.97     0.00    11.88     8.00     0.00    0.00   0.00   0.00
+                 # sdg               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
diff --git a/nixpkgs/pkgs/tools/networking/dd-agent/5.nix b/nixpkgs/pkgs/tools/networking/dd-agent/5.nix
new file mode 100644
index 000000000000..98902e9809b9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dd-agent/5.nix
@@ -0,0 +1,112 @@
+{ stdenv, fetchFromGitHub, python
+, unzip, makeWrapper }:
+let
+  python' = python.override {
+    packageOverrides = self: super: {
+      docker = self.buildPythonPackage rec {
+        name = "docker-${version}";
+        version = "1.10.6";
+
+        src = fetchFromGitHub {
+          owner = "docker";
+          repo = "docker-py";
+          rev = version;
+          sha256 = "1awzpbrkh4fympqzddz5i3ml81b7f0i0nwkvbpmyxjjfqx6l0m4m";
+        };
+
+        propagatedBuildInputs = with self; [
+          six
+          requests
+          websocket_client
+          ipaddress
+          backports_ssl_match_hostname
+          docker_pycreds
+          uptime
+        ];
+
+        # due to flake8
+        doCheck = false;
+      };
+
+      pymongo = super.pymongo.overridePythonAttrs (oldAttrs: rec {
+        version = "2.9.5";
+        src = oldAttrs.src.override {
+          inherit version;
+          sha256 = "912516ac6a355d7624374a38337b8587afe3eb535c0a5456b3bd12df637a6e70";
+        };
+      });
+    };
+  };
+
+in stdenv.mkDerivation rec {
+  version = "5.11.2";
+  pname = "dd-agent";
+
+  src = fetchFromGitHub {
+    owner  = "datadog";
+    repo   = "dd-agent";
+    rev    = version;
+    sha256 = "1iqxvgpsqibqw3vk79158l2pnb6y4pjhjp2d6724lm5rpz4825lx";
+  };
+
+  patches = [ ./40103-iostat-fix.patch ];
+
+  buildInputs = [
+    unzip
+    makeWrapper
+  ] ++ (with python'.pkgs; [
+    requests
+    psycopg2
+    psutil
+    ntplib
+    simplejson
+    pyyaml
+    pymongo
+    python-etcd
+    consul
+    docker
+  ]);
+  propagatedBuildInputs = with python'.pkgs; [ python tornado ];
+
+  buildCommand = ''
+    mkdir -p $out/bin
+    cp -R $src $out/agent
+    chmod u+w -R $out
+    (cd $out/agent; patchPhase)
+    PYTHONPATH=$out/agent:$PYTHONPATH
+    ln -s $out/agent/agent.py $out/bin/dd-agent
+    ln -s $out/agent/dogstatsd.py $out/bin/dogstatsd
+    ln -s $out/agent/ddagent.py $out/bin/dd-forwarder
+
+    # Move out default conf.d so that /etc/dd-agent/conf.d is used
+    mv $out/agent/conf.d $out/agent/conf.d-system
+
+    cat > $out/bin/dd-jmxfetch <<EOF
+    #!/usr/bin/env bash
+    exec ${python}/bin/python $out/agent/jmxfetch.py $@
+    EOF
+    chmod a+x $out/bin/dd-jmxfetch
+
+    wrapProgram $out/bin/dd-forwarder \
+      --prefix PYTHONPATH : $PYTHONPATH
+    wrapProgram $out/bin/dd-agent \
+      --prefix PYTHONPATH : $PYTHONPATH
+    wrapProgram $out/bin/dogstatsd \
+      --prefix PYTHONPATH : $PYTHONPATH
+    wrapProgram $out/bin/dd-jmxfetch \
+      --prefix PYTHONPATH : $PYTHONPATH
+
+    patchShebangs $out
+  '';
+
+  meta = {
+    description = ''
+      Event collector for the DataDog analysis service
+      -- v5 Python implementation
+    '';
+    homepage    = https://www.datadoghq.com;
+    license     = stdenv.lib.licenses.bsd3;
+    platforms   = stdenv.lib.platforms.all;
+    maintainers = with stdenv.lib.maintainers; [ thoughtpolice domenkozar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dd-agent/README.md b/nixpkgs/pkgs/tools/networking/dd-agent/README.md
new file mode 100644
index 000000000000..8cff23b9574c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dd-agent/README.md
@@ -0,0 +1,17 @@
+To update datadog-agent v6 (v5 is deprecated and should be removed):
+
+1. Bump `version`, `rev`, `sha256` and `payloadVersion` in `datadog-agent.nix`
+2. `git clone https://github.com/DataDog/datadog-agent.git && cd datadog-agent`
+3. `git checkout <tag>`
+4. `nix-env -i -f https://github.com/nixcloud/dep2nix/archive/master.tar.gz`
+5. `dep2nix`
+6. `cp deps.nix $NIXPKGS/pkgs/tools/networking/dd-agent/datadog-agent-deps.nix`
+
+To update datadog-process-agent:
+
+1. Bump `version`, `rev` and `sha256` in `datadog-process-agent.nix`
+2. `git clone https://github.com/DataDog/datadog-process-agent.git && cd datadog-process-agent`
+3. `git checkout <tag>`
+4. `nix-env -i -f https://github.com/nixcloud/dep2nix/archive/master.tar.gz`
+5. `dep2nix`
+6. `cp deps.nix $NIXPKGS/pkgs/tools/networking/dd-agent/datadog-process-agent-deps.nix`
diff --git a/nixpkgs/pkgs/tools/networking/dd-agent/datadog-agent-deps.nix b/nixpkgs/pkgs/tools/networking/dd-agent/datadog-agent-deps.nix
new file mode 100644
index 000000000000..1121ec0405c1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dd-agent/datadog-agent-deps.nix
@@ -0,0 +1,1353 @@
+# file generated from Gopkg.lock using dep2nix (https://github.com/nixcloud/dep2nix)
+[
+  {
+    goPackagePath  = "bitbucket.org/ww/goautoneg";
+    fetch = {
+      type = "git";
+      url = "https://github.com/adjust/goautoneg";
+      rev =  "d788f35a0315672bc90f50a6145d1252a230ee0d";
+      sha256 = "19khhn5xhqv1yp7d6k987gh5w5rhrjnp4p0c6fyrd8z6lzz5h9qi";
+    };
+  }
+  {
+    goPackagePath  = "github.com/DataDog/agent-payload";
+    fetch = {
+      type = "git";
+      url = "https://github.com/DataDog/agent-payload";
+      rev =  "c76e9d5be7457cafb7b3e056c6e8ae127b1f0431";
+      sha256 = "0wva55yz5gs5gw23icz1z23hwhjw5vmijx4aa3fp3bq6pi63s873";
+    };
+  }
+  {
+    goPackagePath  = "github.com/DataDog/datadog-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/DataDog/datadog-go";
+      rev =  "e67964b4021ad3a334e748e8811eb3cd6becbc6e";
+      sha256 = "1b2dzyk9c9icdwcyfiwh3djzh8gb5z4hmhp796ns7hh72cdnnys1";
+    };
+  }
+  {
+    goPackagePath  = "github.com/DataDog/gohai";
+    fetch = {
+      type = "git";
+      url = "https://github.com/DataDog/gohai";
+      rev =  "43b075bb9705588cd89c71363d6d72937e3020c7";
+      sha256 = "195z5g8gdxcx4cq51p2xqha3j8m7mk5d5lr6i3hbaxp948hgc8dh";
+    };
+  }
+  {
+    goPackagePath  = "github.com/DataDog/mmh3";
+    fetch = {
+      type = "git";
+      url = "https://github.com/DataDog/mmh3";
+      rev =  "2cfb68475274527a10701355c739f31dd404718c";
+      sha256 = "09jgzxi08pkxllxk3f5qwipz96jxrw5v035fj2bkid1d4akn8y0b";
+    };
+  }
+  {
+    goPackagePath  = "github.com/DataDog/viper";
+    fetch = {
+      type = "git";
+      url = "https://github.com/DataDog/viper";
+      rev =  "v1.5.0";
+      sha256 = "1sv0xvmfaif7zpfwk0j6qf11hxnfdsb2zfj63b9zx7l0zzhjzh06";
+    };
+  }
+  {
+    goPackagePath  = "github.com/DataDog/zstd";
+    fetch = {
+      type = "git";
+      url = "https://github.com/DataDog/zstd";
+      rev =  "aebefd9fcb99f22cd691ef778a12ed68f0e6a1ab";
+      sha256 = "06wphl43ji23c0cmmm6fd3wszbwq36mdp1jarak2a6hmxl6yf0b8";
+    };
+  }
+  {
+    goPackagePath  = "github.com/Microsoft/go-winio";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Microsoft/go-winio";
+      rev =  "67921128fb397dd80339870d2193d6b1e6856fd4";
+      sha256 = "1m3ajjwpdmbzhn5iclhzgyknfncw06fnd5n91yxlf75qsq235rz3";
+    };
+  }
+  {
+    goPackagePath  = "github.com/Microsoft/hcsshim";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Microsoft/hcsshim";
+      rev =  "0acf63599bff447edf6bbfb8bbb38cb5fb33aa1e";
+      sha256 = "009jx133302pj0jf1bxsj4r5zy7j0lxmr7l53czi7930516b0rh3";
+    };
+  }
+  {
+    goPackagePath  = "github.com/NYTimes/gziphandler";
+    fetch = {
+      type = "git";
+      url = "https://github.com/NYTimes/gziphandler";
+      rev =  "2600fb119af974220d3916a5916d6e31176aac1b";
+      sha256 = "0bh6qqz2iyrnxhhj02s8mqayqwqxy182ldxh97q1vg7phlbm52xx";
+    };
+  }
+  {
+    goPackagePath  = "github.com/PuerkitoBio/purell";
+    fetch = {
+      type = "git";
+      url = "https://github.com/PuerkitoBio/purell";
+      rev =  "0bcb03f4b4d0a9428594752bd2a3b9aa0a9d4bd4";
+      sha256 = "0vsxyn1fbm7g873b8kf3hcsgqgncb5nmfq3zfsc35a9yhzarka91";
+    };
+  }
+  {
+    goPackagePath  = "github.com/PuerkitoBio/urlesc";
+    fetch = {
+      type = "git";
+      url = "https://github.com/PuerkitoBio/urlesc";
+      rev =  "de5bf2ad457846296e2031421a34e2568e304e35";
+      sha256 = "0n0srpqwbaan1wrhh2b7ysz543pjs1xw2rghvqyffg9l0g8kzgcw";
+    };
+  }
+  {
+    goPackagePath  = "github.com/StackExchange/wmi";
+    fetch = {
+      type = "git";
+      url = "https://github.com/StackExchange/wmi";
+      rev =  "5d049714c4a64225c3c79a7cf7d02f7fb5b96338";
+      sha256 = "1slw6v1fl8i0hz4db9lph55pbhnrxhqyndq6vm27dgvpj22k29fk";
+    };
+  }
+  {
+    goPackagePath  = "github.com/aws/aws-sdk-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/aws/aws-sdk-go";
+      rev =  "bff41fb23b7550368282029f6478819d6a99ae0f";
+      sha256 = "1hcd8f3m2cq02mj9i8c1ynbh3j0iyw14l1wszm0qgs18nsj1rzgn";
+    };
+  }
+  {
+    goPackagePath  = "github.com/beevik/ntp";
+    fetch = {
+      type = "git";
+      url = "https://github.com/beevik/ntp";
+      rev =  "cb3dae3a7588ae35829eb5724df611cd75152fba";
+      sha256 = "0nc6f7d0xw23y18z9qxrmm8kvnywihassyk706mn9v4makmhalnz";
+    };
+  }
+  {
+    goPackagePath  = "github.com/beorn7/perks";
+    fetch = {
+      type = "git";
+      url = "https://github.com/beorn7/perks";
+      rev =  "3a771d992973f24aa725d07868b467d1ddfceafb";
+      sha256 = "1l2lns4f5jabp61201sh88zf3b0q793w4zdgp9nll7mmfcxxjif3";
+    };
+  }
+  {
+    goPackagePath  = "github.com/cenkalti/backoff";
+    fetch = {
+      type = "git";
+      url = "https://github.com/cenkalti/backoff";
+      rev =  "2ea60e5f094469f9e65adb9cd103795b73ae743e";
+      sha256 = "0k4899ifpir6kmfxli8a2xfj5zdh0xb2jd0fq2r38wzd4pk25ipr";
+    };
+  }
+  {
+    goPackagePath  = "github.com/cihub/seelog";
+    fetch = {
+      type = "git";
+      url = "https://github.com/cihub/seelog";
+      rev =  "d2c6e5aa9fbfdd1c624e140287063c7730654115";
+      sha256 = "0ab9kyrh51x1x71z37pwjsla0qv11a1qv697xafyc4r5nq5hds6p";
+    };
+  }
+  {
+    goPackagePath  = "github.com/clbanning/mxj";
+    fetch = {
+      type = "git";
+      url = "https://github.com/clbanning/mxj";
+      rev =  "1f00e0bf9bacd7ea9c93d27594d1d1f5a41bac36";
+      sha256 = "1cb7kib79xrzr8n91p6kskmn30ayqrhbqql2ppyf879967wbm8qy";
+    };
+  }
+  {
+    goPackagePath  = "github.com/containerd/cgroups";
+    fetch = {
+      type = "git";
+      url = "https://github.com/containerd/cgroups";
+      rev =  "3024bc7cc0c88af4b32d38a14444f38e65ab169f";
+      sha256 = "09jmzwl0zjzwhyd77pp8x3xwihcjxlxa9wamkx22rvd1pqlgszw7";
+    };
+  }
+  {
+    goPackagePath  = "github.com/containerd/containerd";
+    fetch = {
+      type = "git";
+      url = "https://github.com/containerd/containerd";
+      rev =  "9754871865f7fe2f4e74d43e2fc7ccd237edcbce";
+      sha256 = "065snv0s3v3z0ghadlii4w78qnhchcbx2kfdrvm8fk8gb4pkx1ya";
+    };
+  }
+  {
+    goPackagePath  = "github.com/containerd/continuity";
+    fetch = {
+      type = "git";
+      url = "https://github.com/containerd/continuity";
+      rev =  "c7c5070e6f6e090ab93b0a61eb921f2196fc3383";
+      sha256 = "0xyf9w4xn501jspl4r6ml84am90bfgljnjlbd4i1pxkm372qzvzf";
+    };
+  }
+  {
+    goPackagePath  = "github.com/containerd/cri";
+    fetch = {
+      type = "git";
+      url = "https://github.com/containerd/cri";
+      rev =  "f3687c59470b76ee57c90d4b3dd92888dec58c2b";
+      sha256 = "00lasx5yylmgsj1f9znl3xyxm2bngj4xfj69vcwb4qzdy0vclc7w";
+    };
+  }
+  {
+    goPackagePath  = "github.com/containerd/fifo";
+    fetch = {
+      type = "git";
+      url = "https://github.com/containerd/fifo";
+      rev =  "3d5202aec260678c48179c56f40e6f38a095738c";
+      sha256 = "11jp12vgfj0xg9m2w5cfay72fwrxb6w8za7rkcqw8yy8hypiqqxq";
+    };
+  }
+  {
+    goPackagePath  = "github.com/containerd/typeurl";
+    fetch = {
+      type = "git";
+      url = "https://github.com/containerd/typeurl";
+      rev =  "a93fcdb778cd272c6e9b3028b2f42d813e785d40";
+      sha256 = "0aqnf5rzc5pldln0czhxlr0fqaf5553ab7wzsq85p90lg1ryqnd6";
+    };
+  }
+  {
+    goPackagePath  = "github.com/coreos/etcd";
+    fetch = {
+      type = "git";
+      url = "https://github.com/coreos/etcd";
+      rev =  "c9504f61fc7f29b0ad30bf8bab02d9e1b600e962";
+      sha256 = "1ap8zhfz6pcn2ipn27s84ihpyrvpjrb48mpy4n5pr6khrni83p1a";
+    };
+  }
+  {
+    goPackagePath  = "github.com/coreos/go-semver";
+    fetch = {
+      type = "git";
+      url = "https://github.com/coreos/go-semver";
+      rev =  "8ab6407b697782a06568d4b7f1db25550ec2e4c6";
+      sha256 = "1gghi5bnqj50hfxhqc1cxmynqmh2yk9ii7ab9gsm75y5cp94ymk0";
+    };
+  }
+  {
+    goPackagePath  = "github.com/coreos/go-systemd";
+    fetch = {
+      type = "git";
+      url = "https://github.com/coreos/go-systemd";
+      rev =  "40e2722dffead74698ca12a750f64ef313ddce05";
+      sha256 = "0kq7aa0pbn8gv9ny2a1gfx3ybsqyryfwz9gv7fck6zfc8xxbl1fa";
+    };
+  }
+  {
+    goPackagePath  = "github.com/coreos/pkg";
+    fetch = {
+      type = "git";
+      url = "https://github.com/coreos/pkg";
+      rev =  "97fdf19511ea361ae1c100dd393cc47f8dcfa1e1";
+      sha256 = "1srn87wih25l09f75483hnxsr8fc6rq3bk7w1x8125ym39p6mg21";
+    };
+  }
+  {
+    goPackagePath  = "github.com/davecgh/go-spew";
+    fetch = {
+      type = "git";
+      url = "https://github.com/davecgh/go-spew";
+      rev =  "346938d642f2ec3594ed81d874461961cd0faa76";
+      sha256 = "0d4jfmak5p6lb7n2r6yvf5p1zcw0l8j74kn55ghvr7zr7b7axm6c";
+    };
+  }
+  {
+    goPackagePath  = "github.com/docker/distribution";
+    fetch = {
+      type = "git";
+      url = "https://github.com/docker/distribution";
+      rev =  "83389a148052d74ac602f5f1d62f86ff2f3c4aa5";
+      sha256 = "0ypps7340k1g1njcdbn83c9233hrki0mxyj66av1i55ji378ayyn";
+    };
+  }
+  {
+    goPackagePath  = "github.com/docker/docker";
+    fetch = {
+      type = "git";
+      url = "https://github.com/docker/docker";
+      rev =  "092cba3727bb9b4a2f0e922cd6c0f93ea270e363";
+      sha256 = "0l9kjibnpwcgk844sibxk9ppyqniw9r0np1mzp95f8f461jb0iar";
+    };
+  }
+  {
+    goPackagePath  = "github.com/docker/go-connections";
+    fetch = {
+      type = "git";
+      url = "https://github.com/docker/go-connections";
+      rev =  "3ede32e2033de7505e6500d6c868c2b9ed9f169d";
+      sha256 = "0v1pkr8apwmhyzbjfriwdrs1ihlk6pw7izm57r24mf9jdmg3fyb0";
+    };
+  }
+  {
+    goPackagePath  = "github.com/docker/go-events";
+    fetch = {
+      type = "git";
+      url = "https://github.com/docker/go-events";
+      rev =  "9461782956ad83b30282bf90e31fa6a70c255ba9";
+      sha256 = "0vn0kd0w253jwdk86gv1h6s8p6bzxiyif74xdzlb39zr6fdrr145";
+    };
+  }
+  {
+    goPackagePath  = "github.com/docker/go-units";
+    fetch = {
+      type = "git";
+      url = "https://github.com/docker/go-units";
+      rev =  "47565b4f722fb6ceae66b95f853feed578a4a51c";
+      sha256 = "0npxsb3pp89slwf4a73fxm20hykad8xggij6i6hcd5jy19bjrd93";
+    };
+  }
+  {
+    goPackagePath  = "github.com/docker/spdystream";
+    fetch = {
+      type = "git";
+      url = "https://github.com/docker/spdystream";
+      rev =  "bc6354cbbc295e925e4c611ffe90c1f287ee54db";
+      sha256 = "08746a15snvmax6cnzn2qy7cvsspxbsx97vdbjpdadir3pypjxya";
+    };
+  }
+  {
+    goPackagePath  = "github.com/dsnet/compress";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dsnet/compress";
+      rev =  "cc9eb1d7ad760af14e8f918698f745e80377af4f";
+      sha256 = "159liclywmyb6zx88ga5gn42hfl4cpk1660zss87fkx31hdq9fgx";
+    };
+  }
+  {
+    goPackagePath  = "github.com/dustin/go-humanize";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dustin/go-humanize";
+      rev =  "9f541cc9db5d55bce703bd99987c9d5cb8eea45e";
+      sha256 = "1kqf1kavdyvjk7f8kx62pnm7fbypn9z1vbf8v2qdh3y7z7a0cbl3";
+    };
+  }
+  {
+    goPackagePath  = "github.com/elazarl/go-bindata-assetfs";
+    fetch = {
+      type = "git";
+      url = "https://github.com/elazarl/go-bindata-assetfs";
+      rev =  "30f82fa23fd844bd5bb1e5f216db87fd77b5eb43";
+      sha256 = "1swfb37g6sga3awvcmxf49ngbpvjv7ih5an9f8ixjqcfcwnb7nzp";
+    };
+  }
+  {
+    goPackagePath  = "github.com/emicklei/go-restful";
+    fetch = {
+      type = "git";
+      url = "https://github.com/emicklei/go-restful";
+      rev =  "3658237ded108b4134956c1b3050349d93e7b895";
+      sha256 = "07sm3b5dlrqld4r8r1w79s37y41fk4zmw4afhi2ragjy1iarqck3";
+    };
+  }
+  {
+    goPackagePath  = "github.com/emicklei/go-restful-swagger12";
+    fetch = {
+      type = "git";
+      url = "https://github.com/emicklei/go-restful-swagger12";
+      rev =  "dcef7f55730566d41eae5db10e7d6981829720f6";
+      sha256 = "0zz1f6n1qfbyrp592mgyrkyfhki3r0ksic6ja9lxisg8br1ibrvq";
+    };
+  }
+  {
+    goPackagePath  = "github.com/evanphx/json-patch";
+    fetch = {
+      type = "git";
+      url = "https://github.com/evanphx/json-patch";
+      rev =  "afac545df32f2287a079e2dfb7ba2745a643747e";
+      sha256 = "1d90prf8wfvndqjn6nr0k405ykia5vb70sjw4ywd49s9p3wcdyn8";
+    };
+  }
+  {
+    goPackagePath  = "github.com/fatih/color";
+    fetch = {
+      type = "git";
+      url = "https://github.com/fatih/color";
+      rev =  "5b77d2a35fb0ede96d138fc9a99f5c9b6aef11b4";
+      sha256 = "0v8msvg38r8d1iiq2i5r4xyfx0invhc941kjrsg5gzwvagv55inv";
+    };
+  }
+  {
+    goPackagePath  = "github.com/fsnotify/fsnotify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/fsnotify/fsnotify";
+      rev =  "c2828203cd70a50dcccfb2761f8b1f8ceef9a8e9";
+      sha256 = "07va9crci0ijlivbb7q57d2rz9h27zgn2fsm60spjsqpdbvyrx4g";
+    };
+  }
+  {
+    goPackagePath  = "github.com/ghodss/yaml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ghodss/yaml";
+      rev =  "0ca9ea5df5451ffdf184b4428c902747c2c11cd7";
+      sha256 = "0skwmimpy7hlh7pva2slpcplnm912rp3igs98xnqmn859kwa5v8g";
+    };
+  }
+  {
+    goPackagePath  = "github.com/go-ini/ini";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-ini/ini";
+      rev =  "06f5f3d67269ccec1fe5fe4134ba6e982984f7f5";
+      sha256 = "0fx123601aiqqn0yr9vj6qp1bh8gp240w4qdm76irs73q8dxlk7a";
+    };
+  }
+  {
+    goPackagePath  = "github.com/go-ole/go-ole";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-ole/go-ole";
+      rev =  "a41e3c4b706f6ae8dfbff342b06e40fa4d2d0506";
+      sha256 = "114h8x7dh4jp7w7k678fm98lr9icavsf74v6jfipyq7q35bsfr1p";
+    };
+  }
+  {
+    goPackagePath  = "github.com/go-openapi/jsonpointer";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-openapi/jsonpointer";
+      rev =  "3a0015ad55fa9873f41605d3e8f28cd279c32ab2";
+      sha256 = "02an755ashhckqwxyq2avgn8mm4qq3hxda2jsj1a3bix2gkb45v7";
+    };
+  }
+  {
+    goPackagePath  = "github.com/go-openapi/jsonreference";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-openapi/jsonreference";
+      rev =  "3fb327e6747da3043567ee86abd02bb6376b6be2";
+      sha256 = "0zwsrmqqcihm0lj2pc18cpm7wnn1dzwr4kvrlyrxf0lnn7dsdsbm";
+    };
+  }
+  {
+    goPackagePath  = "github.com/go-openapi/spec";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-openapi/spec";
+      rev =  "bcff419492eeeb01f76e77d2ebc714dc97b607f5";
+      sha256 = "00z8sv766kjdrdvpyzm9c5x3d45gssbwsm77qihmkflric6a3d3l";
+    };
+  }
+  {
+    goPackagePath  = "github.com/go-openapi/swag";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-openapi/swag";
+      rev =  "811b1089cde9dad18d4d0c2d09fbdbf28dbd27a5";
+      sha256 = "0hkbrq4jq9s4nrz7xpx03z1zljss1zdylm3zb76hhjpp0s7hz418";
+    };
+  }
+  {
+    goPackagePath  = "github.com/godbus/dbus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/godbus/dbus";
+      rev =  "a389bdde4dd695d414e47b755e95e72b7826432c";
+      sha256 = "1ckvg15zdsgmbn4mi36cazkb407ixc9mmyf7vwj8b8wi3d00rgn9";
+    };
+  }
+  {
+    goPackagePath  = "github.com/gogo/googleapis";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gogo/googleapis";
+      rev =  "08a7655d27152912db7aaf4f983275eaf8d128ef";
+      sha256 = "0mzjclx31hkdgad0xjdihz23qphrsljkvzx5gnwn96m7agx6vkvr";
+    };
+  }
+  {
+    goPackagePath  = "github.com/gogo/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gogo/protobuf";
+      rev =  "1adfc126b41513cc696b209667c8656ea7aac67c";
+      sha256 = "1j7azzlnihcvnd1apw5zr0bz30h7n0gyimqqkgc76vzb1n5dpi7m";
+    };
+  }
+  {
+    goPackagePath  = "github.com/golang/glog";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/glog";
+      rev =  "23def4e6c14b4da8ac2ed8007337bc5eb5007998";
+      sha256 = "0jb2834rw5sykfr937fxi8hxi2zy80sj2bdn9b3jb4b26ksqng30";
+    };
+  }
+  {
+    goPackagePath  = "github.com/golang/groupcache";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/groupcache";
+      rev =  "24b0969c4cb722950103eed87108c8d291a8df00";
+      sha256 = "0rj588dxg4ncanj8vcsixi00161xq54nz7siv47d5ijmzgxs82zf";
+    };
+  }
+  {
+    goPackagePath  = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev =  "b4deda0973fb4c70b50d226b1af49f3da59f5265";
+      sha256 = "0ya4ha7m20bw048m1159ppqzlvda4x0vdprlbk5sdgmy74h3xcdq";
+    };
+  }
+  {
+    goPackagePath  = "github.com/golang/snappy";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/snappy";
+      rev =  "2e65f85255dbc3072edf28d6b5b8efc472979f5a";
+      sha256 = "05w6mpc4qcy0pv8a2bzng8nf4s5rf5phfang4jwy9rgf808q0nxf";
+    };
+  }
+  {
+    goPackagePath  = "github.com/google/btree";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/btree";
+      rev =  "4030bb1f1f0c35b30ca7009e9ebd06849dd45306";
+      sha256 = "0ba430m9fbnagacp57krgidsyrgp3ycw5r7dj71brgp5r52g82p6";
+    };
+  }
+  {
+    goPackagePath  = "github.com/google/gofuzz";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/gofuzz";
+      rev =  "24818f796faf91cd76ec7bddd72458fbced7a6c1";
+      sha256 = "0cq90m2lgalrdfrwwyycrrmn785rgnxa3l3vp9yxkvnv88bymmlm";
+    };
+  }
+  {
+    goPackagePath  = "github.com/googleapis/gnostic";
+    fetch = {
+      type = "git";
+      url = "https://github.com/googleapis/gnostic";
+      rev =  "7c663266750e7d82587642f65e60bc4083f1f84e";
+      sha256 = "0yh3ckd7m0r9h50wmxxvba837d0wb1k5yd439zq4p1kpp4390z12";
+    };
+  }
+  {
+    goPackagePath  = "github.com/gorilla/context";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gorilla/context";
+      rev =  "08b5f424b9271eedf6f9f0ce86cb9396ed337a42";
+      sha256 = "03p4hn87vcmfih0p9w663qbx9lpsf7i7j3lc7yl7n84la3yz63m4";
+    };
+  }
+  {
+    goPackagePath  = "github.com/gorilla/mux";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gorilla/mux";
+      rev =  "e3702bed27f0d39777b0b37b664b6280e8ef8fbf";
+      sha256 = "0pvzm23hklxysspnz52mih6h1q74vfrdhjfm1l3sa9r8hhqmmld2";
+    };
+  }
+  {
+    goPackagePath  = "github.com/gregjones/httpcache";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gregjones/httpcache";
+      rev =  "9cad4c3443a7200dd6400aef47183728de563a38";
+      sha256 = "0wjdwcwqqcx2d5y68qvhg6qyj977il5ijmnn9h9cd6wjbdy0ay6s";
+    };
+  }
+  {
+    goPackagePath  = "github.com/hashicorp/consul";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hashicorp/consul";
+      rev =  "fb848fc48818f58690db09d14640513aa6bf3c02";
+      sha256 = "0ra38xrh6ghcnix8w6gjs33yr2ra1n5jvf8lww4csr4dgw5bh5b1";
+    };
+  }
+  {
+    goPackagePath  = "github.com/hashicorp/go-cleanhttp";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hashicorp/go-cleanhttp";
+      rev =  "d5fe4b57a186c716b0e00b8c301cbd9b4182694d";
+      sha256 = "1m20y90syky4xr81sm3980jpil81nnpzmi6kv0vjr6p584gl1hn8";
+    };
+  }
+  {
+    goPackagePath  = "github.com/hashicorp/go-rootcerts";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hashicorp/go-rootcerts";
+      rev =  "6bb64b370b90e7ef1fa532be9e591a81c3493e00";
+      sha256 = "1a81fcm1i0ji2iva0dcimiichgwpbcb7lx0vyaks87zj5wf04qy9";
+    };
+  }
+  {
+    goPackagePath  = "github.com/hashicorp/golang-lru";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hashicorp/golang-lru";
+      rev =  "0fb14efe8c47ae851c0034ed7a448854d3d34cf3";
+      sha256 = "0vg4yn3088ym4sj1d34kr13lp4v5gya7r2nxshp2bz70n46fsqn2";
+    };
+  }
+  {
+    goPackagePath  = "github.com/hashicorp/hcl";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hashicorp/hcl";
+      rev =  "ef8a98b0bbce4a65b5aa4c368430a80ddc533168";
+      sha256 = "1qalfsc31fra7hcw2lc3s20aj7al62fq3j5fn5kga3mg99b82nyr";
+    };
+  }
+  {
+    goPackagePath  = "github.com/hashicorp/serf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hashicorp/serf";
+      rev =  "d6574a5bb1226678d7010325fb6c985db20ee458";
+      sha256 = "1arakjvhyasrk52vhxas2ghlrby3i3wj59r7sjrkbpln2cdbqnlx";
+    };
+  }
+  {
+    goPackagePath  = "github.com/hectane/go-acl";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hectane/go-acl";
+      rev =  "7f56832555fc229dad908c67d65ed3ce6156b70c";
+      sha256 = "17crpqmn51fqcz0j1vi4grwwiaqpvc3zhl102hn5sy7s2lmdf630";
+    };
+  }
+  {
+    goPackagePath  = "github.com/imdario/mergo";
+    fetch = {
+      type = "git";
+      url = "https://github.com/imdario/mergo";
+      rev =  "9316a62528ac99aaecb4e47eadd6dc8aa6533d58";
+      sha256 = "1mvgn89vp39gcpvhiq4n7nw5ipj7fk6h03jgc6fjwgvwvss213pb";
+    };
+  }
+  {
+    goPackagePath  = "github.com/inconshreveable/mousetrap";
+    fetch = {
+      type = "git";
+      url = "https://github.com/inconshreveable/mousetrap";
+      rev =  "76626ae9c91c4f2a10f34cad8ce83ea42c93bb75";
+      sha256 = "1mn0kg48xkd74brf48qf5hzp0bc6g8cf5a77w895rl3qnlpfw152";
+    };
+  }
+  {
+    goPackagePath  = "github.com/jmespath/go-jmespath";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jmespath/go-jmespath";
+      rev =  "0b12d6b5";
+      sha256 = "1vv6hph8j6xgv7gwl9vvhlsaaqsm22sxxqmgmldi4v11783pc1ld";
+    };
+  }
+  {
+    goPackagePath  = "github.com/json-iterator/go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/json-iterator/go";
+      rev =  "1624edc4454b8682399def8740d46db5e4362ba4";
+      sha256 = "11wn4hpmrs8bmpvd93wqk49jfbbgylakhi35f9k5qd7jd479ci4s";
+    };
+  }
+  {
+    goPackagePath  = "github.com/kardianos/osext";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kardianos/osext";
+      rev =  "ae77be60afb1dcacde03767a8c37337fad28ac14";
+      sha256 = "056dkgxrqjj5r18bnc3knlpgdz5p3yvp12y4y978hnsfhwaqvbjz";
+    };
+  }
+  {
+    goPackagePath  = "github.com/kubernetes-incubator/custom-metrics-apiserver";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes-incubator/custom-metrics-apiserver";
+      rev =  "85ebc283a57287a8fcb3ad4b488d633cd63ef7d8";
+      sha256 = "06m3xa9j46035bagv9r2ghsmdx6pr0r3lcj4hz1cx943dllj0n6v";
+    };
+  }
+  {
+    goPackagePath  = "github.com/lxn/walk";
+    fetch = {
+      type = "git";
+      url = "https://github.com/lxn/walk";
+      rev =  "02935bac0ab8448d5f9bf72ebeeb7ca0d5553f9b";
+      sha256 = "0m0dva6nyv6vxc188c9003g5ylxb6clmlcvqjgaibbcrxkxjw1d5";
+    };
+  }
+  {
+    goPackagePath  = "github.com/lxn/win";
+    fetch = {
+      type = "git";
+      url = "https://github.com/lxn/win";
+      rev =  "7e1250ba2e7749fb9eb865da9ee93fb5a2fe73f1";
+      sha256 = "1n5ksvy3va3zd0iqpl64advjscm2w9n8kxn45ahahvbrbi7zy1zw";
+    };
+  }
+  {
+    goPackagePath  = "github.com/magiconair/properties";
+    fetch = {
+      type = "git";
+      url = "https://github.com/magiconair/properties";
+      rev =  "c2353362d570a7bfa228149c62842019201cfb71";
+      sha256 = "1a10362wv8a8qwb818wygn2z48lgzch940hvpv81hv8gc747ajxn";
+    };
+  }
+  {
+    goPackagePath  = "github.com/mailru/easyjson";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mailru/easyjson";
+      rev =  "3fdea8d05856a0c8df22ed4bc71b3219245e4485";
+      sha256 = "0g3crph77yhv4ipdnwqc32z4cp87ahi4ikad5kyy6q4znnxliz74";
+    };
+  }
+  {
+    goPackagePath  = "github.com/mattn/go-colorable";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-colorable";
+      rev =  "167de6bfdfba052fa6b2d3664c8f5272e23c9072";
+      sha256 = "1nwjmsppsjicr7anq8na6md7b1z84l9ppnlr045hhxjvbkqwalvx";
+    };
+  }
+  {
+    goPackagePath  = "github.com/mattn/go-isatty";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-isatty";
+      rev =  "0360b2af4f38e8d38c7fce2a9f4e702702d73a39";
+      sha256 = "06w45aqz2a6yrk25axbly2k5wmsccv8cspb94bfmz4izvw8h927n";
+    };
+  }
+  {
+    goPackagePath  = "github.com/matttproud/golang_protobuf_extensions";
+    fetch = {
+      type = "git";
+      url = "https://github.com/matttproud/golang_protobuf_extensions";
+      rev =  "c12348ce28de40eed0136aa2b644d0ee0650e56c";
+      sha256 = "1d0c1isd2lk9pnfq2nk0aih356j30k3h1gi2w0ixsivi5csl7jya";
+    };
+  }
+  {
+    goPackagePath  = "github.com/mholt/archiver";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mholt/archiver";
+      rev =  "26cf5bb32d07aa4e8d0de15f56ce516f4641d7df";
+      sha256 = "1r2gcxh8gkyn1l0h7sshachg2fxz6542lbqcar9zym6n2dni30mm";
+    };
+  }
+  {
+    goPackagePath  = "github.com/mitchellh/go-homedir";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mitchellh/go-homedir";
+      rev =  "3864e76763d94a6df2f9960b16a20a33da9f9a66";
+      sha256 = "1n8vya16l60i5jms43yb8fzdgwvqa2q926p5wkg3lbrk8pxy1nv0";
+    };
+  }
+  {
+    goPackagePath  = "github.com/mitchellh/mapstructure";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mitchellh/mapstructure";
+      rev =  "bb74f1db0675b241733089d5a1faa5dd8b0ef57b";
+      sha256 = "1aqk9qr46bwgdc5j7n7als61xvssvyjf4qzfsvhacl4izpygqnw7";
+    };
+  }
+  {
+    goPackagePath  = "github.com/mitchellh/reflectwalk";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mitchellh/reflectwalk";
+      rev =  "63d60e9d0dbc60cf9164e6510889b0db6683d98c";
+      sha256 = "1hpq6sjr6l1h25x68mz13q7sd52dv1mjfxbl5p7m3j7cv85khnvc";
+    };
+  }
+  {
+    goPackagePath  = "github.com/modern-go/concurrent";
+    fetch = {
+      type = "git";
+      url = "https://github.com/modern-go/concurrent";
+      rev =  "bacd9c7ef1dd9b15be4a9909b8ac7a4e313eec94";
+      sha256 = "0s0fxccsyb8icjmiym5k7prcqx36hvgdwl588y0491gi18k5i4zs";
+    };
+  }
+  {
+    goPackagePath  = "github.com/modern-go/reflect2";
+    fetch = {
+      type = "git";
+      url = "https://github.com/modern-go/reflect2";
+      rev =  "4b7aa43c6742a2c18fdef89dd197aaae7dac7ccd";
+      sha256 = "1721y3yr3dpx5dx5ashf063qczk2awy5zjir1jvp1h5hn7qz4i49";
+    };
+  }
+  {
+    goPackagePath  = "github.com/nwaples/rardecode";
+    fetch = {
+      type = "git";
+      url = "https://github.com/nwaples/rardecode";
+      rev =  "e06696f847aeda6f39a8f0b7cdff193b7690aef6";
+      sha256 = "1aj7l8ii7hxnn3q4wzxlx3f92b1aspck6ncyqgb4h2g228phcibw";
+    };
+  }
+  {
+    goPackagePath  = "github.com/opencontainers/go-digest";
+    fetch = {
+      type = "git";
+      url = "https://github.com/opencontainers/go-digest";
+      rev =  "279bed98673dd5bef374d3b6e4b09e2af76183bf";
+      sha256 = "01gc7fpn8ax429024p2fcx3yb18axwz5bjf2hqxlii1jbsgw4bh9";
+    };
+  }
+  {
+    goPackagePath  = "github.com/opencontainers/image-spec";
+    fetch = {
+      type = "git";
+      url = "https://github.com/opencontainers/image-spec";
+      rev =  "d60099175f88c47cd379c4738d158884749ed235";
+      sha256 = "03dvbj3dln8c55v9gp79mgmz2yi2ws3r08iyz2fk41y3i22iaw1q";
+    };
+  }
+  {
+    goPackagePath  = "github.com/opencontainers/runc";
+    fetch = {
+      type = "git";
+      url = "https://github.com/opencontainers/runc";
+      rev =  "baf6536d6259209c3edfa2b22237af82942d3dfa";
+      sha256 = "09fm7f1k4lvx8v3crqb0cli1x2brlz8ka7f7qa8d2sb6ln58h7w7";
+    };
+  }
+  {
+    goPackagePath  = "github.com/opencontainers/runtime-spec";
+    fetch = {
+      type = "git";
+      url = "https://github.com/opencontainers/runtime-spec";
+      rev =  "d810dbc60d8c5aeeb3d054bd1132fab2121968ce";
+      sha256 = "0yqya0wslhv87nlidsmrw2720y3r3jpvqc2sh28y79ciyypxbk38";
+    };
+  }
+  {
+    goPackagePath  = "github.com/openshift/api";
+    fetch = {
+      type = "git";
+      url = "https://github.com/openshift/api";
+      rev =  "0d921e363e951d89f583292c60d013c318df64dc";
+      sha256 = "171xac4hr665q08mp17fld2zfpp95h9mjws2wikcr0brwq878p3s";
+    };
+  }
+  {
+    goPackagePath  = "github.com/patrickmn/go-cache";
+    fetch = {
+      type = "git";
+      url = "https://github.com/patrickmn/go-cache";
+      rev =  "a3647f8e31d79543b2d0f0ae2fe5c379d72cedc0";
+      sha256 = "10020inkzrm931r4bixf8wqr9n39wcrb78vfyxmbvjavvw4zybgs";
+    };
+  }
+  {
+    goPackagePath  = "github.com/pborman/uuid";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pborman/uuid";
+      rev =  "e790cca94e6cc75c7064b1332e63811d4aae1a53";
+      sha256 = "0y1crv4wkly2naki2f68ln9sc8l9skswkc696vr8vc43p4p67wam";
+    };
+  }
+  {
+    goPackagePath  = "github.com/pelletier/go-toml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pelletier/go-toml";
+      rev =  "c01d1270ff3e442a8a57cddc1c92dc1138598194";
+      sha256 = "1fjzpcjng60mc3a4b2ql5a00d5gah84wj740dabv9kq67mpg8fxy";
+    };
+  }
+  {
+    goPackagePath  = "github.com/petar/GoLLRB";
+    fetch = {
+      type = "git";
+      url = "https://github.com/petar/GoLLRB";
+      rev =  "53be0d36a84c2a886ca057d34b6aa4468df9ccb4";
+      sha256 = "01xp3lcamqkvl91jg6ly202gdsgf64j39rkrcqxi6v4pbrcv7hz0";
+    };
+  }
+  {
+    goPackagePath  = "github.com/peterbourgon/diskv";
+    fetch = {
+      type = "git";
+      url = "https://github.com/peterbourgon/diskv";
+      rev =  "5f041e8faa004a95c88a202771f4cc3e991971e6";
+      sha256 = "1mxpa5aad08x30qcbffzk80g9540wvbca4blc1r2qyzl65b8929b";
+    };
+  }
+  {
+    goPackagePath  = "github.com/philhofer/fwd";
+    fetch = {
+      type = "git";
+      url = "https://github.com/philhofer/fwd";
+      rev =  "bb6d471dc95d4fe11e432687f8b70ff496cf3136";
+      sha256 = "1pg84khadh79v42y8sjsdgfb54vw2kzv7hpapxkifgj0yvcp30g2";
+    };
+  }
+  {
+    goPackagePath  = "github.com/pierrec/lz4";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pierrec/lz4";
+      rev =  "1958fd8fff7f115e79725b1288e0b878b3e06b00";
+      sha256 = "1c4xi40bvcp91a3lw9nw1hylvdmb51hviwrqv5f6zj1sswkv24ps";
+    };
+  }
+  {
+    goPackagePath  = "github.com/pkg/errors";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pkg/errors";
+      rev =  "645ef00459ed84a119197bfb8d8205042c6df63d";
+      sha256 = "001i6n71ghp2l6kdl3qq1v2vmghcz3kicv9a5wgcihrzigm75pp5";
+    };
+  }
+  {
+    goPackagePath  = "github.com/pmezard/go-difflib";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pmezard/go-difflib";
+      rev =  "792786c7400a136282c1664665ae0a8db921c6c2";
+      sha256 = "0c1cn55m4rypmscgf0rrb88pn58j3ysvc2d0432dp3c6fqg6cnzw";
+    };
+  }
+  {
+    goPackagePath  = "github.com/prometheus/client_golang";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_golang";
+      rev =  "c5b7fccd204277076155f10851dad72b76a49317";
+      sha256 = "1xqny3147g12n4j03kxm8s9mvdbs3ln6i56c655mybrn9jjy48kd";
+    };
+  }
+  {
+    goPackagePath  = "github.com/prometheus/client_model";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_model";
+      rev =  "99fa1f4be8e564e8a6b613da7fa6f46c9edafc6c";
+      sha256 = "19y4ywsivhpxj7ikf2j0gm9k3cmyw37qcbfi78n526jxcc7kw998";
+    };
+  }
+  {
+    goPackagePath  = "github.com/prometheus/common";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/common";
+      rev =  "89d80287644767070914e30199b4d959e491bd3d";
+      sha256 = "0nvbjr8nhkyakgjariskl3bvyb18723dzjmmxph6ppf4khi50j0w";
+    };
+  }
+  {
+    goPackagePath  = "github.com/prometheus/procfs";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/procfs";
+      rev =  "7d6f385de8bea29190f15ba9931442a0eaef9af7";
+      sha256 = "18cish8yas5r6xhgp8p8n7lg4wh3d4szzirszxra8m7rwy3swxxq";
+    };
+  }
+  {
+    goPackagePath  = "github.com/samuel/go-zookeeper";
+    fetch = {
+      type = "git";
+      url = "https://github.com/samuel/go-zookeeper";
+      rev =  "c4fab1ac1bec58281ad0667dc3f0907a9476ac47";
+      sha256 = "0i7mxg9hz8ymglq2xcwwswy1pvcr53qd57lzcdlf3d5bjki73a4w";
+    };
+  }
+  {
+    goPackagePath  = "github.com/sbinet/go-python";
+    fetch = {
+      type = "git";
+      url = "https://github.com/sbinet/go-python";
+      rev =  "f976f61134dc6f5b4920941eb1b0e7cec7e4ef4c";
+      sha256 = "15l7wip7kr1z6v3315m9y0070wmwq447q7gwz6490xwnclrq85kl";
+    };
+  }
+  {
+    goPackagePath  = "github.com/shirou/gopsutil";
+    fetch = {
+      type = "git";
+      url = "https://github.com/shirou/gopsutil";
+      rev =  "ccc1c1016bc5d10e803189ee43417c50cdde7f1b";
+      sha256 = "0dk7644fc86n0974a00m2w5nbhzcgs1jjnillic90044w7rycg66";
+    };
+  }
+  {
+    goPackagePath  = "github.com/shirou/w32";
+    fetch = {
+      type = "git";
+      url = "https://github.com/shirou/w32";
+      rev =  "bb4de0191aa41b5507caa14b0650cdbddcd9280b";
+      sha256 = "0xh5vqblhr2c3mlaswawx6nipi4rc2x73rbdvlkakmgi0nnl50m4";
+    };
+  }
+  {
+    goPackagePath  = "github.com/sirupsen/logrus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/sirupsen/logrus";
+      rev =  "3e01752db0189b9157070a0e1668a620f9a85da2";
+      sha256 = "029irw2lsbqi944gdrbkwdw0m2794sqni4g21gsnmz142hbzds8c";
+    };
+  }
+  {
+    goPackagePath  = "github.com/spf13/afero";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/afero";
+      rev =  "787d034dfe70e44075ccc060d346146ef53270ad";
+      sha256 = "0138rjiacl71h7kvhzinviwvy6qa2m6rflpv9lgqv15hnjvhwvg1";
+    };
+  }
+  {
+    goPackagePath  = "github.com/spf13/cast";
+    fetch = {
+      type = "git";
+      url = "https://github.com/DataDog/cast";
+      rev =  "1ee8c8bd14a3d768a7ff681617ed56bc6c204940";
+      sha256 = "0sgqmhicy672250cxgqd8zlni3qlj57r8liyiaq15g9spyhflhl0";
+    };
+  }
+  {
+    goPackagePath  = "github.com/spf13/cobra";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/cobra";
+      rev =  "ef82de70bb3f60c65fb8eebacbb2d122ef517385";
+      sha256 = "1q1nsx05svyv9fv3fy6xv6gs9ffimkyzsfm49flvl3wnvf1ncrkd";
+    };
+  }
+  {
+    goPackagePath  = "github.com/spf13/jwalterweatherman";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/jwalterweatherman";
+      rev =  "7c0cea34c8ece3fbeb2b27ab9b59511d360fb394";
+      sha256 = "132p84i20b9s5r6fs597lsa6648vd415ch7c0d018vm8smzqpd0h";
+    };
+  }
+  {
+    goPackagePath  = "github.com/spf13/pflag";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/pflag";
+      rev =  "583c0c0531f06d5278b7d917446061adc344b5cd";
+      sha256 = "0nr4mdpfhhk94hq4ymn5b2sxc47b29p1akxd8b0hx4dvdybmipb5";
+    };
+  }
+  {
+    goPackagePath  = "github.com/stretchr/objx";
+    fetch = {
+      type = "git";
+      url = "https://github.com/stretchr/objx";
+      rev =  "477a77ecc69700c7cdeb1fa9e129548e1c1c393c";
+      sha256 = "0iph0qmpyqg4kwv8jsx6a56a7hhqq8swrazv40ycxk9rzr0s8yls";
+    };
+  }
+  {
+    goPackagePath  = "github.com/stretchr/testify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/stretchr/testify";
+      rev =  "f35b8ab0b5a2cef36673838d662e249dd9c94686";
+      sha256 = "0dlszlshlxbmmfxj5hlwgv3r22x0y1af45gn1vd198nvvs3pnvfs";
+    };
+  }
+  {
+    goPackagePath  = "github.com/syndtr/gocapability";
+    fetch = {
+      type = "git";
+      url = "https://github.com/syndtr/gocapability";
+      rev =  "33e07d32887e1e06b7c025f27ce52f62c7990bc0";
+      sha256 = "1x88c0b320b13w7samicf19dqx9rr4dnrh3yglk3cba21nwsp57i";
+    };
+  }
+  {
+    goPackagePath  = "github.com/tinylib/msgp";
+    fetch = {
+      type = "git";
+      url = "https://github.com/tinylib/msgp";
+      rev =  "af6442a0fcf6e2a1b824f70dd0c734f01e817751";
+      sha256 = "08ha23sn14071ywrgxlyj7r523vzdwx1i83dcp1mqa830glgqaff";
+    };
+  }
+  {
+    goPackagePath  = "github.com/ugorji/go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ugorji/go";
+      rev =  "8c0409fcbb70099c748d71f714529204975f6c3f";
+      sha256 = "0z61j0cniq3n5af0q57dbpyfmidihzimrwnysfphfzwyd0ic4rcv";
+    };
+  }
+  {
+    goPackagePath  = "github.com/ulikunitz/xz";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ulikunitz/xz";
+      rev =  "0c6b41e72360850ca4f98dc341fd999726ea007f";
+      sha256 = "0a6l7sp67ipxim093qh6fvw8knbxj24l7bj5lykcddi5gwfi78n3";
+    };
+  }
+  {
+    goPackagePath  = "github.com/urfave/negroni";
+    fetch = {
+      type = "git";
+      url = "https://github.com/urfave/negroni";
+      rev =  "5dbbc83f748fc3ad38585842b0aedab546d0ea1e";
+      sha256 = "10w4ygc78hgsryxwmjmz8w51d84bjh7jm8j0xfv4vnpz5gscc8dj";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev =  "a49355c7e3f8fe157a85be2f77e6e269a0f89602";
+      sha256 = "020q1laxjx5kcmnqy4wmdb63zhb0lyq6wpy40axhswzg2nd21s44";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/mobile";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/mobile";
+      rev =  "bceb7ef27cc623473a5b664d2a3450576dddff0f";
+      sha256 = "0xky2417wm61j2p5ki3k4237fxyz8f5ds19nak0lm741s3xs2rqx";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev =  "97aa3a539ec716117a9d15a4659a911f50d13c3c";
+      sha256 = "1738bi8l50f0iq0il6h4qy1cgy39yh3q4gh1lwp5y5j7jyy33ccd";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/sync";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sync";
+      rev =  "1d60e4601c6fd243af51cc01ddf169918a5407ca";
+      sha256 = "046jlanz2lkxq1r57x9bl6s4cvfqaic6p2xybsj8mq1120jv4rs6";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev =  "7138fd3d9dc8335c567ca206f4333fb75eb05d56";
+      sha256 = "09xgxk0d9b88m18sriy4f2l6qavicznxkgsbvjyv56x24r4kmiq0";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/text";
+      rev =  "f21a4dfb5e38f5895301dc265a8def02365cc3d0";
+      sha256 = "0r6x6zjzhr8ksqlpiwm5gdd7s209kwk5p4lw54xjvz10cs3qlq19";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/time";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/time";
+      rev =  "fbb02b2291d28baffd63558aa44b4b56f178d650";
+      sha256 = "0jjqcv6rzihlgg4i797q80g1f6ch5diz2kxqh6488gwkb6nds4h4";
+    };
+  }
+  {
+    goPackagePath  = "google.golang.org/genproto";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/go-genproto";
+      rev =  "ff3583edef7de132f219f0efc00e097cabcc0ec0";
+      sha256 = "0bpzxk85fgvznmdf9356nzh8riqhwzcil9r2a955rbfn27lh4lmy";
+    };
+  }
+  {
+    goPackagePath  = "google.golang.org/grpc";
+    fetch = {
+      type = "git";
+      url = "https://github.com/grpc/grpc-go";
+      rev =  "168a6198bcb0ef175f7dacec0b8691fc141dc9b8";
+      sha256 = "0d8vj372ri55mrqfc0rhjl3albp5ykwfjhda1s5cgm5n40v70pr3";
+    };
+  }
+  {
+    goPackagePath  = "gopkg.in/Knetic/govaluate.v3";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Knetic/govaluate";
+      rev =  "d216395917cc49052c7c7094cf57f09657ca08a8";
+      sha256 = "1b0sy89hy5d1720i43ikqfcxr4v6p9g9c7rnbif8s6256a7c2rsq";
+    };
+  }
+  {
+    goPackagePath  = "gopkg.in/inf.v0";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-inf/inf";
+      rev =  "d2d2541c53f18d2a059457998ce2876cc8e67cbf";
+      sha256 = "00k5iqjcp371fllqxncv7jkf80hn1zww92zm78cclbcn4ybigkng";
+    };
+  }
+  {
+    goPackagePath  = "gopkg.in/natefinch/lumberjack.v2";
+    fetch = {
+      type = "git";
+      url = "https://github.com/natefinch/lumberjack";
+      rev =  "a96e63847dc3c67d17befa69c303767e2f84e54f";
+      sha256 = "1l3vlv72b7rfkpy1164kwd3qzrqmmjnb67akzxqp2mlvc66k6p3d";
+    };
+  }
+  {
+    goPackagePath  = "gopkg.in/square/go-jose.v2";
+    fetch = {
+      type = "git";
+      url = "https://github.com/square/go-jose";
+      rev =  "ef984e69dd356202fd4e4910d4d9c24468bdf0b8";
+      sha256 = "0pxyrygc9mh6yn169rm6i3shax7zmmzps22px6mq3kl87zkk9b8h";
+    };
+  }
+  {
+    goPackagePath  = "gopkg.in/yaml.v2";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-yaml/yaml";
+      rev =  "d670f9405373e636a5a2765eea47fac0c9bc91a4";
+      sha256 = "1w1xid51n8v1mydn2m3vgggw8qgpd5a5sr62snsc77d99fpjsrs0";
+    };
+  }
+  {
+    goPackagePath  = "gopkg.in/zorkian/go-datadog-api.v2";
+    fetch = {
+      type = "git";
+      url = "https://github.com/zorkian/go-datadog-api";
+      rev =  "d7b8b10db6a7eb1c1c2424b10a795a1662e80c9a";
+      sha256 = "069psfvgal6pkwc1s09gdy4mjn4ki4d1zvqnnzn7y15i5llb97kk";
+    };
+  }
+  {
+    goPackagePath  = "k8s.io/api";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes/api";
+      rev =  "4e7be11eab3ffcfc1876898b8272df53785a9504";
+      sha256 = "0klwmkvsnim66y8mvcmkqql12fbr5cja4qgjzp36197i6i335b62";
+    };
+  }
+  {
+    goPackagePath  = "k8s.io/apiextensions-apiserver";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes/apiextensions-apiserver";
+      rev =  "b499623aa7a31f7c85b37017e068b21206a68e25";
+      sha256 = "1c0z71f0wqkwkc5x730l9gmzibkqk6af4mg5l6ks9lk69cbpxk0a";
+    };
+  }
+  {
+    goPackagePath  = "k8s.io/apimachinery";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes/apimachinery";
+      rev =  "def12e63c512da17043b4f0293f52d1006603d9f";
+      sha256 = "0dghch5avwcy3zx5k005hi71i9bl3603pk927xdjr5jlajzwm9xd";
+    };
+  }
+  {
+    goPackagePath  = "k8s.io/apiserver";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes/apiserver";
+      rev =  "d296c96c12b7d15d7fb5fea7a05fb165f8fd4014";
+      sha256 = "0a413zpkm8afhh0jab8zrwvd61kvackll85kcdb6gyinw7f6qv7x";
+    };
+  }
+  {
+    goPackagePath  = "k8s.io/client-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes/client-go";
+      rev =  "f2f85107cac6fe04c30435ca0ac0c3318fd1b94c";
+      sha256 = "153a3q172kmpbp6cq5005dgasdw0x36pg9xz1mfgv966k8rwws74";
+    };
+  }
+  {
+    goPackagePath  = "k8s.io/kube-openapi";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes/kube-openapi";
+      rev =  "b742be413d0a6f781c123bed504c8fb39264c57d";
+      sha256 = "13ik6dri0f9fzs8p6987h6n3y2aqjz5cj957826xwkpv4fj2zgq8";
+    };
+  }
+  {
+    goPackagePath  = "k8s.io/kubernetes";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes/kubernetes";
+      rev =  "bb9ffb1654d4a729bb4cec18ff088eacc153c239";
+      sha256 = "0c5xpxg7ns5irrr0ydk8n394yp3922i0m61l26qyc183phr32wxi";
+    };
+  }
+  {
+    goPackagePath  = "k8s.io/metrics";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes/metrics";
+      rev =  "972ef826b8401c180b89cefc7457daa2d116daa9";
+      sha256 = "0ba9mfy253d4pcqdvialh2shs4d43l0q84pn3569wiib8cisbc68";
+    };
+  }
+  {
+    goPackagePath  = "k8s.io/utils";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes/utils";
+      rev =  "cd34563cd63c2bd7c6fe88a73c4dcf34ed8a67cb";
+      sha256 = "1wpqijsvf8s4iqjrrzgbxi3gay6vaglscyq14vxma4iacg8fx1jk";
+    };
+  }
+]
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/networking/dd-agent/datadog-agent.nix b/nixpkgs/pkgs/tools/networking/dd-agent/datadog-agent.nix
new file mode 100644
index 000000000000..2253daa2d115
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dd-agent/datadog-agent.nix
@@ -0,0 +1,81 @@
+{ lib, stdenv, fetchFromGitHub, buildGoPackage, makeWrapper, pythonPackages, pkgconfig, systemd, hostname, extraTags ? [] }:
+
+let
+  # keep this in sync with github.com/DataDog/agent-payload dependency
+  payloadVersion = "4.7.1";
+  python = pythonPackages.python;
+
+in buildGoPackage rec {
+  pname = "datadog-agent";
+  version = "6.11.2";
+  owner   = "DataDog";
+  repo    = "datadog-agent";
+
+  src = fetchFromGitHub {
+    inherit owner repo;
+    rev    = version;
+    sha256 = "1dwdiaf357l9c6b2cps5mdyfma3c1mp96zzxg1826fvz3x8ix68z";
+  };
+
+  subPackages = [
+    "cmd/agent"
+    "cmd/cluster-agent"
+    "cmd/dogstatsd"
+    "cmd/py-launcher"
+    "cmd/trace-agent"
+  ];
+  goDeps = ./datadog-agent-deps.nix;
+  goPackagePath = "github.com/${owner}/${repo}";
+
+
+  nativeBuildInputs = [ pkgconfig makeWrapper ];
+  buildInputs = [ systemd ];
+  PKG_CONFIG_PATH = "${python}/lib/pkgconfig";
+
+
+  preBuild = let
+    ldFlags = stdenv.lib.concatStringsSep " " [
+      "-X ${goPackagePath}/pkg/version.Commit=${src.rev}"
+      "-X ${goPackagePath}/pkg/version.AgentVersion=${version}"
+      "-X ${goPackagePath}/pkg/serializer.AgentPayloadVersion=${payloadVersion}"
+      "-X ${goPackagePath}/pkg/collector/py.pythonHome=${python}"
+      "-r ${python}/lib"
+    ];
+  in ''
+    buildFlagsArray=( "-tags" "ec2 systemd cpython process log secrets ${lib.concatStringsSep " " extraTags}" "-ldflags" "${ldFlags}")
+  '';
+
+  # DataDog use paths relative to the agent binary, so fix these.
+  postPatch = ''
+    sed -e "s|PyChecksPath =.*|PyChecksPath = \"$bin/${python.sitePackages}\"|" \
+        -e "s|distPath =.*|distPath = \"$bin/share/datadog-agent\"|" \
+        -i cmd/agent/common/common_nix.go
+    sed -e "s|/bin/hostname|${lib.getBin hostname}/bin/hostname|" \
+        -i pkg/util/hostname_nix.go
+  '';
+
+  # Install the config files and python modules from the "dist" dir
+  # into standard paths.
+  postInstall = ''
+    mkdir -p $bin/${python.sitePackages} $bin/share/datadog-agent
+    cp -R $src/cmd/agent/dist/conf.d $bin/share/datadog-agent
+    cp -R $src/cmd/agent/dist/{checks,utils,config.py} $bin/${python.sitePackages}
+
+    cp -R $src/pkg/status/dist/templates $bin/share/datadog-agent
+
+    wrapProgram "$bin/bin/agent" \
+      --set PYTHONPATH "$bin/${python.sitePackages}" \
+      --prefix LD_LIBRARY_PATH : ${systemd.lib}/lib
+  '';
+
+  meta = with stdenv.lib; {
+    description = ''
+      Event collector for the DataDog analysis service
+      -- v6 new golang implementation.
+    '';
+    homepage    = https://www.datadoghq.com;
+    license     = licenses.bsd3;
+    platforms   = platforms.all;
+    maintainers = with maintainers; [ thoughtpolice domenkozar rvl ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dd-agent/datadog-process-agent-deps.nix b/nixpkgs/pkgs/tools/networking/dd-agent/datadog-process-agent-deps.nix
new file mode 100644
index 000000000000..2a81702feee9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dd-agent/datadog-process-agent-deps.nix
@@ -0,0 +1,669 @@
+# file generated from Gopkg.lock using dep2nix (https://github.com/nixcloud/dep2nix)
+[
+  {
+    goPackagePath  = "bitbucket.org/ww/goautoneg";
+    fetch = {
+      type = "git";
+      url = "https://github.com/adjust/goautoneg";
+      rev =  "d788f35a0315672bc90f50a6145d1252a230ee0d";
+      sha256 = "19khhn5xhqv1yp7d6k987gh5w5rhrjnp4p0c6fyrd8z6lzz5h9qi";
+    };
+  }
+  {
+    goPackagePath  = "github.com/DataDog/agent-payload";
+    fetch = {
+      type = "git";
+      url = "https://github.com/DataDog/agent-payload";
+      rev =  "f0521943f60221829c6bb5de1c7f788cd4411372";
+      sha256 = "19m3kiwi0g2a0rysjabrb2nkkz7yx632g7s05mylv1x2ixparhrg";
+    };
+  }
+  {
+    goPackagePath  = "github.com/DataDog/datadog-agent";
+    fetch = {
+      type = "git";
+      url = "https://github.com/DataDog/datadog-agent";
+      rev =  "d7712d570b91f4f97af9f155ad1c676921d8325d";
+      sha256 = "1gi921z79la4hjhm8xhl4jz167200qljvhhsy4blj4vinkgfpm8w";
+    };
+  }
+  {
+    goPackagePath  = "github.com/DataDog/datadog-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/DataDog/datadog-go";
+      rev =  "a9c7a9896c1847c9cc2b068a2ae68e9d74540a5d";
+      sha256 = "1m1vpi2s22dqcq0fqhfp3skzkmsbmhzyiw2kh2dw6ii7qimy8zki";
+    };
+  }
+  {
+    goPackagePath  = "github.com/DataDog/gopsutil";
+    fetch = {
+      type = "git";
+      url = "https://github.com/DataDog/gopsutil";
+      rev =  "233cd0cf42c26d835ed6f0e46f2103432a88b526";
+      sha256 = "0rvxs1jjzv3j834dns28zr25bznarjmpgdy0z6gpimnq5nyicys5";
+    };
+  }
+  {
+    goPackagePath  = "github.com/DataDog/viper";
+    fetch = {
+      type = "git";
+      url = "https://github.com/DataDog/viper";
+      rev =  "v1.5.0";
+      sha256 = "1sv0xvmfaif7zpfwk0j6qf11hxnfdsb2zfj63b9zx7l0zzhjzh06";
+    };
+  }
+  {
+    goPackagePath  = "github.com/DataDog/zstd";
+    fetch = {
+      type = "git";
+      url = "https://github.com/DataDog/zstd";
+      rev =  "2b373cbe6ac0c8e6960bbd18026ceb269eef89f5";
+      sha256 = "157kh7w173igxbypknmr8hc8934ykmnb02pkb76k1jwq4sphn8qj";
+    };
+  }
+  {
+    goPackagePath  = "github.com/Microsoft/go-winio";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Microsoft/go-winio";
+      rev =  "97e4973ce50b2ff5f09635a57e2b88a037aae829";
+      sha256 = "14y1gryr3pb3zy09v2g8dh89m363rfd9sch0wgbabh531hfx72vn";
+    };
+  }
+  {
+    goPackagePath  = "github.com/StackExchange/wmi";
+    fetch = {
+      type = "git";
+      url = "https://github.com/StackExchange/wmi";
+      rev =  "5d049714c4a64225c3c79a7cf7d02f7fb5b96338";
+      sha256 = "1slw6v1fl8i0hz4db9lph55pbhnrxhqyndq6vm27dgvpj22k29fk";
+    };
+  }
+  {
+    goPackagePath  = "github.com/aws/aws-sdk-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/aws/aws-sdk-go";
+      rev =  "bff41fb23b7550368282029f6478819d6a99ae0f";
+      sha256 = "1hcd8f3m2cq02mj9i8c1ynbh3j0iyw14l1wszm0qgs18nsj1rzgn";
+    };
+  }
+  {
+    goPackagePath  = "github.com/beorn7/perks";
+    fetch = {
+      type = "git";
+      url = "https://github.com/beorn7/perks";
+      rev =  "3ac7bf7a47d159a033b107610db8a1b6575507a4";
+      sha256 = "1qc3l4r818xpvrhshh1sisc5lvl9479qspcfcdbivdyh0apah83r";
+    };
+  }
+  {
+    goPackagePath  = "github.com/cenkalti/backoff";
+    fetch = {
+      type = "git";
+      url = "https://github.com/cenkalti/backoff";
+      rev =  "b7325b0f3f1097c6546ea5e83c4a23267e58ad71";
+      sha256 = "0vx4ggryxd9w111mf1bi2g51559r8sh99gdqah72k4dfj3vrv19d";
+    };
+  }
+  {
+    goPackagePath  = "github.com/cihub/seelog";
+    fetch = {
+      type = "git";
+      url = "https://github.com/cihub/seelog";
+      rev =  "d2c6e5aa9fbfdd1c624e140287063c7730654115";
+      sha256 = "0ab9kyrh51x1x71z37pwjsla0qv11a1qv697xafyc4r5nq5hds6p";
+    };
+  }
+  {
+    goPackagePath  = "github.com/davecgh/go-spew";
+    fetch = {
+      type = "git";
+      url = "https://github.com/davecgh/go-spew";
+      rev =  "8991bc29aa16c548c550c7ff78260e27b9ab7c73";
+      sha256 = "0hka6hmyvp701adzag2g26cxdj47g21x6jz4sc6jjz1mn59d474y";
+    };
+  }
+  {
+    goPackagePath  = "github.com/docker/distribution";
+    fetch = {
+      type = "git";
+      url = "https://github.com/docker/distribution";
+      rev =  "48294d928ced5dd9b378f7fd7c6f5da3ff3f2c89";
+      sha256 = "0nj4xd72mik4pj8g065cqb0yjmgpj5ppsqf2k5ibz9f68c39c00b";
+    };
+  }
+  {
+    goPackagePath  = "github.com/docker/docker";
+    fetch = {
+      type = "git";
+      url = "https://github.com/docker/docker";
+      rev =  "092cba3727bb9b4a2f0e922cd6c0f93ea270e363";
+      sha256 = "0l9kjibnpwcgk844sibxk9ppyqniw9r0np1mzp95f8f461jb0iar";
+    };
+  }
+  {
+    goPackagePath  = "github.com/docker/go-connections";
+    fetch = {
+      type = "git";
+      url = "https://github.com/docker/go-connections";
+      rev =  "97c2040d34dfae1d1b1275fa3a78dbdd2f41cf7e";
+      sha256 = "11szydahzjz7zia3hr8kplnlxsg9papbvc2mgr1vlwrahxpdx7l7";
+    };
+  }
+  {
+    goPackagePath  = "github.com/docker/go-units";
+    fetch = {
+      type = "git";
+      url = "https://github.com/docker/go-units";
+      rev =  "47565b4f722fb6ceae66b95f853feed578a4a51c";
+      sha256 = "0npxsb3pp89slwf4a73fxm20hykad8xggij6i6hcd5jy19bjrd93";
+    };
+  }
+  {
+    goPackagePath  = "github.com/emicklei/go-restful";
+    fetch = {
+      type = "git";
+      url = "https://github.com/emicklei/go-restful";
+      rev =  "68c9750c36bb8cb433f1b88c807b4b30df4acc40";
+      sha256 = "0bc0wd5nipz1x078vpq82acyc7ip0qv1sddl451d7f7bvfms6h67";
+    };
+  }
+  {
+    goPackagePath  = "github.com/fsnotify/fsnotify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/fsnotify/fsnotify";
+      rev =  "ccc981bf80385c528a65fbfdd49bf2d8da22aa23";
+      sha256 = "0hcrfmiyx27izac3v0ii0qq2kfjvhr9ma1i79hrl6a6y2ayagzz7";
+    };
+  }
+  {
+    goPackagePath  = "github.com/ghodss/yaml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ghodss/yaml";
+      rev =  "73d445a93680fa1a78ae23a5839bad48f32ba1ee";
+      sha256 = "0pg53ky4sy3sp9j4n7vgf1p3gw4nbckwqfldcmmi9rf13kjh0mr7";
+    };
+  }
+  {
+    goPackagePath  = "github.com/go-ini/ini";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-ini/ini";
+      rev =  "d3de07a94d22b4a0972deb4b96d790c2c0ce8333";
+      sha256 = "1lpwqhcfhaa6aighd2lpjfswbb6aw5d5bsmyr0vqaqg6g5kz0ikg";
+    };
+  }
+  {
+    goPackagePath  = "github.com/go-ole/go-ole";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-ole/go-ole";
+      rev =  "7a0fa49edf48165190530c675167e2f319a05268";
+      sha256 = "00v6fixm35pj8jyqbj0z3kyv7bhrqa2dr2fgmlc9xqwbf0nayssy";
+    };
+  }
+  {
+    goPackagePath  = "github.com/gogo/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gogo/protobuf";
+      rev =  "d76fbc1373015ced59b43ac267f28d546b955683";
+      sha256 = "051a3imx2m7gpns8cjm1gckif9z6i4ik0svc1i8j7h86800c5rg0";
+    };
+  }
+  {
+    goPackagePath  = "github.com/golang/glog";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/glog";
+      rev =  "44145f04b68cf362d9c4df2182967c2275eaefed";
+      sha256 = "1k7sf6qmpgm0iw81gx2dwggf9di6lgw0n54mni7862hihwfrb5rq";
+    };
+  }
+  {
+    goPackagePath  = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev =  "b4deda0973fb4c70b50d226b1af49f3da59f5265";
+      sha256 = "0ya4ha7m20bw048m1159ppqzlvda4x0vdprlbk5sdgmy74h3xcdq";
+    };
+  }
+  {
+    goPackagePath  = "github.com/google/gofuzz";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/gofuzz";
+      rev =  "44d81051d367757e1c7c6a5a86423ece9afcf63c";
+      sha256 = "0ivq2sl2fv8x0xxrcys27c42s8yq7irgl7lp6l0im9i7ky63nk0i";
+    };
+  }
+  {
+    goPackagePath  = "github.com/googleapis/gnostic";
+    fetch = {
+      type = "git";
+      url = "https://github.com/googleapis/gnostic";
+      rev =  "0c5108395e2debce0d731cf0287ddf7242066aba";
+      sha256 = "0jf3cp5clli88gpjf24r6wxbkvngnc1kf59d4cgjczsn2wasvsfc";
+    };
+  }
+  {
+    goPackagePath  = "github.com/hashicorp/golang-lru";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hashicorp/golang-lru";
+      rev =  "a0d98a5f288019575c6d1f4bb1573fef2d1fcdc4";
+      sha256 = "1z3h4aca31l3qs0inqr5l49vrlycpjm7vq1l9nh1mp0mb2ij0kmp";
+    };
+  }
+  {
+    goPackagePath  = "github.com/hashicorp/hcl";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hashicorp/hcl";
+      rev =  "65a6292f0157eff210d03ed1bf6c59b190b8b906";
+      sha256 = "00qgmygfa4vgf9v3lpz4vp1ca1hcfcxnjqjrvp6z4jjklc8x4mqf";
+    };
+  }
+  {
+    goPackagePath  = "github.com/hectane/go-acl";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hectane/go-acl";
+      rev =  "7f56832555fc229dad908c67d65ed3ce6156b70c";
+      sha256 = "17crpqmn51fqcz0j1vi4grwwiaqpvc3zhl102hn5sy7s2lmdf630";
+    };
+  }
+  {
+    goPackagePath  = "github.com/howeyc/gopass";
+    fetch = {
+      type = "git";
+      url = "https://github.com/howeyc/gopass";
+      rev =  "bf9dde6d0d2c004a008c27aaee91170c786f6db8";
+      sha256 = "1jxzyfnqi0h1fzlsvlkn10bncic803bfhslyijcxk55mgh297g45";
+    };
+  }
+  {
+    goPackagePath  = "github.com/imdario/mergo";
+    fetch = {
+      type = "git";
+      url = "https://github.com/imdario/mergo";
+      rev =  "6633656539c1639d9d78127b7d47c622b5d7b6dc";
+      sha256 = "1fffbq1l17i0gynmvcxypl7d9h4v81g5vlimiph5bfgf4sp4db7g";
+    };
+  }
+  {
+    goPackagePath  = "github.com/iovisor/gobpf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/iovisor/gobpf";
+      rev =  "98ebf56442afb10e1b43145127de3c1777ed7e95";
+      sha256 = "0m2aah77b1k2yf31za975mcix5n0jijqkqmhgakip00klihx383k";
+    };
+  }
+  {
+    goPackagePath  = "github.com/jmespath/go-jmespath";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jmespath/go-jmespath";
+      rev =  "0b12d6b5";
+      sha256 = "1vv6hph8j6xgv7gwl9vvhlsaaqsm22sxxqmgmldi4v11783pc1ld";
+    };
+  }
+  {
+    goPackagePath  = "github.com/json-iterator/go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/json-iterator/go";
+      rev =  "f2b4162afba35581b6d4a50d3b8f34e33c144682";
+      sha256 = "0siqfghsm2lkdwinvg8x5gls3p76rq3cdm59c1r4x0b2mdfhnvcd";
+    };
+  }
+  {
+    goPackagePath  = "github.com/kardianos/osext";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kardianos/osext";
+      rev =  "ae77be60afb1dcacde03767a8c37337fad28ac14";
+      sha256 = "056dkgxrqjj5r18bnc3knlpgdz5p3yvp12y4y978hnsfhwaqvbjz";
+    };
+  }
+  {
+    goPackagePath  = "github.com/kubernetes-incubator/custom-metrics-apiserver";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes-incubator/custom-metrics-apiserver";
+      rev =  "bb8bae16c5550f2aeef3151259a1b36078a0e544";
+      sha256 = "1f1n4dh9w2qfs704yw8nhbv50n6f9fxy8ndir96l37lnwd2dvj8p";
+    };
+  }
+  {
+    goPackagePath  = "github.com/magiconair/properties";
+    fetch = {
+      type = "git";
+      url = "https://github.com/magiconair/properties";
+      rev =  "c2353362d570a7bfa228149c62842019201cfb71";
+      sha256 = "1a10362wv8a8qwb818wygn2z48lgzch940hvpv81hv8gc747ajxn";
+    };
+  }
+  {
+    goPackagePath  = "github.com/mailru/easyjson";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mailru/easyjson";
+      rev =  "60711f1a8329503b04e1c88535f419d0bb440bff";
+      sha256 = "0234jp6134wkihdpdwq1hvzqblgl5khc1wp6dyi2h0hgh88bhdk1";
+    };
+  }
+  {
+    goPackagePath  = "github.com/matttproud/golang_protobuf_extensions";
+    fetch = {
+      type = "git";
+      url = "https://github.com/matttproud/golang_protobuf_extensions";
+      rev =  "fc2b8d3a73c4867e51861bbdd5ae3c1f0869dd6a";
+      sha256 = "0ajg41h6402big484drvm72wvid1af2sffw0qkzbmpy04lq68ahj";
+    };
+  }
+  {
+    goPackagePath  = "github.com/mitchellh/mapstructure";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mitchellh/mapstructure";
+      rev =  "fa473d140ef3c6adf42d6b391fe76707f1f243c8";
+      sha256 = "0f06q4fpzg0c370cvmpsl0iq2apl5nkbz5cd3nba5x5ysmshv1lm";
+    };
+  }
+  {
+    goPackagePath  = "github.com/modern-go/concurrent";
+    fetch = {
+      type = "git";
+      url = "https://github.com/modern-go/concurrent";
+      rev =  "bacd9c7ef1dd9b15be4a9909b8ac7a4e313eec94";
+      sha256 = "0s0fxccsyb8icjmiym5k7prcqx36hvgdwl588y0491gi18k5i4zs";
+    };
+  }
+  {
+    goPackagePath  = "github.com/modern-go/reflect2";
+    fetch = {
+      type = "git";
+      url = "https://github.com/modern-go/reflect2";
+      rev =  "4b7aa43c6742a2c18fdef89dd197aaae7dac7ccd";
+      sha256 = "1721y3yr3dpx5dx5ashf063qczk2awy5zjir1jvp1h5hn7qz4i49";
+    };
+  }
+  {
+    goPackagePath  = "github.com/patrickmn/go-cache";
+    fetch = {
+      type = "git";
+      url = "https://github.com/patrickmn/go-cache";
+      rev =  "a3647f8e31d79543b2d0f0ae2fe5c379d72cedc0";
+      sha256 = "10020inkzrm931r4bixf8wqr9n39wcrb78vfyxmbvjavvw4zybgs";
+    };
+  }
+  {
+    goPackagePath  = "github.com/pborman/uuid";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pborman/uuid";
+      rev =  "ca53cad383cad2479bbba7f7a1a05797ec1386e4";
+      sha256 = "0rcx669bbjkkwdlw81spnra4ffgzd4rbpywnrj3w41m9vq6mk1gn";
+    };
+  }
+  {
+    goPackagePath  = "github.com/pelletier/go-toml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pelletier/go-toml";
+      rev =  "c2dbbc24a97911339e01bda0b8cabdbd8f13b602";
+      sha256 = "0v1dsqnk5zmn6ir8jgxijx14s47jvijlqfz3aq435snfrgybd5rz";
+    };
+  }
+  {
+    goPackagePath  = "github.com/pkg/errors";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pkg/errors";
+      rev =  "816c9085562cd7ee03e7f8188a1cfd942858cded";
+      sha256 = "1ws5crb7c70wdicavl6qr4g03nn6m92zd6wwp9n2ygz5c8rmxh8k";
+    };
+  }
+  {
+    goPackagePath  = "github.com/pmezard/go-difflib";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pmezard/go-difflib";
+      rev =  "792786c7400a136282c1664665ae0a8db921c6c2";
+      sha256 = "0c1cn55m4rypmscgf0rrb88pn58j3ysvc2d0432dp3c6fqg6cnzw";
+    };
+  }
+  {
+    goPackagePath  = "github.com/prometheus/client_golang";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_golang";
+      rev =  "e7e903064f5e9eb5da98208bae10b475d4db0f8c";
+      sha256 = "0mn6x6za7br81vc9s8d58ivylpx5j4xdq72n7kz3aybniif49r3i";
+    };
+  }
+  {
+    goPackagePath  = "github.com/prometheus/client_model";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_model";
+      rev =  "fa8ad6fec33561be4280a8f0514318c79d7f6cb6";
+      sha256 = "11a7v1fjzhhwsl128znjcf5v7v6129xjgkdpym2lial4lac1dhm9";
+    };
+  }
+  {
+    goPackagePath  = "github.com/prometheus/common";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/common";
+      rev =  "13ba4ddd0caa9c28ca7b7bffe1dfa9ed8d5ef207";
+      sha256 = "0i6mpcnsawi7f00rfmjfjq8llaplyzq4xrkrawlcgfd762p5hnp8";
+    };
+  }
+  {
+    goPackagePath  = "github.com/prometheus/procfs";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/procfs";
+      rev =  "65c1f6f8f0fc1e2185eb9863a3bc751496404259";
+      sha256 = "0jfzmr8642hr04naim1maa3wklxvcxklykri2z7k4ayizc974lkq";
+    };
+  }
+  {
+    goPackagePath  = "github.com/shirou/gopsutil";
+    fetch = {
+      type = "git";
+      url = "https://github.com/shirou/gopsutil";
+      rev =  "071446942108a03a13cf0717275ad3bdbcb691b4";
+      sha256 = "0ai246kqsfm3xlnp4pp4d197djh6jrbjja832f355zhg3l9fqwfp";
+    };
+  }
+  {
+    goPackagePath  = "github.com/shirou/w32";
+    fetch = {
+      type = "git";
+      url = "https://github.com/shirou/w32";
+      rev =  "bb4de0191aa41b5507caa14b0650cdbddcd9280b";
+      sha256 = "0xh5vqblhr2c3mlaswawx6nipi4rc2x73rbdvlkakmgi0nnl50m4";
+    };
+  }
+  {
+    goPackagePath  = "github.com/spf13/afero";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/afero";
+      rev =  "d40851caa0d747393da1ffb28f7f9d8b4eeffebd";
+      sha256 = "0miv4faf5ihjfifb1zv6aia6f6ik7h1s4954kcb8n6ixzhx9ck6k";
+    };
+  }
+  {
+    goPackagePath  = "github.com/spf13/cast";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/cast";
+      rev =  "8965335b8c7107321228e3e3702cab9832751bac";
+      sha256 = "177bk7lq40jbgv9p9r80aydpaccfk8ja3a7jjhfwiwk9r1pa4rr2";
+    };
+  }
+  {
+    goPackagePath  = "github.com/spf13/jwalterweatherman";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/jwalterweatherman";
+      rev =  "4a4406e478ca629068e7768fc33f3f044173c0a6";
+      sha256 = "093fmmvavv84pv4q84hav7ph3fmrq87bvspjj899q0qsx37yvdr8";
+    };
+  }
+  {
+    goPackagePath  = "github.com/spf13/pflag";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/pflag";
+      rev =  "583c0c0531f06d5278b7d917446061adc344b5cd";
+      sha256 = "0nr4mdpfhhk94hq4ymn5b2sxc47b29p1akxd8b0hx4dvdybmipb5";
+    };
+  }
+  {
+    goPackagePath  = "github.com/stretchr/testify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/stretchr/testify";
+      rev =  "f35b8ab0b5a2cef36673838d662e249dd9c94686";
+      sha256 = "0dlszlshlxbmmfxj5hlwgv3r22x0y1af45gn1vd198nvvs3pnvfs";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev =  "c10c31b5e94b6f7a0283272dc2bb27163dcea24b";
+      sha256 = "1a4k61xrwmr99fib2m1rcavbaxihnsmy1bgqhff5hkcv4n7bpsl2";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/mobile";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/mobile";
+      rev =  "0ff817254b04da935cce10d2d1270ccf047fbbd7";
+      sha256 = "0hzsis106xh3hcydjribcar75va3ghp4hwbj9982h2msi27v54x4";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev =  "1c05540f6879653db88113bc4a2b70aec4bd491f";
+      sha256 = "0h8yqb0vcqgllgydrf9d3rzp83w8wlr8f0nm6r1rwf2qg30pq1pd";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev =  "a9d3bda3a223baa6bba6ef412cb273f0fd163c05";
+      sha256 = "1w45zc13xrjzl19s1sx74r5mg3lf2z2nm13wygcdq5r5pyjlhdz9";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/text";
+      rev =  "b19bf474d317b857955b12035d2c5acb57ce8b01";
+      sha256 = "0wc8csaafp0ps9jb2hdk8d6xpyw1axhk1np73h0z17x09zk3ylcr";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/time";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/time";
+      rev =  "a4bde12657593d5e90d0533a3e4fd95e635124cb";
+      sha256 = "07r227rrqgwkchm63dzmdyv5yplbla1vnwkn6qrr940l4psy15aw";
+    };
+  }
+  {
+    goPackagePath  = "gopkg.in/inf.v0";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-inf/inf";
+      rev =  "3887ee99ecf07df5b447e9b00d9c0b2adaa9f3e4";
+      sha256 = "0rf3vwyb8aqnac9x9d6ax7z5526c45a16yjm2pvkijr6qgqz8b82";
+    };
+  }
+  {
+    goPackagePath  = "gopkg.in/yaml.v2";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-yaml/yaml";
+      rev =  "d670f9405373e636a5a2765eea47fac0c9bc91a4";
+      sha256 = "1w1xid51n8v1mydn2m3vgggw8qgpd5a5sr62snsc77d99fpjsrs0";
+    };
+  }
+  {
+    goPackagePath  = "gopkg.in/zorkian/go-datadog-api.v2";
+    fetch = {
+      type = "git";
+      url = "https://github.com/zorkian/go-datadog-api";
+      rev =  "d7b8b10db6a7eb1c1c2424b10a795a1662e80c9a";
+      sha256 = "069psfvgal6pkwc1s09gdy4mjn4ki4d1zvqnnzn7y15i5llb97kk";
+    };
+  }
+  {
+    goPackagePath  = "k8s.io/api";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes/api";
+      rev =  "9e5ffd1f1320950b238cfce291b926411f0af722";
+      sha256 = "03992x9n9b8w9rlf70wizn7iqk8cbyksxg0sdc1mm5jyzyvgksgf";
+    };
+  }
+  {
+    goPackagePath  = "k8s.io/apimachinery";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes/apimachinery";
+      rev =  "e386b2658ed20923da8cc9250e552f082899a1ee";
+      sha256 = "0lgwpsvx0gpnrdnkqc9m96xwkifdq50l7cj9rvh03njws4rbd8jz";
+    };
+  }
+  {
+    goPackagePath  = "k8s.io/apiserver";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes/apiserver";
+      rev =  "2cf66d2375dce045e1e02e1d7b74a0d1e34fedb3";
+      sha256 = "0x0am99n25njpbd1x20bhyadpv9w6qqjmspp1ahzpmdwjzrnsagg";
+    };
+  }
+  {
+    goPackagePath  = "k8s.io/client-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes/client-go";
+      rev =  "23781f4d6632d88e869066eaebb743857aa1ef9b";
+      sha256 = "0cazbcv7j7fgjs00arx3a8f0z0ikybmv16ccy0yg0wp0nbc05r6v";
+    };
+  }
+  {
+    goPackagePath  = "k8s.io/metrics";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes/metrics";
+      rev =  "0d9ea2ac660031c8f2726a735dda29441f396f99";
+      sha256 = "0bcsb7s4wlmrja35zvz4s10cf3w7dfn2ckjv6apxd1ykdjxnsk71";
+    };
+  }
+]
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/networking/dd-agent/datadog-process-agent.nix b/nixpkgs/pkgs/tools/networking/dd-agent/datadog-process-agent.nix
new file mode 100644
index 000000000000..280619a5eca6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dd-agent/datadog-process-agent.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub, buildGoPackage  }:
+
+buildGoPackage rec {
+  pname = "datadog-process-agent";
+  version = "6.11.1";
+  owner   = "DataDog";
+  repo    = "datadog-process-agent";
+
+  src = fetchFromGitHub {
+    inherit owner repo;
+    rev    = version;
+    sha256 = "0fc2flm0pa44mjxvn4fan0mkvg9yyg27w68xdgrnpdifj99kxxjf";
+  };
+
+  goDeps = ./datadog-process-agent-deps.nix;
+  goPackagePath = "github.com/${owner}/${repo}";
+
+  meta = with stdenv.lib; {
+    description = "Live process collector for the DataDog Agent v6";
+    homepage    = https://www.datadoghq.com;
+    license     = licenses.bsd3;
+    platforms   = platforms.all;
+    maintainers = with maintainers; [ domenkozar rvl ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dd-agent/integrations-core.nix b/nixpkgs/pkgs/tools/networking/dd-agent/integrations-core.nix
new file mode 100644
index 000000000000..edf7a8faaf86
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dd-agent/integrations-core.nix
@@ -0,0 +1,91 @@
+# The declarations in this file build the Datadog agent's core
+# integrations. These integrations are tracked in a separate
+# repository[1] outside of the agent's primary repository and provide
+# checks for various kinds of services.
+#
+# Not all services are relevant for all users, however. As some of
+# them depend on various tools and Python packages it is nonsensical
+# to build *all* integrations by default.
+#
+# A set of default integrations is defined and built either way.
+# Additional integrations can be specified by overriding
+# `extraIntegrations` in datadog-integrations-core.
+#
+# In practice the syntax for using this with additional integrations
+# is not the most beautiful, but it works. For example to use
+# datadog-agent from the top-level with the `ntp`-integration
+# included, one could say:
+#
+# let
+#   integrationsWithNtp = datadog-integrations-core {
+#     # Extra integrations map from the integration name (as in the
+#     # integrations-core repository) to a function that receives the
+#     # Python package set and returns the required dependencies.g
+#     ntp = (ps: [ ps.ntplib ]);
+#   };
+#
+# in ddAgentWithNtp = datadog-agent.overrideAttrs(_ : {
+#   python = integrationsWithNtp.python;
+# });
+#
+# The NixOS module 'datadog-agent' provides a simplified interface to
+# this. Please see the module itself for more information.
+#
+# [1]: https://github.com/DataDog/integrations-core
+
+{ pkgs, python, extraIntegrations ? {} }:
+
+with pkgs.lib;
+
+let
+  src = pkgs.fetchFromGitHub {
+    owner = "DataDog";
+    repo = "integrations-core";
+    rev = "7e9bebbb5b79ac30c16814ecefdc8f5c63cb4ea4";
+    sha256 = "0yi7dlbd0rkzzl8cag713r86f40vl87aqrj97ral58csnnj7vfzb";
+  };
+  version = "git-2018-09-18";
+
+  # Build helper to build a single datadog integration package.
+  buildIntegration = { pname, ... }@args: python.pkgs.buildPythonPackage (args // {
+    inherit src version;
+    name = "datadog-integration-${pname}-${version}";
+
+    postPatch = ''
+      # jailbreak install_requires
+      sed -i 's/==.*//' requirements.in
+      cp requirements.in requirements.txt
+    '';
+    sourceRoot = "source/${args.sourceRoot or pname}";
+    doCheck = false;
+  });
+
+  # Base package depended on by all other integrations.
+  datadog_checks_base = buildIntegration {
+    pname = "checks-base";
+    sourceRoot = "datadog_checks_base";
+    propagatedBuildInputs = with python.pkgs; [
+      requests protobuf prometheus_client uuid simplejson uptime
+    ];
+  };
+
+  # Default integrations that should be built:
+  defaultIntegrations = {
+    disk     = (ps: [ ps.psutil ]);
+    mongo    = (ps: [ ps.pymongo ]);
+    network  = (ps: [ ps.psutil ]);
+    nginx    = (ps: []);
+    postgres = (ps: with ps; [ pg8000_1_12 psycopg2 ]);
+  };
+
+  # All integrations (default + extra):
+  integrations = defaultIntegrations // extraIntegrations;
+  builtIntegrations = mapAttrs (pname: fdeps: buildIntegration {
+    inherit pname;
+    propagatedBuildInputs = (fdeps python.pkgs) ++ [ datadog_checks_base ];
+  }) integrations;
+
+in builtIntegrations // {
+  inherit datadog_checks_base;
+  python = python.withPackages (_: (attrValues builtIntegrations));
+}
diff --git a/nixpkgs/pkgs/tools/networking/ddclient/default.nix b/nixpkgs/pkgs/tools/networking/ddclient/default.nix
new file mode 100644
index 000000000000..6efba72b1dcf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ddclient/default.nix
@@ -0,0 +1,46 @@
+{ stdenv, fetchurl, perlPackages, iproute, perl }:
+
+perlPackages.buildPerlPackage rec {
+  pname = "ddclient";
+  version = "3.9.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/ddclient/${pname}-${version}.tar.gz";
+    sha256 = "0fwyhab8yga2yi1kdfkbqxa83wxhwpagmj1w1mwkg2iffh1fjjlw";
+  };
+
+  # perl packages by default get devdoc which isn't present
+  outputs = [ "out" ];
+
+  buildInputs = with perlPackages; [ IOSocketSSL DigestSHA1 DataValidateIP JSONPP ];
+
+  # Use iproute2 instead of ifconfig
+  preConfigure = ''
+    touch Makefile.PL
+    substituteInPlace ddclient \
+      --replace 'in the output of ifconfig' 'in the output of ip addr show' \
+      --replace 'ifconfig -a' '${iproute}/sbin/ip addr show' \
+      --replace 'ifconfig $arg' '${iproute}/sbin/ip addr show $arg' \
+      --replace '/usr/bin/perl' '${perl}/bin/perl' # Until we get the patchShebangs fixed (issue #55786) we need to patch this manually
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 ddclient $out/bin/ddclient
+    install -Dm644 -t $out/share/doc/ddclient COP* ChangeLog README.* RELEASENOTE
+
+    runHook postInstall
+  '';
+
+  # there are no tests distributed with ddclient
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "Client for updating dynamic DNS service entries";
+    homepage    = https://sourceforge.net/p/ddclient/wiki/Home/;
+    license     = licenses.gpl2Plus;
+    # Mostly since `iproute` is Linux only.
+    platforms   = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dhcp/default.nix b/nixpkgs/pkgs/tools/networking/dhcp/default.nix
new file mode 100644
index 000000000000..17e2417d3a6d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dhcp/default.nix
@@ -0,0 +1,89 @@
+{ stdenv, fetchurl, perl, file, nettools, iputils, iproute, makeWrapper
+, coreutils, gnused, openldap ? null
+, buildPackages, lib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dhcp";
+  version = "4.4.1";
+
+  src = fetchurl {
+    url = "https://ftp.isc.org/isc/dhcp/${version}/${pname}-${version}.tar.gz";
+    sha256 = "025nfqx4zwdgv4b3rkw26ihcj312vir08jk6yi57ndmb4a4m08ia";
+  };
+
+  patches =
+    [
+      # Make sure that the hostname gets set on reboot.  Without this
+      # patch, the hostname doesn't get set properly if the old
+      # hostname (i.e. before reboot) is equal to the new hostname.
+      ./set-hostname.patch
+    ];
+
+  nativeBuildInputs = [ perl ];
+
+  buildInputs = [ makeWrapper openldap ];
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+
+  configureFlags = [
+    "--enable-failover"
+    "--enable-execute"
+    "--enable-tracing"
+    "--enable-delayed-ack"
+    "--enable-dhcpv6"
+    "--enable-paranoia"
+    "--enable-early-chroot"
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+  ] ++ lib.optional stdenv.isLinux "--with-randomdev=/dev/random"
+    ++ stdenv.lib.optionals (openldap != null) [ "--with-ldap" "--with-ldapcrypto" ];
+
+  NIX_CFLAGS_COMPILE = builtins.toString [
+    "-Wno-error=pointer-compare"
+    "-Wno-error=format-truncation"
+    "-Wno-error=stringop-truncation"
+    "-Wno-error=format-overflow"
+  ];
+
+  installFlags = [ "DESTDIR=\${out}" ];
+
+  postInstall =
+    ''
+      mv $out/$out/* $out
+      DIR=$out/$out
+      while rmdir $DIR 2>/dev/null; do
+        DIR="$(dirname "$DIR")"
+      done
+
+      cp client/scripts/linux $out/sbin/dhclient-script
+      substituteInPlace $out/sbin/dhclient-script \
+        --replace /sbin/ip ${iproute}/sbin/ip
+      wrapProgram "$out/sbin/dhclient-script" --prefix PATH : \
+        "${nettools}/bin:${nettools}/sbin:${iputils}/bin:${coreutils}/bin:${gnused}/bin"
+    '';
+
+  preConfigure =
+    ''
+      substituteInPlace configure --replace "/usr/bin/file" "${file}/bin/file"
+      sed -i "includes/dhcpd.h" \
+	-"es|^ *#define \+_PATH_DHCLIENT_SCRIPT.*$|#define _PATH_DHCLIENT_SCRIPT \"$out/sbin/dhclient-script\"|g"
+
+      export AR='${stdenv.cc.bintools.bintools}/bin/${stdenv.cc.targetPrefix}ar'
+    '';
+
+  meta = with stdenv.lib; {
+    description = "Dynamic Host Configuration Protocol (DHCP) tools";
+
+    longDescription = ''
+      ISC's Dynamic Host Configuration Protocol (DHCP) distribution
+      provides a freely redistributable reference implementation of
+      all aspects of DHCP, through a suite of DHCP tools: server,
+      client, and relay agent.
+   '';
+
+    homepage = "https://www.isc.org/dhcp/";
+    license = licenses.isc;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dhcp/set-hostname.patch b/nixpkgs/pkgs/tools/networking/dhcp/set-hostname.patch
new file mode 100644
index 000000000000..7aa9d0814514
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dhcp/set-hostname.patch
@@ -0,0 +1,12 @@
+--- a/client/scripts/linux	2010-09-15 00:49:48.000000000 +0200
++++ b/client/scripts/linux	2011-04-01 16:08:10.984372269 +0200
+@@ -133,9 +133,7 @@
+            [ "$current_hostname" = '(none)' ] ||
+            [ "$current_hostname" = 'localhost' ] ||
+            [ "$current_hostname" = "$old_host_name" ]; then
+-           if [ "$new_host_name" != "$old_host_name" ]; then
+-               hostname "$new_host_name"
+-           fi
++           hostname "$new_host_name"
+         fi
+     fi
diff --git a/nixpkgs/pkgs/tools/networking/dhcpcd/default.nix b/nixpkgs/pkgs/tools/networking/dhcpcd/default.nix
new file mode 100644
index 000000000000..c45d017e3f5f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dhcpcd/default.nix
@@ -0,0 +1,55 @@
+{ stdenv, fetchurl, fetchpatch, pkgconfig, udev, runtimeShellPackage,
+runtimeShell }:
+
+stdenv.mkDerivation rec {
+  # when updating this to >=7, check, see previous reverts:
+  # nix-build -A nixos.tests.networking.scripted.macvlan.x86_64-linux nixos/release-combined.nix
+  pname = "dhcpcd";
+  version = "8.1.4";
+
+  src = fetchurl {
+    url = "mirror://roy/${pname}/${pname}-${version}.tar.xz";
+    sha256 = "0gf1qif25wy5lffzw39pi4sshmpxz1f4a1m9sglj7am1gaix3817";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [
+    udev
+    runtimeShellPackage # So patchShebangs finds a bash suitable for the installed scripts
+  ];
+
+  prePatch = ''
+    substituteInPlace hooks/dhcpcd-run-hooks.in --replace /bin/sh ${runtimeShell}
+  '';
+
+  patches = [
+    (fetchpatch {
+      url = "https://roy.marples.name/cgit/dhcpcd.git/patch/?id=114870290a8d3d696bc4049c32eef3eed03d6070";
+      sha256 = "0kzpwjh2gzvl5lvlnw6lis610p67nassk3apns68ga2pyxlky8qb";
+    })
+  ];
+
+  preConfigure = "patchShebangs ./configure";
+
+  configureFlags = [
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+  ];
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  # Hack to make installation succeed.  dhcpcd will still use /var/db
+  # at runtime.
+  installFlags = [ "DBDIR=$(TMPDIR)/db" "SYSCONFDIR=${placeholder "out"}/etc" ];
+
+  # Check that the udev plugin got built.
+  postInstall = stdenv.lib.optional (udev != null) "[ -e ${placeholder "out"}/lib/dhcpcd/dev/udev.so ]";
+
+  meta = with stdenv.lib; {
+    description = "A client for the Dynamic Host Configuration Protocol (DHCP)";
+    homepage = https://roy.marples.name/projects/dhcpcd;
+    platforms = platforms.linux;
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ eelco fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dhcpdump/default.nix b/nixpkgs/pkgs/tools/networking/dhcpdump/default.nix
new file mode 100644
index 000000000000..a7cc90c2b33a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dhcpdump/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, libpcap, perl }:
+
+stdenv.mkDerivation {
+  name = "dhcpdump-1.8";
+
+  src = fetchurl {
+    url = "http://archive.ubuntu.com/ubuntu/pool/universe/d/dhcpdump/dhcpdump_1.8.orig.tar.gz";
+    sha256 = "143iyzkqvhj4dscwqs75jvfr4wvzrs11ck3fqn5p7yv2h50vjpkd";
+  };
+
+  buildInputs = [libpcap perl];
+
+  hardeningDisable = [ "fortify" ];
+
+  installPhase = ''
+    mkdir -pv $out/bin
+    cp dhcpdump $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A tool for visualization of DHCP packets as recorded and output by tcpdump to analyze DHCP server responses";
+    homepage = http://www.mavetju.org/unix/dhcpdump-man.php;
+    platforms = platforms.linux;
+    license = licenses.bsd2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dhcping/default.nix b/nixpkgs/pkgs/tools/networking/dhcping/default.nix
new file mode 100644
index 000000000000..a6cb05b3865b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dhcping/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "dhcping";
+  version = "1.2";
+
+  src = fetchurl {
+    sha256 = "0sk4sg3hn88n44dxikipf3ggfj3ixrp22asb7nry9p0bkfaqdvrj";
+    url = "https://www.mavetju.org/download/dhcping-${version}.tar.gz";
+  };
+
+  enableParallelBuilding = true;
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    description = "Send DHCP request to find out if a DHCP server is running";
+    longDescription = ''
+      dhcping sends either a DHCPREQUEST or DHCPINFORM packet to the server
+      and waits for an answer. Then, if a DHCPREQUEST was send, it will send
+      a DHCPRELEASE back to the server.
+
+      This program should be installed setuid root or ran by root only, as it
+      requires the privileges to bind itself to port 68 (bootpc). Root
+      privileges are dropped as soon as the program has bound itself to that
+      port.
+    '';
+    homepage = http://www.mavetju.org/unix/general.php;
+    license = licenses.bsd2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dibbler/default.nix b/nixpkgs/pkgs/tools/networking/dibbler/default.nix
new file mode 100644
index 000000000000..43c9455712db
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dibbler/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "dibbler";
+  version = "1.0.1";
+
+  src = fetchurl {
+    url = "http://www.klub.com.pl/dhcpv6/dibbler/${pname}-${version}.tar.gz";
+    sha256 = "18bnwkvax02scjdg5z8gvrkvy1lhssfnlpsaqb5kkh30w1vri1i7";
+  };
+
+  configureFlags = [
+    "--enable-resolvconf"
+  ];
+
+  NIX_CFLAGS_COMPILE = stdenv.lib.optionalString stdenv.isDarwin "-D__APPLE_USE_RFC_2292=1";
+
+  meta = with stdenv.lib; {
+    description = "Portable DHCPv6 implementation";
+    homepage = http://www.klub.com.pl/dhcpv6/;
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dirb/default.nix b/nixpkgs/pkgs/tools/networking/dirb/default.nix
new file mode 100644
index 000000000000..fe845f3cae87
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dirb/default.nix
@@ -0,0 +1,40 @@
+{ fetchurl, stdenv, autoreconfHook, curl }:
+
+let
+  major = "2";
+  minor = "22";
+in stdenv.mkDerivation rec {
+  pname = "dirb";
+  version = "${major}.${minor}";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/dirb/${version}/dirb${major}${minor}.tar.gz";
+    sha256 = "0b7wc2gvgnyp54rxf1n9arn6ymrvdb633v6b3ah138hw4gg8lx7k";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ curl ];
+
+  unpackPhase = ''
+    tar -xf $src
+    find . -exec chmod +x "{}" ";"
+    export sourceRoot="dirb222"
+  '';
+
+  postPatch = ''
+    sed -i "s#/usr#$out#" src/dirb.c
+  '';
+
+  postInstall = ''
+    mkdir -p $out/share/dirb/
+    cp -r wordlists/ $out/share/dirb/
+  '';
+
+  meta = {
+    description = "A web content scanner";
+    homepage = http://dirb.sourceforge.net/;
+    maintainers = with stdenv.lib.maintainers; [ bennofs ];
+    license = with stdenv.lib.licenses; [ gpl2 ];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/djbdns/default.nix b/nixpkgs/pkgs/tools/networking/djbdns/default.nix
new file mode 100644
index 000000000000..974f8a1f346a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/djbdns/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, fetchurl, glibc, dns-root-data } :
+
+let
+  version = "1.05";
+
+  manSrc = fetchurl {
+    url = "http://smarden.org/pape/djb/manpages/djbdns-${version}-man-20031023.tar.gz";
+    sha256 = "0sg51gjy6j1hnrra406q1qhf5kvk1m00y8qqhs6r0a699gqmh75s";
+  };
+
+in
+
+stdenv.mkDerivation {
+  pname = "djbdns";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://cr.yp.to/djbdns/djbdns-${version}.tar.gz";
+    sha256 = "0j3baf92vkczr5fxww7rp1b7gmczxmmgrqc8w2dy7kgk09m85k9w";
+  };
+
+  patches = [ ./hier.patch ./fix-nix-usernamespace-build.patch ];
+
+  postPatch = ''
+    echo gcc -O2 -include ${glibc.dev}/include/errno.h > conf-cc
+    echo $out > conf-home
+    # djbdns ships with an outdated list of root servers
+    awk '/^.?.ROOT-SERVERS.NET/ { print $4 }' ${dns-root-data}/root.hints > dnsroots.global
+    sed -i "s|/etc/dnsroots.global|$out/etc/dnsroots.global|" dnscache-conf.c
+  '';
+
+  installPhase = ''
+    mkdir -pv $out/etc;
+    make setup
+    cd $out;
+    tar xzvf ${manSrc};
+    for n in 1 5 8; do
+      mkdir -p man/man$n;
+      mv -iv djbdns-man/*.$n man/man$n;
+    done;
+    rm -rv djbdns-man;
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A collection of Domain Name System tools";
+    longDescription = "Includes software for all the fundamental DNS operations: DNS cache: finding addresses of Internet hosts; DNS server: publishing addresses of Internet hosts; and DNS client: talking to a DNS cache.";
+    homepage = https://cr.yp.to/djbdns.html;
+    license = licenses.publicDomain;
+    maintainers = with maintainers; [ jerith666 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/djbdns/fix-nix-usernamespace-build.patch b/nixpkgs/pkgs/tools/networking/djbdns/fix-nix-usernamespace-build.patch
new file mode 100644
index 000000000000..abd9e756a21f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/djbdns/fix-nix-usernamespace-build.patch
@@ -0,0 +1,10 @@
+--- djbdns-1.05.org/chkshsgr.c	2001-02-11 21:11:45.000000000 +0000
++++ djbdns-1.05/chkshsgr.c	2017-10-13 10:06:09.392578927 +0100
+@@ -2,6 +2,7 @@
+ 
+ int main()
+ {
++  return 0;
+   short x[4];
+ 
+   x[0] = x[1] = 0;
diff --git a/nixpkgs/pkgs/tools/networking/djbdns/hier.patch b/nixpkgs/pkgs/tools/networking/djbdns/hier.patch
new file mode 100644
index 000000000000..7fddd1213834
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/djbdns/hier.patch
@@ -0,0 +1,15 @@
+--- a/hier.c	2016-04-19 21:22:21.992192405 -0400
++++ b/hier.c	2016-04-19 21:22:33.160229778 -0400
+@@ -2,9 +2,9 @@
+ 
+ void hier()
+ {
+-  c("/","etc","dnsroots.global",-1,-1,0644);
++  c(auto_home,"etc","dnsroots.global",-1,-1,0644);
+ 
+-  h(auto_home,-1,-1,02755);
+-  d(auto_home,"bin",-1,-1,02755);
++  h(auto_home,-1,-1,0755);
++  d(auto_home,"bin",-1,-1,0755);
+ 
+   c(auto_home,"bin","dnscache-conf",-1,-1,0755);
diff --git a/nixpkgs/pkgs/tools/networking/dnscrypt-proxy/1.x/default.nix b/nixpkgs/pkgs/tools/networking/dnscrypt-proxy/1.x/default.nix
new file mode 100644
index 000000000000..fc4e40929c93
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dnscrypt-proxy/1.x/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchurl, pkgconfig, libsodium, ldns, openssl, systemd }:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  pname = "dnscrypt-proxy";
+  version = "1.9.5";
+
+  src = fetchurl {
+    url = "https://launchpad.net/ubuntu/+archive/primary/+files/${pname}-${version}.orig.tar.gz";
+    sha256 = "1dhvklr4dg2vlw108n11xbamacaryyg3dbrg629b76lp7685p7z8";
+  };
+
+  enableParallelBuilding = true;
+
+  configureFlags = optional stdenv.isLinux "--with-systemd";
+
+  nativeBuildInputs = [ pkgconfig ];
+
+  # <ldns/ldns.h> depends on <openssl/ssl.h>
+  buildInputs = [ libsodium openssl.dev ldns ] ++ optional stdenv.isLinux systemd;
+
+  postInstall = ''
+    # Previous versions required libtool files to load plugins; they are
+    # now strictly optional.
+    rm $out/lib/dnscrypt-proxy/*.la
+  '';
+
+  meta = {
+    description = "A tool for securing communications between a client and a DNS resolver";
+    homepage = https://dnscrypt.info/;
+    license = licenses.isc;
+    maintainers = with maintainers; [ joachifm ];
+    # upstream claims OSX support, but Hydra fails
+    platforms = platforms.linux; # Maybe other non-darwin Unix
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dnscrypt-proxy/2.x/default.nix b/nixpkgs/pkgs/tools/networking/dnscrypt-proxy/2.x/default.nix
new file mode 100644
index 000000000000..b9df976d3a9f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dnscrypt-proxy/2.x/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "dnscrypt-proxy2";
+  version = "2.0.25";
+
+  goPackagePath = "github.com/jedisct1/dnscrypt-proxy";
+
+  src = fetchFromGitHub {
+    owner = "jedisct1";
+    repo = "dnscrypt-proxy";
+    rev = version;
+    sha256 = "1ix76nihzjbiib7n2pjx2ynziz8hrrx3idwdjnkwckxfq11g96y3";
+  };
+
+  meta = with stdenv.lib; {
+    description = "A tool that provides secure DNS resolution";
+
+    license = licenses.isc;
+    homepage = https://dnscrypt.info/;
+    maintainers = with maintainers; [ waynr ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dnscrypt-wrapper/default.nix b/nixpkgs/pkgs/tools/networking/dnscrypt-wrapper/default.nix
new file mode 100644
index 000000000000..94d52b953d49
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dnscrypt-wrapper/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, libsodium, libevent }:
+
+stdenv.mkDerivation rec {
+  pname = "dnscrypt-wrapper";
+  version = "0.4.2";
+
+  src = fetchFromGitHub {
+    owner = "Cofyc";
+    repo = "dnscrypt-wrapper";
+    rev = "v${version}";
+    sha256 = "055vxpcfg80b1456p6p0p236pwykknph9x3c9psg8ya3i8qqywkl";
+  };
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [ pkgconfig autoreconfHook ];
+  buildInputs = [ libsodium libevent ];
+
+  meta = with stdenv.lib; {
+    description = "A tool for adding dnscrypt support to any name resolver";
+    homepage = https://dnscrypt.info/;
+    license = licenses.isc;
+    maintainers = with maintainers; [ tstrobel joachifm ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dnsmasq/default.nix b/nixpkgs/pkgs/tools/networking/dnsmasq/default.nix
new file mode 100644
index 000000000000..f224ab1ac935
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dnsmasq/default.nix
@@ -0,0 +1,84 @@
+{ stdenv, fetchurl, pkgconfig, dbus, nettle, fetchpatch
+, libidn, libnetfilter_conntrack }:
+
+with stdenv.lib;
+let
+  copts = concatStringsSep " " ([
+    "-DHAVE_IDN"
+    "-DHAVE_DNSSEC"
+  ] ++ optionals stdenv.isLinux [
+    "-DHAVE_DBUS"
+    "-DHAVE_CONNTRACK"
+  ]);
+in
+stdenv.mkDerivation rec {
+  name = "dnsmasq-2.80";
+
+  src = fetchurl {
+    url = "http://www.thekelleys.org.uk/dnsmasq/${name}.tar.xz";
+    sha256 = "1fv3g8vikj3sn37x1j6qsywn09w1jipvlv34j3q5qrljbrwa5ayd";
+  };
+
+  patches = [
+    # Fix build with nettle 3.5
+    (fetchpatch {
+      name = "nettle-3.5.patch";
+      url = "thekelleys.org.uk/gitweb/?p=dnsmasq.git;a=patch;h=ab73a746a0d6fcac2e682c5548eeb87fb9c9c82e";
+      sha256 = "1hnixij3jp1p6zc3bx2dr92yyf9jp1ahhl9hiiq7bkbhbrw6mbic";
+    })
+  ];
+
+  preBuild = ''
+    makeFlagsArray=("COPTS=${copts}")
+  '';
+
+  makeFlags = [
+    "DESTDIR="
+    "BINDIR=$(out)/bin"
+    "MANDIR=$(out)/man"
+    "LOCALEDIR=$(out)/share/locale"
+  ];
+
+  hardeningEnable = [ "pie" ];
+
+  postBuild = optionalString stdenv.isLinux ''
+    make -C contrib/lease-tools
+  '';
+
+  # XXX: Does the systemd service definition really belong here when our NixOS
+  # module can create it in Nix-land?
+  postInstall = ''
+    install -Dm644 trust-anchors.conf $out/share/dnsmasq/trust-anchors.conf
+  '' + optionalString stdenv.isDarwin ''
+    install -Dm644 contrib/MacOSX-launchd/uk.org.thekelleys.dnsmasq.plist \
+      $out/Library/LaunchDaemons/uk.org.thekelleys.dnsmasq.plist
+    substituteInPlace $out/Library/LaunchDaemons/uk.org.thekelleys.dnsmasq.plist \
+      --replace "/usr/local/sbin" "$out/bin"
+  '' + optionalString stdenv.isLinux ''
+    install -Dm644 dbus/dnsmasq.conf $out/share/dbus-1/system.d/dnsmasq.conf
+    install -Dm755 contrib/lease-tools/dhcp_lease_time $out/bin/dhcp_lease_time
+    install -Dm755 contrib/lease-tools/dhcp_release $out/bin/dhcp_release
+    install -Dm755 contrib/lease-tools/dhcp_release6 $out/bin/dhcp_release6
+
+    mkdir -p $out/share/dbus-1/system-services
+    cat <<END > $out/share/dbus-1/system-services/uk.org.thekelleys.dnsmasq.service
+    [D-BUS Service]
+    Name=uk.org.thekelleys.dnsmasq
+    Exec=$out/bin/dnsmasq -k -1
+    User=root
+    SystemdService=dnsmasq.service
+    END
+  '';
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ nettle libidn ]
+    ++ optionals stdenv.isLinux [ dbus libnetfilter_conntrack ];
+
+  meta = {
+    description = "An integrated DNS, DHCP and TFTP server for small networks";
+    homepage = http://www.thekelleys.org.uk/dnsmasq/doc.html;
+    license = licenses.gpl2;
+    platforms = with platforms; linux ++ darwin;
+    maintainers = with maintainers; [ eelco fpletz globin ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dnsperf/default.nix b/nixpkgs/pkgs/tools/networking/dnsperf/default.nix
new file mode 100644
index 000000000000..63e19e924fca
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dnsperf/default.nix
@@ -0,0 +1,46 @@
+{ stdenv, fetchurl, fetchFromGitHub, autoreconfHook, pkgconfig
+, bind, zlib, openssl, libcap
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dnsperf";
+  version = "2.3.1";
+
+  # The same as the initial commit of the new GitHub repo (only readme changed).
+  src = fetchFromGitHub {
+    owner = "DNS-OARC";
+    repo = "dnsperf";
+    rev = "v${version}";
+    sha256 = "0yxwm5xi9ry154ayzn2h27bnwwc202bsna8h6i4a65pn76nrn81w";
+  };
+
+  outputs = [ "out" "man" "doc" ];
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+
+  buildInputs = [ bind zlib openssl ]
+    ++ stdenv.lib.optionals stdenv.isLinux [ libcap.lib ];
+
+  # For now, keep including the old PDFs as well.
+  # https://github.com/DNS-OARC/dnsperf/issues/27
+  postInstall = let
+    src-doc = fetchurl {
+      url = "ftp://ftp.nominum.com/pub/nominum/dnsperf/2.1.0.0/"
+          + "dnsperf-src-2.1.0.0-1.tar.gz";
+      sha256 = "03kfc65s5a9csa5i7xjsv0psq144k8d9yw7xlny61bg1h2kg1db4";
+    };
+  in ''
+    tar xf '${src-doc}'
+    cp ./dnsperf-src-*/doc/*.pdf "$doc/share/doc/dnsperf/"
+  '';
+
+  meta = with stdenv.lib; {
+    outputsToInstall = outputs; # The man pages and docs are likely useful to most.
+
+    description = "Tools for DNS benchmaring";
+    homepage = "https://github.com/DNS-OARC/dnsperf";
+    license = licenses.isc;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.vcunat ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dnsproxy/default.nix b/nixpkgs/pkgs/tools/networking/dnsproxy/default.nix
new file mode 100644
index 000000000000..6554dd465d4c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dnsproxy/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "dnsproxy";
+  version = "0.20.0";
+
+  src = fetchFromGitHub {
+    owner = "AdguardTeam";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0yd3d90ssdzpbsdq068dvsi0r1z2rlv3wpbmpkhfgpxmwrvdanrq";
+  };
+
+  modSha256 = "0cqwkmhajp3py3b5aj3qz9480qy2ws0vy1gk21bxjm56wqxl2gf0";
+
+  meta = with stdenv.lib; {
+    description = "Simple DNS proxy with DoH, DoT, and DNSCrypt support";
+    homepage = "https://github.com/AdguardTeam/dnsproxy";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ contrun ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dnstop/default.nix b/nixpkgs/pkgs/tools/networking/dnstop/default.nix
new file mode 100644
index 000000000000..207078773b26
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dnstop/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchurl, libpcap, ncurses }:
+
+stdenv.mkDerivation rec {
+  name = "dnstop-20140915";
+
+  src = fetchurl {
+    url = "http://dns.measurement-factory.com/tools/dnstop/src/${name}.tar.gz";
+    sha256 = "0yn5s2825l826506gclbcfk3lzllx9brk9rzja6yj5jv0013vc5l";
+  };
+
+  buildInputs = [ libpcap ncurses ];
+
+  preInstall = ''
+    mkdir -p $out/share/man/man8 $out/bin
+  '';
+
+  meta = { 
+    description = "libpcap application that displays DNS traffic on your network";
+    homepage = http://dns.measurement-factory.com/tools/dnstop;
+    license = stdenv.lib.licenses.bsd3;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dnstracer/default.nix b/nixpkgs/pkgs/tools/networking/dnstracer/default.nix
new file mode 100644
index 000000000000..5261fdb18960
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dnstracer/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, libresolv, perl }:
+
+stdenv.mkDerivation rec {
+  version = "1.10";
+  pname = "dnstracer";
+
+  src = fetchurl {
+    url = "https://www.mavetju.org/download/${pname}-${version}.tar.bz2";
+    sha256 = "089bmrjnmsga2n0r4xgw4bwbf41xdqsnmabjxhw8lngg2pns1kb4";
+  };
+
+  outputs = [ "out" "man" ];
+
+  nativeBuildInputs = [ perl /* for pod2man */ ];
+
+  setOutputFlags = false;
+
+  installPhase = ''
+    install -Dm755 -t $out/bin dnstracer
+    install -Dm755 -t $man/share/man/man8 dnstracer.8
+  '';
+
+  buildInputs = [] ++ stdenv.lib.optionals stdenv.isDarwin [ libresolv ];
+
+  NIX_LDFLAGS = stdenv.lib.optionalString stdenv.isDarwin "-lresolv";
+
+  meta = with stdenv.lib; {
+    description = "Dnstracer determines where a given Domain Name Server (DNS) gets its information from, and follows the chain of DNS servers back to the servers which know the data.";
+    homepage = http://www.mavetju.org/unix/general.php;
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ andir ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/driftnet/default.nix b/nixpkgs/pkgs/tools/networking/driftnet/default.nix
new file mode 100644
index 000000000000..a0f5b5b08420
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/driftnet/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, lib, fetchFromGitHub, libpcap, libjpeg , libungif, libpng
+, giflib, glib, gtk2, cairo, pango, gdk-pixbuf, atk
+, pkgconfig, autoreconfHook }:
+
+with lib;
+
+stdenv.mkDerivation {
+  pname = "driftnet";
+  version = "1.1.5";
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [
+    libpcap libjpeg libungif libpng giflib
+    glib gtk2 glib cairo pango gdk-pixbuf atk autoreconfHook
+  ];
+
+  src = fetchFromGitHub {
+    owner = "deiv";
+    repo = "driftnet";
+    rev = "0ae4a91";
+    sha256 = "1sagpx0mw68ggvqd9c3crjhghqmj7391mf2cb6cjw1cpd2hcddsj";
+  };
+
+  meta = {
+    description = "Driftnet watches network traffic, and picks out and displays JPEG and GIF images for display";
+    homepage = https://github.com/deiv/driftnet;
+    maintainers = with maintainers; [ offline ];
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dropbear/default.nix b/nixpkgs/pkgs/tools/networking/dropbear/default.nix
new file mode 100644
index 000000000000..c51f0a4fdf02
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dropbear/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, lib, fetchurl, glibc, zlib
+, enableStatic ? false
+, sftpPath ? "/run/current-system/sw/libexec/sftp-server"
+}:
+
+stdenv.mkDerivation rec {
+  name = "dropbear-2019.78";
+
+  src = fetchurl {
+    url = "https://matt.ucc.asn.au/dropbear/releases/${name}.tar.bz2";
+    sha256 = "19242qlr40pbqfqd0gg6h8qpj38q6lgv03ja6sahj9vj2abnanaj";
+  };
+
+  dontDisableStatic = enableStatic;
+
+  configureFlags = lib.optional enableStatic "LDFLAGS=-static";
+
+  CFLAGS = "-DSFTPSERVER_PATH=\\\"${sftpPath}\\\"";
+
+  # https://www.gnu.org/software/make/manual/html_node/Libraries_002fSearch.html
+  preConfigure = ''
+    makeFlags=VPATH=`cat $NIX_CC/nix-support/orig-libc`/lib
+  '';
+
+  patches = [
+    # Allow sessions to inherit the PATH from the parent dropbear.
+    # Otherwise they only get the usual /bin:/usr/bin kind of PATH
+    ./pass-path.patch
+  ];
+
+  buildInputs = [ zlib ] ++ lib.optionals enableStatic [ glibc.static zlib.static ];
+
+  meta = with stdenv.lib; {
+    homepage = http://matt.ucc.asn.au/dropbear/dropbear.html;
+    description = "A small footprint implementation of the SSH 2 protocol";
+    license = licenses.mit;
+    maintainers = with maintainers; [ abbradar ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/dropbear/pass-path.patch b/nixpkgs/pkgs/tools/networking/dropbear/pass-path.patch
new file mode 100644
index 000000000000..2ce08b05799d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dropbear/pass-path.patch
@@ -0,0 +1,36 @@
+diff --git a/svr-chansession.c b/svr-chansession.c
+index e44299e..7ef750a 100644
+--- a/svr-chansession.c
++++ b/svr-chansession.c
+@@ -893,6 +893,8 @@ static void addchildpid(struct ChanSess *chansess, pid_t pid) {
+ static void execchild(void *user_data) {
+ 	struct ChanSess *chansess = user_data;
+ 	char *usershell = NULL;
++	const char *path = DEFAULT_PATH;
++	const char *ldpath = NULL;
+ 
+ 	/* with uClinux we'll have vfork()ed, so don't want to overwrite the
+ 	 * hostkey. can't think of a workaround to clear it */
+@@ -905,6 +907,10 @@ static void execchild(void *user_data) {
+ 	seedrandom();
+ #endif
+ 
++	if (getenv("PATH"))
++		path = getenv("PATH");
++	ldpath = getenv("LD_LIBRARY_PATH");
++
+ 	/* clear environment */
+ 	/* if we're debugging using valgrind etc, we need to keep the LD_PRELOAD
+ 	 * etc. This is hazardous, so should only be used for debugging. */
+@@ -948,7 +954,10 @@ static void execchild(void *user_data) {
+ 	addnewvar("LOGNAME", ses.authstate.pw_name);
+ 	addnewvar("HOME", ses.authstate.pw_dir);
+ 	addnewvar("SHELL", get_user_shell());
+-	addnewvar("PATH", DEFAULT_PATH);
++	addnewvar("PATH", path);
++	if (ldpath != NULL) {
++		addnewvar("LD_LIBRARY_PATH", ldpath);
++	}
+ 	if (chansess->term != NULL) {
+ 		addnewvar("TERM", chansess->term);
+ 	}
diff --git a/nixpkgs/pkgs/tools/networking/dsniff/default.nix b/nixpkgs/pkgs/tools/networking/dsniff/default.nix
new file mode 100644
index 000000000000..9ddc1a35ce37
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/dsniff/default.nix
@@ -0,0 +1,82 @@
+{ stdenv, fetchFromGitLab, autoreconfHook, libpcap, db, glib, libnet, libnids, symlinkJoin, openssl }:
+let
+  /*
+  dsniff's build system unconditionnaly wants static libraries and does not
+  support multi output derivations. We do some overriding to give it
+  satisfaction.
+  */
+  staticdb = symlinkJoin {
+    inherit (db) name;
+    paths = with db.overrideAttrs(old: { dontDisableStatic = true; }); [ out dev ];
+    postBuild = ''
+      rm $out/lib/*.so*
+    '';
+  };
+  pcap = symlinkJoin {
+    inherit (libpcap) name;
+    paths = [ libpcap ];
+    postBuild = ''
+      cp -rs $out/include/pcap $out/include/net
+      # prevent references to libpcap
+      rm $out/lib/*.so*
+    '';
+  };
+  net = symlinkJoin {
+    inherit (libnet) name;
+    paths = [ (libnet.overrideAttrs(old: { dontDisableStatic = true; })) ];
+    postBuild = ''
+      # prevent dynamic linking, now that we have a static library
+      rm $out/lib/*.so*
+    '';
+  };
+  nids = libnids.overrideAttrs(old: {
+    dontDisableStatic = true;
+  });
+  ssl = symlinkJoin {
+    inherit (openssl) name;
+    paths = with openssl.override { static = true; }; [ out dev ];
+  };
+in stdenv.mkDerivation {
+  pname = "dsniff";
+  version = "2.4b1";
+  # upstream is so old that nearly every distribution packages the beta version.
+  # Also, upstream only serves the latest version, so we use debian's sources.
+  # this way we can benefit the numerous debian patches to be able to build
+  # dsniff with recent libraries.
+  src = fetchFromGitLab {
+    domain = "salsa.debian.org";
+    owner = "pkg-security-team";
+    repo = "dsniff";
+    rev = "debian%2F2.4b1%2Bdebian-29"; # %2B = urlquote("+"), %2F = urlquote("/")
+    sha256 = "10zz9krf65jsqvlcr72ycp5cd27xwr18jkc38zqp2i4j6x0caj2g";
+    name = "dsniff.tar.gz";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ glib pcap ];
+  NIX_CFLAGS_LINK = "-lglib-2.0 -lpthread";
+  postPatch = ''
+    for patch in debian/patches/*.patch; do
+      patch < $patch
+    done;
+  '';
+  configureFlags = [
+    "--with-db=${staticdb}"
+    "--with-libpcap=${pcap}"
+    "--with-libnet=${net}"
+    "--with-libnids=${nids}"
+    "--with-openssl=${ssl}"
+  ];
+
+  meta = with stdenv.lib; {
+    description = "collection of tools for network auditing and penetration testing";
+    longDescription = ''
+      dsniff, filesnarf, mailsnarf, msgsnarf, urlsnarf, and webspy passively monitor a network for interesting data (passwords, e-mail, files, etc.). arpspoof, dnsspoof, and macof facilitate the interception of network traffic normally unavailable to an attacker (e.g, due to layer-2 switching). sshmitm and webmitm implement active monkey-in-the-middle attacks against redirected SSH and HTTPS sessions by exploiting weak bindings in ad-hoc PKI.
+    '';
+    homepage = https://www.monkey.org/~dugsong/dsniff/;
+    license = licenses.bsd3;
+    maintainers = [ maintainers.symphorien ];
+    # bsd and solaris should work as well
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/easyrsa/2.x.nix b/nixpkgs/pkgs/tools/networking/easyrsa/2.x.nix
new file mode 100644
index 000000000000..9d6a1712e673
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/easyrsa/2.x.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchurl, autoreconfHook, makeWrapper
+, gnugrep, openssl }:
+
+stdenv.mkDerivation {
+  name = "easyrsa-2.2.0";
+
+  src = fetchurl {
+    url = "https://github.com/OpenVPN/easy-rsa/archive/v2.2.0.tar.gz";
+    sha256 = "1xq4by5frb6ikn53ss3y8v7ss639dccxfq8jfrbk07ynkmk668qk";
+  };
+
+  preBuild = ''
+    mkdir -p $out/share/easy-rsa
+  '';
+
+  nativeBuildInputs = [ autoreconfHook makeWrapper ];
+  buildInputs = [ gnugrep openssl ];
+
+  # Make sane defaults and patch default config vars
+  postInstall = ''
+    cp $out/share/easy-rsa/openssl-1.0.0.cnf $out/share/easy-rsa/openssl.cnf
+    for prog in $(find "$out/share/easy-rsa" -executable -type f); do
+      makeWrapper "$prog" "$out/bin/$(basename $prog)" \
+        --set EASY_RSA "$out/share/easy-rsa" \
+        --set OPENSSL "${openssl.bin}/bin/openssl" \
+        --set GREP "${gnugrep}/bin/grep"
+    done
+    sed -i "/EASY_RSA=\|OPENSSL=\|GREP=/d" $out/share/easy-rsa/vars
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Simple shell based CA utility";
+    homepage = https://openvpn.net/;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.offline ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/easyrsa/default.nix b/nixpkgs/pkgs/tools/networking/easyrsa/default.nix
new file mode 100644
index 000000000000..4d374cece3d7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/easyrsa/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchFromGitHub, openssl, runtimeShell }:
+
+let
+  version = "3.0.0";
+in stdenv.mkDerivation {
+  pname = "easyrsa";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "OpenVPN";
+    repo = "easy-rsa";
+    rev = "v${version}";
+    sha256 = "0wbdv3wmqwm5680rpb971l56xiw49adpicqshk3vhfmpvqzl4dbs";
+  };
+
+  patches = [ ./fix-paths.patch ];
+
+  installPhase = ''
+    mkdir -p $out/share/easyrsa
+    cp -r easyrsa3/{openssl*.cnf,x509-types,vars.example} $out/share/easyrsa
+    install -D -m755 easyrsa3/easyrsa $out/bin/easyrsa
+    substituteInPlace $out/bin/easyrsa \
+      --subst-var out \
+      --subst-var-by openssl ${openssl.bin}/bin/openssl
+
+    # Helper utility
+    cat > $out/bin/easyrsa-init <<EOF
+    #!${runtimeShell} -e
+    cp -r $out/share/easyrsa/* .
+    EOF
+    chmod +x $out/bin/easyrsa-init
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Simple shell based CA utility";
+    homepage = https://openvpn.net/;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.offline ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/easyrsa/fix-paths.patch b/nixpkgs/pkgs/tools/networking/easyrsa/fix-paths.patch
new file mode 100644
index 000000000000..82688fa79460
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/easyrsa/fix-paths.patch
@@ -0,0 +1,33 @@
+diff --git a/easyrsa3/easyrsa b/easyrsa3/easyrsa
+index 6fec288..210648a 100755
+--- a/easyrsa3/easyrsa
++++ b/easyrsa3/easyrsa
+@@ -1003,7 +1003,7 @@ Note: using Easy-RSA configuration from: $vars"
+ 	
+ 	# Set defaults, preferring existing env-vars if present
+ 	set_var EASYRSA		"$PWD"
+-	set_var EASYRSA_OPENSSL	openssl
++	set_var EASYRSA_OPENSSL	"@openssl@"
+ 	set_var EASYRSA_PKI	"$EASYRSA/pki"
+ 	set_var EASYRSA_DN	cn_only
+ 	set_var EASYRSA_REQ_COUNTRY	"US"
+@@ -1030,13 +1030,17 @@ Note: using Easy-RSA configuration from: $vars"
+ 	# Detect openssl config, preferring EASYRSA_PKI over EASYRSA
+ 	if [ -f "$EASYRSA_PKI/openssl-1.0.cnf" ]; then
+ 		set_var EASYRSA_SSL_CONF	"$EASYRSA_PKI/openssl-1.0.cnf"
+-	else	set_var EASYRSA_SSL_CONF	"$EASYRSA/openssl-1.0.cnf"
++	elif [ -f "$EASYRSA/openssl-1.0.cnf" ]; then
++		set_var EASYRSA_SSL_CONF	"$EASYRSA/openssl-1.0.cnf"
++	else	set_var EASYRSA_SSL_CONF	"@out@/share/easyrsa/openssl-1.0.cnf"
+ 	fi
+ 
+ 	# Same as above for the x509-types extensions dir
+ 	if [ -d "$EASYRSA_PKI/x509-types" ]; then
+ 		set_var EASYRSA_EXT_DIR		"$EASYRSA_PKI/x509-types"
+-	else	set_var EASYRSA_EXT_DIR		"$EASYRSA/x509-types"
++	elif [ -d "$EASYRSA/x509-types" ]; then
++		set_var EASYRSA_EXT_DIR		"$EASYRSA/x509-types"
++	else	set_var EASYRSA_EXT_DIR		"@out@/share/easyrsa/x509-types"
+ 	fi
+ 
+ 	# EASYRSA_ALGO_PARAMS must be set depending on selected algo
diff --git a/nixpkgs/pkgs/tools/networking/eggdrop/default.nix b/nixpkgs/pkgs/tools/networking/eggdrop/default.nix
new file mode 100644
index 000000000000..5b85a680efdf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/eggdrop/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchFromGitHub, tcl }:
+
+stdenv.mkDerivation {
+  pname = "eggdrop";
+  version = "1.6.21-nix1";
+
+  src = fetchFromGitHub {
+    owner = "eggheads";
+    repo = "eggdrop";
+    rev = "9ec109a13c016c4cdc7d52b7e16e4b9b6fbb9331";
+    sha256 = "0mf1vcbmpnvmf5mxk7gi3z32fxpcbynsh9jni8z8frrscrdf5lp5";
+  };
+
+  buildInputs = [ tcl ];
+
+  hardeningDisable = [ "format" ];
+
+  preConfigure = ''
+    prefix=$out/eggdrop
+    mkdir -p $prefix
+  '';
+
+  postConfigure = ''
+    make config
+  '';
+
+  configureFlags = [
+    "--with-tcllib=${tcl}/lib/lib${tcl.libPrefix}${stdenv.hostPlatform.extensions.sharedLibrary}"
+    "--with-tclinc=${tcl}/include/tcl.h"
+  ];
+
+  meta = with stdenv.lib; {
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    homepage = http://www.eggheads.org;
+    description = "An Internet Relay Chat (IRC) bot";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/email/default.nix b/nixpkgs/pkgs/tools/networking/email/default.nix
new file mode 100644
index 000000000000..d8c60882cd4a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/email/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, lib, fetchFromGitHub, openssl }:
+
+let
+  eMailSrc = fetchFromGitHub {
+    owner = "deanproxy";
+    repo = "eMail";
+    rev = "7d23c8f508a52bd8809e2af4290417829b6bb5ae";
+    sha256 = "1cxxzhm36civ6vjdgrk7mfmlzkih44kdii6l2xgy4r434s8rzcpn";
+  };
+
+  srcRoot = eMailSrc.name;
+
+  dlibSrc = fetchFromGitHub {
+    owner = "deanproxy";
+    repo = "dlib";
+    rev = "f62f29e918748b7cea476220f7492672be81c9de";
+    sha256 = "0h34cikch98sb7nsqjnb9wl384c8ndln3m6yb1172l4y89qjg9rr";
+  };
+
+in
+
+stdenv.mkDerivation {
+  name = "email-git-2016-01-31";
+  src = eMailSrc;
+
+  buildInputs = [ openssl ];
+
+  unpackPhase = ''
+    unpackPhase;
+    cp -Rp ${dlibSrc}/* ${srcRoot}/dlib;
+    chmod -R +w ${srcRoot}/dlib;
+  '';
+
+  meta = {
+    description = "Command line SMTP client";
+    license = with lib.licenses; [ gpl2 ];
+    homepage = https://deanproxy.com/code;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/eternal-terminal/default.nix b/nixpkgs/pkgs/tools/networking/eternal-terminal/default.nix
new file mode 100644
index 000000000000..8dd18df28c7e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/eternal-terminal/default.nix
@@ -0,0 +1,30 @@
+{ stdenv
+, fetchFromGitHub
+, cmake
+, gflags
+, libsodium
+, protobuf
+}:
+
+stdenv.mkDerivation rec {
+  pname = "eternal-terminal";
+  version = "6.0.5";
+
+  src = fetchFromGitHub {
+    owner = "MisterTea";
+    repo = "EternalTerminal";
+    rev = "et-v${version}";
+    sha256 = "04jn0189vq5lc795izkxq1zdv9fnpxz2xchg2mm37armpz7n06id";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ gflags libsodium protobuf ];
+
+  meta = with stdenv.lib; {
+    description = "Remote shell that automatically reconnects without interrupting the session";
+    license = licenses.asl20;
+    homepage = https://mistertea.github.io/EternalTerminal/;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ dezgeg pingiun ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/fakeroute/default.nix b/nixpkgs/pkgs/tools/networking/fakeroute/default.nix
new file mode 100644
index 000000000000..d5190331d33f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/fakeroute/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "fakeroute";
+  version = "0.3";
+
+  src = fetchurl {
+    url = "https://moxie.org/software/fakeroute/${pname}-${version}.tar.gz";
+    sha256 = "1sp342rxgm1gz4mvi5vvz1knz7kn9px9s39ii3jdjp4ks7lr5c8f";
+  };
+
+  meta = with stdenv.lib; {
+    description = ''
+      Makes your machine appear to be anywhere on the internet
+      to any host running a (UDP) unix traceroute
+    '';
+    homepage = https://moxie.org/software/fakeroute/;
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/fastd/default.nix b/nixpkgs/pkgs/tools/networking/fastd/default.nix
new file mode 100644
index 000000000000..43efe2090f2c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/fastd/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchgit, cmake, bison, pkgconfig
+, libuecc, libsodium, libcap, json_c }:
+
+stdenv.mkDerivation rec {
+  version = "18";
+  pname = "fastd";
+
+  src = fetchgit {
+    url = "git://git.universe-factory.net/fastd";
+    rev = "refs/tags/v${version}";
+    sha256 = "0c9v3igv3812b3jr7jk75a2np658yy00b3i4kpbpdjgvqzc1jrq8";
+  };
+
+  postPatch = ''
+    substituteInPlace src/crypto/cipher/CMakeLists.txt \
+      --replace 'add_subdirectory(aes128_ctr)' ""
+  '';
+
+  nativeBuildInputs = [ pkgconfig bison cmake ];
+  buildInputs = [ libuecc libsodium libcap json_c ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "Fast and Secure Tunneling Daemon";
+    homepage = https://projects.universe-factory.net/projects/fastd/wiki;
+    license = with licenses; [ bsd2 bsd3 ];
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/fdm/default.nix b/nixpkgs/pkgs/tools/networking/fdm/default.nix
new file mode 100644
index 000000000000..abb76e633ee7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/fdm/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, openssl, tdb, zlib, flex, bison }:
+
+let
+
+  baseName = "fdm";
+  version = "1.9.0.20170124";
+
+in
+
+stdenv.mkDerivation {
+  name = "${baseName}-${version}";
+
+  src = fetchFromGitHub {
+    owner = "nicm";
+    repo = baseName;
+    rev = "cae4ea37b6b296d1b2e48f62934ea3a7f6085e33";
+    sha256 = "048191wdv1yprwinipmx2152gvd2iq1ssv7xfb1bzh6zirh1ya3n";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ openssl tdb zlib flex bison ];
+
+
+  meta = with stdenv.lib; {
+    description = "Mail fetching and delivery tool - should do the job of getmail and procmail";
+    maintainers = with maintainers; [ raskin ];
+    platforms = with platforms; linux;
+    homepage = https://github.com/nicm/fdm;
+    downloadPage = https://github.com/nicm/fdm/releases;
+    license = licenses.isc;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ferm/default.nix b/nixpkgs/pkgs/tools/networking/ferm/default.nix
new file mode 100644
index 000000000000..6f1660484e78
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ferm/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchurl, makeWrapper, perl, ebtables, ipset, iptables, nixosTests }:
+
+stdenv.mkDerivation rec {
+  version = "2.4.1";
+  pname = "ferm";
+
+  src = fetchurl {
+    url = "http://ferm.foo-projects.org/download/2.4/ferm-${version}.tar.xz";
+    sha256 = "1fv8wk513yysp4q0i65rl2m0hg2lxwwgk9ppprsca1xcxrdpsvwa";
+  };
+
+  buildInputs = [ perl ipset ebtables iptables makeWrapper ];
+  preConfigure = ''
+    substituteInPlace config.mk --replace "PERL = /usr/bin/perl" "PERL = ${perl}/bin/perl"
+    substituteInPlace config.mk --replace "PREFIX = /usr" "PREFIX = $out"
+  '';
+  postInstall = ''
+    rm -r $out/lib/systemd
+    for i in "$out/sbin/"*; do
+      wrapProgram "$i" --prefix PATH : "${iptables}/bin:${ipset}/bin:${ebtables}/bin"
+    done
+  '';
+
+  passthru.tests.ferm = nixosTests.ferm;
+
+  meta = {
+    homepage = http://ferm.foo-projects.org/;
+    description = "Tool to maintain complex firewalls";
+    longDescription = ''
+      ferm is a tool to maintain complex firewalls, without having the trouble to
+      rewrite the complex rules over and over again. ferm allows the entire
+      firewall rule set to be stored in a separate file, and to be loaded with one
+      command. The firewall configuration resembles structured programming-like
+      language, which can contain levels and lists.
+    '';
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = with stdenv.lib.maintainers; [mic92];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/filegive/default.nix b/nixpkgs/pkgs/tools/networking/filegive/default.nix
new file mode 100644
index 000000000000..f9e334d81962
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/filegive/default.nix
@@ -0,0 +1,22 @@
+{ buildGoPackage, stdenv, fetchurl }:
+
+buildGoPackage rec {
+  name = "filegive-0.7.4";
+
+  src = fetchurl {
+    url = "http://viric.name/soft/filegive/${name}.tar.gz";
+    sha256 = "1z3vyqfdp271qa5ah0i6jmn9gh3gb296wcm33sd2zfjqapyh12hy";
+  };
+
+  goDeps = ./deps.nix;
+
+  goPackagePath = "viric.name/soft/filegive";
+
+  meta = with stdenv.lib; {
+    homepage = http://viric.name/cgi-bin/filegive;
+    description = "Easy p2p file sending program";
+    license = licenses.agpl3Plus;
+    maintainers = [ maintainers.viric ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/filegive/deps.nix b/nixpkgs/pkgs/tools/networking/filegive/deps.nix
new file mode 100644
index 000000000000..24c262195086
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/filegive/deps.nix
@@ -0,0 +1,12 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.3.0
+[
+  {
+    goPackagePath = "code.google.com/p/go-nat-pmp";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jackpal/go-nat-pmp";
+      rev = "e04deda90d5683d6e375732740814a89eea7bafd";
+      sha256 = "1swwfyzaj3l40yh9np3x4fcracgs79nwryc85sxbdakx8wwxs2xb";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/networking/findomain/default.nix b/nixpkgs/pkgs/tools/networking/findomain/default.nix
new file mode 100644
index 000000000000..abc34abd77f7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/findomain/default.nix
@@ -0,0 +1,37 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, rustPlatform
+, installShellFiles
+, perl
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "findomain";
+  version = "0.9.3";
+
+  src = fetchFromGitHub {
+    owner = "Edu4rdSHL";
+    repo = pname;
+    rev = version;
+    sha256 = "1p7bj8q3zwn92nn6d71bk7cczclcsjvan6m8znlzr4lrwircp1y1";
+  };
+
+  cargoSha256 = "1grb0frc1kp3z6vs2906h9v1yx9qxn6x0gf9jy1msqgnqjw0bgn9";
+
+  nativeBuildInputs = [ installShellFiles perl ];
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  postInstall = ''
+    installManPage ${pname}.1
+  '';
+
+  meta = with lib; {
+    description = "The fastest and cross-platform subdomain enumerator";
+    homepage = "https://github.com/Edu4rdSHL/findomain";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ filalex77 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/flannel/default.nix b/nixpkgs/pkgs/tools/networking/flannel/default.nix
new file mode 100644
index 000000000000..d2f0ec2ec634
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/flannel/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+with lib;
+
+buildGoPackage rec {
+  pname = "flannel";
+  version = "0.11.0";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/coreos/flannel";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "coreos";
+    repo = "flannel";
+    sha256 = "0akxlrrsm2w51g0qd7dnsdy0hdajx98sdhxw4iknjr2kn7j3gph9";
+  };
+
+  meta = {
+    description = "Network fabric for containers, designed for Kubernetes";
+    license = licenses.asl20;
+    homepage = https://github.com/coreos/flannel;
+    maintainers = with maintainers; [johanot offline];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/flvstreamer/default.nix b/nixpkgs/pkgs/tools/networking/flvstreamer/default.nix
new file mode 100644
index 000000000000..b5e61bee4dfe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/flvstreamer/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+
+  name = "flvstreamer-2.1c1";
+
+  src = fetchurl {
+    url = "mirror://savannah/flvstreamer/source/${name}.tar.gz";
+    sha256 = "e90e24e13a48c57b1be01e41c9a7ec41f59953cdb862b50cf3e667429394d1ee";
+  };
+
+  buildPhase = ''
+    make CC=cc posix
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp flvstreamer $out/bin
+    cp streams $out/bin
+    cp rtmpsrv $out/bin
+    cp rtmpsuck $out/bin
+  '';
+
+  meta = {
+    description = "Command-line RTMP client";
+
+    longDescription =
+      '' flvstreamer is an open source command-line RTMP client intended to 
+         stream audio or video content from all types of flash or rtmp servers.
+      '';
+
+    license = stdenv.lib.licenses.gpl2Plus;
+
+    homepage = https://savannah.nongnu.org/projects/flvstreamer;
+
+    maintainers = [ stdenv.lib.maintainers.thammers ];
+    platforms = with stdenv.lib.platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/fping/default.nix b/nixpkgs/pkgs/tools/networking/fping/default.nix
new file mode 100644
index 000000000000..4b5242818b3d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/fping/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "fping-4.2";
+
+  src = fetchurl {
+    url = "https://www.fping.org/dist/${name}.tar.gz";
+    sha256 = "0jmnf4vmr43aiwk3h2b5qdsb95gxar8gz1yli8fswnm9nrs9ccvx";
+  };
+
+  configureFlags = [ "--enable-ipv6" "--enable-ipv4" ];
+
+  meta = with stdenv.lib; {
+    homepage = http://fping.org/;
+    description = "Send ICMP echo probes to network hosts";
+    maintainers = with maintainers; [ the-kenny ];
+    license = licenses.bsd0;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/freebind/default.nix b/nixpkgs/pkgs/tools/networking/freebind/default.nix
new file mode 100644
index 000000000000..0c74f14e1744
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/freebind/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, libnetfilter_queue, libnfnetlink }:
+
+stdenv.mkDerivation {
+  pname = "freebind";
+  version = "2017-12-27";
+
+  src = fetchFromGitHub {
+    owner = "blechschmidt";
+    repo = "freebind";
+    rev = "9a13d6f9c12aeea4f6d3513ba2461d34f841f278";
+    sha256 = "1iv2xiz9w8hbz684caw50fn4a9vc8ninfgaqafkh9sa8mzpfzcqr";
+  };
+
+  buildInputs = [ libnetfilter_queue libnfnetlink ];
+
+  postPatch = ''
+    substituteInPlace preloader.c --replace /usr/local/ $out/
+    substituteInPlace Makefile    --replace /usr/local/ $out/
+  '';
+
+  preInstall = ''
+    mkdir -p $out/bin $out/lib
+  '';
+
+  meta = with stdenv.lib; {
+    description = "IPv4 and IPv6 address rate limiting evasion tool";
+    homepage = https://github.com/blechschmidt/freebind;
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ volth ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/frp/default.nix b/nixpkgs/pkgs/tools/networking/frp/default.nix
new file mode 100644
index 000000000000..46ccfc0d24cd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/frp/default.nix
@@ -0,0 +1,31 @@
+{ buildGoModule, lib, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "frp";
+  version = "0.31.1";
+
+  src = fetchFromGitHub {
+    owner = "fatedier";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1cf2f0nbcg76i4mv8l3d38c13lw0mma6d2xzwkb9iqn7jflj1j9y";
+  };
+
+  modSha256 = "1zbl0gfc99pbzdacxhfa1k3y6i7v13sb441wpbp9aygxhvwqrms9";
+
+  subPackages = [ "cmd/frpc" "cmd/frps" ];
+
+  meta = with lib; {
+    description = "Fast reverse proxy";
+    longDescription = ''
+      frp is a fast reverse proxy to help you expose a local server behind a
+      NAT or firewall to the Internet. As of now, it supports TCP and UDP, as
+      well as HTTP and HTTPS protocols, where requests can be forwarded to
+      internal services by domain name. frp also has a P2P connect mode.
+    '';
+    homepage = "https://github.com/fatedier/frp";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ filalex77 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/gandi-cli/default.nix b/nixpkgs/pkgs/tools/networking/gandi-cli/default.nix
new file mode 100644
index 000000000000..2ea09404e347
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/gandi-cli/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, python3Packages, fetchFromGitHub }:
+
+with python3Packages;
+
+buildPythonApplication rec {
+  pname = "gandi-cli";
+  version = "1.5";
+
+  src = fetchFromGitHub {
+    owner = "Gandi";
+    repo = "gandi.cli";
+    rev = version;
+    sha256 = "1jcabpphlm6qajw8dz0h4gynm03g1mxi0cn900i3v7wdfww1gfab";
+  };
+
+  propagatedBuildInputs = [ click ipy pyyaml requests ];
+
+  doCheck = false;    # Tests try to contact the actual remote API
+
+  meta = with stdenv.lib; {
+    description = "Command-line interface to the public Gandi.net API";
+    homepage = https://cli.gandi.net/;
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ kampka ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/getmail/default.nix b/nixpkgs/pkgs/tools/networking/getmail/default.nix
new file mode 100644
index 000000000000..f107e4106784
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/getmail/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, python2Packages }:
+
+python2Packages.buildPythonApplication rec {
+  pname = "getmail";
+  version = "5.14";
+
+  src = fetchurl {
+    url = "http://pyropus.ca/software/getmail/old-versions/${pname}-${version}.tar.gz";
+    sha256 = "1hcrd9h4g12f5gvl1djsbchcjry02ghq4icdr897s8v48pkrzagk";
+  };
+
+  doCheck = false;
+
+  postPatch = ''
+    # getmail spends a lot of effort to build an absolute path for
+    # documentation installation; too bad it is counterproductive now
+    sed -e '/datadir or prefix,/d' -i setup.py
+  '';
+
+  meta = {
+    description = "A program for retrieving mail";
+    maintainers = [ stdenv.lib.maintainers.raskin stdenv.lib.maintainers.domenkozar ];
+    platforms = stdenv.lib.platforms.linux;
+
+    homepage = http://pyropus.ca/software/getmail/;
+    inherit version;
+    updateWalker = true;
+    license = stdenv.lib.licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/gftp/default.nix b/nixpkgs/pkgs/tools/networking/gftp/default.nix
new file mode 100644
index 000000000000..9431216e2515
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/gftp/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl, gtk2, readline, ncurses, gettext, openssl, pkgconfig }:
+
+stdenv.mkDerivation {
+  name = "gftp-2.0.19";
+
+  src = fetchurl {
+    url = https://www.gftp.org/gftp-2.0.19.tar.bz2;
+    sha256 = "1z8b26n23k0sjbxgrix646b06cnpndpq7cbcj0ilsvvdx5ms81jk";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ gtk2 readline ncurses gettext openssl ];
+
+  meta = {
+    description = "GTK-based FTP client";
+    homepage = http://www.gftp.org;
+    license = stdenv.lib.licenses.gpl2Plus;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/gmrender-resurrect/default.nix b/nixpkgs/pkgs/tools/networking/gmrender-resurrect/default.nix
new file mode 100644
index 000000000000..d942dce6a197
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/gmrender-resurrect/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, makeWrapper, gstreamer
+, gst-plugins-base, gst-plugins-good, gst-plugins-bad, gst-plugins-ugly, gst-libav, libupnp }:
+
+let
+  version = "0.0.8";
+
+  makePluginPath = plugins: builtins.concatStringsSep ":" (map (p: p + "/lib/gstreamer-1.0") plugins);
+
+  pluginPath = makePluginPath [ gstreamer gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugins-ugly gst-libav ];
+in
+  stdenv.mkDerivation {
+    pname = "gmrender-resurrect";
+    inherit version;
+
+    src = fetchFromGitHub {
+      owner = "hzeller";
+      repo = "gmrender-resurrect";
+      rev = "v${version}";
+      sha256 = "14i5jrry6qiap5l2x2jqj7arymllajl3wgnk29ccvr8d45zp4jn1";
+    };
+
+    buildInputs = [ gstreamer libupnp ];
+    nativeBuildInputs = [ autoreconfHook pkgconfig makeWrapper ];
+
+    postInstall = ''
+      for prog in "$out/bin/"*; do
+          wrapProgram "$prog" --suffix GST_PLUGIN_SYSTEM_PATH_1_0 : "${pluginPath}"
+      done
+    '';
+
+    meta = with stdenv.lib; {
+      description = "Resource efficient UPnP/DLNA renderer, optimal for Raspberry Pi, CuBox or a general MediaServer";
+      homepage = https://github.com/hzeller/gmrender-resurrect;
+      license = licenses.gpl2;
+      platforms = platforms.linux;
+      maintainers = with maintainers; [ koral ashkitten ];
+    };
+  }
diff --git a/nixpkgs/pkgs/tools/networking/gmvault/default.nix b/nixpkgs/pkgs/tools/networking/gmvault/default.nix
new file mode 100644
index 000000000000..aab5b77351c9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/gmvault/default.nix
@@ -0,0 +1,31 @@
+{ pkgs, fetchurl, pythonPackages }:
+
+pythonPackages.buildPythonApplication rec {
+  version = "1.9.1";
+  pname = "gmvault";
+
+  src = fetchurl {
+    url = "https://bitbucket.org/gaubert/gmvault-official-download/downloads/gmvault-v${version}-src.tar.gz";
+    name = "${pname}-${version}.tar.bz";
+    sha256 = "0ffp8df3gdf6lf3pj75hzsmxmvmscppb6bjda58my1n4ppxp1rji";
+  };
+
+  doCheck = false;
+
+  propagatedBuildInputs = with pythonPackages; [ gdata IMAPClient Logbook chardet ];
+
+  startScript = ./gmvault.py;
+
+  patchPhase = ''
+    cat ${startScript} > etc/scripts/gmvault
+    chmod +x etc/scripts/gmvault
+    substituteInPlace setup.py --replace "==" ">="
+    substituteInPlace setup.py --replace "argparse" ""
+  '';
+
+  meta = {
+    description = "Backup and restore your gmail account";
+    homepage = http://gmvault.org;
+    license = pkgs.lib.licenses.agpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/gmvault/gmvault.py b/nixpkgs/pkgs/tools/networking/gmvault/gmvault.py
new file mode 100644
index 000000000000..127036577f38
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/gmvault/gmvault.py
@@ -0,0 +1,4 @@
+#!/usr/bin/env python
+
+import gmv.gmv_cmd as runner
+runner.bootstrap_run()
diff --git a/nixpkgs/pkgs/tools/networking/gnirehtet/default.nix b/nixpkgs/pkgs/tools/networking/gnirehtet/default.nix
new file mode 100644
index 000000000000..06faa0640257
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/gnirehtet/default.nix
@@ -0,0 +1,52 @@
+{stdenv, rustPlatform, fetchFromGitHub, fetchzip, androidenv, substituteAll}:
+let
+version = "2.4";
+apk = stdenv.mkDerivation {
+  pname = "gnirehtet.apk";
+  inherit version;
+  src = fetchzip {
+    url = "https://github.com/Genymobile/gnirehtet/releases/download/v${version}/gnirehtet-rust-linux64-v${version}.zip";
+    sha256 = "13gsh5982v961j86j5y71pgas94g2d1v1fgnbslbqw4h69fbf48g";
+  };
+  installPhase = ''
+    mkdir $out
+    mv gnirehtet.apk $out
+  '';
+};
+in
+rustPlatform.buildRustPackage {
+  pname = "gnirehtet";
+  inherit version;
+
+  src = fetchFromGitHub {
+      owner = "Genymobile";
+      repo = "gnirehtet";
+      rev = "v${version}";
+      sha256 = "1c99d6zpjxa8xlrg0n1825am20d2pjiicfcjwv8iay9ylfdnvygl";
+  };
+  sourceRoot = "source/relay-rust";
+  cargoSha256 = "1l1cirhmfkpa466vksynlhwggsfiahws7cpsxydrc414l415l283";
+
+  patchFlags = [ "-p2" ];
+  patches = [
+    (substituteAll {
+      src = ./paths.patch;
+      adb = "${androidenv.androidPkgs_9_0.platform-tools}/bin/adb";
+      inherit apk;
+    })
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Reverse tethering over adb for Android";
+    longDescription = ''
+      This project provides reverse tethering over adb for Android: it allows devices to use the internet connection of the computer they are plugged on. It does not require any root access (neither on the device nor on the computer).
+
+      This relies on adb, make sure you have the required permissions/udev rules.
+    '';
+    homepage = https://github.com/Genymobile/gnirehtet;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ symphorien ];
+    platforms = platforms.unix;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/networking/gnirehtet/paths.patch b/nixpkgs/pkgs/tools/networking/gnirehtet/paths.patch
new file mode 100644
index 000000000000..e5df4b8e4fe7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/gnirehtet/paths.patch
@@ -0,0 +1,48 @@
+Index: gnirehtet/relay-rust/src/main.rs
+===================================================================
+--- gnirehtet.orig/relay-rust/src/main.rs
++++ gnirehtet/relay-rust/src/main.rs
+@@ -299,7 +299,7 @@ impl Command for RelayCommand {
+ 
+ fn cmd_install(serial: Option<&String>) -> Result<(), CommandExecutionError> {
+     info!(target: TAG, "Installing gnirehtet client...");
+-    exec_adb(serial, vec!["install", "-r", "gnirehtet.apk"])
++    exec_adb(serial, vec!["install", "-r", "@apk@/gnirehtet.apk"])
+ }
+ 
+ fn cmd_uninstall(serial: Option<&String>) -> Result<(), CommandExecutionError> {
+@@ -464,8 +464,8 @@ fn exec_adb<S: Into<String>>(
+     args: Vec<S>,
+ ) -> Result<(), CommandExecutionError> {
+     let adb_args = create_adb_args(serial, args);
+-    debug!(target: TAG, "Execute: adb {:?}", adb_args);
+-    match process::Command::new("adb").args(&adb_args[..]).status() {
++    debug!(target: TAG, "Execute: @adb@ {:?}", adb_args);
++    match process::Command::new("@adb@").args(&adb_args[..]).status() {
+         Ok(exit_status) => {
+             if exit_status.success() {
+                 Ok(())
+@@ -487,8 +487,8 @@ fn must_install_client(serial: Option<&S
+         serial,
+         vec!["shell", "dumpsys", "package", "com.genymobile.gnirehtet"],
+     );
+-    debug!(target: TAG, "Execute: adb {:?}", args);
+-    match process::Command::new("adb").args(&args[..]).output() {
++    debug!(target: TAG, "Execute: @adb@ {:?}", args);
++    match process::Command::new("@adb@").args(&args[..]).output() {
+         Ok(output) => {
+             if output.status.success() {
+                 // the "regex" crate makes the binary far bigger, so just parse the versionCode
+Index: gnirehtet/relay-rust/src/adb_monitor.rs
+===================================================================
+--- gnirehtet.orig/relay-rust/src/adb_monitor.rs
++++ gnirehtet/relay-rust/src/adb_monitor.rs
+@@ -206,7 +206,7 @@ impl AdbMonitor {
+
+     fn start_adb_daemon() -> bool {
+         info!(target: TAG, "Restarting adb daemon");
+-        match process::Command::new("adb")
++        match process::Command::new("@adb@")
+             .args(&["start-server"])
+             .status() {
+             Ok(exit_status) => {
diff --git a/nixpkgs/pkgs/tools/networking/go-shadowsocks2/default.nix b/nixpkgs/pkgs/tools/networking/go-shadowsocks2/default.nix
new file mode 100644
index 000000000000..1591b6acf5be
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/go-shadowsocks2/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "go-shadowsocks2";
+  version = "0.0.11";
+
+  goPackagePath = "github.com/shadowsocks/go-shadowsocks2";
+
+  src = fetchFromGitHub {
+    owner = "shadowsocks";
+    repo = "go-shadowsocks2";
+    rev = "v${version}";
+    sha256 = "1dprz84gmcp6xcsk873lhj32wm8b55vnqn0s984ggvwf1rjqw00c";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    description = "Fresh implementation of Shadowsocks in Go";
+    homepage = "https://github.com/shadowsocks/go-shadowsocks2/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ geistesk ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/go-shadowsocks2/deps.nix b/nixpkgs/pkgs/tools/networking/go-shadowsocks2/deps.nix
new file mode 100644
index 000000000000..7fe0c2b6985b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/go-shadowsocks2/deps.nix
@@ -0,0 +1,30 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.3.0
+[
+  {
+    goPackagePath = "github.com/aead/chacha20";
+    fetch = {
+      type = "git";
+      url = "https://github.com/aead/chacha20";
+      rev = "8b13a72661dae6e9e5dea04f344f0dc95ea29547";
+      sha256 = "0gbmgq5kbqmbyrsav57ql4jzbvqvp1q7yvcd5fl3wf5g94iyv56r";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev = "60c769a6c58655dab1b9adac0d58967dd517cfba";
+      sha256 = "1wy2pg38dz29vf1h48yfqf8m3jqvwnbdw8vkk3ldlj5d8fbbbmv8";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "fb81701db80f1745f51259b1f286de3fe2ec80c8";
+      sha256 = "1cgvyzkmsbvgyp75nxp10fpnpy08scz6ak60s9w0mkgibw7irhz3";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/networking/goklp/default.nix b/nixpkgs/pkgs/tools/networking/goklp/default.nix
new file mode 100644
index 000000000000..c260b47a6332
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/goklp/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "goklp";
+  version = "1.6";
+
+  goPackagePath = "github.com/AppliedTrust/goklp";
+
+  src = fetchFromGitHub {
+    owner = "AppliedTrust";
+    repo = "goklp";
+    rev = "v${version}";
+    sha256 = "054qmwfaih8qbvdyy4rqbb1ip3jpnm547n390hgab8yc3bdd840c";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    description = "Golang OpenSSH Keys Ldap Provider for AuthorizedKeysCommand";
+    homepage = https://github.com/AppliedTrust/goklp;
+    maintainers = with maintainers; [ disassembler ];
+    license = licenses.bsd2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/goklp/deps.nix b/nixpkgs/pkgs/tools/networking/goklp/deps.nix
new file mode 100644
index 000000000000..2f6481f237f8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/goklp/deps.nix
@@ -0,0 +1,56 @@
+[
+  {
+    goPackagePath = "github.com/asaskevich/govalidator";
+    fetch = {
+      type = "git";
+      url = "https://github.com/asaskevich/govalidator";
+      rev = "ca5f9e638c83bac66bfac70ded5bded1503135a7";
+      sha256 = "0lk4irlf4a4q8qharwjxl71y1s2cf5bjpg9cv5jlyp574331pn1w";
+    };
+  }
+  {
+    goPackagePath = "github.com/docopt/docopt-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/docopt/docopt-go";
+      rev = "784ddc588536785e7299f7272f39101f7faccc3f";
+      sha256 = "0wwz48jl9fvl1iknvn9dqr4gfy1qs03gxaikrxxp9gry6773v3sj";
+    };
+  }
+  {
+    goPackagePath = "github.com/kardianos/osext";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kardianos/osext";
+      rev = "ae77be60afb1dcacde03767a8c37337fad28ac14";
+      sha256 = "056dkgxrqjj5r18bnc3knlpgdz5p3yvp12y4y978hnsfhwaqvbjz";
+    };
+  }
+  {
+    goPackagePath = "github.com/vaughan0/go-ini";
+    fetch = {
+      type = "git";
+      url = "https://github.com/vaughan0/go-ini";
+      rev = "a98ad7ee00ec53921f08832bc06ecf7fd600e6a1";
+      sha256 = "1l1isi3czis009d9k5awsj4xdxgbxn4n9yqjc1ac7f724x6jacfa";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/asn1-ber.v1";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/asn1-ber.v1";
+      rev = "379148ca0225df7a432012b8df0355c2a2063ac0";
+      sha256 = "1y8bvzbxpw0lfnn7pbcdwzqj4l90qj6xf88dvv9pxd9yl5g6cskx";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/ldap.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/ldap.v2";
+      rev = "8168ee085ee43257585e50c6441aadf54ecb2c9f";
+      sha256 = "1w0993i8bl8sap01gwm1v6hjp0rsanj2mbpyabwcwnns2g79n895";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/networking/gping/default.nix b/nixpkgs/pkgs/tools/networking/gping/default.nix
new file mode 100644
index 000000000000..85f13f031b4d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/gping/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, iputils
+, python3
+, python3Packages
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "gping";
+  version = "1.1";
+
+  propagatedBuildInputs = with python3Packages; [ colorama ];
+
+  src = python3Packages.fetchPypi {
+    inherit version;
+    pname  = "pinggraph";
+    sha256 = "0q5ma98457zb6vxsnhmrr3p38j1vg0gl155y0adzfg67wlniac92";
+  };
+
+  # Make path to ping explicit
+  postFixup = ''
+    substituteInPlace $out/${python3.sitePackages}/gping/pinger.py \
+      --replace 'subprocess.getoutput("ping ' 'subprocess.getoutput("${iputils}/bin/ping ' \
+      --replace 'args = ["ping"]' 'args = ["${iputils}/bin/ping"]'
+  '';
+
+  meta = with lib; {
+    description = "Ping, but with a graph";
+    homepage = https://github.com/orf/gping;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ andrew-d ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/grpcui/default.nix b/nixpkgs/pkgs/tools/networking/grpcui/default.nix
new file mode 100644
index 000000000000..58e698ed7081
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/grpcui/default.nix
@@ -0,0 +1,23 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "grpcui";
+  version = "0.2.1";
+
+  src = fetchFromGitHub {
+    owner = "fullstorydev";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0dcah6bamjqyp9354qrd1cykdr5k5l93hh7qcy5b4nkag9531gl0";
+  };
+
+  modSha256 = "1yq8484cjxad72nqsrim3zppr8hmn7dc6f8rgkw8fg952lqy5jjb";
+
+  meta = with lib; {
+    description = "An interactive web UI for gRPC, along the lines of postman";
+    homepage = "https://github.com/fullstorydev/grpcui";
+    license = licenses.mit;
+    maintainers = with maintainers; [ pradyuman ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/grpcurl/default.nix b/nixpkgs/pkgs/tools/networking/grpcurl/default.nix
new file mode 100644
index 000000000000..12f285c2a60a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/grpcurl/default.nix
@@ -0,0 +1,29 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+# and modified to add meta and switch to fetchFromGitHub
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "grpcurl";
+  version = "1.0.0";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/fullstorydev/grpcurl";
+
+  src = fetchFromGitHub {
+    owner = "fullstorydev";
+    repo = "grpcurl";
+    rev = "d4d048fade4abcc2f0c3fb6f3e207289401d0a10";
+    sha256 = "0v45lwjw2phavhi6m4ql49ri1423m249a6xcf00v9hi2x1y9dh6q";
+  };
+
+  goDeps = if stdenv.isDarwin
+           then ./deps-darwin.nix
+           else ./deps-linux.nix;
+
+  meta = {
+    description = "Like cURL, but for gRPC: Command-line tool for interacting with gRPC servers";
+    homepage = https://github.com/fullstorydev/grpcurl;
+    license = stdenv.lib.licenses.mit;
+    maintainers = with stdenv.lib.maintainers; [ knl ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/grpcurl/deps-darwin.nix b/nixpkgs/pkgs/tools/networking/grpcurl/deps-darwin.nix
new file mode 100644
index 000000000000..52afa88708f3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/grpcurl/deps-darwin.nix
@@ -0,0 +1,57 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev = "ddf22928ea3c56eb4292a0adbbf5001b1e8e7d0d";
+      sha256 = "16awkanx2rgxzhwi9vpm4i8jmmsw10gb104ncwfinvb6a9nzm28l";
+    };
+  }
+  {
+    goPackagePath = "github.com/jhump/protoreflect";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jhump/protoreflect";
+      rev = "b28d968eb345542b430a717dc72a88abf10d0b95";
+      sha256 = "0i8k55xx2wyzfz635nbjqma505sn03l75mq6lgbknzwhv1xbx39s";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev = "146acd28ed5894421fb5aac80ca93bc1b1f46f87";
+      sha256 = "0d177474z85nvxz8ch6y9wjqz288844wwx8q9za3x2njnk4jbgxj";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/text";
+      rev = "4d1c5fb19474adfe9562c9847ba425e7da817e81";
+      sha256 = "1y4rf9cmjyf8r56khr1sz0chbq1v0ynaj63i2z1mq6k6h6ww45da";
+    };
+  }
+  {
+    goPackagePath = "google.golang.org/genproto";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/go-genproto";
+      rev = "af9cb2a35e7f169ec875002c1829c9b315cddc04";
+      sha256 = "1942rw8h7zhbzvxn1rqn8z265sl2i14hm0z4hbfbc93slmml7p7n";
+    };
+  }
+  {
+    goPackagePath = "google.golang.org/grpc";
+    fetch = {
+      type = "git";
+      url = "https://github.com/grpc/grpc-go";
+      rev = "c195587d96d5ae30321b96a1e2e175fea09e9fda";
+      sha256 = "1av4hgaqk0hgji8ycdkgganh6bqajk2ygm4ifrmyzbm1hzwi3gg7";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/networking/grpcurl/deps-linux.nix b/nixpkgs/pkgs/tools/networking/grpcurl/deps-linux.nix
new file mode 100644
index 000000000000..e5e775e50fea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/grpcurl/deps-linux.nix
@@ -0,0 +1,66 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev = "ddf22928ea3c56eb4292a0adbbf5001b1e8e7d0d";
+      sha256 = "16awkanx2rgxzhwi9vpm4i8jmmsw10gb104ncwfinvb6a9nzm28l";
+    };
+  }
+  {
+    goPackagePath = "github.com/jhump/protoreflect";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jhump/protoreflect";
+      rev = "b28d968eb345542b430a717dc72a88abf10d0b95";
+      sha256 = "0i8k55xx2wyzfz635nbjqma505sn03l75mq6lgbknzwhv1xbx39s";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev = "49bb7cea24b1df9410e1712aa6433dae904ff66a";
+      sha256 = "111q4qm3hcjvzvyv9y5rz8ydnyg48rckcygxqy6gv63q618wz6gn";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "4497e2df6f9e69048a54498c7affbbec3294ad47";
+      sha256 = "028qmbfmy84pl7wmjgvrv1x7x7nzv3qr9w7vcnrcparr43k7415s";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/text";
+      rev = "4d1c5fb19474adfe9562c9847ba425e7da817e81";
+      sha256 = "1y4rf9cmjyf8r56khr1sz0chbq1v0ynaj63i2z1mq6k6h6ww45da";
+    };
+  }
+  {
+    goPackagePath = "google.golang.org/genproto";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/go-genproto";
+      rev = "af9cb2a35e7f169ec875002c1829c9b315cddc04";
+      sha256 = "1942rw8h7zhbzvxn1rqn8z265sl2i14hm0z4hbfbc93slmml7p7n";
+    };
+  }
+  {
+    goPackagePath = "google.golang.org/grpc";
+    fetch = {
+      type = "git";
+      url = "https://github.com/grpc/grpc-go";
+      rev = "c195587d96d5ae30321b96a1e2e175fea09e9fda";
+      sha256 = "1av4hgaqk0hgji8ycdkgganh6bqajk2ygm4ifrmyzbm1hzwi3gg7";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/networking/guardian-agent/default.nix b/nixpkgs/pkgs/tools/networking/guardian-agent/default.nix
new file mode 100644
index 000000000000..a5e8dc10d341
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/guardian-agent/default.nix
@@ -0,0 +1,44 @@
+{ buildGoPackage
+, fetchFromGitHub
+, lib
+, autossh
+, makeWrapper
+}:
+
+buildGoPackage rec {
+  pname = "guardian-agent";
+  version = "0.7.2";
+
+  src = fetchFromGitHub {
+    owner = "StanfordSNR";
+    repo = pname;
+    rev = "v${version}-beta";
+    sha256 = "05269y944hcabn6dqa66387rdhx81vcqcyjv6m1hdbz5ba8j7mqn";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  goPackagePath = "github.com/StanfordSNR/guardian-agent";
+
+  goDeps = ./deps.nix;
+
+  postInstall = ''
+    mkdir -p $bin/bin $out/share/doc/${pname}
+    cp -v ./go/src/github.com/StanfordSNR/${pname}/scripts/* $bin/bin/
+    cp -vr ./go/src/github.com/StanfordSNR/${pname}/{AUTHORS,doc,LICENSE,README.md} $out/share/doc/guardian-agent
+  '';
+
+  postFixup = ''
+		wrapProgram $bin/bin/sga-guard \
+			--prefix PATH : "$bin/bin" \
+			--prefix PATH : "${autossh}/bin"
+  '';
+
+  meta = with lib; {
+    description = "Secure ssh-agent forwarding for Mosh and SSH";
+    homepage = "https://github.com/StanfordSNR/guardian-agent";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ mmahut ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/guardian-agent/deps.nix b/nixpkgs/pkgs/tools/networking/guardian-agent/deps.nix
new file mode 100644
index 000000000000..950a346ce8be
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/guardian-agent/deps.nix
@@ -0,0 +1,58 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.3.0
+[
+  {
+    goPackagePath = "github.com/hashicorp/yamux";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hashicorp/yamux";
+      rev = "2f1d1f20f75d5404f53b9edf6b53ed5505508675";
+      sha256 = "1fga3p6j2g24ip9qjfwn3nqjr00m4nnjz92app7ms3sz7vgq2a7s";
+    };
+  }
+  {
+    goPackagePath = "github.com/howeyc/gopass";
+    fetch = {
+      type = "git";
+      url = "https://github.com/howeyc/gopass";
+      rev = "bf9dde6d0d2c004a008c27aaee91170c786f6db8";
+      sha256 = "1jxzyfnqi0h1fzlsvlkn10bncic803bfhslyijcxk55mgh297g45";
+    };
+  }
+  {
+    goPackagePath = "github.com/sternhenri/interact";
+    fetch = {
+      type = "git";
+      url = "https://github.com/sternhenri/interact";
+      rev = "dfeb9ef2030483f98cee2c86f5775fe6c729f10b";
+      sha256 = "00b09fyy9zhv11mbzm18ngg765g0gyb23bmr4fc83i09w912if7j";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "04f50cda93cbb67f2afa353c52f342100e80e625";
+      sha256 = "0hmfsz9y1ingwsn482hlzzmzs7kr3cklm0ana0mbdk70isw2bxnw";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://github.com/StanfordSNR/crypto";
+      rev = "e451cabda2acd7a416728ee89b75975b8b0c90d7";
+      sha256 = "0aj6fc0i1dm6rdgr1mlv2pl4s0i6sj821k2p4gig45h5mn06mhpz";
+    };
+  }
+  {
+    goPackagePath = "github.com/jessevdk/go-flags";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jessevdk/go-flags";
+      rev = "c0795c8afcf41dd1d786bebce68636c199b3bb45";
+      sha256 = "0xsmr17mrpm9kx34zfzzirwy0n459h975x49p41fs2f6ly6lk9vp";
+    };
+  }
+
+]
diff --git a/nixpkgs/pkgs/tools/networking/gupnp-tools/default.nix b/nixpkgs/pkgs/tools/networking/gupnp-tools/default.nix
new file mode 100644
index 000000000000..830d27fa6ce2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/gupnp-tools/default.nix
@@ -0,0 +1,57 @@
+{ stdenv
+, fetchurl
+, meson
+, ninja
+, gupnp
+, gssdp
+, pkgconfig
+, gtk3
+, libuuid
+, gettext
+, gupnp-av
+, gtksourceview4
+, gnome3
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gupnp-tools";
+  version = "0.10.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "13d1qr1avz9r76989nvgxhhclmqzr025xjk4rfnja94fpbspznj1";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkgconfig
+    gettext
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gupnp
+    libuuid
+    gssdp
+    gtk3
+    gupnp-av
+    gtksourceview4
+    gnome3.adwaita-icon-theme
+  ];
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+    };
+  };
+
+  meta = with stdenv.lib; {
+    description = "Set of utilities and demos to work with UPnP";
+    homepage = https://wiki.gnome.org/Projects/GUPnP;
+    license = licenses.gpl2Plus;
+    maintainers = gnome3.maintainers;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/gvpe/default.nix b/nixpkgs/pkgs/tools/networking/gvpe/default.nix
new file mode 100644
index 000000000000..ba59870a6b86
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/gvpe/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, openssl, gmp, zlib, iproute, nettools }:
+
+stdenv.mkDerivation rec {
+  pname = "gvpe";
+  version = "3.0";
+
+  src = fetchurl {
+    url = "https://ftp.gnu.org/gnu/gvpe/gvpe-${version}.tar.gz";
+    sha256 = "1v61mj25iyd91z0ir7cmradkkcm1ffbk52c96v293ibsvjs2s2hf";
+  };
+
+  patches = [ ./gvpe-3.0-glibc-2.26.patch ];
+
+  buildInputs = [ openssl gmp zlib ];
+
+  configureFlags = [
+    "--enable-tcp"
+    "--enable-http-proxy"
+    "--enable-dns"
+    ];
+
+  preBuild = ''
+    sed -e 's@"/sbin/ifconfig.*"@"${iproute}/sbin/ip link set $IFNAME address $MAC mtu $MTU"@' -i src/device-linux.C
+    sed -e 's@/sbin/ifconfig@${nettools}/sbin/ifconfig@g' -i src/device-*.C
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A protected multinode virtual network";
+    homepage = http://software.schmorp.de/pkg/gvpe.html;
+    maintainers = [ maintainers.raskin ];
+    platforms = with platforms; linux ++ freebsd;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/gvpe/gvpe-3.0-glibc-2.26.patch b/nixpkgs/pkgs/tools/networking/gvpe/gvpe-3.0-glibc-2.26.patch
new file mode 100644
index 000000000000..9cfb6472c4e1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/gvpe/gvpe-3.0-glibc-2.26.patch
@@ -0,0 +1,18 @@
+diff --git a/lib/getopt.h b/lib/getopt.h
+index 2d02142..5e7d8d4 100644
+--- a/lib/getopt.h
++++ b/lib/getopt.h
+@@ -101,13 +101,6 @@ struct option
+ #define optional_argument	2
+ 
+ #if defined (__STDC__) && __STDC__
+-#ifdef __GNU_LIBRARY__
+-/* Many other libraries have conflicting prototypes for getopt, with
+-   differences in the consts, in stdlib.h.  To avoid compilation
+-   errors, only prototype getopt for the GNU C library.  */
+-extern int getopt (int argc, char *const *argv, const char *shortopts);
+-#else /* not __GNU_LIBRARY__ */
+-#endif /* __GNU_LIBRARY__ */
+ extern int getopt_long (int argc, char *const *argv, const char *shortopts,
+ 		        const struct option *longopts, int *longind);
+ extern int getopt_long_only (int argc, char *const *argv,
diff --git a/nixpkgs/pkgs/tools/networking/hans/default.nix b/nixpkgs/pkgs/tools/networking/hans/default.nix
new file mode 100644
index 000000000000..ccc598b0692f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/hans/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchFromGitHub, nettools }:
+
+stdenv.mkDerivation rec {
+  pname = "hans";
+  version = "1.0";
+
+  src = fetchFromGitHub {
+    sha256 = "1qnfl7wr5x937b6jx3vhhvnwnrclrqvq7d7zxbfhk74pdwnjy8n4";
+    rev = "v${version}";
+    repo = "hans";
+    owner = "friedrich";
+  };
+
+  buildInputs = [ nettools ];
+
+  postPatch = ''
+    substituteInPlace src/tun.cpp --replace "/sbin/" "${nettools}/bin/"
+  '';
+
+  enableParallelBuilding = true;
+
+  installPhase = ''
+    install -D -m0755 hans $out/bin/hans
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Tunnel IPv4 over ICMP";
+    longDescription = ''
+      Hans makes it possible to tunnel IPv4 through ICMP echo packets, so you
+      could call it a ping tunnel. This can be useful when you find yourself in
+      the situation that your Internet access is firewalled, but pings are
+      allowed.
+    '';
+    homepage = https://code.gerade.org/hans/;
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/haproxy/default.nix b/nixpkgs/pkgs/tools/networking/haproxy/default.nix
new file mode 100644
index 000000000000..95457b012054
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/haproxy/default.nix
@@ -0,0 +1,69 @@
+{ useLua ? !stdenv.isDarwin
+, usePcre ? true
+, withPrometheusExporter ? true
+, stdenv, lib, fetchurl
+, openssl, zlib
+, lua5_3 ? null, pcre ? null, systemd ? null
+}:
+
+assert useLua -> lua5_3 != null;
+assert usePcre -> pcre != null;
+
+stdenv.mkDerivation rec {
+  pname = "haproxy";
+  version = "2.0.10";
+
+  src = fetchurl {
+    url = "https://www.haproxy.org/download/${stdenv.lib.versions.majorMinor version}/src/${pname}-${version}.tar.gz";
+    sha256 = "1sm42q9l159pdmjs5dg544z10dn6x073caljkqh0p4syshysnf0x";
+  };
+
+  buildInputs = [ openssl zlib ]
+    ++ lib.optional useLua lua5_3
+    ++ lib.optional usePcre pcre
+    ++ lib.optional stdenv.isLinux systemd;
+
+  # TODO: make it work on bsd as well
+  makeFlags = [
+    "PREFIX=\${out}"
+    ("TARGET=" + (if stdenv.isSunOS  then "solaris"
+             else if stdenv.isLinux  then "linux-glibc"
+             else if stdenv.isDarwin then "osx"
+             else "generic"))
+  ];
+
+  buildFlags = [
+    "USE_OPENSSL=yes"
+    "USE_ZLIB=yes"
+  ] ++ lib.optionals usePcre [
+    "USE_PCRE=yes"
+    "USE_PCRE_JIT=yes"
+  ] ++ lib.optionals useLua [
+    "USE_LUA=yes"
+    "LUA_LIB=${lua5_3}/lib"
+    "LUA_INC=${lua5_3}/include"
+  ] ++ lib.optionals stdenv.isLinux [
+    "USE_SYSTEMD=yes"
+    "USE_GETADDRINFO=1"
+  ] ++ lib.optionals withPrometheusExporter [
+    "EXTRA_OBJS=contrib/prometheus-exporter/service-prometheus.o"
+  ] ++ lib.optional stdenv.isDarwin "CC=cc";
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Reliable, high performance TCP/HTTP load balancer";
+    longDescription = ''
+      HAProxy is a free, very fast and reliable solution offering high
+      availability, load balancing, and proxying for TCP and HTTP-based
+      applications. It is particularly suited for web sites crawling under very
+      high loads while needing persistence or Layer7 processing. Supporting
+      tens of thousands of connections is clearly realistic with todays
+      hardware.
+    '';
+    homepage = "https://haproxy.org";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ fuzzy-id ];
+    platforms = with platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/horst/default.nix b/nixpkgs/pkgs/tools/networking/horst/default.nix
new file mode 100644
index 000000000000..96fb342e27fc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/horst/default.nix
@@ -0,0 +1,26 @@
+{stdenv, fetchFromGitHub, pkgconfig, ncurses, libnl }:
+
+stdenv.mkDerivation rec {
+  pname = "horst";
+  version = "5.1";
+
+  src = fetchFromGitHub {
+    owner = "br101";
+    repo = "horst";
+    rev = "v${version}";
+    sha256 = "140pyv6rlsh4c745w4b59pz3hrarr39qq3mz9z1lsd3avc12nx1a";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ ncurses libnl ];
+
+  installFlags = [ "DESTDIR=${placeholder "out"}" ];
+
+  meta = with stdenv.lib; {
+    description = "Small and lightweight IEEE802.11 wireless LAN analyzer with a text interface";
+    homepage = http://br1.einfach.org/tech/horst/;
+    maintainers = [ maintainers.fpletz ];
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/hping/default.nix b/nixpkgs/pkgs/tools/networking/hping/default.nix
new file mode 100644
index 000000000000..6e00a6e9afa8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/hping/default.nix
@@ -0,0 +1,50 @@
+{ stdenv, fetchurl, libpcap, tcl }:
+
+stdenv.mkDerivation rec {
+  pname = "hping";
+  version = "20051105";
+
+  src = fetchurl {
+    url = "http://www.hping.org/hping3-${version}.tar.gz";
+    sha256 = "1s5f9xd1msx05ibhwaw37jmc7l9fahcxxslqz8a83p0i5ak739pm";
+  };
+
+  buildInputs = [ libpcap tcl ];
+
+  configurePhase = ''
+    MANPATH="$out/share/man" ./configure
+    sed -i -r -e 's|/usr(/s?bin)|'"$out"'\1|g' Makefile
+  '';
+
+  TCLSH = "${tcl}/bin/tclsh";
+
+  prePatch = ''
+    sed -i -e '/#if.*defined(__i386__)/a \
+      || defined(__x86_64__) \\
+    ' bytesex.h
+
+    sed -i -e 's|#include.*net/bpf.h|#include <pcap/bpf.h>|' \
+      libpcap_stuff.c script.c
+
+    sed -i -r -e 's|"(/usr/(local/)?)?bin/"|"${tcl}/bin"|g' \
+              -e 's!/usr/(local/)?(lib|include)!${tcl}/\2!g' \
+              configure
+  '';
+
+  preInstall = ''
+    mkdir -vp "$out/sbin" "$out/share/man/man8"
+  '';
+
+  postInstall = ''
+    ln -vs hping3.8.gz "$out/share/man/man8/hping.8.gz"
+    ln -vs hping3.8.gz "$out/share/man/man8/hping2.8.gz"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A command-line oriented TCP/IP packet assembler/analyzer";
+    homepage = http://www.hping.org/;
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/hss/default.nix b/nixpkgs/pkgs/tools/networking/hss/default.nix
new file mode 100644
index 000000000000..913e76c0f4ba
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/hss/default.nix
@@ -0,0 +1,34 @@
+{ lib, buildRubyGem, ruby, openssh }:
+
+# Example ~/.hss.yml
+#---
+#patterns:
+#  - note: Basic test
+#    example: g -> github
+#    short: '^g$'
+#    long: 'git@github.com'
+
+buildRubyGem rec {
+  name = "hss-${version}";
+  inherit ruby;
+  gemName = "hss";
+  version = "1.0.1";
+  source.sha256 = "0hdfpxxqsh6gisn8mm0knsl1aig9fir0h2x9sirk3gr36qbz5xa4";
+
+  postInstall = ''
+   substituteInPlace $GEM_HOME/gems/${gemName}-${version}/bin/hss \
+     --replace \
+       "'ssh'" \
+       "'${openssh}/bin/ssh'"
+  '';
+
+  meta = with lib; {
+    description = ''
+      A SSH helper that uses regex and fancy expansion to dynamically manage SSH shortcuts.
+    '';
+    homepage    = https://github.com/akerl/hss;
+    license     = licenses.mit;
+    maintainers = with maintainers; [ nixy ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/htpdate/default.nix b/nixpkgs/pkgs/tools/networking/htpdate/default.nix
new file mode 100644
index 000000000000..9bb44b70f11e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/htpdate/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  version = "1.2.2";
+  pname = "htpdate";
+
+  src = fetchurl {
+    url = "http://www.vervest.org/htp/archive/c/${pname}-${version}.tar.xz";
+    sha256 = "0mgr350qwgzrdrwkb9kaj6z7l6hn6a2pwh7sacqvnal5fyc9a7sz";
+  };
+
+  makeFlags = [
+    "INSTALL=install"
+    "STRIP=${stdenv.cc.bintools.targetPrefix}strip"
+    "prefix=$(out)"
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "Utility to fetch time and set the system clock over HTTP";
+    homepage = http://www.vervest.org/htp/;
+    platforms = platforms.linux;
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/http-prompt/default.nix b/nixpkgs/pkgs/tools/networking/http-prompt/default.nix
new file mode 100644
index 000000000000..9ed2f000f325
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/http-prompt/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchFromGitHub, python3Packages, httpie }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "http-prompt";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    repo = "http-prompt";
+    owner = "eliangcs";
+    sha256 = "0kngz2izcqjphbrdkg489p0xmf65xjc8ki1a2szcc8sgwc7z74xy";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    click
+    httpie
+    parsimonious
+    (python.pkgs.callPackage ../../../development/python-modules/prompt_toolkit/1.nix {})
+    pygments
+    six
+  ];
+
+  checkPhase = ''
+    $out/bin/${pname} --version | grep -q "${version}"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "An interactive command-line HTTP client featuring autocomplete and syntax highlighting";
+    homepage = https://github.com/eliangcs/http-prompt;
+    license = licenses.mit;
+    maintainers = with maintainers; [ matthiasbeyer ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/httperf/default.nix b/nixpkgs/pkgs/tools/networking/httperf/default.nix
new file mode 100644
index 000000000000..271be9c2352f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/httperf/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "httperf";
+  version = "0.9.1";
+
+  src = fetchFromGitHub {
+    repo = pname;
+    owner = pname;
+    rev = "3209c7f9b15069d4b79079e03bafba5b444569ff";
+    sha256 = "0p48z9bcpdjq3nsarl26f0xbxmqgw42k5qmfy8wv5bcrz6b3na42";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  propagatedBuildInputs = [ openssl ];
+
+  configurePhase = ''
+    autoreconf -i
+    mkdir -pv build
+    cd build
+    ../configure
+  '';
+
+  installPhase = ''
+    mkdir -vp $out/bin
+    mv -v src/httperf $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "The httperf HTTP load generator";
+    homepage = https://github.com/httperf/httperf;
+    maintainers = with maintainers; [ nand0p ];
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/networking/httpie/default.nix b/nixpkgs/pkgs/tools/networking/httpie/default.nix
new file mode 100644
index 000000000000..38fdab358c90
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/httpie/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromGitHub, python3Packages, docutils, }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "httpie";
+  version = "2.0.0";
+
+  src = fetchFromGitHub {
+    owner = "jakubroztocil";
+    repo = "httpie";
+    rev = version;
+    sha256 = "0d0rsn5i973l9y0ws3xmnzaw4jwxdlryyjbasnlddph5mvkf7dq0";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ pygments requests setuptools ];
+  dontUseSetuptoolsCheck = true;
+  patches = [ ./strip-venv.patch ];
+
+  checkInputs = with python3Packages; [
+    mock
+    pytest
+    pytest-httpbin
+    pytestCheckHook
+  ];
+
+  # the tests call rst2pseudoxml.py from docutils
+  preCheck = ''
+    export PATH=${docutils}/bin:$PATH
+  '';
+
+  meta = {
+    description = "A command line HTTP client whose goal is to make CLI human-friendly";
+    homepage = https://httpie.org/;
+    license = stdenv.lib.licenses.bsd3;
+    maintainers = with stdenv.lib.maintainers; [ antono relrod schneefux ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/httpie/strip-venv.patch b/nixpkgs/pkgs/tools/networking/httpie/strip-venv.patch
new file mode 100644
index 000000000000..99ea80a3f566
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/httpie/strip-venv.patch
@@ -0,0 +1,19 @@
+diff --git a/tests/test_docs.py b/tests/test_docs.py
+index 7a41822..720ecf6 100644
+--- a/tests/test_docs.py
++++ b/tests/test_docs.py
+@@ -41,12 +41,10 @@ assert filenames
+ 
+ # HACK: hardcoded paths, venv should be irrelevant, etc.
+ # TODO: replaces the process with Python code
+-VENV_BIN = Path(__file__).parent.parent / 'venv/bin'
+-VENV_PYTHON = VENV_BIN / 'python'
+-VENV_RST2PSEUDOXML = VENV_BIN / 'rst2pseudoxml.py'
++VENV_PYTHON = 'python'
++VENV_RST2PSEUDOXML = 'rst2pseudoxml.py'
+ 
+ 
+-@pytest.mark.skipif(not os.path.exists(VENV_RST2PSEUDOXML), reason='docutils not installed')
+ @pytest.mark.parametrize('filename', filenames)
+ def test_rst_file_syntax(filename):
+     p = subprocess.Popen(
diff --git a/nixpkgs/pkgs/tools/networking/httping/default.nix b/nixpkgs/pkgs/tools/networking/httping/default.nix
new file mode 100644
index 000000000000..e269a38f8218
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/httping/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, gettext, libintl, ncurses, openssl
+, fftw ? null }:
+
+stdenv.mkDerivation rec {
+  pname = "httping";
+  version = "2.5";
+
+  src = fetchurl {
+    url = "https://vanheusden.com/httping/${pname}-${version}.tgz";
+    sha256 = "1y7sbgkhgadmd93x1zafqc4yp26ssiv16ni5bbi9vmvvdl55m29y";
+  };
+
+  buildInputs = [ fftw libintl ncurses openssl ];
+  nativeBuildInputs = [ gettext ];
+
+  makeFlags = [
+    "DESTDIR=$(out)"
+    "PREFIX="
+  ];
+
+  meta = with stdenv.lib; {
+    homepage = https://vanheusden.com/httping;
+    description = "ping with HTTP requests";
+    longDescription = ''
+      Give httping an url, and it'll show you how long it takes to connect,
+      send a request and retrieve the reply (only the headers). Be aware that
+      the transmission across the network also takes time! So it measures the
+      latency of the webserver + network. It supports IPv6.
+    '';
+    license = licenses.agpl3;
+    maintainers = [];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/httplab/default.nix b/nixpkgs/pkgs/tools/networking/httplab/default.nix
new file mode 100644
index 000000000000..a7b157d3ebc2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/httplab/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "httplab";
+  version = "0.3.0";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/gchaincl/httplab";
+
+  src = fetchFromGitHub {
+    owner = "gchaincl";
+    repo = "httplab";
+    inherit rev;
+    sha256 = "1q9rp43z59nryfm79gci5a1gmqw552rqd4cki81rymbj3f6xvrf9";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/gchaincl/httplab;
+    description = "Interactive WebServer";
+    license = licenses.mit;
+    maintainers = with maintainers; [ pradeepchhetri ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/httplz/cargo-lock.patch b/nixpkgs/pkgs/tools/networking/httplz/cargo-lock.patch
new file mode 100644
index 000000000000..1d1632a0e82a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/httplz/cargo-lock.patch
@@ -0,0 +1,1196 @@
+diff --git a/Cargo.lock b/Cargo.lock
+new file mode 100644
+index 0000000..fe230f5
+--- /dev/null
++++ b/Cargo.lock
+@@ -0,0 +1,1190 @@
++# This file is automatically @generated by Cargo.
++# It is not intended for manual editing.
++[[package]]
++name = "adler32"
++version = "1.0.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "aho-corasick"
++version = "0.7.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "ansi_term"
++version = "0.11.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "antidote"
++version = "1.0.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "atty"
++version = "0.2.13"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "autocfg"
++version = "0.1.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "base64"
++version = "0.9.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "safemem 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "base64"
++version = "0.10.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "bitflags"
++version = "1.1.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "brotli-sys"
++version = "0.3.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "cc 1.0.45 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "brotli2"
++version = "0.3.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "brotli-sys 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "byteorder"
++version = "1.3.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "bzip2"
++version = "0.3.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "bzip2-sys 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "bzip2-sys"
++version = "0.1.7"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "cc 1.0.45 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "c2-chacha"
++version = "0.2.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "ppv-lite86 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "cc"
++version = "1.0.45"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "cfg-if"
++version = "0.1.9"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "clap"
++version = "2.33.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
++ "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "cloudabi"
++version = "0.0.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "core-foundation"
++version = "0.6.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "core-foundation-sys"
++version = "0.6.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "crc32fast"
++version = "1.2.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "ctrlc"
++version = "3.1.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "nix 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "dtoa"
++version = "0.4.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "embed-resource"
++version = "1.3.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "vswhom 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winreg 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "flate2"
++version = "1.0.11"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
++ "miniz-sys 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
++ "miniz_oxide 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "foreign-types"
++version = "0.3.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "foreign-types-shared"
++version = "0.1.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "fuchsia-cprng"
++version = "0.1.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "gcc"
++version = "0.3.55"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "getrandom"
++version = "0.1.12"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
++ "wasi 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "httparse"
++version = "1.3.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "https"
++version = "1.6.0"
++dependencies = [
++ "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "brotli2 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "bzip2 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cc 1.0.45 (registry+https://github.com/rust-lang/crates.io-index)",
++ "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "ctrlc 3.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "embed-resource 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "flate2 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)",
++ "hyper-native-tls 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "iron 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "lazysort 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
++ "md6 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "mime_guess 1.8.7 (registry+https://github.com/rust-lang/crates.io-index)",
++ "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rand 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rfsapi 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "serde 0.9.15 (registry+https://github.com/rust-lang/crates.io-index)",
++ "serde_json 0.9.10 (registry+https://github.com/rust-lang/crates.io-index)",
++ "tabwriter 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
++ "trivial_colours 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "unicase 2.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "hyper"
++version = "0.10.16"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
++ "language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
++ "mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "num_cpus 1.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
++ "traitobject 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "typeable 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "hyper-native-tls"
++version = "0.3.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "antidote 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "hyper 0.10.16 (registry+https://github.com/rust-lang/crates.io-index)",
++ "native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "idna"
++version = "0.1.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
++ "unicode-normalization 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "iron"
++version = "0.6.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "hyper 0.10.16 (registry+https://github.com/rust-lang/crates.io-index)",
++ "hyper-native-tls 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
++ "mime_guess 1.8.7 (registry+https://github.com/rust-lang/crates.io-index)",
++ "modifier 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "num_cpus 1.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "plugin 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "typemap 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "itoa"
++version = "0.3.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "language-tags"
++version = "0.2.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "lazy_static"
++version = "1.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "lazysort"
++version = "0.2.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "libc"
++version = "0.2.62"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "log"
++version = "0.3.9"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "log"
++version = "0.4.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "matches"
++version = "0.1.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "md6"
++version = "2.0.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "gcc 0.3.55 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "memchr"
++version = "2.2.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "mime"
++version = "0.2.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "mime_guess"
++version = "1.8.7"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "phf 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)",
++ "phf_codegen 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)",
++ "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "miniz-sys"
++version = "0.1.12"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "cc 1.0.45 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "miniz_oxide"
++version = "0.3.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "adler32 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "modifier"
++version = "0.1.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "native-tls"
++version = "0.2.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
++ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "openssl 0.10.24 (registry+https://github.com/rust-lang/crates.io-index)",
++ "openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "openssl-sys 0.9.49 (registry+https://github.com/rust-lang/crates.io-index)",
++ "schannel 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)",
++ "security-framework 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "security-framework-sys 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "nix"
++version = "0.14.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cc 1.0.45 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
++ "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "num-traits"
++version = "0.1.43"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "num-traits"
++version = "0.2.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "num_cpus"
++version = "1.10.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "openssl"
++version = "0.10.24"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
++ "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
++ "openssl-sys 0.9.49 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "openssl-probe"
++version = "0.1.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "openssl-sys"
++version = "0.9.49"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cc 1.0.45 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
++ "pkg-config 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)",
++ "vcpkg 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "percent-encoding"
++version = "1.0.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "percent-encoding"
++version = "2.1.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "phf"
++version = "0.7.24"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "phf_codegen"
++version = "0.7.24"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "phf_generator 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)",
++ "phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "phf_generator"
++version = "0.7.24"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "phf_shared"
++version = "0.7.24"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "siphasher 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "pkg-config"
++version = "0.3.16"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "plugin"
++version = "0.2.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "typemap 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "ppv-lite86"
++version = "0.2.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "quote"
++version = "0.3.15"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "rand"
++version = "0.6.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "rand"
++version = "0.7.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "getrandom 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rand_chacha 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "rand_chacha"
++version = "0.1.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "rand_chacha"
++version = "0.2.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "c2-chacha 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "rand_core"
++version = "0.3.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "rand_core"
++version = "0.4.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "rand_core"
++version = "0.5.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "getrandom 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "rand_hc"
++version = "0.1.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "rand_hc"
++version = "0.2.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "rand_isaac"
++version = "0.1.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "rand_jitter"
++version = "0.1.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "rand_os"
++version = "0.1.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "rand_pcg"
++version = "0.1.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "rand_xorshift"
++version = "0.1.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "rdrand"
++version = "0.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "redox_syscall"
++version = "0.1.56"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "regex"
++version = "1.3.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "regex-syntax 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)",
++ "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "regex-syntax"
++version = "0.6.12"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "remove_dir_all"
++version = "0.5.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "rfsapi"
++version = "0.1.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "hyper 0.10.16 (registry+https://github.com/rust-lang/crates.io-index)",
++ "mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "serde 0.9.15 (registry+https://github.com/rust-lang/crates.io-index)",
++ "serde_derive 0.9.15 (registry+https://github.com/rust-lang/crates.io-index)",
++ "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "safemem"
++version = "0.3.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "schannel"
++version = "0.1.15"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "security-framework"
++version = "0.3.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)",
++ "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
++ "security-framework-sys 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "security-framework-sys"
++version = "0.3.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "serde"
++version = "0.9.15"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "serde_codegen_internals"
++version = "0.14.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "serde_derive"
++version = "0.9.15"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)",
++ "serde_codegen_internals 0.14.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "serde_json"
++version = "0.9.10"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "dtoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
++ "itoa 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
++ "num-traits 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)",
++ "serde 0.9.15 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "siphasher"
++version = "0.2.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "smallvec"
++version = "0.6.10"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "strsim"
++version = "0.8.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "syn"
++version = "0.11.11"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)",
++ "synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "synom"
++version = "0.11.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "tabwriter"
++version = "1.1.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "tempfile"
++version = "3.1.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rand 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
++ "remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "textwrap"
++version = "0.11.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "thread_local"
++version = "0.3.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "time"
++version = "0.1.42"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
++ "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "traitobject"
++version = "0.1.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "trivial_colours"
++version = "0.3.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "typeable"
++version = "0.1.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "typemap"
++version = "0.3.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "unsafe-any 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "unicase"
++version = "1.4.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "unicase"
++version = "2.5.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "unicode-bidi"
++version = "0.3.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "unicode-normalization"
++version = "0.1.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "smallvec 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "unicode-width"
++version = "0.1.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "unicode-xid"
++version = "0.0.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "unsafe-any"
++version = "0.4.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "traitobject 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "url"
++version = "1.7.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
++ "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "vcpkg"
++version = "0.2.7"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "vec_map"
++version = "0.8.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "version_check"
++version = "0.1.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "void"
++version = "1.0.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "vswhom"
++version = "0.1.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
++ "vswhom-sys 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "vswhom-sys"
++version = "0.1.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "cc 1.0.45 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "wasi"
++version = "0.7.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "winapi"
++version = "0.3.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "winapi-i686-pc-windows-gnu"
++version = "0.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "winapi-x86_64-pc-windows-gnu"
++version = "0.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "winreg"
++version = "0.5.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[metadata]
++"checksum adler32 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7e522997b529f05601e05166c07ed17789691f562762c7f3b987263d2dedee5c"
++"checksum aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "58fb5e95d83b38284460a5fda7d6470aa0b8844d283a0b614b8535e880800d2d"
++"checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
++"checksum antidote 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "34fde25430d87a9388dadbe6e34d7f72a462c8b43ac8d309b42b0a8505d7e2a5"
++"checksum atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "1803c647a3ec87095e7ae7acfca019e98de5ec9a7d01343f611cf3152ed71a90"
++"checksum autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "b671c8fb71b457dd4ae18c4ba1e59aa81793daacc361d82fcd410cef0d491875"
++"checksum base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e"
++"checksum base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643"
++"checksum bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3d155346769a6855b86399e9bc3814ab343cd3d62c7e985113d46a0ec3c281fd"
++"checksum brotli-sys 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4445dea95f4c2b41cde57cc9fee236ae4dbae88d8fcbdb4750fc1bb5d86aaecd"
++"checksum brotli2 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0cb036c3eade309815c15ddbacec5b22c4d1f3983a774ab2eac2e3e9ea85568e"
++"checksum byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5"
++"checksum bzip2 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "42b7c3cbf0fa9c1b82308d57191728ca0256cb821220f4e2fd410a72ade26e3b"
++"checksum bzip2-sys 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "6584aa36f5ad4c9247f5323b0a42f37802b37a836f0ad87084d7a33961abe25f"
++"checksum c2-chacha 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7d64d04786e0f528460fc884753cf8dddcc466be308f6026f8e355c41a0e4101"
++"checksum cc 1.0.45 (registry+https://github.com/rust-lang/crates.io-index)" = "4fc9a35e1f4290eb9e5fc54ba6cf40671ed2a2514c3eeb2b2a908dda2ea5a1be"
++"checksum cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33"
++"checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9"
++"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
++"checksum core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "25b9e03f145fd4f2bf705e07b900cd41fc636598fe5dc452fd0db1441c3f496d"
++"checksum core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b"
++"checksum crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1"
++"checksum ctrlc 3.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c7dfd2d8b4c82121dfdff120f818e09fc4380b0b7e17a742081a89b94853e87f"
++"checksum dtoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "ea57b42383d091c85abcc2706240b94ab2a8fa1fc81c10ff23c4de06e2a90b5e"
++"checksum embed-resource 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e1419cfb011b3f11cbe865738cc2a36cc574437de4e3f2a1a57f118b230aa4f3"
++"checksum flate2 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)" = "2adaffba6388640136149e18ed080b77a78611c1e1d6de75aedcdf78df5d4682"
++"checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
++"checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
++"checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
++"checksum gcc 0.3.55 (registry+https://github.com/rust-lang/crates.io-index)" = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2"
++"checksum getrandom 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "473a1265acc8ff1e808cd0a1af8cee3c2ee5200916058a2ca113c29f2d903571"
++"checksum httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9"
++"checksum hyper 0.10.16 (registry+https://github.com/rust-lang/crates.io-index)" = "0a0652d9a2609a968c14be1a9ea00bf4b1d64e2e1f53a1b51b6fff3a6e829273"
++"checksum hyper-native-tls 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6d375598f442742b0e66208ee12501391f1c7ac0bafb90b4fe53018f81f06068"
++"checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e"
++"checksum iron 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c6d308ca2d884650a8bf9ed2ff4cb13fbb2207b71f64cda11dc9b892067295e8"
++"checksum itoa 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8324a32baf01e2ae060e9de58ed0bc2320c9a2833491ee36cd3b4c414de4db8c"
++"checksum language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a"
++"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
++"checksum lazysort 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d0e22ff43b231e0e2f87d74984e53ebc73b90ae13397e041214fb07efc64168f"
++"checksum libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)" = "34fcd2c08d2f832f376f4173a231990fa5aef4e99fb569867318a227ef4c06ba"
++"checksum log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b"
++"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7"
++"checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08"
++"checksum md6 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "54e5826684849cecd3fa05a6a5052c50a3542f163a9917ff0b91379426a2e45d"
++"checksum memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "88579771288728879b57485cc7d6b07d648c9f0141eb955f8ab7f9d45394468e"
++"checksum mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ba626b8a6de5da682e1caa06bdb42a335aee5a84db8e5046a3e8ab17ba0a3ae0"
++"checksum mime_guess 1.8.7 (registry+https://github.com/rust-lang/crates.io-index)" = "0d977de9ee851a0b16e932979515c0f3da82403183879811bc97d50bd9cc50f7"
++"checksum miniz-sys 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "1e9e3ae51cea1576ceba0dde3d484d30e6e5b86dee0b2d412fe3a16a15c98202"
++"checksum miniz_oxide 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7108aff85b876d06f22503dcce091e29f76733b2bfdd91eebce81f5e68203a10"
++"checksum modifier 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "41f5c9112cb662acd3b204077e0de5bc66305fa8df65c8019d5adb10e9ab6e58"
++"checksum native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4b2df1a4c22fd44a62147fd8f13dd0f95c9d8ca7b2610299b2a2f9cf8964274e"
++"checksum nix 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6c722bee1037d430d0f8e687bbdbf222f27cc6e4e68d5caf630857bb2b6dbdce"
++"checksum num-traits 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)" = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31"
++"checksum num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "6ba9a427cfca2be13aa6f6403b0b7e7368fe982bfa16fccc450ce74c46cd9b32"
++"checksum num_cpus 1.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "bcef43580c035376c0705c42792c294b66974abbfd2789b511784023f71f3273"
++"checksum openssl 0.10.24 (registry+https://github.com/rust-lang/crates.io-index)" = "8152bb5a9b5b721538462336e3bef9a539f892715e5037fda0f984577311af15"
++"checksum openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de"
++"checksum openssl-sys 0.9.49 (registry+https://github.com/rust-lang/crates.io-index)" = "f4fad9e54bd23bd4cbbe48fdc08a1b8091707ac869ef8508edea2fec77dcc884"
++"checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831"
++"checksum percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
++"checksum phf 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "b3da44b85f8e8dfaec21adae67f95d93244b2ecf6ad2a692320598dcc8e6dd18"
++"checksum phf_codegen 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "b03e85129e324ad4166b06b2c7491ae27fe3ec353af72e72cd1654c7225d517e"
++"checksum phf_generator 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "09364cc93c159b8b06b1f4dd8a4398984503483891b0c26b867cf431fb132662"
++"checksum phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "234f71a15de2288bcb7e3b6515828d22af7ec8598ee6d24c3b526fa0a80b67a0"
++"checksum pkg-config 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)" = "72d5370d90f49f70bd033c3d75e87fc529fbfff9d6f7cccef07d6170079d91ea"
++"checksum plugin 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "1a6a0dc3910bc8db877ffed8e457763b317cf880df4ae19109b9f77d277cf6e0"
++"checksum ppv-lite86 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e3cbf9f658cdb5000fcf6f362b8ea2ba154b9f146a61c7a20d647034c6b6561b"
++"checksum quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a"
++"checksum rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca"
++"checksum rand 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "59cea0d944b32347a1863e95942fd6ebdb486afb4f038119494f2860380c1d51"
++"checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef"
++"checksum rand_chacha 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "03a2a90da8c7523f554344f921aa97283eadf6ac484a6d2a7d0212fa7f8d6853"
++"checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
++"checksum rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
++"checksum rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
++"checksum rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4"
++"checksum rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
++"checksum rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08"
++"checksum rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b"
++"checksum rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071"
++"checksum rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44"
++"checksum rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c"
++"checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
++"checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84"
++"checksum regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dc220bd33bdce8f093101afe22a037b8eb0e5af33592e6a9caafff0d4cb81cbd"
++"checksum regex-syntax 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)" = "11a7e20d1cce64ef2fed88b66d347f88bd9babb82845b2b858f3edbf59a4f716"
++"checksum remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e"
++"checksum rfsapi 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1b6fbc119d00459f80252adb96e554766d75de071ed5d3c49f46a000d137cd49"
++"checksum safemem 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d2b08423011dae9a5ca23f07cf57dac3857f5c885d352b76f6d95f4aea9434d0"
++"checksum schannel 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)" = "f2f6abf258d99c3c1c5c2131d99d064e94b7b3dd5f416483057f308fea253339"
++"checksum security-framework 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "eee63d0f4a9ec776eeb30e220f0bc1e092c3ad744b2a379e3993070364d3adc2"
++"checksum security-framework-sys 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9636f8989cbf61385ae4824b98c1aaa54c994d7d8b41f11c601ed799f0549a56"
++"checksum serde 0.9.15 (registry+https://github.com/rust-lang/crates.io-index)" = "34b623917345a631dc9608d5194cc206b3fe6c3554cd1c75b937e55e285254af"
++"checksum serde_codegen_internals 0.14.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bc888bd283bd2420b16ad0d860e35ad8acb21941180a83a189bb2046f9d00400"
++"checksum serde_derive 0.9.15 (registry+https://github.com/rust-lang/crates.io-index)" = "978fd866f4d4872084a81ccc35e275158351d3b9fe620074e7d7504b816b74ba"
++"checksum serde_json 0.9.10 (registry+https://github.com/rust-lang/crates.io-index)" = "ad8bcf487be7d2e15d3d543f04312de991d631cfe1b43ea0ade69e6a8a5b16a1"
++"checksum siphasher 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0b8de496cf83d4ed58b6be86c3a275b8602f6ffe98d3024a869e124147a9a3ac"
++"checksum smallvec 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)" = "ab606a9c5e214920bb66c458cd7be8ef094f813f20fe77a54cc7dbfff220d4b7"
++"checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
++"checksum syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad"
++"checksum synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6"
++"checksum tabwriter 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9128e3a9149e51494cad59712a286e149fcb74e443d2298d69bd6eaa42cc4ebb"
++"checksum tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9"
++"checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
++"checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b"
++"checksum time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f"
++"checksum traitobject 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "efd1f82c56340fdf16f2a953d7bda4f8fdffba13d93b00844c25572110b26079"
++"checksum trivial_colours 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7153365ea16c5a0ce2eebc4da1b33339a6b21d90c49f670e82130639656bb458"
++"checksum typeable 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1410f6f91f21d1612654e7cc69193b0334f909dcf2c790c4826254fbb86f8887"
++"checksum typemap 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "653be63c80a3296da5551e1bfd2cca35227e13cdd08c6668903ae2f4f77aa1f6"
++"checksum unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33"
++"checksum unicase 2.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2e2e6bd1e59e56598518beb94fd6db628ded570326f0a98c679a304bd9f00150"
++"checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5"
++"checksum unicode-normalization 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "141339a08b982d942be2ca06ff8b076563cbe223d1befd5450716790d44e2426"
++"checksum unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7007dbd421b92cc6e28410fe7362e2e0a2503394908f417b68ec8d1c364c4e20"
++"checksum unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc"
++"checksum unsafe-any 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f30360d7979f5e9c6e6cea48af192ea8fab4afb3cf72597154b8f08935bc9c7f"
++"checksum url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a"
++"checksum vcpkg 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "33dd455d0f96e90a75803cfeb7f948768c08d70a6de9a8d2362461935698bf95"
++"checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a"
++"checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd"
++"checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
++"checksum vswhom 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b"
++"checksum vswhom-sys 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc2f5402d3d0e79a069714f7b48e3ecc60be7775a2c049cb839457457a239532"
++"checksum wasi 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b89c3ce4ce14bdc6fb6beaf9ec7928ca331de5df7e5ea278375642a2f478570d"
++"checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6"
++"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
++"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
++"checksum winreg 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a27a759395c1195c4cc5cda607ef6f8f6498f64e78f7900f5de0a127a424704a"
diff --git a/nixpkgs/pkgs/tools/networking/httplz/default.nix b/nixpkgs/pkgs/tools/networking/httplz/default.nix
new file mode 100644
index 000000000000..6c84ac8da709
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/httplz/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, lib, fetchFromGitHub, makeWrapper, rustPlatform
+, openssl, pkgconfig, darwin, libiconv }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "httplz";
+  version = "1.6.0";
+
+  src = fetchFromGitHub {
+    owner = "thecoshman";
+    repo = "http";
+    rev = "v${version}";
+    sha256 = "1y9mlbympb19i3iw7s7jm7lvkpcl4w0sig6jnd4w3ykhkdhzh6di";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [
+    openssl pkgconfig
+  ] ++ lib.optionals stdenv.isDarwin [
+    libiconv darwin.apple_sdk.frameworks.Security
+  ];
+
+  cargoBuildFlags = [ "--bin httplz" ];
+  cargoPatches = [ ./cargo-lock.patch ];
+  cargoSha256 = "1bxh7p2a04lpghqms8cx1f1cq5nbcx6cxh5ac7i72d5vzy4v07nl";
+
+  postInstall = ''
+    wrapProgram $out/bin/httplz \
+      --prefix PATH : "${openssl}/bin"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A basic http server for hosting a folder fast and simply";
+    homepage = "https://github.com/thecoshman/http";
+    license = licenses.mit;
+    maintainers = with maintainers; [ bbigras ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/httpstat/default.nix b/nixpkgs/pkgs/tools/networking/httpstat/default.nix
new file mode 100644
index 000000000000..b3700fb93389
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/httpstat/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchFromGitHub, curl, pythonPackages, glibcLocales }:
+
+pythonPackages.buildPythonApplication rec {
+    pname = "httpstat";
+    version = "1.2.1";
+    src = fetchFromGitHub {
+      owner = "reorx";
+      repo = pname;
+      rev = version;
+      sha256 = "1vriibcsq4j1hvm5yigbbmmv21dc40y5c9gvd31dg9qkaz26hml6";
+    };
+    doCheck = false; # No tests
+    buildInputs = [ glibcLocales ];
+    runtimeDeps = [ curl ];
+
+    LC_ALL = "en_US.UTF-8";
+
+    meta = {
+      description = "curl statistics made simple";
+      homepage = https://github.com/reorx/httpstat;
+      license = stdenv.lib.licenses.mit;
+      maintainers = with stdenv.lib.maintainers; [ nequissimus ];
+    };
+  }
diff --git a/nixpkgs/pkgs/tools/networking/httptunnel/default.nix b/nixpkgs/pkgs/tools/networking/httptunnel/default.nix
new file mode 100644
index 000000000000..df62f90ad0bb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/httptunnel/default.nix
@@ -0,0 +1,19 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  version = "3.3";
+  pname = "httptunnel";
+
+  src = fetchurl {
+    url    = "http://www.nocrew.org/software/httptunnel/${pname}-${version}.tar.gz";
+    sha256 = "0mn5s6p68n32xzadz6ds5i6bp44dyxzkq68r1yljlv470jr84bql";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Creates a bidirectional virtual data connection tunnelled in HTTP requests";
+    homepage    = http://www.nocrew.org/software/httptunnel;
+    license     = licenses.gpl2;
+    maintainers = with maintainers; [ koral ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/hue-cli/Gemfile b/nixpkgs/pkgs/tools/networking/hue-cli/Gemfile
new file mode 100644
index 000000000000..7049659d503d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/hue-cli/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'hue-cli'
diff --git a/nixpkgs/pkgs/tools/networking/hue-cli/Gemfile.lock b/nixpkgs/pkgs/tools/networking/hue-cli/Gemfile.lock
new file mode 100644
index 000000000000..8109cd96ac23
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/hue-cli/Gemfile.lock
@@ -0,0 +1,18 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    hue-cli (0.1.4)
+      hue-lib (>= 0.7.4)
+      json
+    hue-lib (0.7.4)
+      json
+    json (2.2.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  hue-cli
+
+BUNDLED WITH
+   1.17.2
diff --git a/nixpkgs/pkgs/tools/networking/hue-cli/default.nix b/nixpkgs/pkgs/tools/networking/hue-cli/default.nix
new file mode 100644
index 000000000000..b9b4a8eac9d2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/hue-cli/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "hue-cli";
+  gemdir = ./.;
+  exes = [ "hue" ];
+
+  passthru.updateScript = bundlerUpdateScript "hue-cli";
+
+  meta = with lib; {
+    description = "Command line interface for controlling Philips Hue system's lights and bridge";
+    homepage =  https://github.com/birkirb/hue-cli;
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ manveru nicknovitski ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/hue-cli/gemset.nix b/nixpkgs/pkgs/tools/networking/hue-cli/gemset.nix
new file mode 100644
index 000000000000..69d12f25a80e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/hue-cli/gemset.nix
@@ -0,0 +1,34 @@
+{
+  hue-cli = {
+    dependencies = ["hue-lib" "json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10gjf59pamfy2m17fs271d9ffrg1194b1m6vxzn6p7smzry52h9z";
+      type = "gem";
+    };
+    version = "0.1.4";
+  };
+  hue-lib = {
+    dependencies = ["json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pyl8g8gisdhl79gbzvnddqrsbq0lmflzg7n6yi6xrp5b5290shz";
+      type = "gem";
+    };
+    version = "0.7.4";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sx97bm9by389rbzv8r1f43h06xcz8vwi3h5jv074gvparql7lcx";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/networking/hyenae/default.nix b/nixpkgs/pkgs/tools/networking/hyenae/default.nix
new file mode 100644
index 000000000000..cbcaee4de784
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/hyenae/default.nix
@@ -0,0 +1,23 @@
+{stdenv, fetchurl, libdnet, pkgconfig, libpcap}:
+
+stdenv.mkDerivation {
+  name = "hyenae-0.36-1";
+
+  enableParallelBuilding = true;
+
+  src = fetchurl {
+    url = mirror://sourceforge/hyenae/0.36-1/hyenae-0.36-1.tar.gz;
+    sha256 = "1f3x4yn9a9p4f4wk4l8pv7hxfjc8q7cv20xzf7ky735sq1hj0xcg";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [libdnet libpcap];
+
+  meta = {
+    description = "";
+    homepage = https://sourceforge.net/projects/hyenae/;
+    license = stdenv.lib.licenses.gpl3;
+    maintainers = [stdenv.lib.maintainers.marcweber];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/i2p/default.nix b/nixpkgs/pkgs/tools/networking/i2p/default.nix
new file mode 100644
index 000000000000..681d5d0e7a97
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/i2p/default.nix
@@ -0,0 +1,82 @@
+{ stdenv, ps, coreutils, fetchurl, jdk, jre, ant, gettext, which }:
+
+let wrapper = stdenv.mkDerivation rec {
+  pname = "wrapper";
+  version = "3.5.35";
+
+  src = fetchurl {
+    url = "https://wrapper.tanukisoftware.com/download/${version}/wrapper_${version}_src.tar.gz";
+    sha256 = "0mjyw9ays9v6lnj21pmfd3qdvd9b6rwxfmw3pg6z0kyf2jadixw2";
+  };
+
+  buildInputs = [ jdk ];
+
+  buildPhase = ''
+    export ANT_HOME=${ant}
+    export JAVA_HOME=${jdk}/lib/openjdk/jre/
+    export JAVA_TOOL_OPTIONS=-Djava.home=$JAVA_HOME
+    export CLASSPATH=${jdk}/lib/openjdk/lib/tools.jar
+    sed 's/ testsuite$//' -i src/c/Makefile-linux-x86-64.make
+    ${if stdenv.isi686 then "./build32.sh" else "./build64.sh"}
+  '';
+
+  installPhase = ''
+    mkdir -p $out/{bin,lib}
+    cp bin/wrapper $out/bin/wrapper
+    cp lib/wrapper.jar $out/lib/wrapper.jar
+    cp lib/libwrapper.so $out/lib/libwrapper.so
+  '';
+};
+
+in
+
+stdenv.mkDerivation rec {
+  pname = "i2p";
+  version = "0.9.42";
+
+  src = fetchurl {
+    url = "https://download.i2p2.de/releases/${version}/i2psource_${version}.tar.bz2";
+    sha256 = "04y71hzkdpjzbac569rhyg1zfx37j0alggbl9gnkaqfbprb2nj1h";
+  };
+
+  buildInputs = [ jdk ant gettext which ];
+  patches = [ ./i2p.patch ];
+
+  buildPhase = ''
+    export JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF8"
+    ant preppkg-linux-only
+  '';
+
+  installPhase = ''
+    set -B
+    mkdir -p $out/{bin,share}
+    cp -r pkg-temp/* $out
+
+    cp ${wrapper}/bin/wrapper $out/i2psvc
+    cp ${wrapper}/lib/wrapper.jar $out/lib
+    cp ${wrapper}/lib/libwrapper.so $out/lib
+
+    sed -i $out/i2prouter -i $out/runplain.sh \
+      -e "s#uname#${coreutils}/bin/uname#" \
+      -e "s#which#${which}/bin/which#" \
+      -e "s#%gettext%#${gettext}/bin/gettext#" \
+      -e "s#/usr/ucb/ps#${ps}/bin/ps#" \
+      -e "s#/usr/bin/tr#${coreutils}/bin/tr#" \
+      -e "s#%INSTALL_PATH#$out#" \
+      -e 's#%USER_HOME#$HOME#' \
+      -e "s#%SYSTEM_java_io_tmpdir#/tmp#" \
+      -e "s#%JAVA%#${jre}/bin/java#"
+    mv $out/runplain.sh $out/bin/i2prouter-plain
+    mv $out/man $out/share/
+    chmod +x $out/bin/* $out/i2psvc
+    rm $out/{osid,postinstall.sh,INSTALL-headless.txt}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Applications and router for I2P, anonymity over the Internet";
+    homepage = "https://geti2p.net";
+    license = licenses.gpl2;
+    platforms = [ "x86_64-linux" "i686-linux" ];
+    maintainers = [ maintainers.joelmo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/i2p/i2p.patch b/nixpkgs/pkgs/tools/networking/i2p/i2p.patch
new file mode 100644
index 000000000000..74031eb7aef7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/i2p/i2p.patch
@@ -0,0 +1,43 @@
+diff --git a/installer/resources/i2prouter b/installer/resources/i2prouter
+index 365737d89..2ea14db3e 100644
+--- a/installer/resources/i2prouter
++++ b/installer/resources/i2prouter
+@@ -49,7 +49,7 @@ APP_LONG_NAME="I2P Service"
+ 
+ # gettext - we look for it in the path
+ # fallback to echo is below, we can't set it to echo here.
+-GETTEXT=$(which gettext > /dev/null 2>&1)
++GETTEXT=%gettext%
+ 
+ # Where to install the systemd service
+ SYSTEMD_SERVICE="/etc/systemd/system/${APP_NAME}.service"
+diff --git a/installer/resources/runplain.sh b/installer/resources/runplain.sh
+index eb4995dfe..0186cede3 100644
+--- a/installer/resources/runplain.sh
++++ b/installer/resources/runplain.sh
+@@ -25,7 +25,7 @@ CP=
+ 
+ # Try using the Java binary that I2P was installed with.
+ # If it's not found, try looking in the system PATH.
+-JAVA=$(which %JAVA_HOME/bin/java || which java)
++JAVA=%JAVA%
+ 
+ if [ -z $JAVA ] || [ ! -x $JAVA ]; then
+     echo "Error: Cannot find java." >&2
+@@ -44,15 +44,4 @@ if [ $(uname -s) = "Darwin" ]; then
+     export JAVA_TOOL_OPTIONS="-Djava.awt.headless=true"
+ fi
+ JAVAOPTS="${MAXMEMOPT} -Djava.net.preferIPv4Stack=${PREFERv4} -Djava.library.path=${I2P}:${I2P}/lib -Di2p.dir.base=${I2P} -DloggerFilenameOverride=logs/log-router-@.txt"
+-(
+-    nohup ${JAVA} -cp \"${CP}\" ${JAVAOPTS} net.i2p.router.RouterLaunch > /dev/null 2>&1
+-) &
+-PID=$!
+-
+-if [ ! -z $PID ] && kill -0 $PID > /dev/null 2>&1 ; then
+-    echo "I2P started [$PID]" >&2
+-    echo $PID > "${I2PTEMP}/router.pid"
+-else
+-    echo "I2P failed to start." >&2
+-    exit 1
+-fi
++exec ${JAVA} -cp \"${CP}\" ${JAVAOPTS} net.i2p.router.RouterLaunch
diff --git a/nixpkgs/pkgs/tools/networking/i2pd/default.nix b/nixpkgs/pkgs/tools/networking/i2pd/default.nix
new file mode 100644
index 000000000000..971d8e696864
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/i2pd/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchFromGitHub
+, boost, zlib, openssl
+, upnpSupport ? true, miniupnpc ? null
+, aesniSupport ? false
+, avxSupport ? false
+}:
+
+assert upnpSupport -> miniupnpc != null;
+
+stdenv.mkDerivation rec {
+  pname = "i2pd";
+  version = "2.29.0";
+
+  src = fetchFromGitHub {
+    owner = "PurpleI2P";
+    repo = pname;
+    rev = version;
+    sha256 = "1issg3aidwikk4g12sa8q81zzp0hd0g8wdy2dx4899z8yrscl300";
+  };
+
+  buildInputs = with stdenv.lib; [ boost zlib openssl ]
+    ++ optional upnpSupport miniupnpc;
+  makeFlags =
+    let ynf = a: b: a + "=" + (if b then "yes" else "no"); in
+    [ (ynf "USE_AESNI" aesniSupport)
+      (ynf "USE_AVX"   avxSupport)
+      (ynf "USE_UPNP"  upnpSupport)
+    ];
+
+  installPhase = ''
+    install -D i2pd $out/bin/i2pd
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://i2pd.website;
+    description = "Minimal I2P router written in C++";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ edwtjo ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ifstat-legacy/default.nix b/nixpkgs/pkgs/tools/networking/ifstat-legacy/default.nix
new file mode 100644
index 000000000000..72aaaa1e1706
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ifstat-legacy/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, autoreconfHook, net-snmp }:
+
+stdenv.mkDerivation rec {
+  pname = "ifstat-legacy";
+  version = "1.1";
+
+  src = fetchurl {
+    url = "http://gael.roualland.free.fr/ifstat/ifstat-${version}.tar.gz";
+    sha256 = "01zmv6vk5kh5xmd563xws8a1qnxjb6b6kv59yzz9r3rrghxhd6c5";
+  };
+
+  buildInputs = [ net-snmp ];
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    mv $out/bin/ifstat $out/bin/ifstat-legacy
+    mv $out/share/man/man1/ifstat.1 $out/share/man/man1/ifstat-legacy.1
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Report network interfaces bandwith just like vmstat/iostat do for other system counters - legacy version";
+    homepage    = http://gael.roualland.free.fr/ifstat/;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms   = platforms.unix;
+    license     = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/iftop/default.nix b/nixpkgs/pkgs/tools/networking/iftop/default.nix
new file mode 100644
index 000000000000..bc6f657f3781
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/iftop/default.nix
@@ -0,0 +1,33 @@
+{stdenv, fetchurl, ncurses, libpcap, automake}:
+
+stdenv.mkDerivation {
+  name = "iftop-1.0pre4";
+
+  src = fetchurl {
+    url = http://ex-parrot.com/pdw/iftop/download/iftop-1.0pre4.tar.gz;
+    sha256 = "15sgkdyijb7vbxpxjavh5qm5nvyii3fqcg9mzvw7fx8s6zmfwczp";
+  };
+
+  # Explicitly link against libgcc_s, to work around the infamous
+  # "libgcc_s.so.1 must be installed for pthread_cancel to work".
+  LDFLAGS = stdenv.lib.optionalString stdenv.isLinux "-lgcc_s";
+
+  preConfigure = ''
+    cp ${automake}/share/automake*/config.{sub,guess} config
+  '';
+
+  buildInputs = [ncurses libpcap];
+
+  meta = with stdenv.lib; {
+    description = "Display bandwidth usage on a network interface";
+    longDescription = ''
+      iftop does for network usage what top(1) does for CPU usage. It listens
+      to network traffic on a named interface and displays a table of current
+      bandwidth usage by pairs of hosts.
+    '';
+    license = licenses.gpl2Plus;
+    homepage = http://ex-parrot.com/pdw/iftop/;
+    platforms = platforms.unix;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/imapproxy/default.nix b/nixpkgs/pkgs/tools/networking/imapproxy/default.nix
new file mode 100644
index 000000000000..984b0a2f87ea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/imapproxy/default.nix
@@ -0,0 +1,22 @@
+{stdenv, fetchurl, openssl, ncurses}:
+
+stdenv.mkDerivation {
+  name = "imapproxy-1.2.7";
+  src = fetchurl {
+    url = mirror://sourceforge/squirrelmail/squirrelmail-imap_proxy-1.2.7.tar.bz2;
+    sha256 = "0j5fq755sxiz338ia93jrkiy64crv30g37pir5pxfys57q7d92nx";
+  };
+
+  buildInputs = [ openssl ncurses ];
+
+  patchPhase = ''
+    sed -i -e 's/-o \(root\|bin\) -g \(sys\|bin\)//' Makefile.in
+  '';
+
+  meta = {
+    homepage = http://imapproxy.org/;
+    description = "It proxies IMAP transactions caching server connections";
+    license = stdenv.lib.licenses.gpl2Plus;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/imapsync/default.nix b/nixpkgs/pkgs/tools/networking/imapsync/default.nix
new file mode 100644
index 000000000000..c05928fa34b9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/imapsync/default.nix
@@ -0,0 +1,34 @@
+{stdenv, makeWrapper, fetchurl, perl, openssl, perlPackages }:
+
+stdenv.mkDerivation rec {
+  name = "imapsync-1.727";
+  src = fetchurl {
+    url = "https://releases.pagure.org/imapsync/${name}.tgz";
+    sha256 = "1axacjw2wyaphczfw3kfmi5cl83fyr8nb207nks40fxkbs8q5dlr";
+  };
+
+  patchPhase = ''
+    sed -i -e s@/usr@$out@ Makefile
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/imapsync --set PERL5LIB $PERL5LIB
+  '';
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = with perlPackages; [ perl openssl MailIMAPClient TermReadKey
+    IOSocketSSL DigestHMAC URI FileCopyRecursive IOTee UnicodeString
+    DataUniqid JSONWebToken TestMockGuard LWP CryptOpenSSLRSA
+    LWPProtocolHttps Readonly TestPod TestMockObject ParseRecDescent
+    IOSocketInet6 NTLM
+  ];
+
+  meta = with stdenv.lib; {
+    homepage = http://www.linux-france.org/prj/imapsync/;
+    description = "Mail folder synchronizer between IMAP servers";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/inadyn/default.nix b/nixpkgs/pkgs/tools/networking/inadyn/default.nix
new file mode 100644
index 000000000000..20169121cd9a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/inadyn/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig
+, gnutls, libite, libconfuse }:
+
+stdenv.mkDerivation rec {
+  pname = "inadyn";
+  version = "2.5";
+
+  src = fetchFromGitHub {
+    owner = "troglobit";
+    repo = "inadyn";
+    rev = "v${version}";
+    sha256 = "0izhynqfj4xafsrc653wym8arwps0qim203w8l0g5z9vzfxfnvqw";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+
+  buildInputs = [ gnutls libite libconfuse ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    homepage = http://troglobit.com/project/inadyn/;
+    description = "Free dynamic DNS client";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/inetutils/default.nix b/nixpkgs/pkgs/tools/networking/inetutils/default.nix
new file mode 100644
index 000000000000..612e3ec0f835
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/inetutils/default.nix
@@ -0,0 +1,60 @@
+{ stdenv, lib, fetchurl, ncurses, perl, help2man }:
+
+stdenv.mkDerivation rec {
+  name = "inetutils-1.9.4";
+
+  src = fetchurl {
+    url = "mirror://gnu/inetutils/${name}.tar.gz";
+    sha256 = "05n65k4ixl85dc6rxc51b1b732gnmm8xnqi424dy9f1nz7ppb3xy";
+  };
+
+  patches = [
+    ./whois-Update-Canadian-TLD-server.patch
+    ./service-name.patch
+    # https://git.congatec.com/yocto/meta-openembedded/commit/3402bfac6b595c622e4590a8ff5eaaa854e2a2a3
+    ./inetutils-1_9-PATH_PROCNET_DEV.patch
+  ];
+
+  nativeBuildInputs = [ help2man perl /* for `whois' */ ];
+  buildInputs = [ ncurses /* for `talk' */ ];
+
+  # Don't use help2man if cross-compiling
+  # https://lists.gnu.org/archive/html/bug-sed/2017-01/msg00001.html
+  # https://git.congatec.com/yocto/meta-openembedded/blob/3402bfac6b595c622e4590a8ff5eaaa854e2a2a3/meta-networking/recipes-connectivity/inetutils/inetutils_1.9.1.bb#L44
+  preConfigure = let
+    isCross = stdenv.hostPlatform != stdenv.buildPlatform;
+  in lib.optionalString isCross ''
+    export HELP2MAN=true
+  '';
+
+  configureFlags = [ "--with-ncurses-include-dir=${ncurses.dev}/include" ]
+  ++ lib.optionals stdenv.hostPlatform.isMusl [ # Musl doesn't define rcmd
+    "--disable-rcp"
+    "--disable-rsh"
+    "--disable-rlogin"
+    "--disable-rexec"
+  ] ++ lib.optional stdenv.isDarwin  "--disable-servers";
+
+  # Test fails with "UNIX socket name too long", probably because our
+  # $TMPDIR is too long.
+  doCheck = false;
+
+  installFlags = [ "SUIDMODE=" ];
+
+  meta = with lib; {
+    description = "Collection of common network programs";
+
+    longDescription =
+      '' The GNU network utilities suite provides the
+         following tools: ftp(d), hostname, ifconfig, inetd, logger, ping, rcp,
+         rexec(d), rlogin(d), rsh(d), syslogd, talk(d), telnet(d), tftp(d),
+         traceroute, uucpd, and whois.
+      '';
+
+    homepage = https://www.gnu.org/software/inetutils/;
+    license = licenses.gpl3Plus;
+
+    maintainers = with maintainers; [ matthewbauer ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/inetutils/inetutils-1_9-PATH_PROCNET_DEV.patch b/nixpkgs/pkgs/tools/networking/inetutils/inetutils-1_9-PATH_PROCNET_DEV.patch
new file mode 100644
index 000000000000..2592989a90a3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/inetutils/inetutils-1_9-PATH_PROCNET_DEV.patch
@@ -0,0 +1,26 @@
+inetutils: define PATH_PROCNET_DEV if not already defined
+
+this prevents the following compilation error :
+system/linux.c:401:15: error: 'PATH_PROCNET_DEV' undeclared (first use in this function)
+
+this patch comes from :
+ http://repository.timesys.com/buildsources/i/inetutils/inetutils-1.9/
+
+Upstream-Status: Inappropriate [not author]
+
+Signed-of-by: Eric Bénard <eric@eukrea.com>
+---
+diff -Naur inetutils-1.9.orig/ifconfig/system/linux.c inetutils-1.9/ifconfig/system/linux.c
+--- inetutils-1.9.orig/ifconfig/system/linux.c	2012-01-04 16:31:36.000000000 -0500
++++ inetutils-1.9/ifconfig/system/linux.c	2012-01-04 16:40:53.000000000 -0500
+@@ -49,6 +49,10 @@
+ #include "../ifconfig.h"
+ 
+ 
++#ifndef PATH_PROCNET_DEV
++  #define PATH_PROCNET_DEV "/proc/net/dev"
++#endif
++
+ /* ARPHRD stuff.  */
+ 
+ static void
diff --git a/nixpkgs/pkgs/tools/networking/inetutils/service-name.patch b/nixpkgs/pkgs/tools/networking/inetutils/service-name.patch
new file mode 100644
index 000000000000..e34516313c57
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/inetutils/service-name.patch
@@ -0,0 +1,11 @@
+--- inetutils-1.9.4.org/whois/whois.c	2015-03-31 17:40:50.000000000 +0200
++++ inetutils-1.9.4/whois/whois.c	2017-04-20 10:23:38.487358708 +0200
+@@ -576,7 +576,7 @@
+   hints.ai_family = AF_UNSPEC;
+   hints.ai_socktype = SOCK_STREAM;
+ 
+-  if ((i = getaddrinfo (server, port ? port : "whois", &hints, &res)) != 0)
++  if ((i = getaddrinfo (server, port ? port : "nicname", &hints, &res)) != 0)
+     err_quit ("getaddrinfo: %s", gai_strerror (i));
+ 
+   for (ressave = res; res; res = res->ai_next)
diff --git a/nixpkgs/pkgs/tools/networking/inetutils/whois-Update-Canadian-TLD-server.patch b/nixpkgs/pkgs/tools/networking/inetutils/whois-Update-Canadian-TLD-server.patch
new file mode 100644
index 000000000000..d63d4e29daf0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/inetutils/whois-Update-Canadian-TLD-server.patch
@@ -0,0 +1,27 @@
+From 73e2811a0512556fd5359acc4387f46c79a9884a Mon Sep 17 00:00:00 2001
+From: Mats Erik Andersson <gnu@gisladisker.se>
+Date: Thu, 2 Mar 2017 15:38:38 +0100
+Subject: [PATCH] whois: Update Canadian TLD server.
+Content-Type: text/plain; charset=utf-8
+
+---
+ ChangeLog           | 8 ++++++++ (OMITTED)
+ whois/tld_serv_list | 2 +-
+ 2 files changed, 9 insertions(+), 1 deletion(-)
+
+diff --git a/whois/tld_serv_list b/whois/tld_serv_list
+index 056efcf..91697b8 100644
+--- a/whois/tld_serv_list
++++ b/whois/tld_serv_list
+@@ -81,7 +81,7 @@
+ #.bw			# NIC? www.botsnet.bw
+ #.by	NONE		# NIC? http://unibel.by www.open.by
+ .bz	NONE		# http://www.psg.com/dns/bz/
+-.ca	whois.cdnnet.ca
++.ca	whois.cira.ca
+ .cc	whois.nic.cc
+ .cd	WEB http://www.nic.cd/database/cd/
+ #.cf	NONE		# NIC? http://www.socatel.intnet.cf
+-- 
+2.10.0
+
diff --git a/nixpkgs/pkgs/tools/networking/iodine/default.nix b/nixpkgs/pkgs/tools/networking/iodine/default.nix
new file mode 100644
index 000000000000..44bf52c9933f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/iodine/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl, zlib, nettools }:
+
+stdenv.mkDerivation rec {
+  name = "iodine-0.7.0";
+
+  src = fetchurl {
+    url = "https://code.kryo.se/iodine/${name}.tar.gz";
+    sha256 = "0gh17kcxxi37k65zm4gqsvbk3aw7yphcs3c02pn1c4s2y6n40axd";
+  };
+
+  buildInputs = [ zlib ];
+
+  patchPhase = ''sed -i "s,/sbin/route,${nettools}/bin/route," src/tun.c'';
+
+  NIX_CFLAGS_COMPILE = "-DIFCONFIGPATH=\"${nettools}/bin/\"";
+
+  installFlags = [ "prefix=\${out}" ];
+
+  meta = {
+    homepage = http://code.kryo.se/iodine/;
+    description = "Tool to tunnel IPv4 data through a DNS server";
+    license = stdenv.lib.licenses.isc;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/iouyap/default.nix b/nixpkgs/pkgs/tools/networking/iouyap/default.nix
new file mode 100644
index 000000000000..b49b34d6dc7a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/iouyap/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub, bison, flex }:
+
+stdenv.mkDerivation rec {
+  pname = "iouyap";
+  version = "0.97";
+
+  src = fetchFromGitHub {
+    owner = "GNS3";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "028s9kx67b9x7gwzg0fhc6546diw4n0x4kk1xhl3v7hbsz3wdh6s";
+  };
+
+  buildInputs = [ bison flex ];
+
+  installPhase = ''
+    install -D -m555 iouyap $out/bin/iouyap;
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Bridge IOU to UDP, TAP and Ethernet";
+    inherit (src.meta) homepage;
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ primeos ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ip2location/default.nix b/nixpkgs/pkgs/tools/networking/ip2location/default.nix
new file mode 100644
index 000000000000..c3304c385e7b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ip2location/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "ip2location";
+  version = "7.0.0";
+
+  src = fetchurl {
+    sha256 = "05zbc02z7vm19byafi05i1rnkxc6yrfkhnm30ly68zzyipkmzx1l";
+    url = "https://www.ip2location.com/downloads/ip2location-${version}.tar.gz";
+  };
+
+  enableParallelBuilding = true;
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    description = "Look up locations of host names and IP addresses";
+    longDescription = ''
+      A command-line tool to find the country, region, city,coordinates,
+      zip code, time zone, ISP, domain name, connection type, area code,
+      weather, MCC, MNC, mobile brand name, elevation and usage type of
+      any IP address or host name in the IP2Location databases.
+    '';
+    homepage = https://www.ip2location.com/free/applications;
+    license = with licenses; [ gpl3Plus lgpl3Plus ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ip2unix/default.nix b/nixpkgs/pkgs/tools/networking/ip2unix/default.nix
new file mode 100644
index 000000000000..d2dbd235e11c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ip2unix/default.nix
@@ -0,0 +1,46 @@
+{ stdenv, fetchFromGitHub, meson, ninja, pkgconfig, libyamlcpp, systemd
+, python3Packages, asciidoc, libxslt, docbook_xml_dtd_45, docbook_xsl
+, libxml2, docbook5
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ip2unix";
+  version = "2.1.1";
+
+  src = fetchFromGitHub {
+    owner = "nixcloud";
+    repo = "ip2unix";
+    rev = "v${version}";
+    sha256 = "121ygj50i7ja9bv76y51qsjbjmmydhpi0sd3xb6pysmlzv0bxn17";
+  };
+
+  nativeBuildInputs = [
+    meson ninja pkgconfig asciidoc libxslt.bin docbook_xml_dtd_45 docbook_xsl
+    libxml2.bin docbook5 python3Packages.pytest python3Packages.pytest-timeout
+    systemd
+  ];
+
+  buildInputs = [ libyamlcpp ];
+
+  doCheck = true;
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    found=0
+    for man in "$out/share/man/man1"/ip2unix.1*; do
+      test -s "$man" && found=1
+    done
+    if [ $found -ne 1 ]; then
+      echo "ERROR: Manual page hasn't been generated." >&2
+      exit 1
+    fi
+  '';
+
+  meta = {
+    homepage = https://github.com/nixcloud/ip2unix;
+    description = "Turn IP sockets into Unix domain sockets";
+    platforms = stdenv.lib.platforms.linux;
+    license = stdenv.lib.licenses.lgpl3;
+    maintainers = [ stdenv.lib.maintainers.aszlig ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ipcalc/default.nix b/nixpkgs/pkgs/tools/networking/ipcalc/default.nix
new file mode 100644
index 000000000000..2727175f0412
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ipcalc/default.nix
@@ -0,0 +1,20 @@
+{stdenv, fetchurl, perl}:
+stdenv.mkDerivation rec {
+  pname = "ipcalc";
+  version = "0.41";
+  src = fetchurl {
+    url = "http://jodies.de/ipcalc-archive/${pname}-${version}.tar.gz";
+    sha256 = "dda9c571ce3369e5b6b06e92790434b54bec1f2b03f1c9df054c0988aa4e2e8a";
+  };
+  buildInputs = [perl];
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ipcalc $out/bin
+  '';
+  meta = {
+    description = "Simple IP network calculator";
+    homepage = http://jodies.de/ipcalc;
+    license = stdenv.lib.licenses.gpl2Plus;
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/iperf/2.nix b/nixpkgs/pkgs/tools/networking/iperf/2.nix
new file mode 100644
index 000000000000..6494b907a3a9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/iperf/2.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "iperf-2.0.13";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/iperf2/files/${name}.tar.gz";
+    sha256 = "1bbq6xr0vrd88zssfiadvw3awyn236yv94fsdl9q2sh9cv4xx2n8";
+  };
+
+  hardeningDisable = [ "format" ];
+  configureFlags = [ "--enable-fastsampling" ];
+
+  postInstall = ''
+    mv $out/bin/iperf $out/bin/iperf2
+    ln -s $out/bin/iperf2 $out/bin/iperf
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://sourceforge.net/projects/iperf/;
+    description = "Tool to measure IP bandwidth using UDP or TCP";
+    platforms = platforms.unix;
+    license = licenses.mit;
+
+    # prioritize iperf3
+    priority = 10;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/iperf/3.nix b/nixpkgs/pkgs/tools/networking/iperf/3.nix
new file mode 100644
index 000000000000..bea61b082ec0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/iperf/3.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchurl, openssl, fetchpatch }:
+
+stdenv.mkDerivation rec {
+  name = "iperf-3.7";
+
+  src = fetchurl {
+    url = "https://downloads.es.net/pub/iperf/${name}.tar.gz";
+    sha256 = "033is7b5grfbiil98jxlz4ixp9shm44x6hy8flpsyz1i4h108inq";
+  };
+
+  buildInputs = [ openssl ];
+  configureFlags = [
+    "--with-openssl=${openssl.dev}"
+  ];
+
+  outputs = [ "out" "man" ];
+
+  patches = stdenv.lib.optionals stdenv.hostPlatform.isMusl [
+    (fetchpatch {
+      url = "https://git.alpinelinux.org/aports/plain/main/iperf3/remove-pg-flags.patch?id=7f979fc51ae31d5c695d8481ba84a4afc5080efb";
+      name = "remove-pg-flags.patch";
+      sha256 = "0z3zsmf7ln08rg1mmzl8s8jm5gp8x62f5cxiqcmi8dcs2nsxwgbi";
+    })
+  ];
+
+  postInstall = ''
+    ln -s $out/bin/iperf3 $out/bin/iperf
+    ln -s $man/share/man/man1/iperf3.1 $man/share/man/man1/iperf.1
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://software.es.net/iperf/;
+    description = "Tool to measure IP bandwidth using UDP or TCP";
+    platforms = platforms.unix;
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ipgrep/default.nix b/nixpkgs/pkgs/tools/networking/ipgrep/default.nix
new file mode 100644
index 000000000000..6ea930fccaab
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ipgrep/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromGitHub, pythonPackages }:
+
+pythonPackages.buildPythonApplication rec {
+  version = "1.0";
+  pname = "ipgrep";
+
+  src = fetchFromGitHub {
+    owner = "jedisct1";
+    repo = pname;
+    rev = version;
+    sha256 = "1qaxvbqdalvz05aplhhrg7s4h7yx4clbfd50k46bgavhgcqqv8n3";
+  };
+
+  patchPhase = ''
+    mkdir -p ${pname} 
+    substituteInPlace setup.py \
+      --replace "'scripts': []" "'scripts': { '${pname}.py' }"
+  '';
+
+  propagatedBuildInputs = with pythonPackages; [
+    pycares
+    urllib3
+    requests
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Extract, defang, resolve names and IPs from text";
+    longDescription = ''
+      ipgrep extracts possibly obfuscated host names and IP addresses
+      from text, resolves host names, and prints them, sorted by ASN.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ leenaars ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ipv6calc/default.nix b/nixpkgs/pkgs/tools/networking/ipv6calc/default.nix
new file mode 100644
index 000000000000..35aeb23a9a83
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ipv6calc/default.nix
@@ -0,0 +1,53 @@
+{ stdenv, fetchurl, getopt, ip2location-c, openssl, perl
+, libmaxminddb ? null, geolite-legacy ? null }:
+
+stdenv.mkDerivation rec {
+  pname = "ipv6calc";
+  version = "2.2.0";
+
+  src = fetchurl {
+    urls = [
+      "https://www.deepspace6.net/ftp/pub/ds6/sources/ipv6calc/${pname}-${version}.tar.gz"
+      "ftp://ftp.deepspace6.net/pub/ds6/sources/ipv6calc/${pname}-${version}.tar.gz"
+      "ftp://ftp.bieringer.de/pub/linux/IPv6/ipv6calc/${pname}-${version}.tar.gz"
+    ];
+    sha256 = "18acy0sy3n6jcjjwpxskysinw06czyayx1q4rqc7zc3ic4pkad8r";
+  };
+
+  buildInputs = [ libmaxminddb geolite-legacy getopt ip2location-c openssl perl ];
+
+  postPatch = ''
+    patchShebangs *.sh */*.sh
+    for i in {,databases/}lib/Makefile.in; do
+      substituteInPlace $i --replace "/sbin/ldconfig" "ldconfig"
+    done
+  '';
+
+  configureFlags = [
+    "--prefix=${placeholder "out"}"
+    "--libdir=${placeholder "out"}/lib"
+    "--disable-bundled-getopt"
+    "--disable-bundled-md5"
+    "--disable-dynamic-load"
+    "--enable-shared"
+  ] ++ stdenv.lib.optional (libmaxminddb != null) "--enable-mmdb"
+    ++ stdenv.lib.optional (geolite-legacy != null) "--with-geoip-db=${geolite-legacy}/share/GeoIP"
+    ++ stdenv.lib.optional (ip2location-c != null) "--enable-ip2location";
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "Calculate/manipulate (not only) IPv6 addresses";
+    longDescription = ''
+      ipv6calc is a small utility to manipulate (not only) IPv6 addresses and
+      is able to do other tricky things. Intentions were convering a given
+      IPv6 address into compressed format, convering a given IPv6 address into
+      the same format like shown in /proc/net/if_inet6 and (because it was not
+      difficult) migrating the Perl program ip6_int into.
+      Now only one utiltity is needed to do a lot.
+    '';
+    homepage = "http://www.deepspace6.net/projects/ipv6calc.html";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/isync/default.nix b/nixpkgs/pkgs/tools/networking/isync/default.nix
new file mode 100644
index 000000000000..e62d819e1ec0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/isync/default.nix
@@ -0,0 +1,22 @@
+{ fetchurl, stdenv, openssl, pkgconfig, db, zlib, cyrus_sasl, perl }:
+
+stdenv.mkDerivation rec {
+  name = "isync-1.3.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/isync/${name}.tar.gz";
+    sha256 = "1sphd30jplii58y2zmw365bckm6pszmapcy905zhjll1sm1ldjv8";
+  };
+
+  nativeBuildInputs = [ pkgconfig perl ];
+  buildInputs = [ openssl db cyrus_sasl zlib ];
+
+  meta = with stdenv.lib; {
+    homepage = http://isync.sourceforge.net/;
+    description = "Free IMAP and MailDir mailbox synchronizer";
+    license = licenses.gpl2Plus;
+
+    maintainers = with maintainers; [ the-kenny ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/jnettop/default.nix b/nixpkgs/pkgs/tools/networking/jnettop/default.nix
new file mode 100644
index 000000000000..083ec23af569
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/jnettop/default.nix
@@ -0,0 +1,37 @@
+{ fetchurl, fetchpatch, stdenv, autoconf, libpcap, ncurses, pkgconfig, glib }:
+
+stdenv.mkDerivation {
+  name = "jnettop-0.13.0";
+
+  src = fetchurl {
+    url = "http://jnettop.kubs.info/dist/jnettop-0.13.0.tar.gz";
+    sha256 = "1855np7c4b0bqzhf1l1dyzxb90fpnvrirdisajhci5am6als31z9";
+  };
+
+  nativeBuildInputs = [ pkgconfig autoconf ];
+  buildInputs = [ libpcap ncurses glib ];
+
+  patches = [
+    ./no-dns-resolution.patch
+    (fetchpatch {
+      url = "https://sources.debian.net/data/main/j/jnettop/0.13.0-1/debian/patches/0001-Use-64-bit-integers-for-byte-totals-support-bigger-u.patch";
+      sha256 = "1b0alc12sj8pzcb66f8xslbqlbsvq28kz34v6jfhbb1q25hyr7jg";
+    })
+  ];
+
+  preConfigure = '' autoconf '';
+
+  meta = {
+    description = "Network traffic visualizer";
+
+    longDescription = ''
+      Jnettop is a traffic visualiser, which captures traffic going
+      through the host it is running from and displays streams sorted
+      by bandwidth they use.
+    '';
+
+    homepage = http://jnettop.kubs.info/;
+    license = stdenv.lib.licenses.gpl2Plus;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/jnettop/no-dns-resolution.patch b/nixpkgs/pkgs/tools/networking/jnettop/no-dns-resolution.patch
new file mode 100644
index 000000000000..65928a373009
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/jnettop/no-dns-resolution.patch
@@ -0,0 +1,13 @@
+When built in a chroot, `configure' fails to resolve `localhost'.
+Furthermore that test appears to be useless.
+
+--- jnettop-0.13.0/configure.ac	2006-04-29 15:34:09.000000000 +0200
++++ jnettop-0.13.0/configure.ac	2008-12-03 15:11:28.000000000 +0100
+@@ -63,7 +63,6 @@ AC_NETTOP_CHECK_IN6_ADDR
+ 
+ LDFLAGS="$LDFLAGS $NSL_LIBS $SOCKET_LIBS"
+ 
+-AC_NETTOP_CHECK_WORKING_RESOLVER
+ AC_NETTOP_CHECK_GETHOSTBYADDR_R
+ 
+ AM_PATH_GLIB_2_0(2.0.1,, AC_MSG_ERROR("glib >= 2.0.1 library required"), gthread)
diff --git a/nixpkgs/pkgs/tools/networking/junkie/default.nix b/nixpkgs/pkgs/tools/networking/junkie/default.nix
new file mode 100644
index 000000000000..29fe71c9365a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/junkie/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromGitHub, pkgconfig, libpcap, guile, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "junkie";
+  version = "2.8.0";
+
+  src = fetchFromGitHub {
+    owner = "rixed";
+    repo = "junkie";
+    rev = "v${version}";
+    sha256 = "0kfdjgch667gfb3qpiadd2dj3fxc7r19nr620gffb1ahca02wq31";
+  };
+  buildInputs = [ libpcap guile openssl ];
+  nativeBuildInputs = [ pkgconfig ];
+  configureFlags = [
+    "GUILELIBDIR=\${out}/share/guile/site"
+    "GUILECACHEDIR=\${out}/lib/guile/ccache"
+  ];
+
+  meta = {
+    description = "Deep packet inspection swiss-army knife";
+    homepage = "https://github.com/rixed/junkie";
+    license = stdenv.lib.licenses.agpl3Plus;
+    maintainers = [ stdenv.lib.maintainers.rixed ];
+    platforms = stdenv.lib.platforms.unix;
+    longDescription = ''
+      Junkie is a network sniffer like Tcpdump or Wireshark, but designed to
+      be easy to program and extend.
+
+      It comes with several command line tools to demonstrate this:
+      - a packet dumper;
+      - a nettop tool;
+      - a tool listing TLS certificates...
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/jwhois/connect.patch b/nixpkgs/pkgs/tools/networking/jwhois/connect.patch
new file mode 100644
index 000000000000..c26025a82392
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/jwhois/connect.patch
@@ -0,0 +1,60 @@
+https://bugzilla.redhat.com/attachment.cgi?id=265091
+
+This fixes somewhat reversed logic of trying to connect to WHOIS server.
+Tue Nov 20 2007, Lubomir Kundrak <lkundrak@redhat.com>
+
+--- jwhois-4.0/src/utils.c.connect	2007-06-26 09:00:20.000000000 +0200
++++ jwhois-4.0/src/utils.c	2007-11-20 17:05:33.000000000 +0100
+@@ -247,7 +247,7 @@ make_connect(const char *host, int port)
+     {
+       return -1;
+     }
+-  while (res)
++  for (; res; res = res->ai_next)
+     {
+       sa = res->ai_addr;
+       sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
+@@ -266,15 +266,15 @@ make_connect(const char *host, int port)
+       flags = fcntl(sockfd, F_GETFL, 0);
+       if (fcntl(sockfd, F_SETFL, flags|O_NONBLOCK) == -1)
+ 	{
++	  close (sockfd);
+ 	  return -1;
+ 	}
+ 
+-
+       error = connect(sockfd, res->ai_addr, res->ai_addrlen);
+-
+       if (error < 0 && errno != EINPROGRESS)
+ 	{
+-	  break;
++	  close (sockfd);
++	  continue;
+ 	}
+ 
+       FD_ZERO(&fdset);
+@@ -283,18 +283,20 @@ make_connect(const char *host, int port)
+       error = select(FD_SETSIZE, NULL, &fdset, NULL, &timeout);
+       if (error == 0)
+ 	{
+-	  break;
++	  close (sockfd);
++	  return -1;
+ 	}
+ 
+       retlen = sizeof(retval);
+       error = getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &retval, &retlen);
+       if (error < 0 || retval)
+ 	{
+-	  break;
++	  close (sockfd);
++	  return -1;
+ 	}
+-      res = res->ai_next;
++
++      break;
+     }
+-  if (error < 0 || retval) return -1;
+ #endif
+ 
+   return sockfd;
diff --git a/nixpkgs/pkgs/tools/networking/jwhois/default.nix b/nixpkgs/pkgs/tools/networking/jwhois/default.nix
new file mode 100644
index 000000000000..e9f43da981c5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/jwhois/default.nix
@@ -0,0 +1,26 @@
+{stdenv, lynx, fetchurl}:
+
+stdenv.mkDerivation {
+  name = "jwhois-4.0";
+
+  src = fetchurl {
+    url = mirror://gnu/jwhois/jwhois-4.0.tar.gz;
+    sha256 = "0knn7iaj5v0n6jpmldyv2yk4bcy9dn3kywmv63bwc5drh9kvi6zs";
+  };
+
+  postInstall = ''
+    ln -s jwhois $out/bin/whois
+    sed -i -e "s|/usr/bin/lynx|${lynx}/bin/lynx|g" $out/etc/jwhois.conf
+  '';
+
+  patches = [ ./connect.patch ./service-name.patch ];
+
+  makeFlags = [ "AR=${stdenv.cc.bintools.targetPrefix}ar" ];
+
+  meta = {
+    description = "A client for the WHOIS protocol allowing you to query the owner of a domain name";
+    homepage = https://www.gnu.org/software/jwhois/;
+    license = stdenv.lib.licenses.gpl3;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/jwhois/service-name.patch b/nixpkgs/pkgs/tools/networking/jwhois/service-name.patch
new file mode 100644
index 000000000000..170eddbad794
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/jwhois/service-name.patch
@@ -0,0 +1,17 @@
+--- a/src/dns.c   2007-06-25 23:58:38.000000000 -0700
++++ b/src/dns.c   2016-06-04 16:20:19.644865127 -0700
+@@ -113,12 +113,13 @@
+ lookup_host_addrinfo(struct addrinfo **res, const char *host, int port)
+ {
+   struct addrinfo hints;
+-  char ascport[10] = "whois";
++  char ascport[10] = "nicname";
+   int error;
+
+   memset(&hints, 0, sizeof(hints));
+   hints.ai_family = PF_UNSPEC;
+
++  hints.ai_flags = AI_ADDRCONFIG;
+   hints.ai_socktype = SOCK_STREAM;
+   if (port)
+     sprintf(ascport, "%9.9d", port);
diff --git a/nixpkgs/pkgs/tools/networking/kail/default.nix b/nixpkgs/pkgs/tools/networking/kail/default.nix
new file mode 100644
index 000000000000..931cfa3a74d9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/kail/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "kail";
+  version = "0.8.0";
+
+  goPackagePath = "github.com/boz/kail";
+
+  src = fetchFromGitHub {
+    owner = "boz";
+    repo = "kail";
+    rev = "v${version}";
+    sha256 = "0ibk7j40pj6f2086qcnwp998wld61d2gvrv7yiy6hlkalhww2pq7";
+  };
+
+  # regenerate deps.nix using following steps:
+  #
+  # go get -u github.com/boz/kail
+  # cd $GOPATH/src/github.com/boz/kail
+  # git checkout <version>
+  # dep init
+  # dep2nix
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    description = "Kubernetes log viewer";
+    homepage = https://github.com/boz/kail;
+    license = licenses.mit;
+    maintainers = with maintainers; [ offline vdemeester ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/kail/deps.nix b/nixpkgs/pkgs/tools/networking/kail/deps.nix
new file mode 100644
index 000000000000..ee5d2fb8271f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/kail/deps.nix
@@ -0,0 +1,408 @@
+# file generated from Gopkg.lock using dep2nix (https://github.com/nixcloud/dep2nix)
+[
+  {
+    goPackagePath  = "cloud.google.com/go";
+    fetch = {
+      type = "git";
+      url = "https://code.googlesource.com/gocloud";
+      rev =  "06f11fffc537c4aef126d9fd3a92e2d7968f118f";
+      sha256 = "1zhr1pyzk44zb95r2bcs4kkngvmzdr5bac55315nnzl3adx4y4dn";
+    };
+  }
+  {
+    goPackagePath  = "github.com/Azure/go-autorest";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Azure/go-autorest";
+      rev =  "1ff28809256a84bb6966640ff3d0371af82ccba4";
+      sha256 = "0sxvj2j1833bqwxvhq3wq3jgq73rnb81pnzvl0x3y1m0hzpaf2zv";
+    };
+  }
+  {
+    goPackagePath  = "github.com/alecthomas/template";
+    fetch = {
+      type = "git";
+      url = "https://github.com/alecthomas/template";
+      rev =  "a0175ee3bccc567396460bf5acd36800cb10c49c";
+      sha256 = "0qjgvvh26vk1cyfq9fadyhfgdj36f1iapbmr5xp6zqipldz8ffxj";
+    };
+  }
+  {
+    goPackagePath  = "github.com/alecthomas/units";
+    fetch = {
+      type = "git";
+      url = "https://github.com/alecthomas/units";
+      rev =  "2efee857e7cfd4f3d0138cc3cbb1b4966962b93a";
+      sha256 = "1j65b91qb9sbrml9cpabfrcf07wmgzzghrl7809hjjhrmbzri5bl";
+    };
+  }
+  {
+    goPackagePath  = "github.com/boz/go-lifecycle";
+    fetch = {
+      type = "git";
+      url = "https://github.com/boz/go-lifecycle";
+      rev =  "c39961a5a0ce6b046f15d62bcbed79701666a9e0";
+      sha256 = "12xzjzgi0pspb28xrcmp4v33jij2bbg609z1kpq1pql9mxs6h31k";
+    };
+  }
+  {
+    goPackagePath  = "github.com/boz/go-logutil";
+    fetch = {
+      type = "git";
+      url = "https://github.com/boz/go-logutil";
+      rev =  "9d21a9e4757dbc497f947fe5253f9570c34562fa";
+      sha256 = "0rhhyvvz1lvjalv3hx4yvyh90jqfia27nzx9m54m0i7d0znrwpbj";
+    };
+  }
+  {
+    goPackagePath  = "github.com/boz/kcache";
+    fetch = {
+      type = "git";
+      url = "https://github.com/boz/kcache";
+      rev =  "a012826955254d3f31548911e75a9dbd817f9470";
+      sha256 = "0xqw4mgz0scjrcfsyfwfdhggq1q80dv4mdqgdaryy5ir18srg15l";
+    };
+  }
+  {
+    goPackagePath  = "github.com/davecgh/go-spew";
+    fetch = {
+      type = "git";
+      url = "https://github.com/davecgh/go-spew";
+      rev =  "adab96458c51a58dc1783b3335dcce5461522e75";
+      sha256 = "1y743w875aqqwggrh4lwlmqyx7ls5m1bnw5y4vr3zps4ib3gb4n5";
+    };
+  }
+  {
+    goPackagePath  = "github.com/dgrijalva/jwt-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dgrijalva/jwt-go";
+      rev =  "06ea1031745cb8b3dab3f6a236daf2b0aa468b7e";
+      sha256 = "08m27vlms74pfy5z79w67f9lk9zkx6a9jd68k3c4msxy75ry36mp";
+    };
+  }
+  {
+    goPackagePath  = "github.com/fatih/color";
+    fetch = {
+      type = "git";
+      url = "https://github.com/fatih/color";
+      rev =  "67c513e5729f918f5e69786686770c27141a4490";
+      sha256 = "045i2y2h1a6ml7fm1b3if4692320kjgg3cpxn7chlmpq7z1bmrrn";
+    };
+  }
+  {
+    goPackagePath  = "github.com/ghodss/yaml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ghodss/yaml";
+      rev =  "0ca9ea5df5451ffdf184b4428c902747c2c11cd7";
+      sha256 = "0skwmimpy7hlh7pva2slpcplnm912rp3igs98xnqmn859kwa5v8g";
+    };
+  }
+  {
+    goPackagePath  = "github.com/gogo/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gogo/protobuf";
+      rev =  "1c2b16bc280d6635de6c52fc1471ab962dc36ec9";
+      sha256 = "0h9vkfy3ydz0d6x72853yg49r9k54cgjnlv6a7v12gzqw47p941i";
+    };
+  }
+  {
+    goPackagePath  = "github.com/golang/glog";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/glog";
+      rev =  "23def4e6c14b4da8ac2ed8007337bc5eb5007998";
+      sha256 = "0jb2834rw5sykfr937fxi8hxi2zy80sj2bdn9b3jb4b26ksqng30";
+    };
+  }
+  {
+    goPackagePath  = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev =  "1909bc2f63dc92bb931deace8b8312c4db72d12f";
+      sha256 = "0d4pknkgp5qlbfpw8xp81dqgrfm0na1pfi2ll559nwvjz5vc90g5";
+    };
+  }
+  {
+    goPackagePath  = "github.com/google/btree";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/btree";
+      rev =  "316fb6d3f031ae8f4d457c6c5186b9e3ded70435";
+      sha256 = "1fyj10cy2d37mpfk73hjfjwpsgpnmdzf2mrkkvzyx0d41sf46xfd";
+    };
+  }
+  {
+    goPackagePath  = "github.com/google/gofuzz";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/gofuzz";
+      rev =  "24818f796faf91cd76ec7bddd72458fbced7a6c1";
+      sha256 = "0cq90m2lgalrdfrwwyycrrmn785rgnxa3l3vp9yxkvnv88bymmlm";
+    };
+  }
+  {
+    goPackagePath  = "github.com/googleapis/gnostic";
+    fetch = {
+      type = "git";
+      url = "https://github.com/googleapis/gnostic";
+      rev =  "57b0290873708074edf87ad921eccec8bef5f8ec";
+      sha256 = "14raxxsx2bww4f0am0yygv64h950avkswm7bdvq6k4d4lry6dgg8";
+    };
+  }
+  {
+    goPackagePath  = "github.com/gophercloud/gophercloud";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gophercloud/gophercloud";
+      rev =  "b4c2377fa77951a0e08163f52dc9b3e206355194";
+      sha256 = "00j9ny59zlf3ajwydf2k41n3l92kl2hf0ljx9x73jcfkdkn2xv5k";
+    };
+  }
+  {
+    goPackagePath  = "github.com/gregjones/httpcache";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gregjones/httpcache";
+      rev =  "c1f8028e62adb3d518b823a2f8e6a95c38bdd3aa";
+      sha256 = "1v7fb4ix2xg0plx5p1f7xd1srvimyss7v7ppn3j7py9ycl560qhr";
+    };
+  }
+  {
+    goPackagePath  = "github.com/imdario/mergo";
+    fetch = {
+      type = "git";
+      url = "https://github.com/imdario/mergo";
+      rev =  "e3000cb3d28c72b837601cac94debd91032d19fe";
+      sha256 = "1bsz1aj0h266x7g08jj7f3nd3d5islbad0cygb5vh37hjgzirg4d";
+    };
+  }
+  {
+    goPackagePath  = "github.com/json-iterator/go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/json-iterator/go";
+      rev =  "ab8a2e0c74be9d3be70b3184d9acc634935ded82";
+      sha256 = "1x3wz44p1238gpyzkiiilvvrq9q8dwjdm9kdidq65yjq0zcn0sq4";
+    };
+  }
+  {
+    goPackagePath  = "github.com/mattn/go-colorable";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-colorable";
+      rev =  "6df6d4d004b64986bbb0d1b25945f42b44787e90";
+      sha256 = "0ha2biq708is9i3hqc30vihcpajak3qawn0rnacb9k1gyxsxwb60";
+    };
+  }
+  {
+    goPackagePath  = "github.com/mattn/go-isatty";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-isatty";
+      rev =  "fc9e8d8ef48496124e79ae0df75490096eccf6fe";
+      sha256 = "1r5f9gkavkb1w6sr0qs5kj16706xirl3qnlq3hqpszkw9w27x65a";
+    };
+  }
+  {
+    goPackagePath  = "github.com/modern-go/concurrent";
+    fetch = {
+      type = "git";
+      url = "https://github.com/modern-go/concurrent";
+      rev =  "bacd9c7ef1dd9b15be4a9909b8ac7a4e313eec94";
+      sha256 = "0s0fxccsyb8icjmiym5k7prcqx36hvgdwl588y0491gi18k5i4zs";
+    };
+  }
+  {
+    goPackagePath  = "github.com/modern-go/reflect2";
+    fetch = {
+      type = "git";
+      url = "https://github.com/modern-go/reflect2";
+      rev =  "94122c33edd36123c84d5368cfb2b69df93a0ec8";
+      sha256 = "06a3sablw53n1dqqbr2f53jyksbxdmmk8axaas4yvnhyfi55k4lf";
+    };
+  }
+  {
+    goPackagePath  = "github.com/petar/GoLLRB";
+    fetch = {
+      type = "git";
+      url = "https://github.com/petar/GoLLRB";
+      rev =  "53be0d36a84c2a886ca057d34b6aa4468df9ccb4";
+      sha256 = "01xp3lcamqkvl91jg6ly202gdsgf64j39rkrcqxi6v4pbrcv7hz0";
+    };
+  }
+  {
+    goPackagePath  = "github.com/peterbourgon/diskv";
+    fetch = {
+      type = "git";
+      url = "https://github.com/peterbourgon/diskv";
+      rev =  "5f041e8faa004a95c88a202771f4cc3e991971e6";
+      sha256 = "1mxpa5aad08x30qcbffzk80g9540wvbca4blc1r2qyzl65b8929b";
+    };
+  }
+  {
+    goPackagePath  = "github.com/pkg/errors";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pkg/errors";
+      rev =  "2b3a18b5f0fb6b4f9190549597d3f962c02bc5eb";
+      sha256 = "07fd392kqyaj7fnl4sgzy7fcs0sw4jx3mx2khhgk64n9j9i37l59";
+    };
+  }
+  {
+    goPackagePath  = "github.com/pmezard/go-difflib";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pmezard/go-difflib";
+      rev =  "792786c7400a136282c1664665ae0a8db921c6c2";
+      sha256 = "0c1cn55m4rypmscgf0rrb88pn58j3ysvc2d0432dp3c6fqg6cnzw";
+    };
+  }
+  {
+    goPackagePath  = "github.com/sirupsen/logrus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/sirupsen/logrus";
+      rev =  "181d419aa9e2223811b824e8f0b4af96f9ba9302";
+      sha256 = "08ff47w4clnkym3l0v4hhhfq21zvvwzpljvs0qvki5k0azv7siyc";
+    };
+  }
+  {
+    goPackagePath  = "github.com/spf13/pflag";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/pflag";
+      rev =  "e57e3eeb33f795204c1ca35f56c44f83227c6e66";
+      sha256 = "13mhx4i913jil32j295m3a36jzvq1y64xig0naadiz7q9ja011r2";
+    };
+  }
+  {
+    goPackagePath  = "github.com/stretchr/testify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/stretchr/testify";
+      rev =  "2aa2c176b9dab406a6970f6a55f513e8a8c8b18f";
+      sha256 = "1j92x4291flz3i4pk6bi3y59nnsi6lj34zmyfp7axf68fd8vm5ml";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev =  "b176d7def5d71bdd214203491f89843ed217f420";
+      sha256 = "1ayi4iagsxhf193rx93j6y2rb48730hgm2qbahiq9lawm5g3vc14";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev =  "1c05540f6879653db88113bc4a2b70aec4bd491f";
+      sha256 = "0h8yqb0vcqgllgydrf9d3rzp83w8wlr8f0nm6r1rwf2qg30pq1pd";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/oauth2";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/oauth2";
+      rev =  "9a379c6b3e95a790ffc43293c2a78dee0d7b6e20";
+      sha256 = "156wff8s9g3sxni2z80wky4v688pvdgfzxbpfp5rmqjvgqnifxkf";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev =  "2d3e384235de683634e9080b58f757466840aa48";
+      sha256 = "1w8zrcjv4sfi3skchdbvbixgwzp5n1g0vny8r20dlapnqbazah0x";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/text";
+      rev =  "b19bf474d317b857955b12035d2c5acb57ce8b01";
+      sha256 = "0wc8csaafp0ps9jb2hdk8d6xpyw1axhk1np73h0z17x09zk3ylcr";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/time";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/time";
+      rev =  "fbb02b2291d28baffd63558aa44b4b56f178d650";
+      sha256 = "0jjqcv6rzihlgg4i797q80g1f6ch5diz2kxqh6488gwkb6nds4h4";
+    };
+  }
+  {
+    goPackagePath  = "google.golang.org/appengine";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/appengine";
+      rev =  "d9a072cfa7b9736e44311ef77b3e09d804bfa599";
+      sha256 = "07x7s65q9pydpaniga6zf259kw7qs40q6554wb22inq423wcs0nb";
+    };
+  }
+  {
+    goPackagePath  = "gopkg.in/alecthomas/kingpin.v2";
+    fetch = {
+      type = "git";
+      url = "https://github.com/alecthomas/kingpin";
+      rev =  "1087e65c9441605df944fb12c33f0fe7072d18ca";
+      sha256 = "18llqzkdqf62qbqcv2fd3j0igl6cwwn4dissf5skkvxrcxjcmmj0";
+    };
+  }
+  {
+    goPackagePath  = "gopkg.in/inf.v0";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-inf/inf";
+      rev =  "3887ee99ecf07df5b447e9b00d9c0b2adaa9f3e4";
+      sha256 = "0rf3vwyb8aqnac9x9d6ax7z5526c45a16yjm2pvkijr6qgqz8b82";
+    };
+  }
+  {
+    goPackagePath  = "gopkg.in/yaml.v2";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-yaml/yaml";
+      rev =  "eb3733d160e74a9c7e442f435eb3bea458e1d19f";
+      sha256 = "1srhvcaa9db3a6xj29mkjr5kg33y71pclrlx4vcwz5m1lgb5c7q6";
+    };
+  }
+  {
+    goPackagePath  = "k8s.io/api";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes/api";
+      rev =  "2d6f90ab1293a1fb871cf149423ebb72aa7423aa";
+      sha256 = "1cwrwdm104xd3608b1a5mw6a19w45532p647xdwnyn62rw2f08jx";
+    };
+  }
+  {
+    goPackagePath  = "k8s.io/apimachinery";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes/apimachinery";
+      rev =  "103fd098999dc9c0c88536f5c9ad2e5da39373ae";
+      sha256 = "04navnpm59d75dhlz07rmay7m2izrf4m0i9xklxzqg7mlk9g20jc";
+    };
+  }
+  {
+    goPackagePath  = "k8s.io/client-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kubernetes/client-go";
+      rev =  "1f13a808da65775f22cbf47862c4e5898d8f4ca1";
+      sha256 = "1vkcjg80l49hxiadqmkkd031kj6kc10m8mwcnla3k1ml8fv4qna9";
+    };
+  }
+]
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/networking/kea/default.nix b/nixpkgs/pkgs/tools/networking/kea/default.nix
new file mode 100644
index 000000000000..3986cadd08a5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/kea/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, fetchurl, autoreconfHook, pkgconfig, openssl, botan2, log4cplus
+, boost, python3, postgresql, libmysqlclient, gmp, bzip2 }:
+
+stdenv.mkDerivation rec {
+  pname = "kea";
+  version = "1.5.0-P1";
+
+  src = fetchurl {
+    url = "https://ftp.isc.org/isc/${pname}/${version}/${pname}-${version}.tar.gz";
+    sha256 = "0bqxzp3f7cmraa5davj2az1hx1gbbchqzlz3ai26c802agzafyhz";
+  };
+
+  patches = [ ./dont-create-var.patch ];
+
+  postPatch = ''
+    substituteInPlace ./src/bin/keactrl/Makefile.am --replace '@sysconfdir@' "$out/etc"
+    substituteInPlace ./src/bin/keactrl/Makefile.am --replace '@(sysconfdir)@' "$out/etc"
+  '';
+
+  configureFlags = [
+    "--localstatedir=/var"
+    "--with-pgsql=${postgresql}/bin/pg_config"
+    "--with-mysql=${libmysqlclient}/bin/mysql_config"
+  ];
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  buildInputs = [
+    openssl log4cplus boost python3 libmysqlclient
+    botan2 gmp bzip2
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    homepage = https://kea.isc.org/;
+    description = "High-performance, extensible DHCP server by ISC";
+    longDescription = ''
+      KEA is a new open source DHCPv4/DHCPv6 server being developed by
+      Internet Systems Consortium. The objective of this project is to
+      provide a very high-performance, extensible DHCP server engine for
+      use by enterprises and service providers, either as is or with
+      extensions and modifications.
+    '';
+    license = licenses.mpl20;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/kea/dont-create-var.patch b/nixpkgs/pkgs/tools/networking/kea/dont-create-var.patch
new file mode 100644
index 000000000000..385113d160f6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/kea/dont-create-var.patch
@@ -0,0 +1,26 @@
+diff --git a/Makefile.am b/Makefile.am
+index 2c0733c..974bb5e 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -135,11 +135,6 @@ cppcheck:
+ 		--template '{file}:{line}: check_fail: {message} ({severity},{id})' \
+ 		src
+ 
+-# These steps are necessary during installation
+-install-exec-hook:
+-	mkdir -p $(DESTDIR)${localstatedir}/log/
+-	mkdir -p $(DESTDIR)${localstatedir}/run/${PACKAGE_NAME}
+-
+ EXTRA_DIST  = tools/path_replacer.sh
+ EXTRA_DIST += tools/mk_cfgrpt.sh
+ 
+diff --git a/src/lib/dhcpsrv/Makefile.am b/src/lib/dhcpsrv/Makefile.am
+index 564f623..7cea9f2 100644
+--- a/src/lib/dhcpsrv/Makefile.am
++++ b/src/lib/dhcpsrv/Makefile.am
+@@ -352,5 +352,3 @@ libkea_dhcpsrv_parsers_include_HEADERS = \
+ 	parsers/simple_parser6.h
+ 
+ 
+-install-data-local:
+-	$(mkinstalldirs) $(DESTDIR)$(dhcp_data_dir)
diff --git a/nixpkgs/pkgs/tools/networking/keepalived/default.nix b/nixpkgs/pkgs/tools/networking/keepalived/default.nix
new file mode 100644
index 000000000000..87748211425f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/keepalived/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchFromGitHub, nixosTests
+, libnfnetlink, libnl, net-snmp, openssl
+, pkgconfig, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "keepalived";
+  version = "2.0.19";
+
+  src = fetchFromGitHub {
+    owner = "acassen";
+    repo = "keepalived";
+    rev = "v${version}";
+    sha256 = "05jgr0f04z69x3zf3b9z04wczl15fnh69bs6j0yw55fij1k9nj4d";
+  };
+
+  buildInputs = [
+    libnfnetlink
+    libnl
+    net-snmp
+    openssl
+  ];
+
+  passthru.tests.keepalived = nixosTests.keepalived;
+
+  nativeBuildInputs = [ pkgconfig autoreconfHook ];
+
+  configureFlags = [
+    "--enable-sha1"
+    "--enable-snmp"
+ ];
+
+  meta = with stdenv.lib; {
+    homepage = https://keepalived.org;
+    description = "Routing software written in C";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/lftp/default.nix b/nixpkgs/pkgs/tools/networking/lftp/default.nix
new file mode 100644
index 000000000000..602ada1476a9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/lftp/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, gnutls, pkgconfig, readline, zlib, libidn2, gmp, libiconv, libunistring, gettext }:
+
+stdenv.mkDerivation rec {
+  pname = "lftp";
+  version = "4.9.1";
+
+  src = fetchurl {
+    urls = [
+      "https://lftp.tech/ftp/${pname}-${version}.tar.xz"
+      "https://ftp.st.ryukoku.ac.jp/pub/network/ftp/lftp/${pname}-${version}.tar.xz"
+      "https://lftp.yar.ru/ftp/${pname}-${version}.tar.xz"
+      ];
+    sha256 = "0jq2g8h1bx06ya9fsja748vwb2qrca4wsfrgi3fmaa8hznpgqsar";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+
+  buildInputs = [ gnutls readline zlib libidn2 gmp libiconv libunistring gettext ];
+
+  hardeningDisable = stdenv.lib.optional stdenv.isDarwin "format";
+
+  configureFlags = [
+    "--with-readline=${readline.dev}"
+    "--with-zlib=${zlib.dev}"
+    "--without-expat"
+  ];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "A file transfer program supporting a number of network protocols";
+    homepage = https://lftp.tech/;
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/libnids/default.nix b/nixpkgs/pkgs/tools/networking/libnids/default.nix
new file mode 100644
index 000000000000..ef753127c67e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/libnids/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchzip, libpcap, glib, pkgconfig, libnet }:
+stdenv.mkDerivation {
+  pname = "libnids";
+  version = "1.24";
+  src = fetchzip {
+    url = "mirror://sourceforge/libnids/libnids-1.24.tar.gz";
+    sha256 = "1cblklfdfxcmy0an6xyyzx4l877xdawhjd28daqfsvrh81mb07k1";
+  };
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libpcap glib libnet ];
+
+  /*
+  Quoting the documentation of glib: g_thread_init has been deprecated since
+  version 2.32 and should not be used in newly-written code.  This function is
+  no longer necessary. The GLib threading system is automatically initialized
+  at the start of your program.
+
+  this is necessary for dsniff to compile; otherwise g_thread_init is a missing
+  symbol when linking (?!?)
+  */
+  NIX_CFLAGS_COMPILE="-Dg_thread_init= ";
+
+  meta = with stdenv.lib; {
+    description = "An E-component of Network Intrusion Detection System which emulates the IP stack of Linux 2.0.x";
+    homepage = http://libnids.sourceforge.net/;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.symphorien ];
+    # probably also bsd and solaris
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/libreswan/default.nix b/nixpkgs/pkgs/tools/networking/libreswan/default.nix
new file mode 100644
index 000000000000..4c8b926b5827
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/libreswan/default.nix
@@ -0,0 +1,92 @@
+{ stdenv, fetchurl, makeWrapper,
+  pkgconfig, systemd, gmp, unbound, bison, flex, pam, libevent, libcap_ng, curl, nspr,
+  bash, iproute, iptables, procps, coreutils, gnused, gawk, nss, which, python,
+  docs ? false, xmlto, libselinux, ldns
+  }:
+
+let
+  optional = stdenv.lib.optional;
+  version = "3.29";
+  name = "libreswan-${version}";
+  binPath = stdenv.lib.makeBinPath [
+    bash iproute iptables procps coreutils gnused gawk nss.tools which python
+  ];
+in
+
+assert docs -> xmlto != null;
+assert stdenv.isLinux -> libselinux != null;
+
+stdenv.mkDerivation {
+  inherit name;
+  inherit version;
+
+  src = fetchurl {
+    url = "https://download.libreswan.org/${name}.tar.gz";
+    sha256 = "0gmbb1m5in5dvnbk1n31r8myrdankzvi6yk9gcqbcwijyih423nn";
+  };
+
+  # These flags were added to compile v3.18. Try to lift them when updating.
+  NIX_CFLAGS_COMPILE = toString [ "-Wno-error=redundant-decls" "-Wno-error=format-nonliteral"
+    # these flags were added to build with gcc7
+    "-Wno-error=implicit-fallthrough"
+    "-Wno-error=format-truncation"
+    "-Wno-error=pointer-compare"
+    "-Wno-error=stringop-truncation"
+  ];
+
+  nativeBuildInputs = [ makeWrapper pkgconfig ];
+  buildInputs = [ bash iproute iptables systemd coreutils gnused gawk gmp unbound bison flex pam libevent
+                  libcap_ng curl nspr nss python ldns ]
+                ++ optional docs xmlto
+                ++ optional stdenv.isLinux libselinux;
+
+  prePatch = ''
+    # Correct bash path
+    sed -i -e 's|/bin/bash|/usr/bin/env bash|' mk/config.mk
+
+    # Fix systemd unit directory, and prevent the makefile from trying to reload the
+    # systemd daemon or create tmpfiles
+    sed -i -e 's|UNITDIR=.*$|UNITDIR=$\{out}/etc/systemd/system/|g' \
+      -e 's|TMPFILESDIR=.*$|TMPFILESDIR=$\{out}/tmpfiles.d/|g' \
+      -e 's|systemctl|true|g' \
+      -e 's|systemd-tmpfiles|true|g' \
+      initsystems/systemd/Makefile
+
+    # Fix the ipsec program from crushing the PATH
+    sed -i -e 's|\(PATH=".*"\):.*$|\1:$PATH|' programs/ipsec/ipsec.in
+
+    # Fix python script to use the correct python
+    sed -i -e 's|#!/usr/bin/python|#!/usr/bin/env python|' -e 's/^\(\W*\)installstartcheck()/\1sscmd = "ss"\n\0/' programs/verify/verify.in
+  '';
+
+  # Set appropriate paths for build
+  preBuild = "export INC_USRLOCAL=\${out}";
+
+  makeFlags = [
+    "INITSYSTEM=systemd"
+    (if docs then "all" else "base")
+  ];
+
+  installTargets = [ (if docs then "install" else "install-base") ];
+  # Hack to make install work
+  installFlags = [
+    "FINALVARDIR=\${out}/var"
+    "FINALSYSCONFDIR=\${out}/etc"
+  ];
+
+  postInstall = ''
+    for i in $out/bin/* $out/libexec/ipsec/*; do
+      wrapProgram "$i" --prefix PATH ':' "$out/bin:${binPath}"
+    done
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    homepage = https://libreswan.org;
+    description = "A free software implementation of the VPN protocol based on IPSec and the Internet Key Exchange";
+    platforms = platforms.linux ++ platforms.darwin ++ platforms.freebsd;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.afranchuk ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/linkchecker/default.nix b/nixpkgs/pkgs/tools/networking/linkchecker/default.nix
new file mode 100644
index 000000000000..3c361fe48baf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/linkchecker/default.nix
@@ -0,0 +1,55 @@
+{ stdenv, lib, fetchFromGitHub, python2Packages, gettext }:
+
+python2Packages.buildPythonApplication rec {
+  pname = "linkchecker";
+  version = "9.4.0";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1vbwl2vb8dyzki27z3sl5yf9dhdd2cpkg10vbgaz868dhpqlshgs";
+  };
+
+  nativeBuildInputs = [ gettext ];
+
+  propagatedBuildInputs = with python2Packages; [
+    ConfigArgParse
+    argcomplete
+    dnspython
+    pyxdg
+    requests
+  ];
+
+  checkInputs = with python2Packages; [
+    parameterized
+    pytest
+  ];
+
+  postPatch = ''
+    sed -i 's/^requests.*$/requests>=2.2/' requirements.txt
+    sed -i "s/'request.*'/'requests >= 2.2'/" setup.py
+    sed -i 's~/usr/lib/python2.7/argparse.py~~g' po/Makefile
+  '';
+
+  checkPhase = ''
+    runHook preCheck
+
+    # the mime test fails for me...
+    rm tests/test_mimeutil.py
+    ${lib.optionalString stdenv.isDarwin ''
+      # network tests fails on darwin
+      rm tests/test_network.py
+    ''}
+    make test PYTESTOPTS="--tb=short" TESTS="tests/test_*.py tests/logger/test_*.py"
+
+    runHook postCheck
+  '';
+
+  meta = {
+    description = "Check websites for broken links";
+    homepage = https://linkcheck.github.io/linkchecker/;
+    license = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [ peterhoeg tweber ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/lldpd/default.nix b/nixpkgs/pkgs/tools/networking/lldpd/default.nix
new file mode 100644
index 000000000000..23dbb60767e7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/lldpd/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, lib, fetchurl, pkgconfig, removeReferencesTo
+, libevent, readline, net-snmp, openssl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "lldpd";
+  version = "1.0.4";
+
+  src = fetchurl {
+    url = "https://media.luffy.cx/files/lldpd/${pname}-${version}.tar.gz";
+    sha256 = "0kvj49y6slnldi9dha81nzxvpwd7d8kq1qlibn6h1wdb5w1vq6ak";
+  };
+
+  configureFlags = [
+    "--localstatedir=/var"
+    "--enable-pie"
+    "--with-snmp"
+    "--with-systemdsystemunitdir=\${out}/lib/systemd/system"
+  ];
+
+  nativeBuildInputs = [ pkgconfig removeReferencesTo ];
+  buildInputs = [ libevent readline net-snmp openssl ];
+
+  enableParallelBuilding = true;
+
+  outputs = [ "out" "dev" "man" "doc" ];
+
+  preFixup = ''
+    find $out -type f -exec remove-references-to -t ${stdenv.cc} '{}' +
+  '';
+
+  meta = with lib; {
+    description = "802.1ab implementation (LLDP) to help you locate neighbors of all your equipments";
+    homepage = https://vincentbernat.github.io/lldpd/;
+    license = licenses.isc;
+    maintainers = with maintainers; [ fpletz ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/logmein-hamachi/default.nix b/nixpkgs/pkgs/tools/networking/logmein-hamachi/default.nix
new file mode 100644
index 000000000000..e8a83d381317
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/logmein-hamachi/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, fetchurl }:
+
+with stdenv.lib;
+
+let
+  arch =
+    if stdenv.hostPlatform.system == "x86_64-linux" then "x64"
+    else if stdenv.hostPlatform.system == "i686-linux" then "x86"
+    else throwSystem;
+  throwSystem = throw "Unsupported system: ${stdenv.hostPlatform.system}";
+  sha256 =
+    if stdenv.hostPlatform.system == "x86_64-linux" then "0zy0jzvdqccfsg42m2lq1rj8r2c4iypd1h9vxl9824cbl92yim37"
+    else if stdenv.hostPlatform.system == "i686-linux" then "03ml9xv19km99f0z7fpr21b1zkxvw7q39kjzd8wpb2pds51wnc62"
+    else throwSystem;
+  libraries = stdenv.lib.makeLibraryPath [ stdenv.cc.cc ];
+
+in stdenv.mkDerivation rec {
+  pname = "logmein-hamachi";
+  version = "2.1.0.203";
+
+  src = fetchurl {
+    url = "https://www.vpn.net/installers/${pname}-${version}-${arch}.tgz";
+    inherit sha256;
+  };
+
+  installPhase = ''
+    patchelf \
+      --set-interpreter $(cat ${stdenv.cc}/nix-support/dynamic-linker) \
+      --set-rpath ${libraries} \
+      hamachid
+    install -D -m755 hamachid $out/bin/hamachid
+    ln -s $out/bin/hamachid $out/bin/hamachi
+  '';
+
+  dontStrip = true;
+  dontPatchELF = true;
+
+  meta = with stdenv.lib; {
+    description = "A hosted VPN service that lets you securely extend LAN-like networks to distributed teams";
+    homepage = https://secure.logmein.com/products/hamachi/;
+    license = licenses.unfreeRedistributable;
+    maintainers = with maintainers; [ abbradar ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/lsh/default.nix b/nixpkgs/pkgs/tools/networking/lsh/default.nix
new file mode 100644
index 000000000000..5d788af1682e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/lsh/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, fetchurl, gperf, guile, gmp, zlib, liboop, readline, gnum4, pam
+, nettools, lsof, procps }:
+
+stdenv.mkDerivation rec {
+  name = "lsh-2.0.4";
+  src = fetchurl {
+    url = "mirror://gnu/lsh/${name}.tar.gz";
+    sha256 = "614b9d63e13ad3e162c82b6405d1f67713fc622a8bc11337e72949d613713091";
+  };
+
+  patches = [ ./pam-service-name.patch ./lshd-no-root-login.patch ];
+
+  preConfigure = ''
+    # Patch `lsh-make-seed' so that it can gather enough entropy.
+    sed -i "src/lsh-make-seed.c" \
+        -e "s|/usr/sbin/arp|${nettools}/sbin/arp|g ;
+            s|/usr/bin/netstat|${nettools}/bin/netstat|g ;
+            s|/usr/local/bin/lsof|${lsof}/bin/lsof|g ;
+            s|/bin/vmstat|${procps}/bin/vmstat|g ;
+            s|/bin/ps|${procps}/bin/sp|g ;
+            s|/usr/bin/w|${procps}/bin/w|g ;
+            s|/usr/bin/df|$(type -P df)|g ;
+            s|/usr/bin/ipcs|$(type -P ipcs)|g ;
+            s|/usr/bin/uptime|$(type -P uptime)|g"
+
+    # Skip the `configure' script that checks whether /dev/ptmx & co. work as
+    # expected, because it relies on impurities (for instance, /dev/pts may
+    # be unavailable in chroots.)
+    export lsh_cv_sys_unix98_ptys=yes
+  '';
+
+  NIX_CFLAGS_COMPILE = "-std=gnu90";
+
+  buildInputs = [ gperf guile gmp zlib liboop readline gnum4 pam ];
+
+  meta = {
+    description = "GPL'd implementation of the SSH protocol";
+
+    longDescription = ''
+      lsh is a free implementation (in the GNU sense) of the ssh
+      version 2 protocol, currently being standardised by the IETF
+      SECSH working group.
+    '';
+
+    homepage = http://www.lysator.liu.se/~nisse/lsh/;
+    license = stdenv.lib.licenses.gpl2Plus;
+
+    maintainers = [ ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/lsh/lshd-no-root-login.patch b/nixpkgs/pkgs/tools/networking/lsh/lshd-no-root-login.patch
new file mode 100644
index 000000000000..9dd81de3fbc1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/lsh/lshd-no-root-login.patch
@@ -0,0 +1,16 @@
+Correctly handle the `--no-root-login' option.
+
+--- lsh-2.0.4/src/lshd.c	2006-05-01 13:47:44.000000000 +0200
++++ lsh-2.0.4/src/lshd.c	2009-09-08 12:20:36.000000000 +0200
+@@ -758,6 +758,10 @@ main_argp_parser(int key, char *arg, str
+       self->allow_root = 1;
+       break;
+ 
++    case OPT_NO_ROOT_LOGIN:
++      self->allow_root = 0;
++      break;
++
+     case OPT_KERBEROS_PASSWD:
+       self->pw_helper = PATH_KERBEROS_HELPER;
+       break;
+
diff --git a/nixpkgs/pkgs/tools/networking/lsh/pam-service-name.patch b/nixpkgs/pkgs/tools/networking/lsh/pam-service-name.patch
new file mode 100644
index 000000000000..6a6156855c51
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/lsh/pam-service-name.patch
@@ -0,0 +1,14 @@
+Tell `lsh-pam-checkpw', the PAM password helper program, to use a more
+descriptive service name.
+
+--- lsh-2.0.4/src/lsh-pam-checkpw.c	2003-02-16 22:30:10.000000000 +0100
++++ lsh-2.0.4/src/lsh-pam-checkpw.c	2008-11-28 16:16:58.000000000 +0100
+@@ -38,7 +38,7 @@
+ #include <security/pam_appl.h>
+ 
+ #define PWD_MAXLEN 1024
+-#define SERVICE_NAME "other"
++#define SERVICE_NAME "lshd"
+ #define TIMEOUT 600 
+ 
+ static int
diff --git a/nixpkgs/pkgs/tools/networking/maildrop/default.nix b/nixpkgs/pkgs/tools/networking/maildrop/default.nix
new file mode 100644
index 000000000000..44c8b9a9c4d5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/maildrop/default.nix
@@ -0,0 +1,24 @@
+{ fetchurl, stdenv, pkgconfig, pcre, perl }:
+
+stdenv.mkDerivation {
+  name = "maildrop-2.6.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/courier/maildrop/2.6.0/maildrop-2.6.0.tar.bz2";
+    sha256 = "1a94p2b41iy334cwfwmzi19557dn5j61abh0cp2rfc9dkc8ibhdg";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ pcre perl ];
+
+  patches = [ ./maildrop.configure.hack.patch ]; # for building in chroot
+
+  doCheck = false; # fails with "setlocale: LC_ALL: cannot change locale (en_US.UTF-8)"
+
+  meta = with stdenv.lib; {
+    homepage = http://www.courier-mta.org/maildrop/;
+    description = "Mail filter/mail delivery agent that is used by the Courier Mail Server";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/maildrop/maildrop.configure.hack.patch b/nixpkgs/pkgs/tools/networking/maildrop/maildrop.configure.hack.patch
new file mode 100644
index 000000000000..08988f6cde50
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/maildrop/maildrop.configure.hack.patch
@@ -0,0 +1,13 @@
+--- a/maildrop/configure	2012-09-06 01:52:13.000000000 +0100
++++ b/maildrop/configure	2013-01-04 03:00:57.095628327 +0000
+@@ -17562,8 +17562,8 @@
+ check_spooldir() {
+   if test "$CHECKED_SPOOLDIR" != 1
+   then
+-     get_spooldir
+-     MBOX_DIR="$SPOOLDIR"
++     MBOX_DIR="/var/spool/mail"
++     MBOX_RESET_GID=0
+      CHECKED_SPOOLDIR=1
+   fi
+ }
diff --git a/nixpkgs/pkgs/tools/networking/mailsend/default.nix b/nixpkgs/pkgs/tools/networking/mailsend/default.nix
new file mode 100644
index 000000000000..c888f354eae7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mailsend/default.nix
@@ -0,0 +1,41 @@
+{stdenv, fetchurl, openssl}:
+let
+  s = # Generated upstream information
+  rec {
+    baseName="mailsend";
+    version="1.19";
+    name="${baseName}-${version}";
+    hash="1xwk6jvl5li8ddlik1lj88qswnyminp9wlf5cm8gg3n54szgcpjn";
+    url="https://github.com/muquit/mailsend/archive/1.19.tar.gz";
+    sha256="1xwk6jvl5li8ddlik1lj88qswnyminp9wlf5cm8gg3n54szgcpjn";
+  };
+  buildInputs = [
+    openssl
+  ];
+in
+stdenv.mkDerivation {
+  inherit (s) name version;
+  inherit buildInputs;
+  src = fetchurl {
+    inherit (s) url sha256;
+  };
+  configureFlags = [
+    "--with-openssl=${openssl.dev}"
+  ];
+
+  patches = [
+    (fetchurl {
+      url = https://github.com/muquit/mailsend/commit/960df6d7a11eef90128dc2ae660866b27f0e4336.patch;
+      sha256 = "0vz373zcfl19inflybfjwshcq06rvhx0i5g0f4b021cxfhyb1sm0";
+    })
+  ];
+  meta = {
+    inherit (s) version;
+    description = ''CLI email sending tool'';
+    license = stdenv.lib.licenses.bsd3 ;
+    maintainers = [stdenv.lib.maintainers.raskin];
+    platforms = stdenv.lib.platforms.linux;
+    homepage = https://github.com/muquit/mailsend;
+    downloadPage = "https://github.com/muquit/mailsend/releases";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/mailsend/default.upstream b/nixpkgs/pkgs/tools/networking/mailsend/default.upstream
new file mode 100644
index 000000000000..3d9862a3de21
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mailsend/default.upstream
@@ -0,0 +1,3 @@
+url "https://github.com/muquit/mailsend/releases"
+ensure_choice
+version '.*/([0-9][0-9.a-z]*)[.]tar[.].*' '\1'
diff --git a/nixpkgs/pkgs/tools/networking/mailutils/default.nix b/nixpkgs/pkgs/tools/networking/mailutils/default.nix
new file mode 100644
index 000000000000..dcf377ca0c04
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mailutils/default.nix
@@ -0,0 +1,120 @@
+{ stdenv, fetchurl, fetchpatch, autoreconfHook, dejagnu, gettext, pkgconfig
+, gdbm, pam, readline, ncurses, gnutls, guile, texinfo, gnum4, sasl, fribidi, nettools
+, python3, gss, libmysqlclient, system-sendmail }:
+
+stdenv.mkDerivation rec {
+  name = "${project}-${version}";
+  project = "mailutils";
+  version = "3.8";
+
+  src = fetchurl {
+    url = "mirror://gnu/${project}/${name}.tar.xz";
+    sha256 = "1wkn9ch664477r4d8jk9153w5msljsbj99907k7zgzpmywbs6ba7";
+  };
+
+  postPatch = ''
+    sed -i -e '/chown root:mail/d' \
+           -e 's/chmod [24]755/chmod 0755/' \
+      */Makefile{.in,.am}
+    sed -i 's:/usr/lib/mysql:${libmysqlclient}/lib/mysql:' configure.ac
+    sed -i 's/0\.18/0.19/' configure.ac
+    sed -i -e 's:mysql/mysql.h:mysql.h:' \
+           -e 's:mysql/errmsg.h:errmsg.h:' \
+      sql/mysql.c
+  '';
+
+  nativeBuildInputs = [
+    autoreconfHook gettext pkgconfig
+  ];
+
+  buildInputs = [
+    gdbm pam readline ncurses gnutls guile texinfo gnum4 sasl fribidi nettools
+    gss libmysqlclient python3
+  ];
+
+  patches = [
+    ./fix-build-mb-len-max.patch
+    ./path-to-cat.patch
+  ];
+
+  enableParallelBuilding = false;
+  hardeningDisable = [ "format" ];
+
+  configureFlags = [
+    "--with-gssapi"
+    "--with-gsasl"
+    "--with-mysql"
+    "--with-path-sendmail=${system-sendmail}/bin/sendmail"
+  ];
+
+  readmsg-tests = let
+    p = "https://raw.githubusercontent.com/gentoo/gentoo/9c921e89d51876fd876f250324893fd90c019326/net-mail/mailutils/files";
+  in [
+    (fetchurl { url = "${p}/hdr.at"; sha256 = "0phpkqyhs26chn63wjns6ydx9468ng3ssbjbfhcvza8h78jlsd98"; })
+    (fetchurl { url = "${p}/nohdr.at"; sha256 = "1vkbkfkbqj6ml62s1am8i286hxwnpsmbhbnq0i2i0j1i7iwkk4b7"; })
+    (fetchurl { url = "${p}/twomsg.at"; sha256 = "15m29rg2xxa17xhx6jp4s2vwa9d4khw8092vpygqbwlhw68alk9g"; })
+    (fetchurl { url = "${p}/weed.at"; sha256 = "1101xakhc99f5gb9cs3mmydn43ayli7b270pzbvh7f9rbvh0d0nh"; })
+  ];
+
+  NIX_CFLAGS_COMPILE = "-L${libmysqlclient}/lib/mysql -I${libmysqlclient}/include/mysql";
+
+  checkInputs = [ dejagnu ];
+  doCheck = false; # fails 1 out of a bunch of tests, looks like a bug
+  doInstallCheck = false; # fails
+
+  preCheck = ''
+    # Add missing test files
+    cp ${builtins.toString readmsg-tests} readmsg/tests/
+    for f in hdr.at nohdr.at twomsg.at weed.at; do
+      mv readmsg/tests/*-$f readmsg/tests/$f
+    done
+    # Disable comsat tests that fail without tty in the sandbox.
+    tty -s || echo > comsat/tests/testsuite.at
+    # Disable lmtp tests that require root spool.
+    echo > maidag/tests/lmtp.at
+    # Disable mda tests that require /etc/passwd to contain root.
+    grep -qo '^root:' /etc/passwd || echo > maidag/tests/mda.at
+    # Provide libraries for mhn.
+    export LD_LIBRARY_PATH=$(pwd)/lib/.libs
+  '';
+
+  postCheck = ''
+    unset LD_LIBRARY_PATH
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Rich and powerful protocol-independent mail framework";
+
+    longDescription = ''
+      GNU Mailutils is a rich and powerful protocol-independent mail
+      framework.  It contains a series of useful mail libraries, clients, and
+      servers.  These are the primary mail utilities for the GNU system.  The
+      central library is capable of handling electronic mail in various
+      mailbox formats and protocols, both local and remote.  Specifically,
+      this project contains a POP3 server, an IMAP4 server, and a Sieve mail
+      filter.  It also provides a POSIX `mailx' client, and a collection of
+      other handy tools.
+
+      The GNU Mailutils libraries supply an ample set of primitives for
+      handling electronic mail in programs written in C, C++, Python or
+      Scheme.
+
+      The utilities provided by Mailutils include imap4d and pop3d mail
+      servers, mail reporting utility comsatd, general-purpose mail delivery
+      agent maidag, mail filtering program sieve, and an implementation of MH
+      message handling system.
+    '';
+
+    license = with licenses; [
+      lgpl3Plus /* libraries */
+      gpl3Plus /* tools */
+    ];
+
+    maintainers = with maintainers; [ orivej vrthra ];
+
+    homepage = https://www.gnu.org/software/mailutils/;
+
+    # Some of the dependencies fail to build on {cyg,dar}win.
+    platforms = platforms.gnu ++ platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/mailutils/fix-build-mb-len-max.patch b/nixpkgs/pkgs/tools/networking/mailutils/fix-build-mb-len-max.patch
new file mode 100644
index 000000000000..b28dfc5d99ca
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mailutils/fix-build-mb-len-max.patch
@@ -0,0 +1,14 @@
+diff --git a/frm/frm.h b/frm/frm.h
+index 178b87d54..7931faada 100644
+--- a/frm/frm.h
++++ b/frm/frm.h
+@@ -34,6 +34,9 @@
+ #ifdef HAVE_ICONV_H
+ # include <iconv.h>
+ #endif
++#ifdef HAVE_LIMITS_H
++# include <limits.h>
++#endif
+ #ifndef MB_LEN_MAX
+ # define MB_LEN_MAX 4
+ #endif
diff --git a/nixpkgs/pkgs/tools/networking/mailutils/path-to-cat.patch b/nixpkgs/pkgs/tools/networking/mailutils/path-to-cat.patch
new file mode 100644
index 000000000000..698ee08f340f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mailutils/path-to-cat.patch
@@ -0,0 +1,52 @@
+diff --git a/mh/show.c b/mh/show.c
+index a43afe10c..6985386ec 100644
+--- a/mh/show.c
++++ b/mh/show.c
+@@ -254,7 +254,7 @@ main (int argc, char **argv)
+   */
+ 
+   if (!use_showproc)
+-    showproc = "/bin/cat";
++    showproc = "cat";
+   else
+     showproc = mh_global_profile_get ("showproc", NULL);
+ 
+diff --git a/mh/tests/mhparam.at b/mh/tests/mhparam.at
+index 54b7fc06a..3abd5bf9b 100644
+--- a/mh/tests/mhparam.at
++++ b/mh/tests/mhparam.at
+@@ -28,7 +28,7 @@ mhparam -all | tr '\t' ' ' | sed 's/^Path:.*/Path: Mail/;s/^mhetcdir:.*/mhetcdir
+ [0],
+ [Path: Mail
+ mhetcdir: dir
+-moreproc: /bin/cat
++moreproc: cat
+ Sequence-Negation: not
+ Draft-Folder: Mail/drafts
+ Aliasfile: .mh_aliases
+diff --git a/mh/tests/testsuite.at b/mh/tests/testsuite.at
+index c6820843c..6675a4a9c 100644
+--- a/mh/tests/testsuite.at
++++ b/mh/tests/testsuite.at
+@@ -25,7 +25,7 @@ export MH
+ cat > $MH <<EOT
+ Path: $HOME/Mail
+ mhetcdir: $abs_top_srcdir/mh/etc
+-moreproc: /bin/cat
++moreproc: cat
+ EOT
+ MTSTAILOR=$HOME/mtstailor
+ export MTSTAILOR
+diff --git a/testsuite/lib/mailutils.exp b/testsuite/lib/mailutils.exp
+index d4691d922..c1b056933 100644
+--- a/testsuite/lib/mailutils.exp
++++ b/testsuite/lib/mailutils.exp
+@@ -728,7 +728,7 @@ proc mu_test_file {args} {
+         set pattern [lrange $args 1 end]
+     }
+     
+-    set res [remote_spawn host "/bin/cat $filename"]
++    set res [remote_spawn host "cat $filename"]
+     if { $res < 0 || $res == "" } {
+ 	perror "Reading $filename failed."
+ 	return 1;
diff --git a/nixpkgs/pkgs/tools/networking/maphosts/Gemfile b/nixpkgs/pkgs/tools/networking/maphosts/Gemfile
new file mode 100644
index 000000000000..cf3ea24c436f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/maphosts/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'maphosts'
diff --git a/nixpkgs/pkgs/tools/networking/maphosts/Gemfile.lock b/nixpkgs/pkgs/tools/networking/maphosts/Gemfile.lock
new file mode 100644
index 000000000000..c456210217e5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/maphosts/Gemfile.lock
@@ -0,0 +1,19 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    colorize (0.8.0)
+    hosts (0.1.1)
+      linebreak (~> 2.0.1)
+    linebreak (2.0.1)
+    maphosts (1.1.1)
+      colorize (~> 0.7)
+      hosts (~> 0.1)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  maphosts
+
+BUNDLED WITH
+   1.12.5
diff --git a/nixpkgs/pkgs/tools/networking/maphosts/default.nix b/nixpkgs/pkgs/tools/networking/maphosts/default.nix
new file mode 100644
index 000000000000..dd9886a65eee
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/maphosts/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, lib, bundlerEnv, ruby, bundlerUpdateScript }:
+
+let
+  env = bundlerEnv {
+    name = "maphosts-gems";
+    inherit ruby;
+    gemdir = ./.;
+  };
+in stdenv.mkDerivation {
+  name = "maphosts-${env.gems.maphosts.version}";
+
+  phases = ["installPhase"];
+
+  installPhase = ''
+    mkdir -p "$out/bin"
+    ln -s "${env}/bin/maphosts" "$out/bin/maphosts"
+  '';
+
+  passthru.updateScript = bundlerUpdateScript "maphosts";
+
+  meta = with lib; {
+    description = "Small command line application for keeping your project hostnames in sync with /etc/hosts";
+    homepage    = https://github.com/mpscholten/maphosts;
+    license     = licenses.mit;
+    maintainers = with maintainers; [ mpscholten nicknovitski ];
+    platforms   = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/maphosts/gemset.nix b/nixpkgs/pkgs/tools/networking/maphosts/gemset.nix
new file mode 100644
index 000000000000..3469d76ea65d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/maphosts/gemset.nix
@@ -0,0 +1,34 @@
+{
+  colorize = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mmi9wr55gb84jfpyhpx975d2c8dhdsjjys88kc6f2r66brxmh23";
+      type = "gem";
+    };
+    version = "0.8.0";
+  };
+  hosts = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0s1mbn73ig5dy69dr8461574kq1ig6rdz89r1w5f8i7gvx9g9z9v";
+      type = "gem";
+    };
+    version = "0.1.1";
+  };
+  linebreak = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0362jhjhjcf0yr3k7bfqk4ai9yybm4985x7h1rwq4b7kvzk77pqj";
+      type = "gem";
+    };
+    version = "2.0.1";
+  };
+  maphosts = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bb7wa4vr3lkaywh4hvl74j2w5n52870zh4ypwl9cr43fdrj4nkw";
+      type = "gem";
+    };
+    version = "1.1.1";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/networking/maxscale/default.nix b/nixpkgs/pkgs/tools/networking/maxscale/default.nix
new file mode 100644
index 000000000000..d047646fa719
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/maxscale/default.nix
@@ -0,0 +1,87 @@
+{ stdenv, fetchFromGitHub, cmake, pkgconfig, glibc
+, bison2, curl, flex, gperftools, jansson, jemalloc, kerberos, lua, libmysqlclient
+, ncurses, openssl, pcre, pcre2, perl, rabbitmq-c, sqlite, tcl
+, libaio, libedit, libtool, libui, libuuid, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "maxscale";
+  version = "2.1.17";
+
+  src = fetchFromGitHub {
+    owner = "mariadb-corporation";
+    repo = "MaxScale";
+    rev = "${pname}-${version}";
+    sha256 = "161kc6aqqj3z509q4qwvsd86h06hlyzdask4gawn2ij0h3ca58q6";
+  };
+
+  nativeBuildInputs = [ cmake pkgconfig ];
+
+  buildInputs = [
+    bison2 curl flex gperftools jansson jemalloc kerberos lua libmysqlclient
+    ncurses openssl pcre pcre2 perl rabbitmq-c sqlite tcl
+    libaio libedit libtool libui libuuid zlib
+  ];
+
+  patches = [ ./getopt.patch ];
+
+  preConfigure = ''
+    for i in `grep -l -R '#include <getopt.h>' .`; do
+      substituteInPlace $i --replace "#include <getopt.h>" "#include <${glibc.dev}/include/getopt.h>"
+    done
+ '';
+
+  cmakeFlags = [
+    "-DUSE_C99=YES"
+    "-DDEFAULT_ADMIN_USER=root"
+    "-DWITH_MAXSCALE_CNF=YES"
+    "-DSTATIC_EMBEDDED=YES"
+    "-DBUILD_RABBITMQ=YES"
+    "-DBUILD_BINLOG=YES"
+    "-DBUILD_CDC=NO"
+    "-DBUILD_MMMON=YES"
+    "-DBUILD_LUAFILTER=YES"
+    "-DLUA_LIBRARIES=${lua}/lib"
+    "-DLUA_INCLUDE_DIR=${lua}/include"
+    "-DGCOV=NO"
+    "-DWITH_SCRIPTS=OFF"
+    "-DBUILD_TESTS=NO"
+    "-DBUILD_TOOLS=NO"
+    "-DPROFILE=NO"
+    "-DWITH_TCMALLOC=YES"
+    "-DWITH_JEMALLOC=YES"
+    "-DINSTALL_EXPERIMENTAL=YES"
+    "-DTARGET_COMPONENT=all"
+  ];
+
+  CFLAGS = "-std=gnu99";
+
+  enableParallelBuilding = false;
+
+  dontStrip = true;
+
+  postInstall = ''
+    find $out/bin -type f -perm -0100 | while read f1; do
+      patchelf \
+        --set-rpath "$(patchelf --print-rpath $f1):${libmysqlclient}/lib/mariadb:$out/lib/maxscale" \
+        --set-interpreter "$(cat ${stdenv.cc}/nix-support/dynamic-linker)" $f1 \
+        && patchelf --shrink-rpath $f1
+    done
+
+    find $out/lib/maxscale -type f -perm -0100 | while read f2; do
+      patchelf \
+        --set-rpath "$(patchelf --print-rpath $f2)":$out/lib/maxscale $f2
+    done
+
+    mv $out/share/maxscale/create_grants $out/bin
+    rm -rf $out/{etc,var}
+  '';
+
+  meta = with stdenv.lib; {
+     description = ''MaxScale database proxy extends MariaDB Server's high availability'';
+     homepage = https://mariadb.com/products/technology/maxscale;
+     license = licenses.bsl11;
+     platforms = platforms.linux;
+     maintainers = with maintainers; [ izorkin ];
+ };
+}
diff --git a/nixpkgs/pkgs/tools/networking/maxscale/getopt.patch b/nixpkgs/pkgs/tools/networking/maxscale/getopt.patch
new file mode 100644
index 000000000000..db09a8e8f1ec
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/maxscale/getopt.patch
@@ -0,0 +1,11 @@
+--- a/server/core/maxpasswd.c   2018-01-12 05:06:49.000000000 -0500
++++ b/server/core/maxpasswd.c   2018-01-12 06:50:18.518000000 -0500
+@@ -25,6 +25,7 @@
+
+ #include <maxscale/cdefs.h>
+
++#include <getopt.h>
+ #include <stdio.h>
+ #include <errno.h>
+ #include <sys/stat.h>
+
diff --git a/nixpkgs/pkgs/tools/networking/mcrcon/default.nix b/nixpkgs/pkgs/tools/networking/mcrcon/default.nix
new file mode 100644
index 000000000000..469dd4cceb71
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mcrcon/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "mcrcon";
+  version = "0.7.1";
+
+  src = fetchFromGitHub {
+    owner = "Tiiffi";
+    repo = "mcrcon";
+    rev = "v${version}";
+    sha256 = "004h1glagyw1mic1k461bky0w2fxdfhrhcqjzr9wp6gvyy9s8bix";
+  };
+
+  buildPhase = ''
+    $CC mcrcon.c -o mcrcon
+  '';
+
+  installPhase = ''
+    install -Dm 755 mcrcon $out/bin/mcrcon
+  '';
+
+  meta = {
+    homepage = https://bukkit.org/threads/admin-rcon-mcrcon-remote-connection-client-for-minecraft-servers.70910/;
+    description = "Minecraft console client with Bukkit coloring support.";
+    longDescription = ''
+      Mcrcon is a powerful Minecraft RCON terminal client with Bukkit coloring support.
+      It is well suited for remote administration and to be used as part of automated server maintenance scripts.
+      It does not trigger "IO: Broken pipe" or "IO: Connection reset" spam bugs on the server side.
+    '';
+    maintainers = with stdenv.lib.maintainers; [ dermetfan ];
+    license = with stdenv.lib.licenses; [ zlib libpng ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/megatools/default.nix b/nixpkgs/pkgs/tools/networking/megatools/default.nix
new file mode 100644
index 000000000000..a8154f26a713
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/megatools/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, glib, fuse, curl, glib-networking
+, asciidoc, libxml2, docbook_xsl, docbook_xml_dtd_45, libxslt, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "megatools";
+  version = "1.10.2";
+
+  src = fetchFromGitHub {
+    owner = "megous";
+    repo = "megatools";
+    rev = version;
+    sha256 = "001hw8j36ld03wwaphq3xdaazf2dpl36h84k8xmk524x8vlia8lk";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook pkgconfig wrapGAppsHook asciidoc libxml2
+    docbook_xsl docbook_xml_dtd_45 libxslt
+  ];
+  buildInputs = [ glib glib-networking fuse curl ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "Command line client for Mega.co.nz";
+    homepage = https://megatools.megous.com/;
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.viric maintainers.AndersonTorres ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/memtier-benchmark/default.nix b/nixpkgs/pkgs/tools/networking/memtier-benchmark/default.nix
new file mode 100644
index 000000000000..075696cfba1b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/memtier-benchmark/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub, autoreconfHook
+, pkgconfig, libevent, pcre, zlib, openssl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "memtier-benchmark";
+  version = "1.2.17";
+
+  src = fetchFromGitHub {
+    owner  = "redislabs";
+    repo   = "memtier_benchmark";
+    rev    = "refs/tags/${version}";
+    sha256 = "18cka6sv3w8ffa81126nzi04if9g1wd3i3apxsgmv7xm2p8fsa39";
+  };
+
+  patchPhase = ''
+    substituteInPlace ./configure.ac \
+      --replace '1.2.8' '${version}'
+  '';
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  buildInputs = [ libevent pcre zlib openssl ];
+
+  meta = {
+    description = "Redis and Memcached traffic generation and benchmarking tool";
+    homepage    = https://github.com/redislabs/memtier_benchmark;
+    license     = stdenv.lib.licenses.gpl2;
+    platforms   = stdenv.lib.platforms.linux;
+    maintainers = with stdenv.lib.maintainers; [ thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/minidlna/default.nix b/nixpkgs/pkgs/tools/networking/minidlna/default.nix
new file mode 100644
index 000000000000..49cc5710e599
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/minidlna/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchurl, ffmpeg, flac, libvorbis, libogg, libid3tag, libexif, libjpeg, sqlite, gettext }:
+
+let version = "1.2.1"; in
+
+stdenv.mkDerivation {
+  pname = "minidlna";
+  inherit version;
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/minidlna/minidlna/${version}/minidlna-${version}.tar.gz";
+    sha256 = "1v1ffhmaqxpvf2vv4yyvjsks4skr9y088853awsh7ixh7ai8nf37";
+  };
+
+  preConfigure = ''
+    export makeFlags="INSTALLPREFIX=$out"
+  '';
+
+  buildInputs = [ ffmpeg flac libvorbis libogg libid3tag libexif libjpeg sqlite gettext ];
+
+  postInstall = ''
+    mkdir -p $out/share/man/man{5,8}
+    cp minidlna.conf.5 $out/share/man/man5
+    cp minidlnad.8 $out/share/man/man8
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Media server software";
+    longDescription = ''
+      MiniDLNA (aka ReadyDLNA) is server software with the aim of being fully
+      compliant with DLNA/UPnP-AV clients.
+    '';
+    homepage = https://sourceforge.net/projects/minidlna/;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/minio-client/default.nix b/nixpkgs/pkgs/tools/networking/minio-client/default.nix
new file mode 100644
index 000000000000..3c8d15346849
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/minio-client/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "minio-client";
+  version = "2019-01-30T19-57-22Z";
+
+  src = fetchFromGitHub {
+    owner = "minio";
+    repo = "mc";
+    rev = "RELEASE.${version}";
+    sha256 = "1w0ig0daf0zxpkz449xq2hm7ajhzn8hlnnmpac6ip82qy53xnbm4";
+  };
+
+  goPackagePath = "github.com/minio/mc";
+
+  preBuild = ''
+    buildFlagsArray+=("-ldflags=-X github.com/minio/mc/cmd.Version=${version}")
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/minio/mc;
+    description = "A replacement for ls, cp, mkdir, diff and rsync commands for filesystems and object storage";
+    maintainers = with maintainers; [ eelco bachp ];
+    platforms = platforms.unix;
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/minissdpd/default.nix b/nixpkgs/pkgs/tools/networking/minissdpd/default.nix
new file mode 100644
index 000000000000..1277a17f9bae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/minissdpd/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl, libnfnetlink }:
+
+stdenv.mkDerivation rec {
+  pname = "minissdpd";
+  version = "1.5.20180223";
+
+  src = fetchurl {
+    sha256 = "1c47h1zil04jnbxiaaci2rm8jij47zp5156v48hb6m87nh4l5adv";
+    url = "http://miniupnp.free.fr/files/download.php?file=${pname}-${version}.tar.gz";
+    name = "${pname}-${version}.tar.gz";
+  };
+
+  buildInputs = [ libnfnetlink ];
+
+  installFlags = [ "PREFIX=$(out)" "INSTALLPREFIX=$(out)" ];
+
+  enableParallelBuilding = true;
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    description = "Small daemon to speed up UPnP device discoveries";
+    longDescription = ''
+      MiniSSDPd receives NOTIFY packets and stores (caches) that information
+      for later use by UPnP Control Points on the machine. MiniSSDPd receives
+      M-SEARCH packets and answers on behalf of the UPnP devices running on
+      the machine. Software must be patched in order to take advantage of
+      MiniSSDPd, and MiniSSDPd must be started before any other UPnP program.
+    '';
+    homepage = http://miniupnp.free.fr/minissdpd.html;
+    downloadPage = http://miniupnp.free.fr/files/;
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/miniupnpc/default.nix b/nixpkgs/pkgs/tools/networking/miniupnpc/default.nix
new file mode 100644
index 000000000000..ebe6a60291a4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/miniupnpc/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchurl, which, cctools }:
+
+let
+  generic = { version, sha256 }:
+    stdenv.mkDerivation rec {
+      pname = "miniupnpc";
+      inherit version;
+      src = fetchurl {
+        name = "${pname}-${version}.tar.gz";
+        url = "http://miniupnp.free.fr/files/download.php?file=${pname}-${version}.tar.gz";
+        inherit sha256;
+      };
+
+      nativeBuildInputs = stdenv.lib.optionals stdenv.isDarwin [ which cctools ];
+
+      patches = stdenv.lib.optional stdenv.isFreeBSD ./freebsd.patch;
+
+      doCheck = !stdenv.isFreeBSD;
+
+      makeFlags = [ "PREFIX=$(out)" "INSTALLPREFIX=$(out)" ];
+
+      meta = with stdenv.lib; {
+        homepage = http://miniupnp.free.fr/;
+        description = "A client that implements the UPnP Internet Gateway Device (IGD) specification";
+        platforms = with platforms; linux ++ freebsd ++ darwin;
+        license = licenses.bsd3;
+      };
+    };
+in {
+  miniupnpc_2 = generic {
+    version = "2.1.20190625";
+    sha256 = "1yqp0d8x5ldjfma5x2vhpg1aaafdg0470ismccixww3rzpbza8w7";
+  };
+  miniupnpc_1 = generic {
+    version = "1.9.20160209";
+    sha256 = "0vsbv6a8by67alx4rxfsrxxsnmq74rqlavvvwiy56whxrkm728ap";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/miniupnpc/freebsd.patch b/nixpkgs/pkgs/tools/networking/miniupnpc/freebsd.patch
new file mode 100644
index 000000000000..42ae85a8e6b1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/miniupnpc/freebsd.patch
@@ -0,0 +1,11 @@
+diff --git a/minihttptestserver.c b/minihttptestserver.c
+index bbfdac3..a43999d 100644
+--- a/minihttptestserver.c
++++ b/minihttptestserver.c
+@@ -1,3 +1,6 @@
++#ifndef INADDR_LOOPBACK
++#define INADDR_LOOPBACK         0x7f000001
++#endif
+ /* $Id: minihttptestserver.c,v 1.17 2015/02/06 10:31:19 nanard Exp $ */
+  /* Project : miniUPnP
+    * Author : Thomas Bernard
diff --git a/nixpkgs/pkgs/tools/networking/miniupnpd/default.nix b/nixpkgs/pkgs/tools/networking/miniupnpd/default.nix
new file mode 100644
index 000000000000..f65c0c63370b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/miniupnpd/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, lib, fetchurl, iptables, libuuid, pkgconfig
+, which, iproute, gnused, coreutils, gawk, makeWrapper
+}:
+
+let
+  scriptBinEnv = lib.makeBinPath [ which iproute iptables gnused coreutils gawk ];
+in
+stdenv.mkDerivation rec {
+  name = "miniupnpd-2.1.20190502";
+
+  src = fetchurl {
+    url = "http://miniupnp.free.fr/files/download.php?file=${name}.tar.gz";
+    sha256 = "1m8d0g9b0bjwsnqccw1yapp6n0jghmgzwixwjflwmvi2fi6hdp4b";
+    name = "${name}.tar.gz";
+  };
+
+  buildInputs = [ iptables libuuid ];
+  nativeBuildInputs= [ pkgconfig makeWrapper ];
+
+  makefile = "Makefile.linux";
+
+  buildFlags = [ "miniupnpd" "genuuid" ];
+
+  installFlags = [ "PREFIX=$(out)" "INSTALLPREFIX=$(out)" ];
+
+  postFixup = ''
+    for script in $out/etc/miniupnpd/ip{,6}tables_{init,removeall}.sh
+    do
+      wrapProgram $script --set PATH '${scriptBinEnv}:$PATH'
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://miniupnp.free.fr/;
+    description = "A daemon that implements the UPnP Internet Gateway Device (IGD) specification";
+    platforms = platforms.linux;
+    license = licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/miredo/default.nix b/nixpkgs/pkgs/tools/networking/miredo/default.nix
new file mode 100644
index 000000000000..26f6c2498e18
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/miredo/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, nettools, iproute, judy }:
+
+stdenv.mkDerivation rec {
+  version = "1.2.6";
+  pname = "miredo";
+
+  buildInputs = [ judy ];
+
+  src = fetchurl {
+    url = "https://www.remlab.net/files/miredo/miredo-${version}.tar.xz";
+    sha256 = "0j9ilig570snbmj48230hf7ms8kvcwi2wblycqrmhh85lksd49ps";
+  };
+
+  postPatch = ''
+    substituteInPlace misc/client-hook.bsd \
+      --replace '/sbin/route' '${nettools}/bin/route' \
+      --replace '/sbin/ifconfig' '${nettools}/bin/ifconfig'
+    substituteInPlace misc/client-hook.iproute --replace '/sbin/ip' '${iproute}/bin/ip'
+  '';
+
+  configureFlags = [ "--with-Judy" ];
+
+  postInstall = ''
+    rm -rf $out/lib/systemd $out/var $out/etc/miredo/miredo.conf
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Teredo IPv6 Tunneling Daemon";
+    homepage = https://www.remlab.net/miredo/;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.volth ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/mitmproxy/default.nix b/nixpkgs/pkgs/tools/networking/mitmproxy/default.nix
new file mode 100644
index 000000000000..53369baa01c8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mitmproxy/default.nix
@@ -0,0 +1,83 @@
+{ stdenv, fetchFromGitHub, python3Packages, glibcLocales, fetchpatch }:
+
+with python3Packages;
+
+buildPythonPackage rec {
+  pname = "mitmproxy";
+  version = "4.0.4";
+
+  src = fetchFromGitHub {
+    owner  = pname;
+    repo   = pname;
+    rev    = "v${version}";
+    sha256 = "14i9dkafvyl15rq2qa8xldscn5lmkk2g52kbi2hl63nzx9yibx6r";
+  };
+
+  patches = [
+    (fetchpatch {
+      # Tests failed due to expired test certificates,
+      # https://github.com/mitmproxy/mitmproxy/issues/3316
+      # TODO: remove on next update
+      name = "test-certificates.patch";
+      url = "https://github.com/mitmproxy/mitmproxy/commit/1b6a8d6acd3d70f9b9627ad4ae9def08103f8250.patch";
+      sha256 = "03y79c25yir7d8xj79czdc81y3irqq1i3ks9ca0mv1az8b7xsvfv";
+    })
+    (fetchpatch {
+      # 0.13 <= wsproto < 0.14 patch
+      # https://github.com/mitmproxy/mitmproxy/issues/3459
+      # TODO: remove on next update
+      name = "wsproto-0.13.patch";
+      url = https://github.com/mitmproxy/mitmproxy/commit/70777a1b6ed64af9cafcdef223a8a260ecc96864.patch;
+      sha256 = "1ddxdr7js510kzyq3gyks4k5k1n8zb1i9amxw7wzmi1dcg8kqw9a";
+      # We strip these bounds anyway
+      excludes = [ "setup.py" ];
+    })
+    (fetchpatch {
+      # Fix for newer pytest disallowing calling fixtures
+      # https://github.com/mitmproxy/mitmproxy/issues/3403
+      # TODO: remove on next update
+      name = "dont-call-fixtures.patch";
+      url = https://github.com/mitmproxy/mitmproxy/commit/ce28721458c8cc71de86513a5110676e9763041b.patch;
+      sha256 = "05pljr28lx7l1xgswqr9sz8dnhvc7npzh8xg2p9hignf159kd54d";
+      # Irrelevant in nixpkgs
+      excludes = [ "setup.py" "setup.cfg" "release/docker/*" ];
+    })
+    ./pytest5.patch
+  ];
+
+  postPatch = ''
+    # remove dependency constraints
+    sed 's/>=\([0-9]\.\?\)\+\( \?, \?<\([0-9]\.\?\)\+\)\?//' -i setup.py
+  '';
+
+  doCheck = (!stdenv.isDarwin);
+
+  # examples.complex.xss_scanner doesn't import correctly with pytest5
+  checkPhase = ''
+    export HOME=$(mktemp -d)
+    export LC_CTYPE=en_US.UTF-8
+    pytest --ignore test/examples \
+      -k 'not test_find_unclaimed_URLs and not test_tcp'
+  '';
+
+  propagatedBuildInputs = [
+    blinker click certifi cryptography
+    h2 hyperframe kaitaistruct passlib
+    pyasn1 pyopenssl pyparsing pyperclip
+    ruamel_yaml tornado urwid brotlipy
+    sortedcontainers ldap3 wsproto setuptools
+  ];
+
+  checkInputs = [
+    beautifulsoup4 flask pytest
+    requests glibcLocales
+    asynctest parver pytest-asyncio
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Man-in-the-middle proxy";
+    homepage    = https://mitmproxy.org/;
+    license     = licenses.mit;
+    maintainers = with maintainers; [ fpletz kamilchm ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/mitmproxy/pytest5.patch b/nixpkgs/pkgs/tools/networking/mitmproxy/pytest5.patch
new file mode 100644
index 000000000000..bfbf7253b9c4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mitmproxy/pytest5.patch
@@ -0,0 +1,31 @@
+diff --git a/test/mitmproxy/net/test_tls.py b/test/mitmproxy/net/test_tls.py
+index 489bf89f..c78472e3 100644
+--- a/test/mitmproxy/net/test_tls.py
++++ b/test/mitmproxy/net/test_tls.py
+@@ -87,14 +87,16 @@ def test_get_client_hello():
+     rfile = io.BufferedReader(io.BytesIO(
+         FULL_CLIENT_HELLO_NO_EXTENSIONS[:30]
+     ))
+-    with pytest.raises(exceptions.TlsProtocolException, message="Unexpected EOF"):
++    with pytest.raises(exceptions.TlsProtocolException):
+         tls.get_client_hello(rfile)
++        pytest.fail("Unexpected EOF")
+ 
+     rfile = io.BufferedReader(io.BytesIO(
+         b"GET /"
+     ))
+-    with pytest.raises(exceptions.TlsProtocolException, message="Expected TLS record"):
++    with pytest.raises(exceptions.TlsProtocolException):
+         tls.get_client_hello(rfile)
++        pytest.fail("Expected TLS record")
+ 
+ 
+ class TestClientHello:
+@@ -153,5 +155,6 @@ class TestClientHello:
+             b"\x01\x00\x00\x03" +  # handshake header
+             b"foo"
+         ))
+-        with pytest.raises(exceptions.TlsProtocolException, message='Cannot parse Client Hello'):
++        with pytest.raises(exceptions.TlsProtocolException):
+             tls.ClientHello.from_file(rfile)
++            pytest.fail('Cannot parse Client Hello')
diff --git a/nixpkgs/pkgs/tools/networking/mmsd/default.nix b/nixpkgs/pkgs/tools/networking/mmsd/default.nix
new file mode 100644
index 000000000000..fee347dd2015
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mmsd/default.nix
@@ -0,0 +1,38 @@
+{ stdenv
+, fetchgit
+, autoreconfHook
+, pkgconfig
+, glib
+, dbus
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mmsd";
+  version = "unstable-2019-07-15";
+
+  src = fetchgit {
+    url = "git://git.kernel.org/pub/scm/network/ofono/mmsd.git";
+    rev = "f4b8b32477a411180be1823fdc460b4f7e1e3c9c";
+    sha256 = "0hcnpyhsi7b5m825dhnwbp65yi0961wi8mipzdvaw5nc693xv15b";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkgconfig
+  ];
+
+  buildInputs = [
+    glib
+    dbus
+  ];
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    description = "Multimedia Messaging Service Daemon";
+    homepage = "https://01.org/ofono";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ jtojnar ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/modem-manager/default.nix b/nixpkgs/pkgs/tools/networking/modem-manager/default.nix
new file mode 100644
index 000000000000..221e873387f1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/modem-manager/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, fetchurl, glib, udev, libgudev, polkit, ppp, gettext, pkgconfig
+, libmbim, libqmi, systemd, vala, gobject-introspection, dbus }:
+
+stdenv.mkDerivation rec {
+  pname = "modem-manager";
+  version = "1.10.6";
+
+  package = "ModemManager";
+  src = fetchurl {
+    url = "https://www.freedesktop.org/software/${package}/${package}-${version}.tar.xz";
+    sha256 = "15n9sd6ymxvw7hidc9pw81j89acwi5cjfhj220a68mi1h8vsfb1w";
+  };
+
+  nativeBuildInputs = [ vala gobject-introspection gettext pkgconfig ];
+
+  buildInputs = [ glib udev libgudev polkit ppp libmbim libqmi systemd ];
+
+  configureFlags = [
+    "--with-polkit"
+    "--with-udev-base-dir=${placeholder "out"}/lib/udev"
+    "--with-dbus-sys-dir=${placeholder "out"}/share/dbus-1/system.d"
+    "--with-systemdsystemunitdir=${placeholder "out"}/etc/systemd/system"
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+    "--with-systemd-suspend-resume"
+    "--with-systemd-journal"
+  ];
+
+  preCheck = ''
+    export G_TEST_DBUS_DAEMON="${dbus.daemon}/bin/dbus-daemon"
+  '';
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    description = "WWAN modem manager, part of NetworkManager";
+    homepage = https://www.freedesktop.org/wiki/Software/ModemManager/;
+    license = licenses.gpl2Plus;
+    maintainers = [ ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/mosh/default.nix b/nixpkgs/pkgs/tools/networking/mosh/default.nix
new file mode 100644
index 000000000000..98d2625aade9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mosh/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, fetchurl, fetchpatch, zlib, protobuf, ncurses, pkgconfig
+, makeWrapper, perlPackages, openssl, autoreconfHook, openssh, bash-completion
+, libutempter ? null, withUtempter ? stdenv.isLinux }:
+
+stdenv.mkDerivation rec {
+  name = "mosh-1.3.2";
+
+  src = fetchurl {
+    url = "https://mosh.org/${name}.tar.gz";
+    sha256 = "05hjhlp6lk8yjcy59zywpf0r6s0h0b9zxq0lw66dh9x8vxrhaq6s";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  buildInputs = [ protobuf ncurses zlib makeWrapper openssl bash-completion ]
+    ++ (with perlPackages; [ perl IOTty ])
+    ++ lib.optional withUtempter libutempter;
+
+  patches = [
+    ./ssh_path.patch
+    ./utempter_path.patch
+    # Fix w/c++17, ::bind vs std::bind
+    (fetchpatch {
+      url = "https://github.com/mobile-shell/mosh/commit/e5f8a826ef9ff5da4cfce3bb8151f9526ec19db0.patch";
+      sha256 = "15518rb0r5w1zn4s6981bf1sz6ins6gpn2saizfzhmr13hw4gmhm";
+    })
+  ];
+  postPatch = ''
+    substituteInPlace scripts/mosh.pl \
+        --subst-var-by ssh "${openssh}/bin/ssh"
+  '';
+
+  configureFlags = [ "--enable-completion" ] ++ lib.optional withUtempter "--with-utempter";
+
+  postInstall = ''
+      wrapProgram $out/bin/mosh --prefix PERL5LIB : $PERL5LIB
+  '';
+
+  CXXFLAGS = stdenv.lib.optionalString stdenv.cc.isClang "-std=c++11";
+
+  meta = {
+    homepage = https://mosh.org/;
+    description = "Mobile shell (ssh replacement)";
+    longDescription = ''
+      Remote terminal application that allows roaming, supports intermittent
+      connectivity, and provides intelligent local echo and line editing of
+      user keystrokes.
+
+      Mosh is a replacement for SSH. It's more robust and responsive,
+      especially over Wi-Fi, cellular, and long-distance links.
+    '';
+    license = stdenv.lib.licenses.gpl3Plus;
+    maintainers = with stdenv.lib.maintainers; [viric];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/mosh/ssh_path.patch b/nixpkgs/pkgs/tools/networking/mosh/ssh_path.patch
new file mode 100644
index 000000000000..cb2a650718ab
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mosh/ssh_path.patch
@@ -0,0 +1,13 @@
+diff --git i/scripts/mosh.pl w/scripts/mosh.pl
+index c511482..55bf5f3 100755
+--- i/scripts/mosh.pl
++++ w/scripts/mosh.pl
+@@ -66,7 +66,7 @@ my $use_remote_ip = 'proxy';
+ my $family = 'prefer-inet';
+ my $port_request = undef;
+ 
+-my @ssh = ('ssh');
++my @ssh = ('@ssh@');
+ 
+ my $term_init = 1;
+ 
diff --git a/nixpkgs/pkgs/tools/networking/mosh/utempter_path.patch b/nixpkgs/pkgs/tools/networking/mosh/utempter_path.patch
new file mode 100644
index 000000000000..a981708ffadf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mosh/utempter_path.patch
@@ -0,0 +1,14 @@
+diff -ur mosh-1.3.2/src/frontend/mosh-server.cc mosh-1.3.2.patched/src/frontend/mosh-server.cc
+--- mosh-1.3.2/src/frontend/mosh-server.cc	2017-07-22 23:14:53.000000000 +0200
++++ mosh-1.3.2.patched/src/frontend/mosh-server.cc	2018-06-06 10:45:50.725352804 +0200
+@@ -351,6 +351,10 @@
+     }
+   }
+ 
++#ifdef HAVE_UTEMPTER
++    utempter_set_helper( "utempter" );
++#endif
++
+   try {
+     return run_server( desired_ip, desired_port, command_path, command_argv, colors, verbose, with_motd );
+   } catch ( const Network::NetworkException &e ) {
diff --git a/nixpkgs/pkgs/tools/networking/mpack/build-fix.patch b/nixpkgs/pkgs/tools/networking/mpack/build-fix.patch
new file mode 100644
index 000000000000..0329bedd07f3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mpack/build-fix.patch
@@ -0,0 +1,29 @@
+diff -ubr mpack-1.6-orig/unixos.c mpack-1.6/unixos.c
+--- mpack-1.6-orig/unixos.c	2013-08-17 14:32:38.102772775 +0200
++++ mpack-1.6/unixos.c	2013-08-17 14:32:43.180792505 +0200
+@@ -38,10 +38,6 @@
+ #define MAXHOSTNAMELEN 64
+ #endif
+ 
+-extern int errno;
+-extern char *malloc();
+-extern char *getenv();
+-
+ int overwrite_files = 0;
+ int didchat;
+ 
+Only in mpack-1.6: unixos.o
+Only in mpack-1.6: unixunpk.o
+Only in mpack-1.6: uudecode.o
+diff -ubr mpack-1.6-orig/xmalloc.c mpack-1.6/xmalloc.c
+--- mpack-1.6-orig/xmalloc.c	2013-08-17 14:32:38.102772775 +0200
++++ mpack-1.6/xmalloc.c	2013-08-17 14:33:08.900892319 +0200
+@@ -24,7 +24,6 @@
+  */
+ #include <stdio.h>
+ #include <string.h>
+-extern char *malloc(), *realloc();
+ 
+ char *xmalloc (int size)
+ {
+Only in mpack-1.6: xmalloc.o
diff --git a/nixpkgs/pkgs/tools/networking/mpack/default.nix b/nixpkgs/pkgs/tools/networking/mpack/default.nix
new file mode 100644
index 000000000000..5a8af7de36a0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mpack/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "mpack-1.6";
+
+  src = fetchurl {
+    url = "http://ftp.andrew.cmu.edu/pub/mpack/${name}.tar.gz";
+    sha256 = "0k590z96509k96zxmhv72gkwhrlf55jkmyqlzi72m61r7axhhh97";
+  };
+
+  patches = [ ./build-fix.patch ./sendmail-via-execvp.diff ];
+
+  postPatch = ''
+    for f in *.{c,man,pl,unix} ; do
+      substituteInPlace $f --replace /usr/tmp /tmp
+    done
+
+    # this just shuts up some warnings
+    for f in {decode,encode,part,unixos,unixpk,unixunpk,xmalloc}.c ; do
+      sed -i 'i#include <stdlib.h>' $f
+    done
+  '';
+
+  postInstall = ''
+    install -Dm644 -t $out/share/doc/mpack INSTALL README.*
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "Utilities for encoding and decoding binary files in MIME";
+    license = licenses.free;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/mpack/sendmail-via-execvp.diff b/nixpkgs/pkgs/tools/networking/mpack/sendmail-via-execvp.diff
new file mode 100644
index 000000000000..8f10901038d6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mpack/sendmail-via-execvp.diff
@@ -0,0 +1,12 @@
+--- mpack-1.6/unixpk.c	2003-07-21 22:50:41.000000000 +0200
++++ mpack-1.6/unixpk.c	2018-09-16 12:57:14.104026964 +0200
+@@ -254,8 +254,9 @@
+ #ifdef SCO
+     execv("/usr/lib/mail/execmail", addr+start);
+ #else
++    execvp("sendmail", addr+start);
+     execv("/usr/lib/sendmail", addr+start);
+     execv("/usr/sbin/sendmail", addr+start);
+ #endif
+     perror("execv");
+     _exit(1);
diff --git a/nixpkgs/pkgs/tools/networking/mtr/default.nix b/nixpkgs/pkgs/tools/networking/mtr/default.nix
new file mode 100644
index 000000000000..18850fab3300
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mtr/default.nix
@@ -0,0 +1,54 @@
+{ stdenv, lib, fetchFromGitHub, fetchpatch, autoreconfHook, pkgconfig
+, libcap, ncurses
+, withGtk ? false, gtk2 ? null }:
+
+assert withGtk -> gtk2 != null;
+
+stdenv.mkDerivation rec {
+  pname = "mtr${lib.optionalString withGtk "-gui"}";
+  version = "0.93";
+
+  src = fetchFromGitHub {
+    owner  = "traviscross";
+    repo   = "mtr";
+    rev    = "v${version}";
+    sha256 = "0n0zr9k61w7a9psnzgp7xnc7ll1ic2xzcvqsbbbyndg3v9rff6bw";
+  };
+  
+  patches = [
+    # https://github.com/traviscross/mtr/pull/315
+    (fetchpatch {
+      url = https://github.com/traviscross/mtr/pull/315.patch?full_index=1;
+      sha256 = "18qcsj9058snc2qhq6v6gdbqhz021gi5fgw9h7vfczv45gf0qasa";
+    })
+  ];
+
+  # we need this before autoreconfHook does its thing
+  postPatch = ''
+    echo ${version} > .tarball-version
+  '';
+
+  # and this after autoreconfHook has generated Makefile.in
+  preConfigure = ''
+    substituteInPlace Makefile.in \
+      --replace ' install-exec-hook' ""
+  '';
+
+  configureFlags = stdenv.lib.optional (!withGtk) "--without-gtk";
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+
+  buildInputs = [ ncurses ]
+    ++ stdenv.lib.optional withGtk gtk2
+    ++ stdenv.lib.optional stdenv.isLinux libcap;
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "A network diagnostics tool";
+    homepage    = "https://www.bitwizard.nl/mtr/";
+    license     = licenses.gpl2;
+    maintainers = with maintainers; [ koral orivej raskin globin ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/mu/default.nix b/nixpkgs/pkgs/tools/networking/mu/default.nix
new file mode 100644
index 000000000000..cdd954e19758
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/mu/default.nix
@@ -0,0 +1,56 @@
+{ stdenv, fetchFromGitHub, sqlite, pkgconfig, autoreconfHook, pmccabe
+, xapian, glib, gmime3, texinfo , emacs, guile
+, gtk3, webkitgtk, libsoup, icu
+, withMug ? false }:
+
+stdenv.mkDerivation rec {
+  pname = "mu";
+  version = "1.2";
+
+  src = fetchFromGitHub {
+    owner  = "djcb";
+    repo   = "mu";
+    rev    = version;
+    sha256 = "0yhjlj0z23jw3cf2wfnl98y8q6gikvmhkb8vdm87bd7jw0bdnrfz";
+  };
+
+  # test-utils coredumps so don't run those
+  postPatch = ''
+    sed -i -e '/test-utils/d' lib/parser/Makefile.am
+  '';
+
+  buildInputs = [
+    sqlite xapian glib gmime3 texinfo emacs guile libsoup icu
+  ] ++ stdenv.lib.optionals withMug [ gtk3 webkitgtk ];
+
+  nativeBuildInputs = [ pkgconfig autoreconfHook pmccabe ];
+
+  enableParallelBuilding = true;
+
+  preBuild = ''
+    # Fix mu4e-builddir (set it to $out)
+    substituteInPlace mu4e/mu4e-meta.el.in \
+      --replace "@abs_top_builddir@" "$out"
+
+    # We install msg2pdf to bin/msg2pdf, fix its location in elisp
+    substituteInPlace mu4e/mu4e-actions.el \
+      --replace "/toys/msg2pdf/" "/bin/"
+  '';
+
+  # Install mug and msg2pdf
+  postInstall = stdenv.lib.optionalString withMug ''
+    for f in msg2pdf mug ; do
+      install -m755 toys/$f/$f $out/bin/$f
+    done
+  '';
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    description = "A collection of utilties for indexing and searching Maildirs";
+    license = licenses.gpl3Plus;
+    homepage = https://www.djcbsoftware.nl/code/mu/;
+    platforms = platforms.mesaPlatforms;
+    maintainers = with maintainers; [ antono the-kenny peterhoeg ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/nat-traverse/default.nix b/nixpkgs/pkgs/tools/networking/nat-traverse/default.nix
new file mode 100644
index 000000000000..a4dcfb4a40f2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/nat-traverse/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchurl, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "nat-traverse";
+  version = "0.7";
+
+  src = fetchurl {
+    url = "https://www.speicherleck.de/iblech/nat-traverse/nat-traverse-${version}.tar.bz2";
+    sha256 = "0knwnqsjwv7sa5wjb863ghabs7s269a73qwkmxpsbngjw9s0j2ih";
+  };
+
+  nativeBuildInputs = [ perl ];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man/man1
+    cp nat-traverse $out/bin
+    gzip -c nat-traverse.1 > $out/share/man/man1/nat-traverse.1.gz
+  '';
+
+  meta = with stdenv.lib; {
+    description = "NAT gateway traversal utility";
+    longDescription = ''
+      nat-traverse establishes direct connections between nodes which are
+      behind NAT gateways, i.e. hosts which do not have public IP addresses.
+      This is done using an UDP NAT traversal technique. Additionally, it's
+      possible to setup a small VPN by using pppd on top of nat-traverse.
+
+      nat-traverse does not need an external server on the Internet, and it
+      isn't necessary to reconfigure the involved NAT gateways, either.
+      nat-traverse works out-of-the-box.
+    '';
+    homepage = https://www.speicherleck.de/iblech/nat-traverse/;
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    maintainers = [ maintainers.iblech ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/nbd/default.nix b/nixpkgs/pkgs/tools/networking/nbd/default.nix
new file mode 100644
index 000000000000..9c443696eda6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/nbd/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl, pkgconfig, glib, which }:
+
+stdenv.mkDerivation rec {
+  name = "nbd-3.20";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/nbd/${name}.tar.xz";
+    sha256 = "1kfnyx52nna2mnw264njk1dl2zc8m78sz031yp65mbmpi99v7qg0";
+  };
+
+  buildInputs = [ glib ]
+    ++ stdenv.lib.optional (stdenv ? glibc) stdenv.glibc.linuxHeaders;
+
+  nativeBuildInputs = [ pkgconfig which ];
+
+  postInstall = ''
+    mkdir -p "$out/share/doc/${name}"
+    cp README.md "$out/share/doc/${name}/"
+  '';
+
+  doCheck = true;
+
+  # Glib calls `clock_gettime', which is in librt. Linking that library
+  # here ensures that a proper rpath is added to the executable so that
+  # it can be loaded at run-time.
+  NIX_LDFLAGS = stdenv.lib.optionalString stdenv.isLinux "-lrt -lpthread";
+
+  meta = {
+    homepage = http://nbd.sourceforge.net;
+    description = "Map arbitrary files as block devices over the network";
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = [ stdenv.lib.maintainers.peti ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ncftp/default.nix b/nixpkgs/pkgs/tools/networking/ncftp/default.nix
new file mode 100644
index 000000000000..acd9a0e27f86
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ncftp/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchurl, ncurses, coreutils }:
+
+stdenv.mkDerivation rec {
+  pname = "ncftp";
+  version = "3.2.6";
+
+  src = fetchurl {
+    url = "ftp://ftp.ncftp.com/ncftp/ncftp-${version}-src.tar.xz";
+    sha256 = "1389657cwgw5a3kljnqmhvfh4vr2gcr71dwz1mlhf22xq23hc82z";
+  };
+
+  buildInputs = [ ncurses ];
+
+  enableParallelBuilding = true;
+
+  preConfigure = ''
+    find . -name '*.sh' -or -name '*.in' -or -name '*.c' -or -name configure | xargs sed -i \
+      -e 's@/bin/ls@${coreutils}/bin/ls@g' \
+      -e 's@/bin/rm@${coreutils}/bin/rm@g'
+  '';
+
+  postInstall = ''
+    rmdir $out/etc
+    mkdir -p $out/share/doc
+    cp -r doc $out/share/doc/ncftp
+  '';
+
+  configureFlags = [
+    "--enable-ssp"
+    "--mandir=$(out)/share/man/"
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Command line FTP (File Transfer Protocol) client";
+    homepage = https://www.ncftp.com/ncftp/;
+    maintainers = with maintainers; [ bjornfor ];
+    platforms = platforms.unix;
+    license = licenses.clArtistic;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ndisc6/default.nix b/nixpkgs/pkgs/tools/networking/ndisc6/default.nix
new file mode 100644
index 000000000000..43018e401f1e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ndisc6/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl, perl }:
+
+stdenv.mkDerivation rec {
+  name = "ndisc6-1.0.4";
+
+  src = fetchurl {
+    url = "https://www.remlab.net/files/ndisc6/archive/${name}.tar.bz2";
+    sha256 = "07swyar1hl83zxmd7fqwb2q0c0slvrswkcfp3nz5lknrk15dmcdb";
+  };
+
+  buildInputs = [ perl ];
+
+  configureFlags = [
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+    "--disable-suid-install"
+  ];
+
+  installFlags = [
+    "sysconfdir=\${out}/etc"
+    "localstatedir=$(TMPDIR)"
+  ];
+
+  meta = with stdenv.lib; {
+    homepage = https://www.remlab.net/ndisc6/;
+    description = "A small collection of useful tools for IPv6 networking";
+    maintainers = with maintainers; [ eelco ];
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ndjbdns/default.nix b/nixpkgs/pkgs/tools/networking/ndjbdns/default.nix
new file mode 100644
index 000000000000..85de6d131837
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ndjbdns/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, systemd, pkgconfig }:
+
+with stdenv.lib;
+
+stdenv.mkDerivation {
+  version = "1.06";
+  pname = "ndjbdns";
+
+  src = fetchFromGitHub {
+    owner = "pjps";
+    repo = "ndjbdns";
+    rev = "64d371b6f887621de7bf8bd495be10442b2accd0";
+    sha256 = "0gjyvn8r66kp49gasd6sqfvg2pj0c6v67hnq7cqwl04kj69rfy86";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  buildInputs = [ ]
+    ++ optional stdenv.isLinux systemd;
+
+  meta = {
+    description = "A brand new release of the Djbdns";
+    longDescription = ''
+      Djbdns is a fully‐fledged Domain Name System(DNS), originally written by the eminent author of qmail, Dr. D J Bernstein.
+    '';
+    homepage = http://pjp.dgplug.org/ndjbdns/;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.msackman ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/networking/nebula/default.nix b/nixpkgs/pkgs/tools/networking/nebula/default.nix
new file mode 100644
index 000000000000..3411aca55519
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/nebula/default.nix
@@ -0,0 +1,43 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "nebula";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "slackhq";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0nwagk3q2gkirqrk27fisad2c2p2y1lsvz5phax9v5h51p1y79ia";
+  };
+
+  modSha256 = "1sy5mnwn9fxjf3y41lm8gsggid2c0y08iw88m9ng8psaf4qid8ij";
+
+  subPackages = [ "cmd/nebula" "cmd/nebula-cert" ];
+
+  buildFlagsArray = [ "-ldflags='-X main.Build=${version}'" ];
+
+  meta = with lib; {
+    description = "A scalable overlay networking tool with a focus on performance, simplicity and security";
+    longDescription = ''
+      Nebula is a scalable overlay networking tool with a focus on performance,
+      simplicity and security. It lets you seamlessly connect computers
+      anywhere in the world. Nebula is portable, and runs on Linux, OSX, and
+      Windows. (Also: keep this quiet, but we have an early prototype running
+      on iOS). It can be used to connect a small number of computers, but is
+      also able to connect tens of thousands of computers.
+
+      Nebula incorporates a number of existing concepts like encryption,
+      security groups, certificates, and tunneling, and each of those
+      individual pieces existed before Nebula in various forms. What makes
+      Nebula different to existing offerings is that it brings all of these
+      ideas together, resulting in a sum that is greater than its individual
+      parts.
+    '';
+    homepage = "https://github.com/slackhq/nebula";
+    license = licenses.mit;
+    maintainers = with maintainers; [ filalex77 ];
+    platforms = platforms.all;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/networking/netalyzr/default.nix b/nixpkgs/pkgs/tools/networking/netalyzr/default.nix
new file mode 100644
index 000000000000..969084582aee
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/netalyzr/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, jre, makeWrapper }:
+
+stdenv.mkDerivation {
+  pname = "netalyzr";
+  version = "57861";
+
+  # unfortunately there is not a version specific download URL
+  src = fetchurl {
+    url    = "http://netalyzr.icsi.berkeley.edu/NetalyzrCLI.jar";
+    sha256 = "0fa3gvgp05p1nf1d711052wgvnp0xnvhj2h2bwk1mh1ih8qn50xb";
+  };
+
+  phases = [ "installPhase" ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/{bin,share/netalyzr}
+    install -m644 $src $out/share/netalyzr/NetalyzrCLI.jar
+    makeWrapper ${stdenv.lib.getBin jre}/bin/java $out/bin/netalyzr \
+      --add-flags "-jar $out/share/netalyzr/NetalyzrCLI.jar"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Network debugging and analysis tool";
+    homepage    = http://netalyzr.icsi.berkeley.edu;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms   = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/netboot/default.nix b/nixpkgs/pkgs/tools/networking/netboot/default.nix
new file mode 100644
index 000000000000..7a1eac59eeae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/netboot/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl, yacc, lzo, db4 }:
+
+stdenv.mkDerivation rec {
+  name = "netboot-0.10.2";
+  src = fetchurl {
+    url = "mirror://sourceforge/netboot/${name}.tar.gz";
+    sha256 = "09w09bvwgb0xzn8hjz5rhi3aibysdadbg693ahn8rylnqfq4hwg0";
+  };
+
+  buildInputs = [ yacc lzo db4 ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = with stdenv.lib; {
+    description = "Mini PXE server";
+    maintainers = [ maintainers.raskin ];
+    platforms = ["x86_64-linux"];
+    license = stdenv.lib.licenses.free;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/netcat/default.nix b/nixpkgs/pkgs/tools/networking/netcat/default.nix
new file mode 100644
index 000000000000..47ec804e5d48
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/netcat/default.nix
@@ -0,0 +1,17 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation {
+  name = "netcat-gnu-0.7.1";
+
+  src = fetchurl {
+    url = mirror://sourceforge/netcat/netcat-0.7.1.tar.bz2;
+    sha256 = "1frjcdkhkpzk0f84hx6hmw5l0ynpmji8vcbaxg8h5k2svyxz0nmm";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Utility which reads and writes data across network connections";
+    homepage = http://netcat.sourceforge.net/;
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/nethogs/default.nix b/nixpkgs/pkgs/tools/networking/nethogs/default.nix
new file mode 100644
index 000000000000..a85d4d7ad108
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/nethogs/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromGitHub, ncurses, libpcap }:
+
+stdenv.mkDerivation rec {
+  pname = "nethogs";
+  version = "0.8.5";
+
+  src = fetchFromGitHub {
+    owner = "raboof";
+    repo = "nethogs";
+    rev = "v${version}";
+    sha256 = "13plwblwbnyyi40jaqx471gwhln08wm7f0fxyvj1yh3d81k556yx";
+  };
+
+  buildInputs = [ ncurses libpcap ];
+
+  makeFlags = [ "VERSION=${version}" ];
+
+  installFlags = [ "PREFIX=$(out)" "sbin=$(out)/bin" ];
+
+  meta = with stdenv.lib; {
+    description = "A small 'net top' tool, grouping bandwidth by process";
+    longDescription = ''
+      NetHogs is a small 'net top' tool. Instead of breaking the traffic down
+      per protocol or per subnet, like most tools do, it groups bandwidth by
+      process. NetHogs does not rely on a special kernel module to be loaded.
+      If there's suddenly a lot of network traffic, you can fire up NetHogs
+      and immediately see which PID is causing this. This makes it easy to
+      identify programs that have gone wild and are suddenly taking up your
+      bandwidth.
+    '';
+    license = licenses.gpl2Plus;
+    homepage = "https://github.com/raboof/nethogs#readme";
+    platforms = platforms.linux;
+    maintainers = [ maintainers.rycee ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/netkit/tftp/default.nix b/nixpkgs/pkgs/tools/networking/netkit/tftp/default.nix
new file mode 100644
index 000000000000..de53cfdd224c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/netkit/tftp/default.nix
@@ -0,0 +1,26 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  name = "netkit-tftp-0.17";
+
+  src = fetchurl {
+    urls = [
+      "mirror://ubuntu/pool/universe/n/netkit-tftp/netkit-tftp_0.17.orig.tar.gz"
+      "ftp://ftp.uk.linux.org/pub/linux/Networking/netkit/${name}.tar.gz"
+      "https://ftp.cc.uoc.gr/mirrors/linux/ubuntu/packages/pool/universe/n/netkit-tftp/netkit-tftp_0.17.orig.tar.gz"
+    ];
+    sha256 = "0kfibbjmy85r3k92cdchha78nzb6silkgn1zaq9g8qaf1l0w0hrs";
+  };
+
+  preInstall = "
+    mkdir -p $out/man/man{1,8} $out/sbin $out/bin
+  ";
+
+  meta = {
+    description = "Netkit TFTP client and server";
+    homepage = ftp://ftp.uk.linux.org/pub/linux/Networking/netkit/;
+    license = stdenv.lib.licenses.bsdOriginal;
+    maintainers = with stdenv.lib.maintainers; [viric];
+    platforms = with stdenv.lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/netmask/default.nix b/nixpkgs/pkgs/tools/networking/netmask/default.nix
new file mode 100644
index 000000000000..864838bdd390
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/netmask/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, texinfo }:
+
+stdenv.mkDerivation rec {
+  pname = "netmask";
+  version = "2.4.4";
+
+  src = fetchFromGitHub {
+    owner = "tlby";
+    repo = "netmask";
+    rev = "v${version}";
+    sha256 = "1269bmdvl534wr0bamd7cqbnr76pnb14yn8ly4qsfg29kh7hrds6";
+  };
+
+  buildInputs = [ texinfo ];
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/tlby/netmask;
+    description = "An IP address formatting tool ";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.jensbin ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/netrw/default.nix b/nixpkgs/pkgs/tools/networking/netrw/default.nix
new file mode 100644
index 000000000000..dfd355237dc0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/netrw/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl
+, checksumType ? "built-in"
+, libmhash ? null
+, openssl ? null
+}:
+
+assert checksumType == "mhash" -> libmhash != null;
+assert checksumType == "openssl" -> openssl != null;
+
+stdenv.mkDerivation rec {
+  pname = "netrw";
+  version = "1.3.2";
+
+  configureFlags = [
+    "--with-checksum=${checksumType}"
+  ];
+
+  buildInputs = stdenv.lib.optional (checksumType == "mhash") libmhash
+             ++ stdenv.lib.optional (checksumType == "openssl") openssl;
+
+  src = fetchurl {
+    urls = [
+      "https://mamuti.net/files/netrw/netrw-${version}.tar.bz2"
+      "http://www.sourcefiles.org/Networking/FTP/Other/netrw-${version}.tar.bz2"
+    ];
+    sha256 = "1gnl80i5zkyj2lpnb4g0q0r5npba1x6cnafl2jb3i3pzlfz1bndr";
+  };
+
+  meta = {
+    description = "Simple tool for transporting data over the network";
+    license = stdenv.lib.licenses.gpl2;
+    homepage = https://mamuti.net/netrw/index.en.html;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/netselect/default.nix b/nixpkgs/pkgs/tools/networking/netselect/default.nix
new file mode 100644
index 000000000000..c40f43c214fc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/netselect/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "netselect";
+  version = "0.4";
+
+  src = fetchFromGitHub {
+    owner = "apenwarr";
+    repo = "netselect";
+    rev = "${pname}-${version}";
+    sha256 = "1zncyvjzllrjbdvz7c50d1xjyhs9mwqfy92ndpfc5b3mxqslw4kx";
+  };
+
+  postPatch = ''
+    substituteInPlace netselect-apt \
+      --replace "/usr/bin/" ""
+  '';
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm555 -t $out/bin netselect netselect-apt
+    install -Dm444 -t $out/share/man/man1 *.1
+    runHook postInstall
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/apenwarr/netselect;
+    description = "An ultrafast intelligent parallelizing binary-search implementation of \"ping\"";
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/netsniff-ng/default.nix b/nixpkgs/pkgs/tools/networking/netsniff-ng/default.nix
new file mode 100644
index 000000000000..8da36d72fda2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/netsniff-ng/default.nix
@@ -0,0 +1,62 @@
+{ stdenv, fetchFromGitHub, makeWrapper, bison, flex, geoip, geolite-legacy
+, libcli, libnet, libnetfilter_conntrack, libnl, libpcap, libsodium
+, liburcu, ncurses, pkgconfig, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "netsniff-ng";
+  version = "0.6.6";
+
+  # Upstream recommends and supports git
+  src = fetchFromGitHub {
+    repo = pname;
+    owner = pname;
+    rev = "v${version}";
+    sha256 = "0spp8dl4i5xcqfbqxxcpdf3gwcmyf4ywl1dd79w6gzbr07p894p5";
+  };
+
+  nativeBuildInputs = [ pkgconfig makeWrapper bison flex ];
+  buildInputs = [
+    geoip geolite-legacy libcli libnet libnl
+    libnetfilter_conntrack libpcap libsodium liburcu ncurses zlib
+  ];
+
+  # ./configure is not autoGNU but some home-brewn magic
+  configurePhase = ''
+    patchShebangs configure
+    substituteInPlace configure --replace "which" "command -v"
+    NACL_INC_DIR=${libsodium.dev}/include/sodium NACL_LIB=sodium ./configure
+  '';
+
+  enableParallelBuilding = true;
+
+  # All files installed to /etc are just static data that can go in the store
+  makeFlags = [ "PREFIX=$(out)" "ETCDIR=$(out)/etc" ];
+
+  postInstall = ''
+    # trafgen and bpfc can call out to cpp to process config files.
+    wrapProgram "$out/sbin/trafgen" --prefix PATH ":" "${stdenv.cc}/bin"
+    wrapProgram "$out/sbin/bpfc" --prefix PATH ":" "${stdenv.cc}/bin"
+
+    ln -sv ${geolite-legacy}/share/GeoIP/GeoIP.dat		$out/etc/netsniff-ng/country4.dat
+    ln -sv ${geolite-legacy}/share/GeoIP/GeoIPv6.dat		$out/etc/netsniff-ng/country6.dat
+    ln -sv ${geolite-legacy}/share/GeoIP/GeoIPCity.dat		$out/etc/netsniff-ng/city4.dat
+    ln -sv ${geolite-legacy}/share/GeoIP/GeoIPCityv6.dat	$out/etc/netsniff-ng/city6.dat
+    ln -sv ${geolite-legacy}/share/GeoIP/GeoIPASNum.dat		$out/etc/netsniff-ng/asname4.dat
+    ln -sv ${geolite-legacy}/share/GeoIP/GeoIPASNumv6.dat	$out/etc/netsniff-ng/asname6.dat
+    rm -v $out/etc/netsniff-ng/geoip.conf # updating databases after installation is impossible
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Swiss army knife for daily Linux network plumbing";
+    longDescription = ''
+      netsniff-ng is a free Linux networking toolkit. Its gain of performance
+      is reached by zero-copy mechanisms, so that on packet reception and
+      transmission the kernel does not need to copy packets from kernel space
+      to user space and vice versa. The toolkit can be used for network
+      development and analysis, debugging, auditing or network reconnaissance.
+    '';
+    homepage = http://netsniff-ng.org/;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/nettee/default.nix b/nixpkgs/pkgs/tools/networking/nettee/default.nix
new file mode 100644
index 000000000000..d95171807dfa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/nettee/default.nix
@@ -0,0 +1,68 @@
+{ stdenv, lib, fetchurl, cleanPackaging }:
+
+let
+  version = "0.3.4";
+  sha256 = "00xbkp99x9v07r34w7m2p8gak5hdsdbka36n7a733rdrrkgf5z7r";
+
+in stdenv.mkDerivation {
+  pname = "nettee";
+  inherit version;
+
+  src = fetchurl {
+    url = "http://saf.bio.caltech.edu/pub/software/linux_or_unix_tools/beta-nettee-${version}.tar.gz";
+    inherit sha256;
+  };
+
+  meta = {
+    homepage = "http://saf.bio.caltech.edu/nettee.html";
+    description = ''Network "tee" program'';
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [ Profpatsch ];
+    platforms = lib.platforms.linux;
+  };
+
+  outputs = [ "bin" "man" "doc" "out" ];
+
+  patchPhase = ''
+    # h_addr field was removed
+    sed -e '1 i #define h_addr h_addr_list[0]' \
+        -i nettee.c
+  '';
+
+  buildPhase = ''
+    cat README.TXT
+    mkdir -p $bin/bin
+    $CC -o $bin/bin/nettee \
+      -Wall -pedantic -std=c99\
+      -D_LARGEFILE64_SOURCE -D_POSIX_SOURCE -D_XOPEN_SOURCE\
+      nettee.c rb.c nio.c
+  '';
+
+  installPhase = ''
+    ${cleanPackaging.commonFileActions {
+        docFiles = [
+          "*.html"
+          "*.TXT"
+          "LICENSE"
+          "*.sh"
+          "topology.txt"
+          "beowulf.master"
+          "topology_info"
+        ];
+        noiseFiles = [
+          "*.c"
+          "*.h"
+          "nettee"
+        ];
+      }} $doc/share/doc/nettee
+
+    mkdir -p $man/share/man/{man1,man3}
+    mv nettee.1 $man/share/man/man1
+    mv nettee_cmd.3 $man/share/man/man3
+  '';
+
+  postFixup = ''
+    ${cleanPackaging.checkForRemainingFiles}
+  '';
+
+}
diff --git a/nixpkgs/pkgs/tools/networking/network-manager/0.9.8/default.nix b/nixpkgs/pkgs/tools/networking/network-manager/0.9.8/default.nix
new file mode 100644
index 000000000000..131ec6751159
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/network-manager/0.9.8/default.nix
@@ -0,0 +1,64 @@
+{ stdenv, fetchurl, intltool, pkgconfig, dbus-glib
+, udev, libnl, libuuid, gnutls, dhcp
+, libgcrypt, perl, libgudev, avahi, ppp, kmod }:
+
+stdenv.mkDerivation rec {
+  pname = "network-manager";
+  version = "0.9.8.10";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/NetworkManager/0.9/NetworkManager-${version}.tar.xz";
+    sha256 = "0wn9qh8r56r8l19dqr68pdl1rv3zg1dv47rfy6fqa91q7li2fk86";
+  };
+
+  preConfigure = ''
+    substituteInPlace tools/glib-mkenums --replace /usr/bin/perl ${perl}/bin/perl
+    substituteInPlace src/nm-device.c \
+      --replace @avahi@ ${avahi} \
+      --replace @kmod@ ${kmod}
+    substituteInPlace src/ppp-manager/nm-ppp-manager.c \
+      --replace @ppp@ ${ppp} \
+      --replace @kmod@ ${kmod}
+  '';
+
+  # Right now we hardcode quite a few paths at build time. Probably we should
+  # patch networkmanager to allow passing these path in config file. This will
+  # remove unneeded build-time dependencies.
+  configureFlags = [
+    "--with-distro=exherbo"
+    "--with-dhclient=${dhcp}/sbin/dhclient"
+    "--with-dhcpcd=no"
+    "--with-iptables=no"
+    "--with-udev-dir=\${out}/lib/udev"
+    "--with-resolvconf=no"
+    "--sysconfdir=/etc" "--localstatedir=/var"
+    "--with-dbus-sys-dir=\${out}/etc/dbus-1/system.d"
+    "--with-crypto=gnutls" "--disable-more-warnings"
+    "--with-systemdsystemunitdir=$(out)/etc/systemd/system"
+    "--with-kernel-firmware-dir=/run/current-system/firmware"
+    "--disable-ppp"
+  ];
+
+  buildInputs = [ udev libnl libuuid gnutls libgcrypt libgudev ];
+
+  propagatedBuildInputs = [ dbus-glib ];
+
+  nativeBuildInputs = [ intltool pkgconfig ];
+
+  patches =
+    [ ./libnl-3.2.25.patch
+      ./nixos-purity.patch
+    ];
+
+  preInstall =
+    ''
+      installFlagsArray=( "sysconfdir=$out/etc" "localstatedir=$out/var" )
+    '';
+
+  meta = with stdenv.lib; {
+    homepage = http://projects.gnome.org/NetworkManager/;
+    description = "Network configuration and management tool";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/network-manager/0.9.8/libnl-3.2.25.patch b/nixpkgs/pkgs/tools/networking/network-manager/0.9.8/libnl-3.2.25.patch
new file mode 100644
index 000000000000..17c2966b7064
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/network-manager/0.9.8/libnl-3.2.25.patch
@@ -0,0 +1,61 @@
+diff --git a/src/nm-netlink-monitor.c b/src/nm-netlink-monitor.c
+index ba8053e..5ac39d3 100644
+--- a/src/nm-netlink-monitor.c
++++ b/src/nm-netlink-monitor.c
+@@ -177,40 +177,15 @@ link_msg_handler (struct nl_object *obj, void *arg)
+ static int
+ event_msg_recv (struct nl_msg *msg, void *arg)
+ {
+-	struct nl_sock *nlh = arg;
+-	struct nlmsghdr *hdr = nlmsg_hdr (msg);
+ 	struct ucred *creds = nlmsg_get_creds (msg);
+-	const struct sockaddr_nl *snl;
+-	guint32 local_port;
+-	gboolean accept_msg = FALSE;
+-
+-	/* Only messages sent from the kernel */
+-	if (!creds || creds->uid != 0) {
+-		nm_log_dbg (LOGD_HW, "ignoring netlink message from UID %d",
+-		            creds ? creds->uid : -1);
+-		return NL_SKIP;
+-	}
+-
+-	snl = nlmsg_get_src (msg);
+-	g_assert (snl);
+-
+-	/* Accept any messages from the kernel */
+-	if (hdr->nlmsg_pid == 0 || snl->nl_pid == 0)
+-		accept_msg = TRUE;
+ 
+-	/* And any multicast message directed to our netlink PID, since multicast
+-	 * currently requires CAP_ADMIN to use.
+-	 */
+-	local_port = nl_socket_get_local_port (nlh);
+-	if ((hdr->nlmsg_pid == local_port) && snl->nl_groups)
+-		accept_msg = TRUE;
+-
+-	if (accept_msg == FALSE) {
+-		nm_log_dbg (LOGD_HW, "ignoring netlink message from PID %d (local PID %d, multicast %d)",
+-		            hdr->nlmsg_pid,
+-		            local_port,
+-		            (hdr->nlmsg_flags & NLM_F_MULTI));
+-		return NL_SKIP;
++	if (!creds || creds->pid || creds->uid || creds->gid) {
++		if (creds)
++			nm_log_dbg (LOGD_HW, "netlink: received non-kernel message (pid %d uid %d gid %d)",
++			            creds->pid, creds->uid, creds->gid);
++		else
++			nm_log_dbg (LOGD_HW, "netlink: received message without credentials");
++		return NL_STOP;
+ 	}
+ 
+ 	return NL_OK;
+@@ -285,7 +260,7 @@ nlh_setup (struct nl_sock *nlh,
+ {
+ 	int err;
+ 
+-	nl_socket_modify_cb (nlh, NL_CB_MSG_IN, NL_CB_CUSTOM, event_msg_recv, cb_data);
++	nl_socket_modify_cb (nlh, NL_CB_MSG_IN, NL_CB_CUSTOM, event_msg_recv, NULL);
+ 
+ 	if (valid_func)
+ 		nl_socket_modify_cb (nlh, NL_CB_VALID, NL_CB_CUSTOM, valid_func, cb_data);
diff --git a/nixpkgs/pkgs/tools/networking/network-manager/0.9.8/nixos-purity.patch b/nixpkgs/pkgs/tools/networking/network-manager/0.9.8/nixos-purity.patch
new file mode 100644
index 000000000000..9ebc080ba96f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/network-manager/0.9.8/nixos-purity.patch
@@ -0,0 +1,77 @@
+diff --git a/src/dhcp-manager/nm-dhcp-dhclient.c b/src/dhcp-manager/nm-dhcp-dhclient.c
+index 0932139..5b5aee8 100644
+--- a/src/dhcp-manager/nm-dhcp-dhclient.c
++++ b/src/dhcp-manager/nm-dhcp-dhclient.c
+@@ -68,10 +68,6 @@ const char *
+ nm_dhcp_dhclient_get_path (const char *try_first)
+ {
+ 	static const char *dhclient_paths[] = {
+-		"/sbin/dhclient",
+-		"/usr/sbin/dhclient",
+-		"/usr/pkg/sbin/dhclient",
+-		"/usr/local/sbin/dhclient",
+ 		NULL
+ 	};
+ 	const char **path = dhclient_paths;
+diff --git a/src/dhcp-manager/nm-dhcp-dhcpcd.c b/src/dhcp-manager/nm-dhcp-dhcpcd.c
+index 237661f..48bc33f 100644
+--- a/src/dhcp-manager/nm-dhcp-dhcpcd.c
++++ b/src/dhcp-manager/nm-dhcp-dhcpcd.c
+@@ -51,10 +51,6 @@ const char *
+ nm_dhcp_dhcpcd_get_path (const char *try_first)
+ {
+ 	static const char *dhcpcd_paths[] = {
+-		"/sbin/dhcpcd",
+-		"/usr/sbin/dhcpcd",
+-		"/usr/pkg/sbin/dhcpcd",
+-		"/usr/local/sbin/dhcpcd",
+ 		NULL
+ 	};
+ 	const char **path = dhcpcd_paths;
+diff --git a/src/nm-device.c b/src/nm-device.c
+index 1dc94ee..e60f3c8 100644
+--- a/src/nm-device.c
++++ b/src/nm-device.c
+@@ -1321,8 +1321,7 @@ aipd_start (NMDevice *self, NMDeviceStateReason *reason)
+ 	char *argv[6], *cmdline;
+ 	const char **aipd_binary = NULL;
+ 	static const char *aipd_paths[] = {
+-		"/usr/sbin/avahi-autoipd",
+-		"/usr/local/sbin/avahi-autoipd",
++		"@avahi@/sbin/avahi-autoipd",
+ 		NULL
+ 	};
+ 	int i = 0;
+@@ -2555,7 +2554,7 @@ share_init (void)
+ 	}
+ 
+ 	for (iter = modules; *iter; iter++) {
+-		char *argv[3] = { "/sbin/modprobe", *iter, NULL };
++		char *argv[3] = { "@kmod@/bin/modprobe", *iter, NULL };
+ 		char *envp[1] = { NULL };
+ 		GError *error = NULL;
+ 
+diff --git a/src/ppp-manager/nm-ppp-manager.c b/src/ppp-manager/nm-ppp-manager.c
+index 59698c3..7dba0f7 100644
+--- a/src/ppp-manager/nm-ppp-manager.c
++++ b/src/ppp-manager/nm-ppp-manager.c
+@@ -661,9 +661,7 @@ static inline const char *
+ nm_find_pppd (void)
+ {
+ 	static const char *pppd_binary_paths[] = {
+-		"/usr/local/sbin/pppd",
+-		"/usr/sbin/pppd",
+-		"/sbin/pppd",
++		"@ppp@/sbin/pppd",
+ 		NULL
+ 	};
+ 
+@@ -988,7 +986,7 @@ nm_ppp_manager_start (NMPPPManager *manager,
+ 
+ 	/* Make sure /dev/ppp exists (bgo #533064) */
+ 	if (stat ("/dev/ppp", &st) || !S_ISCHR (st.st_mode))
+-		ignored = system ("/sbin/modprobe ppp_generic");
++		ignored = system ("@kmod@/bin/modprobe ppp_generic");
+ 
+ 	connection = nm_act_request_get_connection (req);
+ 	g_assert (connection);
diff --git a/nixpkgs/pkgs/tools/networking/network-manager/applet.nix b/nixpkgs/pkgs/tools/networking/network-manager/applet.nix
new file mode 100644
index 000000000000..69b454ea72ee
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/network-manager/applet.nix
@@ -0,0 +1,60 @@
+{ stdenv, fetchurl, meson, ninja, intltool, gtk-doc, pkgconfig, networkmanager, gnome3
+, libnotify, libsecret, polkit, isocodes, modemmanager, libxml2, docbook_xsl, docbook_xml_dtd_43
+, mobile-broadband-provider-info, glib-networking, gsettings-desktop-schemas
+, libgudev, jansson, wrapGAppsHook, gobject-introspection, python3, gtk3
+, libappindicator-gtk3, withGnome ? true, gcr, glib }:
+
+let
+  pname = "network-manager-applet";
+  version = "1.8.24";
+in stdenv.mkDerivation rec {
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
+    sha256 = "1gzvz4wfqfsfclqg56y954al8x6fmz71cnxlx1i4nqr7a25bp2qi";
+  };
+
+  mesonFlags = [
+    "-Dlibnm_gtk=false" # It is deprecated
+    "-Dselinux=false"
+    "-Dappindicator=yes"
+    "-Dgcr=${if withGnome then "true" else "false"}"
+  ];
+
+  outputs = [ "out" "lib" "dev" "devdoc" "man" ];
+
+  buildInputs = [
+    gtk3 networkmanager libnotify libsecret gsettings-desktop-schemas
+    polkit isocodes mobile-broadband-provider-info libgudev
+    modemmanager jansson glib-networking
+    libappindicator-gtk3 gnome3.adwaita-icon-theme
+  ] ++ stdenv.lib.optionals withGnome [ gcr ]; # advanced certificate chooser
+
+  nativeBuildInputs = [ meson ninja intltool pkgconfig wrapGAppsHook gobject-introspection python3 gtk-doc docbook_xsl docbook_xml_dtd_43 libxml2 ];
+
+  # Needed for wingpanel-indicator-network and switchboard-plug-network
+  patches = [ ./hardcode-gsettings.patch ];
+
+  postPatch = ''
+    chmod +x meson_post_install.py # patchShebangs requires executable file
+    patchShebangs meson_post_install.py
+
+    substituteInPlace src/wireless-security/eap-method.c --subst-var-by NM_APPLET_GSETTINGS ${glib.makeSchemaPath "$lib" name}
+  '';
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+      attrPath = "networkmanagerapplet";
+    };
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://wiki.gnome.org/Projects/NetworkManager;
+    description = "NetworkManager control applet for GNOME";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ phreedom ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/network-manager/default.nix b/nixpkgs/pkgs/tools/networking/network-manager/default.nix
new file mode 100644
index 000000000000..e762ac73844c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/network-manager/default.nix
@@ -0,0 +1,110 @@
+{ stdenv, fetchurl, substituteAll, intltool, pkgconfig, fetchpatch, dbus
+, gnome3, systemd, libuuid, polkit, gnutls, ppp, dhcp, iptables, python3, vala
+, libgcrypt, dnsmasq, bluez5, readline, libselinux, audit
+, gobject-introspection, modemmanager, openresolv, libndp, newt, libsoup
+, ethtool, gnused, iputils, kmod, jansson, gtk-doc, libxslt
+, docbook_xsl, docbook_xml_dtd_412, docbook_xml_dtd_42, docbook_xml_dtd_43
+, openconnect, curl, meson, ninja, libpsl }:
+
+let
+  pythonForDocs = python3.withPackages (pkgs: with pkgs; [ pygobject3 ]);
+in stdenv.mkDerivation rec {
+  pname = "network-manager";
+  version = "1.20.8";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/NetworkManager/${stdenv.lib.versions.majorMinor version}/NetworkManager-${version}.tar.xz";
+    sha256 = "1ijpnx25wy5bcvp4mc49va942q56d0pncpj4jpknpdzwilmf455d";
+  };
+
+  outputs = [ "out" "dev" "devdoc" "man" "doc" ];
+
+  # Right now we hardcode quite a few paths at build time. Probably we should
+  # patch networkmanager to allow passing these path in config file. This will
+  # remove unneeded build-time dependencies.
+  mesonFlags = [
+    "-Ddhclient=${dhcp}/bin/dhclient"
+    "-Ddnsmasq=${dnsmasq}/bin/dnsmasq"
+    # Upstream prefers dhclient, so don't add dhcpcd to the closure
+    "-Ddhcpcd=no"
+    "-Ddhcpcanon=no"
+    "-Dpppd=${ppp}/bin/pppd"
+    "-Diptables=${iptables}/bin/iptables"
+    # to enable link-local connections
+    "-Dudev_dir=${placeholder "out"}/lib/udev"
+    "-Dresolvconf=${openresolv}/bin/resolvconf"
+    "-Ddbus_conf_dir=${placeholder "out"}/share/dbus-1/system.d"
+    "-Dsystemdsystemunitdir=${placeholder "out"}/etc/systemd/system"
+    "-Dkernel_firmware_dir=/run/current-system/firmware"
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+    "-Dcrypto=gnutls"
+    "-Dsession_tracking=systemd"
+    "-Dmodem_manager=true"
+    "-Dpolkit_agent=true"
+    "-Dnmtui=true"
+    "-Ddocs=true"
+    "-Dtests=no"
+    "-Dqt=false"
+    # Allow using iwd when configured to do so
+    "-Diwd=true"
+    "-Dlibaudit=yes-disabled-by-default"
+  ];
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      inherit iputils kmod openconnect ethtool gnused dbus;
+      inherit (stdenv) shell;
+    })
+
+    # Meson does not support using different directories during build and
+    # for installation like Autotools did with flags passed to make install.
+    ./fix-install-paths.patch
+  ];
+
+  buildInputs = [
+    systemd libselinux audit libpsl libuuid polkit ppp libndp curl
+    bluez5 dnsmasq gobject-introspection modemmanager readline newt libsoup jansson
+  ];
+
+  propagatedBuildInputs = [ gnutls libgcrypt ];
+
+  nativeBuildInputs = [
+    meson ninja intltool pkgconfig
+    vala gobject-introspection dbus
+    # Docs
+    gtk-doc libxslt docbook_xsl docbook_xml_dtd_412 docbook_xml_dtd_42 docbook_xml_dtd_43 pythonForDocs
+  ];
+
+  doCheck = false; # requires /sys, the net
+
+  postPatch = ''
+    patchShebangs ./tools
+    patchShebangs libnm/generate-setting-docs.py
+  '';
+
+  preBuild = ''
+    # Our gobject-introspection patches make the shared library paths absolute
+    # in the GIR files. When building docs, the library is not yet installed,
+    # though, so we need to replace the absolute path with a local one during build.
+    # We are using a symlink that will be overridden during installation.
+    mkdir -p ${placeholder "out"}/lib
+    ln -s $PWD/libnm/libnm.so.0 ${placeholder "out"}/lib/libnm.so.0
+  '';
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+      attrPath = "networkmanager";
+    };
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://wiki.gnome.org/Projects/NetworkManager;
+    description = "Network configuration and management tool";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ phreedom domenkozar obadz worldofpeace ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/network-manager/dmenu.nix b/nixpkgs/pkgs/tools/networking/network-manager/dmenu.nix
new file mode 100644
index 000000000000..93a169a3fb0f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/network-manager/dmenu.nix
@@ -0,0 +1,40 @@
+{ stdenv, glib, fetchFromGitHub, networkmanager, python3Packages
+, gobject-introspection }:
+
+let inherit (python3Packages) python pygobject3;
+in stdenv.mkDerivation rec {
+  pname = "networkmanager_dmenu";
+  version = "1.1";
+
+  src = fetchFromGitHub {
+    owner = "firecat53";
+    repo = "networkmanager-dmenu";
+    rev = "v${version}";
+    sha256 = "1z6151z7c4jv5k2i50zr7ld4k3m07dgpmss9f3hsav95cv55dcnb";
+  };
+
+  buildInputs = [ glib python pygobject3 gobject-introspection networkmanager python3Packages.wrapPython ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp networkmanager_dmenu $out/bin/
+  '';
+
+  postFixup = ''
+    makeWrapperArgs="\
+      --prefix GI_TYPELIB_PATH : $GI_TYPELIB_PATH \
+      --prefix PYTHONPATH : \"$(toPythonPath $out):$(toPythonPath ${pygobject3})\""
+    wrapPythonPrograms
+  '';
+
+
+  meta = with stdenv.lib; {
+    description  = "Small script to manage NetworkManager connections with dmenu instead of nm-applet";
+    homepage     = https://github.com/firecat53/networkmanager-dmenu;
+    license      = stdenv.lib.licenses.mit;
+    maintainers  = [ stdenv.lib.maintainers.jensbin ];
+    platforms    = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/network-manager/fix-install-paths.patch b/nixpkgs/pkgs/tools/networking/network-manager/fix-install-paths.patch
new file mode 100644
index 000000000000..5798c1edfb6e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/network-manager/fix-install-paths.patch
@@ -0,0 +1,29 @@
+diff --git a/meson.build b/meson.build
+index 4105a9c80..3d912557f 100644
+--- a/meson.build
++++ b/meson.build
+@@ -884,9 +884,9 @@ meson.add_install_script(
+   join_paths('tools', 'meson-post-install.sh'),
+   nm_datadir,
+   nm_bindir,
+-  nm_pkgconfdir,
++  nm_prefix + nm_pkgconfdir,
+   nm_pkglibdir,
+-  nm_pkgstatedir,
++  nm_prefix + nm_pkgstatedir,
+   enable_docs ? 'install_docs' : '',
+   nm_mandir,
+ )
+diff --git a/src/settings/plugins/ifcfg-rh/meson.build b/src/settings/plugins/ifcfg-rh/meson.build
+index 58acdcfcb..e3a16d597 100644
+--- a/src/settings/plugins/ifcfg-rh/meson.build
++++ b/src/settings/plugins/ifcfg-rh/meson.build
+@@ -69,7 +69,7 @@ install_data(
+ )
+ 
+ meson.add_install_script('sh', '-c',
+-                         'mkdir -p $DESTDIR/@0@/sysconfig/network-scripts'.format(nm_sysconfdir))
++                         'mkdir -p $DESTDIR/@0@/sysconfig/network-scripts'.format(nm_prefix + nm_sysconfdir))
+ 
+ if enable_tests
+   subdir('tests')
diff --git a/nixpkgs/pkgs/tools/networking/network-manager/fix-paths.patch b/nixpkgs/pkgs/tools/networking/network-manager/fix-paths.patch
new file mode 100644
index 000000000000..c45dc174a0df
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/network-manager/fix-paths.patch
@@ -0,0 +1,97 @@
+diff --git a/clients/common/nm-vpn-helpers.c b/clients/common/nm-vpn-helpers.c
+index 204b7c286..8bdb734c2 100644
+--- a/clients/common/nm-vpn-helpers.c
++++ b/clients/common/nm-vpn-helpers.c
+@@ -215,10 +215,7 @@ nm_vpn_openconnect_authenticate_helper (const char *host,
+ 		NULL,
+ 	};
+ 
+-	path = nm_utils_file_search_in_paths ("openconnect", "/usr/sbin/openconnect", DEFAULT_PATHS,
+-	                                      G_FILE_TEST_IS_EXECUTABLE, NULL, NULL, error);
+-	if (!path)
+-		return FALSE;
++	path = "@openconnect@/bin/openconnect";
+ 
+ 	if (!g_spawn_sync (NULL,
+ 	                   (char **) NM_MAKE_STRV (path, "--authenticate", host),
+diff --git a/data/84-nm-drivers.rules b/data/84-nm-drivers.rules
+index e398cb9f2..31c56596a 100644
+--- a/data/84-nm-drivers.rules
++++ b/data/84-nm-drivers.rules
+@@ -7,6 +7,6 @@ ACTION!="add|change", GOTO="nm_drivers_end"
+ # Determine ID_NET_DRIVER if there's no ID_NET_DRIVER or DRIVERS (old udev?)
+ ENV{ID_NET_DRIVER}=="?*", GOTO="nm_drivers_end"
+ DRIVERS=="?*", GOTO="nm_drivers_end"
+-PROGRAM="/bin/sh -c '/usr/sbin/ethtool -i $$1 |/usr/bin/sed -n s/^driver:\ //p' -- $env{INTERFACE}", ENV{ID_NET_DRIVER}="%c"
++PROGRAM="@shell@ -c '@ethtool@/bin/ethtool -i $$1 |@gnused@/bin/sed -n s/^driver:\ //p' -- $env{INTERFACE}", ENV{ID_NET_DRIVER}="%c"
+ 
+ LABEL="nm_drivers_end"
+diff --git a/data/NetworkManager.service.in b/data/NetworkManager.service.in
+index 2f442bf23..c3e797bf4 100644
+--- a/data/NetworkManager.service.in
++++ b/data/NetworkManager.service.in
+@@ -8,7 +8,7 @@ Before=network.target @DISTRO_NETWORK_SERVICE@
+ [Service]
+ Type=dbus
+ BusName=org.freedesktop.NetworkManager
+-ExecReload=/usr/bin/dbus-send --print-reply --system --type=method_call --dest=org.freedesktop.NetworkManager /org/freedesktop/NetworkManager org.freedesktop.NetworkManager.Reload uint32:0
++ExecReload=@dbus@/bin/dbus-send --print-reply --system --type=method_call --dest=org.freedesktop.NetworkManager /org/freedesktop/NetworkManager org.freedesktop.NetworkManager.Reload uint32:0
+ #ExecReload=/bin/kill -HUP $MAINPID
+ ExecStart=@sbindir@/NetworkManager --no-daemon
+ Restart=on-failure
+diff --git a/libnm/meson.build b/libnm/meson.build
+index 710ef181d..3aa182dd4 100644
+--- a/libnm/meson.build
++++ b/libnm/meson.build
+@@ -280,7 +280,7 @@ if enable_introspection
+     name,
+     input: libnm_gir[0],
+     output: name,
+-    command: [generate_setting_docs_env, python.path(), generate_setting_docs, '--lib-path', meson.current_build_dir(), '--gir', '@INPUT@', '--output', '@OUTPUT@'],
++    command: [generate_setting_docs_env, generate_setting_docs, '--lib-path', meson.current_build_dir(), '--gir', '@INPUT@', '--output', '@OUTPUT@'],
+     depends: libnm_gir,
+   )
+ 
+@@ -289,7 +289,7 @@ if enable_introspection
+     name,
+     input: libnm_gir[0],
+     output: name,
+-    command: [generate_setting_docs_env, python.path(), generate_setting_docs, '--lib-path', meson.current_build_dir(), '--gir', '@INPUT@', '--overrides', nm_settings_docs_overrides, '--output', '@OUTPUT@'],
++    command: [generate_setting_docs_env, generate_setting_docs, '--lib-path', meson.current_build_dir(), '--gir', '@INPUT@', '--overrides', nm_settings_docs_overrides, '--output', '@OUTPUT@'],
+     depends: libnm_gir,
+   )
+ endif
+diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c
+index 67e23b8f9..b0ce52711 100644
+--- a/src/devices/nm-device.c
++++ b/src/devices/nm-device.c
+@@ -12840,14 +12840,14 @@ nm_device_start_ip_check (NMDevice *self)
+ 			gw = nm_ip4_config_best_default_route_get (priv->ip_config_4);
+ 			if (gw) {
+ 				nm_utils_inet4_ntop (NMP_OBJECT_CAST_IP4_ROUTE (gw)->gateway, buf);
+-				ping_binary = nm_utils_find_helper ("ping", "/usr/bin/ping", NULL);
++				ping_binary = "@iputils@/bin/ping";
+ 				log_domain = LOGD_IP4;
+ 			}
+ 		} else if (priv->ip_config_6 && priv->ip_state_6 == NM_DEVICE_IP_STATE_DONE) {
+ 			gw = nm_ip6_config_best_default_route_get (priv->ip_config_6);
+ 			if (gw) {
+ 				nm_utils_inet6_ntop (&NMP_OBJECT_CAST_IP6_ROUTE (gw)->gateway, buf);
+-				ping_binary = nm_utils_find_helper ("ping6", "/usr/bin/ping6", NULL);
++				ping_binary = "@iputils@/bin/ping";
+ 				log_domain = LOGD_IP6;
+ 			}
+ 		}
+diff --git a/src/nm-core-utils.c b/src/nm-core-utils.c
+index d896d4d33..4cacb5cb6 100644
+--- a/src/nm-core-utils.c
++++ b/src/nm-core-utils.c
+@@ -446,7 +446,7 @@ nm_utils_modprobe (GError **error, gboolean suppress_error_logging, const char *
+ 
+ 	/* construct the argument list */
+ 	argv = g_ptr_array_sized_new (4);
+-	g_ptr_array_add (argv, "/sbin/modprobe");
++	g_ptr_array_add (argv, "@kmod@/bin/modprobe");
+ 	g_ptr_array_add (argv, "--use-blacklist");
+ 	g_ptr_array_add (argv, (char *) arg1);
+ 
diff --git a/nixpkgs/pkgs/tools/networking/network-manager/fortisslvpn/default.nix b/nixpkgs/pkgs/tools/networking/network-manager/fortisslvpn/default.nix
new file mode 100644
index 000000000000..94a4c4b362ae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/network-manager/fortisslvpn/default.nix
@@ -0,0 +1,56 @@
+{ stdenv, fetchurl, substituteAll, openfortivpn, intltool, pkgconfig, file, gtk3,
+networkmanager, ppp, libsecret, withGnome ? true, gnome3, fetchpatch, networkmanagerapplet }:
+
+let
+  pname = "NetworkManager-fortisslvpn";
+  version = "1.2.10";
+in stdenv.mkDerivation {
+  name = "${pname}${if withGnome then "-gnome" else ""}-${version}";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "1sw66cxgs4in4cjp1cm95c5ijsk8xbbmq4ykg2jwqwgz6cf2lr3s";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      inherit openfortivpn;
+    })
+    # Don't use etc/dbus-1/system.d
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/NetworkManager-fortisslvpn/merge_requests/11.patch";
+      sha256 = "0l7l2r1njh62lh2pf497ibf99sgkvjsj58xr76qx3jxgq9zfw6n9";
+    })
+  ];
+
+  buildInputs = [ openfortivpn networkmanager ppp ]
+    ++ stdenv.lib.optionals withGnome [ gtk3 libsecret networkmanagerapplet ];
+
+  nativeBuildInputs = [ intltool pkgconfig file ];
+
+  configureFlags = [
+    "--without-libnm-glib"
+    "--with-gnome=${if withGnome then "yes" else "no"}"
+    "--localstatedir=/var"
+    "--enable-absolute-paths"
+  ];
+
+  # the installer only create an empty directory in localstatedir, so
+  # we can drop it
+  installFlags = [ "localstatedir=." ];
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+      attrPath = "networkmanager-fortisslvpn";
+    };
+  };
+
+  meta = with stdenv.lib; {
+    description = "NetworkManager's FortiSSL plugin";
+    inherit (networkmanager.meta) maintainers platforms;
+    license = licenses.gpl2;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/networking/network-manager/fortisslvpn/fix-paths.patch b/nixpkgs/pkgs/tools/networking/network-manager/fortisslvpn/fix-paths.patch
new file mode 100644
index 000000000000..a1241b6738c2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/network-manager/fortisslvpn/fix-paths.patch
@@ -0,0 +1,11 @@
+--- a/src/nm-fortisslvpn-service.c
++++ b/src/nm-fortisslvpn-service.c
+@@ -387,7 +387,7 @@
+ {
+ 	static const char *openfortivpn_binary_paths[] =
+ 		{
+-			"/bin/openfortivpn",
++			"@openfortivpn@/bin/openfortivpn",
+ 			"/usr/bin/openfortivpn",
+ 			"/usr/local/bin/openfortivpn",
+ 			NULL
diff --git a/nixpkgs/pkgs/tools/networking/network-manager/hardcode-gsettings.patch b/nixpkgs/pkgs/tools/networking/network-manager/hardcode-gsettings.patch
new file mode 100644
index 000000000000..a480fd6d91e7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/network-manager/hardcode-gsettings.patch
@@ -0,0 +1,32 @@
+diff --git a/src/wireless-security/eap-method.c b/src/wireless-security/eap-method.c
+index 2e9daa23..6663b3ce 100644
+--- a/src/wireless-security/eap-method.c
++++ b/src/wireless-security/eap-method.c
+@@ -265,8 +265,11 @@ eap_method_ca_cert_ignore_get (EAPMethod *method, NMConnection *connection)
+ static GSettings *
+ _get_ca_ignore_settings (NMConnection *connection)
+ {
++	GSettingsSchemaSource *schema_source;
++	g_autoptr (GSettingsSchema) *schema;
+ 	GSettings *settings;
+-	char *path = NULL;
++
++	g_autofree char *path = NULL;
+ 	const char *uuid;
+ 
+ 	g_return_val_if_fail (connection, NULL);
+@@ -274,9 +277,12 @@ _get_ca_ignore_settings (NMConnection *connection)
+ 	uuid = nm_connection_get_uuid (connection);
+ 	g_return_val_if_fail (uuid && *uuid, NULL);
+ 
++	schema_source = g_settings_schema_source_new_from_directory ("@NM_APPLET_GSETTINGS@", g_settings_schema_source_get_default (), TRUE, NULL);
++	schema = g_settings_schema_source_lookup (schema_source, "org.gnome.nm-applet.eap", FALSE);
++	g_settings_schema_source_unref (schema_source);
++
+ 	path = g_strdup_printf ("/org/gnome/nm-applet/eap/%s/", uuid);
+-	settings = g_settings_new_with_path ("org.gnome.nm-applet.eap", path);
+-	g_free (path);
++	settings = g_settings_new_full (schema, NULL, path);
+ 
+ 	return settings;
+ }
diff --git a/nixpkgs/pkgs/tools/networking/network-manager/iodine/default.nix b/nixpkgs/pkgs/tools/networking/network-manager/iodine/default.nix
new file mode 100644
index 000000000000..29c0d550fe2f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/network-manager/iodine/default.nix
@@ -0,0 +1,54 @@
+{ stdenv, fetchurl, substituteAll, iodine, intltool, pkgconfig, networkmanager, libsecret, gtk3
+, withGnome ? true, gnome3, fetchpatch, networkmanagerapplet }:
+
+let
+  pname = "NetworkManager-iodine";
+  version = "1.2.0";
+in stdenv.mkDerivation {
+  name = "${pname}${if withGnome then "-gnome" else ""}-${version}";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "0njdigakidji6mfmbsp8lfi8wl88z1dk8cljbva2w0xazyddbwyh";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      inherit iodine;
+    })
+    # Don't use etc/dbus-1/system.d
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/network-manager-iodine/merge_requests/2.patch";
+      sha256 = "108pkf0mddj32s46k7jkmpwcaq2ylci4dqpp7wck3zm9q2jffff2";
+    })
+  ];
+
+  buildInputs = [ iodine networkmanager ]
+    ++ stdenv.lib.optionals withGnome [ gtk3 libsecret networkmanagerapplet ];
+
+  nativeBuildInputs = [ intltool pkgconfig ];
+
+  # glib-2.62 deprecations
+  NIX_CFLAGS_COMPILE = "-DGLIB_DISABLE_DEPRECATION_WARNINGS";
+
+  configureFlags = [
+    "--without-libnm-glib"
+    "--with-gnome=${if withGnome then "yes" else "no"}"
+    "--localstatedir=/" # needed for the management socket under /run/NetworkManager
+    "--enable-absolute-paths"
+  ];
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+      attrPath = "networkmanager-iodine";
+    };
+  };
+
+  meta = with stdenv.lib; {
+    description = "NetworkManager's iodine plugin";
+    inherit (networkmanager.meta) maintainers platforms;
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/network-manager/iodine/fix-paths.patch b/nixpkgs/pkgs/tools/networking/network-manager/iodine/fix-paths.patch
new file mode 100644
index 000000000000..d32dbfadbafa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/network-manager/iodine/fix-paths.patch
@@ -0,0 +1,11 @@
+--- a/src/nm-iodine-service.c
++++ b/src/nm-iodine-service.c
+@@ -62,7 +62,7 @@
+ 
+ static const char *iodine_binary_paths[] =
+ {
+-	"/usr/bin/iodine",
++	"@iodine@/bin/iodine",
+ 	"/usr/sbin/iodine",
+ 	"/usr/local/bin/iodine",
+ 	"/usr/local/sbin/iodine",
diff --git a/nixpkgs/pkgs/tools/networking/network-manager/l2tp/default.nix b/nixpkgs/pkgs/tools/networking/network-manager/l2tp/default.nix
new file mode 100644
index 000000000000..e4ab74f08e35
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/network-manager/l2tp/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, substituteAll, fetchFromGitHub, autoreconfHook, libtool, intltool, pkgconfig
+, file, findutils
+, gtk3, networkmanager, ppp, xl2tpd, strongswan, libsecret
+, withGnome ? true, networkmanagerapplet }:
+
+stdenv.mkDerivation rec {
+  name = "${pname}${if withGnome then "-gnome" else ""}-${version}";
+  pname = "NetworkManager-l2tp";
+  version = "1.2.12";
+
+  src = fetchFromGitHub {
+    owner = "nm-l2tp";
+    repo = "network-manager-l2tp";
+    rev = version;
+    sha256 = "0cq07kvlm98s8a7l4a3zmqnif8x3307kv7n645zx3f1r7x72b8m4";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      inherit strongswan xl2tpd;
+    })
+  ];
+
+  buildInputs = [ networkmanager ppp ]
+    ++ stdenv.lib.optionals withGnome [ gtk3 libsecret networkmanagerapplet ];
+
+  nativeBuildInputs = [ autoreconfHook libtool intltool pkgconfig file findutils ];
+
+  preConfigure = ''
+    intltoolize -f
+  '';
+
+  configureFlags = [
+    "--without-libnm-glib"
+    "--with-gnome=${if withGnome then "yes" else "no"}"
+    "--localstatedir=/var"
+    "--sysconfdir=$(out)/etc"
+    "--enable-absolute-paths"
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "L2TP plugin for NetworkManager";
+    inherit (networkmanager.meta) platforms;
+    homepage = https://github.com/nm-l2tp/network-manager-l2tp;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ abbradar obadz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/network-manager/l2tp/fix-paths.patch b/nixpkgs/pkgs/tools/networking/network-manager/l2tp/fix-paths.patch
new file mode 100644
index 000000000000..531672c39362
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/network-manager/l2tp/fix-paths.patch
@@ -0,0 +1,22 @@
+diff --git a/shared/utils.c b/shared/utils.c
+index c978a1f..d2c36cd 100644
+--- a/shared/utils.c
++++ b/shared/utils.c
+@@ -52,7 +52,7 @@ nm_find_ipsec (void)
+ {
+ 	static const char *ipsec_binary_paths[] =
+ 		{
+-			"/sbin/ipsec",
++			"@strongswan@/bin/ipsec",
+ 			"/usr/sbin/ipsec",
+ 			"/usr/local/sbin/ipsec",
+ 			"/sbin/strongswan",
+@@ -77,7 +77,7 @@ nm_find_l2tpd (void)
+ {
+ 	static const char *l2tp_binary_paths[] =
+ 		{
+-			"/sbin/xl2tpd",
++			"@xl2tpd@/bin/xl2tpd",
+ 			"/usr/sbin/xl2tpd",
+ 			"/usr/local/sbin/xl2tpd",
+ 			NULL
diff --git a/nixpkgs/pkgs/tools/networking/network-manager/openconnect/default.nix b/nixpkgs/pkgs/tools/networking/network-manager/openconnect/default.nix
new file mode 100644
index 000000000000..3c1a8d110429
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/network-manager/openconnect/default.nix
@@ -0,0 +1,80 @@
+{ stdenv
+, fetchurl
+, substituteAll
+, glib
+, libxml2
+, openconnect
+, intltool
+, pkgconfig
+, autoreconfHook
+, networkmanager
+, gcr
+, libsecret
+, file
+, gtk3
+, withGnome ? true
+, gnome3
+, kmod
+, fetchpatch
+}:
+
+let
+  pname = "NetworkManager-openconnect";
+  version = "1.2.6";
+in stdenv.mkDerivation {
+  name = "${pname}${if withGnome then "-gnome" else ""}-${version}";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "0nlp290nkawc4wqm978n4vhzg3xdqi8kpjjx19l855vab41rh44m";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      inherit kmod openconnect;
+    })
+
+    # Don't use etc/dbus-1/system.d
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/NetworkManager-openconnect/merge_requests/9.patch";
+      sha256 = "0yd2dmq6gq6y4czr7dqdgaiqvw2vyv2gikznpfdxyfn2v1pcrk9m";
+    })
+  ];
+
+  buildInputs = [
+    glib
+    libxml2
+    openconnect
+    networkmanager
+  ] ++ stdenv.lib.optionals withGnome [
+    gtk3
+    gcr
+    libsecret
+  ];
+
+  nativeBuildInputs = [
+    intltool
+    pkgconfig
+    file
+  ];
+
+  configureFlags = [
+    "--with-gnome=${if withGnome then "yes" else "no"}"
+    "--enable-absolute-paths"
+    "--without-libnm-glib"
+  ];
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+      attrPath = "networkmanager-openconnect";
+    };
+  };
+
+  meta = with stdenv.lib; {
+    description = "NetworkManager’s OpenConnect plugin";
+    inherit (networkmanager.meta) maintainers platforms;
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/network-manager/openconnect/fix-paths.patch b/nixpkgs/pkgs/tools/networking/network-manager/openconnect/fix-paths.patch
new file mode 100644
index 000000000000..9b342f5bd08b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/network-manager/openconnect/fix-paths.patch
@@ -0,0 +1,20 @@
+--- a/src/nm-openconnect-service.c
++++ b/src/nm-openconnect-service.c
+@@ -60,7 +60,7 @@
+ 
+ static const char *openconnect_binary_paths[] =
+ {
+-	"/usr/bin/openconnect",
++	"@openconnect@/bin/openconnect",
+ 	"/usr/sbin/openconnect",
+ 	"/usr/local/bin/openconnect",
+ 	"/usr/local/sbin/openconnect",
+@@ -734,7 +734,7 @@
+ 
+ 	_LOGD ("nm-openconnect-service (version " DIST_VERSION ") starting...");
+ 
+-	if (system ("/sbin/modprobe tun") == -1)
++	if (system ("@kmod@/bin/modprobe tun") == -1)
+ 		exit (EXIT_FAILURE);
+ 
+ 	if (bus_name)
diff --git a/nixpkgs/pkgs/tools/networking/network-manager/openvpn/default.nix b/nixpkgs/pkgs/tools/networking/network-manager/openvpn/default.nix
new file mode 100644
index 000000000000..2762b12a364a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/network-manager/openvpn/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, fetchurl, substituteAll, openvpn, intltool, libxml2, pkgconfig, file, networkmanager, libsecret
+, gtk3, withGnome ? true, gnome3, kmod, fetchpatch, networkmanagerapplet }:
+
+let
+  pname = "NetworkManager-openvpn";
+  version = "1.8.10";
+in stdenv.mkDerivation {
+  name = "${pname}${if withGnome then "-gnome" else ""}-${version}";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "1vri49yff4lj13dnzkpq9nx3a4z1bmbrv807r151plj8m1mwhg5g";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      inherit kmod openvpn;
+    })
+    # Don't use etc/dbus-1/system.d
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/NetworkManager-openvpn/merge_requests/13.patch";
+      sha256 = "06cvqi28v72dd53fw8ix95mqj885xhwi8qcs2q7hvm5bvnhwn704";
+    })
+  ];
+
+  buildInputs = [ openvpn networkmanager ]
+    ++ stdenv.lib.optionals withGnome [ gtk3 libsecret networkmanagerapplet ];
+
+  nativeBuildInputs = [ intltool pkgconfig file libxml2 ];
+
+  configureFlags = [
+    "--without-libnm-glib"
+    "--with-gnome=${if withGnome then "yes" else "no"}"
+    "--localstatedir=/" # needed for the management socket under /run/NetworkManager
+    "--enable-absolute-paths"
+  ];
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+      attrPath = "networkmanager-openvpn";
+    };
+  };
+
+  meta = with stdenv.lib; {
+    description = "NetworkManager's OpenVPN plugin";
+    inherit (networkmanager.meta) maintainers platforms;
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/network-manager/openvpn/fix-paths.patch b/nixpkgs/pkgs/tools/networking/network-manager/openvpn/fix-paths.patch
new file mode 100644
index 000000000000..b735da28dca1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/network-manager/openvpn/fix-paths.patch
@@ -0,0 +1,34 @@
+--- a/properties/nm-openvpn-editor.c
++++ b/properties/nm-openvpn-editor.c
+@@ -775,8 +775,7 @@
+ nm_find_openvpn (void)
+ {
+ 	static const char *openvpn_binary_paths[] = {
+-		"/usr/sbin/openvpn",
+-		"/sbin/openvpn",
++		"@openvpn@/bin/openvpn",
+ 		NULL
+ 	};
+ 	const char  **openvpn_binary = openvpn_binary_paths;
+--- a/src/nm-openvpn-service.c
++++ b/src/nm-openvpn-service.c
+@@ -522,9 +522,7 @@
+ openvpn_binary_find_exepath (void)
+ {
+ 	static const char *paths[] = {
+-		"/usr/sbin/openvpn",
+-		"/sbin/openvpn",
+-		"/usr/local/sbin/openvpn",
++		"@openvpn@/bin/openvpn",
+ 	};
+ 	int i;
+ 
+@@ -2326,7 +2324,7 @@
+ 	_LOGD ("nm-openvpn-service (version " DIST_VERSION ") starting...");
+ 
+ 	if (   !g_file_test ("/sys/class/misc/tun", G_FILE_TEST_EXISTS)
+-	    && (system ("/sbin/modprobe tun") == -1))
++	    && (system ("@kmod@/bin/modprobe tun") == -1))
+ 		return EXIT_FAILURE;
+ 
+ 	plugin = nm_openvpn_plugin_new (bus_name);
diff --git a/nixpkgs/pkgs/tools/networking/network-manager/strongswan.nix b/nixpkgs/pkgs/tools/networking/network-manager/strongswan.nix
new file mode 100644
index 000000000000..843985bfa3e4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/network-manager/strongswan.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, intltool, pkgconfig, networkmanager, strongswanNM
+, gtk3, gnome3, libsecret, networkmanagerapplet }:
+
+stdenv.mkDerivation rec {
+  pname = "NetworkManager-strongswan";
+  version = "1.4.5";
+
+  src = fetchurl {
+    url = "https://download.strongswan.org/NetworkManager/${pname}-${version}.tar.bz2";
+    sha256 = "015xcj42pd84apa0j0n9r3fhldp42mj72dqvl2xf4r9gwg5nhfrl";
+  };
+
+  buildInputs = [ networkmanager strongswanNM libsecret gtk3 networkmanagerapplet ];
+
+  nativeBuildInputs = [ intltool pkgconfig ];
+
+  # glib-2.62 deprecations
+  NIX_CFLAGS_COMPILE = "-DGLIB_DISABLE_DEPRECATION_WARNINGS";
+
+  configureFlags = [
+    "--without-libnm-glib"
+    "--with-charon=${strongswanNM}/libexec/ipsec/charon-nm"
+    "--with-nm-libexecdir=$(out)/libexec"
+    "--with-nm-plugindir=$(out)/lib/NetworkManager"
+  ];
+
+  PKG_CONFIG_LIBNM_VPNSERVICEDIR = "$(out)/lib/NetworkManager/VPN";
+
+  meta = with stdenv.lib; {
+    description = "NetworkManager's strongswan plugin";
+    inherit (networkmanager.meta) platforms;
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/network-manager/vpnc/default.nix b/nixpkgs/pkgs/tools/networking/network-manager/vpnc/default.nix
new file mode 100644
index 000000000000..663923255745
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/network-manager/vpnc/default.nix
@@ -0,0 +1,49 @@
+{ stdenv, fetchurl, substituteAll, vpnc, intltool, pkgconfig, networkmanager, libsecret
+, gtk3, withGnome ? true, gnome3, kmod, file, fetchpatch, networkmanagerapplet }:
+let
+  pname = "NetworkManager-vpnc";
+  version = "1.2.6";
+in stdenv.mkDerivation {
+  name = "${pname}${if withGnome then "-gnome" else ""}-${version}";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "1js5lwcsqws4klgypfxl4ikmakv7v7xgddij1fj6b0y0qicx0kyy";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      inherit vpnc kmod;
+    })
+    # Don't use etc/dbus-1/system.d
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/NetworkManager-vpnc/merge_requests/5.patch";
+      sha256 = "0z0x5vqmrsap3ynamhya7gh6c6k5grhj2vqpy76alnv9xns8dzi6";
+    })
+  ];
+
+  buildInputs = [ vpnc networkmanager ]
+    ++ stdenv.lib.optionals withGnome [ gtk3 libsecret networkmanagerapplet ];
+
+  nativeBuildInputs = [ intltool pkgconfig file ];
+
+  configureFlags = [
+    "--without-libnm-glib"
+    "--with-gnome=${if withGnome then "yes" else "no"}"
+    "--enable-absolute-paths"
+  ];
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+      attrPath = "networkmanager-vpnc";
+    };
+  };
+
+  meta = with stdenv.lib; {
+    description = "NetworkManager's VPNC plugin";
+    inherit (networkmanager.meta) maintainers platforms;
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/network-manager/vpnc/fix-paths.patch b/nixpkgs/pkgs/tools/networking/network-manager/vpnc/fix-paths.patch
new file mode 100644
index 000000000000..98238ac01f76
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/network-manager/vpnc/fix-paths.patch
@@ -0,0 +1,31 @@
+--- a/properties/nm-vpnc-editor-plugin.c
++++ b/properties/nm-vpnc-editor-plugin.c
+@@ -161,7 +161,7 @@
+ 	GError *error = NULL;
+ 
+ 	const char *decrypt_possible_paths[] = {
+-		"/usr/lib/vpnc/cisco-decrypt",
++		"@vpnc@/bin/cisco-decrypt",
+ 		"/usr/bin/cisco-decrypt",
+ 		NULL
+ 	};
+--- a/src/nm-vpnc-service.c
++++ b/src/nm-vpnc-service.c
+@@ -610,7 +610,7 @@
+ find_vpnc (void)
+ {
+ 	static const char *vpnc_paths[] = {
+-		"/usr/sbin/vpnc",
++		"@vpnc@/bin/vpnc",
+ 		"/sbin/vpnc",
+ 		"/usr/local/sbin/vpnc",
+ 		NULL
+@@ -1308,7 +1308,7 @@
+ 	_LOGD ("   vpnc interactive mode is %s", interactive_available ? "enabled" : "disabled");
+ 	_LOGD ("   uses%s --bus-name \"%s\"", bus_name_free ? "" : " default", bus_name);
+ 
+-	if (system ("/sbin/modprobe tun") == -1)
++	if (system ("@kmod@/bin/modprobe tun") == -1)
+ 		exit (EXIT_FAILURE);
+ 
+ 	plugin = nm_vpnc_plugin_new (bus_name);
diff --git a/nixpkgs/pkgs/tools/networking/nfdump/default.nix b/nixpkgs/pkgs/tools/networking/nfdump/default.nix
new file mode 100644
index 000000000000..0ae309cf94d9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/nfdump/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, fetchFromGitHub
+, autoconf, automake, libtool, pkg-config
+, bzip2, libpcap, flex, yacc }:
+
+let version = "1.6.18"; in
+
+stdenv.mkDerivation {
+  pname = "nfdump";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "phaag";
+    repo = "nfdump";
+    rev = "v${version}";
+    sha256 = "0hfgj9lghkjrjxww0jdk8gxr6g4gbmbdmfg9ddg5jj6gcra21gha";
+  };
+
+  nativeBuildInputs = [ autoconf automake flex libtool pkg-config yacc ];
+  buildInputs = [ bzip2 libpcap ];
+
+  preConfigure = ''
+    # The script defaults to glibtoolize on darwin, so we pass the correct
+    # name explicitly.
+    LIBTOOLIZE=libtoolize ./autogen.sh
+  '';
+
+  configureFlags = [
+    "--enable-nsel"
+    "--enable-sflow"
+    "--enable-readpcap"
+    "--enable-nfpcapd"
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Tools for working with netflow data";
+    longDescription = ''
+      nfdump is a set of tools for working with netflow data.
+    '';
+    homepage = https://github.com/phaag/nfdump;
+    license = licenses.bsd3;
+    maintainers = [ maintainers.takikawa ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/nfstrace/default.nix b/nixpkgs/pkgs/tools/networking/nfstrace/default.nix
new file mode 100644
index 000000000000..88510b9b8876
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/nfstrace/default.nix
@@ -0,0 +1,42 @@
+{ cmake, fetchFromGitHub, fetchpatch, json_c, libpcap, ncurses, stdenv }:
+
+stdenv.mkDerivation rec {
+  pname = "nfstrace";
+  version = "0.4.3.2";
+
+  src = fetchFromGitHub {
+    owner = "epam";
+    repo = "nfstrace";
+    rev = "${version}";
+    sha256 = "1djsyn7i3xp969rnmsdaf5vwjiik9wylxxrc5nm7by00i76c1vsg";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://salsa.debian.org/debian/nfstrace/raw/debian/0.4.3.1-3/debian/patches/reproducible_build.patch";
+      sha256 = "0fd96r8xi142kjwibqkd46s6jwsg5kfc5v28bqsj9rdlc2aqmay5";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace CMakeLists.txt \
+      --replace "-Wno-braced-scalar-init" ""
+  '';
+
+  buildInputs = [ json_c libpcap ncurses ];
+  nativeBuildInputs = [ cmake ];
+
+  # To build with GCC 8+ it needs:
+  CXXFLAGS = "-Wno-class-memaccess -Wno-ignored-qualifiers";
+  # CMake can't find json_c without:
+  NIX_CFLAGS_COMPILE = [ "-I${json_c.dev}/include/json-c" "-Wno-error=address-of-packed-member" ];
+
+  doCheck = false; # requires network access
+
+  meta = with stdenv.lib; {
+    homepage = "http://epam.github.io/nfstrace/";
+    description = "NFS and CIFS tracing/monitoring/capturing/analyzing tool";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ngrep/default.nix b/nixpkgs/pkgs/tools/networking/ngrep/default.nix
new file mode 100644
index 000000000000..ab8da6236cff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ngrep/default.nix
@@ -0,0 +1,54 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, autoreconfHook, libpcap, pcre }:
+
+stdenv.mkDerivation rec {
+  pname = "ngrep";
+  version = "1.47";
+
+  src = fetchFromGitHub {
+    owner = "jpr5";
+    repo = "ngrep";
+    rev = "V${lib.replaceStrings ["."] ["_"] version}";
+    sha256 = "1x2fyd7wdqlj1r76ilal06cl2wmbz0ws6i3ys204sbjh1cj6dcl7";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://patch-diff.githubusercontent.com/raw/jpr5/ngrep/pull/11.patch";
+      sha256 = "0k5qzvj8j3r1409qwwvzp7m3clgs2g7hs4q68bhrqbrsvvb2h5dh";
+    })
+  ];
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ libpcap pcre ];
+
+  configureFlags = [
+    "--enable-ipv6"
+    "--enable-pcre"
+    "--disable-pcap-restart"
+    "--with-pcap-includes=${libpcap}/include"
+  ];
+
+  preConfigure = ''
+    sed -i "s|BPF=.*|BPF=${libpcap}/include/pcap/bpf.h|" configure
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Network packet analyzer";
+    longDescription = ''
+      ngrep strives to provide most of GNU grep's common features, applying
+      them to the network layer. ngrep is a pcap-aware tool that will allow you
+      to specify extended regular or hexadecimal expressions to match against
+      data payloads of packets. It currently recognizes IPv4/6, TCP, UDP,
+      ICMPv4/6, IGMP and Raw across Ethernet, PPP, SLIP, FDDI, Token Ring and
+      null interfaces, and understands BPF filter logic in the same fashion as
+      more common packet sniffing tools, such as tcpdump and snoop.
+    '';
+    homepage = https://github.com/jpr5/ngrep/;
+    # <ngrep>/doc/README.txt says that ngrep itself is licensed under a
+    # 'BSD-like' license but that the 'regex' library (in the ngrep tarball) is
+    # GPLv2.
+    license = "ngrep";  # Some custom BSD-style, see LICENSE.txt
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ngrok-1/default.nix b/nixpkgs/pkgs/tools/networking/ngrok-1/default.nix
new file mode 100644
index 000000000000..19ae72aaac0d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ngrok-1/default.nix
@@ -0,0 +1,35 @@
+{ buildGoPackage, go-bindata, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "ngrok";
+  version = "1.7.1";
+  rev = version;
+
+  goPackagePath = "ngrok";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "inconshreveable";
+    repo = "ngrok";
+    sha256 = "1r4nc9knp0nxg4vglg7v7jbyd1nh1j2590l720ahll8a4fbsx5a4";
+  };
+
+  goDeps = ./deps.nix;
+
+  buildInputs = [ go-bindata ];
+
+  preConfigure = ''
+    sed -e '/jteeuwen\/go-bindata/d' \
+        -e '/export GOPATH/d' \
+        -e 's/go get/#go get/' \
+        -e 's|bin/go-bindata|go-bindata|' -i Makefile
+    make assets BUILDTAGS=release
+    export sourceRoot=$sourceRoot/src/ngrok
+  '';
+
+  buildFlags = [ "-tags release" ];
+
+  meta = {
+    homepage = https://ngrok.com/;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ngrok-1/deps.nix b/nixpkgs/pkgs/tools/networking/ngrok-1/deps.nix
new file mode 100644
index 000000000000..1db3c3e65191
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ngrok-1/deps.nix
@@ -0,0 +1,101 @@
+[
+  {
+    goPackagePath = "github.com/gorilla/websocket";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gorilla/websocket";
+      rev = "a622679ebd7a3b813862379232f645f8e690e43f";
+      sha256 = "1nc9jbcmgya1i6dmf6sbcqsnxi9hbjg6dz1z0k7zmc6xdwlq0y4q";
+    };
+  }
+  {
+    goPackagePath = "github.com/rcrowley/go-metrics";
+    fetch = {
+      type = "git";
+      url = "https://github.com/rcrowley/go-metrics";
+      rev = "1ce93efbc8f9c568886b2ef85ce305b2217b3de3";
+      sha256 = "06gg72krlmd0z3zdq6s716blrga95pyj8dc2f2psfbknbkyrkfqa";
+    };
+  }
+  {
+    goPackagePath = "github.com/inconshreveable/go-vhost";
+    fetch = {
+      type = "git";
+      url = "https://github.com/inconshreveable/go-vhost";
+      rev = "c4c28117502e4bf00960c8282b2d1c51c865fe2c";
+      sha256 = "1rway6sls6fl2s2jk20ajj36rrlzh9944ncc9pdd19kifix54z32";
+    };
+  }
+  {
+    goPackagePath = "code.google.com/p/log4go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ccpaging/log4go";
+      rev = "cb4cc51cd03958183d3b637d0750497d88c2f7a8";
+      sha256 = "0l9f86zzhla9hq35q4xhgs837283qrm4gxbp5lrwwls54ifiq7k2";
+    };
+  }
+  {
+    goPackagePath = "github.com/daviddengcn/go-colortext";
+    fetch = {
+      type = "git";
+      url = "https://github.com/daviddengcn/go-colortext";
+      rev = "13eaeb896f5985a1ab74ddea58707a73d875ba57";
+      sha256 = "0618xs9lc5xfp5zkkb5j47dr7i30ps3zj5fj0zpv8afqh2cc689x";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/yaml.v1";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-yaml/yaml";
+      rev = "b0c168ac0cf9493da1f9bb76c34b26ffef940b4a";
+      sha256 = "0jbdy41pplf2d1j24qwr8gc5qsig6ai5ch8rwgvg72kq9q0901cy";
+    };
+  }
+  {
+    goPackagePath = "github.com/inconshreveable/mousetrap";
+    fetch = {
+      type = "git";
+      url = "https://github.com/inconshreveable/mousetrap";
+      rev = "9dbb96d2c3a964935b0870b5abaea13c98b483aa";
+      sha256 = "1f9g8vm18qv1rcb745a4iahql9vfrz0jni9mnzriab2wy1pfdl5b";
+    };
+  }
+  {
+    goPackagePath = "github.com/nsf/termbox-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/nsf/termbox-go";
+      rev = "9aecf65084a5754f12d27508fa2e6ed56851953b";
+      sha256 = "16sak07bgvmax4zxfrd4jia1dgygk733xa8vk8cdx28z98awbfsh";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/inconshreveable/go-update.v0";
+    fetch = {
+      type = "git";
+      url = "https://github.com/inconshreveable/go-update";
+      rev = "d8b0b1d421aa1cbf392c05869f8abbc669bb7066";
+      sha256 = "0cvkik2w368fzimx3y29ncfgw7004qkbdf2n3jy5czvzn35q7dpa";
+    };
+  }
+  {
+    goPackagePath = "github.com/kardianos/osext";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kardianos/osext";
+      rev = "29ae4ffbc9a6fe9fb2bc5029050ce6996ea1d3bc";
+      sha256 = "1mawalaz84i16njkz6f9fd5jxhcbxkbsjnav3cmqq2dncv2hyv8a";
+    };
+  }
+  {
+    goPackagePath = "github.com/kr/binarydist";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kr/binarydist";
+      rev = "9955b0ab8708602d411341e55fffd7e0700f86bd";
+      sha256 = "11wncbbbrdcxl5ff3h6w8vqfg4bxsf8709mh6vda0cv236flkyn3";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/networking/ngrok-2/default.nix b/nixpkgs/pkgs/tools/networking/ngrok-2/default.nix
new file mode 100644
index 000000000000..a0d6171efe21
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ngrok-2/default.nix
@@ -0,0 +1,49 @@
+{ stdenv, fetchurl, patchelfUnstable }:
+
+with stdenv.lib;
+
+let versions = builtins.fromJSON (builtins.readFile ./versions.json);
+    arch = if stdenv.isi686 then "386"
+           else if stdenv.isx86_64 then "amd64"
+           else if stdenv.isAarch32 then "arm"
+           else if stdenv.isAarch64 then "arm64"
+           else throw "Unsupported architecture";
+    os = if stdenv.isLinux then "linux"
+         else if stdenv.isDarwin then "darwin"
+         else throw "Unsupported os";
+    versionInfo = versions."${os}-${arch}";
+    inherit (versionInfo) version sha256 url;
+
+in
+stdenv.mkDerivation {
+  name = "ngrok-${version}";
+  version = version;
+
+  # run ./update
+  src = fetchurl { inherit sha256 url; };
+
+  sourceRoot = ".";
+
+  nativeBuildInputs = optionals stdenv.isLinux [ patchelfUnstable ];
+
+  unpackPhase = "cp $src ngrok";
+
+  buildPhase = "chmod a+x ngrok";
+
+  installPhase = ''
+    install -D ngrok $out/bin/ngrok
+  '';
+
+  passthru.updateScript = ./update.sh;
+
+  meta = {
+    description = "ngrok";
+    longDescription = ''
+      Allows you to expose a web server running on your local machine to the internet.
+    '';
+    homepage = https://ngrok.com/;
+    license = licenses.unfree;
+    platforms = [ "i686-linux" "x86_64-linux" "aarch64-linux" "x86_64-darwin" ];
+    maintainers = [ maintainers.bobvanderlinden ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ngrok-2/update.sh b/nixpkgs/pkgs/tools/networking/ngrok-2/update.sh
new file mode 100755
index 000000000000..7908a1524e59
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ngrok-2/update.sh
@@ -0,0 +1,33 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -p httpie
+#!nix-shell -p jq
+#!nix-shell -i bash
+
+set -eu -o pipefail
+
+get_download_info() {
+    http --body \
+         https://update.equinox.io/check \
+         'Accept:application/json; q=1; version=1; charset=utf-8' \
+         'Content-Type:application/json; charset=utf-8' \
+         app_id=app_goVRodbMVm \
+         channel=stable \
+         os=$1 \
+         goarm= \
+         arch=$2 \
+    | jq --arg sys "$1-$2" '{
+        sys: $sys,
+        url: .download_url,
+        sha256: .checksum,
+        version: .release.version
+    }'
+}
+
+(
+    get_download_info linux 386
+    get_download_info linux amd64
+    get_download_info linux arm
+    get_download_info linux arm64
+    get_download_info darwin amd64
+) | jq --slurp 'map ({ (.sys): . }) | add' \
+    > pkgs/tools/networking/ngrok-2/versions.json
diff --git a/nixpkgs/pkgs/tools/networking/ngrok-2/versions.json b/nixpkgs/pkgs/tools/networking/ngrok-2/versions.json
new file mode 100644
index 000000000000..656e6a640e53
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ngrok-2/versions.json
@@ -0,0 +1,32 @@
+{
+  "linux-386": {
+    "sys": "linux-386",
+    "url": "https://bin.equinox.io/a/bjFaKy3TSAg/ngrok-2.3.35-linux-386",
+    "sha256": "1fdd1c057c3c31044400ef6ade20ad3f10bce415ad33ccfb4bc2fd83bb36f62f",
+    "version": "2.3.35"
+  },
+  "linux-amd64": {
+    "sys": "linux-amd64",
+    "url": "https://bin.equinox.io/a/52fZaxjGg9n/ngrok-2.3.35-linux-amd64",
+    "sha256": "b456608239cdf4b5119916c62a87640667d1cb1900c53faed89e3dacc1fe4679",
+    "version": "2.3.35"
+  },
+  "linux-arm": {
+    "sys": "linux-arm",
+    "url": "https://bin.equinox.io/a/2cUd5mRRjoF/ngrok-2.3.35-linux-arm",
+    "sha256": "94d88311e9b2baea615d9fe7c6921ac0167040ec66aa0d0cbb856c027d617f1f",
+    "version": "2.3.35"
+  },
+  "linux-arm64": {
+    "sys": "linux-arm64",
+    "url": "https://bin.equinox.io/a/k2qx6ipHqpb/ngrok-2.3.35-linux-arm64",
+    "sha256": "fd07f5c449f1c1444606bbc9d06fa6b649325ddf0b3e6dac6f32d785a886f170",
+    "version": "2.3.35"
+  },
+  "darwin-amd64": {
+    "sys": "darwin-amd64",
+    "url": "https://bin.equinox.io/a/jKkD2Wcds2L/ngrok-2.3.35-darwin-amd64",
+    "sha256": "dd74a6be1a155c41ff06aadad910196cae13e06ab997bc0b144288b2da568f2a",
+    "version": "2.3.35"
+  }
+}
diff --git a/nixpkgs/pkgs/tools/networking/noip/default.nix b/nixpkgs/pkgs/tools/networking/noip/default.nix
new file mode 100644
index 000000000000..0ef2ce508671
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/noip/default.nix
@@ -0,0 +1,27 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation {
+  name = "noip-2.1.9-1";
+
+  src = fetchurl {
+    url = https://www.noip.com/client/linux/noip-duc-linux.tar.gz;
+    sha256 = "82b9bafab96a0c53b21aaef688bf70b3572e26217b5e2072bdb09da3c4a6f593";
+  };
+
+  makeFlags = [ "PREFIX=\${out}" ];
+  installPhase =
+    ''
+      mkdir -p $out/bin
+      cp noip2 $out/bin
+    '';
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "Dynamic DNS daemon for no-ip accounts";
+    homepage = http://noip.com/download?page=linux;
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = [ stdenv.lib.maintainers.iand675 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/nss-mdns/default.nix b/nixpkgs/pkgs/tools/networking/nss-mdns/default.nix
new file mode 100644
index 000000000000..9f83949e8de0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/nss-mdns/default.nix
@@ -0,0 +1,51 @@
+{ fetchurl, stdenv, fetchpatch }:
+
+stdenv.mkDerivation rec {
+  name = "nss-mdns-0.10";
+
+  src = fetchurl {
+    url = "http://0pointer.de/lennart/projects/nss-mdns/${name}.tar.gz";
+    sha256 = "0vgs6j0qsl0mwzh5a0m0bykr7x6bx79vnbyn0r3q289rghp3qs0y";
+  };
+
+  # Note: Although `nss-mdns' works by talking to `avahi-daemon', it
+  # doesn't depend on the Avahi libraries.  Instead, it contains
+  # hand-written D-Bus code to talk to the Avahi daemon.
+
+  configureFlags =
+    [ # Try to use the Avahi daemon before resolving on our own.
+      "--enable-avahi"
+
+      # Connect to the daemon at `/var/run/avahi-daemon/socket'.
+      "--localstatedir=/var"
+    ];
+
+  patches = stdenv.lib.optional stdenv.hostPlatform.isMusl
+    (
+      fetchpatch
+      {
+        url = "https://raw.githubusercontent.com/openembedded/openembedded-core/94f780e889f194b67a48587ac68b3200288bee10/meta/recipes-connectivity/libnss-mdns/libnss-mdns/0001-check-for-nss.h.patch";
+        sha256 = "1l1kjbdw8z31br4vib3l5b85jy7kxin760a2f24lww8v6lqdpgds";
+      }
+    );
+
+
+  meta = {
+    description = "The mDNS Name Service Switch (NSS) plug-in";
+    longDescription = ''
+      `nss-mdns' is a plugin for the GNU Name Service Switch (NSS)
+      functionality of the GNU C Library (glibc) providing host name
+      resolution via Multicast DNS (mDNS), effectively allowing name
+      resolution by common Unix/Linux programs in the ad-hoc mDNS
+      domain `.local'.
+    '';
+
+    homepage = http://0pointer.de/lennart/projects/nss-mdns/;
+    license = stdenv.lib.licenses.lgpl2Plus;
+
+    # Supports both the GNU and FreeBSD NSS.
+    platforms = stdenv.lib.platforms.gnu ++ stdenv.lib.platforms.linux ++ stdenv.lib.platforms.freebsd;
+
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/nss-pam-ldapd/default.nix b/nixpkgs/pkgs/tools/networking/nss-pam-ldapd/default.nix
new file mode 100644
index 000000000000..569a6d118e77
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/nss-pam-ldapd/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchurl
+, pkgconfig, makeWrapper, autoreconfHook
+, openldap, python, pam
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nss-pam-ldapd";
+  version = "0.9.11";
+
+  src = fetchurl {
+    url = "https://arthurdejong.org/nss-pam-ldapd/${pname}-${version}.tar.gz";
+    sha256 = "1dna3r0q6sjhhlkhcp8x2zkslrd4y7701kk6fl5r940sdph1pmyh";
+  };
+
+  nativeBuildInputs = [ pkgconfig makeWrapper autoreconfHook ];
+  buildInputs = [ openldap pam python ];
+
+  preConfigure = ''
+    substituteInPlace Makefile.in --replace "install-data-local: " "# install-data-local: "
+  '';
+
+  configureFlags = [
+    "--with-bindpw-file=/run/nslcd/bindpw"
+    "--with-nslcd-socket=/run/nslcd/socket"
+    "--with-nslcd-pidfile=/run/nslcd/nslcd.pid"
+    "--with-pam-seclib-dir=$(out)/lib/security"
+    "--enable-kerberos=no"
+  ];
+
+  postInstall = ''
+    wrapProgram $out/sbin/nslcd --prefix LD_LIBRARY_PATH ":" $out/lib
+  '';
+
+  meta = with stdenv.lib; {
+    description = "LDAP identity and authentication for NSS/PAM";
+    homepage = https://arthurdejong.org/nss-pam-ldapd/;
+    license = licenses.lgpl21;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ntopng/0001-Undo-weird-modification-of-data_dir.patch b/nixpkgs/pkgs/tools/networking/ntopng/0001-Undo-weird-modification-of-data_dir.patch
new file mode 100644
index 000000000000..d794efeac08a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ntopng/0001-Undo-weird-modification-of-data_dir.patch
@@ -0,0 +1,12 @@
+diff --git a/src/Prefs.cpp b/src/Prefs.cpp
+index 76385c4..db8d20d 100755
+--- a/src/Prefs.cpp
++++ b/src/Prefs.cpp
+@@ -795,7 +795,6 @@ int Prefs::checkOptions() {
+          ntop->getTrace()->traceEvent(TRACE_ERROR, "Unable to create log %s", path);
+     }
+ 
+-  free(data_dir); data_dir = strdup(ntop->get_install_dir());
+   docs_dir      = ntop->getValidPath(docs_dir);
+   scripts_dir   = ntop->getValidPath(scripts_dir);
+   callbacks_dir = ntop->getValidPath(callbacks_dir);
diff --git a/nixpkgs/pkgs/tools/networking/ntopng/0002-Remove-requirement-to-have-writeable-callback-dir.patch b/nixpkgs/pkgs/tools/networking/ntopng/0002-Remove-requirement-to-have-writeable-callback-dir.patch
new file mode 100644
index 000000000000..50ed1daebd48
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ntopng/0002-Remove-requirement-to-have-writeable-callback-dir.patch
@@ -0,0 +1,14 @@
+diff --git a/src/Ntop.cpp b/src/Ntop.cpp
+index 8de92a9..510418f 100644
+--- a/src/Ntop.cpp
++++ b/src/Ntop.cpp
+@@ -197,8 +197,7 @@ void Ntop::registerPrefs(Prefs *_prefs) {
+   }
+ 
+   if(stat(prefs->get_callbacks_dir(), &statbuf)
+-     || (!(statbuf.st_mode & S_IFDIR))  /* It's not a directory */
+-     || (!(statbuf.st_mode & S_IWRITE)) /* It's not writable    */) {
++     || (!(statbuf.st_mode & S_IFDIR))  /* It's not a directory */) {
+     ntop->getTrace()->traceEvent(TRACE_ERROR, "Invalid directory %s specified",
+ 				 prefs->get_callbacks_dir());
+     _exit(-1);
diff --git a/nixpkgs/pkgs/tools/networking/ntopng/0003-New-libpcap-defines-SOCKET.patch b/nixpkgs/pkgs/tools/networking/ntopng/0003-New-libpcap-defines-SOCKET.patch
new file mode 100644
index 000000000000..51c9a706f898
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ntopng/0003-New-libpcap-defines-SOCKET.patch
@@ -0,0 +1,34 @@
+From 9cb650ea96c0e5063775071cfdae072e92c553b8 Mon Sep 17 00:00:00 2001
+From: emanuele-f <faranda@ntop.org>
+Date: Tue, 18 Sep 2018 12:49:57 +0200
+Subject: [PATCH] Compilation fix with new libpcap
+
+SOCKET and INVALID_SOCKET are now defined in pcap.h
+---
+ third-party/mongoose/mongoose.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/third-party/mongoose/mongoose.c b/third-party/mongoose/mongoose.c
+index 6a61cea9b..634c142e3 100644
+--- a/third-party/mongoose/mongoose.c
++++ b/third-party/mongoose/mongoose.c
+@@ -247,7 +247,9 @@ struct pollfd {
+ #define mg_rename(x, y) rename(x, y)
+ #define mg_sleep(x) usleep((x) * 1000)
+ #define ERRNO errno
++#ifndef INVALID_SOCKET
+ #define INVALID_SOCKET (-1)
++#endif
+ 
+ /* ntop */
+ #if ((ULONG_MAX) == (UINT_MAX))
+@@ -270,7 +272,9 @@ struct pollfd {
+ #endif
+ 
+ //#define INT64_FMT PRId64
++#ifndef SOCKET
+ typedef int SOCKET;
++#endif
+ #define WINCDECL
+ 
+ #endif // End of Windows and UNIX specific includes
diff --git a/nixpkgs/pkgs/tools/networking/ntopng/default.nix b/nixpkgs/pkgs/tools/networking/ntopng/default.nix
new file mode 100644
index 000000000000..68f801060310
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ntopng/default.nix
@@ -0,0 +1,67 @@
+{ stdenv, fetchurl, libpcap,/* gnutls, libgcrypt,*/ libxml2, glib
+, geoip, geolite-legacy, sqlite, which, autoreconfHook, git
+, pkgconfig, groff, curl, json_c, luajit, zeromq, rrdtool
+}:
+
+# ntopng includes LuaJIT, mongoose, rrdtool and zeromq in its third-party/
+# directory, but we use luajit, zeromq, and rrdtool from nixpkgs
+
+stdenv.mkDerivation rec {
+  name = "ntopng-2.0";
+
+  src = fetchurl {
+    urls = [
+      "mirror://sourceforge/project/ntop/ntopng/old/${name}.tar.gz"
+      "mirror://sourceforge/project/ntop/ntopng/${name}.tar.gz"
+    ];
+    sha256 = "0l82ivh05cmmqcvs26r6y69z849d28njipphqzvnakf43ggddgrw";
+  };
+
+  patches = [
+    ./0001-Undo-weird-modification-of-data_dir.patch
+    ./0002-Remove-requirement-to-have-writeable-callback-dir.patch
+    ./0003-New-libpcap-defines-SOCKET.patch
+  ];
+
+  buildInputs = [ libpcap/* gnutls libgcrypt*/ libxml2 glib geoip geolite-legacy
+    sqlite which autoreconfHook git pkgconfig groff curl json_c luajit zeromq
+    rrdtool ];
+
+
+  autoreconfPhase = ''
+    substituteInPlace autogen.sh --replace "/bin/rm" "rm"
+    substituteInPlace nDPI/autogen.sh --replace "/bin/rm" "rm"
+    $shell autogen.sh
+  '';
+
+  preConfigure = ''
+    substituteInPlace Makefile.in --replace "/bin/rm" "rm"
+  '';
+
+  preBuild = ''
+    substituteInPlace src/Ntop.cpp --replace "/usr/local" "$out"
+
+    sed -e "s|\(#define CONST_DEFAULT_DATA_DIR\).*|\1 \"/var/lib/ntopng\"|g" \
+        -e "s|\(#define CONST_DEFAULT_DOCS_DIR\).*|\1 \"$out/share/ntopng/httpdocs\"|g" \
+        -e "s|\(#define CONST_DEFAULT_SCRIPTS_DIR\).*|\1 \"$out/share/ntopng/scripts\"|g" \
+        -e "s|\(#define CONST_DEFAULT_CALLBACKS_DIR\).*|\1 \"$out/share/ntopng/scripts/callbacks\"|g" \
+        -e "s|\(#define CONST_DEFAULT_INSTALL_DIR\).*|\1 \"$out/share/ntopng\"|g" \
+        -i include/ntop_defines.h
+
+    rm -rf httpdocs/geoip
+    ln -s ${geolite-legacy}/share/GeoIP httpdocs/geoip
+  '' + stdenv.lib.optionalString stdenv.isDarwin ''
+    sed 's|LIBS += -lstdc++.6||' -i Makefile
+  '';
+
+  NIX_CFLAGS_COMPILE = "-fpermissive"
+    + stdenv.lib.optionalString stdenv.cc.isClang " -Wno-error=reserved-user-defined-literal";
+
+  meta = with stdenv.lib; {
+    description = "High-speed web-based traffic analysis and flow collection tool";
+    homepage = http://www.ntop.org/products/ntop/;
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ntp/default.nix b/nixpkgs/pkgs/tools/networking/ntp/default.nix
new file mode 100644
index 000000000000..b890e07845e7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ntp/default.nix
@@ -0,0 +1,52 @@
+{ stdenv, lib, fetchurl, openssl, perl, libcap ? null, libseccomp ? null, pps-tools }:
+
+assert stdenv.isLinux -> libcap != null;
+assert stdenv.isLinux -> libseccomp != null;
+
+let
+  withSeccomp = stdenv.isLinux && (stdenv.isi686 || stdenv.isx86_64);
+in
+
+stdenv.mkDerivation rec {
+  name = "ntp-4.2.8p13";
+
+  src = fetchurl {
+    url = "https://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2/${name}.tar.gz";
+    sha256 = "0f1a4fya7v5s0426nim8ydvvlcashb8hicgs9xlm76ndrz7751r8";
+  };
+
+  # The hardcoded list of allowed system calls for seccomp is
+  # insufficient for NixOS, add more to make it work (issue #21136).
+  patches = [ ./seccomp.patch ];
+
+  configureFlags = [
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+    "--with-openssl-libdir=${openssl.out}/lib"
+    "--with-openssl-incdir=${openssl.dev}/include"
+    "--enable-ignore-dns-errors"
+    "--with-yielding-select=yes"
+  ] ++ stdenv.lib.optional stdenv.isLinux "--enable-linuxcaps"
+    ++ stdenv.lib.optional withSeccomp "--enable-libseccomp";
+
+  buildInputs = [ libcap openssl perl ]
+    ++ lib.optional withSeccomp libseccomp
+    ++ lib.optional stdenv.isLinux pps-tools;
+
+  hardeningEnable = [ "pie" ];
+
+  postInstall = ''
+    rm -rf $out/share/doc
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://www.ntp.org/;
+    description = "An implementation of the Network Time Protocol";
+    license = {
+      # very close to isc and bsd2
+      url = https://www.eecis.udel.edu/~mills/ntp/html/copyright.html;
+    };
+    maintainers = with maintainers; [ eelco thoughtpolice ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ntp/seccomp.patch b/nixpkgs/pkgs/tools/networking/ntp/seccomp.patch
new file mode 100644
index 000000000000..c75536dac7fb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ntp/seccomp.patch
@@ -0,0 +1,57 @@
+From 881e427f3236046466bdb8235edf86e6dfa34391 Mon Sep 17 00:00:00 2001
+From: Michael Bishop <cleverca22@gmail.com>
+Date: Mon, 11 Jun 2018 08:30:48 -0300
+Subject: [PATCH] fix the seccomp filter to include a few previously missed
+ syscalls
+
+---
+ ntpd/ntpd.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/ntpd/ntpd.c b/ntpd/ntpd.c
+index 2c7f02ec5..4c59dc2ba 100644
+--- a/ntpd/ntpd.c
++++ b/ntpd/ntpd.c
+@@ -1140,10 +1140,12 @@ int scmp_sc[] = {
+ 	SCMP_SYS(close),
+ 	SCMP_SYS(connect),
+ 	SCMP_SYS(exit_group),
++	SCMP_SYS(fcntl),
+ 	SCMP_SYS(fstat),
+ 	SCMP_SYS(fsync),
+ 	SCMP_SYS(futex),
+ 	SCMP_SYS(getitimer),
++	SCMP_SYS(getpid),
+ 	SCMP_SYS(getsockname),
+ 	SCMP_SYS(ioctl),
+ 	SCMP_SYS(lseek),
+@@ -1162,6 +1164,8 @@ int scmp_sc[] = {
+ 	SCMP_SYS(sendto),
+ 	SCMP_SYS(setitimer),
+ 	SCMP_SYS(setsid),
++	SCMP_SYS(setsockopt),
++	SCMP_SYS(openat),
+ 	SCMP_SYS(socket),
+ 	SCMP_SYS(stat),
+ 	SCMP_SYS(time),
+@@ -1178,9 +1182,11 @@ int scmp_sc[] = {
+ 	SCMP_SYS(clock_settime),
+ 	SCMP_SYS(close),
+ 	SCMP_SYS(exit_group),
++	SCMP_SYS(fcntl),
+ 	SCMP_SYS(fsync),
+ 	SCMP_SYS(futex),
+ 	SCMP_SYS(getitimer),
++	SCMP_SYS(getpid),
+ 	SCMP_SYS(madvise),
+ 	SCMP_SYS(mmap),
+ 	SCMP_SYS(mmap2),
+@@ -1194,6 +1200,8 @@ int scmp_sc[] = {
+ 	SCMP_SYS(select),
+ 	SCMP_SYS(setitimer),
+ 	SCMP_SYS(setsid),
++	SCMP_SYS(setsockopt),
++	SCMP_SYS(openat),
+ 	SCMP_SYS(sigprocmask),
+ 	SCMP_SYS(sigreturn),
+ 	SCMP_SYS(socketcall),
diff --git a/nixpkgs/pkgs/tools/networking/nuttcp/default.nix b/nixpkgs/pkgs/tools/networking/nuttcp/default.nix
new file mode 100644
index 000000000000..f01d5ccada19
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/nuttcp/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "nuttcp";
+  version = "8.1.4";
+
+  src = fetchurl {
+    urls = [
+      "http://nuttcp.net/nuttcp/latest/${pname}-${version}.c"
+      "http://nuttcp.net/nuttcp/${pname}-${version}/${pname}-${version}.c"
+      "http://nuttcp.net/nuttcp/beta/${pname}-${version}.c"
+    ];
+    sha256 = "1mygfhwxfi6xg0iycivx98ckak2abc3vwndq74278kpd8g0yyqyh";
+  };
+
+  man = fetchurl {
+    url = "http://nuttcp.net/nuttcp/${pname}-${version}/nuttcp.8";
+    sha256 = "1yang94mcdqg362qbi85b63746hk6gczxrk619hyj91v5763n4vx";
+  };
+
+  dontUnpack = true;
+
+  buildPhase = ''
+    cc -O2 -o nuttcp $src
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp nuttcp $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Network performance measurement tool";
+    longDescription = ''
+      nuttcp is a network performance measurement tool intended for use by
+      network and system managers. Its most basic usage is to determine the raw
+      TCP (or UDP) network layer throughput by transferring memory buffers from
+      a source system across an interconnecting network to a destination
+      system, either transferring data for a specified time interval, or
+      alternatively transferring a specified number of bytes. In addition to
+      reporting the achieved network throughput in Mbps, nuttcp also provides
+      additional useful information related to the data transfer such as user,
+      system, and wall-clock time, transmitter and receiver CPU utilization,
+      and loss percentage (for UDP transfers).
+    '';
+    license = licenses.gpl2;
+    homepage = http://nuttcp.net/;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/nylon/configure-use-solib.patch b/nixpkgs/pkgs/tools/networking/nylon/configure-use-solib.patch
new file mode 100644
index 000000000000..02491d7660ea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/nylon/configure-use-solib.patch
@@ -0,0 +1,33 @@
+--- nylon-1.21/configure	2006-08-20 00:53:31.000000000 +0200
++++ nylon-1.21-patch/configure	2015-01-13 22:23:34.509154220 +0100
+@@ -5174,25 +5174,25 @@
+   *)
+      echo "$as_me:$LINENO: result: $withval" >&5
+ echo "${ECHO_T}$withval" >&6
+-     if test -f $withval/include/event.h -a -f $withval/lib/libevent.a; then
++     if test -f $withval/include/event.h -a -f $withval/lib/libevent.so; then
+         owd=`pwd`
+         if cd $withval; then withval=`pwd`; cd $owd; fi
+         EVENTINC="-I$withval/include"
+         EVENTLIB="-L$withval/lib -levent"
+-     elif test -f $withval/event.h -a -f $withval/libevent.a; then
++     elif test -f $withval/event.h -a -f $withval/libevent.so; then
+         owd=`pwd`
+         if cd $withval; then withval=`pwd`; cd $owd; fi
+         EVENTINC="-I$withval"
+         EVENTLIB="-L$withval -levent"
+      else
+-        { { echo "$as_me:$LINENO: error: event.h or libevent.a not found in $withval" >&5
+-echo "$as_me: error: event.h or libevent.a not found in $withval" >&2;}
++        { { echo "$as_me:$LINENO: error: event.h or libevent.so not found in $withval" >&5
++echo "$as_me: error: event.h or libevent.so not found in $withval" >&2;}
+    { (exit 1); exit 1; }; }
+      fi
+      ;;
+   esac
+ else
+-   if test -f ${prefix}/include/event.h -a -f ${prefix}/lib/libevent.a;
++   if test -f ${prefix}/include/event.h -a -f ${prefix}/lib/libevent.so;
+ then
+      EVENTINC="-I${prefix}/include"
+      EVENTLIB="-L${prefix}/lib -levent"
diff --git a/nixpkgs/pkgs/tools/networking/nylon/default.nix b/nixpkgs/pkgs/tools/networking/nylon/default.nix
new file mode 100644
index 000000000000..5c8f98101eed
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/nylon/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, libevent, buildEnv }:
+let
+  # failed to find a better way to make it work
+  libevent-comb = buildEnv {
+    inherit (libevent.out) name;
+    paths = [ libevent.dev libevent.out ];
+  };
+in
+stdenv.mkDerivation {
+  name = "nylon-1.21";
+  src = fetchurl {
+    url = https://monkey.org/~marius/nylon/nylon-1.21.tar.gz;
+    sha256 = "34c132b005c025c1a5079aae9210855c80f50dc51dde719298e1113ad73408a4";
+  };
+
+  patches = [ ./configure-use-solib.patch ];
+
+  configureFlags = [ "--with-libevent=${libevent-comb}" ];
+
+  buildInputs = [ libevent ];
+
+  meta = with stdenv.lib; {
+    homepage = http://monkey.org/~marius/nylon;
+    description = "Proxy server, supporting SOCKS 4 and 5, as well as a mirror mode";
+    license = licenses.bsdOriginal;
+    maintainers = with maintainers; [ edwtjo ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/nyx/default.nix b/nixpkgs/pkgs/tools/networking/nyx/default.nix
new file mode 100644
index 000000000000..901187c6abb9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/nyx/default.nix
@@ -0,0 +1,25 @@
+{ lib, pythonPackages }:
+
+with pythonPackages;
+
+buildPythonApplication rec {
+  pname = "nyx";
+  version = "2.1.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "02rrlllz2ci6i6cs3iddyfns7ang9a54jrlygd2jw1f9s6418ll8";
+  };
+
+  propagatedBuildInputs = [ stem ];
+
+  # ./run_tests.py returns `TypeError: testFailure() takes exactly 1 argument`
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Command-line monitor for Tor";
+    homepage = https://nyx.torproject.org/;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ offline ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/nzbget/default.nix b/nixpkgs/pkgs/tools/networking/nzbget/default.nix
new file mode 100644
index 000000000000..b3c77f5b797c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/nzbget/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl, pkgconfig, libxml2, ncurses, libsigcxx, libpar2
+, gnutls, libgcrypt, zlib, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "nzbget";
+  version = "21.0";
+
+  src = fetchurl {
+    url = "https://github.com/nzbget/nzbget/releases/download/v${version}/nzbget-${version}-src.tar.gz";
+    sha256 = "0lwd0pfrs4a5ms193hgz2qiyf7grrc925dw6y0nfc0gkp27db9b5";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+
+  buildInputs = [ libxml2 ncurses libsigcxx libpar2 gnutls
+                  libgcrypt zlib openssl ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    homepage = https://nzbget.net;
+    license = licenses.gpl2Plus;
+    description = "A command line tool for downloading files from news servers";
+    maintainers = with maintainers; [ pSub ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/obfs4/default.nix b/nixpkgs/pkgs/tools/networking/obfs4/default.nix
new file mode 100644
index 000000000000..005abb0968b6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/obfs4/default.nix
@@ -0,0 +1,21 @@
+{ lib, fetchgit, buildGoModule }:
+
+buildGoModule rec {
+  pname = "obfs4";
+  version = "0.0.10";
+
+  src = fetchgit {
+    url = meta.repositories.git;
+    rev = "refs/tags/${pname}proxy-${version}";
+    sha256 = "05aqmw8x8s0yqyqmdj5zcsq06gsbcmrlcd52gaqm20m1pg9503ad";
+  };
+
+  modSha256 = "150kg22kznrdj5icjxk3qd70g7wpq8zd2zklw1y2fgvrggw8zvyv";
+
+  meta = with lib; {
+    description = "A pluggable transport proxy";
+    homepage = https://www.torproject.org/projects/obfsproxy;
+    repositories.git = https://git.torproject.org/pluggable-transports/obfs4.git;
+    maintainers = with maintainers; [ phreedom thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ocproxy/default.nix b/nixpkgs/pkgs/tools/networking/ocproxy/default.nix
new file mode 100644
index 000000000000..729f5b319980
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ocproxy/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchFromGitHub, autoconf, automake, libevent }:
+
+stdenv.mkDerivation rec {
+  version = "1.60";
+  pname = "ocproxy";
+
+  src = fetchFromGitHub {
+    owner = "cernekee";
+    repo = "ocproxy";
+    rev = "v${version}";
+    sha256 = "03323nnhb4y9nzwva04mq7xg03dvdrgp689g89f69jqc261skcqx";
+  };
+
+  nativeBuildInputs = [ autoconf automake ];
+  buildInputs = [ libevent ];
+
+  preConfigure = ''
+    patchShebangs autogen.sh
+    ./autogen.sh
+  '';
+
+  meta = with stdenv.lib; {
+    description = "OpenConnect proxy";
+    longDescription = ''
+      ocproxy is a user-level SOCKS and port forwarding proxy for OpenConnect
+      based on lwIP.
+    '';
+    homepage = https://github.com/cernekee/ocproxy;
+    license = licenses.bsd3;
+    maintainers = [ maintainers.joko ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ocserv/default.nix b/nixpkgs/pkgs/tools/networking/ocserv/default.nix
new file mode 100644
index 000000000000..8d4b340ea2b1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ocserv/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitLab, autoreconfHook, pkgconfig, nettle, gnutls
+, libev, protobufc, guile, geoip, libseccomp, gperf, readline
+, lz4, libgssglue, ronn, pam
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ocserv";
+  version = "0.12.6";
+
+  src = fetchFromGitLab {
+    owner = "openconnect";
+    repo = "ocserv";
+    rev = "ocserv_${stdenv.lib.replaceStrings [ "." ] [ "_" ] version}";
+    sha256 = "0k7sx9sg8akxwfdl51cvdqkdrx9qganqddgri2yhcgznc3f3pz5b";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  buildInputs = [ nettle gnutls libev protobufc guile geoip libseccomp gperf readline lz4 libgssglue ronn pam ];
+
+  meta = with stdenv.lib; {
+    homepage = https://gitlab.com/openconnect/ocserv;
+    license = licenses.gpl2;
+    description = "This program is openconnect VPN server (ocserv), a server for the openconnect VPN client.";
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/offlineimap/default.nix b/nixpkgs/pkgs/tools/networking/offlineimap/default.nix
new file mode 100644
index 000000000000..983ba0184738
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/offlineimap/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchFromGitHub, python2Packages,
+  asciidoc, cacert, libxml2, libxslt, docbook_xsl }:
+
+python2Packages.buildPythonApplication rec {
+  version = "7.3.2";
+  pname = "offlineimap";
+
+  src = fetchFromGitHub {
+    owner = "OfflineIMAP";
+    repo = "offlineimap";
+    rev = "v${version}";
+    sha256 = "0rmj1ws6hljqnfap3p3js5s46kx85yc02hjkiki5zg44wn3hswjg";
+  };
+
+  postPatch = ''
+    # Skip xmllint to stop failures due to no network access
+    sed -i docs/Makefile -e "s|a2x -v -d |a2x -L -v -d |"
+
+    # Provide CA certificates (Used when "sslcacertfile = OS-DEFAULT" is configured")
+    sed -i offlineimap/utils/distro.py -e '/def get_os_sslcertfile():/a\ \ \ \ return "${cacert}/etc/ssl/certs/ca-bundle.crt"'
+  '';
+
+  doCheck = false;
+
+  nativeBuildInputs = [ asciidoc libxml2 libxslt docbook_xsl ];
+  propagatedBuildInputs = with python2Packages; [ six kerberos rfc6555 pysocks ];
+
+  postInstall = ''
+    make -C docs man
+    install -D -m 644 docs/offlineimap.1 ''${!outputMan}/share/man/man1/offlineimap.1
+    install -D -m 644 docs/offlineimapui.7 ''${!outputMan}/share/man/man7/offlineimapui.7
+  '';
+
+  meta = {
+    description = "Synchronize emails between two repositories, so that you can read the same mailbox from multiple computers";
+    homepage = http://offlineimap.org;
+    license = stdenv.lib.licenses.gpl2Plus;
+    maintainers = with stdenv.lib.maintainers; [ endocrimes ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ofono/0001-Search-connectors-in-OFONO_PLUGIN_PATH.patch b/nixpkgs/pkgs/tools/networking/ofono/0001-Search-connectors-in-OFONO_PLUGIN_PATH.patch
new file mode 100644
index 000000000000..eb97209a693e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ofono/0001-Search-connectors-in-OFONO_PLUGIN_PATH.patch
@@ -0,0 +1,120 @@
+From 0e0994c9716700c9484b3dccb25f98a9a59d1744 Mon Sep 17 00:00:00 2001
+From: Jan Tojnar <jtojnar@gmail.com>
+Date: Fri, 23 Aug 2019 18:42:51 +0200
+Subject: [PATCH] Search connectors in OFONO_PLUGIN_PATH
+
+Previously, the connectors would only be looked for in a single
+directory, specified during compilation. This patch allows to
+traverse a list of directories provided by an environment variable.
+---
+ src/plugin.c | 77 ++++++++++++++++++++++++++++++++++------------------
+ 1 file changed, 50 insertions(+), 27 deletions(-)
+
+diff --git a/src/plugin.c b/src/plugin.c
+index 924a45ec..f05055c3 100644
+--- a/src/plugin.c
++++ b/src/plugin.c
+@@ -99,35 +99,12 @@ static gboolean check_plugin(struct ofono_plugin_desc *desc,
+ 	return TRUE;
+ }
+ 
+-#include "builtin.h"
+-
+-int __ofono_plugin_init(const char *pattern, const char *exclude)
+-{
+-	gchar **patterns = NULL;
+-	gchar **excludes = NULL;
+-	GSList *list;
+-	GDir *dir;
++static handle_dir(const gchar *plugin_path, const gchar **patterns, const gchar **excludes) {
+ 	const gchar *file;
+ 	gchar *filename;
+-	unsigned int i;
+-
+-	DBG("");
+-
+-	if (pattern)
+-		patterns = g_strsplit_set(pattern, ":, ", -1);
+-
+-	if (exclude)
+-		excludes = g_strsplit_set(exclude, ":, ", -1);
+-
+-	for (i = 0; __ofono_builtin[i]; i++) {
+-		if (check_plugin(__ofono_builtin[i],
+-					patterns, excludes) == FALSE)
+-			continue;
+-
+-		add_plugin(NULL, __ofono_builtin[i]);
+-	}
++	GDir *dir;
+ 
+-	dir = g_dir_open(PLUGINDIR, 0, NULL);
++	dir = g_dir_open(plugin_path, 0, NULL);
+ 	if (dir != NULL) {
+ 		while ((file = g_dir_read_name(dir)) != NULL) {
+ 			void *handle;
+@@ -137,7 +114,7 @@ int __ofono_plugin_init(const char *pattern, const char *exclude)
+ 					g_str_has_suffix(file, ".so") == FALSE)
+ 				continue;
+ 
+-			filename = g_build_filename(PLUGINDIR, file, NULL);
++			filename = g_build_filename(plugin_path, file, NULL);
+ 
+ 			handle = dlopen(filename, RTLD_NOW);
+ 			if (handle == NULL) {
+@@ -168,6 +145,52 @@ int __ofono_plugin_init(const char *pattern, const char *exclude)
+ 
+ 		g_dir_close(dir);
+ 	}
++}
++
++#include "builtin.h"
++
++int __ofono_plugin_init(const char *pattern, const char *exclude)
++{
++	gchar **patterns = NULL;
++	gchar **excludes = NULL;
++	GSList *list;
++	unsigned int i;
++
++	DBG("");
++
++	if (pattern)
++		patterns = g_strsplit_set(pattern, ":, ", -1);
++
++	if (exclude)
++		excludes = g_strsplit_set(exclude, ":, ", -1);
++
++	for (i = 0; __ofono_builtin[i]; i++) {
++		if (check_plugin(__ofono_builtin[i],
++					patterns, excludes) == FALSE)
++			continue;
++
++		add_plugin(NULL, __ofono_builtin[i]);
++	}
++
++
++	const gchar *plugin_path;
++
++	plugin_path = g_getenv ("OFONO_PLUGIN_PATH");
++
++	if (!plugin_path) {
++		gchar **plugin_path_list;
++		gsize i;
++
++		plugin_path_list = g_strsplit (plugin_path, G_SEARCHPATH_SEPARATOR_S, 0);
++
++		for (i = 0; plugin_path_list[i]; i++) {
++			handle_dir(plugin_path_list, patterns, excludes);
++		}
++
++		g_strfreev(plugin_path_list);
++	}
++
++	handle_dir(PLUGINDIR, patterns, excludes);
+ 
+ 	for (list = plugins; list; list = list->next) {
+ 		struct ofono_plugin *plugin = list->data;
+-- 
+2.22.0
+
diff --git a/nixpkgs/pkgs/tools/networking/ofono/default.nix b/nixpkgs/pkgs/tools/networking/ofono/default.nix
new file mode 100644
index 000000000000..5cae8a612033
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ofono/default.nix
@@ -0,0 +1,58 @@
+{ stdenv
+, fetchgit
+, autoreconfHook
+, pkgconfig
+, glib
+, dbus
+, ell
+, systemd
+, bluez
+, mobile-broadband-provider-info
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ofono";
+  version = "1.31";
+
+  outputs = [ "out" "dev" ];
+
+  src = fetchgit {
+    url = "git://git.kernel.org/pub/scm/network/ofono/ofono.git";
+    rev = version;
+    sha256 = "033y3vggjxn1c7mw75j452idp7arrdv51axs727f7l3c5lnxqdjy";
+  };
+
+  patches = [
+    ./0001-Search-connectors-in-OFONO_PLUGIN_PATH.patch
+  ];
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkgconfig
+  ];
+
+  buildInputs = [
+    glib
+    dbus
+    ell
+    systemd
+    bluez
+    mobile-broadband-provider-info
+  ];
+
+  configureFlags = [
+    "--with-dbusconfdir=${placeholder "out"}/share"
+    "--with-systemdunitdir=${placeholder "out"}/lib/systemd/system"
+    "--enable-external-ell"
+  ];
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    description = "Infrastructure for building mobile telephony (GSM/UMTS) applications";
+    homepage = https://01.org/ofono;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ jtojnar ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/olsrd/default.nix b/nixpkgs/pkgs/tools/networking/olsrd/default.nix
new file mode 100644
index 000000000000..cff4b7e97137
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/olsrd/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl, bison, flex }:
+
+stdenv.mkDerivation rec {
+  pname = "olsrd";
+  version = "0.9.6.1";
+
+  src = fetchurl {
+    url = "http://www.olsr.org/releases/0.9/${pname}-${version}.tar.bz2";
+    sha256 = "9cac290e9bff5fc7422110b9ccd972853f10962c962d2f31a63de9c6d1520612";
+  };
+
+  buildInputs = [ bison flex ];
+
+  preConfigure = ''
+    makeFlags="prefix=$out ETCDIR=$out/etc"
+  '';
+
+  meta = {
+    description = "An adhoc wireless mesh routing daemon";
+    license = stdenv.lib.licenses.bsd3;
+    homepage = http://olsr.org/;
+    maintainers = with stdenv.lib.maintainers; [viric];
+    platforms = with stdenv.lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/openapi-generator-cli/default.nix b/nixpkgs/pkgs/tools/networking/openapi-generator-cli/default.nix
new file mode 100644
index 000000000000..1cb8e02130f7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/openapi-generator-cli/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, jre, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  version = "4.2.2";
+  pname = "openapi-generator-cli";
+
+  jarfilename = "${pname}-${version}.jar";
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  src = fetchurl {
+    url = "http://central.maven.org/maven2/org/openapitools/${pname}/${version}/${jarfilename}";
+    sha256 = "1pafv432ll3pp52580pbnk0gnrm6byl5fkrf1rarhxfkpkr82yif";
+  };
+
+  phases = [ "installPhase" ];
+
+  installPhase = ''
+    install -D "$src" "$out/share/java/${jarfilename}"
+
+    makeWrapper ${jre}/bin/java $out/bin/${pname} \
+      --add-flags "-jar $out/share/java/${jarfilename}"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Allows generation of API client libraries (SDK generation), server stubs and documentation automatically given an OpenAPI Spec";
+    homepage = https://github.com/OpenAPITools/openapi-generator;
+    license = licenses.asl20;
+    maintainers = [ maintainers.shou ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/networking/openconnect/default.nix b/nixpkgs/pkgs/tools/networking/openconnect/default.nix
new file mode 100644
index 000000000000..a926ef1e1ddc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/openconnect/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchurl, pkgconfig, openssl ? null, gnutls ? null, gmp, libxml2, stoken, zlib, fetchgit, darwin } :
+
+assert (openssl != null) == (gnutls == null);
+
+let vpnc = fetchgit {
+  url = "git://git.infradead.org/users/dwmw2/vpnc-scripts.git";
+  rev = "c84fb8e5a523a647a01a1229a9104db934e19f00";
+  sha256 = "01xdclx0y3x66mpbdr77n4ilapwzjz475h32q88ml9gnq6phjxrs";
+};
+
+in stdenv.mkDerivation rec {
+  pname = "openconnect";
+  version = "8.05";
+
+  src = fetchurl {
+    urls = [
+      "ftp://ftp.infradead.org/pub/openconnect/${pname}-${version}.tar.gz"
+    ];
+    sha256 = "14i9q727c2zc9xhzp1a9hz3gzb5lwgsslbhircm84dnbs192jp1k";
+  };
+
+  outputs = [ "out" "dev" ];
+  
+  configureFlags = [
+    "--with-vpnc-script=${vpnc}/vpnc-script"
+    "--disable-nls"
+    "--without-openssl-version-check"
+  ];
+
+  buildInputs = [ openssl gnutls gmp libxml2 stoken zlib ]
+    ++ stdenv.lib.optional stdenv.isDarwin darwin.apple_sdk.frameworks.PCSC;
+  nativeBuildInputs = [ pkgconfig ];
+
+  meta = with stdenv.lib; {
+    description = "VPN Client for Cisco's AnyConnect SSL VPN";
+    homepage = http://www.infradead.org/openconnect/;
+    license = licenses.lgpl21;
+    maintainers = with maintainers; [ pradeepchhetri tricktron ];
+    platforms = stdenv.lib.platforms.linux ++ stdenv.lib.platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/openconnect_pa/default.nix b/nixpkgs/pkgs/tools/networking/openconnect_pa/default.nix
new file mode 100644
index 000000000000..68d18bff777b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/openconnect_pa/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchFromGitHub, pkgconfig, vpnc, openssl ? null, gnutls ? null, gmp, libxml2, stoken, zlib, autoreconfHook } :
+
+assert (openssl != null) == (gnutls == null);
+
+stdenv.mkDerivation {
+  version = "unstable-2018-10-08";
+  pname = "openconnect_pa";
+  
+  outputs = [ "out" "dev" ];
+
+  src = fetchFromGitHub {
+    owner = "dlenski";
+    repo = "openconnect";
+    rev = "e5fe063a087385c5b157ad7a9a3fa874181f6e3b";
+    sha256 = "0ywacqs3nncr2gpjjcz2yc9c6v4ifjssh0vb07h0qff06whqhdax"; 
+  };
+
+  preConfigure = ''
+      export PKG_CONFIG=${pkgconfig}/bin/pkg-config
+      export LIBXML2_CFLAGS="-I ${libxml2.dev}/include/libxml2"
+      export LIBXML2_LIBS="-L${libxml2.out}/lib -lxml2"
+  '';
+
+  configureFlags = [
+    "--with-vpnc-script=${vpnc}/etc/vpnc/vpnc-script"
+    "--disable-nls"
+    "--without-openssl-version-check"
+  ];
+
+  nativeBuildInputs = [ pkgconfig autoreconfHook ];
+  propagatedBuildInputs = [ vpnc openssl gnutls gmp libxml2 stoken zlib ];
+  
+  meta = with stdenv.lib; {
+    description = "OpenConnect client extended to support Palo Alto Networks' GlobalProtect VPN";
+    homepage = https://github.com/dlenski/openconnect/;
+    license = licenses.lgpl21;
+    maintainers = with maintainers; [ chessai ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/openfortivpn/default.nix b/nixpkgs/pkgs/tools/networking/openfortivpn/default.nix
new file mode 100644
index 000000000000..d1a73f1c148b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/openfortivpn/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, openssl, ppp, pkgconfig }:
+
+with stdenv.lib;
+
+let repo = "openfortivpn";
+    version = "1.11.0";
+
+in stdenv.mkDerivation {
+  name = "${repo}-${version}";
+
+  src = fetchFromGitHub {
+    owner = "adrienverge";
+    inherit repo;
+    rev = "v${version}";
+    sha256 = "03ljyam0027w412vmi4gc0bp9c2xfmcspi676qck8cvvzg4gf736";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  buildInputs = [ openssl ppp ];
+
+  NIX_CFLAGS_COMPILE = "-Wno-error=unused-function";
+
+  configureFlags = [ "--with-pppd=${ppp}/bin/pppd" ];
+
+  enableParallelBuilding = true;
+
+  meta = {
+    description = "Client for PPP+SSL VPN tunnel services";
+    homepage = https://github.com/adrienverge/openfortivpn;
+    license = stdenv.lib.licenses.gpl3;
+    maintainers = [ stdenv.lib.maintainers.madjar ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/openntpd/default.nix b/nixpkgs/pkgs/tools/networking/openntpd/default.nix
new file mode 100644
index 000000000000..9cfb24ce95d4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/openntpd/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, fetchurl, libressl
+, privsepPath ? "/var/empty"
+, privsepUser ? "ntp"
+}:
+
+stdenv.mkDerivation rec {
+  pname = "openntpd";
+  version = "6.2p3";
+
+  src = fetchurl {
+    url = "mirror://openbsd/OpenNTPD/${pname}-${version}.tar.gz";
+    sha256 = "0fn12i4kzsi0zkr4qp3dp9bycmirnfapajqvdfx02zhr4hanj0kv";
+  };
+
+  prePatch = ''
+    sed -i '20i#include <sys/cdefs.h>' src/ntpd.h
+    sed -i '19i#include <sys/cdefs.h>' src/log.c
+  '';
+
+  configureFlags = [
+    "--with-privsep-path=${privsepPath}"
+    "--with-privsep-user=${privsepUser}"
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+    "--with-cacert=/etc/ssl/certs/ca-certificates.crt"
+  ];
+
+  buildInputs = [ libressl ];
+
+  installFlags = [
+    "sysconfdir=\${out}/etc"
+    "localstatedir=\${TMPDIR}"
+  ];
+
+  meta = with stdenv.lib; {
+    homepage = http://www.openntpd.org/;
+    license = licenses.bsd3;
+    description = "OpenBSD NTP daemon (Debian port)";
+    platforms = platforms.all;
+    maintainers = with maintainers; [ thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/openresolv/default.nix b/nixpkgs/pkgs/tools/networking/openresolv/default.nix
new file mode 100644
index 000000000000..423282aa8c10
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/openresolv/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchurl, makeWrapper, coreutils }:
+
+stdenv.mkDerivation rec {
+  pname = "openresolv";
+  version = "3.9.2";
+
+  src = fetchurl {
+    url = "mirror://roy/openresolv/${pname}-${version}.tar.xz";
+    sha256 = "0wyk9sl1xgvxjvj1v3nlgs79nykdr0b76k5zp3v6cm9fd10y5mql";
+  };
+
+  buildInputs = [ makeWrapper ];
+
+  configurePhase =
+    ''
+      cat > config.mk <<EOF
+      PREFIX=$out
+      SYSCONFDIR=/etc
+      SBINDIR=$out/sbin
+      LIBEXECDIR=$out/libexec/resolvconf
+      VARDIR=/run/resolvconf
+      MANDIR=$out/share/man
+      RESTARTCMD=false
+      EOF
+    '';
+
+  installFlags = [ "SYSCONFDIR=$(out)/etc" ];
+
+  postInstall = ''
+    wrapProgram "$out/sbin/resolvconf" --set PATH "${coreutils}/bin"
+  '';
+
+  meta = {
+    description = "A program to manage /etc/resolv.conf";
+    homepage = https://roy.marples.name/projects/openresolv;
+    license = stdenv.lib.licenses.bsd2;
+    maintainers = [ stdenv.lib.maintainers.eelco ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/opensm/default.nix b/nixpkgs/pkgs/tools/networking/opensm/default.nix
new file mode 100644
index 000000000000..e0a0dcd56cbe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/opensm/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, autoconf, automake, libtool, bison, flex, rdma-core }:
+
+stdenv.mkDerivation rec {
+  pname = "opensm";
+  version = "3.3.22";
+
+  src = fetchFromGitHub {
+    owner = "linux-rdma";
+    repo = "opensm";
+    rev = version;
+    sha256 = "1nb6zl93ffbgb8z8728j0dxrmvk3pm0i6a1sn7mpn8ki1vkf2y0j";
+  };
+
+  nativeBuildInputs = [ autoconf automake libtool bison flex ];
+
+  buildInputs = [ rdma-core ];
+
+  preConfigure = ''
+    patchShebangs ./autogen.sh
+    ./autogen.sh
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "Infiniband subnet manager";
+    homepage = https://www.openfabrics.org/;
+    license = licenses.gpl2; # dual licensed as 2-clause BSD
+    maintainers = [ maintainers.aij ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/openssh/default.nix b/nixpkgs/pkgs/tools/networking/openssh/default.nix
new file mode 100644
index 000000000000..90ecba0891d6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/openssh/default.nix
@@ -0,0 +1,113 @@
+{ stdenv, fetchurl, fetchpatch, zlib, openssl, libedit, pkgconfig, pam, autoreconfHook
+, etcDir ? null
+, hpnSupport ? false
+, withKerberos ? true
+, withGssapiPatches ? false
+, kerberos
+, linkOpenssl? true
+}:
+
+let
+
+  # **please** update this patch when you update to a new openssh release.
+  gssapiPatch = fetchpatch {
+    name = "openssh-gssapi.patch";
+    url = "https://salsa.debian.org/ssh-team/openssh/raw/debian/1%258.1p1-2/debian/patches/gssapi.patch";
+    sha256 = "0zfxx46a5lpjp317z354yyswa2wvmb1pp5p0nxsbhsrzw94jvxsj";
+  };
+
+in
+with stdenv.lib;
+stdenv.mkDerivation rec {
+  pname = "openssh";
+  version = if hpnSupport then "7.8p1" else "8.1p1";
+
+  src = if hpnSupport then
+      fetchurl {
+        url = "https://github.com/rapier1/openssh-portable/archive/hpn-KitchenSink-7_8_P1.tar.gz";
+        sha256 = "05q5hxx7fzcgd8a5i0zk4fwvmnz4xqk04j489irnwm7cka7xdqxw";
+      }
+    else
+      fetchurl {
+        url = "mirror://openbsd/OpenSSH/portable/${pname}-${version}.tar.gz";
+        sha256 = "1zwk3g57gb13br206k6jdhgnp6y1nibwswzraqspbl1m73pxpx82";
+      };
+
+  patches =
+    [
+      ./locale_archive.patch
+
+      # See discussion in https://github.com/NixOS/nixpkgs/pull/16966
+      ./dont_create_privsep_path.patch
+
+      ./ssh-keysign.patch
+    ] ++ optional hpnSupport
+      # CVE-2018-20685, can probably be dropped with next version bump
+      # See https://sintonen.fi/advisories/scp-client-multiple-vulnerabilities.txt
+      # for details
+      (fetchpatch {
+        name = "CVE-2018-20685.patch";
+        url = https://github.com/openssh/openssh-portable/commit/6010c0303a422a9c5fa8860c061bf7105eb7f8b2.patch;
+        sha256 = "0q27i9ymr97yb628y44qi4m11hk5qikb1ji1vhvax8hp18lwskds";
+      })
+    ++ optional withGssapiPatches (assert withKerberos; gssapiPatch);
+
+  postPatch =
+    # On Hydra this makes installation fail (sometimes?),
+    # and nix store doesn't allow such fancy permission bits anyway.
+    ''
+      substituteInPlace Makefile.in --replace '$(INSTALL) -m 4711' '$(INSTALL) -m 0711'
+    '';
+
+  nativeBuildInputs = [ pkgconfig ] ++ optional (hpnSupport || withGssapiPatches) autoreconfHook;
+  buildInputs = [ zlib openssl libedit pam ]
+    ++ optional withKerberos kerberos;
+
+  preConfigure = ''
+    # Setting LD causes `configure' and `make' to disagree about which linker
+    # to use: `configure' wants `gcc', but `make' wants `ld'.
+    unset LD
+  '';
+
+  # I set --disable-strip because later we strip anyway. And it fails to strip
+  # properly when cross building.
+  configureFlags = [
+    "--sbindir=\${out}/bin"
+    "--localstatedir=/var"
+    "--with-pid-dir=/run"
+    "--with-mantype=man"
+    "--with-libedit=yes"
+    "--disable-strip"
+    (if pam != null then "--with-pam" else "--without-pam")
+  ] ++ optional (etcDir != null) "--sysconfdir=${etcDir}"
+    ++ optional withKerberos (assert kerberos != null; "--with-kerberos5=${kerberos}")
+    ++ optional stdenv.isDarwin "--disable-libutil"
+    ++ optional (!linkOpenssl) "--without-openssl";
+
+  buildFlags = [ "SSH_KEYSIGN=ssh-keysign" ];
+
+  enableParallelBuilding = true;
+
+  hardeningEnable = [ "pie" ];
+
+  postInstall = ''
+    # Install ssh-copy-id, it's very useful.
+    cp contrib/ssh-copy-id $out/bin/
+    chmod +x $out/bin/ssh-copy-id
+    cp contrib/ssh-copy-id.1 $out/share/man/man1/
+  '';
+
+  installTargets = [ "install-nokeys" ];
+  installFlags = [
+    "sysconfdir=\${out}/etc/ssh"
+  ];
+
+  meta = {
+    homepage = http://www.openssh.com/;
+    description = "An implementation of the SSH protocol";
+    license = stdenv.lib.licenses.bsd2;
+    platforms = platforms.unix ++ platforms.windows;
+    maintainers = with maintainers; [ eelco aneeshusa ];
+    broken = hpnSupport;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/openssh/dont_create_privsep_path.patch b/nixpkgs/pkgs/tools/networking/openssh/dont_create_privsep_path.patch
new file mode 100644
index 000000000000..23f3ab67a087
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/openssh/dont_create_privsep_path.patch
@@ -0,0 +1,12 @@
+diff --git i/Makefile.in w/Makefile.in
+index 04e1c8e5..9bd5d01b 100644
+--- i/Makefile.in
++++ w/Makefile.in
+@@ -329,7 +329,6 @@ install-files:
+ 	$(MKDIR_P) $(DESTDIR)$(mandir)/$(mansubdir)5
+ 	$(MKDIR_P) $(DESTDIR)$(mandir)/$(mansubdir)8
+ 	$(MKDIR_P) $(DESTDIR)$(libexecdir)
+-	$(MKDIR_P) -m 0755 $(DESTDIR)$(PRIVSEP_PATH)
+ 	$(INSTALL) -m 0755 $(STRIP_OPT) ssh$(EXEEXT) $(DESTDIR)$(bindir)/ssh$(EXEEXT)
+ 	$(INSTALL) -m 0755 $(STRIP_OPT) scp$(EXEEXT) $(DESTDIR)$(bindir)/scp$(EXEEXT)
+ 	$(INSTALL) -m 0755 $(STRIP_OPT) ssh-add$(EXEEXT) $(DESTDIR)$(bindir)/ssh-add$(EXEEXT)
diff --git a/nixpkgs/pkgs/tools/networking/openssh/locale_archive.patch b/nixpkgs/pkgs/tools/networking/openssh/locale_archive.patch
new file mode 100644
index 000000000000..3fe4a21ea47e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/openssh/locale_archive.patch
@@ -0,0 +1,15 @@
+diff --git i/session.c w/session.c
+index 58826db1..658dd911 100644
+--- i/session.c
++++ w/session.c
+@@ -1053,6 +1053,10 @@ do_setup_env(struct ssh *ssh, Session *s, const char *shell)
+ 	if (getenv("TZ"))
+ 		child_set_env(&env, &envsize, "TZ", getenv("TZ"));
+ 
++	/* NixOS path to the glibc locale archive, to be set in the systemd job */
++	if (getenv("LOCALE_ARCHIVE"))
++		child_set_env(&env, &envsize, "LOCALE_ARCHIVE", getenv("LOCALE_ARCHIVE"));
++
+ 	/* Set custom environment options from pubkey authentication. */
+ 	if (options.permit_user_env) {
+ 		for (n = 0 ; n < auth_opts->nenv; n++) {
diff --git a/nixpkgs/pkgs/tools/networking/openssh/ssh-keysign.patch b/nixpkgs/pkgs/tools/networking/openssh/ssh-keysign.patch
new file mode 100644
index 000000000000..8ef3ad0126aa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/openssh/ssh-keysign.patch
@@ -0,0 +1,28 @@
+diff --git a/pathnames.h b/pathnames.h
+index cb44caa4..81ce3367 100644
+--- a/pathnames.h
++++ b/pathnames.h
+@@ -123,9 +123,7 @@
+ #endif
+ 
+ /* Location of ssh-keysign for hostbased authentication */
+-#ifndef _PATH_SSH_KEY_SIGN
+-#define _PATH_SSH_KEY_SIGN		"/usr/libexec/ssh-keysign"
+-#endif
++#define _PATH_SSH_KEY_SIGN		"ssh-keysign"
+ 
+ /* Location of ssh-pkcs11-helper to support keys in tokens */
+ #ifndef _PATH_SSH_PKCS11_HELPER
+diff --git a/sshconnect2.c b/sshconnect2.c
+index 1675f393..32ed70d1 100644
+--- a/sshconnect2.c
++++ b/sshconnect2.c
+@@ -1854,7 +1854,7 @@ ssh_keysign(struct sshkey *key, u_char **sigp, size_t *lenp,
+ 		closefrom(sock + 1);
+ 		debug3("%s: [child] pid=%ld, exec %s",
+ 		    __func__, (long)getpid(), _PATH_SSH_KEY_SIGN);
+-		execl(_PATH_SSH_KEY_SIGN, _PATH_SSH_KEY_SIGN, (char *)NULL);
++		execlp(_PATH_SSH_KEY_SIGN, _PATH_SSH_KEY_SIGN, (char *)NULL);
+ 		fatal("%s: exec(%s): %s", __func__, _PATH_SSH_KEY_SIGN,
+ 		    strerror(errno));
+ 	}
diff --git a/nixpkgs/pkgs/tools/networking/openvpn/default.nix b/nixpkgs/pkgs/tools/networking/openvpn/default.nix
new file mode 100644
index 000000000000..c8aa2c1f5c57
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/openvpn/default.nix
@@ -0,0 +1,78 @@
+{ stdenv, fetchurl, fetchpatch, pkgconfig
+, iproute, lzo, openssl, pam
+, useSystemd ? stdenv.isLinux, systemd ? null, utillinux ? null
+, pkcs11Support ? false, pkcs11helper ? null,
+}:
+
+assert useSystemd -> (systemd != null);
+assert pkcs11Support -> (pkcs11helper != null);
+
+with stdenv.lib;
+
+let
+  # There is some fairly brittle string substitutions going on to replace paths,
+  # so please verify this script in case you are upgrading it
+  update-resolved = fetchurl {
+    url = "https://raw.githubusercontent.com/jonathanio/update-systemd-resolved/v1.2.7/update-systemd-resolved";
+    sha256 = "12zfzh42apwbj7ks5kfxf3far7kaghlby4yapbhn00q8pbdlw7pq";
+  };
+
+in stdenv.mkDerivation rec {
+  pname = "openvpn";
+  version = "2.4.7";
+
+  src = fetchurl {
+    url = "https://swupdate.openvpn.net/community/releases/${pname}-${version}.tar.xz";
+    sha256 = "0j7na936isk9j8nsdrrbw7wmy09inmjqvsb8mw8az7k61xbm6bx4";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+
+  buildInputs = [ lzo openssl ]
+                  ++ optionals stdenv.isLinux [ pam iproute ]
+                  ++ optional useSystemd systemd
+                  ++ optional pkcs11Support pkcs11helper;
+
+  patches = [
+    ( fetchpatch {
+      url = "https://sources.debian.org/data/main/o/openvpn/2.4.7-1/debian/patches/fix-pkcs11-helper-hang.patch";
+      sha256 = "0c8jzbfsmb0mm9f7kkjxac1hk8q6igm267s687vx3mdqs1wys6bm";
+    })
+  ];
+
+  configureFlags = optionals stdenv.isLinux [
+    "--enable-iproute2"
+    "IPROUTE=${iproute}/sbin/ip" ]
+    ++ optional useSystemd "--enable-systemd"
+    ++ optional pkcs11Support "--enable-pkcs11"
+    ++ optional stdenv.isDarwin "--disable-plugin-auth-pam";
+
+  postInstall = ''
+    mkdir -p $out/share/doc/openvpn/examples
+    cp -r sample/sample-config-files/ $out/share/doc/openvpn/examples
+    cp -r sample/sample-keys/ $out/share/doc/openvpn/examples
+    cp -r sample/sample-scripts/ $out/share/doc/openvpn/examples
+
+    ${optionalString useSystemd ''
+      install -Dm755 ${update-resolved} $out/libexec/update-systemd-resolved
+
+      substituteInPlace $out/libexec/update-systemd-resolved \
+        --replace '/usr/bin/env bash' '${stdenv.shell} -e' \
+        --replace 'busctl call'       '${getBin systemd}/bin/busctl call' \
+        --replace '(ip '              '(${getBin iproute}/bin/ip ' \
+        --replace 'logger '           '${getBin utillinux}/bin/logger '
+    ''}
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "A robust and highly flexible tunneling application";
+    downloadPage = "https://openvpn.net/index.php/open-source/downloads.html";
+    homepage = https://openvpn.net/;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ viric ];
+    platforms = platforms.unix;
+    updateWalker = true;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/openvpn/openvpn-auth-ldap.nix b/nixpkgs/pkgs/tools/networking/openvpn/openvpn-auth-ldap.nix
new file mode 100644
index 000000000000..35b577ac37ec
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/openvpn/openvpn-auth-ldap.nix
@@ -0,0 +1,76 @@
+{ stdenv, lib, fetchFromGitHub, fetchpatch,
+  autoreconfHook, re2c, openldap, openvpn, gnustep, check
+}:
+
+let
+  srcName = "openvpn-auth-ldap";
+  srcVersion = "2.0.3";
+  debianRev = "6.1";
+
+  fetchPatchFromDebian =
+    {patch, sha256}:
+    fetchpatch {
+      inherit sha256;
+      url = "http://sources.debian.net/data/main/o/${srcName}/${srcVersion}-${debianRev}/debian/patches/${patch}";
+    };
+in
+
+stdenv.mkDerivation rec {
+  name = "${srcName}-${version}";
+  version = "${srcVersion}+deb${debianRev}";
+
+  src = fetchFromGitHub {
+    owner = "threerings";
+    repo = srcName;
+    rev = "auth-ldap-${srcVersion}";
+    sha256 = "1v635ylzf5x3l3lirf3n6173q1w8g0ssjjkf27qqw98c3iqp63sq";
+  };
+
+  patches = map fetchPatchFromDebian [
+    {patch = "STARTTLS_before_auth.patch";
+     sha256 = "02kky73mgx9jf16lpabppl271zyjn4a1160k8b6a0fax5ic8gbwk";}
+    {patch = "gobjc_4.7_runtime.patch";
+     sha256 = "0ljmdn70g5xp4kjcv59wg2wnqaifjdfdv1wlj356d10a7fzvxc76";}
+    {patch = "openvpn_ldap_simpler_add_handler_4";
+     sha256 = "0nha9mazp3dywbs1ywj8xi4ahzsjsasyrcic87v8c0x2nwl9kaa0";}
+    {patch = "auth-ldap-gnustep.patch";
+     sha256 = "053jni1s3pacpi2s43dkmk95j79ifh8rybjly13yy2dqffbasr31";}
+  ];
+
+  nativeBuildInputs = [
+    autoreconfHook
+  ];
+
+  buildInputs = [
+    check
+    gnustep.base
+    gnustep.libobjc
+    gnustep.make
+    openldap
+    openvpn
+    re2c
+  ];
+
+  configureFlags = [
+    "--with-objc-runtime=modern"
+    "--with-openvpn=${openvpn}/include"
+    "--libdir=$(out)/lib/openvpn"
+  ];
+
+  preInstall = ''
+    mkdir -p $out/lib/openvpn $out/share/doc/openvpn/examples
+    cp README $out/share/doc/openvpn/
+    cp auth-ldap.conf $out/share/doc/openvpn/examples/
+  '';
+
+  meta = with lib; {
+    description = "LDAP authentication plugin for OpenVPN";
+    homepage = https://github.com/threerings/openvpn-auth-ldap;
+    license = [
+      licenses.asl20
+      licenses.bsd3
+    ];
+    maintainers = [ maintainers.benley ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/openvpn/openvpn_learnaddress.nix b/nixpkgs/pkgs/tools/networking/openvpn/openvpn_learnaddress.nix
new file mode 100644
index 000000000000..d86934d079b1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/openvpn/openvpn_learnaddress.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchgit, makeWrapper,  coreutils, gawk, utillinux }:
+
+stdenv.mkDerivation {
+  name = "openvpn-learnaddress-19b03c3";
+
+  src = fetchgit {
+    url = https://gist.github.com/4058733.git;
+    rev = "19b03c3beb0190df46ea07bf4b68244acb8eae80";
+    sha256 = "16pcyvyhwsx34i0cjkkx906lmrwdd9gvznvqdwlad4ha8l8f8z42";
+  };
+
+  buildInputs = [ makeWrapper coreutils gawk utillinux ];
+
+  installPhase = ''
+    install -Dm555 ovpn-learnaddress $out/libexec/openvpn/openvpn-learnaddress
+
+    wrapProgram $out/libexec/openvpn/openvpn-learnaddress \
+        --prefix PATH : ${stdenv.lib.makeBinPath [ coreutils gawk utillinux ]}
+  '';
+
+  meta = {
+    description = "Openvpn learn-address script to manage a hosts-like file";
+    homepage = https://gist.github.com/offlinehacker/4058733/;
+    maintainers = [ stdenv.lib.maintainers.offline ];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/openvpn/update-resolv-conf.nix b/nixpkgs/pkgs/tools/networking/openvpn/update-resolv-conf.nix
new file mode 100644
index 000000000000..0f7e8f2c4450
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/openvpn/update-resolv-conf.nix
@@ -0,0 +1,34 @@
+{ stdenv, lib, fetchFromGitHub, makeWrapper, openresolv, coreutils, systemd }:
+
+let
+  binPath = lib.makeBinPath [ coreutils openresolv systemd ];
+
+in stdenv.mkDerivation {
+  name = "update-resolv-conf-2017-06-21";
+
+  src = fetchFromGitHub {
+    owner = "masterkorp";
+    repo = "openvpn-update-resolv-conf";
+    rev = "43093c2f970bf84cd374e18ec05ac6d9cae444b8";
+    sha256 = "1lf66bsgv2w6nzg1iqf25zpjf4ckcr45adkpgdq9gvhkfnvlp8av";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    install -Dm555 update-resolv-conf.sh $out/libexec/openvpn/update-resolv-conf
+    install -Dm555 update-systemd-network.sh $out/libexec/openvpn/update-systemd-network
+
+    for i in $out/libexec/openvpn/*; do
+      wrapProgram $i --prefix PATH : ${binPath}
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Script to update your /etc/resolv.conf with DNS settings that come from the received push dhcp-options";
+    homepage = https://github.com/masterkorp/openvpn-update-resolv-conf/;
+    maintainers = with maintainers; [ abbradar ];
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/openvpn/update-systemd-resolved.nix b/nixpkgs/pkgs/tools/networking/openvpn/update-systemd-resolved.nix
new file mode 100644
index 000000000000..ddb3cc8e3771
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/openvpn/update-systemd-resolved.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub
+, makeWrapper
+, iproute, systemd, coreutils, utillinux }:
+
+stdenv.mkDerivation rec {
+  pname = "update-systemd-resolved";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "jonathanio";
+    repo = "update-systemd-resolved";
+    rev = "v${version}";
+    sha256 = "19zhbpyms57yb70hi0ws5sbkpk2yqp9nnix3f86r36h1g93m70lm";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildFlags = [
+    "PREFIX=${placeholder "out"}/libexec/openvpn"
+  ];
+
+  installPhase = ''
+    wrapProgram $out/libexec/openvpn/update-systemd-resolved \
+      --prefix PATH : ${lib.makeBinPath [ iproute systemd coreutils utillinux ]}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Helper script for OpenVPN to directly update the DNS settings of a link through systemd-resolved via DBus";
+    homepage = https://github.com/jonathanio/update-systemd-resolved;
+    maintainers = with maintainers; [ eadwu ];
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/p2p/amule/default.nix b/nixpkgs/pkgs/tools/networking/p2p/amule/default.nix
new file mode 100644
index 000000000000..264c6fd4e165
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/p2p/amule/default.nix
@@ -0,0 +1,95 @@
+{ monolithic ? true # build monolithic amule
+, enableDaemon ? false # build amule daemon
+, httpServer ? false # build web interface for the daemon
+, client ? false # build amule remote gui
+, fetchFromGitHub, fetchpatch, stdenv, lib, zlib, wxGTK, perl, cryptopp, libupnp, gettext, libpng ? null
+, autoreconfHook, pkgconfig, makeWrapper, libX11 ? null }:
+
+assert httpServer -> libpng != null;
+assert client -> libX11 != null;
+
+stdenv.mkDerivation rec {
+  pname = "amule";
+  version = "2.3.2";
+
+  src = fetchFromGitHub {
+    owner = "amule-project";
+    repo = "amule";
+    rev = version;
+    sha256 = "010wxm6g9f92x6fympj501zbnjka32rzbx0sk3a2y4zpih5d2nsn";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://patch-diff.githubusercontent.com/raw/amule-project/amule/pull/135.patch";
+      sha256 = "1n24r1j28083b8ipbnh1nf6i4j6vx59pdkfl1c0g6bb4psx9wvvi";
+      name = "libupnp_18.patch";
+    })
+    (fetchpatch {
+      name = "amule-cryptopp_6.patch";
+      url = "https://github.com/amule-project/amule/commit/27c13f3e622b8a3eaaa05bb62b0149604bdcc9e8.patch";
+      sha256 = "0kq095gi3xl665wr864zlhp5f3blk75pr725yany8ilzcwrzdrnm";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace src/libs/ec/file_generator.pl \
+      --replace /usr/bin/perl ${perl}/bin/perl
+
+    # autotools expects these to be in the root
+    cp docs/{AUTHORS,README} .
+    cp docs/Changelog ./ChangeLog
+    cp docs/Changelog ./NEWS
+  '';
+
+  preAutoreconf = ''
+    pushd src/pixmaps/flags_xpm >/dev/null
+    ./makeflags.sh
+    popd >/dev/null
+  '';
+
+  nativeBuildInputs = [ autoreconfHook gettext makeWrapper pkgconfig ];
+
+  buildInputs = [
+    zlib wxGTK perl cryptopp libupnp
+  ] ++ lib.optional httpServer libpng
+    ++ lib.optional client libX11;
+
+  enableParallelBuilding = true;
+
+  configureFlags = [
+    "--with-crypto-prefix=${cryptopp}"
+    "--disable-debug"
+    "--enable-optimize"
+    (lib.enableFeature monolithic   "monolithic")
+    (lib.enableFeature enableDaemon "amule-daemon")
+    (lib.enableFeature client       "amule-gui")
+    (lib.enableFeature httpServer   "webserver")
+  ];
+
+  # aMule will try to `dlopen' libupnp and libixml, so help it
+  # find them.
+  postInstall = lib.optionalString monolithic ''
+    wrapProgram $out/bin/amule \
+      --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ libupnp ]}
+  '';
+
+  meta = with lib; {
+    description = "Peer-to-peer client for the eD2K and Kademlia networks";
+    longDescription = ''
+      aMule is an eMule-like client for the eD2k and Kademlia
+      networks, supporting multiple platforms.  Currently aMule
+      (officially) supports a wide variety of platforms and operating
+      systems, being compatible with more than 60 different
+      hardware+OS configurations.  aMule is entirely free, its
+      sourcecode released under the GPL just like eMule, and includes
+      no adware or spyware as is often found in proprietary P2P
+      applications.
+    '';
+
+    homepage = "https://github.com/amule-project/amule";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ phreedom ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/p2p/azureus/builder.sh b/nixpkgs/pkgs/tools/networking/p2p/azureus/builder.sh
new file mode 100644
index 000000000000..9d41dba2e439
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/p2p/azureus/builder.sh
@@ -0,0 +1,19 @@
+source $stdenv/setup
+
+mkdir -p $out/jars
+cp $src $out/jars/azureus.jar
+
+mkdir -p $out/bin
+cat > $out/bin/azureus <<EOF
+#! $SHELL -e
+azureusHome=$out
+if test -n "\$HOME"; then
+    azureusHome=\$HOME/.Azureus
+fi
+exec $jdk/bin/java -Xms16m -Xmx128m \
+  -cp $out/jars/azureus.jar:$swt/jars/swt.jar \
+  -Djava.library.path=$swt/lib \
+  -Dazureus.install.path=\$azureusHome \
+  org.gudy.azureus2.ui.swt.Main
+EOF
+chmod +x $out/bin/azureus
diff --git a/nixpkgs/pkgs/tools/networking/p2p/azureus/default.nix b/nixpkgs/pkgs/tools/networking/p2p/azureus/default.nix
new file mode 100644
index 000000000000..4fcfc251f3fa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/p2p/azureus/default.nix
@@ -0,0 +1,16 @@
+{stdenv, fetchurl, jdk, swt}:
+
+stdenv.mkDerivation {
+  name = "azureus-2.3.0.6";
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = http://tarballs.nixos.org/Azureus2.3.0.6.jar;
+    sha256 = "1hwrh3n0b0jbpsdk15zrs7pw175418phhmg6pn4xi1bvilxq1wrd";
+  };
+#  buildInputs = [unzip];
+  inherit jdk swt;
+
+  meta = {
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/p2p/gtk-gnutella/default.nix b/nixpkgs/pkgs/tools/networking/p2p/gtk-gnutella/default.nix
new file mode 100644
index 000000000000..70e36cb7ec58
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/p2p/gtk-gnutella/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, fetchurl, fetchpatch, bison, pkgconfig, gettext, desktop-file-utils
+, glib, gtk2, libxml2, libbfd, zlib, binutils, gnutls
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gtk-gnutella";
+  version = "1.1.14";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${version}/${pname}-${version}.tar.xz";
+    sha256 = "0sljjha4anfz1r1xq1c6qnnkjv62ld56p7xgj4bsi6lqmq1azvii";
+  };
+
+  patches = [
+    (fetchpatch {
+      # Avoid namespace conflict with glibc 2.28 'statx' struct / remove after v1.1.14
+      url = "https://github.com/gtk-gnutella/gtk-gnutella/commit/e4205a082eb32161e28de81f5cba8095eea8ecc7.patch";
+      sha256 = "0ffkw2cw2b2yhydii8jm40vd40p4xl224l8jvhimg02lgs3zfbca";
+    })
+    (fetchpatch {
+      url = "https://src.fedoraproject.org/rpms/gtk-gnutella/raw/f30/f/gtk-gnutella-1.1.14-endian.patch";
+      sha256 = "19q4lq8msknfz4mkbjdqmmgld16p30j2yx371p8spmr19q5i0sfn";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace Makefile.SH --replace "@exit 0" "@echo done"
+  '';
+
+  nativeBuildInputs = [ bison desktop-file-utils gettext pkgconfig ];
+  buildInputs = [ binutils glib gnutls gtk2 libbfd libxml2 zlib ];
+
+  configureScript = "./build.sh";
+  configureFlags = [ "--configure-only" ];
+
+  hardeningDisable = [ "bindnow" "fortify" "pic" "relro" ];
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    install -Dm0444 src/${pname}.man $out/share/man/man1/${pname}.1
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A GTK Gnutella client, optimized for speed and scalability";
+    homepage = "http://gtk-gnutella.sourceforge.net/"; # Code: https://github.com/gtk-gnutella/gtk-gnutella
+    changelog = "https://raw.githubusercontent.com/gtk-gnutella/gtk-gnutella/v${version}/ChangeLog";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/p2p/libtorrent/default.nix b/nixpkgs/pkgs/tools/networking/p2p/libtorrent/default.nix
new file mode 100644
index 000000000000..f750e3b1bfe1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/p2p/libtorrent/default.nix
@@ -0,0 +1,28 @@
+# NOTE: this is rakshava's version of libtorrent, used mainly by rtorrent
+# This is NOT libtorrent-rasterbar, used by Deluge, qbitttorent, and others
+{ stdenv, fetchFromGitHub, pkgconfig, autoreconfHook
+, cppunit, openssl, libsigcxx, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "libtorrent";
+  version = "0.13.8";
+
+  src = fetchFromGitHub {
+    owner = "rakshasa";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1h5y6ab3gs20yyprdfwcw8fh1c6czs4yrdj0kf54d2vp9qwz685r";
+  };
+
+  nativeBuildInputs = [ pkgconfig autoreconfHook ];
+  buildInputs = [ cppunit openssl libsigcxx zlib ];
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/rakshasa/libtorrent";
+    description = "A BitTorrent library written in C++ for *nix, with focus on high performance and good code";
+
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ebzzry codyopel ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/p2p/rtorrent/default.nix b/nixpkgs/pkgs/tools/networking/p2p/rtorrent/default.nix
new file mode 100644
index 000000000000..2ca31a6a1e73
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/p2p/rtorrent/default.nix
@@ -0,0 +1,52 @@
+{ stdenv, fetchurl, fetchFromGitHub, pkgconfig
+, libtool, autoconf, automake, cppunit
+, libtorrent, ncurses, libsigcxx, curl
+, zlib, openssl, xmlrpc_c
+
+# This no longer works
+, colorSupport ? false
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rtorrent";
+  version = "0.9.8";
+
+  src = fetchFromGitHub {
+    owner = "rakshasa";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0hcaf1brk402caa7hhlb2r1c93mjzxkm8gb19xfl33gkp3jpf372";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [
+    libtool autoconf automake cppunit
+    libtorrent ncurses libsigcxx curl zlib openssl xmlrpc_c
+  ];
+
+  # Optional patch adds support for custom configurable colors
+  # https://github.com/Chlorm/chlorm_overlay/blob/master/net-p2p/rtorrent/README.md
+  patches = stdenv.lib.optional colorSupport (fetchurl {
+    url = "https://gist.githubusercontent.com/codyopel/a816c2993f8013b5f4d6/raw/b952b32da1dcf14c61820dfcf7df00bc8918fec4/rtorrent-color.patch";
+    sha256 = "00gcl7yq6261rrfzpz2k8bd7mffwya0ifji1xqcvhfw50syk8965";
+  });
+
+  preConfigure = "./autogen.sh";
+
+  configureFlags = [ "--with-xmlrpc-c" "--with-posix-fallocate" ];
+
+  postInstall = ''
+    mkdir -p $out/share/man/man1 $out/share/doc/rtorrent
+    mv doc/old/rtorrent.1 $out/share/man/man1/rtorrent.1
+    mv doc/rtorrent.rc $out/share/doc/rtorrent/rtorrent.rc
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://rakshasa.github.io/rtorrent/;
+    description = "An ncurses client for libtorrent, ideal for use with screen, tmux, or dtach";
+
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ebzzry codyopel ];
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/p2p/seeks/default.nix b/nixpkgs/pkgs/tools/networking/p2p/seeks/default.nix
new file mode 100644
index 000000000000..2a89e419b2e4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/p2p/seeks/default.nix
@@ -0,0 +1,69 @@
+{ fetchgit, stdenv, zlib, bzip2, docbook2x, pcre, curl, libxml2, libevent, perl
+, pkgconfig, protobuf, tokyocabinet, tokyotyrant, opencv, autoconf, automake
+, libtool, seeks_confDir ? ""
+}:
+
+stdenv.mkDerivation {
+  name = "seeks-0.4.1";
+
+  src = fetchgit {
+    url = "git://github.com/beniz/seeks.git";
+    rev = "1168b3a2f3111c3fca31dd961135194c3e8df5fd";
+    sha256 = "18s2pxal9a2aayv63hc19vnkx5a5y9rhbipdpvkinbni5283iiar";
+  };
+
+  buildInputs =
+    [ zlib bzip2 docbook2x pcre curl libxml2 libevent perl pkgconfig
+      protobuf tokyocabinet tokyotyrant opencv autoconf automake libtool
+    ];
+
+  configureFlags =
+    [ # Enable the built-in web server providing a web search interface.
+      "--enable-httpserv-plugin=yes"
+      "--with-libevent=${libevent.dev}"
+    ];
+
+  preConfigure = ''
+    ./autogen.sh
+  '';
+
+  postInstall = stdenv.lib.optionalString (seeks_confDir != "") ''
+    ln -svf ${seeks_confDir}/config $out/etc/seeks/config
+    ln -svf ${seeks_confDir}/cf-config $out/etc/seeks/cf-config
+    ln -svf ${seeks_confDir}/httpserv-config $out/etc/seeks/httpserv-config
+    ln -svf ${seeks_confDir}/img-websearch-config $out/etc/seeks/img-websearch-config
+    ln -svf ${seeks_confDir}/lsh-config $out/etc/seeks/lsh-config
+    ln -svf ${seeks_confDir}/query-capture-config $out/etc/seeks/query-capture-config
+    ln -svf ${seeks_confDir}/udb-service-config $out/etc/seeks/udb-service-config
+    ln -svf ${seeks_confDir}/uri-capture-config $out/etc/seeks/uri-capture-config
+    ln -svf ${seeks_confDir}/websearch-config $out/etc/seeks/websearch-config
+  '';
+
+  # FIXME: Test suite needs <https://code.google.com/p/googletest/>.
+  doCheck = false;
+
+  meta = {
+    description = "Seeks, a social web search engine";
+
+    longDescription =
+      '' Seeks is a free and open technical design and application for
+         enabling social websearch.  Its specific purpose is to regroup users
+         whose queries are similar so they can share both the query results
+         and their experience on these results.  On this basis, Seeks allows
+         for true real-time, decentralized, websearch to emerge.
+
+         In the long term, there is no need for web crawlers and third-party
+         web indexes as users can push content directly to search groups.
+      '';
+
+    license = stdenv.lib.licenses.agpl3Plus;
+
+    homepage = http://www.seeks-project.info/;
+
+    maintainers = [
+      stdenv.lib.maintainers.matejc
+    ];
+    platforms = stdenv.lib.platforms.gnu ++ stdenv.lib.platforms.linux;  # arbitrary choice
+    broken = true; # 2018-04-11
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/p2p/tahoe-lafs/default.nix b/nixpkgs/pkgs/tools/networking/p2p/tahoe-lafs/default.nix
new file mode 100644
index 000000000000..e8a4261ed12e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/p2p/tahoe-lafs/default.nix
@@ -0,0 +1,95 @@
+{ fetchurl, lib, nettools, pythonPackages, texinfo }:
+
+# FAILURES: The "running build_ext" phase fails to compile Twisted
+# plugins, because it tries to write them into Twisted's (immutable)
+# store path. The problem appears to be non-fatal, but there's probably
+# some loss of functionality because of it.
+
+pythonPackages.buildPythonApplication rec {
+  version = "1.13.0";
+  pname = "tahoe-lafs";
+  namePrefix = "";
+
+  src = fetchurl {
+    url = "https://tahoe-lafs.org/downloads/tahoe-lafs-${version}.tar.bz2";
+    sha256 = "11pfz9yyy6qkkyi0kskxlbn2drfppx6yawqyv4kpkrkj4q7x5m42";
+  };
+
+  outputs = [ "out" "doc" "info" ];
+
+  postPatch = ''
+    sed -i "src/allmydata/util/iputil.py" \
+        -es"|_linux_path = '/sbin/ifconfig'|_linux_path = '${nettools}/bin/ifconfig'|g"
+
+    # Chroots don't have /etc/hosts and /etc/resolv.conf, so work around
+    # that.
+    for i in $(find src/allmydata/test -type f)
+    do
+      sed -i "$i" -e"s/localhost/127.0.0.1/g"
+    done
+
+    sed -i 's/"zope.interface.*"/"zope.interface"/' src/allmydata/_auto_deps.py
+    sed -i 's/"pycrypto.*"/"pycrypto"/' src/allmydata/_auto_deps.py
+  '';
+
+  # Remove broken and expensive tests.
+  preConfigure = ''
+    (
+      cd src/allmydata/test
+
+      # Buggy?
+      rm cli/test_create.py test_backupdb.py
+
+      # These require Tor and I2P.
+      rm test_connections.py test_iputil.py test_hung_server.py test_i2p_provider.py test_tor_provider.py
+
+      # Expensive
+      rm test_system.py
+    )
+  '';
+
+  nativeBuildInputs = with pythonPackages; [ sphinx texinfo ];
+
+  # The `backup' command requires `sqlite3'.
+  propagatedBuildInputs = with pythonPackages; [
+    twisted foolscap nevow simplejson zfec pycryptopp darcsver
+    setuptoolsTrial setuptoolsDarcs pycrypto pyasn1 zope_interface
+    service-identity pyyaml magic-wormhole treq characteristic
+  ];
+
+  checkInputs = with pythonPackages; [ mock hypothesis twisted ];
+
+  # Install the documentation.
+  postInstall = ''
+    (
+      cd docs
+
+      make singlehtml
+      mkdir -p "$doc/share/doc/${pname}-${version}"
+      cp -rv _build/singlehtml/* "$doc/share/doc/${pname}-${version}"
+
+      make info
+      mkdir -p "$info/share/info"
+      cp -rv _build/texinfo/*.info "$info/share/info"
+    )
+  '';
+
+  checkPhase = ''
+    trial --rterrors allmydata
+  '';
+
+  meta = {
+    description = "Tahoe-LAFS, a decentralized, fault-tolerant, distributed storage system";
+    longDescription = ''
+      Tahoe-LAFS is a secure, decentralized, fault-tolerant filesystem.
+      This filesystem is encrypted and spread over multiple peers in
+      such a way that it remains available even when some of the peers
+      are unavailable, malfunctioning, or malicious.
+    '';
+    homepage = http://tahoe-lafs.org/;
+    license = [ lib.licenses.gpl2Plus /* or */ "TGPPLv1+" ];
+    maintainers = with lib.maintainers; [ MostAwesomeDude ];
+    platforms = lib.platforms.gnu ++ lib.platforms.linux;
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/packetdrill/default.nix b/nixpkgs/pkgs/tools/networking/packetdrill/default.nix
new file mode 100644
index 000000000000..623645efc0ca
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/packetdrill/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub, bison, flex }:
+stdenv.mkDerivation {
+  version = "1.0";
+  pname = "packetdrill";
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "packetdrill";
+    rev = "58a7865c47e3a71e92ca0e4cc478c320e1c35f82";
+    sha256 = "09sqiakmn63idfjhy2ddf1456sfhi8yhsbp8lxvc1yfjikjxwwbc";
+  };
+  setSourceRoot = ''
+    export sourceRoot=$(realpath */gtests/net/packetdrill)
+  '';
+  NIX_CFLAGS_COMPILE = [
+    "-Wno-error=unused-result"
+    "-Wno-error=stringop-truncation"
+    "-Wno-error=address-of-packed-member"
+  ];
+  nativeBuildInputs = [ bison flex ];
+  patches = [ ./nix.patch ];
+  enableParallelBuilding = true;
+  meta = {
+    description = "Quick, precise tests for entire TCP/UDP/IPv4/IPv6 network stacks";
+    homepage = https://github.com/google/packetdrill;
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = with stdenv.lib.maintainers; [ dmjio cleverca22 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/packetdrill/nix.patch b/nixpkgs/pkgs/tools/networking/packetdrill/nix.patch
new file mode 100644
index 000000000000..6bad14421b98
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/packetdrill/nix.patch
@@ -0,0 +1,24 @@
+diff --git a/gtests/net/packetdrill/Makefile.common b/gtests/net/packetdrill/Makefile.common
+index 0ec741f..bf1cbb1 100644
+--- a/Makefile.common
++++ b/Makefile.common
+@@ -33,7 +33,7 @@ packetdrill-lib := \
+ packetdrill-objs := packetdrill.o $(packetdrill-lib)
+ 
+ packetdrill: $(packetdrill-objs)
+-	$(CC) -o packetdrill -g -static $(packetdrill-objs) $(packetdrill-ext-libs)
++	$(CC) -o packetdrill -g $(packetdrill-objs) $(packetdrill-ext-libs)
+ 
+ test-bins := checksum_test packet_parser_test packet_to_string_test
+ tests: $(test-bins)
+@@ -43,6 +43,10 @@ tests: $(test-bins)
+ 
+ binaries: packetdrill $(test-bins)
+ 
++install: packetdrill $(test-bins)
++	mkdir -p ${out}/bin
++	cp -vi $^ ${out}/bin
++
+ checksum_test-objs := $(packetdrill-lib) checksum_test.o
+ checksum_test: $(checksum_test-objs)
+ 	$(CC) -o checksum_test $(checksum_test-objs) $(packetdrill-ext-libs)
diff --git a/nixpkgs/pkgs/tools/networking/pacparser/default.nix b/nixpkgs/pkgs/tools/networking/pacparser/default.nix
new file mode 100644
index 000000000000..211256ea72b8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/pacparser/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "pacparser";
+  version = "1.3.7";
+
+  src = fetchurl {
+    url = "https://github.com/manugarg/pacparser/releases/download/${version}/${pname}-${version}.tar.gz";
+    sha256 = "0jfjm8lqyhdy9ny8a8icyd4rhclhfn608cr1i15jml82q8pyqj7b";
+  };
+
+  makeFlags = [ "NO_INTERNET=1" ];
+
+  preConfigure = ''
+    export makeFlags="$makeFlags PREFIX=$out"
+    patchShebangs tests/runtests.sh
+    cd src
+  '';
+
+  hardeningDisable = [ "format" ];
+
+  meta = with stdenv.lib; {
+    description = "A library to parse proxy auto-config (PAC) files";
+    homepage = http://pacparser.manugarg.com/;
+    license = licenses.lgpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/par2cmdline/default.nix b/nixpkgs/pkgs/tools/networking/par2cmdline/default.nix
new file mode 100644
index 000000000000..9bc4c178665d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/par2cmdline/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "par2cmdline";
+  version = "0.8.0";
+
+  src = fetchFromGitHub {
+    owner = "Parchive";
+    repo = "par2cmdline";
+    rev = "v${version}";
+    sha256 = "0f1jsd5sw2wynjzi7yjqjaf13yhyjfdid91p8yh0jn32y03kjyrz";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/Parchive/par2cmdline;
+    description = "PAR 2.0 compatible file verification and repair tool";
+    longDescription = ''
+      par2cmdline is a program for creating and using PAR2 files to detect
+      damage in data files and repair them if necessary. It can be used with
+      any kind of file.
+    '';
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.muflax ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/pcapc/default.nix b/nixpkgs/pkgs/tools/networking/pcapc/default.nix
new file mode 100644
index 000000000000..663e04db4601
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/pcapc/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub, libpcap, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "pcapc";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    sha256 = "137crs0bb7kh9a8p9g168yj2jrp0h3j3073nwh31jy4nk0g5hlfp";
+    rev = "v${version}";
+    repo = "pcapc";
+    owner = "pfactum";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ libpcap ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  enableParallelBuilding = true;
+
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/pfactum/pcapc;
+    description = "Compile libpcap filter expressions into BPF opcodes";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/pcapfix/default.nix b/nixpkgs/pkgs/tools/networking/pcapfix/default.nix
new file mode 100644
index 000000000000..92df5d55524b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/pcapfix/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "pcapfix-1.1.4";
+
+  src = fetchurl {
+    url = "https://f00l.de/pcapfix/${name}.tar.gz";
+    sha256 = "0m6308ka33wqs568b7cwa1f5q0bv61j2nwfizdyzrazw673lnh6d";
+  };
+
+  postPatch = ''sed -i "s|/usr|$out|" Makefile'';
+
+  meta = with stdenv.lib; {
+    homepage = https://f00l.de/pcapfix/;
+    description = "Repair your broken pcap and pcapng files";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.ehmry ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/pdnsd/default.nix b/nixpkgs/pkgs/tools/networking/pdnsd/default.nix
new file mode 100644
index 000000000000..f5d30fa32a8b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/pdnsd/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation {
+  name = "pdnsd-1.2.9a-par";
+
+  src = fetchurl {
+    url = http://members.home.nl/p.a.rombouts/pdnsd/releases/pdnsd-1.2.9a-par.tar.gz;
+    sha256 = "0yragv5zk77a1hfkpnsh17vvsw8b14d6mzfng4bb7i58rb83an5v";
+  };
+
+  patchPhase = ''
+    sed -i 's/.*(cachedir).*/:/' Makefile.in
+  '';
+
+  configureFlags = [ "--enable-ipv6" ];
+
+  # fix ipv6 on darwin
+  CPPFLAGS = "-D__APPLE_USE_RFC_3542";
+
+  meta = with stdenv.lib; {
+    description = "Permanent DNS caching";
+    homepage = http://members.home.nl/p.a.rombouts/pdnsd;
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [viric];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/pdsh/default.nix b/nixpkgs/pkgs/tools/networking/pdsh/default.nix
new file mode 100644
index 000000000000..f5c74cfb511f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/pdsh/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, fetchurl, perl, readline, rsh, ssh }:
+
+stdenv.mkDerivation rec {
+  name = "pdsh-2.33";
+
+  src = fetchurl {
+    url = "https://github.com/chaos/pdsh/releases/download/${name}/${name}.tar.gz";
+    sha256 = "0bwlkl9inj66iwvafg00pi3sk9n673phdi0kcc59y9nn55s0hs3k";
+  };
+
+  buildInputs = [ perl readline ssh ];
+
+  preConfigure = ''
+    configureFlagsArray=(
+      "--infodir=$out/share/info"
+      "--mandir=$out/share/man"
+      "--with-machines=/etc/pdsh/machines"
+      ${if readline == null then "--without-readline" else "--with-readline"}
+      ${if ssh == null then "--without-ssh" else "--with-ssh"}
+      ${if rsh == false then "--without-rsh" else "--with-rsh"}
+      "--with-dshgroups"
+      "--with-xcpu"
+      "--disable-debug"
+      '--with-rcmd-rank-list=ssh,krb4,exec,xcpu,rsh'
+    )
+  '';
+
+  meta = {
+    homepage = https://github.com/chaos/pdsh;
+    description = "High-performance, parallel remote shell utility";
+    license = stdenv.lib.licenses.gpl2;
+
+    longDescription = ''
+      Pdsh is a high-performance, parallel remote shell utility. It has
+      built-in, thread-safe clients for Berkeley and Kerberos V4 rsh and
+      can call SSH externally (though with reduced performance). Pdsh
+      uses a "sliding window" parallel algorithm to conserve socket
+      resources on the initiating node and to allow progress to continue
+      while timeouts occur on some connections.
+    '';
+
+    platforms = stdenv.lib.platforms.unix;
+    maintainers = [ stdenv.lib.maintainers.peti ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/persepolis/default.nix b/nixpkgs/pkgs/tools/networking/persepolis/default.nix
new file mode 100644
index 000000000000..7412bc568a28
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/persepolis/default.nix
@@ -0,0 +1,60 @@
+{ stdenv, lib, buildPythonApplication, fetchFromGitHub, makeWrapper
+, aria
+, libnotify
+, pulseaudio
+, psutil
+, pyqt5
+, requests
+, setproctitle
+, sound-theme-freedesktop
+, youtube-dl
+}:
+
+buildPythonApplication rec {
+  pname = "persepolis";
+  version = "3.1.0";
+
+  src = fetchFromGitHub {
+    owner = "persepolisdm";
+    repo = "persepolis";
+    rev = version;
+    sha256 = "0xngk8wgj5k27mh3bcrf2wwzqr8a3g0d4pc5i5vcavnnaj03j44m";
+  };
+
+  # see: https://github.com/persepolisdm/persepolis/blob/3.1.0/setup.py#L130
+  doCheck = false;
+
+  preBuild=''
+    substituteInPlace setup.py --replace "answer = input(" "answer = 'y'#"
+  '';
+
+  postPatch = ''
+    sed -i 's|/usr/share/sounds/freedesktop/stereo/|${sound-theme-freedesktop}/share/sounds/freedesktop/stereo/|' setup.py
+    sed -i "s|'persepolis = persepolis.__main__'|'persepolis = persepolis.scripts.persepolis:main'|" setup.py
+  '';
+
+  postInstall = ''
+     mkdir -p $out/share/applications
+     cp $src/xdg/com.github.persepolisdm.persepolis.desktop $out/share/applications
+     wrapProgram $out/bin/persepolis --prefix PATH : "${lib.makeBinPath [aria libnotify ]}"
+  '';
+
+  buildInputs = [ makeWrapper ];
+
+  propagatedBuildInputs = [
+    pulseaudio
+    psutil
+    pyqt5
+    requests
+    setproctitle
+    sound-theme-freedesktop
+    youtube-dl
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Persepolis Download Manager is a GUI for aria2.";
+    homepage = https://persepolisdm.github.io/;
+    license = licenses.gpl3;
+    maintainers = [ maintainers.linarcx ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/philter/default.nix b/nixpkgs/pkgs/tools/networking/philter/default.nix
new file mode 100644
index 000000000000..c8b441168468
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/philter/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, python }:
+
+stdenv.mkDerivation rec {
+  pname = "philter";
+  version = "1.1";
+  src = fetchurl {
+    url = "mirror://sourceforge/philter/${pname}-${version}.tar.gz";
+    sha256 = "177pqfflhdn2mw9lc1wv9ik32ji69rjqr6dw83hfndwlsva5151l";
+  };
+
+  installPhase = ''
+    mkdir -p "$out"/{bin,share/philter}
+    cp .philterrc "$out"/share/philter/philterrc
+    sed -i 's@/usr/local/bin@${python}/bin@' src/philter.py
+    cp src/philter.py "$out"/bin/philter
+    chmod +x "$out"/bin/philter
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Mail sorter for Maildirs";
+    homepage = http://philter.sourceforge.net;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+  };
+
+  passthru = {
+    updateInfo = {
+      downloadPage = "http://philter.sourceforge.net/";
+    };
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/phodav/default.nix b/nixpkgs/pkgs/tools/networking/phodav/default.nix
new file mode 100644
index 000000000000..0d7b30ae1526
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/phodav/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl
+, pkgconfig, libsoup, meson, ninja }:
+
+let
+  version = "2.3";
+in stdenv.mkDerivation rec {
+  pname = "phodav";
+  inherit version;
+
+  src = fetchurl {
+    url = "http://ftp.gnome.org/pub/GNOME/sources/phodav/${version}/${pname}-${version}.tar.xz";
+    sha256 = "0ndy5qva6bq7vhk06jq2d4nr5fp98xsdwypg42vjz91h9ii1xxkf";
+  };
+
+  mesonFlags = [
+    "-Davahi=disabled"
+    "-Dsystemd=disabled"
+    "-Dgtk_doc=disabled"
+  ];
+
+  nativeBuildInputs = [ libsoup pkgconfig meson ninja ];
+
+  meta = with stdenv.lib; {
+    description = "WebDav server implementation and library using libsoup";
+    homepage = https://wiki.gnome.org/phodav;
+    license = licenses.lgpl21;
+    maintainers = with maintainers; [ gnidorah ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/photon/default.nix b/nixpkgs/pkgs/tools/networking/photon/default.nix
new file mode 100644
index 000000000000..8d75ea413eca
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/photon/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, python3Packages, fetchFromGitHub }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "photon";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "s0md3v";
+    repo = "Photon";
+    rev = "v${version}";
+    sha256 = "02z1xj72bq35dilr4b6njry4kixz6j2a3ag02nla98q0fvgmgnvy";
+  };
+
+  dontBuild = true;
+  doCheck = false;
+
+  propagatedBuildInputs = with python3Packages; [ requests urllib3 tld ];
+
+  installPhase = ''
+    mkdir -p "$out"/{bin,share/photon}
+    cp -R photon.py core plugins $out/share/photon
+ 
+    makeWrapper ${python3Packages.python.interpreter} $out/bin/photon \
+      --set PYTHONPATH "$PYTHONPATH:$out/share/photon" \
+      --add-flags "-O $out/share/photon/photon.py"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "a lightning fast web crawler which extracts URLs, files, intel & endpoints from a target";
+    homepage = https://github.com/s0md3v/Photon;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ genesis ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/photon/destdir.patch b/nixpkgs/pkgs/tools/networking/photon/destdir.patch
new file mode 100644
index 000000000000..e6cf997f2e7c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/photon/destdir.patch
@@ -0,0 +1,20 @@
+diff --git a/photon.py.old b/photon.py
+index 92498e4..f7e2c3d 100644
+--- a/photon.py.old
++++ b/photon.py
+@@ -185,7 +185,7 @@ if args.user_agent:
+     user_agents = args.user_agent.split(',')
+ else:
+     user_agents = []
+-    with open(os.getcwd() + '/core/user-agents.txt', 'r') as uas:
++    with open('DESTDIR/core/user-agents.txt', 'r') as uas:
+         for agent in uas:
+             user_agents.append(agent.strip('\n'))
+ 
+@@ -534,4 +534,4 @@ if args.export:
+ if not colors: # if colors are disabled
+     print ('%s Results saved in %s directory' % (good, output_dir))
+ else:
+-    print ('%s Results saved in \033[;1m%s\033[0m directory' % (good, output_dir))
+\ No newline at end of file
++    print ('%s Results saved in \033[;1m%s\033[0m directory' % (good, output_dir))
diff --git a/nixpkgs/pkgs/tools/networking/pingtcp/default.nix b/nixpkgs/pkgs/tools/networking/pingtcp/default.nix
new file mode 100644
index 000000000000..d791f6b91d99
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/pingtcp/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "pingtcp";
+  version = "0.0.3";
+
+  src = fetchFromGitHub {
+    owner = "LanetNetwork";
+    repo = "pingtcp";
+    sha256 = "1cv84n30y03s1b83apxxyn2jv5ss1pywsahrfrpkb6zcgzzrcqn8";
+    rev = "refs/tags/v${version}";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  enableParallelBuilding = true;
+
+  doCheck = false;
+
+  postInstall = ''
+    install -Dm644 {..,$out/share/doc/pingtcp}/README.md
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Measure TCP handshake time";
+    homepage = https://github.com/LanetNetwork/pingtcp;
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/pirate-get/default.nix b/nixpkgs/pkgs/tools/networking/pirate-get/default.nix
new file mode 100644
index 000000000000..b92d255b719c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/pirate-get/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, python3Packages }:
+
+with python3Packages;
+
+buildPythonApplication rec {
+  pname = "pirate-get";
+  version = "0.3.4";
+
+  doCheck = false;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0f82yf3bl9jaywagv4vvwypm57z1x8a8qqn0xhz9np3949df4ysm";
+  };
+
+  propagatedBuildInputs = [ colorama veryprettytable beautifulsoup4 pyperclip ];
+
+  meta = with stdenv.lib; {
+    description = "A command line interface for The Pirate Bay";
+    homepage = https://github.com/vikstrous/pirate-get;
+    license = licenses.gpl1;
+    maintainers = with maintainers; [ rnhmjoj ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/pixiewps/default.nix b/nixpkgs/pkgs/tools/networking/pixiewps/default.nix
new file mode 100644
index 000000000000..8bbf589f3b3d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/pixiewps/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "pixiewps";
+  version = "1.2.2";
+  src = fetchFromGitHub {
+    owner = "wiire";
+    repo = "pixiewps";
+    rev = "v${version}";
+    sha256 = "09znnj7p8cks7zxzklkdm4zy2qnp92vhngm9r0zfgawnl2b4r2aw";
+  };
+
+  preBuild = ''
+    cd src
+    substituteInPlace Makefile --replace "\$(DESTDIR)/usr" "$out"
+    substituteInPlace Makefile --replace "/local" ""
+  '';
+  
+  meta = {
+    description = "An offline WPS bruteforce utility";
+    homepage = https://github.com/wiire/pixiewps;
+    license = stdenv.lib.licenses.gpl3;
+    maintainers = [ stdenv.lib.maintainers.nico202 ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/pmacct/default.nix b/nixpkgs/pkgs/tools/networking/pmacct/default.nix
new file mode 100644
index 000000000000..5d0c5cccdedb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/pmacct/default.nix
@@ -0,0 +1,62 @@
+{ stdenv
+, fetchFromGitHub
+, pkgconfig
+, autoreconfHook
+, libtool
+, libpcap
+
+# Optional Dependencies
+, zlib ? null
+, withJansson ? true, jansson ? null
+, withNflog ? true, libnetfilter_log ? null
+, withSQLite ? true, sqlite ? null
+, withPgSQL ? true, postgresql ? null
+, withMysql ? true, libmysqlclient ? null }:
+
+assert withJansson -> jansson != null;
+assert withNflog -> libnetfilter_log != null;
+assert withSQLite -> sqlite != null;
+assert withPgSQL -> postgresql != null;
+assert withMysql -> libmysqlclient != null;
+
+let inherit (stdenv.lib) optional; in
+
+stdenv.mkDerivation rec {
+  version = "1.7.3";
+  pname = "pmacct";
+
+  src = fetchFromGitHub {
+    owner = "pmacct";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0j5qmkya67q7jvaddcj00blmaac37bkir1zb3m1xmm95gm5lf2p5";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig libtool ];
+  buildInputs = [ libpcap ]
+    ++ optional withJansson jansson
+    ++ optional withNflog libnetfilter_log
+    ++ optional withSQLite sqlite
+    ++ optional withPgSQL postgresql
+    ++ optional withMysql [ libmysqlclient zlib ];
+
+  configureFlags = [
+    "--with-pcap-includes=${libpcap}/include"
+  ] ++ optional withJansson "--enable-jansson"
+    ++ optional withNflog "--enable-nflog"
+    ++ optional withSQLite "--enable-sqlite3"
+    ++ optional withPgSQL "--enable-pgsql"
+    ++ optional withMysql "--enable-mysql";
+
+  meta = with stdenv.lib; {
+    description = "pmacct is a small set of multi-purpose passive network monitoring tools";
+    longDescription = ''
+      pmacct is a small set of multi-purpose passive network monitoring tools
+      [NetFlow IPFIX sFlow libpcap BGP BMP RPKI IGP Streaming Telemetry]
+    '';
+    homepage = "http://www.pmacct.net/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ "0x4A6F" ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/polygraph/default.nix b/nixpkgs/pkgs/tools/networking/polygraph/default.nix
new file mode 100644
index 000000000000..bdc6e7b67f7d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/polygraph/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl, openssl, zlib, ncurses }:
+
+stdenv.mkDerivation rec {
+  name = "polygraph-4.13.0";
+
+  src = fetchurl {
+    url = "http://www.web-polygraph.org/downloads/srcs/${name}-src.tgz";
+    sha256 = "1rwzci3n7q33hw3spd79adnclzwgwlxcisc9szzjmcjqhbkcpj1a";
+  };
+
+  buildInputs = [ openssl zlib ncurses ];
+
+  meta = with stdenv.lib; {
+    homepage = http://www.web-polygraph.org;
+    description = "Performance testing tool for caching proxies, origin server accelerators, L4/7 switches, content filters, and other Web intermediaries";
+    platforms = platforms.linux;
+    license = licenses.asl20;
+    maintainers = [ maintainers.lethalman ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/polysh/default.nix b/nixpkgs/pkgs/tools/networking/polysh/default.nix
new file mode 100644
index 000000000000..cf963068d1c5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/polysh/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl, python2Packages }:
+
+let
+  inherit (python2Packages) buildPythonApplication;
+in
+buildPythonApplication rec {
+  pname = "polysh";
+  version = "0.4";
+  src = fetchurl {
+          url = "http://guichaz.free.fr/polysh/files/${pname}-${version}.tar.bz2";
+          sha256 = "0kxhp38c8a8hc8l86y53l2z5zpzxc4b8lx5zyzmq1badcrfc4mh4";
+        };
+
+  meta = with stdenv.lib; {
+    description = "A tool to aggregate several remote shells into one";
+    longDescription = ''
+      Polysh is a tool to aggregate several remote shells into one. It
+      is used to launch an interactive remote shell on many machines
+      at once.
+    '';
+    maintainers = [ maintainers.astsmtl ];
+    homepage = http://guichaz.free.fr/polysh/;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ppp/default.nix b/nixpkgs/pkgs/tools/networking/ppp/default.nix
new file mode 100644
index 000000000000..0efef74f6c35
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ppp/default.nix
@@ -0,0 +1,69 @@
+{ stdenv, fetchurl, substituteAll, libpcap, openssl }:
+
+stdenv.mkDerivation rec {
+  version = "2.4.7";
+  pname = "ppp";
+
+  src = fetchurl {
+    url = "mirror://samba/ppp/${pname}-${version}.tar.gz";
+    sha256 = "0c7vrjxl52pdwi4ckrvfjr08b31lfpgwf3pp0cqy76a77vfs7q02";
+  };
+
+  patches =
+    [ ( substituteAll {
+        src = ./nix-purity.patch;
+        inherit libpcap;
+        glibc = stdenv.cc.libc.dev or stdenv.cc.libc;
+      })
+      # Without nonpriv.patch, pppd --version doesn't work when not run as
+      # root.
+      ./nonpriv.patch
+      (fetchurl {
+        name = "CVE-2015-3310.patch";
+        url = "https://salsa.debian.org/roam/ppp/raw/ef5d585aca6b1200a52c7109caa66ef97964d76e/debian/patches/rc_mksid-no-buffer-overflow";
+        sha256 = "1dk00j7bg9nfgskw39fagnwv1xgsmyv0xnkd6n1v5gy0psw0lvqh";
+      })
+      (fetchurl {
+        url = "https://salsa.debian.org/roam/ppp/raw/ef5d585aca6b1200a52c7109caa66ef97964d76e/debian/patches/0016-pppoe-include-netinet-in.h-before-linux-in.h.patch";
+        sha256 = "1xnmqn02kc6g5y84xynjwnpv9cvrfn3nyv7h7r8j8xi7qf2aj4q8";
+      })
+      (fetchurl {
+        url = https://www.nikhef.nl/~janjust/ppp/ppp-2.4.7-eaptls-mppe-1.102.patch;
+        sha256 = "04war8l5szql53l36043hvzgfwqp3v76kj8brbz7wlf7vs2mlkia";
+      })
+      ./musl-fix-headers.patch
+    ];
+
+  buildInputs = [ libpcap openssl ];
+
+  postPatch = ''
+    # strip is not found when cross compiling with seemingly no way to point
+    # make to the right place, fixup phase will correctly strip
+    # everything anyway so we remove it from the Makefiles
+    for file in $(find -name Makefile.linux); do
+      substituteInPlace "$file" --replace '$(INSTALL) -s' '$(INSTALL)'
+    done
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin
+    make install
+    install -D -m 755 scripts/{pon,poff,plog} $out/bin
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    for tgt in pon poff plog; do
+      substituteInPlace "$out/bin/$tgt" --replace "/usr/sbin" "$out/bin"
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://ppp.samba.org/;
+    description = "Point-to-point implementation for Linux and Solaris";
+    license = with licenses; [ bsdOriginal publicDomain gpl2 lgpl2 ];
+    platforms = platforms.linux;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ppp/musl-fix-headers.patch b/nixpkgs/pkgs/tools/networking/ppp/musl-fix-headers.patch
new file mode 100644
index 000000000000..030cc97d157f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ppp/musl-fix-headers.patch
@@ -0,0 +1,137 @@
+diff --git a/include/net/ppp_defs.h b/include/net/ppp_defs.h
+index b06eda5..dafa36c 100644
+--- a/include/net/ppp_defs.h
++++ b/include/net/ppp_defs.h
+@@ -38,6 +38,8 @@
+ #ifndef _PPP_DEFS_H_
+ #define _PPP_DEFS_H_
+ 
++#include <sys/time.h>
++
+ /*
+  * The basic PPP frame.
+  */
+diff --git a/pppd/Makefile.linux b/pppd/Makefile.linux
+index a74c914..7acd2cf 100644
+--- a/pppd/Makefile.linux
++++ b/pppd/Makefile.linux
+@@ -126,7 +126,7 @@ LIBS	+= -lcrypt
+ endif
+ 
+ ifdef USE_LIBUTIL
+-CFLAGS	+= -DHAVE_LOGWTMP=1
++#CFLAGS	+= -DHAVE_LOGWTMP=1
+ LIBS	+= -lutil
+ endif
+ 
+diff --git a/pppd/magic.h b/pppd/magic.h
+index c81213b..305aece 100644
+--- a/pppd/magic.h
++++ b/pppd/magic.h
+@@ -42,6 +42,8 @@
+  * $Id: magic.h,v 1.5 2003/06/11 23:56:26 paulus Exp $
+  */
+ 
++#include <sys/cdefs.h>
++
+ void magic_init __P((void));	/* Initialize the magic number generator */
+ u_int32_t magic __P((void));	/* Returns the next magic number */
+ 
+diff --git a/pppd/plugins/rp-pppoe/if.c b/pppd/plugins/rp-pppoe/if.c
+index 91e9a57..9c0fac3 100644
+--- a/pppd/plugins/rp-pppoe/if.c
++++ b/pppd/plugins/rp-pppoe/if.c
+@@ -30,10 +30,6 @@ static char const RCSID[] =
+ #include <linux/if_packet.h>
+ #endif
+ 
+-#ifdef HAVE_NET_ETHERNET_H
+-#include <net/ethernet.h>
+-#endif
+-
+ #ifdef HAVE_ASM_TYPES_H
+ #include <asm/types.h>
+ #endif
+diff --git a/pppd/plugins/rp-pppoe/plugin.c b/pppd/plugins/rp-pppoe/plugin.c
+index a8c2bb4..ca34d79 100644
+--- a/pppd/plugins/rp-pppoe/plugin.c
++++ b/pppd/plugins/rp-pppoe/plugin.c
+@@ -46,7 +46,6 @@ static char const RCSID[] =
+ #include <unistd.h>
+ #include <fcntl.h>
+ #include <signal.h>
+-#include <net/ethernet.h>
+ #include <net/if_arp.h>
+ #include <linux/ppp_defs.h>
+ #include <linux/if_pppox.h>
+diff --git a/pppd/plugins/rp-pppoe/pppoe-discovery.c b/pppd/plugins/rp-pppoe/pppoe-discovery.c
+index 3d3bf4e..b5f82d3 100644
+--- a/pppd/plugins/rp-pppoe/pppoe-discovery.c
++++ b/pppd/plugins/rp-pppoe/pppoe-discovery.c
+@@ -27,10 +27,6 @@
+ #include <linux/if_packet.h>
+ #endif
+ 
+-#ifdef HAVE_NET_ETHERNET_H
+-#include <net/ethernet.h>
+-#endif
+-
+ #ifdef HAVE_ASM_TYPES_H
+ #include <asm/types.h>
+ #endif
+@@ -55,6 +51,8 @@ void die(int status)
+ 	exit(status);
+ }
+ 
++#define error(x...) fprintf(stderr, x)
++
+ /* Initialize frame types to RFC 2516 values.  Some broken peers apparently
+    use different frame types... sigh... */
+ 
+diff --git a/pppd/plugins/rp-pppoe/pppoe.h b/pppd/plugins/rp-pppoe/pppoe.h
+index c4aaa6e..70aef85 100644
+--- a/pppd/plugins/rp-pppoe/pppoe.h
++++ b/pppd/plugins/rp-pppoe/pppoe.h
+@@ -88,18 +88,6 @@ typedef unsigned long UINT32_t;
+ #include <linux/if_ether.h>
+ #endif
+ 
+-#ifdef HAVE_NETINET_IF_ETHER_H
+-#include <sys/types.h>
+-
+-#ifdef HAVE_SYS_SOCKET_H
+-#include <sys/socket.h>
+-#endif
+-#ifndef HAVE_SYS_DLPI_H
+-#include <netinet/if_ether.h>
+-#endif
+-#endif
+-
+-
+ /* Ethernet frame types according to RFC 2516 */
+ #define ETH_PPPOE_DISCOVERY 0x8863
+ #define ETH_PPPOE_SESSION   0x8864
+diff --git a/pppd/sys-linux.c b/pppd/sys-linux.c
+index 6d71530..86d224e 100644
+--- a/pppd/sys-linux.c
++++ b/pppd/sys-linux.c
+@@ -102,19 +102,11 @@
+ #define MAX_ADDR_LEN 7
+ #endif
+ 
+-#if __GLIBC__ >= 2
+ #include <asm/types.h>		/* glibc 2 conflicts with linux/types.h */
+ #include <net/if.h>
+ #include <net/if_arp.h>
+ #include <net/route.h>
+ #include <netinet/if_ether.h>
+-#else
+-#include <linux/types.h>
+-#include <linux/if.h>
+-#include <linux/if_arp.h>
+-#include <linux/route.h>
+-#include <linux/if_ether.h>
+-#endif
+ #include <netinet/in.h>
+ #include <arpa/inet.h>
+ 
diff --git a/nixpkgs/pkgs/tools/networking/ppp/nix-purity.patch b/nixpkgs/pkgs/tools/networking/ppp/nix-purity.patch
new file mode 100644
index 000000000000..c74935c0ec8b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ppp/nix-purity.patch
@@ -0,0 +1,22 @@
+diff --git a/pppd/Makefile.linux b/pppd/Makefile.linux
+index 060db6a..c151c62 100644
+--- a/pppd/Makefile.linux
++++ b/pppd/Makefile.linux
+@@ -117,7 +117,7 @@ CFLAGS   += -DHAS_SHADOW
+ #LIBS     += -lshadow $(LIBS)
+ endif
+ 
+-ifneq ($(wildcard /usr/include/crypt.h),)
++ifneq ($(wildcard @glibc@/include/crypt.h),)
+ CFLAGS  += -DHAVE_CRYPT_H=1
+ LIBS	+= -lcrypt
+ endif
+@@ -169,7 +169,7 @@ LIBS	+= -ldl
+ endif
+ 
+ ifdef FILTER
+-ifneq ($(wildcard /usr/include/pcap-bpf.h),)
++ifneq ($(wildcard @libpcap@/include/pcap-bpf.h),)
+ LIBS    += -lpcap
+ CFLAGS  += -DPPP_FILTER
+ endif
diff --git a/nixpkgs/pkgs/tools/networking/ppp/nonpriv.patch b/nixpkgs/pkgs/tools/networking/ppp/nonpriv.patch
new file mode 100644
index 000000000000..df6faaf8383d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ppp/nonpriv.patch
@@ -0,0 +1,13 @@
+diff --git a/pppd/main.c b/pppd/main.c
+index 014d614..6661d33 100644
+--- a/pppd/main.c
++++ b/pppd/main.c
+@@ -334,7 +334,7 @@ main(argc, argv)
+     umask(umask(0777) | 022);
+ 
+     uid = getuid();
+-    privileged = uid == 0;
++    privileged = (uid == 0) || (geteuid() != 0);
+     slprintf(numbuf, sizeof(numbuf), "%d", uid);
+     script_setenv("ORIG_UID", numbuf, 0);
+ 
diff --git a/nixpkgs/pkgs/tools/networking/pptp/default.nix b/nixpkgs/pkgs/tools/networking/pptp/default.nix
new file mode 100644
index 000000000000..6a97abfab590
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/pptp/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, perl, ppp, iproute }:
+
+stdenv.mkDerivation rec {
+  pname = "pptp";
+  version = "1.10.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/pptpclient/${pname}-${version}.tar.gz";
+    sha256 = "1x2szfp96w7cag2rcvkdqbsl836ja5148zzfhaqp7kl7wjw2sjc2";
+  };
+
+  prePatch = ''
+    substituteInPlace Makefile --replace 'install -o root' 'install'
+  '';
+
+  preConfigure = ''
+    makeFlagsArray=( IP=${iproute}/bin/ip PPPD=${ppp}/sbin/pppd \
+                     BINDIR=$out/sbin MANDIR=$out/share/man/man8 \
+                     PPPDIR=$out/etc/ppp )
+  '';
+
+  buildInputs = [ perl ];
+
+  postFixup = ''
+    patchShebangs $out
+  '';
+
+  meta = with stdenv.lib; {
+    description = "PPTP client for Linux";
+    homepage = http://pptpclient.sourceforge.net/;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/pptpd/default.nix b/nixpkgs/pkgs/tools/networking/pptpd/default.nix
new file mode 100644
index 000000000000..f373f594df80
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/pptpd/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl, ppp }:
+
+stdenv.mkDerivation rec {
+  pname   = "pptpd";
+  version = "1.4.0";
+
+  src = fetchurl {
+    url    = "mirror://sourceforge/poptop/${pname}/${pname}-${version}/${pname}-${version}.tar.gz";
+    sha256 = "1h06gyxj51ba6kbbnf6hyivwjia0i6gsmjz8kyggaany8a58pkcg";
+  };
+
+  buildInputs = [ ppp ];
+
+  postPatch = ''
+    substituteInPlace plugins/Makefile --replace "install -o root" "install"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage    = http://poptop.sourceforge.net/dox/;
+    description = "The PPTP Server for Linux";
+    platforms   = platforms.linux;
+    maintainers = with maintainers; [ obadz ];
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/prettyping/default.nix b/nixpkgs/pkgs/tools/networking/prettyping/default.nix
new file mode 100644
index 000000000000..fb0508b3c903
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/prettyping/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, lib, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  name = "${program}-${version}";
+  program = "prettyping";
+  version = "1.0.1";
+  src = fetchFromGitHub {
+    owner = "denilsonsa";
+    repo = program;
+    rev = "v${version}";
+    sha256 = "05vfaq9y52z40245j47yjk1xaiwrazv15sgjq64w91dfyahjffxf";
+  };
+
+  installPhase = ''
+    install -Dt $out/bin prettyping
+  '';
+
+  meta = with lib; {
+    homepage = https://github.com/denilsonsa/prettyping;
+    description = "A wrapper around the standard ping tool with the objective of making the output prettier, more colorful, more compact, and easier to read";
+    license = with licenses; [ mit ];
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ qoelet ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/privoxy/default.nix b/nixpkgs/pkgs/tools/networking/privoxy/default.nix
new file mode 100644
index 000000000000..848a99f77718
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/privoxy/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, autoreconfHook, zlib, pcre, w3m, man }:
+
+stdenv.mkDerivation rec{
+
+  pname = "privoxy";
+  version = "3.0.28";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/ijbswa/Sources/${version}%20%28stable%29/${pname}-${version}-stable-src.tar.gz";
+    sha256 = "0jl2yav1qzqnaqnnx8i6i53ayckkimcrs3l6ryvv7bda6v08rmxm";
+  };
+
+  hardeningEnable = [ "pie" ];
+
+  nativeBuildInputs = [ autoreconfHook w3m man ];
+  buildInputs = [ zlib pcre ];
+
+  makeFlags = [ "STRIP="];
+
+  postInstall = ''
+    rm -rf $out/var
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://www.privoxy.org/;
+    description = "Non-caching web proxy with advanced filtering capabilities";
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    maintainers = [ maintainers.phreedom ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/networking/proxychains/default.nix b/nixpkgs/pkgs/tools/networking/proxychains/default.nix
new file mode 100644
index 000000000000..52ef43838c26
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/proxychains/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchFromGitHub } :
+stdenv.mkDerivation rec {
+  pname = "proxychains";
+  version = "4.2.0";
+
+  src = fetchFromGitHub {
+    owner = "haad";
+    repo = "proxychains";
+    rev = "${pname}-${version}";
+    sha256 = "015skh3z1jmm8kxbm3nkqv1w56kcvabdmcbmpwzywxr4xnh3x3pc";
+  };
+
+  postPatch = ''
+    # Temporary work-around; most likely fixed by next upstream release
+    sed -i Makefile -e '/-lpthread/a LDFLAGS+=-ldl'
+  '';
+
+  meta = {
+    description = "Proxifier for SOCKS proxies";
+    homepage = http://proxychains.sourceforge.net;
+    license = stdenv.lib.licenses.gpl2Plus;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/pssh/default.nix b/nixpkgs/pkgs/tools/networking/pssh/default.nix
new file mode 100644
index 000000000000..43e465e05b6a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/pssh/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchFromGitHub, pythonPackages, openssh, rsync }:
+
+pythonPackages.buildPythonApplication rec {
+  pname = "pssh";
+  version = "2.3.1";
+
+  src = fetchFromGitHub {
+    owner = "lilydjwg";
+    repo = "pssh";
+    rev = "v${version}";
+    sha256 = "0nawarxczfwajclnlsimhqkpzyqb1byvz9nsl54mi1bp80z5i4jq";
+  };
+
+  postPatch = ''
+    for f in bin/*; do
+      substituteInPlace $f \
+        --replace "'ssh'" "'${openssh}/bin/ssh'" \
+        --replace "'scp'" "'${openssh}/bin/scp'" \
+        --replace "'rsync'" "'${rsync}/bin/rsync'"
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Parallel SSH Tools";
+    longDescription = ''
+      PSSH provides parallel versions of OpenSSH and related tools,
+      including pssh, pscp, prsync, pnuke and pslurp.
+    '';
+    inherit (src.meta) homepage;
+    license = licenses.bsd3;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ chris-martin ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/pwnat/default.nix b/nixpkgs/pkgs/tools/networking/pwnat/default.nix
new file mode 100644
index 000000000000..9e06a6441456
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/pwnat/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  name  = "${pname}-${date}";
+  pname = "pwnat";
+  date  = "2014-09-08";
+
+  src = fetchFromGitHub {
+    owner  = "samyk";
+    repo   = pname;
+    rev    = "1d07c2eb53171733831c0cd01e4e96a3204ec446";
+    sha256 = "056xhlnf1axa6k90i018xwijkwc9zc7fms35hrkzwgs40g9ybrx5";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/pwnat
+    cp pwnat $out/bin
+    cp README* COPYING* $out/share/pwnat
+  '';
+
+  meta = with stdenv.lib; {
+    homepage    = http://samy.pl/pwnat/;
+    description = "ICMP NAT to NAT client-server communication";
+    license     = stdenv.lib.licenses.gpl3Plus;
+    maintainers = with maintainers; [viric];
+    platforms   = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/py-wmi-client/default.nix b/nixpkgs/pkgs/tools/networking/py-wmi-client/default.nix
new file mode 100644
index 000000000000..7a2774002891
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/py-wmi-client/default.nix
@@ -0,0 +1,25 @@
+{ lib, pythonPackages, fetchFromGitHub }:
+
+pythonPackages.buildPythonApplication rec {
+  pname = "py-wmi-client";
+  version = "unstable-20160601";
+
+  src = fetchFromGitHub {
+    owner = "dlundgren";
+    repo = pname;
+    rev = "9702b036df85c3e0ecdde84a753b353069f58208";
+    sha256 = "1kd12gi1knqv477f1shzqr0h349s5336vzp3fpfp3xl0b502ld8d";
+  };
+
+  propagatedBuildInputs = with pythonPackages; [ impacket natsort pyasn1 pycrypto ];
+
+  # no tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Python WMI Client implementation";
+    homepage = "https://github.com/dlundgren/py-wmi-client";
+    license = licenses.mit;
+    maintainers = with maintainers; [ peterhoeg ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/pykms/default.nix b/nixpkgs/pkgs/tools/networking/pykms/default.nix
new file mode 100644
index 000000000000..e1a13b73120e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/pykms/default.nix
@@ -0,0 +1,92 @@
+{ stdenv, runtimeShell, fetchFromGitHub, python3, writeText, writeScript
+, coreutils, sqlite }:
+
+with python3.pkgs;
+
+let
+  dbSql = writeText "create_pykms_db.sql" ''
+    CREATE TABLE clients(
+      clientMachineId TEXT,
+      machineName     TEXT,
+      applicationId   TEXT,
+      skuId           TEXT,
+      licenseStatus   TEXT,
+      lastRequestTime INTEGER,
+      kmsEpid         TEXT,
+      requestCount    INTEGER
+    );
+  '';
+
+  dbScript = writeScript "create_pykms_db.sh" (with stdenv.lib; ''
+    #!${runtimeShell}
+
+    set -eEuo pipefail
+
+    db=$1
+
+    if [ ! -e $db ] ; then
+      ${getBin sqlite}/bin/sqlite3 $db < ${dbSql}
+    fi
+  '');
+
+in buildPythonApplication rec {
+  pname = "pykms";
+  version = "20190611";
+
+  src = fetchFromGitHub {
+    owner  = "SystemRage";
+    repo   = "py-kms";
+    rev    = "dead208b1593655377fe8bc0d74cc4bead617103";
+    sha256 = "065qpkfqrahsam1rb43vnasmzrangan5z1pr3p6s0sqjz5l2jydp";
+  };
+
+  sourceRoot = "source/py-kms";
+
+  propagatedBuildInputs = [ systemd pytz tzlocal ];
+
+  postPatch = ''
+    siteDir=$out/${python3.sitePackages}
+
+    substituteInPlace pykms_DB2Dict.py \
+      --replace "'KmsDataBase.xml'" "'$siteDir/KmsDataBase.xml'"
+
+    # we are logging to journal
+    sed -i pykms_Misc.py \
+      -e '6ifrom systemd import journal' \
+      -e 's/log_obj.addHandler(log_handler)/log_obj.addHandler(journal.JournalHandler())/'
+  '';
+
+  format = "other";
+
+  # there are no tests
+  doCheck = false;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $siteDir
+
+    mv * $siteDir
+    for b in Client Server ; do
+      makeWrapper ${python.interpreter} $out/bin/''${b,,} \
+        --argv0 ''${b,,} \
+        --add-flags $siteDir/pykms_$b.py \
+        --prefix PYTHONPATH : "$(toPythonPath ${systemd})"
+    done
+
+    install -Dm755 ${dbScript} $out/libexec/create_pykms_db.sh
+
+    install -Dm644 ../README.md -t $out/share/doc/pykms
+
+    ${python.interpreter} -m compileall $siteDir
+
+    runHook postInstall
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Windows KMS (Key Management Service) server written in Python";
+    homepage    = "https://github.com/SystemRage/py-kms";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ peterhoeg ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/qr-filetransfer/default.nix b/nixpkgs/pkgs/tools/networking/qr-filetransfer/default.nix
new file mode 100644
index 000000000000..b95d0facda89
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/qr-filetransfer/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage {
+  pname = "qr-filetransfer-unstable";
+  version = "2018-10-22";
+
+  goPackagePath = "github.com/claudiodangelis/qr-filetransfer";
+
+  src = fetchFromGitHub {
+    rev = "b1e5b91aa2aa469f870c62074e879d46e353edae";
+    owner = "claudiodangelis";
+    repo = "qr-filetransfer";
+    sha256 = "04cl3v6bzpaxp1scpsa42xxa1c1brbplq408bb7nixa98bacj4x1";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/claudiodangelis/qr-filetransfer;
+    description = "Transfer files over wifi by scanning a QR code from your terminal";
+    longDescription = ''
+      qr-filetransfer binds a web server to the address of your Wi-Fi network
+      interface on a random port and creates a handler for it. The default
+      handler serves the content and exits the program when the transfer is
+      complete.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ fgaz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/qr-filetransfer/deps.nix b/nixpkgs/pkgs/tools/networking/qr-filetransfer/deps.nix
new file mode 100644
index 000000000000..a15dd9689433
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/qr-filetransfer/deps.nix
@@ -0,0 +1,66 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.3.0
+[
+  {
+    goPackagePath = "github.com/mattn/go-colorable";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-colorable";
+      rev = "efa589957cd060542a26d2dd7832fd6a6c6c3ade";
+      sha256 = "0kshi4hvm0ayrsxqxy0599iv81kryhd2fn9lwjyczpj593cq069r";
+    };
+  }
+  {
+    goPackagePath = "github.com/mattn/go-isatty";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-isatty";
+      rev = "3fb116b820352b7f0c281308a4d6250c22d94e27";
+      sha256 = "084hplr4n4g5nvp70clljk428hc963460xz0ggcj3xdi4w7hhsvv";
+    };
+  }
+  {
+    goPackagePath = "github.com/mattn/go-runewidth";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-runewidth";
+      rev = "c88d7e5f2e24de48a200a2655ac8a0910be9a0f7";
+      sha256 = "14prmzjlv9z31n6caaaq1kwi4p0mp3x4pv5r7d0575lcampa41jw";
+    };
+  }
+  {
+    goPackagePath = "github.com/mdp/qrterminal";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mdp/qrterminal";
+      rev = "6967d3624af633162b77160078e12a4c14174470";
+      sha256 = "1f2zrdv9sw2a6ni1712d27cayr3f8whqagx6f0yglc5gdd9f3i2n";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "a5c9d58dba9a56f97aaa86f55e638b718c5a6c42";
+      sha256 = "02qv5i7yps35p7fa81345qz7k8i73gkigj69anwmpw9rhpmzayf9";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/cheggaaa/pb.v1";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/cheggaaa/pb.v1";
+      rev = "007b75a044e968336a69a6c0c617251ab62ac14c";
+      sha256 = "0l8m5cy6fbir7nrsk985ap7dxp9qlfmh8r73g7j9zg7pfq3lkhad";
+    };
+  }
+  {
+    goPackagePath = "rsc.io/qr";
+    fetch = {
+      type = "git";
+      url = "https://github.com/rsc/qr";
+      rev = "ca9a01fc2f9505024045632c50e5e8cd6142fafe";
+      sha256 = "04yx493g0fqp8i59zjxnl4k3s0cl0kr5m8xh0ph8m10r1hkw0xr3";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/networking/quickserve/default.nix b/nixpkgs/pkgs/tools/networking/quickserve/default.nix
new file mode 100644
index 000000000000..22589582e3b9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/quickserve/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, makeWrapper, fetchzip, python3, python3Packages }:
+let
+  threaded_servers = python3Packages.buildPythonPackage {
+    name = "threaded_servers";
+    src = fetchzip {
+      url = https://xyne.archlinux.ca/projects/python3-threaded_servers/src/python3-threaded_servers-2018.6.tar.xz;
+      sha256 = "1irliz90a1dk4lyl7mrfq8qnnrfad9czvbcw1spc13zyai66iyhf";
+    };
+
+    # stuff we don't care about pacserve
+    doCheck = false;
+  };
+  wrappedPython = python3.withPackages (_: [ threaded_servers ]);
+in stdenv.mkDerivation {
+  pname = "quickserve";
+  version = "2018";
+
+  dontUnpack = true;
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin
+    makeWrapper ${wrappedPython}/bin/python $out/bin/quickserve \
+      --add-flags -mThreadedServers.PeeredQuickserve
+    runHook postInstall
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A simple HTTP server for quickly sharing files.";
+    homepage = https://xyne.archlinux.ca/projects/quickserve/;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ lassulus ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/quicktun/default.nix b/nixpkgs/pkgs/tools/networking/quicktun/default.nix
new file mode 100644
index 000000000000..87071e23a966
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/quicktun/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, libsodium }:
+
+stdenv.mkDerivation {
+  pname = "quicktun";
+  version = "2.2.5";
+
+  src = fetchFromGitHub {
+    owner = "UCIS";
+    repo = "QuickTun";
+    rev = "2d0c6a9cda8c21f921a5d1197aeee92e9568ca39";
+    sha256 = "1ydvwasj84qljfbzh6lmhyzjc20yw24a0v2mykp8afsm97zzlqgx";
+  };
+
+  patches = [ ./tar-1.30.diff ]; # quicktun master seems not to need this
+
+  buildInputs = [ libsodium ];
+
+  buildPhase = "bash build.sh";
+
+  installPhase = ''
+    rm out/quicktun*tgz
+    install -vD out/quicktun* -t $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Very simple, yet secure VPN software";
+    homepage = http://wiki.ucis.nl/QuickTun;
+    maintainers = [ maintainers.fpletz ];
+    platforms = platforms.unix;
+    license = licenses.bsd2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/quicktun/tar-1.30.diff b/nixpkgs/pkgs/tools/networking/quicktun/tar-1.30.diff
new file mode 100644
index 000000000000..88498e542807
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/quicktun/tar-1.30.diff
@@ -0,0 +1,19 @@
+Fix build with gnutar-1.30
+
+Creating source archive...
+tar: The following options were used after any non-optional arguments in archive create or update mode.  These options are positional and affect only arguments that follow them.  Please, rearrange them properly.
+tar: --exclude 'debian/data' has no effect
+tar: Exiting with failure status due to previous errors
+diff --git a/build.sh b/build.sh
+index 0ea0403..725178c 100755
+--- a/build.sh
++++ b/build.sh
+@@ -25,7 +25,7 @@ rm -rf out/ obj/ tmp/
+ mkdir -p out
+ if [ "$1" != "debian" ]; then
+ 	echo Creating source archive...
+-	$tar --transform "s,^,quicktun-`cat version`/," -czf "out/quicktun-`cat version`.tgz" build.sh clean.sh debian src version --exclude "debian/data"
++	$tar --transform "s,^,quicktun-`cat version`/," -czf "out/quicktun-`cat version`.tgz" --exclude "debian/data" build.sh clean.sh debian src version
+ fi
+ 
+ mkdir -p obj tmp tmp/include tmp/lib
diff --git a/nixpkgs/pkgs/tools/networking/radsecproxy/default.nix b/nixpkgs/pkgs/tools/networking/radsecproxy/default.nix
new file mode 100644
index 000000000000..5460bf80a07e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/radsecproxy/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchFromGitHub, openssl, autoreconfHook, nettle }:
+
+stdenv.mkDerivation rec {
+  pname = "radsecproxy";
+  version = "1.8.1";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = version;
+    sha256 = "12pvwd7v3iswki3riycxaiiqxingg4bqnkwc5ay3j4n2kzynr1qg";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ openssl nettle ];
+
+  configureFlags = [
+     "--with-ssl=${openssl.dev}"
+     "--sysconfdir=/etc"
+     "--localstatedir=/var"
+  ];
+
+  meta = with stdenv.lib; {
+    homepage = https://software.nordu.net/radsecproxy/;
+    description = "A generic RADIUS proxy that supports both UDP and TLS (RadSec) RADIUS transports.";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ sargon ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/radvd/default.nix b/nixpkgs/pkgs/tools/networking/radvd/default.nix
new file mode 100644
index 000000000000..30e706d66737
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/radvd/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl, pkgconfig, libdaemon, bison, flex, check }:
+
+stdenv.mkDerivation rec {
+  pname = "radvd";
+  version = "2.18";
+
+  src = fetchurl {
+    url = "http://www.litech.org/radvd/dist/${pname}-${version}.tar.xz";
+    sha256 = "1p2wlv3djvla0r84hdncc3wfa530xigs7z9ssc2v5r1pcpzgxgz1";
+  };
+
+  nativeBuildInputs = [ pkgconfig bison flex check ];
+  buildInputs = [ libdaemon ];
+
+  meta = with stdenv.lib; {
+    homepage = http://www.litech.org/radvd/;
+    description = "IPv6 Router Advertisement Daemon";
+    platforms = platforms.linux;
+    license = licenses.bsdOriginal;
+    maintainers = with maintainers; [ fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ratools/default.nix b/nixpkgs/pkgs/tools/networking/ratools/default.nix
new file mode 100644
index 000000000000..f5353db68035
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ratools/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "ratools";
+  version = "0.6.2";
+
+  src = fetchFromGitHub {
+    owner = "danrl";
+    repo = "ratools";
+    rev = "v${version}";
+    sha256 = "07m45bn9lzgbfihmxic23wqp73nxg5ihrvkigr450jq6gzvgwawq";
+  };
+
+  makeFlags = [ "-C" "src" ];
+
+  installPhase = ''
+    install -vD bin/* -t $out/bin
+    install -vD man/* -t $out/share/man/man8
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A fast, dynamic, multi-threading framework for IPv6 Router Advertisements";
+    homepage = https://github.com/danrl/ratools;
+    license = licenses.asl20;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/reaver-wps-t6x/default.nix b/nixpkgs/pkgs/tools/networking/reaver-wps-t6x/default.nix
new file mode 100644
index 000000000000..2d239180a93d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/reaver-wps-t6x/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitHub, libpcap, pixiewps, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "reaver-wps-t6x";
+  version = "1.6.5";
+
+  src = fetchFromGitHub {
+    owner = "t6x";
+    repo = "reaver-wps-fork-t6x";
+    rev = "v${version}";
+    sha256 = "03v5jyb4if74rpg0mcd8700snb120b6w2gnsa3aqdgj5676ic5dn";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ libpcap pixiewps ];
+
+  sourceRoot = "source/src";
+
+  meta = with stdenv.lib; {
+    description = "Online and offline brute force attack against WPS";
+    homepage = https://github.com/t6x/reaver-wps-fork-t6x;
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ nico202 volth ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/reaver-wps/default.nix b/nixpkgs/pkgs/tools/networking/reaver-wps/default.nix
new file mode 100644
index 000000000000..864a7fb5e613
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/reaver-wps/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, libpcap, sqlite, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  version = "1.4";
+  pname = "reaver-wps";
+  confdir = "/var/db/${pname}-${version}"; # the sqlite database is at "${confdir}/reaver/reaver.db"
+
+  src = fetchurl {
+    url = "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/reaver-wps/reaver-${version}.tar.gz";
+    sha256 = "0bdjai4p8xbsw8zdkkk43rgsif79x0nyx4djpyv0mzh59850blxd";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ libpcap sqlite ];
+
+
+  setSourceRoot = ''
+    sourceRoot=$(echo */src)
+  '';
+
+  configureFlags = [ "--sysconfdir=${confdir}" ];
+
+  installPhase = ''
+    mkdir -p $out/{bin,etc}
+    cp reaver.db $out/etc/
+    cp reaver wash $out/bin/
+
+    wrapProgram $out/bin/reaver --run "[ -s ${confdir}/reaver/reaver.db ] || install -D $out/etc/reaver.db ${confdir}/reaver/reaver.db"
+    wrapProgram $out/bin/wash   --run "[ -s ${confdir}/reaver/reaver.db ] || install -D $out/etc/reaver.db ${confdir}/reaver/reaver.db"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Brute force attack against Wifi Protected Setup";
+    homepage = https://code.google.com/archive/p/reaver-wps/;
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ nico202 volth ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/redir/default.nix b/nixpkgs/pkgs/tools/networking/redir/default.nix
new file mode 100644
index 000000000000..1a6efb065e2e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/redir/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "redir";
+  version = "3.3";
+
+  src = fetchFromGitHub {
+    owner = "troglobit";
+    repo = "redir";
+    rev = "v${version}";
+    sha256 = "13n401i3q0xwpfgr21y47kgihi057wbh59xlsna8b8zpm973qny1";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = {
+    description = "A TCP port redirector for UNIX";
+    homepage = https://github.com/troglobit/redir;
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = with stdenv.lib.maintainers; [ ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/redsocks/default.nix b/nixpkgs/pkgs/tools/networking/redsocks/default.nix
new file mode 100644
index 000000000000..32a30f48ec65
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/redsocks/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchFromGitHub, libevent }:
+
+let
+  pkg = "redsocks";
+  version = "0.5";
+in
+stdenv.mkDerivation {
+  name = "${pkg}-${version}";
+
+  src = fetchFromGitHub {
+    owner = "darkk";
+    repo = pkg;
+    rev = "release-${version}";
+    sha256 = "170cpvvivb6y2kwsqj9ppx5brgds9gkn8mixrnvj8z9c15xhvplm";
+  };
+
+  installPhase =
+    ''
+      mkdir -p $out/{bin,share}
+      mv redsocks $out/bin
+      mv doc $out/share
+    '';
+
+  buildInputs = [ libevent ];
+
+  meta = {
+    description = "Transparent redirector of any TCP connection to proxy";
+    homepage = http://darkk.net.ru/redsocks/;
+    license = stdenv.lib.licenses.asl20;
+    maintainers = [ stdenv.lib.maintainers.ekleog ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ripmime/default.nix b/nixpkgs/pkgs/tools/networking/ripmime/default.nix
new file mode 100644
index 000000000000..ae84d9662aa0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ripmime/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "ripmime";
+  version = "1.4.0.10";
+  src = fetchurl {
+    url = "http://www.pldaniels.com/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "0sj06ibmlzy34n8v0mnlq2gwidy7n2aqcwgjh0xssz3vi941aqc9";
+  };
+
+  preInstall = ''
+    sed -i Makefile -e "s@LOCATION=.*@LOCATION=$out@" -e "s@man/man1@share/&@"
+    mkdir -p "$out/bin" "$out/share/man/man1"
+  '';
+
+  NIX_CFLAGS_COMPILE=" -Wno-error ";
+
+  meta = with stdenv.lib; {
+    description = "Attachment extractor for MIME messages";
+    maintainers = with maintainers; [ raskin ];
+    homepage = http://www.pldaniels.com/ripmime/;
+    platforms = platforms.linux;
+  };
+
+  passthru = {
+    updateInfo = {
+      downloadPage = "http://www.pldaniels.com/ripmime/";
+    };
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/rp-pppoe/default.nix b/nixpkgs/pkgs/tools/networking/rp-pppoe/default.nix
new file mode 100644
index 000000000000..bdb526c70543
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/rp-pppoe/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, ppp } :
+let
+  version = "3.12";
+in
+stdenv.mkDerivation {
+  name = "rp-pppoe-" + version;
+  src = fetchurl {
+    url = "https://www.roaringpenguin.com/files/download/rp-pppoe-${version}.tar.gz";
+    sha256 = "1hl6rjvplapgsyrap8xj46kc9kqwdlm6ya6gp3lv0ihm0c24wy80";
+  };
+
+  buildInputs = [ ppp ];
+
+
+  preConfigure = ''
+    cd src
+    export PPPD=${ppp}/sbin/pppd
+  '';
+  postConfigure = ''
+    sed -i Makefile -e 's@DESTDIR)/etc/ppp@out)/etc/ppp@'
+    sed -i Makefile -e 's@PPPOESERVER_PPPD_OPTIONS=@&$(out)@'
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Roaring Penguin Point-to-Point over Ethernet tool";
+    platforms = platforms.linux;
+    homepage = https://www.roaringpenguin.com/products/pppoe;
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/s3cmd/default.nix b/nixpkgs/pkgs/tools/networking/s3cmd/default.nix
new file mode 100644
index 000000000000..31b111f2b83d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/s3cmd/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchFromGitHub, python2Packages }:
+
+python2Packages.buildPythonApplication rec {
+  pname = "s3cmd";
+  version = "2.0.2";
+  
+  src = fetchFromGitHub {
+    owner  = "s3tools";
+    repo   = "s3cmd";
+    rev    = "v${version}";
+    sha256 = "0ninw830309cxga99gjnfghpkywf9kd6yz4wqsq85zni1dv39cdk";
+  };
+
+  propagatedBuildInputs = with python2Packages; [ python_magic dateutil ];
+
+  meta = with stdenv.lib; {
+    homepage = http://s3tools.org/;
+    description = "A command-line tool to manipulate Amazon S3 buckets";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.spwhitt ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/s3gof3r/default.nix b/nixpkgs/pkgs/tools/networking/s3gof3r/default.nix
new file mode 100644
index 000000000000..d53d60333baf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/s3gof3r/default.nix
@@ -0,0 +1,17 @@
+{ stdenv, buildGoPackage, fetchgit }:
+
+buildGoPackage rec {
+  pname = "s3gof3r";
+  version = "20151109-${stdenv.lib.strings.substring 0 7 rev}";
+  rev = "31603a0dc94aefb822bfe2ceea75a6be6013b445";
+  
+  goPackagePath = "github.com/rlmcpherson/s3gof3r";
+
+  src = fetchgit {
+    inherit rev;
+    url = "https://github.com/rlmcpherson/s3gof3r";
+    sha256 = "10banc8hnhxpsdmlkf9nc5fjkh1349bgpd9k7lggw3yih1rvmh7k";
+  };
+
+  goDeps = ./deps.nix;
+}
diff --git a/nixpkgs/pkgs/tools/networking/s3gof3r/deps.nix b/nixpkgs/pkgs/tools/networking/s3gof3r/deps.nix
new file mode 100644
index 000000000000..49c5d600be2f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/s3gof3r/deps.nix
@@ -0,0 +1,11 @@
+[
+  {
+    goPackagePath = "github.com/jessevdk/go-flags";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jessevdk/go-flags";
+      rev = "1b89bf73cd2c3a911d7b2a279ab085c4a18cf539";
+      sha256 = "027nglc5xx1cm03z9sisg0iqrhwcj6gh5z254rrpl8p4fwrxx680";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/networking/s4cmd/default.nix b/nixpkgs/pkgs/tools/networking/s4cmd/default.nix
new file mode 100644
index 000000000000..8088cc0ec4d9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/s4cmd/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "s4cmd";
+  version = "2.1.0";
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "0d4mx98i3qhvlmr9x898mjvf827smzx6x5ji6daiwgjdlxc60mj2";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ boto3 pytz ];
+
+  # The upstream package tries to install some bash shell completion scripts in /etc.
+  # Setuptools is bugged and doesn't handle --prefix properly: https://github.com/pypa/setuptools/issues/130
+  patchPhase = ''
+    sed -i '/ data_files=/d' setup.py
+    sed -i 's|os.chmod("/etc.*|pass|' setup.py
+  '';
+
+  # Replace upstream's s4cmd wrapper script with the built-in Nix wrapper
+  postInstall = ''
+    ln -fs $out/bin/s4cmd.py $out/bin/s4cmd
+  '';
+
+  # Test suite requires an S3 bucket
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/bloomreach/s4cmd;
+    description = "Super S3 command line tool";
+    license = licenses.asl20;
+    maintainers = [ maintainers.bhipple ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/s6-dns/default.nix b/nixpkgs/pkgs/tools/networking/s6-dns/default.nix
new file mode 100644
index 000000000000..66bdcbbba54a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/s6-dns/default.nix
@@ -0,0 +1,35 @@
+{ skawarePackages }:
+
+with skawarePackages;
+
+buildPackage {
+  pname = "s6-dns";
+  version = "2.3.1.1";
+  sha256 = "0clib10dk3r9rcxv1yfr6gdvqqrx0arzivjpmhz9p8xaif53wpj1";
+
+  description = "A suite of DNS client programs and libraries for Unix systems";
+
+  outputs = [ "bin" "lib" "dev" "doc" "out" ];
+
+  configureFlags = [
+    "--libdir=\${lib}/lib"
+    "--libexecdir=\${lib}/libexec"
+    "--dynlibdir=\${lib}/lib"
+    "--bindir=\${bin}/bin"
+    "--includedir=\${dev}/include"
+    "--with-sysdeps=${skalibs.lib}/lib/skalibs/sysdeps"
+    "--with-include=${skalibs.dev}/include"
+    "--with-lib=${skalibs.lib}/lib"
+    "--with-dynlib=${skalibs.lib}/lib"
+  ];
+
+  postInstall = ''
+    # remove all s6-dns executables from build directory
+    rm $(find -type f -mindepth 1 -maxdepth 1 -executable)
+    rm libs6dns.*
+    rm libskadns.*
+
+    mv doc $doc/share/doc/s6-dns/html
+  '';
+
+}
diff --git a/nixpkgs/pkgs/tools/networking/s6-networking/default.nix b/nixpkgs/pkgs/tools/networking/s6-networking/default.nix
new file mode 100644
index 000000000000..1551d6da97be
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/s6-networking/default.nix
@@ -0,0 +1,67 @@
+{ stdenv, skawarePackages
+
+# Whether to build the TLS/SSL tools and what library to use
+# acceptable values: "libressl", false
+# TODO: add bearssl
+, sslSupport ? "libressl" , libressl
+}:
+
+with skawarePackages;
+let
+  inherit (stdenv) lib;
+  sslSupportEnabled = sslSupport != false;
+  sslLibs = {
+    libressl = libressl;
+  };
+
+in
+assert sslSupportEnabled -> sslLibs ? ${sslSupport};
+
+
+buildPackage {
+  pname = "s6-networking";
+  version = "2.3.1.1";
+  sha256 = "127i7ig5wdgjbkjf0py0g96llc6cbxij22ns2j7bwa95figinhcx";
+
+  description = "A suite of small networking utilities for Unix systems";
+
+  outputs = [ "bin" "lib" "dev" "doc" "out" ];
+
+  # TODO: nsss support
+  configureFlags = [
+    "--libdir=\${lib}/lib"
+    "--libexecdir=\${lib}/libexec"
+    "--dynlibdir=\${lib}/lib"
+    "--bindir=\${bin}/bin"
+    "--includedir=\${dev}/include"
+    "--with-sysdeps=${skalibs.lib}/lib/skalibs/sysdeps"
+    "--with-include=${skalibs.dev}/include"
+    "--with-include=${execline.dev}/include"
+    "--with-include=${s6.dev}/include"
+    "--with-include=${s6-dns.dev}/include"
+    "--with-lib=${skalibs.lib}/lib"
+    "--with-lib=${execline.lib}/lib"
+    "--with-lib=${s6.out}/lib"
+    "--with-lib=${s6-dns.lib}/lib"
+    "--with-dynlib=${skalibs.lib}/lib"
+    "--with-dynlib=${execline.lib}/lib"
+    "--with-dynlib=${s6.out}/lib"
+    "--with-dynlib=${s6-dns.lib}/lib"
+  ]
+  ++ (lib.optionals sslSupportEnabled [
+       "--enable-ssl=${sslSupport}"
+       "--with-include=${lib.getDev sslLibs.${sslSupport}}/include"
+       "--with-lib=${lib.getLib sslLibs.${sslSupport}}/lib"
+       "--with-dynlib=${lib.getLib sslLibs.${sslSupport}}/lib"
+     ]);
+
+  postInstall = ''
+    # remove all s6 executables from build directory
+    rm $(find -name "s6-*" -type f -mindepth 1 -maxdepth 1 -executable)
+    rm minidentd
+    rm libs6net.* libstls.*
+
+    mv doc $doc/share/doc/s6-networking/html
+  '';
+
+}
diff --git a/nixpkgs/pkgs/tools/networking/saldl/default.nix b/nixpkgs/pkgs/tools/networking/saldl/default.nix
new file mode 100644
index 000000000000..d51e5515bd63
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/saldl/default.nix
@@ -0,0 +1,48 @@
+{ stdenv
+, fetchFromGitHub
+, pkgconfig
+, wafHook
+, asciidoc
+, docbook_xml_dtd_45
+, docbook_xsl
+, libxml2
+, libxslt
+, curl
+, libevent
+}:
+
+stdenv.mkDerivation rec {
+  pname = "saldl";
+  version = "40";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "19ajci5h5gdnrvwf0l7xy5s58z2di68rrvcmqpsmpp4lfr37rk2l";
+  };
+
+  nativeBuildInputs = [
+    pkgconfig
+    wafHook
+    asciidoc
+    docbook_xml_dtd_45
+    docbook_xsl
+    libxml2
+    libxslt
+  ];
+
+  buildInputs = [ curl libevent ];
+
+  wafConfigureFlags = [ "--saldl-version ${version}" "--no-werror" ];
+
+  outputs = [ "out" "man" ];
+
+  meta = with stdenv.lib; {
+    description = "CLI downloader optimized for speed and early preview";
+    homepage = "https://saldl.github.io";
+    license = licenses.agpl3;
+    maintainers = with maintainers; [ zowoq ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/samplicator/default.nix b/nixpkgs/pkgs/tools/networking/samplicator/default.nix
new file mode 100644
index 000000000000..d8167b8a48fc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/samplicator/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "samplicator";
+  version = "1.3.8rc1";
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ ];
+
+  src = fetchFromGitHub {
+    owner = "sleinen";
+    repo = "samplicator";
+    rev = version;
+    sha256 = "0fv5vldmwd6qrdv2wkk946dk9rn9nrv3c84ldvvqqn1spxfzgirm";
+  };
+
+  meta = {
+    description = "Send copies of (UDP) datagrams to multiple receivers";
+    homepage = https://github.com/sleinen/samplicator/;
+    license = stdenv.lib.licenses.gpl2Plus;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/servefile/default.nix b/nixpkgs/pkgs/tools/networking/servefile/default.nix
new file mode 100644
index 000000000000..a901182635cb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/servefile/default.nix
@@ -0,0 +1,23 @@
+{ buildPythonApplication, lib, fetchurl }:
+
+buildPythonApplication {
+  pname = "servefile";
+  version = "0.4.4";
+
+  src = fetchurl {
+    url = "https://seba-geek.de/proj/servefile/servefile-0.4.4.tar.gz";
+    sha256 = "1hibps5w2h922cfblp7jn50lbk3ilbdk9qvpc2h7b9giilaw2hwb";
+  };
+
+  postInstall = ''
+    mkdir -p $out/share/man/man1
+    cp servefile.1 $out/share/man/man1
+  '';
+
+  meta = with lib; {
+    homepage = "https://seba-geek.de/stuff/servefile/";
+    maintainers = with maintainers; [ qyliss ];
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/shadowfox/default.nix b/nixpkgs/pkgs/tools/networking/shadowfox/default.nix
new file mode 100644
index 000000000000..f2ae143e1b9e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/shadowfox/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "shadowfox";
+  version = "2.2.0";
+
+  src = fetchFromGitHub {
+    owner = "SrKomodo";
+    repo = "shadowfox-updater";
+    rev = "v${version}";
+    sha256 = "125mw70jidbp436arhv77201jdp6mpgqa2dzmrpmk55f9bf29sg6";
+  };
+
+  goPackagePath = "github.com/SrKomodo/shadowfox-updater";
+
+  modSha256 = "0hcc87mzacqwbw10l49kx0sxl4mivdr88c40wh6hdfvrbam2w86r";
+
+  buildFlags = [ "--tags" "release" ];
+
+  meta = with stdenv.lib; {
+    description = ''
+      This project aims at creating a universal dark theme for Firefox while
+      adhering to the modern design principles set by Mozilla.
+    '';
+    homepage = "https://overdodactyl.github.io/ShadowFox/";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ infinisil ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/shadowsocks-libev/default.nix b/nixpkgs/pkgs/tools/networking/shadowsocks-libev/default.nix
new file mode 100644
index 000000000000..c9ff4c7f649d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/shadowsocks-libev/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchFromGitHub, cmake
+, libsodium, mbedtls, libev, c-ares, pcre
+, asciidoc, xmlto, docbook_xml_dtd_45, docbook_xsl, libxslt
+}:
+
+stdenv.mkDerivation rec {
+  pname = "shadowsocks-libev";
+  version = "3.3.4";
+
+  # Git tag includes CMake build files which are much more convenient.
+  src = fetchFromGitHub {
+    owner = "shadowsocks";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    sha256 = "05f1vvd0r0wanbb61rf4p6y991jp7625l0i223v23r2ji43y3i5a";
+    fetchSubmodules = true;
+  };
+
+  buildInputs = [ libsodium mbedtls libev c-ares pcre ];
+  nativeBuildInputs = [ cmake asciidoc xmlto docbook_xml_dtd_45
+                        docbook_xsl libxslt ];
+
+  cmakeFlags = [ "-DWITH_STATIC=OFF"  "-DCMAKE_BUILD_WITH_INSTALL_NAME_DIR=ON" ];
+
+  postInstall = ''
+    cp lib/* $out/lib
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A lightweight secured SOCKS5 proxy";
+    longDescription = ''
+      Shadowsocks-libev is a lightweight secured SOCKS5 proxy for embedded devices and low-end boxes.
+      It is a port of Shadowsocks created by @clowwindy, which is maintained by @madeye and @linusyang.
+    '';
+    homepage = https://github.com/shadowsocks/shadowsocks-libev;
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.nfjinjing ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/shadowsocks-rust/default.nix b/nixpkgs/pkgs/tools/networking/shadowsocks-rust/default.nix
new file mode 100644
index 000000000000..2416ef23c8a3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/shadowsocks-rust/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub, rustPlatform, pkgconfig, openssl, libsodium, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "shadowsocks-rust";
+  version = "1.7.2";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "shadowsocks";
+    repo = pname;
+    sha256 = "0w7ysha46ml3j1i1knvll4pmqg291z8a2ypcy650m61dhrvkh2ng";
+  };
+
+  cargoSha256 = "18nlvqa9ha4vs9xb60hivhgcsqr69zsigfmqyig48slvwgqkbwda";
+
+  buildInputs = [ openssl libsodium ]
+    ++ stdenv.lib.optionals stdenv.isDarwin [ Security ];
+  nativeBuildInputs = [ pkgconfig ];
+
+  # tries to read /etc/resolv.conf, hence fails in sandbox
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/shadowsocks/shadowsocks-rust;
+    description = "A Rust port of shadowsocks";
+    license = licenses.mit;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/shncpd/default.nix b/nixpkgs/pkgs/tools/networking/shncpd/default.nix
new file mode 100644
index 000000000000..be861654f658
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/shncpd/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+  pname = "shncpd";
+  version = "2016-06-22";
+
+  src = fetchFromGitHub {
+    owner = "jech";
+    repo = "shncpd";
+    rev = "62ef688db7a6535ce11e66c8c93ab64a1bb09484";
+    sha256 = "1sj7a77isc2jmh7gw2naw9l9366kjx6jb909h7spj7daxdwvji8f";
+  };
+
+  hardeningEnable = [ "pie" ];
+
+  preConfigure = ''
+    makeFlags=( "PREFIX=$out" )
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Simple, stupid and slow HNCP daemon";
+    homepage = https://www.irif.univ-paris-diderot.fr/~jch/software/homenet/shncpd.html;
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/shorewall/default.nix b/nixpkgs/pkgs/tools/networking/shorewall/default.nix
new file mode 100644
index 000000000000..8e62aa735a41
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/shorewall/default.nix
@@ -0,0 +1,130 @@
+{ coreutils
+, ebtables
+, fetchurl
+, gnugrep
+, gnused
+, iproute
+, ipset
+, iptables
+, perl
+, perlPackages
+, stdenv
+, tree
+, utillinux
+}:
+let
+  PATH = stdenv.lib.concatStringsSep ":"
+           [ "${coreutils}/bin"
+             "${iproute}/bin"
+             "${iptables}/bin"
+             "${ipset}/bin"
+             "${ebtables}/bin"
+             "${utillinux}/bin"
+             "${gnugrep}/bin"
+             "${gnused}/bin"
+           ];
+in
+stdenv.mkDerivation rec {
+  pname = "shorewall";
+  version = "5.2.3.3";
+
+  srcs = [
+    (fetchurl {
+      url = "http://www.shorewall.net/pub/shorewall/5.2/shorewall-5.2.3/shorewall-core-${version}.tar.bz2";
+      sha256 = "1gg2yfxzm3y9qqjrrg5nq2ggi1c6yfxx0s7fvwjw70b185mwa5p5";
+    })
+    (fetchurl {
+      url = "http://www.shorewall.net/pub/shorewall/5.2/shorewall-5.2.3/shorewall-${version}.tar.bz2";
+      sha256 = "1ka70pa3s0cnvc83rlm57r05cdv9idnxnq0vmxi6nr7razak5f3b";
+    })
+    (fetchurl {
+      url = "http://www.shorewall.net/pub/shorewall/5.2/shorewall-5.2.3/shorewall6-${version}.tar.bz2";
+      sha256 = "0mhs4m6agwk082h1n69gnyfsjpycdd8215r4r9rzb3czs5xi087n";
+    })
+  ];
+  sourceRoot = ".";
+
+  buildInputs = [
+    coreutils
+    iproute
+    ipset
+    iptables
+    ebtables
+    utillinux
+    gnugrep
+    gnused
+    perl
+  ] ++ (with perlPackages; [
+    DigestSHA1
+  ]);
+  prePatch = ''
+    # Patch configure and install.sh files
+    patchShebangs .
+
+    # Remove hardcoded PATH
+    sed -i shorewall-core-${version}/lib.cli \
+        -e '/^ *PATH=.*/d'
+  '';
+  configurePhase = ''
+    shorewall-core-${version}/configure \
+      HOST=linux \
+      PREFIX=$out \
+      CONFDIR=\$PREFIX/etc-example \
+      SBINDIR=\$PREFIX/sbin \
+      SYSCONFDIR= \
+      SHAREDIR=\$PREFIX/share \
+      LIBEXECDIR=\$SHAREDIR \
+      PERLLIBDIR=\$SHAREDIR/shorewall \
+      MANDIR=$out/man \
+      VARLIB=/var/lib \
+      INITSOURCE= \
+      INITDIR= \
+      INITFILE= \
+      DEFAULT_PAGER=
+  '';
+  installPhase = ''
+    export DESTDIR=/
+    shorewall-core-${version}/install.sh
+
+    ln -s ../shorewall-core-${version}/shorewallrc shorewall-${version}/
+    shorewall-${version}/install.sh
+
+    ln -s ../shorewall-core-${version}/shorewallrc shorewall6-${version}/
+    shorewall6-${version}/install.sh
+
+    # Patch the example shorewall{,6}.conf in case it is included
+    # in services.shorewall{,6}.configs
+    sed -i $out/etc-example/shorewall/shorewall.conf \
+           $out/etc-example/shorewall6/shorewall6.conf \
+        -e 's|^LOGFILE=.*|LOGFILE=/var/log/shorewall.log|' \
+        -e 's|^PATH=.*|PATH=${PATH}|' \
+        -e 's|^PERL=.*|PERL=${perl}/bin/perl|' \
+        -e 's|^SHOREWALL_SHELL=.*|SHOREWALL_SHELL=${stdenv.shell}|'
+    sed -i $out/etc-example/shorewall6/shorewall6.conf \
+        -e 's|^CONFIG_PATH=.*|CONFIG_PATH=:''${CONFDIR}/shorewall6:''${SHAREDIR}/shorewall6:''${SHAREDIR}/shorewall|'
+    # FIXME: the default GEOIPDIR=/usr/share/xt_geoip/LE may require attention.
+
+    # Redirect CONFDIR to /etc where services.shorewall{,6}.configs
+    # will generate the config files.
+    sed -i $out/share/shorewall/shorewallrc \
+        -e 's~^CONFDIR=.*~CONFDIR=/etc~'
+  '';
+
+  meta = {
+    homepage = http://www.shorewall.net/;
+    description = "An IP gateway/firewall configuration tool for GNU/Linux";
+    longDescription = ''
+      Shorewall is a high-level tool for configuring Netfilter. You describe your
+      firewall/gateway requirements using entries in a set of configuration
+      files. Shorewall reads those configuration files and with the help of the
+      iptables, iptables-restore, ip and tc utilities, Shorewall configures
+      Netfilter and the Linux networking subsystem to match your requirements.
+      Shorewall can be used on a dedicated firewall system, a multi-function
+      gateway/router/server or on a standalone GNU/Linux system. Shorewall does
+      not use Netfilter's ipchains compatibility mode and can thus take
+      advantage of Netfilter's connection state tracking capabilities.
+    '';
+    license = stdenv.lib.licenses.gpl2Plus;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/siege/default.nix b/nixpkgs/pkgs/tools/networking/siege/default.nix
new file mode 100644
index 000000000000..a0a659974148
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/siege/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, openssl, zlib }:
+
+stdenv.mkDerivation rec {
+  name = "siege-4.0.4";
+
+  src = fetchurl {
+    url = "http://download.joedog.org/siege/${name}.tar.gz";
+    sha256 = "0vzaj5nzb0fir2a4l7ghv3wa5d1nk2ss8gmwjb6bjavjplccyzcg";
+  };
+
+  NIX_LDFLAGS = stdenv.lib.optionalString stdenv.isLinux "-lgcc_s";
+
+  buildInputs = [ openssl zlib ];
+
+  prePatch = ''
+    sed -i -e 's/u_int32_t/uint32_t/g' -e '1i#include <stdint.h>' src/hash.c
+  '';
+
+  configureFlags = [
+    "--with-ssl=${openssl.dev}"
+    "--with-zlib=${zlib.dev}"
+  ];
+
+  meta = with stdenv.lib; {
+    description = "HTTP load tester";
+    maintainers = with maintainers; [ ocharles raskin ];
+    platforms = platforms.unix;
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/simpleproxy/default.nix b/nixpkgs/pkgs/tools/networking/simpleproxy/default.nix
new file mode 100644
index 000000000000..f94e177a8585
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/simpleproxy/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "simpleproxy";
+  version = "3.5";
+  rev = "v.${version}";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "vzaliva";
+    repo = "simpleproxy";
+    sha256 = "1my9g4vp19dikx3fsbii4ichid1bs9b9in46bkg05gbljhj340f6";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/vzaliva/simpleproxy;
+    description = "A simple TCP proxy";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.montag451 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/sipcalc/default.nix b/nixpkgs/pkgs/tools/networking/sipcalc/default.nix
new file mode 100644
index 000000000000..dff929e9fa1c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/sipcalc/default.nix
@@ -0,0 +1,19 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "sipcalc";
+  version = "1.1.6";
+
+  src = fetchurl {
+    url = "http://www.routemeister.net/projects/sipcalc/files/${pname}-${version}.tar.gz";
+    sha256 = "cfd476c667f7a119e49eb5fe8adcfb9d2339bc2e0d4d01a1d64b7c229be56357";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Advanced console ip subnet calculator";
+    homepage = http://www.routemeister.net/projects/sipcalc/;
+    license = licenses.bsd3;
+    platforms = platforms.all;
+    maintainers = [ maintainers.globin ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/sipsak/default.nix b/nixpkgs/pkgs/tools/networking/sipsak/default.nix
new file mode 100644
index 000000000000..c1a2451328df
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/sipsak/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, autoreconfHook, c-ares, openssl ? null }:
+
+stdenv.mkDerivation rec {
+  pname = "sipsak";
+  version = "4.1.2.1";
+
+  buildInputs = [
+    autoreconfHook
+    openssl
+    c-ares
+  ];
+
+  NIX_CFLAGS_COMPILE = "--std=gnu89";
+
+  src = fetchurl {
+    url = "https://github.com/sipwise/sipsak/archive/mr${version}.tar.gz";
+    sha256 = "769fe59966b1962b67aa35aad7beb9a2110ebdface36558072a05c6405fb5374";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/sipwise/sipsak;
+    description = "SIP Swiss army knife";
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = with maintainers; [ sheenobu ];
+    platforms = with platforms; unix;
+  };
+
+}
+
diff --git a/nixpkgs/pkgs/tools/networking/slack-cli/default.nix b/nixpkgs/pkgs/tools/networking/slack-cli/default.nix
new file mode 100644
index 000000000000..bdd650494b15
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/slack-cli/default.nix
@@ -0,0 +1,48 @@
+# slack-cli must be configured using the SLACK_CLI_TOKEN environment variable.
+# Using `slack init` will not work because it tries to write to the Nix store.
+#
+# There is no reason that we couldn't change the file path that slack-cli uses
+# for token storage, except that it would make the Nix package inconsistent with
+# upstream and other distributions.
+
+{ stdenv, lib, fetchFromGitHub, curl, jq, runtimeShell }:
+
+stdenv.mkDerivation rec {
+  pname = "slack-cli";
+  version = "0.18.0";
+
+  src = fetchFromGitHub {
+    owner = "rockymadden";
+    repo = "slack-cli";
+    rev = "v${version}";
+    sha256 = "022yr3cpfg0v7cxi62zzk08vp0l3w851qpfh6amyfgjiynnfyddl";
+  };
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p "$out/bin"
+    cp src/slack "$out/bin/.slack-wrapped"
+
+    cat <<-WRAPPER > "$out/bin/slack"
+    #!${runtimeShell}
+    [ "\$1" = "init" -a -z "\$SLACK_CLI_TOKEN" ] && cat <<-'MESSAGE' >&2
+    WARNING: slack-cli must be configured using the SLACK_CLI_TOKEN
+    environment variable. Using \`slack init\` will not work because it tries
+    to write to the Nix store.
+
+    MESSAGE
+
+    export PATH=${lib.makeBinPath [ curl jq ]}:"\$PATH"
+    exec "$out/bin/.slack-wrapped" "\$@"
+    WRAPPER
+
+    chmod +x "$out/bin/slack"
+  '';
+
+  meta = {
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.qyliss ];
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/slimrat/default.nix b/nixpkgs/pkgs/tools/networking/slimrat/default.nix
new file mode 100644
index 000000000000..8632a33e3498
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/slimrat/default.nix
@@ -0,0 +1,33 @@
+{stdenv, fetchurl, perlPackages, makeWrapper}:
+
+stdenv.mkDerivation {
+  name = "slimrat-1.0";
+  src = fetchurl {
+    url = "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/slimrat/slimrat-1.0.tar.bz2";
+    sha256 = "139b71d45k4b1y47iq62a9732cnaqqbh8s4knkrgq2hx0jxpsk5a";
+  };
+
+  buildInputs = [ makeWrapper ] ++ (with perlPackages; [ perl WWWMechanize LWP ]);
+
+  patchPhase = ''
+    sed -e 's,#!.*,#!${perlPackages.perl}/bin/perl,' -i src/{slimrat,slimrat-gui}
+  '';
+
+  installPhase = ''
+    mkdir -p $out/share/slimrat $out/bin
+    cp -R src/* $out/share/slimrat
+    # slimrat-gui does not work (it needs the Gtk2 perl package)
+    for i in slimrat; do
+      makeWrapper $out/share/slimrat/$i $out/bin/$i \
+        --prefix PERL5LIB : $PERL5LIB
+    done
+  '';
+
+  meta = {
+    homepage = https://code.google.com/archive/p/slimrat/;
+    description = "Linux Rapidshare downloader";
+    license = stdenv.lib.licenses.mit;
+    platforms = stdenv.lib.platforms.unix;
+    broken = true; # officially abandonned upstream
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/slirp4netns/default.nix b/nixpkgs/pkgs/tools/networking/slirp4netns/default.nix
new file mode 100644
index 000000000000..f9add47dd3fd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/slirp4netns/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, glib, libcap, libseccomp }:
+
+stdenv.mkDerivation rec {
+  pname = "slirp4netns";
+  version = "0.4.3";
+
+  src = fetchFromGitHub {
+    owner = "rootless-containers";
+    repo = "slirp4netns";
+    rev = "v${version}";
+    sha256 = "0g7apfw33wkxxj7qwvlnnhv7qy13s1gkbmvns8612c0yfv9jrsvq";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+
+  buildInputs = [ libcap libseccomp glib ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/rootless-containers/slirp4netns;
+    description = "User-mode networking for unprivileged network namespaces";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ orivej saschagrunert ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/smokeping/default.nix b/nixpkgs/pkgs/tools/networking/smokeping/default.nix
new file mode 100644
index 000000000000..6a816615e9c1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/smokeping/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, fping, rrdtool, perlPackages }:
+
+stdenv.mkDerivation rec {
+  pname = "smokeping";
+  version = "2.6.11";
+  src = fetchurl {
+    url = "https://oss.oetiker.ch/smokeping/pub/smokeping-${version}.tar.gz";
+    sha256 = "1p9hpa2zs33p7hzrds80kwrm5255s0869v3s3qmsyx2sx63c7czj";
+  };
+  propagatedBuildInputs = [ rrdtool ] ++
+    (with perlPackages; [ perl FCGI CGI CGIFast ConfigGrammar DigestHMAC NetTelnet
+      NetOpenSSH NetSNMP LWP IOTty fping NetDNS perlldap ]);
+
+  postInstall = ''
+    mv $out/htdocs/smokeping.fcgi.dist $out/htdocs/smokeping.fcgi
+  '';
+  meta = {
+    description = "Network latency collector";
+    homepage = http://oss.oetiker.ch/smokeping;
+    license = stdenv.lib.licenses.gpl2Plus;
+    platforms = stdenv.lib.platforms.all;
+    maintainers = [ stdenv.lib.maintainers.erictapen ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/snabb/default.nix b/nixpkgs/pkgs/tools/networking/snabb/default.nix
new file mode 100644
index 000000000000..9471efa92d75
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/snabb/default.nix
@@ -0,0 +1,63 @@
+{ stdenv, fetchFromGitHub, bash, makeWrapper, git, mysql, diffutils, which, coreutils, procps, nettools
+,supportOpenstack ? true
+}:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  pname = "snabb";
+  version = "2018.01.2";
+
+  src = fetchFromGitHub {
+    owner = "snabbco";
+    repo = "snabb";
+    rev = "v${version}";
+    sha256 = "0n6bjf5g4imy0aql8fa55c0db3w8h944ia1dk10167x5pqvkgdgm";
+  };
+
+  buildInputs = [ makeWrapper ];
+
+  NIX_CFLAGS_COMPILE = [ "-Wno-error=stringop-truncation" ];
+
+  patchPhase = ''
+    patchShebangs .
+
+    # some hardcodeism
+    for f in $(find src/program/snabbnfv/ -type f); do
+      substituteInPlace $f --replace "/bin/bash" "${bash}/bin/bash"
+    done
+  '' + optionalString supportOpenstack ''
+    # We need a way to pass $PATH to the scripts
+    sed -i '2iexport PATH=${git}/bin:${mysql}/bin:${which}/bin:${procps}/bin:${coreutils}/bin' src/program/snabbnfv/neutron_sync_master/neutron_sync_master.sh.inc
+    sed -i '2iexport PATH=${git}/bin:${coreutils}/bin:${diffutils}/bin:${nettools}/bin' src/program/snabbnfv/neutron_sync_agent/neutron_sync_agent.sh.inc
+  '';
+
+  preBuild = ''
+    make clean
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp src/snabb $out/bin
+  '';
+
+  # Dependencies are underspecified: "make -C src obj/arch/sse2_c.o" fails with
+  # "Fatal error: can't create obj/arch/sse2_c.o: No such file or directory".
+  enableParallelBuilding = false;
+
+  meta =  {
+    homepage = https://github.com/SnabbCo/snabbswitch;
+    description = "Simple and fast packet networking toolkit";
+    longDescription = ''
+      Snabb Switch is a LuaJIT-based toolkit for writing high-speed
+      packet networking code (such as routing, switching, firewalling,
+      and so on). It includes both a scripting inteface for creating
+      new applications and also some built-in applications that are
+      ready to run.
+      It is especially intended for ISPs and other network operators.
+    '';
+    platforms = [ "x86_64-linux" ];
+    license = licenses.asl20;
+    maintainers = [ maintainers.lukego maintainers.domenkozar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/socat/2.x.nix b/nixpkgs/pkgs/tools/networking/socat/2.x.nix
new file mode 100644
index 000000000000..99f0301c7c86
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/socat/2.x.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, openssl }:
+
+stdenv.mkDerivation rec {
+  name = "socat-2.0.0-b9";
+
+  src = fetchurl {
+    url = "http://www.dest-unreach.org/socat/download/${name}.tar.bz2";
+    sha256 = "1ll395xjv4byvv0k2zjbxk8vp3mg3y2w5paa05wv553bqsjv1vs9";
+  };
+
+  buildInputs = [ openssl ];
+
+  patches = stdenv.lib.singleton ./libressl-fixes.patch ;
+
+  meta = with stdenv.lib; {
+    description = "A utility for bidirectional data transfer between two independent data channels";
+    homepage = http://www.dest-unreach.org/socat/;
+    repositories.git = git://repo.or.cz/socat.git;
+    platforms = platforms.unix;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.eelco ];
+    broken = true;  # broken with openssl 1.1
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/socat/default.nix b/nixpkgs/pkgs/tools/networking/socat/default.nix
new file mode 100644
index 000000000000..ec62c105c62c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/socat/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl, openssl, readline, which, nettools }:
+
+stdenv.mkDerivation rec {
+  name = "socat-1.7.3.3";
+
+  src = fetchurl {
+    url = "http://www.dest-unreach.org/socat/download/${name}.tar.bz2";
+    sha256 = "0jnhjijyq74g3wa4ph0am83z6vq7qna7ac0xqjma8s4197z3zmhd";
+  };
+
+  patches = stdenv.lib.optional stdenv.isDarwin ./speed-type-fix.patch;
+
+  postPatch = ''
+    patchShebangs test.sh
+    substituteInPlace test.sh \
+      --replace /bin/rm rm \
+      --replace /sbin/ifconfig ifconfig
+  '';
+
+  buildInputs = [ openssl readline ];
+
+  hardeningEnable = [ "pie" ];
+
+  checkInputs = [ which nettools ];
+  doCheck = false; # fails a bunch, hangs
+
+  meta = {
+    description = "A utility for bidirectional data transfer between two independent data channels";
+    homepage = http://www.dest-unreach.org/socat/;
+    repositories.git = git://repo.or.cz/socat.git;
+    platforms = stdenv.lib.platforms.unix;
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = [ stdenv.lib.maintainers.eelco ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/socat/libressl-fixes.patch b/nixpkgs/pkgs/tools/networking/socat/libressl-fixes.patch
new file mode 100644
index 000000000000..cf66033584eb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/socat/libressl-fixes.patch
@@ -0,0 +1,173 @@
+Patch from OpenBSD
+--- a/sslcls.c	Sat Jan 24 03:15:22 2015
++++ b/sslcls.c	Sat Jul 18 20:01:59 2015
+@@ -55,6 +55,7 @@ const SSL_METHOD *sycSSLv2_server_method(void) {
+ }
+ #endif
+ 
++#ifdef HAVE_SSLv3_client_method
+ const SSL_METHOD *sycSSLv3_client_method(void) {
+    const SSL_METHOD *result;
+    Debug("SSLv3_client_method()");
+@@ -62,7 +63,9 @@ const SSL_METHOD *sycSSLv3_client_method(void) {
+    Debug1("SSLv3_client_method() -> %p", result);
+    return result;
+ }
++#endif
+ 
++#ifdef HAVE_SSLv3_server_method
+ const SSL_METHOD *sycSSLv3_server_method(void) {
+    const SSL_METHOD *result;
+    Debug("SSLv3_server_method()");
+@@ -70,6 +73,7 @@ const SSL_METHOD *sycSSLv3_server_method(void) {
+    Debug1("SSLv3_server_method() -> %p", result);
+    return result;
+ }
++#endif
+ 
+ const SSL_METHOD *sycSSLv23_client_method(void) {
+    const SSL_METHOD *result;
+@@ -331,14 +335,6 @@ void sycSSL_free(SSL *ssl) {
+    return;
+ }
+ 
+-int sycRAND_egd(const char *path) {
+-   int result;
+-   Debug1("RAND_egd(\"%s\")", path);
+-   result = RAND_egd(path);
+-   Debug1("RAND_egd() -> %d", result);
+-   return result;
+-}
+-
+ DH *sycPEM_read_bio_DHparams(BIO *bp, DH **x, pem_password_cb *cb, void *u) {
+    DH *result;
+    Debug4("PEM_read_bio_DHparams(%p, %p, %p, %p)",
+@@ -375,7 +371,7 @@ int sycFIPS_mode_set(int onoff) {
+ }
+ #endif /* WITH_FIPS */
+ 
+-#if OPENSSL_VERSION_NUMBER >= 0x00908000L
++#if (OPENSSL_VERSION_NUMBER >= 0x00908000L) && !defined(OPENSSL_NO_COMP)
+ const COMP_METHOD *sycSSL_get_current_compression(SSL *ssl) {
+    const COMP_METHOD *result;
+    Debug1("SSL_get_current_compression(%p)", ssl);
+--- a/sslcls.h	Sat Jan 24 11:15:22 2015
++++ b/sslcls.h	Mon Apr 13 15:06:25 2015
+@@ -47,7 +47,6 @@ X509 *sycSSL_get_peer_certificate(SSL *ssl);
+ int sycSSL_shutdown(SSL *ssl);
+ void sycSSL_CTX_free(SSL_CTX *ctx);
+ void sycSSL_free(SSL *ssl);
+-int sycRAND_egd(const char *path);
+ 
+ DH *sycPEM_read_bio_DHparams(BIO *bp, DH **x, pem_password_cb *cb, void *u);
+ 
+@@ -55,7 +54,7 @@ BIO *sycBIO_new_file(const char *filename, const char 
+ 
+ int sycFIPS_mode_set(int onoff);
+ 
+-#if OPENSSL_VERSION_NUMBER >= 0x00908000L
++#if (OPENSSL_VERSION_NUMBER >= 0x00908000L) && !defined(OPENSSL_NO_COMP)
+ const COMP_METHOD *sycSSL_get_current_compression(SSL *ssl);
+ const COMP_METHOD *sycSSL_get_current_expansion(SSL *ssl);
+ const char *sycSSL_COMP_get_name(const COMP_METHOD *comp);
+@@ -98,7 +97,6 @@ const char *sycSSL_COMP_get_name(const COMP_METHOD *co
+ #define sycSSL_shutdown(s) SSL_shutdown(s)
+ #define sycSSL_CTX_free(c) SSL_CTX_free(c)
+ #define sycSSL_free(s) SSL_free(s)
+-#define sycRAND_egd(p) RAND_egd(p)
+ 
+ #define sycPEM_read_bio_DHparams(b,x,p,u) PEM_read_bio_DHparams(b,x,p,u)
+ 
+--- a/xio-openssl.c	Sat Jan 24 15:33:42 2015
++++ b/xio-openssl.c	Mon Apr 13 14:59:12 2015
+@@ -108,7 +108,6 @@ const struct optdesc opt_openssl_key         = { "open
+ const struct optdesc opt_openssl_dhparam     = { "openssl-dhparam",     "dh",    OPT_OPENSSL_DHPARAM,     GROUP_OPENSSL, PH_SPEC, TYPE_FILENAME, OFUNC_SPEC };
+ const struct optdesc opt_openssl_cafile      = { "openssl-cafile",     "cafile", OPT_OPENSSL_CAFILE,      GROUP_OPENSSL, PH_SPEC, TYPE_FILENAME, OFUNC_SPEC };
+ const struct optdesc opt_openssl_capath      = { "openssl-capath",     "capath", OPT_OPENSSL_CAPATH,      GROUP_OPENSSL, PH_SPEC, TYPE_FILENAME, OFUNC_SPEC };
+-const struct optdesc opt_openssl_egd         = { "openssl-egd",        "egd",    OPT_OPENSSL_EGD,         GROUP_OPENSSL, PH_SPEC, TYPE_FILENAME, OFUNC_SPEC };
+ const struct optdesc opt_openssl_pseudo      = { "openssl-pseudo",     "pseudo", OPT_OPENSSL_PSEUDO,      GROUP_OPENSSL, PH_SPEC, TYPE_BOOL,     OFUNC_SPEC };
+ #if OPENSSL_VERSION_NUMBER >= 0x00908000L
+ const struct optdesc opt_openssl_compress    = { "openssl-compress",   "compress", OPT_OPENSSL_COMPRESS,  GROUP_OPENSSL, PH_SPEC, TYPE_STRING,   OFUNC_SPEC };
+@@ -147,7 +146,7 @@ int xio_reset_fips_mode(void) {
+ static void openssl_conn_loginfo(SSL *ssl) {
+    Notice1("SSL connection using %s", SSL_get_cipher(ssl));
+ 
+-#if OPENSSL_VERSION_NUMBER >= 0x00908000L
++#if (OPENSSL_VERSION_NUMBER >= 0x00908000L) && !defined(OPENSSL_NO_COMP)
+    {
+       const COMP_METHOD *comp, *expansion;
+ 
+@@ -722,7 +721,6 @@ int
+    char *opt_dhparam = NULL;	/* file name of DH params */
+    char *opt_cafile = NULL;	/* certificate authority file */
+    char *opt_capath = NULL;	/* certificate authority directory */
+-   char *opt_egd = NULL;	/* entropy gathering daemon socket path */
+ #if OPENSSL_VERSION_NUMBER >= 0x00908000L
+    char *opt_compress = NULL;	/* compression method */
+ #endif
+@@ -741,7 +739,6 @@ int
+    retropt_string(opts, OPT_OPENSSL_CAPATH, &opt_capath);
+    retropt_string(opts, OPT_OPENSSL_KEY, &opt_key);
+    retropt_string(opts, OPT_OPENSSL_DHPARAM, &opt_dhparam);
+-   retropt_string(opts, OPT_OPENSSL_EGD, &opt_egd);
+    retropt_bool(opts,OPT_OPENSSL_PSEUDO, &opt_pseudo);
+ #if OPENSSL_VERSION_NUMBER >= 0x00908000L
+    retropt_string(opts, OPT_OPENSSL_COMPRESS, &opt_compress);
+@@ -877,10 +874,6 @@ int
+       }
+    }
+ 
+-   if (opt_egd) {
+-      sycRAND_egd(opt_egd);
+-   }
+-
+    if (opt_pseudo) {
+       long int randdata;
+       /* initialize libc random from actual microseconds */
+@@ -1098,7 +1091,7 @@ static int openssl_SSL_ERROR_SSL(int level, const char
+       if (e == ((ERR_LIB_RAND<<24)|
+ 		(RAND_F_SSLEAY_RAND_BYTES<<12)|
+ 		(RAND_R_PRNG_NOT_SEEDED)) /*0x24064064*/) {
+-	 Error("too few entropy; use options \"egd\" or \"pseudo\"");
++	 Error("too few entropy; use option \"pseudo\"");
+ 	 stat = STAT_NORETRY;
+       } else {
+ 	 Msg2(level, "%s(): %s", funcname, ERR_error_string(e, buf));
+--- a/xio-openssl.h	Sun Jun 23 07:16:48 2013
++++ b/xio-openssl.h	Sat Apr 19 15:58:21 2014
+@@ -21,7 +21,6 @@ extern const struct optdesc opt_openssl_key;
+ extern const struct optdesc opt_openssl_dhparam;
+ extern const struct optdesc opt_openssl_cafile;
+ extern const struct optdesc opt_openssl_capath;
+-extern const struct optdesc opt_openssl_egd;
+ extern const struct optdesc opt_openssl_pseudo;
+ #if OPENSSL_VERSION_NUMBER >= 0x00908000L
+ extern const struct optdesc opt_openssl_compress;
+--- a/xioopts.c	Sat Jan 24 11:15:22 2015
++++ b/xioopts.c	Mon Apr 13 15:06:25 2015
+@@ -412,7 +412,6 @@ const struct optname optionnames[] = {
+ #ifdef ECHOPRT
+ 	IF_TERMIOS("echoprt",	&opt_echoprt)
+ #endif
+-	IF_OPENSSL("egd",	&opt_openssl_egd)
+ 	IF_ANY    ("end-close",	&opt_end_close)
+ 	IF_TERMIOS("eof",	&opt_veof)
+ 	IF_TERMIOS("eol",	&opt_veol)
+@@ -1102,7 +1101,6 @@ const struct optname optionnames[] = {
+ 	IF_OPENSSL("openssl-compress",	&opt_openssl_compress)
+ #endif
+ 	IF_OPENSSL("openssl-dhparam",	&opt_openssl_dhparam)
+-	IF_OPENSSL("openssl-egd",	&opt_openssl_egd)
+ #if WITH_FIPS
+ 	IF_OPENSSL("openssl-fips",	&opt_openssl_fips)
+ #endif
+--- a/xioopts.h	Sat Jan 24 11:15:22 2015
++++ b/xioopts.h	Mon Apr 13 15:06:25 2015
+@@ -478,7 +478,6 @@ enum e_optcode {
+    OPT_OPENSSL_COMPRESS,
+ #endif
+    OPT_OPENSSL_DHPARAM,
+-   OPT_OPENSSL_EGD,
+    OPT_OPENSSL_FIPS,
+    OPT_OPENSSL_KEY,
+    OPT_OPENSSL_METHOD,
diff --git a/nixpkgs/pkgs/tools/networking/socat/speed-type-fix.patch b/nixpkgs/pkgs/tools/networking/socat/speed-type-fix.patch
new file mode 100644
index 000000000000..58e4c716bba0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/socat/speed-type-fix.patch
@@ -0,0 +1,13 @@
+diff --git a/xio-termios.h b/xio-termios.h
+index a288a2f..9858aab 100644
+--- a/xio-termios.h
++++ b/xio-termios.h
+@@ -148,7 +148,7 @@ extern int xiotermiosflag_applyopt(int fd, struct opt *opt);
+ extern int xiotermios_value(int fd, int word, tcflag_t mask, tcflag_t value);
+ extern int xiotermios_char(int fd, int n, unsigned char c);
+ #ifdef HAVE_TERMIOS_ISPEED
+-extern int xiotermios_speed(int fd, int n, unsigned int speed);
++extern int xiotermios_speed(int fd, int n, speed_t speed);
+ #endif
+ extern int xiotermios_spec(int fd, int optcode);
+ extern int xiotermios_flush(int fd);
diff --git a/nixpkgs/pkgs/tools/networking/spiped/default.nix b/nixpkgs/pkgs/tools/networking/spiped/default.nix
new file mode 100644
index 000000000000..9cc3370c0a1f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/spiped/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchurl, openssl, coreutils }:
+
+stdenv.mkDerivation rec {
+  pname = "spiped";
+  version = "1.5.0";
+
+  src = fetchurl {
+    url    = "https://www.tarsnap.com/spiped/${pname}-${version}.tgz";
+    sha256 = "1mxcbxifr3bnj6ga8lz88y4bhff016i6kjdzwbb3gzb2zcs4pxxj";
+  };
+
+  buildInputs = [ openssl ];
+
+  patchPhase = ''
+    substituteInPlace libcperciva/cpusupport/Build/cpusupport.sh \
+      --replace "2>/dev/null" "2>stderr.log"
+
+    substituteInPlace POSIX/posix-l.sh       \
+      --replace "rm" "${coreutils}/bin/rm"   \
+      --replace ">/dev/stderr" ">stderr.log" \
+      --replace "2>/dev/null" "2>stderr.log"
+
+    substituteInPlace POSIX/posix-cflags.sh  \
+      --replace "rm" "${coreutils}/bin/rm"   \
+      --replace ">/dev/stderr" ">stderr.log" \
+      --replace "2>/dev/null" "2>stderr.log"
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man/man1
+    make install BINDIR=$out/bin MAN1DIR=$out/share/man/man1
+  '';
+
+  meta = {
+    description = "Utility for secure encrypted channels between sockets";
+    homepage    = "https://www.tarsnap.com/spiped.html";
+    license     = stdenv.lib.licenses.bsd2;
+    platforms   = stdenv.lib.platforms.unix;
+    maintainers = [ stdenv.lib.maintainers.thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/spoofer/default.nix b/nixpkgs/pkgs/tools/networking/spoofer/default.nix
new file mode 100644
index 000000000000..2b5aa2b7cbf7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/spoofer/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, pkgconfig, protobuf, openssl, libpcap, traceroute
+, withGUI ? false, qt5 }:
+
+let inherit (stdenv.lib) optional;
+in
+
+stdenv.mkDerivation rec {
+  pname = "spoofer";
+  version = "1.4.5";
+
+  src = fetchurl {
+    url = "https://www.caida.org/projects/spoofer/downloads/${pname}-${version}.tar.gz";
+    sha256 = "0pnim3xyfsmv6alsvhwjs4v9lp39wwiyj63rxsqyz4wx4vkmn12z";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ openssl protobuf libpcap traceroute ]
+                ++ optional withGUI qt5.qtbase ;
+
+  meta = with stdenv.lib; {
+    homepage = https://www.caida.org/projects/spoofer;
+    description = "Assess and report on deployment of source address validation";
+    longDescription = ''
+      Spoofer is a new client-server system for Windows, MacOS, and
+      UNIX-like systems that periodically tests a network's ability to
+      both send and receive packets with forged source IP addresses
+      (spoofed packets). This can be used to produce reports and
+      visualizations to inform operators, response teams, and policy
+      analysts. The system measures different types of forged
+      addresses, including private and neighboring addresses.  The
+      test results allows to analyze characteristics of networks
+      deploying source address validation (e.g., network location,
+      business type).
+    '';
+    platforms = platforms.all;
+    license = licenses.gpl3Plus;
+    maintainers = with stdenv.lib.maintainers; [ leenaars];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/srelay/arm.patch b/nixpkgs/pkgs/tools/networking/srelay/arm.patch
new file mode 100644
index 000000000000..f56f2c0f2f0a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/srelay/arm.patch
@@ -0,0 +1,12 @@
+diff -ru srelay-0.4.8b4.orig/configure srelay-0.4.8b4/configure
+--- srelay-0.4.8b4.orig/configure	2010-12-21 01:11:14.000000000 +1100
++++ srelay-0.4.8b4/configure	2016-06-22 09:03:42.250000345 +1000
+@@ -1875,7 +1875,7 @@
+ 	;;
+   linux*)
+ 	case "$host_cpu" in
+-	  i*86|mips*|powerpc*|sparc*|x86_64*)
++	  i*86|mips*|powerpc*|sparc*|x86_64*|arm*)
+ 	    OS=LINUX
+ 	    cat >>confdefs.h <<\_ACEOF
+ #define LINUX 1
diff --git a/nixpkgs/pkgs/tools/networking/srelay/default.nix b/nixpkgs/pkgs/tools/networking/srelay/default.nix
new file mode 100644
index 000000000000..b55860a20c17
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/srelay/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation {
+  name = "srelay-0.4.8";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/socks-relay/socks-relay/srelay-0.4.8/srelay-0.4.8.tar.gz";
+    sha256 = "1sn6005aqyfvrlkm5445cyyaj6h6wfyskfncfmds55x34hfyxpvl";
+  };
+
+  patches = [ ./arm.patch ];
+
+  installPhase = "install -D srelay $out/bin/srelay";
+
+  meta = {
+    description = "A SOCKS proxy and relay";
+    homepage = http://socks-relay.sourceforge.net/;
+    platforms = stdenv.lib.platforms.unix;
+    license = stdenv.lib.licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ssh-agents/default.nix b/nixpkgs/pkgs/tools/networking/ssh-agents/default.nix
new file mode 100644
index 000000000000..b01d373088b7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ssh-agents/default.nix
@@ -0,0 +1,43 @@
+{ fetchFromGitHub
+, lib
+, stdenvNoCC
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "ssh-agents";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = "kalbasit";
+    repo = "ssh-agents";
+    rev = "v${version}";
+    sha256 = "1l09zy87033v7hd17lhkxikwikqz5nj9x6c2w80rqpad4lp9ihwz";
+  };
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "ssh-agents capable of spawning and maintaining multiple ssh-agents across terminals";
+    longDescription = ''
+      The SSH agent is usually spawned by running eval $(ssh-agent), however this
+      spawns a new SSH agent at every invocation. This project provides an
+      ssh-agent wrapper called ssh-agents that is capable of spawning an SSH
+      agent and caching the environment variables for later invocation.
+
+      Features
+      - One SSH agent across all terminals
+      - Add all un-encrypted SSH keys to the agent upon spawning. Please note
+        that encrypted SSH keys can only be added via ssh-add after having
+        started the agent.
+      - Ability to have different keys in different agents for security purposes.
+      - Multiple SSH agents
+      - To use multi-SSH agents, start ssh agent with the --name flag. The
+        given name is expected to be a folder under ~/.ssh/name containing the
+        keys to include in the agent.
+    '';
+    homepage = https://github.com/kalbasit/ssh-agents;
+    license = licenses.mit;
+    maintainers = with maintainers; [ kalbasit ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ssh-ident/default.nix b/nixpkgs/pkgs/tools/networking/ssh-ident/default.nix
new file mode 100644
index 000000000000..cb07d73a6319
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ssh-ident/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub, makeWrapper, python }:
+
+stdenv.mkDerivation {
+  pname = "ssh-ident";
+  version = "2016-04-21";
+  src = fetchFromGitHub  {
+    owner = "ccontavalli";
+    repo = "ssh-ident";
+    rev = "ebf8282728211dc4448d50f7e16e546ed03c22d2";
+    sha256 = "1jf19lz1gwn7cyp57j8d4zs5bq13iw3kw31m8nvr8h6sib2pf815";
+  };
+
+  buildInputs = [ makeWrapper ];
+  installPhase = ''
+    mkdir -p $out/bin
+    install -m 755 ssh-ident $out/bin/ssh-ident
+    wrapProgram $out/bin/ssh-ident \
+      --prefix PATH : "${python}/bin/python"
+  '';
+
+  meta = {
+    homepage = https://github.com/ccontavalli/ssh-ident;
+    description = "Start and use ssh-agent and load identities as necessary";
+    license = stdenv.lib.licenses.bsd2;
+    maintainers = with stdenv.lib.maintainers; [ telotortium ];
+    platforms = with stdenv.lib.platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/sshoogr/default.nix b/nixpkgs/pkgs/tools/networking/sshoogr/default.nix
new file mode 100644
index 000000000000..764b34fc5a53
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/sshoogr/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchzip, jdk, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "sshoogr";
+  version = "0.9.26";
+
+  src = fetchzip {
+    url = "https://repo1.maven.org/maven2/com/aestasit/infrastructure/${pname}/${pname}/${version}/${pname}-${version}.zip";
+    sha256 = "134qlx90y82g1rfxhyn12z9r2imm1l3fz09hrrn3pgcdcq5jz2s1";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    rm bin/sshoogr.bat
+    cp -r . $out
+    wrapProgram $out/bin/sshoogr \
+      --prefix JAVA_HOME : ${jdk}
+  '';
+
+  meta = with stdenv.lib; {
+    description = ''
+      A Groovy-based DSL for working with remote SSH servers
+    '';
+    longDescription = ''
+      The sshoogr (pronounced [ʃʊgə]) is a Groovy-based DSL library for working
+      with remote servers through SSH. The DSL allows: connecting, executing 
+      remote commands, copying files and directories, creating tunnels in a 
+      simple and concise way.
+    '';
+    homepage = "https://github.com/aestasit/sshoogr";
+    license = licenses.asl20;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ moaxcp ];
+  };
+} 
diff --git a/nixpkgs/pkgs/tools/networking/sshpass/default.nix b/nixpkgs/pkgs/tools/networking/sshpass/default.nix
new file mode 100644
index 000000000000..3765e6aa08f7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/sshpass/default.nix
@@ -0,0 +1,19 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  pname = "sshpass";
+  version = "1.06";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/sshpass/sshpass-${version}.tar.gz";
+    sha256 = "0q7fblaczb7kwbsz0gdy9267z0sllzgmf0c7z5c9mf88wv74ycn6";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://sourceforge.net/projects/sshpass/;
+    description = "Non-interactive ssh password auth";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.madjar ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/sshping/default.nix b/nixpkgs/pkgs/tools/networking/sshping/default.nix
new file mode 100644
index 000000000000..20f0eaa7e471
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/sshping/default.nix
@@ -0,0 +1,31 @@
+{stdenv, fetchFromGitHub, libssh}:
+
+stdenv.mkDerivation rec {
+  pname = "sshping";
+  version = "0.1.4";
+
+  src = fetchFromGitHub {
+    owner = "spook";
+    repo = "sshping";
+    rev = "v${version}";
+    sha256 = "0p1fvpgrsy44yvj44xp9k9nf6z1fh0sqcjvy75pcb9f5icgms815";
+  };
+
+  buildInputs = [ libssh ];
+
+  buildPhase = ''
+      g++ -Wall -I ext/ -o bin/sshping src/sshping.cxx -lssh
+    '';
+
+  installPhase = ''
+      install -Dm755 bin/sshping $out/bin/sshping
+    '';
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/spook/sshping";
+    description = "Measure character-echo latency and bandwidth for an interactive ssh session";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ jqueiroz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ssldump/default.nix b/nixpkgs/pkgs/tools/networking/ssldump/default.nix
new file mode 100644
index 000000000000..0081e7d1ddb9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ssldump/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchFromGitHub, openssl, libpcap }:
+
+stdenv.mkDerivation {
+  pname = "ssldump";
+  version = "0.9b3";
+
+  src = fetchFromGitHub {
+    owner = "adulau";
+    repo = "ssldump";
+    rev = "4529d03a50d39d3697c3e39a3d6f6c9b29448aa0";
+    sha256 = "0wwsamzxabfxcil5y2g4v2261vdspxlp12wz4xhji8607jbyjwr1";
+  };
+
+  buildInputs = [ libpcap openssl ];
+  prePatch = ''
+    sed -i -e 's|#include.*net/bpf.h|#include <pcap/bpf.h>|' \
+      base/pcap-snoop.c
+  '';
+  configureFlags = [ "--with-pcap-lib=${libpcap}/lib"
+                     "--with-pcap-inc=${libpcap}/include"
+                     "--with-openssl-lib=${openssl}/lib"
+                     "--with-openssl-inc=${openssl}/include" ];
+  meta = {
+    description = "ssldump is an SSLv3/TLS network protocol analyzer";
+    homepage = http://ssldump.sourceforge.net;
+    license = "BSD-style";
+    maintainers = with stdenv.lib.maintainers; [ aycanirican ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/sslsplit/default.nix b/nixpkgs/pkgs/tools/networking/sslsplit/default.nix
new file mode 100644
index 000000000000..bf23d06551d7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/sslsplit/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub, openssl, libevent, libpcap, libnet, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "sslsplit";
+  version = "0.5.5";
+
+  src = fetchFromGitHub {
+    owner = "droe";
+    repo = pname;
+    rev = version;
+    sha256 = "1p43z9ln5rbc76v0j1k3r4nhvfw71hq8jzsallb54z9hvwfvqp3l";
+  };
+
+  buildInputs = [ openssl libevent libpcap libnet zlib ];
+
+  makeFlags = [
+    "PREFIX=$(out)"
+    "OPENSSL_BASE=${openssl.dev}"
+    "LIBEVENT_BASE=${libevent.dev}"
+    "LIBPCAP_BASE=${libpcap}"
+    "LIBNET_BASE=${libnet}"
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Transparent SSL/TLS interception";
+    homepage = "https://www.roe.ch/SSLsplit";
+    platforms = platforms.all;
+    maintainers = with maintainers; [ contrun ];
+    license = with licenses; [ bsd2 mit unlicense free ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ssmtp/default.nix b/nixpkgs/pkgs/tools/networking/ssmtp/default.nix
new file mode 100644
index 000000000000..81da427a52cf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ssmtp/default.nix
@@ -0,0 +1,46 @@
+{stdenv, fetchurl, tlsSupport ? true, openssl ? null}:
+
+assert tlsSupport -> openssl != null;
+
+stdenv.mkDerivation {
+  name = "ssmtp-2.64";
+
+  src = fetchurl {
+    url = mirror://debian/pool/main/s/ssmtp/ssmtp_2.64.orig.tar.bz2;
+    sha256 = "0dps8s87ag4g3jr6dk88hs9zl46h3790marc5c2qw7l71k4pvhr2";
+  };
+
+  # A request has been made to merge this patch into ssmtp.
+  # See: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=858781
+  patches = [ ./ssmtp_support_AuthPassFile_parameter.patch ];
+
+  configureFlags = [
+    "--sysconfdir=/etc"
+    (stdenv.lib.enableFeature tlsSupport "ssl")
+  ];
+
+  postConfigure =
+    ''
+      # Don't run the script that interactively generates a config file.
+      # Also don't install the broken, cyclic symlink /lib/sendmail.
+      sed -e '/INSTALLED_CONFIGURATION_FILE/d' \
+          -e 's|/lib/sendmail|$(TMPDIR)/sendmail|' \
+          -i Makefile
+      substituteInPlace Makefile \
+        --replace '$(INSTALL) -s' '$(INSTALL) -s --strip-program $(STRIP)'
+    '';
+
+  installFlags = [ "etcdir=$(out)/etc" ];
+
+  installTargets = [ "install" "install-sendmail" ];
+
+  buildInputs = stdenv.lib.optional tlsSupport openssl;
+
+  NIX_LDFLAGS = stdenv.lib.optionalString tlsSupport "-lcrypto";
+
+  meta = with stdenv.lib; {
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ basvandijk ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ssmtp/ssmtp_support_AuthPassFile_parameter.patch b/nixpkgs/pkgs/tools/networking/ssmtp/ssmtp_support_AuthPassFile_parameter.patch
new file mode 100644
index 000000000000..371c0f6de2b3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ssmtp/ssmtp_support_AuthPassFile_parameter.patch
@@ -0,0 +1,69 @@
+diff -Naurb a/ssmtp.c b/ssmtp.c
+--- a/ssmtp.c	2009-11-23 10:55:11.000000000 +0100
++++ b/ssmtp.c	2017-03-25 03:00:26.508283016 +0100
+@@ -57,6 +57,7 @@
+ char arpadate[ARPADATE_LENGTH];
+ char *auth_user = (char)NULL;
+ char *auth_pass = (char)NULL;
++char *auth_passfile = (char)NULL;
+ char *auth_method = (char)NULL;		/* Mechanism for SMTP authentication */
+ char *mail_domain = (char)NULL;
+ char *from = (char)NULL;		/* Use this as the From: address */
+@@ -1053,6 +1054,15 @@
+ 					log_event(LOG_INFO, "Set AuthPass=\"%s\"\n", auth_pass);
+ 				}
+ 			}
++			else if(strcasecmp(p, "AuthPassFile") == 0 && !auth_passfile) {
++				if((auth_passfile = strdup(q)) == (char *)NULL) {
++					die("parse_config() -- strdup() failed");
++				}
++
++				if(log_level > 0) {
++					log_event(LOG_INFO, "Set AuthPassFile=\"%s\"\n", auth_passfile);
++				}
++			}
+ 			else if(strcasecmp(p, "AuthMethod") == 0 && !auth_method) {
+ 				if((auth_method = strdup(q)) == (char *)NULL) {
+ 					die("parse_config() -- strdup() failed");
+@@ -1415,6 +1425,8 @@
+ 	struct passwd *pw;
+ 	int i, sock;
+ 	uid_t uid;
++	FILE *fp;
++	char pass_buf[BUF_SZ+1];
+ 	bool_t minus_v_save, leadingdot, linestart = True;
+ 	int timeout = 0;
+ 	int bufsize = sizeof(b)-1;
+@@ -1433,6 +1445,17 @@
+ 		log_event(LOG_INFO, "%s not found", config_file);
+ 	}
+ 
++	if(auth_passfile != (char *)NULL) {
++		if((fp = fopen(auth_passfile, "r")) == (FILE *)NULL) {
++			  die("Could not open the AuthPassFile %s", auth_passfile);
++		}
++		if (fgets(pass_buf, BUF_SZ, fp) == NULL) {
++			die("Error while reading a line from the AuthPassFile %s, or it is empty", auth_passfile);
++		}
++		fclose(fp);
++		auth_pass = strdup(pass_buf);
++	}
++
+ 	if((p = strtok(pw->pw_gecos, ";,"))) {
+ 		if((gecos = strdup(p)) == (char *)NULL) {
+ 			die("ssmtp() -- strdup() failed");
+diff -Naurb a/ssmtp.conf.5 b/ssmtp.conf.5
+--- a/ssmtp.conf.5	2008-02-29 03:50:15.000000000 +0100
++++ b/ssmtp.conf.5	2017-03-25 01:45:52.890165426 +0100
+@@ -61,6 +61,11 @@
+ .Pp
+ .It Cm AuthPass
+ The password to use for SMTP AUTH.
++It is recommended to use AuthPassFile which also takes precedence over AuthPass.
++.Pp
++.It Cm AuthPassFile
++A file that should contain the password to use for SMTP AUTH.
++This takes precedence over AuthPass.
+ .Pp
+ .It Cm AuthMethod
+ The authorization method to use.
diff --git a/nixpkgs/pkgs/tools/networking/sstp/default.nix b/nixpkgs/pkgs/tools/networking/sstp/default.nix
new file mode 100644
index 000000000000..de65298d6481
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/sstp/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, pkgconfig, ppp, libevent, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "sstp-client";
+  version = "1.0.12";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/sstp-client/sstp-client/${version}/sstp-client-${version}.tar.gz";
+    sha256 = "1zv7rx6wh9rhbyg9pg6759by8hc6n4162zrrw0y812cnaw3b8zj8";
+  };
+
+  patchPhase =
+    ''
+      sed 's,/usr/sbin/pppd,${ppp}/sbin/pppd,' -i src/sstp-pppd.c
+      sed "s,sstp-pppd-plugin.so,$out/lib/pppd/sstp-pppd-plugin.so," -i src/sstp-pppd.c
+    '';
+
+  configureFlags = [
+    "--with-openssl=${openssl.dev}"
+    "--with-runtime-dir=/run/sstpc"
+    "--with-pppd-plugin-dir=$(out)/lib/pppd"
+  ];
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libevent openssl ppp ];
+
+  meta = {
+    description = "SSTP client for Linux";
+    homepage = http://sstp-client.sourceforge.net/;
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ stdenv.lib.maintainers.ktosiek ];
+    license = stdenv.lib.licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/strongswan/default.nix b/nixpkgs/pkgs/tools/networking/strongswan/default.nix
new file mode 100644
index 000000000000..fb7de5486fb0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/strongswan/default.nix
@@ -0,0 +1,114 @@
+{ stdenv, fetchurl, fetchpatch
+, pkgconfig, autoreconfHook
+, gmp, python3, iptables, ldns, unbound, openssl, pcsclite, glib
+, openresolv
+, systemd, pam
+, curl
+, enableTNC            ? false, trousers, sqlite, libxml2
+, enableNetworkManager ? false, networkmanager
+, darwin
+}:
+
+# Note on curl support: If curl is built with gnutls as its backend, the
+# strongswan curl plugin may break.
+# See https://wiki.strongswan.org/projects/strongswan/wiki/Curl for more info.
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  pname = "strongswan";
+  version = "5.8.1"; # Make sure to also update <nixpkgs/nixos/modules/services/networking/strongswan-swanctl/swanctl-params.nix> when upgrading!
+
+  src = fetchurl {
+    url = "https://download.strongswan.org/${pname}-${version}.tar.bz2";
+    sha256 = "034rd6kr1bmnvj8rg2kcxdjb0cgj3dn9310mmm94j1awxan71byr";
+  };
+
+  dontPatchELF = true;
+
+  nativeBuildInputs = [ pkgconfig autoreconfHook ];
+  buildInputs =
+    [ curl gmp python3 ldns unbound openssl pcsclite ]
+    ++ optionals enableTNC [ trousers sqlite libxml2 ]
+    ++ optionals stdenv.isLinux [ systemd.dev pam iptables ]
+    ++ optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [ SystemConfiguration ])
+    ++ optionals enableNetworkManager [ networkmanager glib ];
+
+  patches = [
+    ./ext_auth-path.patch
+    ./firewall_defaults.patch
+    ./updown-path.patch
+
+    # Don't use etc/dbus-1/system.d
+    (fetchpatch {
+      url = "https://patch-diff.githubusercontent.com/raw/strongswan/strongswan/pull/150.patch";
+      sha256 = "1irfxb99blb8v3hs0kmlhzkkwbmds1p0gq319z8lmacz36cgyj2c";
+    })
+  ];
+
+  postPatch = optionalString stdenv.isLinux ''
+    # glibc-2.26 reorganized internal includes
+    sed '1i#include <stdint.h>' -i src/libstrongswan/utils/utils/memory.h
+
+    substituteInPlace src/libcharon/plugins/resolve/resolve_handler.c --replace "/sbin/resolvconf" "${openresolv}/sbin/resolvconf"
+    '';
+
+  configureFlags =
+    [ "--enable-swanctl"
+      "--enable-cmd"
+      "--enable-openssl"
+      "--enable-eap-sim" "--enable-eap-sim-file" "--enable-eap-simaka-pseudonym"
+      "--enable-eap-simaka-reauth" "--enable-eap-identity" "--enable-eap-md5"
+      "--enable-eap-gtc" "--enable-eap-aka" "--enable-eap-aka-3gpp2"
+      "--enable-eap-mschapv2" "--enable-eap-radius" "--enable-xauth-eap" "--enable-ext-auth"
+      "--enable-acert"
+      "--enable-pkcs11" "--enable-eap-sim-pcsc" "--enable-dnscert" "--enable-unbound"
+      "--enable-chapoly"
+      "--enable-curl" ]
+    ++ optionals stdenv.isLinux [
+      "--enable-farp" "--enable-dhcp"
+      "--enable-systemd" "--with-systemdsystemunitdir=${placeholder "out"}/etc/systemd/system"
+      "--enable-xauth-pam"
+      "--enable-forecast"
+      "--enable-connmark"
+      "--enable-af-alg" ]
+    ++ optionals stdenv.isx86_64 [ "--enable-aesni" "--enable-rdrand" ]
+    ++ optional (stdenv.hostPlatform.system == "i686-linux") "--enable-padlock"
+    ++ optionals enableTNC [
+         "--disable-gmp" "--disable-aes" "--disable-md5" "--disable-sha1" "--disable-sha2" "--disable-fips-prf"
+         "--enable-eap-tnc" "--enable-eap-ttls" "--enable-eap-dynamic" "--enable-tnccs-20"
+         "--enable-tnc-imc" "--enable-imc-os" "--enable-imc-attestation"
+         "--enable-tnc-imv" "--enable-imv-attestation"
+         "--enable-tnc-ifmap" "--enable-tnc-imc" "--enable-tnc-imv"
+         "--with-tss=trousers"
+         "--enable-aikgen"
+         "--enable-sqlite" ]
+    ++ optionals enableNetworkManager [
+         "--enable-nm"
+         "--with-nm-ca-dir=/etc/ssl/certs" ]
+    # Taken from: https://wiki.strongswan.org/projects/strongswan/wiki/MacOSX
+    ++ optionals stdenv.isDarwin [
+      "--disable-systemd"
+      "--disable-xauth-pam"
+      "--disable-kernel-netlink"
+      "--enable-kernel-pfkey"
+      "--enable-kernel-pfroute"
+      "--enable-kernel-libipsec"
+      "--enable-osx-attr"
+      "--disable-scripts"
+    ];
+
+  postInstall = ''
+    # this is needed for l2tp
+    echo "include /etc/ipsec.secrets" >> $out/etc/ipsec.secrets
+  '';
+
+  NIX_LDFLAGS = optionalString stdenv.cc.isGNU "-lgcc_s" ;
+
+  meta = {
+    description = "OpenSource IPsec-based VPN Solution";
+    homepage = https://www.strongswan.org;
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/strongswan/ext_auth-path.patch b/nixpkgs/pkgs/tools/networking/strongswan/ext_auth-path.patch
new file mode 100644
index 000000000000..397537ad8d84
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/strongswan/ext_auth-path.patch
@@ -0,0 +1,13 @@
+Index: strongswan-5.2.1/src/libcharon/plugins/ext_auth/ext_auth_listener.c
+===================================================================
+--- strongswan-5.2.1.orig/src/libcharon/plugins/ext_auth/ext_auth_listener.c
++++ strongswan-5.2.1/src/libcharon/plugins/ext_auth/ext_auth_listener.c
+@@ -101,6 +101,8 @@ METHOD(listener_t, authorize, bool,
+ 
+ 		*success = FALSE;
+ 
++		push_env(envp, countof(envp), "PATH=%s", getenv("PATH"));
++
+ 		push_env(envp, countof(envp), "IKE_UNIQUE_ID=%u",
+ 				 ike_sa->get_unique_id(ike_sa));
+ 		push_env(envp, countof(envp), "IKE_NAME=%s",
diff --git a/nixpkgs/pkgs/tools/networking/strongswan/firewall_defaults.patch b/nixpkgs/pkgs/tools/networking/strongswan/firewall_defaults.patch
new file mode 100644
index 000000000000..12c446c8c9aa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/strongswan/firewall_defaults.patch
@@ -0,0 +1,32 @@
+Index: strongswan-5.2.1/src/starter/confread.c
+===================================================================
+--- strongswan-5.2.1.orig/src/starter/confread.c
++++ strongswan-5.2.1/src/starter/confread.c
+@@ -43,7 +43,7 @@
+ static const char ike_defaults[] = "aes128-sha1-modp2048,3des-sha1-modp1536";
+ static const char esp_defaults[] = "aes128-sha1,3des-sha1";
+ 
+-static const char firewall_defaults[] = IPSEC_SCRIPT " _updown iptables";
++static const char firewall_defaults[] = IPSEC_SBINDIR "/" IPSEC_SCRIPT " _updown iptables";
+ 
+ /**
+  * Provided by GPERF
+Index: strongswan-5.2.1/src/starter/Makefile.am
+===================================================================
+--- strongswan-5.2.1.orig/src/starter/Makefile.am
++++ strongswan-5.2.1/src/starter/Makefile.am
+@@ -18,10 +18,12 @@ AM_CPPFLAGS = \
+ 	-I$(top_srcdir)/src/libhydra \
+ 	-I$(top_srcdir)/src/starter \
+ 	-I$(top_srcdir)/src/stroke \
+-	-DIPSEC_DIR=\"${ipsecdir}\" \
++	-DIPSEC_BINDIR=\"${bindir}\" \
+ 	-DIPSEC_CONFDIR=\"${sysconfdir}\" \
+-	-DIPSEC_PIDDIR=\"${piddir}\" \
++	-DIPSEC_DIR=\"${ipsecdir}\" \
+ 	-DIPSEC_EAPDIR=\"${eapdir}\" \
++	-DIPSEC_PIDDIR=\"${piddir}\" \
++	-DIPSEC_SBINDIR=\"${sbindir}\" \
+ 	-DIPSEC_SCRIPT=\"${ipsec_script}\" \
+ 	-DDEV_RANDOM=\"${random_device}\" \
+ 	-DDEV_URANDOM=\"${urandom_device}\" \
diff --git a/nixpkgs/pkgs/tools/networking/strongswan/updown-path.patch b/nixpkgs/pkgs/tools/networking/strongswan/updown-path.patch
new file mode 100644
index 000000000000..f01da7d7bce6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/strongswan/updown-path.patch
@@ -0,0 +1,26 @@
+Index: strongswan-5.2.1/src/_updown/_updown.in
+===================================================================
+--- strongswan-5.2.1.orig/src/_updown/_updown.in
++++ strongswan-5.2.1/src/_updown/_updown.in
+@@ -125,7 +125,7 @@
+ #
+ 
+ # define a minimum PATH environment in case it is not set
+-PATH="/sbin:/bin:/usr/sbin:/usr/bin:@sbindir@"
++PATH="${PATH:-/sbin:/bin:/usr/sbin:/usr/bin}"
+ export PATH
+ 
+ # uncomment to log VPN connections
+Index: strongswan-5.2.1/src/libcharon/plugins/updown/updown_listener.c
+===================================================================
+--- strongswan-5.2.1.orig/src/libcharon/plugins/updown/updown_listener.c
++++ strongswan-5.2.1/src/libcharon/plugins/updown/updown_listener.c
+@@ -240,6 +240,8 @@ static void invoke_once(private_updown_l
+ 	process_t *process;
+ 	char *envp[128] = {};
+ 
++	push_env(envp, countof(envp), "PATH=%s", getenv("PATH"));
++
+ 	me = ike_sa->get_my_host(ike_sa);
+ 	other = ike_sa->get_other_host(ike_sa);
+ 
diff --git a/nixpkgs/pkgs/tools/networking/stubby/default.nix b/nixpkgs/pkgs/tools/networking/stubby/default.nix
new file mode 100644
index 000000000000..9b1ee7a9f799
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/stubby/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchFromGitHub, getdns, libtool, m4, file , doxygen
+, autoreconfHook, automake, check, libbsd, libyaml, darwin }:
+
+stdenv.mkDerivation rec {
+  pname = "stubby";
+  version = "0.2.6";
+
+  src = fetchFromGitHub {
+    owner = "getdnsapi";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "164gm5cbnq785s78bqmbsgxrxkq8hw930xwkxxzi1f6jgz928dnf";
+  };
+
+  nativeBuildInputs = [ libtool m4 libbsd libyaml autoreconfHook ];
+
+  buildInputs = [ doxygen getdns automake file check ]
+    ++ stdenv.lib.optionals stdenv.isDarwin [ darwin.Security ];
+
+  meta = with stdenv.lib; {
+    description = "A local DNS Privacy stub resolver (using DNS-over-TLS)";
+    longDescription = ''
+      Stubby is an application that acts as a local DNS Privacy stub
+      resolver (using RFC 7858, aka DNS-over-TLS). Stubby encrypts DNS
+      queries sent from a client machine (desktop or laptop) to a DNS
+      Privacy resolver increasing end user privacy. Stubby is developed by
+      the getdns team.
+'';
+    homepage = https://dnsprivacy.org/wiki/x/JYAT;
+    downloadPage = "https://github.com/getdnsapi/stubby";
+    maintainers = with maintainers; [ leenaars ];
+    license = licenses.bsd3; platforms = platforms.all;
+    };
+}
diff --git a/nixpkgs/pkgs/tools/networking/stun/default.nix b/nixpkgs/pkgs/tools/networking/stun/default.nix
new file mode 100644
index 000000000000..9960e6f00304
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/stun/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname   = "stun";
+  version = "0.97";
+
+  src = fetchurl {
+    url    = "mirror://sourceforge/${pname}/stund-${version}.tgz";
+    sha256 = "1mxirnnqfqdwb9x8hfjjsscp6lx3468ph6ddx32l94ir46fbzqc3";
+  };
+
+  srcManpages = fetchurl {
+    url    = "mirror://ubuntu/pool/universe/s/stun/stun_0.97~dfsg-2.debian.tar.xz";
+    name   = "stun-debian.tar.xz";
+    sha256 = "1pr6zrdhia0aafsvywl1hrhlgl00vahp63bw1z2mzvdxri7q88f0";
+  };
+
+  outputs = [ "out" "server" ];
+
+  preBuild = ''
+    tar Jxvf ${srcManpages} debian/manpages
+    gzip -9n debian/manpages/stun.1
+    gzip -9n debian/manpages/stund.8
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $server/bin $out/man/man1 $server/man/man8
+    cp -v client $out/bin/stun
+    cp -v server $server/bin/stund
+    cp -v debian/manpages/stun.1.gz  $out/man/man1
+    cp -v debian/manpages/stund.8.gz $server/man/man8
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Stun server and test client";
+    homepage    = https://sourceforge.net/projects/stun/;
+    license     = licenses.vsl10;
+    maintainers = with maintainers; [ marcweber obadz ];
+    platforms   = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/stunnel/default.nix b/nixpkgs/pkgs/tools/networking/stunnel/default.nix
new file mode 100644
index 000000000000..b9278dd7c0d5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/stunnel/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchurl, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "stunnel";
+  version = "5.56";
+
+  src = fetchurl {
+    url    = "https://www.stunnel.org/downloads/${pname}-${version}.tar.gz";
+    sha256 = "08kb4gi9fzqngrczykvba6xhaxhq9m4wmdbhxvgrva5rasrvz13k";
+    # please use the contents of "https://www.stunnel.org/downloads/${name}.tar.gz.sha256",
+    # not the output of `nix-prefetch-url`
+  };
+
+  buildInputs = [ openssl ];
+  configureFlags = [
+    "--with-ssl=${openssl.dev}"
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+  ];
+
+  postInstall = ''
+    # remove legacy compatibility-wrapper that would require perl
+    rm $out/bin/stunnel3
+  '';
+
+  installFlags = [
+    "sysconfdir=\${out}/etc"
+    "localstatedir=\${TMPDIR}"
+  ];
+
+  meta = {
+    description = "Universal tls/ssl wrapper";
+    homepage    = "http://www.stunnel.org/";
+    license     = stdenv.lib.licenses.gpl2Plus;
+    platforms   = stdenv.lib.platforms.unix;
+    maintainers = [ stdenv.lib.maintainers.thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/subfinder/default.nix b/nixpkgs/pkgs/tools/networking/subfinder/default.nix
new file mode 100644
index 000000000000..70820ea03208
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/subfinder/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "subfinder";
+  version = "2.3.0";
+
+  goPackagePath = "github.com/projectdiscovery/subfinder";
+
+  src = fetchFromGitHub {
+    owner = "projectdiscovery";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1vjxi2h4njakyqkfzwwaacy37kqx66j2y3k5l752z9va73gv7xv1";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    description = "Subdomain discovery tool";
+    longDescription = ''
+      SubFinder is a subdomain discovery tool that discovers valid
+      subdomains for websites. Designed as a passive framework to be
+      useful for bug bounties and safe for penetration testing.
+    '';
+    homepage = "https://github.com/projectdiscovery/subfinder";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fpletz filalex77 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/subfinder/deps.nix b/nixpkgs/pkgs/tools/networking/subfinder/deps.nix
new file mode 100644
index 000000000000..16427eddcf6d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/subfinder/deps.nix
@@ -0,0 +1,165 @@
+# file generated from Gopkg.lock using dep2nix (https://github.com/nixcloud/dep2nix)
+[
+  {
+    goPackagePath  = "github.com/davecgh/go-spew";
+    fetch = {
+      type = "git";
+      url = "https://github.com/davecgh/go-spew";
+      rev =  "8991bc29aa16c548c550c7ff78260e27b9ab7c73";
+      sha256 = "0hka6hmyvp701adzag2g26cxdj47g21x6jz4sc6jjz1mn59d474y";
+    };
+  }
+  {
+    goPackagePath  = "github.com/json-iterator/go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/json-iterator/go";
+      rev =  "03217c3e97663914aec3faafde50d081f197a0a2";
+      sha256 = "1kbp9fj6fxfql0ir59zb6v68l4bpwlmk76xm8vaikw1hp6y9bcss";
+    };
+  }
+  {
+    goPackagePath  = "github.com/konsorten/go-windows-terminal-sequences";
+    fetch = {
+      type = "git";
+      url = "https://github.com/konsorten/go-windows-terminal-sequences";
+      rev =  "f55edac94c9bbba5d6182a4be46d86a2c9b5b50e";
+      sha256 = "09mn209ika7ciy87xf2x31dq5fnqw39jidgaljvmqxwk7ff1hnx7";
+    };
+  }
+  {
+    goPackagePath  = "github.com/logrusorgru/aurora";
+    fetch = {
+      type = "git";
+      url = "https://github.com/logrusorgru/aurora";
+      rev =  "21d75270181e0436fee7bd58b991c212cf309068";
+      sha256 = "0vc9qdl6jzq7vazfqgz628gcgsvir56bdi2bkhl54pi92cz9cw0p";
+    };
+  }
+  {
+    goPackagePath  = "github.com/m-mizutani/urlscan-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/m-mizutani/urlscan-go";
+      rev =  "21d37c8d3d34d514f2ef49db9b59cc94f335e9c3";
+      sha256 = "1hpymd4ncp78hgpksnw8k27rp0lh832x1pyk3bhj5dm6xmh79g4c";
+    };
+  }
+  {
+    goPackagePath  = "github.com/miekg/dns";
+    fetch = {
+      type = "git";
+      url = "https://github.com/miekg/dns";
+      rev =  "1e224ff5dead8366ed6fcdcb832794be42e73f0e";
+      sha256 = "1iv9jznakz8f5swiir0z4zilr9ypavnsc0g4zi1r0vad6npy7zfl";
+    };
+  }
+  {
+    goPackagePath  = "github.com/modern-go/concurrent";
+    fetch = {
+      type = "git";
+      url = "https://github.com/modern-go/concurrent";
+      rev =  "bacd9c7ef1dd9b15be4a9909b8ac7a4e313eec94";
+      sha256 = "0s0fxccsyb8icjmiym5k7prcqx36hvgdwl588y0491gi18k5i4zs";
+    };
+  }
+  {
+    goPackagePath  = "github.com/modern-go/reflect2";
+    fetch = {
+      type = "git";
+      url = "https://github.com/modern-go/reflect2";
+      rev =  "4b7aa43c6742a2c18fdef89dd197aaae7dac7ccd";
+      sha256 = "1721y3yr3dpx5dx5ashf063qczk2awy5zjir1jvp1h5hn7qz4i49";
+    };
+  }
+  {
+    goPackagePath  = "github.com/pkg/errors";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pkg/errors";
+      rev =  "ba968bfe8b2f7e042a574c888954fccecfa385b4";
+      sha256 = "0g5qcb4d4fd96midz0zdk8b9kz8xkzwfa8kr1cliqbg8sxsy5vd1";
+    };
+  }
+  {
+    goPackagePath  = "github.com/pmezard/go-difflib";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pmezard/go-difflib";
+      rev =  "792786c7400a136282c1664665ae0a8db921c6c2";
+      sha256 = "0c1cn55m4rypmscgf0rrb88pn58j3ysvc2d0432dp3c6fqg6cnzw";
+    };
+  }
+  {
+    goPackagePath  = "github.com/rs/xid";
+    fetch = {
+      type = "git";
+      url = "https://github.com/rs/xid";
+      rev =  "15d26544def341f036c5f8dca987a4cbe575032c";
+      sha256 = "1vgw1dikqw273awcci6pzifs7shkl5ah4l88j1zjbnpgbiwzlx9j";
+    };
+  }
+  {
+    goPackagePath  = "github.com/sirupsen/logrus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/sirupsen/logrus";
+      rev =  "839c75faf7f98a33d445d181f3018b5c3409a45e";
+      sha256 = "087k2lxrr9p9dh68yw71d05h5g9p5v26zbwd6j7lghinjfaw334x";
+    };
+  }
+  {
+    goPackagePath  = "github.com/stretchr/testify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/stretchr/testify";
+      rev =  "221dbe5ed46703ee255b1da0dec05086f5035f62";
+      sha256 = "187i5g88sxfy4vxpm7dw1gwv29pa2qaq475lxrdh5livh69wqfjb";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev =  "86a70503ff7e82ffc18c7b0de83db35da4791e6a";
+      sha256 = "0w7ih86lmll9gs2j0z3nmmy148i2yism9z53yp58zwa6d5pjahfn";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev =  "5ee1b9f4859acd2e99987ef94ec7a58427c53bef";
+      sha256 = "0jvzqv6phv64rw4pj86x3j9kp5yx9p34fd38r46rb9464h69ba29";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev =  "ce4227a45e2eb77e5c847278dcc6a626742e2945";
+      sha256 = "1s43wvqfml6ml5ks7iv2bis9d664g77mq86v7mfmjhn56x856g35";
+    };
+  }
+  {
+    goPackagePath  = "gopkg.in/yaml.v2";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-yaml/yaml";
+      rev =  "1f64d6156d11335c3f22d9330b0ad14fc1e789ce";
+      sha256 = "0k5xcwkd3wmcx54isk7ck9cwp8fapfhyqdz3f13kxp77cxqizazj";
+    };
+  }
+  {
+    goPackagePath  = "gopkg.in/yaml.v3";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-yaml/yaml";
+      rev =  "4206685974f28e3178b35fa198a59899aa4dee3a";
+      sha256 = "1ff5fd8x45cay9100ds63hxd32s7czsrric0ql6a1jrxczsgqk1g";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/networking/surfraw/default.nix b/nixpkgs/pkgs/tools/networking/surfraw/default.nix
new file mode 100644
index 000000000000..eac737653004
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/surfraw/default.nix
@@ -0,0 +1,24 @@
+{stdenv, fetchurl, perl}:
+
+stdenv.mkDerivation {
+  name = "surfraw-2.3.0";
+
+  src = fetchurl {
+    url = "https://gitlab.com/surfraw/Surfraw/uploads/2de827b2786ef2fe43b6f07913ca7b7f/surfraw-2.3.0.tar.gz";
+    sha256 = "099nbif0x5cbcf18snc58nx1a3q7z0v9br9p2jiq9pcc7ic2015d";
+  };
+
+  configureFlags = [
+    "--disable-opensearch"
+  ];
+
+  nativeBuildInputs = [ perl ];
+
+  meta = {
+    description = "Provides a fast unix command line interface to a variety of popular WWW search engines and other artifacts of power";
+    homepage = https://gitlab.com/surfraw/Surfraw;
+    maintainers = [];
+    platforms = stdenv.lib.platforms.linux;
+    license = stdenv.lib.licenses.publicDomain;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/swagger-codegen/default.nix b/nixpkgs/pkgs/tools/networking/swagger-codegen/default.nix
new file mode 100644
index 000000000000..91f155739140
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/swagger-codegen/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl, jre, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  version = "2.3.1";
+  pname = "swagger-codegen";
+
+  jarfilename = "${pname}-cli-${version}.jar";
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  src = fetchurl {
+    url = "https://oss.sonatype.org/content/repositories/releases/io/swagger/${pname}-cli/${version}/${jarfilename}";
+    sha256 = "171qr0zx7i6cykv54vqjf3mplrf7w4a1fpq47wsj861lbf8xm322";
+  };
+
+  phases = [ "installPhase" ];
+
+  installPhase = ''
+    install -D "$src" "$out/share/java/${jarfilename}"
+
+    makeWrapper ${jre}/bin/java $out/bin/swagger-codegen \
+      --add-flags "-jar $out/share/java/${jarfilename}"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Allows generation of API client libraries (SDK generation), server stubs and documentation automatically given an OpenAPI Spec";
+    homepage = https://github.com/swagger-api/swagger-codegen;
+    license = licenses.asl20;
+    maintainers = [ maintainers.jraygauthier ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/swaks/default.nix b/nixpkgs/pkgs/tools/networking/swaks/default.nix
new file mode 100644
index 000000000000..81d0935f0b08
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/swaks/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, perl, perlPackages, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "swaks";
+  version = "20190914.0";
+
+  src = fetchurl {
+    url = "https://www.jetmore.org/john/code/swaks/files/${pname}-${version}.tar.gz";
+    sha256 = "12awq5z4sdd54cxprj834zajxhkpy4jwhzf1fhigcx1zbhdaacsp";
+  };
+
+  buildInputs = [ perl makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv swaks $out/bin/
+
+    wrapProgram $out/bin/swaks --set PERL5LIB \
+      "${with perlPackages; makePerlPath [
+        NetSSLeay AuthenSASL NetDNS IOSocketInet6
+      ]}"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = "http://www.jetmore.org/john/code/swaks/";
+    description = "A featureful, flexible, scriptable, transaction-oriented SMTP test tool";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [];
+    platforms = platforms.all;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/networking/swec/default.nix b/nixpkgs/pkgs/tools/networking/swec/default.nix
new file mode 100644
index 000000000000..515fcee6963b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/swec/default.nix
@@ -0,0 +1,72 @@
+{ fetchurl, stdenv, makeWrapper, perlPackages }:
+
+stdenv.mkDerivation rec {
+  name = "swec-0.4";
+
+  src = fetchurl {
+    url = "http://files.zerodogg.org/swec/${name}.tar.bz2";
+    sha256 = "1m3971z4z1wr0paggprfz0n8ng8vsnkc9m6s3bdplgyz7qjk6jwx";
+  };
+
+  buildInputs = [ makeWrapper perlPackages.perl perlPackages.LWP perlPackages.URI perlPackages.HTMLParser ];
+  checkInputs = [ perlPackages.HTTPServerSimple perlPackages.Parent ];
+
+  configurePhase = ''
+    for i in swec tests/{runTests,testServer}
+    do
+      sed -i "$i" -e's|/usr/bin/perl|${perlPackages.perl}/bin/perl|g'
+    done
+  '';
+
+  dontBuild = true;
+
+  installPhase = ''
+    make install prefix="$out"
+
+    mkdir -p "$out/share/${name}"
+    cp -v default.sdf "$out/share/${name}"
+    sed -i "$out/bin/swec" -e"s|realpath(\$0)|'$out/share/${name}/swec'|g"
+
+    wrapProgram "$out/bin/swec" \
+      --prefix PERL5LIB : ${with perlPackages; makePerlPath [ LWP URI HTMLParser ]}
+  '';
+
+  doCheck = true;
+  checkPhase = "make test";
+
+  meta = {
+    homepage = https://random.zerodogg.org/swec/;
+
+    description = "Simple Web Error Checker (SWEC)";
+
+    longDescription =
+      '' SWEC (Simple Web Error Checker) is a program that automates testing
+         of dynamic websites.  It parses each HTML file it finds for links,
+         and if those links are within the site specified (ie. local, not
+         external), it will check that page as well.  In this respect it
+         works a lot like a crawler, in that it'll click on any link it finds
+         (more notes about this later).
+
+         In addition to parsing and locating links, it will also parse the
+         pages looking for known errors and report those (such as Mason or
+         PHP errors), and will report if a page can not be read (by either
+         returning a 404, 500 or similar).
+
+         Since you may often want SWEC to be logged in on your site, you have
+         to be careful.  When logged in, SWEC will still click on all links
+         it finds, including things like 'join group' or 'delete account'
+         (though it has some magic trying to avoid the latter).  Therefore it
+         is highly recommended that when you run SWEC as a logged-in user on
+         a site, use a test server, not the live one.
+
+         Running SWEC on a live site without being logged in as a user is
+         perfectly fine, it won't do anything a normal crawler wouldn't do
+         (well, not exactly true, SWEC will ignore robots.txt).
+      '';
+
+    license = stdenv.lib.licenses.gpl3Plus;
+
+    maintainers = [ ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tayga/default.nix b/nixpkgs/pkgs/tools/networking/tayga/default.nix
new file mode 100644
index 000000000000..97bcbdc999eb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tayga/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  version = "0.9.2";
+  pname = "tayga";
+
+  src = fetchurl {
+    url= "http://www.litech.org/${pname}/${pname}-${version}.tar.bz2";
+    sha256 = "1700y121lhvpna49bjpssb7jq1abj9qw5wxgjn8gzp6jm4kpj7rb";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Userland stateless NAT64 daemon";
+    longDescription = ''
+      TAYGA is an out-of-kernel stateless NAT64 implementation
+      for Linux that uses the TUN driver to exchange IPv4 and
+      IPv6 packets with the kernel.
+      It is intended to provide production-quality NAT64 service
+      for networks where dedicated NAT64 hardware would be overkill.
+    '';
+    homepage = http://www.litech.org/tayga;
+    license = licenses.gpl2;
+    maintainers = [ maintainers."0x4A6F" ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tcpdump/default.nix b/nixpkgs/pkgs/tools/networking/tcpdump/default.nix
new file mode 100644
index 000000000000..a74dc7ca1d72
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tcpdump/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl, libpcap, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "tcpdump";
+  version = "4.9.3";
+
+  src = fetchurl {
+    url = "http://www.tcpdump.org/release/${pname}-${version}.tar.gz";
+    sha256 = "0434vdcnbqaia672rggjzdn4bb8p8dchz559yiszzdk0sjrprm1c";
+  };
+
+  postPatch = ''
+    patchShebangs tests
+  '';
+
+  checkInputs = [ perl ];
+
+  buildInputs = [ libpcap ];
+
+  configureFlags = stdenv.lib.optional
+    (stdenv.hostPlatform != stdenv.buildPlatform)
+    "ac_cv_linux_vers=2";
+
+  meta = {
+    description = "Network sniffer";
+    homepage = http://www.tcpdump.org/;
+    license = "BSD-style";
+    maintainers = with stdenv.lib.maintainers; [ globin ];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tcpflow/default.nix b/nixpkgs/pkgs/tools/networking/tcpflow/default.nix
new file mode 100644
index 000000000000..8f502c5ef3f6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tcpflow/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, lib, fetchFromGitHub, automake, autoconf
+, openssl, zlib, libpcap, boost
+, useCairo ? false, cairo
+}:
+
+stdenv.mkDerivation rec {
+  pname   = "tcpflow";
+  version = "1.5.2";
+
+  src = fetchFromGitHub {
+    owner  = "simsong";
+    repo   = pname;
+    rev    = "${pname}-${version}";
+    sha256 = "063n3pfqa0lgzcwk4c0h01g2y5c3sli615j6a17dxpg95aw1zryy";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ automake autoconf ];
+  buildInputs = [ openssl zlib libpcap boost ]
+    ++ lib.optional useCairo cairo;
+
+  prePatch = ''
+    substituteInPlace bootstrap.sh \
+      --replace ".git" "" \
+      --replace "/bin/rm" "rm"
+    substituteInPlace configure.ac \
+      --replace "1.5.1" "1.5.2"
+  '';
+
+  preConfigure = "bash ./bootstrap.sh";
+
+  meta = with stdenv.lib; {
+    description = "TCP stream extractor";
+    longDescription = ''
+      tcpflow is a program that captures data transmitted as part of TCP
+      connections (flows), and stores the data in a way that is convenient for
+      protocol analysis and debugging.
+    '';
+    inherit (src.meta) homepage;
+    license     = licenses.gpl3;
+    maintainers = with maintainers; [ primeos raskin obadz ];
+    platforms   = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tcpreplay/default.nix b/nixpkgs/pkgs/tools/networking/tcpreplay/default.nix
new file mode 100644
index 000000000000..032adbff74fb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tcpreplay/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl, libpcap, tcpdump }:
+
+stdenv.mkDerivation rec {
+  pname = "tcpreplay";
+  version = "4.3.2";
+
+  src = fetchurl {
+    url = "https://github.com/appneta/tcpreplay/releases/download/v${version}/tcpreplay-${version}.tar.gz";
+    sha256 = "0ld9v88g5xs2rykimksmhlkwbv2r97575c4aqmqdxbvc37crnisg";
+  };
+
+  buildInputs = [ libpcap ];
+
+  configureFlags = [
+    "--disable-local-libopts"
+    "--disable-libopts-install"
+    "--enable-dynamic-link"
+    "--enable-shared"
+    "--enable-tcpreplay-edit"
+    "--with-libpcap=${libpcap}"
+    "--with-tcpdump=${tcpdump}/bin"
+  ];
+
+  meta = with stdenv.lib; {
+    description = "A suite of utilities for editing and replaying network traffic";
+    homepage = http://tcpreplay.appneta.com/;
+    license = with licenses; [ bsd3 gpl3 ];
+    maintainers = with maintainers; [ eleanor ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tcptraceroute/default.nix b/nixpkgs/pkgs/tools/networking/tcptraceroute/default.nix
new file mode 100644
index 000000000000..cfb627e8b3b9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tcptraceroute/default.nix
@@ -0,0 +1,28 @@
+{ stdenv  , fetchurl, libpcap, libnet
+}:
+
+stdenv.mkDerivation rec {
+   pkgname = "tcptraceroute";
+   name = "${pkgname}-${version}";
+   version = "1.5beta7";
+
+   src = fetchurl {
+     url = "https://github.com/mct/${pkgname}/archive/${name}.tar.gz";
+     sha256 = "1rz8bgc6r1isb40awv1siirpr2i1paa2jc1cd3l5pg1m9522xzap";
+   };
+
+   # for reasons unknown --disable-static configure flag doesn't disable static
+   # linking.. we instead override CFLAGS with -static omitted
+   preBuild = ''
+      makeFlagsArray=(CFLAGS=" -g -O2 -Wall")
+   '';
+
+   buildInputs = [ libpcap libnet ];
+
+   meta = {
+     description = "A traceroute implementation using TCP packets.";
+     homepage = https://github.com/mct/tcptraceroute;
+     license = stdenv.lib.licenses.gpl2;
+     maintainers = [ stdenv.lib.maintainers.pbogdan ];
+   };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tdns-cli/default.nix b/nixpkgs/pkgs/tools/networking/tdns-cli/default.nix
new file mode 100644
index 000000000000..473ee8ace345
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tdns-cli/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  name = "tdns-cli";
+  version = "0.0.5";
+  
+  src = fetchFromGitHub {
+    owner = "rotty";
+    repo = name;
+    rev = "v${version}";
+    sha256 = "0nn036in5j1h0vxkwif0lf7fn900zy4f4kxlzy6qdx3jakgmxvwh";
+  };
+
+  cargoSha256 = "0h41ws3jcxb90mhnznckfkfv0mpx6ykga7087bipbaw2fqhr7izd";
+
+  meta = with stdenv.lib; {
+    description = "DNS tool that aims to replace dig and nsupdate";
+    homepage = "https://github.com/rotty/tdns-cli";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ astro ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/telepresence/default.nix b/nixpkgs/pkgs/tools/networking/telepresence/default.nix
new file mode 100644
index 000000000000..e6d427b2bcb9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/telepresence/default.nix
@@ -0,0 +1,53 @@
+{ lib, pythonPackages, fetchgit, fetchFromGitHub, makeWrapper, git
+, sshfs-fuse, torsocks, sshuttle, conntrack-tools , openssh, coreutils
+, iptables, bash }:
+
+let
+  sshuttle-telepresence = lib.overrideDerivation sshuttle (p: {
+    src = fetchgit {
+      url = "https://github.com/datawire/sshuttle.git";
+      rev = "32226ff14d98d58ccad2a699e10cdfa5d86d6269";
+      sha256 = "1q20lnljndwcpgqv2qrf1k0lbvxppxf98a4g5r9zd566znhcdhx3";
+    };
+
+    nativeBuildInputs = p.nativeBuildInputs ++ [ git ];
+
+    postPatch = "rm sshuttle/tests/client/test_methods_nat.py";
+    postInstall = "mv $out/bin/sshuttle $out/bin/sshuttle-telepresence";
+  });
+in pythonPackages.buildPythonPackage rec {
+  pname = "telepresence";
+  version = "0.101";
+
+  src = fetchFromGitHub {
+    owner = "datawire";
+    repo = "telepresence";
+    rev = version;
+    sha256 = "1rxq22vcrw29682g7pdcwcjyifcg61z8y4my1di7yw731aldk274";
+  };
+
+  buildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    wrapProgram $out/bin/telepresence \
+      --prefix PATH : ${lib.makeBinPath [
+        sshfs-fuse
+        torsocks
+        conntrack-tools
+        sshuttle-telepresence
+        openssh
+        coreutils
+        iptables
+        bash
+      ]}
+  '';
+
+  doCheck = false;
+
+  meta = {
+    homepage = https://www.telepresence.io/;
+    description = "Local development against a remote Kubernetes or OpenShift cluster";
+    license = with lib.licenses; [ asl20 ];
+    maintainers = with lib.maintainers; [ offline ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tendermint/default.nix b/nixpkgs/pkgs/tools/networking/tendermint/default.nix
new file mode 100644
index 000000000000..0b9c254deeb4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tendermint/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "tendermint";
+  version = "0.32.3";
+
+  src = fetchFromGitHub {
+    owner = "tendermint";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0vpnw42a28glghdpgxmqhxd63cnbpghhazpzsdksqkw0i1l36ywr";
+  };
+
+  modSha256 = "1h51zgvjq3bm09yhm54rk8a86cqa1zma3mx6pb0kq7k72xvhpx0a";
+
+  meta = with stdenv.lib; {
+    description = "Byzantine-Fault Tolerant State Machines. Or Blockchain, for short.";
+    homepage = https://tendermint.com/;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ alexfmpe ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/termshark/default.nix b/nixpkgs/pkgs/tools/networking/termshark/default.nix
new file mode 100644
index 000000000000..3361127afede
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/termshark/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, makeWrapper, buildGoModule, wireshark-cli }:
+
+buildGoModule rec {
+  pname = "termshark";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "gcla";
+    repo = "termshark";
+    rev = "v${version}";
+    sha256 = "1h9wysvd7i4vzn9qyswrmckmshxmh24ypvca98balkyhsxjwlb6j";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ wireshark-cli ];
+
+  modSha256 = "09mbjbk5wa18z4xis5b2v2v0b04mf4d896yp88vcj8d8hsmbmc6g";
+
+  postFixup = ''
+    wrapProgram $out/bin/termshark --prefix PATH : ${stdenv.lib.makeBinPath [ wireshark-cli ]}
+  '';
+
+  buildFlagsArray = ''
+    -ldflags=
+    -X github.com/gcla/termshark.Version=${version}
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://termshark.io/;
+    description = "A terminal UI for wireshark-cli, inspired by Wireshark";
+    platforms = platforms.linux;
+    license = licenses.mit;
+    maintainers = [ maintainers.winpat ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tftp-hpa/default.nix b/nixpkgs/pkgs/tools/networking/tftp-hpa/default.nix
new file mode 100644
index 000000000000..edd2abdd13e3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tftp-hpa/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "tftp-hpa";
+  version="5.2";
+  src = fetchurl {
+    url = "mirror://kernel/software/network/tftp/tftp-hpa/${pname}-${version}.tar.xz";
+    sha256 = "12vidchglhyc20znq5wdsbhi9mqg90jnl7qr9qs8hbvaz4fkdvmg";
+  };
+
+  meta = with stdenv.lib; {
+    description = "TFTP tools - a lot of fixes on top of BSD TFTP";
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+    license = licenses.bsd3;
+    homepage = https://www.kernel.org/pub/software/network/tftp/;
+  };
+
+  passthru = {
+    updateInfo = {
+      downloadPage = "https://www.kernel.org/pub/software/network/tftp/";
+    };
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tgt/default.nix b/nixpkgs/pkgs/tools/networking/tgt/default.nix
new file mode 100644
index 000000000000..478c1ed35f29
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tgt/default.nix
@@ -0,0 +1,59 @@
+{ stdenv, lib, fetchFromGitHub, libxslt, libaio, systemd, perl, perlPackages
+, docbook_xsl, coreutils, lsof, rdma-core, makeWrapper, sg3_utils, utillinux
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tgt";
+  version = "1.0.79";
+
+  src = fetchFromGitHub {
+    owner = "fujita";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "18bp7fcpv7879q3ppdxlqj7ayqmlh5zwrkz8gch6rq9lkmmrklrf";
+  };
+
+  nativeBuildInputs = [ libxslt docbook_xsl makeWrapper ];
+
+  buildInputs = [ systemd libaio ];
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+    "SD_NOTIFY=1"
+  ];
+
+  installFlags = [
+    "sysconfdir=${placeholder "out"}/etc"
+  ];
+
+  preConfigure = ''
+    sed -i 's|/usr/bin/||' doc/Makefile
+    sed -i 's|/usr/include/libaio.h|${libaio}/include/libaio.h|' usr/Makefile
+    sed -i 's|/usr/include/sys/|${stdenv.glibc.dev}/include/sys/|' usr/Makefile
+    sed -i 's|/usr/include/linux/|${stdenv.glibc.dev}/include/linux/|' usr/Makefile
+  '';
+
+  postInstall = ''
+    substituteInPlace $out/sbin/tgt-admin \
+      --replace "#!/usr/bin/perl" "#! ${perl}/bin/perl -I${perlPackages.ConfigGeneral}/${perl.libPrefix}"
+    wrapProgram $out/sbin/tgt-admin --prefix PATH : \
+      ${lib.makeBinPath [ lsof sg3_utils (placeholder "out") ]}
+
+    install -D scripts/tgtd.service $out/etc/systemd/system/tgtd.service
+    substituteInPlace $out/etc/systemd/system/tgtd.service \
+      --replace "/usr/sbin/tgt" "$out/bin/tgt"
+
+    # See https://bugzilla.redhat.com/show_bug.cgi?id=848942
+    sed -i '/ExecStart=/a ExecStartPost=${coreutils}/bin/sleep 5' $out/etc/systemd/system/tgtd.service
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "iSCSI Target daemon with RDMA support";
+    homepage = "http://stgt.sourceforge.net/";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ johnazoidberg ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tinc/default.nix b/nixpkgs/pkgs/tools/networking/tinc/default.nix
new file mode 100644
index 000000000000..e331916626e3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tinc/default.nix
@@ -0,0 +1,31 @@
+{stdenv, fetchurl, lzo, openssl, zlib}:
+
+stdenv.mkDerivation rec {
+  version = "1.0.36";
+  pname = "tinc";
+
+  src = fetchurl {
+    url = "https://www.tinc-vpn.org/packages/tinc-${version}.tar.gz";
+    sha256 = "021i2sl2mjscbm8g59d7vs74iw3gf0m48wg7w3zhwj6czarkpxs0";
+  };
+
+  buildInputs = [ lzo openssl zlib ];
+
+  configureFlags = [
+    "--localstatedir=/var"
+    "--sysconfdir=/etc"
+  ];
+
+  meta = {
+    description = "VPN daemon with full mesh routing";
+    longDescription = ''
+      tinc is a Virtual Private Network (VPN) daemon that uses tunnelling and
+      encryption to create a secure private network between hosts on the
+      Internet.  It features full mesh routing, as well as encryption,
+      authentication, compression and ethernet bridging.
+    '';
+    homepage="http://www.tinc-vpn.org/";
+    license = stdenv.lib.licenses.gpl2Plus;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tinc/pre.nix b/nixpkgs/pkgs/tools/networking/tinc/pre.nix
new file mode 100644
index 000000000000..85cdd19702fa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tinc/pre.nix
@@ -0,0 +1,52 @@
+{ stdenv, fetchgit, fetchpatch, autoreconfHook, texinfo, ncurses, readline, zlib, lzo, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "tinc";
+  version = "1.1pre17";
+
+  src = fetchgit {
+    rev = "refs/tags/release-${version}";
+    url = "git://tinc-vpn.org/tinc";
+    sha256 = "12abmx9qglchgn94a1qwgzldf2kaz77p8705ylpggzyncxv6bw2q";
+  };
+
+  outputs = [ "out" "man" "info" ];
+
+  patches = [
+    (fetchpatch {
+      name = "tinc-openssl-1.0.2r.patch";
+      url = "http://git.tinc-vpn.org/git/browse?p=tinc;a=patch;h=2b0aeec02d64bb4724da9ff1dbc19b7d35d7c904";
+      sha256 = "0kidzlmgl0cin4g54ygcxa0jbq9vwlk3dyq5f65nkjd8yvayfzi8";
+    })
+  ];
+
+  nativeBuildInputs = [ autoreconfHook texinfo ];
+  buildInputs = [ ncurses readline zlib lzo openssl ];
+
+  # needed so the build doesn't need to run git to find out the version.
+  prePatch = ''
+    substituteInPlace configure.ac --replace UNKNOWN ${version}
+    echo "${version}" > configure-version
+    echo "https://tinc-vpn.org/git/browse?p=tinc;a=log;h=refs/tags/release-${version}" > ChangeLog
+    sed -i '/AC_INIT/s/m4_esyscmd_s.*/${version})/' configure.ac
+  '';
+
+  configureFlags = [
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+  ];
+
+  meta = with stdenv.lib; {
+    description = "VPN daemon with full mesh routing";
+    longDescription = ''
+      tinc is a Virtual Private Network (VPN) daemon that uses tunnelling and
+      encryption to create a secure private network between hosts on the
+      Internet.  It features full mesh routing, as well as encryption,
+      authentication, compression and ethernet bridging.
+    '';
+    homepage="http://www.tinc-vpn.org/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ fpletz lassulus ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tinyfecvpn/default.nix b/nixpkgs/pkgs/tools/networking/tinyfecvpn/default.nix
new file mode 100644
index 000000000000..aab937c994ee
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tinyfecvpn/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchFromGitHub, pkgconfig }:
+
+stdenv.mkDerivation rec {
+  pname = "tinyfecvpn";
+  version = "20180820.0";
+
+  src = fetchFromGitHub {
+    owner = "wangyu-";
+    repo = pname;
+    rev = version;
+    sha256 = "1mbb9kzvy24na375dz0rlf5k93gan1vahamc9wzkn34mcx8i97cs";
+    fetchSubmodules = true;
+  };
+
+  enableParallelBuilding = true;
+  nativeBuildInputs = [ pkgconfig ];
+
+  patchPhase = ''
+    runHook prePatch
+    find . -type f -name "makefile" -exec sed "s/ -static/ -g/g" -i \{\} \;
+    runHook postPatch
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 tinyvpn $out/bin/tinyvpn
+    runHook postInstall
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/wangyu-/tinyfecVPN";
+    description = "A VPN Designed for Lossy Links, with Build-in Forward Error Correction(FEC) Support";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ petabyteboy ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tinyproxy/default.nix b/nixpkgs/pkgs/tools/networking/tinyproxy/default.nix
new file mode 100644
index 000000000000..f3e6f2f156f6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tinyproxy/default.nix
@@ -0,0 +1,56 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, asciidoc, libxml2,
+  libxslt, docbook_xsl }:
+
+stdenv.mkDerivation rec{
+  pname = "tinyproxy";
+  version = "1.10.0";
+
+  src = fetchFromGitHub {
+    sha256 = "0gzapnllzyc005l3rs6iarjk1p5fc8mf9ysbck1mbzbd8xg6w35s";
+    rev = version;
+    repo = "tinyproxy";
+    owner = "tinyproxy";
+  };
+
+  nativeBuildInputs = [ autoreconfHook asciidoc libxml2 libxslt docbook_xsl ];
+
+  # -z flag is not supported in darwin
+  preAutoreconf = stdenv.lib.optionalString stdenv.isDarwin ''
+    substituteInPlace configure.ac --replace \
+          'LDFLAGS="-Wl,-z,defs $LDFLAGS"' \
+          'LDFLAGS="-Wl, $LDFLAGS"'
+  '';
+
+  # See: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=154624
+  postConfigure = ''
+    substituteInPlace docs/man5/Makefile --replace \
+          "-f manpage" \
+          "--xsltproc-opts=--nonet \\
+           -f manpage \\
+           -L"
+    substituteInPlace docs/man8/Makefile --replace \
+          "-f manpage" \
+          "--xsltproc-opts=--nonet \\
+           -f manpage \\
+           -L"
+  '';
+
+  configureFlags = [
+    "--disable-debug"      # Turn off debugging
+    "--enable-xtinyproxy"  # Compile in support for the XTinyproxy header, which is sent to any web server in your domain.
+    "--enable-filter"      # Allows Tinyproxy to filter out certain domains and URLs.
+    "--enable-upstream"    # Enable support for proxying connections through another proxy server.
+    "--enable-transparent" # Allow Tinyproxy to be used as a transparent proxy daemon.
+    "--enable-reverse"     # Enable reverse proxying.
+  ] ++
+  # See: https://github.com/tinyproxy/tinyproxy/issues/1
+  stdenv.lib.optional stdenv.isDarwin "--disable-regexcheck";
+
+  meta = with stdenv.lib; {
+    homepage = https://tinyproxy.github.io/;
+    description = "A light-weight HTTP/HTTPS proxy daemon for POSIX operating systems";
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    maintainers = [ maintainers.carlosdagos ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tlspool/default.nix b/nixpkgs/pkgs/tools/networking/tlspool/default.nix
new file mode 100644
index 000000000000..df199869e605
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tlspool/default.nix
@@ -0,0 +1,52 @@
+{ stdenv, fetchFromGitHub
+, cmake, pkgconfig, arpa2cm
+, openldap, p11-kit, unbound, libtasn1, db, openssl, quickder, libkrb5, ldns, gnutls-kdh
+, softhsm
+}:
+
+let
+  pname = "tlspool";
+  version = "20180227";
+in
+
+stdenv.mkDerivation {
+  name = "${pname}-${version}";
+  src = fetchFromGitHub {
+    owner = "arpa2";
+    repo = "tlspool";
+    rev = "b4459637d71c7602e94d455e23c74f3973b9cf30";
+    sha256 = "0x78f2bdsiglwicwn3injm5ysfjlfa0yzdpnc0r3iw4z0n89rj2r";
+  };
+
+  nativeBuildInputs = [
+    cmake pkgconfig arpa2cm
+  ];
+
+  buildInputs = [
+    openldap p11-kit unbound libtasn1 db openssl quickder libkrb5 ldns gnutls-kdh
+  ];
+
+  postPatch = ''
+    # CMake is probably confused because the current version isn't 1.2.6, but 1.2-6
+    substituteInPlace CMakeLists.txt \
+      --replace "Quick-DER 1.2.4" "Quick-DER 1.2"
+    substituteInPlace etc/tlspool.conf \
+      --replace "dnssec_rootkey ../etc/root.key" "dnssec_rootkey $out/etc/root.key" \
+      --replace "pkcs11_path /usr/local/lib/softhsm/libsofthsm2.so" "pkcs11_path ${softhsm}/lib/softhsm/libsofthsm2.so"
+  '';
+
+  postInstall = ''
+    mkdir -p $out/include/${pname}/pulleyback $out/etc/tlspool
+    cp -R $src/etc/* $out/etc/tlspool/
+    cp $src/include/tlspool/*.h $out/include/${pname}
+    cp $src/pulleyback/*.h $out/include/${pname}/pulleyback/
+    cp $src/src/*.h $out/include/${pname}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A supercharged TLS daemon that allows for easy, strong and consistent deployment";
+    license = licenses.gpl3;
+    homepage = http://www.tlspool.org;
+    maintainers = with maintainers; [ leenaars qknight ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tox-node/default.nix b/nixpkgs/pkgs/tools/networking/tox-node/default.nix
new file mode 100644
index 000000000000..f47ccab45ea4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tox-node/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, rustPlatform, fetchFromGitHub
+, libsodium, openssl
+, pkgconfig
+}:
+
+with rustPlatform;
+
+buildRustPackage rec {
+  pname = "tox-node";
+  version = "0.0.8";
+
+  src = fetchFromGitHub {
+    owner = "tox-rs";
+    repo = "tox-node";
+    rev = "v${version}";
+    sha256 = "0vnjbhz74d4s6701xsd46ygx0kq8wd8xwpajvkhdivc042mw9078";
+  };
+
+  buildInputs = [ libsodium openssl ];
+  nativeBuildInputs = [ pkgconfig ];
+
+  SODIUM_USE_PKG_CONFIG = "yes";
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D target/release/tox-node $out/bin/tox-node
+
+    runHook postInstall
+  '';
+
+  doCheck = false;
+
+  cargoSha256 = "1nv0630yb8k857n7km4bbgf41j747xdxv7xnc6a9746qpggmdbkh";
+
+  meta = with stdenv.lib; {
+    description = "A server application to run tox node written in pure Rust";
+    homepage = https://github.com/tox-rs/tox-node;
+    license = [ licenses.mit ];
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ suhr ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/toxvpn/default.nix b/nixpkgs/pkgs/tools/networking/toxvpn/default.nix
new file mode 100644
index 000000000000..e4faa5e30f4a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/toxvpn/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchFromGitHub, cmake, nlohmann_json,
+  libtoxcore, libsodium, libcap, zeromq,
+  systemd ? null }:
+
+with stdenv.lib;
+
+stdenv.mkDerivation {
+  name = "toxvpn-2019-09-09";
+
+  src = fetchFromGitHub {
+    owner  = "cleverca22";
+    repo   = "toxvpn";
+    rev    = "45083dec172ce167f7ed84d571ec2822ebe4d51a";
+    sha256 = "193crarrx6q0zd2p6dn67pzv8kngwi440zm1y54njgcz0v3fpxmb";
+  };
+
+  buildInputs = [ libtoxcore nlohmann_json libsodium zeromq ]
+    ++ optionals stdenv.isLinux [ libcap systemd ];
+
+  nativeBuildInputs = [ cmake ];
+
+  cmakeFlags = optional stdenv.isLinux [ "-DSYSTEMD=1" ];
+
+  postInstall = "$out/bin/toxvpn -h";
+
+  meta = with stdenv.lib; {
+    description = "A powerful tool that allows one to make tunneled point to point connections over Tox";
+    homepage    = https://github.com/cleverca22/toxvpn;
+    license     = licenses.gpl3;
+    maintainers = with maintainers; [ cleverca22 obadz toonn ];
+    platforms   = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tracebox/default.nix b/nixpkgs/pkgs/tools/networking/tracebox/default.nix
new file mode 100644
index 000000000000..1d3c4190e388
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tracebox/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchzip, autoreconfHook, libcrafter, libpcap, lua }:
+
+stdenv.mkDerivation rec {
+  pname = "tracebox";
+  version = "0.2";
+
+  src = fetchzip {
+    url = "https://github.com/tracebox/tracebox/archive/v${version}.zip";
+    sha256 = "0gxdapm6b5a41gymi1f0nr2kyz70vllnk10085yz3pq527gp9gns";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ libcrafter lua ];
+
+  configureFlags = [ "--with-lua=yes" ];
+
+  NIX_LDFLAGS = "${libpcap}/lib/libpcap.so ${libcrafter}/lib/libcrafter.so";
+
+  preAutoreconf = ''
+    substituteInPlace Makefile.am --replace "noinst" ""
+    sed '/noinst/d' -i configure.ac
+    sed '/libcrafter/d' -i src/tracebox/Makefile.am
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://www.tracebox.org/;
+    description = "A middlebox detection tool";
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = [ maintainers.lethalman ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/traceroute/default.nix b/nixpkgs/pkgs/tools/networking/traceroute/default.nix
new file mode 100644
index 000000000000..8591db4e016c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/traceroute/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "traceroute";
+  version = "2.1.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/traceroute/${pname}-${version}.tar.gz";
+    sha256 = "3669d22a34d3f38ed50caba18cd525ba55c5c00d5465f2d20d7472e5d81603b6";
+  };
+
+  makeFlags = [ "prefix=$(out)" "LDFLAGS=-lm" ];
+
+  preConfigure = ''
+    sed -i 's@LIBS := \(.*\) -lm \(.*\)@LIBS := \1 \2@' Make.rules
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://traceroute.sourceforge.net/;
+    description = "Tracks the route taken by packets over an IP network";
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = [ maintainers.koral ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/trickle/default.nix b/nixpkgs/pkgs/tools/networking/trickle/default.nix
new file mode 100644
index 000000000000..7a4adc14c2df
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/trickle/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl, libevent }:
+
+stdenv.mkDerivation rec {
+  name = "trickle-1.07";
+
+  src = fetchurl {
+    url = "https://monkey.org/~marius/trickle/${name}.tar.gz";
+    sha256 = "0s1qq3k5mpcs9i7ng0l9fvr1f75abpbzfi1jaf3zpzbs1dz50dlx";
+  };
+
+  buildInputs = [ libevent ];
+
+  preConfigure = ''
+    sed -i 's|libevent.a|libevent.so|' configure
+  '';
+
+  preBuild = ''
+    sed -i '/#define in_addr_t/ s:^://:' config.h
+  '';
+
+  LDFLAGS = "-levent";
+
+  configureFlags = [ "--with-libevent" ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = {
+    description = "Lightweight userspace bandwidth shaper";
+    license = stdenv.lib.licenses.bsd3;
+    homepage = https://monkey.org/~marius/pages/?page=trickle;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/tridactyl-native/default.nix b/nixpkgs/pkgs/tools/networking/tridactyl-native/default.nix
new file mode 100644
index 000000000000..44daa23cd92d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/tridactyl-native/default.nix
@@ -0,0 +1,44 @@
+{ stdenv
+, fetchFromGitHub
+, python3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tridactyl-native";
+  # this is actually the version of tridactyl itself; the native messenger will
+  # probably not change with every tridactyl version
+  version = "1.17.1";
+
+  src = fetchFromGitHub {
+    owner = "tridactyl";
+    repo = "tridactyl";
+    rev = version;
+    sha256 = "197vh3k9nh58djl6ph0lznkdb2schqlksxxr93xjkk4xsc7k6j1g";
+  };
+  sourceRoot = "source/native";
+
+  nativeBuildInputs = [
+    python3.pkgs.wrapPython
+  ];
+
+  buildPhase = ''
+    sed -i -e "s|REPLACE_ME_WITH_SED|$out/share/tridactyl/native_main.py|" "tridactyl.json"
+  '';
+
+  installPhase = ''
+    mkdir -p "$out/lib/mozilla/native-messaging-hosts"
+    cp tridactyl.json "$out/lib/mozilla/native-messaging-hosts/"
+
+    mkdir -p "$out/share/tridactyl"
+    cp native_main.py "$out/share/tridactyl"
+    wrapPythonProgramsIn "$out/share/tridactyl"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Tridactyl native messaging host application";
+    homepage = https://github.com/tridactyl/tridactyl;
+    license = licenses.asl20;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ timokau ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/twa/default.nix b/nixpkgs/pkgs/tools/networking/twa/default.nix
new file mode 100644
index 000000000000..b15b6dcba31e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/twa/default.nix
@@ -0,0 +1,57 @@
+{ stdenv
+, bash
+, curl
+, fetchFromGitHub
+, gawk
+, host
+, jq
+, lib
+, makeWrapper
+, ncurses
+, netcat
+}:
+
+stdenv.mkDerivation rec {
+  pname = "twa";
+  version = "1.9.1";
+
+  src = fetchFromGitHub {
+    owner = "trailofbits";
+    repo = "twa";
+    rev = version;
+    sha256 = "1ab3bcyhfach9y15w8ffvqqan2qk8h62n6z8nqbgygi7n1mf6jzx";
+  };
+
+  dontBuild = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = [ bash
+                  curl
+                  gawk
+                  host.dnsutils
+                  jq
+                  netcat ];
+
+  installPhase = ''
+    install -Dm 0755 twa "$out/bin/twa"
+    install -Dm 0755 tscore "$out/bin/tscore"
+    install -Dm 0644 twa.1 "$out/share/man/man1/twa.1"
+    install -Dm 0644 README.md "$out/share/doc/twa/README.md"
+
+    wrapProgram "$out/bin/twa" \
+      --prefix PATH : ${stdenv.lib.makeBinPath [ curl
+                                                 host.dnsutils
+                                                 jq
+                                                 ncurses
+                                                 netcat ]}
+  '';
+
+  meta = with lib; {
+    description = "A tiny web auditor with strong opinions";
+    homepage = https://github.com/trailofbits/twa;
+    license = licenses.mit;
+    maintainers = with maintainers; [ avaq ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ua/default.nix b/nixpkgs/pkgs/tools/networking/ua/default.nix
new file mode 100644
index 000000000000..ddd0bab5d615
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ua/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, buildGoPackage, fetchgit
+, pkgconfig
+, glib, libxml2
+}:
+
+buildGoPackage rec {
+  pname = "ua-unstable";
+  version = "2017-02-24";
+  rev = "325dab92c60e0f028e55060f0c288aa70905fb17";
+
+  goPackagePath = "github.com/sloonz/ua";
+
+  src = fetchgit {
+    inherit rev;
+    url = "https://github.com/sloonz/ua.git";
+    sha256 = "0452qknc8km9495324g6b5ja3shvk8jl7aa9nrjhdylf09dp2nif";
+  };
+
+  goDeps = ./deps.nix;
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ glib libxml2 ];
+
+  meta = {
+    homepage = https://github.com/sloonz/ua;
+    license = stdenv.lib.licenses.isc;
+    description = "Universal Aggregator";
+    platforms = stdenv.lib.platforms.unix;
+    maintainers = with stdenv.lib.maintainers; [ ttuegel ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ua/deps.nix b/nixpkgs/pkgs/tools/networking/ua/deps.nix
new file mode 100644
index 000000000000..e59b9f239a68
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ua/deps.nix
@@ -0,0 +1,57 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.0
+[
+  {
+    goPackagePath = "github.com/sloonz/cfeedparser";
+    fetch = {
+      type = "git";
+      url = "https://github.com/sloonz/cfeedparser";
+      rev = "a220b181f09fa7fba347c7fa72168ed8a010907a";
+      sha256 = "1dsdzflwbb0cw39bs37shggmswggb326sfdb5x25f4bpd19z6qp0";
+    };
+  }
+  {
+    goPackagePath = "github.com/sloonz/go-maildir";
+    fetch = {
+      type = "git";
+      url = "https://github.com/sloonz/go-maildir";
+      rev = "4629e76d952bb24730bbe1b4c7bc628cd54babb6";
+      sha256 = "0i9r7hhk0ih47pmc9ixhv17fa6gba3j7vk9g8j0di0pr0siha65f";
+    };
+  }
+  {
+    goPackagePath = "github.com/sloonz/go-mime-message";
+    fetch = {
+      type = "git";
+      url = "https://github.com/sloonz/go-mime-message";
+      rev = "cf50e17d2410fee25cdb89485ab0d5996f2d3bfc";
+      sha256 = "09r45w2qfl0rx785xpgcjv9bvdnwkz7fyr272rdi3krwr900fwxs";
+    };
+  }
+  {
+    goPackagePath = "github.com/sloonz/go-qprintable";
+    fetch = {
+      type = "git";
+      url = "https://github.com/sloonz/go-qprintable";
+      rev = "775b3a4592d5bfc47b0ba398ec0d4dba018e5926";
+      sha256 = "19r8ica7kd946brdh1zn4hkzgbciqsz42a2p1h7hgzpmld51kg43";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/redis.v3";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-redis/redis";
+      rev = "b5e368500d0a508ef8f16e9c2d4025a8a46bcc29";
+      sha256 = "1syhnm1csrlfh1jgd1v9bzf2pp9ljyg4ks3z6xx0nqd83xmyhdzh";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/bsm/ratelimit.v1";
+    fetch = {
+      type = "git";
+      url = "https://github.com/bsm/ratelimit";
+      rev = "db14e161995a5177acef654cb0dd785e8ee8bc22";
+      sha256 = "1ph6dsvgwrsli9akh6arwkvz78hkdb42lyqmgfckjcsar1a2fcsh";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/networking/ubridge/default.nix b/nixpkgs/pkgs/tools/networking/ubridge/default.nix
new file mode 100644
index 000000000000..42839a8ba2f2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ubridge/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchFromGitHub
+, libpcap
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ubridge";
+  version = "0.9.16";
+
+  src = fetchFromGitHub {
+    owner = "GNS3";
+    repo = "ubridge";
+    rev = "v${version}";
+    sha256 = "1bind7ylgxs743vfdmpdrpp4iamy461bc3i7nxza91kj7hyyjz6h";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace "/usr/local/bin" "$out/bin" \
+      --replace "setcap" "#setcap"
+  '';
+
+  buildInputs = [ libpcap ];
+
+  preInstall = ''
+    mkdir -p $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Bridge for UDP tunnels, Ethernet, TAP, and VMnet interfaces";
+    longDescription = ''
+      uBridge is a simple application to create user-land bridges between
+      various technologies. Currently bridging between UDP tunnels, Ethernet
+      and TAP interfaces is supported. Packet capture is also supported.
+    '';
+    inherit (src.meta) homepage;
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ primeos ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ucspi-tcp/default.nix b/nixpkgs/pkgs/tools/networking/ucspi-tcp/default.nix
new file mode 100644
index 000000000000..8a3b292ad81f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ucspi-tcp/default.nix
@@ -0,0 +1,86 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "ucspi-tcp-0.88";
+
+  src = fetchurl {
+    url = "https://cr.yp.to/ucspi-tcp/${name}.tar.gz";
+    sha256 = "171yl9kfm8w7l17dfxild99mbf877a9k5zg8yysgb1j8nz51a1ja";
+  };
+
+  # Plain upstream tarball doesn't build, get patches from Debian
+  patches = [
+    (fetchurl {
+      url = "http://ftp.de.debian.org/debian/pool/main/u/ucspi-tcp/ucspi-tcp_0.88-3.diff.gz";
+      sha256 = "0mzmhz8hjkrs0khmkzs5i0s1kgmgaqz07h493bd5jj5fm5njxln6";
+    })
+    ./remove-setuid.patch
+  ];
+
+  # Apply Debian patches
+  postPatch = ''
+    for fname in debian/diff/*.diff; do
+        echo "Applying patch $fname"
+        patch < "$fname"
+    done
+  '';
+
+  # The build system is weird; 'make install' doesn't install anything, instead
+  # it builds an executable called ./install (from C code) which installs
+  # binaries to the directory given on line 1 in ./conf-home.
+  #
+  # Also, assume getgroups and setgroups work, instead of doing a build time
+  # test that breaks on NixOS (I think because nixbld users lack CAP_SETGID
+  # capability).
+  preBuild = ''
+    echo "$out" > conf-home
+
+    echo "main() { return 0; }" > chkshsgr.c
+  '';
+
+  installPhase = ''
+    mkdir -p "$out/bin"
+    mkdir -p "$out/share/man/man1"
+
+    # run the newly built installer
+    ./install
+
+    # Install Debian man pages (upstream has none)
+    cp debian/ucspi-tcp-man/*.1 "$out/share/man/man1"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Command-line tools for building TCP client-server applications";
+    longDescription = ''
+      tcpserver waits for incoming connections and, for each connection, runs a
+      program of your choice. Your program receives environment variables
+      showing the local and remote host names, IP addresses, and port numbers.
+
+      tcpserver offers a concurrency limit to protect you from running out of
+      processes and memory. When you are handling 40 (by default) simultaneous
+      connections, tcpserver smoothly defers acceptance of new connections.
+
+      tcpserver also provides TCP access control features, similar to
+      tcp-wrappers/tcpd's hosts.allow but much faster. Its access control rules
+      are compiled into a hashed format with cdb, so it can easily deal with
+      thousands of different hosts.
+
+      This package includes a recordio tool that monitors all the input and
+      output of a server.
+
+      tcpclient makes a TCP connection and runs a program of your choice. It
+      sets up the same environment variables as tcpserver.
+
+      This package includes several sample clients built on top of tcpclient:
+      who@, date@, finger@, http@, tcpcat, and mconnect.
+
+      tcpserver and tcpclient conform to UCSPI, the UNIX Client-Server Program
+      Interface, using the TCP protocol. UCSPI tools are available for several
+      different networks.
+    '';
+    homepage = http://cr.yp.to/ucspi-tcp.html;
+    license = licenses.publicDomain;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ucspi-tcp/remove-setuid.patch b/nixpkgs/pkgs/tools/networking/ucspi-tcp/remove-setuid.patch
new file mode 100644
index 000000000000..dd6933208046
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ucspi-tcp/remove-setuid.patch
@@ -0,0 +1,15 @@
+diff --git a/hier.c b/hier.c
+index 5663ada..1d73b84 100644
+--- a/hier.c
++++ b/hier.c
+@@ -2,8 +2,8 @@
+ 
+ void hier()
+ {
+-  h(auto_home,-1,-1,02755);
+-  d(auto_home,"bin",-1,-1,02755);
++  h(auto_home,-1,-1,0755);
++  d(auto_home,"bin",-1,-1,0755);
+ 
+   c(auto_home,"bin","tcpserver",-1,-1,0755);
+   c(auto_home,"bin","tcprules",-1,-1,0755);
diff --git a/nixpkgs/pkgs/tools/networking/udptunnel/default.nix b/nixpkgs/pkgs/tools/networking/udptunnel/default.nix
new file mode 100644
index 000000000000..4ee4fa418335
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/udptunnel/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation {
+  name = "udptunnel-19";
+
+  src = fetchurl {
+    url = "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/udptunnel/udptunnel-r19.tar.gz";
+    sha256 = "1hkrn153rdyrp9g15z4d5dq44cqlnby2bfplp6z0g3862lnv7m3l";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/udptunnel
+    cp udptunnel $out/bin
+    cp README COPYING* $out/share/udptunnel
+  '';
+
+  meta = {
+    homepage = https://code.google.com/archive/p/udptunnel/;
+    description = "Tunnels TCP over UDP packets";
+    license = stdenv.lib.licenses.gpl3Plus;
+    maintainers = with stdenv.lib.maintainers; [viric];
+    platforms = with stdenv.lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/uget-integrator/default.nix b/nixpkgs/pkgs/tools/networking/uget-integrator/default.nix
new file mode 100644
index 000000000000..68f457c2a638
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/uget-integrator/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchFromGitHub, uget, python3Packages }:
+
+stdenv.mkDerivation rec {
+  pname = "uget-integrator";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "ugetdm";
+    repo = "uget-integrator";
+    rev = "v${version}";
+    sha256 = "0bfqwbpprxp5sy49p2hqcjdfj7zamnp2hhcnnyccffkn7pghx8pp";
+  };
+
+  nativeBuildInputs = [ python3Packages.wrapPython ];
+
+  buildInputs = [ uget python3Packages.python ];
+
+  installPhase = ''
+    for f in conf/com.ugetdm.{chrome,firefox}.json; do
+      substituteInPlace $f --replace "/usr" "$out"
+    done
+
+	  install -D -t $out/bin                                   bin/uget-integrator
+	  install -D -t $out/etc/opt/chrome/native-messaging-hosts conf/com.ugetdm.chrome.json
+	  install -D -t $out/etc/chromium/native-messaging-hosts   conf/com.ugetdm.chrome.json
+	  install -D -t $out/etc/opera/native-messaging-hosts      conf/com.ugetdm.chrome.json
+	  install -D -t $out/lib/mozilla/native-messaging-hosts    conf/com.ugetdm.firefox.json
+
+    wrapPythonPrograms
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Native messaging host to integrate uGet Download Manager with web browsers";
+    homepage = https://github.com/ugetdm/uget-integrator;
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.romildo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/uget/default.nix b/nixpkgs/pkgs/tools/networking/uget/default.nix
new file mode 100644
index 000000000000..b2da1384557d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/uget/default.nix
@@ -0,0 +1,50 @@
+{ stdenv, fetchurl, pkgconfig, intltool, openssl, curl, libnotify,
+  libappindicator-gtk3, gst_all_1, gtk3, dconf, wrapGAppsHook, aria2 ? null
+}:
+
+stdenv.mkDerivation rec {
+  pname = "uget";
+  version = "2.2.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/urlget/${pname}-${version}.tar.gz";
+    sha256 = "1hmzk907blgzc1z6wv4zbzqrwad06zfm1rqc3svh5garxw8z7xsw";
+  };
+
+  nativeBuildInputs = [
+    pkgconfig
+    intltool
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    openssl
+    curl
+    libnotify
+    libappindicator-gtk3
+    gtk3
+    (stdenv.lib.getLib dconf)
+  ]
+  ++ (with gst_all_1; [ gstreamer gst-plugins-base gst-plugins-good ])
+  ++ (stdenv.lib.optional (aria2 != null) aria2);
+
+  enableParallelBuilding = true;
+
+  preFixup = stdenv.lib.optionalString (aria2 != null)
+               ''gappsWrapperArgs+=(--suffix PATH : "${aria2}/bin")'';
+
+  meta = with stdenv.lib; {
+    description = "Download manager using GTK and libcurl";
+    longDescription = ''
+      uGet is a VERY Powerful download manager application with a large
+      inventory of features but is still very light-weight and low on
+      resources, so don't let the impressive list of features scare you into
+      thinking that it "might be too powerful" because remember power is good
+      and lightweight power is uGet!
+    '';
+    homepage = http://www.ugetdm.com;
+    license = licenses.lgpl21;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ romildo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/unbound/default.nix b/nixpkgs/pkgs/tools/networking/unbound/default.nix
new file mode 100644
index 000000000000..18d9defdd946
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/unbound/default.nix
@@ -0,0 +1,64 @@
+{ stdenv, fetchurl, openssl, nettle, expat, libevent, dns-root-data }:
+
+stdenv.mkDerivation rec {
+  pname = "unbound";
+  version = "1.9.5";
+
+  src = fetchurl {
+    url = "https://unbound.net/downloads/${pname}-${version}.tar.gz";
+    sha256 = "0myv8l886gmlh9nh4j3q5549idxnl51hf9cw20yxfqbwd47l13ca";
+  };
+
+  # https://github.com/NLnetLabs/unbound/pull/90
+  postPatch = ''
+    substituteInPlace validator/val_secalgo.c \
+      --replace '&nettle_secp_256r1' 'nettle_get_secp_256r1()' \
+      --replace '&nettle_secp_384r1' 'nettle_get_secp_384r1()'
+  '';
+
+  outputs = [ "out" "lib" "man" ]; # "dev" would only split ~20 kB
+
+  buildInputs = [ openssl nettle expat libevent ];
+
+  configureFlags = [
+    "--with-ssl=${openssl.dev}"
+    "--with-libexpat=${expat.dev}"
+    "--with-libevent=${libevent.dev}"
+    "--localstatedir=/var"
+    "--sysconfdir=/etc"
+    "--sbindir=\${out}/bin"
+    "--with-rootkey-file=${dns-root-data}/root.key"
+    "--enable-pie"
+    "--enable-relro-now"
+  ];
+
+  installFlags = [ "configfile=\${out}/etc/unbound/unbound.conf" ];
+
+  postInstall = ''
+    make unbound-event-install
+  '';
+
+  preFixup = stdenv.lib.optionalString (stdenv.isLinux && !stdenv.hostPlatform.isMusl) # XXX: revisit
+    # Build libunbound again, but only against nettle instead of openssl.
+    # This avoids gnutls.out -> unbound.lib -> openssl.out.
+    # There was some problem with this on Darwin; let's not complicate non-Linux.
+    ''
+      configureFlags="$configureFlags --with-nettle=${nettle.dev} --with-libunbound-only"
+      configurePhase
+      buildPhase
+      installPhase
+    ''
+    # get rid of runtime dependencies on $dev outputs
+  + ''substituteInPlace "$lib/lib/libunbound.la" ''
+    + stdenv.lib.concatMapStrings
+      (pkg: " --replace '-L${pkg.dev}/lib' '-L${pkg.out}/lib' --replace '-R${pkg.dev}/lib' '-R${pkg.out}/lib'")
+      buildInputs;
+
+  meta = with stdenv.lib; {
+    description = "Validating, recursive, and caching DNS resolver";
+    license = licenses.bsd3;
+    homepage = https://www.unbound.net;
+    maintainers = with maintainers; [ ehmry fpletz globin ];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/unbound/python.nix b/nixpkgs/pkgs/tools/networking/unbound/python.nix
new file mode 100644
index 000000000000..c11862041049
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/unbound/python.nix
@@ -0,0 +1,65 @@
+{ stdenv, fetchurl, openssl, expat, libevent, swig, pythonPackages }:
+
+let
+  inherit (pythonPackages) python;
+in stdenv.mkDerivation rec {
+  pname = "pyunbound";
+  version = "1.9.3";
+
+  src = fetchurl {
+    url = "http://unbound.net/downloads/unbound-${version}.tar.gz";
+    sha256 = "1ykdy62sgzv33ggkmzwx2h0ifm7hyyxyfkb4zckv7gz4f28xsm8v";
+  };
+
+  buildInputs = [ openssl expat libevent swig python ];
+
+  patchPhase = ''substituteInPlace Makefile.in \
+    --replace "\$(DESTDIR)\$(PYTHON_SITE_PKG)" "$out/${python.sitePackages}" \
+    --replace "\$(LIBTOOL) --mode=install cp _unbound.la" "cp _unbound.la"
+    '';
+
+  preConfigure = "export PYTHON_VERSION=${python.pythonVersion}";
+
+  configureFlags = [
+    "--with-ssl=${openssl.dev}"
+    "--with-libexpat=${expat.dev}"
+    "--with-libevent=${libevent.dev}"
+    "--localstatedir=/var"
+    "--sysconfdir=/etc"
+    "--sbindir=\${out}/bin"
+    "--enable-pie"
+    "--enable-relro-now"
+    "--with-pyunbound"
+    "DESTDIR=$out PREFIX="
+  ];
+
+  preInstall = ''
+    mkdir -p $out/${python.sitePackages} $out/etc/${pname}
+    cp .libs/_unbound.so .libs/libunbound.so* $out/${python.sitePackages}
+    substituteInPlace _unbound.la \
+      --replace "-L.libs $PWD/libunbound.la" "-L$out/${python.sitePackages}" \
+      --replace "libdir=\'$PWD/${python.sitePackages}\'" "libdir=\'$out/${python.sitePackages}\'"
+    '';
+
+  installFlags = [ "configfile=\${out}/etc/unbound/unbound.conf pyunbound-install lib" ];
+
+  # All we want is the Unbound Python module
+  postInstall = ''
+    # Generate the built in root anchor and root key and store these in a logical place
+    # to be used by tools depending only on the Python module
+    $out/bin/unbound-anchor -l | head -1 > $out/etc/${pname}/root.anchor
+    $out/bin/unbound-anchor -l | tail --lines=+2 - > $out/etc/${pname}/root.key
+    # We don't need anything else
+    rm -fR $out/bin $out/share $out/include $out/etc/unbound
+    patchelf --replace-needed libunbound.so.2 $out/${python.sitePackages}/libunbound.so.2 $out/${python.sitePackages}/_unbound.so
+    '';
+
+  meta = with stdenv.lib; {
+    description = "Python library for Unbound, the validating, recursive, and caching DNS resolver";
+    license = licenses.bsd3;
+    homepage = http://www.unbound.net;
+    maintainers = with maintainers; [ leenaars ];
+    platforms = stdenv.lib.platforms.unix;
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/uqmi/default.nix b/nixpkgs/pkgs/tools/networking/uqmi/default.nix
new file mode 100644
index 000000000000..010d6a7f8e85
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/uqmi/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, lib, fetchgit, cmake, perl, libubox, json_c }:
+
+stdenv.mkDerivation {
+  name = "uqmi-2016-12-19";
+
+  src = fetchgit {
+    url = "https://git.openwrt.org/project/uqmi.git";
+    rev = "8ceeab690d8c6f1e3afbd4bcaee7bc2ba3fbe165";
+    sha256 = "1fw9r36d024iiq6bq2cikaq5pams5pnbc4z6pcmcny2k4l5cdb6m";
+  };
+
+  postPatch = ''
+    substituteInPlace data/gen-header.pl --replace /usr/bin/env ""
+    patchShebangs .
+  '';
+
+  nativeBuildInputs = [ cmake perl ];
+  buildInputs = [ libubox json_c ];
+
+  meta = with lib; {
+    description = "Tiny QMI command line utility";
+    homepage = "https://git.openwrt.org/?p=project/uqmi.git;a=summary";
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/urlwatch/default.nix b/nixpkgs/pkgs/tools/networking/urlwatch/default.nix
new file mode 100644
index 000000000000..3e572a10da0a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/urlwatch/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  name = "urlwatch-${version}";
+  version = "2.17";
+
+  src = fetchFromGitHub {
+    owner  = "thp";
+    repo   = "urlwatch";
+    rev    = version;
+    sha256 = "1865p3yczgpq8gvgh4cpgbx2ibc1fwycd7pagga9sj8r3q0giqyk";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    appdirs
+    cssselect
+    keyring
+    lxml
+    minidb
+    pycodestyle
+    pyyaml
+    requests
+  ];
+
+  meta = with stdenv.lib; {
+    description = "A tool for monitoring webpages for updates";
+    homepage = https://thp.io/2008/urlwatch/;
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ tv ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/uwimap/default.nix b/nixpkgs/pkgs/tools/networking/uwimap/default.nix
new file mode 100644
index 000000000000..b687f1db0170
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/uwimap/default.nix
@@ -0,0 +1,62 @@
+{ stdenv, fetchurl, fetchpatch, pam, openssl }:
+
+stdenv.mkDerivation ({
+  name = "uw-imap-2007f";
+
+  src = fetchurl {
+    url = "ftp://ftp.cac.washington.edu/imap/imap-2007f.tar.gz";
+    sha256 = "0a2a00hbakh0640r2wdpnwr8789z59wnk7rfsihh3j0vbhmmmqak";
+  };
+
+  makeFlags = [ (if stdenv.isDarwin
+    then "osx"
+    else "lnp") ]  # Linux with PAM modules;
+    # -fPIC is required to compile php with imap on x86_64 systems
+    ++ stdenv.lib.optional stdenv.isx86_64 "EXTRACFLAGS=-fPIC"
+    ++ stdenv.lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [ "CC=${stdenv.hostPlatform.config}-gcc" "RANLIB=${stdenv.hostPlatform.config}-ranlib" ];
+
+  hardeningDisable = [ "format" ];
+
+  buildInputs = [ openssl ]
+    ++ stdenv.lib.optional (!stdenv.isDarwin) pam;
+
+  patches = [ (fetchpatch {
+    url = "https://salsa.debian.org/holmgren/uw-imap/raw/dcb42981201ea14c2d71c01ebb4a61691b6f68b3/debian/patches/1006_openssl1.1_autoverify.patch";
+    sha256 = "09xb58awvkhzmmjhrkqgijzgv7ia381ablf0y7i1rvhcqkb5wga7";
+  }) ];
+
+  postPatch = ''
+    sed -i src/osdep/unix/Makefile -e 's,/usr/local/ssl,${openssl.dev},'
+    sed -i src/osdep/unix/Makefile -e 's,^SSLCERTS=.*,SSLCERTS=/etc/ssl/certs,'
+    sed -i src/osdep/unix/Makefile -e 's,^SSLLIB=.*,SSLLIB=${openssl.out}/lib,'
+  '';
+
+  NIX_CFLAGS_COMPILE = stdenv.lib.optionalString stdenv.isDarwin
+    "-I${openssl.dev}/include/openssl";
+
+  installPhase = ''
+    mkdir -p $out/bin $out/lib $out/include/c-client
+    cp c-client/*.h osdep/unix/*.h c-client/linkage.c c-client/auths.c $out/include/c-client/
+    cp c-client/c-client.a $out/lib/libc-client.a
+    cp mailutil/mailutil imapd/imapd dmail/dmail mlock/mlock mtest/mtest tmail/tmail \
+      tools/{an,ua} $out/bin
+  '';
+
+  meta = {
+    homepage = http://www.washington.edu/imap/;
+    description = "UW IMAP toolkit - IMAP-supporting software developed by the UW";
+    license = stdenv.lib.licenses.asl20;
+    platforms = with stdenv.lib.platforms; linux;
+  };
+
+  passthru = {
+    withSSL = true;
+  };
+} // stdenv.lib.optionalAttrs (stdenv.buildPlatform != stdenv.hostPlatform) {
+  # This is set here to prevent rebuilds on native compilation.
+  # Configure phase is a no-op there, because this package doesn't use ./configure scripts.
+  configurePhase = ''
+    echo "Cross-compilation, injecting make flags"
+    makeFlagsArray+=("ARRC=${stdenv.hostPlatform.config}-ar rc")
+  '';
+})
diff --git a/nixpkgs/pkgs/tools/networking/v2ray/default.nix b/nixpkgs/pkgs/tools/networking/v2ray/default.nix
new file mode 100644
index 000000000000..ee3ca416aa4a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/v2ray/default.nix
@@ -0,0 +1,36 @@
+{ callPackage, fetchFromGitHub, fetchurl
+, assetOverrides ? {}
+, ... } @ args:
+
+callPackage ./generic.nix (rec {
+  version = "4.22.0";
+
+  src = fetchFromGitHub {
+    owner = "v2ray";
+    repo = "v2ray-core";
+    rev = "v${version}";
+    sha256 = "1gr4s96ii4dx5bcwpb82rn250pcnncxwzx147p9dbwbyiy0i9nz7";
+  };
+
+  assets = {
+    # MIT licensed
+    "geoip.dat" = let
+      geoipRev = "202001010102";
+      geoipSha256 = "16i73c3852f7zmya0q3856cc4gvhqhpln9s98qvr2dr1mpp72c1w";
+    in fetchurl {
+      url = "https://github.com/v2ray/geoip/releases/download/${geoipRev}/geoip.dat";
+      sha256 = geoipSha256;
+    };
+
+    # MIT licensed
+    "geosite.dat" = let
+      geositeRev = "20191226.1";
+      geositeSha256 = "0b4ji5kj5jpkwri3libxm9yl49dcy91vkl7h1rkhrrhbl17s3qiy";
+    in fetchurl {
+      url = "https://github.com/v2ray/domain-list-community/releases/download/${geositeRev}/dlc.dat";
+      sha256 = geositeSha256;
+    };
+
+  } // assetOverrides;
+
+} // args)
diff --git a/nixpkgs/pkgs/tools/networking/v2ray/generic.nix b/nixpkgs/pkgs/tools/networking/v2ray/generic.nix
new file mode 100644
index 000000000000..bf6e6cd55ae2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/v2ray/generic.nix
@@ -0,0 +1,50 @@
+{ lib, linkFarm, buildGoModule, runCommand, makeWrapper
+
+# Version specific args
+, version, src, assets
+, ... }:
+
+let
+  assetsDrv = linkFarm "v2ray-assets" (lib.mapAttrsToList (name: path: {
+    inherit name path;
+  }) assets);
+
+  core = buildGoModule rec {
+    pname = "v2ray-core";
+    inherit version src;
+
+    modSha256 = "11gsncy3449a7y6w6pr7acqabyj2q2a1q52f8fcl5cdz1vjbmmxi";
+
+    buildPhase = ''
+      runHook preBuild
+
+      go build -o v2ray v2ray.com/core/main
+      go build -o v2ctl v2ray.com/core/infra/control/main
+
+      runHook postBuild
+    '';
+
+    installPhase = ''
+      install -Dm755 v2ray v2ctl -t $out/bin
+    '';
+  };
+
+in runCommand "v2ray-${version}" {
+  inherit version;
+
+  buildInputs = [ assetsDrv core ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  meta = {
+    homepage = "https://www.v2ray.com/en/index.html";
+    description = "A platform for building proxies to bypass network restrictions";
+    license = with lib.licenses; [ mit ];
+    maintainers = with lib.maintainers; [ servalcatty ];
+  };
+
+} ''
+  for file in ${core}/bin/*; do
+    makeWrapper "$file" "$out/bin/$(basename "$file")" \
+      --set-default V2RAY_LOCATION_ASSET ${assetsDrv}
+  done
+''
diff --git a/nixpkgs/pkgs/tools/networking/v2ray/update.sh b/nixpkgs/pkgs/tools/networking/v2ray/update.sh
new file mode 100755
index 000000000000..38ad77e98f86
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/v2ray/update.sh
@@ -0,0 +1,53 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl jq
+set -eo pipefail
+
+version_nix=$(dirname "$0")/default.nix
+deps_nix=$(dirname "$0")/deps.nix
+
+old_core_rev="v$(sed -En 's/.*\bversion = "(.*?)".*/\1/p' "$version_nix")"
+old_geoip_rev=$(sed -En 's/.*\bgeoipRev = "(.*?)".*/\1/p' "$version_nix")
+old_geosite_rev=$(sed -En 's/.*\bgeositeRev = "(.*?)".*/\1/p' "$version_nix")
+echo "Current version:" >&2
+echo "core: $old_core_rev, geoip: $old_geoip_rev, geosite: $old_geosite_rev" >&2
+
+function fetch_latest_rev {
+    curl "https://api.github.com/repos/v2ray/$1/releases" |
+        jq '.[0].tag_name' --raw-output
+}
+
+core_rev=$(fetch_latest_rev 'v2ray-core')
+geoip_rev=$(fetch_latest_rev 'geoip')
+geosite_rev=$(fetch_latest_rev 'domain-list-community')
+echo "Latest version:" >&2
+echo "core: $core_rev, geoip: $geoip_rev, geosite: $geosite_rev" >&2
+
+if [[ $core_rev != $old_core_rev ]]; then
+    echo "Prefetching core..." >&2
+    { read hash; read store_path; } < <(
+        nix-prefetch-url --unpack --print-path "https://github.com/v2ray/v2ray-core/archive/$core_rev.zip"
+    )
+
+    sed --in-place \
+        -e "s/\bversion = \".*\"/version = \"$(echo "$core_rev" | tail -c+2)\"/" \
+        -e "s/\bsha256 = \".*\"/sha256 = \"$hash\"/" \
+        "$version_nix"
+fi
+
+if [[ $geoip_rev != $old_geoip_rev ]]; then
+    echo "Prefetching geoip..." >&2
+    hash=$(nix-prefetch-url "https://github.com/v2ray/geoip/releases/download/$geoip_rev/geoip.dat")
+    sed --in-place \
+        -e "s/\bgeoipRev = \".*\"/geoipRev = \"$geoip_rev\"/" \
+        -e "s/\bgeoipSha256 = \".*\"/geoipSha256 = \"$hash\"/" \
+        "$version_nix"
+fi
+
+if [[ $geosite_rev != $old_geosite_rev ]]; then
+    echo "Prefetching geosite..." >&2
+    hash=$(nix-prefetch-url "https://github.com/v2ray/domain-list-community/releases/download/$geosite_rev/dlc.dat")
+    sed --in-place \
+        -e "s/\bgeositeRev = \".*\"/geositeRev = \"$geosite_rev\"/" \
+        -e "s/\bgeositeSha256 = \".*\"/geositeSha256 = \"$hash\"/" \
+        "$version_nix"
+fi
diff --git a/nixpkgs/pkgs/tools/networking/vde2/default.nix b/nixpkgs/pkgs/tools/networking/vde2/default.nix
new file mode 100644
index 000000000000..e43c174ab3f5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/vde2/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl, fetchpatch, openssl, libpcap, python2, withPython ? false }:
+
+stdenv.mkDerivation rec {
+  name = "vde2-2.3.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/vde/vde2/2.3.1/${name}.tar.gz";
+    sha256 = "14xga0ib6p1wrv3hkl4sa89yzjxv7f1vfqaxsch87j6scdm59pr2";
+  };
+
+  patches = stdenv.lib.optional stdenv.hostPlatform.isMusl (
+    fetchpatch {
+      url = "https://git.alpinelinux.org/cgit/aports/plain/main/vde2/musl-build-fix.patch?id=ddee2f86a48e087867d4a2c12849b2e3baccc238";
+      sha256 = "0b5382v541bkxhqylilcy34bh83ag96g71f39m070jzvi84kx8af";
+    }
+  );
+
+  configureFlags = stdenv.lib.optional (!withPython) "--disable-python";
+
+  buildInputs = [ openssl libpcap ]
+    ++ stdenv.lib.optional withPython python2;
+
+  hardeningDisable = [ "format" ];
+
+  meta = with stdenv.lib; {
+    homepage = http://vde.sourceforge.net/;
+    description = "Virtual Distributed Ethernet, an Ethernet compliant virtual network";
+    platforms = platforms.unix;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/vlan/default.nix b/nixpkgs/pkgs/tools/networking/vlan/default.nix
new file mode 100644
index 000000000000..7a6a37c91128
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/vlan/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation {
+  name = "vlan-1.9";
+
+  src = fetchurl {
+    url = mirror://gentoo/distfiles/vlan.1.9.tar.gz;
+    sha256 = "1jjc5f26hj7bk8nkjxsa8znfxcf8pgry2ipnwmj2fr6ky0dhm3rv";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  preBuild =
+    ''
+      # Ouch, the tarball contains pre-compiled binaries.
+      make clean
+    '';
+
+  installPhase =
+    ''
+      mkdir -p $out/sbin
+      cp vconfig $out/sbin/
+
+      mkdir -p $out/share/man/man8
+      cp vconfig.8 $out/share/man/man8/
+    '';
+
+  meta = with stdenv.lib; {
+    description = "User mode programs to enable VLANs on Ethernet devices";
+    platforms = platforms.linux;
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/vpnc/default.nix b/nixpkgs/pkgs/tools/networking/vpnc/default.nix
new file mode 100644
index 000000000000..424355e41df8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/vpnc/default.nix
@@ -0,0 +1,57 @@
+{ stdenv, fetchsvn, nettools, libgcrypt, openssl, openresolv, perl, gawk, makeWrapper }:
+
+stdenv.mkDerivation {
+  name = "vpnc-0.5.3-post-r550";
+  src = fetchsvn {
+    url = "https://svn.unix-ag.uni-kl.de/vpnc";
+    rev = "550";
+    sha256 = "0x4ckfv9lpykwmh28v1kyzz91y1j2v48fi8q5nsawrba4q0wlrls";
+  };
+
+  postUnpack = ''
+    mv $sourceRoot/trunk/* $sourceRoot/.
+    rm -r $sourceRoot/{trunk,branches,tags}
+  '';
+
+  patches = [ ./makefile.patch ./no_default_route_when_netmask.patch ];
+
+  # The `etc/vpnc/vpnc-script' script relies on `which' and on
+  # `ifconfig' as found in net-tools (not GNU Inetutils).
+  propagatedBuildInputs = [ nettools ];
+
+  buildInputs = [libgcrypt perl makeWrapper openssl ];
+
+  preConfigure = ''
+    sed -i 's|^#OPENSSL|OPENSSL|g' Makefile
+
+    substituteInPlace "vpnc-script" \
+      --replace "which" "type -P" \
+      --replace "awk" "${gawk}/bin/awk" \
+      --replace "/sbin/resolvconf" "${openresolv}/bin/resolvconf"
+
+    substituteInPlace "config.c" \
+      --replace "/etc/vpnc/vpnc-script" "$out/etc/vpnc/vpnc-script"
+
+    substituteInPlace "pcf2vpnc" \
+      --replace "/usr/bin/perl" "${perl}/bin/perl"
+  '';
+
+  postInstall = ''
+    for i in "$out/{bin,sbin}/"*
+    do
+      wrapProgram $i --prefix PATH :  \
+        "${nettools}/bin:${nettools}/sbin"
+    done
+
+    mkdir -p $out/share/doc/vpnc
+    cp README nortel.txt ChangeLog $out/share/doc/vpnc/
+  '';
+
+  meta = {
+    homepage = https://www.unix-ag.uni-kl.de/~massar/vpnc/;
+    description = "Virtual private network (VPN) client for Cisco's VPN concentrators";
+    license = stdenv.lib.licenses.gpl2Plus;
+
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/vpnc/makefile.patch b/nixpkgs/pkgs/tools/networking/vpnc/makefile.patch
new file mode 100644
index 000000000000..89a8cd6da952
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/vpnc/makefile.patch
@@ -0,0 +1,22 @@
+--- vpnc-0.5.1.orig/Makefile	2008-02-10 22:22:43.000000000 +0100
++++ vpnc-0.5.1/Makefile	2008-02-10 22:22:32.000000000 +0100
+@@ -20,8 +20,8 @@
+ # $Id: Makefile 236 2007-09-05 20:40:59Z Joerg Mayer $
+ 
+ DESTDIR=
+-PREFIX=/usr/local
+-ETCDIR=/etc/vpnc
++PREFIX=$(out)
++ETCDIR=$(out)/etc/vpnc
+ BINDIR=$(PREFIX)/bin
+ SBINDIR=$(PREFIX)/sbin
+ MANDIR=$(PREFIX)/share/man
+@@ -71,7 +71,7 @@
+ 	$(CC) -o $@ $^ $(LDFLAGS)
+ 
+ vpnc.8 : vpnc.8.template makeman.pl vpnc
+-	./makeman.pl
++	perl makeman.pl
+ 
+ cisco-decrypt : cisco-decrypt.o config.o supp.o sysdep.o vpnc-debug.o
+ 	$(CC) -o $@ $^ $(LDFLAGS)
diff --git a/nixpkgs/pkgs/tools/networking/vpnc/no_default_route_when_netmask.patch b/nixpkgs/pkgs/tools/networking/vpnc/no_default_route_when_netmask.patch
new file mode 100644
index 000000000000..fa12abe9b776
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/vpnc/no_default_route_when_netmask.patch
@@ -0,0 +1,12 @@
+diff -uNr a/vpnc-script b/vpnc-script
+--- a/vpnc-script	2015-09-06 13:19:11.408661526 +0200
++++ b/vpnc-script	2015-09-06 14:47:40.260871556 +0200
+@@ -647,7 +647,7 @@
+ 			echo "$i" | grep : >/dev/null || \
+ 				set_network_route "$i" "255.255.255.255" "32"
+ 		done
+-	elif [ -n "$INTERNAL_IP4_ADDRESS" ]; then
++	elif [ -n "$INTERNAL_IP4_ADDRESS" -a -z "$INTERNAL_IP4_NETMASK" ]; then
+ 		set_default_route
+ 	fi
+ 	if [ -n "$CISCO_IPV6_SPLIT_INC" ]; then
diff --git a/nixpkgs/pkgs/tools/networking/vtun/default.nix b/nixpkgs/pkgs/tools/networking/vtun/default.nix
new file mode 100644
index 000000000000..d2cbb5d8a4ee
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/vtun/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchurl, fetchpatch, openssl, lzo, zlib, yacc, flex }:
+
+stdenv.mkDerivation rec {
+  name = "vtun-3.0.4";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/vtun/${name}.tar.gz";
+    sha256 = "1fcqzn2bdjw31j1hvv6lg99v2phhszm29kp2xambxzp32mmxzy5b";
+  };
+
+  patches = [
+    (fetchpatch { url = http://sources.debian.net/data/main/v/vtun/3.0.3-2.2/debian/patches/08-gcc5-inline.patch;
+                 sha256 = "18sys97v2hx6vac5zp3ld7sa6kz4izv3g9dnkm0lflbaxhym2vs1";
+                })
+  ];
+
+  postPatch = ''
+    sed -i -e 's/-m 755//' -e 's/-o root -g 0//' Makefile.in
+    sed -i '/strip/d' Makefile.in
+  '';
+  buildInputs = [ lzo openssl zlib yacc flex ];
+
+  configureFlags = [
+    "--with-lzo-headers=${lzo}/include/lzo"
+    "--with-ssl-headers=${openssl.dev}/include/openssl"
+    "--with-blowfish-headers=${openssl.dev}/include/openssl"
+  ];
+
+  meta = with stdenv.lib; {
+      description = "Virtual Tunnels over TCP/IP with traffic shaping, compression and encryption";
+      homepage = http://vtun.sourceforge.net/;
+      license = licenses.gpl2;
+      platforms = platforms.linux;
+      maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/wakelan/default.nix b/nixpkgs/pkgs/tools/networking/wakelan/default.nix
new file mode 100644
index 000000000000..ff96509e15c5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wakelan/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "wakelan-1.1";
+
+  src = fetchurl {
+    url = "mirror://metalab/system/network/misc/${name}.tar.gz";
+    sha256 = "0vydqpf44146ir6k87gmqaq6xy66xhc1gkr3nsd7jj3nhy7ypx9x";
+  };
+
+  preInstall = ''
+    mkdir -p $out/man/man1 $out/bin
+  '';
+
+  meta = {
+    description = "Send a wake-on-lan packet";
+
+    longDescription =
+      '' WakeLan sends a properly formatted UDP packet across the
+         network which will cause a wake-on-lan enabled computer to
+         power on.
+      '';
+
+    license = stdenv.lib.licenses.gpl2Plus;
+
+    maintainers = [ stdenv.lib.maintainers.viric ];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/wavemon/default.nix b/nixpkgs/pkgs/tools/networking/wavemon/default.nix
new file mode 100644
index 000000000000..89177f49ecfc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wavemon/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitHub, ncurses, libnl, pkgconfig }:
+
+stdenv.mkDerivation rec {
+  version = "0.9.1";
+  baseName = "wavemon";
+  name = "${baseName}-${version}";
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ ncurses libnl ];
+
+  src = fetchFromGitHub {
+    owner = "uoaerg";
+    repo = "wavemon";
+    rev = "v${version}";
+    sha256 = "109ycwnjjqc2vpnd8b86njfifczlxglnyv4rh2qmbn2i5nw2wryg";
+  };
+
+  meta = with stdenv.lib; {
+    inherit version;
+    description = "Ncurses-based monitoring application for wireless network devices";
+    homepage = https://github.com/uoaerg/wavemon;
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ raskin fpletz ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/wbox/default.nix b/nixpkgs/pkgs/tools/networking/wbox/default.nix
new file mode 100644
index 000000000000..b1fb6ae8d909
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wbox/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "wbox";
+  version = "5";
+
+  installPhase = ''
+    install -vD wbox "$out/bin/wbox"
+  '';
+
+  src = fetchurl {
+    url = "http://www.hping.org/wbox/${pname}-${version}.tar.gz";
+    sha256 = "06daxwbysppvbh1mwprw8fgsp6mbd3kqj7a978w7ivn8hdgdi28m";
+  };
+
+  meta = {
+    description = "A simple HTTP benchmarking tool";
+    homepage = http://www.hping.org/wbox/;
+    license = stdenv.lib.licenses.bsd3;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/webalizer/default.nix b/nixpkgs/pkgs/tools/networking/webalizer/default.nix
new file mode 100644
index 000000000000..bd80eae2bebc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/webalizer/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl, zlib, libpng, gd, geoip, db }:
+
+stdenv.mkDerivation {
+  name = "webalizer-2.23-05";
+
+  src = fetchurl {
+    url = ftp://ftp.mrunix.net/pub/webalizer/webalizer-2.23-05-src.tar.bz2;
+    sha256 = "0nl88y57a7gawfragj3viiigfkh5sgivfb4n0k89wzcjw278pj5g";
+  };
+
+  preConfigure =
+    ''
+      substituteInPlace ./configure \
+        --replace "--static" ""
+    '';
+
+  buildInputs = [zlib libpng gd geoip db];
+
+  configureFlags = [
+    "--enable-dns"
+    "--enable-geoip"
+    "--enable-shared"
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Web server log file analysis program";
+    homepage = http://www.webalizer.org;
+    platforms = platforms.unix;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/weighttp/default.nix b/nixpkgs/pkgs/tools/networking/weighttp/default.nix
new file mode 100644
index 000000000000..8ba47534cfbc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/weighttp/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchgit, python, libev, wafHook }:
+stdenv.mkDerivation rec {
+  pname = "weighttp";
+  version = "0.4";
+
+  src = fetchgit {
+    url = https://git.lighttpd.net/weighttp.git;
+    rev = "refs/tags/weighttp-${version}";
+    sha256 = "14yjmdx9p8g8c3zlrx5qid8k156lsagfwhl3ny54162nxjf7kzgr";
+  };
+
+  nativeBuildInputs = [ wafHook ];
+  buildInputs = [ python libev ];
+
+  meta = {
+    platforms = stdenv.lib.platforms.unix;
+    homepage = https://redmine.lighttpd.net/projects/weighttp/wiki;
+    description = "A lightweight and simple webserver benchmarking tool";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/wget/default.nix b/nixpkgs/pkgs/tools/networking/wget/default.nix
new file mode 100644
index 000000000000..b7486ded4c8a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wget/default.nix
@@ -0,0 +1,61 @@
+{ stdenv, fetchurl, gettext, pkgconfig, perlPackages
+, libidn2, zlib, pcre, libuuid, libiconv, libintl
+, python3, lzip
+, libpsl ? null
+, openssl ? null }:
+
+stdenv.mkDerivation rec {
+  pname = "wget";
+  version = "1.20.3";
+
+  src = fetchurl {
+    url = "mirror://gnu/wget/${pname}-${version}.tar.lz";
+    sha256 = "1frajd86ds8vz2hprq30wq8ya89z9dcxnwm8nwk12bbc47l7qq39";
+  };
+
+  patches = [
+    ./remove-runtime-dep-on-openssl-headers.patch
+  ];
+
+  preConfigure = ''
+    patchShebangs doc
+
+  '' + stdenv.lib.optionalString doCheck ''
+    # Work around lack of DNS resolution in chroots.
+    for i in "tests/"*.pm "tests/"*.px
+    do
+      sed -i "$i" -e's/localhost/127.0.0.1/g'
+    done
+  '';
+
+  nativeBuildInputs = [ gettext pkgconfig perlPackages.perl lzip libiconv libintl ];
+  buildInputs = [ libidn2 zlib pcre libuuid ]
+    ++ stdenv.lib.optionals doCheck [ perlPackages.IOSocketSSL perlPackages.LWP python3 ]
+    ++ stdenv.lib.optional (openssl != null) openssl
+    ++ stdenv.lib.optional (libpsl != null) libpsl
+    ++ stdenv.lib.optional stdenv.isDarwin perlPackages.perl;
+
+  configureFlags = [
+    (stdenv.lib.withFeatureAs (openssl != null) "ssl" "openssl")
+  ];
+
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "Tool for retrieving files using HTTP, HTTPS, and FTP";
+
+    longDescription =
+      '' GNU Wget is a free software package for retrieving files using HTTP,
+         HTTPS and FTP, the most widely-used Internet protocols.  It is a
+         non-interactive commandline tool, so it may easily be called from
+         scripts, cron jobs, terminals without X-Windows support, etc.
+      '';
+
+    license = licenses.gpl3Plus;
+
+    homepage = https://www.gnu.org/software/wget/;
+
+    maintainers = with maintainers; [ fpletz ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/wget/remove-runtime-dep-on-openssl-headers.patch b/nixpkgs/pkgs/tools/networking/wget/remove-runtime-dep-on-openssl-headers.patch
new file mode 100644
index 000000000000..a6a1fcfcb37b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wget/remove-runtime-dep-on-openssl-headers.patch
@@ -0,0 +1,17 @@
+diff --git a/src/Makefile.in b/src/Makefile.in
+index 1a36a9b..e279c84 100644
+--- a/src/Makefile.in
++++ b/src/Makefile.in
+@@ -2211,10 +2211,9 @@ version.c:  $(wget_SOURCES) ../lib/libgnu.a
+ 	echo '' >> $@
+ 	echo '#include "version.h"' >> $@
+ 	echo 'const char *version_string = "@VERSION@";' >> $@
+-	echo 'const char *compilation_string = "'$(COMPILE)'";' \
++	echo 'const char *compilation_string = 0;' \
+ 	    | $(ESCAPEQUOTE) >> $@
+-	echo 'const char *link_string = "'$(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+-	$(AM_LDFLAGS) $(LDFLAGS) $(LIBS) $(wget_LDADD)'";' \
++	echo 'const char *link_string = 0;' \
+ 	    | $(ESCAPEQUOTE) >> $@
+ 
+ css.c: $(srcdir)/css.l
diff --git a/nixpkgs/pkgs/tools/networking/whois/default.nix b/nixpkgs/pkgs/tools/networking/whois/default.nix
new file mode 100644
index 000000000000..e079f9a881ed
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/whois/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, fetchFromGitHub, perl, gettext, pkgconfig, libidn2, libiconv }:
+
+stdenv.mkDerivation rec {
+  version = "5.5.3";
+  pname = "whois";
+
+  src = fetchFromGitHub {
+    owner = "rfc1036";
+    repo = "whois";
+    rev = "v${version}";
+    sha256 = "099yvqng085f69k815961jnwk50nzmiknvhl1wwmji2hl36r160g";
+  };
+
+  nativeBuildInputs = [ perl gettext pkgconfig ];
+  buildInputs = [ libidn2 libiconv ];
+
+  preConfigure = ''
+    for i in Makefile po/Makefile; do
+      substituteInPlace $i --replace "prefix = /usr" "prefix = $out"
+    done
+  '';
+
+  makeFlags = [ "HAVE_ICONV=1" ];
+  buildFlags = [ "whois" ];
+
+  installTargets = [ "install-whois" ];
+
+  meta = with stdenv.lib; {
+    description = "Intelligent WHOIS client from Debian";
+    longDescription = ''
+      This package provides a commandline client for the WHOIS (RFC 3912)
+      protocol, which queries online servers for information such as contact
+      details for domains and IP address assignments. It can intelligently
+      select the appropriate WHOIS server for most queries.
+    '';
+
+    homepage = https://packages.qa.debian.org/w/whois.html;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ fpletz ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/wicd/default.nix b/nixpkgs/pkgs/tools/networking/wicd/default.nix
new file mode 100644
index 000000000000..2f95876c2f30
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wicd/default.nix
@@ -0,0 +1,121 @@
+{ stdenv, fetchurl, python2Packages
+, wpa_supplicant, dhcp, dhcpcd, wirelesstools
+, nettools, openresolv, iproute, iputils }:
+
+let
+  inherit (python2Packages) python pygobject2 dbus-python pyGtkGlade pycairo;
+in stdenv.mkDerivation rec {
+  pname = "wicd";
+  version = "1.7.2.4";
+  
+  src = fetchurl {
+    url = "https://launchpad.net/wicd/1.7/${version}/+download/${pname}-${version}.tar.gz";
+    sha256 = "15ywgh60xzmp5z8l1kzics7yi95isrjg1paz42dvp7dlpdfzpzfw";
+  };
+
+  buildInputs = with python2Packages; [
+    python Babel urwid notify
+  ];
+
+  patches = [
+    ./no-var-install.patch
+    ./pygtk.patch
+    ./no-optimization.patch
+    ./dhclient.patch 
+    ./fix-app-icon.patch
+    ./fix-gtk-issues.patch
+    ./urwid-api-update.patch
+    ./fix-curses.patch
+    ];
+
+  # Should I be using pygtk's propagated build inputs?
+  # !!! Should use makeWrapper.
+  postPatch = ''
+    # We don't have "python2".
+    substituteInPlace wicd/wicd-daemon.py --replace 'misc.find_path("python2")' "'${python.interpreter}'"
+    
+    substituteInPlace in/scripts=wicd.in --subst-var-by TEMPLATE-DEFAULT $out/share/other/dhclient.conf.template.default
+
+    sed -i "2iexport PATH=${stdenv.lib.makeBinPath [ python wpa_supplicant dhcpcd dhcp wirelesstools nettools nettools iputils openresolv iproute ]}\$\{PATH:+:\}\$PATH" in/scripts=wicd.in
+    sed -i "3iexport PYTHONPATH=$(toPythonPath $out):$(toPythonPath ${pygobject2}):$(toPythonPath ${dbus-python})\$\{PYTHONPATH:+:\}\$PYTHONPATH" in/scripts=wicd.in
+    sed -i "2iexport PATH=${python}/bin\$\{PATH:+:\}\$PATH" in/scripts=wicd-client.in
+    sed -i "3iexport PYTHONPATH=$(toPythonPath $out):$(toPythonPath ${pyGtkGlade})/gtk-2.0:$(toPythonPath ${pygobject2}):$(toPythonPath ${pygobject2})/gtk-2.0:$(toPythonPath ${pycairo}):$(toPythonPath ${dbus-python})\$\{PYTHONPATH:+:\}\$PYTHONPATH" in/scripts=wicd-client.in
+    sed -i "2iexport PATH=${python}/bin\$\{PATH:+:\}\$PATH" in/scripts=wicd-gtk.in
+    sed -i "3iexport PYTHONPATH=$(toPythonPath $out):$(toPythonPath ${pyGtkGlade})/gtk-2.0:$(toPythonPath ${pygobject2}):$(toPythonPath ${pygobject2})/gtk-2.0:$(toPythonPath ${pycairo}):$(toPythonPath ${dbus-python}):$(toPythonPath ${python2Packages.notify})\$\{PYTHONPATH:+:\}\$PYTHONPATH" in/scripts=wicd-gtk.in
+    sed -i "2iexport PATH=${python}/bin\$\{PATH:+:\}\$PATH" in/scripts=wicd-cli.in
+    sed -i "3iexport PYTHONPATH=$(toPythonPath $out):$(toPythonPath ${pyGtkGlade})/gtk-2.0:$(toPythonPath ${pygobject2}):$(toPythonPath ${pycairo}):$(toPythonPath ${dbus-python})\$\{PYTHONPATH:+:\}\$PYTHONPATH" in/scripts=wicd-cli.in
+    sed -i "2iexport PATH=${python}/bin\$\{PATH:+:\}\$PATH" in/scripts=wicd-curses.in
+    sed -i "3iexport PYTHONPATH=$(toPythonPath $out):$(toPythonPath ${pyGtkGlade})/gtk-2.0:$(toPythonPath ${pygobject2}):$(toPythonPath ${pycairo}):$(toPythonPath ${dbus-python}):$(toPythonPath ${python2Packages.urwid})\$\{PYTHONPATH:+:\}\$PYTHONPATH" in/scripts=wicd-curses.in
+    rm po/ast.po
+  '';
+
+  configurePhase = ''
+    python setup.py configure \
+    --lib=$out/lib/ \
+    --share=$out/share/ \
+    --etc=/var/lib/wicd/ \
+    --scripts=$out/etc/scripts/ \
+    --pixmaps=$out/share/pixmaps/ \
+    --images=$out/share/pixmaps/wicd/ \
+    --encryption=$out/etc/encryption/templates/ \
+    --bin=$out/bin/ \
+    --sbin=$out/sbin/ \
+    --backends=$out/share/backends/ \
+    --daemon=$out/share/daemon/ \
+    --curses=$out/share/curses/ \
+    --gtk=$out/share/gtk/ \
+    --cli=$out/share/cli/ \
+    --networks=/var/lib/wicd/configurations/ \
+    --resume=$out/etc/acpi/resume.d/ \
+    --suspend=$out/etc/acpi/suspend.d/ \
+    --pmutils=$out/lib/pm-utils/sleep.d/ \
+    --dbus=$out/etc/dbus-1/system.d/ \
+    --dbus-service=$out/etc/dbus-1/system-services/ \
+    --systemd=$out/lib/systemd/ \
+    --logrotate=$out/etc/logrotate.d/ \
+    --desktop=$out/share/applications/ \
+    --icons=$out/share/icons/hicolor/ \
+    --translations=$out/share/locale/ \
+    --autostart=$out/etc/xdg/autostart/ \
+    --varlib=$out/var/lib/ \
+    --docdir=$out/share/doc/ \
+    --mandir=$out/share/man/ \
+    --kdedir=$out/share/autostart/ \
+    --python=${python}/bin/python \
+    --distro=nix \
+    --wicdgroup=users \
+    --no-install-init \
+    --no-install-kde \
+    --no-install-acpi \
+    --no-install-pmutils \
+  '';
+
+  installPhase = ''
+    python setup.py install --prefix=$out --install-lib=$out/${python.sitePackages}
+    mkdir -p $out/share/other
+    cp other/dhclient.conf.template.default $out/share/other/dhclient.conf.template.default
+
+    # Add a template for "WPA2 Enterprise" encryption as used, e.g., by the
+    # Eduroam network.  Taken and adapted from
+    # <http://wicd.net/punbb/viewtopic.php?id=87>.
+    cp -v "${./wpa2-ttls}" "$out/etc/encryption/templates/wpa2-ttls"
+    echo "wpa2-ttls" >> "$out/etc/encryption/templates/active"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://wicd.net/;
+    description = "A wiredless and wired network manager";
+    longDescription=''
+      A complete network connection manager
+      Wicd supports wired and wireless networks, and capable of
+      creating and tracking profiles for both.  It has a
+      template-based wireless encryption system, which allows the user
+      to easily add encryption methods used.  It ships with some common
+      encryption types, such as WPA and WEP. Wicd will automatically
+      connect at startup to any preferred network within range.
+    '';
+    maintainers = [ maintainers.roconnor ];
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/wicd/dhclient.patch b/nixpkgs/pkgs/tools/networking/wicd/dhclient.patch
new file mode 100644
index 000000000000..fbda1caacb7a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wicd/dhclient.patch
@@ -0,0 +1,120 @@
+diff -ruN wicd-1.7.2.4.orig/wicd/wicd-daemon.py wicd-1.7.2.4/wicd/wicd-daemon.py
+--- wicd-1.7.2.4.orig/wicd/wicd-daemon.py	2013-06-22 18:55:02.641242947 +0000
++++ wicd-1.7.2.4/wicd/wicd-daemon.py	2013-06-22 18:58:33.990244153 +0000
+@@ -69,6 +69,7 @@
+ wireless_conf = os.path.join(wpath.etc, "wireless-settings.conf")
+ wired_conf = os.path.join(wpath.etc, "wired-settings.conf")
+ dhclient_conf = os.path.join(wpath.etc, "dhclient.conf.template")
++dhclient_conf_default = os.path.join(wpath.share, "other", "dhclient.conf.template.default")
+ 
+ class WicdDaemon(dbus.service.Object):
+     """ The main wicd daemon class.
+@@ -910,7 +911,7 @@
+ 
+         if not os.path.isfile(dhclient_conf):
+             print "dhclient.conf.template not found, copying..."
+-            shutil.copy(dhclient_conf + ".default", dhclient_conf)            
++            shutil.copy(dhclient_conf_default, dhclient_conf)
+         # Hide the files, so the keys aren't exposed.
+         print "chmoding configuration files 0600..."
+         os.chmod(app_conf.get_config(), 0600)diff -ruN wicd-1.7.2.4.orig/wicd/wnettools.py wicd-1.7.2.4/wicd/wnettools.py
+--- wicd-1.7.2.4.orig/wicd/wnettools.py	2013-03-30 21:47:19.804907552 +0000
++++ wicd-1.7.2.4/wicd/wnettools.py	2013-03-31 08:44:37.572792110 +0000
+@@ -37,6 +37,7 @@
+ import time
+ from string import maketrans, translate
+ 
++import tempfile
+ import wpath
+ import misc
+ from misc import find_path 
+@@ -216,6 +217,7 @@
+         self.flush_tool = None
+         self.link_detect = None       
+         self.dhcp_object = None
++        self.dhclient_conf_path = None;
+     
+     def SetDebugMode(self, value):
+         """ If True, verbose output is enabled. """
+@@ -277,12 +279,6 @@
+                 cmd = ""
+             return (client, cmd)
+ 
+-                # probably /var/lib/wicd/dhclient.conf with defaults
+-        dhclient_conf_path = os.path.join(
+-                    wpath.varlib,
+-                    'dhclient.conf'
+-                )
+-        
+         client_dict = {
+             "dhclient" : 
+                 {'connect' : r"%(cmd)s -cf %(dhclientconf)s %(iface)s",
+@@ -307,41 +303,44 @@
+         }
+         (client_name, cmd) = get_client_name(self.DHCP_CLIENT)
+ 
+-        # cause dhclient doesn't have a handy dandy argument
+-        # for specifing the hostname to be sent
+-        if client_name == "dhclient" and flavor:
+-            if hostname == None:
+-                # <hostname> will use the system hostname
+-                # we'll use that if there is hostname passed
+-                # that shouldn't happen, though
+-                hostname = '<hostname>'
+-            print 'attempting to set hostname with dhclient'
+-            print 'using dhcpcd or another supported client may work better'
+-            dhclient_template = \
+-                open(os.path.join(wpath.etc, 'dhclient.conf.template'), 'r')
+-
+-            output_conf = open(dhclient_conf_path, 'w')
+-
+-            for line in dhclient_template.readlines():
+-                line = line.replace('$_HOSTNAME', hostname)
+-                output_conf.write(line)
+-
+-            output_conf.close()
+-            dhclient_template.close()
+-            os.chmod(dhclient_conf_path, 0644)
+-
+         if not client_name or not cmd:
+             print "WARNING: Failed to find a valid dhcp client!"
+             return ""
+             
+         if flavor == "connect":
++            # cause dhclient doesn't have a handy dandy argument
++            # for specifing the hostname to be sent
++            if client_name == "dhclient" and flavor:
++                if hostname == None:
++                    # <hostname> will use the system hostname
++                    # we'll use that if there is hostname passed
++                    # that shouldn't happen, though
++                    hostname = '<hostname>'
++                print 'attempting to set hostname with dhclient'
++                print 'using dhcpcd or another supported client may work better'
++                if not self.dhclient_conf_path:
++                    _,self.dhclient_conf_path = tempfile.mkstemp()
++                    print 'New dhclient conf path: %s ' % self.dhclient_conf_path
++                dhclient_template = \
++                    open(os.path.join(wpath.etc, 'dhclient.conf.template'), 'r')
++
++                output_conf = open(self.dhclient_conf_path, 'w')
++
++                for line in dhclient_template.readlines():
++                    line = line.replace('$_HOSTNAME', hostname)
++                    output_conf.write(line)
++
++                output_conf.close()
++                dhclient_template.close()
++                os.chmod(self.dhclient_conf_path, 0644)
++
+             if not hostname:
+                 hostname = os.uname()[1]
+             return client_dict[client_name]['connect'] % \
+                     { "cmd" : cmd,
+                       "iface" : self.iface,
+                       "hostname" : hostname,
+-                      'dhclientconf' : dhclient_conf_path }
++                      'dhclientconf' : self.dhclient_conf_path }
+         elif flavor == "release":
+             return client_dict[client_name]['release'] % {"cmd":cmd, "iface":self.iface}
+         else:
diff --git a/nixpkgs/pkgs/tools/networking/wicd/fix-app-icon.patch b/nixpkgs/pkgs/tools/networking/wicd/fix-app-icon.patch
new file mode 100644
index 000000000000..31b47bb45881
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wicd/fix-app-icon.patch
@@ -0,0 +1,19 @@
+Someone forgot to pack wicd.png icon. We will replace it with existing one.
+
+diff -ruN wicd-1.7.2.4.orig/gtk/gui.py wicd-1.7.2.4/gtk/gui.py
+--- wicd-1.7.2.4.orig/gtk/gui.py	2013-03-30 21:47:19.802907553 +0000
++++ wicd-1.7.2.4/gtk/gui.py	2013-03-31 08:13:32.876871673 +0000
+@@ -205,8 +205,10 @@
+ 
+         self.status_area.hide_all()
+ 
+-        if os.path.exists(os.path.join(wpath.images, "wicd.png")):
+-            self.window.set_icon_from_file(os.path.join(wpath.images, "wicd.png"))
++        if os.path.exists(os.path.join(wpath.images, "../../icons/hicolour/128x128/apps/wicd-gtk.png")):
++            self.window.set_icon_from_file(os.path.join(wpath.images, "../../icons/hicolor/128x128/apps/wicd-gtk.png"))
++        else:
++            print 'icon doesn\'t exist %s' % os.path.join(wpath.images, "../../icons/hicolor/128x128/apps/wicd-gtk.png")
+         self.statusID = None
+         self.first_dialog_load = True
+         self.is_visible = True
+
diff --git a/nixpkgs/pkgs/tools/networking/wicd/fix-curses.patch b/nixpkgs/pkgs/tools/networking/wicd/fix-curses.patch
new file mode 100644
index 000000000000..138dfbabfd5c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wicd/fix-curses.patch
@@ -0,0 +1,15 @@
+--- a/curses/wicd-curses.py	2015-01-27 22:35:25.414781192 -0300
++++ b/curses/wicd-curses.py	2015-01-28 01:13:48.078904587 -0300
+@@ -1153,9 +1153,10 @@
+         if not ui._started:
+             return False
+ 
+-        input_data = ui.get_input_nonblocking()
++        ui.set_input_timeouts(max_wait=0)
++        input_data = ui.get_input()
+         # Resolve any "alarms" in the waiting
+-        self.handle_keys(input_data[1])
++        self.handle_keys(input_data)
+ 
+         # Update the screen
+         canvas = self.frame.render((self.size), True)
diff --git a/nixpkgs/pkgs/tools/networking/wicd/fix-gtk-issues.patch b/nixpkgs/pkgs/tools/networking/wicd/fix-gtk-issues.patch
new file mode 100644
index 000000000000..31e553b46b50
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wicd/fix-gtk-issues.patch
@@ -0,0 +1,47 @@
+diff -ruN wicd-1.7.2.4.orig/gtk/gui.py wicd-1.7.2.4/gtk/gui.py
+--- wicd-1.7.2.4.orig/gtk/gui.py	2013-03-31 17:01:29.367001288 +0000
++++ wicd-1.7.2.4/gtk/gui.py	2013-03-31 17:55:20.826028396 +0000
+@@ -35,7 +35,7 @@
+ from wicd import misc
+ from wicd import wpath
+ from wicd import dbusmanager
+-from wicd.misc import noneToString
++from wicd.misc import noneToString, _status_dict
+ from wicd.translations import _, language
+ import prefs
+ from prefs import PreferencesDialog
+@@ -250,7 +250,7 @@
+         
+     def handle_connection_results(self, results):
+         if results not in ['success', 'aborted'] and self.is_visible:
+-            error(self.window, language[results], block=False)
++            error(self.window, misc._status_dict[results], block=False)
+ 
+     def create_adhoc_network(self, widget=None):
+         """ Shows a dialog that creates a new adhoc network. """
+diff -ruN wicd-1.7.2.4.orig/po/ru.po wicd-1.7.2.4/po/ru.po
+--- wicd-1.7.2.4.orig/po/ru.po	2013-03-31 17:01:29.362001288 +0000
++++ wicd-1.7.2.4/po/ru.po	2013-03-31 17:43:37.909022515 +0000
+@@ -173,7 +173,7 @@
+ 
+ #: wicd/misc.py:79
+ msgid "Connection Failed: Bad password"
+-msgstr "Ошибка соединения: Неверный пароль:"
++msgstr "Ошибка соединения: Неверный пароль"
+ 
+ #: wicd/misc.py:89
+ msgid "Connection Failed: No DHCP offers received."
+diff -ruN wicd-1.7.2.4.orig/wicd/misc.py wicd-1.7.2.4/wicd/misc.py
+--- wicd-1.7.2.4.orig/wicd/misc.py	2013-03-31 17:01:29.369001288 +0000
++++ wicd-1.7.2.4/wicd/misc.py	2013-03-31 17:23:56.822012593 +0000
+@@ -430,7 +430,9 @@
+     """ Sanitize property names to be used in config-files. """
+     allowed = string.ascii_letters + '_' + string.digits
+     table = string.maketrans(allowed, ' ' * len(allowed))
+-    return s.translate(None, table)
++    #return s.translate(None, table)
++    #return s.translate(table)
++    return s
+ 
+ def sanitize_escaped(s):
+     """ Sanitize double-escaped unicode strings. """
diff --git a/nixpkgs/pkgs/tools/networking/wicd/no-optimization.patch b/nixpkgs/pkgs/tools/networking/wicd/no-optimization.patch
new file mode 100644
index 000000000000..785cae7b6ed5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wicd/no-optimization.patch
@@ -0,0 +1,21 @@
+With optimizations on, python will overwrite the nix store.
+
+--- wicd-1.7.0/in/scripts=wicd.in  2011-04-05 14:31:09.733096865 -0400
++++ wicd-1.7.0/in/scripts=wicd.in  2011-04-05 14:31:16.397096864 -0400
+@@ -1,3 +1,3 @@
+ #!/bin/bash
+ 
+-exec %PYTHON% -O %SHARE%daemon/wicd-daemon.py $@
++exec %PYTHON% -B %SHARE%daemon/wicd-daemon.py $@
+
+--- wicd-1.7.2.4/wicd/wicd-daemon.py  2012-04-30 21:19:45.000000000 +0200
++++ wicd-1.7.2.4/wicd/wicd-daemon.pynew       2013-03-14 21:35:23.250306592 +0100
+@@ -1812,7 +1812,7 @@
+     daemon = WicdDaemon(wicd_bus, auto_connect=auto_connect)
+     child_pid = None
+     if not no_poll:
+-        child_pid = Popen([wpath.python, "-O", 
++        child_pid = Popen([wpath.python, "-B", 
+                           os.path.join(wpath.daemon, "monitor.py")],
+                           shell=False, close_fds=True).pid
+     atexit.register(on_exit, child_pid)
diff --git a/nixpkgs/pkgs/tools/networking/wicd/no-var-install.patch b/nixpkgs/pkgs/tools/networking/wicd/no-var-install.patch
new file mode 100644
index 000000000000..b01f0e5a438a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wicd/no-var-install.patch
@@ -0,0 +1,17 @@
+The install tries to create files in /var.  This patch removes those steps.
+
+--- wicd-1.7.2.4/setup.py     2013-03-14 21:28:21.360580941 +0100
++++ wicd-1.7.2.4/setup.py  2013-03-14 21:22:50.125721943 +0100
+@@ -505,11 +505,8 @@
+         (wpath.dbus_service, ['other/org.wicd.daemon.service']),
+         (wpath.systemd, ['other/wicd.service']),
+         (wpath.logrotate, ['other/wicd.logrotate']),
+-        (wpath.log, [empty_file]), 
+-        (wpath.etc, ['other/dhclient.conf.template.default']),
+         (wpath.encryption, [('encryption/templates/' + b) for b in 
+                             os.listdir('encryption/templates') if not b.startswith('.')]),
+-        (wpath.networks, [empty_file]),
+         (wpath.sbin,  ['scripts/wicd']),  
+         (wpath.daemon, ['wicd/monitor.py', 'wicd/wicd-daemon.py',
+                     'wicd/suspend.py', 'wicd/autoconnect.py']), 
+
diff --git a/nixpkgs/pkgs/tools/networking/wicd/pygtk.patch b/nixpkgs/pkgs/tools/networking/wicd/pygtk.patch
new file mode 100644
index 000000000000..f015e50d684a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wicd/pygtk.patch
@@ -0,0 +1,15 @@
+For some reason nix's pygtk doesn't have a pygtk module so we remove the version check.
+If this ever changes we could remove this patch.
+
+--- wicd-1.7.0/gtk/wicd-client.py	2009-09-01 11:05:31.000000000 -0400
++++ wicd-1.7.0/gtk/wicd-client.py	2009-12-28 00:22:57.000000000 -0500
+@@ -43,9 +43,6 @@
+ import atexit
+ from dbus import DBusException
+ 
+-import pygtk
+-pygtk.require('2.0')
+-
+ HAS_NOTIFY = True
+ try:
+     import pynotify
diff --git a/nixpkgs/pkgs/tools/networking/wicd/urwid-api-update.patch b/nixpkgs/pkgs/tools/networking/wicd/urwid-api-update.patch
new file mode 100644
index 000000000000..a794f6caaeee
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wicd/urwid-api-update.patch
@@ -0,0 +1,21 @@
+--- a/curses/curses_misc.py
++++ a/curses/curses_misc.py
+@@ -358,6 +358,19 @@ class ComboBox(urwid.WidgetWrap):
+         self.parent = None
+         self.ui = None
+         self.row = None
++
++    @property
++    def focus(self):
++        return self._focus
++
++    @focus.setter
++    def focus(self, index):
++        self._focus = index
++
++    @focus.deleter
++    def focus(self):
++        del self._focus
++
+     def set_list(self,list):
+         self.list = list
diff --git a/nixpkgs/pkgs/tools/networking/wicd/wpa2-ttls b/nixpkgs/pkgs/tools/networking/wicd/wpa2-ttls
new file mode 100644
index 000000000000..650375cbbaae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wicd/wpa2-ttls
@@ -0,0 +1,20 @@
+name = WPA2-TTLS
+author = various contributors
+version = 1
+require identity *Identity anonymous_identity *Anonymous_identity password *Password ca_cert *Path_to_CA_Cert
+protected password *Password
+-----
+ctrl_interface=/run/wpa_supplicant
+network={
+        ssid="$_ESSID"
+        scan_ssid=$_SCAN
+        proto=WPA2
+        key_mgmt=WPA-EAP
+        group=CCMP TKIP
+        eap=TTLS
+        identity="$_IDENTITY"
+        password="$_PASSWORD"
+        anonymous_identity="$_ANONYMOUS_IDENTITY"
+        ca_cert="$_CA_CERT"
+        phase2="auth=PAP"
+}
diff --git a/nixpkgs/pkgs/tools/networking/wifite2/default.nix b/nixpkgs/pkgs/tools/networking/wifite2/default.nix
new file mode 100644
index 000000000000..2333408f0781
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wifite2/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, lib, fetchFromGitHub, python3, aircrack-ng, wireshark-cli, reaverwps-t6x, cowpatty, hashcat, hcxtools, which }:
+
+python3.pkgs.buildPythonApplication rec {
+  version = "2.2.5";
+  pname = "wifite2";
+
+  src = fetchFromGitHub {
+    owner = "derv82";
+    repo = "wifite2";
+    rev = version;
+    sha256 = "1hfy90wf2bjg0z8rbs8cfhhvz78pzg2c6nj0zksal42mb6b5cjdp";
+  };
+
+  propagatedBuildInputs = [
+    aircrack-ng
+    wireshark-cli
+    reaverwps-t6x
+    cowpatty
+    hashcat
+    hcxtools
+    which
+  ];
+
+  postFixup = let
+    sitePackagesDir = "$out/lib/python3.${lib.versions.minor python3.version}/site-packages";
+  in ''
+    mv ${sitePackagesDir}/wifite/__main__.py ${sitePackagesDir}/wifite/wifite.py
+  '';
+
+  # which is not found
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/derv82/wifite2";
+    description = "Rewrite of the popular wireless network auditor, wifite";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ lassulus ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/wireguard-go/0001-Fix-darwin-build.patch b/nixpkgs/pkgs/tools/networking/wireguard-go/0001-Fix-darwin-build.patch
new file mode 100644
index 000000000000..d79d9e3531f3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wireguard-go/0001-Fix-darwin-build.patch
@@ -0,0 +1,26 @@
+From 63360467da4ae6d7fc8c0e05619bdf8813c7e417 Mon Sep 17 00:00:00 2001
+From: Maximilian Bosch <maximilian@mbosch.me>
+Date: Sun, 5 Jan 2020 15:35:15 +0100
+Subject: [PATCH] Fix darwin build
+
+---
+ rwcancel/select_default.go | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/rwcancel/select_default.go b/rwcancel/select_default.go
+index dd23cda..03f3452 100644
+--- a/rwcancel/select_default.go
++++ b/rwcancel/select_default.go
+@@ -9,6 +9,7 @@ package rwcancel
+ 
+ import "golang.org/x/sys/unix"
+ 
+-func unixSelect(nfd int, r *unix.FdSet, w *unix.FdSet, e *unix.FdSet, timeout *unix.Timeval) error {
+-	return unix.Select(nfd, r, w, e, timeout)
++func unixSelect(nfd int, r *unix.FdSet, w *unix.FdSet, e *unix.FdSet, timeout *unix.Timeval) (err error) {
++	_, err = unix.Select(nfd, r, w, e, timeout)
++	return
+ }
+-- 
+2.23.1
+
diff --git a/nixpkgs/pkgs/tools/networking/wireguard-go/default.nix b/nixpkgs/pkgs/tools/networking/wireguard-go/default.nix
new file mode 100644
index 000000000000..8832560b3b10
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wireguard-go/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, buildGoPackage, fetchzip }:
+
+buildGoPackage rec {
+  pname = "wireguard-go";
+  version = "0.0.20191012";
+
+  goPackagePath = "golang.zx2c4.com/wireguard";
+
+  src = fetchzip {
+    url = "https://git.zx2c4.com/wireguard-go/snapshot/wireguard-go-${version}.tar.xz";
+    sha256 = "0s3hvqpz13n630yvi0476hfzrp3xcj8x61zc2hl5z70f8kvbay4i";
+  };
+
+  patches = [ ./0001-Fix-darwin-build.patch ];
+
+  goDeps = ./deps.nix;
+
+  passthru.updateScript = ./update.sh;
+
+  meta = with stdenv.lib; {
+    description = "Userspace Go implementation of WireGuard";
+    homepage = https://git.zx2c4.com/wireguard-go/about/;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ elseym kirelagin yegortimoshenko zx2c4 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/wireguard-go/deps.nix b/nixpkgs/pkgs/tools/networking/wireguard-go/deps.nix
new file mode 100644
index 000000000000..b1a92582b7c7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wireguard-go/deps.nix
@@ -0,0 +1,48 @@
+# file generated from go.mod using vgo2nix (https://github.com/adisbladis/vgo2nix)
+[
+  {
+    goPackagePath = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev = "34f69633bfdc";
+      sha256 = "0169vcn9s4c851y9vm7xqnar3vdfjrp7qsvcxadpfhsmwlfhxzgg";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev = "d98b1b443823";
+      sha256 = "1vzwpy56g056dsq304xga3d55jg2cxx89bijpfwjlhwyqyskybsz";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "c178f38b412c";
+      sha256 = "1r6v8xnvb4z5vdckbj6vd08kn6h4ivr9hvdpgq4drj6l1mp79rf7";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/text";
+      rev = "v0.3.2";
+      sha256 = "0flv9idw0jm5nm8lx25xqanbkqgfiym6619w575p7nrdh0riqwqh";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/tools";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/tools";
+      rev = "90fa682c2a6e";
+      sha256 = "03ic2xsy51jw9749wl7gszdbz99iijbd2bckgygl6cm9w5m364ak";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/networking/wireguard-go/update.sh b/nixpkgs/pkgs/tools/networking/wireguard-go/update.sh
new file mode 100755
index 000000000000..2b6b8317a1e8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wireguard-go/update.sh
@@ -0,0 +1,14 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl gnused common-updater-scripts vgo2nix
+
+set -eu -o pipefail
+
+basedir="$(git rev-parse --show-toplevel)"
+version="$(curl -sL https://build.wireguard.com/distros.txt | sed -n 's/^upstream\tgo\t\([^\t]\+\)\t.*/\1/p')"
+update-source-version wireguard-go "$version"
+
+vgo2nix -dir $(nix-build -A wireguard-go.src) -outfile "$basedir/pkgs/tools/networking/wireguard-go/deps.nix"
+
+if [[ -f "$basedir/wireguard-go.log" ]];then
+    rm "$basedir/wireguard-go.log"
+fi
diff --git a/nixpkgs/pkgs/tools/networking/wireguard-tools/default.nix b/nixpkgs/pkgs/tools/networking/wireguard-tools/default.nix
new file mode 100644
index 000000000000..a01b0ab2061c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wireguard-tools/default.nix
@@ -0,0 +1,60 @@
+{
+  stdenv, fetchzip,
+
+  iptables ? null,
+  iproute ? null,
+  libmnl ? null,
+  makeWrapper ? null,
+  openresolv ? null,
+  procps ? null,
+  wireguard-go ? null,
+}:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  pname = "wireguard-tools";
+  version = "1.0.20200102";
+
+  src = fetchzip {
+    url = "https://git.zx2c4.com/wireguard-tools/snapshot/wireguard-tools-${version}.tar.xz";
+    sha256 = "0ry3vbckcbkx43bz0bqinrd1hkll67jbwb72ak0b41wkxjsc8fmv";
+  };
+
+  sourceRoot = "source/src";
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = optional stdenv.isLinux libmnl;
+
+  makeFlags = [
+    "DESTDIR=$(out)"
+    "PREFIX=/"
+    "WITH_BASHCOMPLETION=yes"
+    "WITH_SYSTEMDUNITS=yes"
+    "WITH_WGQUICK=yes"
+  ];
+
+  postFixup = ''
+    substituteInPlace $out/lib/systemd/system/wg-quick@.service \
+      --replace /usr/bin $out/bin
+  '' + optionalString stdenv.isLinux ''
+    for f in $out/bin/*; do
+      wrapProgram $f --prefix PATH : ${makeBinPath [procps iproute iptables openresolv]}
+    done
+  '' + optionalString stdenv.isDarwin ''
+    for f in $out/bin/*; do
+      wrapProgram $f --prefix PATH : ${wireguard-go}/bin
+    done
+  '';
+
+  passthru.updateScript = ./update.sh;
+
+  meta = {
+    description = "Tools for the WireGuard secure network tunnel";
+    downloadPage = "https://git.zx2c4.com/wireguard-tools/refs/";
+    homepage = "https://www.wireguard.com/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ elseym ericsagnes mic92 zx2c4 globin ma27 xwvvvvwx ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/wireguard-tools/update.sh b/nixpkgs/pkgs/tools/networking/wireguard-tools/update.sh
new file mode 100755
index 000000000000..e549228e8f1f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wireguard-tools/update.sh
@@ -0,0 +1,7 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl gnused common-updater-scripts
+
+set -eu -o pipefail
+
+version="$(curl -sL https://build.wireguard.com/distros.txt | sed -n 's/^upstream\tkmodtools\t\([^\t]\+\)\t.*/\1/p')"
+update-source-version wireguard-tools "$version"
diff --git a/nixpkgs/pkgs/tools/networking/wol/default.nix b/nixpkgs/pkgs/tools/networking/wol/default.nix
new file mode 100644
index 000000000000..570d800311e2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wol/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "wol";
+  version = "0.7.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/wake-on-lan/${pname}-${version}.tar.gz";
+    sha256 = "08i6l5lr14mh4n3qbmx6kyx7vjqvzdnh3j9yfvgjppqik2dnq270";
+  };
+
+  # for pod2man in order to get a manpage
+  nativeBuildInputs = [ perl ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "Implements Wake On LAN functionality in a small program";
+    homepage = https://sourceforge.net/projects/wake-on-lan/;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ makefu ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/wolfebin/default.nix b/nixpkgs/pkgs/tools/networking/wolfebin/default.nix
new file mode 100644
index 000000000000..7eded00db858
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wolfebin/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub, python }:
+
+stdenv.mkDerivation rec {
+  version = "5.4";
+  pname = "wolfebin";
+  
+  src = fetchFromGitHub {
+    owner = "thejoshwolfe";
+    repo = "wolfebin";
+    rev = version;
+    sha256 = "16xj6zz30sn9q05p211bmmsl0i6fknfxf8dssn6knm6nkiym8088";
+  };
+
+  buildInputs = [ python ];
+
+  installPhase = ''
+    install -m 755 -d $out/bin
+    install -m 755 wolfebin $out/bin
+    install -m 755 wolfebin_server.py $out/bin/wolfebin_server
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/thejoshwolfe/wolfebin;
+    description = "Quick and easy file sharing";
+    license = licenses.mit;
+    maintainers = [ maintainers.andrewrk ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/wrk/default.nix b/nixpkgs/pkgs/tools/networking/wrk/default.nix
new file mode 100644
index 000000000000..98705430c2f0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wrk/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, fetchFromGitHub, luajit, openssl, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "wrk";
+  version = "4.1.0";
+
+  src = fetchFromGitHub {
+    owner = "wg";
+    repo = "wrk";
+    rev = version;
+    sha256 = "0dblb3qdg8mbgb8iiks0g420pza13npbr33b2xkc5dgv7kcwmvqj";
+  };
+
+  buildInputs = [ luajit openssl perl ];
+
+  makeFlags = [ "WITH_LUAJIT=${luajit}" "WITH_OPENSSL=${openssl.dev}" "VER=${version}" ];
+
+  preBuild = ''
+    for f in src/*.h; do
+      substituteInPlace $f \
+        --replace "#include <luajit-2.0/" "#include <"
+    done
+  '';
+
+  NIX_CFLAGS_COMPILE = "-DluaL_reg=luaL_Reg"; # needed since luajit-2.1.0-beta3
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp wrk $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "HTTP benchmarking tool";
+    homepage = https://github.com/wg/wrk;
+    longDescription = ''
+      wrk is a modern HTTP benchmarking tool capable of generating
+      significant load when run on a single multi-core CPU. It
+      combines a multithreaded design with scalable event notification
+      systems such as epoll and kqueue.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ragge ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/wrk2/default.nix b/nixpkgs/pkgs/tools/networking/wrk2/default.nix
new file mode 100644
index 000000000000..7908143bdab3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wrk2/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, fetchFromGitHub, luajit, openssl, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "wrk2";
+  version = "4.0.0-${builtins.substring 0 7 src.rev}";
+
+  src = fetchFromGitHub {
+    owner  = "giltene";
+    repo   = "wrk2";
+    rev    = "e0109df5b9de09251adb5f5848f223fbee2aa9f5";
+    sha256 = "1aqdwmgdd74wq73f1zp28yqj91gd6p6nf9nbdfibl7mlklbzvak8";
+  };
+
+  buildInputs = [ luajit openssl zlib ];
+
+  patchPhase = ''
+    rm -rf deps/luajit && mkdir deps/luajit
+
+    substituteInPlace ./Makefile \
+      --replace '-lluajit' '-lluajit-5.1' \
+      --replace '_BSD_SOURCE' '_DEFAULT_SOURCE' \
+      --replace 'cd $(LDIR) && ./luajit' '${luajit}/bin/luajit' \
+      --replace 'config.h Makefile $(LDIR)/libluajit.a' 'config.h Makefile'
+
+    substituteInPlace ./src/script.c \
+      --replace 'struct luaL_reg ' 'struct luaL_Reg '
+  '';
+
+  dontConfigure = true;
+  installPhase = ''
+    mkdir -p $out/bin
+    mv ./wrk $out/bin/wrk2
+  '';
+
+  meta = {
+    description = "Constant throughput, correct latency recording variant of wrk";
+    homepage    = https://github.com/giltene/wrk2;
+    license     = stdenv.lib.licenses.bsd3;
+    platforms   = stdenv.lib.platforms.linux;
+    maintainers = with stdenv.lib.maintainers; [ thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/wstunnel/default.nix b/nixpkgs/pkgs/tools/networking/wstunnel/default.nix
new file mode 100644
index 000000000000..2488d874e6db
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wstunnel/default.nix
@@ -0,0 +1,47 @@
+{ mkDerivation, async, base, base64-bytestring, binary, bytestring
+, classy-prelude, cmdargs, connection, hslogger, mtl, network
+, network-conduit-tls, stdenv, streaming-commons, text
+, unordered-containers, websockets
+, lib, fetchFromGitHub, fetchpatch
+}:
+
+mkDerivation rec {
+  pname = "wstunnel";
+  version = "unstable-2019-01-28";
+
+  src = fetchFromGitHub {
+    owner = "erebe";
+    repo = pname;
+    rev = "78cc5a5f1aa4dbcb25fa9b0efc9cfef3640672e4";
+    sha256 = "17y3yn7qg1h7jx9xs041sw63g51vyns236f60d2m2mghi49lm9i2";
+  };
+
+  patches = [
+    # Support GHC 8.6   https://github.com/erebe/wstunnel/pull/18
+    (fetchpatch {
+      url = "https://github.com/erebe/wstunnel/commit/8f348fea4dbf75874d5d930334377843763335ab.patch";
+      sha256 = "0a66jx7k97j3iyr7j5npbyq1lkhzz74r81mkas4nig7z3hny1gn9";
+    })
+  ];
+
+  isLibrary = false;
+  isExecutable = true;
+
+  libraryHaskellDepends = [
+    async base base64-bytestring binary bytestring classy-prelude
+    connection hslogger mtl network network-conduit-tls
+    streaming-commons text unordered-containers websockets
+  ];
+
+  executableHaskellDepends = [
+    base bytestring classy-prelude cmdargs hslogger text
+  ];
+
+  testHaskellDepends = [ base text ];
+
+  homepage = "https://github.com/erebe/wstunnel";
+  description = "UDP and TCP tunnelling over WebSocket";
+  maintainers = with lib.maintainers; [ gebner ];
+  license = lib.licenses.bsd3;
+
+}
diff --git a/nixpkgs/pkgs/tools/networking/wuzz/default.nix b/nixpkgs/pkgs/tools/networking/wuzz/default.nix
new file mode 100644
index 000000000000..e84a97525f12
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wuzz/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "wuzz";
+  version = "0.2.0";
+  rev = "v${version}";
+
+  goPackagePath = "https://github.com/asciimoo/wuzz";
+
+  src = fetchFromGitHub {
+    owner = "asciimoo";
+    repo = "wuzz";
+    inherit rev;
+    sha256 = "1fcr5jr0vn5w60bn08lkh2mi0hdarwp361h94in03139j7hhqrfs";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/asciimoo/wuzz;
+    description = "Interactive cli tool for HTTP inspection";
+    license = licenses.agpl3;
+    maintainers = with maintainers; [ pradeepchhetri ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/wuzz/deps.nix b/nixpkgs/pkgs/tools/networking/wuzz/deps.nix
new file mode 100644
index 000000000000..8904596a712d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/wuzz/deps.nix
@@ -0,0 +1,92 @@
+[
+  {
+    goPackagePath = "github.com/jroimartin/gocui";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jroimartin/gocui";
+      rev = "ed41d1bd2c217d4d1e312c2ee5d2f0c7793a99cc";
+      sha256 = "1h4jxhvkf43jsbn85w45fq2xsmcg08mc9g7pkxf880g6sqznrmcz";
+    };
+  }
+  {
+    goPackagePath = "github.com/nsf/termbox-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/nsf/termbox-go";
+      rev = "abe82ce5fb7a42fbd6784a5ceb71aff977e09ed8";
+      sha256 = "156i8apkga8b3272kjhapyqwspgcfkrr9kpqwc5lii43k4swghpv";
+    };
+  }
+  {
+    goPackagePath = "github.com/mattn/go-runewidth";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-runewidth";
+      rev = "14207d285c6c197daabb5c9793d63e7af9ab2d50";
+      sha256 = "0y6yq9zd4kh7fimnc00r3h9pr2pwa5j85b3jcn5dyfamsnm2xdsv";
+    };
+  }
+  {
+    goPackagePath = "github.com/mitchellh/go-homedir";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mitchellh/go-homedir";
+      rev = "b8bc1bf767474819792c23f32d8286a45736f1c6";
+      sha256 = "13ry4lylalkh4g2vny9cxwvryslzyzwp9r92z0b10idhdq3wad1q";
+    };
+  }
+  {
+    goPackagePath = "github.com/BurntSushi/toml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/BurntSushi/toml";
+      rev = "056c9bc7be7190eaa7715723883caffa5f8fa3e4";
+      sha256 = "0gkgkw04ndr5y7hrdy0r4v2drs5srwfcw2bs1gyas066hwl84xyw";
+    };
+  }
+  {
+    goPackagePath = "github.com/nwidger/jsoncolor";
+    fetch = {
+      type = "git";
+      url = "https://github.com/nwidger/jsoncolor";
+      rev = "0192e84d44af834c3a90c8a17bf670483b91ad5a";
+      sha256 = "17mndgd1d233c22bd19xv4v2l2i5k8kz7y6n4n54a9i7fi9d10al";
+    };
+  }
+  {
+    goPackagePath = "github.com/fatih/color";
+    fetch = {
+      type = "git";
+      url = "https://github.com/fatih/color";
+      rev = "e8e01ee22a7d4a91b49646e39245fe08e69c7878";
+      sha256 = "1660g29qhshk6zxhpnc0f52m69jdqqdw2ccbkqw9y4kilnripfvl";
+    };
+  }
+  {
+    goPackagePath = "github.com/mattn/go-isatty";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-isatty";
+      rev = "30a891c33c7cde7b02a981314b4228ec99380cca";
+      sha256 = "03gsxn89pgkj4jkxm9avnj4f0ckvcskc6fj2lcd98l3akrz50ndg";
+    };
+  }
+  {
+    goPackagePath = "github.com/mattn/go-colorable";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-colorable";
+      rev = "d228849504861217f796da67fae4f6e347643f15";
+      sha256 = "0ch5sfcpmqczsh8kjbwpzdw31lacbkfyzvpzh4disnhhydbxjq0d";
+    };
+  }
+  {
+    goPackagePath = "github.com/asciimoo/wuzz";
+    fetch = {
+      type = "git";
+      url = "https://github.com/asciimoo/wuzz";
+      rev = "f34c82a4386951022f8bfc011fe6a7362dd8286c";
+      sha256 = "1fcr5jr0vn5w60bn08lkh2mi0hdarwp361h94in03139j7hhqrfs";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/networking/x11-ssh-askpass/default.nix b/nixpkgs/pkgs/tools/networking/x11-ssh-askpass/default.nix
new file mode 100644
index 000000000000..1b9d55349030
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/x11-ssh-askpass/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl, xlibsWrapper, imake, gccmakedep }:
+
+stdenv.mkDerivation {
+  name = "x11-ssh-askpass-1.2.4.1";
+
+  outputs = [ "out" "man" ];
+
+  src = fetchurl {
+    url = http://pkgs.fedoraproject.org/repo/pkgs/openssh/x11-ssh-askpass-1.2.4.1.tar.gz/8f2e41f3f7eaa8543a2440454637f3c3/x11-ssh-askpass-1.2.4.1.tar.gz;
+    sha256 = "620de3c32ae72185a2c9aeaec03af24242b9621964e38eb625afb6cdb30b8c88";
+  };
+
+  nativeBuildInputs = [ imake gccmakedep ];
+  buildInputs = [ xlibsWrapper ];
+
+  configureFlags = [
+    "--with-app-defaults-dir=$out/etc/X11/app-defaults"
+  ];
+
+  dontUseImakeConfigure = true;
+  postConfigure = ''
+    xmkmf -a
+  '';
+
+  installTargets = [ "install" "install.man" ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/sigmavirus24/x11-ssh-askpass;
+    description = "Lightweight passphrase dialog for OpenSSH or other open variants of SSH";
+    license = licenses.mit;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/xl2tpd/default.nix b/nixpkgs/pkgs/tools/networking/xl2tpd/default.nix
new file mode 100644
index 000000000000..01453379022c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/xl2tpd/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub, libpcap, ppp }:
+
+stdenv.mkDerivation rec {
+  pname = "xl2tpd";
+  version = "1.3.15";
+
+  src = fetchFromGitHub {
+    owner = "xelerance";
+    repo = "xl2tpd";
+    rev = "v${version}";
+    sha256 = "0ppwza8nwm1av1vldw40gin9wrjrs4l9si50jad414js3k8ycaag";
+  };
+
+  buildInputs = [ libpcap ];
+
+  postPatch = ''
+    substituteInPlace l2tp.h --replace /usr/sbin/pppd ${ppp}/sbin/pppd
+  '';
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with stdenv.lib; {
+    homepage = http://www.xelerance.com/software/xl2tpd/;
+    description = "Layer 2 Tunnelling Protocol Daemon (RFC 2661)";
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/xnbd/default.nix b/nixpkgs/pkgs/tools/networking/xnbd/default.nix
new file mode 100644
index 000000000000..e898904c6d4b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/xnbd/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl, pkgconfig, autoreconfHook, glib, jansson }:
+
+stdenv.mkDerivation rec {
+  name = "xnbd-0.4.0";
+
+  src = fetchurl {
+    url = "https://bitbucket.org/hirofuchi/xnbd/downloads/${name}.tgz";
+    sha256 = "00wkvsa0yaq4mabczcbfpj6rjvp02yahw8vdrq8hgb3wpm80x913";
+  };
+
+  sourceRoot = "${name}/trunk";
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+
+  buildInputs = [ glib jansson ];
+
+  # do not build docs, it is slow and it fails on Hydra
+  prePatch = ''
+    rm -rf doc
+    substituteInPlace configure.ac --replace "doc/Makefile" ""
+    substituteInPlace Makefile.am --replace "lib doc ." "lib ."
+  '';
+
+  meta = {
+    homepage = https://bitbucket.org/hirofuchi/xnbd;
+    description = "Yet another NBD (Network Block Device) server program";
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = [ stdenv.lib.maintainers.volth ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/yggdrasil/change-runtime-dir.patch b/nixpkgs/pkgs/tools/networking/yggdrasil/change-runtime-dir.patch
new file mode 100644
index 000000000000..b4edc6a83871
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/yggdrasil/change-runtime-dir.patch
@@ -0,0 +1,12 @@
+diff -ruN a/src/defaults/defaults_linux.go b/src/defaults/defaults_linux.go
+--- a/src/defaults/defaults_linux.go	2019-06-17 10:23:09.495613784 -0700
++++ b/src/defaults/defaults_linux.go	2019-07-01 10:17:11.295669440 -0700
+@@ -7,7 +7,7 @@
+ func GetDefaults() platformDefaultParameters {
+ 	return platformDefaultParameters{
+ 		// Admin
+-		DefaultAdminListen: "unix:///var/run/yggdrasil.sock",
++		DefaultAdminListen: "unix:///var/run/yggdrasil/yggdrasil.sock",
+ 
+ 		// Configuration (used for yggdrasilctl)
+ 		DefaultConfigFile: "/etc/yggdrasil.conf",
diff --git a/nixpkgs/pkgs/tools/networking/yggdrasil/default.nix b/nixpkgs/pkgs/tools/networking/yggdrasil/default.nix
new file mode 100644
index 000000000000..ca10adae0e44
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/yggdrasil/default.nix
@@ -0,0 +1,37 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "yggdrasil";
+  version = "0.3.12";
+
+  src = fetchFromGitHub {
+    owner = "yggdrasil-network";
+    repo = "yggdrasil-go";
+    rev = "v${version}";
+    sha256 = "03ywxamjcnhcr20vm9pn3rq3hqq49i6rfdvx44czzr30h8xp8dhw";
+  };
+
+  modSha256 = "1vqk0jyqc1qcryi247r5pbvfjw3m48l028fb2mrq1xqqfkjqrr85";
+
+  # Change the default location of the management socket on Linux
+  # systems so that the yggdrasil system service unit does not have to
+  # be granted write permission to /run.
+  patches = [ ./change-runtime-dir.patch ];
+
+  subPackages = [ "cmd/yggdrasil" "cmd/yggdrasilctl" ];
+
+  buildFlagsArray = ''
+    -ldflags=
+      -X github.com/yggdrasil-network/yggdrasil-go/src/version.buildVersion=${version}
+      -X github.com/yggdrasil-network/yggdrasil-go/src/version.buildName=${pname}
+      -s -w
+  '';
+
+  meta = with lib; {
+    description = "An experiment in scalable routing as an encrypted IPv6 overlay network";
+    homepage = "https://yggdrasil-network.github.io/";
+    license = licenses.lgpl3;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ gazally lassulus ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/yrd/default.nix b/nixpkgs/pkgs/tools/networking/yrd/default.nix
new file mode 100644
index 000000000000..a259d892cc15
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/yrd/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub, pythonPackages }:
+
+let
+  pname = "yrd";
+  version = "0.5.3";
+  sha256 = "1yx1hr8z4cvlb3yi24dwafs0nxq41k4q477jc9q24w61a0g662ps";
+
+in pythonPackages.buildPythonApplication {
+  name = "${pname}-${version}";
+
+  src = fetchFromGitHub {
+    owner = "kpcyrd";
+    repo = pname;
+    rev = "v${version}";
+    inherit sha256;
+  };
+
+  propagatedBuildInputs = with pythonPackages; [ argh ];
+
+  meta = with stdenv.lib; {
+    description = "Cjdns swiss army knife";
+    maintainers = with maintainers; [ akru ];
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+    homepage = https://github.com/kpcyrd/yrd;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/ytcc/default.nix b/nixpkgs/pkgs/tools/networking/ytcc/default.nix
new file mode 100644
index 000000000000..4675dac5f47f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/ytcc/default.nix
@@ -0,0 +1,35 @@
+{ lib, python3Packages, fetchFromGitHub, gettext }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "ytcc";
+  version = "1.8.2";
+
+  src = fetchFromGitHub {
+    owner = "woefe";
+    repo = "ytcc";
+    rev = "v${version}";
+    sha256 = "0a4gxdan3aivbpkxw9cv1bgl7rfrwdii12d096dx06zlymb27gqs";
+  };
+
+  nativeBuildInputs = [ gettext ];
+
+  propagatedBuildInputs = with python3Packages; [ feedparser lxml sqlalchemy youtube-dl ];
+
+  checkInputs = with python3Packages; [ nose pytest ];
+
+  # Disable tests that touch network or shell out to commands
+  checkPhase = ''
+    pytest . -k 'not get_channels \
+                 and not play_video \
+                 and not download_videos \
+                 and not update_all \
+                 and not add_channel_duplicate'
+  '';
+
+  meta = {
+    description = "Command Line tool to keep track of your favourite YouTube channels without signing up for a Google account";
+    homepage = "https://github.com/woefe/ytcc";
+    license = lib.licenses.gpl3;
+    maintainers = with lib.maintainers; [ marius851000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/zap/default.nix b/nixpkgs/pkgs/tools/networking/zap/default.nix
new file mode 100644
index 000000000000..3acd207df95d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/zap/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchFromGitHub, jdk, ant, runtimeShell }:
+
+stdenv.mkDerivation rec {
+  pname = "zap";
+  version = "2.7.0";
+  src = fetchFromGitHub {
+    owner = "zaproxy";
+    repo = "zaproxy";
+    rev =version;
+    sha256 = "1bz4pgq66v6kxmgj99llacm1d85vj8z78jlgc2z9hv0ha5i57y32";
+  };
+
+  buildInputs = [ jdk ant ];
+
+  buildPhase = ''
+    cd build
+    echo -n "${version}" > version.txt
+    ant -f build.xml setup init  compile dist copy-source-to-build package-linux
+  '';
+
+  installPhase = ''
+    mkdir -p "$out/share"
+    tar xvf  "ZAP_${version}_Linux.tar.gz" -C "$out/share/"
+    mkdir -p "$out/bin"
+    echo "#!${runtimeShell}" > "$out/bin/zap"
+    echo \"$out/share/ZAP_${version}/zap.sh\" >> "$out/bin/zap"
+    chmod +x "$out/bin/zap"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://www.owasp.org/index.php/ZAP;
+    description = "Java application for web penetration testing";
+    maintainers = with maintainers; [ mog ];
+    platforms = platforms.linux;
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/zerotierone/default.nix b/nixpkgs/pkgs/tools/networking/zerotierone/default.nix
new file mode 100644
index 000000000000..da5b8837523d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/zerotierone/default.nix
@@ -0,0 +1,52 @@
+{ stdenv, buildPackages, fetchFromGitHub, openssl, lzo, zlib, iproute, ronn }:
+
+stdenv.mkDerivation rec {
+  pname = "zerotierone";
+  version = "1.4.6";
+
+  src = fetchFromGitHub {
+    owner = "zerotier";
+    repo = "ZeroTierOne";
+    rev = version;
+    sha256 = "1f8hh05wx59dc0fbzdzwq05x0gmrdfl4v103wbcyjmzsbazaw6p3";
+  };
+
+  preConfigure = ''
+      substituteInPlace ./osdep/ManagedRoute.cpp \
+        --replace '/usr/sbin/ip' '${iproute}/bin/ip'
+
+      substituteInPlace ./osdep/ManagedRoute.cpp \
+        --replace '/sbin/ip' '${iproute}/bin/ip'
+
+      patchShebangs ./doc/build.sh
+      substituteInPlace ./doc/build.sh \
+        --replace '/usr/bin/ronn' '${buildPackages.ronn}/bin/ronn' \
+  '';
+
+
+  nativeBuildInputs = [ ronn ];
+  buildInputs = [ openssl lzo zlib iproute ];
+
+  enableParallelBuilding = true;
+
+  installPhase = ''
+    install -Dt "$out/bin/" zerotier-one
+    ln -s $out/bin/zerotier-one $out/bin/zerotier-idtool
+    ln -s $out/bin/zerotier-one $out/bin/zerotier-cli
+
+    mkdir -p $man/share/man/man8
+    for cmd in zerotier-one.8 zerotier-cli.1 zerotier-idtool.1; do
+      cat doc/$cmd | gzip -9n > $man/share/man/man8/$cmd.gz
+    done
+  '';
+
+  outputs = [ "out" "man" ];
+
+  meta = with stdenv.lib; {
+    description = "Create flat virtual Ethernet networks of almost unlimited size";
+    homepage = https://www.zerotier.com;
+    license = licenses.bsl11;
+    maintainers = with maintainers; [ sjmackenzie zimbatm ehmry obadz danielfullmer ];
+    platforms = with platforms; x86_64 ++ aarch64 ++ arm;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/networking/zssh/default.nix b/nixpkgs/pkgs/tools/networking/zssh/default.nix
new file mode 100644
index 000000000000..b2016fe9452c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/networking/zssh/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, readline, deepin }:
+
+let
+  version = "1.5c";
+in stdenv.mkDerivation rec {
+  pname = "zssh";
+  inherit version;
+
+  src = fetchurl {
+    url = "mirror://sourceforge/zssh/${pname}-${version}.tgz";
+    sha256 = "06z73iq59lz8ibjrgs7d3xl39vh9yld1988yx8khssch4pw41s52";
+  };
+
+  buildInputs = [ readline ];
+
+  patches = [
+    # Cargo-culted from Arch, returns “out of pty's” without it
+    (fetchurl {
+      name = "fix_use_ptmx_on_arch.patch";
+      url = https://git.archlinux.org/svntogit/community.git/plain/trunk/fix_use_ptmx_on_arch.patch?h=packages/zssh&id=0a7c92543f9309856d02e31196f06d7c3eaa8b67;
+      sha256 = "12daw9wpy58ql882zww945wk9cg2adwp8qsr5rvazx0xq0qawgbr";
+    })
+  ];
+
+  patchFlags = [ "-p0" ];
+
+  # The makefile does not create the directories
+  postBuild = ''
+    install -dm755 "$out"/{bin,man/man1}
+  '';
+
+  meta = {
+    description = "SSH and Telnet client with ZMODEM file transfer capability";
+    homepage = http://zssh.sourceforge.net/;
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = deepin.deepin-terminal.meta.maintainers; # required by deepin-terminal
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/nix/info/default.nix b/nixpkgs/pkgs/tools/nix/info/default.nix
new file mode 100644
index 000000000000..898026a62902
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/info/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, lib, coreutils, findutils, gnugrep, darwin
+# Avoid having GHC in the build-time closure of all NixOS configurations
+, doCheck ? false, shellcheck
+}:
+
+stdenv.mkDerivation {
+  name = "nix-info";
+  src = ./info.sh;
+
+  path = lib.makeBinPath ([
+    coreutils findutils gnugrep
+  ] ++ (if stdenv.isDarwin then [ darwin.DarwinTools ] else []));
+  is_darwin = if stdenv.isDarwin then "yes" else "no";
+
+  sandboxtest = ./sandbox.nix;
+  relaxedsandboxtest = ./relaxedsandbox.nix;
+  multiusertest = ./multiuser.nix;
+
+  unpackCmd = ''
+    mkdir nix-info
+    cp $src ./nix-info/nix-info
+  '';
+
+  buildPhase  = ''
+    substituteAllInPlace ./nix-info
+  '';
+
+  inherit doCheck;
+  checkInputs = [ shellcheck ];
+
+  checkPhase = ''
+    shellcheck ./nix-info
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ./nix-info $out/bin/nix-info
+  '';
+
+  preferLocalBuild = true;
+
+  meta = {
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/nix/info/info.sh b/nixpkgs/pkgs/tools/nix/info/info.sh
new file mode 100755
index 000000000000..f108962b3bad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/info/info.sh
@@ -0,0 +1,169 @@
+#!/bin/bash
+
+PATH="@path@:$PATH"
+IS_DARWIN="@is_darwin@"
+
+set -eu
+set -o pipefail
+
+DEBUG=0
+MARKDOWN=0
+HOST_OS=0
+SANDBOX=0
+while true; do
+    case "${1:-}" in
+        "")
+            break
+            ;;
+        -d | --debug)
+            set -x
+            DEBUG=1
+            shift
+            ;;
+        -m | --markdown)
+            MARKDOWN=1
+            HOST_OS=1
+            SANDBOX=1
+            shift
+            ;;
+        --host-os)
+            HOST_OS=1
+            shift
+            ;;
+        --sandbox)
+            SANDBOX=1
+            shift
+            ;;
+
+        * )
+            cat <<EOF
+nix-info - get high level info to help with debugging
+
+Options:
+
+ -m, --markdown   formatting for a GitHub issue
+                  implies: --host-os, --sandbox
+
+     --sandbox    include sandbox configuration
+     --host-os    include host OS details
+
+ -h, --help       show this message
+ -d, --debug      debug mode
+
+EOF
+            exit 1
+            ;;
+
+    esac
+done
+
+debuglog() {
+    if [ $DEBUG -eq 1 ]; then
+        cat >&2
+    else
+        cat > /dev/null
+    fi
+}
+
+nixev() {
+    nix-instantiate --eval --strict -E "$1"
+}
+
+desc_system() {
+    nixev '(import <nixpkgs> {}).system'
+}
+
+desc_host_os() {
+    printf "%s" "$(uname -sr)"
+
+    if [ "$IS_DARWIN" = "yes" ]; then
+        printf ", macOS %s" "$(sw_vers -productVersion)"
+    fi
+
+    if [ -f /etc/os-release ]; then
+        (
+            # shellcheck disable=SC1091
+            . /etc/os-release
+            printf ", %s, %s" "${NAME:-$(uname -v)}" "${VERSION:-noversion}"
+        )
+    fi
+}
+
+desc_multi_user() {
+    if nix-build --no-out-link  @multiusertest@ 2>&1 | debuglog; then
+        printf "yes"
+    else
+        printf "no"
+    fi
+}
+
+desc_nixpkgs_path() {
+    nixev '<nixpkgs>'
+}
+
+channel_facts() {
+    find /nix/var/nix/profiles/per-user \
+         -mindepth 2 \
+         -maxdepth 2 \
+         -name channels \
+         -print0 \
+    |\
+    while  IFS= read -r -d '' userchannelset; do
+        manifest="$userchannelset/manifest.nix"
+
+        if [ -e "$manifest" ]; then
+            userchannels=$(nixev \
+                           "builtins.concatStringsSep \", \"
+                             (map (ch: ch.name)
+                               (import \"$manifest\"))")
+
+            fact "channels($(echo "$manifest" | cut -d/ -f7))" \
+                 "$userchannels"
+        fi
+    done
+}
+
+desc_sandbox() {
+    if nix-build --no-out-link @sandboxtest@ 2>&1 | debuglog; then
+        printf "no"
+    elif nix-build --no-out-link @relaxedsandboxtest@ 2>&1 | debuglog; then
+        printf "relaxed"
+    else
+        printf "yes"
+    fi
+}
+
+fact() {
+    name="${1:-0}"
+    value="${2:-0}"
+    last="${3:-1}"
+    if [ $MARKDOWN -eq 0 ]; then
+        printf "%s: %s" "$name" "$value"
+        if [ "$last" -eq 1 ]; then
+            printf ", "
+        fi
+    else
+        printf " - %s: \`%s\`\\n" "$name" "$value"
+    fi
+
+    if [ "$last" -eq 0 ]; then
+        echo ""
+    fi
+}
+
+last_fact() {
+    fact "$1" "$2" 0
+}
+
+fact "system" "$(desc_system)"
+if [ $HOST_OS -eq 1 ]; then
+    fact "host os" "$(desc_host_os)"
+fi
+fact "multi-user?" "$(desc_multi_user)"
+if [ $SANDBOX -eq 1 ]; then
+    fact "sandbox" "$(desc_sandbox)"
+fi
+
+fact "version" "$(nix-env --version)"
+channel_facts
+last_fact "nixpkgs" "$(desc_nixpkgs_path)"
diff --git a/nixpkgs/pkgs/tools/nix/info/multiuser.nix b/nixpkgs/pkgs/tools/nix/info/multiuser.nix
new file mode 100644
index 000000000000..827d52987673
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/info/multiuser.nix
@@ -0,0 +1,12 @@
+let
+  pkgs = import <nixpkgs> {};
+in pkgs.runCommand "diagnostics-multiuser"
+  {  }
+  ''
+    set -x
+    # no cache: ${toString builtins.currentTime}
+    # For reproducibility, nix always uses nixbld group:
+    # https://github.com/NixOS/nix/blob/1dd29d7aebae706f3e90a18bbfae727f2ed03c70/src/libstore/build.cc#L1896-L1908
+    test "$(groups)" == "nixbld"
+    touch $out
+  ''
diff --git a/nixpkgs/pkgs/tools/nix/info/relaxedsandbox.nix b/nixpkgs/pkgs/tools/nix/info/relaxedsandbox.nix
new file mode 100644
index 000000000000..625a6ecc39e0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/info/relaxedsandbox.nix
@@ -0,0 +1,12 @@
+let
+  pkgs = import <nixpkgs> {};
+in pkgs.runCommand "diagnostics-sandbox"
+  {
+    __noChroot = true;
+  }
+  ''
+    set -x
+    # no cache: ${toString builtins.currentTime}
+    test -d "$(dirname "$out")/../var/nix"
+    touch $out
+  ''
diff --git a/nixpkgs/pkgs/tools/nix/info/sandbox.nix b/nixpkgs/pkgs/tools/nix/info/sandbox.nix
new file mode 100644
index 000000000000..fa4288c2f944
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/info/sandbox.nix
@@ -0,0 +1,10 @@
+let
+  pkgs = import <nixpkgs> {};
+in pkgs.runCommand "diagnostics-sandbox"
+  { }
+  ''
+    set -x
+    # no cache: ${toString builtins.currentTime}
+    test -d "$(dirname "$out")/../var/nix"
+    touch $out
+  ''
diff --git a/nixpkgs/pkgs/tools/nix/nix-script/default.nix b/nixpkgs/pkgs/tools/nix/nix-script/default.nix
new file mode 100644
index 000000000000..d69b5943123c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nix-script/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, haskellPackages, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+  pname = "nix-script";
+  version = "2015-09-22";
+
+  src  = fetchFromGitHub {
+    owner  = "bennofs";
+    repo   = "nix-script";
+    rev    = "83064dc557b642f6748d4f2372b2c88b2a82c4e7";
+    sha256 = "0iwclyd2zz8lv012yghfr4696kdnsq6xvc91wv00jpwk2c09xl7a";
+  };
+
+  buildInputs  = [
+    (haskellPackages.ghcWithPackages (hs: with hs; [ posix-escape ]))
+  ];
+
+  phases = [ "buildPhase" "installPhase" "fixupPhase" ];
+  buildPhase = ''
+    mkdir -p $out/bin
+    ghc -O2 $src/nix-script.hs -o $out/bin/nix-script -odir . -hidir .
+  '';
+  installPhase = ''
+    ln -s $out/bin/nix-script $out/bin/nix-scripti
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A shebang for running inside nix-shell.";
+    homepage    = https://github.com/bennofs/nix-script;
+    license     = licenses.bsd3;
+    maintainers = with maintainers; [ bennofs rnhmjoj ];
+    platforms   = haskellPackages.ghc.meta.platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/nix/nix-store-gcs-proxy/default.nix b/nixpkgs/pkgs/tools/nix/nix-store-gcs-proxy/default.nix
new file mode 100644
index 000000000000..c782607da854
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nix-store-gcs-proxy/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+buildGoPackage rec {
+  pname = "nix-store-gcs-proxy";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "tweag";
+    repo = "nix-store-gcs-proxy";
+    rev = "v${version}";
+    sha256 = "0804p65px4wd7gzxggpdxsazkd1hbz1p15zzaxf9ygc6sh26ncln";
+  };
+
+  goPackagePath = "github.com/tweag/nix-store-gcs-proxy";
+
+  goDeps = ./deps.nix;
+
+  meta = {
+    description = "A HTTP nix store that proxies requests to Google Storage";
+    homepage = "https://github.com/tweag/nix-store-gcs-proxy";
+    license = lib.licenses.asl20;
+    maintainers = with lib.maintainers; [ zimbatm ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/nix/nix-store-gcs-proxy/deps.nix b/nixpkgs/pkgs/tools/nix/nix-store-gcs-proxy/deps.nix
new file mode 100644
index 000000000000..b5ae542876d7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nix-store-gcs-proxy/deps.nix
@@ -0,0 +1,813 @@
+# file generated from go.mod using vgo2nix (https://github.com/adisbladis/vgo2nix)
+[
+  {
+    goPackagePath = "cloud.google.com/go";
+    fetch = {
+      type = "git";
+      url = "https://code.googlesource.com/gocloud";
+      rev = "v0.37.2";
+      sha256 = "1w6crdxy9vzd8vm672hng22spwld6d60z58kbr28dkiiz694wqvs";
+    };
+  }
+  {
+    goPackagePath = "github.com/BurntSushi/toml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/BurntSushi/toml";
+      rev = "v0.3.1";
+      sha256 = "1fjdwwfzyzllgiwydknf1pwjvy49qxfsczqx5gz3y0izs7as99j6";
+    };
+  }
+  {
+    goPackagePath = "github.com/Shopify/sarama";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Shopify/sarama";
+      rev = "v1.19.0";
+      sha256 = "0q1z3pvcd011yprwzws2s293v4cjvsszhai6vnfrahjcbsz79q0z";
+    };
+  }
+  {
+    goPackagePath = "github.com/Shopify/toxiproxy";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Shopify/toxiproxy";
+      rev = "v2.1.4";
+      sha256 = "07yhsvscdv1qjfc2fyyh9qsrrdwrrw04wadk5gaq4qddcway7vig";
+    };
+  }
+  {
+    goPackagePath = "github.com/alecthomas/template";
+    fetch = {
+      type = "git";
+      url = "https://github.com/alecthomas/template";
+      rev = "a0175ee3bccc";
+      sha256 = "0qjgvvh26vk1cyfq9fadyhfgdj36f1iapbmr5xp6zqipldz8ffxj";
+    };
+  }
+  {
+    goPackagePath = "github.com/alecthomas/units";
+    fetch = {
+      type = "git";
+      url = "https://github.com/alecthomas/units";
+      rev = "2efee857e7cf";
+      sha256 = "1j65b91qb9sbrml9cpabfrcf07wmgzzghrl7809hjjhrmbzri5bl";
+    };
+  }
+  {
+    goPackagePath = "github.com/anmitsu/go-shlex";
+    fetch = {
+      type = "git";
+      url = "https://github.com/anmitsu/go-shlex";
+      rev = "648efa622239";
+      sha256 = "10rgdp5d106iisgz25ic8k6f44s9adh4sjh6fyxq9ccm21gw49b7";
+    };
+  }
+  {
+    goPackagePath = "github.com/apache/thrift";
+    fetch = {
+      type = "git";
+      url = "https://github.com/apache/thrift";
+      rev = "v0.12.0";
+      sha256 = "0g2g61rs189nimg3631wxfwdx12dsdz70qvncczlyvn34pcj7yby";
+    };
+  }
+  {
+    goPackagePath = "github.com/beorn7/perks";
+    fetch = {
+      type = "git";
+      url = "https://github.com/beorn7/perks";
+      rev = "3a771d992973";
+      sha256 = "1l2lns4f5jabp61201sh88zf3b0q793w4zdgp9nll7mmfcxxjif3";
+    };
+  }
+  {
+    goPackagePath = "github.com/bradfitz/go-smtpd";
+    fetch = {
+      type = "git";
+      url = "https://github.com/bradfitz/go-smtpd";
+      rev = "deb6d6237625";
+      sha256 = "1i33brqd44h0a9hbdnclka0hfg0f6qi5xy23f0ap9yixkhj4k9p6";
+    };
+  }
+  {
+    goPackagePath = "github.com/client9/misspell";
+    fetch = {
+      type = "git";
+      url = "https://github.com/client9/misspell";
+      rev = "v0.3.4";
+      sha256 = "1vwf33wsc4la25zk9nylpbp9px3svlmldkm0bha4hp56jws4q9cs";
+    };
+  }
+  {
+    goPackagePath = "github.com/coreos/go-systemd";
+    fetch = {
+      type = "git";
+      url = "https://github.com/coreos/go-systemd";
+      rev = "c6f51f82210d";
+      sha256 = "1vnccmnkjl6n539l4cliz6sznpqn6igf5v7mbmsgahb838742clb";
+    };
+  }
+  {
+    goPackagePath = "github.com/davecgh/go-spew";
+    fetch = {
+      type = "git";
+      url = "https://github.com/davecgh/go-spew";
+      rev = "v1.1.1";
+      sha256 = "0hka6hmyvp701adzag2g26cxdj47g21x6jz4sc6jjz1mn59d474y";
+    };
+  }
+  {
+    goPackagePath = "github.com/eapache/go-resiliency";
+    fetch = {
+      type = "git";
+      url = "https://github.com/eapache/go-resiliency";
+      rev = "v1.1.0";
+      sha256 = "1zmgw3c4w5r6m2r340n4jc5l5ll3m3nbszqrmrgbqc2xixxyk2gx";
+    };
+  }
+  {
+    goPackagePath = "github.com/eapache/go-xerial-snappy";
+    fetch = {
+      type = "git";
+      url = "https://github.com/eapache/go-xerial-snappy";
+      rev = "776d5712da21";
+      sha256 = "0ncc41dv7xwb1znyzmzh7cvs6j5fzz0f1n8h1v3grl9ma6s1si9d";
+    };
+  }
+  {
+    goPackagePath = "github.com/eapache/queue";
+    fetch = {
+      type = "git";
+      url = "https://github.com/eapache/queue";
+      rev = "v1.1.0";
+      sha256 = "07dp54n94gn3gsvdcki56yqh7py7wqqigxbamhxwgbr05n61fqyg";
+    };
+  }
+  {
+    goPackagePath = "github.com/flynn/go-shlex";
+    fetch = {
+      type = "git";
+      url = "https://github.com/flynn/go-shlex";
+      rev = "3f9db97f8568";
+      sha256 = "1j743lysygkpa2s2gii2xr32j7bxgc15zv4113b0q9jhn676ysia";
+    };
+  }
+  {
+    goPackagePath = "github.com/fsnotify/fsnotify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/fsnotify/fsnotify";
+      rev = "v1.4.7";
+      sha256 = "07va9crci0ijlivbb7q57d2rz9h27zgn2fsm60spjsqpdbvyrx4g";
+    };
+  }
+  {
+    goPackagePath = "github.com/gliderlabs/ssh";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gliderlabs/ssh";
+      rev = "v0.1.1";
+      sha256 = "0bylkc7yg8bxxffhchikcnzwli5n95cfmbji6v2a4mn1h5n36mdm";
+    };
+  }
+  {
+    goPackagePath = "github.com/go-kit/kit";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-kit/kit";
+      rev = "v0.8.0";
+      sha256 = "1rcywbc2pvab06qyf8pc2rdfjv7r6kxdv2v4wnpqnjhz225wqvc0";
+    };
+  }
+  {
+    goPackagePath = "github.com/go-logfmt/logfmt";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-logfmt/logfmt";
+      rev = "v0.3.0";
+      sha256 = "1gkgh3k5w1xwb2qbjq52p6azq3h1c1rr6pfwjlwj1zrijpzn2xb9";
+    };
+  }
+  {
+    goPackagePath = "github.com/go-stack/stack";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-stack/stack";
+      rev = "v1.8.0";
+      sha256 = "0wk25751ryyvxclyp8jdk5c3ar0cmfr8lrjb66qbg4808x66b96v";
+    };
+  }
+  {
+    goPackagePath = "github.com/gogo/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gogo/protobuf";
+      rev = "v1.2.0";
+      sha256 = "1c3y5m08mvrgvlw0kb9pldh3kkqcj99pa8gqmk1g3hp8ih3b2dv0";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/glog";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/glog";
+      rev = "23def4e6c14b";
+      sha256 = "0jb2834rw5sykfr937fxi8hxi2zy80sj2bdn9b3jb4b26ksqng30";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/mock";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/mock";
+      rev = "v1.2.0";
+      sha256 = "12ddj2g8ab87id6n2n67vnbhq6p8dvgsq1pzpqfriym4dk8w54fg";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev = "v1.2.0";
+      sha256 = "0kf4b59rcbb1cchfny2dm9jyznp8ri2hsb14n8iak1q8986xa0ab";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/snappy";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/snappy";
+      rev = "2e65f85255db";
+      sha256 = "05w6mpc4qcy0pv8a2bzng8nf4s5rf5phfang4jwy9rgf808q0nxf";
+    };
+  }
+  {
+    goPackagePath = "github.com/google/btree";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/btree";
+      rev = "4030bb1f1f0c";
+      sha256 = "0ba430m9fbnagacp57krgidsyrgp3ycw5r7dj71brgp5r52g82p6";
+    };
+  }
+  {
+    goPackagePath = "github.com/google/go-cmp";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/go-cmp";
+      rev = "v0.2.0";
+      sha256 = "1fbv0x27k9sn8svafc0hjwsnckk864lv4yi7bvzrxvmd3d5hskds";
+    };
+  }
+  {
+    goPackagePath = "github.com/google/go-github";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/go-github";
+      rev = "v17.0.0";
+      sha256 = "1kvw95l77a5n5rgal9n1xjh58zxb3a40ij1j722b1h4z8yg9jhg4";
+    };
+  }
+  {
+    goPackagePath = "github.com/google/go-querystring";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/go-querystring";
+      rev = "v1.0.0";
+      sha256 = "0xl12bqyvmn4xcnf8p9ksj9rmnr7s40pvppsdmy8n9bzw1db0iwz";
+    };
+  }
+  {
+    goPackagePath = "github.com/google/martian";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/martian";
+      rev = "v2.1.0";
+      sha256 = "197hil6vrjk50b9wvwyzf61csid83whsjj6ik8mc9r2lryxlyyrp";
+    };
+  }
+  {
+    goPackagePath = "github.com/google/pprof";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/pprof";
+      rev = "3ea8567a2e57";
+      sha256 = "09rhjn3ms0a72dw0yzbp237p7yhqma772zspddn6mgkh3gi3kn4c";
+    };
+  }
+  {
+    goPackagePath = "github.com/googleapis/gax-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/googleapis/gax-go";
+      rev = "v2.0.4";
+      sha256 = "1iwnm6ky1x53lgs44mw3hpdkjzrm5qd0kfs50m0qcq2ml5m1cwdm";
+    };
+  }
+  {
+    goPackagePath = "github.com/gorilla/context";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gorilla/context";
+      rev = "v1.1.1";
+      sha256 = "03p4hn87vcmfih0p9w663qbx9lpsf7i7j3lc7yl7n84la3yz63m4";
+    };
+  }
+  {
+    goPackagePath = "github.com/gorilla/mux";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gorilla/mux";
+      rev = "v1.6.2";
+      sha256 = "0pvzm23hklxysspnz52mih6h1q74vfrdhjfm1l3sa9r8hhqmmld2";
+    };
+  }
+  {
+    goPackagePath = "github.com/gregjones/httpcache";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gregjones/httpcache";
+      rev = "9cad4c3443a7";
+      sha256 = "0wjdwcwqqcx2d5y68qvhg6qyj977il5ijmnn9h9cd6wjbdy0ay6s";
+    };
+  }
+  {
+    goPackagePath = "github.com/hashicorp/golang-lru";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hashicorp/golang-lru";
+      rev = "v0.5.0";
+      sha256 = "12k2cp2k615fjvfa5hyb9k2alian77wivds8s65diwshwv41939f";
+    };
+  }
+  {
+    goPackagePath = "github.com/hpcloud/tail";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hpcloud/tail";
+      rev = "v1.0.0";
+      sha256 = "1njpzc0pi1acg5zx9y6vj9xi6ksbsc5d387rd6904hy6rh2m6kn0";
+    };
+  }
+  {
+    goPackagePath = "github.com/jellevandenhooff/dkim";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jellevandenhooff/dkim";
+      rev = "f50fe3d243e1";
+      sha256 = "0qf5pypxfpciivj0v728i24rfjwhnwm07945mj6p3cw4gdphqhm0";
+    };
+  }
+  {
+    goPackagePath = "github.com/jstemmer/go-junit-report";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jstemmer/go-junit-report";
+      rev = "af01ea7f8024";
+      sha256 = "1lp3n94ris12hac02wi31f3whs88lcrzwgdg43a5j6cafg9p1d0s";
+    };
+  }
+  {
+    goPackagePath = "github.com/julienschmidt/httprouter";
+    fetch = {
+      type = "git";
+      url = "https://github.com/julienschmidt/httprouter";
+      rev = "v1.2.0";
+      sha256 = "1k8bylc9s4vpvf5xhqh9h246dl1snxrzzz0614zz88cdh8yzs666";
+    };
+  }
+  {
+    goPackagePath = "github.com/konsorten/go-windows-terminal-sequences";
+    fetch = {
+      type = "git";
+      url = "https://github.com/konsorten/go-windows-terminal-sequences";
+      rev = "v1.0.1";
+      sha256 = "1lchgf27n276vma6iyxa0v1xds68n2g8lih5lavqnx5x6q5pw2ip";
+    };
+  }
+  {
+    goPackagePath = "github.com/kr/logfmt";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kr/logfmt";
+      rev = "b84e30acd515";
+      sha256 = "02ldzxgznrfdzvghfraslhgp19la1fczcbzh7wm2zdc6lmpd1qq9";
+    };
+  }
+  {
+    goPackagePath = "github.com/kr/pty";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kr/pty";
+      rev = "v1.1.3";
+      sha256 = "0knzlvndfgjm2k23vhp2xj1cv3fm31vbg5b20gdl1vnxk7rh549h";
+    };
+  }
+  {
+    goPackagePath = "github.com/matttproud/golang_protobuf_extensions";
+    fetch = {
+      type = "git";
+      url = "https://github.com/matttproud/golang_protobuf_extensions";
+      rev = "v1.0.1";
+      sha256 = "1d0c1isd2lk9pnfq2nk0aih356j30k3h1gi2w0ixsivi5csl7jya";
+    };
+  }
+  {
+    goPackagePath = "github.com/mwitkow/go-conntrack";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mwitkow/go-conntrack";
+      rev = "cc309e4a2223";
+      sha256 = "0nbrnpk7bkmqg9mzwsxlm0y8m7s9qd9phr1q30qlx2qmdmz7c1mf";
+    };
+  }
+  {
+    goPackagePath = "github.com/onsi/ginkgo";
+    fetch = {
+      type = "git";
+      url = "https://github.com/onsi/ginkgo";
+      rev = "v1.7.0";
+      sha256 = "14wgpdrvpc35rdz3859bz53sc1g4vpr1fysy15wy3ff9gmqs14yg";
+    };
+  }
+  {
+    goPackagePath = "github.com/onsi/gomega";
+    fetch = {
+      type = "git";
+      url = "https://github.com/onsi/gomega";
+      rev = "v1.4.3";
+      sha256 = "1c8rqg5i2hz3snmq7s41yar1zjnzilb0fyiyhkg83v97afcfx79v";
+    };
+  }
+  {
+    goPackagePath = "github.com/openzipkin/zipkin-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/openzipkin/zipkin-go";
+      rev = "v0.1.6";
+      sha256 = "0fyf69w66khj3dxdpqydwjdhhhyhlh3caxa5ybnd1h2f6b5gbvvv";
+    };
+  }
+  {
+    goPackagePath = "github.com/pierrec/lz4";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pierrec/lz4";
+      rev = "v2.0.5";
+      sha256 = "0y5rh7z01zycd59nnjpkqq0ydyjmcg9j1xw15q1i600l9j9g617p";
+    };
+  }
+  {
+    goPackagePath = "github.com/pkg/errors";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pkg/errors";
+      rev = "v0.8.0";
+      sha256 = "001i6n71ghp2l6kdl3qq1v2vmghcz3kicv9a5wgcihrzigm75pp5";
+    };
+  }
+  {
+    goPackagePath = "github.com/pmezard/go-difflib";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pmezard/go-difflib";
+      rev = "v1.0.0";
+      sha256 = "0c1cn55m4rypmscgf0rrb88pn58j3ysvc2d0432dp3c6fqg6cnzw";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/client_golang";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_golang";
+      rev = "3c4408c8b829";
+      sha256 = "06d9cxxxkglks8fpfg3spxscyrq4lw7fckm4p6f0wshq65am2lxw";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/client_model";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_model";
+      rev = "56726106282f";
+      sha256 = "19y4qs9mkxiiab5sh3b7cccjpl3xbp6sy8812ig9f1zg8vzkzj7j";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/common";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/common";
+      rev = "v0.2.0";
+      sha256 = "02kym6lcfnlq23qbv277jr0q1n7jj0r14gqg93c7wn7gc44jv3vp";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/procfs";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/procfs";
+      rev = "bf6a532e95b1";
+      sha256 = "0k65i2ikf3jp6863mpc1raf928i78r8jd7zn9djx6f4izls6l6j1";
+    };
+  }
+  {
+    goPackagePath = "github.com/rcrowley/go-metrics";
+    fetch = {
+      type = "git";
+      url = "https://github.com/rcrowley/go-metrics";
+      rev = "3113b8401b8a";
+      sha256 = "1m5q5dsvkqz809aag6dyan74wdrp69g2mb9killbv7z4ls2mlfr3";
+    };
+  }
+  {
+    goPackagePath = "github.com/sirupsen/logrus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/sirupsen/logrus";
+      rev = "v1.2.0";
+      sha256 = "0r6334x2bls8ddznvzaldx4g88msjjns4mlks95rqrrg7h0ijigg";
+    };
+  }
+  {
+    goPackagePath = "github.com/stretchr/objx";
+    fetch = {
+      type = "git";
+      url = "https://github.com/stretchr/objx";
+      rev = "v0.1.1";
+      sha256 = "0iph0qmpyqg4kwv8jsx6a56a7hhqq8swrazv40ycxk9rzr0s8yls";
+    };
+  }
+  {
+    goPackagePath = "github.com/stretchr/testify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/stretchr/testify";
+      rev = "v1.2.2";
+      sha256 = "0dlszlshlxbmmfxj5hlwgv3r22x0y1af45gn1vd198nvvs3pnvfs";
+    };
+  }
+  {
+    goPackagePath = "github.com/tarm/serial";
+    fetch = {
+      type = "git";
+      url = "https://github.com/tarm/serial";
+      rev = "98f6abe2eb07";
+      sha256 = "1yj4jiv2f3x3iawxdflrlmdan0k9xsbnccgc9yz658rmif1ag3pb";
+    };
+  }
+  {
+    goPackagePath = "github.com/urfave/cli";
+    fetch = {
+      type = "git";
+      url = "https://github.com/urfave/cli";
+      rev = "v1.20.0";
+      sha256 = "0y6f4sbzkiiwrxbl15biivj8c7qwxnvm3zl2dd3mw4wzg4x10ygj";
+    };
+  }
+  {
+    goPackagePath = "github.com/urfave/negroni";
+    fetch = {
+      type = "git";
+      url = "https://github.com/urfave/negroni";
+      rev = "v1.0.0";
+      sha256 = "1gp6j74adi1cn8fq5v3wzlzhwl4zg43n2746m4fzdcdimihk3ccp";
+    };
+  }
+  {
+    goPackagePath = "go.opencensus.io";
+    fetch = {
+      type = "git";
+      url = "https://github.com/census-instrumentation/opencensus-go";
+      rev = "v0.19.2";
+      sha256 = "1vlik5xwwrhcyy9yx2yc3y02y6hp9q80591hbhncv9c8wwfg9gjc";
+    };
+  }
+  {
+    goPackagePath = "go4.org";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go4org/go4";
+      rev = "417644f6feb5";
+      sha256 = "013cvdg4fj15l9xg84br0vkb2d99j04s5b4g7zssqhng8dkwgr37";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/build";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/build";
+      rev = "5284462c4bec";
+      sha256 = "0w649zbs4n64b6rjx92hy7vc1y9sv4khhk5igbz8w7sxvz8778ij";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev = "c2843e01d9a2";
+      sha256 = "01xgxbj5r79nmisdvpq48zfy8pzaaj90bn6ngd4nf33j9ar1dp8r";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/exp";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/exp";
+      rev = "509febef88a4";
+      sha256 = "02isrh39z8znrp5znplzy0dip2gnrl3jm1355raliyvhnhg04j6q";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/lint";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/lint";
+      rev = "5614ed5bae6f";
+      sha256 = "0fzn0zjv0x92xvfdq3a0v9w5sgkhr7hxkfy9zaqi8i57807z8bnx";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev = "d8887717615a";
+      sha256 = "1wfm6ngxjyj7v5a2dqib6lw8bb2rdnf1kl48diykxjrsddn0s163";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/oauth2";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/oauth2";
+      rev = "e64efc72b421";
+      sha256 = "0djvwz2avx7knsjbl434vw1wqbrg53xp1kh599gfixn5icrggz4m";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/perf";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/perf";
+      rev = "6e6d33e29852";
+      sha256 = "1cyiy459bkjqnzgk051lsksz46hdkjc34q33zf946kiv3hilp1v2";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sync";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sync";
+      rev = "e225da77a7e6";
+      sha256 = "0bh3583smcfw6jw3w6lp0za93rz7hpxfdz8vhxng75b7a6vdlw4p";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "d0b11bdaac8a";
+      sha256 = "18yfsmw622l7gc5sqriv5qmck6903vvhivpzp8i3xfy3z33dybdl";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/text";
+      rev = "17ff2d5776d2";
+      sha256 = "1rrh2mnmyxr45nsvy42zq3w3ly6gw6rl993knwvf1w71kyv0jjnj";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/time";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/time";
+      rev = "85acf8d2951c";
+      sha256 = "0yqnxsrarjk4qkda8kcxzmk7y90kkkxzx9iwryzrk7bzs87ky3xc";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/tools";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/tools";
+      rev = "e65039ee4138";
+      sha256 = "0c094599cf70wdrms49a3879qkq122pqlp2av444gs2pvc8apdcx";
+    };
+  }
+  {
+    goPackagePath = "google.golang.org/api";
+    fetch = {
+      type = "git";
+      url = "https://code.googlesource.com/google-api-go-client";
+      rev = "v0.3.0";
+      sha256 = "1vvrhiq2zs677iz2j6s9iv4q3j3nhxz5ci9y4zrak248lrdln0zk";
+    };
+  }
+  {
+    goPackagePath = "google.golang.org/appengine";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/appengine";
+      rev = "v1.4.0";
+      sha256 = "06zl7w4sxgdq2pl94wy9ncii6h0z3szl4xpqds0sv3b3wbdlhbnn";
+    };
+  }
+  {
+    goPackagePath = "google.golang.org/genproto";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/go-genproto";
+      rev = "5fe7a883aa19";
+      sha256 = "0qjkwig0r42q0j2qv57s4ahsgmmp41dz3ih3rnaqg0619n5w7lbs";
+    };
+  }
+  {
+    goPackagePath = "google.golang.org/grpc";
+    fetch = {
+      type = "git";
+      url = "https://github.com/grpc/grpc-go";
+      rev = "v1.19.0";
+      sha256 = "1znqwpj7ix3dpzx4zch0q70sdl3z5lvbb7v3q4i8sf8kas3yv71v";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/alecthomas/kingpin.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/alecthomas/kingpin.v2";
+      rev = "v2.2.6";
+      sha256 = "0mndnv3hdngr3bxp7yxfd47cas4prv98sqw534mx7vp38gd88n5r";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/check.v1";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/check.v1";
+      rev = "788fd7840127";
+      sha256 = "0v3bim0j375z81zrpr5qv42knqs0y2qv2vkjiqi5axvb78slki1a";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/fsnotify.v1";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/fsnotify.v1";
+      rev = "v1.4.7";
+      sha256 = "07va9crci0ijlivbb7q57d2rz9h27zgn2fsm60spjsqpdbvyrx4g";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/inf.v0";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/inf.v0";
+      rev = "v0.9.1";
+      sha256 = "00k5iqjcp371fllqxncv7jkf80hn1zww92zm78cclbcn4ybigkng";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/tomb.v1";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/tomb.v1";
+      rev = "dd632973f1e7";
+      sha256 = "1lqmq1ag7s4b3gc3ddvr792c5xb5k6sfn0cchr3i2s7f1c231zjv";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/yaml.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/yaml.v2";
+      rev = "v2.2.2";
+      sha256 = "01wj12jzsdqlnidpyjssmj0r4yavlqy7dwrg7adqd8dicjc4ncsa";
+    };
+  }
+  {
+    goPackagePath = "grpc.go4.org";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go4org/grpc";
+      rev = "11d0a25b4919";
+      sha256 = "1d6akp2b3aa2viwbikc3jndhiljgjj87r4z7mg5b03f97f2wmz4f";
+    };
+  }
+  {
+    goPackagePath = "honnef.co/go/tools";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dominikh/go-tools";
+      rev = "3f1c8253044a";
+      sha256 = "0d3vgh0fgfj1z7i648g1s6x2pwxd07sxfjwg1xn3yagr9h06jh3h";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/nix/nixdoc/default.nix b/nixpkgs/pkgs/tools/nix/nixdoc/default.nix
new file mode 100644
index 000000000000..13b7ffd2af71
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixdoc/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub, rustPlatform, darwin }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "nixdoc";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = "tazjin";
+    repo  = "nixdoc";
+    rev = "v${version}";
+    sha256 = "14d4dq06jdqazxvv7fq5872zy0capxyb0fdkp8qg06gxl1iw201s";
+  };
+
+  buildInputs =  stdenv.lib.optional stdenv.isDarwin [ darwin.Security ];
+
+  cargoSha256 = "1hy8w73fir4wnqx7zfvfqh7s24w95x9nkw55kmizvrwf0glw9m4n";
+
+  meta = with stdenv.lib; {
+    description = "Generate documentation for Nix functions";
+    homepage    = https://github.com/tazjin/nixdoc;
+    license     = [ licenses.gpl3 ];
+    maintainers = [ maintainers.tazjin ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/nix/nixos-generators/default.nix b/nixpkgs/pkgs/tools/nix/nixos-generators/default.nix
new file mode 100644
index 000000000000..4e51b9b46dd3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixos-generators/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, lib, fetchFromGitHub, makeWrapper, coreutils, jq, findutils, nix  }:
+
+stdenv.mkDerivation rec {
+  pname = "nixos-generators";
+  version = "1.0.0";
+  src = fetchFromGitHub {
+    owner = "nix-community";
+    repo = "nixos-generators";
+    rev = version;
+    sha256 = "10xncifdfhilxclxyf72h7dcfn8yn1h34qbkvdq9l76ghv5qjniq";
+  };
+  nativeBuildInputs = [ makeWrapper ];
+  installFlags = [ "PREFIX=$(out)" ];
+  postFixup = ''
+    wrapProgram $out/bin/nixos-generate \
+      --prefix PATH : ${lib.makeBinPath [ jq coreutils findutils nix ] }
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Collection of image builders";
+    homepage    = "https://github.com/nix-community/nixos-generators";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ lassulus ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/nix/nixpkgs-fmt/default.nix b/nixpkgs/pkgs/tools/nix/nixpkgs-fmt/default.nix
new file mode 100644
index 000000000000..946710b1fdde
--- /dev/null
+++ b/nixpkgs/pkgs/tools/nix/nixpkgs-fmt/default.nix
@@ -0,0 +1,21 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+rustPlatform.buildRustPackage rec {
+  pname = "nixpkgs-fmt";
+  version = "0.6.1";
+
+  src = fetchFromGitHub {
+    owner = "nix-community";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1iylldgyvrcarfigpbhicg6j6qyipfiqn7gybza7qajfzyprjqfa";
+  };
+
+  cargoSha256 = "04my7dlp76dxs1ydy2sbbca8sp3n62wzdxyc4afcmrg8anb0ghaf";
+
+  meta = with lib; {
+    description = "Nix code formatter for nixpkgs";
+    homepage = "https://nix-community.github.io/nixpkgs-fmt";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ zimbatm ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/appimage-run/default.nix b/nixpkgs/pkgs/tools/package-management/appimage-run/default.nix
new file mode 100644
index 000000000000..426cc7943e5a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/appimage-run/default.nix
@@ -0,0 +1,56 @@
+{ writeScript, buildFHSUserEnv, coreutils, file, libarchive, runtimeShell
+, extraPkgs ? pkgs: [], appimageTools }:
+
+let
+  fhsArgs = appimageTools.defaultFhsEnvArgs;
+in buildFHSUserEnv (fhsArgs // {
+  name = "appimage-run";
+
+  targetPkgs = pkgs: fhsArgs.targetPkgs pkgs ++ extraPkgs pkgs;
+
+  runScript = writeScript "appimage-exec" ''
+    #!${runtimeShell}
+    if [ $# -eq 0 ]; then 
+      echo "Usage: $0 FILE [OPTION...]"
+      echo
+      echo 'Options are passed on to the appimage.'
+      echo "If you want to execute a custom command in the appimage's environment, set the APPIMAGE_DEBUG_EXEC environment variable."
+      exit 1
+    fi
+    APPIMAGE="$(realpath "$1")"
+    shift
+
+    if [ ! -x "$APPIMAGE" ]; then
+      echo "fatal: $APPIMAGE is not executable"
+      exit 1
+    fi
+
+    SHA256="$(${coreutils}/bin/sha256sum "$APPIMAGE" | cut -d ' ' -f 1)"
+    SQUASHFS_ROOT="''${XDG_CACHE_HOME:-$HOME/.cache}/appimage-run/$SHA256/"
+    mkdir -p "$SQUASHFS_ROOT"
+
+    export APPDIR="$SQUASHFS_ROOT/squashfs-root"
+    if [ ! -x "$APPDIR" ]; then
+      cd "$SQUASHFS_ROOT"
+
+      if ${file}/bin/file --mime-type --brief --keep-going "$APPIMAGE" | grep -q iso; then
+        # is type-1 appimage
+        mkdir "$APPDIR"
+        ${libarchive}/bin/bsdtar -x -C "$APPDIR" -f "$APPIMAGE"
+      else
+        # is type-2 appimage
+        "$APPIMAGE" --appimage-extract 2>/dev/null
+      fi
+    fi
+
+    cd "$APPDIR"
+    export PATH="$PATH:$PWD/usr/bin"
+    export APPIMAGE_SILENT_INSTALL=1
+
+    if [ -n "$APPIMAGE_DEBUG_EXEC" ]; then
+      exec "$APPIMAGE_DEBUG_EXEC"
+    fi
+
+    exec ./AppRun "$@"
+  '';
+})
diff --git a/nixpkgs/pkgs/tools/package-management/appimagekit/default.nix b/nixpkgs/pkgs/tools/package-management/appimagekit/default.nix
new file mode 100644
index 000000000000..21e869b7b01e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/appimagekit/default.nix
@@ -0,0 +1,123 @@
+{ stdenv, fetchFromGitHub
+, pkgconfig, cmake, autoconf, automake, libtool, makeWrapper
+, wget, xxd, desktop-file-utils, file
+, gnupg, glib, zlib, cairo, openssl, fuse, xz, squashfuse, inotify-tools, libarchive
+, squashfsTools
+, gtest
+}:
+
+let
+
+  appimagekit_src = fetchFromGitHub {
+    owner = "AppImage";
+    repo = "AppImageKit";
+    rev = "b0859501df61cde198b54a317c03b41dbafc98b1";
+    sha256 = "0qqg79jw9w9rs8c2w3lla4kz62ihafrf7jm370pp1dl8y2i81jzg";
+  };
+
+  # squashfuse adapted to nix from cmake experession in "${appimagekit_src}/cmake/dependencies.cmake"
+  appimagekit_squashfuse = squashfuse.overrideAttrs (attrs: rec {
+    name = "squashfuse-${version}";
+    version = "20161009";
+
+    src = fetchFromGitHub {
+      owner = "vasi";
+      repo  = "squashfuse";
+      rev   = "1f980303b89c779eabfd0a0fdd36d6a7a311bf92";
+      sha256 = "0lrw9ff8k15l34wjwyllw3i35hl0cms97jj2hpnr2q8ipgxpb5q5";
+    };
+
+    patches = [
+      "${appimagekit_src}/squashfuse.patch"
+      "${appimagekit_src}/squashfuse_dlopen.patch"
+    ];
+
+    postPatch = ''
+      cp -v ${appimagekit_src}/squashfuse_dlopen.[hc] .
+    '';
+
+    preConfigure = ''
+      sed -i "/PKG_CHECK_MODULES.*/,/,:./d" configure
+      sed -i "s/typedef off_t sqfs_off_t/typedef int64_t sqfs_off_t/g" common.h
+    '';
+
+    configureFlags = [
+      "--disable-demo" "--disable-high-level" "--without-lzo" "--without-lz4"
+    ];
+
+    postConfigure = ''
+      sed -i "s|XZ_LIBS = -llzma |XZ_LIBS = -Bstatic -llzma/|g" Makefile
+    '';
+
+    # only static libs and header files
+    installPhase = ''
+      mkdir -p $out/lib $out/include
+      cp -v ./.libs/*.a $out/lib
+      cp -v ./*.h $out/include
+    '';
+  });
+
+in stdenv.mkDerivation rec {
+  name = "appimagekit-20180727";
+
+  src = appimagekit_src;
+
+  patches = [ ./nix.patch ];
+
+  nativeBuildInputs = [
+    pkgconfig cmake autoconf automake libtool wget xxd
+    desktop-file-utils
+  ];
+
+  buildInputs = [
+    glib zlib cairo openssl fuse
+    xz inotify-tools libarchive
+    squashfsTools makeWrapper
+  ];
+
+  postPatch = ''
+    substituteInPlace src/appimagetool.c --replace "/usr/bin/file" "${file}/bin/file"
+  '';
+
+  preConfigure = ''
+    export HOME=$(pwd)
+  '';
+
+  cmakeFlags = [
+    "-DUSE_SYSTEM_XZ=ON"
+    "-DUSE_SYSTEM_SQUASHFUSE=ON"
+    "-DSQUASHFUSE=${appimagekit_squashfuse}"
+    "-DUSE_SYSTEM_INOTIFY_TOOLS=ON"
+    "-DUSE_SYSTEM_LIBARCHIVE=ON"
+    "-DUSE_SYSTEM_GTEST=ON"
+    "-DUSE_SYSTEM_MKSQUASHFS=ON"
+  ];
+
+  postInstall = ''
+    cp "${squashfsTools}/bin/mksquashfs" "$out/lib/appimagekit/"
+    cp "${desktop-file-utils}/bin/desktop-file-validate" "$out/bin"
+
+    wrapProgram "$out/bin/appimagetool" \
+      --prefix PATH : "${stdenv.lib.makeBinPath [ file gnupg ]}"
+  '';
+
+  checkInputs = [ gtest ];
+  doCheck = false; # fails 1 out of 4 tests, I'm too lazy to debug why
+
+  # for debugging
+  passthru = {
+    squashfuse = appimagekit_squashfuse;
+  };
+
+  meta = with stdenv.lib; {
+    description = "A tool to package desktop applications as AppImages";
+    longDescription = ''
+      AppImageKit is an implementation of the AppImage format that
+      provides tools such as appimagetool and appimaged for handling
+      AppImages.
+    '';
+    license = licenses.mit;
+    homepage = src.meta.homepage;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/appimagekit/nix.patch b/nixpkgs/pkgs/tools/package-management/appimagekit/nix.patch
new file mode 100644
index 000000000000..9725cef5ba7d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/appimagekit/nix.patch
@@ -0,0 +1,174 @@
+diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake
+index ea133a3..916606c 100644
+--- a/cmake/dependencies.cmake
++++ b/cmake/dependencies.cmake
+@@ -224,21 +224,23 @@ if(NOT USE_SYSTEM_XZ)
+         LIBRARY_DIRS <INSTALL_DIR>/lib/
+         LIBRARIES "<INSTALL_DIR>/lib/liblzma.a"
+         INCLUDE_DIRS "<SOURCE_DIR>/src/liblzma/api/"
+     )
+ else()
+     message(STATUS "Using system xz")
+ 
+     import_pkgconfig_target(TARGET_NAME xz PKGCONFIG_TARGET liblzma STATIC)
+ endif()
+ 
++set(USE_SYSTEM_SQUASHFUSE OFF CACHE BOOL "Use system squashfuse instead of building our own")
+ 
++if(NOT USE_SYSTEM_SQUASHFUSE)
+ # as distros don't provide suitable squashfuse and squashfs-tools, those dependencies are bundled in, can, and should
+ # be used from this repository
+ # TODO: implement out-of-source builds for squashfuse, as for the other dependencies
+ configure_file(
+     ${CMAKE_CURRENT_SOURCE_DIR}/src/patch-squashfuse.sh.in
+     ${CMAKE_CURRENT_BINARY_DIR}/patch-squashfuse.sh
+     @ONLY
+ )
+ 
+ ExternalProject_Add(squashfuse-EXTERNAL
+@@ -259,20 +261,34 @@ ExternalProject_Add(squashfuse-EXTERNAL
+     BUILD_IN_SOURCE ON
+     INSTALL_COMMAND ${MAKE} install
+ )
+ 
+ import_external_project(
+     TARGET_NAME squashfuse
+     EXT_PROJECT_NAME squashfuse-EXTERNAL
+     LIBRARIES "<SOURCE_DIR>/.libs/libsquashfuse.a;<SOURCE_DIR>/.libs/libsquashfuse_ll.a;<SOURCE_DIR>/.libs/libfuseprivate.a"
+     INCLUDE_DIRS "<SOURCE_DIR>"
+ )
++else()
++    message(STATUS "Using system squashfsfuse from ${SQUASHFUSE}")
++
++    add_library(squashfuse INTERFACE IMPORTED GLOBAL)
++
++    set(squashfuse_INCLUDE_DIRS "${SQUASHFUSE}/include")
++    set(squashfuse_LIBRARIES "${SQUASHFUSE}/lib/libsquashfuse.a;${SQUASHFUSE}/lib/libsquashfuse_ll.a;${SQUASHFUSE}/lib/libfuseprivate.a")
++
++    set_property(
++      TARGET squashfuse
++      PROPERTY INTERFACE_LINK_LIBRARIES ${squashfuse_LIBRARIES}
++    )
++    include_directories(${squashfuse_INCLUDE_DIRS})
++endif()
+ 
+ 
+ set(USE_SYSTEM_INOTIFY_TOOLS OFF CACHE BOOL "Use system libinotifytools instead of building our own")
+ 
+ if(NOT USE_SYSTEM_INOTIFY_TOOLS)
+     message(STATUS "Downloading and building inotify-tools")
+ 
+     # TODO: build out of source
+     ExternalProject_Add(inotify-tools-EXTERNAL
+         URL https://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
+@@ -345,20 +361,23 @@ if(NOT USE_SYSTEM_GTEST)
+             INCLUDE_DIRS "<INSTALL_DIR>/include/"
+         )
+     else()
+         message(STATUS "Using system GTest")
+ 
+         import_find_pkg_target(gtest GTest GTEST)
+     endif()
+ endif()
+ 
+ 
++set(USE_SYSTEM_MKSQUASHFS OFF CACHE BOOL "Use system mksquashfs instead of downloading and building our own")
++
++if(NOT USE_SYSTEM_MKSQUASHFS)
+ # TODO: allow using system wide mksquashfs
+ set(mksquashfs_cflags "-DXZ_SUPPORT ${CFLAGS}")
+ 
+ if(xz_LIBRARIES MATCHES "\\.a$")
+     set(mksquashfs_ldflags "${xz_LIBRARIES}")
+ else()
+     set(mksquashfs_ldflags "-l${xz_LIBRARIES}")
+ endif()
+ 
+ if(xz_INCLUDE_DIRS)
+@@ -385,20 +404,25 @@ ExternalProject_Add(mksquashfs
+     INSTALL_COMMAND ${MAKE} -C squashfs-tools/ install INSTALL_DIR=<INSTALL_DIR>
+ )
+ 
+ ExternalProject_Get_Property(mksquashfs INSTALL_DIR)
+ set(mksquashfs_INSTALL_DIR "${INSTALL_DIR}")
+ mark_as_advanced(mksquashfs_INSTALL_DIR)
+ 
+ # for later use when packaging as an AppImage
+ set(mksquashfs_BINARY "${mksquashfs_INSTALL_DIR}/mksquashfs")
+ mark_as_advanced(mksquashfs_BINARY)
++else()
++    message(STATUS "Using system mksquashfs")
++
++    set(mksquashfs_BINARY "mksquashfs")
++endif()
+ 
+ 
+ #### build dependency configuration ####
+ 
+ # only have to build custom xz when not using system libxz
+ if(TARGET xz-EXTERNAL)
+     if(TARGET squashfuse-EXTERNAL)
+         ExternalProject_Add_StepDependencies(squashfuse-EXTERNAL configure xz-EXTERNAL)
+     endif()
+     if(TARGET mksquashfs)
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index 3f25442..974ed0e 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -197,27 +197,27 @@ target_include_directories(digest_md5
+ 
+ target_link_libraries(digest_md5
+     PRIVATE
+     libglib
+ )
+ 
+ 
+ # install binaries
+ if(AUXILIARY_FILES_DESTINATION)
+     install(
+-        PROGRAMS ${mksquashfs_INSTALL_DIR}/mksquashfs ${CMAKE_CURRENT_BINARY_DIR}/runtime
++        PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/runtime
+         DESTINATION ${AUXILIARY_FILES_DESTINATION}
+         COMPONENT applications
+     )
+ else()
+     install(
+-        PROGRAMS ${mksquashfs_INSTALL_DIR}/mksquashfs ${CMAKE_CURRENT_BINARY_DIR}/runtime
++        PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/runtime
+         DESTINATION bin
+         COMPONENT applications
+     )
+ endif()
+ 
+ install(
+     TARGETS AppRun appimagetool digest validate
+     RUNTIME DESTINATION bin COMPONENT applications
+     LIBRARY DESTINATION lib COMPONENT applications
+     ARCHIVE DESTINATION lib/static COMPONENT applications
+diff --git a/src/shared.c b/src/shared.c
+index cf5fd5c..4f48dbc 100644
+--- a/src/shared.c
++++ b/src/shared.c
+@@ -34,21 +34,21 @@
+ #include <sys/stat.h>
+ #include <sys/types.h>
+ #include <dirent.h>
+ #include <errno.h>
+ 
+ #include <glib.h>
+ #include <glib/gprintf.h>
+ #include <glib/gstdio.h>
+ #include <gio/gio.h>
+ 
+-#include "squashfuse.h"
++#include <squashfuse.h>
+ #include <squashfs_fs.h>
+ #include "getsection.h"
+ #include "elf.h"
+ 
+ #include "xdg-basedir.h"
+ 
+ // own header
+ #include "shared.h"
+ 
+ #if HAVE_LIBARCHIVE3 == 1 // CentOS
diff --git a/nixpkgs/pkgs/tools/package-management/apt-dater/default.nix b/nixpkgs/pkgs/tools/package-management/apt-dater/default.nix
new file mode 100644
index 000000000000..f161591c8f1d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/apt-dater/default.nix
@@ -0,0 +1,50 @@
+{ stdenv, fetchFromGitHub
+, autoreconfHook, pkgconfig, gettext
+, vim, glib, libxml2, ncurses, popt, screen
+}:
+
+stdenv.mkDerivation rec {
+  pname = "apt-dater";
+  version = "1.0.4";
+
+  src = fetchFromGitHub {
+    owner = "DE-IBH";
+    repo = "apt-dater";
+    rev = "v${version}";
+    sha256 = "1r6gz9jkh1wxi11mcq5p9mqg0szclsaq8ic79vnfnbjdrmmdfi4y";
+  };
+
+  nativeBuildInputs = [
+    pkgconfig autoreconfHook gettext
+  ];
+
+  buildInputs = [
+    libxml2 ncurses vim glib popt screen
+  ];
+
+  configureFlags = [ "--disable-history" ];
+
+  prePatch = ''
+    substituteInPlace etc/Makefile.am \
+      --replace 02770 0770
+  '';
+
+  postPatch = ''
+    substituteInPlace configure.ac \
+      --replace "/usr/bin/screen" "${screen}/bin/screen"
+  '';
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/DE-IBH/apt-dater;
+    description = "Terminal-based remote package update manager";
+    longDescription = ''
+      Provides an ncurses frontend for managing package updates on a large
+      number of remote hosts using SSH. It supports Debian-based managed hosts
+      as well as rug (e.g. openSUSE) and yum (e.g. CentOS) based systems.
+    '';
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ c0bw3b ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/apt/default.nix b/nixpkgs/pkgs/tools/package-management/apt/default.nix
new file mode 100644
index 000000000000..0438e340b212
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/apt/default.nix
@@ -0,0 +1,54 @@
+{ stdenv, lib, fetchurl, pkgconfig, cmake, perlPackages, curl, gtest
+, gnutls, libtasn1, lzma, bzip2, lz4, zstd, libseccomp, udev
+, db, dpkg, libxslt, docbook_xsl, docbook_xml_dtd_45
+
+# used when WITH_DOC=ON
+, w3m
+, doxygen
+
+# used when WITH_NLS=ON
+, gettext
+
+# opts
+, withDocs ? true
+, withNLS ? true
+}:
+
+stdenv.mkDerivation rec {
+  pname = "apt";
+  version = "1.8.4";
+
+  src = fetchurl {
+    url = "mirror://debian/pool/main/a/apt/apt_${version}.tar.xz";
+    sha256 = "0gn4srqaaym85gc8nldqkv01477kdwr136an2nlpbdrsbx3y83zl";
+  };
+
+  nativeBuildInputs = [ pkgconfig cmake gtest libxslt.bin ];
+
+  buildInputs = [
+    perlPackages.perl curl gnutls libtasn1 lzma bzip2 lz4 zstd libseccomp udev db dpkg
+  ] ++ lib.optionals withDocs [
+    doxygen perlPackages.Po4a w3m docbook_xml_dtd_45
+  ] ++ lib.optionals withNLS [
+    gettext
+  ];
+
+  cmakeFlags = [
+    "-DBERKELEY_DB_INCLUDE_DIRS=${db.dev}/include"
+    "-DGNUTLS_INCLUDE_DIR=${gnutls.dev}/include"
+    "-DDOCBOOK_XSL=${docbook_xsl}/share/xml/docbook-xsl"
+    "-DROOT_GROUP=root"
+    "-DWITH_DOC=${if withDocs then "ON" else "OFF"}"
+    "-DUSE_NLS=${if withNLS then "ON" else "OFF"}"
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Command-line package management tools used on Debian-based systems";
+    homepage = https://salsa.debian.org/apt-team/apt;
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ cstrahan ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/bunny/default.nix b/nixpkgs/pkgs/tools/package-management/bunny/default.nix
new file mode 100644
index 000000000000..938a762ba303
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/bunny/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitLab }:
+
+stdenv.mkDerivation rec {
+  pname = "bunny";
+  version = "1.3";
+
+  src = fetchFromGitLab {
+    owner = "tim241";
+    repo = "bunny";
+    rev = version;
+    sha256 = "0nh2h5kj9b0nkb6yrzf4if7anfdmy9vijzy4bl3s7qck0nzbpy8s";
+  };
+
+  dontBuild = true;
+
+  makeFlags = [ "prefix=$(out)" ];
+
+  meta = with stdenv.lib; {
+    description = "A simple shell script wrapper around multiple package managers";
+    homepage = https://gitlab.com/tim241/bunny;
+    license = licenses.gpl3;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ buffet ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/cargo-audit/default.nix b/nixpkgs/pkgs/tools/package-management/cargo-audit/default.nix
new file mode 100644
index 000000000000..1a60675080d8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/cargo-audit/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, lib, rustPlatform, fetchFromGitHub, openssl, pkg-config, Security, libiconv }:
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-audit";
+  version = "0.10.0";
+
+  src = fetchFromGitHub {
+    owner = "RustSec";
+    repo = "cargo-audit";
+    rev = "v${version}";
+    sha256 = "1977ykablfi4mc6j2iil0bxc6diy07vi5hm56xmqj3n37ziavf1m";
+  };
+
+  cargoSha256 = "0zbnsq0cif0yppn8ygxhcsrshkbf1c801f8waqqb2d1rjsrhb93y";
+
+  buildInputs = [ openssl libiconv ] ++ lib.optionals stdenv.isDarwin [ Security ];
+  nativeBuildInputs = [ pkg-config ];
+
+  # The tests require network access which is not available in sandboxed Nix builds.
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Audit Cargo.lock files for crates with security vulnerabilities";
+    homepage = "https://rustsec.org";
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ basvandijk ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/cargo-deb/default.nix b/nixpkgs/pkgs/tools/package-management/cargo-deb/default.nix
new file mode 100644
index 000000000000..1af8be3da44c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/cargo-deb/default.nix
@@ -0,0 +1,29 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, rustPlatform
+, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-deb";
+  version = "1.23.1";
+
+  src = fetchFromGitHub {
+    owner = "mmstick";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0dkkbyzimnzfyrzmfn83jqg5xq53wzrknixnyh46cniqffqhd663";
+  };
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
+
+  cargoSha256 = "0j64dcczxdr9zdch4a241d5adgipzz8sgbw00min9k3p8hbljd9n";
+
+  meta = with lib; {
+    description = "Generate Debian packages from information in Cargo.toml";
+    homepage = "https://github.com/mmstick/cargo-deb";
+    license = licenses.mit;
+    maintainers = with maintainers; [ filalex77 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/cargo-deps/default.nix b/nixpkgs/pkgs/tools/package-management/cargo-deps/default.nix
new file mode 100644
index 000000000000..8a43fb3cf11b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/cargo-deps/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-deps";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "m-cat";
+    repo = pname;
+    rev = "ab93f5655900e49fb0360ccaf72b2b61b6b428ef";
+    sha256 = "16181p7ghvy9mqippg1xi2cw7yxvicis8v6n39wly5qw05i57aw2";
+  };
+
+  cargoSha256 = "1a9svdw1cgk6s7gqpsq3r25wxa2gr2xddqkc1cjk7hf6sk327cpv";
+
+  meta = with lib; {
+    description = "Cargo subcommand for building dependency graphs of Rust projects";
+    homepage = https://github.com/m-cat/cargo-deps;
+    license = licenses.mit;
+    maintainers = with maintainers; [ arcnmx ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/cargo-download/Cargo.nix b/nixpkgs/pkgs/tools/package-management/cargo-download/Cargo.nix
new file mode 100644
index 000000000000..21740ce2ead1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/cargo-download/Cargo.nix
@@ -0,0 +1,675 @@
+# Generated by carnix 0.10.0: carnix generate-nix
+{ lib, buildPlatform, buildRustCrate, buildRustCrateHelpers, cratesIO, fetchgit }:
+with buildRustCrateHelpers;
+let inherit (lib.lists) fold;
+    inherit (lib.attrsets) recursiveUpdate;
+in
+rec {
+  crates = cratesIO;
+  cargo_download = crates.crates.cargo_download."0.1.2" deps;
+  __all = [ (cargo_download {}) ];
+  deps.adler32."1.0.2" = {};
+  deps.aho_corasick."0.5.3" = {
+    memchr = "0.1.11";
+  };
+  deps.ansi_term."0.9.0" = {};
+  deps.arrayvec."0.4.8" = {
+    nodrop = "0.1.13";
+  };
+  deps.atty."0.2.3" = {
+    termion = "1.5.1";
+    libc = "0.2.44";
+    kernel32_sys = "0.2.2";
+    winapi = "0.2.8";
+  };
+  deps.base64."0.9.3" = {
+    byteorder = "1.1.0";
+    safemem = "0.3.0";
+  };
+  deps.bitflags."0.7.0" = {};
+  deps.bitflags."0.9.1" = {};
+  deps.bitflags."1.0.4" = {};
+  deps.byteorder."1.1.0" = {};
+  deps.bytes."0.4.11" = {
+    byteorder = "1.1.0";
+    iovec = "0.1.1";
+  };
+  deps.cargo_download."0.1.2" = {
+    ansi_term = "0.9.0";
+    clap = "2.27.1";
+    conv = "0.3.3";
+    derive_error = "0.0.3";
+    exitcode = "1.1.2";
+    flate2 = "0.2.20";
+    isatty = "0.1.5";
+    itertools = "0.6.5";
+    lazy_static = "0.2.10";
+    log = "0.3.8";
+    maplit = "0.1.6";
+    reqwest = "0.9.5";
+    semver = "0.9.0";
+    serde_json = "1.0.6";
+    slog = "1.7.1";
+    slog_envlogger = "0.5.0";
+    slog_stdlog = "1.1.0";
+    slog_stream = "1.2.1";
+    tar = "0.4.13";
+    time = "0.1.38";
+  };
+  deps.case."0.1.0" = {};
+  deps.cc."1.0.3" = {};
+  deps.cfg_if."0.1.2" = {};
+  deps.chrono."0.2.25" = {
+    num = "0.1.40";
+    time = "0.1.38";
+  };
+  deps.clap."2.27.1" = {
+    ansi_term = "0.9.0";
+    atty = "0.2.3";
+    bitflags = "0.9.1";
+    strsim = "0.6.0";
+    textwrap = "0.9.0";
+    unicode_width = "0.1.4";
+    vec_map = "0.8.0";
+  };
+  deps.cloudabi."0.0.3" = {
+    bitflags = "1.0.4";
+  };
+  deps.conv."0.3.3" = {
+    custom_derive = "0.1.7";
+  };
+  deps.core_foundation."0.5.1" = {
+    core_foundation_sys = "0.5.1";
+    libc = "0.2.44";
+  };
+  deps.core_foundation_sys."0.5.1" = {
+    libc = "0.2.44";
+  };
+  deps.crc32fast."1.1.1" = {};
+  deps.crossbeam."0.2.10" = {};
+  deps.crossbeam_deque."0.6.2" = {
+    crossbeam_epoch = "0.6.1";
+    crossbeam_utils = "0.6.1";
+  };
+  deps.crossbeam_epoch."0.6.1" = {
+    arrayvec = "0.4.8";
+    cfg_if = "0.1.2";
+    crossbeam_utils = "0.6.1";
+    lazy_static = "1.2.0";
+    memoffset = "0.2.1";
+    scopeguard = "0.3.3";
+  };
+  deps.crossbeam_utils."0.6.1" = {
+    cfg_if = "0.1.2";
+  };
+  deps.custom_derive."0.1.7" = {};
+  deps.derive_error."0.0.3" = {
+    case = "0.1.0";
+    quote = "0.3.15";
+    syn = "0.11.11";
+  };
+  deps.dtoa."0.4.2" = {};
+  deps.either."1.4.0" = {};
+  deps.encoding_rs."0.8.13" = {
+    cfg_if = "0.1.2";
+  };
+  deps.exitcode."1.1.2" = {};
+  deps.filetime."0.1.14" = {
+    cfg_if = "0.1.2";
+    redox_syscall = "0.1.31";
+    libc = "0.2.44";
+  };
+  deps.flate2."0.2.20" = {
+    libc = "0.2.44";
+    miniz_sys = "0.1.10";
+  };
+  deps.fnv."1.0.6" = {};
+  deps.foreign_types."0.3.2" = {
+    foreign_types_shared = "0.1.1";
+  };
+  deps.foreign_types_shared."0.1.1" = {};
+  deps.fuchsia_zircon."0.2.1" = {
+    fuchsia_zircon_sys = "0.2.0";
+  };
+  deps.fuchsia_zircon."0.3.3" = {
+    bitflags = "1.0.4";
+    fuchsia_zircon_sys = "0.3.3";
+  };
+  deps.fuchsia_zircon_sys."0.2.0" = {
+    bitflags = "0.7.0";
+  };
+  deps.fuchsia_zircon_sys."0.3.3" = {};
+  deps.futures."0.1.25" = {};
+  deps.futures_cpupool."0.1.7" = {
+    futures = "0.1.25";
+    num_cpus = "1.8.0";
+  };
+  deps.h2."0.1.13" = {
+    byteorder = "1.1.0";
+    bytes = "0.4.11";
+    fnv = "1.0.6";
+    futures = "0.1.25";
+    http = "0.1.14";
+    indexmap = "1.0.2";
+    log = "0.4.6";
+    slab = "0.4.0";
+    string = "0.1.2";
+    tokio_io = "0.1.10";
+  };
+  deps.http."0.1.14" = {
+    bytes = "0.4.11";
+    fnv = "1.0.6";
+    itoa = "0.4.3";
+  };
+  deps.httparse."1.2.3" = {};
+  deps.hyper."0.12.16" = {
+    bytes = "0.4.11";
+    futures = "0.1.25";
+    futures_cpupool = "0.1.7";
+    h2 = "0.1.13";
+    http = "0.1.14";
+    httparse = "1.2.3";
+    iovec = "0.1.1";
+    itoa = "0.4.3";
+    log = "0.4.6";
+    net2 = "0.2.33";
+    time = "0.1.38";
+    tokio = "0.1.7";
+    tokio_executor = "0.1.5";
+    tokio_io = "0.1.10";
+    tokio_reactor = "0.1.7";
+    tokio_tcp = "0.1.2";
+    tokio_threadpool = "0.1.9";
+    tokio_timer = "0.2.5";
+    want = "0.0.6";
+  };
+  deps.hyper_tls."0.3.1" = {
+    bytes = "0.4.11";
+    futures = "0.1.25";
+    hyper = "0.12.16";
+    native_tls = "0.2.2";
+    tokio_io = "0.1.10";
+  };
+  deps.idna."0.1.4" = {
+    matches = "0.1.6";
+    unicode_bidi = "0.3.4";
+    unicode_normalization = "0.1.5";
+  };
+  deps.indexmap."1.0.2" = {};
+  deps.iovec."0.1.1" = {
+    libc = "0.2.44";
+    winapi = "0.2.8";
+  };
+  deps.isatty."0.1.5" = {
+    libc = "0.2.44";
+    kernel32_sys = "0.2.2";
+    winapi = "0.2.8";
+  };
+  deps.itertools."0.6.5" = {
+    either = "1.4.0";
+  };
+  deps.itoa."0.3.4" = {};
+  deps.itoa."0.4.3" = {};
+  deps.kernel32_sys."0.2.2" = {
+    winapi = "0.2.8";
+    winapi_build = "0.1.1";
+  };
+  deps.lazy_static."0.2.10" = {};
+  deps.lazy_static."1.2.0" = {};
+  deps.lazycell."1.2.0" = {};
+  deps.libc."0.2.44" = {};
+  deps.libflate."0.1.19" = {
+    adler32 = "1.0.2";
+    byteorder = "1.1.0";
+    crc32fast = "1.1.1";
+  };
+  deps.lock_api."0.1.5" = {
+    owning_ref = "0.4.0";
+    scopeguard = "0.3.3";
+  };
+  deps.log."0.3.8" = {};
+  deps.log."0.4.6" = {
+    cfg_if = "0.1.2";
+  };
+  deps.maplit."0.1.6" = {};
+  deps.matches."0.1.6" = {};
+  deps.memchr."0.1.11" = {
+    libc = "0.2.44";
+  };
+  deps.memoffset."0.2.1" = {};
+  deps.mime."0.3.12" = {
+    unicase = "2.1.0";
+  };
+  deps.mime_guess."2.0.0-alpha.6" = {
+    mime = "0.3.12";
+    phf = "0.7.21";
+    unicase = "1.4.2";
+    phf_codegen = "0.7.21";
+  };
+  deps.miniz_sys."0.1.10" = {
+    libc = "0.2.44";
+    cc = "1.0.3";
+  };
+  deps.mio."0.6.16" = {
+    iovec = "0.1.1";
+    lazycell = "1.2.0";
+    log = "0.4.6";
+    net2 = "0.2.33";
+    slab = "0.4.0";
+    fuchsia_zircon = "0.3.3";
+    fuchsia_zircon_sys = "0.3.3";
+    libc = "0.2.44";
+    kernel32_sys = "0.2.2";
+    miow = "0.2.1";
+    winapi = "0.2.8";
+  };
+  deps.miow."0.2.1" = {
+    kernel32_sys = "0.2.2";
+    net2 = "0.2.33";
+    winapi = "0.2.8";
+    ws2_32_sys = "0.2.1";
+  };
+  deps.native_tls."0.2.2" = {
+    lazy_static = "1.2.0";
+    libc = "0.2.44";
+    security_framework = "0.2.1";
+    security_framework_sys = "0.2.1";
+    tempfile = "3.0.5";
+    openssl = "0.10.15";
+    openssl_probe = "0.1.2";
+    openssl_sys = "0.9.39";
+    log = "0.4.6";
+    schannel = "0.1.14";
+  };
+  deps.net2."0.2.33" = {
+    cfg_if = "0.1.2";
+    libc = "0.2.44";
+    winapi = "0.3.6";
+  };
+  deps.nodrop."0.1.13" = {};
+  deps.num."0.1.40" = {
+    num_integer = "0.1.35";
+    num_iter = "0.1.34";
+    num_traits = "0.1.40";
+  };
+  deps.num_integer."0.1.35" = {
+    num_traits = "0.1.40";
+  };
+  deps.num_iter."0.1.34" = {
+    num_integer = "0.1.35";
+    num_traits = "0.1.40";
+  };
+  deps.num_traits."0.1.40" = {};
+  deps.num_cpus."1.8.0" = {
+    libc = "0.2.44";
+  };
+  deps.openssl."0.10.15" = {
+    bitflags = "1.0.4";
+    cfg_if = "0.1.2";
+    foreign_types = "0.3.2";
+    lazy_static = "1.2.0";
+    libc = "0.2.44";
+    openssl_sys = "0.9.39";
+  };
+  deps.openssl_probe."0.1.2" = {};
+  deps.openssl_sys."0.9.39" = {
+    libc = "0.2.44";
+    cc = "1.0.3";
+    pkg_config = "0.3.9";
+  };
+  deps.owning_ref."0.4.0" = {
+    stable_deref_trait = "1.1.1";
+  };
+  deps.parking_lot."0.6.4" = {
+    lock_api = "0.1.5";
+    parking_lot_core = "0.3.1";
+  };
+  deps.parking_lot_core."0.3.1" = {
+    rand = "0.5.5";
+    smallvec = "0.6.7";
+    rustc_version = "0.2.3";
+    libc = "0.2.44";
+    winapi = "0.3.6";
+  };
+  deps.percent_encoding."1.0.1" = {};
+  deps.phf."0.7.21" = {
+    phf_shared = "0.7.21";
+  };
+  deps.phf_codegen."0.7.21" = {
+    phf_generator = "0.7.21";
+    phf_shared = "0.7.21";
+  };
+  deps.phf_generator."0.7.21" = {
+    phf_shared = "0.7.21";
+    rand = "0.3.18";
+  };
+  deps.phf_shared."0.7.21" = {
+    siphasher = "0.2.2";
+    unicase = "1.4.2";
+  };
+  deps.pkg_config."0.3.9" = {};
+  deps.quote."0.3.15" = {};
+  deps.rand."0.3.18" = {
+    libc = "0.2.44";
+    fuchsia_zircon = "0.2.1";
+  };
+  deps.rand."0.5.5" = {
+    rand_core = "0.2.2";
+    cloudabi = "0.0.3";
+    fuchsia_zircon = "0.3.3";
+    libc = "0.2.44";
+    winapi = "0.3.6";
+  };
+  deps.rand."0.6.1" = {
+    rand_chacha = "0.1.0";
+    rand_core = "0.3.0";
+    rand_hc = "0.1.0";
+    rand_isaac = "0.1.1";
+    rand_pcg = "0.1.1";
+    rand_xorshift = "0.1.0";
+    rustc_version = "0.2.3";
+    cloudabi = "0.0.3";
+    fuchsia_zircon = "0.3.3";
+    libc = "0.2.44";
+    winapi = "0.3.6";
+  };
+  deps.rand_chacha."0.1.0" = {
+    rand_core = "0.3.0";
+    rustc_version = "0.2.3";
+  };
+  deps.rand_core."0.2.2" = {
+    rand_core = "0.3.0";
+  };
+  deps.rand_core."0.3.0" = {};
+  deps.rand_hc."0.1.0" = {
+    rand_core = "0.3.0";
+  };
+  deps.rand_isaac."0.1.1" = {
+    rand_core = "0.3.0";
+  };
+  deps.rand_pcg."0.1.1" = {
+    rand_core = "0.3.0";
+    rustc_version = "0.2.3";
+  };
+  deps.rand_xorshift."0.1.0" = {
+    rand_core = "0.3.0";
+  };
+  deps.redox_syscall."0.1.31" = {};
+  deps.redox_termios."0.1.1" = {
+    redox_syscall = "0.1.31";
+  };
+  deps.regex."0.1.80" = {
+    aho_corasick = "0.5.3";
+    memchr = "0.1.11";
+    regex_syntax = "0.3.9";
+    thread_local = "0.2.7";
+    utf8_ranges = "0.1.3";
+  };
+  deps.regex_syntax."0.3.9" = {};
+  deps.remove_dir_all."0.5.1" = {
+    winapi = "0.3.6";
+  };
+  deps.reqwest."0.9.5" = {
+    base64 = "0.9.3";
+    bytes = "0.4.11";
+    encoding_rs = "0.8.13";
+    futures = "0.1.25";
+    http = "0.1.14";
+    hyper = "0.12.16";
+    hyper_tls = "0.3.1";
+    libflate = "0.1.19";
+    log = "0.4.6";
+    mime = "0.3.12";
+    mime_guess = "2.0.0-alpha.6";
+    native_tls = "0.2.2";
+    serde = "1.0.21";
+    serde_json = "1.0.6";
+    serde_urlencoded = "0.5.1";
+    tokio = "0.1.7";
+    tokio_io = "0.1.10";
+    url = "1.6.0";
+    uuid = "0.7.1";
+  };
+  deps.rustc_version."0.2.3" = {
+    semver = "0.9.0";
+  };
+  deps.safemem."0.3.0" = {};
+  deps.schannel."0.1.14" = {
+    lazy_static = "1.2.0";
+    winapi = "0.3.6";
+  };
+  deps.scopeguard."0.3.3" = {};
+  deps.security_framework."0.2.1" = {
+    core_foundation = "0.5.1";
+    core_foundation_sys = "0.5.1";
+    libc = "0.2.44";
+    security_framework_sys = "0.2.1";
+  };
+  deps.security_framework_sys."0.2.1" = {
+    core_foundation_sys = "0.5.1";
+    libc = "0.2.44";
+  };
+  deps.semver."0.9.0" = {
+    semver_parser = "0.7.0";
+  };
+  deps.semver_parser."0.7.0" = {};
+  deps.serde."1.0.21" = {};
+  deps.serde_json."1.0.6" = {
+    dtoa = "0.4.2";
+    itoa = "0.3.4";
+    num_traits = "0.1.40";
+    serde = "1.0.21";
+  };
+  deps.serde_urlencoded."0.5.1" = {
+    dtoa = "0.4.2";
+    itoa = "0.3.4";
+    serde = "1.0.21";
+    url = "1.6.0";
+  };
+  deps.siphasher."0.2.2" = {};
+  deps.slab."0.4.0" = {};
+  deps.slog."1.7.1" = {};
+  deps.slog_envlogger."0.5.0" = {
+    log = "0.3.8";
+    regex = "0.1.80";
+    slog = "1.7.1";
+    slog_stdlog = "1.1.0";
+    slog_term = "1.5.0";
+  };
+  deps.slog_extra."0.1.2" = {
+    slog = "1.7.1";
+    thread_local = "0.3.4";
+  };
+  deps.slog_stdlog."1.1.0" = {
+    crossbeam = "0.2.10";
+    lazy_static = "0.2.10";
+    log = "0.3.8";
+    slog = "1.7.1";
+    slog_term = "1.5.0";
+  };
+  deps.slog_stream."1.2.1" = {
+    slog = "1.7.1";
+    slog_extra = "0.1.2";
+    thread_local = "0.3.4";
+  };
+  deps.slog_term."1.5.0" = {
+    chrono = "0.2.25";
+    isatty = "0.1.5";
+    slog = "1.7.1";
+    slog_stream = "1.2.1";
+    thread_local = "0.3.4";
+  };
+  deps.smallvec."0.6.7" = {
+    unreachable = "1.0.0";
+  };
+  deps.stable_deref_trait."1.1.1" = {};
+  deps.string."0.1.2" = {};
+  deps.strsim."0.6.0" = {};
+  deps.syn."0.11.11" = {
+    quote = "0.3.15";
+    synom = "0.11.3";
+    unicode_xid = "0.0.4";
+  };
+  deps.synom."0.11.3" = {
+    unicode_xid = "0.0.4";
+  };
+  deps.tar."0.4.13" = {
+    filetime = "0.1.14";
+    libc = "0.2.44";
+    xattr = "0.1.11";
+  };
+  deps.tempfile."3.0.5" = {
+    cfg_if = "0.1.2";
+    rand = "0.6.1";
+    remove_dir_all = "0.5.1";
+    redox_syscall = "0.1.31";
+    libc = "0.2.44";
+    winapi = "0.3.6";
+  };
+  deps.termion."1.5.1" = {
+    libc = "0.2.44";
+    redox_syscall = "0.1.31";
+    redox_termios = "0.1.1";
+  };
+  deps.textwrap."0.9.0" = {
+    unicode_width = "0.1.4";
+  };
+  deps.thread_id."2.0.0" = {
+    kernel32_sys = "0.2.2";
+    libc = "0.2.44";
+  };
+  deps.thread_local."0.2.7" = {
+    thread_id = "2.0.0";
+  };
+  deps.thread_local."0.3.4" = {
+    lazy_static = "0.2.10";
+    unreachable = "1.0.0";
+  };
+  deps.time."0.1.38" = {
+    libc = "0.2.44";
+    redox_syscall = "0.1.31";
+    kernel32_sys = "0.2.2";
+    winapi = "0.2.8";
+  };
+  deps.tokio."0.1.7" = {
+    futures = "0.1.25";
+    mio = "0.6.16";
+    tokio_executor = "0.1.5";
+    tokio_fs = "0.1.4";
+    tokio_io = "0.1.10";
+    tokio_reactor = "0.1.7";
+    tokio_tcp = "0.1.2";
+    tokio_threadpool = "0.1.9";
+    tokio_timer = "0.2.5";
+    tokio_udp = "0.1.3";
+  };
+  deps.tokio_codec."0.1.1" = {
+    bytes = "0.4.11";
+    futures = "0.1.25";
+    tokio_io = "0.1.10";
+  };
+  deps.tokio_executor."0.1.5" = {
+    futures = "0.1.25";
+  };
+  deps.tokio_fs."0.1.4" = {
+    futures = "0.1.25";
+    tokio_io = "0.1.10";
+    tokio_threadpool = "0.1.9";
+  };
+  deps.tokio_io."0.1.10" = {
+    bytes = "0.4.11";
+    futures = "0.1.25";
+    log = "0.4.6";
+  };
+  deps.tokio_reactor."0.1.7" = {
+    crossbeam_utils = "0.6.1";
+    futures = "0.1.25";
+    lazy_static = "1.2.0";
+    log = "0.4.6";
+    mio = "0.6.16";
+    num_cpus = "1.8.0";
+    parking_lot = "0.6.4";
+    slab = "0.4.0";
+    tokio_executor = "0.1.5";
+    tokio_io = "0.1.10";
+  };
+  deps.tokio_tcp."0.1.2" = {
+    bytes = "0.4.11";
+    futures = "0.1.25";
+    iovec = "0.1.1";
+    mio = "0.6.16";
+    tokio_io = "0.1.10";
+    tokio_reactor = "0.1.7";
+  };
+  deps.tokio_threadpool."0.1.9" = {
+    crossbeam_deque = "0.6.2";
+    crossbeam_utils = "0.6.1";
+    futures = "0.1.25";
+    log = "0.4.6";
+    num_cpus = "1.8.0";
+    rand = "0.6.1";
+    tokio_executor = "0.1.5";
+  };
+  deps.tokio_timer."0.2.5" = {
+    futures = "0.1.25";
+    tokio_executor = "0.1.5";
+  };
+  deps.tokio_udp."0.1.3" = {
+    bytes = "0.4.11";
+    futures = "0.1.25";
+    log = "0.4.6";
+    mio = "0.6.16";
+    tokio_codec = "0.1.1";
+    tokio_io = "0.1.10";
+    tokio_reactor = "0.1.7";
+  };
+  deps.try_lock."0.2.2" = {};
+  deps.unicase."1.4.2" = {
+    version_check = "0.1.3";
+  };
+  deps.unicase."2.1.0" = {
+    version_check = "0.1.3";
+  };
+  deps.unicode_bidi."0.3.4" = {
+    matches = "0.1.6";
+  };
+  deps.unicode_normalization."0.1.5" = {};
+  deps.unicode_width."0.1.4" = {};
+  deps.unicode_xid."0.0.4" = {};
+  deps.unreachable."1.0.0" = {
+    void = "1.0.2";
+  };
+  deps.url."1.6.0" = {
+    idna = "0.1.4";
+    matches = "0.1.6";
+    percent_encoding = "1.0.1";
+  };
+  deps.utf8_ranges."0.1.3" = {};
+  deps.uuid."0.7.1" = {
+    rand = "0.5.5";
+  };
+  deps.vcpkg."0.2.2" = {};
+  deps.vec_map."0.8.0" = {};
+  deps.version_check."0.1.3" = {};
+  deps.void."1.0.2" = {};
+  deps.want."0.0.6" = {
+    futures = "0.1.25";
+    log = "0.4.6";
+    try_lock = "0.2.2";
+  };
+  deps.winapi."0.2.8" = {};
+  deps.winapi."0.3.6" = {
+    winapi_i686_pc_windows_gnu = "0.4.0";
+    winapi_x86_64_pc_windows_gnu = "0.4.0";
+  };
+  deps.winapi_build."0.1.1" = {};
+  deps.winapi_i686_pc_windows_gnu."0.4.0" = {};
+  deps.winapi_x86_64_pc_windows_gnu."0.4.0" = {};
+  deps.ws2_32_sys."0.2.1" = {
+    winapi = "0.2.8";
+    winapi_build = "0.1.1";
+  };
+  deps.xattr."0.1.11" = {
+    libc = "0.2.44";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/cargo-download/crates-io.nix b/nixpkgs/pkgs/tools/package-management/cargo-download/crates-io.nix
new file mode 100644
index 000000000000..e0c0abf4dc6e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/cargo-download/crates-io.nix
@@ -0,0 +1,5289 @@
+{ lib, buildRustCrate, buildRustCrateHelpers }:
+with buildRustCrateHelpers;
+let inherit (lib.lists) fold;
+    inherit (lib.attrsets) recursiveUpdate;
+in
+rec {
+
+# adler32-1.0.2
+
+  crates.adler32."1.0.2" = deps: { features?(features_.adler32."1.0.2" deps {}) }: buildRustCrate {
+    crateName = "adler32";
+    version = "1.0.2";
+    description = "Minimal Adler32 implementation for Rust.";
+    authors = [ "Remi Rampin <remirampin@gmail.com>" ];
+    sha256 = "1974q3nysai026zhz24df506cxwi09jdzqksll4h7ibpb5n9g1d4";
+  };
+  features_.adler32."1.0.2" = deps: f: updateFeatures f ({
+    adler32."1.0.2".default = (f.adler32."1.0.2".default or true);
+  }) [];
+
+
+# end
+# aho-corasick-0.5.3
+
+  crates.aho_corasick."0.5.3" = deps: { features?(features_.aho_corasick."0.5.3" deps {}) }: buildRustCrate {
+    crateName = "aho-corasick";
+    version = "0.5.3";
+    description = "Fast multiple substring searching with finite state machines.";
+    authors = [ "Andrew Gallant <jamslam@gmail.com>" ];
+    sha256 = "1igab46mvgknga3sxkqc917yfff0wsjxjzabdigmh240p5qxqlnn";
+    libName = "aho_corasick";
+    crateBin =
+      [{  name = "aho-corasick-dot"; }];
+    dependencies = mapFeatures features ([
+      (crates."memchr"."${deps."aho_corasick"."0.5.3"."memchr"}" deps)
+    ]);
+  };
+  features_.aho_corasick."0.5.3" = deps: f: updateFeatures f ({
+    aho_corasick."0.5.3".default = (f.aho_corasick."0.5.3".default or true);
+    memchr."${deps.aho_corasick."0.5.3".memchr}".default = true;
+  }) [
+    (features_.memchr."${deps."aho_corasick"."0.5.3"."memchr"}" deps)
+  ];
+
+
+# end
+# ansi_term-0.9.0
+
+  crates.ansi_term."0.9.0" = deps: { features?(features_.ansi_term."0.9.0" deps {}) }: buildRustCrate {
+    crateName = "ansi_term";
+    version = "0.9.0";
+    description = "Library for ANSI terminal colours and styles (bold, underline)";
+    authors = [ "ogham@bsago.me" "Ryan Scheel (Havvy) <ryan.havvy@gmail.com>" ];
+    sha256 = "1vcd8m2hglrdi4zmqnkkz5zy3c73ifgii245k7vj6qr5dzpn9hij";
+  };
+  features_.ansi_term."0.9.0" = deps: f: updateFeatures f ({
+    ansi_term."0.9.0".default = (f.ansi_term."0.9.0".default or true);
+  }) [];
+
+
+# end
+# arrayvec-0.4.8
+
+  crates.arrayvec."0.4.8" = deps: { features?(features_.arrayvec."0.4.8" deps {}) }: buildRustCrate {
+    crateName = "arrayvec";
+    version = "0.4.8";
+    description = "A vector with fixed capacity, backed by an array (it can be stored on the stack too). Implements fixed capacity ArrayVec and ArrayString.";
+    authors = [ "bluss" ];
+    sha256 = "0zwpjdxgr0a11h9x7mkrif4wyx3c81b90paxjf326i86s13kib1g";
+    dependencies = mapFeatures features ([
+      (crates."nodrop"."${deps."arrayvec"."0.4.8"."nodrop"}" deps)
+    ]);
+    features = mkFeatures (features."arrayvec"."0.4.8" or {});
+  };
+  features_.arrayvec."0.4.8" = deps: f: updateFeatures f (rec {
+    arrayvec = fold recursiveUpdate {} [
+      { "0.4.8"."serde" =
+        (f.arrayvec."0.4.8"."serde" or false) ||
+        (f.arrayvec."0.4.8".serde-1 or false) ||
+        (arrayvec."0.4.8"."serde-1" or false); }
+      { "0.4.8"."std" =
+        (f.arrayvec."0.4.8"."std" or false) ||
+        (f.arrayvec."0.4.8".default or false) ||
+        (arrayvec."0.4.8"."default" or false); }
+      { "0.4.8".default = (f.arrayvec."0.4.8".default or true); }
+    ];
+    nodrop."${deps.arrayvec."0.4.8".nodrop}".default = (f.nodrop."${deps.arrayvec."0.4.8".nodrop}".default or false);
+  }) [
+    (features_.nodrop."${deps."arrayvec"."0.4.8"."nodrop"}" deps)
+  ];
+
+
+# end
+# atty-0.2.3
+
+  crates.atty."0.2.3" = deps: { features?(features_.atty."0.2.3" deps {}) }: buildRustCrate {
+    crateName = "atty";
+    version = "0.2.3";
+    description = "A simple interface for querying atty";
+    authors = [ "softprops <d.tangren@gmail.com>" ];
+    sha256 = "0zl0cjfgarp5y78nd755lpki5bbkj4hgmi88v265m543yg29i88f";
+    dependencies = (if kernel == "redox" then mapFeatures features ([
+      (crates."termion"."${deps."atty"."0.2.3"."termion"}" deps)
+    ]) else [])
+      ++ (if (kernel == "linux" || kernel == "darwin") then mapFeatures features ([
+      (crates."libc"."${deps."atty"."0.2.3"."libc"}" deps)
+    ]) else [])
+      ++ (if kernel == "windows" then mapFeatures features ([
+      (crates."kernel32_sys"."${deps."atty"."0.2.3"."kernel32_sys"}" deps)
+      (crates."winapi"."${deps."atty"."0.2.3"."winapi"}" deps)
+    ]) else []);
+  };
+  features_.atty."0.2.3" = deps: f: updateFeatures f ({
+    atty."0.2.3".default = (f.atty."0.2.3".default or true);
+    kernel32_sys."${deps.atty."0.2.3".kernel32_sys}".default = true;
+    libc."${deps.atty."0.2.3".libc}".default = (f.libc."${deps.atty."0.2.3".libc}".default or false);
+    termion."${deps.atty."0.2.3".termion}".default = true;
+    winapi."${deps.atty."0.2.3".winapi}".default = true;
+  }) [
+    (features_.termion."${deps."atty"."0.2.3"."termion"}" deps)
+    (features_.libc."${deps."atty"."0.2.3"."libc"}" deps)
+    (features_.kernel32_sys."${deps."atty"."0.2.3"."kernel32_sys"}" deps)
+    (features_.winapi."${deps."atty"."0.2.3"."winapi"}" deps)
+  ];
+
+
+# end
+# base64-0.9.3
+
+  crates.base64."0.9.3" = deps: { features?(features_.base64."0.9.3" deps {}) }: buildRustCrate {
+    crateName = "base64";
+    version = "0.9.3";
+    description = "encodes and decodes base64 as bytes or utf8";
+    authors = [ "Alice Maz <alice@alicemaz.com>" "Marshall Pierce <marshall@mpierce.org>" ];
+    sha256 = "11hhz8ln4zbpn2h2gm9fbbb9j254wrd4fpmddlyah2rrnqsmmqkd";
+    dependencies = mapFeatures features ([
+      (crates."byteorder"."${deps."base64"."0.9.3"."byteorder"}" deps)
+      (crates."safemem"."${deps."base64"."0.9.3"."safemem"}" deps)
+    ]);
+  };
+  features_.base64."0.9.3" = deps: f: updateFeatures f ({
+    base64."0.9.3".default = (f.base64."0.9.3".default or true);
+    byteorder."${deps.base64."0.9.3".byteorder}".default = true;
+    safemem."${deps.base64."0.9.3".safemem}".default = true;
+  }) [
+    (features_.byteorder."${deps."base64"."0.9.3"."byteorder"}" deps)
+    (features_.safemem."${deps."base64"."0.9.3"."safemem"}" deps)
+  ];
+
+
+# end
+# bitflags-0.7.0
+
+  crates.bitflags."0.7.0" = deps: { features?(features_.bitflags."0.7.0" deps {}) }: buildRustCrate {
+    crateName = "bitflags";
+    version = "0.7.0";
+    description = "A macro to generate structures which behave like bitflags.\n";
+    authors = [ "The Rust Project Developers" ];
+    sha256 = "1hr72xg5slm0z4pxs2hiy4wcyx3jva70h58b7mid8l0a4c8f7gn5";
+  };
+  features_.bitflags."0.7.0" = deps: f: updateFeatures f ({
+    bitflags."0.7.0".default = (f.bitflags."0.7.0".default or true);
+  }) [];
+
+
+# end
+# bitflags-0.9.1
+
+  crates.bitflags."0.9.1" = deps: { features?(features_.bitflags."0.9.1" deps {}) }: buildRustCrate {
+    crateName = "bitflags";
+    version = "0.9.1";
+    description = "A macro to generate structures which behave like bitflags.\n";
+    authors = [ "The Rust Project Developers" ];
+    sha256 = "18h073l5jd88rx4qdr95fjddr9rk79pb1aqnshzdnw16cfmb9rws";
+    features = mkFeatures (features."bitflags"."0.9.1" or {});
+  };
+  features_.bitflags."0.9.1" = deps: f: updateFeatures f (rec {
+    bitflags = fold recursiveUpdate {} [
+      { "0.9.1"."example_generated" =
+        (f.bitflags."0.9.1"."example_generated" or false) ||
+        (f.bitflags."0.9.1".default or false) ||
+        (bitflags."0.9.1"."default" or false); }
+      { "0.9.1".default = (f.bitflags."0.9.1".default or true); }
+    ];
+  }) [];
+
+
+# end
+# bitflags-1.0.4
+
+  crates.bitflags."1.0.4" = deps: { features?(features_.bitflags."1.0.4" deps {}) }: buildRustCrate {
+    crateName = "bitflags";
+    version = "1.0.4";
+    description = "A macro to generate structures which behave like bitflags.\n";
+    authors = [ "The Rust Project Developers" ];
+    sha256 = "1g1wmz2001qmfrd37dnd5qiss5njrw26aywmg6yhkmkbyrhjxb08";
+    features = mkFeatures (features."bitflags"."1.0.4" or {});
+  };
+  features_.bitflags."1.0.4" = deps: f: updateFeatures f ({
+    bitflags."1.0.4".default = (f.bitflags."1.0.4".default or true);
+  }) [];
+
+
+# end
+# byteorder-1.1.0
+
+  crates.byteorder."1.1.0" = deps: { features?(features_.byteorder."1.1.0" deps {}) }: buildRustCrate {
+    crateName = "byteorder";
+    version = "1.1.0";
+    description = "Library for reading/writing numbers in big-endian and little-endian.";
+    authors = [ "Andrew Gallant <jamslam@gmail.com>" ];
+    sha256 = "1i2n0161jm00zvzh4bncgv9zrwa6ydbxdn5j4bx0wwn7rvi9zycp";
+    features = mkFeatures (features."byteorder"."1.1.0" or {});
+  };
+  features_.byteorder."1.1.0" = deps: f: updateFeatures f (rec {
+    byteorder = fold recursiveUpdate {} [
+      { "1.1.0"."std" =
+        (f.byteorder."1.1.0"."std" or false) ||
+        (f.byteorder."1.1.0".default or false) ||
+        (byteorder."1.1.0"."default" or false); }
+      { "1.1.0".default = (f.byteorder."1.1.0".default or true); }
+    ];
+  }) [];
+
+
+# end
+# bytes-0.4.11
+
+  crates.bytes."0.4.11" = deps: { features?(features_.bytes."0.4.11" deps {}) }: buildRustCrate {
+    crateName = "bytes";
+    version = "0.4.11";
+    description = "Types and traits for working with bytes";
+    authors = [ "Carl Lerche <me@carllerche.com>" ];
+    sha256 = "1lk8bnxcd8shiizarf0n6ljmj1542n90jw6lz6i270gxl7rzplmh";
+    dependencies = mapFeatures features ([
+      (crates."byteorder"."${deps."bytes"."0.4.11"."byteorder"}" deps)
+      (crates."iovec"."${deps."bytes"."0.4.11"."iovec"}" deps)
+    ]);
+    features = mkFeatures (features."bytes"."0.4.11" or {});
+  };
+  features_.bytes."0.4.11" = deps: f: updateFeatures f (rec {
+    byteorder = fold recursiveUpdate {} [
+      { "${deps.bytes."0.4.11".byteorder}"."i128" =
+        (f.byteorder."${deps.bytes."0.4.11".byteorder}"."i128" or false) ||
+        (bytes."0.4.11"."i128" or false) ||
+        (f."bytes"."0.4.11"."i128" or false); }
+      { "${deps.bytes."0.4.11".byteorder}".default = true; }
+    ];
+    bytes."0.4.11".default = (f.bytes."0.4.11".default or true);
+    iovec."${deps.bytes."0.4.11".iovec}".default = true;
+  }) [
+    (features_.byteorder."${deps."bytes"."0.4.11"."byteorder"}" deps)
+    (features_.iovec."${deps."bytes"."0.4.11"."iovec"}" deps)
+  ];
+
+
+# end
+# cargo-download-0.1.2
+
+  crates.cargo_download."0.1.2" = deps: { features?(features_.cargo_download."0.1.2" deps {}) }: buildRustCrate {
+    crateName = "cargo-download";
+    version = "0.1.2";
+    description = "Cargo subcommand for downloading crate sources";
+    authors = [ "Karol Kuczmarski <karol.kuczmarski@gmail.com>" ];
+    sha256 = "1gfn0iabiriq0n9sqkyp2g73rw12mr9ng61fx198xaffflxk7g36";
+    crateBin =
+      [{  name = "cargo-download"; }];
+    dependencies = mapFeatures features ([
+      (crates."ansi_term"."${deps."cargo_download"."0.1.2"."ansi_term"}" deps)
+      (crates."clap"."${deps."cargo_download"."0.1.2"."clap"}" deps)
+      (crates."conv"."${deps."cargo_download"."0.1.2"."conv"}" deps)
+      (crates."derive_error"."${deps."cargo_download"."0.1.2"."derive_error"}" deps)
+      (crates."exitcode"."${deps."cargo_download"."0.1.2"."exitcode"}" deps)
+      (crates."flate2"."${deps."cargo_download"."0.1.2"."flate2"}" deps)
+      (crates."isatty"."${deps."cargo_download"."0.1.2"."isatty"}" deps)
+      (crates."itertools"."${deps."cargo_download"."0.1.2"."itertools"}" deps)
+      (crates."lazy_static"."${deps."cargo_download"."0.1.2"."lazy_static"}" deps)
+      (crates."log"."${deps."cargo_download"."0.1.2"."log"}" deps)
+      (crates."maplit"."${deps."cargo_download"."0.1.2"."maplit"}" deps)
+      (crates."reqwest"."${deps."cargo_download"."0.1.2"."reqwest"}" deps)
+      (crates."semver"."${deps."cargo_download"."0.1.2"."semver"}" deps)
+      (crates."serde_json"."${deps."cargo_download"."0.1.2"."serde_json"}" deps)
+      (crates."slog"."${deps."cargo_download"."0.1.2"."slog"}" deps)
+      (crates."slog_envlogger"."${deps."cargo_download"."0.1.2"."slog_envlogger"}" deps)
+      (crates."slog_stdlog"."${deps."cargo_download"."0.1.2"."slog_stdlog"}" deps)
+      (crates."slog_stream"."${deps."cargo_download"."0.1.2"."slog_stream"}" deps)
+      (crates."tar"."${deps."cargo_download"."0.1.2"."tar"}" deps)
+      (crates."time"."${deps."cargo_download"."0.1.2"."time"}" deps)
+    ]);
+  };
+  features_.cargo_download."0.1.2" = deps: f: updateFeatures f ({
+    ansi_term."${deps.cargo_download."0.1.2".ansi_term}".default = true;
+    cargo_download."0.1.2".default = (f.cargo_download."0.1.2".default or true);
+    clap."${deps.cargo_download."0.1.2".clap}".default = true;
+    conv."${deps.cargo_download."0.1.2".conv}".default = true;
+    derive_error."${deps.cargo_download."0.1.2".derive_error}".default = true;
+    exitcode."${deps.cargo_download."0.1.2".exitcode}".default = true;
+    flate2."${deps.cargo_download."0.1.2".flate2}".default = true;
+    isatty."${deps.cargo_download."0.1.2".isatty}".default = true;
+    itertools."${deps.cargo_download."0.1.2".itertools}".default = true;
+    lazy_static."${deps.cargo_download."0.1.2".lazy_static}".default = true;
+    log."${deps.cargo_download."0.1.2".log}".default = true;
+    maplit."${deps.cargo_download."0.1.2".maplit}".default = true;
+    reqwest."${deps.cargo_download."0.1.2".reqwest}".default = true;
+    semver."${deps.cargo_download."0.1.2".semver}".default = true;
+    serde_json."${deps.cargo_download."0.1.2".serde_json}".default = true;
+    slog."${deps.cargo_download."0.1.2".slog}".default = true;
+    slog_envlogger."${deps.cargo_download."0.1.2".slog_envlogger}".default = true;
+    slog_stdlog."${deps.cargo_download."0.1.2".slog_stdlog}".default = true;
+    slog_stream."${deps.cargo_download."0.1.2".slog_stream}".default = true;
+    tar."${deps.cargo_download."0.1.2".tar}".default = true;
+    time."${deps.cargo_download."0.1.2".time}".default = true;
+  }) [
+    (features_.ansi_term."${deps."cargo_download"."0.1.2"."ansi_term"}" deps)
+    (features_.clap."${deps."cargo_download"."0.1.2"."clap"}" deps)
+    (features_.conv."${deps."cargo_download"."0.1.2"."conv"}" deps)
+    (features_.derive_error."${deps."cargo_download"."0.1.2"."derive_error"}" deps)
+    (features_.exitcode."${deps."cargo_download"."0.1.2"."exitcode"}" deps)
+    (features_.flate2."${deps."cargo_download"."0.1.2"."flate2"}" deps)
+    (features_.isatty."${deps."cargo_download"."0.1.2"."isatty"}" deps)
+    (features_.itertools."${deps."cargo_download"."0.1.2"."itertools"}" deps)
+    (features_.lazy_static."${deps."cargo_download"."0.1.2"."lazy_static"}" deps)
+    (features_.log."${deps."cargo_download"."0.1.2"."log"}" deps)
+    (features_.maplit."${deps."cargo_download"."0.1.2"."maplit"}" deps)
+    (features_.reqwest."${deps."cargo_download"."0.1.2"."reqwest"}" deps)
+    (features_.semver."${deps."cargo_download"."0.1.2"."semver"}" deps)
+    (features_.serde_json."${deps."cargo_download"."0.1.2"."serde_json"}" deps)
+    (features_.slog."${deps."cargo_download"."0.1.2"."slog"}" deps)
+    (features_.slog_envlogger."${deps."cargo_download"."0.1.2"."slog_envlogger"}" deps)
+    (features_.slog_stdlog."${deps."cargo_download"."0.1.2"."slog_stdlog"}" deps)
+    (features_.slog_stream."${deps."cargo_download"."0.1.2"."slog_stream"}" deps)
+    (features_.tar."${deps."cargo_download"."0.1.2"."tar"}" deps)
+    (features_.time."${deps."cargo_download"."0.1.2"."time"}" deps)
+  ];
+
+
+# end
+# case-0.1.0
+
+  crates.case."0.1.0" = deps: { features?(features_.case."0.1.0" deps {}) }: buildRustCrate {
+    crateName = "case";
+    version = "0.1.0";
+    description = "A set of letter case string helpers";
+    authors = [ "Skyler Lipthay <skyler.lipthay@gmail.com>" ];
+    sha256 = "06i1x3wqv30rkvlgj134qf9vzxhzz28bz41mm0rgki0i0f7gf96n";
+  };
+  features_.case."0.1.0" = deps: f: updateFeatures f ({
+    case."0.1.0".default = (f.case."0.1.0".default or true);
+  }) [];
+
+
+# end
+# cc-1.0.3
+
+  crates.cc."1.0.3" = deps: { features?(features_.cc."1.0.3" deps {}) }: buildRustCrate {
+    crateName = "cc";
+    version = "1.0.3";
+    description = "A build-time dependency for Cargo build scripts to assist in invoking the native\nC compiler to compile native C code into a static archive to be linked into Rust\ncode.\n";
+    authors = [ "Alex Crichton <alex@alexcrichton.com>" ];
+    sha256 = "193pwqgh79w6k0k29svyds5nnlrwx44myqyrw605d5jj4yk2zmpr";
+    dependencies = mapFeatures features ([
+]);
+    features = mkFeatures (features."cc"."1.0.3" or {});
+  };
+  features_.cc."1.0.3" = deps: f: updateFeatures f (rec {
+    cc = fold recursiveUpdate {} [
+      { "1.0.3"."rayon" =
+        (f.cc."1.0.3"."rayon" or false) ||
+        (f.cc."1.0.3".parallel or false) ||
+        (cc."1.0.3"."parallel" or false); }
+      { "1.0.3".default = (f.cc."1.0.3".default or true); }
+    ];
+  }) [];
+
+
+# end
+# cfg-if-0.1.2
+
+  crates.cfg_if."0.1.2" = deps: { features?(features_.cfg_if."0.1.2" deps {}) }: buildRustCrate {
+    crateName = "cfg-if";
+    version = "0.1.2";
+    description = "A macro to ergonomically define an item depending on a large number of #[cfg]\nparameters. Structured like an if-else chain, the first matching branch is the\nitem that gets emitted.\n";
+    authors = [ "Alex Crichton <alex@alexcrichton.com>" ];
+    sha256 = "0x06hvrrqy96m97593823vvxcgvjaxckghwyy2jcyc8qc7c6cyhi";
+  };
+  features_.cfg_if."0.1.2" = deps: f: updateFeatures f ({
+    cfg_if."0.1.2".default = (f.cfg_if."0.1.2".default or true);
+  }) [];
+
+
+# end
+# chrono-0.2.25
+
+  crates.chrono."0.2.25" = deps: { features?(features_.chrono."0.2.25" deps {}) }: buildRustCrate {
+    crateName = "chrono";
+    version = "0.2.25";
+    description = "Date and time library for Rust";
+    authors = [ "Kang Seonghoon <public+rust@mearie.org>" ];
+    sha256 = "0gsvqk8cnmm43qj3xyngqvfqh50cbdbqas7ik0wjgnvknirmmca7";
+    dependencies = mapFeatures features ([
+      (crates."num"."${deps."chrono"."0.2.25"."num"}" deps)
+      (crates."time"."${deps."chrono"."0.2.25"."time"}" deps)
+    ]);
+  };
+  features_.chrono."0.2.25" = deps: f: updateFeatures f ({
+    chrono."0.2.25".default = (f.chrono."0.2.25".default or true);
+    num."${deps.chrono."0.2.25".num}".default = (f.num."${deps.chrono."0.2.25".num}".default or false);
+    time."${deps.chrono."0.2.25".time}".default = true;
+  }) [
+    (features_.num."${deps."chrono"."0.2.25"."num"}" deps)
+    (features_.time."${deps."chrono"."0.2.25"."time"}" deps)
+  ];
+
+
+# end
+# clap-2.27.1
+
+  crates.clap."2.27.1" = deps: { features?(features_.clap."2.27.1" deps {}) }: buildRustCrate {
+    crateName = "clap";
+    version = "2.27.1";
+    description = "A simple to use, efficient, and full featured  Command Line Argument Parser\n";
+    authors = [ "Kevin K. <kbknapp@gmail.com>" ];
+    sha256 = "0zx8rskqfl3iqn3vlyxzyd99hpifa7bm871akhxpz9wvrm688zaj";
+    dependencies = mapFeatures features ([
+      (crates."bitflags"."${deps."clap"."2.27.1"."bitflags"}" deps)
+      (crates."textwrap"."${deps."clap"."2.27.1"."textwrap"}" deps)
+      (crates."unicode_width"."${deps."clap"."2.27.1"."unicode_width"}" deps)
+    ]
+      ++ (if features.clap."2.27.1".ansi_term or false then [ (crates.ansi_term."${deps."clap"."2.27.1".ansi_term}" deps) ] else [])
+      ++ (if features.clap."2.27.1".atty or false then [ (crates.atty."${deps."clap"."2.27.1".atty}" deps) ] else [])
+      ++ (if features.clap."2.27.1".strsim or false then [ (crates.strsim."${deps."clap"."2.27.1".strsim}" deps) ] else [])
+      ++ (if features.clap."2.27.1".vec_map or false then [ (crates.vec_map."${deps."clap"."2.27.1".vec_map}" deps) ] else []));
+    features = mkFeatures (features."clap"."2.27.1" or {});
+  };
+  features_.clap."2.27.1" = deps: f: updateFeatures f (rec {
+    ansi_term."${deps.clap."2.27.1".ansi_term}".default = true;
+    atty."${deps.clap."2.27.1".atty}".default = true;
+    bitflags."${deps.clap."2.27.1".bitflags}".default = true;
+    clap = fold recursiveUpdate {} [
+      { "2.27.1"."ansi_term" =
+        (f.clap."2.27.1"."ansi_term" or false) ||
+        (f.clap."2.27.1".color or false) ||
+        (clap."2.27.1"."color" or false); }
+      { "2.27.1"."atty" =
+        (f.clap."2.27.1"."atty" or false) ||
+        (f.clap."2.27.1".color or false) ||
+        (clap."2.27.1"."color" or false); }
+      { "2.27.1"."clippy" =
+        (f.clap."2.27.1"."clippy" or false) ||
+        (f.clap."2.27.1".lints or false) ||
+        (clap."2.27.1"."lints" or false); }
+      { "2.27.1"."color" =
+        (f.clap."2.27.1"."color" or false) ||
+        (f.clap."2.27.1".default or false) ||
+        (clap."2.27.1"."default" or false); }
+      { "2.27.1"."strsim" =
+        (f.clap."2.27.1"."strsim" or false) ||
+        (f.clap."2.27.1".suggestions or false) ||
+        (clap."2.27.1"."suggestions" or false); }
+      { "2.27.1"."suggestions" =
+        (f.clap."2.27.1"."suggestions" or false) ||
+        (f.clap."2.27.1".default or false) ||
+        (clap."2.27.1"."default" or false); }
+      { "2.27.1"."term_size" =
+        (f.clap."2.27.1"."term_size" or false) ||
+        (f.clap."2.27.1".wrap_help or false) ||
+        (clap."2.27.1"."wrap_help" or false); }
+      { "2.27.1"."vec_map" =
+        (f.clap."2.27.1"."vec_map" or false) ||
+        (f.clap."2.27.1".default or false) ||
+        (clap."2.27.1"."default" or false); }
+      { "2.27.1"."yaml" =
+        (f.clap."2.27.1"."yaml" or false) ||
+        (f.clap."2.27.1".doc or false) ||
+        (clap."2.27.1"."doc" or false); }
+      { "2.27.1"."yaml-rust" =
+        (f.clap."2.27.1"."yaml-rust" or false) ||
+        (f.clap."2.27.1".yaml or false) ||
+        (clap."2.27.1"."yaml" or false); }
+      { "2.27.1".default = (f.clap."2.27.1".default or true); }
+    ];
+    strsim."${deps.clap."2.27.1".strsim}".default = true;
+    textwrap = fold recursiveUpdate {} [
+      { "${deps.clap."2.27.1".textwrap}"."term_size" =
+        (f.textwrap."${deps.clap."2.27.1".textwrap}"."term_size" or false) ||
+        (clap."2.27.1"."wrap_help" or false) ||
+        (f."clap"."2.27.1"."wrap_help" or false); }
+      { "${deps.clap."2.27.1".textwrap}".default = true; }
+    ];
+    unicode_width."${deps.clap."2.27.1".unicode_width}".default = true;
+    vec_map."${deps.clap."2.27.1".vec_map}".default = true;
+  }) [
+    (features_.ansi_term."${deps."clap"."2.27.1"."ansi_term"}" deps)
+    (features_.atty."${deps."clap"."2.27.1"."atty"}" deps)
+    (features_.bitflags."${deps."clap"."2.27.1"."bitflags"}" deps)
+    (features_.strsim."${deps."clap"."2.27.1"."strsim"}" deps)
+    (features_.textwrap."${deps."clap"."2.27.1"."textwrap"}" deps)
+    (features_.unicode_width."${deps."clap"."2.27.1"."unicode_width"}" deps)
+    (features_.vec_map."${deps."clap"."2.27.1"."vec_map"}" deps)
+  ];
+
+
+# end
+# cloudabi-0.0.3
+
+  crates.cloudabi."0.0.3" = deps: { features?(features_.cloudabi."0.0.3" deps {}) }: buildRustCrate {
+    crateName = "cloudabi";
+    version = "0.0.3";
+    description = "Low level interface to CloudABI. Contains all syscalls and related types.";
+    authors = [ "Nuxi (https://nuxi.nl/) and contributors" ];
+    sha256 = "1z9lby5sr6vslfd14d6igk03s7awf91mxpsfmsp3prxbxlk0x7h5";
+    libPath = "cloudabi.rs";
+    dependencies = mapFeatures features ([
+    ]
+      ++ (if features.cloudabi."0.0.3".bitflags or false then [ (crates.bitflags."${deps."cloudabi"."0.0.3".bitflags}" deps) ] else []));
+    features = mkFeatures (features."cloudabi"."0.0.3" or {});
+  };
+  features_.cloudabi."0.0.3" = deps: f: updateFeatures f (rec {
+    bitflags."${deps.cloudabi."0.0.3".bitflags}".default = true;
+    cloudabi = fold recursiveUpdate {} [
+      { "0.0.3"."bitflags" =
+        (f.cloudabi."0.0.3"."bitflags" or false) ||
+        (f.cloudabi."0.0.3".default or false) ||
+        (cloudabi."0.0.3"."default" or false); }
+      { "0.0.3".default = (f.cloudabi."0.0.3".default or true); }
+    ];
+  }) [
+    (features_.bitflags."${deps."cloudabi"."0.0.3"."bitflags"}" deps)
+  ];
+
+
+# end
+# conv-0.3.3
+
+  crates.conv."0.3.3" = deps: { features?(features_.conv."0.3.3" deps {}) }: buildRustCrate {
+    crateName = "conv";
+    version = "0.3.3";
+    description = "This crate provides a number of conversion traits with more specific semantics than those provided by 'as' or 'From'/'Into'.";
+    authors = [ "Daniel Keep <daniel.keep@gmail.com>" ];
+    sha256 = "08rl72k1a48xah0ar5l9v1bw19pp8jdw2pdkd3vvj9ijsyyg9yik";
+    dependencies = mapFeatures features ([
+      (crates."custom_derive"."${deps."conv"."0.3.3"."custom_derive"}" deps)
+    ]);
+  };
+  features_.conv."0.3.3" = deps: f: updateFeatures f ({
+    conv."0.3.3".default = (f.conv."0.3.3".default or true);
+    custom_derive."${deps.conv."0.3.3".custom_derive}".default = true;
+  }) [
+    (features_.custom_derive."${deps."conv"."0.3.3"."custom_derive"}" deps)
+  ];
+
+
+# end
+# core-foundation-0.5.1
+
+  crates.core_foundation."0.5.1" = deps: { features?(features_.core_foundation."0.5.1" deps {}) }: buildRustCrate {
+    crateName = "core-foundation";
+    version = "0.5.1";
+    description = "Bindings to Core Foundation for OS X";
+    authors = [ "The Servo Project Developers" ];
+    sha256 = "03s11z23rb1kk325c34rmsbd7k0l5rkzk4q6id55n174z28zqln1";
+    dependencies = mapFeatures features ([
+      (crates."core_foundation_sys"."${deps."core_foundation"."0.5.1"."core_foundation_sys"}" deps)
+      (crates."libc"."${deps."core_foundation"."0.5.1"."libc"}" deps)
+    ]);
+    features = mkFeatures (features."core_foundation"."0.5.1" or {});
+  };
+  features_.core_foundation."0.5.1" = deps: f: updateFeatures f (rec {
+    core_foundation = fold recursiveUpdate {} [
+      { "0.5.1"."chrono" =
+        (f.core_foundation."0.5.1"."chrono" or false) ||
+        (f.core_foundation."0.5.1".with-chrono or false) ||
+        (core_foundation."0.5.1"."with-chrono" or false); }
+      { "0.5.1"."uuid" =
+        (f.core_foundation."0.5.1"."uuid" or false) ||
+        (f.core_foundation."0.5.1".with-uuid or false) ||
+        (core_foundation."0.5.1"."with-uuid" or false); }
+      { "0.5.1".default = (f.core_foundation."0.5.1".default or true); }
+    ];
+    core_foundation_sys = fold recursiveUpdate {} [
+      { "${deps.core_foundation."0.5.1".core_foundation_sys}"."mac_os_10_7_support" =
+        (f.core_foundation_sys."${deps.core_foundation."0.5.1".core_foundation_sys}"."mac_os_10_7_support" or false) ||
+        (core_foundation."0.5.1"."mac_os_10_7_support" or false) ||
+        (f."core_foundation"."0.5.1"."mac_os_10_7_support" or false); }
+      { "${deps.core_foundation."0.5.1".core_foundation_sys}"."mac_os_10_8_features" =
+        (f.core_foundation_sys."${deps.core_foundation."0.5.1".core_foundation_sys}"."mac_os_10_8_features" or false) ||
+        (core_foundation."0.5.1"."mac_os_10_8_features" or false) ||
+        (f."core_foundation"."0.5.1"."mac_os_10_8_features" or false); }
+      { "${deps.core_foundation."0.5.1".core_foundation_sys}".default = true; }
+    ];
+    libc."${deps.core_foundation."0.5.1".libc}".default = true;
+  }) [
+    (features_.core_foundation_sys."${deps."core_foundation"."0.5.1"."core_foundation_sys"}" deps)
+    (features_.libc."${deps."core_foundation"."0.5.1"."libc"}" deps)
+  ];
+
+
+# end
+# core-foundation-sys-0.5.1
+
+  crates.core_foundation_sys."0.5.1" = deps: { features?(features_.core_foundation_sys."0.5.1" deps {}) }: buildRustCrate {
+    crateName = "core-foundation-sys";
+    version = "0.5.1";
+    description = "Bindings to Core Foundation for OS X";
+    authors = [ "The Servo Project Developers" ];
+    sha256 = "0qbrasll5nw1bgr071i8s8jc975d0y4qfysf868bh9xp0f6vcypa";
+    build = "build.rs";
+    dependencies = mapFeatures features ([
+      (crates."libc"."${deps."core_foundation_sys"."0.5.1"."libc"}" deps)
+    ]);
+    features = mkFeatures (features."core_foundation_sys"."0.5.1" or {});
+  };
+  features_.core_foundation_sys."0.5.1" = deps: f: updateFeatures f ({
+    core_foundation_sys."0.5.1".default = (f.core_foundation_sys."0.5.1".default or true);
+    libc."${deps.core_foundation_sys."0.5.1".libc}".default = true;
+  }) [
+    (features_.libc."${deps."core_foundation_sys"."0.5.1"."libc"}" deps)
+  ];
+
+
+# end
+# crc32fast-1.1.1
+
+  crates.crc32fast."1.1.1" = deps: { features?(features_.crc32fast."1.1.1" deps {}) }: buildRustCrate {
+    crateName = "crc32fast";
+    version = "1.1.1";
+    description = "Fast, SIMD-accelerated CRC32 (IEEE) checksum computation";
+    authors = [ "Sam Rijs <srijs@airpost.net>" "Alex Crichton <alex@alexcrichton.com>" ];
+    sha256 = "1rwvhb98w41mk5phr84mryally58f68h0v933772gdxqvqbcayqy";
+  };
+  features_.crc32fast."1.1.1" = deps: f: updateFeatures f ({
+    crc32fast."1.1.1".default = (f.crc32fast."1.1.1".default or true);
+  }) [];
+
+
+# end
+# crossbeam-0.2.10
+
+  crates.crossbeam."0.2.10" = deps: { features?(features_.crossbeam."0.2.10" deps {}) }: buildRustCrate {
+    crateName = "crossbeam";
+    version = "0.2.10";
+    description = "Support for lock-free data structures, synchronizers, and parallel programming";
+    authors = [ "Aaron Turon <aturon@mozilla.com>" ];
+    sha256 = "1k1a4q5gy7zakiw39hdzrblnw3kk4nsqmkdp1dpzh8h558140rhq";
+    features = mkFeatures (features."crossbeam"."0.2.10" or {});
+  };
+  features_.crossbeam."0.2.10" = deps: f: updateFeatures f ({
+    crossbeam."0.2.10".default = (f.crossbeam."0.2.10".default or true);
+  }) [];
+
+
+# end
+# crossbeam-deque-0.6.2
+
+  crates.crossbeam_deque."0.6.2" = deps: { features?(features_.crossbeam_deque."0.6.2" deps {}) }: buildRustCrate {
+    crateName = "crossbeam-deque";
+    version = "0.6.2";
+    description = "Concurrent work-stealing deque";
+    authors = [ "The Crossbeam Project Developers" ];
+    sha256 = "0qjdpq03snj6xp5gydgy1bdd5zzwpdxa57vhky3mf4djxiq81ara";
+    dependencies = mapFeatures features ([
+      (crates."crossbeam_epoch"."${deps."crossbeam_deque"."0.6.2"."crossbeam_epoch"}" deps)
+      (crates."crossbeam_utils"."${deps."crossbeam_deque"."0.6.2"."crossbeam_utils"}" deps)
+    ]);
+  };
+  features_.crossbeam_deque."0.6.2" = deps: f: updateFeatures f ({
+    crossbeam_deque."0.6.2".default = (f.crossbeam_deque."0.6.2".default or true);
+    crossbeam_epoch."${deps.crossbeam_deque."0.6.2".crossbeam_epoch}".default = true;
+    crossbeam_utils."${deps.crossbeam_deque."0.6.2".crossbeam_utils}".default = true;
+  }) [
+    (features_.crossbeam_epoch."${deps."crossbeam_deque"."0.6.2"."crossbeam_epoch"}" deps)
+    (features_.crossbeam_utils."${deps."crossbeam_deque"."0.6.2"."crossbeam_utils"}" deps)
+  ];
+
+
+# end
+# crossbeam-epoch-0.6.1
+
+  crates.crossbeam_epoch."0.6.1" = deps: { features?(features_.crossbeam_epoch."0.6.1" deps {}) }: buildRustCrate {
+    crateName = "crossbeam-epoch";
+    version = "0.6.1";
+    description = "Epoch-based garbage collection";
+    authors = [ "The Crossbeam Project Developers" ];
+    sha256 = "0qlwzsf2xmdjbh6pv9bxra2qdq72cmywq4fq1q114zw2s06zr039";
+    dependencies = mapFeatures features ([
+      (crates."arrayvec"."${deps."crossbeam_epoch"."0.6.1"."arrayvec"}" deps)
+      (crates."cfg_if"."${deps."crossbeam_epoch"."0.6.1"."cfg_if"}" deps)
+      (crates."crossbeam_utils"."${deps."crossbeam_epoch"."0.6.1"."crossbeam_utils"}" deps)
+      (crates."memoffset"."${deps."crossbeam_epoch"."0.6.1"."memoffset"}" deps)
+      (crates."scopeguard"."${deps."crossbeam_epoch"."0.6.1"."scopeguard"}" deps)
+    ]
+      ++ (if features.crossbeam_epoch."0.6.1".lazy_static or false then [ (crates.lazy_static."${deps."crossbeam_epoch"."0.6.1".lazy_static}" deps) ] else []));
+    features = mkFeatures (features."crossbeam_epoch"."0.6.1" or {});
+  };
+  features_.crossbeam_epoch."0.6.1" = deps: f: updateFeatures f (rec {
+    arrayvec = fold recursiveUpdate {} [
+      { "${deps.crossbeam_epoch."0.6.1".arrayvec}"."use_union" =
+        (f.arrayvec."${deps.crossbeam_epoch."0.6.1".arrayvec}"."use_union" or false) ||
+        (crossbeam_epoch."0.6.1"."nightly" or false) ||
+        (f."crossbeam_epoch"."0.6.1"."nightly" or false); }
+      { "${deps.crossbeam_epoch."0.6.1".arrayvec}".default = (f.arrayvec."${deps.crossbeam_epoch."0.6.1".arrayvec}".default or false); }
+    ];
+    cfg_if."${deps.crossbeam_epoch."0.6.1".cfg_if}".default = true;
+    crossbeam_epoch = fold recursiveUpdate {} [
+      { "0.6.1"."lazy_static" =
+        (f.crossbeam_epoch."0.6.1"."lazy_static" or false) ||
+        (f.crossbeam_epoch."0.6.1".std or false) ||
+        (crossbeam_epoch."0.6.1"."std" or false); }
+      { "0.6.1"."std" =
+        (f.crossbeam_epoch."0.6.1"."std" or false) ||
+        (f.crossbeam_epoch."0.6.1".default or false) ||
+        (crossbeam_epoch."0.6.1"."default" or false); }
+      { "0.6.1".default = (f.crossbeam_epoch."0.6.1".default or true); }
+    ];
+    crossbeam_utils = fold recursiveUpdate {} [
+      { "${deps.crossbeam_epoch."0.6.1".crossbeam_utils}"."std" =
+        (f.crossbeam_utils."${deps.crossbeam_epoch."0.6.1".crossbeam_utils}"."std" or false) ||
+        (crossbeam_epoch."0.6.1"."std" or false) ||
+        (f."crossbeam_epoch"."0.6.1"."std" or false); }
+      { "${deps.crossbeam_epoch."0.6.1".crossbeam_utils}".default = (f.crossbeam_utils."${deps.crossbeam_epoch."0.6.1".crossbeam_utils}".default or false); }
+    ];
+    lazy_static."${deps.crossbeam_epoch."0.6.1".lazy_static}".default = true;
+    memoffset."${deps.crossbeam_epoch."0.6.1".memoffset}".default = true;
+    scopeguard."${deps.crossbeam_epoch."0.6.1".scopeguard}".default = (f.scopeguard."${deps.crossbeam_epoch."0.6.1".scopeguard}".default or false);
+  }) [
+    (features_.arrayvec."${deps."crossbeam_epoch"."0.6.1"."arrayvec"}" deps)
+    (features_.cfg_if."${deps."crossbeam_epoch"."0.6.1"."cfg_if"}" deps)
+    (features_.crossbeam_utils."${deps."crossbeam_epoch"."0.6.1"."crossbeam_utils"}" deps)
+    (features_.lazy_static."${deps."crossbeam_epoch"."0.6.1"."lazy_static"}" deps)
+    (features_.memoffset."${deps."crossbeam_epoch"."0.6.1"."memoffset"}" deps)
+    (features_.scopeguard."${deps."crossbeam_epoch"."0.6.1"."scopeguard"}" deps)
+  ];
+
+
+# end
+# crossbeam-utils-0.6.1
+
+  crates.crossbeam_utils."0.6.1" = deps: { features?(features_.crossbeam_utils."0.6.1" deps {}) }: buildRustCrate {
+    crateName = "crossbeam-utils";
+    version = "0.6.1";
+    description = "Utilities for concurrent programming";
+    authors = [ "The Crossbeam Project Developers" ];
+    sha256 = "031lk6ls49yvwkdxhjm4fvg81iww01h108jq1cnlh88yzbcnwn2c";
+    dependencies = mapFeatures features ([
+      (crates."cfg_if"."${deps."crossbeam_utils"."0.6.1"."cfg_if"}" deps)
+    ]);
+    features = mkFeatures (features."crossbeam_utils"."0.6.1" or {});
+  };
+  features_.crossbeam_utils."0.6.1" = deps: f: updateFeatures f (rec {
+    cfg_if."${deps.crossbeam_utils."0.6.1".cfg_if}".default = true;
+    crossbeam_utils = fold recursiveUpdate {} [
+      { "0.6.1"."std" =
+        (f.crossbeam_utils."0.6.1"."std" or false) ||
+        (f.crossbeam_utils."0.6.1".default or false) ||
+        (crossbeam_utils."0.6.1"."default" or false); }
+      { "0.6.1".default = (f.crossbeam_utils."0.6.1".default or true); }
+    ];
+  }) [
+    (features_.cfg_if."${deps."crossbeam_utils"."0.6.1"."cfg_if"}" deps)
+  ];
+
+
+# end
+# custom_derive-0.1.7
+
+  crates.custom_derive."0.1.7" = deps: { features?(features_.custom_derive."0.1.7" deps {}) }: buildRustCrate {
+    crateName = "custom_derive";
+    version = "0.1.7";
+    description = "(Note: superseded by `macro-attr`) This crate provides a macro that enables the use of custom derive attributes.";
+    authors = [ "Daniel Keep <daniel.keep@gmail.com>" ];
+    sha256 = "160q3pzri2fgrr6czfdkwy1sbddki2za96r7ivvyii52qp1523zs";
+    features = mkFeatures (features."custom_derive"."0.1.7" or {});
+  };
+  features_.custom_derive."0.1.7" = deps: f: updateFeatures f (rec {
+    custom_derive = fold recursiveUpdate {} [
+      { "0.1.7"."std" =
+        (f.custom_derive."0.1.7"."std" or false) ||
+        (f.custom_derive."0.1.7".default or false) ||
+        (custom_derive."0.1.7"."default" or false); }
+      { "0.1.7".default = (f.custom_derive."0.1.7".default or true); }
+    ];
+  }) [];
+
+
+# end
+# derive-error-0.0.3
+
+  crates.derive_error."0.0.3" = deps: { features?(features_.derive_error."0.0.3" deps {}) }: buildRustCrate {
+    crateName = "derive-error";
+    version = "0.0.3";
+    description = "Derive macro for Error using macros 1.1";
+    authors = [ "rushmorem <rushmore@webenchanter.com>" ];
+    sha256 = "0239vzxn5xr9nm3i4d6hmqy7dv8llcjblgh1xixfk5dcgcqan77y";
+    procMacro = true;
+    dependencies = mapFeatures features ([
+      (crates."case"."${deps."derive_error"."0.0.3"."case"}" deps)
+      (crates."quote"."${deps."derive_error"."0.0.3"."quote"}" deps)
+      (crates."syn"."${deps."derive_error"."0.0.3"."syn"}" deps)
+    ]);
+  };
+  features_.derive_error."0.0.3" = deps: f: updateFeatures f ({
+    case."${deps.derive_error."0.0.3".case}".default = true;
+    derive_error."0.0.3".default = (f.derive_error."0.0.3".default or true);
+    quote."${deps.derive_error."0.0.3".quote}".default = true;
+    syn."${deps.derive_error."0.0.3".syn}".default = true;
+  }) [
+    (features_.case."${deps."derive_error"."0.0.3"."case"}" deps)
+    (features_.quote."${deps."derive_error"."0.0.3"."quote"}" deps)
+    (features_.syn."${deps."derive_error"."0.0.3"."syn"}" deps)
+  ];
+
+
+# end
+# dtoa-0.4.2
+
+  crates.dtoa."0.4.2" = deps: { features?(features_.dtoa."0.4.2" deps {}) }: buildRustCrate {
+    crateName = "dtoa";
+    version = "0.4.2";
+    description = "Fast functions for printing floating-point primitives to an io::Write";
+    authors = [ "David Tolnay <dtolnay@gmail.com>" ];
+    sha256 = "1bxsh6fags7nr36vlz07ik2a1rzyipc8x1y30kjk832hf2pzadmw";
+  };
+  features_.dtoa."0.4.2" = deps: f: updateFeatures f ({
+    dtoa."0.4.2".default = (f.dtoa."0.4.2".default or true);
+  }) [];
+
+
+# end
+# either-1.4.0
+
+  crates.either."1.4.0" = deps: { features?(features_.either."1.4.0" deps {}) }: buildRustCrate {
+    crateName = "either";
+    version = "1.4.0";
+    description = "The enum [`Either`] with variants `Left` and `Right` is a general purpose sum type with two cases.\n";
+    authors = [ "bluss" ];
+    sha256 = "04kpfd84lvyrkb2z4sljlz2d3d5qczd0sb1yy37fgijq2yx3vb37";
+    dependencies = mapFeatures features ([
+]);
+    features = mkFeatures (features."either"."1.4.0" or {});
+  };
+  features_.either."1.4.0" = deps: f: updateFeatures f (rec {
+    either = fold recursiveUpdate {} [
+      { "1.4.0"."use_std" =
+        (f.either."1.4.0"."use_std" or false) ||
+        (f.either."1.4.0".default or false) ||
+        (either."1.4.0"."default" or false); }
+      { "1.4.0".default = (f.either."1.4.0".default or true); }
+    ];
+  }) [];
+
+
+# end
+# encoding_rs-0.8.13
+
+  crates.encoding_rs."0.8.13" = deps: { features?(features_.encoding_rs."0.8.13" deps {}) }: buildRustCrate {
+    crateName = "encoding_rs";
+    version = "0.8.13";
+    description = "A Gecko-oriented implementation of the Encoding Standard";
+    authors = [ "Henri Sivonen <hsivonen@hsivonen.fi>" ];
+    sha256 = "1a91x1cnw1iz3hc32mvdmwhbqcfx36kk04pnil17mcii1ni6xyy5";
+    dependencies = mapFeatures features ([
+      (crates."cfg_if"."${deps."encoding_rs"."0.8.13"."cfg_if"}" deps)
+    ]);
+    features = mkFeatures (features."encoding_rs"."0.8.13" or {});
+  };
+  features_.encoding_rs."0.8.13" = deps: f: updateFeatures f (rec {
+    cfg_if."${deps.encoding_rs."0.8.13".cfg_if}".default = true;
+    encoding_rs = fold recursiveUpdate {} [
+      { "0.8.13"."fast-big5-hanzi-encode" =
+        (f.encoding_rs."0.8.13"."fast-big5-hanzi-encode" or false) ||
+        (f.encoding_rs."0.8.13".fast-legacy-encode or false) ||
+        (encoding_rs."0.8.13"."fast-legacy-encode" or false); }
+      { "0.8.13"."fast-gb-hanzi-encode" =
+        (f.encoding_rs."0.8.13"."fast-gb-hanzi-encode" or false) ||
+        (f.encoding_rs."0.8.13".fast-legacy-encode or false) ||
+        (encoding_rs."0.8.13"."fast-legacy-encode" or false); }
+      { "0.8.13"."fast-hangul-encode" =
+        (f.encoding_rs."0.8.13"."fast-hangul-encode" or false) ||
+        (f.encoding_rs."0.8.13".fast-legacy-encode or false) ||
+        (encoding_rs."0.8.13"."fast-legacy-encode" or false); }
+      { "0.8.13"."fast-hanja-encode" =
+        (f.encoding_rs."0.8.13"."fast-hanja-encode" or false) ||
+        (f.encoding_rs."0.8.13".fast-legacy-encode or false) ||
+        (encoding_rs."0.8.13"."fast-legacy-encode" or false); }
+      { "0.8.13"."fast-kanji-encode" =
+        (f.encoding_rs."0.8.13"."fast-kanji-encode" or false) ||
+        (f.encoding_rs."0.8.13".fast-legacy-encode or false) ||
+        (encoding_rs."0.8.13"."fast-legacy-encode" or false); }
+      { "0.8.13"."simd" =
+        (f.encoding_rs."0.8.13"."simd" or false) ||
+        (f.encoding_rs."0.8.13".simd-accel or false) ||
+        (encoding_rs."0.8.13"."simd-accel" or false); }
+      { "0.8.13".default = (f.encoding_rs."0.8.13".default or true); }
+    ];
+  }) [
+    (features_.cfg_if."${deps."encoding_rs"."0.8.13"."cfg_if"}" deps)
+  ];
+
+
+# end
+# exitcode-1.1.2
+
+  crates.exitcode."1.1.2" = deps: { features?(features_.exitcode."1.1.2" deps {}) }: buildRustCrate {
+    crateName = "exitcode";
+    version = "1.1.2";
+    description = "Preferred system exit codes as defined by sysexits.h";
+    authors = [ "Ben Wilber <benwilber@gmail.com>" ];
+    sha256 = "1cw9p4vzbscvyrbzv7z68gv2cairrns2d4wcb4nkahkcjk25phip";
+  };
+  features_.exitcode."1.1.2" = deps: f: updateFeatures f ({
+    exitcode."1.1.2".default = (f.exitcode."1.1.2".default or true);
+  }) [];
+
+
+# end
+# filetime-0.1.14
+
+  crates.filetime."0.1.14" = deps: { features?(features_.filetime."0.1.14" deps {}) }: buildRustCrate {
+    crateName = "filetime";
+    version = "0.1.14";
+    description = "Platform-agnostic accessors of timestamps in File metadata\n";
+    authors = [ "Alex Crichton <alex@alexcrichton.com>" ];
+    sha256 = "0i6dvc3ba7vl1iccc91k7c9bv9j5md98mbvlmfy0kicikx0ffn08";
+    dependencies = mapFeatures features ([
+      (crates."cfg_if"."${deps."filetime"."0.1.14"."cfg_if"}" deps)
+    ])
+      ++ (if kernel == "redox" then mapFeatures features ([
+      (crates."redox_syscall"."${deps."filetime"."0.1.14"."redox_syscall"}" deps)
+    ]) else [])
+      ++ (if (kernel == "linux" || kernel == "darwin") then mapFeatures features ([
+      (crates."libc"."${deps."filetime"."0.1.14"."libc"}" deps)
+    ]) else []);
+  };
+  features_.filetime."0.1.14" = deps: f: updateFeatures f ({
+    cfg_if."${deps.filetime."0.1.14".cfg_if}".default = true;
+    filetime."0.1.14".default = (f.filetime."0.1.14".default or true);
+    libc."${deps.filetime."0.1.14".libc}".default = true;
+    redox_syscall."${deps.filetime."0.1.14".redox_syscall}".default = true;
+  }) [
+    (features_.cfg_if."${deps."filetime"."0.1.14"."cfg_if"}" deps)
+    (features_.redox_syscall."${deps."filetime"."0.1.14"."redox_syscall"}" deps)
+    (features_.libc."${deps."filetime"."0.1.14"."libc"}" deps)
+  ];
+
+
+# end
+# flate2-0.2.20
+
+  crates.flate2."0.2.20" = deps: { features?(features_.flate2."0.2.20" deps {}) }: buildRustCrate {
+    crateName = "flate2";
+    version = "0.2.20";
+    description = "Bindings to miniz.c for DEFLATE compression and decompression exposed as\nReader/Writer streams. Contains bindings for zlib, deflate, and gzip-based\nstreams.\n";
+    authors = [ "Alex Crichton <alex@alexcrichton.com>" ];
+    sha256 = "1am0d2vmqym1vcg7rvv516vpcrbhdn1jisy0q03r3nbzdzh54ppl";
+    dependencies = mapFeatures features ([
+      (crates."libc"."${deps."flate2"."0.2.20"."libc"}" deps)
+    ]
+      ++ (if features.flate2."0.2.20".miniz-sys or false then [ (crates.miniz_sys."${deps."flate2"."0.2.20".miniz_sys}" deps) ] else []));
+    features = mkFeatures (features."flate2"."0.2.20" or {});
+  };
+  features_.flate2."0.2.20" = deps: f: updateFeatures f (rec {
+    flate2 = fold recursiveUpdate {} [
+      { "0.2.20"."futures" =
+        (f.flate2."0.2.20"."futures" or false) ||
+        (f.flate2."0.2.20".tokio or false) ||
+        (flate2."0.2.20"."tokio" or false); }
+      { "0.2.20"."libz-sys" =
+        (f.flate2."0.2.20"."libz-sys" or false) ||
+        (f.flate2."0.2.20".zlib or false) ||
+        (flate2."0.2.20"."zlib" or false); }
+      { "0.2.20"."miniz-sys" =
+        (f.flate2."0.2.20"."miniz-sys" or false) ||
+        (f.flate2."0.2.20".default or false) ||
+        (flate2."0.2.20"."default" or false); }
+      { "0.2.20"."tokio-io" =
+        (f.flate2."0.2.20"."tokio-io" or false) ||
+        (f.flate2."0.2.20".tokio or false) ||
+        (flate2."0.2.20"."tokio" or false); }
+      { "0.2.20".default = (f.flate2."0.2.20".default or true); }
+    ];
+    libc."${deps.flate2."0.2.20".libc}".default = true;
+    miniz_sys."${deps.flate2."0.2.20".miniz_sys}".default = true;
+  }) [
+    (features_.libc."${deps."flate2"."0.2.20"."libc"}" deps)
+    (features_.miniz_sys."${deps."flate2"."0.2.20"."miniz_sys"}" deps)
+  ];
+
+
+# end
+# fnv-1.0.6
+
+  crates.fnv."1.0.6" = deps: { features?(features_.fnv."1.0.6" deps {}) }: buildRustCrate {
+    crateName = "fnv";
+    version = "1.0.6";
+    description = "Fowler–Noll–Vo hash function";
+    authors = [ "Alex Crichton <alex@alexcrichton.com>" ];
+    sha256 = "128mlh23y3gg6ag5h8iiqlcbl59smisdzraqy88ldrf75kbw27ip";
+    libPath = "lib.rs";
+  };
+  features_.fnv."1.0.6" = deps: f: updateFeatures f ({
+    fnv."1.0.6".default = (f.fnv."1.0.6".default or true);
+  }) [];
+
+
+# end
+# foreign-types-0.3.2
+
+  crates.foreign_types."0.3.2" = deps: { features?(features_.foreign_types."0.3.2" deps {}) }: buildRustCrate {
+    crateName = "foreign-types";
+    version = "0.3.2";
+    description = "A framework for Rust wrappers over C APIs";
+    authors = [ "Steven Fackler <sfackler@gmail.com>" ];
+    sha256 = "105n8sp2djb1s5lzrw04p7ss3dchr5qa3canmynx396nh3vwm2p8";
+    dependencies = mapFeatures features ([
+      (crates."foreign_types_shared"."${deps."foreign_types"."0.3.2"."foreign_types_shared"}" deps)
+    ]);
+  };
+  features_.foreign_types."0.3.2" = deps: f: updateFeatures f ({
+    foreign_types."0.3.2".default = (f.foreign_types."0.3.2".default or true);
+    foreign_types_shared."${deps.foreign_types."0.3.2".foreign_types_shared}".default = true;
+  }) [
+    (features_.foreign_types_shared."${deps."foreign_types"."0.3.2"."foreign_types_shared"}" deps)
+  ];
+
+
+# end
+# foreign-types-shared-0.1.1
+
+  crates.foreign_types_shared."0.1.1" = deps: { features?(features_.foreign_types_shared."0.1.1" deps {}) }: buildRustCrate {
+    crateName = "foreign-types-shared";
+    version = "0.1.1";
+    description = "An internal crate used by foreign-types";
+    authors = [ "Steven Fackler <sfackler@gmail.com>" ];
+    sha256 = "0b6cnvqbflws8dxywk4589vgbz80049lz4x1g9dfy4s1ppd3g4z5";
+  };
+  features_.foreign_types_shared."0.1.1" = deps: f: updateFeatures f ({
+    foreign_types_shared."0.1.1".default = (f.foreign_types_shared."0.1.1".default or true);
+  }) [];
+
+
+# end
+# fuchsia-zircon-0.2.1
+
+  crates.fuchsia_zircon."0.2.1" = deps: { features?(features_.fuchsia_zircon."0.2.1" deps {}) }: buildRustCrate {
+    crateName = "fuchsia-zircon";
+    version = "0.2.1";
+    description = "Rust bindings for the Zircon kernel";
+    authors = [ "Raph Levien <raph@google.com>" ];
+    sha256 = "0yd4rd7ql1vdr349p6vgq2dnwmpylky1kjp8g1zgvp250jxrhddb";
+    dependencies = mapFeatures features ([
+      (crates."fuchsia_zircon_sys"."${deps."fuchsia_zircon"."0.2.1"."fuchsia_zircon_sys"}" deps)
+    ]);
+  };
+  features_.fuchsia_zircon."0.2.1" = deps: f: updateFeatures f ({
+    fuchsia_zircon."0.2.1".default = (f.fuchsia_zircon."0.2.1".default or true);
+    fuchsia_zircon_sys."${deps.fuchsia_zircon."0.2.1".fuchsia_zircon_sys}".default = true;
+  }) [
+    (features_.fuchsia_zircon_sys."${deps."fuchsia_zircon"."0.2.1"."fuchsia_zircon_sys"}" deps)
+  ];
+
+
+# end
+# fuchsia-zircon-0.3.3
+
+  crates.fuchsia_zircon."0.3.3" = deps: { features?(features_.fuchsia_zircon."0.3.3" deps {}) }: buildRustCrate {
+    crateName = "fuchsia-zircon";
+    version = "0.3.3";
+    description = "Rust bindings for the Zircon kernel";
+    authors = [ "Raph Levien <raph@google.com>" ];
+    sha256 = "0jrf4shb1699r4la8z358vri8318w4mdi6qzfqy30p2ymjlca4gk";
+    dependencies = mapFeatures features ([
+      (crates."bitflags"."${deps."fuchsia_zircon"."0.3.3"."bitflags"}" deps)
+      (crates."fuchsia_zircon_sys"."${deps."fuchsia_zircon"."0.3.3"."fuchsia_zircon_sys"}" deps)
+    ]);
+  };
+  features_.fuchsia_zircon."0.3.3" = deps: f: updateFeatures f ({
+    bitflags."${deps.fuchsia_zircon."0.3.3".bitflags}".default = true;
+    fuchsia_zircon."0.3.3".default = (f.fuchsia_zircon."0.3.3".default or true);
+    fuchsia_zircon_sys."${deps.fuchsia_zircon."0.3.3".fuchsia_zircon_sys}".default = true;
+  }) [
+    (features_.bitflags."${deps."fuchsia_zircon"."0.3.3"."bitflags"}" deps)
+    (features_.fuchsia_zircon_sys."${deps."fuchsia_zircon"."0.3.3"."fuchsia_zircon_sys"}" deps)
+  ];
+
+
+# end
+# fuchsia-zircon-sys-0.2.0
+
+  crates.fuchsia_zircon_sys."0.2.0" = deps: { features?(features_.fuchsia_zircon_sys."0.2.0" deps {}) }: buildRustCrate {
+    crateName = "fuchsia-zircon-sys";
+    version = "0.2.0";
+    description = "Low-level Rust bindings for the Zircon kernel";
+    authors = [ "Raph Levien <raph@google.com>" ];
+    sha256 = "1yrqsrjwlhl3di6prxf5xmyd82gyjaysldbka5wwk83z11mpqh4w";
+    dependencies = mapFeatures features ([
+      (crates."bitflags"."${deps."fuchsia_zircon_sys"."0.2.0"."bitflags"}" deps)
+    ]);
+  };
+  features_.fuchsia_zircon_sys."0.2.0" = deps: f: updateFeatures f ({
+    bitflags."${deps.fuchsia_zircon_sys."0.2.0".bitflags}".default = true;
+    fuchsia_zircon_sys."0.2.0".default = (f.fuchsia_zircon_sys."0.2.0".default or true);
+  }) [
+    (features_.bitflags."${deps."fuchsia_zircon_sys"."0.2.0"."bitflags"}" deps)
+  ];
+
+
+# end
+# fuchsia-zircon-sys-0.3.3
+
+  crates.fuchsia_zircon_sys."0.3.3" = deps: { features?(features_.fuchsia_zircon_sys."0.3.3" deps {}) }: buildRustCrate {
+    crateName = "fuchsia-zircon-sys";
+    version = "0.3.3";
+    description = "Low-level Rust bindings for the Zircon kernel";
+    authors = [ "Raph Levien <raph@google.com>" ];
+    sha256 = "08jp1zxrm9jbrr6l26bjal4dbm8bxfy57ickdgibsqxr1n9j3hf5";
+  };
+  features_.fuchsia_zircon_sys."0.3.3" = deps: f: updateFeatures f ({
+    fuchsia_zircon_sys."0.3.3".default = (f.fuchsia_zircon_sys."0.3.3".default or true);
+  }) [];
+
+
+# end
+# futures-0.1.25
+
+  crates.futures."0.1.25" = deps: { features?(features_.futures."0.1.25" deps {}) }: buildRustCrate {
+    crateName = "futures";
+    version = "0.1.25";
+    description = "An implementation of futures and streams featuring zero allocations,\ncomposability, and iterator-like interfaces.\n";
+    authors = [ "Alex Crichton <alex@alexcrichton.com>" ];
+    sha256 = "1gdn9z3mi3jjzbxgvawqh90895130c3ydks55rshja0ncpn985q3";
+    features = mkFeatures (features."futures"."0.1.25" or {});
+  };
+  features_.futures."0.1.25" = deps: f: updateFeatures f (rec {
+    futures = fold recursiveUpdate {} [
+      { "0.1.25"."use_std" =
+        (f.futures."0.1.25"."use_std" or false) ||
+        (f.futures."0.1.25".default or false) ||
+        (futures."0.1.25"."default" or false); }
+      { "0.1.25"."with-deprecated" =
+        (f.futures."0.1.25"."with-deprecated" or false) ||
+        (f.futures."0.1.25".default or false) ||
+        (futures."0.1.25"."default" or false); }
+      { "0.1.25".default = (f.futures."0.1.25".default or true); }
+    ];
+  }) [];
+
+
+# end
+# futures-cpupool-0.1.7
+
+  crates.futures_cpupool."0.1.7" = deps: { features?(features_.futures_cpupool."0.1.7" deps {}) }: buildRustCrate {
+    crateName = "futures-cpupool";
+    version = "0.1.7";
+    description = "An implementation of thread pools which hand out futures to the results of the\ncomputation on the threads themselves.\n";
+    authors = [ "Alex Crichton <alex@alexcrichton.com>" ];
+    sha256 = "1m0z5d54q1zr687acb4fh5fb3x692vr5ais6135lvp7vxap6p0xb";
+    dependencies = mapFeatures features ([
+      (crates."futures"."${deps."futures_cpupool"."0.1.7"."futures"}" deps)
+      (crates."num_cpus"."${deps."futures_cpupool"."0.1.7"."num_cpus"}" deps)
+    ]);
+    features = mkFeatures (features."futures_cpupool"."0.1.7" or {});
+  };
+  features_.futures_cpupool."0.1.7" = deps: f: updateFeatures f (rec {
+    futures = fold recursiveUpdate {} [
+      { "${deps.futures_cpupool."0.1.7".futures}"."use_std" = true; }
+      { "${deps.futures_cpupool."0.1.7".futures}"."with-deprecated" =
+        (f.futures."${deps.futures_cpupool."0.1.7".futures}"."with-deprecated" or false) ||
+        (futures_cpupool."0.1.7"."with-deprecated" or false) ||
+        (f."futures_cpupool"."0.1.7"."with-deprecated" or false); }
+      { "${deps.futures_cpupool."0.1.7".futures}".default = (f.futures."${deps.futures_cpupool."0.1.7".futures}".default or false); }
+    ];
+    futures_cpupool = fold recursiveUpdate {} [
+      { "0.1.7"."with-deprecated" =
+        (f.futures_cpupool."0.1.7"."with-deprecated" or false) ||
+        (f.futures_cpupool."0.1.7".default or false) ||
+        (futures_cpupool."0.1.7"."default" or false); }
+      { "0.1.7".default = (f.futures_cpupool."0.1.7".default or true); }
+    ];
+    num_cpus."${deps.futures_cpupool."0.1.7".num_cpus}".default = true;
+  }) [
+    (features_.futures."${deps."futures_cpupool"."0.1.7"."futures"}" deps)
+    (features_.num_cpus."${deps."futures_cpupool"."0.1.7"."num_cpus"}" deps)
+  ];
+
+
+# end
+# h2-0.1.13
+
+  crates.h2."0.1.13" = deps: { features?(features_.h2."0.1.13" deps {}) }: buildRustCrate {
+    crateName = "h2";
+    version = "0.1.13";
+    description = "An HTTP/2.0 client and server";
+    authors = [ "Carl Lerche <me@carllerche.com>" ];
+    sha256 = "1nmbr5i1ssqbnfwmkgsfzghzr4m8676z38s2dmzs9gchha7n8wv7";
+    dependencies = mapFeatures features ([
+      (crates."byteorder"."${deps."h2"."0.1.13"."byteorder"}" deps)
+      (crates."bytes"."${deps."h2"."0.1.13"."bytes"}" deps)
+      (crates."fnv"."${deps."h2"."0.1.13"."fnv"}" deps)
+      (crates."futures"."${deps."h2"."0.1.13"."futures"}" deps)
+      (crates."http"."${deps."h2"."0.1.13"."http"}" deps)
+      (crates."indexmap"."${deps."h2"."0.1.13"."indexmap"}" deps)
+      (crates."log"."${deps."h2"."0.1.13"."log"}" deps)
+      (crates."slab"."${deps."h2"."0.1.13"."slab"}" deps)
+      (crates."string"."${deps."h2"."0.1.13"."string"}" deps)
+      (crates."tokio_io"."${deps."h2"."0.1.13"."tokio_io"}" deps)
+    ]);
+    features = mkFeatures (features."h2"."0.1.13" or {});
+  };
+  features_.h2."0.1.13" = deps: f: updateFeatures f ({
+    byteorder."${deps.h2."0.1.13".byteorder}".default = true;
+    bytes."${deps.h2."0.1.13".bytes}".default = true;
+    fnv."${deps.h2."0.1.13".fnv}".default = true;
+    futures."${deps.h2."0.1.13".futures}".default = true;
+    h2."0.1.13".default = (f.h2."0.1.13".default or true);
+    http."${deps.h2."0.1.13".http}".default = true;
+    indexmap."${deps.h2."0.1.13".indexmap}".default = true;
+    log."${deps.h2."0.1.13".log}".default = true;
+    slab."${deps.h2."0.1.13".slab}".default = true;
+    string."${deps.h2."0.1.13".string}".default = true;
+    tokio_io."${deps.h2."0.1.13".tokio_io}".default = true;
+  }) [
+    (features_.byteorder."${deps."h2"."0.1.13"."byteorder"}" deps)
+    (features_.bytes."${deps."h2"."0.1.13"."bytes"}" deps)
+    (features_.fnv."${deps."h2"."0.1.13"."fnv"}" deps)
+    (features_.futures."${deps."h2"."0.1.13"."futures"}" deps)
+    (features_.http."${deps."h2"."0.1.13"."http"}" deps)
+    (features_.indexmap."${deps."h2"."0.1.13"."indexmap"}" deps)
+    (features_.log."${deps."h2"."0.1.13"."log"}" deps)
+    (features_.slab."${deps."h2"."0.1.13"."slab"}" deps)
+    (features_.string."${deps."h2"."0.1.13"."string"}" deps)
+    (features_.tokio_io."${deps."h2"."0.1.13"."tokio_io"}" deps)
+  ];
+
+
+# end
+# http-0.1.14
+
+  crates.http."0.1.14" = deps: { features?(features_.http."0.1.14" deps {}) }: buildRustCrate {
+    crateName = "http";
+    version = "0.1.14";
+    description = "A set of types for representing HTTP requests and responses.\n";
+    authors = [ "Alex Crichton <alex@alexcrichton.com>" "Carl Lerche <me@carllerche.com>" "Sean McArthur <sean@seanmonstar.com>" ];
+    sha256 = "1828cz2fh25nmp9rca0yzr548phsvkmzsqhspjnscqg1l9yc1557";
+    dependencies = mapFeatures features ([
+      (crates."bytes"."${deps."http"."0.1.14"."bytes"}" deps)
+      (crates."fnv"."${deps."http"."0.1.14"."fnv"}" deps)
+      (crates."itoa"."${deps."http"."0.1.14"."itoa"}" deps)
+    ]);
+  };
+  features_.http."0.1.14" = deps: f: updateFeatures f ({
+    bytes."${deps.http."0.1.14".bytes}".default = true;
+    fnv."${deps.http."0.1.14".fnv}".default = true;
+    http."0.1.14".default = (f.http."0.1.14".default or true);
+    itoa."${deps.http."0.1.14".itoa}".default = true;
+  }) [
+    (features_.bytes."${deps."http"."0.1.14"."bytes"}" deps)
+    (features_.fnv."${deps."http"."0.1.14"."fnv"}" deps)
+    (features_.itoa."${deps."http"."0.1.14"."itoa"}" deps)
+  ];
+
+
+# end
+# httparse-1.2.3
+
+  crates.httparse."1.2.3" = deps: { features?(features_.httparse."1.2.3" deps {}) }: buildRustCrate {
+    crateName = "httparse";
+    version = "1.2.3";
+    description = "A tiny, safe, speedy, zero-copy HTTP/1.x parser.";
+    authors = [ "Sean McArthur <sean.monstar@gmail.com>" ];
+    sha256 = "13x17y9bip0bija06y4vwpgh8jdmdi2gsvjq02kyfy0fbp5cqa93";
+    features = mkFeatures (features."httparse"."1.2.3" or {});
+  };
+  features_.httparse."1.2.3" = deps: f: updateFeatures f (rec {
+    httparse = fold recursiveUpdate {} [
+      { "1.2.3"."std" =
+        (f.httparse."1.2.3"."std" or false) ||
+        (f.httparse."1.2.3".default or false) ||
+        (httparse."1.2.3"."default" or false); }
+      { "1.2.3".default = (f.httparse."1.2.3".default or true); }
+    ];
+  }) [];
+
+
+# end
+# hyper-0.12.16
+
+  crates.hyper."0.12.16" = deps: { features?(features_.hyper."0.12.16" deps {}) }: buildRustCrate {
+    crateName = "hyper";
+    version = "0.12.16";
+    description = "A fast and correct HTTP library.";
+    authors = [ "Sean McArthur <sean@seanmonstar.com>" ];
+    sha256 = "1h5h9swxh02jcg1m4cvwb5nmkb8z9g4b0p4wfbhfvsd7wf14qr0y";
+    dependencies = mapFeatures features ([
+      (crates."bytes"."${deps."hyper"."0.12.16"."bytes"}" deps)
+      (crates."futures"."${deps."hyper"."0.12.16"."futures"}" deps)
+      (crates."h2"."${deps."hyper"."0.12.16"."h2"}" deps)
+      (crates."http"."${deps."hyper"."0.12.16"."http"}" deps)
+      (crates."httparse"."${deps."hyper"."0.12.16"."httparse"}" deps)
+      (crates."iovec"."${deps."hyper"."0.12.16"."iovec"}" deps)
+      (crates."itoa"."${deps."hyper"."0.12.16"."itoa"}" deps)
+      (crates."log"."${deps."hyper"."0.12.16"."log"}" deps)
+      (crates."time"."${deps."hyper"."0.12.16"."time"}" deps)
+      (crates."tokio_io"."${deps."hyper"."0.12.16"."tokio_io"}" deps)
+      (crates."want"."${deps."hyper"."0.12.16"."want"}" deps)
+    ]
+      ++ (if features.hyper."0.12.16".futures-cpupool or false then [ (crates.futures_cpupool."${deps."hyper"."0.12.16".futures_cpupool}" deps) ] else [])
+      ++ (if features.hyper."0.12.16".net2 or false then [ (crates.net2."${deps."hyper"."0.12.16".net2}" deps) ] else [])
+      ++ (if features.hyper."0.12.16".tokio or false then [ (crates.tokio."${deps."hyper"."0.12.16".tokio}" deps) ] else [])
+      ++ (if features.hyper."0.12.16".tokio-executor or false then [ (crates.tokio_executor."${deps."hyper"."0.12.16".tokio_executor}" deps) ] else [])
+      ++ (if features.hyper."0.12.16".tokio-reactor or false then [ (crates.tokio_reactor."${deps."hyper"."0.12.16".tokio_reactor}" deps) ] else [])
+      ++ (if features.hyper."0.12.16".tokio-tcp or false then [ (crates.tokio_tcp."${deps."hyper"."0.12.16".tokio_tcp}" deps) ] else [])
+      ++ (if features.hyper."0.12.16".tokio-threadpool or false then [ (crates.tokio_threadpool."${deps."hyper"."0.12.16".tokio_threadpool}" deps) ] else [])
+      ++ (if features.hyper."0.12.16".tokio-timer or false then [ (crates.tokio_timer."${deps."hyper"."0.12.16".tokio_timer}" deps) ] else []));
+    features = mkFeatures (features."hyper"."0.12.16" or {});
+  };
+  features_.hyper."0.12.16" = deps: f: updateFeatures f (rec {
+    bytes."${deps.hyper."0.12.16".bytes}".default = true;
+    futures."${deps.hyper."0.12.16".futures}".default = true;
+    futures_cpupool."${deps.hyper."0.12.16".futures_cpupool}".default = true;
+    h2."${deps.hyper."0.12.16".h2}".default = true;
+    http."${deps.hyper."0.12.16".http}".default = true;
+    httparse."${deps.hyper."0.12.16".httparse}".default = true;
+    hyper = fold recursiveUpdate {} [
+      { "0.12.16"."__internal_flaky_tests" =
+        (f.hyper."0.12.16"."__internal_flaky_tests" or false) ||
+        (f.hyper."0.12.16".default or false) ||
+        (hyper."0.12.16"."default" or false); }
+      { "0.12.16"."futures-cpupool" =
+        (f.hyper."0.12.16"."futures-cpupool" or false) ||
+        (f.hyper."0.12.16".runtime or false) ||
+        (hyper."0.12.16"."runtime" or false); }
+      { "0.12.16"."net2" =
+        (f.hyper."0.12.16"."net2" or false) ||
+        (f.hyper."0.12.16".runtime or false) ||
+        (hyper."0.12.16"."runtime" or false); }
+      { "0.12.16"."runtime" =
+        (f.hyper."0.12.16"."runtime" or false) ||
+        (f.hyper."0.12.16".default or false) ||
+        (hyper."0.12.16"."default" or false); }
+      { "0.12.16"."tokio" =
+        (f.hyper."0.12.16"."tokio" or false) ||
+        (f.hyper."0.12.16".runtime or false) ||
+        (hyper."0.12.16"."runtime" or false); }
+      { "0.12.16"."tokio-executor" =
+        (f.hyper."0.12.16"."tokio-executor" or false) ||
+        (f.hyper."0.12.16".runtime or false) ||
+        (hyper."0.12.16"."runtime" or false); }
+      { "0.12.16"."tokio-reactor" =
+        (f.hyper."0.12.16"."tokio-reactor" or false) ||
+        (f.hyper."0.12.16".runtime or false) ||
+        (hyper."0.12.16"."runtime" or false); }
+      { "0.12.16"."tokio-tcp" =
+        (f.hyper."0.12.16"."tokio-tcp" or false) ||
+        (f.hyper."0.12.16".runtime or false) ||
+        (hyper."0.12.16"."runtime" or false); }
+      { "0.12.16"."tokio-threadpool" =
+        (f.hyper."0.12.16"."tokio-threadpool" or false) ||
+        (f.hyper."0.12.16".runtime or false) ||
+        (hyper."0.12.16"."runtime" or false); }
+      { "0.12.16"."tokio-timer" =
+        (f.hyper."0.12.16"."tokio-timer" or false) ||
+        (f.hyper."0.12.16".runtime or false) ||
+        (hyper."0.12.16"."runtime" or false); }
+      { "0.12.16".default = (f.hyper."0.12.16".default or true); }
+    ];
+    iovec."${deps.hyper."0.12.16".iovec}".default = true;
+    itoa."${deps.hyper."0.12.16".itoa}".default = true;
+    log."${deps.hyper."0.12.16".log}".default = true;
+    net2."${deps.hyper."0.12.16".net2}".default = true;
+    time."${deps.hyper."0.12.16".time}".default = true;
+    tokio."${deps.hyper."0.12.16".tokio}".default = true;
+    tokio_executor."${deps.hyper."0.12.16".tokio_executor}".default = true;
+    tokio_io."${deps.hyper."0.12.16".tokio_io}".default = true;
+    tokio_reactor."${deps.hyper."0.12.16".tokio_reactor}".default = true;
+    tokio_tcp."${deps.hyper."0.12.16".tokio_tcp}".default = true;
+    tokio_threadpool."${deps.hyper."0.12.16".tokio_threadpool}".default = true;
+    tokio_timer."${deps.hyper."0.12.16".tokio_timer}".default = true;
+    want."${deps.hyper."0.12.16".want}".default = true;
+  }) [
+    (features_.bytes."${deps."hyper"."0.12.16"."bytes"}" deps)
+    (features_.futures."${deps."hyper"."0.12.16"."futures"}" deps)
+    (features_.futures_cpupool."${deps."hyper"."0.12.16"."futures_cpupool"}" deps)
+    (features_.h2."${deps."hyper"."0.12.16"."h2"}" deps)
+    (features_.http."${deps."hyper"."0.12.16"."http"}" deps)
+    (features_.httparse."${deps."hyper"."0.12.16"."httparse"}" deps)
+    (features_.iovec."${deps."hyper"."0.12.16"."iovec"}" deps)
+    (features_.itoa."${deps."hyper"."0.12.16"."itoa"}" deps)
+    (features_.log."${deps."hyper"."0.12.16"."log"}" deps)
+    (features_.net2."${deps."hyper"."0.12.16"."net2"}" deps)
+    (features_.time."${deps."hyper"."0.12.16"."time"}" deps)
+    (features_.tokio."${deps."hyper"."0.12.16"."tokio"}" deps)
+    (features_.tokio_executor."${deps."hyper"."0.12.16"."tokio_executor"}" deps)
+    (features_.tokio_io."${deps."hyper"."0.12.16"."tokio_io"}" deps)
+    (features_.tokio_reactor."${deps."hyper"."0.12.16"."tokio_reactor"}" deps)
+    (features_.tokio_tcp."${deps."hyper"."0.12.16"."tokio_tcp"}" deps)
+    (features_.tokio_threadpool."${deps."hyper"."0.12.16"."tokio_threadpool"}" deps)
+    (features_.tokio_timer."${deps."hyper"."0.12.16"."tokio_timer"}" deps)
+    (features_.want."${deps."hyper"."0.12.16"."want"}" deps)
+  ];
+
+
+# end
+# hyper-tls-0.3.1
+
+  crates.hyper_tls."0.3.1" = deps: { features?(features_.hyper_tls."0.3.1" deps {}) }: buildRustCrate {
+    crateName = "hyper-tls";
+    version = "0.3.1";
+    description = "Default TLS implementation for use with hyper";
+    authors = [ "Sean McArthur <sean@seanmonstar.com>" ];
+    sha256 = "0sk46mmnccxgxwn62rl5m58c2ivwgxgd590cjwg60pjkhx9qn5r7";
+    dependencies = mapFeatures features ([
+      (crates."bytes"."${deps."hyper_tls"."0.3.1"."bytes"}" deps)
+      (crates."futures"."${deps."hyper_tls"."0.3.1"."futures"}" deps)
+      (crates."hyper"."${deps."hyper_tls"."0.3.1"."hyper"}" deps)
+      (crates."native_tls"."${deps."hyper_tls"."0.3.1"."native_tls"}" deps)
+      (crates."tokio_io"."${deps."hyper_tls"."0.3.1"."tokio_io"}" deps)
+    ]);
+    features = mkFeatures (features."hyper_tls"."0.3.1" or {});
+  };
+  features_.hyper_tls."0.3.1" = deps: f: updateFeatures f (rec {
+    bytes."${deps.hyper_tls."0.3.1".bytes}".default = true;
+    futures."${deps.hyper_tls."0.3.1".futures}".default = true;
+    hyper."${deps.hyper_tls."0.3.1".hyper}".default = true;
+    hyper_tls."0.3.1".default = (f.hyper_tls."0.3.1".default or true);
+    native_tls = fold recursiveUpdate {} [
+      { "${deps.hyper_tls."0.3.1".native_tls}"."vendored" =
+        (f.native_tls."${deps.hyper_tls."0.3.1".native_tls}"."vendored" or false) ||
+        (hyper_tls."0.3.1"."vendored" or false) ||
+        (f."hyper_tls"."0.3.1"."vendored" or false); }
+      { "${deps.hyper_tls."0.3.1".native_tls}".default = true; }
+    ];
+    tokio_io."${deps.hyper_tls."0.3.1".tokio_io}".default = true;
+  }) [
+    (features_.bytes."${deps."hyper_tls"."0.3.1"."bytes"}" deps)
+    (features_.futures."${deps."hyper_tls"."0.3.1"."futures"}" deps)
+    (features_.hyper."${deps."hyper_tls"."0.3.1"."hyper"}" deps)
+    (features_.native_tls."${deps."hyper_tls"."0.3.1"."native_tls"}" deps)
+    (features_.tokio_io."${deps."hyper_tls"."0.3.1"."tokio_io"}" deps)
+  ];
+
+
+# end
+# idna-0.1.4
+
+  crates.idna."0.1.4" = deps: { features?(features_.idna."0.1.4" deps {}) }: buildRustCrate {
+    crateName = "idna";
+    version = "0.1.4";
+    description = "IDNA (Internationalizing Domain Names in Applications) and Punycode.";
+    authors = [ "The rust-url developers" ];
+    sha256 = "15j44qgjx1skwg9i7f4cm36ni4n99b1ayx23yxx7axxcw8vjf336";
+    dependencies = mapFeatures features ([
+      (crates."matches"."${deps."idna"."0.1.4"."matches"}" deps)
+      (crates."unicode_bidi"."${deps."idna"."0.1.4"."unicode_bidi"}" deps)
+      (crates."unicode_normalization"."${deps."idna"."0.1.4"."unicode_normalization"}" deps)
+    ]);
+  };
+  features_.idna."0.1.4" = deps: f: updateFeatures f ({
+    idna."0.1.4".default = (f.idna."0.1.4".default or true);
+    matches."${deps.idna."0.1.4".matches}".default = true;
+    unicode_bidi."${deps.idna."0.1.4".unicode_bidi}".default = true;
+    unicode_normalization."${deps.idna."0.1.4".unicode_normalization}".default = true;
+  }) [
+    (features_.matches."${deps."idna"."0.1.4"."matches"}" deps)
+    (features_.unicode_bidi."${deps."idna"."0.1.4"."unicode_bidi"}" deps)
+    (features_.unicode_normalization."${deps."idna"."0.1.4"."unicode_normalization"}" deps)
+  ];
+
+
+# end
+# indexmap-1.0.2
+
+  crates.indexmap."1.0.2" = deps: { features?(features_.indexmap."1.0.2" deps {}) }: buildRustCrate {
+    crateName = "indexmap";
+    version = "1.0.2";
+    description = "A hash table with consistent order and fast iteration.\n\nThe indexmap is a hash table where the iteration order of the key-value\npairs is independent of the hash values of the keys. It has the usual\nhash table functionality, it preserves insertion order except after\nremovals, and it allows lookup of its elements by either hash table key\nor numerical index. A corresponding hash set type is also provided.\n\nThis crate was initially published under the name ordermap, but it was renamed to\nindexmap.\n";
+    authors = [ "bluss" "Josh Stone <cuviper@gmail.com>" ];
+    sha256 = "18a0cn5xy3a7wswxg5lwfg3j4sh5blk28ykw0ysgr486djd353gf";
+    dependencies = mapFeatures features ([
+]);
+    features = mkFeatures (features."indexmap"."1.0.2" or {});
+  };
+  features_.indexmap."1.0.2" = deps: f: updateFeatures f (rec {
+    indexmap = fold recursiveUpdate {} [
+      { "1.0.2"."serde" =
+        (f.indexmap."1.0.2"."serde" or false) ||
+        (f.indexmap."1.0.2".serde-1 or false) ||
+        (indexmap."1.0.2"."serde-1" or false); }
+      { "1.0.2".default = (f.indexmap."1.0.2".default or true); }
+    ];
+  }) [];
+
+
+# end
+# iovec-0.1.1
+
+  crates.iovec."0.1.1" = deps: { features?(features_.iovec."0.1.1" deps {}) }: buildRustCrate {
+    crateName = "iovec";
+    version = "0.1.1";
+    description = "Portable buffer type for scatter/gather I/O operations\n";
+    authors = [ "Carl Lerche <me@carllerche.com>" ];
+    sha256 = "14fns3g3arbql6lkczf2gbbzaqh22mfv7y1wq5rr2y8jhh5m8jmm";
+    dependencies = (if (kernel == "linux" || kernel == "darwin") then mapFeatures features ([
+      (crates."libc"."${deps."iovec"."0.1.1"."libc"}" deps)
+    ]) else [])
+      ++ (if kernel == "windows" then mapFeatures features ([
+      (crates."winapi"."${deps."iovec"."0.1.1"."winapi"}" deps)
+    ]) else []);
+  };
+  features_.iovec."0.1.1" = deps: f: updateFeatures f ({
+    iovec."0.1.1".default = (f.iovec."0.1.1".default or true);
+    libc."${deps.iovec."0.1.1".libc}".default = true;
+    winapi."${deps.iovec."0.1.1".winapi}".default = true;
+  }) [
+    (features_.libc."${deps."iovec"."0.1.1"."libc"}" deps)
+    (features_.winapi."${deps."iovec"."0.1.1"."winapi"}" deps)
+  ];
+
+
+# end
+# isatty-0.1.5
+
+  crates.isatty."0.1.5" = deps: { features?(features_.isatty."0.1.5" deps {}) }: buildRustCrate {
+    crateName = "isatty";
+    version = "0.1.5";
+    description = "libc::isatty that also works on Windows";
+    authors = [ "David Tolnay <dtolnay@gmail.com>" ];
+    sha256 = "0gp781mgqmvsp6a3iyhwk2sqis2ys8jfg3grq40m135zgb4d2cvj";
+    dependencies = (if (kernel == "linux" || kernel == "darwin") then mapFeatures features ([
+      (crates."libc"."${deps."isatty"."0.1.5"."libc"}" deps)
+    ]) else [])
+      ++ (if kernel == "windows" then mapFeatures features ([
+      (crates."kernel32_sys"."${deps."isatty"."0.1.5"."kernel32_sys"}" deps)
+      (crates."winapi"."${deps."isatty"."0.1.5"."winapi"}" deps)
+    ]) else []);
+  };
+  features_.isatty."0.1.5" = deps: f: updateFeatures f ({
+    isatty."0.1.5".default = (f.isatty."0.1.5".default or true);
+    kernel32_sys."${deps.isatty."0.1.5".kernel32_sys}".default = true;
+    libc."${deps.isatty."0.1.5".libc}".default = true;
+    winapi."${deps.isatty."0.1.5".winapi}".default = true;
+  }) [
+    (features_.libc."${deps."isatty"."0.1.5"."libc"}" deps)
+    (features_.kernel32_sys."${deps."isatty"."0.1.5"."kernel32_sys"}" deps)
+    (features_.winapi."${deps."isatty"."0.1.5"."winapi"}" deps)
+  ];
+
+
+# end
+# itertools-0.6.5
+
+  crates.itertools."0.6.5" = deps: { features?(features_.itertools."0.6.5" deps {}) }: buildRustCrate {
+    crateName = "itertools";
+    version = "0.6.5";
+    description = "Extra iterator adaptors, iterator methods, free functions, and macros.";
+    authors = [ "bluss" ];
+    sha256 = "0gbhgn7s8qkxxw10i514fzpqnc3aissn4kcgylm2cvnv9zmg8mw1";
+    dependencies = mapFeatures features ([
+      (crates."either"."${deps."itertools"."0.6.5"."either"}" deps)
+    ]);
+  };
+  features_.itertools."0.6.5" = deps: f: updateFeatures f ({
+    either."${deps.itertools."0.6.5".either}".default = (f.either."${deps.itertools."0.6.5".either}".default or false);
+    itertools."0.6.5".default = (f.itertools."0.6.5".default or true);
+  }) [
+    (features_.either."${deps."itertools"."0.6.5"."either"}" deps)
+  ];
+
+
+# end
+# itoa-0.3.4
+
+  crates.itoa."0.3.4" = deps: { features?(features_.itoa."0.3.4" deps {}) }: buildRustCrate {
+    crateName = "itoa";
+    version = "0.3.4";
+    description = "Fast functions for printing integer primitives to an io::Write";
+    authors = [ "David Tolnay <dtolnay@gmail.com>" ];
+    sha256 = "1nfkzz6vrgj0d9l3yzjkkkqzdgs68y294fjdbl7jq118qi8xc9d9";
+    features = mkFeatures (features."itoa"."0.3.4" or {});
+  };
+  features_.itoa."0.3.4" = deps: f: updateFeatures f ({
+    itoa."0.3.4".default = (f.itoa."0.3.4".default or true);
+  }) [];
+
+
+# end
+# itoa-0.4.3
+
+  crates.itoa."0.4.3" = deps: { features?(features_.itoa."0.4.3" deps {}) }: buildRustCrate {
+    crateName = "itoa";
+    version = "0.4.3";
+    description = "Fast functions for printing integer primitives to an io::Write";
+    authors = [ "David Tolnay <dtolnay@gmail.com>" ];
+    sha256 = "0zadimmdgvili3gdwxqg7ljv3r4wcdg1kkdfp9nl15vnm23vrhy1";
+    features = mkFeatures (features."itoa"."0.4.3" or {});
+  };
+  features_.itoa."0.4.3" = deps: f: updateFeatures f (rec {
+    itoa = fold recursiveUpdate {} [
+      { "0.4.3"."std" =
+        (f.itoa."0.4.3"."std" or false) ||
+        (f.itoa."0.4.3".default or false) ||
+        (itoa."0.4.3"."default" or false); }
+      { "0.4.3".default = (f.itoa."0.4.3".default or true); }
+    ];
+  }) [];
+
+
+# end
+# kernel32-sys-0.2.2
+
+  crates.kernel32_sys."0.2.2" = deps: { features?(features_.kernel32_sys."0.2.2" deps {}) }: buildRustCrate {
+    crateName = "kernel32-sys";
+    version = "0.2.2";
+    description = "Contains function definitions for the Windows API library kernel32. See winapi for types and constants.";
+    authors = [ "Peter Atashian <retep998@gmail.com>" ];
+    sha256 = "1lrw1hbinyvr6cp28g60z97w32w8vsk6pahk64pmrv2fmby8srfj";
+    libName = "kernel32";
+    build = "build.rs";
+    dependencies = mapFeatures features ([
+      (crates."winapi"."${deps."kernel32_sys"."0.2.2"."winapi"}" deps)
+    ]);
+
+    buildDependencies = mapFeatures features ([
+      (crates."winapi_build"."${deps."kernel32_sys"."0.2.2"."winapi_build"}" deps)
+    ]);
+  };
+  features_.kernel32_sys."0.2.2" = deps: f: updateFeatures f ({
+    kernel32_sys."0.2.2".default = (f.kernel32_sys."0.2.2".default or true);
+    winapi."${deps.kernel32_sys."0.2.2".winapi}".default = true;
+    winapi_build."${deps.kernel32_sys."0.2.2".winapi_build}".default = true;
+  }) [
+    (features_.winapi."${deps."kernel32_sys"."0.2.2"."winapi"}" deps)
+    (features_.winapi_build."${deps."kernel32_sys"."0.2.2"."winapi_build"}" deps)
+  ];
+
+
+# end
+# lazy_static-0.2.10
+
+  crates.lazy_static."0.2.10" = deps: { features?(features_.lazy_static."0.2.10" deps {}) }: buildRustCrate {
+    crateName = "lazy_static";
+    version = "0.2.10";
+    description = "A macro for declaring lazily evaluated statics in Rust.";
+    authors = [ "Marvin Löbel <loebel.marvin@gmail.com>" ];
+    sha256 = "0ylwjvppsm56fpv32l4br7zw0pwn81wbfb1abalyyr1d9c94vg8r";
+    dependencies = mapFeatures features ([
+]);
+    features = mkFeatures (features."lazy_static"."0.2.10" or {});
+  };
+  features_.lazy_static."0.2.10" = deps: f: updateFeatures f (rec {
+    lazy_static = fold recursiveUpdate {} [
+      { "0.2.10"."compiletest_rs" =
+        (f.lazy_static."0.2.10"."compiletest_rs" or false) ||
+        (f.lazy_static."0.2.10".compiletest or false) ||
+        (lazy_static."0.2.10"."compiletest" or false); }
+      { "0.2.10"."nightly" =
+        (f.lazy_static."0.2.10"."nightly" or false) ||
+        (f.lazy_static."0.2.10".spin_no_std or false) ||
+        (lazy_static."0.2.10"."spin_no_std" or false); }
+      { "0.2.10"."spin" =
+        (f.lazy_static."0.2.10"."spin" or false) ||
+        (f.lazy_static."0.2.10".spin_no_std or false) ||
+        (lazy_static."0.2.10"."spin_no_std" or false); }
+      { "0.2.10".default = (f.lazy_static."0.2.10".default or true); }
+    ];
+  }) [];
+
+
+# end
+# lazy_static-1.2.0
+
+  crates.lazy_static."1.2.0" = deps: { features?(features_.lazy_static."1.2.0" deps {}) }: buildRustCrate {
+    crateName = "lazy_static";
+    version = "1.2.0";
+    description = "A macro for declaring lazily evaluated statics in Rust.";
+    authors = [ "Marvin Löbel <loebel.marvin@gmail.com>" ];
+    sha256 = "07p3b30k2akyr6xw08ggd5qiz5nw3vd3agggj360fcc1njz7d0ss";
+    dependencies = mapFeatures features ([
+]);
+    features = mkFeatures (features."lazy_static"."1.2.0" or {});
+  };
+  features_.lazy_static."1.2.0" = deps: f: updateFeatures f (rec {
+    lazy_static = fold recursiveUpdate {} [
+      { "1.2.0"."spin" =
+        (f.lazy_static."1.2.0"."spin" or false) ||
+        (f.lazy_static."1.2.0".spin_no_std or false) ||
+        (lazy_static."1.2.0"."spin_no_std" or false); }
+      { "1.2.0".default = (f.lazy_static."1.2.0".default or true); }
+    ];
+  }) [];
+
+
+# end
+# lazycell-1.2.0
+
+  crates.lazycell."1.2.0" = deps: { features?(features_.lazycell."1.2.0" deps {}) }: buildRustCrate {
+    crateName = "lazycell";
+    version = "1.2.0";
+    description = "A library providing a lazily filled Cell struct";
+    authors = [ "Alex Crichton <alex@alexcrichton.com>" "Nikita Pekin <contact@nikitapek.in>" ];
+    sha256 = "1lzdb3q17yjihw9hksynxgyg8wbph1h791wff8rrf1c2aqjwhmax";
+    dependencies = mapFeatures features ([
+]);
+    features = mkFeatures (features."lazycell"."1.2.0" or {});
+  };
+  features_.lazycell."1.2.0" = deps: f: updateFeatures f (rec {
+    lazycell = fold recursiveUpdate {} [
+      { "1.2.0"."clippy" =
+        (f.lazycell."1.2.0"."clippy" or false) ||
+        (f.lazycell."1.2.0".nightly-testing or false) ||
+        (lazycell."1.2.0"."nightly-testing" or false); }
+      { "1.2.0"."nightly" =
+        (f.lazycell."1.2.0"."nightly" or false) ||
+        (f.lazycell."1.2.0".nightly-testing or false) ||
+        (lazycell."1.2.0"."nightly-testing" or false); }
+      { "1.2.0".default = (f.lazycell."1.2.0".default or true); }
+    ];
+  }) [];
+
+
+# end
+# libc-0.2.44
+
+  crates.libc."0.2.44" = deps: { features?(features_.libc."0.2.44" deps {}) }: buildRustCrate {
+    crateName = "libc";
+    version = "0.2.44";
+    description = "A library for types and bindings to native C functions often found in libc or\nother common platform libraries.\n";
+    authors = [ "The Rust Project Developers" ];
+    sha256 = "17a7p0lcf3qwl1pcxffdflgnx8zr2659mgzzg4zi5fnv1mlj3q6z";
+    build = "build.rs";
+    dependencies = mapFeatures features ([
+]);
+    features = mkFeatures (features."libc"."0.2.44" or {});
+  };
+  features_.libc."0.2.44" = deps: f: updateFeatures f (rec {
+    libc = fold recursiveUpdate {} [
+      { "0.2.44"."align" =
+        (f.libc."0.2.44"."align" or false) ||
+        (f.libc."0.2.44".rustc-dep-of-std or false) ||
+        (libc."0.2.44"."rustc-dep-of-std" or false); }
+      { "0.2.44"."rustc-std-workspace-core" =
+        (f.libc."0.2.44"."rustc-std-workspace-core" or false) ||
+        (f.libc."0.2.44".rustc-dep-of-std or false) ||
+        (libc."0.2.44"."rustc-dep-of-std" or false); }
+      { "0.2.44"."use_std" =
+        (f.libc."0.2.44"."use_std" or false) ||
+        (f.libc."0.2.44".default or false) ||
+        (libc."0.2.44"."default" or false); }
+      { "0.2.44".default = (f.libc."0.2.44".default or true); }
+    ];
+  }) [];
+
+
+# end
+# libflate-0.1.19
+
+  crates.libflate."0.1.19" = deps: { features?(features_.libflate."0.1.19" deps {}) }: buildRustCrate {
+    crateName = "libflate";
+    version = "0.1.19";
+    description = "A Rust implementation of DEFLATE algorithm and related formats (ZLIB, GZIP)";
+    authors = [ "Takeru Ohta <phjgt308@gmail.com>" ];
+    sha256 = "1klhvys9541xrwspyyv41qbr37xnwx4bdaspk6gbiprhrsqqkjp0";
+    dependencies = mapFeatures features ([
+      (crates."adler32"."${deps."libflate"."0.1.19"."adler32"}" deps)
+      (crates."byteorder"."${deps."libflate"."0.1.19"."byteorder"}" deps)
+      (crates."crc32fast"."${deps."libflate"."0.1.19"."crc32fast"}" deps)
+    ]);
+  };
+  features_.libflate."0.1.19" = deps: f: updateFeatures f ({
+    adler32."${deps.libflate."0.1.19".adler32}".default = true;
+    byteorder."${deps.libflate."0.1.19".byteorder}".default = true;
+    crc32fast."${deps.libflate."0.1.19".crc32fast}".default = true;
+    libflate."0.1.19".default = (f.libflate."0.1.19".default or true);
+  }) [
+    (features_.adler32."${deps."libflate"."0.1.19"."adler32"}" deps)
+    (features_.byteorder."${deps."libflate"."0.1.19"."byteorder"}" deps)
+    (features_.crc32fast."${deps."libflate"."0.1.19"."crc32fast"}" deps)
+  ];
+
+
+# end
+# lock_api-0.1.5
+
+  crates.lock_api."0.1.5" = deps: { features?(features_.lock_api."0.1.5" deps {}) }: buildRustCrate {
+    crateName = "lock_api";
+    version = "0.1.5";
+    description = "Wrappers to create fully-featured Mutex and RwLock types. Compatible with no_std.";
+    authors = [ "Amanieu d'Antras <amanieu@gmail.com>" ];
+    sha256 = "132sidr5hvjfkaqm3l95zpcpi8yk5ddd0g79zf1ad4v65sxirqqm";
+    dependencies = mapFeatures features ([
+      (crates."scopeguard"."${deps."lock_api"."0.1.5"."scopeguard"}" deps)
+    ]
+      ++ (if features.lock_api."0.1.5".owning_ref or false then [ (crates.owning_ref."${deps."lock_api"."0.1.5".owning_ref}" deps) ] else []));
+    features = mkFeatures (features."lock_api"."0.1.5" or {});
+  };
+  features_.lock_api."0.1.5" = deps: f: updateFeatures f ({
+    lock_api."0.1.5".default = (f.lock_api."0.1.5".default or true);
+    owning_ref."${deps.lock_api."0.1.5".owning_ref}".default = true;
+    scopeguard."${deps.lock_api."0.1.5".scopeguard}".default = (f.scopeguard."${deps.lock_api."0.1.5".scopeguard}".default or false);
+  }) [
+    (features_.owning_ref."${deps."lock_api"."0.1.5"."owning_ref"}" deps)
+    (features_.scopeguard."${deps."lock_api"."0.1.5"."scopeguard"}" deps)
+  ];
+
+
+# end
+# log-0.3.8
+
+  crates.log."0.3.8" = deps: { features?(features_.log."0.3.8" deps {}) }: buildRustCrate {
+    crateName = "log";
+    version = "0.3.8";
+    description = "A lightweight logging facade for Rust\n";
+    authors = [ "The Rust Project Developers" ];
+    sha256 = "1c43z4z85sxrsgir4s1hi84558ab5ic7jrn5qgmsiqcv90vvn006";
+    features = mkFeatures (features."log"."0.3.8" or {});
+  };
+  features_.log."0.3.8" = deps: f: updateFeatures f (rec {
+    log = fold recursiveUpdate {} [
+      { "0.3.8"."use_std" =
+        (f.log."0.3.8"."use_std" or false) ||
+        (f.log."0.3.8".default or false) ||
+        (log."0.3.8"."default" or false); }
+      { "0.3.8".default = (f.log."0.3.8".default or true); }
+    ];
+  }) [];
+
+
+# end
+# log-0.4.6
+
+  crates.log."0.4.6" = deps: { features?(features_.log."0.4.6" deps {}) }: buildRustCrate {
+    crateName = "log";
+    version = "0.4.6";
+    description = "A lightweight logging facade for Rust\n";
+    authors = [ "The Rust Project Developers" ];
+    sha256 = "1nd8dl9mvc9vd6fks5d4gsxaz990xi6rzlb8ymllshmwi153vngr";
+    dependencies = mapFeatures features ([
+      (crates."cfg_if"."${deps."log"."0.4.6"."cfg_if"}" deps)
+    ]);
+    features = mkFeatures (features."log"."0.4.6" or {});
+  };
+  features_.log."0.4.6" = deps: f: updateFeatures f ({
+    cfg_if."${deps.log."0.4.6".cfg_if}".default = true;
+    log."0.4.6".default = (f.log."0.4.6".default or true);
+  }) [
+    (features_.cfg_if."${deps."log"."0.4.6"."cfg_if"}" deps)
+  ];
+
+
+# end
+# maplit-0.1.6
+
+  crates.maplit."0.1.6" = deps: { features?(features_.maplit."0.1.6" deps {}) }: buildRustCrate {
+    crateName = "maplit";
+    version = "0.1.6";
+    description = "Container / collection literal macros for HashMap, HashSet, BTreeMap, BTreeSet.";
+    authors = [ "bluss" ];
+    sha256 = "1f8kf5v7xra8ssvh5c10qlacbk4l0z2817pkscflx5s5q6y7925h";
+  };
+  features_.maplit."0.1.6" = deps: f: updateFeatures f ({
+    maplit."0.1.6".default = (f.maplit."0.1.6".default or true);
+  }) [];
+
+
+# end
+# matches-0.1.6
+
+  crates.matches."0.1.6" = deps: { features?(features_.matches."0.1.6" deps {}) }: buildRustCrate {
+    crateName = "matches";
+    version = "0.1.6";
+    description = "A macro to evaluate, as a boolean, whether an expression matches a pattern.";
+    authors = [ "Simon Sapin <simon.sapin@exyr.org>" ];
+    sha256 = "1zlrqlbvzxdil8z8ial2ihvxjwvlvg3g8dr0lcdpsjclkclasjan";
+    libPath = "lib.rs";
+  };
+  features_.matches."0.1.6" = deps: f: updateFeatures f ({
+    matches."0.1.6".default = (f.matches."0.1.6".default or true);
+  }) [];
+
+
+# end
+# memchr-0.1.11
+
+  crates.memchr."0.1.11" = deps: { features?(features_.memchr."0.1.11" deps {}) }: buildRustCrate {
+    crateName = "memchr";
+    version = "0.1.11";
+    description = "Safe interface to memchr.";
+    authors = [ "Andrew Gallant <jamslam@gmail.com>" "bluss" ];
+    sha256 = "0x73jghamvxxq5fsw9wb0shk5m6qp3q6fsf0nibn0i6bbqkw91s8";
+    dependencies = mapFeatures features ([
+      (crates."libc"."${deps."memchr"."0.1.11"."libc"}" deps)
+    ]);
+  };
+  features_.memchr."0.1.11" = deps: f: updateFeatures f ({
+    libc."${deps.memchr."0.1.11".libc}".default = true;
+    memchr."0.1.11".default = (f.memchr."0.1.11".default or true);
+  }) [
+    (features_.libc."${deps."memchr"."0.1.11"."libc"}" deps)
+  ];
+
+
+# end
+# memoffset-0.2.1
+
+  crates.memoffset."0.2.1" = deps: { features?(features_.memoffset."0.2.1" deps {}) }: buildRustCrate {
+    crateName = "memoffset";
+    version = "0.2.1";
+    description = "offset_of functionality for Rust structs.";
+    authors = [ "Gilad Naaman <gilad.naaman@gmail.com>" ];
+    sha256 = "00vym01jk9slibq2nsiilgffp7n6k52a4q3n4dqp0xf5kzxvffcf";
+  };
+  features_.memoffset."0.2.1" = deps: f: updateFeatures f ({
+    memoffset."0.2.1".default = (f.memoffset."0.2.1".default or true);
+  }) [];
+
+
+# end
+# mime-0.3.12
+
+  crates.mime."0.3.12" = deps: { features?(features_.mime."0.3.12" deps {}) }: buildRustCrate {
+    crateName = "mime";
+    version = "0.3.12";
+    description = "Strongly Typed Mimes";
+    authors = [ "Sean McArthur <sean@seanmonstar.com>" ];
+    sha256 = "0lmcwkmxwbla9457w9ak13cfgqxfyn5wa1syjy1kll2ras5xifvh";
+    dependencies = mapFeatures features ([
+      (crates."unicase"."${deps."mime"."0.3.12"."unicase"}" deps)
+    ]);
+  };
+  features_.mime."0.3.12" = deps: f: updateFeatures f ({
+    mime."0.3.12".default = (f.mime."0.3.12".default or true);
+    unicase."${deps.mime."0.3.12".unicase}".default = true;
+  }) [
+    (features_.unicase."${deps."mime"."0.3.12"."unicase"}" deps)
+  ];
+
+
+# end
+# mime_guess-2.0.0-alpha.6
+
+  crates.mime_guess."2.0.0-alpha.6" = deps: { features?(features_.mime_guess."2.0.0-alpha.6" deps {}) }: buildRustCrate {
+    crateName = "mime_guess";
+    version = "2.0.0-alpha.6";
+    description = "A simple crate for detection of a file's MIME type by its extension.";
+    authors = [ "Austin Bonander <austin.bonander@gmail.com>" ];
+    sha256 = "1k2mdq43gi2qr63b7m5zs624rfi40ysk33cay49jlhq97jwnk9db";
+    dependencies = mapFeatures features ([
+      (crates."mime"."${deps."mime_guess"."2.0.0-alpha.6"."mime"}" deps)
+      (crates."phf"."${deps."mime_guess"."2.0.0-alpha.6"."phf"}" deps)
+      (crates."unicase"."${deps."mime_guess"."2.0.0-alpha.6"."unicase"}" deps)
+    ]);
+
+    buildDependencies = mapFeatures features ([
+      (crates."phf_codegen"."${deps."mime_guess"."2.0.0-alpha.6"."phf_codegen"}" deps)
+      (crates."unicase"."${deps."mime_guess"."2.0.0-alpha.6"."unicase"}" deps)
+    ]);
+    features = mkFeatures (features."mime_guess"."2.0.0-alpha.6" or {});
+  };
+  features_.mime_guess."2.0.0-alpha.6" = deps: f: updateFeatures f ({
+    mime."${deps.mime_guess."2.0.0-alpha.6".mime}".default = true;
+    mime_guess."2.0.0-alpha.6".default = (f.mime_guess."2.0.0-alpha.6".default or true);
+    phf = fold recursiveUpdate {} [
+      { "${deps.mime_guess."2.0.0-alpha.6".phf}"."unicase" = true; }
+      { "${deps.mime_guess."2.0.0-alpha.6".phf}".default = true; }
+    ];
+    phf_codegen."${deps.mime_guess."2.0.0-alpha.6".phf_codegen}".default = true;
+    unicase."${deps.mime_guess."2.0.0-alpha.6".unicase}".default = true;
+  }) [
+    (features_.mime."${deps."mime_guess"."2.0.0-alpha.6"."mime"}" deps)
+    (features_.phf."${deps."mime_guess"."2.0.0-alpha.6"."phf"}" deps)
+    (features_.unicase."${deps."mime_guess"."2.0.0-alpha.6"."unicase"}" deps)
+    (features_.phf_codegen."${deps."mime_guess"."2.0.0-alpha.6"."phf_codegen"}" deps)
+    (features_.unicase."${deps."mime_guess"."2.0.0-alpha.6"."unicase"}" deps)
+  ];
+
+
+# end
+# miniz-sys-0.1.10
+
+  crates.miniz_sys."0.1.10" = deps: { features?(features_.miniz_sys."0.1.10" deps {}) }: buildRustCrate {
+    crateName = "miniz-sys";
+    version = "0.1.10";
+    description = "Bindings to the miniz.c library.\n";
+    authors = [ "Alex Crichton <alex@alexcrichton.com>" ];
+    sha256 = "11vg6phafxil87nbxgrlhcx5hjr3145wsbwwkfmibvnmzxfdmvln";
+    libPath = "lib.rs";
+    libName = "miniz_sys";
+    build = "build.rs";
+    dependencies = mapFeatures features ([
+      (crates."libc"."${deps."miniz_sys"."0.1.10"."libc"}" deps)
+    ]);
+
+    buildDependencies = mapFeatures features ([
+      (crates."cc"."${deps."miniz_sys"."0.1.10"."cc"}" deps)
+    ]);
+  };
+  features_.miniz_sys."0.1.10" = deps: f: updateFeatures f ({
+    cc."${deps.miniz_sys."0.1.10".cc}".default = true;
+    libc."${deps.miniz_sys."0.1.10".libc}".default = true;
+    miniz_sys."0.1.10".default = (f.miniz_sys."0.1.10".default or true);
+  }) [
+    (features_.libc."${deps."miniz_sys"."0.1.10"."libc"}" deps)
+    (features_.cc."${deps."miniz_sys"."0.1.10"."cc"}" deps)
+  ];
+
+
+# end
+# mio-0.6.16
+
+  crates.mio."0.6.16" = deps: { features?(features_.mio."0.6.16" deps {}) }: buildRustCrate {
+    crateName = "mio";
+    version = "0.6.16";
+    description = "Lightweight non-blocking IO";
+    authors = [ "Carl Lerche <me@carllerche.com>" ];
+    sha256 = "14vyrlmf0w984pi7ad9qvmlfj6vrb0wn6i8ik9j87w5za2r3rban";
+    dependencies = mapFeatures features ([
+      (crates."iovec"."${deps."mio"."0.6.16"."iovec"}" deps)
+      (crates."lazycell"."${deps."mio"."0.6.16"."lazycell"}" deps)
+      (crates."log"."${deps."mio"."0.6.16"."log"}" deps)
+      (crates."net2"."${deps."mio"."0.6.16"."net2"}" deps)
+      (crates."slab"."${deps."mio"."0.6.16"."slab"}" deps)
+    ])
+      ++ (if kernel == "fuchsia" then mapFeatures features ([
+      (crates."fuchsia_zircon"."${deps."mio"."0.6.16"."fuchsia_zircon"}" deps)
+      (crates."fuchsia_zircon_sys"."${deps."mio"."0.6.16"."fuchsia_zircon_sys"}" deps)
+    ]) else [])
+      ++ (if (kernel == "linux" || kernel == "darwin") then mapFeatures features ([
+      (crates."libc"."${deps."mio"."0.6.16"."libc"}" deps)
+    ]) else [])
+      ++ (if kernel == "windows" then mapFeatures features ([
+      (crates."kernel32_sys"."${deps."mio"."0.6.16"."kernel32_sys"}" deps)
+      (crates."miow"."${deps."mio"."0.6.16"."miow"}" deps)
+      (crates."winapi"."${deps."mio"."0.6.16"."winapi"}" deps)
+    ]) else []);
+    features = mkFeatures (features."mio"."0.6.16" or {});
+  };
+  features_.mio."0.6.16" = deps: f: updateFeatures f (rec {
+    fuchsia_zircon."${deps.mio."0.6.16".fuchsia_zircon}".default = true;
+    fuchsia_zircon_sys."${deps.mio."0.6.16".fuchsia_zircon_sys}".default = true;
+    iovec."${deps.mio."0.6.16".iovec}".default = true;
+    kernel32_sys."${deps.mio."0.6.16".kernel32_sys}".default = true;
+    lazycell."${deps.mio."0.6.16".lazycell}".default = true;
+    libc."${deps.mio."0.6.16".libc}".default = true;
+    log."${deps.mio."0.6.16".log}".default = true;
+    mio = fold recursiveUpdate {} [
+      { "0.6.16"."with-deprecated" =
+        (f.mio."0.6.16"."with-deprecated" or false) ||
+        (f.mio."0.6.16".default or false) ||
+        (mio."0.6.16"."default" or false); }
+      { "0.6.16".default = (f.mio."0.6.16".default or true); }
+    ];
+    miow."${deps.mio."0.6.16".miow}".default = true;
+    net2."${deps.mio."0.6.16".net2}".default = true;
+    slab."${deps.mio."0.6.16".slab}".default = true;
+    winapi."${deps.mio."0.6.16".winapi}".default = true;
+  }) [
+    (features_.iovec."${deps."mio"."0.6.16"."iovec"}" deps)
+    (features_.lazycell."${deps."mio"."0.6.16"."lazycell"}" deps)
+    (features_.log."${deps."mio"."0.6.16"."log"}" deps)
+    (features_.net2."${deps."mio"."0.6.16"."net2"}" deps)
+    (features_.slab."${deps."mio"."0.6.16"."slab"}" deps)
+    (features_.fuchsia_zircon."${deps."mio"."0.6.16"."fuchsia_zircon"}" deps)
+    (features_.fuchsia_zircon_sys."${deps."mio"."0.6.16"."fuchsia_zircon_sys"}" deps)
+    (features_.libc."${deps."mio"."0.6.16"."libc"}" deps)
+    (features_.kernel32_sys."${deps."mio"."0.6.16"."kernel32_sys"}" deps)
+    (features_.miow."${deps."mio"."0.6.16"."miow"}" deps)
+    (features_.winapi."${deps."mio"."0.6.16"."winapi"}" deps)
+  ];
+
+
+# end
+# miow-0.2.1
+
+  crates.miow."0.2.1" = deps: { features?(features_.miow."0.2.1" deps {}) }: buildRustCrate {
+    crateName = "miow";
+    version = "0.2.1";
+    description = "A zero overhead I/O library for Windows, focusing on IOCP and Async I/O\nabstractions.\n";
+    authors = [ "Alex Crichton <alex@alexcrichton.com>" ];
+    sha256 = "14f8zkc6ix7mkyis1vsqnim8m29b6l55abkba3p2yz7j1ibcvrl0";
+    dependencies = mapFeatures features ([
+      (crates."kernel32_sys"."${deps."miow"."0.2.1"."kernel32_sys"}" deps)
+      (crates."net2"."${deps."miow"."0.2.1"."net2"}" deps)
+      (crates."winapi"."${deps."miow"."0.2.1"."winapi"}" deps)
+      (crates."ws2_32_sys"."${deps."miow"."0.2.1"."ws2_32_sys"}" deps)
+    ]);
+  };
+  features_.miow."0.2.1" = deps: f: updateFeatures f ({
+    kernel32_sys."${deps.miow."0.2.1".kernel32_sys}".default = true;
+    miow."0.2.1".default = (f.miow."0.2.1".default or true);
+    net2."${deps.miow."0.2.1".net2}".default = (f.net2."${deps.miow."0.2.1".net2}".default or false);
+    winapi."${deps.miow."0.2.1".winapi}".default = true;
+    ws2_32_sys."${deps.miow."0.2.1".ws2_32_sys}".default = true;
+  }) [
+    (features_.kernel32_sys."${deps."miow"."0.2.1"."kernel32_sys"}" deps)
+    (features_.net2."${deps."miow"."0.2.1"."net2"}" deps)
+    (features_.winapi."${deps."miow"."0.2.1"."winapi"}" deps)
+    (features_.ws2_32_sys."${deps."miow"."0.2.1"."ws2_32_sys"}" deps)
+  ];
+
+
+# end
+# native-tls-0.2.2
+
+  crates.native_tls."0.2.2" = deps: { features?(features_.native_tls."0.2.2" deps {}) }: buildRustCrate {
+    crateName = "native-tls";
+    version = "0.2.2";
+    description = "A wrapper over a platform's native TLS implementation";
+    authors = [ "Steven Fackler <sfackler@gmail.com>" ];
+    sha256 = "0vl2hmmnrcjfylzjfsbnav20ri2n1qjgxn7bklb4mk3fyxfqm1m9";
+    dependencies = (if kernel == "darwin" || kernel == "ios" then mapFeatures features ([
+      (crates."lazy_static"."${deps."native_tls"."0.2.2"."lazy_static"}" deps)
+      (crates."libc"."${deps."native_tls"."0.2.2"."libc"}" deps)
+      (crates."security_framework"."${deps."native_tls"."0.2.2"."security_framework"}" deps)
+      (crates."security_framework_sys"."${deps."native_tls"."0.2.2"."security_framework_sys"}" deps)
+      (crates."tempfile"."${deps."native_tls"."0.2.2"."tempfile"}" deps)
+    ]) else [])
+      ++ (if !(kernel == "windows" || kernel == "darwin" || kernel == "ios") then mapFeatures features ([
+      (crates."openssl"."${deps."native_tls"."0.2.2"."openssl"}" deps)
+      (crates."openssl_probe"."${deps."native_tls"."0.2.2"."openssl_probe"}" deps)
+      (crates."openssl_sys"."${deps."native_tls"."0.2.2"."openssl_sys"}" deps)
+    ]) else [])
+      ++ (if kernel == "android" then mapFeatures features ([
+      (crates."log"."${deps."native_tls"."0.2.2"."log"}" deps)
+    ]) else [])
+      ++ (if kernel == "windows" then mapFeatures features ([
+      (crates."schannel"."${deps."native_tls"."0.2.2"."schannel"}" deps)
+    ]) else []);
+    features = mkFeatures (features."native_tls"."0.2.2" or {});
+  };
+  features_.native_tls."0.2.2" = deps: f: updateFeatures f ({
+    lazy_static."${deps.native_tls."0.2.2".lazy_static}".default = true;
+    libc."${deps.native_tls."0.2.2".libc}".default = true;
+    log."${deps.native_tls."0.2.2".log}".default = true;
+    native_tls."0.2.2".default = (f.native_tls."0.2.2".default or true);
+    openssl."${deps.native_tls."0.2.2".openssl}".default = true;
+    openssl_probe."${deps.native_tls."0.2.2".openssl_probe}".default = true;
+    openssl_sys."${deps.native_tls."0.2.2".openssl_sys}".default = true;
+    schannel."${deps.native_tls."0.2.2".schannel}".default = true;
+    security_framework."${deps.native_tls."0.2.2".security_framework}".default = true;
+    security_framework_sys."${deps.native_tls."0.2.2".security_framework_sys}".default = true;
+    tempfile."${deps.native_tls."0.2.2".tempfile}".default = true;
+  }) [
+    (features_.lazy_static."${deps."native_tls"."0.2.2"."lazy_static"}" deps)
+    (features_.libc."${deps."native_tls"."0.2.2"."libc"}" deps)
+    (features_.security_framework."${deps."native_tls"."0.2.2"."security_framework"}" deps)
+    (features_.security_framework_sys."${deps."native_tls"."0.2.2"."security_framework_sys"}" deps)
+    (features_.tempfile."${deps."native_tls"."0.2.2"."tempfile"}" deps)
+    (features_.openssl."${deps."native_tls"."0.2.2"."openssl"}" deps)
+    (features_.openssl_probe."${deps."native_tls"."0.2.2"."openssl_probe"}" deps)
+    (features_.openssl_sys."${deps."native_tls"."0.2.2"."openssl_sys"}" deps)
+    (features_.log."${deps."native_tls"."0.2.2"."log"}" deps)
+    (features_.schannel."${deps."native_tls"."0.2.2"."schannel"}" deps)
+  ];
+
+
+# end
+# net2-0.2.33
+
+  crates.net2."0.2.33" = deps: { features?(features_.net2."0.2.33" deps {}) }: buildRustCrate {
+    crateName = "net2";
+    version = "0.2.33";
+    description = "Extensions to the standard library's networking types as proposed in RFC 1158.\n";
+    authors = [ "Alex Crichton <alex@alexcrichton.com>" ];
+    sha256 = "1qnmajafgybj5wyxz9iffa8x5wgbwd2znfklmhqj7vl6lw1m65mq";
+    dependencies = mapFeatures features ([
+      (crates."cfg_if"."${deps."net2"."0.2.33"."cfg_if"}" deps)
+    ])
+      ++ (if kernel == "redox" || (kernel == "linux" || kernel == "darwin") then mapFeatures features ([
+      (crates."libc"."${deps."net2"."0.2.33"."libc"}" deps)
+    ]) else [])
+      ++ (if kernel == "windows" then mapFeatures features ([
+      (crates."winapi"."${deps."net2"."0.2.33"."winapi"}" deps)
+    ]) else []);
+    features = mkFeatures (features."net2"."0.2.33" or {});
+  };
+  features_.net2."0.2.33" = deps: f: updateFeatures f (rec {
+    cfg_if."${deps.net2."0.2.33".cfg_if}".default = true;
+    libc."${deps.net2."0.2.33".libc}".default = true;
+    net2 = fold recursiveUpdate {} [
+      { "0.2.33"."duration" =
+        (f.net2."0.2.33"."duration" or false) ||
+        (f.net2."0.2.33".default or false) ||
+        (net2."0.2.33"."default" or false); }
+      { "0.2.33".default = (f.net2."0.2.33".default or true); }
+    ];
+    winapi = fold recursiveUpdate {} [
+      { "${deps.net2."0.2.33".winapi}"."handleapi" = true; }
+      { "${deps.net2."0.2.33".winapi}"."winsock2" = true; }
+      { "${deps.net2."0.2.33".winapi}"."ws2def" = true; }
+      { "${deps.net2."0.2.33".winapi}"."ws2ipdef" = true; }
+      { "${deps.net2."0.2.33".winapi}"."ws2tcpip" = true; }
+      { "${deps.net2."0.2.33".winapi}".default = true; }
+    ];
+  }) [
+    (features_.cfg_if."${deps."net2"."0.2.33"."cfg_if"}" deps)
+    (features_.libc."${deps."net2"."0.2.33"."libc"}" deps)
+    (features_.winapi."${deps."net2"."0.2.33"."winapi"}" deps)
+  ];
+
+
+# end
+# nodrop-0.1.13
+
+  crates.nodrop."0.1.13" = deps: { features?(features_.nodrop."0.1.13" deps {}) }: buildRustCrate {
+    crateName = "nodrop";
+    version = "0.1.13";
+    description = "A wrapper type to inhibit drop (destructor). Use std::mem::ManuallyDrop instead!";
+    authors = [ "bluss" ];
+    sha256 = "0gkfx6wihr9z0m8nbdhma5pyvbipznjpkzny2d4zkc05b0vnhinb";
+    dependencies = mapFeatures features ([
+]);
+    features = mkFeatures (features."nodrop"."0.1.13" or {});
+  };
+  features_.nodrop."0.1.13" = deps: f: updateFeatures f (rec {
+    nodrop = fold recursiveUpdate {} [
+      { "0.1.13"."nodrop-union" =
+        (f.nodrop."0.1.13"."nodrop-union" or false) ||
+        (f.nodrop."0.1.13".use_union or false) ||
+        (nodrop."0.1.13"."use_union" or false); }
+      { "0.1.13"."std" =
+        (f.nodrop."0.1.13"."std" or false) ||
+        (f.nodrop."0.1.13".default or false) ||
+        (nodrop."0.1.13"."default" or false); }
+      { "0.1.13".default = (f.nodrop."0.1.13".default or true); }
+    ];
+  }) [];
+
+
+# end
+# num-0.1.40
+
+  crates.num."0.1.40" = deps: { features?(features_.num."0.1.40" deps {}) }: buildRustCrate {
+    crateName = "num";
+    version = "0.1.40";
+    description = "A collection of numeric types and traits for Rust, including bigint,\ncomplex, rational, range iterators, generic integers, and more!\n";
+    authors = [ "The Rust Project Developers" ];
+    sha256 = "0b29c25n9mpf6a921khj7a6y3hz5va4vgwppcd2if975qq1shakg";
+    dependencies = mapFeatures features ([
+      (crates."num_integer"."${deps."num"."0.1.40"."num_integer"}" deps)
+      (crates."num_iter"."${deps."num"."0.1.40"."num_iter"}" deps)
+      (crates."num_traits"."${deps."num"."0.1.40"."num_traits"}" deps)
+    ]);
+    features = mkFeatures (features."num"."0.1.40" or {});
+  };
+  features_.num."0.1.40" = deps: f: updateFeatures f (rec {
+    num = fold recursiveUpdate {} [
+      { "0.1.40"."bigint" =
+        (f.num."0.1.40"."bigint" or false) ||
+        (f.num."0.1.40".default or false) ||
+        (num."0.1.40"."default" or false); }
+      { "0.1.40"."complex" =
+        (f.num."0.1.40"."complex" or false) ||
+        (f.num."0.1.40".default or false) ||
+        (num."0.1.40"."default" or false); }
+      { "0.1.40"."num-bigint" =
+        (f.num."0.1.40"."num-bigint" or false) ||
+        (f.num."0.1.40".bigint or false) ||
+        (num."0.1.40"."bigint" or false); }
+      { "0.1.40"."num-complex" =
+        (f.num."0.1.40"."num-complex" or false) ||
+        (f.num."0.1.40".complex or false) ||
+        (num."0.1.40"."complex" or false); }
+      { "0.1.40"."num-rational" =
+        (f.num."0.1.40"."num-rational" or false) ||
+        (f.num."0.1.40".rational or false) ||
+        (num."0.1.40"."rational" or false); }
+      { "0.1.40"."rational" =
+        (f.num."0.1.40"."rational" or false) ||
+        (f.num."0.1.40".default or false) ||
+        (num."0.1.40"."default" or false); }
+      { "0.1.40"."rustc-serialize" =
+        (f.num."0.1.40"."rustc-serialize" or false) ||
+        (f.num."0.1.40".default or false) ||
+        (num."0.1.40"."default" or false); }
+      { "0.1.40".default = (f.num."0.1.40".default or true); }
+    ];
+    num_integer."${deps.num."0.1.40".num_integer}".default = true;
+    num_iter."${deps.num."0.1.40".num_iter}".default = true;
+    num_traits."${deps.num."0.1.40".num_traits}".default = true;
+  }) [
+    (features_.num_integer."${deps."num"."0.1.40"."num_integer"}" deps)
+    (features_.num_iter."${deps."num"."0.1.40"."num_iter"}" deps)
+    (features_.num_traits."${deps."num"."0.1.40"."num_traits"}" deps)
+  ];
+
+
+# end
+# num-integer-0.1.35
+
+  crates.num_integer."0.1.35" = deps: { features?(features_.num_integer."0.1.35" deps {}) }: buildRustCrate {
+    crateName = "num-integer";
+    version = "0.1.35";
+    description = "Integer traits and functions";
+    authors = [ "The Rust Project Developers" ];
+    sha256 = "0xybj8isi9b6wc646d5rc043i8l8j6wy0vrl4pn995qms9fxbbcc";
+    dependencies = mapFeatures features ([
+      (crates."num_traits"."${deps."num_integer"."0.1.35"."num_traits"}" deps)
+    ]);
+  };
+  features_.num_integer."0.1.35" = deps: f: updateFeatures f ({
+    num_integer."0.1.35".default = (f.num_integer."0.1.35".default or true);
+    num_traits."${deps.num_integer."0.1.35".num_traits}".default = true;
+  }) [
+    (features_.num_traits."${deps."num_integer"."0.1.35"."num_traits"}" deps)
+  ];
+
+
+# end
+# num-iter-0.1.34
+
+  crates.num_iter."0.1.34" = deps: { features?(features_.num_iter."0.1.34" deps {}) }: buildRustCrate {
+    crateName = "num-iter";
+    version = "0.1.34";
+    description = "External iterators for generic mathematics";
+    authors = [ "The Rust Project Developers" ];
+    sha256 = "02cld7x9dzbqbs6sxxzq1i22z3awlcd6ljkgvhkfr9rsnaxphzl9";
+    dependencies = mapFeatures features ([
+      (crates."num_integer"."${deps."num_iter"."0.1.34"."num_integer"}" deps)
+      (crates."num_traits"."${deps."num_iter"."0.1.34"."num_traits"}" deps)
+    ]);
+  };
+  features_.num_iter."0.1.34" = deps: f: updateFeatures f ({
+    num_integer."${deps.num_iter."0.1.34".num_integer}".default = true;
+    num_iter."0.1.34".default = (f.num_iter."0.1.34".default or true);
+    num_traits."${deps.num_iter."0.1.34".num_traits}".default = true;
+  }) [
+    (features_.num_integer."${deps."num_iter"."0.1.34"."num_integer"}" deps)
+    (features_.num_traits."${deps."num_iter"."0.1.34"."num_traits"}" deps)
+  ];
+
+
+# end
+# num-traits-0.1.40
+
+  crates.num_traits."0.1.40" = deps: { features?(features_.num_traits."0.1.40" deps {}) }: buildRustCrate {
+    crateName = "num-traits";
+    version = "0.1.40";
+    description = "Numeric traits for generic mathematics";
+    authors = [ "The Rust Project Developers" ];
+    sha256 = "1fr8ghp4i97q3agki54i0hpmqxv3s65i2mqd1pinc7w7arc3fplw";
+  };
+  features_.num_traits."0.1.40" = deps: f: updateFeatures f ({
+    num_traits."0.1.40".default = (f.num_traits."0.1.40".default or true);
+  }) [];
+
+
+# end
+# num_cpus-1.8.0
+
+  crates.num_cpus."1.8.0" = deps: { features?(features_.num_cpus."1.8.0" deps {}) }: buildRustCrate {
+    crateName = "num_cpus";
+    version = "1.8.0";
+    description = "Get the number of CPUs on a machine.";
+    authors = [ "Sean McArthur <sean@seanmonstar.com>" ];
+    sha256 = "1y6qnd9r8ga6y8mvlabdrr73nc8cshjjlzbvnanzyj9b8zzkfwk2";
+    dependencies = mapFeatures features ([
+      (crates."libc"."${deps."num_cpus"."1.8.0"."libc"}" deps)
+    ]);
+  };
+  features_.num_cpus."1.8.0" = deps: f: updateFeatures f ({
+    libc."${deps.num_cpus."1.8.0".libc}".default = true;
+    num_cpus."1.8.0".default = (f.num_cpus."1.8.0".default or true);
+  }) [
+    (features_.libc."${deps."num_cpus"."1.8.0"."libc"}" deps)
+  ];
+
+
+# end
+# openssl-0.10.15
+
+  crates.openssl."0.10.15" = deps: { features?(features_.openssl."0.10.15" deps {}) }: buildRustCrate {
+    crateName = "openssl";
+    version = "0.10.15";
+    description = "OpenSSL bindings";
+    authors = [ "Steven Fackler <sfackler@gmail.com>" ];
+    sha256 = "0fj5g66ibkyb6vfdfjgaypfn45vpj2cdv7d7qpq653sv57glcqri";
+    dependencies = mapFeatures features ([
+      (crates."bitflags"."${deps."openssl"."0.10.15"."bitflags"}" deps)
+      (crates."cfg_if"."${deps."openssl"."0.10.15"."cfg_if"}" deps)
+      (crates."foreign_types"."${deps."openssl"."0.10.15"."foreign_types"}" deps)
+      (crates."lazy_static"."${deps."openssl"."0.10.15"."lazy_static"}" deps)
+      (crates."libc"."${deps."openssl"."0.10.15"."libc"}" deps)
+      (crates."openssl_sys"."${deps."openssl"."0.10.15"."openssl_sys"}" deps)
+    ]);
+    features = mkFeatures (features."openssl"."0.10.15" or {});
+  };
+  features_.openssl."0.10.15" = deps: f: updateFeatures f (rec {
+    bitflags."${deps.openssl."0.10.15".bitflags}".default = true;
+    cfg_if."${deps.openssl."0.10.15".cfg_if}".default = true;
+    foreign_types."${deps.openssl."0.10.15".foreign_types}".default = true;
+    lazy_static."${deps.openssl."0.10.15".lazy_static}".default = true;
+    libc."${deps.openssl."0.10.15".libc}".default = true;
+    openssl."0.10.15".default = (f.openssl."0.10.15".default or true);
+    openssl_sys = fold recursiveUpdate {} [
+      { "${deps.openssl."0.10.15".openssl_sys}"."vendored" =
+        (f.openssl_sys."${deps.openssl."0.10.15".openssl_sys}"."vendored" or false) ||
+        (openssl."0.10.15"."vendored" or false) ||
+        (f."openssl"."0.10.15"."vendored" or false); }
+      { "${deps.openssl."0.10.15".openssl_sys}".default = true; }
+    ];
+  }) [
+    (features_.bitflags."${deps."openssl"."0.10.15"."bitflags"}" deps)
+    (features_.cfg_if."${deps."openssl"."0.10.15"."cfg_if"}" deps)
+    (features_.foreign_types."${deps."openssl"."0.10.15"."foreign_types"}" deps)
+    (features_.lazy_static."${deps."openssl"."0.10.15"."lazy_static"}" deps)
+    (features_.libc."${deps."openssl"."0.10.15"."libc"}" deps)
+    (features_.openssl_sys."${deps."openssl"."0.10.15"."openssl_sys"}" deps)
+  ];
+
+
+# end
+# openssl-probe-0.1.2
+
+  crates.openssl_probe."0.1.2" = deps: { features?(features_.openssl_probe."0.1.2" deps {}) }: buildRustCrate {
+    crateName = "openssl-probe";
+    version = "0.1.2";
+    description = "Tool for helping to find SSL certificate locations on the system for OpenSSL\n";
+    authors = [ "Alex Crichton <alex@alexcrichton.com>" ];
+    sha256 = "1a89fznx26vvaxyrxdvgf6iwai5xvs6xjvpjin68fgvrslv6n15a";
+  };
+  features_.openssl_probe."0.1.2" = deps: f: updateFeatures f ({
+    openssl_probe."0.1.2".default = (f.openssl_probe."0.1.2".default or true);
+  }) [];
+
+
+# end
+# openssl-sys-0.9.39
+
+  crates.openssl_sys."0.9.39" = deps: { features?(features_.openssl_sys."0.9.39" deps {}) }: buildRustCrate {
+    crateName = "openssl-sys";
+    version = "0.9.39";
+    description = "FFI bindings to OpenSSL";
+    authors = [ "Alex Crichton <alex@alexcrichton.com>" "Steven Fackler <sfackler@gmail.com>" ];
+    sha256 = "1lraqg3xz4jxrc99na17kn6srfhsgnj1yjk29mgsh803w40s2056";
+    build = "build/main.rs";
+    dependencies = mapFeatures features ([
+      (crates."libc"."${deps."openssl_sys"."0.9.39"."libc"}" deps)
+    ])
+      ++ (if abi == "msvc" then mapFeatures features ([
+]) else []);
+
+    buildDependencies = mapFeatures features ([
+      (crates."cc"."${deps."openssl_sys"."0.9.39"."cc"}" deps)
+      (crates."pkg_config"."${deps."openssl_sys"."0.9.39"."pkg_config"}" deps)
+    ]);
+    features = mkFeatures (features."openssl_sys"."0.9.39" or {});
+  };
+  features_.openssl_sys."0.9.39" = deps: f: updateFeatures f (rec {
+    cc."${deps.openssl_sys."0.9.39".cc}".default = true;
+    libc."${deps.openssl_sys."0.9.39".libc}".default = true;
+    openssl_sys = fold recursiveUpdate {} [
+      { "0.9.39"."openssl-src" =
+        (f.openssl_sys."0.9.39"."openssl-src" or false) ||
+        (f.openssl_sys."0.9.39".vendored or false) ||
+        (openssl_sys."0.9.39"."vendored" or false); }
+      { "0.9.39".default = (f.openssl_sys."0.9.39".default or true); }
+    ];
+    pkg_config."${deps.openssl_sys."0.9.39".pkg_config}".default = true;
+  }) [
+    (features_.libc."${deps."openssl_sys"."0.9.39"."libc"}" deps)
+    (features_.cc."${deps."openssl_sys"."0.9.39"."cc"}" deps)
+    (features_.pkg_config."${deps."openssl_sys"."0.9.39"."pkg_config"}" deps)
+  ];
+
+
+# end
+# owning_ref-0.4.0
+
+  crates.owning_ref."0.4.0" = deps: { features?(features_.owning_ref."0.4.0" deps {}) }: buildRustCrate {
+    crateName = "owning_ref";
+    version = "0.4.0";
+    description = "A library for creating references that carry their owner with them.";
+    authors = [ "Marvin Löbel <loebel.marvin@gmail.com>" ];
+    sha256 = "1m95qpc3hamkw9wlbfzqkzk7h6skyj40zr6sa3ps151slcfnnchm";
+    dependencies = mapFeatures features ([
+      (crates."stable_deref_trait"."${deps."owning_ref"."0.4.0"."stable_deref_trait"}" deps)
+    ]);
+  };
+  features_.owning_ref."0.4.0" = deps: f: updateFeatures f ({
+    owning_ref."0.4.0".default = (f.owning_ref."0.4.0".default or true);
+    stable_deref_trait."${deps.owning_ref."0.4.0".stable_deref_trait}".default = true;
+  }) [
+    (features_.stable_deref_trait."${deps."owning_ref"."0.4.0"."stable_deref_trait"}" deps)
+  ];
+
+
+# end
+# parking_lot-0.6.4
+
+  crates.parking_lot."0.6.4" = deps: { features?(features_.parking_lot."0.6.4" deps {}) }: buildRustCrate {
+    crateName = "parking_lot";
+    version = "0.6.4";
+    description = "More compact and efficient implementations of the standard synchronization primitives.";
+    authors = [ "Amanieu d'Antras <amanieu@gmail.com>" ];
+    sha256 = "0qwfysx8zfkj72sfcrqvd6pp7lgjmklyixsi3y0g6xjspw876rax";
+    dependencies = mapFeatures features ([
+      (crates."lock_api"."${deps."parking_lot"."0.6.4"."lock_api"}" deps)
+      (crates."parking_lot_core"."${deps."parking_lot"."0.6.4"."parking_lot_core"}" deps)
+    ]);
+    features = mkFeatures (features."parking_lot"."0.6.4" or {});
+  };
+  features_.parking_lot."0.6.4" = deps: f: updateFeatures f (rec {
+    lock_api = fold recursiveUpdate {} [
+      { "${deps.parking_lot."0.6.4".lock_api}"."nightly" =
+        (f.lock_api."${deps.parking_lot."0.6.4".lock_api}"."nightly" or false) ||
+        (parking_lot."0.6.4"."nightly" or false) ||
+        (f."parking_lot"."0.6.4"."nightly" or false); }
+      { "${deps.parking_lot."0.6.4".lock_api}"."owning_ref" =
+        (f.lock_api."${deps.parking_lot."0.6.4".lock_api}"."owning_ref" or false) ||
+        (parking_lot."0.6.4"."owning_ref" or false) ||
+        (f."parking_lot"."0.6.4"."owning_ref" or false); }
+      { "${deps.parking_lot."0.6.4".lock_api}".default = true; }
+    ];
+    parking_lot = fold recursiveUpdate {} [
+      { "0.6.4"."owning_ref" =
+        (f.parking_lot."0.6.4"."owning_ref" or false) ||
+        (f.parking_lot."0.6.4".default or false) ||
+        (parking_lot."0.6.4"."default" or false); }
+      { "0.6.4".default = (f.parking_lot."0.6.4".default or true); }
+    ];
+    parking_lot_core = fold recursiveUpdate {} [
+      { "${deps.parking_lot."0.6.4".parking_lot_core}"."deadlock_detection" =
+        (f.parking_lot_core."${deps.parking_lot."0.6.4".parking_lot_core}"."deadlock_detection" or false) ||
+        (parking_lot."0.6.4"."deadlock_detection" or false) ||
+        (f."parking_lot"."0.6.4"."deadlock_detection" or false); }
+      { "${deps.parking_lot."0.6.4".parking_lot_core}"."nightly" =
+        (f.parking_lot_core."${deps.parking_lot."0.6.4".parking_lot_core}"."nightly" or false) ||
+        (parking_lot."0.6.4"."nightly" or false) ||
+        (f."parking_lot"."0.6.4"."nightly" or false); }
+      { "${deps.parking_lot."0.6.4".parking_lot_core}".default = true; }
+    ];
+  }) [
+    (features_.lock_api."${deps."parking_lot"."0.6.4"."lock_api"}" deps)
+    (features_.parking_lot_core."${deps."parking_lot"."0.6.4"."parking_lot_core"}" deps)
+  ];
+
+
+# end
+# parking_lot_core-0.3.1
+
+  crates.parking_lot_core."0.3.1" = deps: { features?(features_.parking_lot_core."0.3.1" deps {}) }: buildRustCrate {
+    crateName = "parking_lot_core";
+    version = "0.3.1";
+    description = "An advanced API for creating custom synchronization primitives.";
+    authors = [ "Amanieu d'Antras <amanieu@gmail.com>" ];
+    sha256 = "0h5p7dys8cx9y6ii4i57ampf7qdr8zmkpn543kd3h7nkhml8bw72";
+    dependencies = mapFeatures features ([
+      (crates."rand"."${deps."parking_lot_core"."0.3.1"."rand"}" deps)
+      (crates."smallvec"."${deps."parking_lot_core"."0.3.1"."smallvec"}" deps)
+    ])
+      ++ (if (kernel == "linux" || kernel == "darwin") then mapFeatures features ([
+      (crates."libc"."${deps."parking_lot_core"."0.3.1"."libc"}" deps)
+    ]) else [])
+      ++ (if kernel == "windows" then mapFeatures features ([
+      (crates."winapi"."${deps."parking_lot_core"."0.3.1"."winapi"}" deps)
+    ]) else []);
+
+    buildDependencies = mapFeatures features ([
+      (crates."rustc_version"."${deps."parking_lot_core"."0.3.1"."rustc_version"}" deps)
+    ]);
+    features = mkFeatures (features."parking_lot_core"."0.3.1" or {});
+  };
+  features_.parking_lot_core."0.3.1" = deps: f: updateFeatures f (rec {
+    libc."${deps.parking_lot_core."0.3.1".libc}".default = true;
+    parking_lot_core = fold recursiveUpdate {} [
+      { "0.3.1"."backtrace" =
+        (f.parking_lot_core."0.3.1"."backtrace" or false) ||
+        (f.parking_lot_core."0.3.1".deadlock_detection or false) ||
+        (parking_lot_core."0.3.1"."deadlock_detection" or false); }
+      { "0.3.1"."petgraph" =
+        (f.parking_lot_core."0.3.1"."petgraph" or false) ||
+        (f.parking_lot_core."0.3.1".deadlock_detection or false) ||
+        (parking_lot_core."0.3.1"."deadlock_detection" or false); }
+      { "0.3.1"."thread-id" =
+        (f.parking_lot_core."0.3.1"."thread-id" or false) ||
+        (f.parking_lot_core."0.3.1".deadlock_detection or false) ||
+        (parking_lot_core."0.3.1"."deadlock_detection" or false); }
+      { "0.3.1".default = (f.parking_lot_core."0.3.1".default or true); }
+    ];
+    rand."${deps.parking_lot_core."0.3.1".rand}".default = true;
+    rustc_version."${deps.parking_lot_core."0.3.1".rustc_version}".default = true;
+    smallvec."${deps.parking_lot_core."0.3.1".smallvec}".default = true;
+    winapi = fold recursiveUpdate {} [
+      { "${deps.parking_lot_core."0.3.1".winapi}"."errhandlingapi" = true; }
+      { "${deps.parking_lot_core."0.3.1".winapi}"."handleapi" = true; }
+      { "${deps.parking_lot_core."0.3.1".winapi}"."minwindef" = true; }
+      { "${deps.parking_lot_core."0.3.1".winapi}"."ntstatus" = true; }
+      { "${deps.parking_lot_core."0.3.1".winapi}"."winbase" = true; }
+      { "${deps.parking_lot_core."0.3.1".winapi}"."winerror" = true; }
+      { "${deps.parking_lot_core."0.3.1".winapi}"."winnt" = true; }
+      { "${deps.parking_lot_core."0.3.1".winapi}".default = true; }
+    ];
+  }) [
+    (features_.rand."${deps."parking_lot_core"."0.3.1"."rand"}" deps)
+    (features_.smallvec."${deps."parking_lot_core"."0.3.1"."smallvec"}" deps)
+    (features_.rustc_version."${deps."parking_lot_core"."0.3.1"."rustc_version"}" deps)
+    (features_.libc."${deps."parking_lot_core"."0.3.1"."libc"}" deps)
+    (features_.winapi."${deps."parking_lot_core"."0.3.1"."winapi"}" deps)
+  ];
+
+
+# end
+# percent-encoding-1.0.1
+
+  crates.percent_encoding."1.0.1" = deps: { features?(features_.percent_encoding."1.0.1" deps {}) }: buildRustCrate {
+    crateName = "percent-encoding";
+    version = "1.0.1";
+    description = "Percent encoding and decoding";
+    authors = [ "The rust-url developers" ];
+    sha256 = "04ahrp7aw4ip7fmadb0bknybmkfav0kk0gw4ps3ydq5w6hr0ib5i";
+    libPath = "lib.rs";
+  };
+  features_.percent_encoding."1.0.1" = deps: f: updateFeatures f ({
+    percent_encoding."1.0.1".default = (f.percent_encoding."1.0.1".default or true);
+  }) [];
+
+
+# end
+# phf-0.7.21
+
+  crates.phf."0.7.21" = deps: { features?(features_.phf."0.7.21" deps {}) }: buildRustCrate {
+    crateName = "phf";
+    version = "0.7.21";
+    description = "Runtime support for perfect hash function data structures";
+    authors = [ "Steven Fackler <sfackler@gmail.com>" ];
+    sha256 = "11m2rzm2s8s35m0s97gjxxb181xz352kjlhr387xj5c8q3qp5afg";
+    libPath = "src/lib.rs";
+    dependencies = mapFeatures features ([
+      (crates."phf_shared"."${deps."phf"."0.7.21"."phf_shared"}" deps)
+    ]);
+    features = mkFeatures (features."phf"."0.7.21" or {});
+  };
+  features_.phf."0.7.21" = deps: f: updateFeatures f (rec {
+    phf."0.7.21".default = (f.phf."0.7.21".default or true);
+    phf_shared = fold recursiveUpdate {} [
+      { "${deps.phf."0.7.21".phf_shared}"."core" =
+        (f.phf_shared."${deps.phf."0.7.21".phf_shared}"."core" or false) ||
+        (phf."0.7.21"."core" or false) ||
+        (f."phf"."0.7.21"."core" or false); }
+      { "${deps.phf."0.7.21".phf_shared}"."unicase" =
+        (f.phf_shared."${deps.phf."0.7.21".phf_shared}"."unicase" or false) ||
+        (phf."0.7.21"."unicase" or false) ||
+        (f."phf"."0.7.21"."unicase" or false); }
+      { "${deps.phf."0.7.21".phf_shared}".default = true; }
+    ];
+  }) [
+    (features_.phf_shared."${deps."phf"."0.7.21"."phf_shared"}" deps)
+  ];
+
+
+# end
+# phf_codegen-0.7.21
+
+  crates.phf_codegen."0.7.21" = deps: { features?(features_.phf_codegen."0.7.21" deps {}) }: buildRustCrate {
+    crateName = "phf_codegen";
+    version = "0.7.21";
+    description = "Codegen library for PHF types";
+    authors = [ "Steven Fackler <sfackler@gmail.com>" ];
+    sha256 = "0kgy8s2q4zr0iqcm21mgq4ppc45wy6z7b5wn98xyfsrcad6lwmmj";
+    dependencies = mapFeatures features ([
+      (crates."phf_generator"."${deps."phf_codegen"."0.7.21"."phf_generator"}" deps)
+      (crates."phf_shared"."${deps."phf_codegen"."0.7.21"."phf_shared"}" deps)
+    ]);
+  };
+  features_.phf_codegen."0.7.21" = deps: f: updateFeatures f ({
+    phf_codegen."0.7.21".default = (f.phf_codegen."0.7.21".default or true);
+    phf_generator."${deps.phf_codegen."0.7.21".phf_generator}".default = true;
+    phf_shared."${deps.phf_codegen."0.7.21".phf_shared}".default = true;
+  }) [
+    (features_.phf_generator."${deps."phf_codegen"."0.7.21"."phf_generator"}" deps)
+    (features_.phf_shared."${deps."phf_codegen"."0.7.21"."phf_shared"}" deps)
+  ];
+
+
+# end
+# phf_generator-0.7.21
+
+  crates.phf_generator."0.7.21" = deps: { features?(features_.phf_generator."0.7.21" deps {}) }: buildRustCrate {
+    crateName = "phf_generator";
+    version = "0.7.21";
+    description = "PHF generation logic";
+    authors = [ "Steven Fackler <sfackler@gmail.com>" ];
+    sha256 = "1jxjfzc6d6d4l9nv0r2bb66if5brk9lnncmg4dpjjifn6zhhqd9g";
+    dependencies = mapFeatures features ([
+      (crates."phf_shared"."${deps."phf_generator"."0.7.21"."phf_shared"}" deps)
+      (crates."rand"."${deps."phf_generator"."0.7.21"."rand"}" deps)
+    ]);
+  };
+  features_.phf_generator."0.7.21" = deps: f: updateFeatures f ({
+    phf_generator."0.7.21".default = (f.phf_generator."0.7.21".default or true);
+    phf_shared."${deps.phf_generator."0.7.21".phf_shared}".default = true;
+    rand."${deps.phf_generator."0.7.21".rand}".default = true;
+  }) [
+    (features_.phf_shared."${deps."phf_generator"."0.7.21"."phf_shared"}" deps)
+    (features_.rand."${deps."phf_generator"."0.7.21"."rand"}" deps)
+  ];
+
+
+# end
+# phf_shared-0.7.21
+
+  crates.phf_shared."0.7.21" = deps: { features?(features_.phf_shared."0.7.21" deps {}) }: buildRustCrate {
+    crateName = "phf_shared";
+    version = "0.7.21";
+    description = "Support code shared by PHF libraries";
+    authors = [ "Steven Fackler <sfackler@gmail.com>" ];
+    sha256 = "0lxpg3wgxfhzfalmf9ha9my1lsvfjy74ah9f6mfw88xlp545jlln";
+    libPath = "src/lib.rs";
+    dependencies = mapFeatures features ([
+      (crates."siphasher"."${deps."phf_shared"."0.7.21"."siphasher"}" deps)
+    ]
+      ++ (if features.phf_shared."0.7.21".unicase or false then [ (crates.unicase."${deps."phf_shared"."0.7.21".unicase}" deps) ] else []));
+    features = mkFeatures (features."phf_shared"."0.7.21" or {});
+  };
+  features_.phf_shared."0.7.21" = deps: f: updateFeatures f ({
+    phf_shared."0.7.21".default = (f.phf_shared."0.7.21".default or true);
+    siphasher."${deps.phf_shared."0.7.21".siphasher}".default = true;
+    unicase."${deps.phf_shared."0.7.21".unicase}".default = true;
+  }) [
+    (features_.siphasher."${deps."phf_shared"."0.7.21"."siphasher"}" deps)
+    (features_.unicase."${deps."phf_shared"."0.7.21"."unicase"}" deps)
+  ];
+
+
+# end
+# pkg-config-0.3.9
+
+  crates.pkg_config."0.3.9" = deps: { features?(features_.pkg_config."0.3.9" deps {}) }: buildRustCrate {
+    crateName = "pkg-config";
+    version = "0.3.9";
+    description = "A library to run the pkg-config system tool at build time in order to be used in\nCargo build scripts.\n";
+    authors = [ "Alex Crichton <alex@alexcrichton.com>" ];
+    sha256 = "06k8fxgrsrxj8mjpjcq1n7mn2p1shpxif4zg9y5h09c7vy20s146";
+  };
+  features_.pkg_config."0.3.9" = deps: f: updateFeatures f ({
+    pkg_config."0.3.9".default = (f.pkg_config."0.3.9".default or true);
+  }) [];
+
+
+# end
+# quote-0.3.15
+
+  crates.quote."0.3.15" = deps: { features?(features_.quote."0.3.15" deps {}) }: buildRustCrate {
+    crateName = "quote";
+    version = "0.3.15";
+    description = "Quasi-quoting macro quote!(...)";
+    authors = [ "David Tolnay <dtolnay@gmail.com>" ];
+    sha256 = "09il61jv4kd1360spaj46qwyl21fv1qz18fsv2jra8wdnlgl5jsg";
+  };
+  features_.quote."0.3.15" = deps: f: updateFeatures f ({
+    quote."0.3.15".default = (f.quote."0.3.15".default or true);
+  }) [];
+
+
+# end
+# rand-0.3.18
+
+  crates.rand."0.3.18" = deps: { features?(features_.rand."0.3.18" deps {}) }: buildRustCrate {
+    crateName = "rand";
+    version = "0.3.18";
+    description = "Random number generators and other randomness functionality.\n";
+    authors = [ "The Rust Project Developers" ];
+    sha256 = "15d7c3myn968dzjs0a2pgv58hzdavxnq6swgj032lw2v966ir4xv";
+    dependencies = mapFeatures features ([
+      (crates."libc"."${deps."rand"."0.3.18"."libc"}" deps)
+    ])
+      ++ (if kernel == "fuchsia" then mapFeatures features ([
+      (crates."fuchsia_zircon"."${deps."rand"."0.3.18"."fuchsia_zircon"}" deps)
+    ]) else []);
+    features = mkFeatures (features."rand"."0.3.18" or {});
+  };
+  features_.rand."0.3.18" = deps: f: updateFeatures f (rec {
+    fuchsia_zircon."${deps.rand."0.3.18".fuchsia_zircon}".default = true;
+    libc."${deps.rand."0.3.18".libc}".default = true;
+    rand = fold recursiveUpdate {} [
+      { "0.3.18"."i128_support" =
+        (f.rand."0.3.18"."i128_support" or false) ||
+        (f.rand."0.3.18".nightly or false) ||
+        (rand."0.3.18"."nightly" or false); }
+      { "0.3.18".default = (f.rand."0.3.18".default or true); }
+    ];
+  }) [
+    (features_.libc."${deps."rand"."0.3.18"."libc"}" deps)
+    (features_.fuchsia_zircon."${deps."rand"."0.3.18"."fuchsia_zircon"}" deps)
+  ];
+
+
+# end
+# rand-0.5.5
+
+  crates.rand."0.5.5" = deps: { features?(features_.rand."0.5.5" deps {}) }: buildRustCrate {
+    crateName = "rand";
+    version = "0.5.5";
+    description = "Random number generators and other randomness functionality.\n";
+    authors = [ "The Rust Project Developers" ];
+    sha256 = "0d7pnsh57qxhz1ghrzk113ddkn13kf2g758ffnbxq4nhwjfzhlc9";
+    dependencies = mapFeatures features ([
+      (crates."rand_core"."${deps."rand"."0.5.5"."rand_core"}" deps)
+    ])
+      ++ (if kernel == "cloudabi" then mapFeatures features ([
+    ]
+      ++ (if features.rand."0.5.5".cloudabi or false then [ (crates.cloudabi."${deps."rand"."0.5.5".cloudabi}" deps) ] else [])) else [])
+      ++ (if kernel == "fuchsia" then mapFeatures features ([
+    ]
+      ++ (if features.rand."0.5.5".fuchsia-zircon or false then [ (crates.fuchsia_zircon."${deps."rand"."0.5.5".fuchsia_zircon}" deps) ] else [])) else [])
+      ++ (if (kernel == "linux" || kernel == "darwin") then mapFeatures features ([
+    ]
+      ++ (if features.rand."0.5.5".libc or false then [ (crates.libc."${deps."rand"."0.5.5".libc}" deps) ] else [])) else [])
+      ++ (if kernel == "windows" then mapFeatures features ([
+    ]
+      ++ (if features.rand."0.5.5".winapi or false then [ (crates.winapi."${deps."rand"."0.5.5".winapi}" deps) ] else [])) else [])
+      ++ (if kernel == "wasm32-unknown-unknown" then mapFeatures features ([
+]) else []);
+    features = mkFeatures (features."rand"."0.5.5" or {});
+  };
+  features_.rand."0.5.5" = deps: f: updateFeatures f (rec {
+    cloudabi."${deps.rand."0.5.5".cloudabi}".default = true;
+    fuchsia_zircon."${deps.rand."0.5.5".fuchsia_zircon}".default = true;
+    libc."${deps.rand."0.5.5".libc}".default = true;
+    rand = fold recursiveUpdate {} [
+      { "0.5.5"."alloc" =
+        (f.rand."0.5.5"."alloc" or false) ||
+        (f.rand."0.5.5".std or false) ||
+        (rand."0.5.5"."std" or false); }
+      { "0.5.5"."cloudabi" =
+        (f.rand."0.5.5"."cloudabi" or false) ||
+        (f.rand."0.5.5".std or false) ||
+        (rand."0.5.5"."std" or false); }
+      { "0.5.5"."fuchsia-zircon" =
+        (f.rand."0.5.5"."fuchsia-zircon" or false) ||
+        (f.rand."0.5.5".std or false) ||
+        (rand."0.5.5"."std" or false); }
+      { "0.5.5"."i128_support" =
+        (f.rand."0.5.5"."i128_support" or false) ||
+        (f.rand."0.5.5".nightly or false) ||
+        (rand."0.5.5"."nightly" or false); }
+      { "0.5.5"."libc" =
+        (f.rand."0.5.5"."libc" or false) ||
+        (f.rand."0.5.5".std or false) ||
+        (rand."0.5.5"."std" or false); }
+      { "0.5.5"."serde" =
+        (f.rand."0.5.5"."serde" or false) ||
+        (f.rand."0.5.5".serde1 or false) ||
+        (rand."0.5.5"."serde1" or false); }
+      { "0.5.5"."serde_derive" =
+        (f.rand."0.5.5"."serde_derive" or false) ||
+        (f.rand."0.5.5".serde1 or false) ||
+        (rand."0.5.5"."serde1" or false); }
+      { "0.5.5"."std" =
+        (f.rand."0.5.5"."std" or false) ||
+        (f.rand."0.5.5".default or false) ||
+        (rand."0.5.5"."default" or false); }
+      { "0.5.5"."winapi" =
+        (f.rand."0.5.5"."winapi" or false) ||
+        (f.rand."0.5.5".std or false) ||
+        (rand."0.5.5"."std" or false); }
+      { "0.5.5".default = (f.rand."0.5.5".default or true); }
+    ];
+    rand_core = fold recursiveUpdate {} [
+      { "${deps.rand."0.5.5".rand_core}"."alloc" =
+        (f.rand_core."${deps.rand."0.5.5".rand_core}"."alloc" or false) ||
+        (rand."0.5.5"."alloc" or false) ||
+        (f."rand"."0.5.5"."alloc" or false); }
+      { "${deps.rand."0.5.5".rand_core}"."serde1" =
+        (f.rand_core."${deps.rand."0.5.5".rand_core}"."serde1" or false) ||
+        (rand."0.5.5"."serde1" or false) ||
+        (f."rand"."0.5.5"."serde1" or false); }
+      { "${deps.rand."0.5.5".rand_core}"."std" =
+        (f.rand_core."${deps.rand."0.5.5".rand_core}"."std" or false) ||
+        (rand."0.5.5"."std" or false) ||
+        (f."rand"."0.5.5"."std" or false); }
+      { "${deps.rand."0.5.5".rand_core}".default = (f.rand_core."${deps.rand."0.5.5".rand_core}".default or false); }
+    ];
+    winapi = fold recursiveUpdate {} [
+      { "${deps.rand."0.5.5".winapi}"."minwindef" = true; }
+      { "${deps.rand."0.5.5".winapi}"."ntsecapi" = true; }
+      { "${deps.rand."0.5.5".winapi}"."profileapi" = true; }
+      { "${deps.rand."0.5.5".winapi}"."winnt" = true; }
+      { "${deps.rand."0.5.5".winapi}".default = true; }
+    ];
+  }) [
+    (features_.rand_core."${deps."rand"."0.5.5"."rand_core"}" deps)
+    (features_.cloudabi."${deps."rand"."0.5.5"."cloudabi"}" deps)
+    (features_.fuchsia_zircon."${deps."rand"."0.5.5"."fuchsia_zircon"}" deps)
+    (features_.libc."${deps."rand"."0.5.5"."libc"}" deps)
+    (features_.winapi."${deps."rand"."0.5.5"."winapi"}" deps)
+  ];
+
+
+# end
+# rand-0.6.1
+
+  crates.rand."0.6.1" = deps: { features?(features_.rand."0.6.1" deps {}) }: buildRustCrate {
+    crateName = "rand";
+    version = "0.6.1";
+    description = "Random number generators and other randomness functionality.\n";
+    authors = [ "The Rand Project Developers" "The Rust Project Developers" ];
+    sha256 = "123s3w165iiifmf475lisqkd0kbr7nwnn3k4b1zg2cwap5v9m9bz";
+    build = "build.rs";
+    dependencies = mapFeatures features ([
+      (crates."rand_chacha"."${deps."rand"."0.6.1"."rand_chacha"}" deps)
+      (crates."rand_core"."${deps."rand"."0.6.1"."rand_core"}" deps)
+      (crates."rand_hc"."${deps."rand"."0.6.1"."rand_hc"}" deps)
+      (crates."rand_isaac"."${deps."rand"."0.6.1"."rand_isaac"}" deps)
+      (crates."rand_pcg"."${deps."rand"."0.6.1"."rand_pcg"}" deps)
+      (crates."rand_xorshift"."${deps."rand"."0.6.1"."rand_xorshift"}" deps)
+    ])
+      ++ (if kernel == "cloudabi" then mapFeatures features ([
+    ]
+      ++ (if features.rand."0.6.1".cloudabi or false then [ (crates.cloudabi."${deps."rand"."0.6.1".cloudabi}" deps) ] else [])) else [])
+      ++ (if kernel == "fuchsia" then mapFeatures features ([
+    ]
+      ++ (if features.rand."0.6.1".fuchsia-zircon or false then [ (crates.fuchsia_zircon."${deps."rand"."0.6.1".fuchsia_zircon}" deps) ] else [])) else [])
+      ++ (if (kernel == "linux" || kernel == "darwin") then mapFeatures features ([
+    ]
+      ++ (if features.rand."0.6.1".libc or false then [ (crates.libc."${deps."rand"."0.6.1".libc}" deps) ] else [])) else [])
+      ++ (if kernel == "windows" then mapFeatures features ([
+    ]
+      ++ (if features.rand."0.6.1".winapi or false then [ (crates.winapi."${deps."rand"."0.6.1".winapi}" deps) ] else [])) else [])
+      ++ (if kernel == "wasm32-unknown-unknown" then mapFeatures features ([
+]) else []);
+
+    buildDependencies = mapFeatures features ([
+      (crates."rustc_version"."${deps."rand"."0.6.1"."rustc_version"}" deps)
+    ]);
+    features = mkFeatures (features."rand"."0.6.1" or {});
+  };
+  features_.rand."0.6.1" = deps: f: updateFeatures f (rec {
+    cloudabi."${deps.rand."0.6.1".cloudabi}".default = true;
+    fuchsia_zircon."${deps.rand."0.6.1".fuchsia_zircon}".default = true;
+    libc."${deps.rand."0.6.1".libc}".default = (f.libc."${deps.rand."0.6.1".libc}".default or false);
+    rand = fold recursiveUpdate {} [
+      { "0.6.1"."alloc" =
+        (f.rand."0.6.1"."alloc" or false) ||
+        (f.rand."0.6.1".std or false) ||
+        (rand."0.6.1"."std" or false); }
+      { "0.6.1"."cloudabi" =
+        (f.rand."0.6.1"."cloudabi" or false) ||
+        (f.rand."0.6.1".std or false) ||
+        (rand."0.6.1"."std" or false); }
+      { "0.6.1"."fuchsia-zircon" =
+        (f.rand."0.6.1"."fuchsia-zircon" or false) ||
+        (f.rand."0.6.1".std or false) ||
+        (rand."0.6.1"."std" or false); }
+      { "0.6.1"."libc" =
+        (f.rand."0.6.1"."libc" or false) ||
+        (f.rand."0.6.1".std or false) ||
+        (rand."0.6.1"."std" or false); }
+      { "0.6.1"."packed_simd" =
+        (f.rand."0.6.1"."packed_simd" or false) ||
+        (f.rand."0.6.1".simd_support or false) ||
+        (rand."0.6.1"."simd_support" or false); }
+      { "0.6.1"."simd_support" =
+        (f.rand."0.6.1"."simd_support" or false) ||
+        (f.rand."0.6.1".nightly or false) ||
+        (rand."0.6.1"."nightly" or false); }
+      { "0.6.1"."std" =
+        (f.rand."0.6.1"."std" or false) ||
+        (f.rand."0.6.1".default or false) ||
+        (rand."0.6.1"."default" or false); }
+      { "0.6.1"."winapi" =
+        (f.rand."0.6.1"."winapi" or false) ||
+        (f.rand."0.6.1".std or false) ||
+        (rand."0.6.1"."std" or false); }
+      { "0.6.1".default = (f.rand."0.6.1".default or true); }
+    ];
+    rand_chacha."${deps.rand."0.6.1".rand_chacha}".default = true;
+    rand_core = fold recursiveUpdate {} [
+      { "${deps.rand."0.6.1".rand_core}"."alloc" =
+        (f.rand_core."${deps.rand."0.6.1".rand_core}"."alloc" or false) ||
+        (rand."0.6.1"."alloc" or false) ||
+        (f."rand"."0.6.1"."alloc" or false); }
+      { "${deps.rand."0.6.1".rand_core}"."serde1" =
+        (f.rand_core."${deps.rand."0.6.1".rand_core}"."serde1" or false) ||
+        (rand."0.6.1"."serde1" or false) ||
+        (f."rand"."0.6.1"."serde1" or false); }
+      { "${deps.rand."0.6.1".rand_core}"."std" =
+        (f.rand_core."${deps.rand."0.6.1".rand_core}"."std" or false) ||
+        (rand."0.6.1"."std" or false) ||
+        (f."rand"."0.6.1"."std" or false); }
+      { "${deps.rand."0.6.1".rand_core}".default = (f.rand_core."${deps.rand."0.6.1".rand_core}".default or false); }
+    ];
+    rand_hc."${deps.rand."0.6.1".rand_hc}".default = true;
+    rand_isaac = fold recursiveUpdate {} [
+      { "${deps.rand."0.6.1".rand_isaac}"."serde1" =
+        (f.rand_isaac."${deps.rand."0.6.1".rand_isaac}"."serde1" or false) ||
+        (rand."0.6.1"."serde1" or false) ||
+        (f."rand"."0.6.1"."serde1" or false); }
+      { "${deps.rand."0.6.1".rand_isaac}".default = true; }
+    ];
+    rand_pcg."${deps.rand."0.6.1".rand_pcg}".default = true;
+    rand_xorshift = fold recursiveUpdate {} [
+      { "${deps.rand."0.6.1".rand_xorshift}"."serde1" =
+        (f.rand_xorshift."${deps.rand."0.6.1".rand_xorshift}"."serde1" or false) ||
+        (rand."0.6.1"."serde1" or false) ||
+        (f."rand"."0.6.1"."serde1" or false); }
+      { "${deps.rand."0.6.1".rand_xorshift}".default = true; }
+    ];
+    rustc_version."${deps.rand."0.6.1".rustc_version}".default = true;
+    winapi = fold recursiveUpdate {} [
+      { "${deps.rand."0.6.1".winapi}"."minwindef" = true; }
+      { "${deps.rand."0.6.1".winapi}"."ntsecapi" = true; }
+      { "${deps.rand."0.6.1".winapi}"."profileapi" = true; }
+      { "${deps.rand."0.6.1".winapi}"."winnt" = true; }
+      { "${deps.rand."0.6.1".winapi}".default = true; }
+    ];
+  }) [
+    (features_.rand_chacha."${deps."rand"."0.6.1"."rand_chacha"}" deps)
+    (features_.rand_core."${deps."rand"."0.6.1"."rand_core"}" deps)
+    (features_.rand_hc."${deps."rand"."0.6.1"."rand_hc"}" deps)
+    (features_.rand_isaac."${deps."rand"."0.6.1"."rand_isaac"}" deps)
+    (features_.rand_pcg."${deps."rand"."0.6.1"."rand_pcg"}" deps)
+    (features_.rand_xorshift."${deps."rand"."0.6.1"."rand_xorshift"}" deps)
+    (features_.rustc_version."${deps."rand"."0.6.1"."rustc_version"}" deps)
+    (features_.cloudabi."${deps."rand"."0.6.1"."cloudabi"}" deps)
+    (features_.fuchsia_zircon."${deps."rand"."0.6.1"."fuchsia_zircon"}" deps)
+    (features_.libc."${deps."rand"."0.6.1"."libc"}" deps)
+    (features_.winapi."${deps."rand"."0.6.1"."winapi"}" deps)
+  ];
+
+
+# end
+# rand_chacha-0.1.0
+
+  crates.rand_chacha."0.1.0" = deps: { features?(features_.rand_chacha."0.1.0" deps {}) }: buildRustCrate {
+    crateName = "rand_chacha";
+    version = "0.1.0";
+    description = "ChaCha random number generator\n";
+    authors = [ "The Rand Project Developers" "The Rust Project Developers" ];
+    sha256 = "0q5pq34cqv1mnibgzd1cmx9q49vkr2lvalkkvizmlld217jmlqc6";
+    build = "build.rs";
+    dependencies = mapFeatures features ([
+      (crates."rand_core"."${deps."rand_chacha"."0.1.0"."rand_core"}" deps)
+    ]);
+
+    buildDependencies = mapFeatures features ([
+      (crates."rustc_version"."${deps."rand_chacha"."0.1.0"."rustc_version"}" deps)
+    ]);
+  };
+  features_.rand_chacha."0.1.0" = deps: f: updateFeatures f ({
+    rand_chacha."0.1.0".default = (f.rand_chacha."0.1.0".default or true);
+    rand_core."${deps.rand_chacha."0.1.0".rand_core}".default = (f.rand_core."${deps.rand_chacha."0.1.0".rand_core}".default or false);
+    rustc_version."${deps.rand_chacha."0.1.0".rustc_version}".default = true;
+  }) [
+    (features_.rand_core."${deps."rand_chacha"."0.1.0"."rand_core"}" deps)
+    (features_.rustc_version."${deps."rand_chacha"."0.1.0"."rustc_version"}" deps)
+  ];
+
+
+# end
+# rand_core-0.2.2
+
+  crates.rand_core."0.2.2" = deps: { features?(features_.rand_core."0.2.2" deps {}) }: buildRustCrate {
+    crateName = "rand_core";
+    version = "0.2.2";
+    description = "Core random number generator traits and tools for implementation.\n";
+    authors = [ "The Rust Project Developers" ];
+    sha256 = "1cxnaxmsirz2wxsajsjkd1wk6lqfqbcprqkha4bq3didznrl22sc";
+    dependencies = mapFeatures features ([
+      (crates."rand_core"."${deps."rand_core"."0.2.2"."rand_core"}" deps)
+    ]);
+    features = mkFeatures (features."rand_core"."0.2.2" or {});
+  };
+  features_.rand_core."0.2.2" = deps: f: updateFeatures f (rec {
+    rand_core = fold recursiveUpdate {} [
+      { "${deps.rand_core."0.2.2".rand_core}"."alloc" =
+        (f.rand_core."${deps.rand_core."0.2.2".rand_core}"."alloc" or false) ||
+        (rand_core."0.2.2"."alloc" or false) ||
+        (f."rand_core"."0.2.2"."alloc" or false); }
+      { "${deps.rand_core."0.2.2".rand_core}"."serde1" =
+        (f.rand_core."${deps.rand_core."0.2.2".rand_core}"."serde1" or false) ||
+        (rand_core."0.2.2"."serde1" or false) ||
+        (f."rand_core"."0.2.2"."serde1" or false); }
+      { "${deps.rand_core."0.2.2".rand_core}"."std" =
+        (f.rand_core."${deps.rand_core."0.2.2".rand_core}"."std" or false) ||
+        (rand_core."0.2.2"."std" or false) ||
+        (f."rand_core"."0.2.2"."std" or false); }
+      { "${deps.rand_core."0.2.2".rand_core}".default = (f.rand_core."${deps.rand_core."0.2.2".rand_core}".default or false); }
+      { "0.2.2".default = (f.rand_core."0.2.2".default or true); }
+    ];
+  }) [
+    (features_.rand_core."${deps."rand_core"."0.2.2"."rand_core"}" deps)
+  ];
+
+
+# end
+# rand_core-0.3.0
+
+  crates.rand_core."0.3.0" = deps: { features?(features_.rand_core."0.3.0" deps {}) }: buildRustCrate {
+    crateName = "rand_core";
+    version = "0.3.0";
+    description = "Core random number generator traits and tools for implementation.\n";
+    authors = [ "The Rust Project Developers" ];
+    sha256 = "1vafw316apjys9va3j987s02djhqp7y21v671v3ix0p5j9bjq339";
+    dependencies = mapFeatures features ([
+]);
+    features = mkFeatures (features."rand_core"."0.3.0" or {});
+  };
+  features_.rand_core."0.3.0" = deps: f: updateFeatures f (rec {
+    rand_core = fold recursiveUpdate {} [
+      { "0.3.0"."alloc" =
+        (f.rand_core."0.3.0"."alloc" or false) ||
+        (f.rand_core."0.3.0".std or false) ||
+        (rand_core."0.3.0"."std" or false); }
+      { "0.3.0"."serde" =
+        (f.rand_core."0.3.0"."serde" or false) ||
+        (f.rand_core."0.3.0".serde1 or false) ||
+        (rand_core."0.3.0"."serde1" or false); }
+      { "0.3.0"."serde_derive" =
+        (f.rand_core."0.3.0"."serde_derive" or false) ||
+        (f.rand_core."0.3.0".serde1 or false) ||
+        (rand_core."0.3.0"."serde1" or false); }
+      { "0.3.0"."std" =
+        (f.rand_core."0.3.0"."std" or false) ||
+        (f.rand_core."0.3.0".default or false) ||
+        (rand_core."0.3.0"."default" or false); }
+      { "0.3.0".default = (f.rand_core."0.3.0".default or true); }
+    ];
+  }) [];
+
+
+# end
+# rand_hc-0.1.0
+
+  crates.rand_hc."0.1.0" = deps: { features?(features_.rand_hc."0.1.0" deps {}) }: buildRustCrate {
+    crateName = "rand_hc";
+    version = "0.1.0";
+    description = "HC128 random number generator\n";
+    authors = [ "The Rand Project Developers" ];
+    sha256 = "05agb75j87yp7y1zk8yf7bpm66hc0673r3dlypn0kazynr6fdgkz";
+    dependencies = mapFeatures features ([
+      (crates."rand_core"."${deps."rand_hc"."0.1.0"."rand_core"}" deps)
+    ]);
+  };
+  features_.rand_hc."0.1.0" = deps: f: updateFeatures f ({
+    rand_core."${deps.rand_hc."0.1.0".rand_core}".default = (f.rand_core."${deps.rand_hc."0.1.0".rand_core}".default or false);
+    rand_hc."0.1.0".default = (f.rand_hc."0.1.0".default or true);
+  }) [
+    (features_.rand_core."${deps."rand_hc"."0.1.0"."rand_core"}" deps)
+  ];
+
+
+# end
+# rand_isaac-0.1.1
+
+  crates.rand_isaac."0.1.1" = deps: { features?(features_.rand_isaac."0.1.1" deps {}) }: buildRustCrate {
+    crateName = "rand_isaac";
+    version = "0.1.1";
+    description = "ISAAC random number generator\n";
+    authors = [ "The Rand Project Developers" "The Rust Project Developers" ];
+    sha256 = "10hhdh5b5sa03s6b63y9bafm956jwilx41s71jbrzl63ccx8lxdq";
+    dependencies = mapFeatures features ([
+      (crates."rand_core"."${deps."rand_isaac"."0.1.1"."rand_core"}" deps)
+    ]);
+    features = mkFeatures (features."rand_isaac"."0.1.1" or {});
+  };
+  features_.rand_isaac."0.1.1" = deps: f: updateFeatures f (rec {
+    rand_core = fold recursiveUpdate {} [
+      { "${deps.rand_isaac."0.1.1".rand_core}"."serde1" =
+        (f.rand_core."${deps.rand_isaac."0.1.1".rand_core}"."serde1" or false) ||
+        (rand_isaac."0.1.1"."serde1" or false) ||
+        (f."rand_isaac"."0.1.1"."serde1" or false); }
+      { "${deps.rand_isaac."0.1.1".rand_core}".default = (f.rand_core."${deps.rand_isaac."0.1.1".rand_core}".default or false); }
+    ];
+    rand_isaac = fold recursiveUpdate {} [
+      { "0.1.1"."serde" =
+        (f.rand_isaac."0.1.1"."serde" or false) ||
+        (f.rand_isaac."0.1.1".serde1 or false) ||
+        (rand_isaac."0.1.1"."serde1" or false); }
+      { "0.1.1"."serde_derive" =
+        (f.rand_isaac."0.1.1"."serde_derive" or false) ||
+        (f.rand_isaac."0.1.1".serde1 or false) ||
+        (rand_isaac."0.1.1"."serde1" or false); }
+      { "0.1.1".default = (f.rand_isaac."0.1.1".default or true); }
+    ];
+  }) [
+    (features_.rand_core."${deps."rand_isaac"."0.1.1"."rand_core"}" deps)
+  ];
+
+
+# end
+# rand_pcg-0.1.1
+
+  crates.rand_pcg."0.1.1" = deps: { features?(features_.rand_pcg."0.1.1" deps {}) }: buildRustCrate {
+    crateName = "rand_pcg";
+    version = "0.1.1";
+    description = "Selected PCG random number generators\n";
+    authors = [ "The Rand Project Developers" ];
+    sha256 = "0x6pzldj0c8c7gmr67ni5i7w2f7n7idvs3ckx0fc3wkhwl7wrbza";
+    build = "build.rs";
+    dependencies = mapFeatures features ([
+      (crates."rand_core"."${deps."rand_pcg"."0.1.1"."rand_core"}" deps)
+    ]);
+
+    buildDependencies = mapFeatures features ([
+      (crates."rustc_version"."${deps."rand_pcg"."0.1.1"."rustc_version"}" deps)
+    ]);
+    features = mkFeatures (features."rand_pcg"."0.1.1" or {});
+  };
+  features_.rand_pcg."0.1.1" = deps: f: updateFeatures f (rec {
+    rand_core."${deps.rand_pcg."0.1.1".rand_core}".default = (f.rand_core."${deps.rand_pcg."0.1.1".rand_core}".default or false);
+    rand_pcg = fold recursiveUpdate {} [
+      { "0.1.1"."serde" =
+        (f.rand_pcg."0.1.1"."serde" or false) ||
+        (f.rand_pcg."0.1.1".serde1 or false) ||
+        (rand_pcg."0.1.1"."serde1" or false); }
+      { "0.1.1"."serde_derive" =
+        (f.rand_pcg."0.1.1"."serde_derive" or false) ||
+        (f.rand_pcg."0.1.1".serde1 or false) ||
+        (rand_pcg."0.1.1"."serde1" or false); }
+      { "0.1.1".default = (f.rand_pcg."0.1.1".default or true); }
+    ];
+    rustc_version."${deps.rand_pcg."0.1.1".rustc_version}".default = true;
+  }) [
+    (features_.rand_core."${deps."rand_pcg"."0.1.1"."rand_core"}" deps)
+    (features_.rustc_version."${deps."rand_pcg"."0.1.1"."rustc_version"}" deps)
+  ];
+
+
+# end
+# rand_xorshift-0.1.0
+
+  crates.rand_xorshift."0.1.0" = deps: { features?(features_.rand_xorshift."0.1.0" deps {}) }: buildRustCrate {
+    crateName = "rand_xorshift";
+    version = "0.1.0";
+    description = "Xorshift random number generator\n";
+    authors = [ "The Rand Project Developers" "The Rust Project Developers" ];
+    sha256 = "063vxb678ki8gq4rx9w7yg5f9i29ig1zwykl67mfsxn0kxlkv2ih";
+    dependencies = mapFeatures features ([
+      (crates."rand_core"."${deps."rand_xorshift"."0.1.0"."rand_core"}" deps)
+    ]);
+    features = mkFeatures (features."rand_xorshift"."0.1.0" or {});
+  };
+  features_.rand_xorshift."0.1.0" = deps: f: updateFeatures f (rec {
+    rand_core."${deps.rand_xorshift."0.1.0".rand_core}".default = (f.rand_core."${deps.rand_xorshift."0.1.0".rand_core}".default or false);
+    rand_xorshift = fold recursiveUpdate {} [
+      { "0.1.0"."serde" =
+        (f.rand_xorshift."0.1.0"."serde" or false) ||
+        (f.rand_xorshift."0.1.0".serde1 or false) ||
+        (rand_xorshift."0.1.0"."serde1" or false); }
+      { "0.1.0"."serde_derive" =
+        (f.rand_xorshift."0.1.0"."serde_derive" or false) ||
+        (f.rand_xorshift."0.1.0".serde1 or false) ||
+        (rand_xorshift."0.1.0"."serde1" or false); }
+      { "0.1.0".default = (f.rand_xorshift."0.1.0".default or true); }
+    ];
+  }) [
+    (features_.rand_core."${deps."rand_xorshift"."0.1.0"."rand_core"}" deps)
+  ];
+
+
+# end
+# redox_syscall-0.1.31
+
+  crates.redox_syscall."0.1.31" = deps: { features?(features_.redox_syscall."0.1.31" deps {}) }: buildRustCrate {
+    crateName = "redox_syscall";
+    version = "0.1.31";
+    description = "A Rust library to access raw Redox system calls";
+    authors = [ "Jeremy Soller <jackpot51@gmail.com>" ];
+    sha256 = "0kipd9qslzin4fgj4jrxv6yz5l3l71gnbd7fq1jhk2j7f2sq33j4";
+    libName = "syscall";
+  };
+  features_.redox_syscall."0.1.31" = deps: f: updateFeatures f ({
+    redox_syscall."0.1.31".default = (f.redox_syscall."0.1.31".default or true);
+  }) [];
+
+
+# end
+# redox_termios-0.1.1
+
+  crates.redox_termios."0.1.1" = deps: { features?(features_.redox_termios."0.1.1" deps {}) }: buildRustCrate {
+    crateName = "redox_termios";
+    version = "0.1.1";
+    description = "A Rust library to access Redox termios functions";
+    authors = [ "Jeremy Soller <jackpot51@gmail.com>" ];
+    sha256 = "04s6yyzjca552hdaqlvqhp3vw0zqbc304md5czyd3axh56iry8wh";
+    libPath = "src/lib.rs";
+    dependencies = mapFeatures features ([
+      (crates."redox_syscall"."${deps."redox_termios"."0.1.1"."redox_syscall"}" deps)
+    ]);
+  };
+  features_.redox_termios."0.1.1" = deps: f: updateFeatures f ({
+    redox_syscall."${deps.redox_termios."0.1.1".redox_syscall}".default = true;
+    redox_termios."0.1.1".default = (f.redox_termios."0.1.1".default or true);
+  }) [
+    (features_.redox_syscall."${deps."redox_termios"."0.1.1"."redox_syscall"}" deps)
+  ];
+
+
+# end
+# regex-0.1.80
+
+  crates.regex."0.1.80" = deps: { features?(features_.regex."0.1.80" deps {}) }: buildRustCrate {
+    crateName = "regex";
+    version = "0.1.80";
+    description = "An implementation of regular expressions for Rust. This implementation uses\nfinite automata and guarantees linear time matching on all inputs.\n";
+    authors = [ "The Rust Project Developers" ];
+    sha256 = "0y4s8ghhx6sgzb35irwivm3w0l2hhqhmdcd2px9hirqnkagal9l6";
+    dependencies = mapFeatures features ([
+      (crates."aho_corasick"."${deps."regex"."0.1.80"."aho_corasick"}" deps)
+      (crates."memchr"."${deps."regex"."0.1.80"."memchr"}" deps)
+      (crates."regex_syntax"."${deps."regex"."0.1.80"."regex_syntax"}" deps)
+      (crates."thread_local"."${deps."regex"."0.1.80"."thread_local"}" deps)
+      (crates."utf8_ranges"."${deps."regex"."0.1.80"."utf8_ranges"}" deps)
+    ]);
+    features = mkFeatures (features."regex"."0.1.80" or {});
+  };
+  features_.regex."0.1.80" = deps: f: updateFeatures f (rec {
+    aho_corasick."${deps.regex."0.1.80".aho_corasick}".default = true;
+    memchr."${deps.regex."0.1.80".memchr}".default = true;
+    regex = fold recursiveUpdate {} [
+      { "0.1.80"."simd" =
+        (f.regex."0.1.80"."simd" or false) ||
+        (f.regex."0.1.80".simd-accel or false) ||
+        (regex."0.1.80"."simd-accel" or false); }
+      { "0.1.80".default = (f.regex."0.1.80".default or true); }
+    ];
+    regex_syntax."${deps.regex."0.1.80".regex_syntax}".default = true;
+    thread_local."${deps.regex."0.1.80".thread_local}".default = true;
+    utf8_ranges."${deps.regex."0.1.80".utf8_ranges}".default = true;
+  }) [
+    (features_.aho_corasick."${deps."regex"."0.1.80"."aho_corasick"}" deps)
+    (features_.memchr."${deps."regex"."0.1.80"."memchr"}" deps)
+    (features_.regex_syntax."${deps."regex"."0.1.80"."regex_syntax"}" deps)
+    (features_.thread_local."${deps."regex"."0.1.80"."thread_local"}" deps)
+    (features_.utf8_ranges."${deps."regex"."0.1.80"."utf8_ranges"}" deps)
+  ];
+
+
+# end
+# regex-syntax-0.3.9
+
+  crates.regex_syntax."0.3.9" = deps: { features?(features_.regex_syntax."0.3.9" deps {}) }: buildRustCrate {
+    crateName = "regex-syntax";
+    version = "0.3.9";
+    description = "A regular expression parser.";
+    authors = [ "The Rust Project Developers" ];
+    sha256 = "1mzhphkbwppwd1zam2jkgjk550cqgf6506i87bw2yzrvcsraiw7m";
+  };
+  features_.regex_syntax."0.3.9" = deps: f: updateFeatures f ({
+    regex_syntax."0.3.9".default = (f.regex_syntax."0.3.9".default or true);
+  }) [];
+
+
+# end
+# remove_dir_all-0.5.1
+
+  crates.remove_dir_all."0.5.1" = deps: { features?(features_.remove_dir_all."0.5.1" deps {}) }: buildRustCrate {
+    crateName = "remove_dir_all";
+    version = "0.5.1";
+    description = "A safe, reliable implementation of remove_dir_all for Windows";
+    authors = [ "Aaronepower <theaaronepower@gmail.com>" ];
+    sha256 = "1chx3yvfbj46xjz4bzsvps208l46hfbcy0sm98gpiya454n4rrl7";
+    dependencies = (if kernel == "windows" then mapFeatures features ([
+      (crates."winapi"."${deps."remove_dir_all"."0.5.1"."winapi"}" deps)
+    ]) else []);
+  };
+  features_.remove_dir_all."0.5.1" = deps: f: updateFeatures f ({
+    remove_dir_all."0.5.1".default = (f.remove_dir_all."0.5.1".default or true);
+    winapi = fold recursiveUpdate {} [
+      { "${deps.remove_dir_all."0.5.1".winapi}"."errhandlingapi" = true; }
+      { "${deps.remove_dir_all."0.5.1".winapi}"."fileapi" = true; }
+      { "${deps.remove_dir_all."0.5.1".winapi}"."std" = true; }
+      { "${deps.remove_dir_all."0.5.1".winapi}"."winbase" = true; }
+      { "${deps.remove_dir_all."0.5.1".winapi}"."winerror" = true; }
+      { "${deps.remove_dir_all."0.5.1".winapi}".default = true; }
+    ];
+  }) [
+    (features_.winapi."${deps."remove_dir_all"."0.5.1"."winapi"}" deps)
+  ];
+
+
+# end
+# reqwest-0.9.5
+
+  crates.reqwest."0.9.5" = deps: { features?(features_.reqwest."0.9.5" deps {}) }: buildRustCrate {
+    crateName = "reqwest";
+    version = "0.9.5";
+    description = "higher level HTTP client library";
+    authors = [ "Sean McArthur <sean@seanmonstar.com>" ];
+    sha256 = "1y0fq8ifhbgn6bfvjq831svirqszszj7f73ykbd28inwc0xiv2ix";
+    dependencies = mapFeatures features ([
+      (crates."base64"."${deps."reqwest"."0.9.5"."base64"}" deps)
+      (crates."bytes"."${deps."reqwest"."0.9.5"."bytes"}" deps)
+      (crates."encoding_rs"."${deps."reqwest"."0.9.5"."encoding_rs"}" deps)
+      (crates."futures"."${deps."reqwest"."0.9.5"."futures"}" deps)
+      (crates."http"."${deps."reqwest"."0.9.5"."http"}" deps)
+      (crates."hyper"."${deps."reqwest"."0.9.5"."hyper"}" deps)
+      (crates."libflate"."${deps."reqwest"."0.9.5"."libflate"}" deps)
+      (crates."log"."${deps."reqwest"."0.9.5"."log"}" deps)
+      (crates."mime"."${deps."reqwest"."0.9.5"."mime"}" deps)
+      (crates."mime_guess"."${deps."reqwest"."0.9.5"."mime_guess"}" deps)
+      (crates."serde"."${deps."reqwest"."0.9.5"."serde"}" deps)
+      (crates."serde_json"."${deps."reqwest"."0.9.5"."serde_json"}" deps)
+      (crates."serde_urlencoded"."${deps."reqwest"."0.9.5"."serde_urlencoded"}" deps)
+      (crates."tokio"."${deps."reqwest"."0.9.5"."tokio"}" deps)
+      (crates."tokio_io"."${deps."reqwest"."0.9.5"."tokio_io"}" deps)
+      (crates."url"."${deps."reqwest"."0.9.5"."url"}" deps)
+      (crates."uuid"."${deps."reqwest"."0.9.5"."uuid"}" deps)
+    ]
+      ++ (if features.reqwest."0.9.5".hyper-tls or false then [ (crates.hyper_tls."${deps."reqwest"."0.9.5".hyper_tls}" deps) ] else [])
+      ++ (if features.reqwest."0.9.5".native-tls or false then [ (crates.native_tls."${deps."reqwest"."0.9.5".native_tls}" deps) ] else []));
+    features = mkFeatures (features."reqwest"."0.9.5" or {});
+  };
+  features_.reqwest."0.9.5" = deps: f: updateFeatures f (rec {
+    base64."${deps.reqwest."0.9.5".base64}".default = true;
+    bytes."${deps.reqwest."0.9.5".bytes}".default = true;
+    encoding_rs."${deps.reqwest."0.9.5".encoding_rs}".default = true;
+    futures."${deps.reqwest."0.9.5".futures}".default = true;
+    http."${deps.reqwest."0.9.5".http}".default = true;
+    hyper."${deps.reqwest."0.9.5".hyper}".default = true;
+    hyper_tls."${deps.reqwest."0.9.5".hyper_tls}".default = true;
+    libflate."${deps.reqwest."0.9.5".libflate}".default = true;
+    log."${deps.reqwest."0.9.5".log}".default = true;
+    mime."${deps.reqwest."0.9.5".mime}".default = true;
+    mime_guess."${deps.reqwest."0.9.5".mime_guess}".default = true;
+    native_tls."${deps.reqwest."0.9.5".native_tls}".default = true;
+    reqwest = fold recursiveUpdate {} [
+      { "0.9.5"."default-tls" =
+        (f.reqwest."0.9.5"."default-tls" or false) ||
+        (f.reqwest."0.9.5".default or false) ||
+        (reqwest."0.9.5"."default" or false); }
+      { "0.9.5"."hyper-old-types" =
+        (f.reqwest."0.9.5"."hyper-old-types" or false) ||
+        (f.reqwest."0.9.5".hyper-011 or false) ||
+        (reqwest."0.9.5"."hyper-011" or false); }
+      { "0.9.5"."hyper-tls" =
+        (f.reqwest."0.9.5"."hyper-tls" or false) ||
+        (f.reqwest."0.9.5".default-tls or false) ||
+        (reqwest."0.9.5"."default-tls" or false); }
+      { "0.9.5"."native-tls" =
+        (f.reqwest."0.9.5"."native-tls" or false) ||
+        (f.reqwest."0.9.5".default-tls or false) ||
+        (reqwest."0.9.5"."default-tls" or false); }
+      { "0.9.5".default = (f.reqwest."0.9.5".default or true); }
+    ];
+    serde."${deps.reqwest."0.9.5".serde}".default = true;
+    serde_json."${deps.reqwest."0.9.5".serde_json}".default = true;
+    serde_urlencoded."${deps.reqwest."0.9.5".serde_urlencoded}".default = true;
+    tokio."${deps.reqwest."0.9.5".tokio}".default = true;
+    tokio_io."${deps.reqwest."0.9.5".tokio_io}".default = true;
+    url."${deps.reqwest."0.9.5".url}".default = true;
+    uuid = fold recursiveUpdate {} [
+      { "${deps.reqwest."0.9.5".uuid}"."v4" = true; }
+      { "${deps.reqwest."0.9.5".uuid}".default = true; }
+    ];
+  }) [
+    (features_.base64."${deps."reqwest"."0.9.5"."base64"}" deps)
+    (features_.bytes."${deps."reqwest"."0.9.5"."bytes"}" deps)
+    (features_.encoding_rs."${deps."reqwest"."0.9.5"."encoding_rs"}" deps)
+    (features_.futures."${deps."reqwest"."0.9.5"."futures"}" deps)
+    (features_.http."${deps."reqwest"."0.9.5"."http"}" deps)
+    (features_.hyper."${deps."reqwest"."0.9.5"."hyper"}" deps)
+    (features_.hyper_tls."${deps."reqwest"."0.9.5"."hyper_tls"}" deps)
+    (features_.libflate."${deps."reqwest"."0.9.5"."libflate"}" deps)
+    (features_.log."${deps."reqwest"."0.9.5"."log"}" deps)
+    (features_.mime."${deps."reqwest"."0.9.5"."mime"}" deps)
+    (features_.mime_guess."${deps."reqwest"."0.9.5"."mime_guess"}" deps)
+    (features_.native_tls."${deps."reqwest"."0.9.5"."native_tls"}" deps)
+    (features_.serde."${deps."reqwest"."0.9.5"."serde"}" deps)
+    (features_.serde_json."${deps."reqwest"."0.9.5"."serde_json"}" deps)
+    (features_.serde_urlencoded."${deps."reqwest"."0.9.5"."serde_urlencoded"}" deps)
+    (features_.tokio."${deps."reqwest"."0.9.5"."tokio"}" deps)
+    (features_.tokio_io."${deps."reqwest"."0.9.5"."tokio_io"}" deps)
+    (features_.url."${deps."reqwest"."0.9.5"."url"}" deps)
+    (features_.uuid."${deps."reqwest"."0.9.5"."uuid"}" deps)
+  ];
+
+
+# end
+# rustc_version-0.2.3
+
+  crates.rustc_version."0.2.3" = deps: { features?(features_.rustc_version."0.2.3" deps {}) }: buildRustCrate {
+    crateName = "rustc_version";
+    version = "0.2.3";
+    description = "A library for querying the version of a installed rustc compiler";
+    authors = [ "Marvin Löbel <loebel.marvin@gmail.com>" ];
+    sha256 = "0rgwzbgs3i9fqjm1p4ra3n7frafmpwl29c8lw85kv1rxn7n2zaa7";
+    dependencies = mapFeatures features ([
+      (crates."semver"."${deps."rustc_version"."0.2.3"."semver"}" deps)
+    ]);
+  };
+  features_.rustc_version."0.2.3" = deps: f: updateFeatures f ({
+    rustc_version."0.2.3".default = (f.rustc_version."0.2.3".default or true);
+    semver."${deps.rustc_version."0.2.3".semver}".default = true;
+  }) [
+    (features_.semver."${deps."rustc_version"."0.2.3"."semver"}" deps)
+  ];
+
+
+# end
+# safemem-0.3.0
+
+  crates.safemem."0.3.0" = deps: { features?(features_.safemem."0.3.0" deps {}) }: buildRustCrate {
+    crateName = "safemem";
+    version = "0.3.0";
+    description = "Safe wrappers for memory-accessing functions, like `std::ptr::copy()`.";
+    authors = [ "Austin Bonander <austin.bonander@gmail.com>" ];
+    sha256 = "0pr39b468d05f6m7m4alsngmj5p7an8df21apsxbi57k0lmwrr18";
+    features = mkFeatures (features."safemem"."0.3.0" or {});
+  };
+  features_.safemem."0.3.0" = deps: f: updateFeatures f (rec {
+    safemem = fold recursiveUpdate {} [
+      { "0.3.0"."std" =
+        (f.safemem."0.3.0"."std" or false) ||
+        (f.safemem."0.3.0".default or false) ||
+        (safemem."0.3.0"."default" or false); }
+      { "0.3.0".default = (f.safemem."0.3.0".default or true); }
+    ];
+  }) [];
+
+
+# end
+# schannel-0.1.14
+
+  crates.schannel."0.1.14" = deps: { features?(features_.schannel."0.1.14" deps {}) }: buildRustCrate {
+    crateName = "schannel";
+    version = "0.1.14";
+    description = "Schannel bindings for rust, allowing SSL/TLS (e.g. https) without openssl";
+    authors = [ "Steven Fackler <sfackler@gmail.com>" "Steffen Butzer <steffen.butzer@outlook.com>" ];
+    sha256 = "1g0a88jknns1kwn3x1k3ci5y5zvg58pwdg1xrxkrw3cwd2hynm9k";
+    dependencies = mapFeatures features ([
+      (crates."lazy_static"."${deps."schannel"."0.1.14"."lazy_static"}" deps)
+      (crates."winapi"."${deps."schannel"."0.1.14"."winapi"}" deps)
+    ]);
+  };
+  features_.schannel."0.1.14" = deps: f: updateFeatures f ({
+    lazy_static."${deps.schannel."0.1.14".lazy_static}".default = true;
+    schannel."0.1.14".default = (f.schannel."0.1.14".default or true);
+    winapi = fold recursiveUpdate {} [
+      { "${deps.schannel."0.1.14".winapi}"."lmcons" = true; }
+      { "${deps.schannel."0.1.14".winapi}"."minschannel" = true; }
+      { "${deps.schannel."0.1.14".winapi}"."schannel" = true; }
+      { "${deps.schannel."0.1.14".winapi}"."securitybaseapi" = true; }
+      { "${deps.schannel."0.1.14".winapi}"."sspi" = true; }
+      { "${deps.schannel."0.1.14".winapi}"."sysinfoapi" = true; }
+      { "${deps.schannel."0.1.14".winapi}"."timezoneapi" = true; }
+      { "${deps.schannel."0.1.14".winapi}"."winbase" = true; }
+      { "${deps.schannel."0.1.14".winapi}"."wincrypt" = true; }
+      { "${deps.schannel."0.1.14".winapi}"."winerror" = true; }
+      { "${deps.schannel."0.1.14".winapi}".default = true; }
+    ];
+  }) [
+    (features_.lazy_static."${deps."schannel"."0.1.14"."lazy_static"}" deps)
+    (features_.winapi."${deps."schannel"."0.1.14"."winapi"}" deps)
+  ];
+
+
+# end
+# scopeguard-0.3.3
+
+  crates.scopeguard."0.3.3" = deps: { features?(features_.scopeguard."0.3.3" deps {}) }: buildRustCrate {
+    crateName = "scopeguard";
+    version = "0.3.3";
+    description = "A RAII scope guard that will run a given closure when it goes out of scope,\neven if the code between panics (assuming unwinding panic).\n\nDefines the macros `defer!` and `defer_on_unwind!`; the latter only runs\nif the scope is extited through unwinding on panic.\n";
+    authors = [ "bluss" ];
+    sha256 = "0i1l013csrqzfz6c68pr5pi01hg5v5yahq8fsdmaxy6p8ygsjf3r";
+    features = mkFeatures (features."scopeguard"."0.3.3" or {});
+  };
+  features_.scopeguard."0.3.3" = deps: f: updateFeatures f (rec {
+    scopeguard = fold recursiveUpdate {} [
+      { "0.3.3"."use_std" =
+        (f.scopeguard."0.3.3"."use_std" or false) ||
+        (f.scopeguard."0.3.3".default or false) ||
+        (scopeguard."0.3.3"."default" or false); }
+      { "0.3.3".default = (f.scopeguard."0.3.3".default or true); }
+    ];
+  }) [];
+
+
+# end
+# security-framework-0.2.1
+
+  crates.security_framework."0.2.1" = deps: { features?(features_.security_framework."0.2.1" deps {}) }: buildRustCrate {
+    crateName = "security-framework";
+    version = "0.2.1";
+    description = "Security Framework bindings";
+    authors = [ "Steven Fackler <sfackler@gmail.com>" ];
+    sha256 = "0qia5g66zmjn57m9swhrkz3cll3bs4061qim6w72v08c2w0pkvsw";
+    dependencies = mapFeatures features ([
+      (crates."core_foundation"."${deps."security_framework"."0.2.1"."core_foundation"}" deps)
+      (crates."core_foundation_sys"."${deps."security_framework"."0.2.1"."core_foundation_sys"}" deps)
+      (crates."libc"."${deps."security_framework"."0.2.1"."libc"}" deps)
+      (crates."security_framework_sys"."${deps."security_framework"."0.2.1"."security_framework_sys"}" deps)
+    ]);
+    features = mkFeatures (features."security_framework"."0.2.1" or {});
+  };
+  features_.security_framework."0.2.1" = deps: f: updateFeatures f (rec {
+    core_foundation."${deps.security_framework."0.2.1".core_foundation}".default = true;
+    core_foundation_sys."${deps.security_framework."0.2.1".core_foundation_sys}".default = true;
+    libc."${deps.security_framework."0.2.1".libc}".default = true;
+    security_framework = fold recursiveUpdate {} [
+      { "0.2.1"."OSX_10_10" =
+        (f.security_framework."0.2.1"."OSX_10_10" or false) ||
+        (f.security_framework."0.2.1".OSX_10_11 or false) ||
+        (security_framework."0.2.1"."OSX_10_11" or false); }
+      { "0.2.1"."OSX_10_11" =
+        (f.security_framework."0.2.1"."OSX_10_11" or false) ||
+        (f.security_framework."0.2.1".OSX_10_12 or false) ||
+        (security_framework."0.2.1"."OSX_10_12" or false); }
+      { "0.2.1"."OSX_10_9" =
+        (f.security_framework."0.2.1"."OSX_10_9" or false) ||
+        (f.security_framework."0.2.1".OSX_10_10 or false) ||
+        (security_framework."0.2.1"."OSX_10_10" or false); }
+      { "0.2.1".default = (f.security_framework."0.2.1".default or true); }
+    ];
+    security_framework_sys = fold recursiveUpdate {} [
+      { "${deps.security_framework."0.2.1".security_framework_sys}"."OSX_10_10" =
+        (f.security_framework_sys."${deps.security_framework."0.2.1".security_framework_sys}"."OSX_10_10" or false) ||
+        (security_framework."0.2.1"."OSX_10_10" or false) ||
+        (f."security_framework"."0.2.1"."OSX_10_10" or false); }
+      { "${deps.security_framework."0.2.1".security_framework_sys}"."OSX_10_11" =
+        (f.security_framework_sys."${deps.security_framework."0.2.1".security_framework_sys}"."OSX_10_11" or false) ||
+        (security_framework."0.2.1"."OSX_10_11" or false) ||
+        (f."security_framework"."0.2.1"."OSX_10_11" or false) ||
+        (security_framework."0.2.1"."OSX_10_12" or false) ||
+        (f."security_framework"."0.2.1"."OSX_10_12" or false); }
+      { "${deps.security_framework."0.2.1".security_framework_sys}"."OSX_10_9" =
+        (f.security_framework_sys."${deps.security_framework."0.2.1".security_framework_sys}"."OSX_10_9" or false) ||
+        (security_framework."0.2.1"."OSX_10_9" or false) ||
+        (f."security_framework"."0.2.1"."OSX_10_9" or false); }
+      { "${deps.security_framework."0.2.1".security_framework_sys}".default = true; }
+    ];
+  }) [
+    (features_.core_foundation."${deps."security_framework"."0.2.1"."core_foundation"}" deps)
+    (features_.core_foundation_sys."${deps."security_framework"."0.2.1"."core_foundation_sys"}" deps)
+    (features_.libc."${deps."security_framework"."0.2.1"."libc"}" deps)
+    (features_.security_framework_sys."${deps."security_framework"."0.2.1"."security_framework_sys"}" deps)
+  ];
+
+
+# end
+# security-framework-sys-0.2.1
+
+  crates.security_framework_sys."0.2.1" = deps: { features?(features_.security_framework_sys."0.2.1" deps {}) }: buildRustCrate {
+    crateName = "security-framework-sys";
+    version = "0.2.1";
+    description = "Security Framework bindings";
+    authors = [ "Steven Fackler <sfackler@gmail.com>" ];
+    sha256 = "0ijxy7bdi4am092hrhm645hcv36xprdx1gjcjmnyw6n78x8sv2iz";
+    build = "build.rs";
+    dependencies = mapFeatures features ([
+      (crates."core_foundation_sys"."${deps."security_framework_sys"."0.2.1"."core_foundation_sys"}" deps)
+      (crates."libc"."${deps."security_framework_sys"."0.2.1"."libc"}" deps)
+    ]);
+    features = mkFeatures (features."security_framework_sys"."0.2.1" or {});
+  };
+  features_.security_framework_sys."0.2.1" = deps: f: updateFeatures f (rec {
+    core_foundation_sys."${deps.security_framework_sys."0.2.1".core_foundation_sys}".default = true;
+    libc."${deps.security_framework_sys."0.2.1".libc}".default = true;
+    security_framework_sys = fold recursiveUpdate {} [
+      { "0.2.1"."OSX_10_10" =
+        (f.security_framework_sys."0.2.1"."OSX_10_10" or false) ||
+        (f.security_framework_sys."0.2.1".OSX_10_11 or false) ||
+        (security_framework_sys."0.2.1"."OSX_10_11" or false); }
+      { "0.2.1"."OSX_10_11" =
+        (f.security_framework_sys."0.2.1"."OSX_10_11" or false) ||
+        (f.security_framework_sys."0.2.1".OSX_10_12 or false) ||
+        (security_framework_sys."0.2.1"."OSX_10_12" or false); }
+      { "0.2.1"."OSX_10_9" =
+        (f.security_framework_sys."0.2.1"."OSX_10_9" or false) ||
+        (f.security_framework_sys."0.2.1".OSX_10_10 or false) ||
+        (security_framework_sys."0.2.1"."OSX_10_10" or false); }
+      { "0.2.1".default = (f.security_framework_sys."0.2.1".default or true); }
+    ];
+  }) [
+    (features_.core_foundation_sys."${deps."security_framework_sys"."0.2.1"."core_foundation_sys"}" deps)
+    (features_.libc."${deps."security_framework_sys"."0.2.1"."libc"}" deps)
+  ];
+
+
+# end
+# semver-0.9.0
+
+  crates.semver."0.9.0" = deps: { features?(features_.semver."0.9.0" deps {}) }: buildRustCrate {
+    crateName = "semver";
+    version = "0.9.0";
+    description = "Semantic version parsing and comparison.\n";
+    authors = [ "Steve Klabnik <steve@steveklabnik.com>" "The Rust Project Developers" ];
+    sha256 = "0azak2lb2wc36s3x15az886kck7rpnksrw14lalm157rg9sc9z63";
+    dependencies = mapFeatures features ([
+      (crates."semver_parser"."${deps."semver"."0.9.0"."semver_parser"}" deps)
+    ]);
+    features = mkFeatures (features."semver"."0.9.0" or {});
+  };
+  features_.semver."0.9.0" = deps: f: updateFeatures f (rec {
+    semver = fold recursiveUpdate {} [
+      { "0.9.0"."serde" =
+        (f.semver."0.9.0"."serde" or false) ||
+        (f.semver."0.9.0".ci or false) ||
+        (semver."0.9.0"."ci" or false); }
+      { "0.9.0".default = (f.semver."0.9.0".default or true); }
+    ];
+    semver_parser."${deps.semver."0.9.0".semver_parser}".default = true;
+  }) [
+    (features_.semver_parser."${deps."semver"."0.9.0"."semver_parser"}" deps)
+  ];
+
+
+# end
+# semver-parser-0.7.0
+
+  crates.semver_parser."0.7.0" = deps: { features?(features_.semver_parser."0.7.0" deps {}) }: buildRustCrate {
+    crateName = "semver-parser";
+    version = "0.7.0";
+    description = "Parsing of the semver spec.\n";
+    authors = [ "Steve Klabnik <steve@steveklabnik.com>" ];
+    sha256 = "1da66c8413yakx0y15k8c055yna5lyb6fr0fw9318kdwkrk5k12h";
+  };
+  features_.semver_parser."0.7.0" = deps: f: updateFeatures f ({
+    semver_parser."0.7.0".default = (f.semver_parser."0.7.0".default or true);
+  }) [];
+
+
+# end
+# serde-1.0.21
+
+  crates.serde."1.0.21" = deps: { features?(features_.serde."1.0.21" deps {}) }: buildRustCrate {
+    crateName = "serde";
+    version = "1.0.21";
+    description = "A generic serialization/deserialization framework";
+    authors = [ "Erick Tryzelaar <erick.tryzelaar@gmail.com>" "David Tolnay <dtolnay@gmail.com>" ];
+    sha256 = "10almq7pvx8s4ryiqk8gf7fj5igl0yq6dcjknwc67rkmxd8q50w3";
+    dependencies = mapFeatures features ([
+]);
+    features = mkFeatures (features."serde"."1.0.21" or {});
+  };
+  features_.serde."1.0.21" = deps: f: updateFeatures f (rec {
+    serde = fold recursiveUpdate {} [
+      { "1.0.21"."serde_derive" =
+        (f.serde."1.0.21"."serde_derive" or false) ||
+        (f.serde."1.0.21".derive or false) ||
+        (serde."1.0.21"."derive" or false) ||
+        (f.serde."1.0.21".playground or false) ||
+        (serde."1.0.21"."playground" or false); }
+      { "1.0.21"."std" =
+        (f.serde."1.0.21"."std" or false) ||
+        (f.serde."1.0.21".default or false) ||
+        (serde."1.0.21"."default" or false); }
+      { "1.0.21"."unstable" =
+        (f.serde."1.0.21"."unstable" or false) ||
+        (f.serde."1.0.21".alloc or false) ||
+        (serde."1.0.21"."alloc" or false); }
+      { "1.0.21".default = (f.serde."1.0.21".default or true); }
+    ];
+  }) [];
+
+
+# end
+# serde_json-1.0.6
+
+  crates.serde_json."1.0.6" = deps: { features?(features_.serde_json."1.0.6" deps {}) }: buildRustCrate {
+    crateName = "serde_json";
+    version = "1.0.6";
+    description = "A JSON serialization file format";
+    authors = [ "Erick Tryzelaar <erick.tryzelaar@gmail.com>" "David Tolnay <dtolnay@gmail.com>" ];
+    sha256 = "1kacyc59splwbg8gr7qs32pp9smgy1khq0ggnv07yxhs7h355vjz";
+    dependencies = mapFeatures features ([
+      (crates."dtoa"."${deps."serde_json"."1.0.6"."dtoa"}" deps)
+      (crates."itoa"."${deps."serde_json"."1.0.6"."itoa"}" deps)
+      (crates."num_traits"."${deps."serde_json"."1.0.6"."num_traits"}" deps)
+      (crates."serde"."${deps."serde_json"."1.0.6"."serde"}" deps)
+    ]);
+    features = mkFeatures (features."serde_json"."1.0.6" or {});
+  };
+  features_.serde_json."1.0.6" = deps: f: updateFeatures f (rec {
+    dtoa."${deps.serde_json."1.0.6".dtoa}".default = true;
+    itoa."${deps.serde_json."1.0.6".itoa}".default = true;
+    num_traits."${deps.serde_json."1.0.6".num_traits}".default = true;
+    serde."${deps.serde_json."1.0.6".serde}".default = true;
+    serde_json = fold recursiveUpdate {} [
+      { "1.0.6"."linked-hash-map" =
+        (f.serde_json."1.0.6"."linked-hash-map" or false) ||
+        (f.serde_json."1.0.6".preserve_order or false) ||
+        (serde_json."1.0.6"."preserve_order" or false); }
+      { "1.0.6".default = (f.serde_json."1.0.6".default or true); }
+    ];
+  }) [
+    (features_.dtoa."${deps."serde_json"."1.0.6"."dtoa"}" deps)
+    (features_.itoa."${deps."serde_json"."1.0.6"."itoa"}" deps)
+    (features_.num_traits."${deps."serde_json"."1.0.6"."num_traits"}" deps)
+    (features_.serde."${deps."serde_json"."1.0.6"."serde"}" deps)
+  ];
+
+
+# end
+# serde_urlencoded-0.5.1
+
+  crates.serde_urlencoded."0.5.1" = deps: { features?(features_.serde_urlencoded."0.5.1" deps {}) }: buildRustCrate {
+    crateName = "serde_urlencoded";
+    version = "0.5.1";
+    description = "`x-www-form-urlencoded` meets Serde";
+    authors = [ "Anthony Ramine <n.oxyde@gmail.com>" ];
+    sha256 = "0zh2wlnapmcwqhxnnq1mdlmg8vily7j54wvj01s7cvapzg5jphdl";
+    dependencies = mapFeatures features ([
+      (crates."dtoa"."${deps."serde_urlencoded"."0.5.1"."dtoa"}" deps)
+      (crates."itoa"."${deps."serde_urlencoded"."0.5.1"."itoa"}" deps)
+      (crates."serde"."${deps."serde_urlencoded"."0.5.1"."serde"}" deps)
+      (crates."url"."${deps."serde_urlencoded"."0.5.1"."url"}" deps)
+    ]);
+  };
+  features_.serde_urlencoded."0.5.1" = deps: f: updateFeatures f ({
+    dtoa."${deps.serde_urlencoded."0.5.1".dtoa}".default = true;
+    itoa."${deps.serde_urlencoded."0.5.1".itoa}".default = true;
+    serde."${deps.serde_urlencoded."0.5.1".serde}".default = true;
+    serde_urlencoded."0.5.1".default = (f.serde_urlencoded."0.5.1".default or true);
+    url."${deps.serde_urlencoded."0.5.1".url}".default = true;
+  }) [
+    (features_.dtoa."${deps."serde_urlencoded"."0.5.1"."dtoa"}" deps)
+    (features_.itoa."${deps."serde_urlencoded"."0.5.1"."itoa"}" deps)
+    (features_.serde."${deps."serde_urlencoded"."0.5.1"."serde"}" deps)
+    (features_.url."${deps."serde_urlencoded"."0.5.1"."url"}" deps)
+  ];
+
+
+# end
+# siphasher-0.2.2
+
+  crates.siphasher."0.2.2" = deps: { features?(features_.siphasher."0.2.2" deps {}) }: buildRustCrate {
+    crateName = "siphasher";
+    version = "0.2.2";
+    description = "SipHash functions from rust-core < 1.13";
+    authors = [ "Frank Denis <github@pureftpd.org>" ];
+    sha256 = "0iyx7nlzfny9ly1634a6zcq0yvrinhxhypwas4p8ry3zqnn76qqr";
+    dependencies = mapFeatures features ([
+]);
+  };
+  features_.siphasher."0.2.2" = deps: f: updateFeatures f ({
+    siphasher."0.2.2".default = (f.siphasher."0.2.2".default or true);
+  }) [];
+
+
+# end
+# slab-0.4.0
+
+  crates.slab."0.4.0" = deps: { features?(features_.slab."0.4.0" deps {}) }: buildRustCrate {
+    crateName = "slab";
+    version = "0.4.0";
+    description = "Pre-allocated storage for a uniform data type";
+    authors = [ "Carl Lerche <me@carllerche.com>" ];
+    sha256 = "1qy2vkgwqgj5z4ygdkh040n9yh1vz80v5flxb1xrvw3i4wxs7yx0";
+  };
+  features_.slab."0.4.0" = deps: f: updateFeatures f ({
+    slab."0.4.0".default = (f.slab."0.4.0".default or true);
+  }) [];
+
+
+# end
+# slog-1.7.1
+
+  crates.slog."1.7.1" = deps: { features?(features_.slog."1.7.1" deps {}) }: buildRustCrate {
+    crateName = "slog";
+    version = "1.7.1";
+    description = "Structured, composable logging for Rust";
+    authors = [ "Dawid Ciężarkiewicz <dpc@dpc.pw>" ];
+    sha256 = "1qhnwv2gbxmnwasaa0vlhddq6cdhq6n3l8d6h3ql73367h7aav65";
+    features = mkFeatures (features."slog"."1.7.1" or {});
+  };
+  features_.slog."1.7.1" = deps: f: updateFeatures f (rec {
+    slog = fold recursiveUpdate {} [
+      { "1.7.1"."std" =
+        (f.slog."1.7.1"."std" or false) ||
+        (f.slog."1.7.1".default or false) ||
+        (slog."1.7.1"."default" or false); }
+      { "1.7.1".default = (f.slog."1.7.1".default or true); }
+    ];
+  }) [];
+
+
+# end
+# slog-envlogger-0.5.0
+
+  crates.slog_envlogger."0.5.0" = deps: { features?(features_.slog_envlogger."0.5.0" deps {}) }: buildRustCrate {
+    crateName = "slog-envlogger";
+    version = "0.5.0";
+    description = "Port of de facto standard logger implementation for Rust, to `slog-rs` framework.\n";
+    authors = [ "The Rust Project Developers" "Dawid Ciężarkiewicz <dpc@dpc.pw>" ];
+    sha256 = "0ry9k2ppj7z6prdz2kf924w7l9y2kbysrigca6shni1kz2j163qb";
+    libPath = "src/lib.rs";
+    dependencies = mapFeatures features ([
+      (crates."log"."${deps."slog_envlogger"."0.5.0"."log"}" deps)
+      (crates."regex"."${deps."slog_envlogger"."0.5.0"."regex"}" deps)
+      (crates."slog"."${deps."slog_envlogger"."0.5.0"."slog"}" deps)
+      (crates."slog_stdlog"."${deps."slog_envlogger"."0.5.0"."slog_stdlog"}" deps)
+      (crates."slog_term"."${deps."slog_envlogger"."0.5.0"."slog_term"}" deps)
+    ]);
+  };
+  features_.slog_envlogger."0.5.0" = deps: f: updateFeatures f ({
+    log."${deps.slog_envlogger."0.5.0".log}".default = true;
+    regex."${deps.slog_envlogger."0.5.0".regex}".default = true;
+    slog."${deps.slog_envlogger."0.5.0".slog}".default = true;
+    slog_envlogger."0.5.0".default = (f.slog_envlogger."0.5.0".default or true);
+    slog_stdlog."${deps.slog_envlogger."0.5.0".slog_stdlog}".default = true;
+    slog_term."${deps.slog_envlogger."0.5.0".slog_term}".default = true;
+  }) [
+    (features_.log."${deps."slog_envlogger"."0.5.0"."log"}" deps)
+    (features_.regex."${deps."slog_envlogger"."0.5.0"."regex"}" deps)
+    (features_.slog."${deps."slog_envlogger"."0.5.0"."slog"}" deps)
+    (features_.slog_stdlog."${deps."slog_envlogger"."0.5.0"."slog_stdlog"}" deps)
+    (features_.slog_term."${deps."slog_envlogger"."0.5.0"."slog_term"}" deps)
+  ];
+
+
+# end
+# slog-extra-0.1.2
+
+  crates.slog_extra."0.1.2" = deps: { features?(features_.slog_extra."0.1.2" deps {}) }: buildRustCrate {
+    crateName = "slog-extra";
+    version = "0.1.2";
+    description = "Standard slog-rs extensions";
+    authors = [ "Dawid Ciężarkiewicz <dpc@dpc.pw>" ];
+    sha256 = "0jrw0xcc81wwcl59xx9qglfcv5l3ad5kbpcyp6ygk94p9kxfrhyj";
+    libPath = "lib.rs";
+    dependencies = mapFeatures features ([
+      (crates."slog"."${deps."slog_extra"."0.1.2"."slog"}" deps)
+      (crates."thread_local"."${deps."slog_extra"."0.1.2"."thread_local"}" deps)
+    ]);
+  };
+  features_.slog_extra."0.1.2" = deps: f: updateFeatures f ({
+    slog."${deps.slog_extra."0.1.2".slog}".default = true;
+    slog_extra."0.1.2".default = (f.slog_extra."0.1.2".default or true);
+    thread_local."${deps.slog_extra."0.1.2".thread_local}".default = true;
+  }) [
+    (features_.slog."${deps."slog_extra"."0.1.2"."slog"}" deps)
+    (features_.thread_local."${deps."slog_extra"."0.1.2"."thread_local"}" deps)
+  ];
+
+
+# end
+# slog-stdlog-1.1.0
+
+  crates.slog_stdlog."1.1.0" = deps: { features?(features_.slog_stdlog."1.1.0" deps {}) }: buildRustCrate {
+    crateName = "slog-stdlog";
+    version = "1.1.0";
+    description = "Standard Rust log crate adapter to slog-rs";
+    authors = [ "Dawid Ciężarkiewicz <dpc@dpc.pw>" ];
+    sha256 = "0ig4mjixr4y3dn3s53rlnrpplwkqb8b0z2zkaiiiwyv7nhjxdg46";
+    libPath = "lib.rs";
+    dependencies = mapFeatures features ([
+      (crates."crossbeam"."${deps."slog_stdlog"."1.1.0"."crossbeam"}" deps)
+      (crates."lazy_static"."${deps."slog_stdlog"."1.1.0"."lazy_static"}" deps)
+      (crates."log"."${deps."slog_stdlog"."1.1.0"."log"}" deps)
+      (crates."slog"."${deps."slog_stdlog"."1.1.0"."slog"}" deps)
+      (crates."slog_term"."${deps."slog_stdlog"."1.1.0"."slog_term"}" deps)
+    ]);
+  };
+  features_.slog_stdlog."1.1.0" = deps: f: updateFeatures f ({
+    crossbeam."${deps.slog_stdlog."1.1.0".crossbeam}".default = true;
+    lazy_static."${deps.slog_stdlog."1.1.0".lazy_static}".default = true;
+    log."${deps.slog_stdlog."1.1.0".log}".default = true;
+    slog."${deps.slog_stdlog."1.1.0".slog}".default = true;
+    slog_stdlog."1.1.0".default = (f.slog_stdlog."1.1.0".default or true);
+    slog_term."${deps.slog_stdlog."1.1.0".slog_term}".default = true;
+  }) [
+    (features_.crossbeam."${deps."slog_stdlog"."1.1.0"."crossbeam"}" deps)
+    (features_.lazy_static."${deps."slog_stdlog"."1.1.0"."lazy_static"}" deps)
+    (features_.log."${deps."slog_stdlog"."1.1.0"."log"}" deps)
+    (features_.slog."${deps."slog_stdlog"."1.1.0"."slog"}" deps)
+    (features_.slog_term."${deps."slog_stdlog"."1.1.0"."slog_term"}" deps)
+  ];
+
+
+# end
+# slog-stream-1.2.1
+
+  crates.slog_stream."1.2.1" = deps: { features?(features_.slog_stream."1.2.1" deps {}) }: buildRustCrate {
+    crateName = "slog-stream";
+    version = "1.2.1";
+    description = "`io::Write` streamer for slog-rs";
+    authors = [ "Dawid Ciężarkiewicz <dpc@dpc.pw>" ];
+    sha256 = "03dwzbydaamfzjpr16gm065i696lk86gqcpspv5qaqyv938fm2yj";
+    libPath = "lib.rs";
+    dependencies = mapFeatures features ([
+      (crates."slog"."${deps."slog_stream"."1.2.1"."slog"}" deps)
+      (crates."slog_extra"."${deps."slog_stream"."1.2.1"."slog_extra"}" deps)
+      (crates."thread_local"."${deps."slog_stream"."1.2.1"."thread_local"}" deps)
+    ]);
+  };
+  features_.slog_stream."1.2.1" = deps: f: updateFeatures f ({
+    slog."${deps.slog_stream."1.2.1".slog}".default = true;
+    slog_extra."${deps.slog_stream."1.2.1".slog_extra}".default = true;
+    slog_stream."1.2.1".default = (f.slog_stream."1.2.1".default or true);
+    thread_local."${deps.slog_stream."1.2.1".thread_local}".default = true;
+  }) [
+    (features_.slog."${deps."slog_stream"."1.2.1"."slog"}" deps)
+    (features_.slog_extra."${deps."slog_stream"."1.2.1"."slog_extra"}" deps)
+    (features_.thread_local."${deps."slog_stream"."1.2.1"."thread_local"}" deps)
+  ];
+
+
+# end
+# slog-term-1.5.0
+
+  crates.slog_term."1.5.0" = deps: { features?(features_.slog_term."1.5.0" deps {}) }: buildRustCrate {
+    crateName = "slog-term";
+    version = "1.5.0";
+    description = "Unix terminal drain and formatter for slog-rs";
+    authors = [ "Dawid Ciężarkiewicz <dpc@dpc.pw>" ];
+    sha256 = "0zq2kyvm7jhqj6sc09w540wqfrrpa46yxf9sgzq7jqpkr66wsiar";
+    libPath = "lib.rs";
+    dependencies = mapFeatures features ([
+      (crates."chrono"."${deps."slog_term"."1.5.0"."chrono"}" deps)
+      (crates."isatty"."${deps."slog_term"."1.5.0"."isatty"}" deps)
+      (crates."slog"."${deps."slog_term"."1.5.0"."slog"}" deps)
+      (crates."slog_stream"."${deps."slog_term"."1.5.0"."slog_stream"}" deps)
+      (crates."thread_local"."${deps."slog_term"."1.5.0"."thread_local"}" deps)
+    ]);
+  };
+  features_.slog_term."1.5.0" = deps: f: updateFeatures f ({
+    chrono."${deps.slog_term."1.5.0".chrono}".default = true;
+    isatty."${deps.slog_term."1.5.0".isatty}".default = true;
+    slog."${deps.slog_term."1.5.0".slog}".default = true;
+    slog_stream."${deps.slog_term."1.5.0".slog_stream}".default = true;
+    slog_term."1.5.0".default = (f.slog_term."1.5.0".default or true);
+    thread_local."${deps.slog_term."1.5.0".thread_local}".default = true;
+  }) [
+    (features_.chrono."${deps."slog_term"."1.5.0"."chrono"}" deps)
+    (features_.isatty."${deps."slog_term"."1.5.0"."isatty"}" deps)
+    (features_.slog."${deps."slog_term"."1.5.0"."slog"}" deps)
+    (features_.slog_stream."${deps."slog_term"."1.5.0"."slog_stream"}" deps)
+    (features_.thread_local."${deps."slog_term"."1.5.0"."thread_local"}" deps)
+  ];
+
+
+# end
+# smallvec-0.6.7
+
+  crates.smallvec."0.6.7" = deps: { features?(features_.smallvec."0.6.7" deps {}) }: buildRustCrate {
+    crateName = "smallvec";
+    version = "0.6.7";
+    description = "'Small vector' optimization: store up to a small number of items on the stack";
+    authors = [ "Simon Sapin <simon.sapin@exyr.org>" ];
+    sha256 = "08ql2yi7ry08cqjl9n6vpb6x6zgqzwllzzk9pxj1143xwg503qcx";
+    libPath = "lib.rs";
+    dependencies = mapFeatures features ([
+      (crates."unreachable"."${deps."smallvec"."0.6.7"."unreachable"}" deps)
+    ]);
+    features = mkFeatures (features."smallvec"."0.6.7" or {});
+  };
+  features_.smallvec."0.6.7" = deps: f: updateFeatures f (rec {
+    smallvec = fold recursiveUpdate {} [
+      { "0.6.7"."std" =
+        (f.smallvec."0.6.7"."std" or false) ||
+        (f.smallvec."0.6.7".default or false) ||
+        (smallvec."0.6.7"."default" or false); }
+      { "0.6.7".default = (f.smallvec."0.6.7".default or true); }
+    ];
+    unreachable."${deps.smallvec."0.6.7".unreachable}".default = true;
+  }) [
+    (features_.unreachable."${deps."smallvec"."0.6.7"."unreachable"}" deps)
+  ];
+
+
+# end
+# stable_deref_trait-1.1.1
+
+  crates.stable_deref_trait."1.1.1" = deps: { features?(features_.stable_deref_trait."1.1.1" deps {}) }: buildRustCrate {
+    crateName = "stable_deref_trait";
+    version = "1.1.1";
+    description = "An unsafe marker trait for types like Box and Rc that dereference to a stable address even when moved, and hence can be used with libraries such as owning_ref and rental.\n";
+    authors = [ "Robert Grosse <n210241048576@gmail.com>" ];
+    sha256 = "1xy9slzslrzr31nlnw52sl1d820b09y61b7f13lqgsn8n7y0l4g8";
+    features = mkFeatures (features."stable_deref_trait"."1.1.1" or {});
+  };
+  features_.stable_deref_trait."1.1.1" = deps: f: updateFeatures f (rec {
+    stable_deref_trait = fold recursiveUpdate {} [
+      { "1.1.1"."std" =
+        (f.stable_deref_trait."1.1.1"."std" or false) ||
+        (f.stable_deref_trait."1.1.1".default or false) ||
+        (stable_deref_trait."1.1.1"."default" or false); }
+      { "1.1.1".default = (f.stable_deref_trait."1.1.1".default or true); }
+    ];
+  }) [];
+
+
+# end
+# string-0.1.2
+
+  crates.string."0.1.2" = deps: { features?(features_.string."0.1.2" deps {}) }: buildRustCrate {
+    crateName = "string";
+    version = "0.1.2";
+    description = "A UTF-8 encoded string with configurable byte storage.";
+    authors = [ "Carl Lerche <me@carllerche.com>" ];
+    sha256 = "1120qvf02aydqj0k3kpr8d7zybq0y5arnmgmfsdw75r8qwz75wc6";
+  };
+  features_.string."0.1.2" = deps: f: updateFeatures f ({
+    string."0.1.2".default = (f.string."0.1.2".default or true);
+  }) [];
+
+
+# end
+# strsim-0.6.0
+
+  crates.strsim."0.6.0" = deps: { features?(features_.strsim."0.6.0" deps {}) }: buildRustCrate {
+    crateName = "strsim";
+    version = "0.6.0";
+    description = "Implementations of string similarity metrics.\nIncludes Hamming, Levenshtein, Damerau-Levenshtein, Jaro, and Jaro-Winkler.\n";
+    authors = [ "Danny Guo <dannyguo91@gmail.com>" ];
+    sha256 = "1lz85l6y68hr62lv4baww29yy7g8pg20dlr0lbaswxmmcb0wl7gd";
+  };
+  features_.strsim."0.6.0" = deps: f: updateFeatures f ({
+    strsim."0.6.0".default = (f.strsim."0.6.0".default or true);
+  }) [];
+
+
+# end
+# syn-0.11.11
+
+  crates.syn."0.11.11" = deps: { features?(features_.syn."0.11.11" deps {}) }: buildRustCrate {
+    crateName = "syn";
+    version = "0.11.11";
+    description = "Nom parser for Rust source code";
+    authors = [ "David Tolnay <dtolnay@gmail.com>" ];
+    sha256 = "0yw8ng7x1dn5a6ykg0ib49y7r9nhzgpiq2989rqdp7rdz3n85502";
+    dependencies = mapFeatures features ([
+    ]
+      ++ (if features.syn."0.11.11".quote or false then [ (crates.quote."${deps."syn"."0.11.11".quote}" deps) ] else [])
+      ++ (if features.syn."0.11.11".synom or false then [ (crates.synom."${deps."syn"."0.11.11".synom}" deps) ] else [])
+      ++ (if features.syn."0.11.11".unicode-xid or false then [ (crates.unicode_xid."${deps."syn"."0.11.11".unicode_xid}" deps) ] else []));
+    features = mkFeatures (features."syn"."0.11.11" or {});
+  };
+  features_.syn."0.11.11" = deps: f: updateFeatures f (rec {
+    quote."${deps.syn."0.11.11".quote}".default = true;
+    syn = fold recursiveUpdate {} [
+      { "0.11.11"."parsing" =
+        (f.syn."0.11.11"."parsing" or false) ||
+        (f.syn."0.11.11".default or false) ||
+        (syn."0.11.11"."default" or false); }
+      { "0.11.11"."printing" =
+        (f.syn."0.11.11"."printing" or false) ||
+        (f.syn."0.11.11".default or false) ||
+        (syn."0.11.11"."default" or false); }
+      { "0.11.11"."quote" =
+        (f.syn."0.11.11"."quote" or false) ||
+        (f.syn."0.11.11".printing or false) ||
+        (syn."0.11.11"."printing" or false); }
+      { "0.11.11"."synom" =
+        (f.syn."0.11.11"."synom" or false) ||
+        (f.syn."0.11.11".parsing or false) ||
+        (syn."0.11.11"."parsing" or false); }
+      { "0.11.11"."unicode-xid" =
+        (f.syn."0.11.11"."unicode-xid" or false) ||
+        (f.syn."0.11.11".parsing or false) ||
+        (syn."0.11.11"."parsing" or false); }
+      { "0.11.11".default = (f.syn."0.11.11".default or true); }
+    ];
+    synom."${deps.syn."0.11.11".synom}".default = true;
+    unicode_xid."${deps.syn."0.11.11".unicode_xid}".default = true;
+  }) [
+    (features_.quote."${deps."syn"."0.11.11"."quote"}" deps)
+    (features_.synom."${deps."syn"."0.11.11"."synom"}" deps)
+    (features_.unicode_xid."${deps."syn"."0.11.11"."unicode_xid"}" deps)
+  ];
+
+
+# end
+# synom-0.11.3
+
+  crates.synom."0.11.3" = deps: { features?(features_.synom."0.11.3" deps {}) }: buildRustCrate {
+    crateName = "synom";
+    version = "0.11.3";
+    description = "Stripped-down Nom parser used by Syn";
+    authors = [ "David Tolnay <dtolnay@gmail.com>" ];
+    sha256 = "1l6d1s9qjfp6ng2s2z8219igvlv7gyk8gby97sdykqc1r93d8rhc";
+    dependencies = mapFeatures features ([
+      (crates."unicode_xid"."${deps."synom"."0.11.3"."unicode_xid"}" deps)
+    ]);
+  };
+  features_.synom."0.11.3" = deps: f: updateFeatures f ({
+    synom."0.11.3".default = (f.synom."0.11.3".default or true);
+    unicode_xid."${deps.synom."0.11.3".unicode_xid}".default = true;
+  }) [
+    (features_.unicode_xid."${deps."synom"."0.11.3"."unicode_xid"}" deps)
+  ];
+
+
+# end
+# tar-0.4.13
+
+  crates.tar."0.4.13" = deps: { features?(features_.tar."0.4.13" deps {}) }: buildRustCrate {
+    crateName = "tar";
+    version = "0.4.13";
+    description = "A Rust implementation of a TAR file reader and writer. This library does not\ncurrently handle compression, but it is abstract over all I/O readers and\nwriters. Additionally, great lengths are taken to ensure that the entire\ncontents are never required to be entirely resident in memory all at once.\n";
+    authors = [ "Alex Crichton <alex@alexcrichton.com>" ];
+    sha256 = "1m425d07h0i6h2vbpxnh067zmc16l9yr9bii17zxw4z2inkfyfc4";
+    dependencies = mapFeatures features ([
+      (crates."filetime"."${deps."tar"."0.4.13"."filetime"}" deps)
+      (crates."libc"."${deps."tar"."0.4.13"."libc"}" deps)
+    ])
+      ++ (if (kernel == "linux" || kernel == "darwin") then mapFeatures features ([
+    ]
+      ++ (if features.tar."0.4.13".xattr or false then [ (crates.xattr."${deps."tar"."0.4.13".xattr}" deps) ] else [])) else []);
+    features = mkFeatures (features."tar"."0.4.13" or {});
+  };
+  features_.tar."0.4.13" = deps: f: updateFeatures f (rec {
+    filetime."${deps.tar."0.4.13".filetime}".default = true;
+    libc."${deps.tar."0.4.13".libc}".default = true;
+    tar = fold recursiveUpdate {} [
+      { "0.4.13"."xattr" =
+        (f.tar."0.4.13"."xattr" or false) ||
+        (f.tar."0.4.13".default or false) ||
+        (tar."0.4.13"."default" or false); }
+      { "0.4.13".default = (f.tar."0.4.13".default or true); }
+    ];
+    xattr."${deps.tar."0.4.13".xattr}".default = true;
+  }) [
+    (features_.filetime."${deps."tar"."0.4.13"."filetime"}" deps)
+    (features_.libc."${deps."tar"."0.4.13"."libc"}" deps)
+    (features_.xattr."${deps."tar"."0.4.13"."xattr"}" deps)
+  ];
+
+
+# end
+# tempfile-3.0.5
+
+  crates.tempfile."3.0.5" = deps: { features?(features_.tempfile."3.0.5" deps {}) }: buildRustCrate {
+    crateName = "tempfile";
+    version = "3.0.5";
+    description = "A library for managing temporary files and directories.\n";
+    authors = [ "Steven Allen <steven@stebalien.com>" "The Rust Project Developers" "Ashley Mannix <ashleymannix@live.com.au>" "Jason White <jasonaw0@gmail.com>" ];
+    sha256 = "11xc89br78ypk4g27v51lm2baz57gp6v555i3sxhrj9qlas2iqfl";
+    dependencies = mapFeatures features ([
+      (crates."cfg_if"."${deps."tempfile"."3.0.5"."cfg_if"}" deps)
+      (crates."rand"."${deps."tempfile"."3.0.5"."rand"}" deps)
+      (crates."remove_dir_all"."${deps."tempfile"."3.0.5"."remove_dir_all"}" deps)
+    ])
+      ++ (if kernel == "redox" then mapFeatures features ([
+      (crates."redox_syscall"."${deps."tempfile"."3.0.5"."redox_syscall"}" deps)
+    ]) else [])
+      ++ (if (kernel == "linux" || kernel == "darwin") then mapFeatures features ([
+      (crates."libc"."${deps."tempfile"."3.0.5"."libc"}" deps)
+    ]) else [])
+      ++ (if kernel == "windows" then mapFeatures features ([
+      (crates."winapi"."${deps."tempfile"."3.0.5"."winapi"}" deps)
+    ]) else []);
+  };
+  features_.tempfile."3.0.5" = deps: f: updateFeatures f ({
+    cfg_if."${deps.tempfile."3.0.5".cfg_if}".default = true;
+    libc."${deps.tempfile."3.0.5".libc}".default = true;
+    rand."${deps.tempfile."3.0.5".rand}".default = true;
+    redox_syscall."${deps.tempfile."3.0.5".redox_syscall}".default = true;
+    remove_dir_all."${deps.tempfile."3.0.5".remove_dir_all}".default = true;
+    tempfile."3.0.5".default = (f.tempfile."3.0.5".default or true);
+    winapi = fold recursiveUpdate {} [
+      { "${deps.tempfile."3.0.5".winapi}"."fileapi" = true; }
+      { "${deps.tempfile."3.0.5".winapi}"."handleapi" = true; }
+      { "${deps.tempfile."3.0.5".winapi}"."winbase" = true; }
+      { "${deps.tempfile."3.0.5".winapi}".default = true; }
+    ];
+  }) [
+    (features_.cfg_if."${deps."tempfile"."3.0.5"."cfg_if"}" deps)
+    (features_.rand."${deps."tempfile"."3.0.5"."rand"}" deps)
+    (features_.remove_dir_all."${deps."tempfile"."3.0.5"."remove_dir_all"}" deps)
+    (features_.redox_syscall."${deps."tempfile"."3.0.5"."redox_syscall"}" deps)
+    (features_.libc."${deps."tempfile"."3.0.5"."libc"}" deps)
+    (features_.winapi."${deps."tempfile"."3.0.5"."winapi"}" deps)
+  ];
+
+
+# end
+# termion-1.5.1
+
+  crates.termion."1.5.1" = deps: { features?(features_.termion."1.5.1" deps {}) }: buildRustCrate {
+    crateName = "termion";
+    version = "1.5.1";
+    description = "A bindless library for manipulating terminals.";
+    authors = [ "ticki <Ticki@users.noreply.github.com>" "gycos <alexandre.bury@gmail.com>" "IGI-111 <igi-111@protonmail.com>" ];
+    sha256 = "02gq4vd8iws1f3gjrgrgpajsk2bk43nds5acbbb4s8dvrdvr8nf1";
+    dependencies = (if !(kernel == "redox") then mapFeatures features ([
+      (crates."libc"."${deps."termion"."1.5.1"."libc"}" deps)
+    ]) else [])
+      ++ (if kernel == "redox" then mapFeatures features ([
+      (crates."redox_syscall"."${deps."termion"."1.5.1"."redox_syscall"}" deps)
+      (crates."redox_termios"."${deps."termion"."1.5.1"."redox_termios"}" deps)
+    ]) else []);
+  };
+  features_.termion."1.5.1" = deps: f: updateFeatures f ({
+    libc."${deps.termion."1.5.1".libc}".default = true;
+    redox_syscall."${deps.termion."1.5.1".redox_syscall}".default = true;
+    redox_termios."${deps.termion."1.5.1".redox_termios}".default = true;
+    termion."1.5.1".default = (f.termion."1.5.1".default or true);
+  }) [
+    (features_.libc."${deps."termion"."1.5.1"."libc"}" deps)
+    (features_.redox_syscall."${deps."termion"."1.5.1"."redox_syscall"}" deps)
+    (features_.redox_termios."${deps."termion"."1.5.1"."redox_termios"}" deps)
+  ];
+
+
+# end
+# textwrap-0.9.0
+
+  crates.textwrap."0.9.0" = deps: { features?(features_.textwrap."0.9.0" deps {}) }: buildRustCrate {
+    crateName = "textwrap";
+    version = "0.9.0";
+    description = "Textwrap is a small library for word wrapping, indenting, and\ndedenting strings.\n\nYou can use it to format strings (such as help and error messages) for\ndisplay in commandline applications. It is designed to be efficient\nand handle Unicode characters correctly.\n";
+    authors = [ "Martin Geisler <martin@geisler.net>" ];
+    sha256 = "18jg79ndjlwndz01mlbh82kkr2arqm658yn5kwp65l5n1hz8w4yb";
+    dependencies = mapFeatures features ([
+      (crates."unicode_width"."${deps."textwrap"."0.9.0"."unicode_width"}" deps)
+    ]);
+  };
+  features_.textwrap."0.9.0" = deps: f: updateFeatures f ({
+    textwrap."0.9.0".default = (f.textwrap."0.9.0".default or true);
+    unicode_width."${deps.textwrap."0.9.0".unicode_width}".default = true;
+  }) [
+    (features_.unicode_width."${deps."textwrap"."0.9.0"."unicode_width"}" deps)
+  ];
+
+
+# end
+# thread-id-2.0.0
+
+  crates.thread_id."2.0.0" = deps: { features?(features_.thread_id."2.0.0" deps {}) }: buildRustCrate {
+    crateName = "thread-id";
+    version = "2.0.0";
+    description = "Get a unique thread ID";
+    authors = [ "Ruud van Asseldonk <dev@veniogames.com>" ];
+    sha256 = "06i3c8ckn97i5rp16civ2vpqbknlkx66dkrl070iw60nawi0kjc3";
+    dependencies = mapFeatures features ([
+      (crates."kernel32_sys"."${deps."thread_id"."2.0.0"."kernel32_sys"}" deps)
+      (crates."libc"."${deps."thread_id"."2.0.0"."libc"}" deps)
+    ]);
+  };
+  features_.thread_id."2.0.0" = deps: f: updateFeatures f ({
+    kernel32_sys."${deps.thread_id."2.0.0".kernel32_sys}".default = true;
+    libc."${deps.thread_id."2.0.0".libc}".default = true;
+    thread_id."2.0.0".default = (f.thread_id."2.0.0".default or true);
+  }) [
+    (features_.kernel32_sys."${deps."thread_id"."2.0.0"."kernel32_sys"}" deps)
+    (features_.libc."${deps."thread_id"."2.0.0"."libc"}" deps)
+  ];
+
+
+# end
+# thread_local-0.2.7
+
+  crates.thread_local."0.2.7" = deps: { features?(features_.thread_local."0.2.7" deps {}) }: buildRustCrate {
+    crateName = "thread_local";
+    version = "0.2.7";
+    description = "Per-object thread-local storage";
+    authors = [ "Amanieu d'Antras <amanieu@gmail.com>" ];
+    sha256 = "19p0zrs24rdwjvpi10jig5ms3sxj00pv8shkr9cpddri8cdghqp7";
+    dependencies = mapFeatures features ([
+      (crates."thread_id"."${deps."thread_local"."0.2.7"."thread_id"}" deps)
+    ]);
+  };
+  features_.thread_local."0.2.7" = deps: f: updateFeatures f ({
+    thread_id."${deps.thread_local."0.2.7".thread_id}".default = true;
+    thread_local."0.2.7".default = (f.thread_local."0.2.7".default or true);
+  }) [
+    (features_.thread_id."${deps."thread_local"."0.2.7"."thread_id"}" deps)
+  ];
+
+
+# end
+# thread_local-0.3.4
+
+  crates.thread_local."0.3.4" = deps: { features?(features_.thread_local."0.3.4" deps {}) }: buildRustCrate {
+    crateName = "thread_local";
+    version = "0.3.4";
+    description = "Per-object thread-local storage";
+    authors = [ "Amanieu d'Antras <amanieu@gmail.com>" ];
+    sha256 = "1y6cwyhhx2nkz4b3dziwhqdvgq830z8wjp32b40pjd8r0hxqv2jr";
+    dependencies = mapFeatures features ([
+      (crates."lazy_static"."${deps."thread_local"."0.3.4"."lazy_static"}" deps)
+      (crates."unreachable"."${deps."thread_local"."0.3.4"."unreachable"}" deps)
+    ]);
+  };
+  features_.thread_local."0.3.4" = deps: f: updateFeatures f ({
+    lazy_static."${deps.thread_local."0.3.4".lazy_static}".default = true;
+    thread_local."0.3.4".default = (f.thread_local."0.3.4".default or true);
+    unreachable."${deps.thread_local."0.3.4".unreachable}".default = true;
+  }) [
+    (features_.lazy_static."${deps."thread_local"."0.3.4"."lazy_static"}" deps)
+    (features_.unreachable."${deps."thread_local"."0.3.4"."unreachable"}" deps)
+  ];
+
+
+# end
+# time-0.1.38
+
+  crates.time."0.1.38" = deps: { features?(features_.time."0.1.38" deps {}) }: buildRustCrate {
+    crateName = "time";
+    version = "0.1.38";
+    description = "Utilities for working with time-related functions in Rust.\n";
+    authors = [ "The Rust Project Developers" ];
+    sha256 = "1ws283vvz7c6jfiwn53rmc6kybapr4pjaahfxxrz232b0qzw7gcp";
+    dependencies = mapFeatures features ([
+      (crates."libc"."${deps."time"."0.1.38"."libc"}" deps)
+    ])
+      ++ (if kernel == "redox" then mapFeatures features ([
+      (crates."redox_syscall"."${deps."time"."0.1.38"."redox_syscall"}" deps)
+    ]) else [])
+      ++ (if kernel == "windows" then mapFeatures features ([
+      (crates."kernel32_sys"."${deps."time"."0.1.38"."kernel32_sys"}" deps)
+      (crates."winapi"."${deps."time"."0.1.38"."winapi"}" deps)
+    ]) else []);
+  };
+  features_.time."0.1.38" = deps: f: updateFeatures f ({
+    kernel32_sys."${deps.time."0.1.38".kernel32_sys}".default = true;
+    libc."${deps.time."0.1.38".libc}".default = true;
+    redox_syscall."${deps.time."0.1.38".redox_syscall}".default = true;
+    time."0.1.38".default = (f.time."0.1.38".default or true);
+    winapi."${deps.time."0.1.38".winapi}".default = true;
+  }) [
+    (features_.libc."${deps."time"."0.1.38"."libc"}" deps)
+    (features_.redox_syscall."${deps."time"."0.1.38"."redox_syscall"}" deps)
+    (features_.kernel32_sys."${deps."time"."0.1.38"."kernel32_sys"}" deps)
+    (features_.winapi."${deps."time"."0.1.38"."winapi"}" deps)
+  ];
+
+
+# end
+# tokio-0.1.7
+
+  crates.tokio."0.1.7" = deps: { features?(features_.tokio."0.1.7" deps {}) }: buildRustCrate {
+    crateName = "tokio";
+    version = "0.1.7";
+    description = "An event-driven, non-blocking I/O platform for writing asynchronous I/O\nbacked applications.\n";
+    authors = [ "Carl Lerche <me@carllerche.com>" ];
+    sha256 = "0d5fj90wk05m5vbd924irg1pl1d4fn86jjw5napzanh6vbwsnr66";
+    dependencies = mapFeatures features ([
+      (crates."futures"."${deps."tokio"."0.1.7"."futures"}" deps)
+      (crates."mio"."${deps."tokio"."0.1.7"."mio"}" deps)
+      (crates."tokio_executor"."${deps."tokio"."0.1.7"."tokio_executor"}" deps)
+      (crates."tokio_fs"."${deps."tokio"."0.1.7"."tokio_fs"}" deps)
+      (crates."tokio_io"."${deps."tokio"."0.1.7"."tokio_io"}" deps)
+      (crates."tokio_reactor"."${deps."tokio"."0.1.7"."tokio_reactor"}" deps)
+      (crates."tokio_tcp"."${deps."tokio"."0.1.7"."tokio_tcp"}" deps)
+      (crates."tokio_threadpool"."${deps."tokio"."0.1.7"."tokio_threadpool"}" deps)
+      (crates."tokio_timer"."${deps."tokio"."0.1.7"."tokio_timer"}" deps)
+      (crates."tokio_udp"."${deps."tokio"."0.1.7"."tokio_udp"}" deps)
+    ]);
+  };
+  features_.tokio."0.1.7" = deps: f: updateFeatures f ({
+    futures."${deps.tokio."0.1.7".futures}".default = true;
+    mio."${deps.tokio."0.1.7".mio}".default = true;
+    tokio."0.1.7".default = (f.tokio."0.1.7".default or true);
+    tokio_executor."${deps.tokio."0.1.7".tokio_executor}".default = true;
+    tokio_fs."${deps.tokio."0.1.7".tokio_fs}".default = true;
+    tokio_io."${deps.tokio."0.1.7".tokio_io}".default = true;
+    tokio_reactor."${deps.tokio."0.1.7".tokio_reactor}".default = true;
+    tokio_tcp."${deps.tokio."0.1.7".tokio_tcp}".default = true;
+    tokio_threadpool."${deps.tokio."0.1.7".tokio_threadpool}".default = true;
+    tokio_timer."${deps.tokio."0.1.7".tokio_timer}".default = true;
+    tokio_udp."${deps.tokio."0.1.7".tokio_udp}".default = true;
+  }) [
+    (features_.futures."${deps."tokio"."0.1.7"."futures"}" deps)
+    (features_.mio."${deps."tokio"."0.1.7"."mio"}" deps)
+    (features_.tokio_executor."${deps."tokio"."0.1.7"."tokio_executor"}" deps)
+    (features_.tokio_fs."${deps."tokio"."0.1.7"."tokio_fs"}" deps)
+    (features_.tokio_io."${deps."tokio"."0.1.7"."tokio_io"}" deps)
+    (features_.tokio_reactor."${deps."tokio"."0.1.7"."tokio_reactor"}" deps)
+    (features_.tokio_tcp."${deps."tokio"."0.1.7"."tokio_tcp"}" deps)
+    (features_.tokio_threadpool."${deps."tokio"."0.1.7"."tokio_threadpool"}" deps)
+    (features_.tokio_timer."${deps."tokio"."0.1.7"."tokio_timer"}" deps)
+    (features_.tokio_udp."${deps."tokio"."0.1.7"."tokio_udp"}" deps)
+  ];
+
+
+# end
+# tokio-codec-0.1.1
+
+  crates.tokio_codec."0.1.1" = deps: { features?(features_.tokio_codec."0.1.1" deps {}) }: buildRustCrate {
+    crateName = "tokio-codec";
+    version = "0.1.1";
+    description = "Utilities for encoding and decoding frames.\n";
+    authors = [ "Carl Lerche <me@carllerche.com>" "Bryan Burgers <bryan@burgers.io>" ];
+    sha256 = "0jc9lik540zyj4chbygg1rjh37m3zax8pd4bwcrwjmi1v56qwi4h";
+    dependencies = mapFeatures features ([
+      (crates."bytes"."${deps."tokio_codec"."0.1.1"."bytes"}" deps)
+      (crates."futures"."${deps."tokio_codec"."0.1.1"."futures"}" deps)
+      (crates."tokio_io"."${deps."tokio_codec"."0.1.1"."tokio_io"}" deps)
+    ]);
+  };
+  features_.tokio_codec."0.1.1" = deps: f: updateFeatures f ({
+    bytes."${deps.tokio_codec."0.1.1".bytes}".default = true;
+    futures."${deps.tokio_codec."0.1.1".futures}".default = true;
+    tokio_codec."0.1.1".default = (f.tokio_codec."0.1.1".default or true);
+    tokio_io."${deps.tokio_codec."0.1.1".tokio_io}".default = true;
+  }) [
+    (features_.bytes."${deps."tokio_codec"."0.1.1"."bytes"}" deps)
+    (features_.futures."${deps."tokio_codec"."0.1.1"."futures"}" deps)
+    (features_.tokio_io."${deps."tokio_codec"."0.1.1"."tokio_io"}" deps)
+  ];
+
+
+# end
+# tokio-executor-0.1.5
+
+  crates.tokio_executor."0.1.5" = deps: { features?(features_.tokio_executor."0.1.5" deps {}) }: buildRustCrate {
+    crateName = "tokio-executor";
+    version = "0.1.5";
+    description = "Future execution primitives\n";
+    authors = [ "Carl Lerche <me@carllerche.com>" ];
+    sha256 = "15j2ybs8w38gncgbxkvp2qsp6wl62ibi3rns0vlwggx7svmx4bf3";
+    dependencies = mapFeatures features ([
+      (crates."futures"."${deps."tokio_executor"."0.1.5"."futures"}" deps)
+    ]);
+  };
+  features_.tokio_executor."0.1.5" = deps: f: updateFeatures f ({
+    futures."${deps.tokio_executor."0.1.5".futures}".default = true;
+    tokio_executor."0.1.5".default = (f.tokio_executor."0.1.5".default or true);
+  }) [
+    (features_.futures."${deps."tokio_executor"."0.1.5"."futures"}" deps)
+  ];
+
+
+# end
+# tokio-fs-0.1.4
+
+  crates.tokio_fs."0.1.4" = deps: { features?(features_.tokio_fs."0.1.4" deps {}) }: buildRustCrate {
+    crateName = "tokio-fs";
+    version = "0.1.4";
+    description = "Filesystem API for Tokio.\n";
+    authors = [ "Carl Lerche <me@carllerche.com>" ];
+    sha256 = "05bpc1p1apb4jfw18i84agwwar57zn07d7smqvslpzagd9b3sd31";
+    dependencies = mapFeatures features ([
+      (crates."futures"."${deps."tokio_fs"."0.1.4"."futures"}" deps)
+      (crates."tokio_io"."${deps."tokio_fs"."0.1.4"."tokio_io"}" deps)
+      (crates."tokio_threadpool"."${deps."tokio_fs"."0.1.4"."tokio_threadpool"}" deps)
+    ]);
+  };
+  features_.tokio_fs."0.1.4" = deps: f: updateFeatures f ({
+    futures."${deps.tokio_fs."0.1.4".futures}".default = true;
+    tokio_fs."0.1.4".default = (f.tokio_fs."0.1.4".default or true);
+    tokio_io."${deps.tokio_fs."0.1.4".tokio_io}".default = true;
+    tokio_threadpool."${deps.tokio_fs."0.1.4".tokio_threadpool}".default = true;
+  }) [
+    (features_.futures."${deps."tokio_fs"."0.1.4"."futures"}" deps)
+    (features_.tokio_io."${deps."tokio_fs"."0.1.4"."tokio_io"}" deps)
+    (features_.tokio_threadpool."${deps."tokio_fs"."0.1.4"."tokio_threadpool"}" deps)
+  ];
+
+
+# end
+# tokio-io-0.1.10
+
+  crates.tokio_io."0.1.10" = deps: { features?(features_.tokio_io."0.1.10" deps {}) }: buildRustCrate {
+    crateName = "tokio-io";
+    version = "0.1.10";
+    description = "Core I/O primitives for asynchronous I/O in Rust.\n";
+    authors = [ "Carl Lerche <me@carllerche.com>" ];
+    sha256 = "14d65rqa5rb2msgkz2xn40cavs4m7f4qyi7vnfv98v7f10l9wlay";
+    dependencies = mapFeatures features ([
+      (crates."bytes"."${deps."tokio_io"."0.1.10"."bytes"}" deps)
+      (crates."futures"."${deps."tokio_io"."0.1.10"."futures"}" deps)
+      (crates."log"."${deps."tokio_io"."0.1.10"."log"}" deps)
+    ]);
+  };
+  features_.tokio_io."0.1.10" = deps: f: updateFeatures f ({
+    bytes."${deps.tokio_io."0.1.10".bytes}".default = true;
+    futures."${deps.tokio_io."0.1.10".futures}".default = true;
+    log."${deps.tokio_io."0.1.10".log}".default = true;
+    tokio_io."0.1.10".default = (f.tokio_io."0.1.10".default or true);
+  }) [
+    (features_.bytes."${deps."tokio_io"."0.1.10"."bytes"}" deps)
+    (features_.futures."${deps."tokio_io"."0.1.10"."futures"}" deps)
+    (features_.log."${deps."tokio_io"."0.1.10"."log"}" deps)
+  ];
+
+
+# end
+# tokio-reactor-0.1.7
+
+  crates.tokio_reactor."0.1.7" = deps: { features?(features_.tokio_reactor."0.1.7" deps {}) }: buildRustCrate {
+    crateName = "tokio-reactor";
+    version = "0.1.7";
+    description = "Event loop that drives Tokio I/O resources.\n";
+    authors = [ "Carl Lerche <me@carllerche.com>" ];
+    sha256 = "1ssrc6gic43lachv7jk97jxzw609sgcsrkwi7chf96sn7nqrhj0z";
+    dependencies = mapFeatures features ([
+      (crates."crossbeam_utils"."${deps."tokio_reactor"."0.1.7"."crossbeam_utils"}" deps)
+      (crates."futures"."${deps."tokio_reactor"."0.1.7"."futures"}" deps)
+      (crates."lazy_static"."${deps."tokio_reactor"."0.1.7"."lazy_static"}" deps)
+      (crates."log"."${deps."tokio_reactor"."0.1.7"."log"}" deps)
+      (crates."mio"."${deps."tokio_reactor"."0.1.7"."mio"}" deps)
+      (crates."num_cpus"."${deps."tokio_reactor"."0.1.7"."num_cpus"}" deps)
+      (crates."parking_lot"."${deps."tokio_reactor"."0.1.7"."parking_lot"}" deps)
+      (crates."slab"."${deps."tokio_reactor"."0.1.7"."slab"}" deps)
+      (crates."tokio_executor"."${deps."tokio_reactor"."0.1.7"."tokio_executor"}" deps)
+      (crates."tokio_io"."${deps."tokio_reactor"."0.1.7"."tokio_io"}" deps)
+    ]);
+  };
+  features_.tokio_reactor."0.1.7" = deps: f: updateFeatures f ({
+    crossbeam_utils."${deps.tokio_reactor."0.1.7".crossbeam_utils}".default = true;
+    futures."${deps.tokio_reactor."0.1.7".futures}".default = true;
+    lazy_static."${deps.tokio_reactor."0.1.7".lazy_static}".default = true;
+    log."${deps.tokio_reactor."0.1.7".log}".default = true;
+    mio."${deps.tokio_reactor."0.1.7".mio}".default = true;
+    num_cpus."${deps.tokio_reactor."0.1.7".num_cpus}".default = true;
+    parking_lot."${deps.tokio_reactor."0.1.7".parking_lot}".default = true;
+    slab."${deps.tokio_reactor."0.1.7".slab}".default = true;
+    tokio_executor."${deps.tokio_reactor."0.1.7".tokio_executor}".default = true;
+    tokio_io."${deps.tokio_reactor."0.1.7".tokio_io}".default = true;
+    tokio_reactor."0.1.7".default = (f.tokio_reactor."0.1.7".default or true);
+  }) [
+    (features_.crossbeam_utils."${deps."tokio_reactor"."0.1.7"."crossbeam_utils"}" deps)
+    (features_.futures."${deps."tokio_reactor"."0.1.7"."futures"}" deps)
+    (features_.lazy_static."${deps."tokio_reactor"."0.1.7"."lazy_static"}" deps)
+    (features_.log."${deps."tokio_reactor"."0.1.7"."log"}" deps)
+    (features_.mio."${deps."tokio_reactor"."0.1.7"."mio"}" deps)
+    (features_.num_cpus."${deps."tokio_reactor"."0.1.7"."num_cpus"}" deps)
+    (features_.parking_lot."${deps."tokio_reactor"."0.1.7"."parking_lot"}" deps)
+    (features_.slab."${deps."tokio_reactor"."0.1.7"."slab"}" deps)
+    (features_.tokio_executor."${deps."tokio_reactor"."0.1.7"."tokio_executor"}" deps)
+    (features_.tokio_io."${deps."tokio_reactor"."0.1.7"."tokio_io"}" deps)
+  ];
+
+
+# end
+# tokio-tcp-0.1.2
+
+  crates.tokio_tcp."0.1.2" = deps: { features?(features_.tokio_tcp."0.1.2" deps {}) }: buildRustCrate {
+    crateName = "tokio-tcp";
+    version = "0.1.2";
+    description = "TCP bindings for tokio.\n";
+    authors = [ "Carl Lerche <me@carllerche.com>" ];
+    sha256 = "0yvfwybqnyca24aj9as8rgydamjq0wrd9xbxxkjcasvsdmsv6z1d";
+    dependencies = mapFeatures features ([
+      (crates."bytes"."${deps."tokio_tcp"."0.1.2"."bytes"}" deps)
+      (crates."futures"."${deps."tokio_tcp"."0.1.2"."futures"}" deps)
+      (crates."iovec"."${deps."tokio_tcp"."0.1.2"."iovec"}" deps)
+      (crates."mio"."${deps."tokio_tcp"."0.1.2"."mio"}" deps)
+      (crates."tokio_io"."${deps."tokio_tcp"."0.1.2"."tokio_io"}" deps)
+      (crates."tokio_reactor"."${deps."tokio_tcp"."0.1.2"."tokio_reactor"}" deps)
+    ]);
+  };
+  features_.tokio_tcp."0.1.2" = deps: f: updateFeatures f ({
+    bytes."${deps.tokio_tcp."0.1.2".bytes}".default = true;
+    futures."${deps.tokio_tcp."0.1.2".futures}".default = true;
+    iovec."${deps.tokio_tcp."0.1.2".iovec}".default = true;
+    mio."${deps.tokio_tcp."0.1.2".mio}".default = true;
+    tokio_io."${deps.tokio_tcp."0.1.2".tokio_io}".default = true;
+    tokio_reactor."${deps.tokio_tcp."0.1.2".tokio_reactor}".default = true;
+    tokio_tcp."0.1.2".default = (f.tokio_tcp."0.1.2".default or true);
+  }) [
+    (features_.bytes."${deps."tokio_tcp"."0.1.2"."bytes"}" deps)
+    (features_.futures."${deps."tokio_tcp"."0.1.2"."futures"}" deps)
+    (features_.iovec."${deps."tokio_tcp"."0.1.2"."iovec"}" deps)
+    (features_.mio."${deps."tokio_tcp"."0.1.2"."mio"}" deps)
+    (features_.tokio_io."${deps."tokio_tcp"."0.1.2"."tokio_io"}" deps)
+    (features_.tokio_reactor."${deps."tokio_tcp"."0.1.2"."tokio_reactor"}" deps)
+  ];
+
+
+# end
+# tokio-threadpool-0.1.9
+
+  crates.tokio_threadpool."0.1.9" = deps: { features?(features_.tokio_threadpool."0.1.9" deps {}) }: buildRustCrate {
+    crateName = "tokio-threadpool";
+    version = "0.1.9";
+    description = "A task scheduler backed by a work-stealing thread pool.\n";
+    authors = [ "Carl Lerche <me@carllerche.com>" ];
+    sha256 = "0ipr0j79mhjjsvc0ma95sj07m0aiyq6rkwgvlalqwhinivl5d39g";
+    dependencies = mapFeatures features ([
+      (crates."crossbeam_deque"."${deps."tokio_threadpool"."0.1.9"."crossbeam_deque"}" deps)
+      (crates."crossbeam_utils"."${deps."tokio_threadpool"."0.1.9"."crossbeam_utils"}" deps)
+      (crates."futures"."${deps."tokio_threadpool"."0.1.9"."futures"}" deps)
+      (crates."log"."${deps."tokio_threadpool"."0.1.9"."log"}" deps)
+      (crates."num_cpus"."${deps."tokio_threadpool"."0.1.9"."num_cpus"}" deps)
+      (crates."rand"."${deps."tokio_threadpool"."0.1.9"."rand"}" deps)
+      (crates."tokio_executor"."${deps."tokio_threadpool"."0.1.9"."tokio_executor"}" deps)
+    ]);
+  };
+  features_.tokio_threadpool."0.1.9" = deps: f: updateFeatures f ({
+    crossbeam_deque."${deps.tokio_threadpool."0.1.9".crossbeam_deque}".default = true;
+    crossbeam_utils."${deps.tokio_threadpool."0.1.9".crossbeam_utils}".default = true;
+    futures."${deps.tokio_threadpool."0.1.9".futures}".default = true;
+    log."${deps.tokio_threadpool."0.1.9".log}".default = true;
+    num_cpus."${deps.tokio_threadpool."0.1.9".num_cpus}".default = true;
+    rand."${deps.tokio_threadpool."0.1.9".rand}".default = true;
+    tokio_executor."${deps.tokio_threadpool."0.1.9".tokio_executor}".default = true;
+    tokio_threadpool."0.1.9".default = (f.tokio_threadpool."0.1.9".default or true);
+  }) [
+    (features_.crossbeam_deque."${deps."tokio_threadpool"."0.1.9"."crossbeam_deque"}" deps)
+    (features_.crossbeam_utils."${deps."tokio_threadpool"."0.1.9"."crossbeam_utils"}" deps)
+    (features_.futures."${deps."tokio_threadpool"."0.1.9"."futures"}" deps)
+    (features_.log."${deps."tokio_threadpool"."0.1.9"."log"}" deps)
+    (features_.num_cpus."${deps."tokio_threadpool"."0.1.9"."num_cpus"}" deps)
+    (features_.rand."${deps."tokio_threadpool"."0.1.9"."rand"}" deps)
+    (features_.tokio_executor."${deps."tokio_threadpool"."0.1.9"."tokio_executor"}" deps)
+  ];
+
+
+# end
+# tokio-timer-0.2.5
+
+  crates.tokio_timer."0.2.5" = deps: { features?(features_.tokio_timer."0.2.5" deps {}) }: buildRustCrate {
+    crateName = "tokio-timer";
+    version = "0.2.5";
+    description = "Timer facilities for Tokio\n";
+    authors = [ "Carl Lerche <me@carllerche.com>" ];
+    sha256 = "0jyhizvnpldkbqvqygrg0zd5zvfj9p0ywvjzf47iy632vq3qnwzm";
+    dependencies = mapFeatures features ([
+      (crates."futures"."${deps."tokio_timer"."0.2.5"."futures"}" deps)
+      (crates."tokio_executor"."${deps."tokio_timer"."0.2.5"."tokio_executor"}" deps)
+    ]);
+  };
+  features_.tokio_timer."0.2.5" = deps: f: updateFeatures f ({
+    futures."${deps.tokio_timer."0.2.5".futures}".default = true;
+    tokio_executor."${deps.tokio_timer."0.2.5".tokio_executor}".default = true;
+    tokio_timer."0.2.5".default = (f.tokio_timer."0.2.5".default or true);
+  }) [
+    (features_.futures."${deps."tokio_timer"."0.2.5"."futures"}" deps)
+    (features_.tokio_executor."${deps."tokio_timer"."0.2.5"."tokio_executor"}" deps)
+  ];
+
+
+# end
+# tokio-udp-0.1.3
+
+  crates.tokio_udp."0.1.3" = deps: { features?(features_.tokio_udp."0.1.3" deps {}) }: buildRustCrate {
+    crateName = "tokio-udp";
+    version = "0.1.3";
+    description = "UDP bindings for tokio.\n";
+    authors = [ "Carl Lerche <me@carllerche.com>" ];
+    sha256 = "1g1x499vqvzwy7xfccr32vwymlx25zpmkx8ppqgifzqwrjnncajf";
+    dependencies = mapFeatures features ([
+      (crates."bytes"."${deps."tokio_udp"."0.1.3"."bytes"}" deps)
+      (crates."futures"."${deps."tokio_udp"."0.1.3"."futures"}" deps)
+      (crates."log"."${deps."tokio_udp"."0.1.3"."log"}" deps)
+      (crates."mio"."${deps."tokio_udp"."0.1.3"."mio"}" deps)
+      (crates."tokio_codec"."${deps."tokio_udp"."0.1.3"."tokio_codec"}" deps)
+      (crates."tokio_io"."${deps."tokio_udp"."0.1.3"."tokio_io"}" deps)
+      (crates."tokio_reactor"."${deps."tokio_udp"."0.1.3"."tokio_reactor"}" deps)
+    ]);
+  };
+  features_.tokio_udp."0.1.3" = deps: f: updateFeatures f ({
+    bytes."${deps.tokio_udp."0.1.3".bytes}".default = true;
+    futures."${deps.tokio_udp."0.1.3".futures}".default = true;
+    log."${deps.tokio_udp."0.1.3".log}".default = true;
+    mio."${deps.tokio_udp."0.1.3".mio}".default = true;
+    tokio_codec."${deps.tokio_udp."0.1.3".tokio_codec}".default = true;
+    tokio_io."${deps.tokio_udp."0.1.3".tokio_io}".default = true;
+    tokio_reactor."${deps.tokio_udp."0.1.3".tokio_reactor}".default = true;
+    tokio_udp."0.1.3".default = (f.tokio_udp."0.1.3".default or true);
+  }) [
+    (features_.bytes."${deps."tokio_udp"."0.1.3"."bytes"}" deps)
+    (features_.futures."${deps."tokio_udp"."0.1.3"."futures"}" deps)
+    (features_.log."${deps."tokio_udp"."0.1.3"."log"}" deps)
+    (features_.mio."${deps."tokio_udp"."0.1.3"."mio"}" deps)
+    (features_.tokio_codec."${deps."tokio_udp"."0.1.3"."tokio_codec"}" deps)
+    (features_.tokio_io."${deps."tokio_udp"."0.1.3"."tokio_io"}" deps)
+    (features_.tokio_reactor."${deps."tokio_udp"."0.1.3"."tokio_reactor"}" deps)
+  ];
+
+
+# end
+# try-lock-0.2.2
+
+  crates.try_lock."0.2.2" = deps: { features?(features_.try_lock."0.2.2" deps {}) }: buildRustCrate {
+    crateName = "try-lock";
+    version = "0.2.2";
+    description = "A lightweight atomic lock.";
+    authors = [ "Sean McArthur <sean@seanmonstar.com>" ];
+    sha256 = "1k8xc0jpbrmzp0fwghdh6pwzjb9xx2p8yy0xxnnb8065smc5fsrv";
+  };
+  features_.try_lock."0.2.2" = deps: f: updateFeatures f ({
+    try_lock."0.2.2".default = (f.try_lock."0.2.2".default or true);
+  }) [];
+
+
+# end
+# unicase-1.4.2
+
+  crates.unicase."1.4.2" = deps: { features?(features_.unicase."1.4.2" deps {}) }: buildRustCrate {
+    crateName = "unicase";
+    version = "1.4.2";
+    description = "A case-insensitive wrapper around strings.";
+    authors = [ "Sean McArthur <sean.monstar@gmail.com>" ];
+    sha256 = "0rbnhw2mnhcwrij3vczp0sl8zdfmvf2dlh8hly81kj7132kfj0mf";
+    build = "build.rs";
+    dependencies = mapFeatures features ([
+]);
+
+    buildDependencies = mapFeatures features ([
+      (crates."version_check"."${deps."unicase"."1.4.2"."version_check"}" deps)
+    ]);
+    features = mkFeatures (features."unicase"."1.4.2" or {});
+  };
+  features_.unicase."1.4.2" = deps: f: updateFeatures f (rec {
+    unicase = fold recursiveUpdate {} [
+      { "1.4.2"."heapsize" =
+        (f.unicase."1.4.2"."heapsize" or false) ||
+        (f.unicase."1.4.2".heap_size or false) ||
+        (unicase."1.4.2"."heap_size" or false); }
+      { "1.4.2"."heapsize_plugin" =
+        (f.unicase."1.4.2"."heapsize_plugin" or false) ||
+        (f.unicase."1.4.2".heap_size or false) ||
+        (unicase."1.4.2"."heap_size" or false); }
+      { "1.4.2".default = (f.unicase."1.4.2".default or true); }
+    ];
+    version_check."${deps.unicase."1.4.2".version_check}".default = true;
+  }) [
+    (features_.version_check."${deps."unicase"."1.4.2"."version_check"}" deps)
+  ];
+
+
+# end
+# unicase-2.1.0
+
+  crates.unicase."2.1.0" = deps: { features?(features_.unicase."2.1.0" deps {}) }: buildRustCrate {
+    crateName = "unicase";
+    version = "2.1.0";
+    description = "A case-insensitive wrapper around strings.";
+    authors = [ "Sean McArthur <sean@seanmonstar.com>" ];
+    sha256 = "1zzn16hh8fdx5pnbbnl32q8m2mh4vpd1jm9pdcv969ik83dw4byp";
+    build = "build.rs";
+
+    buildDependencies = mapFeatures features ([
+      (crates."version_check"."${deps."unicase"."2.1.0"."version_check"}" deps)
+    ]);
+    features = mkFeatures (features."unicase"."2.1.0" or {});
+  };
+  features_.unicase."2.1.0" = deps: f: updateFeatures f ({
+    unicase."2.1.0".default = (f.unicase."2.1.0".default or true);
+    version_check."${deps.unicase."2.1.0".version_check}".default = true;
+  }) [
+    (features_.version_check."${deps."unicase"."2.1.0"."version_check"}" deps)
+  ];
+
+
+# end
+# unicode-bidi-0.3.4
+
+  crates.unicode_bidi."0.3.4" = deps: { features?(features_.unicode_bidi."0.3.4" deps {}) }: buildRustCrate {
+    crateName = "unicode-bidi";
+    version = "0.3.4";
+    description = "Implementation of the Unicode Bidirectional Algorithm";
+    authors = [ "The Servo Project Developers" ];
+    sha256 = "0lcd6jasrf8p9p0q20qyf10c6xhvw40m2c4rr105hbk6zy26nj1q";
+    libName = "unicode_bidi";
+    dependencies = mapFeatures features ([
+      (crates."matches"."${deps."unicode_bidi"."0.3.4"."matches"}" deps)
+    ]);
+    features = mkFeatures (features."unicode_bidi"."0.3.4" or {});
+  };
+  features_.unicode_bidi."0.3.4" = deps: f: updateFeatures f (rec {
+    matches."${deps.unicode_bidi."0.3.4".matches}".default = true;
+    unicode_bidi = fold recursiveUpdate {} [
+      { "0.3.4"."flame" =
+        (f.unicode_bidi."0.3.4"."flame" or false) ||
+        (f.unicode_bidi."0.3.4".flame_it or false) ||
+        (unicode_bidi."0.3.4"."flame_it" or false); }
+      { "0.3.4"."flamer" =
+        (f.unicode_bidi."0.3.4"."flamer" or false) ||
+        (f.unicode_bidi."0.3.4".flame_it or false) ||
+        (unicode_bidi."0.3.4"."flame_it" or false); }
+      { "0.3.4"."serde" =
+        (f.unicode_bidi."0.3.4"."serde" or false) ||
+        (f.unicode_bidi."0.3.4".with_serde or false) ||
+        (unicode_bidi."0.3.4"."with_serde" or false); }
+      { "0.3.4".default = (f.unicode_bidi."0.3.4".default or true); }
+    ];
+  }) [
+    (features_.matches."${deps."unicode_bidi"."0.3.4"."matches"}" deps)
+  ];
+
+
+# end
+# unicode-normalization-0.1.5
+
+  crates.unicode_normalization."0.1.5" = deps: { features?(features_.unicode_normalization."0.1.5" deps {}) }: buildRustCrate {
+    crateName = "unicode-normalization";
+    version = "0.1.5";
+    description = "This crate provides functions for normalization of\nUnicode strings, including Canonical and Compatible\nDecomposition and Recomposition, as described in\nUnicode Standard Annex #15.\n";
+    authors = [ "kwantam <kwantam@gmail.com>" ];
+    sha256 = "0hg29g86fca7b65mwk4sm5s838js6bqrl0gabadbazvbsgjam0j5";
+  };
+  features_.unicode_normalization."0.1.5" = deps: f: updateFeatures f ({
+    unicode_normalization."0.1.5".default = (f.unicode_normalization."0.1.5".default or true);
+  }) [];
+
+
+# end
+# unicode-width-0.1.4
+
+  crates.unicode_width."0.1.4" = deps: { features?(features_.unicode_width."0.1.4" deps {}) }: buildRustCrate {
+    crateName = "unicode-width";
+    version = "0.1.4";
+    description = "Determine displayed width of `char` and `str` types\naccording to Unicode Standard Annex #11 rules.\n";
+    authors = [ "kwantam <kwantam@gmail.com>" ];
+    sha256 = "1rp7a04icn9y5c0lm74nrd4py0rdl0af8bhdwq7g478n1xifpifl";
+    features = mkFeatures (features."unicode_width"."0.1.4" or {});
+  };
+  features_.unicode_width."0.1.4" = deps: f: updateFeatures f ({
+    unicode_width."0.1.4".default = (f.unicode_width."0.1.4".default or true);
+  }) [];
+
+
+# end
+# unicode-xid-0.0.4
+
+  crates.unicode_xid."0.0.4" = deps: { features?(features_.unicode_xid."0.0.4" deps {}) }: buildRustCrate {
+    crateName = "unicode-xid";
+    version = "0.0.4";
+    description = "Determine whether characters have the XID_Start\nor XID_Continue properties according to\nUnicode Standard Annex #31.\n";
+    authors = [ "erick.tryzelaar <erick.tryzelaar@gmail.com>" "kwantam <kwantam@gmail.com>" ];
+    sha256 = "1dc8wkkcd3s6534s5aw4lbjn8m67flkkbnajp5bl8408wdg8rh9v";
+    features = mkFeatures (features."unicode_xid"."0.0.4" or {});
+  };
+  features_.unicode_xid."0.0.4" = deps: f: updateFeatures f ({
+    unicode_xid."0.0.4".default = (f.unicode_xid."0.0.4".default or true);
+  }) [];
+
+
+# end
+# unreachable-1.0.0
+
+  crates.unreachable."1.0.0" = deps: { features?(features_.unreachable."1.0.0" deps {}) }: buildRustCrate {
+    crateName = "unreachable";
+    version = "1.0.0";
+    description = "An unreachable code optimization hint in stable rust.";
+    authors = [ "Jonathan Reem <jonathan.reem@gmail.com>" ];
+    sha256 = "1am8czbk5wwr25gbp2zr007744fxjshhdqjz9liz7wl4pnv3whcf";
+    dependencies = mapFeatures features ([
+      (crates."void"."${deps."unreachable"."1.0.0"."void"}" deps)
+    ]);
+  };
+  features_.unreachable."1.0.0" = deps: f: updateFeatures f ({
+    unreachable."1.0.0".default = (f.unreachable."1.0.0".default or true);
+    void."${deps.unreachable."1.0.0".void}".default = (f.void."${deps.unreachable."1.0.0".void}".default or false);
+  }) [
+    (features_.void."${deps."unreachable"."1.0.0"."void"}" deps)
+  ];
+
+
+# end
+# url-1.6.0
+
+  crates.url."1.6.0" = deps: { features?(features_.url."1.6.0" deps {}) }: buildRustCrate {
+    crateName = "url";
+    version = "1.6.0";
+    description = "URL library for Rust, based on the WHATWG URL Standard";
+    authors = [ "The rust-url developers" ];
+    sha256 = "1bvzl4dvjj84h46ai3x23wyafa2wwhchj08vr2brf25dxwc7mg18";
+    dependencies = mapFeatures features ([
+      (crates."idna"."${deps."url"."1.6.0"."idna"}" deps)
+      (crates."matches"."${deps."url"."1.6.0"."matches"}" deps)
+      (crates."percent_encoding"."${deps."url"."1.6.0"."percent_encoding"}" deps)
+    ]);
+    features = mkFeatures (features."url"."1.6.0" or {});
+  };
+  features_.url."1.6.0" = deps: f: updateFeatures f (rec {
+    idna."${deps.url."1.6.0".idna}".default = true;
+    matches."${deps.url."1.6.0".matches}".default = true;
+    percent_encoding."${deps.url."1.6.0".percent_encoding}".default = true;
+    url = fold recursiveUpdate {} [
+      { "1.6.0"."encoding" =
+        (f.url."1.6.0"."encoding" or false) ||
+        (f.url."1.6.0".query_encoding or false) ||
+        (url."1.6.0"."query_encoding" or false); }
+      { "1.6.0"."heapsize" =
+        (f.url."1.6.0"."heapsize" or false) ||
+        (f.url."1.6.0".heap_size or false) ||
+        (url."1.6.0"."heap_size" or false); }
+      { "1.6.0".default = (f.url."1.6.0".default or true); }
+    ];
+  }) [
+    (features_.idna."${deps."url"."1.6.0"."idna"}" deps)
+    (features_.matches."${deps."url"."1.6.0"."matches"}" deps)
+    (features_.percent_encoding."${deps."url"."1.6.0"."percent_encoding"}" deps)
+  ];
+
+
+# end
+# utf8-ranges-0.1.3
+
+  crates.utf8_ranges."0.1.3" = deps: { features?(features_.utf8_ranges."0.1.3" deps {}) }: buildRustCrate {
+    crateName = "utf8-ranges";
+    version = "0.1.3";
+    description = "Convert ranges of Unicode codepoints to UTF-8 byte ranges.";
+    authors = [ "Andrew Gallant <jamslam@gmail.com>" ];
+    sha256 = "1cj548a91a93j8375p78qikaiam548xh84cb0ck8y119adbmsvbp";
+  };
+  features_.utf8_ranges."0.1.3" = deps: f: updateFeatures f ({
+    utf8_ranges."0.1.3".default = (f.utf8_ranges."0.1.3".default or true);
+  }) [];
+
+
+# end
+# uuid-0.7.1
+
+  crates.uuid."0.7.1" = deps: { features?(features_.uuid."0.7.1" deps {}) }: buildRustCrate {
+    crateName = "uuid";
+    version = "0.7.1";
+    description = "A library to generate and parse UUIDs.";
+    authors = [ "Ashley Mannix<ashleymannix@live.com.au>" "Christopher Armstrong" "Dylan DPC<dylan.dpc@gmail.com>" "Hunar Roop Kahlon<hunar.roop@gmail.com>" ];
+    sha256 = "1wh5izr7bssf1j8y3cawj4yfr5pz4cfxgsjlk2gs1vccc848qpbj";
+    dependencies = mapFeatures features ([
+    ]
+      ++ (if features.uuid."0.7.1".rand or false then [ (crates.rand."${deps."uuid"."0.7.1".rand}" deps) ] else []));
+    features = mkFeatures (features."uuid"."0.7.1" or {});
+  };
+  features_.uuid."0.7.1" = deps: f: updateFeatures f (rec {
+    rand."${deps.uuid."0.7.1".rand}".default = true;
+    uuid = fold recursiveUpdate {} [
+      { "0.7.1"."byteorder" =
+        (f.uuid."0.7.1"."byteorder" or false) ||
+        (f.uuid."0.7.1".u128 or false) ||
+        (uuid."0.7.1"."u128" or false); }
+      { "0.7.1"."md5" =
+        (f.uuid."0.7.1"."md5" or false) ||
+        (f.uuid."0.7.1".v3 or false) ||
+        (uuid."0.7.1"."v3" or false); }
+      { "0.7.1"."nightly" =
+        (f.uuid."0.7.1"."nightly" or false) ||
+        (f.uuid."0.7.1".const_fn or false) ||
+        (uuid."0.7.1"."const_fn" or false); }
+      { "0.7.1"."rand" =
+        (f.uuid."0.7.1"."rand" or false) ||
+        (f.uuid."0.7.1".v3 or false) ||
+        (uuid."0.7.1"."v3" or false) ||
+        (f.uuid."0.7.1".v4 or false) ||
+        (uuid."0.7.1"."v4" or false) ||
+        (f.uuid."0.7.1".v5 or false) ||
+        (uuid."0.7.1"."v5" or false); }
+      { "0.7.1"."sha1" =
+        (f.uuid."0.7.1"."sha1" or false) ||
+        (f.uuid."0.7.1".v5 or false) ||
+        (uuid."0.7.1"."v5" or false); }
+      { "0.7.1"."std" =
+        (f.uuid."0.7.1"."std" or false) ||
+        (f.uuid."0.7.1".default or false) ||
+        (uuid."0.7.1"."default" or false); }
+      { "0.7.1".default = (f.uuid."0.7.1".default or true); }
+    ];
+  }) [
+    (features_.rand."${deps."uuid"."0.7.1"."rand"}" deps)
+  ];
+
+
+# end
+# vcpkg-0.2.2
+
+  crates.vcpkg."0.2.2" = deps: { features?(features_.vcpkg."0.2.2" deps {}) }: buildRustCrate {
+    crateName = "vcpkg";
+    version = "0.2.2";
+    description = "A library to find native dependencies in a vcpkg tree at build\ntime in order to be used in Cargo build scripts.\n";
+    authors = [ "Jim McGrath <jimmc2@gmail.com>" ];
+    sha256 = "1fl5j0ksnwrnsrf1b1a9lqbjgnajdipq0030vsbhx81mb7d9478a";
+  };
+  features_.vcpkg."0.2.2" = deps: f: updateFeatures f ({
+    vcpkg."0.2.2".default = (f.vcpkg."0.2.2".default or true);
+  }) [];
+
+
+# end
+# vec_map-0.8.0
+
+  crates.vec_map."0.8.0" = deps: { features?(features_.vec_map."0.8.0" deps {}) }: buildRustCrate {
+    crateName = "vec_map";
+    version = "0.8.0";
+    description = "A simple map based on a vector for small integer keys";
+    authors = [ "Alex Crichton <alex@alexcrichton.com>" "Jorge Aparicio <japaricious@gmail.com>" "Alexis Beingessner <a.beingessner@gmail.com>" "Brian Anderson <>" "tbu- <>" "Manish Goregaokar <>" "Aaron Turon <aturon@mozilla.com>" "Adolfo Ochagavía <>" "Niko Matsakis <>" "Steven Fackler <>" "Chase Southwood <csouth3@illinois.edu>" "Eduard Burtescu <>" "Florian Wilkens <>" "Félix Raimundo <>" "Tibor Benke <>" "Markus Siemens <markus@m-siemens.de>" "Josh Branchaud <jbranchaud@gmail.com>" "Huon Wilson <dbau.pp@gmail.com>" "Corey Farwell <coref@rwell.org>" "Aaron Liblong <>" "Nick Cameron <nrc@ncameron.org>" "Patrick Walton <pcwalton@mimiga.net>" "Felix S Klock II <>" "Andrew Paseltiner <apaseltiner@gmail.com>" "Sean McArthur <sean.monstar@gmail.com>" "Vadim Petrochenkov <>" ];
+    sha256 = "07sgxp3cf1a4cxm9n3r27fcvqmld32bl2576mrcahnvm34j11xay";
+    dependencies = mapFeatures features ([
+]);
+    features = mkFeatures (features."vec_map"."0.8.0" or {});
+  };
+  features_.vec_map."0.8.0" = deps: f: updateFeatures f (rec {
+    vec_map = fold recursiveUpdate {} [
+      { "0.8.0"."serde" =
+        (f.vec_map."0.8.0"."serde" or false) ||
+        (f.vec_map."0.8.0".eders or false) ||
+        (vec_map."0.8.0"."eders" or false); }
+      { "0.8.0"."serde_derive" =
+        (f.vec_map."0.8.0"."serde_derive" or false) ||
+        (f.vec_map."0.8.0".eders or false) ||
+        (vec_map."0.8.0"."eders" or false); }
+      { "0.8.0".default = (f.vec_map."0.8.0".default or true); }
+    ];
+  }) [];
+
+
+# end
+# version_check-0.1.3
+
+  crates.version_check."0.1.3" = deps: { features?(features_.version_check."0.1.3" deps {}) }: buildRustCrate {
+    crateName = "version_check";
+    version = "0.1.3";
+    description = "Tiny crate to check the version of the installed/running rustc.";
+    authors = [ "Sergio Benitez <sb@sergio.bz>" ];
+    sha256 = "0z635wdclv9bvafj11fpgndn7y79ibpsnc364pm61i1m4wwg8msg";
+  };
+  features_.version_check."0.1.3" = deps: f: updateFeatures f ({
+    version_check."0.1.3".default = (f.version_check."0.1.3".default or true);
+  }) [];
+
+
+# end
+# void-1.0.2
+
+  crates.void."1.0.2" = deps: { features?(features_.void."1.0.2" deps {}) }: buildRustCrate {
+    crateName = "void";
+    version = "1.0.2";
+    description = "The uninhabited void type for use in statically impossible cases.";
+    authors = [ "Jonathan Reem <jonathan.reem@gmail.com>" ];
+    sha256 = "0h1dm0dx8dhf56a83k68mijyxigqhizpskwxfdrs1drwv2cdclv3";
+    features = mkFeatures (features."void"."1.0.2" or {});
+  };
+  features_.void."1.0.2" = deps: f: updateFeatures f (rec {
+    void = fold recursiveUpdate {} [
+      { "1.0.2"."std" =
+        (f.void."1.0.2"."std" or false) ||
+        (f.void."1.0.2".default or false) ||
+        (void."1.0.2"."default" or false); }
+      { "1.0.2".default = (f.void."1.0.2".default or true); }
+    ];
+  }) [];
+
+
+# end
+# want-0.0.6
+
+  crates.want."0.0.6" = deps: { features?(features_.want."0.0.6" deps {}) }: buildRustCrate {
+    crateName = "want";
+    version = "0.0.6";
+    description = "Detect when another Future wants a result.";
+    authors = [ "Sean McArthur <sean@seanmonstar.com>" ];
+    sha256 = "03cc2lndz531a4kgql1v9kppyb1yz2abcz5l52j1gg2nypmy3lh8";
+    dependencies = mapFeatures features ([
+      (crates."futures"."${deps."want"."0.0.6"."futures"}" deps)
+      (crates."log"."${deps."want"."0.0.6"."log"}" deps)
+      (crates."try_lock"."${deps."want"."0.0.6"."try_lock"}" deps)
+    ]);
+  };
+  features_.want."0.0.6" = deps: f: updateFeatures f ({
+    futures."${deps.want."0.0.6".futures}".default = true;
+    log."${deps.want."0.0.6".log}".default = true;
+    try_lock."${deps.want."0.0.6".try_lock}".default = true;
+    want."0.0.6".default = (f.want."0.0.6".default or true);
+  }) [
+    (features_.futures."${deps."want"."0.0.6"."futures"}" deps)
+    (features_.log."${deps."want"."0.0.6"."log"}" deps)
+    (features_.try_lock."${deps."want"."0.0.6"."try_lock"}" deps)
+  ];
+
+
+# end
+# winapi-0.2.8
+
+  crates.winapi."0.2.8" = deps: { features?(features_.winapi."0.2.8" deps {}) }: buildRustCrate {
+    crateName = "winapi";
+    version = "0.2.8";
+    description = "Types and constants for WinAPI bindings. See README for list of crates providing function bindings.";
+    authors = [ "Peter Atashian <retep998@gmail.com>" ];
+    sha256 = "0a45b58ywf12vb7gvj6h3j264nydynmzyqz8d8rqxsj6icqv82as";
+  };
+  features_.winapi."0.2.8" = deps: f: updateFeatures f ({
+    winapi."0.2.8".default = (f.winapi."0.2.8".default or true);
+  }) [];
+
+
+# end
+# winapi-0.3.6
+
+  crates.winapi."0.3.6" = deps: { features?(features_.winapi."0.3.6" deps {}) }: buildRustCrate {
+    crateName = "winapi";
+    version = "0.3.6";
+    description = "Raw FFI bindings for all of Windows API.";
+    authors = [ "Peter Atashian <retep998@gmail.com>" ];
+    sha256 = "1d9jfp4cjd82sr1q4dgdlrkvm33zhhav9d7ihr0nivqbncr059m4";
+    build = "build.rs";
+    dependencies = (if kernel == "i686-pc-windows-gnu" then mapFeatures features ([
+      (crates."winapi_i686_pc_windows_gnu"."${deps."winapi"."0.3.6"."winapi_i686_pc_windows_gnu"}" deps)
+    ]) else [])
+      ++ (if kernel == "x86_64-pc-windows-gnu" then mapFeatures features ([
+      (crates."winapi_x86_64_pc_windows_gnu"."${deps."winapi"."0.3.6"."winapi_x86_64_pc_windows_gnu"}" deps)
+    ]) else []);
+    features = mkFeatures (features."winapi"."0.3.6" or {});
+  };
+  features_.winapi."0.3.6" = deps: f: updateFeatures f ({
+    winapi."0.3.6".default = (f.winapi."0.3.6".default or true);
+    winapi_i686_pc_windows_gnu."${deps.winapi."0.3.6".winapi_i686_pc_windows_gnu}".default = true;
+    winapi_x86_64_pc_windows_gnu."${deps.winapi."0.3.6".winapi_x86_64_pc_windows_gnu}".default = true;
+  }) [
+    (features_.winapi_i686_pc_windows_gnu."${deps."winapi"."0.3.6"."winapi_i686_pc_windows_gnu"}" deps)
+    (features_.winapi_x86_64_pc_windows_gnu."${deps."winapi"."0.3.6"."winapi_x86_64_pc_windows_gnu"}" deps)
+  ];
+
+
+# end
+# winapi-build-0.1.1
+
+  crates.winapi_build."0.1.1" = deps: { features?(features_.winapi_build."0.1.1" deps {}) }: buildRustCrate {
+    crateName = "winapi-build";
+    version = "0.1.1";
+    description = "Common code for build.rs in WinAPI -sys crates.";
+    authors = [ "Peter Atashian <retep998@gmail.com>" ];
+    sha256 = "1lxlpi87rkhxcwp2ykf1ldw3p108hwm24nywf3jfrvmff4rjhqga";
+    libName = "build";
+  };
+  features_.winapi_build."0.1.1" = deps: f: updateFeatures f ({
+    winapi_build."0.1.1".default = (f.winapi_build."0.1.1".default or true);
+  }) [];
+
+
+# end
+# winapi-i686-pc-windows-gnu-0.4.0
+
+  crates.winapi_i686_pc_windows_gnu."0.4.0" = deps: { features?(features_.winapi_i686_pc_windows_gnu."0.4.0" deps {}) }: buildRustCrate {
+    crateName = "winapi-i686-pc-windows-gnu";
+    version = "0.4.0";
+    description = "Import libraries for the i686-pc-windows-gnu target. Please don't use this crate directly, depend on winapi instead.";
+    authors = [ "Peter Atashian <retep998@gmail.com>" ];
+    sha256 = "05ihkij18r4gamjpxj4gra24514can762imjzlmak5wlzidplzrp";
+    build = "build.rs";
+  };
+  features_.winapi_i686_pc_windows_gnu."0.4.0" = deps: f: updateFeatures f ({
+    winapi_i686_pc_windows_gnu."0.4.0".default = (f.winapi_i686_pc_windows_gnu."0.4.0".default or true);
+  }) [];
+
+
+# end
+# winapi-x86_64-pc-windows-gnu-0.4.0
+
+  crates.winapi_x86_64_pc_windows_gnu."0.4.0" = deps: { features?(features_.winapi_x86_64_pc_windows_gnu."0.4.0" deps {}) }: buildRustCrate {
+    crateName = "winapi-x86_64-pc-windows-gnu";
+    version = "0.4.0";
+    description = "Import libraries for the x86_64-pc-windows-gnu target. Please don't use this crate directly, depend on winapi instead.";
+    authors = [ "Peter Atashian <retep998@gmail.com>" ];
+    sha256 = "0n1ylmlsb8yg1v583i4xy0qmqg42275flvbc51hdqjjfjcl9vlbj";
+    build = "build.rs";
+  };
+  features_.winapi_x86_64_pc_windows_gnu."0.4.0" = deps: f: updateFeatures f ({
+    winapi_x86_64_pc_windows_gnu."0.4.0".default = (f.winapi_x86_64_pc_windows_gnu."0.4.0".default or true);
+  }) [];
+
+
+# end
+# ws2_32-sys-0.2.1
+
+  crates.ws2_32_sys."0.2.1" = deps: { features?(features_.ws2_32_sys."0.2.1" deps {}) }: buildRustCrate {
+    crateName = "ws2_32-sys";
+    version = "0.2.1";
+    description = "Contains function definitions for the Windows API library ws2_32. See winapi for types and constants.";
+    authors = [ "Peter Atashian <retep998@gmail.com>" ];
+    sha256 = "1zpy9d9wk11sj17fczfngcj28w4xxjs3b4n036yzpy38dxp4f7kc";
+    libName = "ws2_32";
+    build = "build.rs";
+    dependencies = mapFeatures features ([
+      (crates."winapi"."${deps."ws2_32_sys"."0.2.1"."winapi"}" deps)
+    ]);
+
+    buildDependencies = mapFeatures features ([
+      (crates."winapi_build"."${deps."ws2_32_sys"."0.2.1"."winapi_build"}" deps)
+    ]);
+  };
+  features_.ws2_32_sys."0.2.1" = deps: f: updateFeatures f ({
+    winapi."${deps.ws2_32_sys."0.2.1".winapi}".default = true;
+    winapi_build."${deps.ws2_32_sys."0.2.1".winapi_build}".default = true;
+    ws2_32_sys."0.2.1".default = (f.ws2_32_sys."0.2.1".default or true);
+  }) [
+    (features_.winapi."${deps."ws2_32_sys"."0.2.1"."winapi"}" deps)
+    (features_.winapi_build."${deps."ws2_32_sys"."0.2.1"."winapi_build"}" deps)
+  ];
+
+
+# end
+# xattr-0.1.11
+
+  crates.xattr."0.1.11" = deps: { features?(features_.xattr."0.1.11" deps {}) }: buildRustCrate {
+    crateName = "xattr";
+    version = "0.1.11";
+    description = "unix extended filesystem attributes";
+    authors = [ "Steven Allen <steven@stebalien.com>" ];
+    sha256 = "0v8wad18pdxv7242a7xs18i9hy00ih3vwajz7my05zbxx2ss01nx";
+    dependencies = mapFeatures features ([
+      (crates."libc"."${deps."xattr"."0.1.11"."libc"}" deps)
+    ]);
+    features = mkFeatures (features."xattr"."0.1.11" or {});
+  };
+  features_.xattr."0.1.11" = deps: f: updateFeatures f (rec {
+    libc."${deps.xattr."0.1.11".libc}".default = true;
+    xattr = fold recursiveUpdate {} [
+      { "0.1.11"."unsupported" =
+        (f.xattr."0.1.11"."unsupported" or false) ||
+        (f.xattr."0.1.11".default or false) ||
+        (xattr."0.1.11"."default" or false); }
+      { "0.1.11".default = (f.xattr."0.1.11".default or true); }
+    ];
+  }) [
+    (features_.libc."${deps."xattr"."0.1.11"."libc"}" deps)
+  ];
+
+
+# end
+}
diff --git a/nixpkgs/pkgs/tools/package-management/cargo-download/default.nix b/nixpkgs/pkgs/tools/package-management/cargo-download/default.nix
new file mode 100644
index 000000000000..1cb53a4b6c8d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/cargo-download/default.nix
@@ -0,0 +1,14 @@
+{ stdenv, lib, fetchgit, darwin, buildPlatform
+, buildRustCrate, buildRustCrateHelpers, defaultCrateOverrides }:
+
+((import ./Cargo.nix {
+  inherit lib buildPlatform buildRustCrate buildRustCrateHelpers fetchgit;
+  cratesIO = import ./crates-io.nix { inherit lib buildRustCrate buildRustCrateHelpers; };
+}).cargo_download {}).override {
+  crateOverrides = defaultCrateOverrides // {
+    cargo-download = attrs: {
+      buildInputs = lib.optional stdenv.isDarwin
+        darwin.apple_sdk.frameworks.Security;
+    };
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/cargo-edit/default.nix b/nixpkgs/pkgs/tools/package-management/cargo-edit/default.nix
new file mode 100644
index 000000000000..0adc2add96d0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/cargo-edit/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, lib, darwin
+, rustPlatform, fetchFromGitHub
+, openssl, pkg-config, libiconv }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-edit";
+  version = "0.4.2";
+
+  src = fetchFromGitHub {
+    owner = "killercup";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0y0sq0kll6bg0qrfdyas8rcx5dj50j9f05qx244kv7vqxp2q25jq";
+  };
+
+  cargoSha256 = "0prd53p20cha2y2qp8dmq0ywd32f6jm8mszdkbi4x606dj9bcgbl";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ libiconv darwin.apple_sdk.frameworks.Security ];
+
+  meta = with lib; {
+    description = "A utility for managing cargo dependencies from the command line";
+    homepage = https://github.com/killercup/cargo-edit;
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ gerschtli jb55 filalex77 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/cargo-graph/default.nix b/nixpkgs/pkgs/tools/package-management/cargo-graph/default.nix
new file mode 100644
index 000000000000..2fe89ccfa986
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/cargo-graph/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-graph";
+  version = "0.2.0-d895af1";
+
+  src = fetchFromGitHub {
+    owner = "kbknapp";
+    repo = "cargo-graph";
+    # The last release (v0.2.0) is from 2015. Since then there have been some
+    # bug fixes committed that would be good to have.
+    rev = "d895af1b7840c7ae8eddaf4e990bfa594c22ba01";
+    sha256 = "0myg26cssmbakz53dl61lswsbaqnjqlbc30c2571pq8f7gvz2qv5";
+  };
+
+  cargoSha256 = "1k4byg77s1iqhry96pl57mbsvd32sbnvf60dlbd62pvan39rispg";
+
+  meta = with lib; {
+    description = "A cargo subcommand for creating GraphViz DOT files and dependency graphs";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ basvandijk ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/cargo-license/add-Cargo.lock.patch b/nixpkgs/pkgs/tools/package-management/cargo-license/add-Cargo.lock.patch
new file mode 100644
index 000000000000..c6c4e3f62e1a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/cargo-license/add-Cargo.lock.patch
@@ -0,0 +1,435 @@
+diff --git a/Cargo.lock b/Cargo.lock
+new file mode 100644
+index 0000000..20311b5
+--- /dev/null
++++ b/Cargo.lock
+@@ -0,0 +1,429 @@
++# This file is automatically @generated by Cargo.
++# It is not intended for manual editing.
++[[package]]
++name = "ansi_term"
++version = "0.9.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "ansi_term"
++version = "0.11.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "atty"
++version = "0.2.13"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "backtrace"
++version = "0.3.40"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "backtrace-sys 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "backtrace-sys"
++version = "0.1.32"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "cc 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "bitflags"
++version = "1.2.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "bstr"
++version = "0.2.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "regex-automata 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "byteorder"
++version = "1.3.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "cargo-license"
++version = "0.3.0"
++dependencies = [
++ "ansi_term 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cargo_metadata 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "csv 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "getopts 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
++ "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)",
++ "serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)",
++ "serde_json 1.0.44 (registry+https://github.com/rust-lang/crates.io-index)",
++ "structopt 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
++ "toml 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "cargo_metadata"
++version = "0.9.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)",
++ "serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)",
++ "serde_json 1.0.44 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "cc"
++version = "1.0.48"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "cfg-if"
++version = "0.1.10"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "clap"
++version = "2.33.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
++ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
++ "vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "csv"
++version = "1.1.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "bstr 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "csv-core 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
++ "ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "csv-core"
++version = "0.1.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "failure"
++version = "0.1.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "backtrace 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)",
++ "failure_derive 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "failure_derive"
++version = "0.1.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)",
++ "synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "getopts"
++version = "0.2.21"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "heck"
++version = "0.3.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "itoa"
++version = "0.4.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "lazy_static"
++version = "1.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "libc"
++version = "0.2.66"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "memchr"
++version = "2.2.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "proc-macro-error"
++version = "0.2.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "proc-macro2"
++version = "1.0.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "quote"
++version = "1.0.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "regex-automata"
++version = "0.1.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "rustc-demangle"
++version = "0.1.16"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "ryu"
++version = "1.0.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "semver"
++version = "0.9.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "semver-parser"
++version = "0.7.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "serde"
++version = "1.0.104"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "serde_derive"
++version = "1.0.104"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "serde_json"
++version = "1.0.44"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
++ "ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "strsim"
++version = "0.8.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "structopt"
++version = "0.3.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "structopt-derive 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "structopt-derive"
++version = "0.3.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "proc-macro-error 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "syn"
++version = "1.0.11"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "synstructure"
++version = "0.12.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)",
++ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "textwrap"
++version = "0.11.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "toml"
++version = "0.4.10"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "unicode-segmentation"
++version = "1.6.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "unicode-width"
++version = "0.1.7"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "unicode-xid"
++version = "0.2.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "vec_map"
++version = "0.8.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "winapi"
++version = "0.3.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "winapi-i686-pc-windows-gnu"
++version = "0.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "winapi-x86_64-pc-windows-gnu"
++version = "0.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[metadata]
++"checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
++"checksum ansi_term 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "23ac7c30002a5accbf7e8987d0632fa6de155b7c3d39d0067317a391e00a2ef6"
++"checksum atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "1803c647a3ec87095e7ae7acfca019e98de5ec9a7d01343f611cf3152ed71a90"
++"checksum backtrace 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)" = "924c76597f0d9ca25d762c25a4d369d51267536465dc5064bdf0eb073ed477ea"
++"checksum backtrace-sys 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)" = "5d6575f128516de27e3ce99689419835fce9643a9b215a14d2b5b685be018491"
++"checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
++"checksum bstr 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8d6c2c5b58ab920a4f5aeaaca34b4488074e8cc7596af94e6f8c6ff247c60245"
++"checksum byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5"
++"checksum cargo_metadata 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "46e3374c604fb39d1a2f35ed5e4a4e30e60d01fab49446e08f1b3e9a90aef202"
++"checksum cc 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)" = "f52a465a666ca3d838ebbf08b241383421412fe7ebb463527bba275526d89f76"
++"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
++"checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9"
++"checksum csv 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "37519ccdfd73a75821cac9319d4fce15a81b9fcf75f951df5b9988aa3a0af87d"
++"checksum csv-core 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "9b5cadb6b25c77aeff80ba701712494213f4a8418fcda2ee11b6560c3ad0bf4c"
++"checksum failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "f8273f13c977665c5db7eb2b99ae520952fe5ac831ae4cd09d80c4c7042b5ed9"
++"checksum failure_derive 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0bc225b78e0391e4b8683440bf2e63c2deeeb2ce5189eab46e2b68c6d3725d08"
++"checksum getopts 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)" = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5"
++"checksum heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205"
++"checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f"
++"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
++"checksum libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)" = "d515b1f41455adea1313a4a2ac8a8a477634fbae63cc6100e3aebb207ce61558"
++"checksum memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "88579771288728879b57485cc7d6b07d648c9f0141eb955f8ab7f9d45394468e"
++"checksum proc-macro-error 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "aeccfe4d5d8ea175d5f0e4a2ad0637e0f4121d63bd99d356fb1f39ab2e7c6097"
++"checksum proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "9c9e470a8dc4aeae2dee2f335e8f533e2d4b347e1434e5671afc49b054592f27"
++"checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe"
++"checksum regex-automata 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "92b73c2a1770c255c240eaa4ee600df1704a38dc3feaa6e949e7fcd4f8dc09f9"
++"checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783"
++"checksum ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bfa8506c1de11c9c4e4c38863ccbe02a305c8188e85a05a784c9e11e1c3910c8"
++"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
++"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
++"checksum serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)" = "414115f25f818d7dfccec8ee535d76949ae78584fc4f79a6f45a904bf8ab4449"
++"checksum serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)" = "128f9e303a5a29922045a830221b8f78ec74a5f544944f3d5984f8ec3895ef64"
++"checksum serde_json 1.0.44 (registry+https://github.com/rust-lang/crates.io-index)" = "48c575e0cc52bdd09b47f330f646cf59afc586e9c4e3ccd6fc1f625b8ea1dad7"
++"checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
++"checksum structopt 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "30b3a3e93f5ad553c38b3301c8a0a0cec829a36783f6a0c467fc4bf553a5f5bf"
++"checksum structopt-derive 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ea692d40005b3ceba90a9fe7a78fa8d4b82b0ce627eebbffc329aab850f3410e"
++"checksum syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)" = "dff0acdb207ae2fe6d5976617f887eb1e35a2ba52c13c7234c790960cdad9238"
++"checksum synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545"
++"checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
++"checksum toml 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "758664fc71a3a69038656bee8b6be6477d2a6c315a6b81f7081f591bffa4111f"
++"checksum unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0"
++"checksum unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479"
++"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
++"checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a"
++"checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6"
++"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
++"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
diff --git a/nixpkgs/pkgs/tools/package-management/cargo-license/default.nix b/nixpkgs/pkgs/tools/package-management/cargo-license/default.nix
new file mode 100644
index 000000000000..f697c57d3e8c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/cargo-license/default.nix
@@ -0,0 +1,24 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-license";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "onur";
+    repo = "cargo-license";
+    rev = "v${version}";
+    sha256 = "05a2af84gjyfzhsln0afg16h02pr56jng4xlsg21hicyi1kxjwlf";
+  };
+
+  cargoPatches = [ ./add-Cargo.lock.patch ];
+
+  cargoSha256 = "0ksxvbrx8d8d09i167mdrhz5m46nbr6l0vyn7xpdanmha31xiaz9";
+
+  meta = with lib; {
+    description = "Cargo subcommand to see license of dependencies";
+    homepage = "https://github.com/onur/cargo-license";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ basvandijk ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/cargo-outdated/cargo-lock.patch b/nixpkgs/pkgs/tools/package-management/cargo-outdated/cargo-lock.patch
new file mode 100644
index 000000000000..7e0528eda2ac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/cargo-outdated/cargo-lock.patch
@@ -0,0 +1,1283 @@
+diff --git a/Cargo.lock b/Cargo.lock
+new file mode 100644
+index 0000000..0f18cc6
+--- /dev/null
++++ b/Cargo.lock
+@@ -0,0 +1,1277 @@
++# This file is automatically @generated by Cargo.
++# It is not intended for manual editing.
++[[package]]
++name = "adler32"
++version = "1.0.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "5d2e7343e7fc9de883d1b0341e0b13970f764c14101234857d2ddafa1cb1cac2"
++
++[[package]]
++name = "aho-corasick"
++version = "0.7.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "58fb5e95d83b38284460a5fda7d6470aa0b8844d283a0b614b8535e880800d2d"
++dependencies = [
++ "memchr",
++]
++
++[[package]]
++name = "ansi_term"
++version = "0.11.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
++dependencies = [
++ "winapi",
++]
++
++[[package]]
++name = "atty"
++version = "0.2.13"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "1803c647a3ec87095e7ae7acfca019e98de5ec9a7d01343f611cf3152ed71a90"
++dependencies = [
++ "libc",
++ "winapi",
++]
++
++[[package]]
++name = "autocfg"
++version = "0.1.7"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2"
++
++[[package]]
++name = "backtrace"
++version = "0.3.40"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "924c76597f0d9ca25d762c25a4d369d51267536465dc5064bdf0eb073ed477ea"
++dependencies = [
++ "backtrace-sys",
++ "cfg-if",
++ "libc",
++ "rustc-demangle",
++]
++
++[[package]]
++name = "backtrace-sys"
++version = "0.1.32"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "5d6575f128516de27e3ce99689419835fce9643a9b215a14d2b5b685be018491"
++dependencies = [
++ "cc",
++ "libc",
++]
++
++[[package]]
++name = "bitflags"
++version = "1.2.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
++
++[[package]]
++name = "bstr"
++version = "0.2.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "8d6c2c5b58ab920a4f5aeaaca34b4488074e8cc7596af94e6f8c6ff247c60245"
++dependencies = [
++ "memchr",
++]
++
++[[package]]
++name = "bytesize"
++version = "1.0.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "716960a18f978640f25101b5cbf1c6f6b0d3192fab36a2d98ca96f0ecbe41010"
++
++[[package]]
++name = "c2-chacha"
++version = "0.2.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "214238caa1bf3a496ec3392968969cab8549f96ff30652c9e56885329315f6bb"
++dependencies = [
++ "ppv-lite86",
++]
++
++[[package]]
++name = "cargo"
++version = "0.40.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "03504435a39de1303decb9c9a7416e875f16d4b94769d4d0dd5e1bfb21229640"
++dependencies = [
++ "atty",
++ "bytesize",
++ "clap",
++ "core-foundation",
++ "crates-io",
++ "crossbeam-utils",
++ "crypto-hash",
++ "curl",
++ "curl-sys",
++ "env_logger 0.6.2",
++ "failure",
++ "filetime",
++ "flate2",
++ "fs2",
++ "fwdansi",
++ "git2",
++ "git2-curl",
++ "glob",
++ "hex 0.4.0",
++ "home",
++ "humantime",
++ "ignore",
++ "im-rc",
++ "jobserver",
++ "lazy_static",
++ "lazycell",
++ "libc",
++ "libgit2-sys",
++ "log",
++ "memchr",
++ "miow",
++ "num_cpus",
++ "opener",
++ "percent-encoding",
++ "remove_dir_all",
++ "rustc-workspace-hack",
++ "rustfix",
++ "same-file",
++ "semver",
++ "serde",
++ "serde_ignored",
++ "serde_json",
++ "shell-escape",
++ "strip-ansi-escapes",
++ "tar",
++ "tempfile",
++ "termcolor",
++ "toml",
++ "unicode-width",
++ "url",
++ "walkdir",
++ "winapi",
++]
++
++[[package]]
++name = "cargo-outdated"
++version = "0.9.1"
++dependencies = [
++ "cargo",
++ "docopt",
++ "env_logger 0.7.1",
++ "failure",
++ "semver",
++ "serde",
++ "serde_derive",
++ "serde_json",
++ "tabwriter",
++ "tempfile",
++ "termcolor",
++ "toml",
++]
++
++[[package]]
++name = "cc"
++version = "1.0.48"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "f52a465a666ca3d838ebbf08b241383421412fe7ebb463527bba275526d89f76"
++dependencies = [
++ "jobserver",
++ "num_cpus",
++]
++
++[[package]]
++name = "cfg-if"
++version = "0.1.10"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
++
++[[package]]
++name = "clap"
++version = "2.33.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9"
++dependencies = [
++ "ansi_term",
++ "atty",
++ "bitflags",
++ "strsim 0.8.0",
++ "textwrap",
++ "unicode-width",
++ "vec_map",
++]
++
++[[package]]
++name = "commoncrypto"
++version = "0.2.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d056a8586ba25a1e4d61cb090900e495952c7886786fc55f909ab2f819b69007"
++dependencies = [
++ "commoncrypto-sys",
++]
++
++[[package]]
++name = "commoncrypto-sys"
++version = "0.2.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "1fed34f46747aa73dfaa578069fd8279d2818ade2b55f38f22a9401c7f4083e2"
++dependencies = [
++ "libc",
++]
++
++[[package]]
++name = "core-foundation"
++version = "0.6.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "25b9e03f145fd4f2bf705e07b900cd41fc636598fe5dc452fd0db1441c3f496d"
++dependencies = [
++ "core-foundation-sys",
++ "libc",
++]
++
++[[package]]
++name = "core-foundation-sys"
++version = "0.6.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b"
++
++[[package]]
++name = "crates-io"
++version = "0.28.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9dc57b7035c84bcaaa14d89221491b624a32977c230ce6bb77ae191e880c48e1"
++dependencies = [
++ "curl",
++ "failure",
++ "percent-encoding",
++ "serde",
++ "serde_derive",
++ "serde_json",
++ "url",
++]
++
++[[package]]
++name = "crc32fast"
++version = "1.2.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1"
++dependencies = [
++ "cfg-if",
++]
++
++[[package]]
++name = "crossbeam-channel"
++version = "0.3.9"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "c8ec7fcd21571dc78f96cc96243cab8d8f035247c3efd16c687be154c3fa9efa"
++dependencies = [
++ "crossbeam-utils",
++]
++
++[[package]]
++name = "crossbeam-utils"
++version = "0.6.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "04973fa96e96579258a5091af6003abde64af786b860f18622b82e026cca60e6"
++dependencies = [
++ "cfg-if",
++ "lazy_static",
++]
++
++[[package]]
++name = "crypto-hash"
++version = "0.3.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "8a77162240fd97248d19a564a565eb563a3f592b386e4136fb300909e67dddca"
++dependencies = [
++ "commoncrypto",
++ "hex 0.3.2",
++ "openssl",
++ "winapi",
++]
++
++[[package]]
++name = "curl"
++version = "0.4.25"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "06aa71e9208a54def20792d877bc663d6aae0732b9852e612c4a933177c31283"
++dependencies = [
++ "curl-sys",
++ "libc",
++ "openssl-probe",
++ "openssl-sys",
++ "schannel",
++ "socket2",
++ "winapi",
++]
++
++[[package]]
++name = "curl-sys"
++version = "0.4.24"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "f659f3ffac9582d6177bb86d1d2aa649f4eb9d0d4de9d03ccc08b402832ea340"
++dependencies = [
++ "cc",
++ "libc",
++ "libnghttp2-sys",
++ "libz-sys",
++ "openssl-sys",
++ "pkg-config",
++ "vcpkg",
++ "winapi",
++]
++
++[[package]]
++name = "docopt"
++version = "1.1.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "7f525a586d310c87df72ebcd98009e57f1cc030c8c268305287a476beb653969"
++dependencies = [
++ "lazy_static",
++ "regex",
++ "serde",
++ "strsim 0.9.3",
++]
++
++[[package]]
++name = "env_logger"
++version = "0.6.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "aafcde04e90a5226a6443b7aabdb016ba2f8307c847d524724bd9b346dd1a2d3"
++dependencies = [
++ "atty",
++ "humantime",
++ "log",
++ "regex",
++ "termcolor",
++]
++
++[[package]]
++name = "env_logger"
++version = "0.7.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36"
++dependencies = [
++ "atty",
++ "humantime",
++ "log",
++ "regex",
++ "termcolor",
++]
++
++[[package]]
++name = "failure"
++version = "0.1.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "f8273f13c977665c5db7eb2b99ae520952fe5ac831ae4cd09d80c4c7042b5ed9"
++dependencies = [
++ "backtrace",
++ "failure_derive",
++]
++
++[[package]]
++name = "failure_derive"
++version = "0.1.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "0bc225b78e0391e4b8683440bf2e63c2deeeb2ce5189eab46e2b68c6d3725d08"
++dependencies = [
++ "proc-macro2",
++ "quote",
++ "syn",
++ "synstructure",
++]
++
++[[package]]
++name = "filetime"
++version = "0.2.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "1ff6d4dab0aa0c8e6346d46052e93b13a16cf847b54ed357087c35011048cc7d"
++dependencies = [
++ "cfg-if",
++ "libc",
++ "redox_syscall",
++ "winapi",
++]
++
++[[package]]
++name = "flate2"
++version = "1.0.13"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "6bd6d6f4752952feb71363cffc9ebac9411b75b87c6ab6058c40c8900cf43c0f"
++dependencies = [
++ "cfg-if",
++ "crc32fast",
++ "libc",
++ "libz-sys",
++ "miniz_oxide",
++]
++
++[[package]]
++name = "fnv"
++version = "1.0.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3"
++
++[[package]]
++name = "foreign-types"
++version = "0.3.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
++dependencies = [
++ "foreign-types-shared",
++]
++
++[[package]]
++name = "foreign-types-shared"
++version = "0.1.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
++
++[[package]]
++name = "fs2"
++version = "0.4.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213"
++dependencies = [
++ "libc",
++ "winapi",
++]
++
++[[package]]
++name = "fwdansi"
++version = "1.1.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "08c1f5787fe85505d1f7777268db5103d80a7a374d2316a7ce262e57baf8f208"
++dependencies = [
++ "memchr",
++ "termcolor",
++]
++
++[[package]]
++name = "getrandom"
++version = "0.1.13"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "e7db7ca94ed4cd01190ceee0d8a8052f08a247aa1b469a7f68c6a3b71afcf407"
++dependencies = [
++ "cfg-if",
++ "libc",
++ "wasi",
++]
++
++[[package]]
++name = "git2"
++version = "0.10.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "7c1af51ea8a906616af45a4ce78eacf25860f7a13ae7bf8a814693f0f4037a26"
++dependencies = [
++ "bitflags",
++ "libc",
++ "libgit2-sys",
++ "log",
++ "openssl-probe",
++ "openssl-sys",
++ "url",
++]
++
++[[package]]
++name = "git2-curl"
++version = "0.11.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "cd6527e480187ce19aaf4fa6acfb7657b25628ce31cb8ffabdfca3bf731524c5"
++dependencies = [
++ "curl",
++ "git2",
++ "log",
++ "url",
++]
++
++[[package]]
++name = "glob"
++version = "0.3.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
++
++[[package]]
++name = "globset"
++version = "0.4.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "925aa2cac82d8834e2b2a4415b6f6879757fb5c0928fc445ae76461a12eed8f2"
++dependencies = [
++ "aho-corasick",
++ "bstr",
++ "fnv",
++ "log",
++ "regex",
++]
++
++[[package]]
++name = "hermit-abi"
++version = "0.1.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "307c3c9f937f38e3534b1d6447ecf090cafcc9744e4a6360e8b037b2cf5af120"
++dependencies = [
++ "libc",
++]
++
++[[package]]
++name = "hex"
++version = "0.3.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "805026a5d0141ffc30abb3be3173848ad46a1b1664fe632428479619a3644d77"
++
++[[package]]
++name = "hex"
++version = "0.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "023b39be39e3a2da62a94feb433e91e8bcd37676fbc8bea371daf52b7a769a3e"
++
++[[package]]
++name = "home"
++version = "0.5.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "a3753954f7bd71f0e671afb8b5a992d1724cf43b7f95a563cd4a0bde94659ca8"
++dependencies = [
++ "scopeguard",
++ "winapi",
++]
++
++[[package]]
++name = "humantime"
++version = "1.3.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f"
++dependencies = [
++ "quick-error",
++]
++
++[[package]]
++name = "idna"
++version = "0.2.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9"
++dependencies = [
++ "matches",
++ "unicode-bidi",
++ "unicode-normalization",
++]
++
++[[package]]
++name = "ignore"
++version = "0.4.10"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "0ec16832258409d571aaef8273f3c3cc5b060d784e159d1a0f3b0017308f84a7"
++dependencies = [
++ "crossbeam-channel",
++ "globset",
++ "lazy_static",
++ "log",
++ "memchr",
++ "regex",
++ "same-file",
++ "thread_local",
++ "walkdir",
++ "winapi-util",
++]
++
++[[package]]
++name = "im-rc"
++version = "13.0.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "0a0197597d095c0d11107975d3175173f810ee572c2501ff4de64f4f3f119806"
++dependencies = [
++ "rustc_version",
++ "sized-chunks",
++ "typenum",
++]
++
++[[package]]
++name = "itoa"
++version = "0.4.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f"
++
++[[package]]
++name = "jobserver"
++version = "0.1.17"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "f2b1d42ef453b30b7387e113da1c83ab1605d90c5b4e0eb8e96d016ed3b8c160"
++dependencies = [
++ "getrandom",
++ "libc",
++ "log",
++]
++
++[[package]]
++name = "lazy_static"
++version = "1.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
++
++[[package]]
++name = "lazycell"
++version = "1.2.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f"
++
++[[package]]
++name = "libc"
++version = "0.2.66"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d515b1f41455adea1313a4a2ac8a8a477634fbae63cc6100e3aebb207ce61558"
++
++[[package]]
++name = "libgit2-sys"
++version = "0.9.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "4870c781f6063efb83150cd22c1ddf6ecf58531419e7570cdcced46970f64a16"
++dependencies = [
++ "cc",
++ "libc",
++ "libssh2-sys",
++ "libz-sys",
++ "openssl-sys",
++ "pkg-config",
++]
++
++[[package]]
++name = "libnghttp2-sys"
++version = "0.1.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "02254d44f4435dd79e695f2c2b83cd06a47919adea30216ceaf0c57ca0a72463"
++dependencies = [
++ "cc",
++ "libc",
++]
++
++[[package]]
++name = "libssh2-sys"
++version = "0.2.13"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "5fcd5a428a31cbbfe059812d74f4b6cd3b9b7426c2bdaec56993c5365da1c328"
++dependencies = [
++ "cc",
++ "libc",
++ "libz-sys",
++ "openssl-sys",
++ "pkg-config",
++ "vcpkg",
++]
++
++[[package]]
++name = "libz-sys"
++version = "1.0.25"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "2eb5e43362e38e2bca2fd5f5134c4d4564a23a5c28e9b95411652021a8675ebe"
++dependencies = [
++ "cc",
++ "libc",
++ "pkg-config",
++ "vcpkg",
++]
++
++[[package]]
++name = "log"
++version = "0.4.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7"
++dependencies = [
++ "cfg-if",
++]
++
++[[package]]
++name = "matches"
++version = "0.1.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08"
++
++[[package]]
++name = "memchr"
++version = "2.2.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "88579771288728879b57485cc7d6b07d648c9f0141eb955f8ab7f9d45394468e"
++
++[[package]]
++name = "miniz_oxide"
++version = "0.3.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "6f3f74f726ae935c3f514300cc6773a0c9492abc5e972d42ba0c0ebb88757625"
++dependencies = [
++ "adler32",
++]
++
++[[package]]
++name = "miow"
++version = "0.3.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "396aa0f2003d7df8395cb93e09871561ccc3e785f0acb369170e8cc74ddf9226"
++dependencies = [
++ "socket2",
++ "winapi",
++]
++
++[[package]]
++name = "num_cpus"
++version = "1.11.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "76dac5ed2a876980778b8b85f75a71b6cbf0db0b1232ee12f826bccb00d09d72"
++dependencies = [
++ "hermit-abi",
++ "libc",
++]
++
++[[package]]
++name = "opener"
++version = "0.4.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "13117407ca9d0caf3a0e74f97b490a7e64c0ae3aa90a8b7085544d0c37b6f3ae"
++dependencies = [
++ "winapi",
++]
++
++[[package]]
++name = "openssl"
++version = "0.10.26"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "3a3cc5799d98e1088141b8e01ff760112bbd9f19d850c124500566ca6901a585"
++dependencies = [
++ "bitflags",
++ "cfg-if",
++ "foreign-types",
++ "lazy_static",
++ "libc",
++ "openssl-sys",
++]
++
++[[package]]
++name = "openssl-probe"
++version = "0.1.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de"
++
++[[package]]
++name = "openssl-sys"
++version = "0.9.53"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "465d16ae7fc0e313318f7de5cecf57b2fbe7511fd213978b457e1c96ff46736f"
++dependencies = [
++ "autocfg",
++ "cc",
++ "libc",
++ "pkg-config",
++ "vcpkg",
++]
++
++[[package]]
++name = "percent-encoding"
++version = "2.1.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
++
++[[package]]
++name = "pkg-config"
++version = "0.3.17"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677"
++
++[[package]]
++name = "ppv-lite86"
++version = "0.2.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "74490b50b9fbe561ac330df47c08f3f33073d2d00c150f719147d7c54522fa1b"
++
++[[package]]
++name = "proc-macro2"
++version = "1.0.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9c9e470a8dc4aeae2dee2f335e8f533e2d4b347e1434e5671afc49b054592f27"
++dependencies = [
++ "unicode-xid",
++]
++
++[[package]]
++name = "quick-error"
++version = "1.2.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9274b940887ce9addde99c4eee6b5c44cc494b182b97e73dc8ffdcb3397fd3f0"
++
++[[package]]
++name = "quote"
++version = "1.0.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe"
++dependencies = [
++ "proc-macro2",
++]
++
++[[package]]
++name = "rand"
++version = "0.7.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "3ae1b169243eaf61759b8475a998f0a385e42042370f3a7dbaf35246eacc8412"
++dependencies = [
++ "getrandom",
++ "libc",
++ "rand_chacha",
++ "rand_core",
++ "rand_hc",
++]
++
++[[package]]
++name = "rand_chacha"
++version = "0.2.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "03a2a90da8c7523f554344f921aa97283eadf6ac484a6d2a7d0212fa7f8d6853"
++dependencies = [
++ "c2-chacha",
++ "rand_core",
++]
++
++[[package]]
++name = "rand_core"
++version = "0.5.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
++dependencies = [
++ "getrandom",
++]
++
++[[package]]
++name = "rand_hc"
++version = "0.2.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
++dependencies = [
++ "rand_core",
++]
++
++[[package]]
++name = "redox_syscall"
++version = "0.1.56"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84"
++
++[[package]]
++name = "regex"
++version = "1.3.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "dc220bd33bdce8f093101afe22a037b8eb0e5af33592e6a9caafff0d4cb81cbd"
++dependencies = [
++ "aho-corasick",
++ "memchr",
++ "regex-syntax",
++ "thread_local",
++]
++
++[[package]]
++name = "regex-syntax"
++version = "0.6.12"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "11a7e20d1cce64ef2fed88b66d347f88bd9babb82845b2b858f3edbf59a4f716"
++
++[[package]]
++name = "remove_dir_all"
++version = "0.5.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e"
++dependencies = [
++ "winapi",
++]
++
++[[package]]
++name = "rustc-demangle"
++version = "0.1.16"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783"
++
++[[package]]
++name = "rustc-workspace-hack"
++version = "1.0.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "fc71d2faa173b74b232dedc235e3ee1696581bb132fc116fa3626d6151a1a8fb"
++
++[[package]]
++name = "rustc_version"
++version = "0.2.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
++dependencies = [
++ "semver",
++]
++
++[[package]]
++name = "rustfix"
++version = "0.4.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "7150ac777a2931a53489f5a41eb0937b84e3092a20cd0e73ad436b65b507f607"
++dependencies = [
++ "failure",
++ "log",
++ "serde",
++ "serde_json",
++]
++
++[[package]]
++name = "ryu"
++version = "1.0.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "bfa8506c1de11c9c4e4c38863ccbe02a305c8188e85a05a784c9e11e1c3910c8"
++
++[[package]]
++name = "same-file"
++version = "1.0.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "585e8ddcedc187886a30fa705c47985c3fa88d06624095856b36ca0b82ff4421"
++dependencies = [
++ "winapi-util",
++]
++
++[[package]]
++name = "schannel"
++version = "0.1.16"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "87f550b06b6cba9c8b8be3ee73f391990116bf527450d2556e9b9ce263b9a021"
++dependencies = [
++ "lazy_static",
++ "winapi",
++]
++
++[[package]]
++name = "scopeguard"
++version = "1.0.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d"
++
++[[package]]
++name = "semver"
++version = "0.9.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
++dependencies = [
++ "semver-parser",
++ "serde",
++]
++
++[[package]]
++name = "semver-parser"
++version = "0.7.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
++
++[[package]]
++name = "serde"
++version = "1.0.103"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "1217f97ab8e8904b57dd22eb61cde455fa7446a9c1cf43966066da047c1f3702"
++dependencies = [
++ "serde_derive",
++]
++
++[[package]]
++name = "serde_derive"
++version = "1.0.103"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "a8c6faef9a2e64b0064f48570289b4bf8823b7581f1d6157c1b52152306651d0"
++dependencies = [
++ "proc-macro2",
++ "quote",
++ "syn",
++]
++
++[[package]]
++name = "serde_ignored"
++version = "0.1.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "7248fdcbd17d3f2604fc2a02d0ecc844d9a7bf52bf95fc196d9f0a38f6da6a0e"
++dependencies = [
++ "serde",
++]
++
++[[package]]
++name = "serde_json"
++version = "1.0.44"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "48c575e0cc52bdd09b47f330f646cf59afc586e9c4e3ccd6fc1f625b8ea1dad7"
++dependencies = [
++ "itoa",
++ "ryu",
++ "serde",
++]
++
++[[package]]
++name = "shell-escape"
++version = "0.1.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "170a13e64f2a51b77a45702ba77287f5c6829375b04a69cf2222acd17d0cfab9"
++
++[[package]]
++name = "sized-chunks"
++version = "0.3.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "f01db57d7ee89c8e053245deb77040a6cc8508311f381c88749c33d4b9b78785"
++dependencies = [
++ "typenum",
++]
++
++[[package]]
++name = "smallvec"
++version = "1.0.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "4ecf3b85f68e8abaa7555aa5abdb1153079387e60b718283d732f03897fcfc86"
++
++[[package]]
++name = "socket2"
++version = "0.3.11"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "e8b74de517221a2cb01a53349cf54182acdc31a074727d3079068448c0676d85"
++dependencies = [
++ "cfg-if",
++ "libc",
++ "redox_syscall",
++ "winapi",
++]
++
++[[package]]
++name = "strip-ansi-escapes"
++version = "0.1.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9d63676e2abafa709460982ddc02a3bb586b6d15a49b75c212e06edd3933acee"
++dependencies = [
++ "vte",
++]
++
++[[package]]
++name = "strsim"
++version = "0.8.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
++
++[[package]]
++name = "strsim"
++version = "0.9.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c"
++
++[[package]]
++name = "syn"
++version = "1.0.11"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "dff0acdb207ae2fe6d5976617f887eb1e35a2ba52c13c7234c790960cdad9238"
++dependencies = [
++ "proc-macro2",
++ "quote",
++ "unicode-xid",
++]
++
++[[package]]
++name = "synstructure"
++version = "0.12.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545"
++dependencies = [
++ "proc-macro2",
++ "quote",
++ "syn",
++ "unicode-xid",
++]
++
++[[package]]
++name = "tabwriter"
++version = "1.1.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9128e3a9149e51494cad59712a286e149fcb74e443d2298d69bd6eaa42cc4ebb"
++dependencies = [
++ "unicode-width",
++]
++
++[[package]]
++name = "tar"
++version = "0.4.26"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b3196bfbffbba3e57481b6ea32249fbaf590396a52505a2615adbb79d9d826d3"
++dependencies = [
++ "filetime",
++ "libc",
++ "redox_syscall",
++]
++
++[[package]]
++name = "tempfile"
++version = "3.1.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9"
++dependencies = [
++ "cfg-if",
++ "libc",
++ "rand",
++ "redox_syscall",
++ "remove_dir_all",
++ "winapi",
++]
++
++[[package]]
++name = "termcolor"
++version = "1.0.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "96d6098003bde162e4277c70665bd87c326f5a0c3f3fbfb285787fa482d54e6e"
++dependencies = [
++ "wincolor",
++]
++
++[[package]]
++name = "textwrap"
++version = "0.11.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
++dependencies = [
++ "unicode-width",
++]
++
++[[package]]
++name = "thread_local"
++version = "0.3.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b"
++dependencies = [
++ "lazy_static",
++]
++
++[[package]]
++name = "toml"
++version = "0.5.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "01d1404644c8b12b16bfcffa4322403a91a451584daaaa7c28d3152e6cbc98cf"
++dependencies = [
++ "serde",
++]
++
++[[package]]
++name = "typenum"
++version = "1.11.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "6d2783fe2d6b8c1101136184eb41be8b1ad379e4657050b8aaff0c79ee7575f9"
++
++[[package]]
++name = "unicode-bidi"
++version = "0.3.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5"
++dependencies = [
++ "matches",
++]
++
++[[package]]
++name = "unicode-normalization"
++version = "0.1.11"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b561e267b2326bb4cebfc0ef9e68355c7abe6c6f522aeac2f5bf95d56c59bdcf"
++dependencies = [
++ "smallvec",
++]
++
++[[package]]
++name = "unicode-width"
++version = "0.1.7"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479"
++
++[[package]]
++name = "unicode-xid"
++version = "0.2.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
++
++[[package]]
++name = "url"
++version = "2.1.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "75b414f6c464c879d7f9babf951f23bc3743fb7313c081b2e6ca719067ea9d61"
++dependencies = [
++ "idna",
++ "matches",
++ "percent-encoding",
++]
++
++[[package]]
++name = "utf8parse"
++version = "0.1.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "8772a4ccbb4e89959023bc5b7cb8623a795caa7092d99f3aa9501b9484d4557d"
++
++[[package]]
++name = "vcpkg"
++version = "0.2.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "3fc439f2794e98976c88a2a2dafce96b930fe8010b0a256b3c2199a773933168"
++
++[[package]]
++name = "vec_map"
++version = "0.8.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a"
++
++[[package]]
++name = "vte"
++version = "0.3.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "4f42f536e22f7fcbb407639765c8fd78707a33109301f834a594758bedd6e8cf"
++dependencies = [
++ "utf8parse",
++]
++
++[[package]]
++name = "walkdir"
++version = "2.2.9"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9658c94fa8b940eab2250bd5a457f9c48b748420d71293b165c8cdbe2f55f71e"
++dependencies = [
++ "same-file",
++ "winapi",
++ "winapi-util",
++]
++
++[[package]]
++name = "wasi"
++version = "0.7.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b89c3ce4ce14bdc6fb6beaf9ec7928ca331de5df7e5ea278375642a2f478570d"
++
++[[package]]
++name = "winapi"
++version = "0.3.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6"
++dependencies = [
++ "winapi-i686-pc-windows-gnu",
++ "winapi-x86_64-pc-windows-gnu",
++]
++
++[[package]]
++name = "winapi-i686-pc-windows-gnu"
++version = "0.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
++
++[[package]]
++name = "winapi-util"
++version = "0.1.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "7168bab6e1daee33b4557efd0e95d5ca70a03706d39fa5f3fe7a236f584b03c9"
++dependencies = [
++ "winapi",
++]
++
++[[package]]
++name = "winapi-x86_64-pc-windows-gnu"
++version = "0.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
++
++[[package]]
++name = "wincolor"
++version = "1.0.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "96f5016b18804d24db43cebf3c77269e7569b8954a8464501c216cc5e070eaa9"
++dependencies = [
++ "winapi",
++ "winapi-util",
++]
diff --git a/nixpkgs/pkgs/tools/package-management/cargo-outdated/default.nix b/nixpkgs/pkgs/tools/package-management/cargo-outdated/default.nix
new file mode 100644
index 000000000000..7d684d943b90
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/cargo-outdated/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, rustPlatform, pkgconfig, openssl, libiconv, curl, darwin }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-outdated";
+  version = "0.9.1";
+
+  src = fetchFromGitHub {
+    owner = "kbknapp";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "02gsarwm4gjkr9m4sfbjwp37xmqhch8qpyy027bxqkg8iyipxm69";
+  };
+
+  cargoPatches = [ ./cargo-lock.patch ];
+  cargoSha256 = "1ywmrvkwwwwh99l4j8vc4cyk8qjd0jx8hn68yr2h31ya1bzcqbd1";
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ openssl ]
+  ++ stdenv.lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+    libiconv
+    curl
+  ];
+
+  meta = with stdenv.lib; {
+    description = "A cargo subcommand for displaying when Rust dependencies are out of date";
+    homepage = https://github.com/kbknapp/cargo-outdated;
+    license = with licenses; [ asl20 /* or */ mit ];
+    platforms = platforms.all;
+    maintainers = with maintainers; [ sondr3 ivan ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/cargo-outdated/update-cargo-lock.sh b/nixpkgs/pkgs/tools/package-management/cargo-outdated/update-cargo-lock.sh
new file mode 100755
index 000000000000..21ee27c59b74
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/cargo-outdated/update-cargo-lock.sh
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+# This updates cargo-lock.patch for the cargo-outdated version listed in default.nix.
+
+set -eu -o verbose
+
+here=$PWD
+version=$(cat default.nix | grep '^  version = "' | cut -d '"' -f 2)
+checkout=$(mktemp -d)
+git clone -b "v$version" --depth=1 https://github.com/kbknapp/cargo-outdated "$checkout"
+cd "$checkout"
+
+cargo generate-lockfile
+git add -f Cargo.lock
+git diff HEAD -- Cargo.lock > "$here"/cargo-lock.patch
+
+cd "$here"
+rm -rf "$checkout"
diff --git a/nixpkgs/pkgs/tools/package-management/cargo-release/default.nix b/nixpkgs/pkgs/tools/package-management/cargo-release/default.nix
new file mode 100644
index 000000000000..3e3ba47be056
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/cargo-release/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, rustPlatform, fetchFromGitHub, Security, openssl, pkg-config }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-release";
+  version = "0.13.0";
+
+  src = fetchFromGitHub {
+    owner = "sunng87";
+    repo = "cargo-release";
+    rev = "v${version}";
+    sha256 = "1w9w43i5br94vg5m4idabh67p4ffsx2lmc2g0ak2k961vl46wr0q";
+  };
+
+  cargoSha256 = "075fvvd4c8f3kz6i6ny835h6jpa3c1v3miwfwwrdyy49a85lzjyj";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ openssl ] ++ stdenv.lib.optional stdenv.isDarwin Security;
+
+  meta = with stdenv.lib; {
+    description = ''Cargo subcommand "release": everything about releasing a rust crate'';
+    homepage = https://github.com/sunng87/cargo-release;
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ gerschtli ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/cargo-tree/default.nix b/nixpkgs/pkgs/tools/package-management/cargo-tree/default.nix
new file mode 100644
index 000000000000..add08c50fccf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/cargo-tree/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, lib, rustPlatform, fetchFromGitHub, pkgconfig, cmake, curl, libiconv, darwin }:
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-tree";
+  version = "0.27.0";
+
+  src = fetchFromGitHub {
+    owner = "sfackler";
+    repo = "cargo-tree";
+    rev = "37030742fbf83106707525913ab6c4c3c701cd0e";
+    sha256 = "1mi52n02j9dmi19af6js0vmmqnl8rf4zxind3cxh401530cd8ml4";
+  };
+
+  cargoSha256 = "12p9dqlxa1b1sx8572w7hj0rlkkpv3k440pffdyjgyx4s1r9m0s0";
+
+  nativeBuildInputs = [ pkgconfig cmake ];
+  buildInputs = [ curl ] ++ lib.optionals stdenv.isDarwin [ libiconv darwin.apple_sdk.frameworks.Security ];
+
+  meta = with lib; {
+    description = "A cargo subcommand that visualizes a crate's dependency graph in a tree-like format";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ jD91mZM2 ];
+    homepage = "https://crates.io/crates/cargo-tree";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/cargo-update/cargo-update.nix b/nixpkgs/pkgs/tools/package-management/cargo-update/cargo-update.nix
new file mode 100644
index 000000000000..9b8cf24605a5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/cargo-update/cargo-update.nix
@@ -0,0 +1,1334 @@
+# Generated by carnix 0.6.6: carnix -o cargo-update.nix --src ./. Cargo.lock --standalone
+{ lib, stdenv, buildRustCrate, fetchgit }:
+let kernel = stdenv.hostPlatform.parsed.kernel.name;
+    abi = stdenv.hostPlatform.parsed.abi.name;
+    include = includedFiles: src: builtins.filterSource (path: type:
+      lib.lists.any (f:
+        let p = toString (src + ("/" + f)); in
+        (path == p) || (type == "directory" && lib.strings.hasPrefix path p)
+      ) includedFiles
+    ) src;
+    updateFeatures = f: up: functions: builtins.deepSeq f (lib.lists.foldl' (features: fun: fun features) (lib.attrsets.recursiveUpdate f up) functions);
+    mapFeatures = features: map (fun: fun { features = features; });
+    mkFeatures = feat: lib.lists.foldl (features: featureName:
+      if feat.${featureName} or false then
+        [ featureName ] ++ features
+      else
+        features
+    ) [] (builtins.attrNames feat);
+in
+rec {
+  cargo_update = f: cargo_update_1_5_2 { features = cargo_update_1_5_2_features { cargo_update_1_5_2 = f; }; };
+  advapi32_sys_0_2_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "advapi32-sys";
+    version = "0.2.0";
+    authors = [ "Peter Atashian <retep998@gmail.com>" ];
+    sha256 = "1l6789hkz2whd9gklwz1m379kcvyizaj8nnzj3rn4a5h79yg59v7";
+    libName = "advapi32";
+    build = "build.rs";
+    inherit dependencies buildDependencies features;
+  };
+  aho_corasick_0_6_4_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "aho-corasick";
+    version = "0.6.4";
+    authors = [ "Andrew Gallant <jamslam@gmail.com>" ];
+    sha256 = "189v919mp6rzzgjp1khpn4zlq8ls81gh43x1lmc8kbkagdlpq888";
+    libName = "aho_corasick";
+    crateBin = [ {  name = "aho-corasick-dot"; } ];
+    inherit dependencies buildDependencies features;
+  };
+  ansi_term_0_11_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "ansi_term";
+    version = "0.11.0";
+    authors = [ "ogham@bsago.me" "Ryan Scheel (Havvy) <ryan.havvy@gmail.com>" "Josh Triplett <josh@joshtriplett.org>" ];
+    sha256 = "08fk0p2xvkqpmz3zlrwnf6l8sj2vngw464rvzspzp31sbgxbwm4v";
+    inherit dependencies buildDependencies features;
+  };
+  array_tool_1_0_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "array_tool";
+    version = "1.0.3";
+    authors = [ "Daniel P. Clark <6ftdan@gmail.com>" ];
+    sha256 = "0igg0zvhcvjc15vgg6vjxjfifn2w4scjq9c8i1b2abv1sy2cgc86";
+    inherit dependencies buildDependencies features;
+  };
+  atty_0_2_10_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "atty";
+    version = "0.2.10";
+    authors = [ "softprops <d.tangren@gmail.com>" ];
+    sha256 = "1h26lssj8rwaz0xhwwm5a645r49yly211amfmd243m3m0jl49i2c";
+    inherit dependencies buildDependencies features;
+  };
+  bitflags_0_9_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "bitflags";
+    version = "0.9.1";
+    authors = [ "The Rust Project Developers" ];
+    sha256 = "18h073l5jd88rx4qdr95fjddr9rk79pb1aqnshzdnw16cfmb9rws";
+    inherit dependencies buildDependencies features;
+  };
+  bitflags_1_0_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "bitflags";
+    version = "1.0.3";
+    authors = [ "The Rust Project Developers" ];
+    sha256 = "162p4w4h1ad76awq6b5yivmls3d50m9cl27d8g588lsps6g8s5rw";
+    inherit dependencies buildDependencies features;
+  };
+  cargo_update_1_5_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "cargo-update";
+    version = "1.5.2";
+    authors = [ "nabijaczleweli <nabijaczleweli@gmail.com>" "Yann Simon <yann.simon.fr@gmail.com>" "ven <vendethiel@hotmail.fr>" "Cat Plus Plus <piotrlegnica@piotrl.pl>" "Liigo <liigo@qq.com>" "azyobuzin <azyobuzin@users.sourceforge.jp>" "Tatsuyuki Ishi <ishitatsuyuki@gmail.com>" "Tom Prince <tom.prince@twistedmatrix.com>" "Mateusz Mikuła <mati865@gmail.com>" "sinkuu <sinkuupump@gmail.com>" "Alex Burka <aburka@seas.upenn.edu>" "Matthias Krüger <matthias.krueger@famsik.de>" "Daniel Holbert <dholbert@cs.stanford.edu>" ];
+    src = ./.;
+    crateBin = [ {  name = "cargo-install-update";  path = "src/main.rs"; } {  name = "cargo-install-update-config";  path = "src/main-config.rs"; } ];
+    build = "build.rs";
+    inherit dependencies buildDependencies features;
+  };
+  cc_1_0_15_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "cc";
+    version = "1.0.15";
+    authors = [ "Alex Crichton <alex@alexcrichton.com>" ];
+    sha256 = "1zmcv4zf888byhay2qakqlc9b8snhy5ccfs35zb6flywmlj8f2c0";
+    inherit dependencies buildDependencies features;
+  };
+  clap_2_31_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "clap";
+    version = "2.31.2";
+    authors = [ "Kevin K. <kbknapp@gmail.com>" ];
+    sha256 = "0r24ziw85a8y1sf2l21y4mvv5qan3rjafcshpyfsjfadqfxsij72";
+    inherit dependencies buildDependencies features;
+  };
+  cmake_0_1_31_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "cmake";
+    version = "0.1.31";
+    authors = [ "Alex Crichton <alex@alexcrichton.com>" ];
+    sha256 = "18j5fci486s7v5yjvv2ik3nsp4lk0fn0b8js5k6c4dviml476vz2";
+    inherit dependencies buildDependencies features;
+  };
+  curl_sys_0_4_5_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "curl-sys";
+    version = "0.4.5";
+    authors = [ "Carl Lerche <me@carllerche.com>" "Alex Crichton <alex@alexcrichton.com>" ];
+    sha256 = "149nswzwzr1lx0ki8awbppm7kf8nb268pc3zhzmvbs5fliq075qw";
+    libPath = "lib.rs";
+    libName = "curl_sys";
+    build = "build.rs";
+    inherit dependencies buildDependencies features;
+  };
+  embed_resource_1_1_4_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "embed-resource";
+    version = "1.1.4";
+    authors = [ "nabijaczleweli <nabijaczleweli@gmail.com>" "Cat Plus Plus <piotrlegnica@piotrl.pl>" "Liigo <liigo@qq.com>" "azyobuzin <azyobuzin@users.sourceforge.jp>" "Peter Atashian <retep998@gmail.com>" ];
+    sha256 = "1n07qys5904mkcididfgh1m6g8nfgl93pdpygaqn4dkhm5cxssfd";
+    inherit dependencies buildDependencies features;
+  };
+  fuchsia_zircon_0_3_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "fuchsia-zircon";
+    version = "0.3.3";
+    authors = [ "Raph Levien <raph@google.com>" ];
+    sha256 = "0jrf4shb1699r4la8z358vri8318w4mdi6qzfqy30p2ymjlca4gk";
+    inherit dependencies buildDependencies features;
+  };
+  fuchsia_zircon_sys_0_3_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "fuchsia-zircon-sys";
+    version = "0.3.3";
+    authors = [ "Raph Levien <raph@google.com>" ];
+    sha256 = "08jp1zxrm9jbrr6l26bjal4dbm8bxfy57ickdgibsqxr1n9j3hf5";
+    inherit dependencies buildDependencies features;
+  };
+  git2_0_6_11_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "git2";
+    version = "0.6.11";
+    authors = [ "Alex Crichton <alex@alexcrichton.com>" ];
+    sha256 = "0jznfnk2n7nk250cj52k3mxjqgan7gwyrh3h7dkhqqs2zfx4ylvd";
+    inherit dependencies buildDependencies features;
+  };
+  idna_0_1_4_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "idna";
+    version = "0.1.4";
+    authors = [ "The rust-url developers" ];
+    sha256 = "15j44qgjx1skwg9i7f4cm36ni4n99b1ayx23yxx7axxcw8vjf336";
+    inherit dependencies buildDependencies features;
+  };
+  json_0_11_13_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "json";
+    version = "0.11.13";
+    authors = [ "Maciej Hirsz <maciej.hirsz@gmail.com>" ];
+    sha256 = "03227jaj6rjlfigsk4rmc0b83b1djlh42grfjaxk0d2xvgdb893i";
+    inherit dependencies buildDependencies features;
+  };
+  kernel32_sys_0_2_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "kernel32-sys";
+    version = "0.2.2";
+    authors = [ "Peter Atashian <retep998@gmail.com>" ];
+    sha256 = "1lrw1hbinyvr6cp28g60z97w32w8vsk6pahk64pmrv2fmby8srfj";
+    libName = "kernel32";
+    build = "build.rs";
+    inherit dependencies buildDependencies features;
+  };
+  lazy_static_1_0_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "lazy_static";
+    version = "1.0.0";
+    authors = [ "Marvin Löbel <loebel.marvin@gmail.com>" ];
+    sha256 = "0wfvqyr2nvx2mbsrscg5y7gfa9skhb8p72ayanl8vl49pw24v4fh";
+    inherit dependencies buildDependencies features;
+  };
+  lazysort_0_2_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "lazysort";
+    version = "0.2.0";
+    authors = [ "Ben Ashford" ];
+    sha256 = "0dv9bryg10hj8cycmdxpcc9y14i958yjr2hm4c3i9168q0y7njdz";
+    inherit dependencies buildDependencies features;
+  };
+  libc_0_2_40_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "libc";
+    version = "0.2.40";
+    authors = [ "The Rust Project Developers" ];
+    sha256 = "1xfc39237ldzgr8x8wcflgdr8zssi3wif7g2zxc02d94gzkjsw83";
+    inherit dependencies buildDependencies features;
+  };
+  libgit2_sys_0_6_19_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "libgit2-sys";
+    version = "0.6.19";
+    authors = [ "Alex Crichton <alex@alexcrichton.com>" ];
+    sha256 = "13044s468adsx3sq4qvr4vnbr6nr5hq23lls8wn0a415jdl3qbcg";
+    libPath = "lib.rs";
+    libName = "libgit2_sys";
+    build = "build.rs";
+    inherit dependencies buildDependencies features;
+  };
+  libssh2_sys_0_2_7_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "libssh2-sys";
+    version = "0.2.7";
+    authors = [ "Alex Crichton <alex@alexcrichton.com>" ];
+    sha256 = "1mr683x23l7f0mmc10vd5fnarfqpd7wqxs3rxyhq2igrh3fn0m2v";
+    libPath = "lib.rs";
+    libName = "libssh2_sys";
+    build = "build.rs";
+    inherit dependencies buildDependencies features;
+  };
+  libz_sys_1_0_18_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "libz-sys";
+    version = "1.0.18";
+    authors = [ "Alex Crichton <alex@alexcrichton.com>" ];
+    sha256 = "0lr0rvmmfbfa4g7mhi0l93i8jq86pfcssdv4d40kzfy45ajdcgim";
+    build = "build.rs";
+    inherit dependencies buildDependencies features;
+  };
+  matches_0_1_6_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "matches";
+    version = "0.1.6";
+    authors = [ "Simon Sapin <simon.sapin@exyr.org>" ];
+    sha256 = "1zlrqlbvzxdil8z8ial2ihvxjwvlvg3g8dr0lcdpsjclkclasjan";
+    libPath = "lib.rs";
+    inherit dependencies buildDependencies features;
+  };
+  memchr_2_0_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "memchr";
+    version = "2.0.1";
+    authors = [ "Andrew Gallant <jamslam@gmail.com>" "bluss" ];
+    sha256 = "0ls2y47rjwapjdax6bp974gdp06ggm1v8d1h69wyydmh1nhgm5gr";
+    inherit dependencies buildDependencies features;
+  };
+  openssl_probe_0_1_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "openssl-probe";
+    version = "0.1.2";
+    authors = [ "Alex Crichton <alex@alexcrichton.com>" ];
+    sha256 = "1a89fznx26vvaxyrxdvgf6iwai5xvs6xjvpjin68fgvrslv6n15a";
+    inherit dependencies buildDependencies features;
+  };
+  openssl_sys_0_9_30_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "openssl-sys";
+    version = "0.9.30";
+    authors = [ "Alex Crichton <alex@alexcrichton.com>" "Steven Fackler <sfackler@gmail.com>" ];
+    sha256 = "1p5y3md4crbmg0lcfkdl8pp3kf9k82vghjy28x7ix5mji3j2p87a";
+    inherit dependencies buildDependencies features;
+  };
+  percent_encoding_1_0_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "percent-encoding";
+    version = "1.0.1";
+    authors = [ "The rust-url developers" ];
+    sha256 = "04ahrp7aw4ip7fmadb0bknybmkfav0kk0gw4ps3ydq5w6hr0ib5i";
+    libPath = "lib.rs";
+    inherit dependencies buildDependencies features;
+  };
+  pkg_config_0_3_11_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "pkg-config";
+    version = "0.3.11";
+    authors = [ "Alex Crichton <alex@alexcrichton.com>" ];
+    sha256 = "177kbs465skvzmb2d9bh7aa5lqm0npfig12awcbd34c6k6nlyr5h";
+    inherit dependencies buildDependencies features;
+  };
+  proc_macro2_0_3_8_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "proc-macro2";
+    version = "0.3.8";
+    authors = [ "Alex Crichton <alex@alexcrichton.com>" ];
+    sha256 = "0ixnavxcd6sk1861hjgnfxly7qgq4ch1iplsx0nclvjjkwg39qdc";
+    inherit dependencies buildDependencies features;
+  };
+  quote_0_5_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "quote";
+    version = "0.5.2";
+    authors = [ "David Tolnay <dtolnay@gmail.com>" ];
+    sha256 = "062cnp12j09x0z0nj4j5pfh26h35zlrks07asxgqhfhcym1ba595";
+    inherit dependencies buildDependencies features;
+  };
+  rand_0_3_22_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "rand";
+    version = "0.3.22";
+    authors = [ "The Rust Project Developers" ];
+    sha256 = "0wrj12acx7l4hr7ag3nz8b50yhp8ancyq988bzmnnsxln67rsys0";
+    inherit dependencies buildDependencies features;
+  };
+  rand_0_4_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "rand";
+    version = "0.4.2";
+    authors = [ "The Rust Project Developers" ];
+    sha256 = "0h8pkg23wb67i8904sm76iyr1jlmhklb85vbpz9c9191a24xzkfm";
+    inherit dependencies buildDependencies features;
+  };
+  redox_syscall_0_1_37_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "redox_syscall";
+    version = "0.1.37";
+    authors = [ "Jeremy Soller <jackpot51@gmail.com>" ];
+    sha256 = "0qa0jl9cr3qp80an8vshp2mcn8rzvwiavs1398hq1vsjw7pc3h2v";
+    libName = "syscall";
+    inherit dependencies buildDependencies features;
+  };
+  redox_termios_0_1_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "redox_termios";
+    version = "0.1.1";
+    authors = [ "Jeremy Soller <jackpot51@gmail.com>" ];
+    sha256 = "04s6yyzjca552hdaqlvqhp3vw0zqbc304md5czyd3axh56iry8wh";
+    libPath = "src/lib.rs";
+    inherit dependencies buildDependencies features;
+  };
+  regex_0_2_11_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "regex";
+    version = "0.2.11";
+    authors = [ "The Rust Project Developers" ];
+    sha256 = "0r50cymxdqp0fv1dxd22mjr6y32q450nwacd279p9s7lh0cafijj";
+    inherit dependencies buildDependencies features;
+  };
+  regex_syntax_0_5_6_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "regex-syntax";
+    version = "0.5.6";
+    authors = [ "The Rust Project Developers" ];
+    sha256 = "10vf3r34bgjnbrnqd5aszn35bjvm8insw498l1vjy8zx5yms3427";
+    inherit dependencies buildDependencies features;
+  };
+  semver_0_9_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "semver";
+    version = "0.9.0";
+    authors = [ "Steve Klabnik <steve@steveklabnik.com>" "The Rust Project Developers" ];
+    sha256 = "0azak2lb2wc36s3x15az886kck7rpnksrw14lalm157rg9sc9z63";
+    inherit dependencies buildDependencies features;
+  };
+  semver_parser_0_7_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "semver-parser";
+    version = "0.7.0";
+    authors = [ "Steve Klabnik <steve@steveklabnik.com>" ];
+    sha256 = "1da66c8413yakx0y15k8c055yna5lyb6fr0fw9318kdwkrk5k12h";
+    inherit dependencies buildDependencies features;
+  };
+  serde_1_0_55_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "serde";
+    version = "1.0.55";
+    authors = [ "Erick Tryzelaar <erick.tryzelaar@gmail.com>" "David Tolnay <dtolnay@gmail.com>" ];
+    sha256 = "1vpslfs3j8xbl3srmzppa34h0908q0sj4hyrmlrpklhldii5vbqh";
+    inherit dependencies buildDependencies features;
+  };
+  serde_derive_1_0_55_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "serde_derive";
+    version = "1.0.55";
+    authors = [ "Erick Tryzelaar <erick.tryzelaar@gmail.com>" "David Tolnay <dtolnay@gmail.com>" ];
+    sha256 = "1ggcidzgi51l3lsdf8gg46ivn61py8rnrf6garpcxwmdbfcc8lgk";
+    procMacro = true;
+    inherit dependencies buildDependencies features;
+  };
+  strsim_0_7_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "strsim";
+    version = "0.7.0";
+    authors = [ "Danny Guo <dannyguo91@gmail.com>" ];
+    sha256 = "0fy0k5f2705z73mb3x9459bpcvrx4ky8jpr4zikcbiwan4bnm0iv";
+    inherit dependencies buildDependencies features;
+  };
+  syn_0_13_10_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "syn";
+    version = "0.13.10";
+    authors = [ "David Tolnay <dtolnay@gmail.com>" ];
+    sha256 = "0dbvdxlpvx7f8iw5cbv88vbyszp72df8y8zhl36gj73g1xwdqfhx";
+    inherit dependencies buildDependencies features;
+  };
+  tabwriter_1_0_4_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "tabwriter";
+    version = "1.0.4";
+    authors = [ "Andrew Gallant <jamslam@gmail.com>" ];
+    sha256 = "02yk7db101lqn24wnm15yy8xb095kv9bnkdvyj7vqhx40vixyibd";
+    inherit dependencies buildDependencies features;
+  };
+  termion_1_5_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "termion";
+    version = "1.5.1";
+    authors = [ "ticki <Ticki@users.noreply.github.com>" "gycos <alexandre.bury@gmail.com>" "IGI-111 <igi-111@protonmail.com>" ];
+    sha256 = "02gq4vd8iws1f3gjrgrgpajsk2bk43nds5acbbb4s8dvrdvr8nf1";
+    inherit dependencies buildDependencies features;
+  };
+  textwrap_0_9_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "textwrap";
+    version = "0.9.0";
+    authors = [ "Martin Geisler <martin@geisler.net>" ];
+    sha256 = "18jg79ndjlwndz01mlbh82kkr2arqm658yn5kwp65l5n1hz8w4yb";
+    inherit dependencies buildDependencies features;
+  };
+  thread_local_0_3_5_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "thread_local";
+    version = "0.3.5";
+    authors = [ "Amanieu d'Antras <amanieu@gmail.com>" ];
+    sha256 = "0mkp0sp91aqsk7brgygai4igv751r1754rsxn37mig3ag5rx8np6";
+    inherit dependencies buildDependencies features;
+  };
+  toml_0_4_6_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "toml";
+    version = "0.4.6";
+    authors = [ "Alex Crichton <alex@alexcrichton.com>" ];
+    sha256 = "0rfl7lyb5f67spk69s604nw87f97g7fvv36hj9v88qlr2bwyrn8v";
+    inherit dependencies buildDependencies features;
+  };
+  ucd_util_0_1_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "ucd-util";
+    version = "0.1.1";
+    authors = [ "Andrew Gallant <jamslam@gmail.com>" ];
+    sha256 = "02a8h3siipx52b832xc8m8rwasj6nx9jpiwfldw8hp6k205hgkn0";
+    inherit dependencies buildDependencies features;
+  };
+  unicode_bidi_0_3_4_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "unicode-bidi";
+    version = "0.3.4";
+    authors = [ "The Servo Project Developers" ];
+    sha256 = "0lcd6jasrf8p9p0q20qyf10c6xhvw40m2c4rr105hbk6zy26nj1q";
+    libName = "unicode_bidi";
+    inherit dependencies buildDependencies features;
+  };
+  unicode_normalization_0_1_7_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "unicode-normalization";
+    version = "0.1.7";
+    authors = [ "kwantam <kwantam@gmail.com>" ];
+    sha256 = "1da2hv800pd0wilmn4idwpgv5p510hjxizjcfv6xzb40xcsjd8gs";
+    inherit dependencies buildDependencies features;
+  };
+  unicode_width_0_1_4_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "unicode-width";
+    version = "0.1.4";
+    authors = [ "kwantam <kwantam@gmail.com>" ];
+    sha256 = "1rp7a04icn9y5c0lm74nrd4py0rdl0af8bhdwq7g478n1xifpifl";
+    inherit dependencies buildDependencies features;
+  };
+  unicode_xid_0_1_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "unicode-xid";
+    version = "0.1.0";
+    authors = [ "erick.tryzelaar <erick.tryzelaar@gmail.com>" "kwantam <kwantam@gmail.com>" ];
+    sha256 = "05wdmwlfzxhq3nhsxn6wx4q8dhxzzfb9szsz6wiw092m1rjj01zj";
+    inherit dependencies buildDependencies features;
+  };
+  unreachable_1_0_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "unreachable";
+    version = "1.0.0";
+    authors = [ "Jonathan Reem <jonathan.reem@gmail.com>" ];
+    sha256 = "1am8czbk5wwr25gbp2zr007744fxjshhdqjz9liz7wl4pnv3whcf";
+    inherit dependencies buildDependencies features;
+  };
+  url_1_7_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "url";
+    version = "1.7.0";
+    authors = [ "The rust-url developers" ];
+    sha256 = "0333ynhkp47hna88aamz1zpk4lxyzx4ab9n7yhc75g14w27cv8jj";
+    inherit dependencies buildDependencies features;
+  };
+  utf8_ranges_1_0_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "utf8-ranges";
+    version = "1.0.0";
+    authors = [ "Andrew Gallant <jamslam@gmail.com>" ];
+    sha256 = "0rzmqprwjv9yp1n0qqgahgm24872x6c0xddfym5pfndy7a36vkn0";
+    inherit dependencies buildDependencies features;
+  };
+  vcpkg_0_2_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "vcpkg";
+    version = "0.2.3";
+    authors = [ "Jim McGrath <jimmc2@gmail.com>" ];
+    sha256 = "0achi8sfy0wm4q04gj7nwpq9xfx8ynk6vv4r12a3ijg26hispq0c";
+    inherit dependencies buildDependencies features;
+  };
+  vec_map_0_8_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "vec_map";
+    version = "0.8.1";
+    authors = [ "Alex Crichton <alex@alexcrichton.com>" "Jorge Aparicio <japaricious@gmail.com>" "Alexis Beingessner <a.beingessner@gmail.com>" "Brian Anderson <>" "tbu- <>" "Manish Goregaokar <>" "Aaron Turon <aturon@mozilla.com>" "Adolfo Ochagavía <>" "Niko Matsakis <>" "Steven Fackler <>" "Chase Southwood <csouth3@illinois.edu>" "Eduard Burtescu <>" "Florian Wilkens <>" "Félix Raimundo <>" "Tibor Benke <>" "Markus Siemens <markus@m-siemens.de>" "Josh Branchaud <jbranchaud@gmail.com>" "Huon Wilson <dbau.pp@gmail.com>" "Corey Farwell <coref@rwell.org>" "Aaron Liblong <>" "Nick Cameron <nrc@ncameron.org>" "Patrick Walton <pcwalton@mimiga.net>" "Felix S Klock II <>" "Andrew Paseltiner <apaseltiner@gmail.com>" "Sean McArthur <sean.monstar@gmail.com>" "Vadim Petrochenkov <>" ];
+    sha256 = "1jj2nrg8h3l53d43rwkpkikq5a5x15ms4rf1rw92hp5lrqhi8mpi";
+    inherit dependencies buildDependencies features;
+  };
+  void_1_0_2_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "void";
+    version = "1.0.2";
+    authors = [ "Jonathan Reem <jonathan.reem@gmail.com>" ];
+    sha256 = "0h1dm0dx8dhf56a83k68mijyxigqhizpskwxfdrs1drwv2cdclv3";
+    inherit dependencies buildDependencies features;
+  };
+  winapi_0_2_8_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "winapi";
+    version = "0.2.8";
+    authors = [ "Peter Atashian <retep998@gmail.com>" ];
+    sha256 = "0a45b58ywf12vb7gvj6h3j264nydynmzyqz8d8rqxsj6icqv82as";
+    inherit dependencies buildDependencies features;
+  };
+  winapi_0_3_4_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "winapi";
+    version = "0.3.4";
+    authors = [ "Peter Atashian <retep998@gmail.com>" ];
+    sha256 = "1qbrf5dcnd8j36cawby5d9r5vx07r0l4ryf672pfncnp8895k9lx";
+    build = "build.rs";
+    inherit dependencies buildDependencies features;
+  };
+  winapi_build_0_1_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "winapi-build";
+    version = "0.1.1";
+    authors = [ "Peter Atashian <retep998@gmail.com>" ];
+    sha256 = "1lxlpi87rkhxcwp2ykf1ldw3p108hwm24nywf3jfrvmff4rjhqga";
+    libName = "build";
+    inherit dependencies buildDependencies features;
+  };
+  winapi_i686_pc_windows_gnu_0_4_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "winapi-i686-pc-windows-gnu";
+    version = "0.4.0";
+    authors = [ "Peter Atashian <retep998@gmail.com>" ];
+    sha256 = "05ihkij18r4gamjpxj4gra24514can762imjzlmak5wlzidplzrp";
+    build = "build.rs";
+    inherit dependencies buildDependencies features;
+  };
+  winapi_x86_64_pc_windows_gnu_0_4_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "winapi-x86_64-pc-windows-gnu";
+    version = "0.4.0";
+    authors = [ "Peter Atashian <retep998@gmail.com>" ];
+    sha256 = "0n1ylmlsb8yg1v583i4xy0qmqg42275flvbc51hdqjjfjcl9vlbj";
+    build = "build.rs";
+    inherit dependencies buildDependencies features;
+  };
+  winreg_0_4_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
+    crateName = "winreg";
+    version = "0.4.0";
+    authors = [ "Igor Shaula <gentoo90@gmail.com>" ];
+    sha256 = "1zhk2a6qwyfpvwjd929qs0y6zzxl7g90pnz59qhazfg72m36iwda";
+    inherit dependencies buildDependencies features;
+  };
+  advapi32_sys_0_2_0 = { features?(advapi32_sys_0_2_0_features {}) }: advapi32_sys_0_2_0_ {
+    dependencies = mapFeatures features ([ winapi_0_2_8 ]);
+    buildDependencies = mapFeatures features ([ winapi_build_0_1_1 ]);
+  };
+  advapi32_sys_0_2_0_features = f: updateFeatures f ({
+    advapi32_sys_0_2_0.default = (f.advapi32_sys_0_2_0.default or true);
+    winapi_0_2_8.default = true;
+    winapi_build_0_1_1.default = true;
+  }) [ winapi_0_2_8_features winapi_build_0_1_1_features ];
+  aho_corasick_0_6_4 = { features?(aho_corasick_0_6_4_features {}) }: aho_corasick_0_6_4_ {
+    dependencies = mapFeatures features ([ memchr_2_0_1 ]);
+  };
+  aho_corasick_0_6_4_features = f: updateFeatures f ({
+    aho_corasick_0_6_4.default = (f.aho_corasick_0_6_4.default or true);
+    memchr_2_0_1.default = true;
+  }) [ memchr_2_0_1_features ];
+  ansi_term_0_11_0 = { features?(ansi_term_0_11_0_features {}) }: ansi_term_0_11_0_ {
+    dependencies = (if kernel == "windows" then mapFeatures features ([ winapi_0_3_4 ]) else []);
+  };
+  ansi_term_0_11_0_features = f: updateFeatures f ({
+    ansi_term_0_11_0.default = (f.ansi_term_0_11_0.default or true);
+    winapi_0_3_4.consoleapi = true;
+    winapi_0_3_4.default = true;
+    winapi_0_3_4.errhandlingapi = true;
+    winapi_0_3_4.processenv = true;
+  }) [ winapi_0_3_4_features ];
+  array_tool_1_0_3 = { features?(array_tool_1_0_3_features {}) }: array_tool_1_0_3_ {};
+  array_tool_1_0_3_features = f: updateFeatures f ({
+    array_tool_1_0_3.default = (f.array_tool_1_0_3.default or true);
+  }) [];
+  atty_0_2_10 = { features?(atty_0_2_10_features {}) }: atty_0_2_10_ {
+    dependencies = (if kernel == "redox" then mapFeatures features ([ termion_1_5_1 ]) else [])
+      ++ (if (kernel == "linux" || kernel == "darwin") then mapFeatures features ([ libc_0_2_40 ]) else [])
+      ++ (if kernel == "windows" then mapFeatures features ([ winapi_0_3_4 ]) else []);
+  };
+  atty_0_2_10_features = f: updateFeatures f ({
+    atty_0_2_10.default = (f.atty_0_2_10.default or true);
+    libc_0_2_40.default = (f.libc_0_2_40.default or false);
+    termion_1_5_1.default = true;
+    winapi_0_3_4.consoleapi = true;
+    winapi_0_3_4.default = true;
+    winapi_0_3_4.minwinbase = true;
+    winapi_0_3_4.minwindef = true;
+    winapi_0_3_4.processenv = true;
+    winapi_0_3_4.winbase = true;
+  }) [ termion_1_5_1_features libc_0_2_40_features winapi_0_3_4_features ];
+  bitflags_0_9_1 = { features?(bitflags_0_9_1_features {}) }: bitflags_0_9_1_ {
+    features = mkFeatures (features.bitflags_0_9_1 or {});
+  };
+  bitflags_0_9_1_features = f: updateFeatures f (rec {
+    bitflags_0_9_1.default = (f.bitflags_0_9_1.default or true);
+    bitflags_0_9_1.example_generated =
+      (f.bitflags_0_9_1.example_generated or false) ||
+      (f.bitflags_0_9_1.default or false) ||
+      (bitflags_0_9_1.default or false);
+  }) [];
+  bitflags_1_0_3 = { features?(bitflags_1_0_3_features {}) }: bitflags_1_0_3_ {
+    features = mkFeatures (features.bitflags_1_0_3 or {});
+  };
+  bitflags_1_0_3_features = f: updateFeatures f ({
+    bitflags_1_0_3.default = (f.bitflags_1_0_3.default or true);
+  }) [];
+  cargo_update_1_5_2 = { features?(cargo_update_1_5_2_features {}) }: cargo_update_1_5_2_ {
+    dependencies = mapFeatures features ([ array_tool_1_0_3 clap_2_31_2 git2_0_6_11 json_0_11_13 lazy_static_1_0_0 lazysort_0_2_0 regex_0_2_11 semver_0_9_0 serde_1_0_55 serde_derive_1_0_55 tabwriter_1_0_4 toml_0_4_6 url_1_7_0 ]);
+    buildDependencies = mapFeatures features ([ embed_resource_1_1_4 ]);
+  };
+  cargo_update_1_5_2_features = f: updateFeatures f ({
+    array_tool_1_0_3.default = true;
+    cargo_update_1_5_2.default = (f.cargo_update_1_5_2.default or true);
+    clap_2_31_2.default = true;
+    embed_resource_1_1_4.default = true;
+    git2_0_6_11.default = true;
+    json_0_11_13.default = true;
+    lazy_static_1_0_0.default = true;
+    lazysort_0_2_0.default = true;
+    regex_0_2_11.default = true;
+    semver_0_9_0.default = true;
+    semver_0_9_0.serde = true;
+    serde_1_0_55.default = true;
+    serde_derive_1_0_55.default = true;
+    tabwriter_1_0_4.default = true;
+    toml_0_4_6.default = true;
+    url_1_7_0.default = true;
+  }) [ array_tool_1_0_3_features clap_2_31_2_features git2_0_6_11_features json_0_11_13_features lazy_static_1_0_0_features lazysort_0_2_0_features regex_0_2_11_features semver_0_9_0_features serde_1_0_55_features serde_derive_1_0_55_features tabwriter_1_0_4_features toml_0_4_6_features url_1_7_0_features embed_resource_1_1_4_features ];
+  cc_1_0_15 = { features?(cc_1_0_15_features {}) }: cc_1_0_15_ {
+    dependencies = mapFeatures features ([]);
+    features = mkFeatures (features.cc_1_0_15 or {});
+  };
+  cc_1_0_15_features = f: updateFeatures f (rec {
+    cc_1_0_15.default = (f.cc_1_0_15.default or true);
+    cc_1_0_15.rayon =
+      (f.cc_1_0_15.rayon or false) ||
+      (f.cc_1_0_15.parallel or false) ||
+      (cc_1_0_15.parallel or false);
+  }) [];
+  clap_2_31_2 = { features?(clap_2_31_2_features {}) }: clap_2_31_2_ {
+    dependencies = mapFeatures features ([ bitflags_1_0_3 textwrap_0_9_0 unicode_width_0_1_4 ]
+      ++ (if features.clap_2_31_2.atty or false then [ atty_0_2_10 ] else [])
+      ++ (if features.clap_2_31_2.strsim or false then [ strsim_0_7_0 ] else [])
+      ++ (if features.clap_2_31_2.vec_map or false then [ vec_map_0_8_1 ] else []))
+      ++ (if !(kernel == "windows") then mapFeatures features ([ ]
+      ++ (if features.clap_2_31_2.ansi_term or false then [ ansi_term_0_11_0 ] else [])) else []);
+    features = mkFeatures (features.clap_2_31_2 or {});
+  };
+  clap_2_31_2_features = f: updateFeatures f (rec {
+    ansi_term_0_11_0.default = true;
+    atty_0_2_10.default = true;
+    bitflags_1_0_3.default = true;
+    clap_2_31_2.ansi_term =
+      (f.clap_2_31_2.ansi_term or false) ||
+      (f.clap_2_31_2.color or false) ||
+      (clap_2_31_2.color or false);
+    clap_2_31_2.atty =
+      (f.clap_2_31_2.atty or false) ||
+      (f.clap_2_31_2.color or false) ||
+      (clap_2_31_2.color or false);
+    clap_2_31_2.clippy =
+      (f.clap_2_31_2.clippy or false) ||
+      (f.clap_2_31_2.lints or false) ||
+      (clap_2_31_2.lints or false);
+    clap_2_31_2.color =
+      (f.clap_2_31_2.color or false) ||
+      (f.clap_2_31_2.default or false) ||
+      (clap_2_31_2.default or false);
+    clap_2_31_2.default = (f.clap_2_31_2.default or true);
+    clap_2_31_2.strsim =
+      (f.clap_2_31_2.strsim or false) ||
+      (f.clap_2_31_2.suggestions or false) ||
+      (clap_2_31_2.suggestions or false);
+    clap_2_31_2.suggestions =
+      (f.clap_2_31_2.suggestions or false) ||
+      (f.clap_2_31_2.default or false) ||
+      (clap_2_31_2.default or false);
+    clap_2_31_2.term_size =
+      (f.clap_2_31_2.term_size or false) ||
+      (f.clap_2_31_2.wrap_help or false) ||
+      (clap_2_31_2.wrap_help or false);
+    clap_2_31_2.vec_map =
+      (f.clap_2_31_2.vec_map or false) ||
+      (f.clap_2_31_2.default or false) ||
+      (clap_2_31_2.default or false);
+    clap_2_31_2.yaml =
+      (f.clap_2_31_2.yaml or false) ||
+      (f.clap_2_31_2.doc or false) ||
+      (clap_2_31_2.doc or false);
+    clap_2_31_2.yaml-rust =
+      (f.clap_2_31_2.yaml-rust or false) ||
+      (f.clap_2_31_2.yaml or false) ||
+      (clap_2_31_2.yaml or false);
+    strsim_0_7_0.default = true;
+    textwrap_0_9_0.default = true;
+    textwrap_0_9_0.term_size =
+      (f.textwrap_0_9_0.term_size or false) ||
+      (clap_2_31_2.wrap_help or false) ||
+      (f.clap_2_31_2.wrap_help or false);
+    unicode_width_0_1_4.default = true;
+    vec_map_0_8_1.default = true;
+  }) [ atty_0_2_10_features bitflags_1_0_3_features strsim_0_7_0_features textwrap_0_9_0_features unicode_width_0_1_4_features vec_map_0_8_1_features ansi_term_0_11_0_features ];
+  cmake_0_1_31 = { features?(cmake_0_1_31_features {}) }: cmake_0_1_31_ {
+    dependencies = mapFeatures features ([ cc_1_0_15 ]);
+  };
+  cmake_0_1_31_features = f: updateFeatures f ({
+    cc_1_0_15.default = true;
+    cmake_0_1_31.default = (f.cmake_0_1_31.default or true);
+  }) [ cc_1_0_15_features ];
+  curl_sys_0_4_5 = { features?(curl_sys_0_4_5_features {}) }: curl_sys_0_4_5_ {
+    dependencies = mapFeatures features ([ libc_0_2_40 libz_sys_1_0_18 ])
+      ++ (if (kernel == "linux" || kernel == "darwin") && !(kernel == "darwin") then mapFeatures features ([ openssl_sys_0_9_30 ]) else [])
+      ++ (if abi == "msvc" then mapFeatures features ([]) else [])
+      ++ (if kernel == "windows" then mapFeatures features ([ winapi_0_3_4 ]) else []);
+    buildDependencies = mapFeatures features ([ cc_1_0_15 pkg_config_0_3_11 ]);
+  };
+  curl_sys_0_4_5_features = f: updateFeatures f ({
+    cc_1_0_15.default = true;
+    curl_sys_0_4_5.default = (f.curl_sys_0_4_5.default or true);
+    libc_0_2_40.default = true;
+    libz_sys_1_0_18.default = true;
+    openssl_sys_0_9_30.default = true;
+    pkg_config_0_3_11.default = true;
+    winapi_0_3_4.default = true;
+    winapi_0_3_4.winsock2 = true;
+    winapi_0_3_4.ws2def = true;
+  }) [ libc_0_2_40_features libz_sys_1_0_18_features cc_1_0_15_features pkg_config_0_3_11_features openssl_sys_0_9_30_features winapi_0_3_4_features ];
+  embed_resource_1_1_4 = { features?(embed_resource_1_1_4_features {}) }: embed_resource_1_1_4_ {
+    dependencies = (if kernel == "windows" && abi == "msvc" then mapFeatures features ([ winreg_0_4_0 ]) else []);
+  };
+  embed_resource_1_1_4_features = f: updateFeatures f ({
+    embed_resource_1_1_4.default = (f.embed_resource_1_1_4.default or true);
+    winreg_0_4_0.default = (f.winreg_0_4_0.default or false);
+  }) [ winreg_0_4_0_features ];
+  fuchsia_zircon_0_3_3 = { features?(fuchsia_zircon_0_3_3_features {}) }: fuchsia_zircon_0_3_3_ {
+    dependencies = mapFeatures features ([ bitflags_1_0_3 fuchsia_zircon_sys_0_3_3 ]);
+  };
+  fuchsia_zircon_0_3_3_features = f: updateFeatures f ({
+    bitflags_1_0_3.default = true;
+    fuchsia_zircon_0_3_3.default = (f.fuchsia_zircon_0_3_3.default or true);
+    fuchsia_zircon_sys_0_3_3.default = true;
+  }) [ bitflags_1_0_3_features fuchsia_zircon_sys_0_3_3_features ];
+  fuchsia_zircon_sys_0_3_3 = { features?(fuchsia_zircon_sys_0_3_3_features {}) }: fuchsia_zircon_sys_0_3_3_ {};
+  fuchsia_zircon_sys_0_3_3_features = f: updateFeatures f ({
+    fuchsia_zircon_sys_0_3_3.default = (f.fuchsia_zircon_sys_0_3_3.default or true);
+  }) [];
+  git2_0_6_11 = { features?(git2_0_6_11_features {}) }: git2_0_6_11_ {
+    dependencies = mapFeatures features ([ bitflags_0_9_1 libc_0_2_40 libgit2_sys_0_6_19 url_1_7_0 ])
+      ++ (if (kernel == "linux" || kernel == "darwin") && !(kernel == "darwin") then mapFeatures features ([ ]
+      ++ (if features.git2_0_6_11.openssl-probe or false then [ openssl_probe_0_1_2 ] else [])
+      ++ (if features.git2_0_6_11.openssl-sys or false then [ openssl_sys_0_9_30 ] else [])) else []);
+    features = mkFeatures (features.git2_0_6_11 or {});
+  };
+  git2_0_6_11_features = f: updateFeatures f (rec {
+    bitflags_0_9_1.default = true;
+    git2_0_6_11.curl =
+      (f.git2_0_6_11.curl or false) ||
+      (f.git2_0_6_11.default or false) ||
+      (git2_0_6_11.default or false);
+    git2_0_6_11.default = (f.git2_0_6_11.default or true);
+    git2_0_6_11.https =
+      (f.git2_0_6_11.https or false) ||
+      (f.git2_0_6_11.default or false) ||
+      (git2_0_6_11.default or false);
+    git2_0_6_11.openssl-probe =
+      (f.git2_0_6_11.openssl-probe or false) ||
+      (f.git2_0_6_11.https or false) ||
+      (git2_0_6_11.https or false);
+    git2_0_6_11.openssl-sys =
+      (f.git2_0_6_11.openssl-sys or false) ||
+      (f.git2_0_6_11.https or false) ||
+      (git2_0_6_11.https or false);
+    git2_0_6_11.ssh =
+      (f.git2_0_6_11.ssh or false) ||
+      (f.git2_0_6_11.default or false) ||
+      (git2_0_6_11.default or false);
+    libc_0_2_40.default = true;
+    libgit2_sys_0_6_19.curl =
+      (f.libgit2_sys_0_6_19.curl or false) ||
+      (git2_0_6_11.curl or false) ||
+      (f.git2_0_6_11.curl or false);
+    libgit2_sys_0_6_19.default = true;
+    libgit2_sys_0_6_19.https =
+      (f.libgit2_sys_0_6_19.https or false) ||
+      (git2_0_6_11.https or false) ||
+      (f.git2_0_6_11.https or false);
+    libgit2_sys_0_6_19.ssh =
+      (f.libgit2_sys_0_6_19.ssh or false) ||
+      (git2_0_6_11.ssh or false) ||
+      (f.git2_0_6_11.ssh or false);
+    openssl_probe_0_1_2.default = true;
+    openssl_sys_0_9_30.default = true;
+    url_1_7_0.default = true;
+  }) [ bitflags_0_9_1_features libc_0_2_40_features libgit2_sys_0_6_19_features url_1_7_0_features openssl_probe_0_1_2_features openssl_sys_0_9_30_features ];
+  idna_0_1_4 = { features?(idna_0_1_4_features {}) }: idna_0_1_4_ {
+    dependencies = mapFeatures features ([ matches_0_1_6 unicode_bidi_0_3_4 unicode_normalization_0_1_7 ]);
+  };
+  idna_0_1_4_features = f: updateFeatures f ({
+    idna_0_1_4.default = (f.idna_0_1_4.default or true);
+    matches_0_1_6.default = true;
+    unicode_bidi_0_3_4.default = true;
+    unicode_normalization_0_1_7.default = true;
+  }) [ matches_0_1_6_features unicode_bidi_0_3_4_features unicode_normalization_0_1_7_features ];
+  json_0_11_13 = { features?(json_0_11_13_features {}) }: json_0_11_13_ {};
+  json_0_11_13_features = f: updateFeatures f ({
+    json_0_11_13.default = (f.json_0_11_13.default or true);
+  }) [];
+  kernel32_sys_0_2_2 = { features?(kernel32_sys_0_2_2_features {}) }: kernel32_sys_0_2_2_ {
+    dependencies = mapFeatures features ([ winapi_0_2_8 ]);
+    buildDependencies = mapFeatures features ([ winapi_build_0_1_1 ]);
+  };
+  kernel32_sys_0_2_2_features = f: updateFeatures f ({
+    kernel32_sys_0_2_2.default = (f.kernel32_sys_0_2_2.default or true);
+    winapi_0_2_8.default = true;
+    winapi_build_0_1_1.default = true;
+  }) [ winapi_0_2_8_features winapi_build_0_1_1_features ];
+  lazy_static_1_0_0 = { features?(lazy_static_1_0_0_features {}) }: lazy_static_1_0_0_ {
+    dependencies = mapFeatures features ([]);
+    features = mkFeatures (features.lazy_static_1_0_0 or {});
+  };
+  lazy_static_1_0_0_features = f: updateFeatures f (rec {
+    lazy_static_1_0_0.compiletest_rs =
+      (f.lazy_static_1_0_0.compiletest_rs or false) ||
+      (f.lazy_static_1_0_0.compiletest or false) ||
+      (lazy_static_1_0_0.compiletest or false);
+    lazy_static_1_0_0.default = (f.lazy_static_1_0_0.default or true);
+    lazy_static_1_0_0.nightly =
+      (f.lazy_static_1_0_0.nightly or false) ||
+      (f.lazy_static_1_0_0.spin_no_std or false) ||
+      (lazy_static_1_0_0.spin_no_std or false);
+    lazy_static_1_0_0.spin =
+      (f.lazy_static_1_0_0.spin or false) ||
+      (f.lazy_static_1_0_0.spin_no_std or false) ||
+      (lazy_static_1_0_0.spin_no_std or false);
+  }) [];
+  lazysort_0_2_0 = { features?(lazysort_0_2_0_features {}) }: lazysort_0_2_0_ {
+    dependencies = mapFeatures features ([ rand_0_3_22 ]);
+    features = mkFeatures (features.lazysort_0_2_0 or {});
+  };
+  lazysort_0_2_0_features = f: updateFeatures f ({
+    lazysort_0_2_0.default = (f.lazysort_0_2_0.default or true);
+    rand_0_3_22.default = true;
+  }) [ rand_0_3_22_features ];
+  libc_0_2_40 = { features?(libc_0_2_40_features {}) }: libc_0_2_40_ {
+    features = mkFeatures (features.libc_0_2_40 or {});
+  };
+  libc_0_2_40_features = f: updateFeatures f (rec {
+    libc_0_2_40.default = (f.libc_0_2_40.default or true);
+    libc_0_2_40.use_std =
+      (f.libc_0_2_40.use_std or false) ||
+      (f.libc_0_2_40.default or false) ||
+      (libc_0_2_40.default or false);
+  }) [];
+  libgit2_sys_0_6_19 = { features?(libgit2_sys_0_6_19_features {}) }: libgit2_sys_0_6_19_ {
+    dependencies = mapFeatures features ([ libc_0_2_40 libz_sys_1_0_18 ]
+      ++ (if features.libgit2_sys_0_6_19.curl-sys or false then [ curl_sys_0_4_5 ] else [])
+      ++ (if features.libgit2_sys_0_6_19.libssh2-sys or false then [ libssh2_sys_0_2_7 ] else []))
+      ++ (if (kernel == "linux" || kernel == "darwin") then mapFeatures features ([ ]
+      ++ (if features.libgit2_sys_0_6_19.openssl-sys or false then [ openssl_sys_0_9_30 ] else [])) else []);
+    buildDependencies = mapFeatures features ([ cc_1_0_15 cmake_0_1_31 pkg_config_0_3_11 ]);
+    features = mkFeatures (features.libgit2_sys_0_6_19 or {});
+  };
+  libgit2_sys_0_6_19_features = f: updateFeatures f (rec {
+    cc_1_0_15.default = true;
+    cmake_0_1_31.default = true;
+    curl_sys_0_4_5.default = true;
+    libc_0_2_40.default = true;
+    libgit2_sys_0_6_19.curl-sys =
+      (f.libgit2_sys_0_6_19.curl-sys or false) ||
+      (f.libgit2_sys_0_6_19.curl or false) ||
+      (libgit2_sys_0_6_19.curl or false);
+    libgit2_sys_0_6_19.default = (f.libgit2_sys_0_6_19.default or true);
+    libgit2_sys_0_6_19.libssh2-sys =
+      (f.libgit2_sys_0_6_19.libssh2-sys or false) ||
+      (f.libgit2_sys_0_6_19.ssh or false) ||
+      (libgit2_sys_0_6_19.ssh or false);
+    libgit2_sys_0_6_19.openssl-sys =
+      (f.libgit2_sys_0_6_19.openssl-sys or false) ||
+      (f.libgit2_sys_0_6_19.https or false) ||
+      (libgit2_sys_0_6_19.https or false);
+    libssh2_sys_0_2_7.default = true;
+    libz_sys_1_0_18.default = true;
+    openssl_sys_0_9_30.default = true;
+    pkg_config_0_3_11.default = true;
+  }) [ curl_sys_0_4_5_features libc_0_2_40_features libssh2_sys_0_2_7_features libz_sys_1_0_18_features cc_1_0_15_features cmake_0_1_31_features pkg_config_0_3_11_features openssl_sys_0_9_30_features ];
+  libssh2_sys_0_2_7 = { features?(libssh2_sys_0_2_7_features {}) }: libssh2_sys_0_2_7_ {
+    dependencies = mapFeatures features ([ libc_0_2_40 libz_sys_1_0_18 ])
+      ++ (if abi == "msvc" then mapFeatures features ([]) else [])
+      ++ (if (kernel == "linux" || kernel == "darwin") then mapFeatures features ([ openssl_sys_0_9_30 ]) else []);
+    buildDependencies = mapFeatures features ([ cmake_0_1_31 pkg_config_0_3_11 ]);
+  };
+  libssh2_sys_0_2_7_features = f: updateFeatures f ({
+    cmake_0_1_31.default = true;
+    libc_0_2_40.default = true;
+    libssh2_sys_0_2_7.default = (f.libssh2_sys_0_2_7.default or true);
+    libz_sys_1_0_18.default = true;
+    openssl_sys_0_9_30.default = true;
+    pkg_config_0_3_11.default = true;
+  }) [ libc_0_2_40_features libz_sys_1_0_18_features cmake_0_1_31_features pkg_config_0_3_11_features openssl_sys_0_9_30_features ];
+  libz_sys_1_0_18 = { features?(libz_sys_1_0_18_features {}) }: libz_sys_1_0_18_ {
+    dependencies = mapFeatures features ([ libc_0_2_40 ])
+      ++ (if abi == "msvc" then mapFeatures features ([]) else []);
+    buildDependencies = mapFeatures features ([ cc_1_0_15 pkg_config_0_3_11 ]);
+  };
+  libz_sys_1_0_18_features = f: updateFeatures f ({
+    cc_1_0_15.default = true;
+    libc_0_2_40.default = true;
+    libz_sys_1_0_18.default = (f.libz_sys_1_0_18.default or true);
+    pkg_config_0_3_11.default = true;
+  }) [ libc_0_2_40_features cc_1_0_15_features pkg_config_0_3_11_features ];
+  matches_0_1_6 = { features?(matches_0_1_6_features {}) }: matches_0_1_6_ {};
+  matches_0_1_6_features = f: updateFeatures f ({
+    matches_0_1_6.default = (f.matches_0_1_6.default or true);
+  }) [];
+  memchr_2_0_1 = { features?(memchr_2_0_1_features {}) }: memchr_2_0_1_ {
+    dependencies = mapFeatures features ([ ]
+      ++ (if features.memchr_2_0_1.libc or false then [ libc_0_2_40 ] else []));
+    features = mkFeatures (features.memchr_2_0_1 or {});
+  };
+  memchr_2_0_1_features = f: updateFeatures f (rec {
+    libc_0_2_40.default = (f.libc_0_2_40.default or false);
+    libc_0_2_40.use_std =
+      (f.libc_0_2_40.use_std or false) ||
+      (memchr_2_0_1.use_std or false) ||
+      (f.memchr_2_0_1.use_std or false);
+    memchr_2_0_1.default = (f.memchr_2_0_1.default or true);
+    memchr_2_0_1.libc =
+      (f.memchr_2_0_1.libc or false) ||
+      (f.memchr_2_0_1.default or false) ||
+      (memchr_2_0_1.default or false) ||
+      (f.memchr_2_0_1.use_std or false) ||
+      (memchr_2_0_1.use_std or false);
+    memchr_2_0_1.use_std =
+      (f.memchr_2_0_1.use_std or false) ||
+      (f.memchr_2_0_1.default or false) ||
+      (memchr_2_0_1.default or false);
+  }) [ libc_0_2_40_features ];
+  openssl_probe_0_1_2 = { features?(openssl_probe_0_1_2_features {}) }: openssl_probe_0_1_2_ {};
+  openssl_probe_0_1_2_features = f: updateFeatures f ({
+    openssl_probe_0_1_2.default = (f.openssl_probe_0_1_2.default or true);
+  }) [];
+  openssl_sys_0_9_30 = { features?(openssl_sys_0_9_30_features {}) }: openssl_sys_0_9_30_ {
+    dependencies = mapFeatures features ([ libc_0_2_40 ])
+      ++ (if abi == "msvc" then mapFeatures features ([]) else []);
+    buildDependencies = mapFeatures features ([ cc_1_0_15 pkg_config_0_3_11 ]);
+  };
+  openssl_sys_0_9_30_features = f: updateFeatures f ({
+    cc_1_0_15.default = true;
+    libc_0_2_40.default = true;
+    openssl_sys_0_9_30.default = (f.openssl_sys_0_9_30.default or true);
+    pkg_config_0_3_11.default = true;
+  }) [ libc_0_2_40_features cc_1_0_15_features pkg_config_0_3_11_features ];
+  percent_encoding_1_0_1 = { features?(percent_encoding_1_0_1_features {}) }: percent_encoding_1_0_1_ {};
+  percent_encoding_1_0_1_features = f: updateFeatures f ({
+    percent_encoding_1_0_1.default = (f.percent_encoding_1_0_1.default or true);
+  }) [];
+  pkg_config_0_3_11 = { features?(pkg_config_0_3_11_features {}) }: pkg_config_0_3_11_ {};
+  pkg_config_0_3_11_features = f: updateFeatures f ({
+    pkg_config_0_3_11.default = (f.pkg_config_0_3_11.default or true);
+  }) [];
+  proc_macro2_0_3_8 = { features?(proc_macro2_0_3_8_features {}) }: proc_macro2_0_3_8_ {
+    dependencies = mapFeatures features ([ unicode_xid_0_1_0 ]);
+    features = mkFeatures (features.proc_macro2_0_3_8 or {});
+  };
+  proc_macro2_0_3_8_features = f: updateFeatures f (rec {
+    proc_macro2_0_3_8.default = (f.proc_macro2_0_3_8.default or true);
+    proc_macro2_0_3_8.proc-macro =
+      (f.proc_macro2_0_3_8.proc-macro or false) ||
+      (f.proc_macro2_0_3_8.default or false) ||
+      (proc_macro2_0_3_8.default or false) ||
+      (f.proc_macro2_0_3_8.nightly or false) ||
+      (proc_macro2_0_3_8.nightly or false);
+    unicode_xid_0_1_0.default = true;
+  }) [ unicode_xid_0_1_0_features ];
+  quote_0_5_2 = { features?(quote_0_5_2_features {}) }: quote_0_5_2_ {
+    dependencies = mapFeatures features ([ proc_macro2_0_3_8 ]);
+    features = mkFeatures (features.quote_0_5_2 or {});
+  };
+  quote_0_5_2_features = f: updateFeatures f (rec {
+    proc_macro2_0_3_8.default = (f.proc_macro2_0_3_8.default or false);
+    proc_macro2_0_3_8.proc-macro =
+      (f.proc_macro2_0_3_8.proc-macro or false) ||
+      (quote_0_5_2.proc-macro or false) ||
+      (f.quote_0_5_2.proc-macro or false);
+    quote_0_5_2.default = (f.quote_0_5_2.default or true);
+    quote_0_5_2.proc-macro =
+      (f.quote_0_5_2.proc-macro or false) ||
+      (f.quote_0_5_2.default or false) ||
+      (quote_0_5_2.default or false);
+  }) [ proc_macro2_0_3_8_features ];
+  rand_0_3_22 = { features?(rand_0_3_22_features {}) }: rand_0_3_22_ {
+    dependencies = mapFeatures features ([ libc_0_2_40 rand_0_4_2 ])
+      ++ (if kernel == "fuchsia" then mapFeatures features ([ fuchsia_zircon_0_3_3 ]) else []);
+    features = mkFeatures (features.rand_0_3_22 or {});
+  };
+  rand_0_3_22_features = f: updateFeatures f (rec {
+    fuchsia_zircon_0_3_3.default = true;
+    libc_0_2_40.default = true;
+    rand_0_3_22.default = (f.rand_0_3_22.default or true);
+    rand_0_3_22.i128_support =
+      (f.rand_0_3_22.i128_support or false) ||
+      (f.rand_0_3_22.nightly or false) ||
+      (rand_0_3_22.nightly or false);
+    rand_0_4_2.default = true;
+  }) [ libc_0_2_40_features rand_0_4_2_features fuchsia_zircon_0_3_3_features ];
+  rand_0_4_2 = { features?(rand_0_4_2_features {}) }: rand_0_4_2_ {
+    dependencies = (if kernel == "fuchsia" then mapFeatures features ([ fuchsia_zircon_0_3_3 ]) else [])
+      ++ (if (kernel == "linux" || kernel == "darwin") then mapFeatures features ([ ]
+      ++ (if features.rand_0_4_2.libc or false then [ libc_0_2_40 ] else [])) else [])
+      ++ (if kernel == "windows" then mapFeatures features ([ winapi_0_3_4 ]) else []);
+    features = mkFeatures (features.rand_0_4_2 or {});
+  };
+  rand_0_4_2_features = f: updateFeatures f (rec {
+    fuchsia_zircon_0_3_3.default = true;
+    libc_0_2_40.default = true;
+    rand_0_4_2.default = (f.rand_0_4_2.default or true);
+    rand_0_4_2.i128_support =
+      (f.rand_0_4_2.i128_support or false) ||
+      (f.rand_0_4_2.nightly or false) ||
+      (rand_0_4_2.nightly or false);
+    rand_0_4_2.libc =
+      (f.rand_0_4_2.libc or false) ||
+      (f.rand_0_4_2.std or false) ||
+      (rand_0_4_2.std or false);
+    rand_0_4_2.std =
+      (f.rand_0_4_2.std or false) ||
+      (f.rand_0_4_2.default or false) ||
+      (rand_0_4_2.default or false);
+    winapi_0_3_4.default = true;
+    winapi_0_3_4.minwindef = true;
+    winapi_0_3_4.ntsecapi = true;
+    winapi_0_3_4.profileapi = true;
+    winapi_0_3_4.winnt = true;
+  }) [ fuchsia_zircon_0_3_3_features libc_0_2_40_features winapi_0_3_4_features ];
+  redox_syscall_0_1_37 = { features?(redox_syscall_0_1_37_features {}) }: redox_syscall_0_1_37_ {};
+  redox_syscall_0_1_37_features = f: updateFeatures f ({
+    redox_syscall_0_1_37.default = (f.redox_syscall_0_1_37.default or true);
+  }) [];
+  redox_termios_0_1_1 = { features?(redox_termios_0_1_1_features {}) }: redox_termios_0_1_1_ {
+    dependencies = mapFeatures features ([ redox_syscall_0_1_37 ]);
+  };
+  redox_termios_0_1_1_features = f: updateFeatures f ({
+    redox_syscall_0_1_37.default = true;
+    redox_termios_0_1_1.default = (f.redox_termios_0_1_1.default or true);
+  }) [ redox_syscall_0_1_37_features ];
+  regex_0_2_11 = { features?(regex_0_2_11_features {}) }: regex_0_2_11_ {
+    dependencies = mapFeatures features ([ aho_corasick_0_6_4 memchr_2_0_1 regex_syntax_0_5_6 thread_local_0_3_5 utf8_ranges_1_0_0 ]);
+    features = mkFeatures (features.regex_0_2_11 or {});
+  };
+  regex_0_2_11_features = f: updateFeatures f (rec {
+    aho_corasick_0_6_4.default = true;
+    memchr_2_0_1.default = true;
+    regex_0_2_11.default = (f.regex_0_2_11.default or true);
+    regex_0_2_11.pattern =
+      (f.regex_0_2_11.pattern or false) ||
+      (f.regex_0_2_11.unstable or false) ||
+      (regex_0_2_11.unstable or false);
+    regex_syntax_0_5_6.default = true;
+    thread_local_0_3_5.default = true;
+    utf8_ranges_1_0_0.default = true;
+  }) [ aho_corasick_0_6_4_features memchr_2_0_1_features regex_syntax_0_5_6_features thread_local_0_3_5_features utf8_ranges_1_0_0_features ];
+  regex_syntax_0_5_6 = { features?(regex_syntax_0_5_6_features {}) }: regex_syntax_0_5_6_ {
+    dependencies = mapFeatures features ([ ucd_util_0_1_1 ]);
+  };
+  regex_syntax_0_5_6_features = f: updateFeatures f ({
+    regex_syntax_0_5_6.default = (f.regex_syntax_0_5_6.default or true);
+    ucd_util_0_1_1.default = true;
+  }) [ ucd_util_0_1_1_features ];
+  semver_0_9_0 = { features?(semver_0_9_0_features {}) }: semver_0_9_0_ {
+    dependencies = mapFeatures features ([ semver_parser_0_7_0 ]
+      ++ (if features.semver_0_9_0.serde or false then [ serde_1_0_55 ] else []));
+    features = mkFeatures (features.semver_0_9_0 or {});
+  };
+  semver_0_9_0_features = f: updateFeatures f (rec {
+    semver_0_9_0.default = (f.semver_0_9_0.default or true);
+    semver_0_9_0.serde =
+      (f.semver_0_9_0.serde or false) ||
+      (f.semver_0_9_0.ci or false) ||
+      (semver_0_9_0.ci or false);
+    semver_parser_0_7_0.default = true;
+    serde_1_0_55.default = true;
+  }) [ semver_parser_0_7_0_features serde_1_0_55_features ];
+  semver_parser_0_7_0 = { features?(semver_parser_0_7_0_features {}) }: semver_parser_0_7_0_ {};
+  semver_parser_0_7_0_features = f: updateFeatures f ({
+    semver_parser_0_7_0.default = (f.semver_parser_0_7_0.default or true);
+  }) [];
+  serde_1_0_55 = { features?(serde_1_0_55_features {}) }: serde_1_0_55_ {
+    dependencies = mapFeatures features ([]);
+    features = mkFeatures (features.serde_1_0_55 or {});
+  };
+  serde_1_0_55_features = f: updateFeatures f (rec {
+    serde_1_0_55.default = (f.serde_1_0_55.default or true);
+    serde_1_0_55.serde_derive =
+      (f.serde_1_0_55.serde_derive or false) ||
+      (f.serde_1_0_55.derive or false) ||
+      (serde_1_0_55.derive or false);
+    serde_1_0_55.std =
+      (f.serde_1_0_55.std or false) ||
+      (f.serde_1_0_55.default or false) ||
+      (serde_1_0_55.default or false);
+    serde_1_0_55.unstable =
+      (f.serde_1_0_55.unstable or false) ||
+      (f.serde_1_0_55.alloc or false) ||
+      (serde_1_0_55.alloc or false);
+  }) [];
+  serde_derive_1_0_55 = { features?(serde_derive_1_0_55_features {}) }: serde_derive_1_0_55_ {
+    dependencies = mapFeatures features ([ proc_macro2_0_3_8 quote_0_5_2 syn_0_13_10 ]);
+    features = mkFeatures (features.serde_derive_1_0_55 or {});
+  };
+  serde_derive_1_0_55_features = f: updateFeatures f ({
+    proc_macro2_0_3_8.default = true;
+    quote_0_5_2.default = true;
+    serde_derive_1_0_55.default = (f.serde_derive_1_0_55.default or true);
+    syn_0_13_10.default = true;
+    syn_0_13_10.visit = true;
+  }) [ proc_macro2_0_3_8_features quote_0_5_2_features syn_0_13_10_features ];
+  strsim_0_7_0 = { features?(strsim_0_7_0_features {}) }: strsim_0_7_0_ {};
+  strsim_0_7_0_features = f: updateFeatures f ({
+    strsim_0_7_0.default = (f.strsim_0_7_0.default or true);
+  }) [];
+  syn_0_13_10 = { features?(syn_0_13_10_features {}) }: syn_0_13_10_ {
+    dependencies = mapFeatures features ([ proc_macro2_0_3_8 unicode_xid_0_1_0 ]
+      ++ (if features.syn_0_13_10.quote or false then [ quote_0_5_2 ] else []));
+    features = mkFeatures (features.syn_0_13_10 or {});
+  };
+  syn_0_13_10_features = f: updateFeatures f (rec {
+    proc_macro2_0_3_8.default = (f.proc_macro2_0_3_8.default or false);
+    proc_macro2_0_3_8.proc-macro =
+      (f.proc_macro2_0_3_8.proc-macro or false) ||
+      (syn_0_13_10.proc-macro or false) ||
+      (f.syn_0_13_10.proc-macro or false);
+    quote_0_5_2.default = (f.quote_0_5_2.default or false);
+    quote_0_5_2.proc-macro =
+      (f.quote_0_5_2.proc-macro or false) ||
+      (syn_0_13_10.proc-macro or false) ||
+      (f.syn_0_13_10.proc-macro or false);
+    syn_0_13_10.clone-impls =
+      (f.syn_0_13_10.clone-impls or false) ||
+      (f.syn_0_13_10.default or false) ||
+      (syn_0_13_10.default or false);
+    syn_0_13_10.default = (f.syn_0_13_10.default or true);
+    syn_0_13_10.derive =
+      (f.syn_0_13_10.derive or false) ||
+      (f.syn_0_13_10.default or false) ||
+      (syn_0_13_10.default or false);
+    syn_0_13_10.parsing =
+      (f.syn_0_13_10.parsing or false) ||
+      (f.syn_0_13_10.default or false) ||
+      (syn_0_13_10.default or false);
+    syn_0_13_10.printing =
+      (f.syn_0_13_10.printing or false) ||
+      (f.syn_0_13_10.default or false) ||
+      (syn_0_13_10.default or false);
+    syn_0_13_10.proc-macro =
+      (f.syn_0_13_10.proc-macro or false) ||
+      (f.syn_0_13_10.default or false) ||
+      (syn_0_13_10.default or false);
+    syn_0_13_10.quote =
+      (f.syn_0_13_10.quote or false) ||
+      (f.syn_0_13_10.printing or false) ||
+      (syn_0_13_10.printing or false);
+    unicode_xid_0_1_0.default = true;
+  }) [ proc_macro2_0_3_8_features quote_0_5_2_features unicode_xid_0_1_0_features ];
+  tabwriter_1_0_4 = { features?(tabwriter_1_0_4_features {}) }: tabwriter_1_0_4_ {
+    dependencies = mapFeatures features ([ unicode_width_0_1_4 ]);
+    features = mkFeatures (features.tabwriter_1_0_4 or {});
+  };
+  tabwriter_1_0_4_features = f: updateFeatures f (rec {
+    tabwriter_1_0_4.default = (f.tabwriter_1_0_4.default or true);
+    tabwriter_1_0_4.lazy_static =
+      (f.tabwriter_1_0_4.lazy_static or false) ||
+      (f.tabwriter_1_0_4.ansi_formatting or false) ||
+      (tabwriter_1_0_4.ansi_formatting or false);
+    tabwriter_1_0_4.regex =
+      (f.tabwriter_1_0_4.regex or false) ||
+      (f.tabwriter_1_0_4.ansi_formatting or false) ||
+      (tabwriter_1_0_4.ansi_formatting or false);
+    unicode_width_0_1_4.default = true;
+  }) [ unicode_width_0_1_4_features ];
+  termion_1_5_1 = { features?(termion_1_5_1_features {}) }: termion_1_5_1_ {
+    dependencies = (if !(kernel == "redox") then mapFeatures features ([ libc_0_2_40 ]) else [])
+      ++ (if kernel == "redox" then mapFeatures features ([ redox_syscall_0_1_37 redox_termios_0_1_1 ]) else []);
+  };
+  termion_1_5_1_features = f: updateFeatures f ({
+    libc_0_2_40.default = true;
+    redox_syscall_0_1_37.default = true;
+    redox_termios_0_1_1.default = true;
+    termion_1_5_1.default = (f.termion_1_5_1.default or true);
+  }) [ libc_0_2_40_features redox_syscall_0_1_37_features redox_termios_0_1_1_features ];
+  textwrap_0_9_0 = { features?(textwrap_0_9_0_features {}) }: textwrap_0_9_0_ {
+    dependencies = mapFeatures features ([ unicode_width_0_1_4 ]);
+  };
+  textwrap_0_9_0_features = f: updateFeatures f ({
+    textwrap_0_9_0.default = (f.textwrap_0_9_0.default or true);
+    unicode_width_0_1_4.default = true;
+  }) [ unicode_width_0_1_4_features ];
+  thread_local_0_3_5 = { features?(thread_local_0_3_5_features {}) }: thread_local_0_3_5_ {
+    dependencies = mapFeatures features ([ lazy_static_1_0_0 unreachable_1_0_0 ]);
+  };
+  thread_local_0_3_5_features = f: updateFeatures f ({
+    lazy_static_1_0_0.default = true;
+    thread_local_0_3_5.default = (f.thread_local_0_3_5.default or true);
+    unreachable_1_0_0.default = true;
+  }) [ lazy_static_1_0_0_features unreachable_1_0_0_features ];
+  toml_0_4_6 = { features?(toml_0_4_6_features {}) }: toml_0_4_6_ {
+    dependencies = mapFeatures features ([ serde_1_0_55 ]);
+  };
+  toml_0_4_6_features = f: updateFeatures f ({
+    serde_1_0_55.default = true;
+    toml_0_4_6.default = (f.toml_0_4_6.default or true);
+  }) [ serde_1_0_55_features ];
+  ucd_util_0_1_1 = { features?(ucd_util_0_1_1_features {}) }: ucd_util_0_1_1_ {};
+  ucd_util_0_1_1_features = f: updateFeatures f ({
+    ucd_util_0_1_1.default = (f.ucd_util_0_1_1.default or true);
+  }) [];
+  unicode_bidi_0_3_4 = { features?(unicode_bidi_0_3_4_features {}) }: unicode_bidi_0_3_4_ {
+    dependencies = mapFeatures features ([ matches_0_1_6 ]);
+    features = mkFeatures (features.unicode_bidi_0_3_4 or {});
+  };
+  unicode_bidi_0_3_4_features = f: updateFeatures f (rec {
+    matches_0_1_6.default = true;
+    unicode_bidi_0_3_4.default = (f.unicode_bidi_0_3_4.default or true);
+    unicode_bidi_0_3_4.flame =
+      (f.unicode_bidi_0_3_4.flame or false) ||
+      (f.unicode_bidi_0_3_4.flame_it or false) ||
+      (unicode_bidi_0_3_4.flame_it or false);
+    unicode_bidi_0_3_4.flamer =
+      (f.unicode_bidi_0_3_4.flamer or false) ||
+      (f.unicode_bidi_0_3_4.flame_it or false) ||
+      (unicode_bidi_0_3_4.flame_it or false);
+    unicode_bidi_0_3_4.serde =
+      (f.unicode_bidi_0_3_4.serde or false) ||
+      (f.unicode_bidi_0_3_4.with_serde or false) ||
+      (unicode_bidi_0_3_4.with_serde or false);
+  }) [ matches_0_1_6_features ];
+  unicode_normalization_0_1_7 = { features?(unicode_normalization_0_1_7_features {}) }: unicode_normalization_0_1_7_ {};
+  unicode_normalization_0_1_7_features = f: updateFeatures f ({
+    unicode_normalization_0_1_7.default = (f.unicode_normalization_0_1_7.default or true);
+  }) [];
+  unicode_width_0_1_4 = { features?(unicode_width_0_1_4_features {}) }: unicode_width_0_1_4_ {
+    features = mkFeatures (features.unicode_width_0_1_4 or {});
+  };
+  unicode_width_0_1_4_features = f: updateFeatures f ({
+    unicode_width_0_1_4.default = (f.unicode_width_0_1_4.default or true);
+  }) [];
+  unicode_xid_0_1_0 = { features?(unicode_xid_0_1_0_features {}) }: unicode_xid_0_1_0_ {
+    features = mkFeatures (features.unicode_xid_0_1_0 or {});
+  };
+  unicode_xid_0_1_0_features = f: updateFeatures f ({
+    unicode_xid_0_1_0.default = (f.unicode_xid_0_1_0.default or true);
+  }) [];
+  unreachable_1_0_0 = { features?(unreachable_1_0_0_features {}) }: unreachable_1_0_0_ {
+    dependencies = mapFeatures features ([ void_1_0_2 ]);
+  };
+  unreachable_1_0_0_features = f: updateFeatures f ({
+    unreachable_1_0_0.default = (f.unreachable_1_0_0.default or true);
+    void_1_0_2.default = (f.void_1_0_2.default or false);
+  }) [ void_1_0_2_features ];
+  url_1_7_0 = { features?(url_1_7_0_features {}) }: url_1_7_0_ {
+    dependencies = mapFeatures features ([ idna_0_1_4 matches_0_1_6 percent_encoding_1_0_1 ]);
+    features = mkFeatures (features.url_1_7_0 or {});
+  };
+  url_1_7_0_features = f: updateFeatures f (rec {
+    idna_0_1_4.default = true;
+    matches_0_1_6.default = true;
+    percent_encoding_1_0_1.default = true;
+    url_1_7_0.default = (f.url_1_7_0.default or true);
+    url_1_7_0.encoding =
+      (f.url_1_7_0.encoding or false) ||
+      (f.url_1_7_0.query_encoding or false) ||
+      (url_1_7_0.query_encoding or false);
+    url_1_7_0.heapsize =
+      (f.url_1_7_0.heapsize or false) ||
+      (f.url_1_7_0.heap_size or false) ||
+      (url_1_7_0.heap_size or false);
+  }) [ idna_0_1_4_features matches_0_1_6_features percent_encoding_1_0_1_features ];
+  utf8_ranges_1_0_0 = { features?(utf8_ranges_1_0_0_features {}) }: utf8_ranges_1_0_0_ {};
+  utf8_ranges_1_0_0_features = f: updateFeatures f ({
+    utf8_ranges_1_0_0.default = (f.utf8_ranges_1_0_0.default or true);
+  }) [];
+  vcpkg_0_2_3 = { features?(vcpkg_0_2_3_features {}) }: vcpkg_0_2_3_ {};
+  vcpkg_0_2_3_features = f: updateFeatures f ({
+    vcpkg_0_2_3.default = (f.vcpkg_0_2_3.default or true);
+  }) [];
+  vec_map_0_8_1 = { features?(vec_map_0_8_1_features {}) }: vec_map_0_8_1_ {
+    dependencies = mapFeatures features ([]);
+    features = mkFeatures (features.vec_map_0_8_1 or {});
+  };
+  vec_map_0_8_1_features = f: updateFeatures f (rec {
+    vec_map_0_8_1.default = (f.vec_map_0_8_1.default or true);
+    vec_map_0_8_1.serde =
+      (f.vec_map_0_8_1.serde or false) ||
+      (f.vec_map_0_8_1.eders or false) ||
+      (vec_map_0_8_1.eders or false);
+  }) [];
+  void_1_0_2 = { features?(void_1_0_2_features {}) }: void_1_0_2_ {
+    features = mkFeatures (features.void_1_0_2 or {});
+  };
+  void_1_0_2_features = f: updateFeatures f (rec {
+    void_1_0_2.default = (f.void_1_0_2.default or true);
+    void_1_0_2.std =
+      (f.void_1_0_2.std or false) ||
+      (f.void_1_0_2.default or false) ||
+      (void_1_0_2.default or false);
+  }) [];
+  winapi_0_2_8 = { features?(winapi_0_2_8_features {}) }: winapi_0_2_8_ {};
+  winapi_0_2_8_features = f: updateFeatures f ({
+    winapi_0_2_8.default = (f.winapi_0_2_8.default or true);
+  }) [];
+  winapi_0_3_4 = { features?(winapi_0_3_4_features {}) }: winapi_0_3_4_ {
+    dependencies = (if kernel == "i686-pc-windows-gnu" then mapFeatures features ([ winapi_i686_pc_windows_gnu_0_4_0 ]) else [])
+      ++ (if kernel == "x86_64-pc-windows-gnu" then mapFeatures features ([ winapi_x86_64_pc_windows_gnu_0_4_0 ]) else []);
+    features = mkFeatures (features.winapi_0_3_4 or {});
+  };
+  winapi_0_3_4_features = f: updateFeatures f ({
+    winapi_0_3_4.default = (f.winapi_0_3_4.default or true);
+    winapi_i686_pc_windows_gnu_0_4_0.default = true;
+    winapi_x86_64_pc_windows_gnu_0_4_0.default = true;
+  }) [ winapi_i686_pc_windows_gnu_0_4_0_features winapi_x86_64_pc_windows_gnu_0_4_0_features ];
+  winapi_build_0_1_1 = { features?(winapi_build_0_1_1_features {}) }: winapi_build_0_1_1_ {};
+  winapi_build_0_1_1_features = f: updateFeatures f ({
+    winapi_build_0_1_1.default = (f.winapi_build_0_1_1.default or true);
+  }) [];
+  winapi_i686_pc_windows_gnu_0_4_0 = { features?(winapi_i686_pc_windows_gnu_0_4_0_features {}) }: winapi_i686_pc_windows_gnu_0_4_0_ {};
+  winapi_i686_pc_windows_gnu_0_4_0_features = f: updateFeatures f ({
+    winapi_i686_pc_windows_gnu_0_4_0.default = (f.winapi_i686_pc_windows_gnu_0_4_0.default or true);
+  }) [];
+  winapi_x86_64_pc_windows_gnu_0_4_0 = { features?(winapi_x86_64_pc_windows_gnu_0_4_0_features {}) }: winapi_x86_64_pc_windows_gnu_0_4_0_ {};
+  winapi_x86_64_pc_windows_gnu_0_4_0_features = f: updateFeatures f ({
+    winapi_x86_64_pc_windows_gnu_0_4_0.default = (f.winapi_x86_64_pc_windows_gnu_0_4_0.default or true);
+  }) [];
+  winreg_0_4_0 = { features?(winreg_0_4_0_features {}) }: winreg_0_4_0_ {
+    dependencies = mapFeatures features ([ advapi32_sys_0_2_0 kernel32_sys_0_2_2 winapi_0_2_8 ]);
+    features = mkFeatures (features.winreg_0_4_0 or {});
+  };
+  winreg_0_4_0_features = f: updateFeatures f (rec {
+    advapi32_sys_0_2_0.default = true;
+    kernel32_sys_0_2_2.default = true;
+    winapi_0_2_8.default = true;
+    winreg_0_4_0.default = (f.winreg_0_4_0.default or true);
+    winreg_0_4_0.ktmw32-sys =
+      (f.winreg_0_4_0.ktmw32-sys or false) ||
+      (f.winreg_0_4_0.transactions or false) ||
+      (winreg_0_4_0.transactions or false);
+    winreg_0_4_0.rustc-serialize =
+      (f.winreg_0_4_0.rustc-serialize or false) ||
+      (f.winreg_0_4_0.serialization-rustc or false) ||
+      (winreg_0_4_0.serialization-rustc or false);
+    winreg_0_4_0.serialization-rustc =
+      (f.winreg_0_4_0.serialization-rustc or false) ||
+      (f.winreg_0_4_0.default or false) ||
+      (winreg_0_4_0.default or false);
+    winreg_0_4_0.transactions =
+      (f.winreg_0_4_0.transactions or false) ||
+      (f.winreg_0_4_0.default or false) ||
+      (winreg_0_4_0.default or false) ||
+      (f.winreg_0_4_0.serialization-rustc or false) ||
+      (winreg_0_4_0.serialization-rustc or false);
+  }) [ advapi32_sys_0_2_0_features kernel32_sys_0_2_2_features winapi_0_2_8_features ];
+}
diff --git a/nixpkgs/pkgs/tools/package-management/cargo-update/default.nix b/nixpkgs/pkgs/tools/package-management/cargo-update/default.nix
new file mode 100644
index 000000000000..50dc748e07ef
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/cargo-update/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, callPackage, defaultCrateOverrides, fetchFromGitHub, cmake, curl, libssh2, libgit2, openssl, zlib }:
+
+((callPackage ./cargo-update.nix {}).cargo_update {}).override {
+  crateOverrides = defaultCrateOverrides // {
+    cargo-update = attrs: rec {
+      name = "cargo-update-${version}";
+      version = "1.5.2";
+
+      src = fetchFromGitHub {
+        owner = "nabijaczleweli";
+        repo = "cargo-update";
+        rev = "v${version}";
+        sha256 = "1bvrdgcw2akzd78wgvsisvghi8pvdk3szyg9s46qxv4km9sf88s7";
+      };
+
+      nativeBuildInputs = [ cmake ];
+      buildInputs = [ libssh2 libgit2 openssl zlib ]
+        ++ stdenv.lib.optional stdenv.isDarwin curl;
+
+      meta = with stdenv.lib; {
+        description = "A cargo subcommand for checking and applying updates to installed executables";
+        homepage = https://github.com/nabijaczleweli/cargo-update;
+        license = with licenses; [ mit ];
+        maintainers = with maintainers; [ gerschtli ];
+        platforms = platforms.all;
+      };
+    };
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/cde/default.nix b/nixpkgs/pkgs/tools/package-management/cde/default.nix
new file mode 100644
index 000000000000..5354fbb5e5ed
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/cde/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "cde";
+  version = "0.1";
+
+  src = fetchFromGitHub {
+    owner = "pgbovine";
+    repo = "CDE";
+    sha256 = "0raiz7pczkbnzxpg7g59v7gdp1ipkwgms2vh3431snw1va1gjzmk";
+    rev = "v${version}";
+  };
+
+  # The build is small, so there should be no problem
+  # running this locally. There is also a use case for
+  # older systems, where modern binaries might not be
+  # useful.
+  preferLocalBuild = true;
+
+  patchBuild = ''
+    sed '/install/d' $src/Makefile > $src/Makefile
+  '';
+  
+  installPhase = ''
+    mkdir -p $out/bin
+    cp cde $out/bin
+    cp cde-exec $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/pgbovine/CDE;
+    description = "A packaging tool for building portable packages";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.rlupton20 ];
+    platforms = platforms.linux;
+    # error: architecture aarch64 is not supported by strace
+    badPlatforms = [ "aarch64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/checkinstall/default.nix b/nixpkgs/pkgs/tools/package-management/checkinstall/default.nix
new file mode 100644
index 000000000000..6605d9de65ae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/checkinstall/default.nix
@@ -0,0 +1,74 @@
+{stdenv, fetchurl, gettext}:
+
+assert stdenv.isLinux && stdenv ? glibc;
+
+stdenv.mkDerivation {
+  name = "checkinstall-1.6.2";
+
+  src = fetchurl {
+    url = http://www.asic-linux.com.mx/~izto/checkinstall/files/source/checkinstall-1.6.2.tar.gz;
+    sha256 = "1x4kslyvfd6lm6zd1ylbq2pjxrafb77ydfjaqi16sa5qywn1jqfw";
+  };
+
+  patches = [
+    # Include empty directories created by the installation script in
+    # generated packages.  (E.g., if a `make install' does `mkdir
+    # /var/lib/mystuff', then /var/lib/mystuff should be included in
+    # the package.)
+    ./empty-dirs.patch
+
+    # Implement the getxattr(), lgetxattr(), __open_2() and
+    # __open64_2() functions.  Needed for doing builds on Ubuntu 8.10.
+    ./missing-functions.patch
+
+    # Don't include directories in the Debian `conffiles' file.
+    ./etc-dirs.patch
+
+    # Support Glibc >= 2.8.
+    ./glibc-check.patch
+
+    # Fix a `conflicting types for 'scandir'' error on Glibc 2.11.
+    ./scandir.patch
+
+    # Fix a `conflicting types for 'readlink'' error since Glibc 2.19
+    ./readlink-types.patch
+
+    # Fix BuildRoot handling in RPM builds.
+    ./set-buildroot.patch
+  ]
+
+  ++ stdenv.lib.optional (stdenv.hostPlatform.system == "x86_64-linux") 
+    # Force use of old memcpy so that installwatch works on Glibc <
+    # 2.14.
+    ./use-old-memcpy.patch;
+
+  buildInputs = [gettext];
+
+  hardeningDisable = [ "fortify" ];
+
+  preBuild = ''
+    makeFlagsArray=(PREFIX=$out)
+
+    substituteInPlace checkinstall --replace /usr/local/lib/checkinstall $out/lib/checkinstall
+    substituteInPlace checkinstallrc-dist --replace /usr/local $out
+
+    substituteInPlace installwatch/create-localdecls \
+      --replace /usr/include/unistd.h ${stdenv.glibc.dev}/include/unistd.h
+  '';
+
+  postInstall =
+    # Clear the RPATH, otherwise installwatch.so won't work properly
+    # as an LD_PRELOADed library on applications that load against a
+    # different Glibc.
+    ''
+       patchelf --set-rpath "" $out/lib/installwatch.so
+    '';
+
+  meta = {
+    homepage = http://checkinstall.izto.org/;
+    description = "A tool for automatically generating Slackware, RPM or Debian packages when doing `make install'";
+    maintainers = [ stdenv.lib.maintainers.eelco ];
+    platforms = stdenv.lib.platforms.linux;
+    license = stdenv.lib.licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/checkinstall/empty-dirs.patch b/nixpkgs/pkgs/tools/package-management/checkinstall/empty-dirs.patch
new file mode 100644
index 000000000000..9a3e29c84c12
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/checkinstall/empty-dirs.patch
@@ -0,0 +1,49 @@
+diff -rc checkinstall-orig/checkinstall checkinstall/checkinstall
+*** checkinstall-orig/checkinstall	2009-03-12 13:40:24.000000000 +0100
+--- checkinstall/checkinstall	2009-03-27 14:51:55.000000000 +0100
+***************
+*** 1635,1644 ****
+  
+  	# Find regular files first
+  	[ $DEBUG -gt 0 ] && echo "debug: BASE_TMP_DIR: $BASE_TMP_DIR"
+! 	cat /${TMP_DIR}/newfiles.tmp | egrep -v '^[-0-9][0-9]*[[:space:]]*(unlink|access)' | cut -f 3 | egrep -v "^(/dev|$BASE_TMP_DIR|/tmp)" | sort -u > /${TMP_DIR}/newfiles
+  
+  	# symlinks are next
+! 	cat /${TMP_DIR}/newfiles.tmp | egrep -v '^[-0-9][0-9]*[[:space:]]*(unlink|access)' | cut -f 4 | egrep -v "^(/dev|$BASE_TMP_DIR|/tmp)" | grep -v "#success" | sort -u  >> /${TMP_DIR}/newfiles
+          # Create another list of modified files that exclude all files the
+          # install script wanted to create but did not, e.g because they already
+          # existed.
+--- 1635,1648 ----
+  
+  	# Find regular files first
+  	[ $DEBUG -gt 0 ] && echo "debug: BASE_TMP_DIR: $BASE_TMP_DIR"
+! 	cat /${TMP_DIR}/newfiles.tmp | egrep -v '^[-0-9][0-9]*[[:space:]]*(unlink|access|mkdir)' | cut -f 3 | egrep -v "^(/dev|$BASE_TMP_DIR|/tmp)" | sort -u > /${TMP_DIR}/newfiles
+  
+  	# symlinks are next
+! 	cat /${TMP_DIR}/newfiles.tmp | egrep -v '^[-0-9][0-9]*[[:space:]]*(unlink|access|mkdir)' | cut -f 4 | egrep -v "^(/dev|$BASE_TMP_DIR|/tmp)" | grep -v "#success" | sort -u  >> /${TMP_DIR}/newfiles
+!         
+! 	# And finally newly created directories.
+! 	cat /${TMP_DIR}/newfiles.tmp | egrep '^0[[:space:]]+mkdir[[:space:]]+' | cut -f 3 | egrep -v "^(/dev|$BASE_TMP_DIR|/tmp)" | sort -u >> /${TMP_DIR}/newfiles
+!         
+          # Create another list of modified files that exclude all files the
+          # install script wanted to create but did not, e.g because they already
+          # existed.
+***************
+*** 1738,1746 ****
+  	cd /
+  
+  	( cat /${TMP_DIR}/newfiles | while read i; do 
+! 	      if [ ! -d "${TRANSLROOT}${i}" -o -L "${TRANSLROOT}${i}" ]; then
+! 	      echo ".${i}"
+! 	   fi
+  	done ) > /${TMP_DIR}/newfiles-tar
+  
+          # Here it gets tricky: we need to copy all new files to our build dir,
+--- 1742,1748 ----
+  	cd /
+  
+  	( cat /${TMP_DIR}/newfiles | while read i; do 
+! 	    echo ".${i}"
+  	done ) > /${TMP_DIR}/newfiles-tar
+  
+          # Here it gets tricky: we need to copy all new files to our build dir,
diff --git a/nixpkgs/pkgs/tools/package-management/checkinstall/etc-dirs.patch b/nixpkgs/pkgs/tools/package-management/checkinstall/etc-dirs.patch
new file mode 100644
index 000000000000..a811e4afbb97
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/checkinstall/etc-dirs.patch
@@ -0,0 +1,25 @@
+diff -rc checkinstall-orig/checkinstall checkinstall/checkinstall
+*** checkinstall-orig/checkinstall	2009-03-27 17:07:26.000000000 +0100
+--- checkinstall/checkinstall	2009-04-14 16:34:08.000000000 +0200
+***************
+*** 2607,2615 ****
+     chmod 755 $BUILD_DIR/DEBIAN/postrm
+  fi
+  
+! # Tag files in /etc to be conffiles
+  find $BUILD_DIR/etc 2> /dev/null | sed -e "s,$BUILD_DIR,," | \
+! 	grep -v '^/etc$' > $BUILD_DIR/DEBIAN/conffiles
+  
+  # The package will be saved here (ignores <epoch>: prefix):
+  DEBPKG="${DIRECTORIO_FUENTE}/${NAME}_`echo ${VERSION} | sed -e 's/^[0123456789]*://'`-${RELEASE}_${ARCHITECTURE}.deb"
+--- 2607,2616 ----
+     chmod 755 $BUILD_DIR/DEBIAN/postrm
+  fi
+  
+! # Tag non-directory files in /etc to be conffiles
+  find $BUILD_DIR/etc 2> /dev/null | sed -e "s,$BUILD_DIR,," | \
+!         (while read fn; do test ! -d "$BUILD_DIR/$fn" && echo "$fn"; done) \
+!         > $BUILD_DIR/DEBIAN/conffiles
+  
+  # The package will be saved here (ignores <epoch>: prefix):
+  DEBPKG="${DIRECTORIO_FUENTE}/${NAME}_`echo ${VERSION} | sed -e 's/^[0123456789]*://'`-${RELEASE}_${ARCHITECTURE}.deb"
diff --git a/nixpkgs/pkgs/tools/package-management/checkinstall/glibc-check.patch b/nixpkgs/pkgs/tools/package-management/checkinstall/glibc-check.patch
new file mode 100644
index 000000000000..7f8cbccae8e5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/checkinstall/glibc-check.patch
@@ -0,0 +1,71 @@
+diff -x '*~' -rc checkinstall-1.6.2pre20081116-orig/installwatch/create-localdecls checkinstall-1.6.2pre20081116/installwatch/create-localdecls
+*** checkinstall-1.6.2pre20081116-orig/installwatch/create-localdecls	2008-11-16 17:18:58.000000000 +0100
+--- checkinstall-1.6.2pre20081116/installwatch/create-localdecls	2009-09-18 17:01:13.000000000 +0200
+***************
+*** 46,52 ****
+  echo -n 'Checking libc version... '
+  gcc -Wall -o libctest libctest.c
+  VERSION=`ldd libctest | grep libc\\.so | awk '{print $1}'`
+- rm libctest
+  echo $VERSION
+  echo "#define LIBC_VERSION \"$VERSION\"" >> $OUTFILE
+  if test "$VERSION" = 'libc.so.5' ; then
+--- 46,51 ----
+***************
+*** 56,62 ****
+  
+  if test "$VERSION" = 'libc.so.6' ; then
+  	echo -n 'Checking glibc subversion... '
+! 	tmp="`ldd /bin/sh | grep libc.so 2> /dev/null`"
+  	LibcPath=`expr "$tmp" : '[^/]*\(/[^ ]*\)'`
+  	tmp="`strings $LibcPath | grep -i 'c library'`"
+  	OsLibcMajor=`expr "$tmp" : '.* \([0-9][0-9]*\)'`
+--- 55,61 ----
+  
+  if test "$VERSION" = 'libc.so.6' ; then
+  	echo -n 'Checking glibc subversion... '
+! 	tmp="`ldd libctest | grep libc.so 2> /dev/null`"
+  	LibcPath=`expr "$tmp" : '[^/]*\(/[^ ]*\)'`
+  	tmp="`strings $LibcPath | grep -i 'c library'`"
+  	OsLibcMajor=`expr "$tmp" : '.* \([0-9][0-9]*\)'`
+***************
+*** 86,103 ****
+  		6)
+  			echo '#define GLIBC_MINOR 6' >> $OUTFILE
+  			SUBVERSION='glibc-2.6' ;;
+! 		7)
+  			echo '#define GLIBC_MINOR 7' >> $OUTFILE
+  			SUBVERSION='glibc-2.7' ;;
+  		*)
+- 			echo 'Treated as glibc >= 2.1 (finger crossed)'
+  			echo '#define GLIBC_MINOR 1' >> $OUTFILE
+  			SUBVERSION='glibc-2.1' ;;
+  	        esac
+  		;;
+  	esac
+  fi
+  
+  echo >> $OUTFILE
+  echo '#endif' >> $OUTFILE
+  
+--- 85,104 ----
+  		6)
+  			echo '#define GLIBC_MINOR 6' >> $OUTFILE
+  			SUBVERSION='glibc-2.6' ;;
+! 		7|8|9|10|11|12|13|14|15|16|17|18)
+  			echo '#define GLIBC_MINOR 7' >> $OUTFILE
+  			SUBVERSION='glibc-2.7' ;;
+  		*)
+  			echo '#define GLIBC_MINOR 1' >> $OUTFILE
+  			SUBVERSION='glibc-2.1' ;;
+  	        esac
+  		;;
+  	esac
++         echo $SUBVERSION
+  fi
+  
++ rm libctest
++ 
+  echo >> $OUTFILE
+  echo '#endif' >> $OUTFILE
+  
diff --git a/nixpkgs/pkgs/tools/package-management/checkinstall/missing-functions.patch b/nixpkgs/pkgs/tools/package-management/checkinstall/missing-functions.patch
new file mode 100644
index 000000000000..02066134b2ed
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/checkinstall/missing-functions.patch
@@ -0,0 +1,162 @@
+diff -rc checkinstall-orig/installwatch/installwatch.c checkinstall/installwatch/installwatch.c
+*** checkinstall-orig/installwatch/installwatch.c	2009-03-12 13:40:24.000000000 +0100
+--- checkinstall/installwatch/installwatch.c	2009-03-27 22:42:19.000000000 +0100
+***************
+*** 110,115 ****
+--- 110,117 ----
+  static int (*true_setxattr)(const char *,const char *,const void *,
+                              size_t, int);
+  static int (*true_removexattr)(const char *,const char *);
++ static ssize_t (*true_getxattr)(const char *,const char *,const void *,size_t);
++ static ssize_t (*true_lgetxattr)(const char *,const char *,const void *,size_t);
+  
+  #if(GLIBC_MINOR >= 1)
+  
+***************
+*** 369,374 ****
+--- 371,378 ----
+  	true_unlink      = dlsym(libc_handle, "unlink");
+  	true_utime       = dlsym(libc_handle, "utime");
+  	true_setxattr    = dlsym(libc_handle, "setxattr");
++ 	true_getxattr    = dlsym(libc_handle, "getxattr");
++ 	true_lgetxattr   = dlsym(libc_handle, "lgetxattr");
+          true_utimes      = dlsym(libc_handle, "utimes");
+          true_access      = dlsym(libc_handle, "access");
+  
+***************
+*** 3494,3499 ****
+--- 3498,3587 ----
+          return result;
+  }
+  
++ int getxattr (const char *pathname, const char *name,
++               const void *value, size_t size)
++ {
++         int result;
++         instw_t instw;
++ 	int status;
++ 
++         REFCOUNT;
++ 
++         if (!libc_handle)
++                initialize();
++ 
++ #if DEBUG
++         debug(2,"getxattr(%s,%s)\n",pathname,name);
++ #endif
++ 
++          /* We were asked to work in "real" mode */
++         if( !(__instw.gstatus & INSTW_INITIALIZED) ||
++            !(__instw.gstatus & INSTW_OKWRAP) ) {
++                result=true_getxattr(pathname,name,value,size);
++                return result;
++         }
++ 
++         instw_new(&instw);
++         instw_setpath(&instw,pathname);
++ 	instw_getstatus(&instw,&status);
++ 
++ #if DEBUG
++         instw_print(&instw);
++ #endif
++ 
++ 	if(status&INSTW_TRANSLATED) {
++             result=true_getxattr(instw.translpath,name,value,size);
++         } else {
++             result=true_getxattr(instw.path,name,value,size);
++         }
++ 
++         instw_delete(&instw);
++ 
++         return result;
++ }
++ 
++ int lgetxattr (const char *pathname, const char *name,
++               const void *value, size_t size)
++ {
++         int result;
++         instw_t instw;
++ 	int status;
++ 
++         REFCOUNT;
++ 
++         if (!libc_handle)
++                initialize();
++ 
++ #if DEBUG
++         debug(2,"lgetxattr(%s,%s)\n",pathname,name);
++ #endif
++ 
++          /* We were asked to work in "real" mode */
++         if( !(__instw.gstatus & INSTW_INITIALIZED) ||
++            !(__instw.gstatus & INSTW_OKWRAP) ) {
++                result=true_lgetxattr(pathname,name,value,size);
++                return result;
++         }
++ 
++         instw_new(&instw);
++         instw_setpath(&instw,pathname);
++ 	instw_getstatus(&instw,&status);
++ 
++ #if DEBUG
++         instw_print(&instw);
++ #endif
++ 
++ 	if(status&INSTW_TRANSLATED) {
++             result=true_lgetxattr(instw.translpath,name,value,size);
++         } else {
++             result=true_lgetxattr(instw.path,name,value,size);
++         }
++ 
++         instw_delete(&instw);
++ 
++         return result;
++ }
++ 
+  #if(GLIBC_MINOR >= 1)
+  
+  int creat64(const char *pathname, __mode_t mode) {
+***************
+*** 3663,3668 ****
+--- 3751,3791 ----
+  	return result;
+  }
+  
++ int __open_2(const char *pathname, int flags, ...) {
++ 	va_list ap;
++ 	mode_t mode;
++         
++ #if DEBUG
++ 	debug(2,"__open_2(%s,%d,mode)\n",pathname,flags);
++ #endif
++ 
++ 	va_start(ap, flags);
++ 	mode = va_arg(ap, mode_t);
++ 	va_end(ap);
++         
++         /* The open() function in Glibc 2.9 is an always-inline
++            function that may call __open_2(), so it's important that
++            we handle it.  I don't know what __open_2() is supposed to
++            do, but redirecting it to open() seems to work fine.  */
++         
++         return open(pathname,flags,mode);
++ }
++ 
++ int __open64_2(const char *pathname, int flags, ...) {
++ 	va_list ap;
++ 	mode_t mode;
++         
++ #if DEBUG
++ 	debug(2,"__open64_2(%s,%d,mode)\n",pathname,flags);
++ #endif
++ 
++ 	va_start(ap, flags);
++ 	mode = va_arg(ap, mode_t);
++ 	va_end(ap);
++         
++         return open64(pathname,flags,mode);
++ }
++ 
+  struct dirent64 *readdir64(DIR *dir) {
+  	struct dirent64 *result;
+  
diff --git a/nixpkgs/pkgs/tools/package-management/checkinstall/readlink-types.patch b/nixpkgs/pkgs/tools/package-management/checkinstall/readlink-types.patch
new file mode 100644
index 000000000000..a860607fcf66
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/checkinstall/readlink-types.patch
@@ -0,0 +1,19 @@
+Extracted from Arch's patch
+https://projects.archlinux.org/svntogit/community.git/tree/trunk/build-fix.patch?h=packages/checkinstall
+diff -wbBur checkinstall-1.6.2/installwatch/installwatch.c checkinstall-1.6.2.my/installwatch/installwatch.c
+--- checkinstall-1.6.2/installwatch/installwatch.c	2008-11-16 19:20:53.000000000 +0300
++++ checkinstall-1.6.2.my/installwatch/installwatch.c	2010-01-15 18:55:50.112716628 +0300
+@@ -2938,13 +2938,8 @@
+ 	return result;
+ }
+ 
+-#if (GLIBC_MINOR <= 4)
+-int readlink(const char *path,char *buf,size_t bufsiz) {
+-	int result;
+-#else
+ ssize_t readlink(const char *path,char *buf,size_t bufsiz) {
+ 	ssize_t result;
+-#endif
+ 	instw_t instw;
+ 	int status;
+ 
diff --git a/nixpkgs/pkgs/tools/package-management/checkinstall/scandir.patch b/nixpkgs/pkgs/tools/package-management/checkinstall/scandir.patch
new file mode 100644
index 000000000000..ae40100a9804
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/checkinstall/scandir.patch
@@ -0,0 +1,75 @@
+diff -rc -x '*~' checkinstall-1.6.2-orig/installwatch/installwatch.c checkinstall-1.6.2/installwatch/installwatch.c
+*** checkinstall-1.6.2-orig/installwatch/installwatch.c	2008-11-16 17:20:53.000000000 +0100
+--- checkinstall-1.6.2/installwatch/installwatch.c	2010-02-08 16:35:17.000000000 +0100
+***************
+*** 100,106 ****
+  static int (*true_lxstat)(int,const char *,struct stat *);
+  static int (*true_scandir)(	const char *,struct dirent ***,
+  				int (*)(const struct dirent *),
+! 				int (*)(const void *,const void *));
+  static int (*true_symlink)(const char *, const char *);
+  static int (*true_truncate)(const char *, TRUNCATE_T);
+  static int (*true_unlink)(const char *);
+--- 100,106 ----
+  static int (*true_lxstat)(int,const char *,struct stat *);
+  static int (*true_scandir)(	const char *,struct dirent ***,
+  				int (*)(const struct dirent *),
+! 				int (*)(const struct dirent **,const struct dirent **));
+  static int (*true_symlink)(const char *, const char *);
+  static int (*true_truncate)(const char *, TRUNCATE_T);
+  static int (*true_unlink)(const char *);
+***************
+*** 120,126 ****
+  static struct dirent64 *(*true_readdir64)(DIR *dir);
+  static int (*true_scandir64)(	const char *,struct dirent64 ***,
+  				int (*)(const struct dirent64 *),
+! 				int (*)(const void *,const void *));
+  static int (*true_xstat64)(int,const char *, struct stat64 *);
+  static int (*true_lxstat64)(int,const char *, struct stat64 *);
+  static int (*true_truncate64)(const char *, __off64_t);
+--- 120,126 ----
+  static struct dirent64 *(*true_readdir64)(DIR *dir);
+  static int (*true_scandir64)(	const char *,struct dirent64 ***,
+  				int (*)(const struct dirent64 *),
+! 				int (*)(const struct dirent64 **,const struct dirent64 **));
+  static int (*true_xstat64)(int,const char *, struct stat64 *);
+  static int (*true_lxstat64)(int,const char *, struct stat64 *);
+  static int (*true_truncate64)(const char *, __off64_t);
+***************
+*** 3077,3085 ****
+  	return result;
+  }
+  
+! int scandir(	const char *dir,struct dirent ***namelist,
+  		int (*select)(const struct dirent *),
+! 		int (*compar)(const void *,const void *)	) {
+  	int result;
+  
+  	if (!libc_handle)
+--- 3077,3085 ----
+  	return result;
+  }
+  
+! int scandir(	const char * dir,struct dirent ***namelist,
+  		int (*select)(const struct dirent *),
+! 		int (*compar)(const struct dirent **,const struct dirent **)	) {
+  	int result;
+  
+  	if (!libc_handle)
+***************
+*** 3691,3697 ****
+  
+  int scandir64(	const char *dir,struct dirent64 ***namelist,
+  		int (*select)(const struct dirent64 *),
+! 		int (*compar)(const void *,const void *)	) {
+  	int result;
+  
+  	if (!libc_handle)
+--- 3691,3697 ----
+  
+  int scandir64(	const char *dir,struct dirent64 ***namelist,
+  		int (*select)(const struct dirent64 *),
+! 		int (*compar)(const struct dirent64 **,const struct dirent64 **)	) {
+  	int result;
+  
+  	if (!libc_handle)
diff --git a/nixpkgs/pkgs/tools/package-management/checkinstall/set-buildroot.patch b/nixpkgs/pkgs/tools/package-management/checkinstall/set-buildroot.patch
new file mode 100644
index 000000000000..58840f491ecf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/checkinstall/set-buildroot.patch
@@ -0,0 +1,15 @@
+https://build.opensuse.org/package/view_file/openSUSE:13.1/checkinstall/checkinstall-set_buildroot.patch
+
+Index: checkinstall
+===================================================================
+--- a/checkinstall	2009-12-26 20:17:24.000000000 +0100
++++ b/checkinstall	2011-01-31 18:17:56.171593541 +0100
+@@ -2463,7 +2463,7 @@ cd "$DIRECTORIO_FUENTE"
+ 
+ echo
+ echogn "Building RPM package..."
+-$RPMBUILD -bb ${RPM_TARGET_FLAG}${ARCHITECTURE} "$SPEC_PATH" &> ${TMP_DIR}/rpmbuild.log
++$RPMBUILD --buildroot ${BUILDROOT} -bb ${RPM_TARGET_FLAG}${ARCHITECTURE} "$SPEC_PATH" &> ${TMP_DIR}/rpmbuild.log
+ okfail
+ 
+ if [ $? -gt 0 ]; then
diff --git a/nixpkgs/pkgs/tools/package-management/checkinstall/use-old-memcpy.patch b/nixpkgs/pkgs/tools/package-management/checkinstall/use-old-memcpy.patch
new file mode 100644
index 000000000000..c8be7f0b5e26
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/checkinstall/use-old-memcpy.patch
@@ -0,0 +1,12 @@
+diff -ru -x '*~' checkinstall-1.6.2-orig/installwatch/installwatch.c checkinstall-1.6.2/installwatch/installwatch.c
+--- checkinstall-1.6.2-orig/installwatch/installwatch.c	2008-11-16 17:20:53.000000000 +0100
++++ checkinstall-1.6.2/installwatch/installwatch.c	2013-03-15 13:50:12.717646381 +0100
+@@ -28,6 +28,8 @@
+  *                                  <mail@fredemmott.co.uk>
+  */
+ 
++asm (".symver memcpy, memcpy@GLIBC_2.2.5");
++
+ #include <sys/param.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
diff --git a/nixpkgs/pkgs/tools/package-management/clib/default.nix b/nixpkgs/pkgs/tools/package-management/clib/default.nix
new file mode 100644
index 000000000000..75c47dda0c40
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/clib/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub, curl  }:
+
+stdenv.mkDerivation rec {
+  version = "1.11.2";
+  pname = "clib";
+
+  src = fetchFromGitHub {
+    rev    = version;
+    owner  = "clibs";
+    repo   = "clib";
+    sha256 = "03q5l873zc1dm478f35ibqandypakf47hzqb5gjpnpbcyb2m2jxz";
+  };
+
+  hardeningDisable = [ "fortify" ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  buildInputs = [ curl ];
+
+  meta = with stdenv.lib; {
+    description = "C micro-package manager";
+    homepage = https://github.com/clibs/clib;
+    license = licenses.mit;
+    maintainers = with maintainers; [ jb55 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/conda/default.nix b/nixpkgs/pkgs/tools/package-management/conda/default.nix
new file mode 100644
index 000000000000..92d0e2543125
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/conda/default.nix
@@ -0,0 +1,74 @@
+{ lib
+, stdenv
+, fetchurl
+, runCommand
+, makeWrapper
+, buildFHSUserEnv
+, libselinux
+, libarchive
+, libGL
+, xorg
+# Conda installs its packages and environments under this directory
+, installationPath ? "~/.conda"
+# Conda manages most pkgs itself, but expects a few to be on the system.
+, condaDeps ? [ stdenv.cc xorg.libSM xorg.libICE xorg.libX11 xorg.libXau xorg.libXi xorg.libXrender libselinux libGL ]
+# Any extra nixpkgs you'd like available in the FHS env for Conda to use
+, extraPkgs ? [ ]
+}:
+
+# How to use this package?
+#
+# First-time setup: this nixpkg downloads the conda installer and provides a FHS
+# env in which it can run. On first use, the user will need to install conda to
+# the installPath using the installer:
+# $ nix-env -iA conda
+# $ conda-shell
+# $ conda-install
+#
+# Under normal usage, simply call `conda-shell` to activate the FHS env,
+# and then use conda commands as normal:
+# $ conda-shell
+# $ conda install spyder
+let
+  version = "4.6.14";
+  src = fetchurl {
+      url = "https://repo.continuum.io/miniconda/Miniconda3-${version}-Linux-x86_64.sh";
+      sha256 = "1gn43z1y5zw4yv93q1qajwbmmqs83wx5ls5x4i4llaciba4j6sqd";
+  };
+
+  conda = runCommand "conda-install" { buildInputs = [ makeWrapper ]; }
+    ''
+      mkdir -p $out/bin
+      cp ${src} $out/bin/miniconda-installer.sh
+      chmod +x $out/bin/miniconda-installer.sh
+
+      makeWrapper                            \
+        $out/bin/miniconda-installer.sh      \
+        $out/bin/conda-install               \
+        --add-flags "-p ${installationPath}" \
+        --add-flags "-b"
+    '';
+in
+  buildFHSUserEnv {
+    name = "conda-shell";
+    targetPkgs = pkgs: (builtins.concatLists [ [ conda ] condaDeps extraPkgs]);
+    profile = ''
+      # Add conda to PATH
+      export PATH=${installationPath}/bin:$PATH
+      # Paths for gcc if compiling some C sources with pip
+      export NIX_CFLAGS_COMPILE="-I${installationPath}/include"
+      export NIX_CFLAGS_LINK="-L${installationPath}lib"
+      # Some other required environment variables
+      export FONTCONFIG_FILE=/etc/fonts/fonts.conf
+      export QTCOMPOSE=${xorg.libX11}/share/X11/locale
+      export LIBARCHIVE=${libarchive.lib}/lib/libarchive.so
+    '';
+
+    meta = {
+      description = "Conda is a package manager for Python";
+      homepage = https://conda.io/;
+      platforms = lib.platforms.linux;
+      license = lib.licenses.bsd3;
+      maintainers = with lib.maintainers; [ jluttine bhipple ];
+    };
+  }
diff --git a/nixpkgs/pkgs/tools/package-management/createrepo_c/default.nix b/nixpkgs/pkgs/tools/package-management/createrepo_c/default.nix
new file mode 100644
index 000000000000..15a64ffd25e6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/createrepo_c/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchFromGitHub, cmake, pkgconfig, bzip2, expat, glib, curl, libxml2, python3, rpm, openssl, sqlite, file, xz, pcre, bash-completion }:
+
+stdenv.mkDerivation rec {
+  pname = "createrepo_c";
+  version = "0.11.1";
+
+  src = fetchFromGitHub {
+    owner  = "rpm-software-management";
+    repo   = "createrepo_c";
+    rev    = version;
+    sha256 = "0cmysc7gdd2czagl4drfh9gin6aa2847vgi30a3p0cfqvczf9cm6";
+  };
+
+  patches = [
+    ./fix-bash-completion-path.patch
+    ./fix-python-install-path.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace CMakeLists.txt \
+      --replace '@BASHCOMP_DIR@' "$out/share/bash-completion/completions"
+    substituteInPlace src/python/CMakeLists.txt \
+      --replace "@PYTHON_INSTALL_DIR@" "$out/${python3.sitePackages}"
+  '';
+
+  nativeBuildInputs = [ cmake pkgconfig ];
+
+  buildInputs = [ bzip2 expat glib curl libxml2 python3 rpm openssl sqlite file xz pcre bash-completion ];
+
+  meta = with stdenv.lib; {
+    description = "C implementation of createrepo";
+    homepage    = "http://rpm-software-management.github.io/createrepo_c/";
+    license     = licenses.gpl2;
+    platforms   = platforms.linux;
+    maintainers = with maintainers; [ copumpkin ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/package-management/createrepo_c/fix-bash-completion-path.patch b/nixpkgs/pkgs/tools/package-management/createrepo_c/fix-bash-completion-path.patch
new file mode 100644
index 000000000000..e184cc8facc0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/createrepo_c/fix-bash-completion-path.patch
@@ -0,0 +1,11 @@
+--- createrepo_c-0.10.0-src.orig/CMakeLists.txt	2017-03-19 11:01:02.703173617 +0100
++++ createrepo_c-0.10.0-src/CMakeLists.txt	2017-03-19 11:02:38.617448248 +0100
+@@ -100,7 +100,7 @@
+ 
+ pkg_check_modules(BASHCOMP bash-completion)
+ if (BASHCOMP_FOUND)
+-    execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=completionsdir bash-completion OUTPUT_VARIABLE BASHCOMP_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
++    SET(BASHCOMP_DIR "@BASHCOMP_DIR@")
+     message("Bash completion directory: ${BASHCOMP_DIR}")
+     INSTALL(FILES createrepo_c.bash DESTINATION ${BASHCOMP_DIR} RENAME createrepo_c)
+     INSTALL(CODE "
diff --git a/nixpkgs/pkgs/tools/package-management/createrepo_c/fix-python-install-path.patch b/nixpkgs/pkgs/tools/package-management/createrepo_c/fix-python-install-path.patch
new file mode 100644
index 000000000000..a247c6d9fe47
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/createrepo_c/fix-python-install-path.patch
@@ -0,0 +1,11 @@
+--- createrepo_c-0.10.0-src.orig/src/python/CMakeLists.txt	2017-03-19 10:50:33.796342953 +0100
++++ createrepo_c-0.10.0-src/src/python/CMakeLists.txt	2017-03-19 10:53:51.207580073 +0100
+@@ -19,7 +19,7 @@
+     FIND_PACKAGE(PythonInterp 3.0 REQUIRED)
+ endif()
+ 
+-EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "from sys import stdout; from distutils import sysconfig; stdout.write(sysconfig.get_python_lib(True))" OUTPUT_VARIABLE PYTHON_INSTALL_DIR)
++SET(PYTHON_INSTALL_DIR "@PYTHON_INSTALL_DIR@")
+ INCLUDE_DIRECTORIES (${PYTHON_INCLUDE_PATH})
+ 
+ MESSAGE(STATUS "Python install dir is ${PYTHON_INSTALL_DIR}")
diff --git a/nixpkgs/pkgs/tools/package-management/disnix/DisnixWebService/default.nix b/nixpkgs/pkgs/tools/package-management/disnix/DisnixWebService/default.nix
new file mode 100644
index 000000000000..dd64241fd372
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/disnix/DisnixWebService/default.nix
@@ -0,0 +1,28 @@
+{stdenv, fetchurl, apacheAnt, jdk, axis2, dbus_java }:
+
+stdenv.mkDerivation {
+  name = "DisnixWebService-0.9";
+  src = fetchurl {
+    url = https://github.com/svanderburg/DisnixWebService/releases/download/DisnixWebService-0.9/DisnixWebService-0.9.tar.gz;
+    sha256 = "1z7w44bf023c0aqchjfi4mla3qbhsh87mdzx7pqn0sy74cjfgqvl";
+  };
+  buildInputs = [ apacheAnt jdk ];
+  PREFIX = ''''${env.out}'';
+  AXIS2_LIB = "${axis2}/lib";
+  AXIS2_WEBAPP = "${axis2}/webapps/axis2";
+  DBUS_JAVA_LIB = "${dbus_java}/share/java";
+  prePatch = ''
+    sed -i -e "s|#JAVA_HOME=|JAVA_HOME=${jdk}|" \
+       -e "s|#AXIS2_LIB=|AXIS2_LIB=${axis2}/lib|" \
+        scripts/disnix-soap-client
+  '';
+  buildPhase = "ant";
+  installPhase = "ant install";
+  
+  meta = {
+    description = "A SOAP interface and client for Disnix";
+    license = stdenv.lib.licenses.mit;
+    maintainers = [ stdenv.lib.maintainers.sander ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/disnix/default.nix b/nixpkgs/pkgs/tools/package-management/disnix/default.nix
new file mode 100644
index 000000000000..2c5bc41e18d6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/disnix/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, pkgconfig, glib, libxml2, libxslt, getopt, nixUnstable, dysnomia, libintl, libiconv }:
+
+stdenv.mkDerivation {
+  name = "disnix-0.9.1";
+
+  src = fetchurl {
+    url = https://github.com/svanderburg/disnix/releases/download/disnix-0.9.1/disnix-0.9.1.tar.gz;
+    sha256 = "0bidln5xw3raqkvdks9aipis8aaza8asgyapmilnxkkrxgmw7rdf";
+  };
+
+  configureFlags = [
+    " --with-dbus-sys=${placeholder "out"}/share/dbus-1/system.d"
+  ];
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ glib libxml2 libxslt getopt nixUnstable libintl libiconv dysnomia ];
+
+  meta = {
+    description = "A Nix-based distributed service deployment tool";
+    license = stdenv.lib.licenses.lgpl21Plus;
+    maintainers = [ stdenv.lib.maintainers.sander ];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/disnix/disnixos/default.nix b/nixpkgs/pkgs/tools/package-management/disnix/disnixos/default.nix
new file mode 100644
index 000000000000..319716c0f3ea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/disnix/disnixos/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl, dysnomia, disnix, socat, pkgconfig, getopt }:
+
+stdenv.mkDerivation {
+  name = "disnixos-0.8";
+  
+  src = fetchurl {
+    url = https://github.com/svanderburg/disnixos/releases/download/disnixos-0.8/disnixos-0.8.tar.gz;
+    sha256 = "186blirfx89i8hdp4a0djy4q9qr9wcl0ilwr66hlil0wxqj1sr91";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ socat dysnomia disnix getopt ];
+
+  meta = {
+    description = "Provides complementary NixOS infrastructure deployment to Disnix";
+    license = stdenv.lib.licenses.lgpl21Plus;
+    maintainers = [ stdenv.lib.maintainers.sander ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/disnix/dysnomia/default.nix b/nixpkgs/pkgs/tools/package-management/disnix/dysnomia/default.nix
new file mode 100644
index 000000000000..7b5d99bef9e7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/disnix/dysnomia/default.nix
@@ -0,0 +1,61 @@
+{ stdenv, fetchurl
+, ejabberd ? null, mysql ? null, postgresql ? null, subversion ? null, mongodb ? null, mongodb-tools ? null, influxdb ? null
+, enableApacheWebApplication ? false
+, enableAxis2WebService ? false
+, enableEjabberdDump ? false
+, enableMySQLDatabase ? false
+, enablePostgreSQLDatabase ? false
+, enableSubversionRepository ? false
+, enableTomcatWebApplication ? false
+, enableMongoDatabase ? false
+, enableInfluxDatabase ? false
+, catalinaBaseDir ? "/var/tomcat"
+, jobTemplate ? "systemd"
+, getopt
+}:
+
+assert enableMySQLDatabase -> mysql != null;
+assert enablePostgreSQLDatabase -> postgresql != null;
+assert enableSubversionRepository -> subversion != null;
+assert enableEjabberdDump -> ejabberd != null;
+assert enableMongoDatabase -> (mongodb != null && mongodb-tools != null);
+assert enableInfluxDatabase -> influxdb != null;
+
+stdenv.mkDerivation {
+  name = "dysnomia-0.9";
+  src = fetchurl {
+    url = https://github.com/svanderburg/dysnomia/releases/download/dysnomia-0.9/dysnomia-0.9.tar.gz;
+    sha256 = "09pk2l3pss48kvm5wvskh842vakbzmjzxzfzyw1nkqnvni130ikl";
+  };
+
+  preConfigure = if enableEjabberdDump then "export PATH=$PATH:${ejabberd}/sbin" else "";
+
+  configureFlags = [
+     (if enableApacheWebApplication then "--with-apache" else "--without-apache")
+     (if enableAxis2WebService then "--with-axis2" else "--without-axis2")
+     (if enableEjabberdDump then "--with-ejabberd" else "--without-ejabberd")
+     (if enableMySQLDatabase then "--with-mysql" else "--without-mysql")
+     (if enablePostgreSQLDatabase then "--with-postgresql" else "--without-postgresql")
+     (if enableSubversionRepository then "--with-subversion" else "--without-subversion")
+     (if enableTomcatWebApplication then "--with-tomcat=${catalinaBaseDir}" else "--without-tomcat")
+     (if enableMongoDatabase then "--with-mongodb" else "--without-mongodb")
+     (if enableInfluxDatabase then "--with-influxdb" else "--without-influxdb")
+     "--with-job-template=${jobTemplate}"
+   ];
+
+  buildInputs = [ getopt ]
+    ++ stdenv.lib.optional enableEjabberdDump ejabberd
+    ++ stdenv.lib.optional enableMySQLDatabase mysql.out
+    ++ stdenv.lib.optional enablePostgreSQLDatabase postgresql
+    ++ stdenv.lib.optional enableSubversionRepository subversion
+    ++ stdenv.lib.optional enableMongoDatabase mongodb
+    ++ stdenv.lib.optional enableMongoDatabase mongodb-tools
+    ++ stdenv.lib.optional enableInfluxDatabase influxdb;
+
+  meta = {
+    description = "Automated deployment of mutable components and services for Disnix";
+    license = stdenv.lib.licenses.mit;
+    maintainers = [ stdenv.lib.maintainers.sander ];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/dpkg/default.nix b/nixpkgs/pkgs/tools/package-management/dpkg/default.nix
new file mode 100644
index 000000000000..11672e6d456d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/dpkg/default.nix
@@ -0,0 +1,74 @@
+{ stdenv, fetchurl, perl, zlib, bzip2, xz, makeWrapper, coreutils }:
+
+stdenv.mkDerivation rec {
+  pname = "dpkg";
+  version = "1.19.7";
+
+  src = fetchurl {
+    url = "mirror://debian/pool/main/d/dpkg/dpkg_${version}.tar.xz";
+    sha256 = "1s4nlaqz4c3p5r85f4il8m21825sfy2s9wgz4ajhl332vzggw9sc";
+  };
+
+  configureFlags = [
+    "--disable-dselect"
+    "--with-admindir=/var/lib/dpkg"
+    "PERL_LIBDIR=$(out)/${perl.libPrefix}"
+    (stdenv.lib.optionalString stdenv.isDarwin "--disable-linker-optimisations")
+    (stdenv.lib.optionalString stdenv.isDarwin "--disable-start-stop-daemon")
+  ];
+
+  preConfigure = ''
+    # Nice: dpkg has a circular dependency on itself. Its configure
+    # script calls scripts/dpkg-architecture, which calls "dpkg" in
+    # $PATH. It doesn't actually use its result, but fails if it
+    # isn't present, so make a dummy available.
+    touch $TMPDIR/dpkg
+    chmod +x $TMPDIR/dpkg
+    PATH=$TMPDIR:$PATH
+
+    for i in $(find . -name Makefile.in); do
+      substituteInPlace $i --replace "install-data-local:" "disabled:" ;
+    done
+  '';
+
+  patchPhase = ''
+    patchShebangs .
+
+    # Dpkg commands sometimes calls out to shell commands
+    substituteInPlace lib/dpkg/dpkg.h \
+       --replace '"dpkg-deb"' \"$out/bin/dpkg-deb\" \
+       --replace '"dpkg-split"' \"$out/bin/dpkg-split\" \
+       --replace '"dpkg-query"' \"$out/bin/dpkg-query\" \
+       --replace '"dpkg-divert"' \"$out/bin/dpkg-divert\" \
+       --replace '"dpkg-statoverride"' \"$out/bin/dpkg-statoverride\" \
+       --replace '"dpkg-trigger"' \"$out/bin/dpkg-trigger\" \
+       --replace '"dpkg"' \"$out/bin/dpkg\" \
+       --replace '"debsig-verify"' \"$out/bin/debsig-verify\" \
+       --replace '"rm"' \"${coreutils}/bin/rm\" \
+       --replace '"cat"' \"${coreutils}/bin/cat\" \
+       --replace '"diff"' \"${coreutils}/bin/diff\"
+  '';
+
+  buildInputs = [ perl zlib bzip2 xz ];
+  nativeBuildInputs = [ makeWrapper perl ];
+
+  postInstall =
+    ''
+      for i in $out/bin/*; do
+        if head -n 1 $i | grep -q perl; then
+          wrapProgram $i --prefix PERL5LIB : $out/${perl.libPrefix}
+        fi
+      done
+
+      mkdir -p $out/etc/dpkg
+      cp -r scripts/t/origins $out/etc/dpkg
+    '';
+
+  meta = with stdenv.lib; {
+    description = "The Debian package manager";
+    homepage = https://wiki.debian.org/Teams/Dpkg;
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/elm-github-install/Gemfile b/nixpkgs/pkgs/tools/package-management/elm-github-install/Gemfile
new file mode 100644
index 000000000000..b97eab9777d7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/elm-github-install/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'elm_install'
diff --git a/nixpkgs/pkgs/tools/package-management/elm-github-install/Gemfile.lock b/nixpkgs/pkgs/tools/package-management/elm-github-install/Gemfile.lock
new file mode 100644
index 000000000000..a551368eade1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/elm-github-install/Gemfile.lock
@@ -0,0 +1,39 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    adts (0.1.2)
+    commander (4.4.3)
+      highline (~> 1.7.2)
+    contracts (0.16.0)
+    elm_install (1.0.1)
+      adts (~> 0.1.2)
+      commander (~> 4.4, >= 4.4.2)
+      contracts (~> 0.16.0)
+      git (~> 1.3)
+      git_clone_url (~> 2.0)
+      hashdiff (~> 0.3.1)
+      indentation (~> 0.1.1)
+      smart_colored (~> 1.1, >= 1.1.1)
+      solve (~> 3.1)
+    git (1.3.0)
+    git_clone_url (2.0.0)
+      uri-ssh_git (>= 2.0)
+    hashdiff (0.3.4)
+    highline (1.7.8)
+    indentation (0.1.1)
+    molinillo (0.5.7)
+    semverse (2.0.0)
+    smart_colored (1.1.1)
+    solve (3.1.0)
+      molinillo (>= 0.5)
+      semverse (>= 1.1, < 3.0)
+    uri-ssh_git (2.0.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  elm_install
+
+BUNDLED WITH
+   1.14.4
diff --git a/nixpkgs/pkgs/tools/package-management/elm-github-install/default.nix b/nixpkgs/pkgs/tools/package-management/elm-github-install/default.nix
new file mode 100644
index 000000000000..5703a13745bd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/elm-github-install/default.nix
@@ -0,0 +1,21 @@
+{ lib, bundlerEnv, ruby, bundlerUpdateScript }:
+
+bundlerEnv rec {
+  pname = "elm_install";
+  name = "elm-github-install-${version}";
+
+  version = (import ./gemset.nix).elm_install.version;
+
+  inherit ruby;
+  gemdir = ./.;
+
+  passthru.updateScript = bundlerUpdateScript "elm-github-install";
+
+  meta = with lib; {
+    description = "Install Elm packages from git repositories.";
+    homepage    = https://github.com/gdotdesign/elm-github-install;
+    license     = licenses.unfree;
+    maintainers = with maintainers; [ roberth nicknovitski ];
+    platforms   = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/elm-github-install/gemset.nix b/nixpkgs/pkgs/tools/package-management/elm-github-install/gemset.nix
new file mode 100644
index 000000000000..d310b41d7aaf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/elm-github-install/gemset.nix
@@ -0,0 +1,114 @@
+{
+  adts = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1793bfsgg8ca58b70xas9rglnspig41ih0iwqcad62s0grxzrjwz";
+      type = "gem";
+    };
+    version = "0.1.2";
+  };
+  commander = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01qx76y05v29kgyjsfkai73gwfnqhypp1k8v024m9w7qzpv4mpxf";
+      type = "gem";
+    };
+    version = "4.4.3";
+  };
+  contracts = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "119f5p1n6r5svbx8h09za6a4vrsnj5i1pzr9cqdn9hj3wrxvyl3a";
+      type = "gem";
+    };
+    version = "0.16.0";
+  };
+  elm_install = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0d3fwhj54madabmzamss865kj8czicgaq5fbdll9kpapqvy6a2j5";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  git = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1waikaggw7a1d24nw0sh8fd419gbf7awh000qhsf411valycj6q3";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+  git_clone_url = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qgq7pjl461si3m2gr28vwbx47dcbpyy682mcwra5y1klpkbcvr5";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  hashdiff = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1n6hj7k7b9hazac0j48ypbak2nqi5wy4nh5cjra6xl3a92r8db0a";
+      type = "gem";
+    };
+    version = "0.3.4";
+  };
+  highline = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nf5lgdn6ni2lpfdn4gk3gi47fmnca2bdirabbjbz1fk9w4p8lkr";
+      type = "gem";
+    };
+    version = "1.7.8";
+  };
+  indentation = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ix64qgmm91xm1yiqxdcn9bqb1l6gwvkv7322yni34b3bd16lgvc";
+      type = "gem";
+    };
+    version = "0.1.1";
+  };
+  molinillo = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19h1nks0x2ljwyijs2rd1f9sh05j8xqvjaqk1rslp5nyy6h4a758";
+      type = "gem";
+    };
+    version = "0.5.7";
+  };
+  semverse = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cf6iv5wgwb7b8jf7il751223k9yahz9aym06s9r0prda5mwddyy";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  smart_colored = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hccah5iwsvn9rf7zdgl7mdbh0h63vfwy1c6d280cb9qkfj8rdny";
+      type = "gem";
+    };
+    version = "1.1.1";
+  };
+  solve = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bbzny2bl94mv1xwcfrxbi3fjhxxawlz6la7mip2wwz9kkaf376h";
+      type = "gem";
+    };
+    version = "3.1.0";
+  };
+  uri-ssh_git = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0klyyvivbjll2ry18d8fhm1rbxbzd4kqa9lskxyiha4ndlb22cqj";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/package-management/emplace/default.nix b/nixpkgs/pkgs/tools/package-management/emplace/default.nix
new file mode 100644
index 000000000000..bb361fd97c3a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/emplace/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "emplace";
+  version = "0.2.10";
+
+  src = fetchFromGitHub {
+    owner = "tversteeg";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1y77cla6bgy8pjb21cawx7cb69hhri4r7gyjkhnjyiixkh945mwj";
+  };
+
+  cargoSha256 = "119llsc8m7qda2cjnd45ndml148z8074f76xygkz6fp3m1c2z3pw";
+
+  meta = with lib; {
+    description = "Mirror installed software on multiple machines";
+    homepage = "https://github.com/tversteeg/emplace";
+    license = licenses.agpl3;
+    maintainers = with maintainers; [ filalex77 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/fpm/Gemfile b/nixpkgs/pkgs/tools/package-management/fpm/Gemfile
new file mode 100644
index 000000000000..17ed0a0cb2af
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/fpm/Gemfile
@@ -0,0 +1,3 @@
+source 'https://rubygems.org'
+
+gem 'fpm'
diff --git a/nixpkgs/pkgs/tools/package-management/fpm/Gemfile.lock b/nixpkgs/pkgs/tools/package-management/fpm/Gemfile.lock
new file mode 100644
index 000000000000..1045c7b495a0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/fpm/Gemfile.lock
@@ -0,0 +1,47 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    arr-pm (0.0.10)
+      cabin (> 0)
+    backports (3.14.0)
+    cabin (0.9.0)
+    childprocess (0.9.0)
+      ffi (~> 1.0, >= 1.0.11)
+    clamp (1.0.1)
+    dotenv (2.7.2)
+    ffi (1.10.0)
+    fpm (1.11.0)
+      arr-pm (~> 0.0.10)
+      backports (>= 2.6.2)
+      cabin (>= 0.6.0)
+      childprocess (= 0.9.0)
+      clamp (~> 1.0.0)
+      ffi
+      json (>= 1.7.7, < 2.0)
+      pleaserun (~> 0.0.29)
+      ruby-xz (~> 0.2.3)
+      stud
+    insist (1.0.0)
+    io-like (0.3.0)
+    json (1.8.6)
+    mustache (0.99.8)
+    pleaserun (0.0.30)
+      cabin (> 0)
+      clamp
+      dotenv
+      insist
+      mustache (= 0.99.8)
+      stud
+    ruby-xz (0.2.3)
+      ffi (~> 1.9)
+      io-like (~> 0.3)
+    stud (0.0.23)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  fpm
+
+BUNDLED WITH
+   1.17.2
diff --git a/nixpkgs/pkgs/tools/package-management/fpm/default.nix b/nixpkgs/pkgs/tools/package-management/fpm/default.nix
new file mode 100644
index 000000000000..ccb50717accf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/fpm/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "fpm";
+  gemdir = ./.;
+  exes = [ "fpm" ];
+
+  passthru.updateScript = bundlerUpdateScript "fpm";
+
+  meta = with lib; {
+    description = "Tool to build packages for multiple platforms with ease";
+    homepage    = https://github.com/jordansissel/fpm;
+    license     = licenses.mit;
+    maintainers = with maintainers; [ manveru nicknovitski ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/fpm/gemset.nix b/nixpkgs/pkgs/tools/package-management/fpm/gemset.nix
new file mode 100644
index 000000000000..13d1669e5409
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/fpm/gemset.nix
@@ -0,0 +1,157 @@
+{
+  arr-pm = {
+    dependencies = ["cabin"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07yx1g1nh4zdy38i2id1xyp42fvj4vl6i196jn7szvjfm0jx98hg";
+      type = "gem";
+    };
+    version = "0.0.10";
+  };
+  backports = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17j5pf0b69bkn043wi4xd530ky53jbbnljr4bsjzlm4k8bzlknfn";
+      type = "gem";
+    };
+    version = "3.14.0";
+  };
+  cabin = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0b3b8j3iqnagjfn1261b9ncaac9g44zrx1kcg81yg4z9i513kici";
+      type = "gem";
+    };
+    version = "0.9.0";
+  };
+  childprocess = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0a61922kmvcxyj5l70fycapr87gz1dzzlkfpq85rfqk5vdh3d28p";
+      type = "gem";
+    };
+    version = "0.9.0";
+  };
+  clamp = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jb6l4scp69xifhicb5sffdixqkw8wgkk9k2q57kh2y36x1px9az";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  dotenv = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13cis6bf06hmz744xrsl163p6gb78xcm8g8q4pcabsy5ywyv6kag";
+      type = "gem";
+    };
+    version = "2.7.2";
+  };
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j8pzj8raxbir5w5k6s7a042sb5k02pg0f8s4na1r5lan901j00p";
+      type = "gem";
+    };
+    version = "1.10.0";
+  };
+  fpm = {
+    dependencies = ["arr-pm" "backports" "cabin" "childprocess" "clamp" "ffi" "json" "pleaserun" "ruby-xz" "stud"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0khzsiqzswxpql6w2ws9dawb27zgv4nmgrjszydmm0xpv6h21jrm";
+      type = "gem";
+    };
+    version = "1.11.0";
+  };
+  insist = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bw3bdwns14mapbgb8cbjmr0amvwz8y72gyclq04xp43wpp5jrvg";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  io-like = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04nn0s2wmgxij3k760h3r8m1dgih5dmd9h4v1nn085yi824i5z6k";
+      type = "gem";
+    };
+    version = "0.3.0";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qmj7fypgb9vag723w1a49qihxrcf5shzars106ynw2zk352gbv5";
+      type = "gem";
+    };
+    version = "1.8.6";
+  };
+  mustache = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g5hplm0k06vwxwqzwn1mq5bd02yp0h3rym4zwzw26aqi7drcsl2";
+      type = "gem";
+    };
+    version = "0.99.8";
+  };
+  pleaserun = {
+    dependencies = ["cabin" "clamp" "dotenv" "insist" "mustache" "stud"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hgnrl67zkqaxmfkwbyscawj4wqjm7h8khpbj58s6iw54wp3408p";
+      type = "gem";
+    };
+    version = "0.0.30";
+  };
+  ruby-xz = {
+    dependencies = ["ffi" "io-like"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11bgpvvk0098ghvlxr4i713jmi2izychalgikwvdwmpb452r3ndw";
+      type = "gem";
+    };
+    version = "0.2.3";
+  };
+  stud = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qpb57cbpm9rwgsygqxifca0zma87drnlacv49cqs2n5iyi6z8kb";
+      type = "gem";
+    };
+    version = "0.0.23";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/package-management/gx/default.nix b/nixpkgs/pkgs/tools/package-management/gx/default.nix
new file mode 100644
index 000000000000..8e8d30e4fccf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/gx/default.nix
@@ -0,0 +1,25 @@
+# This file was generated by go2nix.
+{ stdenv, buildGoPackage, fetchgit }:
+
+buildGoPackage rec {
+  pname = "gx";
+  version = "0.14.1";
+  rev = "refs/tags/v${version}";
+
+  goPackagePath = "github.com/whyrusleeping/gx";
+
+  src = fetchgit {
+    inherit rev;
+    url = "https://github.com/whyrusleeping/gx";
+    sha256 = "0pfx2p59xdbmqzfbgaf8xvlnzh8m05hkg596glq5kvl8ib65i4ha";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    description = "A packaging tool built around IPFS";
+    homepage = https://github.com/whyrusleeping/gx;
+    license = licenses.mit;
+    maintainers = with maintainers; [ zimbatm ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/gx/deps.nix b/nixpkgs/pkgs/tools/package-management/gx/deps.nix
new file mode 100644
index 000000000000..766e58775b42
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/gx/deps.nix
@@ -0,0 +1,246 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.3.0
+[
+  {
+    goPackagePath = "github.com/blang/semver";
+    fetch = {
+      type = "git";
+      url = "https://github.com/blang/semver";
+      rev = "3c1074078d32d767e08ab2c8564867292da86926";
+      sha256 = "1vqkjrag8nn5hvjz34cf9zsrgwd13ss63y6sp7y5jq39j7bcprdx";
+    };
+  }
+  {
+    goPackagePath = "github.com/btcsuite/btcd";
+    fetch = {
+      type = "git";
+      url = "https://github.com/btcsuite/btcd";
+      rev = "67e573d211ace594f1366b4ce9d39726c4b19bd0";
+      sha256 = "04s92gsy71w1jirlr5lkk9y6r5cparbas7nmf6ywbp7kq7fn8ajn";
+    };
+  }
+  {
+    goPackagePath = "github.com/gogo/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gogo/protobuf";
+      rev = "07eab6a8298cf32fac45cceaac59424f98421bbc";
+      sha256 = "1l2v9yq74qsiq3q7kii091rzx67jx6isz5szs27hyhsdwvy0y2p7";
+    };
+  }
+  {
+    goPackagePath = "github.com/gxed/hashland";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gxed/hashland";
+      rev = "d9f6b97f8db22dd1e090fd0bbbe98f09cc7dd0a8";
+      sha256 = "1q23y4lacsz46k9gmgfw4iwwydw36j2601rbidmmswl94grpc386";
+    };
+  }
+  {
+    goPackagePath = "github.com/ipfs/go-ipfs-api";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ipfs/go-ipfs-api";
+      rev = "b4fd7838d9771414868cb78fa8c4f97e47cad013";
+      sha256 = "1kb0ja6bji9q1ly66hx3490mjmk3w56zpwl9c0pkfy6da9x4dkyr";
+    };
+  }
+  {
+    goPackagePath = "github.com/ipfs/go-ipfs-files";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ipfs/go-ipfs-files";
+      rev = "90d206a6f3947f904673ebffd376a2dcbbd84942";
+      sha256 = "0bq6lciqba362lqmszjf1x33qwdpfrfik6r680iqr5c4sybywzqv";
+    };
+  }
+  {
+    goPackagePath = "github.com/libp2p/go-flow-metrics";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libp2p/go-flow-metrics";
+      rev = "7e5a55af485341567f98d6847a373eb5ddcdcd43";
+      sha256 = "1p87iyk6q6f3g3xkncssx400qlld8f2z93qiz8m1f97grfyhjif1";
+    };
+  }
+  {
+    goPackagePath = "github.com/libp2p/go-libp2p-crypto";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libp2p/go-libp2p-crypto";
+      rev = "3120e9f9526fe05f2d3905961a5e0701b85579d9";
+      sha256 = "05i8jcfmk51zln634x782jvjmmn5l11104ylzqfnjxgjibz9pyd7";
+    };
+  }
+  {
+    goPackagePath = "github.com/libp2p/go-libp2p-metrics";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libp2p/go-libp2p-metrics";
+      rev = "2d5733beaa2a9fdd05ef696d7a734aa61549fb2a";
+      sha256 = "1g59z1mn483npmzgdyxn5w7w1k94phi5lgqkw3lq8i1b2jdy5mci";
+    };
+  }
+  {
+    goPackagePath = "github.com/libp2p/go-libp2p-peer";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libp2p/go-libp2p-peer";
+      rev = "d3df4bca884d7a9c2d350c8120240db3c2b0f2ee";
+      sha256 = "0hn75dnr80f846jj38bpcjw5z73iw292ygcqsfbghvdrwl2pf5xm";
+    };
+  }
+  {
+    goPackagePath = "github.com/libp2p/go-libp2p-protocol";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libp2p/go-libp2p-protocol";
+      rev = "b29f3d97e3a2fb8b29c5d04290e6cb5c5018004b";
+      sha256 = "1xgjfnx9zcqglg9li29wdqywsp8hz22wx6phns9zscni2jsfidld";
+    };
+  }
+  {
+    goPackagePath = "github.com/minio/blake2b-simd";
+    fetch = {
+      type = "git";
+      url = "https://github.com/minio/blake2b-simd";
+      rev = "3f5f724cb5b182a5c278d6d3d55b40e7f8c2efb4";
+      sha256 = "0b6jbnj62c0gmmfd4zdmh8xbg01p80f13yygir9xprqkzk6fikmd";
+    };
+  }
+  {
+    goPackagePath = "github.com/minio/sha256-simd";
+    fetch = {
+      type = "git";
+      url = "https://github.com/minio/sha256-simd";
+      rev = "51976451ce1942acbb55707a983ed232fa027110";
+      sha256 = "0kaxvpidf6ygkkb06vi95pirll31jnmywhyalfjvf7djhim2wr8f";
+    };
+  }
+  {
+    goPackagePath = "github.com/mitchellh/go-homedir";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mitchellh/go-homedir";
+      rev = "ae18d6b8b3205b561c79e8e5f69bff09736185f4";
+      sha256 = "0f0z0aa4wivk4z1y503dmnw0k0g0g403dly8i4q263gfshs82sbq";
+    };
+  }
+  {
+    goPackagePath = "github.com/mr-tron/base58";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mr-tron/base58";
+      rev = "c8897612421d88a51012eaa53bf7267686173ae5";
+      sha256 = "10lr50ia7xccfdvg772f7nb2azn81djcpnckhblhwq6l6a1fpm48";
+    };
+  }
+  {
+    goPackagePath = "github.com/multiformats/go-multiaddr";
+    fetch = {
+      type = "git";
+      url = "https://github.com/multiformats/go-multiaddr";
+      rev = "ec8630b6b7436b5d7f6c1c2366d3d7214d1b29e2";
+      sha256 = "1npx4d3scj087a54m6my2xnd0wga8bkklswnbhzghwhhpsgmy800";
+    };
+  }
+  {
+    goPackagePath = "github.com/multiformats/go-multiaddr-net";
+    fetch = {
+      type = "git";
+      url = "https://github.com/multiformats/go-multiaddr-net";
+      rev = "f0af4033635f1241179700537dacdc04f2803df8";
+      sha256 = "0s90ix09mm6dc8319l48g3zhnjl1mkih168wsdh6fdf73801lhg5";
+    };
+  }
+  {
+    goPackagePath = "github.com/multiformats/go-multihash";
+    fetch = {
+      type = "git";
+      url = "https://github.com/multiformats/go-multihash";
+      rev = "a91e75d03bf4dba801af7b159c8b2aa7b5f47ea8";
+      sha256 = "1xvj944qg17vmdgzhyn5qryqrksyxi1q188f91my52wfkz23qmmm";
+    };
+  }
+  {
+    goPackagePath = "github.com/sabhiram/go-gitignore";
+    fetch = {
+      type = "git";
+      url = "https://github.com/sabhiram/go-gitignore";
+      rev = "d3107576ba9425fc1c85f4b3569c4631b805a02e";
+      sha256 = "1rdwyxgcsiwgmlqnc3k6h300mzlvjc3j21np4yh1h476wc8dvl0l";
+    };
+  }
+  {
+    goPackagePath = "github.com/spaolacci/murmur3";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spaolacci/murmur3";
+      rev = "f09979ecbc725b9e6d41a297405f65e7e8804acc";
+      sha256 = "1lv3zyz3jy2d76bhvvs8svygx66606iygdvwy5cwc0p5z8yghq25";
+    };
+  }
+  {
+    goPackagePath = "github.com/urfave/cli";
+    fetch = {
+      type = "git";
+      url = "https://github.com/urfave/cli";
+      rev = "b67dcf995b6a7b7f14fad5fcb7cc5441b05e814b";
+      sha256 = "0n5vq4nydlhb7w12jiwphvxqdy4jwpxc3zwlxyhf05lq1nxfb56h";
+    };
+  }
+  {
+    goPackagePath = "github.com/whyrusleeping/json-filter";
+    fetch = {
+      type = "git";
+      url = "https://github.com/whyrusleeping/json-filter";
+      rev = "ff25329a9528f01c5175414f16cc0a6a162a5b8b";
+      sha256 = "0cai0drvx4c8j686l908vpcsz3mw3vxi3ziz94b0f3c5ylpj07j7";
+    };
+  }
+  {
+    goPackagePath = "github.com/whyrusleeping/progmeter";
+    fetch = {
+      type = "git";
+      url = "https://github.com/whyrusleeping/progmeter";
+      rev = "f3e57218a75b913eff88d49a52c1debf9684ea04";
+      sha256 = "0xs8rz6yhpvj9512c5v3b8dwr2kivywnyyfxzdfbr6fy1xc8zskb";
+    };
+  }
+  {
+    goPackagePath = "github.com/whyrusleeping/stump";
+    fetch = {
+      type = "git";
+      url = "https://github.com/whyrusleeping/stump";
+      rev = "206f8f13aae1697a6fc1f4a55799faf955971fc5";
+      sha256 = "1s40qdppjnk8gijk7x6kbviiqz62nz3h6gic2q9cwcmq8r5isw7n";
+    };
+  }
+  {
+    goPackagePath = "github.com/whyrusleeping/tar-utils";
+    fetch = {
+      type = "git";
+      url = "https://github.com/whyrusleeping/tar-utils";
+      rev = "8c6c8ba81d5c71fd69c0f48dbde4b2fb422b6dfc";
+      sha256 = "14jjdw3yics0k467xsyk388684wdpi0bbx8nqj0y4pqxa0s0in6s";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev = "3d3f9f413869b949e48070b5bc593aa22cc2b8f2";
+      sha256 = "0rbkcq48lkiw043sm8hciprqy2d77s4agpj6rwy2qgbqm8gvv3a6";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "ec83556a53fe16b65c452a104ea9d1e86a671852";
+      sha256 = "1ijlbyn5gs8g6z2pjlj5h77lg7wrljqxdls4xlcfqxmghxiyci2f";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/package-management/gx/go/default.nix b/nixpkgs/pkgs/tools/package-management/gx/go/default.nix
new file mode 100644
index 000000000000..0a0793130d14
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/gx/go/default.nix
@@ -0,0 +1,34 @@
+# This file was generated by go2nix.
+{ stdenv, buildGoPackage, fetchgit
+, gx
+}:
+
+buildGoPackage rec {
+  pname = "gx-go";
+  version = "1.9.0";
+  rev = "refs/tags/v${version}";
+
+  goPackagePath = "github.com/whyrusleeping/gx-go";
+
+  src = fetchgit {
+    inherit rev;
+    url = "https://github.com/whyrusleeping/gx-go";
+    sha256 = "0fdy4b3ymqw6hzvvjwq37mfrdmizc8lxm53axw93n3x6118na9jc";
+  };
+
+  goDeps = ./deps.nix;
+
+  extraSrcs = [
+    {
+      goPackagePath = gx.goPackagePath;
+      src = gx.src;
+    }
+  ];
+
+  meta = with stdenv.lib; {
+    description = "A tool for importing go packages into gx";
+    homepage = https://github.com/whyrusleeping/gx-go;
+    license = licenses.mit;
+    maintainers = with maintainers; [ zimbatm ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/gx/go/deps.nix b/nixpkgs/pkgs/tools/package-management/gx/go/deps.nix
new file mode 100644
index 000000000000..895e0e6bb1ac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/gx/go/deps.nix
@@ -0,0 +1,246 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.3.0
+[
+  {
+    goPackagePath = "github.com/btcsuite/btcd";
+    fetch = {
+      type = "git";
+      url = "https://github.com/btcsuite/btcd";
+      rev = "67e573d211ace594f1366b4ce9d39726c4b19bd0";
+      sha256 = "04s92gsy71w1jirlr5lkk9y6r5cparbas7nmf6ywbp7kq7fn8ajn";
+    };
+  }
+  {
+    goPackagePath = "github.com/gogo/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gogo/protobuf";
+      rev = "07eab6a8298cf32fac45cceaac59424f98421bbc";
+      sha256 = "1l2v9yq74qsiq3q7kii091rzx67jx6isz5szs27hyhsdwvy0y2p7";
+    };
+  }
+  {
+    goPackagePath = "github.com/gxed/hashland";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gxed/hashland";
+      rev = "d9f6b97f8db22dd1e090fd0bbbe98f09cc7dd0a8";
+      sha256 = "1q23y4lacsz46k9gmgfw4iwwydw36j2601rbidmmswl94grpc386";
+    };
+  }
+  {
+    goPackagePath = "github.com/ipfs/go-ipfs-api";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ipfs/go-ipfs-api";
+      rev = "b4fd7838d9771414868cb78fa8c4f97e47cad013";
+      sha256 = "1kb0ja6bji9q1ly66hx3490mjmk3w56zpwl9c0pkfy6da9x4dkyr";
+    };
+  }
+  {
+    goPackagePath = "github.com/ipfs/go-ipfs-files";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ipfs/go-ipfs-files";
+      rev = "90d206a6f3947f904673ebffd376a2dcbbd84942";
+      sha256 = "0bq6lciqba362lqmszjf1x33qwdpfrfik6r680iqr5c4sybywzqv";
+    };
+  }
+  {
+    goPackagePath = "github.com/kr/fs";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kr/fs";
+      rev = "1455def202f6e05b95cc7bfc7e8ae67ae5141eba";
+      sha256 = "11zg176x9hr9q7fsk95r6q0wf214gg4czy02slax4x56n79g6a7q";
+    };
+  }
+  {
+    goPackagePath = "github.com/libp2p/go-flow-metrics";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libp2p/go-flow-metrics";
+      rev = "7e5a55af485341567f98d6847a373eb5ddcdcd43";
+      sha256 = "1p87iyk6q6f3g3xkncssx400qlld8f2z93qiz8m1f97grfyhjif1";
+    };
+  }
+  {
+    goPackagePath = "github.com/libp2p/go-libp2p-crypto";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libp2p/go-libp2p-crypto";
+      rev = "3120e9f9526fe05f2d3905961a5e0701b85579d9";
+      sha256 = "05i8jcfmk51zln634x782jvjmmn5l11104ylzqfnjxgjibz9pyd7";
+    };
+  }
+  {
+    goPackagePath = "github.com/libp2p/go-libp2p-metrics";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libp2p/go-libp2p-metrics";
+      rev = "2d5733beaa2a9fdd05ef696d7a734aa61549fb2a";
+      sha256 = "1g59z1mn483npmzgdyxn5w7w1k94phi5lgqkw3lq8i1b2jdy5mci";
+    };
+  }
+  {
+    goPackagePath = "github.com/libp2p/go-libp2p-peer";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libp2p/go-libp2p-peer";
+      rev = "d3df4bca884d7a9c2d350c8120240db3c2b0f2ee";
+      sha256 = "0hn75dnr80f846jj38bpcjw5z73iw292ygcqsfbghvdrwl2pf5xm";
+    };
+  }
+  {
+    goPackagePath = "github.com/libp2p/go-libp2p-protocol";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libp2p/go-libp2p-protocol";
+      rev = "b29f3d97e3a2fb8b29c5d04290e6cb5c5018004b";
+      sha256 = "1xgjfnx9zcqglg9li29wdqywsp8hz22wx6phns9zscni2jsfidld";
+    };
+  }
+  {
+    goPackagePath = "github.com/minio/blake2b-simd";
+    fetch = {
+      type = "git";
+      url = "https://github.com/minio/blake2b-simd";
+      rev = "3f5f724cb5b182a5c278d6d3d55b40e7f8c2efb4";
+      sha256 = "0b6jbnj62c0gmmfd4zdmh8xbg01p80f13yygir9xprqkzk6fikmd";
+    };
+  }
+  {
+    goPackagePath = "github.com/minio/sha256-simd";
+    fetch = {
+      type = "git";
+      url = "https://github.com/minio/sha256-simd";
+      rev = "51976451ce1942acbb55707a983ed232fa027110";
+      sha256 = "0kaxvpidf6ygkkb06vi95pirll31jnmywhyalfjvf7djhim2wr8f";
+    };
+  }
+  {
+    goPackagePath = "github.com/mitchellh/go-homedir";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mitchellh/go-homedir";
+      rev = "ae18d6b8b3205b561c79e8e5f69bff09736185f4";
+      sha256 = "0f0z0aa4wivk4z1y503dmnw0k0g0g403dly8i4q263gfshs82sbq";
+    };
+  }
+  {
+    goPackagePath = "github.com/mr-tron/base58";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mr-tron/base58";
+      rev = "c8897612421d88a51012eaa53bf7267686173ae5";
+      sha256 = "10lr50ia7xccfdvg772f7nb2azn81djcpnckhblhwq6l6a1fpm48";
+    };
+  }
+  {
+    goPackagePath = "github.com/multiformats/go-multiaddr";
+    fetch = {
+      type = "git";
+      url = "https://github.com/multiformats/go-multiaddr";
+      rev = "ec8630b6b7436b5d7f6c1c2366d3d7214d1b29e2";
+      sha256 = "1npx4d3scj087a54m6my2xnd0wga8bkklswnbhzghwhhpsgmy800";
+    };
+  }
+  {
+    goPackagePath = "github.com/multiformats/go-multiaddr-net";
+    fetch = {
+      type = "git";
+      url = "https://github.com/multiformats/go-multiaddr-net";
+      rev = "f0af4033635f1241179700537dacdc04f2803df8";
+      sha256 = "0s90ix09mm6dc8319l48g3zhnjl1mkih168wsdh6fdf73801lhg5";
+    };
+  }
+  {
+    goPackagePath = "github.com/multiformats/go-multihash";
+    fetch = {
+      type = "git";
+      url = "https://github.com/multiformats/go-multihash";
+      rev = "a91e75d03bf4dba801af7b159c8b2aa7b5f47ea8";
+      sha256 = "1xvj944qg17vmdgzhyn5qryqrksyxi1q188f91my52wfkz23qmmm";
+    };
+  }
+  {
+    goPackagePath = "github.com/sabhiram/go-gitignore";
+    fetch = {
+      type = "git";
+      url = "https://github.com/sabhiram/go-gitignore";
+      rev = "d3107576ba9425fc1c85f4b3569c4631b805a02e";
+      sha256 = "1rdwyxgcsiwgmlqnc3k6h300mzlvjc3j21np4yh1h476wc8dvl0l";
+    };
+  }
+  {
+    goPackagePath = "github.com/spaolacci/murmur3";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spaolacci/murmur3";
+      rev = "f09979ecbc725b9e6d41a297405f65e7e8804acc";
+      sha256 = "1lv3zyz3jy2d76bhvvs8svygx66606iygdvwy5cwc0p5z8yghq25";
+    };
+  }
+  {
+    goPackagePath = "github.com/urfave/cli";
+    fetch = {
+      type = "git";
+      url = "https://github.com/urfave/cli";
+      rev = "b67dcf995b6a7b7f14fad5fcb7cc5441b05e814b";
+      sha256 = "0n5vq4nydlhb7w12jiwphvxqdy4jwpxc3zwlxyhf05lq1nxfb56h";
+    };
+  }
+  {
+    goPackagePath = "github.com/whyrusleeping/gx";
+    fetch = {
+      type = "git";
+      url = "https://github.com/whyrusleeping/gx";
+      rev = "733691bc18c0858a3d7e1a6e0a42df7d0bcac1de";
+      sha256 = "0pfx2p59xdbmqzfbgaf8xvlnzh8m05hkg596glq5kvl8ib65i4ha";
+    };
+  }
+  {
+    goPackagePath = "github.com/whyrusleeping/progmeter";
+    fetch = {
+      type = "git";
+      url = "https://github.com/whyrusleeping/progmeter";
+      rev = "f3e57218a75b913eff88d49a52c1debf9684ea04";
+      sha256 = "0xs8rz6yhpvj9512c5v3b8dwr2kivywnyyfxzdfbr6fy1xc8zskb";
+    };
+  }
+  {
+    goPackagePath = "github.com/whyrusleeping/stump";
+    fetch = {
+      type = "git";
+      url = "https://github.com/whyrusleeping/stump";
+      rev = "206f8f13aae1697a6fc1f4a55799faf955971fc5";
+      sha256 = "1s40qdppjnk8gijk7x6kbviiqz62nz3h6gic2q9cwcmq8r5isw7n";
+    };
+  }
+  {
+    goPackagePath = "github.com/whyrusleeping/tar-utils";
+    fetch = {
+      type = "git";
+      url = "https://github.com/whyrusleeping/tar-utils";
+      rev = "8c6c8ba81d5c71fd69c0f48dbde4b2fb422b6dfc";
+      sha256 = "14jjdw3yics0k467xsyk388684wdpi0bbx8nqj0y4pqxa0s0in6s";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev = "3d3f9f413869b949e48070b5bc593aa22cc2b8f2";
+      sha256 = "0rbkcq48lkiw043sm8hciprqy2d77s4agpj6rwy2qgbqm8gvv3a6";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "ec83556a53fe16b65c452a104ea9d1e86a671852";
+      sha256 = "1ijlbyn5gs8g6z2pjlj5h77lg7wrljqxdls4xlcfqxmghxiyci2f";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/package-management/home-manager/default.nix b/nixpkgs/pkgs/tools/package-management/home-manager/default.nix
new file mode 100644
index 000000000000..21b2fad1caa4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/home-manager/default.nix
@@ -0,0 +1,40 @@
+#Adapted from
+#https://github.com/rycee/home-manager/blob/2c07829be2bcae55e04997b19719ff902a44016d/home-manager/default.nix
+
+{ bash, coreutils, findutils, gnused, less, stdenv, makeWrapper, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+
+  pname = "home-manager";
+  version = "2020-01-04";
+
+  src = fetchFromGitHub {
+    owner = "rycee";
+    repo = "home-manager";
+    rev = "1b7b1bc294e99ab1795fe7dad183c1d2ae58a099";
+    sha256 = "02kwym8n41d5ba9lccnl5q3y10sw35p1da5b66mxldfr6d930pbj";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  dontBuild = true;
+
+  installPhase = ''
+    install -v -D -m755 ${src}/home-manager/home-manager $out/bin/home-manager
+
+    substituteInPlace $out/bin/home-manager \
+      --subst-var-by bash "${bash}" \
+      --subst-var-by coreutils "${coreutils}" \
+      --subst-var-by findutils "${findutils}" \
+      --subst-var-by gnused "${gnused}" \
+      --subst-var-by less "${less}" \
+      --subst-var-by HOME_MANAGER_PATH '${src}'
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A user environment configurator";
+    maintainers = with maintainers; [ rycee ];
+    platforms = platforms.linux;
+    license = licenses.mit;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/package-management/librepo/default.nix b/nixpkgs/pkgs/tools/package-management/librepo/default.nix
new file mode 100644
index 000000000000..61435cee284d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/librepo/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchFromGitHub, cmake, python, pkgconfig, libxml2, glib, openssl, curl, check, gpgme }:
+
+stdenv.mkDerivation rec {
+  version = "1.9.2";
+  pname = "librepo";
+
+  src = fetchFromGitHub {
+    owner  = "rpm-software-management";
+    repo   = "librepo";
+    rev    = version;
+    sha256 = "0xa9ng9mhpianhjy2a0jnj8ha1zckk2sz91y910daggm1qcv5asx";
+  };
+
+  nativeBuildInputs = [ cmake pkgconfig ];
+
+  cmakeFlags = ["-DPYTHON_DESIRED=${stdenv.lib.substring 0 1 python.pythonVersion}" ];
+
+  buildInputs = [ python libxml2 glib openssl curl check gpgme ];
+
+  # librepo/fastestmirror.h includes curl/curl.h, and pkg-config specfile refers to others in here
+  propagatedBuildInputs = [ curl gpgme libxml2 ];
+
+  meta = with stdenv.lib; {
+    description = "Library providing C and Python (libcURL like) API for downloading linux repository metadata and packages";
+    homepage    = https://rpm-software-management.github.io/librepo/;
+    license     = licenses.lgpl2Plus;
+    platforms   = platforms.linux;
+    maintainers = with maintainers; [ copumpkin ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/morph/default.nix b/nixpkgs/pkgs/tools/package-management/morph/default.nix
new file mode 100644
index 000000000000..b111386fea2e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/morph/default.nix
@@ -0,0 +1,43 @@
+{ buildGoPackage, fetchFromGitHub, go-bindata, lib }:
+
+buildGoPackage rec {
+  pname = "morph";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "dbcdk";
+    repo = "morph";
+    rev = "v${version}";
+    sha256 = "1y6clzi8sfnrv4an26b44r24nnxds1kj9aw3lmjbgxl9yrxxsj1k";
+  };
+
+  goPackagePath = "github.com/dbcdk/morph";
+  goDeps = ./deps.nix;
+
+  buildInputs = [ go-bindata ];
+
+  buildFlagsArray = ''
+    -ldflags=
+    -X
+    main.version=${version}
+  '';
+
+  prePatch = ''
+    go-bindata -pkg assets -o assets/assets.go data/
+  '';
+
+  postInstall = ''
+    mkdir -p $lib
+    cp -v $src/data/*.nix $lib
+  '';
+
+  outputs = [ "out" "bin" "lib" ];
+
+  meta = with lib; {
+    description = "Morph is a NixOS host manager written in Golang.";
+    license = licenses.mit;
+    homepage = "https://github.com/dbcdk/morph";
+    maintainers = with maintainers; [adamt johanot];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/morph/deps.nix b/nixpkgs/pkgs/tools/package-management/morph/deps.nix
new file mode 100644
index 000000000000..fdae5ef39ee2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/morph/deps.nix
@@ -0,0 +1,66 @@
+# file generated from Gopkg.lock using dep2nix (https://github.com/nixcloud/dep2nix)
+[
+  {
+    goPackagePath  = "github.com/dbcdk/kingpin";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dbcdk/kingpin";
+      rev =  "8554767bc91254c59c7297a99e9867c770e4eadb";
+      sha256 = "05hfpgylv5mfnjz2mdd3jl8p3psmczvdbs4ydf9xvvc17c9mlrpq";
+    };
+  }
+  {
+    goPackagePath  = "github.com/alecthomas/template";
+    fetch = {
+      type = "git";
+      url = "https://github.com/alecthomas/template";
+      rev =  "a0175ee3bccc567396460bf5acd36800cb10c49c";
+      sha256 = "0qjgvvh26vk1cyfq9fadyhfgdj36f1iapbmr5xp6zqipldz8ffxj";
+    };
+  }
+  {
+    goPackagePath  = "github.com/alecthomas/units";
+    fetch = {
+      type = "git";
+      url = "https://github.com/alecthomas/units";
+      rev =  "2efee857e7cfd4f3d0138cc3cbb1b4966962b93a";
+      sha256 = "1j65b91qb9sbrml9cpabfrcf07wmgzzghrl7809hjjhrmbzri5bl";
+    };
+  }
+  {
+    goPackagePath  = "github.com/gobwas/glob";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gobwas/glob";
+      rev =  "5ccd90ef52e1e632236f7326478d4faa74f99438";
+      sha256 = "0jxk1x806zn5x86342s72dq2qy64ksb3zrvrlgir2avjhwb18n6z";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev =  "0e37d006457bf46f9e6692014ba72ef82c33022c";
+      sha256 = "1fj8rvrhgv5j8pmckzphvm3sqkzhcqp3idkxvgv13qrjdfycsa5r";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev =  "ee1b12c67af419cf5a9be3bdbeea7fc1c5f32f11";
+      sha256 = "0cgp0xzbhg3fr77n2qrfmmsvhc287srnwi4mghwcjdxp6rx0s988";
+    };
+  }
+  {
+    goPackagePath  = "gopkg.in/mattes/go-expand-tilde.v1";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattes/go-expand-tilde";
+      rev =  "cb884138e64c9a8bf5c7d6106d74b0fca082df0c";
+      sha256 = "06xrp05njwam4sn031fkmd4gym5wfsw5q0v24nqhs4883lsx9dwq";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/package-management/mynewt-newt/default.nix b/nixpkgs/pkgs/tools/package-management/mynewt-newt/default.nix
new file mode 100644
index 000000000000..3f307d38f029
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/mynewt-newt/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "mynewt-newt";
+  version = "1.3.0";
+
+  goPackagePath = "mynewt.apache.org/newt";
+  goDeps = ./deps.nix;
+
+  src = fetchFromGitHub {
+    owner = "apache";
+    repo = "incubator-mynewt-newt";
+    rev = "mynewt_${builtins.replaceStrings ["."] ["_"] version}_tag";
+    sha256 = "0ia6q1wf3ki2yw8ngw5gnbdrb7268qwi078j05f8gs1sppb3g563";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://mynewt.apache.org/;
+    description = "Build and package management tool for embedded development.";
+    longDescription = ''
+      Apache Newt is a smart build and package management tool,
+      designed for C and C++ applications in embedded contexts. Newt
+      was developed as a part of the Apache Mynewt Operating System.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ pjones ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/mynewt-newt/deps.nix b/nixpkgs/pkgs/tools/package-management/mynewt-newt/deps.nix
new file mode 100644
index 000000000000..ea3d97ca67ea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/mynewt-newt/deps.nix
@@ -0,0 +1,101 @@
+[
+  {
+    goPackagePath = "github.com/Sirupsen/logrus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/sirupsen/logrus.git";
+      rev = "a437dfd2463eaedbec3dfe443e477d3b0a810b3f";
+      sha256 = "1904s2bbc7p88anzjp6fyj3jrbm5p6wbb8j4490674dq10kkcfbj";
+    };
+  }
+  {
+    goPackagePath = "github.com/inconshreveable/mousetrap";
+    fetch = {
+      type = "git";
+      url = "https://github.com/inconshreveable/mousetrap.git";
+      rev = "76626ae9c91c4f2a10f34cad8ce83ea42c93bb75";
+      sha256 = "1mn0kg48xkd74brf48qf5hzp0bc6g8cf5a77w895rl3qnlpfw152";
+    };
+  }
+  {
+    goPackagePath = "github.com/kr/pretty";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kr/pretty.git";
+      rev = "cfb55aafdaf3ec08f0db22699ab822c50091b1c4";
+      sha256 = "0441yi9ah9892hxdslv2h35bkfr75g7ajma0q45lqks84pawrdkg";
+    };
+  }
+  {
+    goPackagePath = "github.com/kr/text";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kr/text.git";
+      rev = "7cafcd837844e784b526369c9bce262804aebc60";
+      sha256 = "0br693pf6vdr1sfvzdz6zxq7hjpdgci0il4wj0v636r8lyy21vsx";
+    };
+  }
+  {
+    goPackagePath = "github.com/mitchellh/mapstructure";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mitchellh/mapstructure.git";
+      rev = "f3009df150dadf309fdee4a54ed65c124afad715";
+      sha256 = "1i08zzlsn1bwicjn8cvakv2h5wwicw8ijx0i0cipk49yfmd6ab4i";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/cast";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/cast.git";
+      rev = "24b6558033ffe202bf42f0f3b870dcc798dd2ba8";
+      sha256 = "10g8vzvffkd55ivkbaqcjj50z3iiqffl2p902rmbriz14znqyywl";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/cobra";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/cobra.git";
+      rev = "9495bc009a56819bdb0ddbc1a373e29c140bc674";
+      sha256 = "0hphdnhpcmy2mngah81c700s2y43f5g9jckwgmh6xyb4f1zjj9nm";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/jwalterweatherman";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/jwalterweatherman.git";
+      rev = "33c24e77fb80341fe7130ee7c594256ff08ccc46";
+      sha256 = "1knvzspqzc2bh58q16zggzc8gcabjp5gr7zk4k7nx5ij4092cg0z";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/pflag";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/pflag.git";
+      rev = "5ccb023bc27df288a957c5e994cd44fd19619465";
+      sha256 = "1r65j8sw15pz0iacwnf303p6s51vkv0k6qc5cyb2kybfraqd7f7z";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/fsnotify.v1";
+    fetch = {
+      type = "git";
+      url = "https://github.com/fsnotify/fsnotify.git";
+      rev = "629574ca2a5df945712d3079857300b5e4da0236";
+      sha256 = "06wfg1mmzjj04z7d0q1x2fai9k6hm957brngsaf02fa9a3qqanv3";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys/unix";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/sys.git";
+      rev = "b699b7032584f0953262cb2788a0ca19bb494703";
+      sha256 = "172sw1bm581qwal9pbf9qj1sgivr74nabbj8qq4q4fhgpzams9ix";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/package-management/nfpm/default.nix b/nixpkgs/pkgs/tools/package-management/nfpm/default.nix
new file mode 100644
index 000000000000..60091742e0d0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nfpm/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "nfpm";
+  version = "1.1.10";
+
+  src = fetchFromGitHub {
+    owner = "goreleaser";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0qn9hybqnhyf1xb6n0m4qq2ac8h187i2pjkkik73qly1hmyq45j7";
+  };
+
+  modSha256 = "037ihnvssgkzbg94yfw4lwqnhj02m187dfn1fm7i6yv13kf0gkpx";
+
+  buildFlagsArray = [ "-ldflags=-s -w -X main.version=${version}" ];
+
+  meta = with lib; {
+    description = "A simple deb and rpm packager written in Go";
+    homepage = "https://github.com/goreleaser/nfpm";
+    maintainers = [ maintainers.marsam ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/niff/default.nix b/nixpkgs/pkgs/tools/package-management/niff/default.nix
new file mode 100644
index 000000000000..8c6a72cf131e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/niff/default.nix
@@ -0,0 +1,34 @@
+{ stdenv
+, python3
+, fetchFromGitHub
+}:
+
+let
+  pname = "niff";
+  version = "0.1";
+in stdenv.mkDerivation {
+  name = "${pname}-${version}";
+
+  src = fetchFromGitHub {
+    owner = "FRidh";
+    repo = "niff";
+    rev = "v${version}";
+    sha256 = "1ziv5r57jzg2qg61izvkkyq1bz4p5nb6652dzwykfj3l2r3db4bi";
+  };
+
+  buildInputs = [ python3 ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp niff $out/bin/niff
+  '';
+
+  meta = {
+    description = "A program that compares two Nix expressions and determines which attributes changed";
+    homepage = https://github.com/FRidh/niff;
+    license = stdenv.lib.licenses.mit;
+    maintainers = [ stdenv.lib.maintainers.fridh ];
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/package-management/nix-bundle/default.nix b/nixpkgs/pkgs/tools/package-management/nix-bundle/default.nix
new file mode 100644
index 000000000000..b78b3bf07cd5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nix-bundle/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, lib, fetchFromGitHub, nix, makeWrapper, coreutils, gnutar, gzip, bzip2 }:
+
+stdenv.mkDerivation rec {
+  pname = "nix-bundle";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "matthewbauer";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "084m9hqm1nhwln2sbg8ck2v2dprvpldxxqmd1r8fcj3dmn4bysz0";
+  };
+
+  # coreutils, gnutar is actually needed by nix for bootstrap
+  buildInputs = [ nix coreutils makeWrapper gnutar gzip bzip2 ];
+
+  binPath = lib.makeBinPath [ nix coreutils gnutar gzip bzip2 ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  postInstall = ''
+    mkdir -p $out/bin
+    makeWrapper $out/share/nix-bundle/nix-bundle.sh $out/bin/nix-bundle \
+      --prefix PATH : ${binPath}
+    cp $out/share/nix-bundle/nix-run.sh $out/bin/nix-run
+  '';
+
+  meta = with lib; {
+    maintainers = [ maintainers.matthewbauer ];
+    platforms = platforms.all;
+    description = "Create bundles from Nixpkgs attributes";
+    license = licenses.mit;
+    homepage = https://github.com/matthewbauer/nix-bundle;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nix-du/default.nix b/nixpkgs/pkgs/tools/package-management/nix-du/default.nix
new file mode 100644
index 000000000000..74543cef83b1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nix-du/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchFromGitHub, rustPlatform, nix, boost, graphviz, darwin }:
+rustPlatform.buildRustPackage rec {
+  pname = "nix-du";
+  version = "0.3.1";
+
+  src = fetchFromGitHub {
+    owner = "symphorien";
+    repo = "nix-du";
+    rev = "v${version}";
+    sha256 = "149d60mid29s5alv5m3d7jrhyzc6cj7b6hpiq399gsdwzgxr00wq";
+  };
+  cargoSha256 = "18kb4car5nzch3vpl6z1499silhs3fyn8c6xj3rzk94mm2m9srg4";
+  verifyCargoDeps = true;
+
+  doCheck = true;
+  checkInputs = [ graphviz ];
+
+  buildInputs = [
+    boost
+    nix
+  ] ++ stdenv.lib.optional stdenv.isDarwin darwin.apple_sdk.frameworks.Security;
+
+  meta = with stdenv.lib; {
+    description = "A tool to determine which gc-roots take space in your nix store";
+    homepage = https://github.com/symphorien/nix-du;
+    license = licenses.lgpl3;
+    maintainers = [ maintainers.symphorien ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nix-index/default.nix b/nixpkgs/pkgs/tools/package-management/nix-index/default.nix
new file mode 100644
index 000000000000..b3a16633c1d9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nix-index/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, rustPlatform, fetchFromGitHub, pkgconfig, makeWrapper, openssl, curl
+, nix, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "nix-index";
+  version = "0.1.2";
+
+  src = fetchFromGitHub {
+    owner = "bennofs";
+    repo = "nix-index";
+    rev = "v${version}";
+    sha256 = "05fqfwz34n4ijw7ydw2n6bh4bv64rhks85cn720sy5r7bmhfmfa8";
+  };
+  cargoSha256 = "06idjb5h5fahqklyxnss2zffrvvfbcw0hjh1mcrf1872s4x78ags";
+  nativeBuildInputs = [ pkgconfig makeWrapper ];
+  buildInputs = [ openssl curl ]
+    ++ stdenv.lib.optional stdenv.isDarwin Security;
+
+  doCheck = !stdenv.isDarwin;
+
+  postInstall = ''
+    mkdir -p $out/etc/profile.d
+    cp ./command-not-found.sh $out/etc/profile.d/command-not-found.sh
+    substituteInPlace $out/etc/profile.d/command-not-found.sh \
+      --replace "@out@" "$out"
+    wrapProgram $out/bin/nix-index \
+      --prefix PATH : "${stdenv.lib.makeBinPath [ nix ]}"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A files database for nixpkgs";
+    homepage = https://github.com/bennofs/nix-index;
+    license = with licenses; [ bsd3 ];
+    maintainers = [ maintainers.bennofs ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nix-pin/default.nix b/nixpkgs/pkgs/tools/package-management/nix-pin/default.nix
new file mode 100644
index 000000000000..f5dfacf319bc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nix-pin/default.nix
@@ -0,0 +1,52 @@
+{ lib, pkgs, stdenv, fetchFromGitHub, mypy, python3, nix, git, makeWrapper
+, runtimeShell }:
+let self = stdenv.mkDerivation rec {
+  pname = "nix-pin";
+  version = "0.4.0";
+  src = fetchFromGitHub {
+    owner = "timbertson";
+    repo = "nix-pin";
+    rev = "version-${version}";
+    sha256 = "1pccvc0iqapms7kidrh09g5fdx44x622r5l9k7bkmssp3v4c68vy";
+  };
+  buildInputs = [ python3 mypy makeWrapper ];
+  checkPhase = ''
+    mypy bin/*
+  '';
+  installPhase = ''
+    mkdir "$out"
+    cp -r bin share "$out"
+    wrapProgram $out/bin/nix-pin \
+      --prefix PATH : "${lib.makeBinPath [ nix git ]}"
+  '';
+  passthru =
+    let
+      defaults = import "${self}/share/nix/defaults.nix";
+    in {
+      api = { pinConfig ? defaults.pinConfig }:
+        let impl = import "${self}/share/nix/api.nix" { inherit pkgs pinConfig; }; in
+        { inherit (impl) augmentedPkgs pins callPackage; };
+      updateScript = ''
+        #!${runtimeShell}
+        set -e
+        echo
+        cd ${toString ./.}
+        ${pkgs.nix-update-source}/bin/nix-update-source \
+          --prompt version \
+          --replace-attr version \
+          --set owner timbertson \
+          --set repo nix-pin \
+          --set type fetchFromGitHub \
+          --set rev 'version-{version}' \
+          --substitute rev 'version-''${{version}}' \
+          --modify-nix default.nix
+      '';
+    };
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/timbertson/nix-pin";
+    description = "nixpkgs development utility";
+    license = licenses.mit;
+    maintainers = [ maintainers.timbertson ];
+    platforms = platforms.all;
+  };
+}; in self
diff --git a/nixpkgs/pkgs/tools/package-management/nix-prefetch-scripts/default.nix b/nixpkgs/pkgs/tools/package-management/nix-prefetch-scripts/default.nix
new file mode 100644
index 000000000000..c23db106ea1f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nix-prefetch-scripts/default.nix
@@ -0,0 +1,46 @@
+{ stdenv, makeWrapper, buildEnv,
+  git, subversion, mercurial, bazaar, cvs, gnused, coreutils, nix, findutils
+}:
+
+let mkPrefetchScript = tool: src: deps:
+  stdenv.mkDerivation {
+    name = "nix-prefetch-${tool}";
+
+    nativeBuildInputs = [ makeWrapper ];
+
+    dontUnpack = true;
+
+    installPhase = ''
+      install -vD ${src} $out/bin/$name;
+      wrapProgram $out/bin/$name \
+        --prefix PATH : ${stdenv.lib.makeBinPath (deps ++ [ gnused nix ])} \
+        --set HOME /homeless-shelter
+    '';
+
+    preferLocalBuild = true;
+
+    meta = with stdenv.lib; {
+      description = "Script used to obtain source hashes for fetch${tool}";
+      maintainers = with maintainers; [ bennofs ];
+      platforms = stdenv.lib.platforms.unix;
+    };
+  };
+in rec {
+  nix-prefetch-bzr = mkPrefetchScript "bzr" ../../../build-support/fetchbzr/nix-prefetch-bzr [ bazaar ];
+  nix-prefetch-cvs = mkPrefetchScript "cvs" ../../../build-support/fetchcvs/nix-prefetch-cvs [ cvs ];
+  nix-prefetch-git = mkPrefetchScript "git" ../../../build-support/fetchgit/nix-prefetch-git [ git coreutils findutils ];
+  nix-prefetch-hg  = mkPrefetchScript "hg"  ../../../build-support/fetchhg/nix-prefetch-hg   [ mercurial ];
+  nix-prefetch-svn = mkPrefetchScript "svn" ../../../build-support/fetchsvn/nix-prefetch-svn [ subversion ];
+
+  nix-prefetch-scripts = buildEnv {
+    name = "nix-prefetch-scripts";
+
+    paths = [ nix-prefetch-bzr nix-prefetch-cvs nix-prefetch-git nix-prefetch-hg nix-prefetch-svn ];
+
+    meta = with stdenv.lib; {
+      description = "Collection of all the nix-prefetch-* scripts which may be used to obtain source hashes";
+      maintainers = with maintainers; [ bennofs ];
+      platforms = stdenv.lib.platforms.unix;
+    };
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nix-prefetch/default.nix b/nixpkgs/pkgs/tools/package-management/nix-prefetch/default.nix
new file mode 100644
index 000000000000..19a40b7395fa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nix-prefetch/default.nix
@@ -0,0 +1,67 @@
+{ stdenv, fetchFromGitHub, makeWrapper
+, asciidoc, docbook_xml_dtd_45, docbook_xsl, libxml2, libxslt
+, coreutils, gawk, gnugrep, gnused, jq, nix }:
+
+stdenv.mkDerivation rec {
+  pname = "nix-prefetch";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "msteen";
+    repo = "nix-prefetch";
+    rev = version;
+    sha256 = "0b9gdi7xzmfq0j258x724xsll8gi31m0m4pzfjkqinlm6zwr3sgm";
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+    asciidoc docbook_xml_dtd_45 docbook_xsl libxml2 libxslt
+  ];
+
+  configurePhase = ''
+    . configure.sh
+  '';
+
+  buildPhase = ''
+    a2x -f manpage doc/nix-prefetch.1.asciidoc
+  '';
+
+  installPhase = ''
+    lib=$out/lib/${pname}
+    mkdir -p $lib
+    substitute src/main.sh $lib/main.sh \
+      --subst-var-by lib $lib \
+      --subst-var-by version '${version}'
+    chmod +x $lib/main.sh
+    patchShebangs $lib/main.sh
+    cp lib/*.nix $lib/
+
+    mkdir -p $out/bin
+    makeWrapper $lib/main.sh $out/bin/${pname} \
+      --prefix PATH : '${stdenv.lib.makeBinPath [ coreutils gawk gnugrep gnused jq nix ]}'
+
+    substitute src/tests.sh $lib/tests.sh \
+      --subst-var-by bin $out/bin
+    chmod +x $lib/tests.sh
+    patchShebangs $lib/tests.sh
+
+    mkdir -p $out/share/man/man1
+    substitute doc/nix-prefetch.1 $out/share/man/man1/nix-prefetch.1 \
+      --subst-var-by version '${version}' \
+      --replace '01/01/1970' "$date"
+
+    install -D contrib/nix-prefetch-completion.bash $out/share/bash-completion/completions/nix-prefetch
+    install -D contrib/nix-prefetch-completion.zsh $out/share/zsh/site-functions/_nix_prefetch
+
+    mkdir -p $out/share/doc/${pname}/contrib
+    cp -r contrib/hello_rs $out/share/doc/${pname}/contrib/
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Prefetch any fetcher function call, e.g. package sources";
+    homepage = "https://github.com/msteen/nix-prefetch";
+    license = licenses.mit;
+    maintainers = with maintainers; [ msteen ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nix-serve/default.nix b/nixpkgs/pkgs/tools/package-management/nix-serve/default.nix
new file mode 100644
index 000000000000..63f948db9db3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nix-serve/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, fetchFromGitHub,
+  bzip2, nix, perl, perlPackages,
+}:
+
+with stdenv.lib;
+
+let
+  rev = "e4675e38ab54942e351c7686e40fabec822120b9";
+  sha256 = "1wm24p6pkxl1d7hrvf4ph6mwzawvqi22c60z9xzndn5xfyr4v0yr";
+in
+
+stdenv.mkDerivation {
+  name = "nix-serve-0.2-${substring 0 7 rev}";
+
+  src = fetchFromGitHub {
+    owner = "edolstra";
+    repo = "nix-serve";
+    inherit rev sha256;
+  };
+
+  buildInputs = [ bzip2 perl nix nix.perl-bindings ]
+    ++ (with perlPackages; [ DBI DBDSQLite Plack Starman ]);
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/libexec/nix-serve
+    cp nix-serve.psgi $out/libexec/nix-serve/nix-serve.psgi
+
+    mkdir -p $out/bin
+    cat > $out/bin/nix-serve <<EOF
+    #! ${stdenv.shell}
+    PATH=${makeBinPath [ bzip2 nix ]}:\$PATH PERL5LIB=$PERL5LIB exec ${perlPackages.Starman}/bin/starman $out/libexec/nix-serve/nix-serve.psgi "\$@"
+    EOF
+    chmod +x $out/bin/nix-serve
+  '';
+
+  meta = {
+    homepage = https://github.com/edolstra/nix-serve;
+    description = "A utility for sharing a Nix store as a binary cache";
+    maintainers = [ maintainers.eelco ];
+    license = licenses.lgpl21;
+    platforms = nix.meta.platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nix-top/default.nix b/nixpkgs/pkgs/tools/package-management/nix-top/default.nix
new file mode 100644
index 000000000000..1d2cad2e39e4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nix-top/default.nix
@@ -0,0 +1,53 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, ruby
+, makeWrapper
+, getent               # /etc/passwd
+, ncurses              # tput
+, binutils-unwrapped   # strings
+, coreutils
+, findutils
+}:
+
+# No gems used, so mkDerivation is fine.
+let
+  additionalPath = lib.makeBinPath [ getent ncurses binutils-unwrapped coreutils findutils ];
+in
+stdenv.mkDerivation rec {
+  pname = "nix-top";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "samueldr";
+    repo = "nix-top";
+    rev = "v${version}";
+    sha256 = "0560a9g8n4p764r3va1nn95iv4bg71g8h0wws1af2p5g553j4zps";
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  buildInputs = [
+    ruby
+  ];
+
+  installPhase = ''
+    mkdir -p $out/libexec/nix-top
+    install -D -m755 ./nix-top $out/bin/nix-top
+    wrapProgram $out/bin/nix-top \
+      --prefix PATH : "$out/libexec/nix-top:${additionalPath}"
+  '' + stdenv.lib.optionalString stdenv.isDarwin ''
+    ln -s /bin/stty $out/libexec/nix-top
+  '';
+
+  meta = with lib; {
+    description = "Tracks what nix is building";
+    homepage = https://github.com/samueldr/nix-top;
+    license = licenses.mit;
+    maintainers = with maintainers; [ samueldr ];
+    platforms = platforms.linux ++ platforms.darwin;
+    inherit version;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nix-universal-prefetch/default.nix b/nixpkgs/pkgs/tools/package-management/nix-universal-prefetch/default.nix
new file mode 100644
index 000000000000..a4e43f149677
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nix-universal-prefetch/default.nix
@@ -0,0 +1,32 @@
+{ stdenv
+, fetchFromGitHub
+, ruby
+}:
+
+# No gems used, so mkDerivation is fine.
+stdenv.mkDerivation rec {
+  pname = "nix-universal-prefetch";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "samueldr";
+    repo = "nix-universal-prefetch";
+    rev = "v${version}";
+    sha256 = "1id9iaibrm2d3fa9dkcxnb3sd0j1vh502181gdd199a1cfsmzh1i";
+  };
+
+  installPhase = ''
+    mkdir -pv $out/bin
+    cp nix-universal-prefetch $out/bin/nix-universal-prefetch
+    substituteInPlace "$out/bin/nix-universal-prefetch" \
+      --replace "/usr/bin/env nix-shell" "${ruby}/bin/ruby"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Uses nixpkgs fetchers to figure out hashes";
+    homepage = https://github.com/samueldr/nix-universal-prefetch;
+    license = licenses.mit;
+    maintainers = with maintainers; [ samueldr ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nix-update-source/default.nix b/nixpkgs/pkgs/tools/package-management/nix-update-source/default.nix
new file mode 100644
index 000000000000..a2add8f8a78e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nix-update-source/default.nix
@@ -0,0 +1,51 @@
+{ lib, pkgs, fetchFromGitHub, python3Packages, nix-prefetch-scripts
+, runtimeShell }:
+python3Packages.buildPythonApplication rec {
+  version = "0.6.3";
+  name = "nix-update-source-${version}";
+  src = fetchFromGitHub {
+    owner = "timbertson";
+    repo = "nix-update-source";
+    rev = "version-0.6.3";
+    sha256 = "157wvv9vnaszzwbj68jpdc0imcm1hdab3z760bx2axbsgfpqqilz";
+  };
+  propagatedBuildInputs = [ nix-prefetch-scripts ];
+  passthru = {
+    # NOTE: `fetch` should not be used within nixpkgs because it
+    # uses a non-idiomatic structure. It is provided for use by
+    # out-of-tree nix derivations.
+    fetch = path:
+      let
+        fetchers = {
+          # whitelist of allowed fetchers
+          inherit (pkgs) fetchgit fetchurl fetchFromGitHub;
+        };
+        json = lib.importJSON path;
+        fetchFn = builtins.getAttr json.fetch.fn fetchers;
+        src = fetchFn json.fetch.args;
+      in
+      json // json.fetch // {
+        inherit src;
+        overrideSrc = drv: lib.overrideDerivation drv (orig: { inherit src; });
+      };
+    updateScript = ''
+      #!${runtimeShell}
+      set -e
+      echo
+      cd ${toString ./.}
+      ${pkgs.nix-update-source}/bin/nix-update-source \
+        --prompt version \
+        --replace-attr version \
+        --set owner timbertson \
+        --set repo nix-update-source \
+        --set type fetchFromGitHub \
+        --set rev 'version-{version}' \
+        --modify-nix default.nix
+    '';
+  };
+  meta = {
+    description = "Utility to automate updating of nix derivation sources";
+    maintainers = with lib.maintainers; [ timbertson ];
+    license = lib.licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nix/default.nix b/nixpkgs/pkgs/tools/package-management/nix/default.nix
new file mode 100644
index 000000000000..28413971c004
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nix/default.nix
@@ -0,0 +1,216 @@
+{ lib, fetchurl, fetchFromGitHub, callPackage
+, storeDir ? "/nix/store"
+, stateDir ? "/nix/var"
+, confDir ? "/etc"
+, boehmgc
+, stdenv, llvmPackages_6
+}:
+
+let
+
+common =
+  { lib, stdenv, fetchpatch, perl, curl, bzip2, sqlite, openssl ? null, xz
+  , pkgconfig, boehmgc, perlPackages, libsodium, brotli, boost, editline, nlohmann_json
+  , autoreconfHook, autoconf-archive, bison, flex, libxml2, libxslt, docbook5, docbook_xsl_ns, jq
+  , busybox-sandbox-shell
+  , storeDir
+  , stateDir
+  , confDir
+  , withLibseccomp ? lib.any (lib.meta.platformMatch stdenv.hostPlatform) libseccomp.meta.platforms, libseccomp
+  , withAWS ? stdenv.isLinux || stdenv.isDarwin, aws-sdk-cpp
+
+  , name, suffix ? "", src, includesPerl ? false, fromGit ? false
+
+  }:
+  let
+     sh = busybox-sandbox-shell;
+     nix = stdenv.mkDerivation rec {
+      inherit name src;
+      version = lib.getVersion name;
+
+      is20 = lib.versionAtLeast version "2.0pre";
+
+      VERSION_SUFFIX = lib.optionalString fromGit suffix;
+
+      outputs = [ "out" "dev" "man" "doc" ];
+
+      nativeBuildInputs =
+        [ pkgconfig ]
+        ++ lib.optionals (!is20) [ curl perl ]
+        ++ lib.optionals fromGit [ autoreconfHook autoconf-archive bison flex libxml2 libxslt docbook5 docbook_xsl_ns jq ];
+
+      buildInputs = [ curl openssl sqlite xz bzip2 nlohmann_json ]
+        ++ lib.optional (stdenv.isLinux || stdenv.isDarwin) libsodium
+        ++ lib.optionals is20 [ brotli boost editline ]
+        ++ lib.optional withLibseccomp libseccomp
+        ++ lib.optional (withAWS && is20)
+            ((aws-sdk-cpp.override {
+              apis = ["s3" "transfer"];
+              customMemoryManagement = false;
+            }).overrideDerivation (args: {
+              patches = args.patches or [] ++ [(fetchpatch {
+                url = https://github.com/edolstra/aws-sdk-cpp/commit/7d58e303159b2fb343af9a1ec4512238efa147c7.patch;
+                sha256 = "103phn6kyvs1yc7fibyin3lgxz699qakhw671kl207484im55id1";
+              })];
+            }));
+
+      propagatedBuildInputs = [ boehmgc ];
+
+      # Seems to be required when using std::atomic with 64-bit types
+      NIX_LDFLAGS = lib.optionalString (stdenv.hostPlatform.system == "armv5tel-linux" || stdenv.hostPlatform.system == "armv6l-linux") "-latomic";
+
+      preConfigure =
+        # Copy libboost_context so we don't get all of Boost in our closure.
+        # https://github.com/NixOS/nixpkgs/issues/45462
+        if is20 then ''
+          mkdir -p $out/lib
+          cp -pd ${boost}/lib/{libboost_context*,libboost_thread*,libboost_system*} $out/lib
+          rm -f $out/lib/*.a
+          ${lib.optionalString stdenv.isLinux ''
+            chmod u+w $out/lib/*.so.*
+            patchelf --set-rpath $out/lib:${stdenv.cc.cc.lib}/lib $out/lib/libboost_thread.so.*
+          ''}
+        '' else ''
+          configureFlagsArray+=(BDW_GC_LIBS="-lgc -lgccpp")
+        '';
+
+      configureFlags =
+        [ "--with-store-dir=${storeDir}"
+          "--localstatedir=${stateDir}"
+          "--sysconfdir=${confDir}"
+          "--disable-init-state"
+          "--enable-gc"
+        ]
+        ++ lib.optionals (!is20) [
+          "--with-dbi=${perlPackages.DBI}/${perl.libPrefix}"
+          "--with-dbd-sqlite=${perlPackages.DBDSQLite}/${perl.libPrefix}"
+          "--with-www-curl=${perlPackages.WWWCurl}/${perl.libPrefix}"
+        ] ++ lib.optionals (is20 && stdenv.isLinux) [
+          "--with-sandbox-shell=${sh}/bin/busybox"
+        ]
+        ++ lib.optional (
+            stdenv.hostPlatform != stdenv.buildPlatform && stdenv.hostPlatform ? nix && stdenv.hostPlatform.nix ? system
+        ) ''--with-system=${stdenv.hostPlatform.nix.system}''
+           # RISC-V support in progress https://github.com/seccomp/libseccomp/pull/50
+        ++ lib.optional (!withLibseccomp) "--disable-seccomp-sandboxing";
+
+      makeFlags = [ "profiledir=$(out)/etc/profile.d" ];
+
+      installFlags = [ "sysconfdir=$(out)/etc" ];
+
+      doInstallCheck = true; # not cross
+
+      # socket path becomes too long otherwise
+      preInstallCheck = lib.optional stdenv.isDarwin ''
+        export TMPDIR=$NIX_BUILD_TOP
+      '';
+
+      separateDebugInfo = stdenv.isLinux;
+
+      enableParallelBuilding = true;
+
+      meta = {
+        description = "Powerful package manager that makes package management reliable and reproducible";
+        longDescription = ''
+          Nix is a powerful package manager for Linux and other Unix systems that
+          makes package management reliable and reproducible. It provides atomic
+          upgrades and rollbacks, side-by-side installation of multiple versions of
+          a package, multi-user package management and easy setup of build
+          environments.
+        '';
+        homepage = https://nixos.org/;
+        license = stdenv.lib.licenses.lgpl2Plus;
+        maintainers = [ stdenv.lib.maintainers.eelco ];
+        platforms = stdenv.lib.platforms.unix;
+        outputsToInstall = [ "out" "man" ];
+      };
+
+      passthru = {
+        inherit fromGit;
+
+        perl-bindings = if includesPerl then nix else stdenv.mkDerivation {
+          pname = "nix-perl";
+          inherit version;
+
+          inherit src;
+
+          postUnpack = "sourceRoot=$sourceRoot/perl";
+
+          # This is not cross-compile safe, don't have time to fix right now
+          # but noting for future travellers.
+          nativeBuildInputs =
+            [ perl pkgconfig curl nix libsodium ]
+            ++ lib.optionals fromGit [ autoreconfHook autoconf-archive ]
+            ++ lib.optional is20 boost;
+
+          configureFlags =
+            [ "--with-dbi=${perlPackages.DBI}/${perl.libPrefix}"
+              "--with-dbd-sqlite=${perlPackages.DBDSQLite}/${perl.libPrefix}"
+            ];
+
+          preConfigure = "export NIX_STATE_DIR=$TMPDIR";
+
+          preBuild = "unset NIX_INDENT_MAKE";
+        };
+      };
+    };
+  in nix;
+
+in rec {
+
+  nix = nixStable;
+
+  nix1 = callPackage common rec {
+    name = "nix-1.11.16";
+    src = fetchurl {
+      url = "http://nixos.org/releases/nix/${name}/${name}.tar.xz";
+      sha256 = "0ca5782fc37d62238d13a620a7b4bff6a200bab1bd63003709249a776162357c";
+    };
+
+    # Nix1 has the perl bindings by default, so no need to build the manually.
+    includesPerl = true;
+
+    inherit storeDir stateDir confDir boehmgc;
+  };
+
+  nixStable = callPackage common (rec {
+    name = "nix-2.3.2";
+    src = fetchurl {
+      url = "http://nixos.org/releases/nix/${name}/${name}.tar.xz";
+      sha256 = "9fea4b52db0b296dcf05d36f7ecad9f48396af3a682bb21e31f8d04c469beef8";
+    };
+
+    inherit storeDir stateDir confDir boehmgc;
+  } // stdenv.lib.optionalAttrs stdenv.cc.isClang {
+    stdenv = llvmPackages_6.stdenv;
+  });
+
+  nixUnstable = lib.lowPrio (callPackage common rec {
+    name = "nix-2.3${suffix}";
+    suffix = "pre6895_84de821";
+    src = fetchFromGitHub {
+      owner = "NixOS";
+      repo = "nix";
+      rev = "84de8210040580ce7189332b43038d52c56a9689";
+      sha256 = "062pdly0m2hk8ly8li5psvpbj1mi7m1a15k8wyzf79q7294l5li3";
+    };
+    fromGit = true;
+
+    inherit storeDir stateDir confDir boehmgc;
+  });
+
+  nixFlakes = lib.lowPrio (callPackage common rec {
+    name = "nix-2.4${suffix}";
+    suffix = "pre20191022_9cac895";
+    src = fetchFromGitHub {
+      owner = "NixOS";
+      repo = "nix";
+      rev = "9cac895406724e0304dff140379783c4d786e855";
+      hash = "sha256-Y1cdnCNoJmjqyC/a+Nt2N+5L3Ttg7K7zOD7gmtg1QzA=";
+    };
+    fromGit = true;
+
+    inherit storeDir stateDir confDir boehmgc;
+  });
+
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nixops/azure-mgmt-compute/default.nix b/nixpkgs/pkgs/tools/package-management/nixops/azure-mgmt-compute/default.nix
new file mode 100644
index 000000000000..462c9e615a13
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nixops/azure-mgmt-compute/default.nix
@@ -0,0 +1,37 @@
+{ pkgs
+, buildPythonPackage
+, fetchPypi
+, python
+, azure-mgmt-common
+}:
+
+buildPythonPackage rec {
+  version = "0.20.1";
+  pname = "azure-mgmt-compute";
+
+  src = fetchPypi {
+    inherit pname version;
+    extension = "zip";
+    sha256 = "97298fc7f133f1d50a974ed6299151eda494a574b0f7fdf8192a388015c2215a";
+  };
+
+  preConfigure = ''
+    # Patch to make this package work on requests >= 2.11.x
+    # CAN BE REMOVED ON NEXT PACKAGE UPDATE
+    sed -i 's|len(request_content)|str(len(request_content))|' azure/mgmt/compute/computemanagement.py
+  '';
+
+  postInstall = ''
+    echo "__import__('pkg_resources').declare_namespace(__name__)" >> "$out/lib/${python.libPrefix}"/site-packages/azure/__init__.py
+    echo "__import__('pkg_resources').declare_namespace(__name__)" >> "$out/lib/${python.libPrefix}"/site-packages/azure/mgmt/__init__.py
+  '';
+
+  propagatedBuildInputs = [ azure-mgmt-common ];
+
+  meta = with pkgs.lib; {
+    description = "Microsoft Azure SDK for Python";
+    homepage = "https://azure.microsoft.com/en-us/develop/python/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ olcai ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nixops/azure-mgmt-network/default.nix b/nixpkgs/pkgs/tools/package-management/nixops/azure-mgmt-network/default.nix
new file mode 100644
index 000000000000..fd47f8895fd4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nixops/azure-mgmt-network/default.nix
@@ -0,0 +1,37 @@
+{ pkgs
+, buildPythonPackage
+, fetchPypi
+, azure-mgmt-common
+, python
+}:
+
+buildPythonPackage rec {
+  version = "0.20.1";
+  pname = "azure-mgmt-network";
+
+  src = fetchPypi {
+    inherit pname version;
+    extension = "zip";
+    sha256 = "10vj22h6nxpw0qpvib5x2g6qs5j8z31142icvh4qk8k40fcrs9hx";
+  };
+
+  preConfigure = ''
+    # Patch to make this package work on requests >= 2.11.x
+    # CAN BE REMOVED ON NEXT PACKAGE UPDATE
+    sed -i 's|len(request_content)|str(len(request_content))|' azure/mgmt/network/networkresourceprovider.py
+  '';
+
+  postInstall = ''
+    echo "__import__('pkg_resources').declare_namespace(__name__)" >> "$out/lib/${python.libPrefix}"/site-packages/azure/__init__.py
+    echo "__import__('pkg_resources').declare_namespace(__name__)" >> "$out/lib/${python.libPrefix}"/site-packages/azure/mgmt/__init__.py
+  '';
+
+  propagatedBuildInputs = [ azure-mgmt-common ];
+
+  meta = with pkgs.lib; {
+    description = "Microsoft Azure SDK for Python";
+    homepage = "https://azure.microsoft.com/en-us/develop/python/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ olcai ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nixops/azure-mgmt-nspkg/default.nix b/nixpkgs/pkgs/tools/package-management/nixops/azure-mgmt-nspkg/default.nix
new file mode 100644
index 000000000000..aa037b48b4f5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nixops/azure-mgmt-nspkg/default.nix
@@ -0,0 +1,25 @@
+{ pkgs
+, buildPythonPackage
+, fetchPypi
+, azure-nspkg
+}:
+
+buildPythonPackage rec {
+  version = "1.0.0";
+  pname = "azure-mgmt-nspkg";
+
+  src = fetchPypi {
+    inherit pname version;
+    extension = "zip";
+    sha256 = "1rq92fj3kvnqkk18596dybw0kvhgscvc6cd8hp1dhy3wrkqnhwmq";
+  };
+
+  propagatedBuildInputs = [ azure-nspkg ];
+
+  meta = with pkgs.lib; {
+    description = "Microsoft Azure SDK for Python";
+    homepage = "https://azure.microsoft.com/en-us/develop/python/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ olcai ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nixops/azure-mgmt-resource/default.nix b/nixpkgs/pkgs/tools/package-management/nixops/azure-mgmt-resource/default.nix
new file mode 100644
index 000000000000..b60e3aee3402
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nixops/azure-mgmt-resource/default.nix
@@ -0,0 +1,38 @@
+{ pkgs
+, buildPythonPackage
+, fetchPypi
+, python
+, azure-mgmt-common
+}:
+
+
+buildPythonPackage rec {
+  version = "0.20.1";
+  pname = "azure-mgmt-resource";
+
+  src = fetchPypi {
+    inherit pname version;
+    extension = "zip";
+    sha256 = "0slh9qfm5nfacrdm3lid0sr8kwqzgxvrwf27laf9v38kylkfqvml";
+  };
+
+  preConfigure = ''
+    # Patch to make this package work on requests >= 2.11.x
+    # CAN BE REMOVED ON NEXT PACKAGE UPDATE
+    sed -i 's|len(request_content)|str(len(request_content))|' azure/mgmt/resource/resourcemanagement.py
+  '';
+
+  postInstall = ''
+    echo "__import__('pkg_resources').declare_namespace(__name__)" >> "$out/lib/${python.libPrefix}"/site-packages/azure/__init__.py
+    echo "__import__('pkg_resources').declare_namespace(__name__)" >> "$out/lib/${python.libPrefix}"/site-packages/azure/mgmt/__init__.py
+  '';
+
+  propagatedBuildInputs = [ azure-mgmt-common ];
+
+  meta = with pkgs.lib; {
+    description = "Microsoft Azure SDK for Python";
+    homepage = "https://azure.microsoft.com/en-us/develop/python/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ olcai ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nixops/azure-mgmt-storage/default.nix b/nixpkgs/pkgs/tools/package-management/nixops/azure-mgmt-storage/default.nix
new file mode 100644
index 000000000000..2e0523bb25cc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nixops/azure-mgmt-storage/default.nix
@@ -0,0 +1,37 @@
+{ pkgs
+, buildPythonPackage
+, fetchPypi
+, python
+, azure-mgmt-common
+}:
+
+buildPythonPackage rec {
+  version = "0.20.0";
+  pname = "azure-mgmt-storage";
+
+  src = fetchPypi {
+    inherit pname version;
+    extension = "zip";
+    sha256 = "16iw7hqhq97vlzfwixarfnirc60l5mz951p57brpcwyylphl3yim";
+  };
+
+  preConfigure = ''
+    # Patch to make this package work on requests >= 2.11.x
+    # CAN BE REMOVED ON NEXT PACKAGE UPDATE
+    sed -i 's|len(request_content)|str(len(request_content))|' azure/mgmt/storage/storagemanagement.py
+  '';
+
+  postInstall = ''
+    echo "__import__('pkg_resources').declare_namespace(__name__)" >> "$out/lib/${python.libPrefix}"/site-packages/azure/__init__.py
+    echo "__import__('pkg_resources').declare_namespace(__name__)" >> "$out/lib/${python.libPrefix}"/site-packages/azure/mgmt/__init__.py
+  '';
+
+  propagatedBuildInputs = [ azure-mgmt-common ];
+
+  meta = with pkgs.lib; {
+    description = "Microsoft Azure SDK for Python";
+    homepage = "https://azure.microsoft.com/en-us/develop/python/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ olcai ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nixops/azure-storage/default.nix b/nixpkgs/pkgs/tools/package-management/nixops/azure-storage/default.nix
new file mode 100644
index 000000000000..6693a7464d43
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nixops/azure-storage/default.nix
@@ -0,0 +1,35 @@
+{ pkgs
+, buildPythonPackage
+, fetchPypi
+, python
+, azure-common
+, futures
+, dateutil
+, requests
+, isPy3k
+}:
+
+buildPythonPackage rec {
+  version = "0.20.3";
+  pname = "azure-storage";
+
+  src = fetchPypi {
+    inherit pname version;
+    extension = "zip";
+    sha256 = "06bmw6k2000kln5jwk5r9bgcalqbyvqirmdh9gq4s6nb4fv3c0jb";
+  };
+
+  propagatedBuildInputs = [ azure-common dateutil requests ]
+                            ++ pkgs.lib.optionals (!isPy3k) [ futures ];
+
+  postInstall = ''
+    echo "__import__('pkg_resources').declare_namespace(__name__)" >> "$out/lib/${python.libPrefix}"/site-packages/azure/__init__.py
+  '';
+
+  meta = with pkgs.lib; {
+    description = "Microsoft Azure SDK for Python";
+    homepage = "https://azure.microsoft.com/en-us/develop/python/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ olcai ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nixops/default.nix b/nixpkgs/pkgs/tools/package-management/nixops/default.nix
new file mode 100644
index 000000000000..c761a3a47793
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nixops/default.nix
@@ -0,0 +1,9 @@
+{ callPackage, fetchurl }:
+
+callPackage ./generic.nix (rec {
+  version = "1.7";
+  src = fetchurl {
+    url = "https://nixos.org/releases/nixops/nixops-${version}/nixops-${version}.tar.bz2";
+    sha256 = "091c0b5bca57d4aa20be20e826ec161efe3aec9c788fbbcf3806a734a517f0f3";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/package-management/nixops/deps.nix b/nixpkgs/pkgs/tools/package-management/nixops/deps.nix
new file mode 100644
index 000000000000..7da38f83e7fe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nixops/deps.nix
@@ -0,0 +1,20 @@
+[
+  {
+    goPackagePath = "github.com/mattn/go-sqlite3";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-sqlite3";
+      rev = "b4142c444a8941d0d92b0b7103a24df9cd815e42";
+      sha256 = "0xq2y4am8dz9w9aaq24s1npg1sn8pf2gn4nki73ylz2fpjwq9vla";
+    };
+  }
+  {
+    goPackagePath = "github.com/miekg/dns";
+    fetch = {
+      type = "git";
+      url = "https://github.com/miekg/dns";
+      rev = "75229eecb7af00b2736e93b779a78429dcb19472";
+      sha256 = "1vsjy07kkyx11iz4qsihhykac3ddq3ywdgv6bwrv407504f7x6wl";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/package-management/nixops/generic.nix b/nixpkgs/pkgs/tools/package-management/nixops/generic.nix
new file mode 100644
index 000000000000..79400a8e5ea0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nixops/generic.nix
@@ -0,0 +1,55 @@
+{ lib, python2Packages, libxslt, docbook_xsl_ns, openssh, cacert, nixopsAzurePackages ? []
+# version args
+, src, version
+, meta ? {}
+}:
+
+python2Packages.buildPythonApplication {
+  name = "nixops-${version}";
+  inherit version src;
+
+  buildInputs = [ libxslt ];
+
+  pythonPath = with python2Packages;
+    [ prettytable
+      boto
+      boto3
+      hetzner
+      libcloud
+      adal
+      # Go back to sqlite once Python 2.7.13 is released
+      pysqlite
+      datadog
+      digital-ocean
+      libvirt
+      typing
+    ] ++ nixopsAzurePackages;
+
+  checkPhase =
+  # Ensure, that there are no (python) import errors
+  ''
+    SSL_CERT_FILE=${cacert}/etc/ssl/certs/ca-bundle.crt \
+    HOME=$(pwd) \
+      $out/bin/nixops --version
+  '';
+
+  postInstall = ''
+    make -C doc/manual install nixops.1 docbookxsl=${docbook_xsl_ns}/xml/xsl/docbook \
+      docdir=$out/share/doc/nixops mandir=$out/share/man
+
+    mkdir -p $out/share/nix/nixops
+    cp -av "nix/"* $out/share/nix/nixops
+
+    # Add openssh to nixops' PATH. On some platforms, e.g. CentOS and RHEL
+    # the version of openssh is causing errors when have big networks (40+)
+    wrapProgram $out/bin/nixops --prefix PATH : "${openssh}/bin"
+  '';
+
+  meta = {
+    homepage = https://github.com/NixOS/nixops;
+    description = "NixOS cloud provisioning and deployment tool";
+    maintainers = with lib.maintainers; [ aminechikhaoui eelco rob domenkozar ];
+    platforms = lib.platforms.unix;
+    license = lib.licenses.lgpl3;
+  } // meta;
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nixops/nixops-dns.nix b/nixpkgs/pkgs/tools/package-management/nixops/nixops-dns.nix
new file mode 100644
index 000000000000..f63fe868e011
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nixops/nixops-dns.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildGoPackage
+, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "nixops-dns";
+  version = "1.0";
+
+  goDeps = ./deps.nix;
+  goPackagePath = "github.com/kamilchm/nixops-dns";
+
+  src = fetchFromGitHub {
+    owner = "kamilchm";
+    repo = "nixops-dns";
+    rev = "v${version}";
+    sha256 = "1fyqwk2knrv40zpf71a56bjyaycr3p6fzrqq7gaan056ydy83cai";
+  };
+
+  meta = with lib; {
+    homepage = https://github.com/kamilchm/nixops-dns/;
+    description = "DNS server for resolving NixOps machines";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kamilchm sorki ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nixops/nixops-v1_6_1.nix b/nixpkgs/pkgs/tools/package-management/nixops/nixops-v1_6_1.nix
new file mode 100644
index 000000000000..e6e30b26240f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nixops/nixops-v1_6_1.nix
@@ -0,0 +1,32 @@
+{ callPackage, newScope, pkgs, fetchurl }:
+
+callPackage ./generic.nix (rec {
+  version = "1.6.1";
+  src = fetchurl {
+    url = "http://nixos.org/releases/nixops/nixops-${version}/nixops-${version}.tar.bz2";
+    sha256 = "0lfx5fhyg3z6725ydsk0ibg5qqzp5s0x9nbdww02k8s307axiah3";
+  };
+  nixopsAzurePackages = with python2Packages; [
+    azure-storage
+    azure-mgmt-compute
+    azure-mgmt-network
+    azure-mgmt-resource
+    azure-mgmt-storage
+  ];
+  # nixops is incompatible with the most recent versions of listed
+  # azure-mgmt-* packages, therefore we are pinning them to
+  # package-private versions, so that they don't get trampled by
+  # updates.
+  # see
+  # https://github.com/NixOS/nixops/issues/1065
+  python2Packages = pkgs.python2Packages.override {
+    overrides = (self: super: let callPackage = newScope self; in {
+      azure-mgmt-compute = callPackage ./azure-mgmt-compute { };
+      azure-mgmt-network = callPackage ./azure-mgmt-network { };
+      azure-mgmt-nspkg = callPackage ./azure-mgmt-nspkg { };
+      azure-mgmt-resource = callPackage ./azure-mgmt-resource { };
+      azure-mgmt-storage = callPackage ./azure-mgmt-storage { };
+      azure-storage = callPackage ./azure-storage { };
+    });
+  };
+})
diff --git a/nixpkgs/pkgs/tools/package-management/nixops/unstable.nix b/nixpkgs/pkgs/tools/package-management/nixops/unstable.nix
new file mode 100644
index 000000000000..94975807dea6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nixops/unstable.nix
@@ -0,0 +1,13 @@
+{ callPackage, fetchurl }:
+
+# To upgrade pick the hydra job of the nixops revision that you want to upgrade
+# to from: https://hydra.nixos.org/job/nixops/master/tarball
+# Then copy the URL to the tarball.
+
+callPackage ./generic.nix (rec {
+  version = "1.7pre2764_932bf43";
+  src = fetchurl {
+    url = "https://hydra.nixos.org/build/92372343/download/2/nixops-${version}.tar.bz2";
+    sha256 = "f35bf81bf2805473ea54248d0ee92d163d00a1992f3f75d17e8cf430db1f9919";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/package-management/nixpkgs-review/default.nix b/nixpkgs/pkgs/tools/package-management/nixpkgs-review/default.nix
new file mode 100644
index 000000000000..928c946de2be
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nixpkgs-review/default.nix
@@ -0,0 +1,30 @@
+{ stdenv
+, python3
+, fetchFromGitHub
+, nix
+, git
+, lib
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "nixpkgs-review";
+  version = "2.1.1";
+
+  src = fetchFromGitHub {
+    owner = "Mic92";
+    repo = "nixpkgs-review";
+    rev = version;
+    sha256 = "0rx0ld2ihsvlr1yiap5cq7h227jr79zf3xhkninh2m00x384s6bd";
+  };
+
+  makeWrapperArgs = [
+    "--prefix" "PATH" ":" (lib.makeBinPath [ nix git ])
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Review pull-requests on https://github.com/NixOS/nixpkgs";
+    homepage = https://github.com/Mic92/nixpkgs-review;
+    license = licenses.mit;
+    maintainers = [ maintainers.mic92 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nixui/default.nix b/nixpkgs/pkgs/tools/package-management/nixui/default.nix
new file mode 100644
index 000000000000..131a3bb5fddc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nixui/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, pkgs, fetchgit, nix, node_webkit, makeDesktopItem
+, writeScript }:
+let
+  version = "0.2.1";
+  src = fetchgit {
+    url = "git://github.com/matejc/nixui.git";
+    rev = "845a5f4a33f1d0c509c727c130d0792a5b450a38";
+    sha256 = "1ay3i4lgzs3axbby06l4vvspxi0aa9pwiil84qj0dqq1jb6isara";
+  };
+  nixui = (import ./nixui.nix {
+    inherit pkgs;
+    inherit (stdenv.hostPlatform) system;
+  })."nixui-git://github.com/matejc/nixui.git#0.2.1";
+  script = writeScript "nixui" ''
+    #! ${stdenv.shell}
+    export PATH="${nix}/bin:\$PATH"
+    ${node_webkit}/bin/nw ${nixui}/lib/node_modules/nixui/
+  '';
+  desktop = makeDesktopItem {
+    name = "nixui";
+    exec = script;
+    icon = "${nixui}/lib/node_modules/nixui/img/128.png";
+    desktopName = "NixUI";
+    genericName = "NixUI";
+  };
+in
+stdenv.mkDerivation {
+  pname = "nixui";
+  inherit version src;
+  installPhase = ''
+    mkdir -p $out/bin
+    ln -s ${script} $out/bin/nixui
+
+    mkdir -p $out/share/applications
+    ln -s ${desktop}/share/applications/* $out/share/applications/
+  '';
+  meta = {
+    description = "NodeWebkit user interface for Nix";
+    homepage = https://github.com/matejc/nixui;
+    license = stdenv.lib.licenses.asl20;
+    maintainers = [ stdenv.lib.maintainers.matejc ];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nixui/generate.sh b/nixpkgs/pkgs/tools/package-management/nixui/generate.sh
new file mode 100755
index 000000000000..334edb4a027a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nixui/generate.sh
@@ -0,0 +1,4 @@
+#!/usr/bin/env nix-shell
+#! nix-shell -i bash -p nodePackages.node2nix
+
+exec node2nix -8 -i pkg.json -c nixui.nix -e ../../../development/node-packages/node-env.nix --no-copy-node-env
diff --git a/nixpkgs/pkgs/tools/package-management/nixui/nixui.nix b/nixpkgs/pkgs/tools/package-management/nixui/nixui.nix
new file mode 100644
index 000000000000..4377681e20d8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nixui/nixui.nix
@@ -0,0 +1,17 @@
+# This file has been generated by node2nix 1.7.0. Do not edit!
+
+{pkgs ? import <nixpkgs> {
+    inherit system;
+  }, system ? builtins.currentSystem, nodejs ? pkgs.nodejs-10_x}:
+
+let
+  nodeEnv = import ../../../development/node-packages/node-env.nix {
+    inherit (pkgs) stdenv python2 utillinux runCommand writeTextFile;
+    inherit nodejs;
+    libtool = if pkgs.stdenv.isDarwin then pkgs.darwin.cctools else null;
+  };
+in
+import ./node-packages.nix {
+  inherit (pkgs) fetchurl fetchgit;
+  inherit nodeEnv;
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/package-management/nixui/node-packages.nix b/nixpkgs/pkgs/tools/package-management/nixui/node-packages.nix
new file mode 100644
index 000000000000..07e3cd896f63
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nixui/node-packages.nix
@@ -0,0 +1,108 @@
+# This file has been generated by node2nix 1.7.0. Do not edit!
+
+{nodeEnv, fetchurl, fetchgit, globalBuildInputs ? []}:
+
+let
+  sources = {
+    "async-0.2.10" = {
+      name = "async";
+      packageName = "async";
+      version = "0.2.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/async/-/async-0.2.10.tgz";
+        sha1 = "b6bbe0b0674b9d719708ca38de8c237cb526c3d1";
+      };
+    };
+    "binary-search-tree-0.2.4" = {
+      name = "binary-search-tree";
+      packageName = "binary-search-tree";
+      version = "0.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/binary-search-tree/-/binary-search-tree-0.2.4.tgz";
+        sha1 = "14fe106366a59ca8efb68c0ae30c36aaff0cd510";
+      };
+    };
+    "isnumber-1.0.0" = {
+      name = "isnumber";
+      packageName = "isnumber";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isnumber/-/isnumber-1.0.0.tgz";
+        sha1 = "0e3f9759b581d99dd85086f0ec2a74909cfadd01";
+      };
+    };
+    "mkdirp-0.3.5" = {
+      name = "mkdirp";
+      packageName = "mkdirp";
+      version = "0.3.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz";
+        sha1 = "de3e5f8961c88c787ee1368df849ac4413eca8d7";
+      };
+    };
+    "nedb-1.0.2" = {
+      name = "nedb";
+      packageName = "nedb";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nedb/-/nedb-1.0.2.tgz";
+        sha1 = "309f10ba29f2002f74a92fb870b8a53ba2131593";
+      };
+    };
+    "underscore-1.4.4" = {
+      name = "underscore";
+      packageName = "underscore";
+      version = "1.4.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz";
+        sha1 = "61a6a32010622afa07963bf325203cf12239d604";
+      };
+    };
+    "underscore-1.9.1" = {
+      name = "underscore";
+      packageName = "underscore";
+      version = "1.9.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz";
+        sha512 = "5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==";
+      };
+    };
+  };
+in
+{
+  "nixui-git://github.com/matejc/nixui.git#0.2.1" = nodeEnv.buildNodePackage {
+    name = "nixui";
+    packageName = "nixui";
+    version = "0.2.1";
+    src = fetchgit {
+      url = "git://github.com/matejc/nixui.git";
+      rev = "845a5f4a33f1d0c509c727c130d0792a5b450a38";
+      sha256 = "2a2b1dcd9201e306242688c6c86f520ac47ef5de841ae0d7ea6ae8ff2889c3ab";
+    };
+    dependencies = [
+      sources."async-0.2.10"
+      (sources."binary-search-tree-0.2.4" // {
+        dependencies = [
+          sources."underscore-1.4.4"
+        ];
+      })
+      sources."isnumber-1.0.0"
+      sources."mkdirp-0.3.5"
+      (sources."nedb-1.0.2" // {
+        dependencies = [
+          sources."underscore-1.4.4"
+        ];
+      })
+      sources."underscore-1.9.1"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "nix-env frontend written with Polymer";
+      homepage = https://github.com/matejc/nixui;
+      license = "Apache-2.0";
+    };
+    production = true;
+    bypassCache = true;
+    reconstructLock = true;
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/package-management/nixui/pkg.json b/nixpkgs/pkgs/tools/package-management/nixui/pkg.json
new file mode 100644
index 000000000000..551df4f1b1c9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nixui/pkg.json
@@ -0,0 +1,3 @@
+[
+  { "nixui": "git://github.com/matejc/nixui.git#0.2.1" }
+]
diff --git a/nixpkgs/pkgs/tools/package-management/nox/default.nix b/nixpkgs/pkgs/tools/package-management/nox/default.nix
new file mode 100644
index 000000000000..673fc89e98db
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nox/default.nix
@@ -0,0 +1,32 @@
+{ lib, python3Packages, fetchurl, git }:
+
+python3Packages.buildPythonApplication rec {
+  name = "nox-${version}";
+  version = "0.0.6";
+  namePrefix = "";
+
+  src = fetchurl {
+    url = "mirror://pypi/n/nix-nox/nix-nox-${version}.tar.gz";
+    sha256 = "1qcbhdnhdhhv7q6cqdgv0q55ic8fk18526zn2yb12x9r1s0lfp9z";
+  };
+
+  patches = [ ./nox-review-wip.patch ];
+
+  buildInputs = [ python3Packages.pbr git ];
+
+  propagatedBuildInputs = with python3Packages; [
+      dogpile_cache
+      click
+      requests
+      characteristic
+      setuptools
+    ];
+
+  meta = {
+    homepage = https://github.com/madjar/nox;
+    description = "Tools to make nix nicer to use";
+    maintainers = [ lib.maintainers.madjar ];
+    license = lib.licenses.mit;
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/nox/nox-review-wip.patch b/nixpkgs/pkgs/tools/package-management/nox/nox-review-wip.patch
new file mode 100644
index 000000000000..e82dc7a2c266
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/nox/nox-review-wip.patch
@@ -0,0 +1,11 @@
+--- a/nox/review.py	2017-09-23 04:04:37.322484753 +0200
++++ a/nox/review.py	2017-09-23 04:18:31.582692181 +0200
+@@ -84,7 +84,7 @@
+     ctx.obj['dry_run'] = dry_run
+ 
+ 
+-@cli.command(short_help='difference between working tree and a commit')
++@cli.command('wip', short_help='difference between working tree and a commit')
+ @click.option('--against', default='HEAD')
+ @click.pass_context
+ @setup_nixpkgs_config
diff --git a/nixpkgs/pkgs/tools/package-management/opkg-utils/default.nix b/nixpkgs/pkgs/tools/package-management/opkg-utils/default.nix
new file mode 100644
index 000000000000..1c97757ff8a6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/opkg-utils/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchgit }:
+
+stdenv.mkDerivation {
+  name = "opkg-utils-20141030";
+
+  # No releases, only a git tree
+  src = fetchgit {
+    url = "git://git.yoctoproject.org/opkg-utils";
+    rev = "762d9dadce548108d4204c2113461a7dd6f57e60";
+    sha256 = "09jfkq2p5wv0ifxkw62f4m7pkvpaalh74j2skymi8lh4268krfwz";
+  };
+
+  preBuild = ''
+    makeFlagsArray+=(PREFIX="$out")
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Helper scripts for use with the opkg package manager";
+    homepage = http://git.yoctoproject.org/cgit/cgit.cgi/opkg-utils/;
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/opkg/default.nix b/nixpkgs/pkgs/tools/package-management/opkg/default.nix
new file mode 100644
index 000000000000..1aae0290d5a7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/opkg/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl, pkgconfig, curl, gpgme, libarchive, bzip2, lzma, attr, acl, libxml2
+, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  version = "0.4.2";
+  pname = "opkg";
+  src = fetchurl {
+    url = "https://downloads.yoctoproject.org/releases/opkg/opkg-${version}.tar.gz";
+    sha256 = "01p1a7hw9q9ixfk01djyy9axs71z1x9dkdnqz7zysmrlqi97i246";
+  };
+
+  nativeBuildInputs = [ pkgconfig autoreconfHook ];
+  buildInputs = [ curl gpgme libarchive bzip2 lzma attr acl libxml2 ];
+
+  meta = with stdenv.lib; {
+    description = "A lightweight package management system based upon ipkg";
+    homepage = https://git.yoctoproject.org/cgit/cgit.cgi/opkg/;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/packagekit/default.nix b/nixpkgs/pkgs/tools/package-management/packagekit/default.nix
new file mode 100644
index 000000000000..dc69ae457dcd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/packagekit/default.nix
@@ -0,0 +1,74 @@
+{ stdenv, fetchFromGitHub, lib
+, intltool, glib, pkgconfig, polkit, python3, sqlite
+, gobject-introspection, vala, gtk-doc, autoreconfHook, autoconf-archive
+# TODO: set enableNixBackend to true, as soon as it builds
+, nix, enableNixBackend ? false, boost
+, enableCommandNotFound ? false
+, enableBashCompletion ? false, bash-completion ? null
+, enableSystemd ? stdenv.isLinux, systemd }:
+
+stdenv.mkDerivation rec {
+  pname = "packagekit";
+  version = "1.1.13";
+
+  outputs = [ "out" "dev" ];
+
+  src = fetchFromGitHub {
+    owner = "hughsie";
+    repo = "PackageKit";
+    rev = "PACKAGEKIT_${lib.replaceStrings ["."] ["_"] version}";
+    sha256 = "0xmgac27p5z8wr56yw3cqhywnlvaf8kvyv1g0nzxnq167xj5vxam";
+  };
+
+  buildInputs = [ glib polkit python3 gobject-introspection ]
+                  ++ lib.optional enableSystemd systemd
+                  ++ lib.optional enableBashCompletion bash-completion;
+  propagatedBuildInputs = [ sqlite nix boost ];
+  nativeBuildInputs = [ vala intltool pkgconfig autoreconfHook autoconf-archive gtk-doc ];
+
+  preAutoreconf = ''
+    gtkdocize
+    intltoolize
+  '';
+
+  configureFlags = [
+    (if enableSystemd then "--enable-systemd" else "--disable-systemd")
+    "--disable-dummy"
+    "--disable-cron"
+    "--enable-introspection"
+    "--disable-offline-update"
+    "--localstatedir=/var"
+    "--sysconfdir=/etc"
+    "--with-dbus-sys=${placeholder "out"}/share/dbus-1/system.d"
+    "--with-systemdsystemunitdir=${placeholder "out"}/lib/systemd/system"
+    "--with-systemduserunitdir=${placeholder "out"}/lib/systemd/user"
+  ]
+  ++ lib.optional enableNixBackend "--enable-nix"
+  ++ lib.optional (!enableBashCompletion) "--disable-bash-completion"
+  ++ lib.optional (!enableCommandNotFound) "--disable-command-not-found";
+
+  enableParallelBuilding = true;
+
+  installFlags = [
+    "sysconfdir=${placeholder "out"}/etc"
+    "localstatedir=\${TMPDIR}"
+  ];
+
+  meta = with lib; {
+    description = "System to facilitate installing and updating packages";
+    longDescription = ''
+      PackageKit is a system designed to make installing and updating software
+      on your computer easier. The primary design goal is to unify all the
+      software graphical tools used in different distributions, and use some of
+      the latest technology like PolicyKit. The actual nuts-and-bolts distro
+      tool (dnf, apt, etc) is used by PackageKit using compiled and scripted
+      helpers. PackageKit isn't meant to replace these tools, instead providing
+      a common set of abstractions that can be used by standard GUI and text
+      mode package managers.
+    '';
+    homepage = http://www.packagekit.org/;
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ matthewbauer ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/packagekit/qt.nix b/nixpkgs/pkgs/tools/package-management/packagekit/qt.nix
new file mode 100644
index 000000000000..987c834f505d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/packagekit/qt.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchFromGitHub, cmake, pkgconfig
+, qttools, packagekit }:
+
+stdenv.mkDerivation rec {
+  pname = "packagekit-qt";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner  = "hughsie";
+    repo   = "PackageKit-Qt";
+    rev    = "v${version}";
+    sha256 = "1ls6mn9abpwzw5wjgmslc5h9happj3516y1q67imppczk8g9h2yk";
+  };
+
+  buildInputs = [ packagekit ];
+
+  nativeBuildInputs = [ cmake pkgconfig qttools ];
+
+  enableParallelBuilding = true;
+
+  meta = packagekit.meta // {
+    description = "System to facilitate installing and updating packages - Qt";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/pacman/default.nix b/nixpkgs/pkgs/tools/package-management/pacman/default.nix
new file mode 100644
index 000000000000..cdd0c83574af
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/pacman/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, lib, fetchurl, pkgconfig, m4, perl, libarchive, openssl, zlib, bzip2,
+lzma, curl, runtimeShell }:
+
+stdenv.mkDerivation rec {
+  pname = "pacman";
+  version = "5.2.1";
+
+  src = fetchurl {
+    url = "https://sources.archlinux.org/other/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "04pkb8qvkldrayfns8cx4fljl4lyys1dqvlf7b5kkl2z4q3w8c0r";
+  };
+
+  enableParallelBuilding = true;
+
+  configureFlags = [
+    # trying to build docs fails with a2x errors, unable to fix through asciidoc
+    "--disable-doc"
+
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+    "--with-scriptlet-shell=${runtimeShell}"
+  ];
+
+  installFlags = [ "sysconfdir=${placeholder "out"}/etc" ];
+
+  nativeBuildInputs = [ pkgconfig m4 ];
+  buildInputs = [ curl perl libarchive openssl zlib bzip2 lzma ];
+
+  postFixup = ''
+    substituteInPlace $out/bin/repo-add \
+      --replace bsdtar "${libarchive}/bin/bsdtar"
+  '';
+
+  meta = with lib; {
+    description = "A simple library-based package manager";
+    homepage = https://www.archlinux.org/pacman/;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ mt-caret ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/protontricks/default.nix b/nixpkgs/pkgs/tools/package-management/protontricks/default.nix
new file mode 100644
index 000000000000..c8413c56854f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/protontricks/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, lib, buildPythonApplication, fetchFromGitHub
+, vdf, wine, winetricks, zenity
+}:
+
+buildPythonApplication rec {
+  pname = "protontricks";
+  version = "1.3.1";
+
+  src = fetchFromGitHub {
+    owner = "Matoking";
+    repo = pname;
+    rev = version;
+    sha256 = "0snhm9r5igik030iqxm3zd9zvhlnsxi20zac71bbc29qflsi2dhk";
+  };
+
+  propagatedBuildInputs = [ vdf ];
+
+  # The wine install shipped with Proton must run under steam's
+  # chrootenv, but winetricks and zenity break when running under
+  # it. See https://github.com/NixOS/nix/issues/902.
+  #
+  # The current workaround is to use wine from nixpkgs
+  makeWrapperArgs = [
+    "--set STEAM_RUNTIME 0"
+    "--set-default WINE ${wine}/bin/wine"
+    "--set-default WINESERVER ${wine}/bin/wineserver"
+    "--prefix PATH : ${lib.makeBinPath [
+      (winetricks.override { inherit wine; })
+      zenity
+    ]}"
+  ];
+
+  meta = with stdenv.lib; {
+    description = "A simple wrapper for running Winetricks commands for Proton-enabled games";
+    homepage = https://github.com/Matoking/protontricks;
+    license = licenses.gpl3;
+    platforms = with platforms; linux;
+    maintainers = with maintainers; [ metadark ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/python2nix/default.nix b/nixpkgs/pkgs/tools/package-management/python2nix/default.nix
new file mode 100644
index 000000000000..675ec61f4db9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/python2nix/default.nix
@@ -0,0 +1,19 @@
+{ stdenv, fetchFromGitHub, pythonPackages }:
+
+pythonPackages.buildPythonApplication {
+  name = "python2nix-20140927";
+ 
+  src = fetchFromGitHub {
+    owner = "proger";
+    repo = "python2nix";
+    rev = "84e3a5bbe82e5d9d694d6db8dabf73def4ac917b";
+    sha256 = "022gr0gw6azfi3iq4ggb3fhkw2jljs6n5rncn45hb5liwakigj8i";
+  };
+
+  propagatedBuildInputs = with pythonPackages; [ requests pip setuptools ];
+
+  meta = with stdenv.lib; {
+    maintainers = [ maintainers.domenkozar ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/reuse/default.nix b/nixpkgs/pkgs/tools/package-management/reuse/default.nix
new file mode 100644
index 000000000000..13a3a85f082d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/reuse/default.nix
@@ -0,0 +1,34 @@
+{ lib, python3Packages, fetchFromGitHub }:
+
+with python3Packages;
+
+buildPythonApplication rec {
+  pname = "reuse";
+  version = "0.7.0";
+
+  src = fetchFromGitHub {
+    owner = "fsfe";
+    repo = "reuse-tool";
+    rev = "v${version}";
+    sha256 = "04i8zd66cs152h28k9085nqg937wp31pz2yqywaldx1gywijyd8h";
+  };
+
+  propagatedBuildInputs = [
+    binaryornot
+    boolean-py
+    debian
+    jinja2
+    license-expression
+    requests
+    setuptools
+  ];
+
+  checkInputs = [ pytest ];
+
+  meta = with lib; {
+    description = "A tool for compliance with the REUSE Initiative recommendations";
+    homepage = "https://github.com/fsfe/reuse-tool";
+    license = with licenses; [ asl20 cc-by-sa-40 cc0 gpl3Plus ];
+    maintainers = [ maintainers.FlorianFranzen ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/rpm/default.nix b/nixpkgs/pkgs/tools/package-management/rpm/default.nix
new file mode 100644
index 000000000000..05d293b5bf12
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/rpm/default.nix
@@ -0,0 +1,70 @@
+{ stdenv
+, pkgconfig, autoreconfHook
+, fetchurl, cpio, zlib, bzip2, file, elfutils, libbfd, libarchive, nspr, nss, popt, db, xz, python, lua
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rpm";
+  version = "4.14.2.1";
+
+  src = fetchurl {
+    url = "http://ftp.rpm.org/releases/rpm-4.14.x/rpm-${version}.tar.bz2";
+    sha256 = "1nmck2fq9h85fgs3zhh6w1avlw5y16cbz5khd459ry3jfd5w4f8i";
+  };
+
+  outputs = [ "out" "dev" "man" ];
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  buildInputs = [ cpio zlib bzip2 file libarchive nspr nss db xz python lua ];
+
+  # rpm/rpmlib.h includes popt.h, and then the pkg-config file mentions these as linkage requirements
+  propagatedBuildInputs = [ popt nss db bzip2 libarchive libbfd ]
+    ++ stdenv.lib.optional stdenv.isLinux elfutils;
+
+  NIX_CFLAGS_COMPILE = "-I${nspr.dev}/include/nspr -I${nss.dev}/include/nss";
+
+  configureFlags = [
+    "--with-external-db"
+    "--with-lua"
+    "--enable-python"
+    "--localstatedir=/var"
+    "--sharedstatedir=/com"
+  ];
+
+  postPatch = ''
+    # For Python3, the original expression evaluates as 'python3.4' but we want 'python3.4m' here
+    substituteInPlace configure.ac --replace 'python''${PYTHON_VERSION}' ${python.executable}
+
+    substituteInPlace Makefile.am --replace '@$(MKDIR_P) $(DESTDIR)$(localstatedir)/tmp' ""
+  '';
+
+  preFixup = ''
+    # Don't keep a reference to RPM headers or manpages
+    for f in $out/lib/rpm/platform/*/macros; do
+      substituteInPlace $f --replace "$dev" "/rpm-dev-path-was-here"
+      substituteInPlace $f --replace "$man" "/rpm-man-path-was-here"
+    done
+
+    # Avoid macros like '%__ld' pointing to absolute paths
+    for tool in ld nm objcopy objdump strip; do
+      sed -i $out/lib/rpm/macros -e "s/^%__$tool.*/%__$tool $tool/"
+    done
+
+    # Avoid helper scripts pointing to absolute paths
+    for tool in find-provides find-requires; do
+      sed -i $out/lib/rpm/$tool -e "s#/usr/lib/rpm/#$out/lib/rpm/#"
+    done
+
+    # symlinks produced by build are incorrect
+    ln -sf $out/bin/{rpm,rpmquery}
+    ln -sf $out/bin/{rpm,rpmverify}
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://www.rpm.org/;
+    license = licenses.gpl2;
+    description = "The RPM Package Manager";
+    maintainers = with maintainers; [ copumpkin ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/package-management/xbps/cert-paths.patch b/nixpkgs/pkgs/tools/package-management/xbps/cert-paths.patch
new file mode 100644
index 000000000000..569161d9f2e4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/xbps/cert-paths.patch
@@ -0,0 +1,25 @@
+From d13a550dbc8876c35b912fe3e0eadd45b278be27 Mon Sep 17 00:00:00 2001
+From: Will Dietz <w@wdtz.org>
+Date: Fri, 18 May 2018 09:51:48 -0500
+Subject: [PATCH] add certificate path fallbacks
+
+---
+ lib/fetch/common.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/lib/fetch/common.c b/lib/fetch/common.c
+index 94fb2651..79b50115 100644
+--- a/lib/fetch/common.c
++++ b/lib/fetch/common.c
+@@ -1012,6 +1012,8 @@ fetch_ssl_setup_peer_verification(SSL_CTX *ctx, int verbose)
+ 
+ 	if (getenv("SSL_NO_VERIFY_PEER") == NULL) {
+ 		ca_cert_file = getenv("SSL_CA_CERT_FILE");
++		ca_cert_file = ca_cert_file ? ca_cert_file : getenv("NIX_SSL_CERT_FILE");
++		ca_cert_file = ca_cert_file ? ca_cert_file : "/etc/ssl/certs/ca-certificates.crt";
+ 		ca_cert_path = getenv("SSL_CA_CERT_PATH") != NULL ?
+ 		    getenv("SSL_CA_CERT_PATH") : X509_get_default_cert_dir();
+ 		if (verbose) {
+-- 
+2.17.0
+
diff --git a/nixpkgs/pkgs/tools/package-management/xbps/default.nix b/nixpkgs/pkgs/tools/package-management/xbps/default.nix
new file mode 100644
index 000000000000..7ff079c0116c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/package-management/xbps/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchFromGitHub, pkgconfig, which, zlib, openssl, libarchive }:
+
+stdenv.mkDerivation rec {
+  pname = "xbps";
+  version = "0.57.1";
+
+  src = fetchFromGitHub {
+    owner = "void-linux";
+    repo = "xbps";
+    rev = version;
+    sha256 = "0adxhhvn5r6hwwqp42iwwfrslmps30ycndi6v39934v38rf0wx9s";
+  };
+
+  nativeBuildInputs = [ pkgconfig which ];
+
+  buildInputs = [ zlib openssl libarchive ];
+
+  patches = [ ./cert-paths.patch ];
+
+  NIX_CFLAGS_COMPILE = "-Wno-error=unused-result";
+
+  postPatch = ''
+    # fix unprefixed ranlib (needed on cross)
+    substituteInPlace lib/Makefile \
+      --replace 'SILENT}ranlib ' 'SILENT}$(RANLIB) '
+
+    # Don't try to install keys to /var/db/xbps, put in $out/share for now
+    substituteInPlace data/Makefile \
+      --replace '$(DESTDIR)/$(DBDIR)' '$(DESTDIR)/$(SHAREDIR)'
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/void-linux/xbps;
+    description = "The X Binary Package System";
+    platforms = platforms.linux; # known to not work on Darwin, at least
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/2fa/default.nix b/nixpkgs/pkgs/tools/security/2fa/default.nix
new file mode 100644
index 000000000000..c4ba7b67dc71
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/2fa/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  version = "1.1.0";
+  pname = "2fa";
+
+  goPackagePath = "rsc.io/2fa";
+
+  src = fetchFromGitHub {
+    owner = "rsc";
+    repo = "2fa";
+    rev = "v${version}";
+    sha256 = "0827vl2bxd6m2rbj00x7857cs7cic3mlg5nlhqzd0n73dm5vk2za";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://rsc.io/2fa;
+    description = "Two-factor authentication on the command line";
+    platforms = platforms.all;
+    maintainers = with maintainers; [ rvolosatovs ];
+    license = licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/acsccid/default.nix b/nixpkgs/pkgs/tools/security/acsccid/default.nix
new file mode 100644
index 000000000000..5a771917311f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/acsccid/default.nix
@@ -0,0 +1,54 @@
+{ stdenv, fetchFromGitHub, autoconf, automake, libtool, gettext, flex, perl, pkgconfig, pcsclite, libusb }:
+
+stdenv.mkDerivation rec {
+  version = "1.1.6";
+  pname = "acsccid";
+
+  src = fetchFromGitHub {
+    owner = "acshk";
+    repo = "acsccid";
+    rev = "26bc84c738d12701e6a7289ed578671d71cbf3cb";
+    sha256 = "09k7hvcay092wkyf0hjsvimg1h4qzss1nk7m5yanlib4ldhw5g5c";
+  };
+
+  doCheck = true;
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ pcsclite libusb autoconf automake libtool gettext flex perl ];
+
+  postPatch = ''
+    sed -e s_/bin/echo_echo_g -i src/Makefile.am
+    patchShebangs src/convert_version.pl
+    patchShebangs src/create_Info_plist.pl
+  '';
+
+  preConfigure = ''
+    libtoolize --force
+    aclocal
+    autoheader
+    automake --force-missing --add-missing
+    autoconf
+    configureFlags="$configureFlags --enable-usbdropdir=$out/pcsc/drivers"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "acsccid is a PC/SC driver for Linux/Mac OS X and it supports ACS CCID smart card readers.";
+    longDescription = ''
+      acsccid is a PC/SC driver for Linux/Mac OS X and it supports ACS CCID smart card
+      readers. This library provides a PC/SC IFD handler implementation and
+      communicates with the readers through the PC/SC Lite resource manager (pcscd).
+
+      acsccid is based on ccid. See CCID free software driver for more
+      information:
+      https://ccid.apdu.fr/
+
+      It can be enabled in /etc/nixos/configuration.nix by adding:
+        services.pcscd.enable = true;
+        services.pcscd.plugins = [ pkgs.acsccid ];
+    '';
+    homepage = src.meta.homepage;
+    license = licenses.lgpl2Plus;
+    maintainers = with maintainers; [ roberth ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/aespipe/default.nix b/nixpkgs/pkgs/tools/security/aespipe/default.nix
new file mode 100644
index 000000000000..69bef27258e8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/aespipe/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "aespipe";
+  version = "2.4f";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/loop-aes/aespipe/aespipe-v${version}.tar.bz2";
+    sha256 = "15pg9j27mjzl78mpzkdqd84kdafj0g6j72f8wgjrpp2qkxjy2ddi";
+  };
+
+  configureFlags = [ "--enable-padlock" "--enable-intelaes" ];
+
+  meta = with stdenv.lib; {
+    description = "AES encrypting or decrypting pipe";
+    homepage = http://loop-aes.sourceforge.net/aespipe.README;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.goibhniu ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/afl/README.md b/nixpkgs/pkgs/tools/security/afl/README.md
new file mode 100644
index 000000000000..180cad6bc4ca
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/afl/README.md
@@ -0,0 +1,19 @@
+Updating the QEMU patches
+=========================
+
+When updating to the latest American Fuzzy Lop, make sure to check for
+any new patches to qemu for binary fuzzing support:
+
+https://github.com/google/AFL/tree/master/qemu_mode
+
+Be sure to check the build script and make sure it's also using the
+right QEMU version and options in `qemu.nix`:
+
+https://github.com/google/AFL/blob/master/qemu_mode/build_qemu_support.sh
+
+`afl-config.h`, `afl-types.h`, and `afl-qemu-cpu-inl.h` are part of
+the afl source code, and copied from `config.h`, `types.h` and
+`afl-qemu-cpu-inl.h` appropriately. These files and the QEMU patches
+need to be slightly adjusted to fix their `#include`s (the patches
+try to otherwise include files like `../../config.h` which causes the
+build to fail).
diff --git a/nixpkgs/pkgs/tools/security/afl/default.nix b/nixpkgs/pkgs/tools/security/afl/default.nix
new file mode 100644
index 000000000000..df5e3728943e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/afl/default.nix
@@ -0,0 +1,77 @@
+{ stdenv, fetchFromGitHub, callPackage, makeWrapper
+, clang, llvm, which, libcgroup
+}:
+
+let
+  afl-qemu = callPackage ./qemu.nix { inherit afl; };
+  qemu-exe-name = if stdenv.hostPlatform.system == "x86_64-linux" then "qemu-x86_64"
+    else if stdenv.hostPlatform.system == "i686-linux" then "qemu-i386"
+    else throw "afl: no support for ${stdenv.hostPlatform.system}!";
+  afl = stdenv.mkDerivation rec {
+    pname = "afl";
+    version = "2.56b";
+
+    src = fetchFromGitHub {
+      owner = "google";
+      repo = pname;
+      rev = "v${version}";
+      sha256 = "1q1g59gkm48aa4cg9h70jx4i2gapmypgp5rzs156b2avd95vwkn1";
+    };
+    enableParallelBuilding = true;
+
+    # Note: libcgroup isn't needed for building, just for the afl-cgroup
+    # script.
+    nativeBuildInputs = [ makeWrapper which ];
+    buildInputs = [ llvm ];
+
+    makeFlags = [ "PREFIX=$(out)" ];
+    postBuild = ''
+      make -C llvm_mode $makeFlags -j$NIX_BUILD_CORES
+    '';
+    postInstall = ''
+      # Install the custom QEMU emulator for binary blob fuzzing.
+      cp ${afl-qemu}/bin/${qemu-exe-name} $out/bin/afl-qemu-trace
+
+      # Install the cgroups wrapper for asan-based fuzzing.
+      cp experimental/asan_cgroups/limit_memory.sh $out/bin/afl-cgroup
+      chmod +x $out/bin/afl-cgroup
+      substituteInPlace $out/bin/afl-cgroup \
+        --replace "cgcreate" "${libcgroup}/bin/cgcreate" \
+        --replace "cgexec"   "${libcgroup}/bin/cgexec" \
+        --replace "cgdelete" "${libcgroup}/bin/cgdelete"
+
+      # Patch shebangs before wrapping
+      patchShebangs $out/bin
+
+      # Wrap afl-clang-fast(++) with a *different* AFL_PATH, because it
+      # has totally different semantics in that case(?) - and also set a
+      # proper AFL_CC and AFL_CXX so we don't pick up the wrong one out
+      # of $PATH.
+      for x in $out/bin/afl-clang-fast $out/bin/afl-clang-fast++; do
+        wrapProgram $x \
+          --prefix AFL_PATH : "$out/lib/afl" \
+          --run 'export AFL_CC=''${AFL_CC:-${clang}/bin/clang} AFL_CXX=''${AFL_CXX:-${clang}/bin/clang++}'
+      done
+    '';
+
+    passthru.qemu = afl-qemu;
+
+    meta = {
+      description = "Powerful fuzzer via genetic algorithms and instrumentation";
+      longDescription = ''
+        American fuzzy lop is a fuzzer that employs a novel type of
+        compile-time instrumentation and genetic algorithms to
+        automatically discover clean, interesting test cases that
+        trigger new internal states in the targeted binary. This
+        substantially improves the functional coverage for the fuzzed
+        code. The compact synthesized corpora produced by the tool are
+        also useful for seeding other, more labor or resource-intensive
+        testing regimes down the road.
+      '';
+      homepage    = "http://lcamtuf.coredump.cx/afl/";
+      license     = stdenv.lib.licenses.asl20;
+      platforms   = ["x86_64-linux" "i686-linux"];
+      maintainers = with stdenv.lib.maintainers; [ thoughtpolice ris ];
+    };
+  };
+in afl
diff --git a/nixpkgs/pkgs/tools/security/afl/libdislocator.nix b/nixpkgs/pkgs/tools/security/afl/libdislocator.nix
new file mode 100644
index 000000000000..953c59e435cb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/afl/libdislocator.nix
@@ -0,0 +1,34 @@
+{ stdenv, afl}:
+
+stdenv.mkDerivation {
+  version = stdenv.lib.getVersion afl;
+  pname = "libdislocator";
+
+  src = afl.src;
+  sourceRoot = "${afl.src.name}/libdislocator";
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  preInstall = ''
+    mkdir -p $out/lib/afl
+  '';
+  postInstall = ''
+    mkdir $out/bin
+    cat > $out/bin/get-libdislocator-so <<END
+    #!${stdenv.shell}
+    echo $out/lib/afl/libdislocator.so
+    END
+    chmod +x $out/bin/get-libdislocator-so
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = "http://lcamtuf.coredump.cx/afl/";
+    description = ''
+      Drop-in replacement for the libc allocator which improves
+      the odds of bumping into heap-related security bugs in
+      several ways.
+    '';
+    license = stdenv.lib.licenses.asl20;
+    maintainers = with maintainers; [ ris ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/afl/qemu-patches/no-etc-install.patch b/nixpkgs/pkgs/tools/security/afl/qemu-patches/no-etc-install.patch
new file mode 100644
index 000000000000..5dfbfd780f1c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/afl/qemu-patches/no-etc-install.patch
@@ -0,0 +1,13 @@
+diff --git a/Makefile b/Makefile
+index d6b9dc1..ce7c493 100644
+--- a/Makefile
++++ b/Makefile
+@@ -601,7 +601,7 @@ install-localstatedir:
+ endif
+ 
+ 
+-install: all $(if $(BUILD_DOCS),install-doc) install-datadir install-localstatedir
++install: all $(if $(BUILD_DOCS),install-doc) install-datadir
+ ifneq ($(TOOLS),)
+ 	$(call install-prog,$(subst qemu-ga,qemu-ga$(EXESUF),$(TOOLS)),$(DESTDIR)$(bindir))
+ endif
diff --git a/nixpkgs/pkgs/tools/security/afl/qemu.nix b/nixpkgs/pkgs/tools/security/afl/qemu.nix
new file mode 100644
index 000000000000..479de4b41850
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/afl/qemu.nix
@@ -0,0 +1,77 @@
+{ stdenv, fetchurl, afl, python2, zlib, pkgconfig, glib, perl
+, texinfo, libuuid, flex, bison, pixman, autoconf
+}:
+
+with stdenv.lib;
+
+let
+  qemuName = "qemu-2.10.0";
+  cpuTarget = if stdenv.hostPlatform.system == "x86_64-linux" then "x86_64-linux-user"
+    else if stdenv.hostPlatform.system == "i686-linux" then "i386-linux-user"
+    else throw "afl: no support for ${stdenv.hostPlatform.system}!";
+in
+stdenv.mkDerivation {
+  name = "afl-${qemuName}";
+
+  srcs = [
+    (fetchurl {
+      url = "http://wiki.qemu.org/download/${qemuName}.tar.bz2";
+      sha256 = "0j3dfxzrzdp1w21k21fjvmakzc6lcha1rsclaicwqvbf63hkk7vy";
+    })
+    afl.src
+  ];
+
+  sourceRoot = qemuName;
+
+  postUnpack = ''
+    cp ${afl.src.name}/types.h $sourceRoot/afl-types.h
+    substitute ${afl.src.name}/config.h $sourceRoot/afl-config.h \
+      --replace "types.h" "afl-types.h"
+    substitute ${afl.src.name}/qemu_mode/patches/afl-qemu-cpu-inl.h $sourceRoot/afl-qemu-cpu-inl.h \
+      --replace "../../config.h" "afl-config.h"
+    substituteInPlace ${afl.src.name}/qemu_mode/patches/cpu-exec.diff \
+      --replace "../patches/afl-qemu-cpu-inl.h" "afl-qemu-cpu-inl.h"
+  '';
+
+  nativeBuildInputs = [
+    python2 perl pkgconfig flex bison autoconf texinfo
+  ];
+
+  buildInputs = [
+    zlib glib pixman libuuid
+  ];
+
+  enableParallelBuilding = true;
+
+  patches = [
+    # patches extracted from afl source
+    "../${afl.src.name}/qemu_mode/patches/cpu-exec.diff"
+    "../${afl.src.name}/qemu_mode/patches/elfload.diff"
+    "../${afl.src.name}/qemu_mode/patches/syscall.diff"
+    "../${afl.src.name}/qemu_mode/patches/configure.diff"
+    "../${afl.src.name}/qemu_mode/patches/memfd.diff"
+    # nix-specific patches to make installation more well-behaved
+    ./qemu-patches/no-etc-install.patch
+  ];
+
+  configureFlags =
+    [ "--disable-system"
+      "--enable-linux-user"
+      "--disable-gtk"
+      "--disable-sdl"
+      "--disable-vnc"
+      "--disable-kvm"
+      "--target-list=${cpuTarget}"
+      "--enable-pie"
+      "--sysconfdir=/etc"
+      "--localstatedir=/var"
+    ];
+
+  meta = with stdenv.lib; {
+    homepage = http://www.qemu.org/;
+    description = "Fork of QEMU with AFL instrumentation support";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ thoughtpolice ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/age/default.nix b/nixpkgs/pkgs/tools/security/age/default.nix
new file mode 100644
index 000000000000..bde597ba9f30
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/age/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "age";
+  version = "1.0.0-beta2";
+  goPackagePath = "github.com/FiloSottile/age";
+  modSha256 = "0kwdwhkxgqjd8h1p7pm4h4xidp2vk840h1j4qya4qz8bjf9vskl9";
+
+  subPackages = [
+    "cmd/age"
+    "cmd/age-keygen"
+  ];
+
+  src = fetchFromGitHub {
+    owner = "FiloSottile";
+    repo = "age";
+    rev = "v${version}";
+    sha256 = "1n1ww8yjw0mg00dvnfmggww9kwp1hls0a85iv6vx9k89mzv8mdrq";
+  };
+
+  meta = with lib; {
+    homepage = "https://age-encryption.org/";
+    description = "Modern encryption tool with small explicit keys";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ tazjin ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/aide/default.nix b/nixpkgs/pkgs/tools/security/aide/default.nix
new file mode 100644
index 000000000000..ea14d89c45c6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/aide/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, flex, bison, libmhash, zlib, acl, attr, libselinux, pcre }:
+
+stdenv.mkDerivation rec {
+  pname = "aide";
+  version = "0.16.2";
+
+  src = fetchurl {
+    url = "https://github.com/aide/aide/releases/download/v${version}/${pname}-${version}.tar.gz";
+    sha256 = "15xp47sz7kk1ciffw3f5xw2jg2mb2lqrbr3q6p4bkbz5dap9iy8p";
+  };
+
+  buildInputs = [ flex bison libmhash zlib acl attr libselinux pcre ];
+
+
+  configureFlags = [
+    "--with-posix-acl"
+    "--with-selinux"
+    "--with-xattr"
+    ];
+
+  meta = with stdenv.lib; {
+    homepage = http://aide.sourceforge.net/;
+    description = "A file and directory integrity checker";
+    license = licenses.free;
+    maintainers = [ maintainers.tstrobel ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/apg/apg.patch b/nixpkgs/pkgs/tools/security/apg/apg.patch
new file mode 100644
index 000000000000..abc22647d52f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/apg/apg.patch
@@ -0,0 +1,44 @@
+diff -rc apg-2.2.3/Makefile apg-2.2.3-new/Makefile
+*** apg-2.2.3/Makefile	2003-08-07 17:40:30.000000000 +0200
+--- apg-2.2.3-new/Makefile	2013-07-24 12:25:31.159938436 +0200
+***************
+*** 113,131 ****
+  	if test -x ./apg; then \
+  ./mkinstalldirs ${INSTALL_PREFIX}${APG_BIN_DIR}; \
+  ./mkinstalldirs ${INSTALL_PREFIX}${APG_MAN_DIR}; \
+! ./install-sh -c -m 0755 -o root -g ${FIND_GROUP} ./apg ${INSTALL_PREFIX}${APG_BIN_DIR}; \
+  ./install-sh -c -m 0444 ./doc/man/apg.1 ${INSTALL_PREFIX}${APG_MAN_DIR}; \
+  fi
+  	if test -x ./apgd; then \
+  ./mkinstalldirs ${INSTALL_PREFIX}${APGD_BIN_DIR}; \
+  ./mkinstalldirs ${INSTALL_PREFIX}${APGD_MAN_DIR}; \
+! ./install-sh -c -m 0755 -o root -g ${FIND_GROUP} ./apgd ${INSTALL_PREFIX}${APGD_BIN_DIR}; \
+  ./install-sh -c -m 0444 ./doc/man/apgd.8 ${INSTALL_PREFIX}${APGD_MAN_DIR}; \
+  fi
+  	if test -x ./apgbfm; then \
+  ./mkinstalldirs ${INSTALL_PREFIX}${APG_BIN_DIR}; \
+  ./mkinstalldirs ${INSTALL_PREFIX}${APG_MAN_DIR}; \
+! ./install-sh -c -m 0755 -o root -g ${FIND_GROUP} ./apgbfm ${INSTALL_PREFIX}${APG_BIN_DIR}; \
+  ./install-sh -c -m 0444 ./doc/man/apgbfm.1 ${INSTALL_PREFIX}${APG_MAN_DIR}; \
+  fi
+  
+--- 113,131 ----
+  	if test -x ./apg; then \
+  ./mkinstalldirs ${INSTALL_PREFIX}${APG_BIN_DIR}; \
+  ./mkinstalldirs ${INSTALL_PREFIX}${APG_MAN_DIR}; \
+! ./install-sh -c -m 0755 ./apg ${INSTALL_PREFIX}${APG_BIN_DIR}; \
+  ./install-sh -c -m 0444 ./doc/man/apg.1 ${INSTALL_PREFIX}${APG_MAN_DIR}; \
+  fi
+  	if test -x ./apgd; then \
+  ./mkinstalldirs ${INSTALL_PREFIX}${APGD_BIN_DIR}; \
+  ./mkinstalldirs ${INSTALL_PREFIX}${APGD_MAN_DIR}; \
+! ./install-sh -c -m 0755 ./apgd ${INSTALL_PREFIX}${APGD_BIN_DIR}; \
+  ./install-sh -c -m 0444 ./doc/man/apgd.8 ${INSTALL_PREFIX}${APGD_MAN_DIR}; \
+  fi
+  	if test -x ./apgbfm; then \
+  ./mkinstalldirs ${INSTALL_PREFIX}${APG_BIN_DIR}; \
+  ./mkinstalldirs ${INSTALL_PREFIX}${APG_MAN_DIR}; \
+! ./install-sh -c -m 0755 ./apgbfm ${INSTALL_PREFIX}${APG_BIN_DIR}; \
+  ./install-sh -c -m 0444 ./doc/man/apgbfm.1 ${INSTALL_PREFIX}${APG_MAN_DIR}; \
+  fi
+  
diff --git a/nixpkgs/pkgs/tools/security/apg/default.nix b/nixpkgs/pkgs/tools/security/apg/default.nix
new file mode 100644
index 000000000000..db490c7822f8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/apg/default.nix
@@ -0,0 +1,72 @@
+{ stdenv, fetchurl, openssl }:
+stdenv.mkDerivation rec {
+  name = "apg-2.3.0b";
+  src = fetchurl {
+    url = "http://www.adel.nursat.kz/apg/download/${name}.tar.gz";
+    sha256 = "14lbq81xrcsmpk1b9qmqyz7n6ypf08zcxvcvp6f7ybcyf0lj1rfi";
+  };
+  configurePhase = ''
+    substituteInPlace Makefile --replace /usr/local "$out"
+  '';
+  makeFlags = stdenv.lib.optionals stdenv.isDarwin ["CC=cc"];
+
+  patches = [
+    ./apg.patch
+    ./phony-install-target.patch
+  ];
+
+  postPatch = stdenv.lib.optionalString stdenv.isDarwin ''
+    sed -i -e 's|APG_CLIBS += -lcrypt|APG_CLIBS += -L${openssl.out}/lib -lcrypto|' Makefile
+  '';
+
+  meta = {
+    description = "Tools for random password generation";
+    longDescription = ''
+      APG (Automated Password Generator) is the tool set for random
+      password generation.
+
+      Standalone version
+
+        Generates some random words of required type and prints them
+        to standard output.
+
+      Network version
+
+        APG server: When client's request is arrived generates some
+        random words of predefined type and send them to client over
+        the network (according to RFC0972).
+
+        APG client: Sends the password generation request to the APG
+        server, wait for generated Passwords arrival and then prints
+        them to the standard output.
+
+     Advantages
+
+       * Built-in ANSI X9.17 RNG (Random Number Generator) (CAST/SHA1)
+       * Built-in password quality checking system (it has support for
+         Bloom filter for faster access)
+       * Two Password Generation Algorithms:
+           1. Pronounceable Password Generation Algorithm (according to
+              NIST FIPS 181)
+           2. Random Character Password Generation Algorithm with 35
+              configurable modes of operation
+       * Configurable password length parameters
+       * Configurable amount of generated passwords
+       * Ability to initialize RNG with user string
+       * Support for /dev/random
+       * Ability to crypt() generated passwords and print them as
+         additional output
+       * Special parameters to use APG in script
+       * Ability to log password generation requests for network version
+       * Ability to control APG service access using tcpd
+       * Ability to use password generation service from any type of box
+         (Mac, WinXX, etc.) that connected to network
+       * Ability to enforce remote users to use only allowed type of
+         password generation
+    '';
+    homepage = http://www.adel.nursat.kz/apg/;
+    license = stdenv.lib.licenses.bsd3;
+    maintainers = with stdenv.lib.maintainers; [ astsmtl ];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/apg/phony-install-target.patch b/nixpkgs/pkgs/tools/security/apg/phony-install-target.patch
new file mode 100644
index 000000000000..9edf50b4b599
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/apg/phony-install-target.patch
@@ -0,0 +1,11 @@
+diff -ur a/Makefile b/Makefile
+--- a/Makefile	2003-08-08 00:40:39.000000000 +0900
++++ b/Makefile	2018-04-05 22:29:39.284191020 +0900
+@@ -142,6 +142,7 @@
+ 	strip ${CS_PROGNAME}
+ 	strip ${BFM_PROGNAME}
+ 
++.PHONY: install
+ install:
+ 	if test -x ./apg; then \
+ ./mkinstalldirs ${INSTALL_PREFIX}${APG_BIN_DIR}; \
diff --git a/nixpkgs/pkgs/tools/security/asc-key-to-qr-code-gif/default.nix b/nixpkgs/pkgs/tools/security/asc-key-to-qr-code-gif/default.nix
new file mode 100644
index 000000000000..580cf7585c92
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/asc-key-to-qr-code-gif/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, fetchFromGitHub, imagemagick, qrencode
+, testQR ? false, zbar ? null
+}:
+
+assert testQR -> zbar != false;
+
+stdenv.mkDerivation {
+  pname = "asc-key-to-qr-code-gif";
+  version = "20180613";
+
+  src = fetchFromGitHub {
+    owner = "yishilin14";
+    repo = "asc-key-to-qr-code-gif";
+    rev = "5b7b239a0089a5269444cbe8a651c99dd43dce3f";
+    sha256 = "0yrc302a2fhbzryb10718ky4fymfcps3lk67ivis1qab5kbp6z8r";
+  };
+
+  dontBuild = true;
+  dontStrip = true;
+  dontPatchELF = true;
+
+  preInstall = let
+    substitutions = [
+      ''--replace "convert" "${imagemagick}/bin/convert"''
+      ''--replace "qrencode" "${qrencode.bin}/bin/qrencode"''
+    ] ++ stdenv.lib.optional testQR [
+      ''--replace "hash zbarimg" "true"'' # hash does not work on NixOS
+      ''--replace "$(zbarimg --raw" "$(${zbar.out}/bin/zbarimg --raw"''
+    ];
+  in ''
+    substituteInPlace asc-to-gif.sh ${stdenv.lib.concatStringsSep " " substitutions}
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp * $out/bin/
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/yishilin14/asc-key-to-qr-code-gif;
+    description = "Convert ASCII-armored PGP keys to animated QR code";
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ asymmetric ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/aws-iam-authenticator/default.nix b/nixpkgs/pkgs/tools/security/aws-iam-authenticator/default.nix
new file mode 100644
index 000000000000..44282d5f9643
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/aws-iam-authenticator/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "aws-iam-authenticator";
+  version = "0.4.0";
+
+  goPackagePath = "github.com/kubernetes-sigs/aws-iam-authenticator";
+
+  src = fetchFromGitHub {
+    owner = "kubernetes-sigs";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1ghl2vms9wmvczdl2raqhy0gffxmk24h158gjb5mlw7rggzvb7bg";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/kubernetes-sigs/aws-iam-authenticator";
+    description = "AWS IAM credentials for Kubernetes authentication";
+    license = licenses.asl20;
+    maintainers = [ maintainers.srhb ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/aws-okta/default.nix b/nixpkgs/pkgs/tools/security/aws-okta/default.nix
new file mode 100644
index 000000000000..71732f26934b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/aws-okta/default.nix
@@ -0,0 +1,32 @@
+{ buildGoPackage, fetchFromGitHub, libusb1, pkgconfig, stdenv, libiconv }:
+
+buildGoPackage rec {
+  pname = "aws-okta";
+  version = "0.26.3";
+
+  goPackagePath = "github.com/segmentio/aws-okta";
+
+  src = fetchFromGitHub {
+    owner = "segmentio";
+    repo = "aws-okta";
+    rev = "v${version}";
+    sha256 = "0n6xm3yv0lxfapchzfrqi05hk918n4lh1hcp7gq7hybam93rld96";
+  };
+
+  goDeps = ./deps.nix;
+
+  buildFlags = [ "--tags" "release" ];
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libusb1  libiconv ];
+
+  meta = with stdenv.lib; {
+    inherit version;
+    description = "aws-vault like tool for Okta authentication";
+    license = licenses.mit;
+    maintainers = [maintainers.imalsogreg];
+    platforms = platforms.all;
+    homepage = https://github.com/segmentio/aws-okta;
+    downloadPage = "https://github.com/segmentio/aws-okta";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/aws-okta/deps.nix b/nixpkgs/pkgs/tools/security/aws-okta/deps.nix
new file mode 100644
index 000000000000..180aa69d56c5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/aws-okta/deps.nix
@@ -0,0 +1,29 @@
+[
+  {
+    goPackagePath = "github.com/sirupsen/logrus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/sirupsen/logrus.git";
+      rev = "a437dfd2463eaedbec3dfe443e477d3b0a810b3f";
+      sha256 = "1904s2bbc7p88anzjp6fyj3jrbm5p6wbb8j4490674dq10kkcfbj";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys/unix";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/sys.git";
+      rev = "b699b7032584f0953262cb2788a0ca19bb494703";
+      sha256 = "172sw1bm581qwal9pbf9qj1sgivr74nabbj8qq4q4fhgpzams9ix";
+    };
+  }
+  {
+    goPackagePath = "github.com/marshallbrekka/go-u2fhost";
+    fetch = {
+      type = "git";
+      url = "https://github.com/marshallbrekka/go-u2fhost";
+      rev = "72b0e7a3f583583996b3b382d2dfaa81fdc4b82c";
+      sha256 = "0apzmf0bjpr58ynw55agyjsl74zyg5qjk19nyyy4zhip3s9b1d0h";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/security/b2sum/default.nix b/nixpkgs/pkgs/tools/security/b2sum/default.nix
new file mode 100644
index 000000000000..fdd4f2c73fd4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/b2sum/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchzip, openmp ? null }:
+
+with stdenv.lib;
+
+stdenv.mkDerivation {
+  pname = "b2sum";
+  version = "unstable-2018-06-11";
+
+  src = fetchzip {
+    url = "https://github.com/BLAKE2/BLAKE2/archive/320c325437539ae91091ce62efec1913cd8093c2.tar.gz";
+    sha256 = "0agmc515avdpr64bsgv87wby2idm0d3wbndxzkhdfjgzhgv0rb8k";
+  };
+
+  sourceRoot = "source/b2sum";
+
+  buildInputs = [ openmp ];
+
+  buildFlags = [ (optional (openmp == null) "NO_OPENMP=1") ];
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = {
+    description = "The b2sum utility is similar to the md5sum or shasum utilities but for BLAKE2";
+    homepage = "https://blake2.net";
+    license = with licenses; [ asl20 cc0 openssl ];
+    maintainers = with maintainers; [ kirelagin ];
+    # "This code requires at least SSE2."
+    platforms = with platforms; [ "x86_64-linux" "i686-linux" ] ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/bash-supergenpass/default.nix b/nixpkgs/pkgs/tools/security/bash-supergenpass/default.nix
new file mode 100644
index 000000000000..b745a2c872e7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/bash-supergenpass/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchFromGitHub, makeWrapper, openssl, coreutils, gnugrep }:
+
+stdenv.mkDerivation {
+  pname = "bash-supergenpass-unstable";
+  version = "2018-04-18";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  src = fetchFromGitHub {
+    owner = "lanzz";
+    repo = "bash-supergenpass";
+    rev = "ece772b9ec095946ac4ea985cda5561b211e56f0";
+    sha256 = "1gkbrycyyl7y3klbfx7xjvvfw5df1h4fj6x1f73gglfy6nk8ffnd";
+  };
+
+  installPhase = ''
+    install -m755 -D supergenpass.sh "$out/bin/supergenpass"
+    wrapProgram "$out/bin/supergenpass" --prefix PATH : "${stdenv.lib.makeBinPath [ openssl coreutils gnugrep ]}"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Bash shell-script implementation of SuperGenPass password generation";
+    longDescription = ''
+      Bash shell-script implementation of SuperGenPass password generation
+      Usage: ./supergenpass.sh <domain> [ <length> ]
+
+      Default <length> is 10, which is also the original SuperGenPass default length.
+
+      The <domain> parameter is also optional, but it does not make much sense to omit it.
+
+      supergenpass will ask for your master password interactively, and it will not be displayed on your terminal.
+    '';
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ fgaz ];
+    homepage = https://github.com/lanzz/bash-supergenpass;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/security/bettercap/default.nix b/nixpkgs/pkgs/tools/security/bettercap/default.nix
new file mode 100644
index 000000000000..d0cda57e2d06
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/bettercap/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, buildGoPackage, fetchFromGitHub, pkgconfig, libpcap, libnfnetlink, libnetfilter_queue, libusb1 }:
+
+buildGoPackage rec {
+  pname = "bettercap";
+  version = "2.26.1";
+
+  goPackagePath = "github.com/bettercap/bettercap";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "10qsknyzfpzfpm4gp98jwvw6qmkmx23nw88sbnpl2rlr725l560c";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libpcap libnfnetlink libnetfilter_queue libusb1 ];
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    description = "A man in the middle tool";
+    longDescription = ''
+      BetterCAP is a powerful, flexible and portable tool created to perform various types of MITM attacks against a network, manipulate HTTP, HTTPS and TCP traffic in realtime, sniff for credentials and much more.
+    '' ;
+    homepage = https://www.bettercap.org/;
+    license = with licenses; gpl3;
+    maintainers = with maintainers; [ y0no ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/bettercap/deps.nix b/nixpkgs/pkgs/tools/security/bettercap/deps.nix
new file mode 100644
index 000000000000..12aeb1918c6e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/bettercap/deps.nix
@@ -0,0 +1,534 @@
+# file generated from go.mod using vgo2nix (https://github.com/adisbladis/vgo2nix)
+[
+  {
+    goPackagePath = "github.com/BurntSushi/toml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/BurntSushi/toml";
+      rev = "v0.3.1";
+      sha256 = "1fjdwwfzyzllgiwydknf1pwjvy49qxfsczqx5gz3y0izs7as99j6";
+    };
+  }
+  {
+    goPackagePath = "github.com/adrianmo/go-nmea";
+    fetch = {
+      type = "git";
+      url = "https://github.com/adrianmo/go-nmea";
+      rev = "v1.1.0";
+      sha256 = "167iwpwdwfbyghqfrzdfvfpvsmj92x7qqy6sx6yngdw21wd0m44f";
+    };
+  }
+  {
+    goPackagePath = "github.com/antchfx/jsonquery";
+    fetch = {
+      type = "git";
+      url = "https://github.com/antchfx/jsonquery";
+      rev = "v1.0.0";
+      sha256 = "04xk7ib059xzl1y87ah41q7vzl3xp99mq8nyccx8hlsng1nc0haw";
+    };
+  }
+  {
+    goPackagePath = "github.com/antchfx/xpath";
+    fetch = {
+      type = "git";
+      url = "https://github.com/antchfx/xpath";
+      rev = "v1.1.0";
+      sha256 = "0bgin15841q009yxbyqfqk5b2yk2f4a1mswjkgiqxgarmql0mpsy";
+    };
+  }
+  {
+    goPackagePath = "github.com/bettercap/gatt";
+    fetch = {
+      type = "git";
+      url = "https://github.com/bettercap/gatt";
+      rev = "569d3d9372bb";
+      sha256 = "0ncg6wd4wkr12l4bs7vyyrd08imyd5y1vdyp7f9shjq9nzv3rzcz";
+    };
+  }
+  {
+    goPackagePath = "github.com/bettercap/nrf24";
+    fetch = {
+      type = "git";
+      url = "https://github.com/bettercap/nrf24";
+      rev = "aa37e6d0e0eb";
+      sha256 = "1y6ffcj94hk7slajqw3lqpdxzx6iqpj2i2zpsvggg6kfaa1iklnj";
+    };
+  }
+  {
+    goPackagePath = "github.com/bettercap/readline";
+    fetch = {
+      type = "git";
+      url = "https://github.com/bettercap/readline";
+      rev = "9cec905dd291";
+      sha256 = "1lsnyckg2l78hz4la8dhwvjsyff706khw10nxds5afzl4mrih3vn";
+    };
+  }
+  {
+    goPackagePath = "github.com/bettercap/recording";
+    fetch = {
+      type = "git";
+      url = "https://github.com/bettercap/recording";
+      rev = "3ce1dcf032e3";
+      sha256 = "1arh12iz15anyrqr4q496lpd0gx5nf2cwyr5rv17rawqqz8ydg23";
+    };
+  }
+  {
+    goPackagePath = "github.com/chifflier/nfqueue-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/chifflier/nfqueue-go";
+      rev = "61ca646babef";
+      sha256 = "1i1q2xl86f3s9x3j2ffxprwqhcrkh4w23hh4ib7jksxvaq36v33l";
+    };
+  }
+  {
+    goPackagePath = "github.com/chzyer/logex";
+    fetch = {
+      type = "git";
+      url = "https://github.com/chzyer/logex";
+      rev = "v1.1.10";
+      sha256 = "08pbjj3wx9acavlwyr055isa8a5hnmllgdv5k6ra60l5y1brmlq4";
+    };
+  }
+  {
+    goPackagePath = "github.com/chzyer/test";
+    fetch = {
+      type = "git";
+      url = "https://github.com/chzyer/test";
+      rev = "a1ea475d72b1";
+      sha256 = "0rns2aqk22i9xsgyap0pq8wi4cfaxsri4d9q6xxhhyma8jjsnj2k";
+    };
+  }
+  {
+    goPackagePath = "github.com/davecgh/go-spew";
+    fetch = {
+      type = "git";
+      url = "https://github.com/davecgh/go-spew";
+      rev = "v1.1.1";
+      sha256 = "0hka6hmyvp701adzag2g26cxdj47g21x6jz4sc6jjz1mn59d474y";
+    };
+  }
+  {
+    goPackagePath = "github.com/dustin/go-humanize";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dustin/go-humanize";
+      rev = "v1.0.0";
+      sha256 = "1kqf1kavdyvjk7f8kx62pnm7fbypn9z1vbf8v2qdh3y7z7a0cbl3";
+    };
+  }
+  {
+    goPackagePath = "github.com/elazarl/goproxy";
+    fetch = {
+      type = "git";
+      url = "https://github.com/elazarl/goproxy";
+      rev = "473e67f1d7d2";
+      sha256 = "1xsrdlcgl088phanm81pskym2ry8z1nizvq3lsq0c7cvzb6mrw4p";
+    };
+  }
+  {
+    goPackagePath = "github.com/evilsocket/islazy";
+    fetch = {
+      type = "git";
+      url = "https://github.com/evilsocket/islazy";
+      rev = "v1.10.4";
+      sha256 = "1ayc4di6584yajybh724mcmng069q38j1dpljgi8fhsyhb4sila3";
+    };
+  }
+  {
+    goPackagePath = "github.com/gobwas/glob";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gobwas/glob";
+      rev = "e7a84e9525fe";
+      sha256 = "1v6vjklq06wqddv46ihajahaj1slv0imgaivlxr8bsx59i90js5q";
+    };
+  }
+  {
+    goPackagePath = "github.com/google/go-github";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/go-github";
+      rev = "v17.0.0";
+      sha256 = "1kvw95l77a5n5rgal9n1xjh58zxb3a40ij1j722b1h4z8yg9jhg4";
+    };
+  }
+  {
+    goPackagePath = "github.com/google/go-querystring";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/go-querystring";
+      rev = "v1.0.0";
+      sha256 = "0xl12bqyvmn4xcnf8p9ksj9rmnr7s40pvppsdmy8n9bzw1db0iwz";
+    };
+  }
+  {
+    goPackagePath = "github.com/google/gopacket";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/gopacket";
+      rev = "v1.1.17";
+      sha256 = "192af5z18nnafn35gdy4wahlx6ggbhlnxzlm1yvxjxawfwnilidn";
+    };
+  }
+  {
+    goPackagePath = "github.com/google/gousb";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/gousb";
+      rev = "18f4c1d8a750";
+      sha256 = "1i7ffkq395x0v1186j9bhfgy67wlq6s840xkyx8wn87w55yd05rh";
+    };
+  }
+  {
+    goPackagePath = "github.com/google/renameio";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/renameio";
+      rev = "v0.1.0";
+      sha256 = "1ki2x5a9nrj17sn092d6n4zr29lfg5ydv4xz5cp58z6cw8ip43jx";
+    };
+  }
+  {
+    goPackagePath = "github.com/gorilla/mux";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gorilla/mux";
+      rev = "v1.7.3";
+      sha256 = "0vr38zdad3zgg7q7nn24knl8axngj7cgmlwa93m17yhsnlvqi531";
+    };
+  }
+  {
+    goPackagePath = "github.com/gorilla/websocket";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gorilla/websocket";
+      rev = "v1.4.1";
+      sha256 = "03n1n0nwz3k9qshmriycqznnnvd3dkzsfwpnfjzzvafjxk9kyapv";
+    };
+  }
+  {
+    goPackagePath = "github.com/hashicorp/mdns";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hashicorp/mdns";
+      rev = "v1.0.1";
+      sha256 = "185zpyj1jf1jm7hihg73gqnspr0a359aqwv11v4a6mwd5bkdh19j";
+    };
+  }
+  {
+    goPackagePath = "github.com/inconshreveable/go-vhost";
+    fetch = {
+      type = "git";
+      url = "https://github.com/inconshreveable/go-vhost";
+      rev = "06d84117953b";
+      sha256 = "0wliilsybm7xf5h685a23rsm8bnlhkr332pkdkhf32q16sr1a9rk";
+    };
+  }
+  {
+    goPackagePath = "github.com/jpillora/go-tld";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jpillora/go-tld";
+      rev = "f16ca3b7b383";
+      sha256 = "19v8bj14w0lcvysaw84klf5dg6ka351ixz9r6cd9mksdd80nvzcq";
+    };
+  }
+  {
+    goPackagePath = "github.com/kisielk/gotool";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kisielk/gotool";
+      rev = "v1.0.0";
+      sha256 = "14af2pa0ssyp8bp2mvdw184s5wcysk6akil3wzxmr05wwy951iwn";
+    };
+  }
+  {
+    goPackagePath = "github.com/kr/binarydist";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kr/binarydist";
+      rev = "v0.1.0";
+      sha256 = "0hz1yqlxmkdib8xsdkkvn4ian4i69jmfapadim9fhj632d6jpi7w";
+    };
+  }
+  {
+    goPackagePath = "github.com/kr/pretty";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kr/pretty";
+      rev = "v0.1.0";
+      sha256 = "18m4pwg2abd0j9cn5v3k2ksk9ig4vlwxmlw9rrglanziv9l967qp";
+    };
+  }
+  {
+    goPackagePath = "github.com/kr/pty";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kr/pty";
+      rev = "v1.1.1";
+      sha256 = "0383f0mb9kqjvncqrfpidsf8y6ns5zlrc91c6a74xpyxjwvzl2y6";
+    };
+  }
+  {
+    goPackagePath = "github.com/kr/text";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kr/text";
+      rev = "v0.1.0";
+      sha256 = "1gm5bsl01apvc84bw06hasawyqm4q84vx1pm32wr9jnd7a8vjgj1";
+    };
+  }
+  {
+    goPackagePath = "github.com/malfunkt/iprange";
+    fetch = {
+      type = "git";
+      url = "https://github.com/malfunkt/iprange";
+      rev = "v0.9.0";
+      sha256 = "0gv5w678r74jval675xp0y1hzpf7mm5m9apa1rz9krxc9zd0ycr8";
+    };
+  }
+  {
+    goPackagePath = "github.com/mattn/go-colorable";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-colorable";
+      rev = "v0.1.4";
+      sha256 = "1yxcz08kminqr1221zxpibnbzfcgs3fafin0z9zqb3gqvf74jywz";
+    };
+  }
+  {
+    goPackagePath = "github.com/mattn/go-isatty";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-isatty";
+      rev = "v0.0.10";
+      sha256 = "0jf4hwfwd2cpxrlyv0jzcia809q2bjw7y1m3ciaj2s8lj2jqyf6r";
+    };
+  }
+  {
+    goPackagePath = "github.com/mdlayher/dhcp6";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mdlayher/dhcp6";
+      rev = "2a67805d7d0b";
+      sha256 = "0xn7canpik3lrz73dcz4jzapq1bfxpnashvjvnvshcpa2n1lh8yw";
+    };
+  }
+  {
+    goPackagePath = "github.com/mgutz/ansi";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mgutz/ansi";
+      rev = "9520e82c474b";
+      sha256 = "00bz22314j26736w1f0q4jy9d9dfaml17vn890n5zqy3cmvmww1j";
+    };
+  }
+  {
+    goPackagePath = "github.com/mgutz/logxi";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mgutz/logxi";
+      rev = "aebf8a7d67ab";
+      sha256 = "1f8sqibkzz9wfplvvblz9s0xvvmhkd2af8ghcsmjw8818gcrzsqx";
+    };
+  }
+  {
+    goPackagePath = "github.com/miekg/dns";
+    fetch = {
+      type = "git";
+      url = "https://github.com/miekg/dns";
+      rev = "v1.1.22";
+      sha256 = "1iv9jznakz8f5swiir0z4zilr9ypavnsc0g4zi1r0vad6npy7zfl";
+    };
+  }
+  {
+    goPackagePath = "github.com/mitchellh/go-homedir";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mitchellh/go-homedir";
+      rev = "v1.1.0";
+      sha256 = "0ydzkipf28hwj2bfxqmwlww47khyk6d152xax4bnyh60f4lq3nx1";
+    };
+  }
+  {
+    goPackagePath = "github.com/pkg/errors";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pkg/errors";
+      rev = "v0.8.1";
+      sha256 = "0g5qcb4d4fd96midz0zdk8b9kz8xkzwfa8kr1cliqbg8sxsy5vd1";
+    };
+  }
+  {
+    goPackagePath = "github.com/pmezard/go-difflib";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pmezard/go-difflib";
+      rev = "v1.0.0";
+      sha256 = "0c1cn55m4rypmscgf0rrb88pn58j3ysvc2d0432dp3c6fqg6cnzw";
+    };
+  }
+  {
+    goPackagePath = "github.com/robertkrimen/otto";
+    fetch = {
+      type = "git";
+      url = "https://github.com/robertkrimen/otto";
+      rev = "15f95af6e78d";
+      sha256 = "07j7l340lmqwpfscwyb8llk3k37flvs20a4a8vzc85f16xyd9npf";
+    };
+  }
+  {
+    goPackagePath = "github.com/rogpeppe/go-charset";
+    fetch = {
+      type = "git";
+      url = "https://github.com/rogpeppe/go-charset";
+      rev = "2471d30d28b4";
+      sha256 = "1cmkhwkqx1smnsvrr9ah2x5qav0i6vdiq8x4j8j812xspfl69zwx";
+    };
+  }
+  {
+    goPackagePath = "github.com/rogpeppe/go-internal";
+    fetch = {
+      type = "git";
+      url = "https://github.com/rogpeppe/go-internal";
+      rev = "v1.3.0";
+      sha256 = "0mcdh1licgnnahwml9y2iq6xy5x9xmjw5frcnds2s3wpjyqrl216";
+    };
+  }
+  {
+    goPackagePath = "github.com/stretchr/objx";
+    fetch = {
+      type = "git";
+      url = "https://github.com/stretchr/objx";
+      rev = "v0.1.0";
+      sha256 = "19ynspzjdynbi85xw06mh8ad5j0qa1vryvxjgvbnyrr8rbm4vd8w";
+    };
+  }
+  {
+    goPackagePath = "github.com/stretchr/testify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/stretchr/testify";
+      rev = "v1.3.0";
+      sha256 = "0wjchp2c8xbgcbbq32w3kvblk6q6yn533g78nxl6iskq6y95lxsy";
+    };
+  }
+  {
+    goPackagePath = "github.com/tarm/serial";
+    fetch = {
+      type = "git";
+      url = "https://github.com/tarm/serial";
+      rev = "98f6abe2eb07";
+      sha256 = "1yj4jiv2f3x3iawxdflrlmdan0k9xsbnccgc9yz658rmif1ag3pb";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev = "87dc89f01550";
+      sha256 = "0z4i1m2yn3f31ci7wvcm2rxkx2yiv7a78mfzklncmsz2k97rlh2g";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/mod";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/mod";
+      rev = "4bf6d317e70e";
+      sha256 = "19lg1ly3j31anx92p0hynic1gjk417wwxphfdrb2cq1c19kj3r17";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev = "da9a3fd4c582";
+      sha256 = "0iavs400534jn7drmdphx0f18vgg060p2r59xw5d85ji1l5rin1l";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sync";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sync";
+      rev = "112230192c58";
+      sha256 = "05i2k43j2d0llq768hg5pf3hb2yhfzp9la1w5wp0rsnnzblr0lfn";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "727590c5006e";
+      sha256 = "0891pfmc73hyr6hrsq1mkk3lasxa8fz4vlnljnzz6yihmhz9ab6a";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/text";
+      rev = "v0.3.2";
+      sha256 = "0flv9idw0jm5nm8lx25xqanbkqgfiym6619w575p7nrdh0riqwqh";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/tools";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/tools";
+      rev = "2ca718005c18";
+      sha256 = "1nl4cw8vrfigab0hij86vl2mmhfmyim69r7vy5qk2v60g8frvgxg";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/xerrors";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/xerrors";
+      rev = "a985d3407aa7";
+      sha256 = "00wzr5w8aadipgc3rkk8f11i41znskfj9ix5nhhaxyg7isrslgcj";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/check.v1";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/check.v1";
+      rev = "788fd7840127";
+      sha256 = "0v3bim0j375z81zrpr5qv42knqs0y2qv2vkjiqi5axvb78slki1a";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/errgo.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/errgo.v2";
+      rev = "v2.1.0";
+      sha256 = "065mbihiy7q67wnql0bzl9y1kkvck5ivra68254zbih52jxwrgr2";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/sourcemap.v1";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/sourcemap.v1";
+      rev = "v1.0.5";
+      sha256 = "08rf2dl13hbnm3fq2cm0nnsspy9fhf922ln23cz5463cv7h62as4";
+    };
+  }
+  {
+    goPackagePath = "honnef.co/go/tools";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dominikh/go-tools";
+      rev = "v0.0.0-2019.2.1";
+      sha256 = "1frpy4pl9yp6j00mjj2yss3k8hip0cc7b5i5mz61n3dlw0kga9z1";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/security/bitwarden/default.nix b/nixpkgs/pkgs/tools/security/bitwarden/default.nix
new file mode 100644
index 000000000000..fbef98df82d7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/bitwarden/default.nix
@@ -0,0 +1,87 @@
+{ atomEnv
+, autoPatchelfHook
+, dpkg
+, fetchurl
+, libsecret
+, makeDesktopItem
+, makeWrapper
+, stdenv
+, udev
+, wrapGAppsHook
+}:
+
+let
+  inherit (stdenv.hostPlatform) system;
+
+  pname = "bitwarden";
+
+  version = {
+    x86_64-linux = "1.16.6";
+  }.${system} or "";
+
+  sha256 = {
+    x86_64-linux = "074hqm4gjljc82nhn7h6wsd74567390018fi3v38g7jh7aph10jj";
+  }.${system} or "";
+
+  meta = with stdenv.lib; {
+    description = "A secure and free password manager for all of your devices";
+    homepage = "https://bitwarden.com";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ kiwi ];
+    platforms = [ "x86_64-linux" ];
+  };
+
+  linux = stdenv.mkDerivation rec {
+    inherit pname version meta;
+
+    src = fetchurl {
+      url = "https://github.com/bitwarden/desktop/releases/download/"
+      + "v${version}/Bitwarden-${version}-amd64.deb";
+      inherit sha256;
+    };
+
+    desktopItem = makeDesktopItem {
+      name = "bitwarden";
+      exec = "bitwarden %U";
+      icon = "bitwarden";
+      comment = "A secure and free password manager for all of your devices";
+      desktopName = "Bitwarden";
+      categories = "Utility";
+    };
+
+    dontBuild = true;
+    dontConfigure = true;
+    dontPatchELF = true;
+    dontWrapGApps = true;
+
+    buildInputs = [ libsecret ] ++ atomEnv.packages;
+
+    nativeBuildInputs = [ dpkg makeWrapper autoPatchelfHook wrapGAppsHook ];
+
+    unpackPhase = "dpkg-deb -x $src .";
+
+    installPhase = ''
+      mkdir -p "$out/bin"
+      cp -R "opt" "$out"
+      cp -R "usr/share" "$out/share"
+      chmod -R g-w "$out"
+
+      # Desktop file
+      mkdir -p "$out/share/applications"
+      cp "${desktopItem}/share/applications/"* "$out/share/applications"
+    '';
+
+    runtimeDependencies = [
+      udev.lib
+    ];
+
+    postFixup = ''
+      makeWrapper $out/opt/Bitwarden/bitwarden $out/bin/bitwarden \
+        --prefix LD_LIBRARY_PATH : "${stdenv.lib.makeLibraryPath [ libsecret stdenv.cc.cc ] }" \
+        "''${gappsWrapperArgs[@]}"
+    '';
+  };
+
+in if stdenv.isDarwin
+then throw "Bitwarden has not been packaged for macOS yet"
+else linux
diff --git a/nixpkgs/pkgs/tools/security/bitwarden_rs/cargo-lock-lettre.patch b/nixpkgs/pkgs/tools/security/bitwarden_rs/cargo-lock-lettre.patch
new file mode 100644
index 000000000000..d9f491ca290a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/bitwarden_rs/cargo-lock-lettre.patch
@@ -0,0 +1,58 @@
+diff --git a/Cargo.lock b/Cargo.lock
+index 2e0b695..6d23410 100644
+--- a/Cargo.lock
++++ b/Cargo.lock
+@@ -114,8 +114,8 @@ dependencies = [
+  "handlebars 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+  "jsonwebtoken 6.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
+  "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+- "lettre 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "lettre_email 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "lettre 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "lettre_email 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
+  "libsqlite3-sys 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
+  "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
+  "multipart 0.16.1 (registry+https://github.com/rust-lang/crates.io-index)",
+@@ -1007,13 +1007,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
+ 
+ [[package]]
+ name = "lettre"
+-version = "0.9.1"
++version = "0.9.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ dependencies = [
+  "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
+  "bufstream 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
+- "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+- "failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+  "fast_chemail 0.9.6 (registry+https://github.com/rust-lang/crates.io-index)",
+  "hostname 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+  "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
+@@ -1026,14 +1024,12 @@ dependencies = [
+ 
+ [[package]]
+ name = "lettre_email"
+-version = "0.9.1"
++version = "0.9.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ dependencies = [
+  "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
+  "email 0.0.20 (registry+https://github.com/rust-lang/crates.io-index)",
+- "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+- "failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+- "lettre 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "lettre 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
+  "mime 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)",
+  "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
+  "uuid 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)",
+@@ -2858,8 +2854,8 @@ dependencies = [
+ "checksum language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a"
+ "checksum lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bc5729f27f159ddd61f4df6228e827e86643d4d3e7c32183cb30a1c08f604a14"
+ "checksum lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f"
+-"checksum lettre 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "646aee0a55545eaffdf0df1ac19b500b51adb3095ec4dfdc704134e56ea23531"
+-"checksum lettre_email 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ae1b3d43e4bb7beb9974a359cbb3ea4f93dfba6c1c0c6e9c9f82e538e0f9ab9f"
++"checksum lettre 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c66afaa5dfadbb81d4e00fd1d1ab057c7cd4c799c5a44e0009386d553587e728"
++"checksum lettre_email 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bbb68ca999042d965476e47bbdbacd52db0927348b6f8062c44dd04a3b1fd43b"
+ "checksum libc 0.2.55 (registry+https://github.com/rust-lang/crates.io-index)" = "42914d39aad277d9e176efbdad68acb1d5443ab65afe0e0e4f0d49352a950880"
+ "checksum libsqlite3-sys 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fd6457c70bbff456d9fe49deaba35ec47c3e598bf8d7950ff0575ceb7a8a6ad1"
+ "checksum lock_api 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "62ebf1391f6acad60e5c8b43706dde4582df75c06698ab44511d15016bc2442c"
diff --git a/nixpkgs/pkgs/tools/security/bitwarden_rs/default.nix b/nixpkgs/pkgs/tools/security/bitwarden_rs/default.nix
new file mode 100644
index 000000000000..f04996f1b431
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/bitwarden_rs/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, rustPlatform, fetchFromGitHub, pkgconfig, openssl, Security, CoreServices }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "bitwarden_rs";
+  version = "1.9.1";
+
+  src = fetchFromGitHub {
+    owner = "dani-garcia";
+    repo = pname;
+    rev = version;
+    sha256 = "0jfb4b2lp2v01aw615lx0qj1qh73hyrbjn9kva7zqp74wcfw12gp";
+  };
+
+  cargoPatches = [
+    # type annotations required: cannot resolve `std::string::String: std::convert::AsRef<_>`
+    ./cargo-lock-lettre.patch
+  ];
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ openssl ] ++ stdenv.lib.optionals stdenv.isDarwin [ Security CoreServices ];
+
+  RUSTC_BOOTSTRAP = 1;
+
+  cargoSha256 = "0p39gqrqdmgqhngp1qyh6jl0sp0ifj5n3bxfqafjbspb4zph3ls4";
+
+  meta = with stdenv.lib; {
+    description = "An unofficial lightweight implementation of the Bitwarden server API using Rust and SQLite";
+    homepage = https://github.com/dani-garcia/bitwarden_rs;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ msteen ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/bitwarden_rs/vault.nix b/nixpkgs/pkgs/tools/security/bitwarden_rs/vault.nix
new file mode 100644
index 000000000000..51dde99bcf19
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/bitwarden_rs/vault.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "bitwarden_rs-vault";
+  version = "2.12.0";
+
+  src = fetchurl {
+    url = "https://github.com/dani-garcia/bw_web_builds/releases/download/v${version}/bw_web_v${version}.tar.gz";
+    sha256 = "064dxfplqn67grpx03ryzshwmr7s00w4mll0hk0anddviwvd8r1n";
+  };
+
+  buildCommand = ''
+    mkdir -p $out/share/bitwarden_rs/vault
+    cd $out/share/bitwarden_rs/vault
+    tar xf $src
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Integrates the web vault into bitwarden_rs";
+    homepage = https://github.com/dani-garcia/bw_web_builds;
+    platforms = platforms.all;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ msteen ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/bmrsa/11.nix b/nixpkgs/pkgs/tools/security/bmrsa/11.nix
new file mode 100644
index 000000000000..47851fbfa053
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/bmrsa/11.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, unzip }:
+
+stdenv.mkDerivation rec {
+  pname = "bmrsa";
+  version = "11";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/bmrsa/bmrsa${version}.zip";
+    sha256 = "0ksd9xkvm9lkvj4yl5sl0zmydp1wn3xhc55b28gj70gi4k75kcl4";
+  };
+
+  buildInputs = [ unzip ];
+
+  unpackPhase = ''
+    mkdir bmrsa
+    cd bmrsa
+    unzip ${src}
+    sed -e 's/gcc/g++/' -i Makefile
+    mkdir -p $out/bin
+    echo -e 'install:\n\tcp bmrsa '$out'/bin' >> Makefile
+  '';
+
+  meta = with stdenv.lib; {
+    description = "RSA utility";
+    homepage = http://bmrsa.sourceforge.net/;
+    license = licenses.gpl1;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/browserpass/default.nix b/nixpkgs/pkgs/tools/security/browserpass/default.nix
new file mode 100644
index 000000000000..966383163e60
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/browserpass/default.nix
@@ -0,0 +1,54 @@
+{ lib, buildGoModule, fetchFromGitHub, makeWrapper, gnupg }:
+buildGoModule rec {
+  pname = "browserpass";
+  version = "3.0.6";
+
+  src = fetchFromGitHub {
+    owner = "browserpass";
+    repo = "browserpass-native";
+    rev = version;
+    sha256 = "0q3bsla07zjl6i69nj1axbkg2ia89pvh0jg6nlqgbm2kpzzbn0pz";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  modSha256 = "13yw7idgw8l48yvm4jjha0kbx6q22m2zp13y006mikavynqsr5kj";
+
+  postPatch = ''
+    # Because this Makefile will be installed to be used by the user, patch
+    # variables to be valid by default
+    substituteInPlace Makefile \
+      --replace "PREFIX ?= /usr" ""
+    sed -i -e 's/SED :=.*/SED := sed/' Makefile
+    sed -i -e 's/INSTALL :=.*/INSTALL := install/' Makefile
+  '';
+
+  DESTDIR = placeholder "out";
+
+  postConfigure = ''
+    make configure
+  '';
+
+  buildPhase = ''
+    make
+  '';
+
+  installPhase = ''
+    make install
+
+    wrapProgram $out/bin/browserpass \
+      --suffix PATH : ${lib.makeBinPath [ gnupg ]}
+
+    # This path is used by our firefox wrapper for finding native messaging hosts
+    mkdir -p $out/lib/mozilla/native-messaging-hosts
+    ln -s $out/lib/browserpass/hosts/firefox/*.json $out/lib/mozilla/native-messaging-hosts
+  '';
+
+  meta = with lib; {
+    description = "Browserpass native client app";
+    homepage = https://github.com/browserpass/browserpass-native;
+    license = licenses.isc;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ rvolosatovs infinisil ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/bruteforce-luks/default.nix b/nixpkgs/pkgs/tools/security/bruteforce-luks/default.nix
new file mode 100644
index 000000000000..cfa27a5c6865
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/bruteforce-luks/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, cryptsetup }:
+
+stdenv.mkDerivation rec {
+  pname = "bruteforce-luks";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    sha256 = "0yyrda077avdapq1mvavgv5mvj2r94d6p01q56bbnaq4a3h5kfd6";
+    rev = version;
+    repo = "bruteforce-luks";
+    owner = "glv2";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ cryptsetup ];
+
+  enableParallelBuilding = true;
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    inherit (src.meta) homepage;
+    description = "Cracks passwords of LUKS encrypted volumes";
+    longDescription = ''
+      The program tries to decrypt at least one of the key slots by trying
+      all the possible passwords. It is especially useful if you know
+      something about the password (i.e. you forgot a part of your password but
+      still remember most of it). Finding the password of a volume without
+      knowing anything about it would take way too much time (unless the
+      password is really short and/or weak). It can also use a dictionary.
+    '';
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/bundler-audit/Gemfile b/nixpkgs/pkgs/tools/security/bundler-audit/Gemfile
new file mode 100644
index 000000000000..f9fb0e329bd4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/bundler-audit/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'bundler-audit'
diff --git a/nixpkgs/pkgs/tools/security/bundler-audit/Gemfile.lock b/nixpkgs/pkgs/tools/security/bundler-audit/Gemfile.lock
new file mode 100644
index 000000000000..28cbcf5a9a66
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/bundler-audit/Gemfile.lock
@@ -0,0 +1,16 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    bundler-audit (0.6.1)
+      bundler (>= 1.2.0, < 3)
+      thor (~> 0.18)
+    thor (0.20.3)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  bundler-audit
+
+BUNDLED WITH
+   1.14.6
diff --git a/nixpkgs/pkgs/tools/security/bundler-audit/default.nix b/nixpkgs/pkgs/tools/security/bundler-audit/default.nix
new file mode 100644
index 000000000000..3712c129cf65
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/bundler-audit/default.nix
@@ -0,0 +1,28 @@
+{ bundlerEnv, ruby, lib, bundlerUpdateScript }:
+
+bundlerEnv rec {
+  name = "${pname}-${version}";
+  pname = "bundler-audit";
+  version = (import ./gemset.nix).bundler-audit.version;
+
+  inherit ruby;
+  gemdir = ./.;
+
+  passthru.updateScript = bundlerUpdateScript "bundler-audit";
+
+  meta = with lib; {
+    description = "Patch-level verification for Bundler";
+    longDescription = ''
+      Features:
+      - Checks for vulnerable versions of gems in Gemfile.lock.
+      - Checks for insecure gem sources (http://).
+      - Allows ignoring certain advisories that have been manually worked around.
+      - Prints advisory information.
+      - Does not require a network connection.
+    '';
+    homepage    = https://github.com/rubysec/bundler-audit;
+    license     = licenses.gpl3Plus;
+    maintainers = with maintainers; [ primeos nicknovitski ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/bundler-audit/gemset.nix b/nixpkgs/pkgs/tools/security/bundler-audit/gemset.nix
new file mode 100644
index 000000000000..56d78b3e8f16
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/bundler-audit/gemset.nix
@@ -0,0 +1,19 @@
+{
+  bundler-audit = {
+    dependencies = ["thor"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pm22xpn3xyymsainixnrk8v3l3xi9bzwkjkspx00cfzp84xvxbq";
+      type = "gem";
+    };
+    version = "0.6.1";
+  };
+  thor = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yhrnp9x8qcy5vc7g438amd5j9sw83ih7c30dr6g6slgw9zj3g29";
+      type = "gem";
+    };
+    version = "0.20.3";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/security/ccid/default.nix b/nixpkgs/pkgs/tools/security/ccid/default.nix
new file mode 100644
index 000000000000..8d0b3a89a348
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ccid/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, pcsclite, pkgconfig, libusb1, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "ccid";
+  version = "1.4.31";
+
+  src = fetchurl {
+    url = "https://ccid.apdu.fr/files/${pname}-${version}.tar.bz2";
+    sha256 = "1xz8ikr6vk73w3xnwb931yq8lqc1zrj8c3v34n6h63irwjvdfj3b";
+  };
+
+  postPatch = ''
+    patchShebangs .
+    substituteInPlace src/Makefile.in --replace /bin/echo echo
+  '';
+
+  preConfigure = ''
+    configureFlagsArray+=("--enable-usbdropdir=$out/pcsc/drivers")
+  '';
+
+  nativeBuildInputs = [ pkgconfig perl ];
+  buildInputs = [ pcsclite libusb1 ];
+
+  meta = with stdenv.lib; {
+    description = "ccid drivers for pcsclite";
+    homepage = https://ccid.apdu.fr/;
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ccrypt/default.nix b/nixpkgs/pkgs/tools/security/ccrypt/default.nix
new file mode 100644
index 000000000000..77a15e2f27c7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ccrypt/default.nix
@@ -0,0 +1,22 @@
+{stdenv, fetchurl, perl}:
+
+stdenv.mkDerivation {
+  name = "ccrypt-1.11";
+
+  src = fetchurl {
+    url = mirror://sourceforge/ccrypt/ccrypt-1.11.tar.gz;
+    sha256 = "0kx4a5mhmp73ljknl2lcccmw9z3f5y8lqw0ghaymzvln1984g75i";
+  };
+
+  nativeBuildInputs = [ perl ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = {
+    homepage = http://ccrypt.sourceforge.net/;
+    description = "Utility for encrypting and decrypting files and streams with AES-256";
+    license = stdenv.lib.licenses.gpl2Plus;
+    maintainers = with stdenv.lib.maintainers; [viric];
+    platforms = with stdenv.lib.platforms; all; 
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/certmgr/default.nix b/nixpkgs/pkgs/tools/security/certmgr/default.nix
new file mode 100644
index 000000000000..4f48522e613f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/certmgr/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, buildGoPackage, fetchFromGitHub, fetchpatch }:
+
+let
+  generic = { patches ? [] }:
+    buildGoPackage rec {
+      version = "1.6.4";
+      pname = "certmgr";
+
+      goPackagePath = "github.com/cloudflare/certmgr/";
+
+      src = fetchFromGitHub {
+        owner = "cloudflare";
+        repo = "certmgr";
+        rev = "v${version}";
+        sha256 = "0glvyp61ya21pdm2bsvq3vfhmmxc2998vxc6hiyc79ijsv9n6jqi";
+      };
+
+      inherit patches;
+
+      meta = with stdenv.lib; {
+        homepage = https://cfssl.org/;
+        description = "Cloudflare's certificate manager";
+        platforms = platforms.linux;
+        license = licenses.bsd2;
+        maintainers = with maintainers; [ johanot srhb ];
+      };
+    };
+in
+{
+  certmgr = generic {};
+
+  certmgr-selfsigned = generic {
+    # The following patch makes it possible to use a self-signed x509 cert
+    # for the cfssl apiserver.
+    # TODO: remove patch when PR is merged.
+    patches = [
+      (fetchpatch {
+        url    = "https://github.com/cloudflare/certmgr/pull/51.patch";
+        sha256 = "0jhsw159d2mgybvbbn6pmvj4yqr5cwcal5fjwkcn9m4f4zlb6qrs";
+      })
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/certstrap/default.nix b/nixpkgs/pkgs/tools/security/certstrap/default.nix
new file mode 100644
index 000000000000..fb3c00e48f91
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/certstrap/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "certstrap";
+  version = "1.1.1";
+
+  goPackagePath = "github.com/square/certstrap";
+
+  src = fetchFromGitHub {
+    owner = "square";
+    repo = "certstrap";
+    rev = "v${version}";
+    sha256 = "0j7gi2nzykny7i0gjax9vixw72l9jcm4wnwxgm72hh1pji0ysa8n";
+  };
+
+  meta = with stdenv.lib; {
+    inherit (src.meta) homepage;
+    description = "Tools to bootstrap CAs, certificate requests, and signed certificates";
+    platforms = platforms.all;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ volth ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/cfssl/default.nix b/nixpkgs/pkgs/tools/security/cfssl/default.nix
new file mode 100644
index 000000000000..8d8497f6cb94
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/cfssl/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, buildGoPackage, fetchFromGitHub, fetchpatch }:
+
+buildGoPackage rec {
+  pname = "cfssl";
+  version = "1.3.2";
+
+  goPackagePath = "github.com/cloudflare/cfssl";
+
+  src = fetchFromGitHub {
+    owner = "cloudflare";
+    repo = "cfssl";
+    rev = version;
+    sha256 = "0j2gz2vl2pf7ir7sc7jrwmjnr67hk4qhxw09cjx132jbk337jc9x";
+  };
+
+  # The following patch ensures that the auth-key decoder doesn't break,
+  # if the auth-key file contains leading or trailing whitespaces.
+  # https://github.com/cloudflare/cfssl/pull/923 is merged
+  # remove patch when it becomes part of a release.
+  patches = [
+    (fetchpatch {
+      url    = "https://github.com/cloudflare/cfssl/commit/7e13f60773c96644db9dd8d342d42fe3a4d26f36.patch";
+      sha256 = "1z2v2i8yj7qpj8zj5f2q739nhrr9s59jwzfzk52wfgssl4vv5mn5";
+    })
+  ];
+
+  meta = with stdenv.lib; {
+    homepage = https://cfssl.org/;
+    description = "Cloudflare's PKI and TLS toolkit";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ mbrgm ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/chaps/default.nix b/nixpkgs/pkgs/tools/security/chaps/default.nix
new file mode 100644
index 000000000000..c8ee95069682
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/chaps/default.nix
@@ -0,0 +1,91 @@
+{ stdenv, fetchFromGitiles, fetchFromGitHub, fetchurl, trousers, leveldb, unzip
+, scons, pkgconfig, glib, dbus_cplusplus, dbus, protobuf, openssl, snappy, pam
+}:
+
+let
+  src_chromebase = fetchFromGitiles {
+    url = "https://chromium.googlesource.com/chromium/src/base";
+    rev = "2dfe404711e15e24e79799516400c61b2719d7af";
+    sha256 = "2bd93a3ace4b6767db2c1bd1e16f426c97b8d2133a9cb15f8372b2516cfa65c5";
+  };
+
+  src_gmock = fetchurl {
+    url = "https://googlemock.googlecode.com/files/gmock-1.7.0.zip";
+    sha256 = "0nq98cpnv2jsx2byp4ilam6kydcnziflkc16ikydajmp4mcvpz16";
+  };
+
+  src_platform2 = fetchFromGitiles {
+    url = "https://chromium.googlesource.com/chromiumos/platform2";
+    rev = "e999e989eaa71c3db7314fc7b4e20829b2b5473b";
+    sha256 = "15n1bsv6r7cny7arx0hdb223xzzbk7vkxg2r7xajhl4nsj39adjh";
+  };
+
+in
+
+stdenv.mkDerivation rec {
+  name = "chaps-0.42-6812";
+  version = "0.42-6812";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "chaps-linux";
+    rev = "989aadc45cdb216ca35b0c97d13fc691576fa1d7";
+    sha256 = "0chk6pnn365d5kcz6vfqx1d0383ksk97icc0lzg0vvb0kvyj0ff1";
+  };
+
+  NIX_CFLAGS_COMPILE = [
+    # readdir_r(3) is deprecated in glibc >= 2.24
+    "-Wno-error=deprecated-declarations"
+    # gcc8 catching polymorphic type error
+    "-Wno-error=catch-value"
+  ];
+
+  patches = [ ./fix_absolute_path.patch  ./fix_environment_variables.patch  ./fix_scons.patch  ./insert_prefetches.patch ];
+
+  postPatch = ''
+    substituteInPlace makefile --replace @@NIXOS_SRC_CHROMEBASE@@ ${src_chromebase}
+    substituteInPlace makefile --replace @@NIXOS_SRC_GMOCK@@ ${src_gmock}
+    substituteInPlace makefile --replace @@NIXOS_SRC_PLATFORM2@@ ${src_platform2}
+    substituteInPlace makefile --replace @@NIXOS_LEVELDB@@ ${leveldb}
+    '';
+
+  nativeBuildInputs = [ unzip scons pkgconfig ];
+
+  buildInputs = [ trousers glib dbus_cplusplus dbus protobuf openssl snappy leveldb pam ];
+
+  buildPhase = ''
+    make build
+    '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ${name}/out/chapsd $out/bin/.
+    cp ${name}/out/chaps_client $out/bin/.
+
+    mkdir -p $out/lib
+    cp ${name}/out/libchaps.so.* $out/lib/.
+    mkdir -p $out/lib/security
+    cp ${name}/out/pam_chaps.so $out/lib/security/.
+
+    mkdir -p $out/include
+    cp -r ${name}/out/chaps $out/include/.
+
+    mkdir -p $out/etc/dbus-1/system.d
+    cp ${name}/out/org.chromium.Chaps.conf $out/etc/dbus-1/system.d/.
+    mkdir -p $out/etc/dbus-1/system-services
+    cp ${name}/platform2/chaps/org.chromium.Chaps.service $out/etc/dbus-1/system-services/.
+
+    mkdir -p $out/usr/share/pam-configs/chaps
+    mkdir -p $out/usr/share/man/man8
+    cp ${name}/man/* $out/usr/share/man/man8/.
+    '';
+
+  meta = with stdenv.lib; {
+    description = "PKCS #11 implementation based on trusted platform module (TPM)";
+    homepage = https://www.chromium.org/developers/design-documents/chaps-technical-design;
+    maintainers = [ maintainers.tstrobel ];
+    platforms = [ "x86_64-linux" ];
+    license = licenses.bsd3;
+    broken = true;  # build failure withn openssl 1.1
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/chaps/fix_absolute_path.patch b/nixpkgs/pkgs/tools/security/chaps/fix_absolute_path.patch
new file mode 100644
index 000000000000..7dbd60c73c42
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/chaps/fix_absolute_path.patch
@@ -0,0 +1,18 @@
+diff --git a/patches/platform2/fix_echo.patch b/patches/platform2/fix_echo.patch
+new file mode 100644
+index 0000000..d2272f6
+--- /dev/null
++++ b/patches/platform2/fix_echo.patch
+@@ -0,0 +1,12 @@
++diff -uNr platform2/common-mk/common.mk platform2-new/common-mk/common.mk
++--- platform2/common-mk/common.mk	2015-07-03 12:07:47.482745292 +0200
+++++ platform2-new/common-mk/common.mk	2015-07-03 12:08:16.868600569 +0200
++@@ -263,7 +263,7 @@
++ $(eval $(call override_var,STRIP,strip))
++ 
++ RMDIR ?= rmdir
++-ECHO = /bin/echo -e
+++ECHO = echo -e
++ 
++ ifeq ($(lastword $(subst /, ,$(CC))),clang)
++ CDRIVER = clang
diff --git a/nixpkgs/pkgs/tools/security/chaps/fix_environment_variables.patch b/nixpkgs/pkgs/tools/security/chaps/fix_environment_variables.patch
new file mode 100644
index 000000000000..2d7ee0d9a734
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/chaps/fix_environment_variables.patch
@@ -0,0 +1,42 @@
+diff --git a/extrasrc/Makefile b/extrasrc/Makefile
+index fb95845..77125c0 100644
+--- a/extrasrc/Makefile
++++ b/extrasrc/Makefile
+@@ -10,11 +10,11 @@ OUTDIR=$(SRCDIR)/out
+ GMOCK_DIR=$(SRCDIR)/gmock-$(GMOCK_VER)
+ GTEST_DIR=$(GMOCK_DIR)/gtest
+ 
+-INCLUDES="-I$(SRCDIR)/include -I$(SRCDIR)/platform2/libchromeos -isystem $(GTEST_DIR)/include -I$(GMOCK_DIR)/include -I$(SRCDIR)/leveldb/include"
++INCLUDES="-I$(SRCDIR)/include -I$(SRCDIR)/platform2/libchromeos -isystem $(GTEST_DIR)/include -I$(GMOCK_DIR)/include -I$(SRCDIR)/leveldb/include $(NIX_LDFLAG) $(NIX_CFLAGS_COMPILE)"
+ 
+ # To build Chaps, defer to platform2/chaps/Makefile
+ all: libchrome-$(BASE_VER).a libchromeos-$(BASE_VER).a | out
+-	cd platform2/chaps && BASE_VER=$(BASE_VER) LINUX_BUILD=1 PKG_CONFIG_PATH=$(SRCDIR) CXXFLAGS=$(INCLUDES) OUT=$(OUTDIR) CHAPS_VERSION_MAJOR=$(CHAPS_VERSION_MAJOR) CHAPS_VERSION_MINOR=$(CHAPS_VERSION_MINOR) $(MAKE)
++	cd platform2/chaps && BASE_VER=$(BASE_VER) LINUX_BUILD=1 PKG_CONFIG_PATH=$(SRCDIR):$(PKG_CONFIG_PATH) CXXFLAGS=$(INCLUDES) OUT=$(OUTDIR) CHAPS_VERSION_MAJOR=$(CHAPS_VERSION_MAJOR) CHAPS_VERSION_MINOR=$(CHAPS_VERSION_MINOR) $(MAKE)
+ 
+ # To build required Chromium components, defer to scons file.
+ libchrome-$(BASE_VER).a:
+@@ -38,7 +38,7 @@ out/libgmock.a: out/gmock-all.o
+ 	ar -rv $@ $<
+ 
+ test: out/libgtest.a out/libgmock.a libchrome-$(BASE_VER).a libchromeos-$(BASE_VER).a | out
+-	cd platform2/chaps && BASE_VER=$(BASE_VER) LINUX_BUILD=1 PKG_CONFIG_PATH=$(SRCDIR) CXXFLAGS=$(INCLUDES) LDLIBS="-L$(OUTDIR)" OUT=$(OUTDIR) $(MAKE) tests
++	cd platform2/chaps && BASE_VER=$(BASE_VER) LINUX_BUILD=1 PKG_CONFIG_PATH=$(SRCDIR):$(PKG_CONFIG_PATH) CXXFLAGS=$(INCLUDES) LDLIBS="-L$(OUTDIR)" OUT=$(OUTDIR) $(MAKE) tests
+ 
+ clean: clean_chaps clean_chromeos clean_chromebase clean_gmock clean_debian
+ clean_gmock:
+@@ -49,7 +49,7 @@ clean_chromebase:
+ clean_chromeos:
+ 	-BASE_VER=$(BASE_VER) scons -f Sconstruct.libchromeos -c
+ clean_chaps:
+-	-cd platform2/chaps && BASE_VER=$(BASE_VER) LINUX_BUILD=1 PKG_CONFIG_PATH=$(SRCDIR) $(MAKE) clean
++	-cd platform2/chaps && BASE_VER=$(BASE_VER) LINUX_BUILD=1 PKG_CONFIG_PATH=$(SRCDIR):$(PKG_CONFIG_PATH) $(MAKE) clean
+ 	rm -rf out
+ clean_debian:
+ 	dh_clean
+@@ -64,4 +64,4 @@ install_man:
+ 	$(INSTALL) -m 0644 -D man/chapsd.8 $(MANDIR)/man8/chapsd.8
+ 	$(INSTALL) -m 0644 -D man/chaps_client.8 $(MANDIR)/man8/chaps_client.8
+ install: install_man
+-	cd platform2/chaps && BASE_VER=$(BASE_VER) LINUX_BUILD=1 PKG_CONFIG_PATH=$(SRCDIR) CXXFLAGS=$(INCLUDES) OUT=$(OUTDIR) CHAPS_VERSION_MAJOR=$(CHAPS_VERSION_MAJOR) CHAPS_VERSION_MINOR=$(CHAPS_VERSION_MINOR) $(MAKE) install_files
++	cd platform2/chaps && BASE_VER=$(BASE_VER) LINUX_BUILD=1 PKG_CONFIG_PATH=$(SRCDIR):$(PKG_CONFIG_PATH) CXXFLAGS=$(INCLUDES) OUT=$(OUTDIR) CHAPS_VERSION_MAJOR=$(CHAPS_VERSION_MAJOR) CHAPS_VERSION_MINOR=$(CHAPS_VERSION_MINOR) $(MAKE) install_files
diff --git a/nixpkgs/pkgs/tools/security/chaps/fix_scons.patch b/nixpkgs/pkgs/tools/security/chaps/fix_scons.patch
new file mode 100644
index 000000000000..54843453c868
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/chaps/fix_scons.patch
@@ -0,0 +1,26 @@
+diff --git a/extrasrc/Sconstruct.libchrome b/extrasrc/Sconstruct.libchrome
+index 4feb76d..311fe8a 100644
+--- a/extrasrc/Sconstruct.libchrome
++++ b/extrasrc/Sconstruct.libchrome
+@@ -103,7 +103,7 @@ base_lib = {
+     'pc_libs' : 'glib-2.0',
+ }
+ 
+-env = Environment()
++env = Environment(ENV = os.environ)
+ 
+ BASE_VER = os.environ.get('BASE_VER', '0')
+ GTEST_DIR = os.environ.get('GTEST_DIR', '0')
+diff --git a/extrasrc/Sconstruct.libchromeos b/extrasrc/Sconstruct.libchromeos
+index 1da6001..66f9acb 100644
+--- a/extrasrc/Sconstruct.libchromeos
++++ b/extrasrc/Sconstruct.libchromeos
+@@ -18,7 +18,7 @@ base_lib = {
+     'pc_libs' : 'dbus-c++-1',
+ }
+ 
+-env = Environment()
++env = Environment(ENV = os.environ)
+ 
+ PKG_CONFIG = os.environ.get('PKG_CONFIG', 'pkg-config')
+ BASE_VER = os.environ.get('BASE_VER', '0')
diff --git a/nixpkgs/pkgs/tools/security/chaps/insert_prefetches.patch b/nixpkgs/pkgs/tools/security/chaps/insert_prefetches.patch
new file mode 100644
index 000000000000..8b8449a6e661
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/chaps/insert_prefetches.patch
@@ -0,0 +1,51 @@
+diff --git a/makefile b/makefile
+index b6865f3..c14f5ec 100644
+--- a/makefile
++++ b/makefile
+@@ -53,8 +53,8 @@ $(SRCDIR)/include/trousers/scoped_tss_type.h: extrasrc/scoped_tss_type.h | $(SRC
+ 	cp $< $@
+ # Chromium includes <leveldb/memenv.h>.  This requires an install of libleveldb-dev that has
+ # memenv support included; move this into a local leveldb/ subdirectory
+-$(SRCDIR)/include/leveldb/memenv.h: /usr/include/leveldb/helpers/memenv.h | $(SRCDIR)/include/leveldb
+-	cp $< $@
++$(SRCDIR)/include/leveldb/memenv.h: $(SRCDIR)/include/leveldb
++	cp @@NIXOS_LEVELDB@@/include/leveldb/helpers/memenv.h $@
+ # Chromium includes <include/testing/gtest/include/gtest/gtest_prod.h>, so have a local copy.
+ $(SRCDIR)/include/testing/gtest/include/gtest/gtest_prod.h: extrasrc/gtest_prod.h | $(SRCDIR)/include/testing/gtest/include/gtest
+ 	cp $< $@
+@@ -80,7 +80,7 @@ GMOCK_DIR=$(SRCDIR)/gmock-$(GMOCK_VERSION)
+ GTEST_DIR=$(GMOCK_DIR)/gtest
+ src_gmock: $(GMOCK_DIR)/LICENSE
+ $(GMOCK_DIR)/LICENSE: | $(SRCDIR)
+-	cd $(SRCDIR) && wget $(GMOCK_URL)
++	cd $(SRCDIR) && cp @@NIXOS_SRC_GMOCK@@ gmock-$(GMOCK_VERSION).zip && chmod +w gmock-$(GMOCK_VERSION).zip
+ 	cd $(SRCDIR) && unzip -q gmock-$(GMOCK_VERSION).zip
+ 	rm $(SRCDIR)/gmock-$(GMOCK_VERSION).zip
+ 	touch $@
+@@ -107,8 +107,7 @@ src_chromebase: $(SRCDIR)/base/base64.h
+ $(SRCDIR)/base: | $(SRCDIR)
+ 	mkdir -p $@
+ $(SRCDIR)/base/base64.h: | $(SRCDIR)/base
+-	git clone $(CHROMEBASE_GIT) $(SRCDIR)/base
+-	cd $(SRCDIR)/base && git checkout $(CHROMEBASE_COMMIT)
++	cp -r @@NIXOS_SRC_CHROMEBASE@@/. $(SRCDIR)/base && chmod -R +w $(SRCDIR)/base
+ 
+ # We need two subdirectories from the platform2 repository from ChromiumOS:
+ #   - chaps/ for the Chaps source code
+@@ -119,14 +118,8 @@ $(SRCDIR)/platform2:
+ PLATFORM2_GIT=https://chromium.googlesource.com/chromiumos/platform2
+ PATCHES=$(wildcard $(CURDIR)/patches/platform2/*.patch)
+ $(SRCDIR)/platform2/chaps/Makefile: | $(SRCDIR)/platform2
+-	cd $(SRCDIR)/platform2 && git init . && git remote add -f origin $(PLATFORM2_GIT)
+-	cd $(SRCDIR)/platform2 && git config core.sparsecheckout true
+-	cd $(SRCDIR)/platform2 && echo "chaps" > .git/info/sparse-checkout
+-	cd $(SRCDIR)/platform2 && echo "libchromeos/chromeos" >> .git/info/sparse-checkout
+-	cd $(SRCDIR)/platform2 && echo "common-mk/common.mk" >> .git/info/sparse-checkout
+-	cd $(SRCDIR)/platform2 && git pull origin master
+-	cd $(SRCDIR)/platform2 && git checkout $(CROS_BRANCH)
+-	cd $(SRCDIR)/platform2 && if [ ! -z "$(PATCHES)" ]; then git am $(PATCHES); fi
++	cd $(SRCDIR)/platform2 && cp -r @@NIXOS_SRC_PLATFORM2@@/. . && chmod -R +w $(SRCDIR)/platform2
++	cd $(SRCDIR)/platform2 && if [ ! -z "$(PATCHES)" ]; then patch -p1 < $(PATCHES); fi
+ 
+ 
+ # Copy man pages
diff --git a/nixpkgs/pkgs/tools/security/chipsec/default.nix b/nixpkgs/pkgs/tools/security/chipsec/default.nix
new file mode 100644
index 000000000000..7b4c8cf68eb8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/chipsec/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, lib, fetchFromGitHub, pythonPackages, nasm, libelf
+, kernel ? null, withDriver ? false }:
+pythonPackages.buildPythonApplication rec {
+  name = "chipsec-${version}";
+  version = "1.4.1";
+
+  src = fetchFromGitHub {
+    owner = "chipsec";
+    repo = "chipsec";
+    rev = version;
+    sha256 = "043gf21zygvrzvvkwv5xxpcv3ryj5m8klkgyhq0lnh6k594qrg77";
+  };
+
+  nativeBuildInputs = [
+    nasm libelf
+  ];
+
+  setupPyBuildFlags = lib.optional (!withDriver) "--skip-driver";
+
+  checkPhase = "python setup.py build "
+             + lib.optionalString (!withDriver) "--skip-driver "
+             + "test";
+
+  KERNEL_SRC_DIR = lib.optionalString withDriver "${kernel.dev}/lib/modules/${kernel.modDirVersion}/build";
+
+  meta = with stdenv.lib; {
+    description = "Platform Security Assessment Framework";
+    longDescription = ''
+      CHIPSEC is a framework for analyzing the security of PC platforms
+      including hardware, system firmware (BIOS/UEFI), and platform components.
+      It includes a security test suite, tools for accessing various low level
+      interfaces, and forensic capabilities. It can be run on Windows, Linux,
+      Mac OS X and UEFI shell.
+    '';
+    license = licenses.gpl2;
+    homepage = https://github.com/chipsec/chipsec;
+    maintainers = with maintainers; [ johnazoidberg ];
+    platforms = if withDriver then [ "x86_64-linux" ] else platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/chkrootkit/default.nix b/nixpkgs/pkgs/tools/security/chkrootkit/default.nix
new file mode 100644
index 000000000000..1d85ba0b5669
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/chkrootkit/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "chkrootkit-0.53";
+
+  src = fetchurl {
+    url = "ftp://ftp.pangeia.com.br/pub/seg/pac/${name}.tar.gz";
+    sha256 = "1da5ry3p7jb6xs6xlfml1ly09q2rs5q6n5axif17d29k7gixlqkj";
+  };
+
+  # TODO: a lazy work-around for linux build failure ...
+  makeFlags = [ "STATIC=" ];
+
+   postPatch = ''
+    substituteInPlace chkrootkit \
+      --replace " ./" " $out/bin/"
+   '';
+
+  installPhase = ''
+    mkdir -p $out/sbin
+    cp check_wtmpx chkdirs chklastlog chkproc chkrootkit chkutmp chkwtmp ifpromisc strings-static $out/sbin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Locally checks for signs of a rootkit";
+    homepage = http://www.chkrootkit.org/;
+    license = licenses.bsd2;
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/chntpw/00-chntpw-build-arch-autodetect.patch b/nixpkgs/pkgs/tools/security/chntpw/00-chntpw-build-arch-autodetect.patch
new file mode 100644
index 000000000000..9c379adb7dfb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/chntpw/00-chntpw-build-arch-autodetect.patch
@@ -0,0 +1,25 @@
+diff -urN chntpw-140201.orig/Makefile chntpw-140201/Makefile
+--- chntpw-140201.orig/Makefile	2014-02-01 20:54:37.000000000 +0400
++++ chntpw-140201/Makefile	2014-08-03 20:26:56.497161881 +0400
+@@ -12,14 +12,13 @@
+ 
+ CC=gcc
+ 
+-# Force 32 bit
+-CFLAGS= -DUSEOPENSSL -g -I. -I$(OSSLINC) -Wall -m32 
+-OSSLLIB=$(OSSLPATH)/lib
+-
+-# 64 bit if default for compiler setup
+-#CFLAGS= -DUSEOPENSSL -g -I. -I$(OSSLINC) -Wall
+-#OSSLLIB=$(OSSLPATH)/lib64
+-
++ifeq      '$(shell gcc -dumpmachine)' 'x86_64-unknown-linux-gnu'
++  CFLAGS= -DUSEOPENSSL -g -I. -I$(OSSLINC) -Wall
++  OSSLLIB=$(OSSLPATH)/lib64
++else ifeq '$(shell gcc -dumpmachine)' 'i686-unknown-linux-gnu'
++  CFLAGS= -DUSEOPENSSL -g -I. -I$(OSSLINC) -Wall -m32 
++  OSSLLIB=$(OSSLPATH)/lib
++endif
+ 
+ # This is to link with whatever we have, SSL crypto lib we put in static
+ #LIBS=-L$(OSSLLIB) $(OSSLLIB)/libcrypto.a
diff --git a/nixpkgs/pkgs/tools/security/chntpw/01-chntpw-install-target.patch b/nixpkgs/pkgs/tools/security/chntpw/01-chntpw-install-target.patch
new file mode 100644
index 000000000000..d3163a026f91
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/chntpw/01-chntpw-install-target.patch
@@ -0,0 +1,26 @@
+diff -urN chntpw-140201.orig/Makefile chntpw-140201/Makefile
+--- chntpw-140201.orig/Makefile	2014-08-03 20:26:56.497161881 +0400
++++ chntpw-140201/Makefile	2014-08-04 12:57:16.563818342 +0400
+@@ -10,6 +10,8 @@
+ OSSLPATH=/usr
+ OSSLINC=$(OSSLPATH)/include
+ 
++PREFIX ?= /usr
++
+ CC=gcc
+ 
+ ifeq      '$(shell gcc -dumpmachine)' 'x86_64-unknown-linux-gnu'
+@@ -24,8 +26,12 @@
+ #LIBS=-L$(OSSLLIB) $(OSSLLIB)/libcrypto.a
+ LIBS=-L$(OSSLLIB)
+ 
++BINARIES := chntpw chntpw.static cpnt reged reged.static samusrgrp samusrgrp.static sampasswd sampasswd.static
+ 
+-all: chntpw chntpw.static cpnt reged reged.static samusrgrp samusrgrp.static sampasswd sampasswd.static
++all: $(BINARIES)
++install: $(BINARIES)
++	mkdir -p $(PREFIX)/bin
++	cp $^ $(PREFIX)/bin
+ 
+ chntpw: chntpw.o ntreg.o edlib.o libsam.o
+ 	$(CC) $(CFLAGS) -o chntpw chntpw.o ntreg.o edlib.o libsam.o $(LIBS)
diff --git a/nixpkgs/pkgs/tools/security/chntpw/default.nix b/nixpkgs/pkgs/tools/security/chntpw/default.nix
new file mode 100644
index 000000000000..5a037090801a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/chntpw/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, unzip }:
+
+stdenv.mkDerivation rec {
+  pname = "chntpw";
+
+  version = "140201";
+
+  src = fetchurl {
+    url = "http://pogostick.net/~pnh/ntpasswd/chntpw-source-${version}.zip";
+    sha256 = "1k1cxsj0221dpsqi5yibq2hr7n8xywnicl8yyaicn91y8h2hkqln";
+  };
+
+  buildInputs = [ unzip ]
+    ++ stdenv.lib.optionals stdenv.isLinux [ stdenv.glibc.out stdenv.glibc.static ];
+
+  patches = [
+    ./00-chntpw-build-arch-autodetect.patch
+    ./01-chntpw-install-target.patch
+  ];
+
+  installPhase = ''
+    make install PREFIX=$out
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://pogostick.net/~pnh/ntpasswd/;
+    description = "An utility to reset the password of any user that has a valid local account on a Windows system";
+    maintainers = with stdenv.lib.maintainers; [ deepfire ];
+    license = licenses.gpl2;
+    platforms = with stdenv.lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/chrome-token-signing/default.nix b/nixpkgs/pkgs/tools/security/chrome-token-signing/default.nix
new file mode 100644
index 000000000000..76c845e7a99e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/chrome-token-signing/default.nix
@@ -0,0 +1,30 @@
+{ mkDerivation, fetchFromGitHub, qmake, pcsclite, pkgconfig, opensc }:
+
+mkDerivation rec {
+  pname = "chrome-token-signing";
+  version = "1.0.7";
+
+  src = fetchFromGitHub {
+    owner = "open-eid";
+    repo = "chrome-token-signing";
+    rev = "v${version}";
+    sha256 = "1icbr5gyf7qqk1qjgcrf6921ws84j5h8zrpzw5mirq4582l5gsav";
+  };
+
+  buildInputs = [ qmake pcsclite pkgconfig ];
+  dontUseQmakeConfigure = true;
+
+  patchPhase = ''
+    substituteInPlace host-linux/ee.ria.esteid.json --replace /usr $out
+    # TODO: macos
+    substituteInPlace host-shared/PKCS11Path.cpp \
+      --replace opensc-pkcs11.so ${opensc}/lib/pkcs11/opensc-pkcs11.so
+  '';
+
+  installPhase = ''
+    install -D -t $out/bin host-linux/chrome-token-signing
+    # TODO: wire these up
+    install -D -t $out/etc/chromium/native-messaging-hosts host-linux/ee.ria.esteid.json
+    install -D -t $out/lib/mozilla/native-messaging-hosts host-linux/ff/ee.ria.esteid.json
+  '';
+}
diff --git a/nixpkgs/pkgs/tools/security/cipherscan/default.nix b/nixpkgs/pkgs/tools/security/cipherscan/default.nix
new file mode 100644
index 000000000000..eae5a5256dff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/cipherscan/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, lib, fetchFromGitHub, openssl, makeWrapper, python, coreutils }:
+
+stdenv.mkDerivation rec {
+  pname = "cipherscan";
+  version = "2016-08-16";
+
+  src = fetchFromGitHub {
+    owner = "mozilla";
+    repo = "cipherscan";
+    rev = "74dd82e8ad994a140daf79489d3bd1c5ad928d38";
+    sha256 = "16azhlmairnvdz7xmwgvfpn2pzw1p8z7c9b27m07fngqjkpx0mhh";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ python ];
+
+  buildPhase = ''
+    substituteInPlace cipherscan --replace '$0' 'cipherscan'
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+
+    cp cipherscan $out/bin
+    cp openssl.cnf $out/bin
+    cp analyze.py $out/bin/cipherscan-analyze
+
+    wrapProgram $out/bin/cipherscan \
+      --set NOAUTODETECT 1 \
+      --set TIMEOUTBIN "${coreutils}/bin/timeout" \
+      --set OPENSSLBIN "${openssl}/bin/openssl"
+  '';
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "Very simple way to find out which SSL ciphersuites are supported by a target";
+    license = licenses.mpl20;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ cstrahan fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/clamav/default.nix b/nixpkgs/pkgs/tools/security/clamav/default.nix
new file mode 100644
index 000000000000..43f56352ceb3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/clamav/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, fetchurl, pkgconfig
+, zlib, bzip2, libiconv, libxml2, openssl, ncurses, curl, libmilter, pcre2
+, libmspack, systemd
+}:
+
+stdenv.mkDerivation rec {
+  pname = "clamav";
+  version = "0.102.1";
+
+  src = fetchurl {
+    url = "https://www.clamav.net/downloads/production/${pname}-${version}.tar.gz";
+    sha256 = "1mpdgn3isz26hd1j6p8lcb76v8hjs54k1wb655rnil4hv78aig8d";
+  };
+
+  # don't install sample config files into the absolute sysconfdir folder
+  postPatch = ''
+    substituteInPlace Makefile.in --replace ' etc ' ' '
+  '';
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [
+    zlib bzip2 libxml2 openssl ncurses curl libiconv libmilter pcre2 libmspack
+    systemd
+  ];
+
+  configureFlags = [
+    "--libdir=$(out)/lib"
+    "--sysconfdir=/etc/clamav"
+    "--with-systemdsystemunitdir=$(out)/lib/systemd"
+    "--disable-llvm" # enabling breaks the build at the moment
+    "--with-zlib=${zlib.dev}"
+    "--with-xml=${libxml2.dev}"
+    "--with-openssl=${openssl.dev}"
+    "--with-libcurl=${curl.dev}"
+    "--with-system-libmspack"
+    "--enable-milter"
+  ];
+
+  postInstall = ''
+    mkdir $out/etc
+    cp etc/*.sample $out/etc
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://www.clamav.net;
+    description = "Antivirus engine designed for detecting Trojans, viruses, malware and other malicious threats";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ phreedom robberer qknight fpletz globin ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/cowpatty/default.nix b/nixpkgs/pkgs/tools/security/cowpatty/default.nix
new file mode 100644
index 000000000000..0fb9ed58997f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/cowpatty/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, openssl, libpcap
+}:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  pname = "cowpatty";
+  version = "4.6";
+
+  buildInputs = [ openssl libpcap ];
+
+  src = fetchurl {
+    url = "http://www.willhackforsushi.com/code/cowpatty/${version}/${pname}-${version}.tgz";
+    sha256 = "1hivh3bq2maxvqzwfw06fr7h8bbpvxzah6mpibh3wb85wl9w2gyd";
+  };
+
+  installPhase = "make DESTDIR=$out BINDIR=/bin install";
+
+  meta = {
+    description = "Offline dictionary attack against WPA/WPA2 networks";
+    license = licenses.gpl2;
+    homepage = https://www.willhackforsushi.com/?page_id=50;
+    maintainers = with maintainers; [ nico202 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/crackxls/default.nix b/nixpkgs/pkgs/tools/security/crackxls/default.nix
new file mode 100644
index 000000000000..04b7b5695b55
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/crackxls/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchgit, pkgconfig, autoconf, automake, openssl, libgsf, gmp }:
+
+stdenv.mkDerivation rec {
+
+  pname = "crackxls";
+  version = "0.4";
+
+  src = fetchgit {
+    url = https://github.com/GavinSmith0123/crackxls2003.git;
+    rev = "refs/tags/v${version}";
+    sha256 = "0q5jl7hcds3f0rhly3iy4fhhbyh9cdrfaw7zdrazzf1wswwhyssz";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ autoconf automake openssl libgsf gmp ];
+
+  installPhase =
+  ''
+    mkdir -p $out/bin
+    cp crackxls2003 $out/bin/
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/GavinSmith0123/crackxls2003/;
+    description = "Used to break the encryption on old Microsoft Excel and Microsoft Word files";
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/crunch/default.nix b/nixpkgs/pkgs/tools/security/crunch/default.nix
new file mode 100644
index 000000000000..259ee38c68f7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/crunch/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, which }:
+
+stdenv.mkDerivation  rec {
+  pname = "crunch";
+  version = "3.6";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/crunch-wordlist/${pname}-${version}.tgz";
+    sha256 = "0mgy6ghjvzr26yrhj1bn73qzw6v9qsniskc5wqq1kk0hfhy6r3va";
+  };
+
+  buildInputs = [ which ];
+
+  preBuild = ''
+    substituteInPlace Makefile \
+      --replace '-g root -o root' "" \
+      --replace '-g wheel -o root' "" \
+      --replace 'sudo ' ""
+  '';
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with stdenv.lib; {
+    description = "Wordlist generator";
+    homepage = https://sourceforge.net/projects/crunch-wordlist/;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ lethalman lnl7 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ctmg/default.nix b/nixpkgs/pkgs/tools/security/ctmg/default.nix
new file mode 100644
index 000000000000..104a615542bd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ctmg/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchzip }:
+
+stdenv.mkDerivation rec {
+  pname = "ctmg";
+  version = "1.2";
+
+  src = fetchzip {
+    url = "https://git.zx2c4.com/ctmg/snapshot/ctmg-${version}.tar.xz";
+    sha256 = "1i4v8sriwjrmj3yizbl1ysckb711yl9qsn9x45jq0ij1apsydhyc";
+  };
+
+  installPhase = "install -D ctmg.sh $out/bin/ctmg";
+
+  meta = with stdenv.lib; {
+    description = "An encrypted container manager for Linux using cryptsetup";
+    homepage = https://git.zx2c4.com/ctmg/about/;
+    license = licenses.isc;
+    maintainers = with maintainers; [ mrVanDalo ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/default.nix b/nixpkgs/pkgs/tools/security/default.nix
new file mode 100644
index 000000000000..0e57a5bab884
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, pkgs }:
+
+stdenv.mkDerivation {
+  version = "0.0.1";
+  pname = "ecdsatool";
+
+  src = pkgs.fetchFromGitHub {
+    owner = "kaniini";
+    repo = "ecdsatool";
+    rev = "7c0b2c51e2e64d1986ab1dc2c57c2d895cc00ed1";
+    sha256 = "08z9309znkhrjpwqd4ygvm7cd1ha1qbrnlzw64fr8704jrmx762k";
+  };
+
+  configurePhase = ''
+    ./autogen.sh
+    ./configure --prefix=$out
+  '';
+
+  nativeBuildInputs = with pkgs; [openssl autoconf automake];
+  buildInputs = with pkgs; [libuecc];
+
+  meta = with stdenv.lib; {
+    description = "Create and manipulate ECC NISTP256 keypairs.";
+    homepage = https://github.com/kaniini/ecdsatool/;
+    license = with licenses; [free];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/diceware/default.nix b/nixpkgs/pkgs/tools/security/diceware/default.nix
new file mode 100644
index 000000000000..dcd7e853564a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/diceware/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, python3Packages
+}:
+
+with python3Packages;
+
+buildPythonApplication rec {
+  pname = "diceware";
+  version = "0.9.6";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0klb0ysybzlh2wihvir82hgq62v0jjmlcqklwajyms7c0p529yby";
+  };
+
+  nativeBuildInputs = [ pytestrunner ];
+
+  propagatedBuildInputs = [ setuptools ];
+
+  checkInputs = [ coverage pytest ];
+
+  # see https://github.com/ulif/diceware/commit/a7d844df76cd4b95a717f21ef5aa6167477b6733
+  checkPhase = ''
+    py.test -m 'not packaging'
+  '';
+
+  meta = with lib; {
+    description = "Generates passphrases by concatenating words randomly picked from wordlists";
+    homepage = https://github.com/ulif/diceware;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ asymmetric ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/dirmngr/default.nix b/nixpkgs/pkgs/tools/security/dirmngr/default.nix
new file mode 100644
index 000000000000..ee97bda19064
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/dirmngr/default.nix
@@ -0,0 +1,17 @@
+{ stdenv, fetchurl, libgpgerror, libgcrypt, libassuan, libksba, pth, openldap
+, libiconv}:
+
+stdenv.mkDerivation rec {
+  name = "dirmngr-1.1.1";
+  src = fetchurl {
+    url = "mirror://gnupg/dirmngr/${name}.tar.bz2";
+    sha256 = "1zz6m87ca55nq5f59hzm6qs48d37h93il881y7d0rf2d6660na6j";
+  };
+  buildInputs = [ libgpgerror libgcrypt libassuan libksba
+                  pth openldap libiconv ];
+
+  meta = {
+    platforms = stdenv.lib.platforms.unix;
+    license = stdenv.lib.licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/dnsenum/default.nix b/nixpkgs/pkgs/tools/security/dnsenum/default.nix
new file mode 100644
index 000000000000..3374c827d756
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/dnsenum/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub, makeWrapper, perl, perlPackages }:
+
+stdenv.mkDerivation rec {
+  pname = "dnsenum";
+  version = "1.2.4.2";
+
+  src = fetchFromGitHub {
+    owner = "fwaeytens";
+    repo = pname;
+    rev = version;
+    sha256 = "1bg1ljv6klic13wq4r53bg6inhc74kqwm3w210865b1v1n8wj60v";
+  };
+
+  propagatedBuildInputs = with perlPackages; [
+    perl NetDNS NetIP NetNetmask StringRandom XMLWriter NetWhoisIP WWWMechanize
+  ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    install -vD dnsenum.pl $out/bin/dnsenum
+    install -vD dns.txt -t $out/share
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/fwaeytens/dnsenum";
+    description = "A tool to enumerate DNS information";
+    maintainers = with maintainers; [ c0bw3b ];
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/dnsrecon/default.nix b/nixpkgs/pkgs/tools/security/dnsrecon/default.nix
new file mode 100644
index 000000000000..2575636aeca2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/dnsrecon/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, fetchFromGitHub, python3 }:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "dnsrecon";
+  version = "0.9.1";
+
+  src = fetchFromGitHub {
+    owner = "darkoperator";
+    repo = pname;
+    rev = version;
+    sha256 = "1ysf8wx287psfk89r0i2vgnrjvxdj44s6nhf6sva59jbwvr9lghy";
+  };
+
+  format = "other";
+
+  pythonPath = with python3.pkgs; [
+    dns netaddr lxml
+  ];
+
+  postPatch = ''
+    substituteInPlace dnsrecon.py \
+      --replace "namelist.txt" "../share/namelist.txt" \
+      --replace "0.9.0" "${version}"
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -vD dnsrecon.py $out/bin/dnsrecon
+    install -vD namelist.txt subdomains-*.txt -t $out/share
+    install -vd $out/${python3.sitePackages}/
+    cp -R lib tools msf_plugin $out/${python3.sitePackages}
+
+    runHook postInstall
+  '';
+
+  meta = with stdenv.lib; {
+    description = "DNS Enumeration Script";
+    homepage = "https://github.com/darkoperator/dnsrecon";
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ c0bw3b ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/doas/default.nix b/nixpkgs/pkgs/tools/security/doas/default.nix
new file mode 100644
index 000000000000..ce8b5825647c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/doas/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, lib, fetchFromGitHub, bison, pam }:
+
+stdenv.mkDerivation rec {
+  pname = "doas";
+
+  version = "6.0";
+
+  src = fetchFromGitHub {
+    owner = "Duncaen";
+    repo = "OpenDoas";
+    rev = "v${version}";
+    sha256 = "1j50l3jvbgvg8vmp1nx6vrjxkbj5bvfh3m01bymzfn25lkwwhz1x";
+  };
+
+  # otherwise confuses ./configure
+  dontDisableStatic = true;
+
+  postPatch = ''
+    sed -i '/\(chown\|chmod\)/d' bsd.prog.mk
+  '';
+
+  buildInputs = [ bison pam ];
+
+  meta = with lib; {
+    description = "Executes the given command as another user";
+    homepage = "https://github.com/Duncaen/OpenDoas";
+    license = licenses.isc;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ cstrahan ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/duo-unix/default.nix b/nixpkgs/pkgs/tools/security/duo-unix/default.nix
new file mode 100644
index 000000000000..2cf9b92745fd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/duo-unix/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, pam, openssl, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "duo-unix";
+  version = "1.11.3";
+
+  src = fetchurl {
+    url    = "https://dl.duosecurity.com/duo_unix-${version}.tar.gz";
+    sha256 = "097i2dsnbndpnyc4nx1j76qkx1bxwwlxnzmp1h3j4raghddgiq0g";
+  };
+
+  buildInputs = [ pam openssl zlib ];
+  configureFlags =
+    [ "--with-pam=$(out)/lib/security"
+      "--prefix=$(out)"
+      "--sysconfdir=$(out)/etc/duo"
+      "--with-openssl=${openssl.dev}"
+      "--enable-lib64=no"
+    ];
+
+  meta = {
+    description = "Duo Security Unix login integration";
+    homepage    = "https://duosecurity.com";
+    license     = stdenv.lib.licenses.gpl2;
+    platforms   = stdenv.lib.platforms.unix;
+    maintainers = [ stdenv.lib.maintainers.thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ecdsautils/default.nix b/nixpkgs/pkgs/tools/security/ecdsautils/default.nix
new file mode 100644
index 000000000000..13280e3226d9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ecdsautils/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, pkgs }:
+
+stdenv.mkDerivation {
+  version = "0.4.0";
+  pname = "ecdsautils";
+
+  src = pkgs.fetchFromGitHub {
+    owner = "freifunk-gluon";
+    repo = "ecdsautils";
+    rev = "07538893fb6c2a9539678c45f9dbbf1e4f222b46";
+    sha256 = "18sr8x3qiw8s9l5pfi7r9i3ayplz4jqdml75ga9y933vj7vs0k4d";
+  };
+
+  nativeBuildInputs = with pkgs; [ cmake pkgconfig doxygen ];
+  buildInputs = with pkgs; [ libuecc  ];
+
+  meta = with stdenv.lib; {
+    description = "Tiny collection of programs used for ECDSA (keygen, sign, verify)";
+    homepage = https://github.com/tcatm/ecdsautils/;
+    license = with licenses; [ mit bsd2 ];
+    maintainers = with maintainers; [ andir ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ecryptfs/default.nix b/nixpkgs/pkgs/tools/security/ecryptfs/default.nix
new file mode 100644
index 000000000000..9fd8c3ac7a22
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ecryptfs/default.nix
@@ -0,0 +1,60 @@
+{ stdenv, fetchurl, pkgconfig, perl, utillinux, keyutils, nss, nspr, python2, pam
+, intltool, makeWrapper, coreutils, bash, gettext, cryptsetup, lvm2, rsync, which, lsof }:
+
+stdenv.mkDerivation rec {
+  pname = "ecryptfs";
+  version = "111";
+
+  src = fetchurl {
+    url = "https://launchpad.net/ecryptfs/trunk/${version}/+download/ecryptfs-utils_${version}.orig.tar.gz";
+    sha256 = "0zwq19siiwf09h7lwa7n7mgmrr8cxifp45lmwgcfr8c1gviv6b0i";
+  };
+
+  # TODO: replace wrapperDir below with from <nixos> config.security.wrapperDir;
+  wrapperDir = "/run/wrappers/bin";
+
+  postPatch = ''
+    FILES="$(grep -r '/bin/sh' src/utils -l; find src -name \*.c)"
+    for file in $FILES; do
+      substituteInPlace "$file" \
+        --replace /bin/mount ${utillinux}/bin/mount \
+        --replace /bin/umount ${utillinux}/bin/umount \
+        --replace /sbin/mount.ecryptfs_private ${wrapperDir}/mount.ecryptfs_private \
+        --replace /sbin/umount.ecryptfs_private ${wrapperDir}/umount.ecryptfs_private \
+        --replace /sbin/mount.ecryptfs $out/sbin/mount.ecryptfs \
+        --replace /sbin/umount.ecryptfs $out/sbin/umount.ecryptfs \
+        --replace /usr/bin/ecryptfs-rewrite-file $out/bin/ecryptfs-rewrite-file \
+        --replace /usr/bin/ecryptfs-mount-private $out/bin/ecryptfs-mount-private \
+        --replace /usr/bin/ecryptfs-setup-private $out/bin/ecryptfs-setup-private \
+        --replace /sbin/cryptsetup ${cryptsetup}/sbin/cryptsetup \
+        --replace /sbin/dmsetup ${lvm2}/sbin/dmsetup \
+        --replace /sbin/unix_chkpwd ${wrapperDir}/unix_chkpwd \
+        --replace /bin/bash ${bash}/bin/bash
+    done
+  '';
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ perl nss nspr python2 pam intltool makeWrapper ];
+  propagatedBuildInputs = [ coreutils gettext cryptsetup lvm2 rsync keyutils which ];
+
+  postInstall = ''
+    FILES="$(grep -r '/bin/sh' $out/bin -l)"
+    for file in $FILES; do
+      wrapProgram $file \
+        --prefix PATH ":" "${coreutils}/bin" \
+        --prefix PATH ":" "${gettext}/bin" \
+        --prefix PATH ":" "${rsync}/bin" \
+        --prefix PATH ":" "${keyutils}/bin" \
+        --prefix PATH ":" "${which}/bin" \
+        --prefix PATH ":" "${lsof}/bin" \
+        --prefix PATH ":" "$out/bin"
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Enterprise-class stacked cryptographic filesystem";
+    license     = licenses.gpl2Plus;
+    maintainers = with maintainers; [ obadz ];
+    platforms   = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ecryptfs/helper.nix b/nixpkgs/pkgs/tools/security/ecryptfs/helper.nix
new file mode 100644
index 000000000000..fcb8d091d933
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ecryptfs/helper.nix
@@ -0,0 +1,34 @@
+{ stdenv
+, fetchurl
+, makeWrapper
+, python2
+}:
+
+stdenv.mkDerivation {
+  pname   = "ecryptfs-helper";
+  version = "20160722";
+
+  src = fetchurl {
+    url    = "https://gist.githubusercontent.com/obadz/ec053fdb00dcb48441d8313169874e30/raw/4b657a4b7c3dc684e4d5e3ffaf46ced1b7675163/ecryptfs-helper.py";
+    sha256 = "0gp4m22zc80814ng80s38hp930aa8r4zqihr7jr23m0m2iq4pdpg";
+  };
+
+  phases = [ "installPhase" ];
+
+  buildInputs = [ makeWrapper ];
+
+  # Do not hardcode PATH to ${ecryptfs} as we need the script to invoke executables from /run/wrappers/bin
+  installPhase = ''
+    mkdir -p $out/bin $out/libexec
+    cp $src $out/libexec/ecryptfs-helper.py
+    makeWrapper "${python2.interpreter}" "$out/bin/ecryptfs-helper" --add-flags "$out/libexec/ecryptfs-helper.py"
+  '';
+
+  meta = with stdenv.lib; {
+    description    = "Helper script to create/mount/unemount encrypted directories using eCryptfs without needing root permissions";
+    license        = licenses.gpl2Plus;
+    maintainers    = with maintainers; [ obadz ];
+    platforms      = platforms.linux;
+    hydraPlatforms = [];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/efitools/default.nix b/nixpkgs/pkgs/tools/security/efitools/default.nix
new file mode 100644
index 000000000000..33b6c3b672da
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/efitools/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, gnu-efi, openssl, sbsigntool, perl, perlPackages,
+help2man, fetchgit }:
+stdenv.mkDerivation rec {
+  pname = "efitools";
+  version = "1.9.2";
+
+  buildInputs = [
+    gnu-efi
+    openssl
+    sbsigntool
+  ];
+
+  nativeBuildInputs = [
+    perl
+    perlPackages.FileSlurp
+    help2man
+  ];
+
+  src = fetchgit {
+    url = "git://git.kernel.org/pub/scm/linux/kernel/git/jejb/efitools.git";
+    rev = "v${version}";
+    sha256 = "0jabgl2pxvfl780yvghq131ylpf82k7banjz0ksjhlm66ik8gb1i";
+  };
+
+  postPatch = ''
+    sed -i -e 's#/usr/include/efi#${gnu-efi}/include/efi/#g' Make.rules
+    sed -i -e 's#/usr/lib64/gnuefi#${gnu-efi}/lib/#g' Make.rules
+    sed -i -e 's#$(DESTDIR)/usr#$(out)#g' Make.rules
+    substituteInPlace lib/console.c --replace "EFI_WARN_UNKOWN_GLYPH" "EFI_WARN_UNKNOWN_GLYPH"
+    patchShebangs .
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Tools for manipulating UEFI secure boot platforms";
+    homepage = "https://git.kernel.org/cgit/linux/kernel/git/jejb/efitools.git";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.grahamc ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/eid-mw/default.nix b/nixpkgs/pkgs/tools/security/eid-mw/default.nix
new file mode 100644
index 000000000000..13ab56aaa9a2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/eid-mw/default.nix
@@ -0,0 +1,88 @@
+{ stdenv, fetchFromGitHub
+, autoreconfHook, pkgconfig
+, gtk3, nssTools, pcsclite
+, libxml2, libproxy 
+, openssl, curl
+, makeWrapper
+, substituteAll }:
+
+stdenv.mkDerivation rec {
+  pname = "eid-mw";
+  version = "4.4.16";
+
+  src = fetchFromGitHub {
+    sha256 = "1q82fw63xzrnrgh1wyh457hal6vfdl6swqfq7l6kviywiwlzx7kd"; 
+    rev = "v${version}";
+    repo = "eid-mw";
+    owner = "Fedict";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig makeWrapper ];
+  buildInputs = [ gtk3 pcsclite libxml2 libproxy curl openssl ];
+  preConfigure = ''
+    mkdir openssl
+    ln -s ${openssl.out}/lib openssl
+    ln -s ${openssl.bin}/bin openssl
+    ln -s ${openssl.dev}/include openssl
+    export SSL_PREFIX=$(realpath openssl)
+    '';
+
+  postPatch = ''
+    sed 's@m4_esyscmd_s(.*,@[${version}],@' -i configure.ac
+  '';
+
+  configureFlags = [ "--enable-dialogs=yes" ];
+
+  postInstall =
+  let
+    eid-nssdb-in = substituteAll {
+      inherit (stdenv) shell;
+      isExecutable = true;
+      src = ./eid-nssdb.in;
+    };
+  in
+  ''
+    install -D ${eid-nssdb-in} $out/bin/eid-nssdb
+    substituteInPlace $out/bin/eid-nssdb \
+      --replace "modutil" "${nssTools}/bin/modutil"
+
+    rm $out/bin/about-eid-mw
+    wrapProgram $out/bin/eid-viewer --prefix XDG_DATA_DIRS : "$out/share/gsettings-schemas/$name" 
+  '';
+
+  enableParallelBuilding = true;
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    description = "Belgian electronic identity card (eID) middleware";
+    homepage = http://eid.belgium.be/en/using_your_eid/installing_the_eid_software/linux/;
+    license = licenses.lgpl3;
+    longDescription = ''
+      Allows user authentication and digital signatures with Belgian ID cards.
+      Also requires a running pcscd service and compatible card reader. 
+
+      eid-viewer is also installed.
+
+      **TO FIX:** 
+      The procedure below did not work for me, I had to install the .so directly in firefox as instructed at
+      https://eid.belgium.be/en/log-eid#7507
+      and specify
+      /run/current-system/sw/lib/libbeidpkcs11.so
+      as the path to the module.
+
+      This package only installs the libraries. To use eIDs in Firefox or
+      Chromium, the eID Belgium add-on must be installed.
+      This package only installs the libraries. To use eIDs in NSS-compatible
+      browsers like Chrom{e,ium} or Firefox, each user must first execute:
+        ~$ eid-nssdb add
+      (Running the script once as root with the --system option enables eID
+      support for all users, but will *not* work when using Chrom{e,ium}!)
+      Before uninstalling this package, it is a very good idea to run
+        ~$ eid-nssdb [--system] remove
+      and remove all ~/.pki and/or /etc/pki directories no longer needed.
+    '';
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ bfortz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/eid-mw/eid-nssdb.in b/nixpkgs/pkgs/tools/security/eid-mw/eid-nssdb.in
new file mode 100644
index 000000000000..636b4c1ee118
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/eid-mw/eid-nssdb.in
@@ -0,0 +1,83 @@
+#!@shell@
+
+rootdb="/etc/pki/nssdb"
+userdb="$HOME/.pki/nssdb"
+dbentry="Belgium eID"
+libfile="/run/current-system/sw/lib/libbeidpkcs11.so"
+
+dbdir="$userdb"
+
+while true; do
+	case "$1" in
+	--help|"")	cat << EOF
+(Un)register $dbentry with NSS-compatible browsers.
+
+Usage: `basename "$0"` [OPTION] ACTION [LIBRARY]
+
+Options:
+  --db PATH	use custom NSS database directory PATH
+  --user	use user NSS database $userdb (default)
+  --system	use global NSS database $rootdb
+  --help	show this message
+
+Actions:
+  add		add $dbentry to NSS database
+  remove	remove $dbentry from NSS database
+  show		show $dbentry NSS database entry
+
+Default arguments if unspecified:
+  LIBRARY	$libfile
+EOF
+		exit ;;
+	--db)	dbdir="$2"
+		shift 2 ;;
+	--user)	dbdir="$userdb"
+		shift ;;
+	--system)
+		dbdir="$rootdb"
+		shift ;;
+	-*)	echo "$0: unknown option: '$1'" >&2
+		echo "Try --help for usage information."
+		exit 1 ;;
+	*)	break ;;
+	esac
+done
+
+if [ "$2" ]; then
+	libfile="$2"
+	if ! [ -f "$libfile" ]; then
+		echo "$0: error: '$libfile' not found" >&2
+		exit 1
+	fi
+fi
+
+mkdir -p "$dbdir"
+if ! [ -d "$dbdir" ]; then
+	echo "$0: error: '$dbdir' must be a writable directory" >&2
+	exit 1
+fi
+
+dbdir="sql:$dbdir"
+
+echo "NSS database: $dbdir"
+echo "BEID library: $libfile"
+
+case "$1" in
+add)	echo "Adding $dbentry to database:"
+	modutil -dbdir "$dbdir" -add "$dbentry" -libfile "$libfile" ||
+		echo "Tip: try removing the module before adding it again." ;;
+remove) echo "Removing $dbentry from database:"
+	modutil -dbdir "$dbdir" -delete "$dbentry" ;;
+show)	echo "Displaying $dbentry database entry, if any:"
+	echo "Note: this may fail if you don't have the correct permissions." ;;
+'')	exec "$0" --help ;;
+*)	echo "$0: unknown action: '$1'" >&2
+	echo "Try --help for usage information."
+	exit 1 ;;
+esac
+
+ret=$?
+
+modutil -dbdir "$dbdir" -list "$dbentry" 2>/dev/null
+
+exit $ret
diff --git a/nixpkgs/pkgs/tools/security/enchive/default.nix b/nixpkgs/pkgs/tools/security/enchive/default.nix
new file mode 100644
index 000000000000..7e45ab76ed0b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/enchive/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "enchive";
+  version = "3.5";
+  src = fetchFromGitHub {
+    owner = "skeeto";
+    repo = "enchive";
+    rev = version;
+    sha256 = "0fdrfc5l42lj2bvmv9dmkmhmm7qiszwk7cmdvnqad3fs7652g0qa";
+  };
+
+  makeFlags = ["PREFIX=$(out)"];
+
+  postInstall = ''
+    mkdir -p $out/share/emacs/site-lisp/
+    cp -v "$src/enchive-mode.el" "$out/share/emacs/site-lisp/"
+  '';
+
+  meta = {
+    description = "Encrypted personal archives";
+    homepage = https://github.com/skeeto/enchive;
+    license = stdenv.lib.licenses.unlicense;
+    platforms = stdenv.lib.platforms.unix;
+    maintainers = [ stdenv.lib.maintainers.nico202 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/encryptr/default.nix b/nixpkgs/pkgs/tools/security/encryptr/default.nix
new file mode 100644
index 000000000000..01855ee3e5b4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/encryptr/default.nix
@@ -0,0 +1,57 @@
+{ stdenv, fetchurl, glib, nss, nspr, gconf, fontconfig, freetype
+, pango , cairo, libX11 , libXi, libXcursor, libXext, libXfixes
+, libXrender, libXcomposite , alsaLib, libXdamage, libXtst, libXrandr
+, expat, libcap, systemd , dbus, gtk2 , gdk-pixbuf, libnotify
+}:
+
+let
+  arch = if stdenv.hostPlatform.system == "x86_64-linux" then "amd"
+    else if stdenv.hostPlatform.system == "i686-linux" then "i386"
+    else throw "Encryptr for ${stdenv.hostPlatform.system} not supported!";
+
+  sha256 = if stdenv.hostPlatform.system == "x86_64-linux" then "1j3g467g7ar86hpnh6q9mf7mh2h4ia94mwhk1283zh739s2g53q2"
+    else if stdenv.hostPlatform.system == "i686-linux" then "02j9hg9b1jlv25q1sjfhv8d46mii33f94dj0ccn83z9z18q4y2cm"
+    else throw "Encryptr for ${stdenv.hostPlatform.system} not supported!";
+
+in stdenv.mkDerivation rec {
+  pname = "encryptr";
+  version = "2.0.0";
+
+  src = fetchurl {
+    url = "https://spideroak.com/dist/encryptr/signed/linux/targz/encryptr-${version}_${arch}.tar.gz";
+    inherit sha256;
+  };
+
+  dontBuild = true;
+
+  rpath = stdenv.lib.makeLibraryPath [
+    glib nss nspr gconf fontconfig freetype pango cairo libX11 libXi
+    libXcursor libXext libXfixes libXrender libXcomposite alsaLib
+    libXdamage libXtst libXrandr expat libcap dbus gtk2 gdk-pixbuf
+    libnotify stdenv.cc.cc
+  ];
+
+  installPhase = ''
+    mkdir -pv $out/bin $out/lib
+    cp -v {encryptr-bin,icudtl.dat,nw.pak} $out/bin
+    mv -v $out/bin/encryptr{-bin,}
+    cp -v lib* $out/lib
+    ln -sv ${systemd.lib}/lib/libudev.so.1 $out/lib/libudev.so.0
+
+    patchelf --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
+             --set-rpath $out/lib:${rpath} \
+             $out/bin/encryptr
+  '';
+
+  # If stripping, node-webkit does not find
+  # its application and shows a generic page
+  dontStrip = true;
+
+  meta = with stdenv.lib; {
+    homepage = https://spideroak.com/solutions/encryptr;
+    description = "Free, private and secure password management tool and e-wallet";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ guillaumekoenig ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/enpass/data.json b/nixpkgs/pkgs/tools/security/enpass/data.json
new file mode 100644
index 000000000000..a4a3b919e648
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/enpass/data.json
@@ -0,0 +1,12 @@
+{
+  "amd64": {
+    "path": "pool/main/e/enpass/enpass_6.0.1.239_amd64.deb", 
+    "sha256": "408a2bb318564307607f13b52fec7667f425c01ac40cbe345ebfa191ab1479ba", 
+    "version": "6.0.1.239"
+  }, 
+  "i386": {
+    "path": "pool/main/e/enpass/enpass_5.6.9_i386.deb", 
+    "sha256": "3f699ac3e2ecfd4afee1505d8d364d4f6b6b94c55ba989d0a80bd678ff66cb2c", 
+    "version": "5.6.9"
+  }
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/security/enpass/default.nix b/nixpkgs/pkgs/tools/security/enpass/default.nix
new file mode 100644
index 000000000000..6e61f0541225
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/enpass/default.nix
@@ -0,0 +1,94 @@
+{ stdenv, fetchurl, dpkg, xorg
+, glib, libGLU, libGL, libpulseaudio, zlib, dbus, fontconfig, freetype
+, gtk3, pango
+, makeWrapper , python2Packages, lib
+, lsof, curl, libuuid, cups, mesa
+}:
+
+let
+  all_data = builtins.fromJSON (builtins.readFile ./data.json);
+  system_map = {
+    # i686-linux = "i386"; Uncomment if enpass 6 becomes available on i386
+    x86_64-linux = "amd64";
+  };
+
+  data = all_data.${system_map.${stdenv.hostPlatform.system} or (throw "Unsupported platform")};
+
+  baseUrl = http://repo.sinew.in;
+
+  # used of both wrappers and libpath
+  libPath = lib.makeLibraryPath (with xorg; [
+    mesa.drivers
+    libGLU libGL
+    fontconfig
+    freetype
+    libpulseaudio
+    zlib
+    dbus
+    libX11
+    libXi
+    libSM
+    libICE
+    libXrender
+    libXScrnSaver
+    libxcb
+    glib
+    gtk3
+    pango
+    curl
+    libuuid
+    cups
+  ]);
+  package = stdenv.mkDerivation {
+
+    inherit (data) version;
+    pname = "enpass";
+
+    src = fetchurl {
+      inherit (data) sha256;
+      url = "${baseUrl}/${data.path}";
+    };
+
+    meta = {
+      description = "a well known password manager";
+      homepage = https://www.enpass.io/;
+      license = lib.licenses.unfree;
+      platforms = [ "x86_64-linux" "i686-linux"];
+    };
+
+    buildInputs = [makeWrapper dpkg];
+    phases = [ "unpackPhase" "installPhase" ];
+
+    unpackPhase = "dpkg -X $src .";
+    installPhase=''
+      mkdir -p $out/bin
+      cp -r opt/enpass/*  $out/bin
+      cp -r usr/* $out
+
+      sed \
+        -i s@/opt/enpass/Enpass@$out/bin/Enpass@ \
+        $out/share/applications/enpass.desktop
+
+      for i in $out/bin/{Enpass,importer_enpass}; do
+        patchelf --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) $i
+      done
+
+      # lsof must be in PATH for proper operation
+      wrapProgram $out/bin/Enpass \
+        --set LD_LIBRARY_PATH "${libPath}" \
+        --prefix PATH : ${lsof}/bin
+    '';
+  };
+  updater = {
+    update = stdenv.mkDerivation {
+      name = "enpass-update-script";
+      SCRIPT =./update_script.py;
+
+      buildInputs = with python2Packages; [python requests pathlib2 six attrs ];
+      shellHook = ''
+        exec python $SCRIPT --target pkgs/tools/security/enpass/data.json --repo ${baseUrl}
+      '';
+
+    };
+  };
+in (package // {refresh = updater;})
diff --git a/nixpkgs/pkgs/tools/security/enpass/update_script.py b/nixpkgs/pkgs/tools/security/enpass/update_script.py
new file mode 100644
index 000000000000..f8ec715cb5e4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/enpass/update_script.py
@@ -0,0 +1,95 @@
+from __future__ import print_function
+
+
+import argparse
+import bz2
+import email
+import json
+import logging
+
+from itertools import product
+from operator import itemgetter
+
+import attr
+import pkg_resources
+
+from pathlib2 import Path
+from requests import Session
+from six.moves.urllib_parse import urljoin
+
+
+@attr.s
+class ReleaseElement(object):
+    sha256 = attr.ib(repr=False)
+    size = attr.ib(convert=int)
+    path = attr.ib()
+
+log = logging.getLogger('enpass.updater')
+
+
+parser = argparse.ArgumentParser()
+parser.add_argument('--repo')
+parser.add_argument('--target', type=Path)
+
+
+session = Session()
+
+
+def parse_bz2_msg(msg):
+    msg = bz2.decompress(msg)
+    if '\n\n' in msg:
+        parts = msg.split('\n\n')
+        return list(map(email.message_from_string, parts))
+    return email.message_from_string(msg)
+
+
+def fetch_meta(repo, name, parse=email.message_from_string, split=False):
+    url = urljoin(repo, 'dists/stable', name)
+    response = session.get("{repo}/dists/stable/{name}".format(**locals()))
+    return parse(response.content)
+
+
+def fetch_filehashes(repo, path):
+    meta = fetch_meta(repo, path, parse=parse_bz2_msg)
+    for item in meta:
+        yield {
+            'version': pkg_resources.parse_version(str(item['Version'])),
+            'path': item['Filename'],
+            'sha256': item['sha256'],
+        }
+
+
+def fetch_archs(repo):
+    m = fetch_meta(repo, 'Release')
+
+    architectures = m['Architectures'].split()
+    elements = [ReleaseElement(*x.split()) for x in m['SHA256'].splitlines()]
+    elements = [x for x in elements if x.path.endswith('bz2')]
+
+    for arch, elem in product(architectures, elements):
+        if arch in elem.path:
+            yield arch, max(fetch_filehashes(repo, elem.path),
+                            key=itemgetter('version'))
+
+
+class OurVersionEncoder(json.JSONEncoder):
+    def default(self, obj):
+        # the other way around to avoid issues with
+        # newer setuptools having strict/legacy versions
+        if not isinstance(obj, (dict, str)):
+            return str(obj)
+        return json.JSONEncoder.default(self, obj)
+
+
+def main(repo, target):
+    logging.basicConfig(level=logging.DEBUG)
+    with target.open(mode='wb') as fp:
+        json.dump(
+            dict(fetch_archs(repo)), fp,
+            cls=OurVersionEncoder,
+            indent=2,
+            sort_keys=True)
+
+
+opts = parser.parse_args()
+main(opts.repo, opts.target)
diff --git a/nixpkgs/pkgs/tools/security/eschalot/default.nix b/nixpkgs/pkgs/tools/security/eschalot/default.nix
new file mode 100644
index 000000000000..28df3a284427
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/eschalot/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "eschalot";
+  version = "2018-01-19";
+
+  src = fetchFromGitHub {
+    owner = "ReclaimYourPrivacy";
+    repo = pname;
+    rev = "56a967b62631cfd3c7ef68541263dbd54cbbc2c4";
+    sha256 = "1iw1jrydasm9dmgpcdimd8dy9n281ys9krvf3fd3dlymkgsj604d";
+  };
+
+  buildInputs = [ openssl ];
+
+  installPhase = ''
+    install -D -t $out/bin eschalot worgen
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Tor hidden service name generator";
+    homepage = src.meta.homepage;
+    license = licenses.isc;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/fail2ban/default.nix b/nixpkgs/pkgs/tools/security/fail2ban/default.nix
new file mode 100644
index 000000000000..4ec84353e4ee
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/fail2ban/default.nix
@@ -0,0 +1,59 @@
+{ stdenv, fetchFromGitHub, python3, gamin }:
+
+let version = "0.10.5"; in
+
+python3.pkgs.buildPythonApplication {
+  pname = "fail2ban";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner  = "fail2ban";
+    repo   = "fail2ban";
+    rev    = version;
+    sha256 = "1s8g46vkwhqnagj69v4wvcasypzkmq7awhfbxahffrypcpad5ach";
+  };
+
+  pythonPath = with python3.pkgs;
+    stdenv.lib.optionals stdenv.isLinux [
+      systemd
+    ];
+
+  preConfigure = ''
+    for i in config/action.d/sendmail*.conf; do
+      substituteInPlace $i \
+        --replace /usr/sbin/sendmail sendmail \
+        --replace /usr/bin/whois whois
+    done
+
+    substituteInPlace config/filter.d/dovecot.conf \
+      --replace dovecot.service dovecot2.service
+  '';
+
+  doCheck = false;
+
+  preInstall = ''
+    substituteInPlace setup.py --replace /usr/share/doc/ share/doc/
+
+    # see https://github.com/NixOS/nixpkgs/issues/4968
+    ${python3.interpreter} setup.py install_data --install-dir=$out --root=$out
+  '';
+
+  postPatch = ''
+    ${stdenv.shell} ./fail2ban-2to3
+  '';
+
+  postInstall = let
+    sitePackages = "$out/${python3.sitePackages}";
+  in ''
+    # see https://github.com/NixOS/nixpkgs/issues/4968
+    rm -rf ${sitePackages}/etc ${sitePackages}/usr ${sitePackages}/var;
+  '';
+
+  meta = with stdenv.lib; {
+    homepage    = http://www.fail2ban.org/;
+    description = "A program that scans log files for repeated failing login attempts and bans IP addresses";
+    license     = licenses.gpl2Plus;
+    maintainers = with maintainers; [ eelco lovek323 fpletz ];
+    platforms   = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/fcrackzip/default.nix b/nixpkgs/pkgs/tools/security/fcrackzip/default.nix
new file mode 100644
index 000000000000..d923e81ae826
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/fcrackzip/default.nix
@@ -0,0 +1,26 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  pname = "fcrackzip";
+  version = "1.0";
+  src = fetchurl {
+    url = "http://oldhome.schmorp.de/marc/data/${pname}-${version}.tar.gz";
+    sha256 = "0l1qsk949vnz18k4vjf3ppq8p497966x4c7f2yx18x8pk35whn2a";
+  };
+
+  # 'fcrackzip --use-unzip' cannot deal with file names containing a single quote
+  # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=430387
+  patches = [ ./fcrackzip_forkexec.patch ];
+
+  # Do not clash with unizp/zipinfo
+  postInstall = "mv $out/bin/zipinfo $out/bin/fcrackzip-zipinfo";
+
+  meta = with stdenv.lib; {
+    description = "zip password cracker, similar to fzc, zipcrack and others";
+    homepage = http://oldhome.schmorp.de/marc/fcrackzip.html;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ nico202 ];
+    platforms = with platforms; unix;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/security/fcrackzip/fcrackzip_forkexec.patch b/nixpkgs/pkgs/tools/security/fcrackzip/fcrackzip_forkexec.patch
new file mode 100644
index 000000000000..8e508ec1f596
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/fcrackzip/fcrackzip_forkexec.patch
@@ -0,0 +1,105 @@
+--- origin/main.c	2016-12-12 12:53:38.344285376 +0100
++++ main.c	2016-12-12 13:01:41.134548824 +0100
+@@ -26,11 +26,13 @@
+ #include <string.h>
+ 
+ #ifdef USE_UNIX_REDIRECTION
+-#define DEVNULL ">/dev/null 2>&1"
++#define DEVNULL "/dev/null"
+ #else
+-#define DEVNULL ">NUL 2>&1"
++#define DEVNULL "NUL"
+ #endif
+ 
++#include <errno.h>
++
+ #include "crack.h"
+ 
+ int use_unzip;
+@@ -47,21 +49,77 @@
+ int REGPARAM
+ check_unzip (const char *pw)
+ {
+-  char buff[1024];
+-  int status;
++pid_t cpid;
++cpid = fork ();
++if (cpid == -1)
++  {
++    perror ("fork");
++    exit (EXIT_FAILURE);
++  }
++
++if (cpid == 0)
++  {
++    // Redirect STDERR/STDOUT to /dev/null
++    int oldfd_stderr, oldfd_stdout;
++    oldfd_stdout = dup (fileno (stdout));
++    if (oldfd_stdout == -1)
++      {
++        perror ("dup for stdout");
++        _exit (127);
++      }
++    oldfd_stderr = dup (fileno (stderr));
++    if (oldfd_stderr == -1)
++      {
++        perror ("dup for stderr");
++        _exit (127);
++      }
++    if (freopen (DEVNULL, "w", stdout) == NULL)
++      {
++        perror ("freopen " DEVNULL " for stdout");
++        _exit (127);
++      }
++    if (freopen (DEVNULL, "w", stderr) == NULL)
++      {
++        perror ("freopen " DEVNULL " for stderr");
++        _exit (127);
++      }
++    execlp ("unzip", "unzip", "-qqtP", pw, file_path[0], NULL);
++
++    // When execlp failed.
++    // Restores the stderr/stdout redirection to print an error.
++    int errno_saved = errno;
++    dup2 (oldfd_stderr, fileno (stderr));
++    dup2 (oldfd_stdout, fileno (stdout));
++    close (oldfd_stderr);
++    close (oldfd_stdout);
++    errno = errno_saved;
++    perror ("execlp for unzip");
++    _exit (127); // Returns 127 on error as system(3) does
++  }
+ 
+-  sprintf (buff, "unzip -qqtP \"%s\" %s " DEVNULL, pw, file_path[0]);
+-  status = system (buff);
+-
+-#undef REDIR
++  int status;
+ 
+-  if (status == EXIT_SUCCESS)
++  if (waitpid (cpid, &status, 0) == -1)
+     {
+-      printf("\n\nPASSWORD FOUND!!!!: pw == %s\n", pw);
++    perror ("waitpid");
++    exit (EXIT_FAILURE);
++  }
++
++  // The child process does not terminated normally, OR returns the exit status 127.
++  if (!WIFEXITED (status)
++    || (WIFEXITED (status) && (WEXITSTATUS (status) == 127)))
++  {
++    fprintf (stderr, "Executing unzip failed.\n");
++    exit (EXIT_FAILURE);
++  }
++// unzip exited normally with the exit status 0 then...
++ if (WIFEXITED (status) && (WEXITSTATUS (status) == EXIT_SUCCESS))
++  {
++    printf ("\n\nPASSWORD FOUND!!!!: pw == %s\n", pw);
+       exit (EXIT_SUCCESS);
+     }
+ 
+-  return !status;
++  return 0;
+ }
+ 
+ /* misc. callbacks.  */
diff --git a/nixpkgs/pkgs/tools/security/fido2luks/default.nix b/nixpkgs/pkgs/tools/security/fido2luks/default.nix
new file mode 100644
index 000000000000..0bb5a91a81a7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/fido2luks/default.nix
@@ -0,0 +1,32 @@
+{ stdenv
+, rustPlatform
+, fetchFromGitHub
+, cryptsetup
+, pkg-config
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fido2luks";
+  version = "0.2.2";
+
+  src = fetchFromGitHub {
+    owner = "shimunn";
+    repo = pname;
+    rev = version;
+    sha256 = "018qzbgmgm0f0d0c7i54nqqjbr4k5mzy1xfavi6hpifjll971wci";
+  };
+
+  buildInputs = [ cryptsetup ];
+  nativeBuildInputs = [ pkg-config ];
+
+  cargoSha256 = "1kf757wxxk5h8dfbz588qw1pnyjbg5qzr7rz14i7x8rhmn5xwb74";
+  verifyCargoDeps = true;
+
+  meta = with stdenv.lib; {
+    description = "Decrypt your LUKS partition using a FIDO2 compatible authenticator";
+    homepage = "https://github.com/shimunn/fido2luks";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ prusnak mmahut ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/fierce/default.nix b/nixpkgs/pkgs/tools/security/fierce/default.nix
new file mode 100644
index 000000000000..5d12a0008158
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/fierce/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchFromGitHub, python3 }:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "fierce";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "mschwager";
+    repo = pname;
+    rev = version;
+    sha256 = "11yaz8ap9swx95j3wpqh0b6jhw6spqgfnsyn1liw9zqi4jwgiax7";
+  };
+
+  propagatedBuildInputs = [ python3.pkgs.dns ];
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/mschwager/fierce";
+    description = "DNS reconnaissance tool for locating non-contiguous IP space";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ c0bw3b ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/fpm2/default.nix b/nixpkgs/pkgs/tools/security/fpm2/default.nix
new file mode 100644
index 000000000000..b6669358f7f9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/fpm2/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, pkgconfig, gnupg, gtk2
+, libxml2, intltool
+}:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  pname = "fpm2";
+  version = "0.79";
+
+  src = fetchurl {
+    url = "https://als.regnet.cz/fpm2/download/fpm2-${version}.tar.bz2";
+    sha256 = "d55e9ce6be38a44fc1053d82db2d117cf3991a51898bd86d7913bae769f04da7";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ gnupg gtk2 libxml2 intltool ];
+
+  meta = {
+    description = "FPM2 is GTK2 port from Figaro's Password Manager originally developed by John Conneely, with some new enhancements.";
+    homepage    = https://als.regnet.cz/fpm2/;
+    license     = licenses.gpl2;
+    platforms   = platforms.linux;
+    maintainers = with maintainers; [ hce ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/fprintd/default.nix b/nixpkgs/pkgs/tools/security/fprintd/default.nix
new file mode 100644
index 000000000000..13e6c0be391a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/fprintd/default.nix
@@ -0,0 +1,64 @@
+{ stdenv
+, fetchurl
+, fetchpatch
+, pkgconfig
+, intltool
+, libfprint
+, glib
+, dbus-glib
+, polkit
+, nss
+, pam
+, systemd
+, autoreconfHook
+, gtk-doc
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fprintd";
+  version = "0.9.0";
+
+  src = fetchurl {
+    url = "https://gitlab.freedesktop.org/libfprint/fprintd/uploads/9dec4b63d1f00e637070be1477ce63c0/fprintd-${version}.tar.xz";
+    sha256 = "182gcnwb6zjwmk0dn562rjmpbk7ac7dhipbfdhfic2sn1jzis49p";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://gitlab.freedesktop.org/libfprint/fprintd/merge_requests/16.patch";
+      sha256 = "1y39zsmxjll9hip8464qwhq5qg06c13pnafyafgxdph75lvhdll7";
+    })
+  ];
+
+  nativeBuildInputs = [
+    intltool
+    pkgconfig
+    autoreconfHook # Drop with above patch
+    gtk-doc # Drop with above patch
+  ];
+
+  buildInputs = [
+    glib
+    dbus-glib
+    polkit
+    nss
+    pam
+    systemd
+    libfprint
+  ];
+
+  configureFlags = [
+    # is hardcoded to /var/lib/fprint, this is for the StateDirectory install target
+    "--localstatedir=${placeholder "out"}/var"
+    "--sysconfdir=${placeholder "out"}/etc"
+    "--with-systemdsystemunitdir=${placeholder "out"}/lib/systemd/system"
+  ];
+
+  meta = with stdenv.lib; {
+    homepage = https://fprint.freedesktop.org/;
+    description = "D-Bus daemon that offers libfprint functionality over the D-Bus interprocess communication bus";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/fprot/default.nix b/nixpkgs/pkgs/tools/security/fprot/default.nix
new file mode 100644
index 000000000000..3fff99a6ce10
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/fprot/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation {
+
+  pname = "f-prot";
+  version = "6.2.1";
+
+  src = fetchurl {
+    url = http://files.f-prot.com/files/unix-trial/fp-Linux.x86.32-ws.tar.gz;
+    sha256 = "0qlsrkanf0inplwv1i6hqbimdg91syf5ggd1vahsm9lhivmnr0v5";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp fpscan $out/bin
+
+    mkdir -p $out/opt/f-prot
+    cp fpupdate $out/opt/f-prot
+    cp product.data.default $out/opt/f-prot/product.data
+    cp license.key $out/opt/f-prot/
+    cp f-prot.conf.default $out/opt/f-prot/f-prot.conf
+    ln -s $out/opt/f-prot/fpupdate $out/bin/fpupdate
+
+    patchelf --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/opt/f-prot/fpupdate
+
+    mkdir -p $out/share/man/
+    mkdir -p $out/share/man/man1
+    cp doc/man/fpscan.1 $out/share/man/man1
+    mkdir -p $out/share/man/man5
+    cp doc/man/f-prot.conf.5 $out/share/man/man5
+    mkdir -p $out/share/man/man8
+    cp doc/man/fpupdate.8 $out/share/man/man8
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://www.f-prot.com;
+    description = "A popular proprietary antivirus program";
+    license = licenses.unfree;
+    maintainers = [ maintainers.phreedom ];
+    platforms = platforms.linux;
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/security/fwknop/default.nix b/nixpkgs/pkgs/tools/security/fwknop/default.nix
new file mode 100644
index 000000000000..a9f69c8b96e1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/fwknop/default.nix
@@ -0,0 +1,62 @@
+{ stdenv, fetchFromGitHub, autoreconfHook
+, libpcap, texinfo
+, iptables
+, gnupgSupport ? true, gnupg, gpgme # Increases dependencies!
+, wgetSupport ? true, wget
+, buildServer ? true
+, buildClient ? true }:
+
+stdenv.mkDerivation rec {
+  pname = "fwknop";
+  version = "2.6.10";
+
+  src = fetchFromGitHub {
+    owner = "mrash";
+    repo = pname;
+    rev = version;
+    sha256 = "05kvqhmxj9p2y835w75f3jvhr38bb96cd58mvfd7xil9dhmhn9ra";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ libpcap texinfo ]
+    ++ stdenv.lib.optionals gnupgSupport [ gnupg gpgme.dev ]
+    ++ stdenv.lib.optionals wgetSupport [ wget ];
+
+  configureFlags = [
+    "--sysconfdir=/etc"
+    "--localstatedir=/run"
+    "--with-iptables=${iptables}/sbin/iptables"
+    (stdenv.lib.enableFeature buildServer "server")
+    (stdenv.lib.enableFeature buildClient "client")
+    (stdenv.lib.withFeatureAs wgetSupport "wget" "${wget}/bin/wget")
+  ] ++ stdenv.lib.optionalString gnupgSupport [
+    "--with-gpgme"
+    "--with-gpgme-prefix=${gpgme.dev}"
+    "--with-gpg=${gnupg}"
+  ];
+
+  # Temporary hack to copy the example configuration files into the nix-store,
+  # this'll probably be helpful until there's a NixOS module for that (feel free
+  # to ping me (@primeos) if you want to help).
+  preInstall = ''
+    substituteInPlace Makefile --replace\
+      "sysconfdir = /etc"\
+      "sysconfdir = $out/etc"
+    substituteInPlace server/Makefile --replace\
+      "wknopddir = /etc/fwknop"\
+      "wknopddir = $out/etc/fwknop"
+  '';
+
+  meta = with stdenv.lib; {
+    description =
+      "Single Packet Authorization (and Port Knocking) server/client";
+    longDescription = ''
+      fwknop stands for the "FireWall KNock OPerator", and implements an
+      authorization scheme called Single Packet Authorization (SPA).
+    '';
+    homepage = https://www.cipherdyne.org/fwknop/;
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ primeos ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gen-oath-safe/default.nix b/nixpkgs/pkgs/tools/security/gen-oath-safe/default.nix
new file mode 100644
index 000000000000..89900d27bd27
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gen-oath-safe/default.nix
@@ -0,0 +1,42 @@
+{ coreutils, fetchFromGitHub, libcaca, makeWrapper, python, openssl, qrencode, stdenv, yubikey-manager }:
+
+stdenv.mkDerivation rec {
+  pname = "gen-oath-safe";
+  version = "0.11.0";
+  src = fetchFromGitHub {
+    owner = "mcepl";
+    repo = "gen-oath-safe";
+    rev = version;
+    sha256 = "1914z0jgj7lni0nf3hslkjgkv87mhxdr92cmhmbzhpjgjgr23ydp";
+  };
+
+  buildInputs = [ makeWrapper ];
+
+  buildPhase = ":";
+
+  installPhase =
+    let
+      path = stdenv.lib.makeBinPath [
+        coreutils
+        libcaca.bin
+        openssl.bin
+        python
+        qrencode
+        yubikey-manager
+      ];
+    in
+    ''
+      mkdir -p $out/bin
+      cp gen-oath-safe $out/bin/
+      wrapProgram $out/bin/gen-oath-safe \
+        --prefix PATH : ${path}
+    '';
+  meta = with stdenv.lib; {
+    homepage = https://github.com/mcepl/gen-oath-safe;
+    description = "Script for generating HOTP/TOTP keys (and QR code)";
+    platforms =  platforms.unix;
+    license = licenses.mit;
+    maintainers = [ maintainers.makefu ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/security/gencfsm/default.nix b/nixpkgs/pkgs/tools/security/gencfsm/default.nix
new file mode 100644
index 000000000000..63d1bab89d7f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gencfsm/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, autoconf, automake, intltool, libtool, pkgconfig, encfs
+, glib , gnome3, gtk3, libgnome-keyring, vala, wrapGAppsHook, xorg, gobject-introspection
+}:
+
+stdenv.mkDerivation rec {
+  version = "1.8.19";
+  pname = "gnome-encfs-manager";
+
+  src = fetchurl {
+    url = "https://launchpad.net/gencfsm/trunk/1.8/+download/gnome-encfs-manager_${version}.tar.xz";
+    sha256 = "1h6x8dyp1fvxvr8fwki98ppf4sa20qf7g59jc9797b2vrgm60h1i";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ autoconf automake intltool libtool vala glib encfs
+    gtk3 libgnome-keyring gnome3.libgee xorg.libSM xorg.libICE
+    wrapGAppsHook gobject-introspection  ];
+
+  patches = [ ./makefile-mkdir.patch ];
+
+  preConfigure = ''
+    ./autogen.sh
+  '';
+
+  configureFlags = [ "--disable-appindicator" ];
+
+  preFixup = ''gappsWrapperArgs+=(--prefix PATH : ${encfs}/bin)'';
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    homepage = http://www.libertyzero.com/GEncfsM/;
+    downloadPage = https://launchpad.net/gencfsm/;
+    description = "EncFS manager and mounter with GNOME3 integration";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.spacefrogg ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gencfsm/makefile-mkdir.patch b/nixpkgs/pkgs/tools/security/gencfsm/makefile-mkdir.patch
new file mode 100644
index 000000000000..49c7b0b4d9d1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gencfsm/makefile-mkdir.patch
@@ -0,0 +1,14 @@
+--- a/dist/Makefile.am
++++ b/dist/Makefile.am
+@@ -10,9 +10,9 @@ install-data-hook:
+ 	chmod 0755 $(shell find $(dist) -type d)
+ 	chmod 0644 $(shell find $(dist) -type f)
+ 	chmod 0755 $(shell find "scripts" -type f)
+-	test -z "$(DESTDIR)$(datadir)/dbus-1/services/" || /bin/mkdir -p "$(DESTDIR)$(datadir)/dbus-1/services/"
++	test -z "$(DESTDIR)$(datadir)/dbus-1/services/" || $(MKDIR_P) "$(DESTDIR)$(datadir)/dbus-1/services/"
+ 	cp "extra/com.libertyzero.gnome-encfs-manager.service" "$(DESTDIR)$(datadir)/dbus-1/services/"
+-	test -z "$(gencfsmdir)" || /bin/mkdir -p "$(gencfsmdir)"
++	test -z "$(gencfsmdir)" || $(MKDIR_P) "$(gencfsmdir)"
+ 	cp --parent -rf $(dist) "$(gencfsmdir)"
+ 	cp --parent -rf $(icons) $(DESTDIR)$(datadir)
+ 
diff --git a/nixpkgs/pkgs/tools/security/ghidra/default.nix b/nixpkgs/pkgs/tools/security/ghidra/default.nix
new file mode 100644
index 000000000000..b3773725e6e9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ghidra/default.nix
@@ -0,0 +1,69 @@
+{ stdenv, fetchurl, unzip, lib, makeWrapper, autoPatchelfHook
+, openjdk11, pam, makeDesktopItem, icoutils
+}: let
+
+  pkg_path = "$out/lib/ghidra";
+
+  desktopItem = makeDesktopItem {
+    name = "ghidra";
+    exec = "ghidra";
+    icon = "ghidra";
+    desktopName = "Ghidra";
+    genericName = "Ghidra Software Reverse Engineering Suite";
+    categories = "Development;";
+  };
+
+
+in stdenv.mkDerivation {
+
+  name = "ghidra-9.1";
+
+  src = fetchurl {
+    url = https://ghidra-sre.org/ghidra_9.1_PUBLIC_20191023.zip;
+    sha256 = "0pl7s59008gvgwz4mxp7rz3xr3vaa12a6s5zvx2yr9jxx3gk1l99";
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+    autoPatchelfHook
+    unzip
+  ];
+
+  buildInputs = [
+    stdenv.cc.cc.lib
+    pam
+    icoutils
+  ];
+
+  dontStrip = true;
+
+  installPhase = ''
+    mkdir -p "${pkg_path}"
+    mkdir -p "${pkg_path}" "$out/share/applications"
+    cp -a * "${pkg_path}"
+    ln -s ${desktopItem}/share/applications/* $out/share/applications
+    
+    icotool -x "${pkg_path}/support/ghidra.ico"
+    rm ghidra_4_40x40x32.png
+    for f in ghidra_*.png; do
+      res=$(basename "$f" ".png" | cut -d"_" -f3 | cut -d"x" -f1-2)
+      mkdir -pv "$out/share/icons/hicolor/$res/apps"
+      mv "$f" "$out/share/icons/hicolor/$res/apps/ghidra.png"
+    done;
+  '';
+
+  postFixup = ''
+    mkdir -p "$out/bin"
+    makeWrapper "${pkg_path}/ghidraRun" "$out/bin/ghidra" \
+      --prefix PATH : ${lib.makeBinPath [ openjdk11 ]}
+  '';
+
+  meta = with lib; {
+    description = "A software reverse engineering (SRE) suite of tools developed by NSA's Research Directorate in support of the Cybersecurity mission";
+    homepage = "https://ghidra-sre.org/";
+    platforms = [ "x86_64-linux" ];
+    license = licenses.asl20;
+    maintainers = [ maintainers.ck3d ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/security/gnome-keysign/default.nix b/nixpkgs/pkgs/tools/security/gnome-keysign/default.nix
new file mode 100644
index 000000000000..a559039d95ac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gnome-keysign/default.nix
@@ -0,0 +1,90 @@
+{ stdenv
+, fetchFromGitLab
+, fetchpatch
+, python3
+, wrapGAppsHook
+, gobject-introspection
+, gtk3
+, glib
+, gnome3
+, gst_all_1
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "gnome-keysign";
+  version = "1.2.0";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.gnome.org";
+    owner = "GNOME";
+    repo = pname;
+    rev = version;
+    sha256 = "1sjphi1lsivg9jmc8khbcqa9w6608pkrccz4nz3rlcc54hn0k0sj";
+  };
+
+  patches = [
+    # fix build failure due to missing import
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/gnome-keysign/commit/216c3677e68960afc517edc00529323e85909323.patch";
+      sha256 = "1w410gvcridbq26sry7fxn49v59ss2lc0w5ab7csva8rzs1nc990";
+    })
+
+    # stop requiring lxml (no longer used)
+    # https://gitlab.gnome.org/GNOME/gnome-keysign/merge_requests/23
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/gnome-keysign/commit/ffc6f40584d7564951e1c8b6d18d4f8a6a3fa09d.patch";
+      sha256 = "1hs6mmhi2f21kvy26llzvp37yf0i0dr69d18r641139nr6qg6kwy";
+      includes = [ "setup.py" ];
+    })
+  ];
+
+  nativeBuildInputs = [
+    wrapGAppsHook
+    gobject-introspection
+  ] ++ (with python3.pkgs; [
+    Babel
+    babelgladeextractor
+  ]);
+
+  buildInputs = [
+    # TODO: add avahi support
+    gtk3
+    glib
+    gst_all_1.gstreamer
+    gst_all_1.gst-plugins-base
+    (gst_all_1.gst-plugins-good.override { gtkSupport = true; })
+    gst_all_1.gst-plugins-bad # for zbar plug-in
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    dbus-python
+    future
+    gpgme
+    magic-wormhole
+    pygobject3
+    pybluez
+    qrcode
+    requests
+    twisted
+  ];
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+    };
+  };
+
+  # https://github.com/NixOS/nixpkgs/issues/56943
+  strictDeps = false;
+
+  # bunch of linting
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "GTK/GNOME application to use GnuPG for signing other peoples’ keys";
+    homepage = https://wiki.gnome.org/Apps/Keysign;
+    license = licenses.gpl3Plus;
+    maintainers = gnome3.maintainers;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gnu-pw-mgr/default.nix b/nixpkgs/pkgs/tools/security/gnu-pw-mgr/default.nix
new file mode 100644
index 000000000000..940a5b9a0535
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gnu-pw-mgr/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, lib, fetchurl, gnulib }:
+
+stdenv.mkDerivation rec {
+  pname = "gnu-pw-mgr";
+  version = "2.4.2";
+  src = fetchurl {
+    url = "https://ftp.gnu.org/gnu/gnu-pw-mgr/${pname}-${version}.tar.xz";
+    sha256 = "1yvdzc5w37qrjrkby5699ygj9bhkvgi3zk9k9jcjry1j6b7wdl17";
+  };
+
+  buildInputs = [ gnulib ];
+
+  meta = with lib; {
+    homepage = https://www.gnu.org/software/gnu-pw-mgr/;
+    description = "A password manager designed to make it easy to reconstruct difficult passwords";
+    license = with licenses; [ gpl3Plus lgpl3Plus ];
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = with maintainers; [ qoelet ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gnupg-pkcs11-scd/default.nix b/nixpkgs/pkgs/tools/security/gnupg-pkcs11-scd/default.nix
new file mode 100644
index 000000000000..bc7cff99dc23
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gnupg-pkcs11-scd/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl, libgpgerror, libassuan, libgcrypt, pkcs11helper,
+  pkgconfig, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "gnupg-pkcs11-scd";
+  version = "0.9.2";
+
+  src = fetchurl {
+    url = "https://github.com/alonbl/${pname}/releases/download/${pname}-${version}/${pname}-${version}.tar.bz2";
+    sha256 = "sha256:1mfh9zjbahjd788rq1mzx009pd7p1sq62sbz586rd7szif7pkpgx";
+  };
+
+  buildInputs = [ pkcs11helper pkgconfig openssl ];
+
+  configureFlags = [
+    "--with-libgpg-error-prefix=${libgpgerror.dev}"
+    "--with-libassuan-prefix=${libassuan.dev}"
+    "--with-libgcrypt-prefix=${libgcrypt.dev}"
+  ];
+
+  meta = with stdenv.lib; {
+    description = "A smart-card daemon to enable the use of PKCS#11 tokens with GnuPG";
+    longDescription = ''
+    gnupg-pkcs11 is a project to implement a BSD-licensed smart-card
+    daemon to enable the use of PKCS#11 tokens with GnuPG.
+    '';
+    homepage = http://gnupg-pkcs11.sourceforge.net/;
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ lschuermann philandstuff ];
+    platforms = platforms.unix;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/security/gnupg/0001-dirmngr-Only-use-SKS-pool-CA-for-SKS-pool.patch b/nixpkgs/pkgs/tools/security/gnupg/0001-dirmngr-Only-use-SKS-pool-CA-for-SKS-pool.patch
new file mode 100644
index 000000000000..061fb0e8de9c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gnupg/0001-dirmngr-Only-use-SKS-pool-CA-for-SKS-pool.patch
@@ -0,0 +1,34 @@
+From 1c9cc97e9d47d73763810dcb4a36b6cdf31a2254 Mon Sep 17 00:00:00 2001
+From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+Date: Sun, 30 Jun 2019 11:54:35 -0400
+Subject: [PATCH] dirmngr: Only use SKS pool CA for SKS pool
+
+* dirmngr/http.c (http_session_new): when checking whether the
+keyserver is the HKPS pool, check specifically against the pool name,
+as ./configure might have been used to select a different default
+keyserver.  It makes no sense to apply Kristian's certificate
+authority to anything other than the literal host
+hkps.pool.sks-keyservers.net.
+
+Signed-off-by: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+GnuPG-Bug-Id: 4593
+---
+ dirmngr/http.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/dirmngr/http.c b/dirmngr/http.c
+index 384f2569d..8e5d53939 100644
+--- a/dirmngr/http.c
++++ b/dirmngr/http.c
+@@ -767,7 +767,7 @@ http_session_new (http_session_t *r_session,
+ 
+     is_hkps_pool = (intended_hostname
+                     && !ascii_strcasecmp (intended_hostname,
+-                                          get_default_keyserver (1)));
++                                          "hkps.pool.sks-keyservers.net"));
+ 
+     /* If the user has not specified a CA list, and they are looking
+      * for the hkps pool from sks-keyservers.net, then default to
+-- 
+2.22.0
+
diff --git a/nixpkgs/pkgs/tools/security/gnupg/1.nix b/nixpkgs/pkgs/tools/security/gnupg/1.nix
new file mode 100644
index 000000000000..3b916378bf52
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gnupg/1.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, readline, bzip2 }:
+
+stdenv.mkDerivation rec {
+  name = "gnupg-1.4.23";
+
+  src = fetchurl {
+    url = "mirror://gnupg/gnupg/${name}.tar.bz2";
+    sha256 = "1fkq4sqldvf6a25mm2qz95swv1qjg464736091w51djiwqbjyin9";
+  };
+
+  buildInputs = [ readline bzip2 ];
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    homepage = https://gnupg.org;
+    description = "Classic (1.4) release of the GNU Privacy Guard, a GPL OpenPGP implementation";
+    license = licenses.gpl3Plus;
+    longDescription = ''
+      The GNU Privacy Guard is the GNU project's complete and free
+      implementation of the OpenPGP standard as defined by RFC4880.  GnuPG
+      "classic" (1.4) is the old standalone version which is most suitable for
+      older or embedded platforms.  GnuPG allows to encrypt and sign your data
+      and communication, features a versatile key management system as well as
+      access modules for all kind of public key directories.  GnuPG, also known
+      as GPG, is a command line tool with features for easy integration with
+      other applications.  A wealth of frontend applications and libraries are
+      available.
+    '';
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gnupg/1compat.nix b/nixpkgs/pkgs/tools/security/gnupg/1compat.nix
new file mode 100644
index 000000000000..371a7ca67afd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gnupg/1compat.nix
@@ -0,0 +1,30 @@
+{ stdenv, gnupg, coreutils, writeScript }:
+
+stdenv.mkDerivation {
+  name = "gnupg1compat-${gnupg.version}";
+
+  builder = writeScript "gnupg1compat-builder" ''
+    PATH=${coreutils}/bin
+    # First symlink all top-level dirs
+    mkdir -p $out
+    ln -s "${gnupg}/"* $out
+
+    # Replace bin with directory and symlink it contents
+    rm $out/bin
+    mkdir -p $out/bin
+    ln -s "${gnupg}/bin/"* $out/bin
+
+    # Add symlinks for any executables that end in 2 and lack any non-*2 version
+    for f in $out/bin/*2; do
+      [[ -x $f ]] || continue # ignore failed globs and non-executable files
+      [[ -e ''${f%2} ]] && continue # ignore commands that already have non-*2 versions
+      ln -s -- "''${f##*/}" "''${f%2}"
+    done
+  '';
+
+  meta = gnupg.meta // {
+    description = gnupg.meta.description +
+      " with symbolic links for gpg and gpgv";
+    priority = -1;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gnupg/20.nix b/nixpkgs/pkgs/tools/security/gnupg/20.nix
new file mode 100644
index 000000000000..ef348e388342
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gnupg/20.nix
@@ -0,0 +1,66 @@
+{ fetchurl, stdenv, readline, zlib, libgpgerror, pth, libgcrypt, libassuan
+, libksba, coreutils, libiconv, pcsclite
+
+# Each of the dependencies below are optional.
+# Gnupg can be built without them at the cost of reduced functionality.
+, pinentry ? null, guiSupport ? false
+, openldap ? null, bzip2 ? null, libusb ? null, curl ? null
+}:
+
+with stdenv.lib;
+
+assert guiSupport -> pinentry != null;
+
+stdenv.mkDerivation rec {
+  pname = "gnupg";
+  version = "2.0.30";
+
+  src = fetchurl {
+    url = "mirror://gnupg/gnupg/${pname}-${version}.tar.bz2";
+    sha256 = "0wax4cy14hh0h7kg9hj0hjn9424b71z8lrrc5kbsasrn9xd7hag3";
+  };
+
+  buildInputs
+    = [ readline zlib libgpgerror libgcrypt libassuan libksba pth
+        openldap bzip2 libusb curl libiconv ];
+
+  patches = [ ./gpgkey2ssh-20.patch ];
+
+  prePatch = ''
+    find tests -type f | xargs sed -e 's@/bin/pwd@${coreutils}&@g' -i
+  '' + stdenv.lib.optionalString stdenv.isLinux ''
+    sed -i 's,"libpcsclite\.so[^"]*","${stdenv.lib.getLib pcsclite}/lib/libpcsclite.so",g' scd/scdaemon.c
+  '' + stdenv.lib.optionalString stdenv.isDarwin ''
+    find . -name pcsc-wrapper.c | xargs sed -i 's/typedef unsinged int pcsc_dword_t/typedef unsigned int pcsc_dword_t/'
+  '' + ''
+    patch gl/stdint_.h < ${./clang.patch}
+  '';
+
+  pinentryBinaryPath = pinentry.binaryPath or "bin/pinentry";
+  configureFlags = optional guiSupport "--with-pinentry-pgm=${pinentry}/${pinentryBinaryPath}";
+
+  postConfigure = "substituteAllInPlace tools/gpgkey2ssh.c";
+
+  checkPhase="GNUPGHOME=`pwd` ./agent/gpg-agent --daemon make check";
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    homepage = https://gnupg.org;
+    description = "Stable (2.0) release of the GNU Privacy Guard, a GPL OpenPGP implementation";
+    license = licenses.gpl3Plus;
+    longDescription = ''
+      The GNU Privacy Guard is the GNU project's complete and free
+      implementation of the OpenPGP standard as defined by RFC4880.  GnuPG
+      "stable" (2.0) is the current stable version for general use.  This is
+      what most users are still using.  GnuPG allows to encrypt and sign your
+      data and communication, features a versatile key management system as well
+      as access modules for all kind of public key directories.  GnuPG, also
+      known as GPG, is a command line tool with features for easy integration
+      with other applications.  A wealth of frontend applications and libraries
+      are available.  Version 2 of GnuPG also provides support for S/MIME.
+    '';
+    maintainers = with maintainers; [ roconnor ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gnupg/22.nix b/nixpkgs/pkgs/tools/security/gnupg/22.nix
new file mode 100644
index 000000000000..51dd9d908bb2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gnupg/22.nix
@@ -0,0 +1,89 @@
+{ fetchurl, fetchpatch, stdenv, pkgconfig, libgcrypt, libassuan, libksba
+, libgpgerror, libiconv, npth, gettext, texinfo, buildPackages
+
+# Each of the dependencies below are optional.
+# Gnupg can be built without them at the cost of reduced functionality.
+, guiSupport ? true, enableMinimal ? false
+, adns ? null , bzip2 ? null , gnutls ? null , libusb ? null , openldap ? null
+, pcsclite ? null , pinentry ? null , readline ? null , sqlite ? null , zlib ?
+null
+}:
+
+with stdenv.lib;
+
+assert guiSupport -> pinentry != null && enableMinimal == false;
+
+stdenv.mkDerivation rec {
+  pname = "gnupg";
+
+  version = "2.2.19";
+
+  src = fetchurl {
+    url = "mirror://gnupg/gnupg/${pname}-${version}.tar.bz2";
+    sha256 = "1h6yx6sdpz3lf9gdppgxqcf73baynr8gflmh43286fkgw3058994";
+  };
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+  nativeBuildInputs = [ pkgconfig texinfo ];
+  buildInputs = [
+    libgcrypt libassuan libksba libiconv npth gettext
+    readline libusb gnutls adns openldap zlib bzip2 sqlite
+  ];
+
+  patches = [
+    ./fix-libusb-include-path.patch
+    ./0001-dirmngr-Only-use-SKS-pool-CA-for-SKS-pool.patch
+  ];
+  postPatch = ''
+    sed -i 's,hkps://hkps.pool.sks-keyservers.net,hkps://keys.openpgp.org,g' \
+        configure doc/dirmngr.texi doc/gnupg.info-1
+  '' + stdenv.lib.optionalString ( stdenv.isLinux && pcsclite != null) ''
+    sed -i 's,"libpcsclite\.so[^"]*","${stdenv.lib.getLib pcsclite}/lib/libpcsclite.so",g' scd/scdaemon.c
+  '';
+
+  pinentryBinaryPath = pinentry.binaryPath or "bin/pinentry";
+  configureFlags = [
+    "--with-libgpg-error-prefix=${libgpgerror.dev}"
+    "--with-libgcrypt-prefix=${libgcrypt.dev}"
+    "--with-libassuan-prefix=${libassuan.dev}"
+    "--with-ksba-prefix=${libksba.dev}"
+    "--with-npth-prefix=${npth}"
+  ] ++ optional guiSupport "--with-pinentry-pgm=${pinentry}/${pinentryBinaryPath}";
+
+  postInstall = if enableMinimal
+  then ''
+    rm -r $out/{libexec,sbin,share}
+    for f in `find $out/bin -type f -not -name gpg`
+    do
+      rm $f
+    done
+  '' else ''
+    mkdir -p $out/lib/systemd/user
+    for f in doc/examples/systemd-user/*.{service,socket} ; do
+      substitute $f $out/lib/systemd/user/$(basename $f) \
+        --replace /usr/bin $out/bin
+    done
+
+    # add gpg2 symlink to make sure git does not break when signing commits
+    ln -s $out/bin/gpg $out/bin/gpg2
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://gnupg.org;
+    description = "Modern (2.1) release of the GNU Privacy Guard, a GPL OpenPGP implementation";
+    license = licenses.gpl3Plus;
+    longDescription = ''
+      The GNU Privacy Guard is the GNU project's complete and free
+      implementation of the OpenPGP standard as defined by RFC4880.  GnuPG
+      "modern" (2.1) is the latest development with a lot of new features.
+      GnuPG allows to encrypt and sign your data and communication, features a
+      versatile key management system as well as access modules for all kind of
+      public key directories.  GnuPG, also known as GPG, is a command line tool
+      with features for easy integration with other applications.  A wealth of
+      frontend applications and libraries are available.  Version 2 of GnuPG
+      also provides support for S/MIME.
+    '';
+    maintainers = with maintainers; [ peti fpletz vrthra ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gnupg/clang.patch b/nixpkgs/pkgs/tools/security/gnupg/clang.patch
new file mode 100644
index 000000000000..842785e5c932
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gnupg/clang.patch
@@ -0,0 +1,13 @@
+diff --git a/gl/stdint_.h b/gl/stdint_.h
+index bc27595..303e81a 100644
+--- a/gl/stdint_.h
++++ b/gl/stdint_.h
+@@ -62,7 +62,7 @@
+      int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__.
+      <inttypes.h> also defines intptr_t and uintptr_t.  */
+ # define _GL_JUST_INCLUDE_ABSOLUTE_INTTYPES_H
+-# include <inttypes.h>
++// # include <inttypes.h>
+ # undef _GL_JUST_INCLUDE_ABSOLUTE_INTTYPES_H
+ #elif @HAVE_SYS_INTTYPES_H@
+   /* Solaris 7 <sys/inttypes.h> has the types except the *_fast*_t types, and
diff --git a/nixpkgs/pkgs/tools/security/gnupg/fix-libusb-include-path.patch b/nixpkgs/pkgs/tools/security/gnupg/fix-libusb-include-path.patch
new file mode 100644
index 000000000000..a5432f8e3d95
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gnupg/fix-libusb-include-path.patch
@@ -0,0 +1,12 @@
+--- a/configure
++++ b/configure
+@@ -8987,8 +8987,7 @@
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking libusb include dir" >&5
+ $as_echo_n "checking libusb include dir... " >&6; }
+    usb_incdir_found="no"
+-   for _incdir in "" "/usr/include/libusb-1.0" \
+-       "/usr/local/include/libusb-1.0" "/usr/pkg/include/libusb-1.0"; do
++   for _incdir in "$($PKG_CONFIG --variable=includedir libusb-1.0)/libusb-1.0"; do
+      _libusb_save_cppflags=$CPPFLAGS
+      if test -n "${_incdir}"; then
+        CPPFLAGS="-I${_incdir} ${CPPFLAGS}"
diff --git a/nixpkgs/pkgs/tools/security/gnupg/gpgkey2ssh-20.patch b/nixpkgs/pkgs/tools/security/gnupg/gpgkey2ssh-20.patch
new file mode 100644
index 000000000000..65804bac7642
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gnupg/gpgkey2ssh-20.patch
@@ -0,0 +1,14 @@
+diff --git a/tools/gpgkey2ssh.c b/tools/gpgkey2ssh.c
+index 903fb5b..d5611dc 100644
+--- a/tools/gpgkey2ssh.c
++++ b/tools/gpgkey2ssh.c
+@@ -268,7 +268,7 @@ main (int argc, char **argv)
+   keyid = argv[1];
+ 
+   ret = asprintf (&command,
+-		  "gpg --list-keys --with-colons --with-key-data '%s'",
++		  "@out@/bin/gpg --list-keys --with-colons --with-key-data '%s'",
+ 		  keyid);
+   assert (ret > 0);
+ 
+
diff --git a/nixpkgs/pkgs/tools/security/gobuster/default.nix b/nixpkgs/pkgs/tools/security/gobuster/default.nix
new file mode 100644
index 000000000000..c3426bee965b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gobuster/default.nix
@@ -0,0 +1,25 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "gobuster";
+  version = "3.0.1";
+
+  src = fetchFromGitHub {
+    owner = "OJ";
+    repo = "gobuster";
+    rev = "v${version}";
+    sha256 = "0q8ighqykh8qyvidnm6az6dc9mp32bbmhkmkqzl1ybbw6paa8pym";
+  };
+
+  modSha256 = "0jq0z5s05vqdvq7v1gdjwlqqwbl1j2rv9f16k52idl50vdiqviql";
+
+  meta = with lib; {
+    description = "Tool used to brute-force URIs, DNS subdomains, Virtual Host names on target web servers";
+    homepage = "https://github.com/OJ/gobuster";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ pamplemousse ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gopass/default.nix b/nixpkgs/pkgs/tools/security/gopass/default.nix
new file mode 100644
index 000000000000..41a0d6eb7a5a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gopass/default.nix
@@ -0,0 +1,56 @@
+{ stdenv, buildGoPackage, fetchFromGitHub, git, gnupg, xclip, wl-clipboard, makeWrapper }:
+
+buildGoPackage rec {
+  pname = "gopass";
+  version = "1.8.6";
+
+  goPackagePath = "github.com/gopasspw/gopass";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  src = fetchFromGitHub {
+    owner = "gopasspw";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0v3sx9hb03bdn4rvsv2r0jzif6p1rx47hrkpsbnwva31k396mck2";
+  };
+
+  wrapperPath = stdenv.lib.makeBinPath ([
+    git
+    gnupg
+    xclip
+  ] ++ stdenv.lib.optional stdenv.isLinux wl-clipboard);
+
+  postInstall = ''
+    mkdir -p \
+      $bin/share/bash-completion/completions \
+      $bin/share/zsh/site-functions \
+      $bin/share/fish/vendor_completions.d
+    $bin/bin/gopass completion bash > $bin/share/bash-completion/completions/_gopass
+    $bin/bin/gopass completion zsh  > $bin/share/zsh/site-functions/_gopass
+    $bin/bin/gopass completion fish > $bin/share/fish/vendor_completions.d/gopass.fish
+  '';
+
+  postFixup = ''
+    wrapProgram $bin/bin/gopass \
+      --prefix PATH : "${wrapperPath}"
+  '';
+
+  meta = with stdenv.lib; {
+    description     = "The slightly more awesome Standard Unix Password Manager for Teams. Written in Go.";
+    homepage        = https://www.gopass.pw/;
+    license         = licenses.mit;
+    maintainers     = with maintainers; [ andir ];
+    platforms       = platforms.unix;
+
+    longDescription = ''
+      gopass is a rewrite of the pass password manager in Go with the aim of
+      making it cross-platform and adding additional features. Our target
+      audience are professional developers and sysadmins (and especially teams
+      of those) who are well versed with a command line interface. One explicit
+      goal for this project is to make it more approachable to non-technical
+      users. We go by the UNIX philosophy and try to do one thing and do it
+      well, providing a stellar user experience and a sane, simple interface.
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gorilla-bin/default.nix b/nixpkgs/pkgs/tools/security/gorilla-bin/default.nix
new file mode 100644
index 000000000000..1ba650f5af75
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gorilla-bin/default.nix
@@ -0,0 +1,41 @@
+{ fetchurl, makeWrapper, patchelf, stdenv, libXft, libX11, freetype, fontconfig, libXrender, libXScrnSaver, libXext }:
+
+stdenv.mkDerivation rec {
+  pname = "gorilla-bin";
+  version = "1.5.3.7";
+
+  src = fetchurl {
+    name = "gorilla1537_64.bin";
+    url = "http://gorilla.dp100.com/downloads/gorilla1537_64.bin";
+    sha256 = "19ir6x4c01825hpx2wbbcxkk70ymwbw4j03v8b2xc13ayylwzx0r";
+  };
+
+  nativeBuildInputs = [ patchelf makeWrapper ];
+  phases = [ "unpackPhase" "installPhase" ];
+
+  unpackCmd = ''
+    mkdir gorilla;
+    cp $curSrc gorilla/gorilla-${version};
+  '';
+
+  installPhase = let
+    interpreter = "$(< \"$NIX_CC/nix-support/dynamic-linker\")";
+    libPath = stdenv.lib.makeLibraryPath [ libXft libX11 freetype fontconfig libXrender libXScrnSaver libXext ];
+  in ''
+    mkdir -p $out/opt/password-gorilla
+    mkdir -p $out/bin
+    cp gorilla-${version} $out/opt/password-gorilla
+    chmod ugo+x $out/opt/password-gorilla/gorilla-${version}
+    patchelf --set-interpreter "${interpreter}" "$out/opt/password-gorilla/gorilla-${version}"
+    makeWrapper "$out/opt/password-gorilla/gorilla-${version}" "$out/bin/gorilla" \
+      --prefix LD_LIBRARY_PATH : "${libPath}"
+  '';
+
+  meta = {
+    description = "Password Gorilla is a Tk based password manager";
+    homepage = https://github.com/zdia/gorilla/wiki;
+    maintainers = [ stdenv.lib.maintainers.namore ];
+    platforms = [ "x86_64-linux" ];
+    license = stdenv.lib.licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/gpgstats/default.nix b/nixpkgs/pkgs/tools/security/gpgstats/default.nix
new file mode 100644
index 000000000000..c3a14f62c766
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/gpgstats/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl, ncurses, gpgme }:
+
+stdenv.mkDerivation rec {
+  pname = "gpgstats";
+  version = "0.5";
+
+  src = fetchurl {
+    url = "https://www.vanheusden.com/gpgstats/${pname}-${version}.tgz";
+    sha256 = "1n3njqhjwgfllcxs0xmk89dzgirrpfpfzkj71kqyvq97gc1wbcxy";
+  };
+
+  buildInputs = [ ncurses gpgme ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp gpgstats $out/bin
+  '';
+
+  NIX_CFLAGS_COMPILE = stdenv.lib.optionalString (!stdenv.is64bit)
+    "-D_FILE_OFFSET_BITS=64 -DLARGEFILE_SOURCE=1";
+
+  meta = with stdenv.lib; {
+    description = "Calculates statistics on the keys in your gpg key-ring";
+    longDescription = ''
+    GPGstats calculates statistics on the keys in your key-ring.
+    '';
+    homepage = http://www.vanheusden.com/gpgstats/;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ davidak ];
+    platforms = platforms.unix;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/security/haka/default.nix b/nixpkgs/pkgs/tools/security/haka/default.nix
new file mode 100644
index 000000000000..bfac54d2d860
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/haka/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl, cmake, swig, wireshark, check, rsync, libpcap, gawk, libedit, pcre }:
+
+let version = "0.3.0"; in
+
+stdenv.mkDerivation {
+  pname = "haka";
+  inherit version;
+
+  src = fetchurl {
+    name = "haka_${version}_source.tar.gz";
+    url = "https://github.com/haka-security/haka/releases/download/v${version}/haka_${version}_source.tar.gz";
+    sha256 = "0dm39g3k77sa70zrjsqadidg27a6iqq61jzfdxazpllnrw4mjy4w";
+  };
+
+  NIX_CFLAGS_COMPILE = "-Wno-error";
+
+  preConfigure = ''
+    sed -i 's,/etc,'$out'/etc,' src/haka/haka.c
+    sed -i 's,/etc,'$out'/etc,' src/haka/CMakeLists.txt
+    sed -i 's,/opt/haka/etc,$out/opt/haka/etc,' src/haka/haka.1
+    sed -i 's,/etc,'$out'/etc,' doc/user/tool_suite_haka.rst
+  '';
+
+  buildInputs = [ cmake swig wireshark check rsync libpcap gawk libedit pcre ];
+
+  enableParallelBuilding = true;
+
+  meta = {
+    description = "A collection of tools that allows capturing TCP/IP packets and filtering them based on Lua policy files";
+    homepage = http://www.haka-security.org/;
+    license = stdenv.lib.licenses.mpl20;
+    maintainers = [ stdenv.lib.maintainers.tvestelind ];
+    platforms = [ "x86_64-linux" "i686-linux" ]; # fails on aarch64
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/hash-slinger/default.nix b/nixpkgs/pkgs/tools/security/hash-slinger/default.nix
new file mode 100644
index 000000000000..4fa0499f1dde
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/hash-slinger/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, fetchFromGitHub, pythonPackages, unbound, libreswan }:
+
+let
+  inherit (pythonPackages) python;
+in stdenv.mkDerivation rec {
+  pname    = "hash-slinger";
+  version = "2.7";
+
+  src = fetchFromGitHub {
+    owner = "letoams";
+    repo = pname;
+    rev = version;
+    sha256 = "05wn744ydclpnpyah6yfjqlfjlasrrhzj48lqmm5a91nyps5yqyn";
+  };
+
+  pythonPath = with pythonPackages; [ dnspython m2crypto ipaddr python-gnupg
+                                      pyunbound ];
+
+  buildInputs = [ pythonPackages.wrapPython ];
+  propagatedBuildInputs = [ unbound libreswan ] ++ pythonPath;
+  propagatedUserEnvPkgs = [ unbound libreswan ];
+
+  patchPhase = ''
+    substituteInPlace Makefile \
+      --replace "$(DESTDIR)/usr" "$out"
+    substituteInPlace ipseckey \
+      --replace "/usr/sbin/ipsec" "${libreswan}/sbin/ipsec"
+    substituteInPlace tlsa \
+      --replace "/var/lib/unbound/root" "${pythonPackages.pyunbound}/etc/pyunbound/root"
+    patchShebangs *
+    '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/man $out/${python.sitePackages}/
+    make install
+    wrapPythonPrograms
+   '';
+
+   meta = {
+    description = "Various tools to generate special DNS records";
+    homepage    = "https://github.com/letoams/hash-slinger";
+    license     = stdenv.lib.licenses.gpl2Plus;
+    maintainers = [ stdenv.lib.maintainers.leenaars ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/hash_extender/default.nix b/nixpkgs/pkgs/tools/security/hash_extender/default.nix
new file mode 100644
index 000000000000..30ba2fb30872
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/hash_extender/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub, openssl }:
+
+stdenv.mkDerivation {
+  pname = "hash_extender";
+  version = "2017-04-10";
+
+  src = fetchFromGitHub {
+    owner = "iagox86";
+    repo = "hash_extender";
+    rev = "d27581e062dd0b534074e11d7d311f65a6d7af21";
+    sha256 = "1npwbgqaynjh5x39halw43i116v89sxkpa1g1bbvc1lpi8hkhhcb";
+  };
+
+  buildInputs = [ openssl ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp hash_extender $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Tool to automate hash length extension attacks";
+    homepage = https://github.com/iagox86/hash_extender;
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ geistesk ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/hashcash/default.nix b/nixpkgs/pkgs/tools/security/hashcash/default.nix
new file mode 100644
index 000000000000..a28822ecd951
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/hashcash/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "hashcash";
+  version = "1.22";
+  
+  buildInputs = [ openssl ];
+
+  src = fetchurl {
+    url = "http://www.hashcash.org/source/hashcash-${version}.tgz";
+    sha256 = "15kqaimwb2y8wvzpn73021bvay9mz1gqqfc40gk4hj6f84nz34h1";
+  };
+  
+  makeFlags = [
+    "generic-openssl"
+    "LIBCRYPTO=-lcrypto"
+  ];
+
+  installFlags = [
+    "INSTALL_PATH=${placeholder "out"}/bin"
+    "MAN_INSTALL_PATH=${placeholder "out"}/share/man/man1"
+    "DOC_INSTALL_PATH=${placeholder "out"}/share/doc/hashcash-$(version)"
+  ];
+  
+  meta = with stdenv.lib; {
+    description = "Proof-of-work algorithm used as spam and denial-of-service counter measure";
+    homepage = http://hashcash.org;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ kisonecat ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/hashcat-utils/default.nix b/nixpkgs/pkgs/tools/security/hashcat-utils/default.nix
new file mode 100644
index 000000000000..50508cfc4941
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/hashcat-utils/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "hashcat-utils";
+  version = "1.9";
+
+  src = fetchFromGitHub {
+    owner = "hashcat";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0wgc6wv7i6cs95rgzzx3zqm14xxbjyajvcqylz8w97d8kk4x4wjr";
+  };
+
+  sourceRoot = "source/src";
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm0555 *.bin -t $out/bin
+    install -Dm0555 *.pl -t $out/bin
+    runHook postInstall
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Small utilities that are useful in advanced password cracking";
+    homepage = https://github.com/hashcat/hashcat-utils;
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ fadenb ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/hashcat/default.nix b/nixpkgs/pkgs/tools/security/hashcat/default.nix
new file mode 100644
index 000000000000..72a13c0f259e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/hashcat/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, makeWrapper, opencl-headers, ocl-icd, xxHash }:
+
+stdenv.mkDerivation rec {
+  pname   = "hashcat";
+  version = "5.1.0";
+
+  src = fetchurl {
+    url = "https://hashcat.net/files/hashcat-${version}.tar.gz";
+    sha256 = "0f73y4cg8c7a6q7x34qvpfi4g3lw6j9bnn0a13g43aqyiskflfr8";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ opencl-headers xxHash ];
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+    "COMPTIME=1337"
+    "VERSION_TAG=${version}"
+    "USE_SYSTEM_OPENCL=1"
+    "USE_SYSTEM_XXHASH=1"
+  ];
+
+  postFixup = ''
+    wrapProgram $out/bin/hashcat --prefix LD_LIBRARY_PATH : ${ocl-icd}/lib
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Fast password cracker";
+    homepage    = https://hashcat.net/hashcat/;
+    license     = licenses.mit;
+    platforms   = platforms.linux;
+    maintainers = with maintainers; [ kierdavis zimbatm ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/haveged/default.nix b/nixpkgs/pkgs/tools/security/haveged/default.nix
new file mode 100644
index 000000000000..c47331f1bcb9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/haveged/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "haveged";
+  version = "1.9.2";
+
+  src = fetchurl {
+    url = "http://www.issihosts.com/haveged/haveged-${version}.tar.gz";
+    sha256 = "0w5ypz6451msckivjriwyw8djydlwffam7x23xh626s2vzdrlzgp";
+  };
+
+  meta = {
+    description = "A simple entropy daemon";
+    longDescription = ''
+      The haveged project is an attempt to provide an easy-to-use, unpredictable
+      random number generator based upon an adaptation of the HAVEGE algorithm.
+      Haveged was created to remedy low-entropy conditions in the Linux random device
+      that can occur under some workloads, especially on headless servers. Current development
+      of haveged is directed towards improving overall reliability and adaptability while minimizing
+      the barriers to using haveged for other tasks.
+    '';
+    homepage = http://www.issihosts.com/haveged/;
+    license = stdenv.lib.licenses.gpl3;
+    maintainers = [ stdenv.lib.maintainers.domenkozar ];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/hcxtools/default.nix b/nixpkgs/pkgs/tools/security/hcxtools/default.nix
new file mode 100644
index 000000000000..8e70e0def41c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/hcxtools/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub, curl, openssl, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "hcxtools";
+  version = "5.3.0";
+
+  src = fetchFromGitHub {
+    owner = "ZerBea";
+    repo = pname;
+    rev = version;
+    sha256 = "1pqvxncpcnwxs89imma01ry30bz7cjifm8wz1s80yclkxxf80php";
+  };
+
+  buildInputs = [ curl openssl zlib ];
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Tools for capturing wlan traffic and conversion to hashcat and John the Ripper formats";
+    homepage = https://github.com/ZerBea/hcxtools;
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ dywedir ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/hologram/default.nix b/nixpkgs/pkgs/tools/security/hologram/default.nix
new file mode 100644
index 000000000000..e6c375599a92
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/hologram/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "hologram-2018-03-19";
+  rev = "a7bab58642b530edb75b9cf6c1d834c85822ceac";
+
+  src = fetchFromGitHub {
+    owner = "AdRoll";
+    repo = "hologram";
+    inherit rev;
+    sha256 = "00scryz8js6gbw8lp2y23qikbazz2dd992r97rqh0l1q4baa0ckn";
+  };
+
+  goPackagePath = "github.com/AdRoll/hologram";
+
+  goDeps = ./deps.nix;
+
+  preConfigure = ''
+    sed -i 's|cacheTimeout != 3600|cacheTimeout != 0|' cmd/hologram-server/main.go
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/AdRoll/hologram/;
+    description = "Easy, painless AWS credentials on developer laptops.";
+    maintainers = with maintainers; [ nand0p ];
+    platforms = platforms.all;
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/hologram/deps.nix b/nixpkgs/pkgs/tools/security/hologram/deps.nix
new file mode 100644
index 000000000000..a9b66da2a9c0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/hologram/deps.nix
@@ -0,0 +1,110 @@
+[
+  {
+    goPackagePath = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev = "575fdbe86e5dd89229707ebec0575ce7d088a4a6";
+      sha256 = "1kgv1mkw9y404pk3lcwbs0vgl133mwyp294i18jg9hp10s5d56xa";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev = "59b73b37c1e45995477aae817e4a653c89a858db";
+      sha256 = "1dx22jvhvj34ivpr7gw01fncg9yyx35mbpal4mpgnqka7ajmgjsa";
+    };
+  }
+  {
+    goPackagePath = "github.com/howeyc/gopass";
+    fetch = {
+      type = "git";
+      url = "https://github.com/howeyc/gopass";
+      rev = "2c70fa70727c953c51695f800f25d6b44abb368e";
+      sha256 = "152lrkfxk205rlxiign0w5wb0fmfh910yz4jhlv4f4l1qr1h2lx8";
+    };
+  }
+  {
+    goPackagePath = "github.com/aybabtme/rgbterm";
+    fetch = {
+      type = "git";
+      url = "https://github.com/aybabtme/rgbterm";
+      rev = "c07e2f009ed2311e9c35bca12ec00b38ccd48283";
+      sha256 = "1qph7drds44jzx1whqlrh1hs58k0wv0v58zyq2a81hmm72gsgzam";
+    };
+  }
+  {
+    goPackagePath = "github.com/vaughan0/go-ini";
+    fetch = {
+      type = "git";
+      url = "https://github.com/vaughan0/go-ini";
+      rev = "a98ad7ee00ec53921f08832bc06ecf7fd600e6a1";
+      sha256 = "1l1isi3czis009d9k5awsj4xdxgbxn4n9yqjc1ac7f724x6jacfa";
+    };
+  }
+  {
+    goPackagePath = "github.com/mitchellh/go-homedir";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mitchellh/go-homedir";
+      rev = "1f6da4a72e57d4e7edd4a7295a585e0a3999a2d4";
+      sha256 = "1l5lrsjrnwxn299mhvyxvz8hd0spkx0d31gszm4cyx21bg1xsiy9";
+    };
+  }
+  {
+    goPackagePath = "github.com/goamz/goamz";
+    fetch = {
+      type = "git";
+      url = "https://github.com/goamz/goamz";
+      rev = "2a8fed5e89ab9e16210fc337d1aac780e8c7bbb7";
+      sha256 = "0rlinp0cvgw66qjndg4padr5s0wd3n7kjfggkx6czqj9bqaxcz4b";
+    };
+  }
+  {
+    goPackagePath = "github.com/nmcclain/asn1-ber";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-asn1-ber/asn1-ber";
+      rev = "f4b6f4a84f5cde443d1925b5ec185ee93c2bdc72";
+      sha256 = "0qdyax6yw3hvplzqc2ykpihi3m5y4nii581ay0mxy9c54bzs2nk9";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/asn1-ber.v1";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-asn1-ber/asn1-ber";
+      rev = "f4b6f4a84f5cde443d1925b5ec185ee93c2bdc72";
+      sha256 = "0qdyax6yw3hvplzqc2ykpihi3m5y4nii581ay0mxy9c54bzs2nk9";
+    };
+  }
+  {
+    goPackagePath = "github.com/peterbourgon/g2s";
+    fetch = {
+      type = "git";
+      url = "https://github.com/peterbourgon/g2s";
+      rev = "ec76db4c1ac16400ac0e17ca9c4840e1d23da5dc";
+      sha256 = "1p4p8755v2nrn54rik7yifpg9szyg44y5rpp0kryx4ycl72307rj";
+    };
+  }
+  {
+    goPackagePath = "github.com/nmcclain/ldap";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-ldap/ldap";
+      rev = "83e65426fd1c06626e88aa8a085e5bfed0208e29";
+      sha256 = "179lwaf0hvczl8g4xzkpcpzq25p1b23f7399bx5zl55iin62d8yz";
+    };
+  }
+  {
+    goPackagePath = "github.com/aws/aws-sdk-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/aws/aws-sdk-go";
+      rev = "3f8f870ec9939e32b3372abf74d24e468bcd285d";
+      sha256 = "0a4hycs3d87s50z4prf5h6918r0fa2rvrrwlbffs430ilc4y8ghv";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/security/ibm-sw-tpm2/default.nix b/nixpkgs/pkgs/tools/security/ibm-sw-tpm2/default.nix
new file mode 100644
index 000000000000..e2e01fbb921c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ibm-sw-tpm2/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, lib, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "ibm-sw-tpm2";
+  version = "1563";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/ibmswtpm2/ibmtpm${version}.tar.gz";
+    sha256 = "1sfi7drmbm08rgd2414s3sxd7h5g8d4kiwk40xklf7sw67w1ffpw";
+  };
+
+  buildInputs = [ openssl ];
+
+  sourceRoot = "src";
+
+  prePatch = ''
+    # Fix hardcoded path to GCC.
+    substituteInPlace makefile --replace /usr/bin/gcc "${stdenv.cc}/bin/cc"
+
+    # Remove problematic default CFLAGS.
+    substituteInPlace makefile \
+      --replace -Werror "" \
+      --replace -O0 "" \
+      --replace -ggdb ""
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp tpm_server $out/bin
+  '';
+
+  meta = with lib; {
+    description = "IBM's Software TPM 2.0, an implementation of the TCG TPM 2.0 specification";
+    homepage = https://sourceforge.net/projects/ibmswtpm2/;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ delroth ];
+    license = licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ifdnfc/default.nix b/nixpkgs/pkgs/tools/security/ifdnfc/default.nix
new file mode 100644
index 000000000000..5ec66a5b98cc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ifdnfc/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, fetchFromGitHub , pkgconfig
+, pcsclite
+, autoreconfHook
+, libnfc
+}:
+
+stdenv.mkDerivation {
+  pname = "ifdnfc";
+  version = "2016-03-01";
+
+  src = fetchFromGitHub {
+    owner = "nfc-tools";
+    repo = "ifdnfc";
+    rev = "0e48e8e";
+    sha256 = "1cxnvhhlcbm8h49rlw5racspb85fmwqqhd3gzzpzy68vrs0b37vg";
+  };
+  nativeBuildInputs = [ pkgconfig autoreconfHook ];
+  buildInputs = [ pcsclite libnfc ];
+
+  configureFlags = [ "--prefix=$(out)" ];
+  makeFlags = [ "DESTDIR=/" "usbdropdir=$(out)/pcsc/drivers" ];
+
+  meta = with stdenv.lib; {
+    description = "PC/SC IFD Handler based on libnfc";
+    longDescription =
+    '' libnfc Interface Plugin to be used in <code>services.pcscd.plugins</code>.
+       It provides support for all readers which are not supported by ccid but by libnfc.
+
+       For activating your reader you need to run
+       <code>ifdnfc-activate yes<code> with this package in your
+       <code>environment.systemPackages</code>
+
+       To use your reader you may need to blacklist your reader kernel modules:
+       <code>boot.blacklistedKernelModules = [ "pn533" "pn533_usb" "nfc" ];</code>
+
+       Supports the pn533 smart-card reader chip which is for example used in
+       the SCM SCL3711.
+    '';
+    homepage = https://github.com/nfc-tools/ifdnfc;
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ makefu ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/security/ipscan/default.nix b/nixpkgs/pkgs/tools/security/ipscan/default.nix
new file mode 100644
index 000000000000..40546b6f1c33
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ipscan/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchurl, jdk, jre, swt, makeWrapper, xorg, dpkg }:
+
+stdenv.mkDerivation rec {
+  pname = "ipscan";
+  version = "3.6.2";
+
+  src = fetchurl {
+    url = "https://github.com/angryip/ipscan/releases/download/${version}/ipscan_${version}_amd64.deb";
+    sha256 = "0wnnnabpj0dsxdijvss5sl9kd4i6rmcq55zbas33xs3c5g305ssk";
+  };
+
+  sourceRoot = ".";
+  unpackCmd = "${dpkg}/bin/dpkg-deb -x $src .";
+
+  buildInputs = [ makeWrapper jdk ];
+
+  installPhase = ''
+    mkdir -p $out/share
+    cp usr/lib/ipscan/ipscan-linux64-${version}.jar $out/share/${pname}-${version}.jar
+
+    makeWrapper ${jre}/bin/java $out/bin/ipscan \
+      --prefix LD_LIBRARY_PATH : "$out/lib/:${stdenv.lib.makeLibraryPath [ swt xorg.libXtst ]}" \
+      --add-flags "-Xmx256m -cp $out/share/${pname}-${version}.jar:${swt}/jars/swt.jar net.azib.ipscan.Main"
+
+    mkdir -p $out/share/applications
+    cp usr/share/applications/ipscan.desktop $out/share/applications/ipscan.desktop
+    substituteInPlace $out/share/applications/ipscan.desktop --replace "/usr/bin" "$out/bin"
+
+    mkdir -p $out/share/pixmaps
+    cp usr/share/pixmaps/ipscan.png $out/share/pixmaps/ipscan.png
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Fast and friendly network scanner";
+    homepage = https://angryip.org;
+    license = licenses.gpl2;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ kylesferrazza ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/jd-gui/default.nix b/nixpkgs/pkgs/tools/security/jd-gui/default.nix
new file mode 100644
index 000000000000..af88fd6270f4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/jd-gui/default.nix
@@ -0,0 +1,105 @@
+{ stdenv, fetchFromGitHub, jre, jdk, gradle, makeDesktopItem, perl, writeText, runtimeShell }:
+
+let
+  pname = "jd-gui";
+  version = "1.6.6";
+
+  src = fetchFromGitHub {
+    owner = "java-decompiler";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "010bd3q2m4jy4qz5ahdx86b5f558s068gbjlbpdhq3bhh4yrjy20";
+  };
+
+  deps = stdenv.mkDerivation {
+    name = "${pname}-deps";
+    inherit src;
+
+    nativeBuildInputs = [ jdk perl gradle ];
+
+    buildPhase = ''
+      export GRADLE_USER_HOME=$(mktemp -d);
+      gradle --no-daemon jar
+    '';
+
+    # Mavenize dependency paths
+    # e.g. org.codehaus.groovy/groovy/2.4.0/{hash}/groovy-2.4.0.jar -> org/codehaus/groovy/groovy/2.4.0/groovy-2.4.0.jar
+    installPhase = ''
+      find $GRADLE_USER_HOME/caches/modules-2 -type f -regex '.*\.\(jar\|pom\)' \
+        | perl -pe 's#(.*/([^/]+)/([^/]+)/([^/]+)/[0-9a-f]{30,40}/([^/\s]+))$# ($x = $2) =~ tr|\.|/|; "install -Dm444 $1 \$out/$x/$3/$4/$5" #e' \
+        | sh
+    '';
+
+    outputHashAlgo = "sha256";
+    outputHashMode = "recursive";
+    outputHash = "1qil12s0daxpxj5xj5dj6s2k89is0kiir2vcafkm3lasc41acmk3";
+  };
+
+  # Point to our local deps repo
+  gradleInit = writeText "init.gradle" ''
+    logger.lifecycle 'Replacing Maven repositories with ${deps}...'
+
+    gradle.projectsLoaded {
+      rootProject.allprojects {
+        buildscript {
+          repositories {
+            clear()
+            maven { url '${deps}' }
+          }
+        }
+        repositories {
+          clear()
+          maven { url '${deps}' }
+        }
+      }
+    }
+  '';
+
+  desktopItem = launcher: makeDesktopItem {
+    name = "jd-gui";
+    exec = "${launcher} %F";
+    icon = "jd-gui";
+    comment = "Java Decompiler JD-GUI";
+    desktopName = "JD-GUI";
+    genericName = "Java Decompiler";
+    mimeType = "application/java;application/java-vm;application/java-archive";
+    categories = "Development;Debugger;";
+    extraEntries="StartupWMClass=org-jd-gui-App";
+  };
+
+in stdenv.mkDerivation rec {
+  inherit pname version src;
+  name = "${pname}-${version}";
+
+  nativeBuildInputs = [ jdk gradle ];
+
+  buildPhase = ''
+    export GRADLE_USER_HOME=$(mktemp -d)
+    gradle --offline --no-daemon --info --init-script ${gradleInit} jar
+  '';
+
+  installPhase = let
+    jar = "$out/share/jd-gui/${name}.jar";
+  in ''
+    mkdir -p $out/bin $out/share/{jd-gui,icons/hicolor/128x128/apps}
+    cp build/libs/${name}.jar ${jar}
+    cp src/linux/resources/jd_icon_128.png $out/share/icons/hicolor/128x128/apps/jd-gui.png
+
+    cat > $out/bin/jd-gui <<EOF
+    #!${runtimeShell}
+    export JAVA_HOME=${jre}
+    exec ${jre}/bin/java -jar ${jar} "\$@"
+    EOF
+    chmod +x $out/bin/jd-gui
+
+    ${(desktopItem "$out/bin/jd-gui").buildCommand}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Fast Java Decompiler with powerful GUI";
+    homepage    = "https://java-decompiler.github.io/";
+    license     = licenses.gpl3;
+    platforms   = platforms.unix;
+    maintainers = [ maintainers.thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/john/default.nix b/nixpkgs/pkgs/tools/security/john/default.nix
new file mode 100644
index 000000000000..17e02e736dc4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/john/default.nix
@@ -0,0 +1,75 @@
+{ stdenv, fetchurl, openssl, nss, nspr, kerberos, gmp, zlib, libpcap, re2
+, gcc, python3Packages, perl, perlPackages, makeWrapper
+}:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  pname = "john";
+  version = "1.9.0-jumbo-1";
+
+  src = fetchurl {
+    url = "http://www.openwall.com/john/k/${pname}-${version}.tar.xz";
+    sha256 = "0fvz3v41hnaiv1ggpxanfykyfjq79cwp9qcqqn63vic357w27lgm";
+  };
+
+  postPatch = ''
+    sed -ri -e '
+      s!^(#define\s+CFG_[A-Z]+_NAME\s+).*/!\1"'"$out"'/etc/john/!
+      /^#define\s+JOHN_SYSTEMWIDE/s!/usr!'"$out"'!
+    ' src/params.h
+    sed -ri -e '/^\.include/ {
+      s!\$JOHN!'"$out"'/etc/john!
+      s!^(\.include\s*)<([^./]+\.conf)>!\1"'"$out"'/etc/john/\2"!
+    }' run/*.conf
+  '';
+
+  preConfigure = ''
+    cd src
+    # Makefile.in depends on AS and LD being set to CC, which is set by default in configure.ac.
+    # This ensures we override the environment variables set in cc-wrapper/setup-hook.sh
+    export AS=$CC
+    export LD=$CC
+  '';
+  configureFlags = [
+    "--disable-native-tests"
+    "--with-systemwide"
+  ];
+
+  buildInputs = [ openssl nss nspr kerberos gmp zlib libpcap re2 ];
+  nativeBuildInputs = [ gcc python3Packages.wrapPython perl makeWrapper ];
+  propagatedBuildInputs = (with python3Packages; [ dpkt scapy lxml ]) ++ # For pcap2john.py
+                          (with perlPackages; [ DigestMD4 DigestSHA1 GetoptLong # For pass_gen.pl
+                                                perlldap ]); # For sha-dump.pl
+                          # TODO: Get dependencies for radius2john.pl and lion2john-alt.pl
+
+  # gcc -DAC_BUILT -Wall vncpcap2john.o memdbg.o -g    -lpcap -fopenmp -o ../run/vncpcap2john
+  # gcc: error: memdbg.o: No such file or directory
+  enableParallelBuilding = false;
+
+  postInstall = ''
+    mkdir -p "$out/bin" "$out/etc/john" "$out/share/john" "$out/share/doc/john" "$out/share/john/rules"
+    find -L ../run -mindepth 1 -maxdepth 1 -type f -executable \
+      -exec cp -d {} "$out/bin" \;
+    cp -vt "$out/etc/john" ../run/*.conf
+    cp -vt "$out/share/john" ../run/*.chr ../run/password.lst
+    cp -vt "$out/share/john/rules" ../run/rules/*.rule
+    cp -vrt "$out/share/doc/john" ../doc/*
+  '';
+
+  postFixup = ''
+    wrapPythonPrograms
+
+    for i in $out/bin/*.pl; do
+      wrapProgram "$i" --prefix PERL5LIB : $PERL5LIB
+    done
+  '';
+
+  meta = {
+    description = "John the Ripper password cracker";
+    license = licenses.gpl2;
+    homepage = https://github.com/magnumripper/JohnTheRipper/;
+    maintainers = with maintainers; [ offline matthewbauer ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/jwt-cli/default.nix b/nixpkgs/pkgs/tools/security/jwt-cli/default.nix
new file mode 100644
index 000000000000..83b630a4f4f6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/jwt-cli/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub, rustPlatform, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "jwt-cli";
+  version = "2.5.1";
+
+  src = fetchFromGitHub {
+    owner = "mike-engel";
+    repo = pname;
+    rev = version;
+    sha256 = "1p0c4398kwczwvl4krvfdhg1ixp1gj9nmvzqqv2xlmvrw1qsin8w";
+  };
+
+  cargoSha256 = "005y92acsn5j490jkp23ny7bsjd9ql1glybmbh4cyc8b15hmy618";
+
+  buildInputs = stdenv.lib.optional stdenv.isDarwin Security;
+
+  meta = with stdenv.lib; {
+    description = "Super fast CLI tool to decode and encode JWTs";
+    homepage = "https://github.com/mike-engel/jwt-cli";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ rycee ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/keybase/default.nix b/nixpkgs/pkgs/tools/security/keybase/default.nix
new file mode 100644
index 000000000000..1edf86675c31
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/keybase/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, substituteAll, lib, buildGoPackage, fetchFromGitHub
+, AVFoundation, AudioToolbox, ImageIO, CoreMedia
+, Foundation, CoreGraphics, MediaToolbox
+, gnupg
+}:
+
+buildGoPackage rec {
+  pname = "keybase";
+  version = "5.0.0";
+
+  goPackagePath = "github.com/keybase/client";
+  subPackages = [ "go/kbnm" "go/keybase" ];
+
+  dontRenameImports = true;
+
+  src = fetchFromGitHub {
+    owner = "keybase";
+    repo = "client";
+    rev = "v${version}";
+    sha256 = "0cxxqmgp82qi2b1fljyfa38is94y8ghb2pd31nbyh8y4wnmi0x1s";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths-keybase.patch;
+      gpg = "${gnupg}/bin/gpg";
+      gpg2 = "${gnupg}/bin/gpg2";
+    })
+  ];
+
+  buildInputs = stdenv.lib.optionals stdenv.isDarwin [ AVFoundation AudioToolbox ImageIO CoreMedia Foundation CoreGraphics MediaToolbox ];
+  buildFlags = [ "-tags production" ];
+
+  meta = with stdenv.lib; {
+    homepage = https://www.keybase.io/;
+    description = "The Keybase official command-line utility and service.";
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ carlsverre np rvolosatovs ];
+    license = licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/keybase/fix-paths-keybase.patch b/nixpkgs/pkgs/tools/security/keybase/fix-paths-keybase.patch
new file mode 100644
index 000000000000..b3de7bbb530d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/keybase/fix-paths-keybase.patch
@@ -0,0 +1,16 @@
+diff --git a/go/libkb/gpg_cli.go b/go/libkb/gpg_cli.go
+index 3c7c6257..ae8f7e2f 100644
+--- a/go/libkb/gpg_cli.go
++++ b/go/libkb/gpg_cli.go
+@@ -54,9 +54,9 @@ func (g *GpgCLI) Configure(mctx MetaContext) (err error) {
+ 	if len(prog) > 0 {
+ 		err = canExec(prog)
+ 	} else {
+-		prog, err = exec.LookPath("gpg2")
++		prog, err = exec.LookPath("@gpg2@")
+ 		if err != nil {
+-			prog, err = exec.LookPath("gpg")
++			prog, err = exec.LookPath("@gpg@")
+ 		}
+ 	}
+ 	if err != nil {
diff --git a/nixpkgs/pkgs/tools/security/keybase/gui.nix b/nixpkgs/pkgs/tools/security/keybase/gui.nix
new file mode 100644
index 000000000000..2ec97f882367
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/keybase/gui.nix
@@ -0,0 +1,114 @@
+{ stdenv, fetchurl, alsaLib, atk, cairo, cups, udev
+, dbus, expat, fontconfig, freetype, gdk-pixbuf, glib, gtk3, libappindicator-gtk3
+, libnotify, nspr, nss, pango, systemd, xorg, autoPatchelfHook, wrapGAppsHook
+, runtimeShell, gsettings-desktop-schemas }:
+
+let
+  versionSuffix = "20191114203213.f73f97dac6";
+in
+
+stdenv.mkDerivation rec {
+  pname = "keybase-gui";
+  version = "5.0.0"; # Find latest version from https://prerelease.keybase.io/deb/dists/stable/main/binary-amd64/Packages
+
+  src = fetchurl {
+    url = "https://s3.amazonaws.com/prerelease.keybase.io/linux_binaries/deb/keybase_${version + "-" + versionSuffix}_amd64.deb";
+    sha256 = "e175e52a6355d8359d66ef4b445981b572c513754329d5c7f75ad7bb14ec348f";
+  };
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    alsaLib
+    atk
+    cairo
+    cups
+    dbus
+    expat
+    fontconfig
+    freetype
+    gdk-pixbuf
+    glib
+    gsettings-desktop-schemas
+    gtk3
+    libappindicator-gtk3
+    libnotify
+    nspr
+    nss
+    pango
+    systemd
+    xorg.libX11
+    xorg.libXScrnSaver
+    xorg.libXcomposite
+    xorg.libXcursor
+    xorg.libXdamage
+    xorg.libXext
+    xorg.libXfixes
+    xorg.libXi
+    xorg.libXrandr
+    xorg.libXrender
+    xorg.libXtst
+    xorg.libxcb
+  ];
+
+  runtimeDependencies = [
+    udev.lib
+    libappindicator-gtk3
+  ];
+
+  dontBuild = true;
+  dontConfigure = true;
+  dontPatchELF = true;
+
+  unpackPhase = ''
+    ar xf $src
+    tar xf data.tar.xz
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv usr/share $out/share
+    mv opt/keybase $out/share/
+
+    cat > $out/bin/keybase-gui <<EOF
+    #!${runtimeShell}
+
+    checkFailed() {
+      if [ "\$NIX_SKIP_KEYBASE_CHECKS" = "1" ]; then
+        return
+      fi
+      echo "Set NIX_SKIP_KEYBASE_CHECKS=1 if you want to skip this check." >&2
+      exit 1
+    }
+
+    if [ ! -S "\$XDG_RUNTIME_DIR/keybase/keybased.sock" ]; then
+      echo "Keybase service doesn't seem to be running." >&2
+      echo "You might need to run: keybase service" >&2
+      checkFailed
+    fi
+
+    if [ -z "\$(keybase status | grep kbfsfuse)" ]; then
+      echo "Could not find kbfsfuse client in keybase status." >&2
+      echo "You might need to run: kbfsfuse" >&2
+      checkFailed
+    fi
+
+    exec $out/share/keybase/Keybase "\$@"
+    EOF
+    chmod +x $out/bin/keybase-gui
+
+    substituteInPlace $out/share/applications/keybase.desktop \
+      --replace run_keybase $out/bin/keybase-gui
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://www.keybase.io/;
+    description = "The Keybase official GUI";
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ rvolosatovs puffnfresh np ];
+    license = licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/keybase/kbfs.nix b/nixpkgs/pkgs/tools/security/keybase/kbfs.nix
new file mode 100644
index 000000000000..9448182a65a7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/keybase/kbfs.nix
@@ -0,0 +1,22 @@
+{ stdenv, buildGoPackage, fetchFromGitHub, keybase }:
+
+buildGoPackage {
+  pname = "kbfs";
+
+  inherit (keybase) src version;
+
+  goPackagePath = "github.com/keybase/client";
+  subPackages = [ "go/kbfs/kbfsfuse" "go/kbfs/kbfsgit/git-remote-keybase" ];
+
+  dontRenameImports = true;
+
+  buildFlags = [ "-tags production" ];
+
+  meta = with stdenv.lib; {
+    homepage = "https://keybase.io/docs/kbfs";
+    description = "The Keybase filesystem";
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ rvolosatovs bennofs np ];
+    license = licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/keycard-cli/default.nix b/nixpkgs/pkgs/tools/security/keycard-cli/default.nix
new file mode 100644
index 000000000000..a76c102b2bb9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/keycard-cli/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildGoPackage, fetchFromGitHub, pkgconfig, pcsclite }:
+
+buildGoPackage rec {
+  pname = "keycard-cli";
+  version = "0.0.12";
+
+  goPackagePath = "github.com/status-im/keycard-cli";
+  subPackages = [ "." ];
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ pcsclite ];
+
+  src = fetchFromGitHub {
+    owner = "status-im";
+    repo = pname;
+    rev = version;
+    sha256 = "1jnbaq57i6i9bad1hcvd28mxfqq6v8rv806c6l74vlb79ff4v1wb";
+  };
+
+  buildFlagsArray = [
+    "-ldflags="
+    "-X main.version=${version}"
+  ];
+
+  meta = with lib; {
+    description = "A command line tool and shell to manage keycards";
+    homepage = "https://keycard.status.im";
+    license = licenses.mpl20;
+    maintainers = [ maintainers.zimbatm ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/knockknock/default.nix b/nixpkgs/pkgs/tools/security/knockknock/default.nix
new file mode 100644
index 000000000000..ce7663b18cf9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/knockknock/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchFromGitHub, python2Packages, hping }:
+
+python2Packages.buildPythonApplication rec {
+  rev  = "bf14bbff";
+  name = "knockknock-r${rev}";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner  = "moxie0";
+    repo   = "knockknock";
+    sha256 = "1chpfs3w2vkjrgay69pbdr116z1jldv53fi768a1i05fdqhy1px4";
+  };
+
+  propagatedBuildInputs = [ python2Packages.pycrypto ];
+
+  # No tests
+  doCheck = false;
+
+  patchPhase = ''
+    sed -i '/build\//d' setup.py
+    substituteInPlace setup.py --replace "/etc" "$out/etc"
+    substituteInPlace knockknock.py --replace 'existsInPath("hping3")' '"${hping}/bin/hping3"'
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Simple, secure port knocking daemon and client written in Python";
+    homepage    = "http://www.thoughtcrime.org/software/knockknock/";
+    license     = licenses.gpl3;
+    maintainers = with maintainers; [ copumpkin ];
+    platforms   = platforms.linux;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/security/kpcli/default.nix b/nixpkgs/pkgs/tools/security/kpcli/default.nix
new file mode 100644
index 000000000000..9d4c590efa1e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/kpcli/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, makeWrapper, perl, perlPackages }:
+
+stdenv.mkDerivation rec {
+  version = "3.3";
+  pname = "kpcli";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/kpcli/${pname}-${version}.pl";
+    sha256 = "1z6dy70d3ag16vgzzafcnxb8gap3wahfmy4vd22fpgbrdd6riph4";
+  };
+
+  buildInputs = [ makeWrapper perl ];
+
+  phases = [ "installPhase" "fixupPhase" ];
+
+  installPhase = ''
+    mkdir -p $out/{bin,share}
+    cp ${src} $out/share/kpcli.pl
+    chmod +x $out/share/kpcli.pl
+
+    makeWrapper $out/share/kpcli.pl $out/bin/kpcli --set PERL5LIB \
+      "${with perlPackages; makePerlPath ([
+         CaptureTiny Clipboard Clone CryptRijndael SortNaturally TermReadKey TermShellUI FileKeePass TermReadLineGnu XMLParser
+      ] ++ stdenv.lib.optional stdenv.isDarwin MacPasteboard)}"
+  '';
+
+
+  meta = with stdenv.lib; {
+    description = "KeePass Command Line Interface";
+    longDescription = ''
+      KeePass Command Line Interface (CLI) / interactive shell. 
+      Use this program to access and manage your KeePass 1.x or 2.x databases from a Unix-like command line.
+    '';
+    license = licenses.artistic1;
+    homepage = http://kpcli.sourceforge.net;
+    platforms = platforms.all;
+    maintainers = [ maintainers.j-keck ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/krunner-pass/default.nix b/nixpkgs/pkgs/tools/security/krunner-pass/default.nix
new file mode 100644
index 000000000000..57174148160d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/krunner-pass/default.nix
@@ -0,0 +1,43 @@
+{ mkDerivation, lib, fetchFromGitHub, fetchpatch, cmake, extra-cmake-modules
+, kauth, krunner
+, pass, pass-otp ? null }:
+
+mkDerivation rec {
+  pname = "krunner-pass";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "akermu";
+    repo = "krunner-pass";
+    rev = "v${version}";
+    sha256 = "032fs2174ls545kjixbhzyd65wgxkw4s5vg8b20irc5c9ak3pxm0";
+  };
+
+  buildInputs  = [
+    kauth krunner
+    pass pass-otp
+  ];
+
+  nativeBuildInputs = [ cmake extra-cmake-modules ];
+
+  patches = [
+    (fetchpatch {
+      url = https://github.com/peterhoeg/krunner-pass/commit/be2695f4ae74b0cccec8294defcc92758583d96b.patch;
+      sha256 = "098dqnal57994p51p2srfzg4lgcd6ybp29h037llr9cdv02hdxvl";
+      name = "fix_build.patch";
+    })
+    ./pass-path.patch
+  ];
+
+  CXXFLAGS = [
+    ''-DNIXPKGS_PASS=\"${lib.getBin pass}/bin/pass\"''
+  ];
+
+  meta = with lib; {
+    description = "Integrates krunner with pass the unix standard password manager (https://www.passwordstore.org/)";
+    homepage = https://github.com/akermu/krunner-pass;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ ysndr ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/krunner-pass/pass-path.patch b/nixpkgs/pkgs/tools/security/krunner-pass/pass-path.patch
new file mode 100644
index 000000000000..4ceb3c5d92da
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/krunner-pass/pass-path.patch
@@ -0,0 +1,13 @@
+diff --git a/pass.cpp b/pass.cpp
+index c02f9d0..85c5b99 100644
+--- a/pass.cpp
++++ b/pass.cpp
+@@ -193,7 +193,7 @@ void Pass::run(const Plasma::RunnerContext &context, const Plasma::QueryMatch &m
+     } else {
+         args << "show" << match.text();
+     }
+-    pass->start("pass", args);
++    pass->start(NIXPKGS_PASS, args);
+
+     connect(pass, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished),
+             [=](int exitCode, QProcess::ExitStatus exitStatus) {
diff --git a/nixpkgs/pkgs/tools/security/kwalletcli/default.nix b/nixpkgs/pkgs/tools/security/kwalletcli/default.nix
new file mode 100644
index 000000000000..9356e2f53f94
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/kwalletcli/default.nix
@@ -0,0 +1,49 @@
+{ mkDerivation, fetchFromGitHub, lib, makeWrapper, pkgconfig
+, kcoreaddons, ki18n, kwallet, mksh, pinentry-qt }:
+
+mkDerivation rec {
+  pname = "kwalletcli";
+  version = "3.02";
+
+  src = fetchFromGitHub {
+    owner = "MirBSD";
+    repo = pname;
+    rev = "${pname}-${lib.replaceStrings [ "." ] [ "_" ] version}";
+    sha256 = "1gq45afb5nmmjfqxglv7wvcxcjd9822pc7nysq0350jmmmqwb474";
+  };
+
+  postPatch = ''
+    substituteInPlace GNUmakefile \
+      --replace -I/usr/include/KF5/KCoreAddons -I${kcoreaddons.dev}/include/KF5/KCoreAddons \
+      --replace -I/usr/include/KF5/KI18n       -I${ki18n.dev}/include/KF5/KI18n \
+      --replace -I/usr/include/KF5/KWallet     -I${kwallet.dev}/include/KF5/KWallet \
+      --replace /usr/bin                       $out/bin \
+      --replace /usr/share/man                 $out/share/man
+
+    substituteInPlace pinentry-kwallet \
+      --replace '/usr/bin/env mksh' ${mksh}/bin/mksh
+  '';
+
+  makeFlags = [ "KDE_VER=5" ];
+
+  nativeBuildInputs = [ makeWrapper pkgconfig ];
+  # if using just kwallet, cmake will be added as a buildInput and fail the build
+  propagatedBuildInputs = [ kcoreaddons ki18n (lib.getLib kwallet) ];
+
+  preInstall = ''
+    mkdir -p $out/bin $out/share/man/man1
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/pinentry-kwallet \
+      --prefix PATH : $out/bin:${lib.makeBinPath [ pinentry-qt ]} \
+      --set-default PINENTRY pinentry-qt
+  '';
+
+  meta = with lib; {
+    description = "Command-Line Interface to the KDE Wallet";
+    homepage = https://www.mirbsd.org/kwalletcli.htm;
+    license = licenses.miros;
+    maintainers = with maintainers; [ peterhoeg ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/lastpass-cli/default.nix b/nixpkgs/pkgs/tools/security/lastpass-cli/default.nix
new file mode 100644
index 000000000000..37da20225205
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/lastpass-cli/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, lib, fetchFromGitHub, asciidoc, cmake, docbook_xsl, pkgconfig
+, bash-completion, openssl, curl, libxml2, libxslt }:
+
+stdenv.mkDerivation rec {
+  pname = "lastpass-cli";
+  version = "1.3.3";
+
+  src = fetchFromGitHub {
+    owner = "lastpass";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "168jg8kjbylfgalhicn0llbykd7kdc9id2989gg0nxlgmnvzl58a";
+  };
+
+  nativeBuildInputs = [ asciidoc cmake docbook_xsl pkgconfig ];
+
+  buildInputs = [
+    bash-completion curl openssl libxml2 libxslt
+  ];
+
+  enableParallelBuilding = true;
+
+  installTargets = [ "install" "install-doc" ];
+
+  postInstall = ''
+    install -Dm644 -T ../contrib/lpass_zsh_completion $out/share/zsh/site-functions/_lpass
+    install -Dm644 -T ../contrib/completions-lpass.fish $out/share/fish/vendor_completions.d/lpass.fish
+  '';
+
+  meta = with lib; {
+    description = "Stores, retrieves, generates, and synchronizes passwords securely";
+    homepage    = "https://github.com/lastpass/lastpass-cli";
+    license     = licenses.gpl2Plus;
+    platforms   = platforms.unix;
+    maintainers = with maintainers; [ cstrahan ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/lesspass-cli/default.nix b/nixpkgs/pkgs/tools/security/lesspass-cli/default.nix
new file mode 100644
index 000000000000..76732170079c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/lesspass-cli/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, python3, fetchFromGitHub }:
+
+let
+  inherit (python3.pkgs) buildPythonApplication pytest mock pexpect;
+  repo = "lesspass";
+in
+buildPythonApplication rec {
+  pname = "lesspass-cli";
+  version = "9.0.0";
+
+  src = fetchFromGitHub {
+    owner = repo;
+    repo = repo;
+    rev = version;
+    sha256 = "1mdv0c0fn4d72iigy8hz4s7kf7q3pg4gjjadxwxyjwsalapnsapk";
+  };
+  sourceRoot = "source/cli";
+
+  # some tests are designed to run against code in the source directory - adapt to run against
+  # *installed* code
+  postPatch = ''
+    for f in tests/test_functional.py tests/test_interaction.py ; do
+      substituteInPlace $f --replace "lesspass/core.py" "-m lesspass.core"
+    done
+  '';
+
+  checkInputs = [ pytest mock pexpect ];
+  checkPhase = ''
+    mv lesspass lesspass.hidden  # ensure we're testing against *installed* package
+    pytest tests
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Stateless password manager";
+    homepage = https://lesspass.com;
+    maintainers = with maintainers; [ jasoncarr ];
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/libacr38u/default.nix b/nixpkgs/pkgs/tools/security/libacr38u/default.nix
new file mode 100644
index 000000000000..248fbe008fc7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/libacr38u/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchurl, pkgconfig, pcsclite , libusb }:
+
+stdenv.mkDerivation {
+  version = "1.7.11";
+  pname = "libacr38u";
+
+  src = fetchurl {
+    url = "http://http.debian.net/debian/pool/main/a/acr38/acr38_1.7.11.orig.tar.bz2";
+    sha256 = "0lxbq17y51cablx6bcd89klwnyigvkz0rsf9nps1a97ggnllyzkx";
+  };
+
+  doCheck = true;
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ pcsclite libusb ];
+
+  preBuild = ''
+    makeFlagsArray=(usbdropdir="$out/pcsc/drivers");
+  '';
+
+  meta = with stdenv.lib; {
+    description = "ACR38U smartcard reader driver for pcsclite";
+    longDescription = ''
+      A PC/SC IFD handler implementation for the ACS ACR38U
+      smartcard readers. This driver is for the non-CCID version only.
+
+      This package is needed to communicate with the ACR38U smartcard readers through
+      the PC/SC Lite resource manager (pcscd).
+
+      It can be enabled in /etc/nixos/configuration.nix by adding:
+        services.pcscd.enable = true;
+        services.pcscd.plugins = [ libacr38u ];
+
+      The package is based on the debian package libacr38u.
+    '';
+    homepage = https://www.acs.com.hk;
+    license = licenses.lgpl2Plus;
+    maintainers = with maintainers; [ berce ];
+    platforms = with platforms; unix;
+  };
+} 
diff --git a/nixpkgs/pkgs/tools/security/libmodsecurity/default.nix b/nixpkgs/pkgs/tools/security/libmodsecurity/default.nix
new file mode 100644
index 000000000000..17861ac2da60
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/libmodsecurity/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig
+, doxygen, perl, valgrind
+, curl, geoip, libxml2, lmdb, lua, pcre, yajl }:
+
+stdenv.mkDerivation rec {
+  pname = "libmodsecurity";
+  version = "3.0.3";
+
+  src = fetchFromGitHub {
+    owner = "SpiderLabs";
+    repo = "ModSecurity";
+    fetchSubmodules = true;
+    rev = "v${version}";
+    sha256 = "00g2407g2679zv73q67zd50z0f1g1ij734ssv2pp77z4chn5dzib";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig doxygen ];
+
+  buildInputs = [ perl valgrind curl geoip libxml2 lmdb lua pcre yajl ];
+
+  configureFlags = [
+    "--enable-static"
+    "--with-curl=${curl.dev}"
+    "--with-libxml=${libxml2.dev}"
+    "--with-pcre=${pcre.dev}"
+    "--with-yajl=${yajl}"
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = ''
+      ModSecurity v3 library component.
+    '';
+    longDescription = ''
+      Libmodsecurity is one component of the ModSecurity v3 project. The
+      library codebase serves as an interface to ModSecurity Connectors taking
+      in web traffic and applying traditional ModSecurity processing. In
+      general, it provides the capability to load/interpret rules written in
+      the ModSecurity SecRules format and apply them to HTTP content provided
+      by your application via Connectors.
+    '';
+    homepage = https://modsecurity.org/;
+    license = licenses.asl20;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ izorkin ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/logkeys/default.nix b/nixpkgs/pkgs/tools/security/logkeys/default.nix
new file mode 100644
index 000000000000..f06ce2f246a4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/logkeys/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub, autoconf, automake, which, procps, kbd }:
+
+stdenv.mkDerivation {
+  pname = "logkeys";
+  version = "2018-01-22";
+
+  src = fetchFromGitHub {
+    owner = "kernc";
+    repo = "logkeys";
+    rev = "7a9f19fb6b152d9f00a0b3fe29ab266ff1f88129";
+    sha256 = "1k6kj0913imwh53lh6hrhqmrpygqg2h462raafjsn7gbd3vkgx8n";
+  };
+
+  buildInputs = [ autoconf automake which procps kbd ];
+
+  postPatch = ''
+    substituteInPlace src/Makefile.am --replace 'root' '$(id -u)'
+    substituteInPlace configure.ac --replace '/dev/input' '/tmp'
+    sed -i '/chmod u+s/d' src/Makefile.am
+ '';
+
+  preConfigure = "./autogen.sh";
+
+  meta = with stdenv.lib; {
+    description = "A GNU/Linux keylogger that works!";
+    license = licenses.gpl3;
+    homepage = https://github.com/kernc/logkeys;
+    maintainers = with maintainers; [mikoim offline];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/lynis/default.nix b/nixpkgs/pkgs/tools/security/lynis/default.nix
new file mode 100644
index 000000000000..bbed166d7598
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/lynis/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, makeWrapper, fetchFromGitHub, gawk }:
+
+stdenv.mkDerivation rec {
+  pname = "lynis";
+  version = "2.7.5";
+
+  src = fetchFromGitHub {
+    owner = "CISOfy";
+    repo = pname;
+    rev = version;
+    sha256 = "1lkkbvxm0rgrrlx0szaxmf8ghc3d26wal96sgqk84m37mvs1f7p0";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postPatch = ''
+    grep -rl '/usr/local/lynis' ./ | xargs sed -i "s@/usr/local/lynis@$out/share/lynis@g"
+  '';
+
+  installPhase = ''
+    install -d $out/bin $out/share/lynis/plugins
+    cp -r include db default.prf $out/share/lynis/
+    cp -a lynis $out/bin
+    wrapProgram "$out/bin/lynis" --prefix PATH : ${stdenv.lib.makeBinPath [ gawk ]}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Security auditing tool for Linux, macOS, and UNIX-based systems";
+    homepage = "https://cisofy.com/lynis/";
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.ryneeverett ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/masscan/default.nix b/nixpkgs/pkgs/tools/security/masscan/default.nix
new file mode 100644
index 000000000000..f6f9e0df655a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/masscan/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, fetchFromGitHub, makeWrapper, libpcap }:
+
+stdenv.mkDerivation rec {
+  pname = "masscan";
+  version = "1.0.5";
+
+  src = fetchFromGitHub {
+    owner  = "robertdavidgraham";
+    repo   = "masscan";
+    rev    = version;
+    sha256 = "0q0c7bsf0pbl8napry1qyg0gl4pd8wn872h4mz9b56dx4rx90vqg";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  makeFlags = [ "PREFIX=$(out)" "GITVER=${version}" "CC=cc" ];
+
+  preInstall = ''
+    mkdir -p $out/bin
+  '';
+
+  postInstall = ''
+    mkdir -p $out/share/man/man8
+    mkdir -p $out/share/{doc,licenses}/masscan
+    mkdir -p $out/etc/masscan
+
+    cp data/exclude.conf $out/etc/masscan
+    cp -t $out/share/doc/masscan doc/algorithm.js doc/howto-afl.md doc/bot.html
+    cp doc/masscan.8 $out/share/man/man8/masscan.8
+    cp LICENSE $out/share/licenses/masscan/LICENSE
+
+    wrapProgram $out/bin/masscan --prefix LD_LIBRARY_PATH : "${libpcap}/lib"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Fast scan of the Internet";
+    homepage    = https://github.com/robertdavidgraham/masscan;
+    license     = licenses.agpl3;
+    platforms   = platforms.unix;
+    maintainers = with maintainers; [ rnhmjoj ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/mbox/default.nix b/nixpkgs/pkgs/tools/security/mbox/default.nix
new file mode 100644
index 000000000000..1ef282b8b6eb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/mbox/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchFromGitHub, openssl, which }:
+
+stdenv.mkDerivation {
+  name = "mbox-20140526";
+
+  src = fetchFromGitHub {
+    owner = "tsgates";
+    repo = "mbox";
+    rev = "a131424b6cb577e1c916bd0e8ffb2084a5f73048";
+    sha256 = "06qggqxnzcxnc34m6sbafxwr2p64x65m9zm5wp7pwyarcckhh2hd";
+  };
+
+  buildInputs = [ openssl which ];
+
+  preConfigure = ''
+    cd src
+    cp {.,}configsbox.h
+  '';
+  
+  doCheck = true;
+  checkPhase = ''
+    rm tests/test-*vim.sh tests/test-pip.sh
+
+    patchShebangs ./; dontPatchShebags=1
+    sed -i 's|^/bin/||' tests/test-fileops.sh
+
+    ./testall.sh
+  '';
+
+  meta = with stdenv.lib;
+    { description = "Lightweight sandboxing mechanism that any user can use without special privileges";
+      homepage = http://pdos.csail.mit.edu/mbox/;
+      maintainers = with maintainers; [ ehmry ];
+      license = licenses.bsd3;
+      platforms = [ "x86_64-linux" ];
+      broken = true;
+    };
+
+}
diff --git a/nixpkgs/pkgs/tools/security/meo/default.nix b/nixpkgs/pkgs/tools/security/meo/default.nix
new file mode 100644
index 000000000000..d10c16599643
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/meo/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchhg, openssl, pcre-cpp, qt4, boost, pkcs11helper }:
+
+stdenv.mkDerivation {
+  name = "meo-20121113";
+  
+  src = fetchhg {
+    url = http://oss.stamfest.net/hg/meo;
+    rev = "b48e5f16cff8";
+    sha256 = "0ifg7y28s89i9gwda6fyj1jbrykbcvq8bf1m6rxmdcv5afi3arbq";
+  };
+
+  buildFlags = [ "QMAKE=qmake" ];
+
+  buildInputs = [ openssl pcre-cpp qt4 boost pkcs11helper ];
+
+  preConfigure = ''
+    sed -i s,-mt$,, meo-gui/meo-gui.pro
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp tools/{meo,p11} $out/bin
+    cp meo-gui/meo-gui $out/bin
+    cp meo-gui/meo-gui $out/bin
+  '';
+
+  meta = {
+    homepage = http://oss.stamfest.net/wordpress/meo-multiple-eyepairs-only;
+    description = "Tools to use cryptography for things like four-eyes principles";
+    license = stdenv.lib.licenses.agpl3Plus;
+    maintainers = with stdenv.lib.maintainers; [viric];
+    platforms = with stdenv.lib.platforms; linux;
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/metasploit/Gemfile b/nixpkgs/pkgs/tools/security/metasploit/Gemfile
new file mode 100644
index 000000000000..2aae6fc49d96
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/metasploit/Gemfile
@@ -0,0 +1,4 @@
+# frozen_string_literal: true
+source "https://rubygems.org"
+
+gem "metasploit-framework", git: "https://github.com/rapid7/metasploit-framework", ref: "refs/tags/5.0.45"
diff --git a/nixpkgs/pkgs/tools/security/metasploit/Gemfile.lock b/nixpkgs/pkgs/tools/security/metasploit/Gemfile.lock
new file mode 100644
index 000000000000..931ea65f54a7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/metasploit/Gemfile.lock
@@ -0,0 +1,357 @@
+GIT
+  remote: https://github.com/rapid7/metasploit-framework
+  revision: 2b9e74c7a8a4423ea195e75abca1f56c354e5541
+  ref: refs/tags/5.0.45
+  specs:
+    metasploit-framework (5.0.45)
+      actionpack (~> 4.2.6)
+      activerecord (~> 4.2.6)
+      activesupport (~> 4.2.6)
+      aws-sdk-ec2
+      aws-sdk-iam
+      aws-sdk-s3
+      backports
+      bcrypt (= 3.1.12)
+      bcrypt_pbkdf
+      bit-struct
+      concurrent-ruby (= 1.0.5)
+      dnsruby
+      ed25519
+      em-http-request
+      faker
+      filesize
+      jsobfu
+      json
+      metasm
+      metasploit-concern
+      metasploit-credential
+      metasploit-model
+      metasploit-payloads (= 1.3.70)
+      metasploit_data_models (= 3.0.10)
+      metasploit_payloads-mettle (= 0.5.16)
+      mqtt
+      msgpack
+      nessus_rest
+      net-ssh
+      network_interface
+      nexpose
+      nokogiri
+      octokit
+      openssl-ccm
+      openvas-omp
+      packetfu
+      patch_finder
+      pcaprub
+      pdf-reader
+      pg (~> 0.20)
+      railties
+      rb-readline
+      recog
+      redcarpet
+      rex-arch
+      rex-bin_tools
+      rex-core
+      rex-encoder
+      rex-exploitation
+      rex-java
+      rex-mime
+      rex-nop
+      rex-ole
+      rex-powershell
+      rex-random_identifier
+      rex-registry
+      rex-rop_builder
+      rex-socket (= 0.1.17)
+      rex-sslscan
+      rex-struct2
+      rex-text
+      rex-zip
+      ruby-macho
+      ruby_smb
+      rubyntlm
+      rubyzip
+      sinatra
+      sqlite3
+      sshkey
+      thin
+      tzinfo
+      tzinfo-data
+      warden
+      windows_error
+      xdr
+      xmlrpc
+
+GEM
+  remote: https://rubygems.org/
+  specs:
+    Ascii85 (1.0.3)
+    actionpack (4.2.11.1)
+      actionview (= 4.2.11.1)
+      activesupport (= 4.2.11.1)
+      rack (~> 1.6)
+      rack-test (~> 0.6.2)
+      rails-dom-testing (~> 1.0, >= 1.0.5)
+      rails-html-sanitizer (~> 1.0, >= 1.0.2)
+    actionview (4.2.11.1)
+      activesupport (= 4.2.11.1)
+      builder (~> 3.1)
+      erubis (~> 2.7.0)
+      rails-dom-testing (~> 1.0, >= 1.0.5)
+      rails-html-sanitizer (~> 1.0, >= 1.0.3)
+    activemodel (4.2.11.1)
+      activesupport (= 4.2.11.1)
+      builder (~> 3.1)
+    activerecord (4.2.11.1)
+      activemodel (= 4.2.11.1)
+      activesupport (= 4.2.11.1)
+      arel (~> 6.0)
+    activesupport (4.2.11.1)
+      i18n (~> 0.7)
+      minitest (~> 5.1)
+      thread_safe (~> 0.3, >= 0.3.4)
+      tzinfo (~> 1.1)
+    addressable (2.7.0)
+      public_suffix (>= 2.0.2, < 5.0)
+    afm (0.2.2)
+    arel (6.0.4)
+    arel-helpers (2.10.0)
+      activerecord (>= 3.1.0, < 7)
+    aws-eventstream (1.0.3)
+    aws-partitions (1.208.0)
+    aws-sdk-core (3.66.0)
+      aws-eventstream (~> 1.0, >= 1.0.2)
+      aws-partitions (~> 1.0)
+      aws-sigv4 (~> 1.1)
+      jmespath (~> 1.0)
+    aws-sdk-ec2 (1.106.0)
+      aws-sdk-core (~> 3, >= 3.61.1)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-iam (1.29.0)
+      aws-sdk-core (~> 3, >= 3.61.1)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-kms (1.24.0)
+      aws-sdk-core (~> 3, >= 3.61.1)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-s3 (1.48.0)
+      aws-sdk-core (~> 3, >= 3.61.1)
+      aws-sdk-kms (~> 1)
+      aws-sigv4 (~> 1.1)
+    aws-sigv4 (1.1.0)
+      aws-eventstream (~> 1.0, >= 1.0.2)
+    backports (3.15.0)
+    bcrypt (3.1.12)
+    bcrypt_pbkdf (1.0.1)
+    bindata (2.4.4)
+    bit-struct (0.16)
+    builder (3.2.3)
+    concurrent-ruby (1.0.5)
+    cookiejar (0.3.3)
+    crass (1.0.4)
+    daemons (1.3.1)
+    dnsruby (1.61.3)
+      addressable (~> 2.5)
+    ed25519 (1.2.4)
+    em-http-request (1.1.5)
+      addressable (>= 2.3.4)
+      cookiejar (!= 0.3.1)
+      em-socksify (>= 0.3)
+      eventmachine (>= 1.0.3)
+      http_parser.rb (>= 0.6.0)
+    em-socksify (0.3.2)
+      eventmachine (>= 1.0.0.beta.4)
+    erubis (2.7.0)
+    eventmachine (1.2.7)
+    faker (2.2.1)
+      i18n (>= 0.8)
+    faraday (0.15.4)
+      multipart-post (>= 1.2, < 3)
+    filesize (0.2.0)
+    hashery (2.1.2)
+    http_parser.rb (0.6.0)
+    i18n (0.9.5)
+      concurrent-ruby (~> 1.0)
+    jmespath (1.4.0)
+    jsobfu (0.4.2)
+      rkelly-remix
+    json (2.2.0)
+    loofah (2.2.3)
+      crass (~> 1.0.2)
+      nokogiri (>= 1.5.9)
+    metasm (1.0.4)
+    metasploit-concern (2.0.5)
+      activemodel (~> 4.2.6)
+      activesupport (~> 4.2.6)
+      railties (~> 4.2.6)
+    metasploit-credential (3.0.3)
+      metasploit-concern
+      metasploit-model
+      metasploit_data_models (>= 3.0.0)
+      net-ssh
+      pg
+      railties
+      rex-socket
+      rubyntlm
+      rubyzip
+    metasploit-model (2.0.4)
+      activemodel (~> 4.2.6)
+      activesupport (~> 4.2.6)
+      railties (~> 4.2.6)
+    metasploit-payloads (1.3.70)
+    metasploit_data_models (3.0.10)
+      activerecord (~> 4.2.6)
+      activesupport (~> 4.2.6)
+      arel-helpers
+      metasploit-concern
+      metasploit-model
+      pg
+      postgres_ext
+      railties (~> 4.2.6)
+      recog (~> 2.0)
+    metasploit_payloads-mettle (0.5.16)
+    mini_portile2 (2.4.0)
+    minitest (5.11.3)
+    mqtt (0.5.0)
+    msgpack (1.3.1)
+    multipart-post (2.1.1)
+    nessus_rest (0.1.6)
+    net-ssh (5.2.0)
+    network_interface (0.0.2)
+    nexpose (7.2.1)
+    nokogiri (1.10.4)
+      mini_portile2 (~> 2.4.0)
+    octokit (4.14.0)
+      sawyer (~> 0.8.0, >= 0.5.3)
+    openssl-ccm (1.2.2)
+    openvas-omp (0.0.4)
+    packetfu (1.1.13)
+      pcaprub
+    patch_finder (1.0.2)
+    pcaprub (0.13.0)
+    pdf-reader (2.2.1)
+      Ascii85 (~> 1.0.0)
+      afm (~> 0.2.1)
+      hashery (~> 2.0)
+      ruby-rc4
+      ttfunk
+    pg (0.21.0)
+    pg_array_parser (0.0.9)
+    postgres_ext (3.0.1)
+      activerecord (~> 4.0)
+      arel (>= 4.0.1)
+      pg_array_parser (~> 0.0.9)
+    public_suffix (4.0.1)
+    rack (1.6.11)
+    rack-protection (1.5.5)
+      rack
+    rack-test (0.6.3)
+      rack (>= 1.0)
+    rails-deprecated_sanitizer (1.0.3)
+      activesupport (>= 4.2.0.alpha)
+    rails-dom-testing (1.0.9)
+      activesupport (>= 4.2.0, < 5.0)
+      nokogiri (~> 1.6)
+      rails-deprecated_sanitizer (>= 1.0.1)
+    rails-html-sanitizer (1.2.0)
+      loofah (~> 2.2, >= 2.2.2)
+    railties (4.2.11.1)
+      actionpack (= 4.2.11.1)
+      activesupport (= 4.2.11.1)
+      rake (>= 0.8.7)
+      thor (>= 0.18.1, < 2.0)
+    rake (12.3.3)
+    rb-readline (0.5.5)
+    recog (2.3.2)
+      nokogiri
+    redcarpet (3.5.0)
+    rex-arch (0.1.13)
+      rex-text
+    rex-bin_tools (0.1.6)
+      metasm
+      rex-arch
+      rex-core
+      rex-struct2
+      rex-text
+    rex-core (0.1.13)
+    rex-encoder (0.1.4)
+      metasm
+      rex-arch
+      rex-text
+    rex-exploitation (0.1.21)
+      jsobfu
+      metasm
+      rex-arch
+      rex-encoder
+      rex-text
+    rex-java (0.1.5)
+    rex-mime (0.1.5)
+      rex-text
+    rex-nop (0.1.1)
+      rex-arch
+    rex-ole (0.1.6)
+      rex-text
+    rex-powershell (0.1.82)
+      rex-random_identifier
+      rex-text
+    rex-random_identifier (0.1.4)
+      rex-text
+    rex-registry (0.1.3)
+    rex-rop_builder (0.1.3)
+      metasm
+      rex-core
+      rex-text
+    rex-socket (0.1.17)
+      rex-core
+    rex-sslscan (0.1.5)
+      rex-core
+      rex-socket
+      rex-text
+    rex-struct2 (0.1.2)
+    rex-text (0.2.23)
+    rex-zip (0.1.3)
+      rex-text
+    rkelly-remix (0.0.7)
+    ruby-macho (2.2.0)
+    ruby-rc4 (0.1.5)
+    ruby_smb (1.1.0)
+      bindata
+      rubyntlm
+      windows_error
+    rubyntlm (0.6.2)
+    rubyzip (1.2.3)
+    sawyer (0.8.2)
+      addressable (>= 2.3.5)
+      faraday (> 0.8, < 2.0)
+    sinatra (1.4.8)
+      rack (~> 1.5)
+      rack-protection (~> 1.4)
+      tilt (>= 1.3, < 3)
+    sqlite3 (1.4.1)
+    sshkey (2.0.0)
+    thin (1.7.2)
+      daemons (~> 1.0, >= 1.0.9)
+      eventmachine (~> 1.0, >= 1.0.4)
+      rack (>= 1, < 3)
+    thor (0.20.3)
+    thread_safe (0.3.6)
+    tilt (2.0.9)
+    ttfunk (1.5.1)
+    tzinfo (1.2.5)
+      thread_safe (~> 0.1)
+    tzinfo-data (1.2019.2)
+      tzinfo (>= 1.0.0)
+    warden (1.2.7)
+      rack (>= 1.0)
+    windows_error (0.1.2)
+    xdr (2.0.0)
+      activemodel (>= 4.2.7)
+      activesupport (>= 4.2.7)
+    xmlrpc (0.3.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  metasploit-framework!
+
+BUNDLED WITH
+   1.17.2
diff --git a/nixpkgs/pkgs/tools/security/metasploit/default.nix b/nixpkgs/pkgs/tools/security/metasploit/default.nix
new file mode 100644
index 000000000000..8486f10bab05
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/metasploit/default.nix
@@ -0,0 +1,55 @@
+{ stdenv, fetchFromGitHub, makeWrapper, ruby, bundlerEnv }:
+
+# Maintainer notes for updating:
+# 1. increment version number in expression and in Gemfile
+# 2. run $ nix-shell --command "bundler install && bundix"
+#    in metasploit in nixpkgs
+# 3. run $ sed -i '/[ ]*dependencies =/d' gemset.nix
+# 4. run $ nix-build -A metasploit ../../../../
+# 5. update sha256sum in expression
+# 6. run step 3 again
+
+let
+  env = bundlerEnv {
+    inherit ruby;
+    name = "metasploit-bundler-env";
+    gemdir = ./.;
+  };
+in stdenv.mkDerivation rec {
+  pname = "metasploit-framework";
+  version = "5.0.45";
+
+  src = fetchFromGitHub {
+    owner = "rapid7";
+    repo = "metasploit-framework";
+    rev = version;
+    sha256 = "16jl3fkfbwl4wwbj2zrq9yr8y8brkhj9641hplc8idv8gaqkgmm5";
+  };
+
+  buildInputs = [ makeWrapper ];
+
+  dontPatchELF = true; # stay away from exploit executables
+
+  installPhase = ''
+    mkdir -p $out/{bin,share/msf}
+
+    cp -r * $out/share/msf
+
+    (
+      cd $out/share/msf/
+      for i in msf*; do
+        makeWrapper ${env}/bin/bundle $out/bin/$i \
+          --add-flags "exec ${ruby}/bin/ruby $out/share/msf/$i"
+      done
+    )
+
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Metasploit Framework - a collection of exploits";
+    homepage = https://github.com/rapid7/metasploit-framework/wiki;
+    platforms = platforms.unix;
+    license = licenses.bsd3;
+    maintainers = [ maintainers.makefu ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/metasploit/gemset.nix b/nixpkgs/pkgs/tools/security/metasploit/gemset.nix
new file mode 100644
index 000000000000..28cc83b240f2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/metasploit/gemset.nix
@@ -0,0 +1,1293 @@
+{
+  actionpack = {
+    dependencies = ["actionview" "activesupport" "rack" "rack-test" "rails-dom-testing" "rails-html-sanitizer"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rmldsk3a4lwxk0lrp6x1nz1v1r2xmbm3300l4ghgfygv3grdwjh";
+      type = "gem";
+    };
+    version = "4.2.11.1";
+  };
+  actionview = {
+    dependencies = ["activesupport" "builder" "erubis" "rails-dom-testing" "rails-html-sanitizer"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0x7vjn8q6blzyf7j3kwg0ciy7vnfh28bjdkd1mp9k4ghp9jn0g9p";
+      type = "gem";
+    };
+    version = "4.2.11.1";
+  };
+  activemodel = {
+    dependencies = ["activesupport" "builder"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1c1x0rd6wnk1f0gsmxs6x3gx7yf6fs9qqkdv7r4hlbcdd849in33";
+      type = "gem";
+    };
+    version = "4.2.11.1";
+  };
+  activerecord = {
+    dependencies = ["activemodel" "activesupport" "arel"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07ixiwi0zzs9skqarvpfamsnay7npfswymrn28ngxaf8hi279q5p";
+      type = "gem";
+    };
+    version = "4.2.11.1";
+  };
+  activesupport = {
+    dependencies = ["i18n" "minitest" "thread_safe" "tzinfo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vbq7a805bfvyik2q3kl9s3r418f5qzvysqbz2cwy4hr7m2q4ir6";
+      type = "gem";
+    };
+    version = "4.2.11.1";
+  };
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fvchp2rhp2rmigx7qglf69xvjqvzq7x0g49naliw29r2bz656sy";
+      type = "gem";
+    };
+    version = "2.7.0";
+  };
+  afm = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06kj9hgd0z8pj27bxp2diwqh6fv7qhwwm17z64rhdc4sfn76jgn8";
+      type = "gem";
+    };
+    version = "0.2.2";
+  };
+  arel = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nfcrdiys6q6ylxiblky9jyssrw2xj96fmxmal7f4f0jj3417vj4";
+      type = "gem";
+    };
+    version = "6.0.4";
+  };
+  arel-helpers = {
+    dependencies = ["activerecord"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lb52rd20ix7khh70vrwd85qivir9sis62s055k3zr5h9iy3lyqi";
+      type = "gem";
+    };
+    version = "2.10.0";
+  };
+  Ascii85 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0658m37jjjn6drzqg1gk4p6c205mgp7g1jh2d00n4ngghgmz5qvs";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  aws-eventstream = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "100g77a5ixg4p5zwq77f28n2pdkk0y481f7v83qrlmnj22318qq6";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  aws-partitions = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0vkjw8cxssfwplrcl593gp4jxxiajihb8gqmpgzyac8i3xigpacb";
+      type = "gem";
+    };
+    version = "1.208.0";
+  };
+  aws-sdk-core = {
+    dependencies = ["aws-eventstream" "aws-partitions" "aws-sigv4" "jmespath"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18h35j7wp7n6zc5r6dpixjcyjshqmpkhwph9qgpv2g0db37zlxyk";
+      type = "gem";
+    };
+    version = "3.66.0";
+  };
+  aws-sdk-ec2 = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1sb04blmc0lgdgq909cj8cm63zl2idgc5mcysj6cg4rvm8699ahp";
+      type = "gem";
+    };
+    version = "1.106.0";
+  };
+  aws-sdk-iam = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ypv1cmmrc496myllqd8dqz422qm1i0bhskkvqb9b2lbagmzr3l9";
+      type = "gem";
+    };
+    version = "1.29.0";
+  };
+  aws-sdk-kms = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14blvvfz67rhffi4ahby50jiip5f0hm85mcxlx6y93g0cfrnxh3m";
+      type = "gem";
+    };
+    version = "1.24.0";
+  };
+  aws-sdk-s3 = {
+    dependencies = ["aws-sdk-core" "aws-sdk-kms" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14iv2wqvvbiz0gdms21i9n6rh8390r1yg4zcf8pzzfplbqfwqw4w";
+      type = "gem";
+    };
+    version = "1.48.0";
+  };
+  aws-sigv4 = {
+    dependencies = ["aws-eventstream"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1dfc8i5cxjwlvi4b665lbpbwvks8a6wfy3vfmwr3pjdmxwdmc2cs";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  backports = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0cczfi1yp7a68bg7ipzi4lvrmi4xsi36n9a19krr4yb3nfwd8fn2";
+      type = "gem";
+    };
+    version = "3.15.0";
+  };
+  bcrypt = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ysblqxkclmnhrd0kmb5mr8p38mbar633gdsb14b7dhkhgawgzfy";
+      type = "gem";
+    };
+    version = "3.1.12";
+  };
+  bcrypt_pbkdf = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02vssr285m7kpsr47jdmzbar1h1d0mnkmyrpr1zg828isfmwii35";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  bindata = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0kz42nvxnk1j9cj0i8lcnhprcgdqsqska92g6l19ziadydfk2gqy";
+      type = "gem";
+    };
+    version = "2.4.4";
+  };
+  bit-struct = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1w7x1fh4a6inpb46imhdf4xrq0z4d6zdpg7sdf8n98pif2hx50sx";
+      type = "gem";
+    };
+    version = "0.16";
+  };
+  builder = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qibi5s67lpdv1wgcj66wcymcr04q6j4mzws6a479n0mlrmh5wr1";
+      type = "gem";
+    };
+    version = "3.2.3";
+  };
+  concurrent-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "183lszf5gx84kcpb779v6a2y0mx9sssy8dgppng1z9a505nj1qcf";
+      type = "gem";
+    };
+    version = "1.0.5";
+  };
+  cookiejar = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0q0kmbks9l3hl0wdq744hzy97ssq9dvlzywyqv9k9y1p3qc9va2a";
+      type = "gem";
+    };
+    version = "0.3.3";
+  };
+  crass = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bpxzy6gjw9ggjynlxschbfsgmx8lv3zw1azkjvnb8b9i895dqfi";
+      type = "gem";
+    };
+    version = "1.0.4";
+  };
+  daemons = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0l5gai3vd4g7aqff0k1mp41j9zcsvm2rbwmqn115a325k9r7pf4w";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  dnsruby = {
+    dependencies = ["addressable"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "139cbl2k934q7d50g7hi8r4im69ca3iv16y9plq9yc6mgjq1cgfk";
+      type = "gem";
+    };
+    version = "1.61.3";
+  };
+  ed25519 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1f5kr8za7hvla38fc0n9jiv55iq62k5bzclsa5kdb14l3r4w6qnw";
+      type = "gem";
+    };
+    version = "1.2.4";
+  };
+  em-http-request = {
+    dependencies = ["addressable" "cookiejar" "em-socksify" "eventmachine" "http_parser.rb"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13rxmbi0fv91n4sg300v3i9iiwd0jxv0i6xd0sp81dx3jlx7kasx";
+      type = "gem";
+    };
+    version = "1.1.5";
+  };
+  em-socksify = {
+    dependencies = ["eventmachine"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rk43ywaanfrd8180d98287xv2pxyl7llj291cwy87g1s735d5nk";
+      type = "gem";
+    };
+    version = "0.3.2";
+  };
+  erubis = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fj827xqjs91yqsydf0zmfyw9p4l2jz5yikg3mppz6d7fi8kyrb3";
+      type = "gem";
+    };
+    version = "2.7.0";
+  };
+  eventmachine = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wh9aqb0skz80fhfn66lbpr4f86ya2z5rx6gm5xlfhd05bj1ch4r";
+      type = "gem";
+    };
+    version = "1.2.7";
+  };
+  faker = {
+    dependencies = ["i18n"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wpzpqzpqd9jjzm3ap8182sfbnhdahcxpbg0dssbwq13qdf1s5xs";
+      type = "gem";
+    };
+    version = "2.2.1";
+  };
+  faraday = {
+    dependencies = ["multipart-post"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0s72m05jvzc1pd6cw1i289chas399q0a14xrwg4rvkdwy7bgzrh0";
+      type = "gem";
+    };
+    version = "0.15.4";
+  };
+  filesize = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17p7rf1x7h3ivaznb4n4kmxnnzj25zaviryqgn2n12v2kmibhp8g";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+  hashery = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qj8815bf7q6q7llm5rzdz279gzmpqmqqicxnzv066a020iwqffj";
+      type = "gem";
+    };
+    version = "2.1.2";
+  };
+  "http_parser.rb" = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15nidriy0v5yqfjsgsra51wmknxci2n2grliz78sf9pga3n0l7gi";
+      type = "gem";
+    };
+    version = "0.6.0";
+  };
+  i18n = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "038qvz7kd3cfxk8bvagqhakx68pfbnmghpdkx7573wbf0maqp9a3";
+      type = "gem";
+    };
+    version = "0.9.5";
+  };
+  jmespath = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1d4wac0dcd1jf6kc57891glih9w57552zgqswgy74d1xhgnk0ngf";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  jsobfu = {
+    dependencies = ["rkelly-remix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hchns89cfj0gggm2zbr7ghb630imxm2x2d21ffx2jlasn9xbkyk";
+      type = "gem";
+    };
+    version = "0.4.2";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sx97bm9by389rbzv8r1f43h06xcz8vwi3h5jv074gvparql7lcx";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  loofah = {
+    dependencies = ["crass" "nokogiri"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ccsid33xjajd0im2xv941aywi58z7ihwkvaf1w2bv89vn5bhsjg";
+      type = "gem";
+    };
+    version = "2.2.3";
+  };
+  metasm = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0mbmpc8vsi574s78f23bhiqk07sr6yrrrmk702lfv61ql4ah5l89";
+      type = "gem";
+    };
+    version = "1.0.4";
+  };
+  metasploit-concern = {
+    dependencies = ["activemodel" "activesupport" "railties"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0v9lm225fhzhnbjcc0vwb38ybikxwzlv8116rrrkndzs8qy79297";
+      type = "gem";
+    };
+    version = "2.0.5";
+  };
+  metasploit-credential = {
+    dependencies = ["metasploit-concern" "metasploit-model" "metasploit_data_models" "net-ssh" "pg" "railties" "rex-socket" "rubyntlm" "rubyzip"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0m6j149x502p00y2jzra65281dhhw3m8a41pwfn1sk9wv7aiclvl";
+      type = "gem";
+    };
+    version = "3.0.3";
+  };
+  metasploit-framework = {
+    dependencies = ["actionpack" "activerecord" "activesupport" "aws-sdk-ec2" "aws-sdk-iam" "aws-sdk-s3" "backports" "bcrypt" "bcrypt_pbkdf" "bit-struct" "concurrent-ruby" "dnsruby" "ed25519" "em-http-request" "faker" "filesize" "jsobfu" "json" "metasm" "metasploit-concern" "metasploit-credential" "metasploit-model" "metasploit-payloads" "metasploit_data_models" "metasploit_payloads-mettle" "mqtt" "msgpack" "nessus_rest" "net-ssh" "network_interface" "nexpose" "nokogiri" "octokit" "openssl-ccm" "openvas-omp" "packetfu" "patch_finder" "pcaprub" "pdf-reader" "pg" "railties" "rb-readline" "recog" "redcarpet" "rex-arch" "rex-bin_tools" "rex-core" "rex-encoder" "rex-exploitation" "rex-java" "rex-mime" "rex-nop" "rex-ole" "rex-powershell" "rex-random_identifier" "rex-registry" "rex-rop_builder" "rex-socket" "rex-sslscan" "rex-struct2" "rex-text" "rex-zip" "ruby-macho" "ruby_smb" "rubyntlm" "rubyzip" "sinatra" "sqlite3" "sshkey" "thin" "tzinfo" "tzinfo-data" "warden" "windows_error" "xdr" "xmlrpc"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      fetchSubmodules = false;
+      rev = "2b9e74c7a8a4423ea195e75abca1f56c354e5541";
+      sha256 = "16jl3fkfbwl4wwbj2zrq9yr8y8brkhj9641hplc8idv8gaqkgmm5";
+      type = "git";
+      url = "https://github.com/rapid7/metasploit-framework";
+    };
+    version = "5.0.45";
+  };
+  metasploit-model = {
+    dependencies = ["activemodel" "activesupport" "railties"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05pnai1cv00xw87rrz38dz4s3ss45s90290d0knsy1mq6rp8yvmw";
+      type = "gem";
+    };
+    version = "2.0.4";
+  };
+  metasploit-payloads = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01s3xmgw4fp2ic0wql8lswa86q3lgr3z687idx3xkfii3dskjpp3";
+      type = "gem";
+    };
+    version = "1.3.70";
+  };
+  metasploit_data_models = {
+    dependencies = ["activerecord" "activesupport" "arel-helpers" "metasploit-concern" "metasploit-model" "pg" "postgres_ext" "railties" "recog"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1h59lblfrx8gsnqr10wk958zp6rsjy3qib3hb87s3nm6m1zhm2bc";
+      type = "gem";
+    };
+    version = "3.0.10";
+  };
+  metasploit_payloads-mettle = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1x2rgs2r16m8z87j5z78vp49xvr2sr4dxjgbi6d0nxrlr52pd8yf";
+      type = "gem";
+    };
+    version = "0.5.16";
+  };
+  mini_portile2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15zplpfw3knqifj9bpf604rb3wc1vhq6363pd6lvhayng8wql5vy";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+  minitest = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0icglrhghgwdlnzzp4jf76b0mbc71s80njn5afyfjn4wqji8mqbq";
+      type = "gem";
+    };
+    version = "5.11.3";
+  };
+  mqtt = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0d1khsry5mf63y03r6v91f4vrbn88277ksv7d69z3xmqs9sgpri9";
+      type = "gem";
+    };
+    version = "0.5.0";
+  };
+  msgpack = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qr2mkm2i3m76zarvy7qgjl9596hmvjrg7x6w42vx8cfsbf5p0y1";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  multipart-post = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zgw9zlwh2a6i1yvhhc4a84ry1hv824d6g2iw2chs3k5aylpmpfj";
+      type = "gem";
+    };
+    version = "2.1.1";
+  };
+  nessus_rest = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1allyrd4rll333zbmsi3hcyg6cw1dhc4bg347ibsw191nswnp8ci";
+      type = "gem";
+    };
+    version = "0.1.6";
+  };
+  net-ssh = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "101wd2px9lady54aqmkibvy4j62zk32w0rjz4vnigyg974fsga40";
+      type = "gem";
+    };
+    version = "5.2.0";
+  };
+  network_interface = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xh4knfq77ii4pjzsd2z1p3nd6nrcdjhb2vi5gw36jqj43ffw0zp";
+      type = "gem";
+    };
+    version = "0.0.2";
+  };
+  nexpose = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0i108glkklwgjxhfhnlqf4b16plqf9b84qpfz0pnl2pbnal5af8m";
+      type = "gem";
+    };
+    version = "7.2.1";
+  };
+  nokogiri = {
+    dependencies = ["mini_portile2"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nmdrqqz1gs0fwkgzxjl4wr554gr8dc1fkrqjc2jpsvwgm41rygv";
+      type = "gem";
+    };
+    version = "1.10.4";
+  };
+  octokit = {
+    dependencies = ["sawyer"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1w7agbfg39jzqk81yad9xhscg31869277ysr2iwdvpjafl5lj4ha";
+      type = "gem";
+    };
+    version = "4.14.0";
+  };
+  openssl-ccm = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gxwxk657jya2s5m8cpckvgy5m7qx0hzfp8xvc0hg2wf1lg5gwp0";
+      type = "gem";
+    };
+    version = "1.2.2";
+  };
+  openvas-omp = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14xf614vd76qjdjxjv14mmjar6s64fwp4cwb7bv5g1wc29srg28x";
+      type = "gem";
+    };
+    version = "0.0.4";
+  };
+  packetfu = {
+    dependencies = ["pcaprub"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16ppq9wfxq4x2hss61l5brs3s6fmi8gb50mnp1nnnzb1asq4g8ll";
+      type = "gem";
+    };
+    version = "1.1.13";
+  };
+  patch_finder = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1md9scls55n1riw26vw1ak0ajq38dfygr36l0h00wqhv51cq745m";
+      type = "gem";
+    };
+    version = "1.0.2";
+  };
+  pcaprub = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0h4iarqdych6v4jm5s0ywkc01qspadz8sf6qn7pkqmszq4iqv67q";
+      type = "gem";
+    };
+    version = "0.13.0";
+  };
+  pdf-reader = {
+    dependencies = ["Ascii85" "afm" "hashery" "ruby-rc4" "ttfunk"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14lqdbiwn2qwgbvnnzxg7haqiy026d8x37hp45c3m9jb9rym92ps";
+      type = "gem";
+    };
+    version = "2.2.1";
+  };
+  pg = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00vhasqwc4f98qb4wxqn2h07fjwzhp5lwyi41j2gndi2g02wrdqh";
+      type = "gem";
+    };
+    version = "0.21.0";
+  };
+  pg_array_parser = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1034dhg8h53j48sfm373js54skg4vpndjga6hzn2zylflikrrf3s";
+      type = "gem";
+    };
+    version = "0.0.9";
+  };
+  postgres_ext = {
+    dependencies = ["activerecord" "arel" "pg_array_parser"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ni1ajzxvc17ba4rgl27cd3645ddbpqpfckv7m08sfgk015hh7dq";
+      type = "gem";
+    };
+    version = "3.0.1";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xnfv2j2bqgdpg2yq9i2rxby0w2sc9h5iyjkpaas2xknwrgmhdb0";
+      type = "gem";
+    };
+    version = "4.0.1";
+  };
+  rack = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g9926ln2lw12lfxm4ylq1h6nl0rafl10za3xvjzc87qvnqic87f";
+      type = "gem";
+    };
+    version = "1.6.11";
+  };
+  rack-protection = {
+    dependencies = ["rack"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0my0wlw4a5l3hs79jkx2xzv7djhajgf8d28k8ai1ddlnxxb0v7ss";
+      type = "gem";
+    };
+    version = "1.5.5";
+  };
+  rack-test = {
+    dependencies = ["rack"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0h6x5jq24makgv2fq5qqgjlrk74dxfy62jif9blk43llw8ib2q7z";
+      type = "gem";
+    };
+    version = "0.6.3";
+  };
+  rails-deprecated_sanitizer = {
+    dependencies = ["activesupport"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qxymchzdxww8bjsxj05kbf86hsmrjx40r41ksj0xsixr2gmhbbj";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  rails-dom-testing = {
+    dependencies = ["activesupport" "nokogiri" "rails-deprecated_sanitizer"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wssfqpn00byhvp2372p99mphkcj8qx6pf6646avwr9ifvq0q1x6";
+      type = "gem";
+    };
+    version = "1.0.9";
+  };
+  rails-html-sanitizer = {
+    dependencies = ["loofah"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ilwxzm3a7bql5c9q2n9g9nb1hax7vd8d65a5yp3d967ld97nvrq";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  railties = {
+    dependencies = ["actionpack" "activesupport" "rake" "thor"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bjf21z9maiiazc1if56nnh9xmgbkcqlpznv34f40a1hsvgk1d1m";
+      type = "gem";
+    };
+    version = "4.2.11.1";
+  };
+  rake = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cvaqarr1m84mhc006g3l1vw7sa5qpkcw0138lsxlf769zdllsgp";
+      type = "gem";
+    };
+    version = "12.3.3";
+  };
+  rb-readline = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14w79a121czmvk1s953qfzww30mqjb2zc0k9qhi0ivxxk3hxg6wy";
+      type = "gem";
+    };
+    version = "0.5.5";
+  };
+  recog = {
+    dependencies = ["nokogiri"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0kbv0j82zf90sc9hhwna2bkb5zv0nxagk22gxyfy82kjmcz71c6k";
+      type = "gem";
+    };
+    version = "2.3.2";
+  };
+  redcarpet = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0skcyx1h8b5ms0rp2zm3ql6g322b8c1adnkwkqyv7z3kypb4bm7k";
+      type = "gem";
+    };
+    version = "3.5.0";
+  };
+  rex-arch = {
+    dependencies = ["rex-text"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0cvdy2ysiphdig258lkicbxqq2y47bkl69kgj4kkj8w338rb5kwa";
+      type = "gem";
+    };
+    version = "0.1.13";
+  };
+  rex-bin_tools = {
+    dependencies = ["metasm" "rex-arch" "rex-core" "rex-struct2" "rex-text"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19q4cj7cis29k3zx9j2gp4h3ib0zig2fa4rs56c1gjr32f192zzk";
+      type = "gem";
+    };
+    version = "0.1.6";
+  };
+  rex-core = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1b9pf7f8m2zjck65dpp8h8v4n0a05kfas6cn9adv0w8d9z58aqvv";
+      type = "gem";
+    };
+    version = "0.1.13";
+  };
+  rex-encoder = {
+    dependencies = ["metasm" "rex-arch" "rex-text"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zm5jdxgyyp8pkfqwin34izpxdrmglx6vmk20ifnvcsm55c9m70z";
+      type = "gem";
+    };
+    version = "0.1.4";
+  };
+  rex-exploitation = {
+    dependencies = ["jsobfu" "metasm" "rex-arch" "rex-encoder" "rex-text"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0b2jg7mccwc34j9mfpndh7b387723qas38qsd906bs4s8b6hf05c";
+      type = "gem";
+    };
+    version = "0.1.21";
+  };
+  rex-java = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j58k02p5g9snkpak64sb4aymkrvrh9xpqh8wsnya4w7b86w2y6i";
+      type = "gem";
+    };
+    version = "0.1.5";
+  };
+  rex-mime = {
+    dependencies = ["rex-text"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15a14kz429h7pn81ysa6av3qijxjmxagjff6dyss5v394fxzxf4a";
+      type = "gem";
+    };
+    version = "0.1.5";
+  };
+  rex-nop = {
+    dependencies = ["rex-arch"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0aigf9qsqsmiraa6zvfy1a7cyvf7zc3iyhzxi6fjv5sb8f64d6ny";
+      type = "gem";
+    };
+    version = "0.1.1";
+  };
+  rex-ole = {
+    dependencies = ["rex-text"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pnzbqfnvbs0vc0z0ryszk3fxhgxrjd6gzwqa937rhlphwp5jpww";
+      type = "gem";
+    };
+    version = "0.1.6";
+  };
+  rex-powershell = {
+    dependencies = ["rex-random_identifier" "rex-text"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fcyiz8cgcv6pcn5w969ac4wwhr1cz6jk6kf6p8gyw5rjrlwfz0j";
+      type = "gem";
+    };
+    version = "0.1.82";
+  };
+  rex-random_identifier = {
+    dependencies = ["rex-text"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fg94sczff5c2rlvqqgw2dndlqyzjil5rjk3p9f46ss2hc8zxlbk";
+      type = "gem";
+    };
+    version = "0.1.4";
+  };
+  rex-registry = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wv812ghnz143vx10ixmv32ypj1xrzr4rh4kgam8d8wwjwxsgw1q";
+      type = "gem";
+    };
+    version = "0.1.3";
+  };
+  rex-rop_builder = {
+    dependencies = ["metasm" "rex-core" "rex-text"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xjd3d6wnbq4ym0d0m268md8fb16f2hbwrahvxnl14q63fj9i3wy";
+      type = "gem";
+    };
+    version = "0.1.3";
+  };
+  rex-socket = {
+    dependencies = ["rex-core"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "136szyv31fcdzmcgs44vg009k3ssyawkqppkhm3xyv2ivpp1mlgv";
+      type = "gem";
+    };
+    version = "0.1.17";
+  };
+  rex-sslscan = {
+    dependencies = ["rex-core" "rex-socket" "rex-text"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06gbx45q653ajcx099p0yxdqqxazfznbrqshd4nwiwg1p498lmyx";
+      type = "gem";
+    };
+    version = "0.1.5";
+  };
+  rex-struct2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nbdn53264a20cr2m2nq2v4mg0n33dvrd1jj1sixl37qjzw2k452";
+      type = "gem";
+    };
+    version = "0.1.2";
+  };
+  rex-text = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0cmfwzd3r6xzhaw5l2grgiivql1yynh620drg8h39q8hiixya6xz";
+      type = "gem";
+    };
+    version = "0.2.23";
+  };
+  rex-zip = {
+    dependencies = ["rex-text"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mbfryyhcw47i7jb8cs8vilbyqgyiyjkfl1ngl6wdbf7d87dwdw7";
+      type = "gem";
+    };
+    version = "0.1.3";
+  };
+  rkelly-remix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g7hjl9nx7f953y7lncmfgp0xgxfxvgfm367q6da9niik6rp1y3j";
+      type = "gem";
+    };
+    version = "0.0.7";
+  };
+  ruby-macho = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1k5vvk9d13pixhbram6fs74ibgmr2dngv7bks13npcjb42q275if";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  ruby-rc4 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00vci475258mmbvsdqkmqadlwn6gj9m01sp7b5a3zd90knil1k00";
+      type = "gem";
+    };
+    version = "0.1.5";
+  };
+  ruby_smb = {
+    dependencies = ["bindata" "rubyntlm" "windows_error"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "125pimmaskp13nkk5j138nfk1kd8n91sfdlx4dhj2j9zk342wsf4";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  rubyntlm = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1p6bxsklkbcqni4bcq6jajc2n57g0w5rzn4r49c3lb04wz5xg0dy";
+      type = "gem";
+    };
+    version = "0.6.2";
+  };
+  rubyzip = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1w9gw28ly3zyqydnm8phxchf4ymyjl2r7zf7c12z8kla10cpmhlc";
+      type = "gem";
+    };
+    version = "1.2.3";
+  };
+  sawyer = {
+    dependencies = ["addressable" "faraday"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yrdchs3psh583rjapkv33mljdivggqn99wkydkjdckcjn43j3cz";
+      type = "gem";
+    };
+    version = "0.8.2";
+  };
+  sinatra = {
+    dependencies = ["rack" "rack-protection" "tilt"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0byxzl7rx3ki0xd7aiv1x8mbah7hzd8f81l65nq8857kmgzj1jqq";
+      type = "gem";
+    };
+    version = "1.4.8";
+  };
+  sqlite3 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1v903nbcws3ifm6jnxrdfcpgl1qg2x3lbif16mhlbyfn0npzb494";
+      type = "gem";
+    };
+    version = "1.4.1";
+  };
+  sshkey = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03bkn55qsng484iqwz2lmm6rkimj01vsvhwk661s3lnmpkl65lbp";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  thin = {
+    dependencies = ["daemons" "eventmachine" "rack"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nagbf9pwy1vg09k6j4xqhbjjzrg5dwzvkn4ffvlj76fsn6vv61f";
+      type = "gem";
+    };
+    version = "1.7.2";
+  };
+  thor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yhrnp9x8qcy5vc7g438amd5j9sw83ih7c30dr6g6slgw9zj3g29";
+      type = "gem";
+    };
+    version = "0.20.3";
+  };
+  thread_safe = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy";
+      type = "gem";
+    };
+    version = "0.3.6";
+  };
+  tilt = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ca4k0clwf0rkvy7726x4nxpjxkpv67w043i39saxgldxd97zmwz";
+      type = "gem";
+    };
+    version = "2.0.9";
+  };
+  ttfunk = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mgrnqla5n51v4ivn844albsajkck7k6lviphfqa8470r46c58cd";
+      type = "gem";
+    };
+    version = "1.5.1";
+  };
+  tzinfo = {
+    dependencies = ["thread_safe"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fjx9j327xpkkdlxwmkl3a8wqj7i4l4jwlrv3z13mg95z9wl253z";
+      type = "gem";
+    };
+    version = "1.2.5";
+  };
+  tzinfo-data = {
+    dependencies = ["tzinfo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1m507in0d7vlfgasxpkz3y1a44zp532k9qlqcaz90ay939sz9h5q";
+      type = "gem";
+    };
+    version = "1.2019.2";
+  };
+  warden = {
+    dependencies = ["rack"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0va966lhpylcwbqb9n151kkihx30agh0a57mwjwdxyanll4s1q12";
+      type = "gem";
+    };
+    version = "1.2.7";
+  };
+  windows_error = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0kbcv9j5sc7pvjzf1dkp6h69i6lmj205zyy2arxcfgqg11bsz2kp";
+      type = "gem";
+    };
+    version = "0.1.2";
+  };
+  xdr = {
+    dependencies = ["activemodel" "activesupport"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0c5cp1k4ij3xq1q6fb0f6xv5b65wy18y7bhwvsdx8wd0zyg3x96m";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  xmlrpc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1s744iwblw262gj357pky3d9fcx9hisvla7rnw29ysn5zsb6i683";
+      type = "gem";
+    };
+    version = "0.3.0";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/security/metasploit/shell.nix b/nixpkgs/pkgs/tools/security/metasploit/shell.nix
new file mode 100644
index 000000000000..cd7a01214c6a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/metasploit/shell.nix
@@ -0,0 +1,16 @@
+# Env to update Gemfile.lock / gemset.nix
+with import <nixpkgs> {};
+stdenv.mkDerivation {
+  name = "env";
+  buildInputs = [
+    ruby.devEnv
+    git
+    sqlite
+    libpcap
+    postgresql
+    libxml2
+    libxslt
+    pkgconfig
+    bundix
+  ];
+}
diff --git a/nixpkgs/pkgs/tools/security/mfcuk/default.nix b/nixpkgs/pkgs/tools/security/mfcuk/default.nix
new file mode 100644
index 000000000000..a23e29175615
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/mfcuk/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl, pkgconfig, libnfc }:
+
+stdenv.mkDerivation {
+  pname = "mfcuk";
+  version = "0.3.8";
+
+  src = fetchurl {
+    url = "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/mfcuk/mfcuk-0.3.8.tar.gz";
+    sha256 = "0m9sy61rsbw63xk05jrrmnyc3xda0c3m1s8pg3sf8ijbbdv9axcp";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libnfc ];
+
+  meta = with stdenv.lib; {
+    description = "MiFare Classic Universal toolKit";
+    license = licenses.gpl2;
+    homepage = https://github.com/nfc-tools/mfcuk;
+    maintainers = with maintainers; [ offline ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/mfoc/default.nix b/nixpkgs/pkgs/tools/security/mfoc/default.nix
new file mode 100644
index 000000000000..1ae18e343537
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/mfoc/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, fetchpatch, autoreconfHook, pkgconfig, libnfc }:
+
+stdenv.mkDerivation rec {
+  pname = "mfoc";
+  version = "0.10.7";
+
+  src = fetchFromGitHub {
+    owner = "nfc-tools";
+    repo = pname;
+    rev = "${pname}-${version}";
+    sha256 = "0hbg1fn4000qdg1cfc7y8l0vh1mxlxcz7gapkcq54xp2l6kk1z65";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/nfc-tools/mfoc/commit/f13efb0a6deb1d97ba945d555a6a5d6be89b593f.patch";
+      sha256 = "109gqzp8rdsjvj0nra686vy0dpd2bl6q5v9m4v98cpxkbz496450";
+    })
+    (fetchpatch {
+      url = "https://github.com/nfc-tools/mfoc/commit/00eae36f891bc4580103e3b54f0bb5228af2cdef.patch";
+      sha256 = "1w56aj96g776f37j53jmf3hk21x4mqik3l2bmghrdp8drixc8bzk";
+    })
+  ];
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  buildInputs = [ libnfc ];
+
+  meta = with stdenv.lib; {
+    description = "Mifare Classic Offline Cracker";
+    license = licenses.gpl2;
+    homepage = https://github.com/nfc-tools/mfoc;
+    maintainers = with maintainers; [ offline ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/minisign/default.nix b/nixpkgs/pkgs/tools/security/minisign/default.nix
new file mode 100644
index 000000000000..15ee2446922b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/minisign/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub, cmake, libsodium }:
+
+stdenv.mkDerivation rec {
+  pname = "minisign";
+  version = "0.8";
+
+  src = fetchFromGitHub {
+    repo = "minisign";
+    owner = "jedisct1";
+    rev = version;
+    sha256 = "0rgg9jb5108hd5psivlrfd8cxnjylawm0glcry8ba6zlmkv949r8";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ libsodium ];
+
+  meta = with stdenv.lib; {
+    description = "A simple tool for signing files and verifying signatures";
+    longDescription = ''
+      minisign uses public key cryptography to help facilitate secure (but not
+      necessarily private) file transfer, e.g., of software artefacts. minisign
+      is similar to and compatible with OpenBSD's signify.
+    '';
+    homepage = https://jedisct1.github.io/minisign/;
+    license = licenses.isc;
+    maintainers = with maintainers; [ joachifm ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/mkp224o/default.nix b/nixpkgs/pkgs/tools/security/mkp224o/default.nix
new file mode 100644
index 000000000000..a4aae480ae16
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/mkp224o/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, lib, fetchFromGitHub, autoreconfHook, libsodium }:
+
+stdenv.mkDerivation rec {
+  pname = "mkp224o";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "cathugger";
+    repo = "mkp224o";
+    rev = "v${version}";
+    sha256 = "1il12ahcs5pj52hxn4xvpjfz801xcg31zk2jnkl80frzlwq040qi";
+  };
+
+  buildCommand =
+    let
+      # compile few variants with different implementation of crypto
+      # the fastest depends on a particular cpu
+      variants = [
+        { suffix = "ref10";         configureFlags = ["--enable-ref10"]; }
+        { suffix = "donna";         configureFlags = ["--enable-donna"]; }
+      ] ++ lib.optionals (stdenv.isi686 || stdenv.isx86_64) [
+        { suffix = "donna-sse2";    configureFlags = ["--enable-donna-sse2"]; }
+      ] ++ lib.optionals stdenv.isx86_64 [
+        { suffix = "amd64-51-30k";  configureFlags = ["--enable-amd64-51-30k"]; }
+        { suffix = "amd64-64-20k";  configureFlags = ["--enable-amd64-64-24k"]; }
+      ];
+    in
+      lib.concatMapStrings ({suffix, configureFlags}: ''
+        install -D ${
+          stdenv.mkDerivation {
+            name = "mkp224o-${suffix}-${version}";
+            inherit version src configureFlags;
+            nativeBuildInputs = [ autoreconfHook ];
+            buildInputs = [ libsodium ];
+            installPhase = "install -D mkp224o $out";
+          }
+        } $out/bin/mkp224o-${suffix}
+      '') variants;
+
+  meta = with lib; {
+    description = "Vanity address generator for tor onion v3 (ed25519) hidden services";
+    homepage = http://cathug2kyi4ilneggumrenayhuhsvrgn6qv2y47bgeet42iivkpynqad.onion/;
+    license = licenses.cc0;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ volth ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/mkpasswd/default.nix b/nixpkgs/pkgs/tools/security/mkpasswd/default.nix
new file mode 100644
index 000000000000..3d30fef02e29
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/mkpasswd/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, whois, perl }:
+
+stdenv.mkDerivation {
+  name = "mkpasswd-${whois.version}";
+
+  src = whois.src;
+
+  nativeBuildInputs = [ perl ];
+
+  preConfigure = whois.preConfigure;
+  buildPhase = "make mkpasswd";
+  installPhase = "make install-mkpasswd";
+
+  meta = with stdenv.lib; {
+    homepage = https://packages.qa.debian.org/w/whois.html;
+    description = "Overfeatured front-end to crypt, from the Debian whois package";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ cstrahan fpletz ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/mkrand/default.nix b/nixpkgs/pkgs/tools/security/mkrand/default.nix
new file mode 100644
index 000000000000..bb9c932d19e3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/mkrand/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation {
+  name = "mkrand-0.1.0";
+
+  src = fetchurl {
+    url = "https://github.com/mknight-tag/MKRAND/releases/download/v0.1.0/mkrand-0.1.0.tar.gz";
+    sha256 = "1irwyv2j5c3606k3qbq77yrd65y27rcq3jdlp295rz875q8iq9fs";
+  };
+
+  doCheck = true;
+
+  meta = {
+    description = "A Digital Random Bit Generator";
+    longDescription = "MKRAND is a utility for generating random information.";
+    homepage = https://github.com/mknight-tag/MKRAND/;
+    license = stdenv.lib.licenses.mit;
+    platforms = stdenv.lib.platforms.all;
+  };
+  }
diff --git a/nixpkgs/pkgs/tools/security/mktemp/default.nix b/nixpkgs/pkgs/tools/security/mktemp/default.nix
new file mode 100644
index 000000000000..71bdd3af55de
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/mktemp/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl, groff }:
+
+stdenv.mkDerivation {
+  name = "mktemp-1.7";
+
+  # Have `configure' avoid `/usr/bin/nroff' in non-chroot builds.
+  NROFF = "${groff}/bin/nroff";
+
+  # Don't use "install -s"
+  postPatch = ''
+    substituteInPlace Makefile.in --replace " 0555 -s " " 0555 "
+  '';
+
+  src = fetchurl {
+    url = ftp://ftp.mktemp.org/pub/mktemp/mktemp-1.7.tar.gz;
+    sha256 = "0x969152znxxjbj7387xb38waslr4yv6bnj5jmhb4rpqxphvk54f";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Simple tool to make temporary file handling in shells scripts safe and simple";
+    homepage = https://www.mktemp.org;
+    license = licenses.isc;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/modsecurity/Makefile.in.patch b/nixpkgs/pkgs/tools/security/modsecurity/Makefile.in.patch
new file mode 100644
index 000000000000..98384c754ce7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/modsecurity/Makefile.in.patch
@@ -0,0 +1,17 @@
+--- a/apache2/Makefile.in	2017-10-10 09:45:51.000000000 -0400
++++ b/apache2/Makefile.in	2017-10-10 09:46:04.000000000 -0400
+@@ -1208,14 +1208,12 @@
+ @LINUX_TRUE@	for m in $(pkglib_LTLIBRARIES); do \
+ @LINUX_TRUE@	  base=`echo $$m | sed 's/\..*//'`; \
+ @LINUX_TRUE@	  rm -f $(DESTDIR)$(pkglibdir)/$$base.*a; \
+-@LINUX_TRUE@	  install -D -m444 $(DESTDIR)$(pkglibdir)/$$base.so $(DESTDIR)$(APXS_MODULES)/$$base.so; \
+ @LINUX_TRUE@	done
+ @LINUX_FALSE@install-exec-hook: $(pkglib_LTLIBRARIES)
+ @LINUX_FALSE@	@echo "Removing unused static libraries..."; \
+ @LINUX_FALSE@	for m in $(pkglib_LTLIBRARIES); do \
+ @LINUX_FALSE@	  base=`echo $$m | sed 's/\..*//'`; \
+ @LINUX_FALSE@	  rm -f $(DESTDIR)$(pkglibdir)/$$base.*a; \
+-@LINUX_FALSE@	  cp -p $(DESTDIR)$(pkglibdir)/$$base.so $(DESTDIR)$(APXS_MODULES); \
+ @LINUX_FALSE@	done
+ 
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
diff --git a/nixpkgs/pkgs/tools/security/modsecurity/default.nix b/nixpkgs/pkgs/tools/security/modsecurity/default.nix
new file mode 100644
index 000000000000..2a9e41ac0fa9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/modsecurity/default.nix
@@ -0,0 +1,54 @@
+{ stdenv, lib, fetchurl, pkgconfig
+, curl, apacheHttpd, pcre, apr, aprutil, libxml2
+, luaSupport ? false, lua5
+}:
+
+with lib;
+
+let luaValue = if luaSupport then lua5 else "no";
+    optional = stdenv.lib.optional;
+in
+
+stdenv.mkDerivation rec {
+  pname = "modsecurity";
+  version = "2.9.3";
+
+  src = fetchurl {
+    url = "https://www.modsecurity.org/tarball/${version}/${pname}-${version}.tar.gz";
+    sha256 = "0611nskd2y6yagrciqafxdn4rxbdk2v4swf45kc1sgwx2sfh34j1";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [  curl apacheHttpd pcre apr aprutil libxml2 ] ++
+    optional luaSupport lua5;
+
+  configureFlags = [
+    "--enable-standalone-module"
+    "--enable-static"
+    "--with-curl=${curl.dev}"
+    "--with-apxs=${apacheHttpd.dev}/bin/apxs"
+    "--with-pcre=${pcre.dev}"
+    "--with-apr=${apr.dev}"
+    "--with-apu=${aprutil.dev}/bin/apu-1-config"
+    "--with-libxml=${libxml2.dev}"
+    "--with-lua=${luaValue}"
+  ];
+
+  outputs = ["out" "nginx"];
+  # by default modsecurity's install script copies compiled output to httpd's modules folder
+  # this patch removes those lines
+  patches = [ ./Makefile.in.patch ];
+
+  postInstall = ''
+    mkdir -p $nginx
+    cp -R * $nginx
+  '';
+
+  meta = {
+    description = "Open source, cross-platform web application firewall (WAF)";
+    license = licenses.asl20;
+    homepage = https://www.modsecurity.org/;
+    maintainers = with maintainers; [offline];
+    platforms   = stdenv.lib.platforms.linux ++ stdenv.lib.platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/monkeysphere/default.nix b/nixpkgs/pkgs/tools/security/monkeysphere/default.nix
new file mode 100644
index 000000000000..1e585136d887
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/monkeysphere/default.nix
@@ -0,0 +1,103 @@
+{ stdenv, fetchurl, makeWrapper
+, perl, libassuan, libgcrypt
+, perlPackages, lockfileProgs, gnupg, coreutils
+# For the tests:
+, openssh, which, socat, cpio, hexdump, procps, openssl
+}:
+
+let
+  # A patch is needed to run the tests inside the Nix sandbox:
+  # /etc/passwd: "nixbld:x:1000:100:Nix build user:/build:/noshell"
+  # sshd: "User nixbld not allowed because shell /noshell does not exist"
+  opensshUnsafe = openssh.overrideAttrs (oldAttrs: {
+    patches = oldAttrs.patches ++ [ ./openssh-nixos-sandbox.patch ];
+  });
+in stdenv.mkDerivation rec {
+  pname = "monkeysphere";
+  version = "0.44";
+
+  # The patched OpenSSH binary MUST NOT be used (except in the check phase):
+  disallowedRequisites = [ opensshUnsafe ];
+
+  src = fetchurl {
+    url = "http://archive.monkeysphere.info/debian/pool/monkeysphere/m/monkeysphere/monkeysphere_${version}.orig.tar.gz";
+    sha256 = "1ah7hy8r9gj96pni8azzjb85454qky5l17m3pqn37854l6grgika";
+  };
+
+  patches = [ ./monkeysphere.patch ];
+
+  postPatch = ''
+    sed -i "s,/usr/bin/env,${coreutils}/bin/env," src/share/ma/update_users
+  '';
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perl libassuan libgcrypt ]
+    ++ stdenv.lib.optional doCheck
+      ([ gnupg opensshUnsafe which socat cpio hexdump procps lockfileProgs ] ++
+      (with perlPackages; [ CryptOpenSSLRSA CryptOpenSSLBignum ]));
+
+  makeFlags = [
+    "PREFIX=/"
+    "DESTDIR=$(out)"
+  ];
+
+  # The tests should be run (and succeed) when making changes to this package
+  # but they aren't enabled by default because they "drain" entropy (GnuPG
+  # still uses /dev/random).
+  doCheck = false;
+  preCheck = stdenv.lib.optionalString doCheck ''
+    patchShebangs tests/
+    patchShebangs src/
+    sed -i \
+      -e "s,/usr/sbin/sshd,${opensshUnsafe}/bin/sshd," \
+      -e "s,/bin/true,${coreutils}/bin/true," \
+      -e "s,/bin/false,${coreutils}/bin/false," \
+      -e "s,openssl\ req,${openssl}/bin/openssl req," \
+      tests/basic
+    sed -i "s/<(hd/<(hexdump/" tests/keytrans
+  '';
+
+  postFixup =
+    let wrapperArgs = runtimeDeps:
+          "--prefix PERL5LIB : "
+          + (with perlPackages; makePerlPath [ # Optional (only required for keytrans)
+              CryptOpenSSLRSA
+              CryptOpenSSLBignum
+            ])
+          + stdenv.lib.optionalString
+              (builtins.length runtimeDeps > 0)
+              " --prefix PATH : ${stdenv.lib.makeBinPath runtimeDeps}";
+        wrapMonkeysphere = runtimeDeps: program:
+          "wrapProgram $out/bin/${program} ${wrapperArgs runtimeDeps}\n";
+        wrapPrograms = runtimeDeps: programs: stdenv.lib.concatMapStrings
+          (wrapMonkeysphere runtimeDeps)
+          programs;
+    in wrapPrograms [ gnupg ] [ "monkeysphere-authentication" "monkeysphere-host" ]
+      + wrapPrograms [ gnupg lockfileProgs ] [ "monkeysphere" ]
+      + ''
+        # These 4 programs depend on the program name ($0):
+        for program in openpgp2pem openpgp2spki openpgp2ssh pem2openpgp; do
+          rm $out/bin/$program
+          ln -sf keytrans $out/share/monkeysphere/$program
+          makeWrapper $out/share/monkeysphere/$program $out/bin/$program \
+            ${wrapperArgs [ ]}
+        done
+      '';
+
+  meta = with stdenv.lib; {
+    homepage = http://web.monkeysphere.info/;
+    description = "Leverage the OpenPGP web of trust for SSH and TLS authentication";
+    longDescription = ''
+      The Monkeysphere project's goal is to extend OpenPGP's web of
+      trust to new areas of the Internet to help us securely identify
+      servers we connect to, as well as each other while we work online.
+      The suite of Monkeysphere utilities provides a framework to
+      transparently leverage the web of trust for authentication of
+      TLS/SSL communications through the normal use of tools you are
+      familiar with, such as your web browser0 or secure shell.
+    '';
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ primeos ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/monkeysphere/monkeysphere.patch b/nixpkgs/pkgs/tools/security/monkeysphere/monkeysphere.patch
new file mode 100644
index 000000000000..8cdd85017b93
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/monkeysphere/monkeysphere.patch
@@ -0,0 +1,23 @@
+diff --git a/Makefile b/Makefile
+--- a/Makefile
++++ b/Makefile
+@@ -52,7 +52,7 @@ clean:
+ replaced/%: %
+ 	mkdir -p $(dir $@)
+ 	sed < $< > $@ \
+-	-e 's:__SYSSHAREDIR_PREFIX__:$(PREFIX):' \
++	-e 's:__SYSSHAREDIR_PREFIX__:$(DESTDIR):' \
+ 	-e 's:__SYSCONFDIR_PREFIX__:$(ETCPREFIX):' \
+ 	-e 's:__SYSDATADIR_PREFIX__:$(LOCALSTATEDIR):'
+ 
+diff --git a/src/share/keytrans b/src/share/keytrans
+--- a/src/share/keytrans
++++ b/src/share/keytrans
+@@ -1,4 +1,4 @@
+-#!/usr/bin/perl -T
++#!/usr/bin/perl
+ 
+ # keytrans: this is an RSA key translation utility; it is capable of
+ # transforming RSA keys (both public keys and secret keys) between
+-- 
+2.16.3
diff --git a/nixpkgs/pkgs/tools/security/monkeysphere/openssh-nixos-sandbox.patch b/nixpkgs/pkgs/tools/security/monkeysphere/openssh-nixos-sandbox.patch
new file mode 100644
index 000000000000..2a9a1fc8dfa9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/monkeysphere/openssh-nixos-sandbox.patch
@@ -0,0 +1,17 @@
+diff --git a/auth.c b/auth.c
+index d2a8cd65..811a129f 100644
+--- a/auth.c
++++ b/auth.c
+@@ -580,6 +580,12 @@ getpwnamallow(const char *user)
+ #endif
+ 
+ 	pw = getpwnam(user);
++        if (pw != NULL) {
++		// This is only for testing purposes,
++		// DO NOT USE THIS PATCH IN PRODUCTION!
++		char *shell = "/bin/sh";
++		pw->pw_shell = shell;
++        }
+ 
+ #if defined(_AIX) && defined(HAVE_SETAUTHDB)
+ 	aix_restoreauthdb();
diff --git a/nixpkgs/pkgs/tools/security/mpw/default.nix b/nixpkgs/pkgs/tools/security/mpw/default.nix
new file mode 100644
index 000000000000..4cff17ef8495
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/mpw/default.nix
@@ -0,0 +1,62 @@
+{ stdenv, cmake, fetchFromGitLab
+, json_c, libsodium, libxml2, ncurses }:
+
+let
+  rev = "22796663dcad81684ab24308d9db570f6781ba2c";
+
+in stdenv.mkDerivation rec {
+  name = "mpw-${version}-${builtins.substring 0 8 rev}";
+  version = "2.6";
+
+  src = fetchFromGitLab {
+    owner  = "MasterPassword";
+    repo   = "MasterPassword";
+    sha256 = "1f2vqacgbyam1mazawrfim8zwp38gnwf5v3xkkficsfnv789g6fw";
+    inherit rev;
+  };
+
+  sourceRoot = "./source/platform-independent/c/cli";
+
+  postPatch = ''
+    rm build
+    substituteInPlace mpw-cli-tests \
+      --replace '/usr/bin/env bash' ${stdenv.shell} \
+      --replace ./mpw ./build/mpw
+  '';
+
+  cmakeFlags = [
+    "-Dmpw_version=${version}"
+    "-DBUILD_MPW_TESTS=ON"
+  ];
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [ json_c libxml2 libsodium ncurses ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 mpw                    $out/bin/mpw
+    install -Dm644 ../mpw.completion.bash $out/share/bash-completion/completions/_mpw
+    install -Dm644 ../../../../README.md  $out/share/doc/mpw/README.md
+
+    runHook postInstall
+  '';
+
+  doCheck = true;
+
+  checkPhase = ''
+    runHook preCheck
+
+    ../mpw-cli-tests
+
+    runHook postCheck
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A stateless password management solution";
+    homepage = https://masterpasswordapp.com/;
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/munge/default.nix b/nixpkgs/pkgs/tools/security/munge/default.nix
new file mode 100644
index 000000000000..2d758aa2aecd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/munge/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, gawk, gnused, libgcrypt, zlib, bzip2 }:
+
+stdenv.mkDerivation rec {
+  name = "munge-0.5.13";
+
+  src = fetchFromGitHub {
+    owner = "dun";
+    repo = "munge";
+    rev = name;
+    sha256 = "1c4ff3d8ad3inbliszr4slym3b4cn19bn6mxm13mzy20jyi2rm70";
+  };
+
+  nativeBuildInputs = [ autoreconfHook gawk gnused ];
+  buildInputs = [ libgcrypt zlib bzip2 ];
+
+  preAutoreconf = ''
+    # Remove the install-data stuff, since it tries to write to /var
+    substituteInPlace src/Makefile.am --replace "etc \\" "\\"
+  '';
+
+  configureFlags = [
+    "--localstatedir=/var"
+  ];
+
+  meta = with stdenv.lib; {
+    description = ''
+      An authentication service for creating and validating credentials
+    '';
+    license = licenses.lgpl3;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.rickynils ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/nasty/default.nix b/nixpkgs/pkgs/tools/security/nasty/default.nix
new file mode 100644
index 000000000000..d45861cf50e1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/nasty/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchurl, gpgme }:
+
+stdenv.mkDerivation rec {
+  pname = "nasty";
+  version = "0.6";
+
+  src = fetchurl {
+    url = "https://www.vanheusden.com/nasty/${pname}-${version}.tgz";
+    sha256 = "1dznlxr728k1pgy1kwmlm7ivyl3j3rlvkmq34qpwbwbj8rnja1vn";
+  };
+
+  # does not apply cleanly with patchPhase/fetchpatch
+  # https://sources.debian.net/src/nasty/0.6-3/debian/patches/02_add_largefile_support.patch
+  CFLAGS = "-D_FILE_OFFSET_BITS=64";
+
+  buildInputs = [ gpgme ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp nasty $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Recover the passphrase of your PGP or GPG-key";
+    longDescription = ''
+    Nasty is a program that helps you to recover the passphrase of your PGP or GPG-key
+    in case you forget or lost it. It is mostly a proof-of-concept: with a different implementation
+    this program could be at least 100x faster.
+    '';
+    homepage = http://www.vanheusden.com/nasty/;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ davidak ];
+    platforms = platforms.unix;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/security/neopg/default.nix b/nixpkgs/pkgs/tools/security/neopg/default.nix
new file mode 100644
index 000000000000..5e26bcf6759d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/neopg/default.nix
@@ -0,0 +1,48 @@
+{ stdenv
+, fetchFromGitHub
+, cmake
+, sqlite
+, botan2
+, boost
+, curl
+, gettext
+, pkgconfig
+, libusb
+, gnutls }:
+
+stdenv.mkDerivation rec {
+  pname = "neopg";
+  version = "0.0.6";
+
+  src = fetchFromGitHub {
+    owner = "das-labor";
+    repo = "neopg";
+    rev = "v${version}";
+    sha256 = "15xp5w046ix59cfrhh8ka4camr0d8qqw643g184sqrcqwpk7nbrx";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+
+  buildInputs = [ cmake sqlite botan2 boost curl gettext libusb gnutls ];
+
+  doCheck = true;
+  checkTarget = "test";
+  dontUseCmakeBuildDir = true;
+
+  preCheck = ''
+    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(pwd)/3rdparty/googletest/googletest:$(pwd)/neopg
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://neopg.io/;
+    description = "Modern replacement for GnuPG 2";
+    license = licenses.gpl3;
+    longDescription = ''
+      NeoPG starts as an opiniated fork of GnuPG 2 to clean up the code and make it easier to develop.
+      It is written in C++11.
+    '';
+    maintainers = with maintainers; [ erictapen ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/nitrokey-app/default.nix b/nixpkgs/pkgs/tools/security/nitrokey-app/default.nix
new file mode 100644
index 000000000000..48df486ef0a4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/nitrokey-app/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, bash-completion, cmake, fetchFromGitHub, hidapi, libusb1, pkgconfig
+, qtbase, qttranslations, qtsvg, wrapQtAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "nitrokey-app";
+  version = "1.3.2";
+
+  src = fetchFromGitHub {
+    owner = "Nitrokey";
+    repo = "nitrokey-app";
+    rev = "v${version}";
+    sha256 = "193kzlz3qn9il56h78faiqkgv749hdils1nn1iw6g3wphgx5fjs2";
+    fetchSubmodules = true;
+  };
+
+  postPatch = ''
+    substituteInPlace libnitrokey/CMakeLists.txt \
+      --replace '/data/41-nitrokey.rules' '/libnitrokey/data/41-nitrokey.rules'
+  '';
+
+  buildInputs = [
+    bash-completion
+    hidapi
+    libusb1
+    qtbase
+    qttranslations
+    qtsvg
+  ];
+  nativeBuildInputs = [
+    cmake
+    pkgconfig
+    wrapQtAppsHook
+  ];
+  cmakeFlags = [ "-DCMAKE_BUILD_TYPE=Release" ];
+
+  meta = with stdenv.lib; {
+    description      = "Provides extra functionality for the Nitrokey Pro and Storage";
+    longDescription  = ''
+       The nitrokey-app provides a QT system tray widget with wich you can
+       access the extra functionality of a Nitrokey Storage or Nitrokey Pro.
+       See https://www.nitrokey.com/ for more information.
+    '';
+    homepage         = https://github.com/Nitrokey/nitrokey-app;
+    repositories.git = https://github.com/Nitrokey/nitrokey-app.git;
+    license          = licenses.gpl3;
+    maintainers      = with maintainers; [ kaiha fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/nitrokey-app/udev-rules.nix b/nixpkgs/pkgs/tools/security/nitrokey-app/udev-rules.nix
new file mode 100644
index 000000000000..a89fa7238269
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/nitrokey-app/udev-rules.nix
@@ -0,0 +1,25 @@
+{ stdenv, nitrokey-app
+, group ? "nitrokey"
+}:
+
+stdenv.mkDerivation {
+  name = "nitrokey-udev-rules-${stdenv.lib.getVersion nitrokey-app}";
+
+  inherit (nitrokey-app) src;
+
+  dontBuild = true;
+
+  patchPhase = ''
+    substituteInPlace libnitrokey/data/41-nitrokey.rules --replace plugdev "${group}"
+  '';
+
+  installPhase = ''
+    mkdir -p $out/etc/udev/rules.d
+    cp libnitrokey/data/41-nitrokey.rules $out/etc/udev/rules.d
+  '';
+
+  meta = {
+    description = "udev rules for Nitrokeys";
+    inherit (nitrokey-app.meta) homepage license maintainers;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/nmap/default.nix b/nixpkgs/pkgs/tools/security/nmap/default.nix
new file mode 100644
index 000000000000..f88c533d71d3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/nmap/default.nix
@@ -0,0 +1,77 @@
+{ stdenv, fetchurl, fetchpatch, libpcap, pkgconfig, openssl, lua5_3
+, pcre, liblinear, libssh2
+, graphicalSupport ? false
+, libX11 ? null
+, gtk2 ? null
+, python2 ? null
+, makeWrapper ? null
+, withLua ? true
+}:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  name = "nmap${optionalString graphicalSupport "-graphical"}-${version}";
+  version = "7.80";
+
+  src = fetchurl {
+    url = "https://nmap.org/dist/nmap-${version}.tar.bz2";
+    sha256 = "1aizfys6l9f9grm82bk878w56mg0zpkfns3spzj157h98875mypw";
+  };
+
+  patches = [ ./zenmap.patch ]
+    ++ optionals stdenv.cc.isClang [(
+      # Fixes a compile error due an ambiguous reference to bind(2) in
+      # nping/EchoServer.cc, which is otherwise resolved to std::bind.
+      # https://github.com/nmap/nmap/pull/1363
+      fetchpatch {
+        url = "https://github.com/nmap/nmap/commit/5bbe66f1bd8cbd3718f5805139e2e8139e6849bb.diff";
+        includes = [ "nping/EchoServer.cc" ];
+        sha256 = "0xcph9mycy57yryjg253frxyz87c4135rrbndlqw1400c8jxq70c";
+      }
+    )];
+
+  prePatch = optionalString stdenv.isDarwin ''
+    substituteInPlace libz/configure \
+        --replace /usr/bin/libtool ar \
+        --replace 'AR="libtool"' 'AR="ar"' \
+        --replace 'ARFLAGS="-o"' 'ARFLAGS="-r"'
+  '';
+
+  configureFlags = [
+    (if withLua then "--with-liblua=${lua5_3}" else "--without-liblua")
+  ] ++ optionals (!graphicalSupport) [ "--without-ndiff" "--without-zenmap" ];
+
+  makeFlags = optionals (stdenv.buildPlatform != stdenv.hostPlatform) [
+    "AR=${stdenv.cc.bintools.targetPrefix}ar"
+    "RANLIB=${stdenv.cc.bintools.targetPrefix}ranlib"
+    "CC=${stdenv.cc.targetPrefix}gcc"
+  ];
+
+  pythonPath = with python2.pkgs; optionals graphicalSupport  [
+    pygtk pysqlite pygobject2 pycairo
+  ];
+
+  nativeBuildInputs = [ pkgconfig ] ++ optionals graphicalSupport [ python2.pkgs.wrapPython ];
+  buildInputs = [ pcre liblinear libssh2 libpcap openssl ] ++ optionals graphicalSupport (with python2.pkgs; [
+    python2 libX11 gtk2
+  ]);
+
+  postInstall = optionalString graphicalSupport ''
+    buildPythonPath "$out $pythonPath"
+    patchPythonScript $out/bin/ndiff
+    patchPythonScript $out/bin/zenmap
+  '';
+
+  enableParallelBuilding = true;
+
+  doCheck = false; # fails 3 tests, probably needs the net
+
+  meta = {
+    description = "A free and open source utility for network discovery and security auditing";
+    homepage    = http://www.nmap.org;
+    license     = licenses.gpl2;
+    platforms   = platforms.all;
+    maintainers = with maintainers; [ thoughtpolice fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/nmap/qt.nix b/nixpkgs/pkgs/tools/security/nmap/qt.nix
new file mode 100644
index 000000000000..2dcd7fed0c4b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/nmap/qt.nix
@@ -0,0 +1,54 @@
+{ stdenv, fetchFromGitHub, cmake, pkgconfig, wrapQtAppsHook
+, dnsutils, nmap
+, qtbase, qtscript, qtwebengine }:
+
+stdenv.mkDerivation rec {
+  pname = "nmapsi4";
+  version = "0.4.80-20180430";
+
+  src = fetchFromGitHub {
+    owner = "nmapsi4";
+    repo = "nmapsi4";
+    rev = "d7f18e4c1e38dcf9c29cb4496fe14f9ff172861a";
+    sha256 = "10wqyrjzmad1g7lqa65rymbkna028xbp4xcpj442skw8gyrs3994";
+  };
+
+  nativeBuildInputs = [ cmake pkgconfig wrapQtAppsHook ];
+
+  buildInputs = [ qtbase qtscript qtwebengine ];
+
+  enableParallelBuilding = true;
+
+  postPatch = ''
+    substituteInPlace src/platform/digmanager.cpp \
+      --replace '"dig"' '"${dnsutils}/bin/dig"'
+    substituteInPlace src/platform/discover.cpp \
+        --replace '"nping"' '"${nmap}/bin/nping"'
+    for f in \
+      src/platform/monitor/monitor.cpp \
+      src/platform/nsemanager.cpp ; do
+
+      substituteInPlace $f \
+        --replace '"nmap"'  '"${nmap}/bin/nmap"'
+    done
+  '';
+
+  postInstall = ''
+    mv $out/share/applications/kde4/*.desktop $out/share/applications
+    rmdir $out/share/applications/kde4
+
+    for f in $out/share/applications/* ; do
+      substituteInPlace $f \
+        --replace Qt4                   Qt5 \
+        --replace Exec=nmapsi4          Exec=$out/bin/nmapsi4 \
+        --replace "Exec=kdesu nmapsi4" "Exec=kdesu $out/bin/nmapsi4"
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Qt frontend for nmap";
+    license     = licenses.gpl2;
+    maintainers = with maintainers; [ peterhoeg ];
+    inherit (src.meta) homepage;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/nmap/zenmap.patch b/nixpkgs/pkgs/tools/security/nmap/zenmap.patch
new file mode 100644
index 000000000000..3cd39750c881
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/nmap/zenmap.patch
@@ -0,0 +1,15 @@
+diff -ruN nmap-5.50.orig/zenmap/zenmapCore/Paths.py nmap-5.50/zenmap/zenmapCore/Paths.py
+--- nmap-5.50.orig/zenmap/zenmapCore/Paths.py	2013-06-06 05:52:10.723087428 +0000
++++ nmap-5.50/zenmap/zenmapCore/Paths.py	2013-06-06 07:07:25.481261761 +0000
+@@ -115,7 +115,10 @@
+     else:
+         # Normal script execution. Look in the current directory to allow
+         # running from the distribution.
+-        return os.path.abspath(os.path.dirname(fs_dec(sys.argv[0])))
++        #
++        # Grrwlf: No,no,dear. That's not a script, thats Nixos wrapper. Go add
++        # those '..' to substract /bin part.
++        return os.path.abspath(os.path.join(os.path.dirname(fs_dec(sys.argv[0])), ".."))
+
+ prefix = get_prefix()
+
diff --git a/nixpkgs/pkgs/tools/security/notary/default.nix b/nixpkgs/pkgs/tools/security/notary/default.nix
new file mode 100644
index 000000000000..d1e2ee58e483
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/notary/default.nix
@@ -0,0 +1,65 @@
+{ stdenv, fetchFromGitHub, buildGoPackage, libtool }:
+
+buildGoPackage rec {
+  pname = "notary";
+  version = "0.6.1";
+  gitcommit = "d6e1431f";
+
+  src = fetchFromGitHub {
+    owner = "theupdateframework";
+    repo = "notary";
+    rev = "v${version}";
+    sha256 = "1ak9dk6vjny5069hp3w36dbjawcnaq82l3i2qvf7mn7zfglbsnf9";
+  };
+
+  patches = [ ./no-git-usage.patch ];
+
+  buildInputs = [ libtool ];
+  buildPhase = ''
+    runHook preBuild
+    cd go/src/github.com/theupdateframework/notary
+    SKIPENVCHECK=1 make client GITCOMMIT=${gitcommit}
+    runHook postBuild
+  '';
+
+  goPackagePath = "github.com/theupdateframework/notary";
+
+  installPhase = ''
+    runHook preInstall
+    install -D bin/notary $bin/bin/notary
+    runHook postInstall
+  '';
+
+  #doCheck = true; # broken by tzdata: 2018g -> 2019a
+  checkPhase = ''
+    make test PKGS=github.com/theupdateframework/notary/cmd/notary
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Notary is a project that allows anyone to have trust over arbitrary collections of data";
+    longDescription = ''
+      The Notary project comprises a server and a client for running and
+      interacting with trusted collections. See the service architecture
+      documentation for more information.
+
+      Notary aims to make the internet more secure by making it easy for people
+      to publish and verify content. We often rely on TLS to secure our
+      communications with a web server which is inherently flawed, as any
+      compromise of the server enables malicious content to be substituted for
+      the legitimate content.
+
+      With Notary, publishers can sign their content offline using keys kept
+      highly secure. Once the publisher is ready to make the content available,
+      they can push their signed trusted collection to a Notary Server.
+
+      Consumers, having acquired the publisher's public key through a secure
+      channel, can then communicate with any notary server or (insecure) mirror,
+      relying only on the publisher's key to determine the validity and
+      integrity of the received content.
+    '';
+    license = licenses.asl20;
+    homepage = https://github.com/theupdateframework/notary;
+    maintainers = with maintainers; [ vdemeester ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/notary/no-git-usage.patch b/nixpkgs/pkgs/tools/security/notary/no-git-usage.patch
new file mode 100644
index 000000000000..363eefe36921
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/notary/no-git-usage.patch
@@ -0,0 +1,15 @@
+diff --git a/Makefile b/Makefile
+index ab794165..0cbd047f 100644
+--- a/Makefile
++++ b/Makefile
+@@ -5,8 +5,8 @@ PREFIX?=$(shell pwd)
+ # Add to compile time flags
+ NOTARY_PKG := github.com/theupdateframework/notary
+ NOTARY_VERSION := $(shell cat NOTARY_VERSION)
+-GITCOMMIT := $(shell git rev-parse --short HEAD)
+-GITUNTRACKEDCHANGES := $(shell git status --porcelain --untracked-files=no)
++GITCOMMIT ?= $(shell git rev-parse --short HEAD)
++GITUNTRACKEDCHANGES :=
+ ifneq ($(GITUNTRACKEDCHANGES),)
+ GITCOMMIT := $(GITCOMMIT)-dirty
+ endif
diff --git a/nixpkgs/pkgs/tools/security/nsjail/default.nix b/nixpkgs/pkgs/tools/security/nsjail/default.nix
new file mode 100644
index 000000000000..f1335a1ad1d7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/nsjail/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchFromGitHub, autoconf, bison, flex, libtool, pkgconfig, which
+, libnl, protobuf, protobufc, shadow
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nsjail";
+  version = "2.9";
+
+  src = fetchFromGitHub {
+    owner           = "google";
+    repo            = "nsjail";
+    rev             = version;
+    fetchSubmodules = true;
+    sha256          = "0218n0qjb45fawqqfj3gdxgd0fw5k0vxn9iggi0ciljmr9zywkgh";
+  };
+
+  postPatch = ''
+    substituteInPlace user.cc \
+      --replace "/usr/bin/newgidmap" "${shadow}/bin/newgidmap" \
+      --replace "/usr/bin/newuidmap" "${shadow}/bin/newuidmap"
+  '';
+
+  nativeBuildInputs = [ autoconf bison flex libtool pkgconfig which ];
+  buildInputs = [ libnl protobuf protobufc ];
+  enableParallelBuilding = true;
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man/man1
+    install nsjail $out/bin/
+    install nsjail.1 $out/share/man/man1/
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A light-weight process isolation tool, making use of Linux namespaces and seccomp-bpf syscall filters";
+    homepage    = http://nsjail.com/;
+    license     = licenses.asl20;
+    maintainers = with maintainers; [ bosu c0bw3b ];
+    platforms   = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/nwipe/default.nix b/nixpkgs/pkgs/tools/security/nwipe/default.nix
new file mode 100644
index 000000000000..62d7fb3b34a3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/nwipe/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchFromGitHub, ncurses, parted, automake, autoconf, pkgconfig }:
+
+stdenv.mkDerivation rec {
+  version = "0.26";
+  pname = "nwipe";
+  src = fetchFromGitHub {
+    owner = "martijnvanbrummelen";
+    repo = "nwipe";
+    rev = "v${version}";
+    sha256 = "072gg7hafq4vncpgm62yswshg6qgbi9mg2hl0p22c7if908p4vaa";
+  };
+  nativeBuildInputs = [ automake autoconf pkgconfig ];
+  buildInputs = [ ncurses parted ];
+  preConfigure = "sh init.sh || :";
+  meta = with stdenv.lib; {
+    description = "Securely erase disks";
+    homepage = https://github.com/martijnvanbrummelen/nwipe;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.woffs ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/oath-toolkit/default.nix b/nixpkgs/pkgs/tools/security/oath-toolkit/default.nix
new file mode 100644
index 000000000000..e31d62dc8b7a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/oath-toolkit/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchFromGitLab, pam, xmlsec, autoreconfHook, pkgconfig, libxml2, gtk-doc, perl, gengetopt, bison, help2man }:
+
+let
+  securityDependency =
+    if stdenv.isDarwin then xmlsec
+    else pam;
+
+in stdenv.mkDerivation {
+  name = "oath-toolkit-2.6.2";
+
+  src = fetchFromGitLab {
+    owner = "oath-toolkit";
+    repo = "oath-toolkit";
+    rev = "0dffdec9c5af5c89a5af43add29d8275eefe7414";
+    sha256 = "0n2sl444723f1k0sjmc0mzdwslx51yxac39c2cx2bl3ykacgfv74";
+  };
+
+  buildInputs = [ securityDependency libxml2 perl gengetopt bison ];
+
+  nativeBuildInputs = [ autoreconfHook gtk-doc help2man pkgconfig ];
+
+  # man file generation fails when true
+  enableParallelBuilding = false;
+
+  configureFlags = [ "--disable-pskc" ];
+
+  # Replicate the steps from cfg.mk
+  preAutoreconf = ''
+    printf "gdoc_MANS =\ngdoc_TEXINFOS =\n" > liboath/man/Makefile.gdoc
+    printf "gdoc_MANS =\ngdoc_TEXINFOS =\n" > libpskc/man/Makefile.gdoc
+    touch ChangeLog
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Components for building one-time password authentication systems";
+    homepage = https://www.nongnu.org/oath-toolkit/;
+    platforms = with platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/omapd/default.nix b/nixpkgs/pkgs/tools/security/omapd/default.nix
new file mode 100644
index 000000000000..baea02402d9f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/omapd/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchurl, qt4, gdb, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "omapd";
+  version = "0.9.2";
+
+  src = fetchurl {
+    url = "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/omapd/${pname}-${version}.tgz";
+    sha256 = "0d7lgv957jhbsav60j50jhdy3rpcqgql74qsniwnnpm3yqj9p0xc";
+  };
+
+  patches = [ ./zlib.patch ];
+
+  buildInputs = [ qt4 zlib gdb ];
+
+  buildPhase = ''
+    (cd plugins/RAMHashTables; qmake; make)
+    qmake
+    make
+  '';
+
+  installPhase = ''
+    install -vD omapd $out/bin/omapd
+    install -vD omapd.conf $out/etc/omapd.conf
+    install -vD plugins/libRAMHashTables.so $out/usr/lib/omapd/plugins/libRAMHashTables.so
+    ln -s $out/usr/lib/omapd/plugins $out/bin/plugins
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://code.google.com/archive/p/omapd/;
+    description = "IF-MAP Server that implements the IF-MAP v1.1 and v2.0 specifications published by the Trusted Computing Group (TCG)";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.tstrobel ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/omapd/zlib.patch b/nixpkgs/pkgs/tools/security/omapd/zlib.patch
new file mode 100644
index 000000000000..dc0644f2a016
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/omapd/zlib.patch
@@ -0,0 +1,9 @@
+diff -uNr omapd-0.9.2-old/omapd.pro omapd-0.9.2/omapd.pro
+--- omapd-0.9.2-old/omapd.pro	2015-08-03 09:46:47.463420480 +0200
++++ omapd-0.9.2/omapd.pro	2015-08-03 09:48:32.238657105 +0200
+@@ -37,4 +37,4 @@
+     clientconfiguration.h \
+     managementserver.h \
+     json.h
+-INCLUDEPATH += $$[QT_INSTALL_PREFIX]/src/3rdparty/zlib
++LIBS += -lz
diff --git a/nixpkgs/pkgs/tools/security/onioncircuits/default.nix b/nixpkgs/pkgs/tools/security/onioncircuits/default.nix
new file mode 100644
index 000000000000..5a9f10127481
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/onioncircuits/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchgit, pythonPackages, intltool, gtk3, gobject-introspection, gnome3 }:
+
+pythonPackages.buildPythonApplication rec {
+  pname = "onioncircuits";
+  version = "0.5";
+
+  src = fetchgit {
+    url = "https://git-tails.immerda.ch/onioncircuits/";
+    rev = version;
+    sha256 = "13mqif9b9iajpkrl9ijspdnvy82kxhprxd5mw3njk68rcn4z2pcm";
+  };
+
+  nativeBuildInputs = [ intltool ];
+  buildInputs = [ intltool gtk3 gobject-introspection ];
+  propagatedBuildInputs =  with pythonPackages; [ stem distutils_extra pygobject3 ];
+
+  postFixup = ''
+    wrapProgram "$out/bin/onioncircuits" \
+      --prefix GI_TYPELIB_PATH : "$GI_TYPELIB_PATH" \
+      --prefix XDG_DATA_DIRS : "$out/share:${gnome3.adwaita-icon-theme}/share"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://tails.boum.org;
+    description = "GTK application to display Tor circuits and streams";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.phreedom ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/security/open-ecard/default.nix b/nixpkgs/pkgs/tools/security/open-ecard/default.nix
new file mode 100644
index 000000000000..98f2e56e7497
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/open-ecard/default.nix
@@ -0,0 +1,64 @@
+{ stdenv, fetchurl, jre, pcsclite, makeDesktopItem, makeWrapper }:
+
+let
+  version = "1.2.4";
+
+  srcs = {
+    richclient = fetchurl {
+      url = "https://jnlp.openecard.org/richclient-${version}-20171212-0958.jar";
+      sha256 = "1ckhyhszp4zhfb5mn67lz603b55z814jh0sz0q5hriqzx017j7nr";
+    };
+    cifs = fetchurl {
+      url = "https://jnlp.openecard.org/cifs-${version}-20171212-0958.jar";
+      sha256 = "0rc862lx3y6sw87r1v5xjmqqpysyr1x6yqhycqmcdrwz0j3wykrr";
+    };
+    logo = fetchurl {
+      url = https://raw.githubusercontent.com/ecsec/open-ecard/1.2.3/gui/graphics/src/main/ext/oec_logo_bg-transparent.svg;
+      sha256 = "0rpmyv10vjx2yfpm03mqliygcww8af2wnrnrppmsazdplksaxkhs";
+    };
+  };
+in stdenv.mkDerivation rec {
+  appName = "open-ecard";
+  name = "${appName}-${version}";
+
+  src = srcs.richclient;
+
+  phases = "installPhase";
+
+  buildInputs = [ makeWrapper ];
+
+  desktopItem = makeDesktopItem {
+    name = appName;
+    desktopName = "Open eCard App";
+    genericName = "eCard App";
+    comment = "Client side implementation of the eCard-API-Framework";
+    icon = "oec_logo_bg-transparent.svg";
+    exec = appName;
+    categories = "Utility;Security;";
+  };
+
+  installPhase = ''
+    mkdir -p $out/share/java
+    cp ${srcs.richclient} $out/share/java/richclient-${version}.jar
+    cp ${srcs.cifs} $out/share/java/cifs-${version}.jar
+
+    mkdir -p $out/share/applications $out/share/pixmaps
+    cp $desktopItem/share/applications/* $out/share/applications
+    cp ${srcs.logo} $out/share/pixmaps/oec_logo_bg-transparent.svg
+
+    mkdir -p $out/bin
+    makeWrapper ${jre}/bin/java $out/bin/${appName} \
+      --add-flags "-cp $out/share/java/cifs-${version}.jar" \
+      --add-flags "-jar $out/share/java/richclient-${version}.jar" \
+      --suffix LD_LIBRARY_PATH ':' ${stdenv.lib.getLib pcsclite}/lib
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Client side implementation of the eCard-API-Framework (BSI
+      TR-03112) and related international standards, such as ISO/IEC 24727";
+    homepage = https://www.openecard.org/;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ sephalon ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/opencryptoki/default.nix b/nixpkgs/pkgs/tools/security/opencryptoki/default.nix
new file mode 100644
index 000000000000..1d506928a52a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/opencryptoki/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchFromGitHub, openssl, trousers, autoreconfHook, libtool, bison, flex }:
+
+stdenv.mkDerivation rec {
+  pname = "opencryptoki";
+  version = "3.8.2";
+
+  src = fetchFromGitHub {
+    owner = "opencryptoki";
+    repo = "opencryptoki";
+    rev = "v${version}";
+    sha256 = "1rf7cmibmx636vzv7p54g212478a8wim2lfjf2861hfd0m96nv4l";
+  };
+
+  nativeBuildInputs = [ autoreconfHook libtool bison flex ];
+  buildInputs = [ openssl trousers ];
+
+  postPatch = ''
+    substituteInPlace configure.ac \
+      --replace "usermod" "true" \
+      --replace "groupadd" "true" \
+      --replace "chmod" "true" \
+      --replace "chgrp" "true"
+    substituteInPlace usr/lib/Makefile.am --replace "DESTDIR" "out"
+  '';
+
+  configureFlags = [
+    "--prefix=$(out)"
+    "--disable-ccatok"
+    "--disable-icatok"
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "PKCS#11 implementation for Linux";
+    homepage    = https://github.com/opencryptoki/opencryptoki;
+    license     = licenses.cpl10;
+    maintainers = [ maintainers.tstrobel ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/opensc/default.nix b/nixpkgs/pkgs/tools/security/opensc/default.nix
new file mode 100644
index 000000000000..315cd1c8c285
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/opensc/default.nix
@@ -0,0 +1,65 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, zlib, readline, openssl
+, libiconv, pcsclite, libassuan, libXt, fetchpatch
+, docbook_xsl, libxslt, docbook_xml_dtd_412
+, Carbon, PCSC, buildPackages
+, withApplePCSC ? stdenv.isDarwin
+}:
+
+stdenv.mkDerivation rec {
+  pname = "opensc";
+  version = "0.20.0";
+
+  src = fetchFromGitHub {
+    owner = "OpenSC";
+    repo = "OpenSC";
+    rev = version;
+    sha256 = "0mg8qmhww3li1isfgvn5hang1hq58zra057ilvgci88csfziv5lv";
+  };
+
+  nativeBuildInputs = [ pkgconfig autoreconfHook ];
+  buildInputs = [
+    zlib readline openssl libassuan
+    libXt libxslt libiconv docbook_xml_dtd_412
+  ]
+  ++ stdenv.lib.optional stdenv.isDarwin Carbon
+  ++ (if withApplePCSC then [ PCSC ] else [ pcsclite ]);
+
+  NIX_CFLAGS_COMPILE = "-Wno-error";
+
+  configureFlags = [
+    "--enable-zlib"
+    "--enable-readline"
+    "--enable-openssl"
+    "--enable-pcsc"
+    "--enable-sm"
+    "--enable-man"
+    "--enable-doc"
+    "--localstatedir=/var"
+    "--sysconfdir=/etc"
+    "--with-xsl-stylesheetsdir=${docbook_xsl}/xml/xsl/docbook"
+    "--with-pcsc-provider=${
+      if withApplePCSC then
+        "${PCSC}/Library/Frameworks/PCSC.framework/PCSC"
+      else
+        "${stdenv.lib.getLib pcsclite}/lib/libpcsclite${stdenv.hostPlatform.extensions.sharedLibrary}"
+      }"
+    (stdenv.lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform)
+      "XSLTPROC=${buildPackages.libxslt}/bin/xsltproc")
+  ];
+
+  PCSC_CFLAGS = stdenv.lib.optionalString withApplePCSC
+    "-I${PCSC}/Library/Frameworks/PCSC.framework/Headers";
+
+  installFlags = [
+    "sysconfdir=$(out)/etc"
+    "completiondir=$(out)/etc"
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Set of libraries and utilities to access smart cards";
+    homepage = https://github.com/OpenSC/OpenSC/wiki;
+    license = licenses.lgpl21Plus;
+    platforms = platforms.all;
+    maintainers = [ maintainers.erictapen ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ossec/default.nix b/nixpkgs/pkgs/tools/security/ossec/default.nix
new file mode 100644
index 000000000000..2b52099e70b3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ossec/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchurl, which }:
+
+stdenv.mkDerivation {
+  name = "ossec-client-2.6";
+
+  src = fetchurl {
+    url = https://www.ossec.net/files/ossec-hids-2.6.tar.gz;
+
+    sha256 = "0k1b59wdv9h50gbyy88qw3cnpdm8hv0nrl0znm92h9a11i5b39ip";
+  };
+
+  buildInputs = [ which ];
+
+  phases = [ "unpackPhase" "patchPhase" "buildPhase" ];
+
+  patches = [ ./no-root.patch ];
+
+  buildPhase = ''
+    echo "en
+
+agent
+$out
+no
+127.0.0.1
+yes
+yes
+yes
+
+
+"   | ./install.sh
+  '';
+
+  meta = {
+    description = "Open source host-based instrusion detection system";
+    homepage = https://www.ossec.net;
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/security/ossec/no-root.patch b/nixpkgs/pkgs/tools/security/ossec/no-root.patch
new file mode 100644
index 000000000000..ea6e9c54a9ae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ossec/no-root.patch
@@ -0,0 +1,176 @@
+diff -Naur ossec-hids-2.6-orig/install.sh ossec-hids-2.6/install.sh
+--- ossec-hids-2.6-orig/install.sh	2011-07-11 15:36:58.000000000 -0400
++++ ossec-hids-2.6/install.sh	2012-07-09 09:58:57.970692818 -0400
+@@ -119,14 +119,14 @@
+     # Generate the /etc/ossec-init.conf
+     VERSION_FILE="./src/VERSION"
+     VERSION=`cat ${VERSION_FILE}`
+-    chmod 700 ${OSSEC_INIT} > /dev/null 2>&1
+-    echo "DIRECTORY=\"${INSTALLDIR}\"" > ${OSSEC_INIT}
+-    echo "VERSION=\"${VERSION}\"" >> ${OSSEC_INIT}
+-    echo "DATE=\"`date`\"" >> ${OSSEC_INIT}
+-    echo "TYPE=\"${INSTYPE}\"" >> ${OSSEC_INIT}
+-    chmod 600 ${OSSEC_INIT}
+-    cp -pr ${OSSEC_INIT} ${INSTALLDIR}${OSSEC_INIT}
+-    chmod 644 ${INSTALLDIR}${OSSEC_INIT}
++    echo chmod 700 ${OSSEC_INIT} > /dev/null 2>&1
++    echo "DIRECTORY=\"${INSTALLDIR}\"" > ${INSTALLDIR}${OSSEC_INIT}
++    echo "VERSION=\"${VERSION}\"" >> ${INSTALLDIR}${OSSEC_INIT}
++    echo "DATE=\"`date`\"" >> ${INSTALLDIR}${OSSEC_INIT}
++    echo "TYPE=\"${INSTYPE}\"" >> ${INSTALLDIR}${OSSEC_INIT}
++    echo chmod 600 ${OSSEC_INIT}
++    echo cp -pr ${OSSEC_INIT} ${INSTALLDIR}${OSSEC_INIT}
++    echo chmod 644 ${INSTALLDIR}${OSSEC_INIT}
+ 
+ 
+     # If update_rules is set, we need to tweak
+@@ -926,11 +926,6 @@
+         catError "0x1-location";
+     fi
+ 
+-    # Must be root
+-    if [ ! "X$ME" = "Xroot" ]; then
+-        catError "0x2-beroot";
+-    fi
+-
+     # Checking dependencies
+     checkDependencies
+ 
+diff -Naur ossec-hids-2.6-orig/src/InstallAgent.sh ossec-hids-2.6/src/InstallAgent.sh
+--- ossec-hids-2.6-orig/src/InstallAgent.sh	2011-07-11 15:36:58.000000000 -0400
++++ ossec-hids-2.6/src/InstallAgent.sh	2012-07-09 09:56:12.061870552 -0400
+@@ -80,7 +80,7 @@
+ else
+     grep "^${USER}" /etc/passwd > /dev/null 2>&1
+     if [ ! $? = 0 ]; then
+-	/usr/sbin/groupadd ${GROUP}
++	echo /usr/sbin/groupadd ${GROUP}
+ 
+     # We first check if /sbin/nologin is present. If it is not,
+     # we look for bin/false. If none of them is present, we
+@@ -93,7 +93,7 @@
+             OSMYSHELL="/bin/false"
+         fi
+     fi        
+-	/usr/sbin/useradd -d ${DIR} -s ${OSMYSHELL} -g ${GROUP} ${USER}
++	echo /usr/sbin/useradd -d ${DIR} -s ${OSMYSHELL} -g ${GROUP} ${USER}
+     fi
+ fi
+ 
+@@ -105,31 +105,31 @@
+ done
+ 
+ # Default for all directories
+-chmod -R 550 ${DIR}
+-chown -R root:${GROUP} ${DIR}
++echo chmod -R 550 ${DIR}
++echo chown -R root:${GROUP} ${DIR}
+ 
+ # To the ossec queue (default for agentd to read)
+-chown -R ${USER}:${GROUP} ${DIR}/queue/ossec
+-chmod -R 770 ${DIR}/queue/ossec
++echo chown -R ${USER}:${GROUP} ${DIR}/queue/ossec
++echo chmod -R 770 ${DIR}/queue/ossec
+ 
+ # For the logging user
+-chown -R ${USER}:${GROUP} ${DIR}/logs
+-chmod -R 750 ${DIR}/logs
+-chmod -R 775 ${DIR}/queue/rids
+-touch ${DIR}/logs/ossec.log
+-chown ${USER}:${GROUP} ${DIR}/logs/ossec.log
+-chmod 664 ${DIR}/logs/ossec.log
+-
+-chown -R ${USER}:${GROUP} ${DIR}/queue/diff
+-chmod -R 750 ${DIR}/queue/diff
+-chmod 740 ${DIR}/queue/diff/* > /dev/null 2>&1
++echo chown -R ${USER}:${GROUP} ${DIR}/logs
++echo chmod -R 750 ${DIR}/logs
++echo chmod -R 775 ${DIR}/queue/rids
++echo touch ${DIR}/logs/ossec.log
++echo chown ${USER}:${GROUP} ${DIR}/logs/ossec.log
++echo chmod 664 ${DIR}/logs/ossec.log
++
++echo chown -R ${USER}:${GROUP} ${DIR}/queue/diff
++echo chmod -R 750 ${DIR}/queue/diff
++echo chmod 740 ${DIR}/queue/diff/* "> /dev/null 2>&1"
+ 
+ 
+ 
+ 
+ # For the etc dir
+-chmod 550 ${DIR}/etc
+-chown -R root:${GROUP} ${DIR}/etc
++echo chmod 550 ${DIR}/etc
++echo chown -R root:${GROUP} ${DIR}/etc
+ 
+ ls /etc/localtime > /dev/null 2>&1
+ if [ $? = 0 ]; then
+@@ -167,25 +167,25 @@
+ cp -pr ../etc/client.keys ${DIR}/etc/ > /dev/null 2>&1
+ cp -pr agentlessd/scripts/* ${DIR}/agentless/
+ 
+-chown root:${GROUP} ${DIR}/etc/internal_options.conf
+-chown root:${GROUP} ${DIR}/etc/local_internal_options.conf > /dev/null 2>&1
+-chown root:${GROUP} ${DIR}/etc/client.keys > /dev/null 2>&1
+-chown root:${GROUP} ${DIR}/agentless/*
+-chown ${USER}:${GROUP} ${DIR}/.ssh
+-chown -R root:${GROUP} ${DIR}/etc/shared
+-
+-chmod 550 ${DIR}/etc
+-chmod 440 ${DIR}/etc/internal_options.conf
+-chmod 440 ${DIR}/etc/local_internal_options.conf > /dev/null 2>&1
+-chmod 440 ${DIR}/etc/client.keys > /dev/null 2>&1
+-chmod -R 770 ${DIR}/etc/shared # ossec must be able to write to it
+-chmod 550 ${DIR}/agentless/*
+-chmod 700 ${DIR}/.ssh
++echo chown root:${GROUP} ${DIR}/etc/internal_options.conf
++echo chown root:${GROUP} ${DIR}/etc/local_internal_options.conf "> /dev/null 2>&1"
++echo chown root:${GROUP} ${DIR}/etc/client.keys "> /dev/null 2>&1"
++echo chown root:${GROUP} ${DIR}/agentless/*
++echo chown ${USER}:${GROUP} ${DIR}/.ssh
++echo chown -R root:${GROUP} ${DIR}/etc/shared
++
++echo chmod 550 ${DIR}/etc
++echo chmod 440 ${DIR}/etc/internal_options.conf
++echo chmod 440 ${DIR}/etc/local_internal_options.conf > /dev/null 2>&1
++echo chmod 440 ${DIR}/etc/client.keys > /dev/null 2>&1
++echo chmod -R 770 ${DIR}/etc/shared # ossec must be able to write to it
++echo chmod 550 ${DIR}/agentless/*
++echo chmod 700 ${DIR}/.ssh
+ 
+ 
+ # For the /var/run
+-chmod 770 ${DIR}/var/run
+-chown root:${GROUP} ${DIR}/var/run
++echo chmod 770 ${DIR}/var/run
++echo chown root:${GROUP} ${DIR}/var/run
+ 
+ 
+ # Moving the binary files
+@@ -201,11 +201,11 @@
+ sh ./init/fw-check.sh execute > /dev/null
+ cp -pr ../active-response/*.sh ${DIR}/active-response/bin/
+ cp -pr ../active-response/firewalls/*.sh ${DIR}/active-response/bin/
+-chmod 755 ${DIR}/active-response/bin/*
+-chown root:${GROUP} ${DIR}/active-response/bin/*
++echo chmod 755 ${DIR}/active-response/bin/*
++echo chown root:${GROUP} ${DIR}/active-response/bin/*
+ 
+-chown root:${GROUP} ${DIR}/bin/*
+-chmod 550 ${DIR}/bin/*
++echo chown root:${GROUP} ${DIR}/bin/*
++echo chmod 550 ${DIR}/bin/*
+ 
+ 
+ # Moving the config file
+@@ -221,8 +221,8 @@
+ else    
+     cp -pr ../etc/ossec-agent.conf ${DIR}/etc/ossec.conf
+ fi
+-chown root:${GROUP} ${DIR}/etc/ossec.conf
+-chmod 440 ${DIR}/etc/ossec.conf
++echo chown root:${GROUP} ${DIR}/etc/ossec.conf
++echo chmod 440 ${DIR}/etc/ossec.conf
+ 
+ 
+ 
diff --git a/nixpkgs/pkgs/tools/security/p0f/default.nix b/nixpkgs/pkgs/tools/security/p0f/default.nix
new file mode 100644
index 000000000000..1e618cdce1ad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/p0f/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchurl, libpcap, bash }:
+
+stdenv.mkDerivation rec {
+  pname = "p0f";
+  version = "3.09b";
+
+  src = fetchurl {
+    url    = "http://lcamtuf.coredump.cx/p0f3/releases/${pname}-${version}.tgz";
+    sha256 = "0zqfq3gdnha29ckvlqmyp36c0jhj7f69bhqqx31yb6vkirinhfsl";
+  };
+
+  buildInputs = [ libpcap ];
+
+  buildPhase = ''
+    substituteInPlace config.h --replace "p0f.fp" "$out/etc/p0f.fp"
+    substituteInPlace build.sh --replace "/bin/bash" "${bash}/bin/bash"
+    ./build.sh
+    cd tools && make && cd ..
+  '';
+
+  installPhase = ''
+    mkdir -p $out/sbin $out/etc
+
+    cp ./p0f                $out/sbin
+    cp ./p0f.fp             $out/etc
+
+    cp ./tools/p0f-client   $out/sbin
+    cp ./tools/p0f-sendsyn  $out/sbin
+    cp ./tools/p0f-sendsyn6 $out/sbin
+  '';
+
+  hardeningDisable = [ "format" ];
+
+  meta = {
+    description = "Passive network reconnaissance and fingerprinting tool";
+    homepage    = "http://lcamtuf.coredump.cx/p0f3/";
+    license     = stdenv.lib.licenses.lgpl21;
+    platforms   = stdenv.lib.platforms.linux;
+    maintainers = [ stdenv.lib.maintainers.thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pamtester/default.nix b/nixpkgs/pkgs/tools/security/pamtester/default.nix
new file mode 100644
index 000000000000..21f58ef517ee
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pamtester/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl, pam }:
+
+stdenv.mkDerivation rec {
+  name = "pamtester-0.1.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/pamtester/${name}.tar.gz";
+    sha256 = "1mdj1wj0adcnx354fs17928yn2xfr1hj5mfraq282dagi873sqw3";
+  };
+
+  buildInputs = [ pam ];
+
+  meta = with stdenv.lib; {
+    description = "Utility program to test the PAM facility";
+    homepage = http://pamtester.sourceforge.net/;
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/paperkey/default.nix b/nixpkgs/pkgs/tools/security/paperkey/default.nix
new file mode 100644
index 000000000000..dc3582b7369f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/paperkey/default.nix
@@ -0,0 +1,34 @@
+{ fetchurl, stdenv }:
+
+stdenv.mkDerivation rec {
+  pname = "paperkey";
+  version = "1.6";
+
+  src = fetchurl {
+    url = "https://www.jabberwocky.com/software/paperkey/${pname}-${version}.tar.gz";
+    sha256 = "1xq5gni6gksjkd5avg0zpd73vsr97appksfx0gx2m38s4w9zsid2";
+  };
+
+  postPatch = ''
+    for a in checks/*.sh ; do
+      substituteInPlace $a \
+        --replace /bin/echo echo
+    done
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "Store OpenPGP or GnuPG on paper";
+    longDescription = ''
+      A reasonable way to achieve a long term backup of OpenPGP (GnuPG, PGP, etc)
+      keys is to print them out on paper. Paper and ink have amazingly long
+      retention qualities - far longer than the magnetic or optical means that
+      are generally used to back up computer data.
+    '';
+    homepage = "https://www.jabberwocky.com/software/paperkey/";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ skeidel ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pass/clip-wayland-support.patch b/nixpkgs/pkgs/tools/security/pass/clip-wayland-support.patch
new file mode 100644
index 000000000000..7b8d2eb010d2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pass/clip-wayland-support.patch
@@ -0,0 +1,113 @@
+From b0b784b1a57c0b06936e6f5d6560712b4b810cd3 Mon Sep 17 00:00:00 2001
+From: Brett Cornwall <brett@i--b.com>
+Date: Wed, 27 Feb 2019 00:08:33 -0700
+Subject: clip: Add support for wl-clipboard
+
+Edited to properly apply with
+`set-correct-program-name-for-sleep.patch`.
+
+---
+ README                |  4 +++-
+ man/pass.1            |  5 +++++
+ src/password-store.sh | 26 +++++++++++++++++++++-----
+ 3 files changed, 29 insertions(+), 6 deletions(-)
+
+diff --git a/README b/README
+index 6b59965..1a46242 100644
+--- a/README
++++ b/README
+@@ -19,8 +19,10 @@ Depends on:
+   http://www.gnupg.org/
+ - git
+   http://www.git-scm.com/
+-- xclip
++- xclip (for X11 environments)
+   http://sourceforge.net/projects/xclip/
++- wl-clipboard (for wlroots Wayland-based environments)
++  https://github.com/bugaevc/wl-clipboard
+ - tree >= 1.7.0
+   http://mama.indstate.edu/users/ice/tree/
+ - GNU getopt
+diff --git a/man/pass.1 b/man/pass.1
+index 01a3fbe..a555dcb 100644
+--- a/man/pass.1
++++ b/man/pass.1
+@@ -99,6 +99,8 @@ Decrypt and print a password named \fIpass-name\fP. If \fI--clip\fP or \fI-c\fP
+ is specified, do not print the password but instead copy the first (or otherwise specified)
+ line to the clipboard using
+ .BR xclip (1)
++or
++.BR wl-clipboard(1)
+ and then restore the clipboard after 45 (or \fIPASSWORD_STORE_CLIP_TIME\fP) seconds. If \fI--qrcode\fP
+ or \fI-q\fP is specified, do not print the password but instead display a QR code using
+ .BR qrencode (1)
+@@ -132,6 +134,8 @@ in generating passwords can be changed with the \fIPASSWORD_STORE_CHARACTER_SET\
+ If \fI--clip\fP or \fI-c\fP is specified, do not print the password but instead copy
+ it to the clipboard using
+ .BR xclip (1)
++or
++.BR wl-clipboard(1)
+ and then restore the clipboard after 45 (or \fIPASSWORD_STORE_CLIP_TIME\fP) seconds. If \fI--qrcode\fP
+ or \fI-q\fP is specified, do not print the password but instead display a QR code using
+ .BR qrencode (1)
+@@ -466,6 +470,7 @@ The location of the text editor used by \fBedit\fP.
+ .BR tr (1),
+ .BR git (1),
+ .BR xclip (1),
++.BR wl-clipboard (1),
+ .BR qrencode (1).
+ 
+ .SH AUTHOR
+diff --git a/src/password-store.sh b/src/password-store.sh
+index d89d455..284eabf 100755
+--- a/src/password-store.sh
++++ b/src/password-store.sh
+@@ -152,16 +152,32 @@ check_sneaky_paths() {
+ #
+ 
+ clip() {
++	if [[ -n $WAYLAND_DISPLAY ]]; then
++		local copy_cmd=( wl-copy )
++		local paste_cmd=( wl-paste -n )
++		if [[ $X_SELECTION == primary ]]; then
++			copy_cmd+=( --primary )
++			paste_cmd+=( --primary )
++		fi
++		local display_name="$WAYLAND_DISPLAY"
++	elif [[ -n $DISPLAY ]]; then
++		local copy_cmd=( xclip -selection "$X_SELECTION" )
++		local paste_cmd=( xclip -o -selection "$X_SELECTION" )
++		local display_name="$DISPLAY"
++	else
++		die "Error: No X11 or Wayland display detected"
++	fi
++	local sleep_argv0="password store sleep on display $display_name"
++
+ 	# This base64 business is because bash cannot store binary data in a shell
+ 	# variable. Specifically, it cannot store nulls nor (non-trivally) store
+ 	# trailing new lines.
+-	local sleep_argv0="password store sleep on display $DISPLAY"
+ 	pkill -P $(pgrep -f "^$sleep_argv0") 2>/dev/null && sleep 0.5
+-	local before="$(xclip -o -selection "$X_SELECTION" 2>/dev/null | $BASE64)"
+-	echo -n "$1" | xclip -selection "$X_SELECTION" || die "Error: Could not copy data to the clipboard"
++	local before="$("${paste_cmd[@]}" 2>/dev/null | $BASE64)"
++	echo -n "$1" | "${copy_cmd[@]}" || die "Error: Could not copy data to the clipboard"
+ 	(
+ 		( exec -a "$sleep_argv0" bash <(echo trap 'kill %1' TERM\; sleep "$CLIP_TIME & wait") )
+-		local now="$(xclip -o -selection "$X_SELECTION" | $BASE64)"
++		local now="$("${paste_cmd[@]}" | $BASE64)"
+ 		[[ $now != $(echo -n "$1" | $BASE64) ]] && before="$now"
+ 
+ 		# It might be nice to programatically check to see if klipper exists,
+@@ -173,7 +189,7 @@ clip() {
+ 		# so we axe it here:
+ 		qdbus org.kde.klipper /klipper org.kde.klipper.klipper.clearClipboardHistory &>/dev/null
+ 
+-		echo "$before" | $BASE64 -d | xclip -selection "$X_SELECTION"
++		echo "$before" | $BASE64 -d | "${copy_cmd[@]}"
+ 	) >/dev/null 2>&1 & disown
+ 	echo "Copied $2 to clipboard. Will clear in $CLIP_TIME seconds."
+ }
+-- 
+cgit v1.2.1-28-gf32c
+
diff --git a/nixpkgs/pkgs/tools/security/pass/default.nix b/nixpkgs/pkgs/tools/security/pass/default.nix
new file mode 100644
index 000000000000..54a8f4de7d7b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pass/default.nix
@@ -0,0 +1,153 @@
+{ stdenv, lib, pkgs, fetchurl, buildEnv
+, coreutils, gnused, getopt, git, tree, gnupg, openssl, which, procps
+, qrencode , makeWrapper
+
+, xclip ? null, xdotool ? null, dmenu ? null
+, x11Support ? !stdenv.isDarwin
+, waylandSupport ? false, wl-clipboard ? null
+
+# For backwards-compatibility
+, tombPluginSupport ? false
+}:
+
+with lib;
+
+assert x11Support -> xclip != null
+                  && xdotool != null
+                  && dmenu != null;
+
+assert waylandSupport -> wl-clipboard != null;
+
+let
+  passExtensions = import ./extensions { inherit pkgs; };
+
+  env = extensions:
+    let
+      selected = extensions passExtensions
+        ++ stdenv.lib.optional tombPluginSupport passExtensions.tomb;
+    in buildEnv {
+      name = "pass-extensions-env";
+      paths = selected;
+      buildInputs = concatMap (x: x.buildInputs) selected;
+    };
+
+  generic = extensionsEnv: extraPassthru: stdenv.mkDerivation rec {
+    version = "1.7.3";
+    pname = "password-store";
+
+    src = fetchurl {
+      url    = "https://git.zx2c4.com/password-store/snapshot/${pname}-${version}.tar.xz";
+      sha256 = "1x53k5dn3cdmvy8m4fqdld4hji5n676ksl0ql4armkmsds26av1b";
+    };
+
+    patches = [ ./set-correct-program-name-for-sleep.patch ]
+      ++ stdenv.lib.optional stdenv.isDarwin ./no-darwin-getopt.patch
+      # TODO (@Ma27) this patch adds support for wl-clipboard and can be removed during the next
+      # version bump.
+      ++ stdenv.lib.optional waylandSupport ./clip-wayland-support.patch;
+
+    nativeBuildInputs = [ makeWrapper ];
+
+    buildInputs = [ extensionsEnv ];
+
+    installFlags = [ "PREFIX=$(out)" "WITH_ALLCOMP=yes" ];
+
+    postInstall = ''
+      # Install Emacs Mode. NOTE: We can't install the necessary
+      # dependencies (s.el and f.el) here. The user has to do this
+      # himself.
+      mkdir -p "$out/share/emacs/site-lisp"
+      cp "contrib/emacs/password-store.el" "$out/share/emacs/site-lisp/"
+    '' + optionalString x11Support ''
+      cp "contrib/dmenu/passmenu" "$out/bin/"
+    '';
+
+    wrapperPath = with stdenv.lib; makeBinPath ([
+      coreutils
+      getopt
+      git
+      gnupg
+      gnused
+      tree
+      which
+      qrencode
+      procps
+    ] ++ optional stdenv.isDarwin openssl
+      ++ ifEnable x11Support [ dmenu xclip xdotool ]
+      ++ optional waylandSupport wl-clipboard);
+
+    postFixup = ''
+      # Link extensions env
+      rmdir $out/lib/password-store/extensions
+      ln -s ${extensionsEnv}/lib/password-store/extensions $out/lib/password-store/.
+      for f in ${extensionsEnv}/share/man/man1/*.1.gz; do
+          ln -s $f $out/share/man/man1/
+      done
+
+      # Fix program name in --help
+      substituteInPlace $out/bin/pass \
+        --replace 'PROGRAM="''${0##*/}"' "PROGRAM=pass"
+
+      # Ensure all dependencies are in PATH
+      wrapProgram $out/bin/pass \
+        --prefix PATH : "${wrapperPath}"
+    '' + stdenv.lib.optionalString x11Support ''
+      # We just wrap passmenu with the same PATH as pass. It doesn't
+      # need all the tools in there but it doesn't hurt either.
+      wrapProgram $out/bin/passmenu \
+        --prefix PATH : "$out/bin:${wrapperPath}"
+    '';
+
+    # Turn "check" into "installcheck", since we want to test our pass,
+    # not the one before the fixup.
+    postPatch = ''
+      patchShebangs tests
+
+      # the turning
+      sed -i -e 's@^PASS=.*''$@PASS=$out/bin/pass@' \
+             -e 's@^GPGS=.*''$@GPG=${gnupg}/bin/gpg2@' \
+             -e '/which gpg/ d' \
+        tests/setup.sh
+    '' + stdenv.lib.optionalString stdenv.isDarwin ''
+      # 'pass edit' uses hdid, which is not available from the sandbox.
+      rm -f tests/t0200-edit-tests.sh
+      rm -f tests/t0010-generate-tests.sh
+      rm -f tests/t0020-show-tests.sh
+      rm -f tests/t0050-mv-tests.sh
+      rm -f tests/t0100-insert-tests.sh
+      rm -f tests/t0300-reencryption.sh
+      rm -f tests/t0400-grep.sh
+    '';
+
+    doCheck = false;
+
+    doInstallCheck = true;
+    installCheckInputs = [ git ];
+    installCheckTarget = "test";
+
+    passthru = {
+      extensions = passExtensions;
+    } // extraPassthru;
+
+    meta = with stdenv.lib; {
+      description = "Stores, retrieves, generates, and synchronizes passwords securely";
+      homepage    = https://www.passwordstore.org/;
+      license     = licenses.gpl2Plus;
+      maintainers = with maintainers; [ lovek323 the-kenny fpletz tadfisher globin ];
+      platforms   = platforms.unix;
+
+      longDescription = ''
+        pass is a very simple password store that keeps passwords inside gpg2
+        encrypted files inside a simple directory tree residing at
+        ~/.password-store. The pass utility provides a series of commands for
+        manipulating the password store, allowing the user to add, remove, edit,
+        synchronize, generate, and manipulate passwords.
+      '';
+    };
+  };
+
+in
+
+generic (env (_: [])) {
+  withExtensions = extensions: generic (env extensions) {};
+}
diff --git a/nixpkgs/pkgs/tools/security/pass/extensions/audit.nix b/nixpkgs/pkgs/tools/security/pass/extensions/audit.nix
new file mode 100644
index 000000000000..ca5ca855337f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pass/extensions/audit.nix
@@ -0,0 +1,42 @@
+{ stdenv, pass, fetchFromGitHub, pythonPackages, makeWrapper }:
+
+let
+  pythonEnv = pythonPackages.python.withPackages (p: [ p.requests ]);
+
+in stdenv.mkDerivation rec {
+  pname = "pass-audit";
+  version = "0.1";
+
+  src = fetchFromGitHub {
+    owner = "roddhjav";
+    repo = "pass-audit";
+    rev = "v${version}";
+    sha256 = "0v0db8bzpcaa7zqz17syn3c78mgvw4mpg8qg1gh5rmbjsjfxw6sm";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = [ pythonEnv ];
+
+  patchPhase = ''
+    sed -i -e "s|/usr/lib|$out/lib|" audit.bash
+    sed -i -e 's|$0|${pass}/bin/pass|' audit.bash
+  '';
+
+  dontBuild = true;
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  postFixup = ''
+    wrapProgram $out/lib/password-store/extensions/audit.bash \
+      --prefix PATH : "${pythonEnv}/bin" \
+      --run "export PREFIX"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Pass extension for auditing your password repository.";
+    homepage = https://github.com/roddhjav/pass-audit;
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pass/extensions/checkup.nix b/nixpkgs/pkgs/tools/security/pass/extensions/checkup.nix
new file mode 100644
index 000000000000..83a1d7a8872d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pass/extensions/checkup.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchFromGitHub
+, curl, findutils, gnugrep, gnused }:
+
+stdenv.mkDerivation rec {
+  pname = "pass-checkup";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "etu";
+    repo = "pass-checkup";
+    rev = version;
+    sha256 = "17fyf8zj535fg43yddjww1jhxfb3nbdkn622wjxaai2nf46jzh7y";
+  };
+
+  patchPhase = ''
+    substituteInPlace checkup.bash \
+      --replace curl ${curl}/bin/curl \
+      --replace find ${findutils}/bin/find \
+      --replace grep ${gnugrep}/bin/grep \
+      --replace sed ${gnused}/bin/sed
+  '';
+
+  installPhase = ''
+    install -D -m755 checkup.bash $out/lib/password-store/extensions/checkup.bash
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A pass extension to check against the Have I been pwned API to see if your passwords are publicly leaked or not";
+    homepage = "https://github.com/etu/pass-checkup";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ etu ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pass/extensions/default.nix b/nixpkgs/pkgs/tools/security/pass/extensions/default.nix
new file mode 100644
index 000000000000..6eb321229e00
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pass/extensions/default.nix
@@ -0,0 +1,17 @@
+{ pkgs, ... }:
+
+with pkgs;
+
+{
+  pass-audit = callPackage ./audit.nix {
+    pythonPackages = python3Packages;
+  };
+  pass-checkup = callPackage ./checkup.nix {};
+  pass-import = callPackage ./import.nix {
+    pythonPackages = python3Packages;
+  };
+  pass-otp = callPackage ./otp.nix {};
+  pass-tomb = callPackage ./tomb.nix {};
+  pass-update = callPackage ./update.nix {};
+  pass-genphrase = callPackage ./genphrase.nix {};
+}
diff --git a/nixpkgs/pkgs/tools/security/pass/extensions/genphrase.nix b/nixpkgs/pkgs/tools/security/pass/extensions/genphrase.nix
new file mode 100644
index 000000000000..208012e2f883
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pass/extensions/genphrase.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "pass-genphrase";
+  version = "0.2";
+
+  src = fetchFromGitHub {
+    owner = "congma";
+    repo = "pass-genphrase";
+    rev = version;
+    sha256 = "1sdkmz5s6wdx4vdlgqf5kmyrm17zwzy3n52s13qpx32bnnajap1h";
+  };
+
+  dontBuild = true;
+
+  installTargets = [ "globalinstall" ];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  postFixup = ''
+    substituteInPlace $out/lib/password-store/extensions/genphrase.bash \
+      --replace '$EXTENSIONS' "$out/lib/password-store/extensions/"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Pass extension that generates memorable passwords";
+    homepage = https://github.com/congma/pass-genphrase;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ seqizz ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pass/extensions/import.nix b/nixpkgs/pkgs/tools/security/pass/extensions/import.nix
new file mode 100644
index 000000000000..90e3105bbd80
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pass/extensions/import.nix
@@ -0,0 +1,59 @@
+{ stdenv, pass, fetchFromGitHub, pythonPackages, makeWrapper, fetchpatch }:
+
+let
+  pythonEnv = pythonPackages.python.withPackages (p: [
+    p.defusedxml
+    p.setuptools
+    p.pyaml
+  ]);
+
+in stdenv.mkDerivation rec {
+  pname = "pass-import";
+  version = "2.6";
+
+  src = fetchFromGitHub {
+    owner = "roddhjav";
+    repo = "pass-import";
+    rev = "v${version}";
+    sha256 = "1q8rln4djh2z8j2ycm654df5y6anm5iv2r19spgy07c3fnisxlac";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = [ pythonEnv ];
+
+  patches = [
+    # https://github.com/roddhjav/pass-import/pull/91
+    (fetchpatch {
+      url = "https://github.com/roddhjav/pass-import/commit/6ccaf639e92df45bd400503757ae4aa2c5c030d7.patch";
+      sha256 = "0lw9vqvbqcy96s7v7nz0i1bdx93x7qr13azymqypcdhjwmq9i63h";
+    })
+  ];
+
+  postPatch = ''
+    sed -i -e 's|$0|${pass}/bin/pass|' import.bash
+  '';
+
+  dontBuild = true;
+
+  installFlags = [
+    "PREFIX=$(out)"
+    "BASHCOMPDIR=$(out)/etc/bash_completion.d"
+  ];
+
+  postFixup = ''
+    install -D pass_import.py $out/${pythonPackages.python.sitePackages}/pass_import.py
+    wrapProgram $out/lib/password-store/extensions/import.bash \
+      --prefix PATH : "${pythonEnv}/bin" \
+      --prefix PYTHONPATH : "$out/${pythonPackages.python.sitePackages}" \
+      --run "export PREFIX"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Pass extension for importing data from existing password managers";
+    homepage = https://github.com/roddhjav/pass-import;
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ lovek323 the-kenny fpletz tadfisher ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pass/extensions/otp.nix b/nixpkgs/pkgs/tools/security/pass/extensions/otp.nix
new file mode 100644
index 000000000000..4b15c3d68035
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pass/extensions/otp.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchFromGitHub, oathToolkit }:
+
+stdenv.mkDerivation rec {
+  pname = "pass-otp";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "tadfisher";
+    repo = "pass-otp";
+    rev = "v${version}";
+    sha256 = "0cpqrf3939hcvwg7sd8055ghc8x964ilimlri16czzx188a9jx9v";
+  };
+
+  buildInputs = [ oathToolkit ];
+
+  dontBuild = true;
+
+  patchPhase = ''
+    sed -i -e 's|OATH=\$(which oathtool)|OATH=${oathToolkit}/bin/oathtool|' otp.bash
+  '';
+
+  installFlags = [ "PREFIX=$(out)"
+                   "BASHCOMPDIR=$(out)/share/bash-completion/completions"
+                 ];
+
+  meta = with stdenv.lib; {
+    description = "A pass extension for managing one-time-password (OTP) tokens";
+    homepage = https://github.com/tadfisher/pass-otp;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ jwiegley tadfisher toonn ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pass/extensions/tomb.nix b/nixpkgs/pkgs/tools/security/pass/extensions/tomb.nix
new file mode 100644
index 000000000000..ccb558c9b853
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pass/extensions/tomb.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, tomb }:
+
+stdenv.mkDerivation rec {
+  pname = "pass-tomb";
+  version = "1.1";
+
+  src = fetchFromGitHub {
+    owner = "roddhjav";
+    repo = "pass-tomb";
+    rev = "v${version}";
+    sha256 = "0wxa673yyzasjlkpd5f3yl5zf7bhsw7h1jbhf6sdjz65bypr2596";
+  };
+
+  buildInputs = [ tomb ];
+
+  dontBuild = true;
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  postFixup = ''
+    substituteInPlace $out/lib/password-store/extensions/tomb.bash \
+      --replace 'TOMB="''${PASSWORD_STORE_TOMB:-tomb}"' 'TOMB="''${PASSWORD_STORE_TOMB:-${tomb}/bin/tomb}"'
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Pass extension that keeps the password store encrypted inside a tomb";
+    homepage = https://github.com/roddhjav/pass-tomb;
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ lovek323 the-kenny fpletz tadfisher ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pass/extensions/update.nix b/nixpkgs/pkgs/tools/security/pass/extensions/update.nix
new file mode 100644
index 000000000000..b712557ab3eb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pass/extensions/update.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "pass-update";
+  version = "2.0";
+
+  src = fetchFromGitHub {
+    owner = "roddhjav";
+    repo = "pass-update";
+    rev = "v${version}";
+    sha256 = "0a81q0jfni185zmbislzbcv0qr1rdp0cgr9wf9riygis2xv6rs6k";
+  };
+
+  dontBuild = true;
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with stdenv.lib; {
+    description = "Pass extension that provides an easy flow for updating passwords";
+    homepage = https://github.com/roddhjav/pass-update;
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ lovek323 the-kenny fpletz tadfisher ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pass/no-darwin-getopt.patch b/nixpkgs/pkgs/tools/security/pass/no-darwin-getopt.patch
new file mode 100644
index 000000000000..e8f7e138ff02
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pass/no-darwin-getopt.patch
@@ -0,0 +1,9 @@
+diff -Naur password-store-1.6.5-orig/src/platform/darwin.sh password-store-1.6.5/src/platform/darwin.sh
+--- password-store-1.6.5-orig/src/platform/darwin.sh	2015-01-28 16:43:02.000000000 +0000
++++ password-store-1.6.5/src/platform/darwin.sh	2015-02-15 16:09:02.000000000 +0000
+@@ -31,5 +31,4 @@
+ 	mount -t hfs -o noatime -o nobrowse "$DARWIN_RAMDISK_DEV" "$SECURE_TMPDIR" || die "Error: could not mount filesystem on ramdisk."
+ }
+ 
+-GETOPT="$(brew --prefix gnu-getopt 2>/dev/null || { which port &>/dev/null && echo /opt/local; } || echo /usr/local)/bin/getopt"
+ SHRED="srm -f -z"
diff --git a/nixpkgs/pkgs/tools/security/pass/rofi-pass.nix b/nixpkgs/pkgs/tools/security/pass/rofi-pass.nix
new file mode 100644
index 000000000000..b188b411517b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pass/rofi-pass.nix
@@ -0,0 +1,57 @@
+{ stdenv, fetchFromGitHub, pass, rofi, coreutils, utillinux, xdotool, gnugrep
+, libnotify, pwgen, findutils, gawk, gnused, xclip, makeWrapper
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rofi-pass";
+  version = "2.0.2";
+
+  src = fetchFromGitHub {
+    owner = "carnager";
+    repo = "rofi-pass";
+    rev = version;
+    sha256 = "131jpcwyyzgzjn9lx4k1zn95pd68pjw4i41jfzcp9z9fnazyln5n";
+  };
+
+  buildInputs = [ makeWrapper ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -a rofi-pass $out/bin/rofi-pass
+
+    mkdir -p $out/share/doc/rofi-pass/
+    cp -a config.example $out/share/doc/rofi-pass/config.example
+  '';
+
+  wrapperPath = with stdenv.lib; makeBinPath [
+    coreutils
+    findutils
+    gawk
+    gnugrep
+    gnused
+    libnotify
+    (pass.withExtensions (ext: [ ext.pass-otp ]))
+    pwgen
+    rofi
+    utillinux
+    xclip
+    xdotool
+  ];
+
+  fixupPhase = ''
+    patchShebangs $out/bin
+
+    wrapProgram $out/bin/rofi-pass \
+      --prefix PATH : "${wrapperPath}"
+  '';
+
+  meta = {
+    description = "A script to make rofi work with password-store";
+    homepage = https://github.com/carnager/rofi-pass;
+    maintainers = with stdenv.lib.maintainers; [ the-kenny ];
+    license = stdenv.lib.licenses.gpl3;
+    platforms = with stdenv.lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pass/set-correct-program-name-for-sleep.patch b/nixpkgs/pkgs/tools/security/pass/set-correct-program-name-for-sleep.patch
new file mode 100644
index 000000000000..f3a844ad2d6d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pass/set-correct-program-name-for-sleep.patch
@@ -0,0 +1,69 @@
+From d11261c2ad184daf6e9edd777bc8a3372c277b4b Mon Sep 17 00:00:00 2001
+From: Johannes Frankenau <johannes@frankenau.net>
+Date: Fri, 10 Aug 2018 09:49:57 +0200
+Subject: [PATCH] Patch the clip() function to work even when using
+ single-binary coreutils
+
+---
+ src/password-store.sh  | 4 ++--
+ src/platform/cygwin.sh | 4 ++--
+ src/platform/darwin.sh | 4 ++--
+ 3 files changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/src/password-store.sh b/src/password-store.sh
+index 7264ffc..68551a4 100755
+--- a/src/password-store.sh
++++ b/src/password-store.sh
+@@ -155,11 +155,11 @@ clip() {
+ 	# variable. Specifically, it cannot store nulls nor (non-trivally) store
+ 	# trailing new lines.
+ 	local sleep_argv0="password store sleep on display $DISPLAY"
+-	pkill -f "^$sleep_argv0" 2>/dev/null && sleep 0.5
++	pkill -P $(pgrep -f "^$sleep_argv0") 2>/dev/null && sleep 0.5
+ 	local before="$(xclip -o -selection "$X_SELECTION" 2>/dev/null | $BASE64)"
+ 	echo -n "$1" | xclip -selection "$X_SELECTION" || die "Error: Could not copy data to the clipboard"
+ 	(
+-		( exec -a "$sleep_argv0" bash <<<"trap 'kill %1' TERM; sleep '$CLIP_TIME' & wait" )
++		( exec -a "$sleep_argv0" bash <(echo trap 'kill %1' TERM\; sleep "$CLIP_TIME & wait") )
+ 		local now="$(xclip -o -selection "$X_SELECTION" | $BASE64)"
+ 		[[ $now != $(echo -n "$1" | $BASE64) ]] && before="$now"
+ 
+diff --git a/src/platform/cygwin.sh b/src/platform/cygwin.sh
+index 5a8d5ea..423e0ce 100644
+--- a/src/platform/cygwin.sh
++++ b/src/platform/cygwin.sh
+@@ -3,11 +3,11 @@
+ 
+ clip() {
+ 	local sleep_argv0="password store sleep on display $DISPLAY"
+-	pkill -f "^$sleep_argv0" 2>/dev/null && sleep 0.5
++	pkill -P $(pgrep -f "^$sleep_argv0") 2>/dev/null && sleep 0.5
+ 	local before="$($BASE64 < /dev/clipboard)"
+ 	echo -n "$1" > /dev/clipboard
+ 	(
+-		( exec -a "$sleep_argv0" sleep "$CLIP_TIME" )
++		( exec -a "$sleep_argv0" bash <(echo sleep "$CLIP_TIME") )
+ 		local now="$($BASE64 < /dev/clipboard)"
+ 		[[ $now != $(echo -n "$1" | $BASE64) ]] && before="$now"
+ 		echo "$before" | $BASE64 -d > /dev/clipboard
+diff --git a/src/platform/darwin.sh b/src/platform/darwin.sh
+index 342ecce..9e12837 100644
+--- a/src/platform/darwin.sh
++++ b/src/platform/darwin.sh
+@@ -3,11 +3,11 @@
+ 
+ clip() {
+ 	local sleep_argv0="password store sleep for user $(id -u)"
+-	pkill -f "^$sleep_argv0" 2>/dev/null && sleep 0.5
++	pkill -P $(pgrep -f "^$sleep_argv0") 2>/dev/null && sleep 0.5
+ 	local before="$(pbpaste | $BASE64)"
+ 	echo -n "$1" | pbcopy
+ 	(
+-		( exec -a "$sleep_argv0" sleep "$CLIP_TIME" )
++		( exec -a "$sleep_argv0" bash <(echo sleep "$CLIP_TIME") )
+ 		local now="$(pbpaste | $BASE64)"
+ 		[[ $now != $(echo -n "$1" | $BASE64) ]] && before="$now"
+ 		echo "$before" | $BASE64 -d | pbcopy
+-- 
+2.16.4
+
diff --git a/nixpkgs/pkgs/tools/security/passff-host/default.nix b/nixpkgs/pkgs/tools/security/passff-host/default.nix
new file mode 100644
index 000000000000..59f03db0200d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/passff-host/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, fetchFromGitHub, python3, pass }:
+
+stdenv.mkDerivation rec {
+  pname = "passff-host";
+  version = "1.2.1";
+
+  src = fetchFromGitHub {
+    owner = "passff";
+    repo = pname;
+    rev = version;
+    sha256 = "0ydfwvhgnw5c3ydx2gn5d7ys9g7cxlck57vfddpv6ix890v21451";
+  };
+
+  buildInputs = [ python3 ];
+  makeFlags = [ "VERSION=${version}" ];
+
+  patchPhase = ''
+    sed -i 's#COMMAND = "pass"#COMMAND = "${pass}/bin/pass"#' src/passff.py
+  '';
+
+  installPhase = ''
+    substituteInPlace bin/${version}/passff.json \
+      --replace PLACEHOLDER $out/share/passff-host/passff.py
+
+    install -Dt $out/share/passff-host \
+      bin/${version}/passff.{py,json}
+
+    nativeMessagingPaths=(
+      /lib/mozilla/native-messaging-hosts
+      /etc/opt/chrome/native-messaging-hosts
+      /etc/chromium/native-messaging-hosts
+      /etc/vivaldi/native-messaging-hosts
+    )
+
+    for manifestDir in "''${nativeMessagingPaths[@]}"; do
+      install -d $out$manifestDir
+      ln -s $out/share/passff-host/passff.json $out$manifestDir/
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Host app for the WebExtension PassFF";
+    homepage = https://github.com/passff/passff-host;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ nadrieril ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pbis/default.nix b/nixpkgs/pkgs/tools/security/pbis/default.nix
new file mode 100644
index 000000000000..176ef7f7616b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pbis/default.nix
@@ -0,0 +1,70 @@
+{ stdenv, fetchFromGitHub, autoconf, automake, libtool, perl, flex, bison, curl,
+  pam, popt, libiconv, libuuid, openssl_1_0_2, cyrus_sasl, sqlite, tdb, libxml2 }:
+
+stdenv.mkDerivation rec {
+  pname = "pbis-open";
+  version = "9.1.0";
+
+  src = fetchFromGitHub {
+    owner = "BeyondTrust";
+    repo = pname;
+    rev = version;
+    sha256 = "081jm34sf488nwz5wzs55d6rxx3sv566x6p4h1yqcjaw36174m8v";
+  };
+
+  nativeBuildInputs = [
+    autoconf automake libtool perl flex bison
+  ];
+
+  # curl must be placed after openssl_1_0_2, because it pulls openssl 1.1 dependency.
+  buildInputs = [
+    pam popt libiconv libuuid openssl_1_0_2 cyrus_sasl
+    curl sqlite popt tdb libxml2 /*libglade2 for gtk*/
+  ];
+
+  postPatch = ''
+    patchShebangs .
+    sed -i -e 's/legacy//g' lwupgrade/MakeKitBuild # disable /opt/ symlinks
+    sed -i -e 's/tdb.h//g' samba-interop/MakeKitBuild #include <tdb.h> fails but it won't affect the build
+  '';
+  preConfigure = ''
+    mkdir release
+    cd release
+    if [ $CC = gcc ]; then
+            NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -Wno-error=format-overflow -Wno-error=address-of-packed-member"
+    fi
+    NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -isystem ${stdenv.lib.getDev libxml2}/include/libxml2 -Wno-error=array-bounds -Wno-error=pointer-sign -Wno-error=deprecated-declarations -Wno-error=unused-variable"
+  '';
+  configureScript = ''../configure'';
+  configureFlags = [
+    "CFLAGS=-O"
+    "--docdir=${placeholder "prefix"}/share/doc"
+    "--mandir=${placeholder "prefix"}/share/doc/man"
+    "--datadir=${placeholder "prefix"}/share"
+    "--lw-initdir=${placeholder "prefix"}/etc/init.d"
+    "--selinux=no" # NixOS does not support SELinux
+    "--build-isas=x86_64" # [lwbase] endianness (host/x86_32): [lwbase] ERROR: could not determine endianness
+    "--fail-on-warn=no"
+    # "--debug=yes"
+  ]; # ^ See https://github.com/BeyondTrust/pbis-open/issues/124
+  configureFlagsArray = [ "--lw-bundled-libs=linenoise-mob tomlc99 opensoap krb5 cyrus-sasl curl openldap ${ if libuuid == null then "libuuid" else "" }" ];
+  # ^ it depends on old krb5 version 1.9 (issue #228)
+  # linenoise-mod, tomlc99, opensoap is not in nixpkgs.
+  # krb5 must be old one, and cyrus-sasl and openldap have dependency to newer libkrb5 that cause runtime error
+  enableParallelBuilding = true;
+  makeFlags = "SHELL=";
+  hardeningDisable = [ "format" ]; # -Werror=format-security
+  installPhase = ''
+    mkdir $sys
+    mv stage/{lib,var} $sys
+    mv stage$out $out
+  '';
+  outputs = [ "out" "sys" ];
+
+  meta = with stdenv.lib; {
+    description = "BeyondTrust AD Bridge Open simplifies the process of joining non-Microsoft hosts to Active Directory domains";
+    homepage = "https://github.com/BeyondTrust/pbis-open";
+    license = with licenses; [ gpl2 lgpl21 ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pcsc-cyberjack/default.nix b/nixpkgs/pkgs/tools/security/pcsc-cyberjack/default.nix
new file mode 100644
index 000000000000..8aadb685aa8b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pcsc-cyberjack/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchurl, pkgconfig, libusb, pcsclite }:
+
+stdenv.mkDerivation rec {
+  pname = "pcsc-cyberjack";
+  version = "3.99.5_SP12";
+
+  src = with stdenv.lib; let
+    splittedVer = splitString "_" version;
+    mainVer = if length splittedVer >= 1 then head splittedVer else version;
+    spVer = optionalString (length splittedVer >= 1) ("." + last splittedVer);
+    tarballVersion = "${mainVer}final${spVer}";
+  in fetchurl {
+    url = "http://support.reiner-sct.de/downloads/LINUX/V${version}"
+        + "/pcsc-cyberjack-${tarballVersion}.tar.bz2";
+    sha256 = "04pkmybal56s5xnjld09vl1s1h6qf8mvhm41b758d6hi240kgp1j";
+  };
+
+  outputs = [ "out" "tools" ];
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libusb pcsclite ];
+
+  configureFlags = [
+    "--with-usbdropdir=${placeholder "out"}/pcsc/drivers"
+    "--bindir=${placeholder "tools"}/bin"
+  ];
+
+  postInstall = "make -C tools/cjflash install";
+
+  meta = with stdenv.lib; {
+    description = "REINER SCT cyberJack USB chipcard reader user space driver";
+    homepage = https://www.reiner-sct.com/;
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ aszlig ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pcsc-scm-scl011/default.nix b/nixpkgs/pkgs/tools/security/pcsc-scm-scl011/default.nix
new file mode 100644
index 000000000000..0302fc6fc674
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pcsc-scm-scl011/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, fetchurl, unzip, libusb }:
+
+let
+  arch = if stdenv.hostPlatform.system == "i686-linux" then "32"
+  else if stdenv.hostPlatform.system == "x86_64-linux" then "64"
+  else throw "Unsupported system: ${stdenv.hostPlatform.system}";
+in
+stdenv.mkDerivation rec {
+  pname = "pcsc-scm-scl";
+  version = "2.09";
+
+  src = fetchurl {
+    url = "http://files.identiv.com/products/smart-card-readers/contactless/scl010-011/Linux_Driver_Ver${version}.zip";
+    sha256 = "0ik26sxgqgsqplksl87z61vwmx51k7plaqmrkdid7xidgfhfxr42";
+  };
+
+  buildInputs = [ unzip ];
+
+  unpackPhase = ''
+    unzip $src
+    tar xf "Linux Driver Ver${version}/sclgeneric_${version}_linux_${arch}bit.tar.gz"
+    export sourceRoot=$(readlink -e sclgeneric_${version}_linux_${arch}bit)
+  '';
+
+  # Add support for SCL011 nPA (subsidized model for German eID)
+  patches = [ ./eid.patch ];
+
+  installPhase = ''
+    mkdir -p $out/pcsc/drivers
+    cp -r proprietary/*.bundle $out/pcsc/drivers
+  '';
+
+  libPath = stdenv.lib.makeLibraryPath [ libusb ];
+
+  fixupPhase = ''
+    patchelf --set-rpath $libPath \
+      $out/pcsc/drivers/SCLGENERIC.bundle/Contents/Linux/libSCLGENERIC.so.${version};
+  '';
+
+  meta = with stdenv.lib; {
+    description = "SCM Microsystems SCL011 chipcard reader user space driver";
+    homepage = http://www.scm-pc-card.de/index.php?lang=en&page=product&function=show_product&product_id=630;
+    downloadPage = https://support.identiv.com/scl010-scl011/;
+    license = licenses.unfreeRedistributable;
+    maintainers = with maintainers; [ sephalon ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pcsc-scm-scl011/eid.patch b/nixpkgs/pkgs/tools/security/pcsc-scm-scl011/eid.patch
new file mode 100644
index 000000000000..6e7ffd60f72f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pcsc-scm-scl011/eid.patch
@@ -0,0 +1,28 @@
+diff --git a/proprietary/SCLGENERIC.bundle/Contents/Info.plist b/proprietary/SCLGENERIC.bundle/Contents/Info.plist
+index 412d6b9..5d1c6cc 100755
+--- a/proprietary/SCLGENERIC.bundle/Contents/Info.plist
++++ b/proprietary/SCLGENERIC.bundle/Contents/Info.plist
+@@ -34,6 +34,7 @@
+ 		<string>0x04E6</string>		

+ 		<string>0x04E6</string>

+ 		<string>0x04E6</string>

++		<string>0x04E6</string>

+ 	</array>

+ 

+ 	<key>ifdProductID</key>

+@@ -42,6 +43,7 @@
+ 		<string>0x5291</string>

+ 		<string>0x5290</string>

+ 		<string>0x5293</string>

++		<string>0x5292</string>

+ 	</array>

+ 

+ 	<key>ifdFriendlyName</key>

+@@ -50,6 +52,7 @@
+ 		<string>SCL010 Contactless Reader</string>

+ 		<string>SCR331CL-NTTCom</string>

+ 		<string>SCL011G Contactless Reader</string>

++		<string>SCM Microsystems, Inc. SCL011 RFID reader</string>

+ 	</array>

+ 

+ </dict>

diff --git a/nixpkgs/pkgs/tools/security/pcsclite/default.nix b/nixpkgs/pkgs/tools/security/pcsclite/default.nix
new file mode 100644
index 000000000000..263c308fc3d6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pcsclite/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, fetchurl, pkgconfig, udev, dbus, perl, python3
+, IOKit ? null }:
+
+stdenv.mkDerivation rec {
+  pname = "pcsclite";
+  version = "1.8.25";
+
+  outputs = [ "bin" "out" "dev" "doc" "man" ];
+
+  src = fetchurl {
+    url = "https://pcsclite.apdu.fr/files/pcsc-lite-${version}.tar.bz2";
+    sha256 = "14l7irs1nsh8b036ag4cfy8wryyysch78scz5dw6xxqwqgnpjvfp";
+  };
+
+  patches = [ ./no-dropdir-literals.patch ];
+
+  configureFlags = [
+    # The OS should care on preparing the drivers into this location
+    "--enable-usbdropdir=/var/lib/pcsc/drivers"
+    "--enable-confdir=/etc"
+    "--enable-ipcdir=/run/pcscd"
+  ] ++ stdenv.lib.optional stdenv.isLinux
+         "--with-systemdsystemunitdir=\${out}/etc/systemd/system"
+    ++ stdenv.lib.optional (!stdenv.isLinux)
+         "--disable-libsystemd";
+
+  postConfigure = ''
+    sed -i -re '/^#define *PCSCLITE_HP_DROPDIR */ {
+      s/(DROPDIR *)(.*)/\1(getenv("PCSCLITE_HP_DROPDIR") ? : \2)/
+    }' config.h
+  '';
+
+  postInstall = ''
+    # pcsc-spy is a debugging utility and it drags python into the closure
+    moveToOutput bin/pcsc-spy "$dev"
+  '';
+
+  nativeBuildInputs = [ pkgconfig perl ];
+  buildInputs = [ python3 ] ++ stdenv.lib.optionals stdenv.isLinux [ udev dbus ]
+             ++ stdenv.lib.optionals stdenv.isDarwin [ IOKit ];
+
+  meta = with stdenv.lib; {
+    description = "Middleware to access a smart card using SCard API (PC/SC)";
+    homepage = https://pcsclite.apdu.fr/;
+    license = licenses.bsd3;
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pcsclite/no-dropdir-literals.patch b/nixpkgs/pkgs/tools/security/pcsclite/no-dropdir-literals.patch
new file mode 100644
index 000000000000..6e6734c95432
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pcsclite/no-dropdir-literals.patch
@@ -0,0 +1,73 @@
+diff --git a/src/hotplug_libudev.c b/src/hotplug_libudev.c
+index a8ba1b8..a53700b 100644
+--- a/src/hotplug_libudev.c
++++ b/src/hotplug_libudev.c
+@@ -119,7 +119,8 @@ static LONG HPReadBundleValues(void)
+ 
+ 	if (NULL == hpDir)
+ 	{
+-		Log1(PCSC_LOG_ERROR, "Cannot open PC/SC drivers directory: " PCSCLITE_HP_DROPDIR);
++		Log2(PCSC_LOG_ERROR, "Cannot open PC/SC drivers directory: %s",
++			PCSCLITE_HP_DROPDIR);
+ 		Log1(PCSC_LOG_ERROR, "Disabling USB support for pcscd.");
+ 		return -1;
+ 	}
+@@ -722,7 +723,7 @@ ULONG HPRegisterForHotplugEvents(void)
+ 
+ 	if (driverSize <= 0)
+ 	{
+-		Log1(PCSC_LOG_INFO, "No bundle files in pcsc drivers directory: "
++		Log2(PCSC_LOG_INFO, "No bundle files in pcsc drivers directory: %s",
+ 			PCSCLITE_HP_DROPDIR);
+ 		Log1(PCSC_LOG_INFO, "Disabling USB support for pcscd");
+ 		return 0;
+diff --git a/src/hotplug_libusb.c b/src/hotplug_libusb.c
+index eff8519..8dd496d 100644
+--- a/src/hotplug_libusb.c
++++ b/src/hotplug_libusb.c
+@@ -138,7 +138,8 @@ static LONG HPReadBundleValues(void)
+ 
+ 	if (hpDir == NULL)
+ 	{
+-		Log1(PCSC_LOG_ERROR, "Cannot open PC/SC drivers directory: " PCSCLITE_HP_DROPDIR);
++		Log2(PCSC_LOG_ERROR, "Cannot open PC/SC drivers directory: %s",
++			PCSCLITE_HP_DROPDIR);
+ 		Log1(PCSC_LOG_ERROR, "Disabling USB support for pcscd.");
+ 		return -1;
+ 	}
+@@ -265,7 +266,8 @@ static LONG HPReadBundleValues(void)
+ 
+ 	if (driverSize == 0)
+ 	{
+-		Log1(PCSC_LOG_INFO, "No bundle files in pcsc drivers directory: " PCSCLITE_HP_DROPDIR);
++		Log2(PCSC_LOG_INFO, "No bundle files in pcsc drivers directory: %s",
++			PCSCLITE_HP_DROPDIR);
+ 		Log1(PCSC_LOG_INFO, "Disabling USB support for pcscd");
+ 	}
+ #ifdef DEBUG_HOTPLUG
+diff --git a/src/hotplug_linux.c b/src/hotplug_linux.c
+index bf69af8..64b0ed7 100644
+--- a/src/hotplug_linux.c
++++ b/src/hotplug_linux.c
+@@ -130,8 +130,8 @@ static LONG HPReadBundleValues(void)
+ 
+ 	if (hpDir == NULL)
+ 	{
+-		Log1(PCSC_LOG_INFO,
+-			"Cannot open PC/SC drivers directory: " PCSCLITE_HP_DROPDIR);
++		Log2(PCSC_LOG_INFO, "Cannot open PC/SC drivers directory: %s",
++			PCSCLITE_HP_DROPDIR);
+ 		Log1(PCSC_LOG_INFO, "Disabling USB support for pcscd.");
+ 		return -1;
+ 	}
+@@ -219,8 +219,8 @@ end:
+ 
+ 	if (bundleSize == 0)
+ 	{
+-		Log1(PCSC_LOG_INFO,
+-			"No bundle files in pcsc drivers directory: " PCSCLITE_HP_DROPDIR);
++		Log2(PCSC_LOG_INFO, "No bundle files in pcsc drivers directory: %s",
++			PCSCLITE_HP_DROPDIR);
+ 		Log1(PCSC_LOG_INFO, "Disabling USB support for pcscd");
+ 	}
+ 
diff --git a/nixpkgs/pkgs/tools/security/pcsctools/default.nix b/nixpkgs/pkgs/tools/security/pcsctools/default.nix
new file mode 100644
index 000000000000..fa53b91a02f1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pcsctools/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, lib, fetchurl, makeWrapper, pkgconfig, udev, dbus, pcsclite
+, wget, coreutils, perlPackages
+}:
+
+let deps = lib.makeBinPath [ wget coreutils ];
+
+in stdenv.mkDerivation rec {
+  name = "pcsc-tools-1.5.5";
+
+  src = fetchurl {
+    url = "http://ludovic.rousseau.free.fr/softwares/pcsc-tools/${name}.tar.bz2";
+    sha256 = "01251m8hf7by8rw8fayhjxmcqvi6dp150680fpf89bqycha2vgqv";
+  };
+
+  buildInputs = [ udev dbus perlPackages.perl pcsclite ];
+
+  nativeBuildInputs = [ makeWrapper pkgconfig ];
+
+  postInstall = ''
+    wrapProgram $out/bin/scriptor \
+      --set PERL5LIB "${with perlPackages; makePerlPath [ pcscperl ]}"
+    wrapProgram $out/bin/gscriptor \
+      --set PERL5LIB "${with perlPackages; makePerlPath [ pcscperl Glib Gtk2 Pango Cairo ]}"
+    wrapProgram $out/bin/ATR_analysis \
+      --set PERL5LIB "${with perlPackages; makePerlPath [ pcscperl ]}"
+    wrapProgram $out/bin/pcsc_scan \
+      --set PATH "$out/bin:${deps}"
+  '';
+
+  meta = with lib; {
+    description = "Tools used to test a PC/SC driver, card or reader";
+    homepage = http://ludovic.rousseau.free.fr/softwares/pcsc-tools/;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pdfcrack/default.nix b/nixpkgs/pkgs/tools/security/pdfcrack/default.nix
new file mode 100644
index 000000000000..bf8f014bcfd1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pdfcrack/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, lib, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "pdfcrack";
+  version = "0.18";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/pdfcrack/pdfcrack/pdfcrack-${version}.tar.gz";
+    sha256 = "035s3jzrs3ci0i53x04dzpqp9225c4s52cd722d6zqra5b2sw8w2";
+  };
+
+  installPhase = ''
+    install -Dt $out/bin pdfcrack
+  '';
+
+  meta = with lib; {
+    homepage = http://pdfcrack.sourceforge.net/;
+    description = "Small command line driven tool for recovering passwords and content from PDF files";
+    license = with licenses; [ gpl2 ];
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ qoelet ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pgpdump/default.nix b/nixpkgs/pkgs/tools/security/pgpdump/default.nix
new file mode 100644
index 000000000000..8bf440d2b07f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pgpdump/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub
+, supportCompressedPackets ? true, zlib, bzip2
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pgpdump";
+  version = "0.33";
+
+  src = fetchFromGitHub {
+    owner = "kazu-yamamoto";
+    repo = "pgpdump";
+    rev = "v${version}";
+    sha256 = "0pi9qdbmcmi58gmljin51ylbi3zkknl8fm26jm67cpl55hvfsn23";
+  };
+
+  buildInputs = stdenv.lib.optionals supportCompressedPackets [ zlib bzip2 ];
+
+  meta = with stdenv.lib; {
+    description = "A PGP packet visualizer";
+    longDescription = ''
+      pgpdump is a PGP packet visualizer which displays the packet format of
+      OpenPGP (RFC 4880) and PGP version 2 (RFC 1991).
+    '';
+    homepage = http://www.mew.org/~kazu/proj/pgpdump/en/;
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ primeos ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/phrasendrescher/default.nix b/nixpkgs/pkgs/tools/security/phrasendrescher/default.nix
new file mode 100644
index 000000000000..71a9824bb62b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/phrasendrescher/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, openssl, libssh2, gpgme }:
+
+stdenv.mkDerivation rec {
+  pname = "phrasendrescher";
+  version = "1.2.2c";
+
+  src = fetchurl {
+    url = "http://leidecker.info/projects/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "18vg6h294219v14x5zqm8ddmq5amxlbz7pw81lcmpz8v678kwyph";
+  };
+
+  postPatch = ''
+    substituteInPlace configure \
+      --replace 'SSL_LIB="ssl"' 'SSL_LIB="crypto"'
+  '';
+
+  buildInputs = [ openssl libssh2 gpgme ];
+
+  configureFlags = [ "--with-plugins" ];
+
+  meta = with stdenv.lib; {
+    description = "A modular and multi processing pass phrase cracking tool";
+    homepage = "http://leidecker.info/projects/phrasendrescher/index.shtml";
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pinentry/autoconf-ar.patch b/nixpkgs/pkgs/tools/security/pinentry/autoconf-ar.patch
new file mode 100644
index 000000000000..6f531cfce325
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pinentry/autoconf-ar.patch
@@ -0,0 +1,35 @@
+diff -ur a/configure.ac b/configure.ac
+--- a/configure.ac	2019-09-14 11:30:11.584847746 +0000
++++ b/configure.ac	2019-09-14 11:31:26.692355265 +0000
+@@ -81,6 +81,7 @@
+ AC_PROG_CPP
+ AC_PROG_INSTALL
+ AC_PROG_RANLIB
++AC_CHECK_TOOL(AR, ar)
+ # We need to check for cplusplus here because we may not do the test
+ # for Qt and autoconf does does not allow that.
+ AC_PROG_CXX
+diff -ur a/pinentry/Makefile.in b/pinentry/Makefile.in
+--- a/pinentry/Makefile.in	2017-12-03 17:43:23.000000000 +0000
++++ b/pinentry/Makefile.in	2019-09-14 11:32:02.532000236 +0000
+@@ -113,7 +113,7 @@
+ CONFIG_CLEAN_FILES =
+ CONFIG_CLEAN_VPATH_FILES =
+ LIBRARIES = $(noinst_LIBRARIES)
+-AR = ar
++AR = @AR@
+ ARFLAGS = cru
+ AM_V_AR = $(am__v_AR_@AM_V@)
+ am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)
+diff -ur a/secmem/Makefile.in b/secmem/Makefile.in
+--- a/secmem/Makefile.in	2017-12-03 17:43:23.000000000 +0000
++++ b/secmem/Makefile.in	2019-09-14 11:31:58.764934552 +0000
+@@ -113,7 +113,7 @@
+ CONFIG_CLEAN_FILES =
+ CONFIG_CLEAN_VPATH_FILES =
+ LIBRARIES = $(noinst_LIBRARIES)
+-AR = ar
++AR = @AR@
+ ARFLAGS = cru
+ AM_V_AR = $(am__v_AR_@AM_V@)
+ am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)
diff --git a/nixpkgs/pkgs/tools/security/pinentry/default.nix b/nixpkgs/pkgs/tools/security/pinentry/default.nix
new file mode 100644
index 000000000000..87edc914131d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pinentry/default.nix
@@ -0,0 +1,103 @@
+{ fetchurl, mkDerivation, fetchpatch, stdenv, lib, pkgconfig, autoreconfHook, wrapGAppsHook
+, libgpgerror, libassuan, qtbase, wrapQtAppsHook
+, ncurses, gtk2, gcr
+, libcap ? null, libsecret ? null
+, enabledFlavors ? [ "curses" "tty" "gtk2" "qt" "gnome3" "emacs" ]
+}:
+
+with stdenv.lib;
+
+assert isList enabledFlavors && enabledFlavors != [];
+
+let
+  pinentryMkDerivation =
+    if (builtins.elem "qt" enabledFlavors)
+      then mkDerivation
+      else stdenv.mkDerivation;
+
+  mkFlag = pfxTrue: pfxFalse: cond: name:
+    "--${if cond then pfxTrue else pfxFalse}-${name}";
+  mkEnable = mkFlag "enable" "disable";
+  mkWith = mkFlag "with" "without";
+
+  mkEnablePinentry = f:
+    let
+      info = flavorInfo.${f};
+      flag = flavorInfo.${f}.flag or null;
+    in
+      optionalString (flag != null)
+        (mkEnable (elem f enabledFlavors) ("pinentry-" + flag));
+
+  flavorInfo = {
+    curses = { bin = "curses"; flag = "curses"; buildInputs = [ ncurses ]; };
+    tty = { bin = "tty"; flag = "tty"; };
+    gtk2 = { bin = "gtk-2"; flag = "gtk2"; buildInputs = [ gtk2 ]; };
+    gnome3 = { bin = "gnome3"; flag = "gnome3"; buildInputs = [ gcr ]; nativeBuildInputs = [ wrapGAppsHook ]; };
+    qt = { bin = "qt"; flag = "qt"; buildInputs = [ qtbase ]; nativeBuildInputs = [ wrapQtAppsHook ]; };
+    emacs = { bin = "emacs"; flag = "emacs"; buildInputs = []; };
+  };
+
+in
+
+pinentryMkDerivation rec {
+  pname = "pinentry";
+  version = "1.1.0";
+
+  src = fetchurl {
+    url = "mirror://gnupg/pinentry/${pname}-${version}.tar.bz2";
+    sha256 = "0w35ypl960pczg5kp6km3dyr000m1hf0vpwwlh72jjkjza36c1v8";
+  };
+
+  nativeBuildInputs = [ pkgconfig autoreconfHook ]
+    ++ concatMap(f: flavorInfo.${f}.nativeBuildInputs or []) enabledFlavors;
+  buildInputs = [ libgpgerror libassuan libcap libsecret ]
+    ++ concatMap(f: flavorInfo.${f}.buildInputs or []) enabledFlavors;
+
+  dontWrapGApps = true;
+  dontWrapQtApps = true;
+
+  patches = [
+    ./autoconf-ar.patch
+  ] ++ optionals (elem "gtk2" enabledFlavors) [
+    (fetchpatch {
+      url = "https://salsa.debian.org/debian/pinentry/raw/debian/1.1.0-1/debian/patches/0007-gtk2-When-X11-input-grabbing-fails-try-again-over-0..patch";
+      sha256 = "15r1axby3fdlzz9wg5zx7miv7gqx2jy4immaw4xmmw5skiifnhfd";
+    })
+  ];
+
+  configureFlags = [
+    (mkWith   (libcap != null)    "libcap")
+    (mkEnable (libsecret != null) "libsecret")
+  ] ++ (map mkEnablePinentry (attrNames flavorInfo));
+
+  postInstall =
+    concatStrings (flip map enabledFlavors (f:
+      let
+        binary = "pinentry-" + flavorInfo.${f}.bin;
+      in ''
+        moveToOutput bin/${binary} ${placeholder f}
+        ln -sf ${placeholder f}/bin/${binary} ${placeholder f}/bin/pinentry
+      '' + optionalString (f == "gnome3") ''
+        wrapGApp ${placeholder f}/bin/${binary}
+      '' + optionalString (f == "qt") ''
+        wrapQtApp ${placeholder f}/bin/${binary}
+      '')) + ''
+      ln -sf ${placeholder (head enabledFlavors)}/bin/pinentry-${flavorInfo.${head enabledFlavors}.bin} $out/bin/pinentry
+    '';
+
+  outputs = [ "out" ] ++ enabledFlavors;
+
+  passthru = { flavors = enabledFlavors; };
+
+  meta = with stdenv.lib; {
+    homepage = http://gnupg.org/aegypten2/;
+    description = "GnuPG’s interface to passphrase input";
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+    longDescription = ''
+      Pinentry provides a console and (optional) GTK and Qt GUIs allowing users
+      to enter a passphrase when `gpg' or `gpg2' is run and needs it.
+    '';
+    maintainers = with maintainers; [ ttuegel fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pinentry/mac.nix b/nixpkgs/pkgs/tools/security/pinentry/mac.nix
new file mode 100644
index 000000000000..25fa180c48b9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pinentry/mac.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub, xcbuildHook, libiconv, ncurses, Cocoa }:
+
+stdenv.mkDerivation {
+  name = "pinentry-mac-0.9.4";
+
+  src = fetchFromGitHub {
+    owner = "matthewbauer";
+    repo = "pinentry-mac";
+    rev = "6dfef256c8ea32d642fea847f27d800f024cf51e";
+    sha256 = "0g75302697gqcxyf2hyqzvcbd5pyss1bl2xvfd40wqav7dlyvj83";
+  };
+
+  nativeBuildInputs = [ xcbuildHook ];
+  buildInputs = [ libiconv ncurses Cocoa ];
+
+  installPhase = ''
+    mkdir -p $out/Applications
+    mv Products/Release/pinentry-mac.app $out/Applications
+  '';
+
+  passthru = {
+    binaryPath = "Applications/pinentry-mac.app/Contents/MacOS/pinentry-mac";
+  };
+
+  meta = {
+    description = "Pinentry for GPG on Mac";
+    license = stdenv.lib.licenses.gpl2Plus;
+    homepage = https://github.com/GPGTools/pinentry-mac;
+    platforms = stdenv.lib.platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pius/default.nix b/nixpkgs/pkgs/tools/security/pius/default.nix
new file mode 100644
index 000000000000..6d2b5569a0d4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pius/default.nix
@@ -0,0 +1,41 @@
+{ fetchFromGitHub, stdenv, python3Packages, gnupg, perl }:
+
+let version = "3.0.0"; in
+python3Packages.buildPythonApplication {
+  pname = "pius";
+  namePrefix = "";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "jaymzh";
+    repo = "pius";
+    rev = "v${version}";
+    sha256 = "0l87dx7n6iwy8alxnhvval8h1kl4da6a59hsilbi65c6bpj4dh3y";
+  };
+
+  patchPhase = ''
+    for file in libpius/constants.py pius-keyring-mgr; do
+      sed -i "$file" -E -e's|/usr/bin/gpg2?|${gnupg}/bin/gpg|g'
+    done
+  '';
+
+  buildInputs = [ perl ];
+
+  meta = {
+    homepage = https://www.phildev.net/pius/;
+
+    description = "PGP Individual UID Signer (PIUS), quickly and easily sign UIDs on a set of PGP keys";
+
+    longDescription =
+      '' This software will allow you to quickly and easily sign each UID on
+         a set of PGP keys.  It is designed to take the pain out of the
+         sign-all-the-keys part of PGP Keysigning Party while adding security
+         to the process.
+      '';
+
+    license = stdenv.lib.licenses.gpl2;
+
+    platforms = stdenv.lib.platforms.gnu ++ stdenv.lib.platforms.linux;
+    maintainers = with stdenv.lib.maintainers; [ kierdavis ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/polkit-gnome/default.nix b/nixpkgs/pkgs/tools/security/polkit-gnome/default.nix
new file mode 100644
index 000000000000..559911699680
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/polkit-gnome/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, polkit, gtk3, pkgconfig, intltool }:
+stdenv.mkDerivation rec {
+  pname = "polkit-gnome";
+  version = "0.105";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/polkit-gnome/${version}/${pname}-${version}.tar.xz";
+    sha256 = "0sckmcbxyj6sbrnfc5p5lnw27ccghsid6v6wxq09mgxqcd4lk10p";
+  };
+
+  buildInputs = [ polkit gtk3 ];
+  nativeBuildInputs = [ pkgconfig intltool ];
+
+  configureFlags = [ "--disable-introspection" ];
+
+  # Desktop file from Debian
+  postInstall = ''
+    mkdir -p $out/etc/xdg/autostart
+    substituteAll ${./polkit-gnome-authentication-agent-1.desktop} $out/etc/xdg/autostart/polkit-gnome-authentication-agent-1.desktop
+  '';
+
+  meta = {
+    homepage = "https://gitlab.gnome.org/Archive/policykit-gnome";
+    description = "A dbus session bus service that is used to bring up authentication dialogs";
+    license = stdenv.lib.licenses.lgpl2Plus;
+    maintainers = with stdenv.lib.maintainers; [ phreedom ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/polkit-gnome/polkit-gnome-authentication-agent-1.desktop b/nixpkgs/pkgs/tools/security/polkit-gnome/polkit-gnome-authentication-agent-1.desktop
new file mode 100644
index 000000000000..5ddda50cb015
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/polkit-gnome/polkit-gnome-authentication-agent-1.desktop
@@ -0,0 +1,88 @@
+[Desktop Entry]
+Name=PolicyKit Authentication Agent
+Name[ar]=مدير الاستيثاق PolicyKit
+Name[be]=PolicyKit - аґент аўтэнтыфікацыі
+Name[bn_IN]=PolicyKit অনুমোদনের এজেন্ট
+Name[ca]=Agent d'autenticació del PolicyKit
+Name[cs]=Ověřovací agent PolicyKit
+Name[da]=Godkendelsesprogrammet PolicyKit
+Name[de]=Legitimationsdienst von PolicyKit
+Name[el]=Πράκτορας πιστοποίησης PolicyKit
+Name[en_GB]=PolicyKit Authentication Agent
+Name[es]=Agente de autenticación de PolicyKit
+Name[eu]=PolicyKit autentifikatzeko agentea
+Name[fi]=PolicytKit-tunnistautumisohjelma
+Name[fr]=Agent d'authentification de PolicyKit
+Name[gl]=Axente de autenticación PolicyKit
+Name[gu]=PolicyKit સત્તાધિકરણ એજન્ટ
+Name[hi]=PolicyKit प्रमाणीकरण प्रतिनिधि
+Name[hu]=PolicyKit hitelesítési ügynök
+Name[it]=Agente di autenticazione per PolicyKit
+Name[ja]=PolicyKit 認証エージェント
+Name[kn]=PolicyKit ದೃಢೀಕರಣ ಮಧ್ಯವರ್ತಿ
+Name[lt]=PolicyKit tapatybės nustatymo agentas
+Name[ml]=പോളിസിക്കിറ്റ് ഓഥന്റിക്കേഷന്‍ ഏജന്റ്
+Name[mr]=PolicyKit ऑथेंटीकेशन एजेंट
+Name[or]=PolicyKit ବୈଧିକରଣ ସଦସ୍ୟ
+Name[pa]=ਪਾਲਸੀਕਿੱਟ ਪਰਮਾਣਕਿਤਾ ਏਜੰਟ
+Name[pl]=Agent uwierzytelniania PolicyKit
+Name[pt]=Agente de Autenticação PolicyKit
+Name[pt_BR]=Agente de autenticação PolicyKit
+Name[ro]=Agent de autentificare PolicyKit
+Name[sk]=Agent PolicyKit na overovanie totožnosti
+Name[sl]=PolicyKit program overjanja
+Name[sv]=Autentiseringsagent för PolicyKit
+Name[ta]=PolicyKit அங்கீகார முகவர்
+Name[te]=పాలసీకిట్ ధృవీకరణ ప్రతినిధి
+Name[th]=ตัวกลางสำหรับยืนยันตัวบุคคล PolicyKit
+Name[uk]=Агент автентифікації PolicyKit
+Name[zh_CN]=PolicyKit 认证代理
+Name[zh_HK]=PolicyKit 驗證代理程式
+Name[zh_TW]=PolicyKit 驗證代理程式
+Comment=PolicyKit Authentication Agent
+Comment[ar]=مدير الاستيثاق PolicyKit
+Comment[be]=PolicyKit - аґент аўтэнтыфікацыі
+Comment[bn_IN]=PolicyKit অনুমোদনের এজেন্ট
+Comment[ca]=Agent d'autenticació del PolicyKit
+Comment[cs]=Ověřovací agent PolicyKit
+Comment[da]=Godkendelsesprogrammet PolicyKit
+Comment[de]=Legitimationsdienst von PolicyKit
+Comment[el]=Πράκτορας πιστοποίησης PolicyKit
+Comment[en_GB]=PolicyKit Authentication Agent
+Comment[es]=Agente de autenticación de PolicyKit
+Comment[eu]=PolicyKit autentifikatzeko agentea
+Comment[fi]=PolicytKit-tunnistautumisohjelma
+Comment[fr]=Agent d'authentification de PolicyKit
+Comment[gl]=Axente de autenticación PolicyKit
+Comment[gu]=PolicyKit સત્તાધિકરણ એજન્ટ
+Comment[hi]=PolicyKit प्रमाणीकरण प्रतिनिधि
+Comment[hu]=PolicyKit hitelesítési ügynök
+Comment[it]=Agente di autenticazione per PolicyKit
+Comment[ja]=PolicyKit 認証エージェント
+Comment[kn]=PolicyKit ದೃಢೀಕರಣ ಮಧ್ಯವರ್ತಿ
+Comment[lt]=PolicyKit tapatybės nustatymo agentas
+Comment[ml]=പോളിസിക്കിറ്റ് ഓഥന്റിക്കേഷന്‍ ഏജന്റ്
+Comment[mr]=PolicyKit ऑथेंटीकेशन एजेंट
+Comment[or]=PolicyKit ବୈଧିକରଣ ସଦସ୍ୟ
+Comment[pa]=ਪਾਲਸੀਕਿੱਟ ਪਰਮਾਣਕਿਤਾ ਏਜੰਟ
+Comment[pl]=Agent uwierzytelniania PolicyKit
+Comment[pt]=Agente de Autenticação PolicyKit
+Comment[pt_BR]=Agente de autenticação PolicyKit
+Comment[ro]=Agent de autentificare PolicyKit
+Comment[sk]=Agent PolicyKit na overovanie totožnosti
+Comment[sl]=PolicyKit program overjanja
+Comment[sv]=Autentiseringsagent för PolicyKit
+Comment[ta]=PolicyKit அங்கீகார முகவர்
+Comment[te]=పాలసీకిట్ ధృవీకరణ ప్రతినిధి
+Comment[th]=ตัวกลางสำหรับยืนยันตัวบุคคล PolicyKit
+Comment[uk]=Агент автентифікації PolicyKit
+Comment[zh_CN]=PolicyKit 认证代理
+Comment[zh_HK]=PolicyKit 驗證代理程式
+Comment[zh_TW]=PolicyKit 驗證代理程式
+Exec=@out@/libexec/polkit-gnome-authentication-agent-1
+Terminal=false
+Type=Application
+Categories=
+NoDisplay=true
+OnlyShowIn=GNOME;XFCE;Unity;
+AutostartCondition=GNOME3 unless-session gnome
diff --git a/nixpkgs/pkgs/tools/security/prey/default.nix b/nixpkgs/pkgs/tools/security/prey/default.nix
new file mode 100644
index 000000000000..2c03183fa96e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/prey/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, fetchurl, fetchgit, curl, scrot, imagemagick, xawtv, inetutils, makeWrapper, coreutils
+, apiKey ? ""
+, deviceKey ? "" }:
+
+# TODO: this should assert keys are set, somehow if set through .override assertion fails
+#assert apiKey != "";
+#assert deviceKey != "";
+
+let
+  modulesSrc = fetchgit {
+    url = "git://github.com/prey/prey-bash-client-modules.git";
+    rev = "aba260ef110834cb2e92923a31f50c15970639ee";
+    sha256 = "9cb1ad813d052a0a3e3bbdd329a8711ae3272e340379489511f7dd578d911e30";
+  };
+in stdenv.mkDerivation rec {
+  pname = "prey-bash-client";
+  version = "0.6.0";
+
+  src = fetchurl {
+    url = "https://github.com/prey/prey-bash-client/archive/v${version}.tar.gz";
+    sha256 = "09cb15jh4jdwvix9nx048ajkw2r5jaflk68y3rkha541n8n0qwh0";
+  };
+
+  buildInputs = [ curl scrot imagemagick xawtv makeWrapper ];
+
+  phases = "unpackPhase installPhase";
+
+  installPhase = ''
+    substituteInPlace config --replace api_key=\'\' "api_key='${apiKey}'"
+    substituteInPlace config --replace device_key=\'\' "device_key='${deviceKey}'"
+
+    substituteInPlace prey.sh --replace /bin/bash $(type -Pp bash)
+    mkdir -p $out/modules
+    cp -R . $out
+    cp -R ${modulesSrc}/* $out/modules/
+    wrapProgram "$out/prey.sh" \
+      --prefix PATH ":" "${stdenv.lib.makeBinPath [ xawtv imagemagick curl scrot inetutils coreutils ]}" \
+      --set CURL_CA_BUNDLE "/etc/ssl/certs/ca-certificates.crt"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://preyproject.com;
+    description = "Proven tracking software that helps you find, lock and recover your devices when stolen or missing";
+    maintainers = with maintainers; [ domenkozar ];
+    license = licenses.gpl3;
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/proxmark3/default.nix b/nixpkgs/pkgs/tools/security/proxmark3/default.nix
new file mode 100644
index 000000000000..e717558a24da
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/proxmark3/default.nix
@@ -0,0 +1,59 @@
+{ stdenv, fetchFromGitHub, pkgconfig, ncurses, readline, pcsclite, qt5
+, gcc-arm-embedded }:
+
+let
+  generic = { pname, version, rev, sha256 }:
+    stdenv.mkDerivation rec {
+      inherit pname version;
+
+      src = fetchFromGitHub {
+        owner = "Proxmark";
+        repo = "proxmark3";
+        inherit rev sha256;
+      };
+
+      nativeBuildInputs = [ pkgconfig gcc-arm-embedded ];
+      buildInputs = [ ncurses readline pcsclite qt5.qtbase ];
+
+      postPatch = ''
+        substituteInPlace client/Makefile --replace '-ltermcap' ' '
+        substituteInPlace liblua/Makefile --replace '-ltermcap' ' '
+        substituteInPlace client/flasher.c \
+          --replace 'armsrc/obj/fullimage.elf' \
+                    '${placeholder "out"}/firmware/fullimage.elf'
+      '';
+
+      buildPhase = ''
+        make bootrom/obj/bootrom.elf armsrc/obj/fullimage.elf client
+      '';
+
+      installPhase = ''
+        install -Dt $out/bin client/proxmark3
+        install -T client/flasher $out/bin/proxmark3-flasher
+        install -Dt $out/firmware bootrom/obj/bootrom.elf armsrc/obj/fullimage.elf
+      '';
+
+      meta = with stdenv.lib; {
+        description = "Client for proxmark3, powerful general purpose RFID tool";
+        homepage = http://www.proxmark.org;
+        license = licenses.gpl2Plus;
+        maintainers = with maintainers; [ fpletz ];
+      };
+    };
+in
+
+{
+  proxmark3 = generic rec {
+    pname = "proxmark3";
+    version = "3.1.0";
+    rev = "v${version}";
+    sha256 = "1qw28n1bhhl91ix77lv50qcr919fq3hjc8zhhqphwxal2svgx2jf";
+  };
+
+  proxmark3-unstable = generic {
+    pname = "proxmark3-unstable";
+    version = "2019-12-28";
+    rev = "a4ff62be63ca2a81071e9aa2b882bd3ff57f13ad";
+    sha256 = "067lp28xqx61n3i2a2fy489r5frwxqrcfj8cpv3xdzi3gb3vk5c3";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pwgen-secure/default.nix b/nixpkgs/pkgs/tools/security/pwgen-secure/default.nix
new file mode 100644
index 000000000000..c3141676b370
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pwgen-secure/default.nix
@@ -0,0 +1,36 @@
+{ lib, python3Packages, fetchFromGitHub }:
+
+with python3Packages;
+
+buildPythonApplication rec {
+  pname = "pwgen-secure";
+  version = "0.9.1";
+
+  # it needs `secrets` which was introduced in 3.6
+  disabled = pythonOlder "3.6";
+
+  # GH is newer than Pypi and contains both library *and* the actual program
+  # whereas Pypi only has the library
+  src = fetchFromGitHub {
+    owner = "mjmunger";
+    repo = "pwgen_secure";
+    rev = "v${version}";
+    sha256 = "15md5606hzy1xfhj2lxmc0nvynyrcs4vxa5jdi34kfm31rdklj28";
+  };
+
+  propagatedBuildInputs = [ docopt ];
+
+  postInstall = ''
+    install -Dm755 spwgen.py $out/bin/spwgen
+  '';
+
+  # there are no checks
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Secure password generation library to replace pwgen";
+    homepage = "https://github.com/mjmunger/pwgen_secure/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ peterhoeg ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/pwgen/default.nix b/nixpkgs/pkgs/tools/security/pwgen/default.nix
new file mode 100644
index 000000000000..79e8fb071b37
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/pwgen/default.nix
@@ -0,0 +1,16 @@
+{stdenv, fetchurl, autoreconfHook}:
+stdenv.mkDerivation {
+  name = "pwgen-2.08";
+
+  src = fetchurl {
+    url = https://github.com/tytso/pwgen/archive/v2.08.tar.gz;
+    sha256 = "8d6e94f28655e61d6126290e3eafad4d17d7fba0d0d354239522a740a270bb2f";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = {
+    description = "Password generator which creates passwords which can be easily memorized by a human";
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/qdigidoc/default.nix b/nixpkgs/pkgs/tools/security/qdigidoc/default.nix
new file mode 100644
index 000000000000..7fc6ed209663
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/qdigidoc/default.nix
@@ -0,0 +1,50 @@
+{ stdenv, fetchgit, fetchurl, cmake, darkhttpd, gettext, makeWrapper, pkgconfig
+, libdigidocpp, opensc, openldap, openssl, pcsclite, qtbase, qttranslations, qtsvg }:
+
+stdenv.mkDerivation rec {
+  pname = "qdigidoc";
+  version = "4.1.0";
+
+  src = fetchgit {
+    url = "https://github.com/open-eid/DigiDoc4-Client";
+    rev = "v${version}";
+    sha256 = "1iry36h3pfnw2gqjnfhv53i2svybxj8jf18qh486djyai84hjr4d";
+    fetchSubmodules = true;
+  };
+
+  tsl = fetchurl {
+    url = "https://ec.europa.eu/information_society/policy/esignature/trusted-list/tl-mp.xml";
+    sha256 = "0llr2fj8vd097hcr1d0xmzdy4jydv0b5j5qlksbjffs22rqgal14";
+  };
+
+  nativeBuildInputs = [ cmake darkhttpd gettext makeWrapper pkgconfig ];
+
+  postPatch = ''
+    substituteInPlace client/CMakeLists.txt \
+      --replace $\{TSL_URL} file://${tsl}
+  '';
+
+  buildInputs = [
+    libdigidocpp
+    opensc
+    openldap
+    openssl
+    pcsclite
+    qtbase
+    qtsvg
+    qttranslations
+  ];
+
+  postInstall = ''
+    wrapProgram $out/bin/qdigidoc4 \
+      --prefix LD_LIBRARY_PATH : ${opensc}/lib/pkcs11/
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Qt-based UI for signing and verifying DigiDoc documents";
+    homepage = https://www.id.ee/;
+    license = licenses.lgpl21Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ yegortimoshenko ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/qesteidutil/default.nix b/nixpkgs/pkgs/tools/security/qesteidutil/default.nix
new file mode 100644
index 000000000000..fac855f232a6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/qesteidutil/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub
+, cmake, ccid, qttools, qttranslations
+, pkgconfig, pcsclite, hicolor-icon-theme 
+}:
+
+stdenv.mkDerivation {
+  version = "2018-08-21";
+  pname = "qesteidutil";
+
+  src = fetchFromGitHub {
+    owner = "open-eid";
+    repo = "qesteidutil";
+    # TODO: Switch back to this after next release.
+    #rev = "v${version}";
+    rev = "3bb65ef345aaa0d589b37a5d0d6f5772e95b0cd7";
+    sha256 = "13xsw5gh4svp9a5nxcqv72mymivr7w1cyjbv2l6yf96m45bsd9x4";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ cmake ccid qttools pcsclite qttranslations
+                  hicolor-icon-theme
+                ];
+  
+  meta = with stdenv.lib; {
+    description = "UI application for managing smart card PIN/PUK codes and certificates";
+    homepage = http://www.id.ee/;
+    license = licenses.lgpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ jagajaga domenkozar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/radamsa/default.nix b/nixpkgs/pkgs/tools/security/radamsa/default.nix
new file mode 100644
index 000000000000..7a78233dbced
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/radamsa/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchurl, fetchFromGitLab, bash }:
+
+let
+  # Fetch explicitly, otherwise build will try to do so
+  owl = fetchurl {
+    name = "ol.c.gz";
+    url = "https://gitlab.com/owl-lisp/owl/uploads/0d0730b500976348d1e66b4a1756cdc3/ol-0.1.19.c.gz";
+    sha256 = "0kdmzf60nbpvdn8j3l51i9lhcwfi4aw1zj4lhbp4adyg8n8pp4c6";
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "radamsa";
+  version = "0.6";
+
+  src = fetchFromGitLab {
+    owner = "akihe";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0mi1mwvfnlpblrbmp0rcyf5p74m771z6nrbsly6cajyn4mlpmbaq";
+  };
+
+  patchPhase = ''
+    substituteInPlace ./tests/bd.sh  \
+      --replace "/bin/echo" echo
+
+    ln -s ${owl} ol.c.gz
+
+    patchShebangs tests
+  '';
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" "BINDIR=" ];
+
+  checkInputs = [ bash ];
+  doCheck = true;
+  
+  meta = {
+    description = "A general purpose fuzzer";
+    longDescription = "Radamsa is a general purpose data fuzzer. It reads data from given sample files, or standard input if none are given, and outputs modified data. It is usually used to generate malformed data for testing programs.";
+    homepage =  https://gitlab.com/akihe/radamsa;
+    maintainers = [ stdenv.lib.maintainers.markWot ];
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/rage/default.nix b/nixpkgs/pkgs/tools/security/rage/default.nix
new file mode 100644
index 000000000000..63cc2972a58d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/rage/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, rustPlatform, fetchFromGitHub, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rage";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "str4d";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0ri4rfhy1wl0cppi2cp97kkiz08x2f072yfahn2kv9r4v1i9f4a7";
+  };
+
+  cargoSha256 = "02adwvcvha83zcvc5n7p88l7wmkg52j2xhznmhabc0zn328as2yd";
+
+  buildInputs = stdenv.lib.optionals stdenv.isDarwin [ Security ];
+
+  meta = with stdenv.lib; {
+    description = "A simple, secure and modern encryption tool with small explicit keys, no config options, and UNIX-style composability";
+    homepage = "https://github.com/str4d/rage";
+    license = licenses.asl20;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/rarcrack/default.nix b/nixpkgs/pkgs/tools/security/rarcrack/default.nix
new file mode 100644
index 000000000000..68e5df809377
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/rarcrack/default.nix
@@ -0,0 +1,39 @@
+{stdenv, fetchFromGitHub, libxml2, file, p7zip, unrar, unzip}:
+
+stdenv.mkDerivation {
+  pname = "rarcrack";
+  version = "0.2";
+
+  src = fetchFromGitHub {
+    owner = "jaredsburrows";
+    repo = "Rarcrack";
+    rev = "35ead64cd2b967eec3e3e3a4c328b89b11ff32a0";
+    sha256 = "134fq84896w5vp8vg4qg0ybpb466njibigyd7bqqm1xydr07qrgn";
+  };
+
+  buildInputs = [ libxml2 file p7zip unrar unzip ];
+  buildFlags = stdenv.lib.optional stdenv.cc.isClang "CC=clang";
+  installFlags = [ "PREFIX=\${out}" ];
+
+  patchPhase = ''
+   substituteInPlace rarcrack.c --replace "file -i" "${file}/bin/file -i"
+  '';
+
+  preInstall = ''
+    mkdir -p $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "This program can crack zip,7z and rar file passwords";
+    longDescription = ''
+    If you forget your password for compressed archive (rar, 7z, zip), this program is the solution.
+    This program uses bruteforce algorithm to find correct password. You can specify wich characters will be used in password generations.
+    Warning: Please don't use this program for any illegal things!
+    '';
+    homepage = https://github.com/jaredsburrows/Rarcrack;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ davidak ];
+    platforms = with platforms; unix;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/security/rhash/default.nix b/nixpkgs/pkgs/tools/security/rhash/default.nix
new file mode 100644
index 000000000000..863b03a117c5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/rhash/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, which }:
+
+stdenv.mkDerivation rec {
+  version = "1.3.9";
+  pname = "rhash";
+
+  src = fetchFromGitHub {
+    owner = "rhash";
+    repo = "RHash";
+    rev = "v${version}";
+    sha256 = "06i49x1l21h2q7pfnf4crbmjyg8b9ad0qs10ywyyn5sjpi0c21wq";
+  };
+
+  nativeBuildInputs = [ which ];
+
+  # configure script is not autotools-based, doesn't support these options
+  configurePlatforms = [ ];
+
+  doCheck = true;
+
+  checkTarget = "test-full";
+
+  installTargets = [ "install" "install-lib-shared" "install-lib-so-link" "install-lib-headers" ];
+
+  meta = with stdenv.lib; {
+    homepage = "http://rhash.sourceforge.net/";
+    description = "Console utility and library for computing and verifying hash sums of files";
+    license = licenses.bsd0;
+    platforms = platforms.all;
+    maintainers = [ maintainers.andrewrk ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ripasso/cursive.nix b/nixpkgs/pkgs/tools/security/ripasso/cursive.nix
new file mode 100644
index 000000000000..b273b882daf0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ripasso/cursive.nix
@@ -0,0 +1,37 @@
+{ stdenv, lib, rustPlatform, fetchFromGitHub, pkgconfig, ncurses, python3, openssl, libgpgerror, gpgme, xorg, AppKit, Security }:
+
+with rustPlatform;
+buildRustPackage rec {
+  version = "0.3.0";
+  pname = "ripasso-cursive";
+
+  src = fetchFromGitHub {
+    owner = "cortex";
+    repo = "ripasso";
+    rev  = "release-${version}";
+    sha256 = "1rkb23i9gcfmifcl31s8w86k7aza6nxrh3w33fvhv1ins1gxxk7w";
+  };
+
+  cargoSha256 = "1p0bsl4h2w257vfjbpqiga693gaslfq34g30dghpqb5n4kl416zp";
+
+  cargoBuildFlags = [ "-p ripasso-cursive -p ripasso-man" ];
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [
+    ncurses python3 openssl libgpgerror gpgme xorg.libxcb
+  ] ++ stdenv.lib.optionals stdenv.isDarwin [ AppKit Security ];
+
+  preFixup = ''
+    mkdir -p "$out/man/man1"
+    $out/bin/ripasso-man > $out/man/man1/ripasso-cursive.1
+    rm $out/bin/ripasso-man
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A simple password manager written in Rust";
+    homepage = "https://github.com/cortex/ripasso";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ sgo ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/rng-tools/default.nix b/nixpkgs/pkgs/tools/security/rng-tools/default.nix
new file mode 100644
index 000000000000..bd289200fe80
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/rng-tools/default.nix
@@ -0,0 +1,65 @@
+{ stdenv, fetchFromGitHub, libtool, autoreconfHook, pkgconfig
+, sysfsutils
+, argp-standalone
+  # WARNING: DO NOT USE BEACON GENERATED VALUES AS SECRET CRYPTOGRAPHIC KEYS
+  # https://www.nist.gov/programs-projects/nist-randomness-beacon
+, curl ? null, libxml2 ? null, openssl ? null, withNistBeacon ? false
+  # Systems that support RDRAND but not AES-NI require libgcrypt to use RDRAND as an entropy source
+, libgcrypt ? null, withGcrypt ? true
+, jitterentropy ? null, withJitterEntropy ? true
+, libp11 ? null, opensc ? null, withPkcs11 ? true
+}:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  pname = "rng-tools";
+  version = "6.9";
+
+  src = fetchFromGitHub {
+    owner = "nhorman";
+    repo = "rng-tools";
+    rev = "v${version}";
+    sha256 = "065jf26s8zkicb95zc9ilksjdq9gqrh5vcx3mhi6mypbnamn6w98";
+  };
+
+  postPatch = ''
+    ${optionalString withPkcs11 ''
+      substituteInPlace rngd.c \
+        --replace /usr/lib64/opensc-pkcs11.so ${opensc}/lib/opensc-pkcs11.so
+    ''}
+  '';
+
+  nativeBuildInputs = [ autoreconfHook libtool pkgconfig ];
+
+  configureFlags = [
+    (withFeature   withGcrypt        "libgcrypt")
+    (enableFeature withJitterEntropy "jitterentropy")
+    (withFeature   withNistBeacon    "nistbeacon")
+    (withFeature   withPkcs11        "pkcs11")
+  ];
+
+  # argp-standalone is only used when libc lacks argp parsing (musl)
+  buildInputs = [ sysfsutils ]
+    ++ optionals stdenv.hostPlatform.isx86_64 [ argp-standalone ]
+    ++ optionals withGcrypt        [ libgcrypt ]
+    ++ optionals withJitterEntropy [ jitterentropy ]
+    ++ optionals withNistBeacon    [ curl libxml2 openssl ]
+    ++ optionals withPkcs11        [ libp11 openssl ];
+
+  enableParallelBuilding = true;
+
+  # For cross-compilation
+  makeFlags = [ "AR:=$(AR)" ];
+
+  doCheck = true;
+  preCheck = "patchShebangs tests/*.sh";
+
+  meta = {
+    description = "A random number generator daemon";
+    homepage = https://github.com/nhorman/rng-tools;
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ johnazoidberg c0bw3b ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/saml2aws/default.nix b/nixpkgs/pkgs/tools/security/saml2aws/default.nix
new file mode 100644
index 000000000000..888d3bb4018a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/saml2aws/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  name = "saml2aws-${version}";
+  pname = "saml2aws";
+  version = "2.15.0";
+
+  goPackagePath = "github.com/versent/saml2aws";
+  goDeps = ./deps.nix;
+
+  buildFlagsArray = ''
+    -ldflags=-X main.Version=${version}
+  '';
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "Versent";
+    repo = "saml2aws";
+    sha256 = "0pn4zdzisgan7vvgi7hp8716wsb2x33gq55c7fw1aa2qwy0bq3gp";
+  };
+
+  meta = with stdenv.lib; {
+    description = "CLI tool which enables you to login and retrieve AWS temporary credentials using a SAML IDP";
+    homepage    = https://github.com/Versent/saml2aws;
+    license     = licenses.mit;
+    platforms   = stdenv.lib.platforms.unix;
+    maintainers = [ stdenv.lib.maintainers.pmyjavec ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/saml2aws/deps.nix b/nixpkgs/pkgs/tools/security/saml2aws/deps.nix
new file mode 100644
index 000000000000..08a26db91b10
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/saml2aws/deps.nix
@@ -0,0 +1,372 @@
+# file generated from Gopkg.lock using dep2nix (https://github.com/nixcloud/dep2nix)
+[
+  {
+    goPackagePath  = "github.com/99designs/keyring";
+    fetch = {
+      type = "git";
+      url = "https://github.com/99designs/keyring";
+      rev =  "82da6802f65f1ac7963cfc3b7c62ae12dab8ee5d";
+      sha256 = "105ddy9vkjr6cmcm85qnxxlnsmkx2svm6bd80rzr9n6zyc5hhk7b";
+    };
+  }
+  {
+    goPackagePath  = "github.com/AlecAivazis/survey";
+    fetch = {
+      type = "git";
+      url = "https://github.com/AlecAivazis/survey";
+      rev =  "e752db451e07e09c7d7dc8cada807a44bdb0fd47";
+      sha256 = "00fhmsaymrf86pg246cqxvfrivgfkyg3i0aixsp3sn15hg3i0vlq";
+    };
+  }
+  {
+    goPackagePath  = "github.com/Azure/go-ntlmssp";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Azure/go-ntlmssp";
+      rev =  "4b934ac9dad38d389d34f0b98d98b2467c422012";
+      sha256 = "0pwrax8mih2jgsdifag0346vh0vivgyz45jc4kjy6dhp3qhsy34z";
+    };
+  }
+  {
+    goPackagePath  = "github.com/PuerkitoBio/goquery";
+    fetch = {
+      type = "git";
+      url = "https://github.com/PuerkitoBio/goquery";
+      rev =  "dc2ec5c7ca4d9aae063b79b9f581dd3ea6afd2b2";
+      sha256 = "11010z9ask21r0dskvm2pbh3z8951bnpcqg8aqa213if4h34gaa2";
+    };
+  }
+  {
+    goPackagePath  = "github.com/alecthomas/kingpin";
+    fetch = {
+      type = "git";
+      url = "https://github.com/alecthomas/kingpin";
+      rev =  "947dcec5ba9c011838740e680966fd7087a71d0d";
+      sha256 = "0mndnv3hdngr3bxp7yxfd47cas4prv98sqw534mx7vp38gd88n5r";
+    };
+  }
+  {
+    goPackagePath  = "github.com/alecthomas/template";
+    fetch = {
+      type = "git";
+      url = "https://github.com/alecthomas/template";
+      rev =  "a0175ee3bccc567396460bf5acd36800cb10c49c";
+      sha256 = "0qjgvvh26vk1cyfq9fadyhfgdj36f1iapbmr5xp6zqipldz8ffxj";
+    };
+  }
+  {
+    goPackagePath  = "github.com/alecthomas/units";
+    fetch = {
+      type = "git";
+      url = "https://github.com/alecthomas/units";
+      rev =  "2efee857e7cfd4f3d0138cc3cbb1b4966962b93a";
+      sha256 = "1j65b91qb9sbrml9cpabfrcf07wmgzzghrl7809hjjhrmbzri5bl";
+    };
+  }
+  {
+    goPackagePath  = "github.com/andybalholm/cascadia";
+    fetch = {
+      type = "git";
+      url = "https://github.com/andybalholm/cascadia";
+      rev =  "901648c87902174f774fac311d7f176f8647bdaa";
+      sha256 = "09j8cavbhqqdxjqrkwbc40g8p0i49zf3184rpjm5p2rjbprcghcc";
+    };
+  }
+  {
+    goPackagePath  = "github.com/aulanov/go.dbus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/aulanov/go.dbus";
+      rev =  "25c3068a42a0b50b877953fb249dbcffc6bd1bca";
+      sha256 = "0jh4jyxqhsl1rkzabhln7chw1jkzhqw2nn0mw79cmn8fyafi0rgn";
+    };
+  }
+  {
+    goPackagePath  = "github.com/aws/aws-sdk-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/aws/aws-sdk-go";
+      rev =  "bfc1a07cf158c30c41a3eefba8aae043d0bb5bff";
+      sha256 = "0vfpygjhdikmsqn9dgmp965ji5q790gcz9mg49mcpipc9n2lzx0d";
+    };
+  }
+  {
+    goPackagePath  = "github.com/beevik/etree";
+    fetch = {
+      type = "git";
+      url = "https://github.com/beevik/etree";
+      rev =  "9d7e8feddccb4ed1b8afb54e368bd323d2ff652c";
+      sha256 = "0f3lj7azxd5qq29hqd32211ds7n56i3rgmfll6c1f4css1f3srxg";
+    };
+  }
+  {
+    goPackagePath  = "github.com/briandowns/spinner";
+    fetch = {
+      type = "git";
+      url = "https://github.com/briandowns/spinner";
+      rev =  "48dbb65d7bd5c74ab50d53d04c949f20e3d14944";
+      sha256 = "1178kn72agihs13ffgm2sz5ad61pqwdmkrh8rhggzbaagch9mc75";
+    };
+  }
+  {
+    goPackagePath  = "github.com/danieljoos/wincred";
+    fetch = {
+      type = "git";
+      url = "https://github.com/danieljoos/wincred";
+      rev =  "412b574fb496839b312a75fba146bd32a89001cf";
+      sha256 = "1bb1928nnikx5036aw4152p55g8xgwx42rv0n2i5zydh1031f50m";
+    };
+  }
+  {
+    goPackagePath  = "github.com/davecgh/go-spew";
+    fetch = {
+      type = "git";
+      url = "https://github.com/davecgh/go-spew";
+      rev =  "346938d642f2ec3594ed81d874461961cd0faa76";
+      sha256 = "0d4jfmak5p6lb7n2r6yvf5p1zcw0l8j74kn55ghvr7zr7b7axm6c";
+    };
+  }
+  {
+    goPackagePath  = "github.com/dvsekhvalnov/jose2go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dvsekhvalnov/jose2go";
+      rev =  "f21a8cedbbae609f623613ec8f81125c243212e6";
+      sha256 = "1nzwvk6nqi7nm2wq4mr2q6k5p0qzsl0kmwx7kgkqsg1zh53250ld";
+    };
+  }
+  {
+    goPackagePath  = "github.com/fatih/color";
+    fetch = {
+      type = "git";
+      url = "https://github.com/fatih/color";
+      rev =  "5b77d2a35fb0ede96d138fc9a99f5c9b6aef11b4";
+      sha256 = "0v8msvg38r8d1iiq2i5r4xyfx0invhc941kjrsg5gzwvagv55inv";
+    };
+  }
+  {
+    goPackagePath  = "github.com/go-ini/ini";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-ini/ini";
+      rev =  "06f5f3d67269ccec1fe5fe4134ba6e982984f7f5";
+      sha256 = "0fx123601aiqqn0yr9vj6qp1bh8gp240w4qdm76irs73q8dxlk7a";
+    };
+  }
+  {
+    goPackagePath  = "github.com/godbus/dbus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/godbus/dbus";
+      rev =  "2ff6f7ffd60f0f2410b3105864bdd12c7894f844";
+      sha256 = "1c107893nbdfc297i9y0smljmqs167mw26i24509qd09dmvr998y";
+    };
+  }
+  {
+    goPackagePath  = "github.com/gsterjov/go-libsecret";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gsterjov/go-libsecret";
+      rev =  "a6f4afe4910cad8688db3e0e9b9ac92ad22d54e1";
+      sha256 = "09zaiadnll83vs22ib89agg7anj0blw5fywvmckxllsgif6ak6v7";
+    };
+  }
+  {
+    goPackagePath  = "github.com/headzoo/surf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/headzoo/surf";
+      rev =  "a4a8c16c01dc47ef3a25326d21745806f3e6797a";
+      sha256 = "1dzcp0wdh3qmm5s5hixk9vj2s2kcvkpbhjdwz7kh2crvnavdgwh6";
+    };
+  }
+  {
+    goPackagePath  = "github.com/jmespath/go-jmespath";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jmespath/go-jmespath";
+      rev =  "0b12d6b5";
+      sha256 = "1vv6hph8j6xgv7gwl9vvhlsaaqsm22sxxqmgmldi4v11783pc1ld";
+    };
+  }
+  {
+    goPackagePath  = "github.com/keybase/go-keychain";
+    fetch = {
+      type = "git";
+      url = "https://github.com/keybase/go-keychain";
+      rev =  "f1daa725cce4049b1715f1e97d6a51880e401e70";
+      sha256 = "0wk2zc5f5i5mhdkbyzd60wzc64vybds6kxlmwc41k8mx6d1hxdm6";
+    };
+  }
+  {
+    goPackagePath  = "github.com/mattn/go-colorable";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-colorable";
+      rev =  "167de6bfdfba052fa6b2d3664c8f5272e23c9072";
+      sha256 = "1nwjmsppsjicr7anq8na6md7b1z84l9ppnlr045hhxjvbkqwalvx";
+    };
+  }
+  {
+    goPackagePath  = "github.com/mattn/go-isatty";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-isatty";
+      rev =  "0360b2af4f38e8d38c7fce2a9f4e702702d73a39";
+      sha256 = "06w45aqz2a6yrk25axbly2k5wmsccv8cspb94bfmz4izvw8h927n";
+    };
+  }
+  {
+    goPackagePath  = "github.com/mgutz/ansi";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mgutz/ansi";
+      rev =  "9520e82c474b0a04dd04f8a40959027271bab992";
+      sha256 = "00bz22314j26736w1f0q4jy9d9dfaml17vn890n5zqy3cmvmww1j";
+    };
+  }
+  {
+    goPackagePath  = "github.com/mitchellh/go-homedir";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mitchellh/go-homedir";
+      rev =  "3864e76763d94a6df2f9960b16a20a33da9f9a66";
+      sha256 = "1n8vya16l60i5jms43yb8fzdgwvqa2q926p5wkg3lbrk8pxy1nv0";
+    };
+  }
+  {
+    goPackagePath  = "github.com/pkg/errors";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pkg/errors";
+      rev =  "645ef00459ed84a119197bfb8d8205042c6df63d";
+      sha256 = "001i6n71ghp2l6kdl3qq1v2vmghcz3kicv9a5wgcihrzigm75pp5";
+    };
+  }
+  {
+    goPackagePath  = "github.com/pmezard/go-difflib";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pmezard/go-difflib";
+      rev =  "792786c7400a136282c1664665ae0a8db921c6c2";
+      sha256 = "0c1cn55m4rypmscgf0rrb88pn58j3ysvc2d0432dp3c6fqg6cnzw";
+    };
+  }
+  {
+    goPackagePath  = "github.com/robertkrimen/otto";
+    fetch = {
+      type = "git";
+      url = "https://github.com/robertkrimen/otto";
+      rev =  "15f95af6e78dcd2030d8195a138bd88d4f403546";
+      sha256 = "07j7l340lmqwpfscwyb8llk3k37flvs20a4a8vzc85f16xyd9npf";
+    };
+  }
+  {
+    goPackagePath  = "github.com/sirupsen/logrus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/sirupsen/logrus";
+      rev =  "c155da19408a8799da419ed3eeb0cb5db0ad5dbc";
+      sha256 = "0g5z7al7kky11ai2dhac6gkp3b5pxsvx72yj3xg4wg3265gbn7yz";
+    };
+  }
+  {
+    goPackagePath  = "github.com/stretchr/objx";
+    fetch = {
+      type = "git";
+      url = "https://github.com/stretchr/objx";
+      rev =  "477a77ecc69700c7cdeb1fa9e129548e1c1c393c";
+      sha256 = "0iph0qmpyqg4kwv8jsx6a56a7hhqq8swrazv40ycxk9rzr0s8yls";
+    };
+  }
+  {
+    goPackagePath  = "github.com/stretchr/testify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/stretchr/testify";
+      rev =  "f35b8ab0b5a2cef36673838d662e249dd9c94686";
+      sha256 = "0dlszlshlxbmmfxj5hlwgv3r22x0y1af45gn1vd198nvvs3pnvfs";
+    };
+  }
+  {
+    goPackagePath  = "github.com/tidwall/gjson";
+    fetch = {
+      type = "git";
+      url = "https://github.com/tidwall/gjson";
+      rev =  "afaeb9562041a8018c74e006551143666aed08bf";
+      sha256 = "1hysk947mrlpaqjq7mab0nnm190fwvfdifaa2cq3sbwfrzx6h1c8";
+    };
+  }
+  {
+    goPackagePath  = "github.com/tidwall/match";
+    fetch = {
+      type = "git";
+      url = "https://github.com/tidwall/match";
+      rev =  "1731857f09b1f38450e2c12409748407822dc6be";
+      sha256 = "14nv96h0mjki5q685qx8y331h4yga6hlfh3z9nz6acvnv284q578";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev =  "a8fb68e7206f8c78be19b432c58eb52a6aa34462";
+      sha256 = "1svphap40hy5srcqnb0l207r6wfm9hf0f3fcaq124qp4m91s6vlf";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev =  "db08ff08e8622530d9ed3a0e8ac279f6d4c02196";
+      sha256 = "1f6q8kbijnrfy6wjqxrzgjf38ippckc5w34lhqsjs7kq045aar9a";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev =  "8014b7b116a67fea23fbb82cd834c9ad656ea44b";
+      sha256 = "1ld5nr0zqjgkny7d5biix9hbnxnlzxxa5nspnal2q2c7wnai8apa";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/text";
+      rev =  "f21a4dfb5e38f5895301dc265a8def02365cc3d0";
+      sha256 = "0r6x6zjzhr8ksqlpiwm5gdd7s209kwk5p4lw54xjvz10cs3qlq19";
+    };
+  }
+  {
+    goPackagePath  = "gopkg.in/AlecAivazis/survey.v1";
+    fetch = {
+      type = "git";
+      url = "https://github.com/AlecAivazis/survey";
+      rev =  "e752db451e07e09c7d7dc8cada807a44bdb0fd47";
+      sha256 = "00fhmsaymrf86pg246cqxvfrivgfkyg3i0aixsp3sn15hg3i0vlq";
+    };
+  }
+  {
+    goPackagePath  = "gopkg.in/ini.v1";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-ini/ini";
+      rev =  "06f5f3d67269ccec1fe5fe4134ba6e982984f7f5";
+      sha256 = "0fx123601aiqqn0yr9vj6qp1bh8gp240w4qdm76irs73q8dxlk7a";
+    };
+  }
+  {
+    goPackagePath  = "gopkg.in/sourcemap.v1";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-sourcemap/sourcemap";
+      rev =  "6e83acea0053641eff084973fee085f0c193c61a";
+      sha256 = "08rf2dl13hbnm3fq2cm0nnsspy9fhf922ln23cz5463cv7h62as4";
+    };
+  }
+]
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/security/sbsigntool/autoconf.patch b/nixpkgs/pkgs/tools/security/sbsigntool/autoconf.patch
new file mode 100644
index 000000000000..f436a73bca72
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sbsigntool/autoconf.patch
@@ -0,0 +1,29 @@
+--- sbsigntools/configure.ac	2018-09-25 10:30:00.878766256 -0500
++++ configure.ac.new	2018-09-25 10:34:56.231277375 -0500
+@@ -71,15 +71,16 @@
+ # no consistent view of where gnu-efi should dump the efi stuff, so find it
+ ##
+ for path in /lib /lib64 /usr/lib /usr/lib64 /usr/lib32 /lib/efi /lib64/efi /usr/lib/efi /usr/lib64/efi; do
+-    if test -e $path/crt0-efi-$EFI_ARCH.o; then
+-       CRTPATH=$path
++    if test -e @@NIX_GNUEFI@@/$path/crt0-efi-$EFI_ARCH.o; then
++       CRTPATH=@@NIX_GNUEFI@@/$path
++       break
+     fi
+ done
+ if test -z "$CRTPATH"; then
+    AC_MSG_ERROR([cannot find the gnu-efi crt path])
+ fi
+ 
+-EFI_CPPFLAGS="-I/usr/include/efi -I/usr/include/efi/$EFI_ARCH \
++EFI_CPPFLAGS="-I@@NIX_GNUEFI@@/include/efi -I@@NIX_GNUEFI@@/include/efi/$EFI_ARCH \
+  -DEFI_FUNCTION_WRAPPER"
+ CPPFLAGS_save="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $EFI_CPPFLAGS"
+@@ -90,5 +91,5 @@
+ AC_SUBST(CRTPATH, $CRTPATH)
+ 
+ AC_CONFIG_FILES([Makefile src/Makefile lib/ccan/Makefile]
+-		[docs/Makefile tests/Makefile])
++		[docs/Makefile])
+ AC_OUTPUT
diff --git a/nixpkgs/pkgs/tools/security/sbsigntool/default.nix b/nixpkgs/pkgs/tools/security/sbsigntool/default.nix
new file mode 100644
index 000000000000..e0e2896f6ffc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sbsigntool/default.nix
@@ -0,0 +1,53 @@
+{ stdenv
+, fetchgit, autoconf, automake, pkgconfig, help2man
+, openssl, libuuid, gnu-efi, libbfd
+}:
+
+stdenv.mkDerivation {
+  pname = "sbsigntool";
+  version = "0.9.1";
+
+  src = fetchgit {
+    url = "https://git.kernel.org/pub/scm/linux/kernel/git/jejb/sbsigntools.git";
+    rev = "v0.9.1";
+    sha256 = "098gxmhjn8acxjw5bq59wq4xhgkpx1xn8kjvxwdzpqkwq9ivrsbp";
+  };
+
+  patches = [ ./autoconf.patch ];
+
+  prePatch = "patchShebangs .";
+
+  nativeBuildInputs = [ autoconf automake pkgconfig help2man ];
+  buildInputs = [ openssl libuuid libbfd gnu-efi ];
+
+  configurePhase = ''
+    substituteInPlace configure.ac --replace "@@NIX_GNUEFI@@" "${gnu-efi}"
+
+    lib/ccan.git/tools/create-ccan-tree --build-type=automake lib/ccan "talloc read_write_all build_assert array_size endian"
+    touch AUTHORS
+    touch ChangeLog
+
+    echo "SUBDIRS = lib/ccan src docs" >> Makefile.am
+
+    aclocal
+    autoheader
+    autoconf
+    automake --add-missing -Wno-portability
+
+    ./configure --prefix=$out
+    '';
+
+  installPhase = ''
+    mkdir -p $out
+    make install
+    '';
+
+  meta = with stdenv.lib; {
+    description = "Tools for maintaining UEFI signature databases";
+    homepage    = http://jk.ozlabs.org/docs/sbkeysync-maintaing-uefi-key-databases;
+    maintainers = [ maintainers.tstrobel ];
+    platforms   = [ "x86_64-linux" ]; # Broken on i686
+    license     = licenses.gpl3;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/security/scallion/default.nix b/nixpkgs/pkgs/tools/security/scallion/default.nix
new file mode 100644
index 000000000000..e419232641b6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/scallion/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromGitHub, makeWrapper, mono, openssl, ocl-icd }:
+
+stdenv.mkDerivation rec {
+  version = "2.1";
+  pname = "scallion";
+
+  src = fetchFromGitHub {
+    owner = "lachesis";
+    repo = "scallion";
+    rev = "v${version}";
+    sha256 = "1l9aj101xpsaaa6kmmhmq68m6z8gzli1iaaf8xaxbivq0i7vka9k";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ mono ];
+
+  buildPhase = ''
+    xbuild scallion.sln
+  '';
+
+  installPhase = ''
+    mkdir -p $out/share
+    cp scallion/bin/Debug/* $out/share/
+    makeWrapper ${mono}/bin/mono $out/bin/scallion \
+      --prefix LD_LIBRARY_PATH : ${stdenv.lib.makeLibraryPath [ openssl ocl-icd ]} \
+      --add-flags $out/share/scallion.exe
+  '';
+
+  meta = with stdenv.lib; {
+    description = "GPU-based tor hidden service name generator";
+    homepage = src.meta.homepage;
+    license = licenses.mit;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ volth ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/scrypt/default.nix b/nixpkgs/pkgs/tools/security/scrypt/default.nix
new file mode 100644
index 000000000000..66313b536499
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/scrypt/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "scrypt";
+  version = "1.3.0";
+
+  src = fetchurl {
+    url = "https://www.tarsnap.com/scrypt/${pname}-${version}.tgz";
+    sha256 = "0j17yfrpi2bk5cawb4a4mzpv1vadqxh956hx0pa1gqfisknk8c16";
+  };
+
+  buildInputs = [ openssl ];
+
+  patchPhase = ''
+    for f in Makefile.in autotools/Makefile.am libcperciva/cpusupport/Build/cpusupport.sh ; do
+      substituteInPlace $f --replace "command -p " ""
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Encryption utility";
+    homepage    = https://www.tarsnap.com/scrypt.html;
+    license     = licenses.bsd2;
+    platforms   = platforms.all;
+    maintainers = with maintainers; [ thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/seccure/default.nix b/nixpkgs/pkgs/tools/security/seccure/default.nix
new file mode 100644
index 000000000000..686ef36f863c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/seccure/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, libgcrypt }:
+
+stdenv.mkDerivation rec {
+  pname = "seccure";
+  version = "0.5";
+  
+  src = fetchurl {
+    url = "http://point-at-infinity.org/seccure/${pname}-${version}.tar.gz";
+    sha256 = "0nwnk3hfhgvf5xr0xipbh6smfnya22wphc5rj0vgi5d0zr5cwrk5";
+  };
+
+  buildInputs = [ libgcrypt ];
+  
+  preConfigure = ''
+    sed -e s@/usr/@$out/@g -i Makefile
+    sed -e 's@ln -f@ln -sf@g' -i Makefile
+    mkdir -p $out/bin $out/share/man/man1
+  '';
+
+  meta = {
+    homepage = http://point-at-infinity.org/seccure/;
+    description = "Zero-configuration elliptic curve cryptography utility";
+    platforms = stdenv.lib.platforms.unix;
+    license = stdenv.lib.licenses.lgpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/secp256k1/default.nix b/nixpkgs/pkgs/tools/security/secp256k1/default.nix
new file mode 100644
index 000000000000..7189032454d6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/secp256k1/default.nix
@@ -0,0 +1,54 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, jdk
+
+# Enable ECDSA pubkey recovery module
+, enableRecovery ? true
+
+# Enable ECDH shared secret computation (disabled by default because it is
+# experimental)
+, enableECDH ? false
+
+# Enable libsecp256k1_jni (disabled by default because it requires a jdk,
+# which is a large dependency)
+, enableJNI ? false
+
+}:
+
+let inherit (stdenv.lib) optionals; in
+
+stdenv.mkDerivation {
+  pname = "secp256k1";
+
+  # I can't find any version numbers, so we're just using the date of the
+  # last commit.
+  version = "2017-12-18";
+
+  src = fetchFromGitHub {
+    owner = "bitcoin-core";
+    repo = "secp256k1";
+    rev = "f54c6c5083307b18224c953cf5870ea7ffce070b";
+    sha256 = "0bxqmimm627g9klalg1vdbspmn52588v4a6cli3p8bn84ibsnzbm";
+  };
+
+  buildInputs = optionals enableJNI [ jdk ];
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  configureFlags =
+    [ "--enable-benchmark=no" "--enable-tests=no" "--enable-exhaustive-tests=no" ] ++
+    optionals enableECDH [ "--enable-module-ecdh" "--enable-experimental" ] ++
+    optionals enableRecovery [ "--enable-module-recovery" ] ++
+    optionals enableJNI [ "--enable-jni" ];
+
+  meta = with stdenv.lib; {
+    description = "Optimized C library for EC operations on curve secp256k1";
+    longDescription = ''
+      Optimized C library for EC operations on curve secp256k1. Part of
+      Bitcoin Core. This library is a work in progress and is being used
+      to research best practices. Use at your own risk.
+    '';
+    homepage = https://github.com/bitcoin-core/secp256k1;
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ chris-martin ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/sedutil/default.nix b/nixpkgs/pkgs/tools/security/sedutil/default.nix
new file mode 100644
index 000000000000..9edd9745326e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sedutil/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "sedutil";
+  version = "1.15.1";
+
+  src = fetchFromGitHub {
+    owner  = "Drive-Trust-Alliance";
+    repo   = "sedutil";
+    rev    = version;
+    sha256 = "0zg5v27vbrzzl2vqzks91zj48z30qgcshkqkm1g8ycnhi145l0mf";
+  };
+
+  postPatch = ''
+    patchShebangs .
+  '';
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "DTA sedutil Self encrypting drive software";
+    homepage    = https://www.drivetrust.com;
+    license     = licenses.gpl3;
+    platforms   = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/sequoia/default.nix b/nixpkgs/pkgs/tools/security/sequoia/default.nix
new file mode 100644
index 000000000000..21403225aad2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sequoia/default.nix
@@ -0,0 +1,92 @@
+{ stdenv, fetchFromGitLab, lib, darwin
+, git, nettle, llvmPackages, cargo, rustc
+, rustPlatform, pkgconfig, glib
+, openssl, sqlite, capnproto
+, ensureNewerSourcesForZipFilesHook, pythonSupport ? true, pythonPackages ? null
+}:
+
+assert pythonSupport -> pythonPackages != null;
+
+rustPlatform.buildRustPackage rec {
+  pname = "sequoia";
+  version = "0.11.0";
+
+  src = fetchFromGitLab {
+    owner = "sequoia-pgp";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1k0pr3vn77fpfzyvbg7xb4jwm6srsiws9bsd8q7i3hl6j56a880i";
+  };
+
+  cargoSha256 = "15bhg7b88rq8p0bn6y5wwv2l42kqb1qyx2s3kw0r0v0wadf823q3";
+
+  nativeBuildInputs = [
+    pkgconfig
+    cargo
+    rustc
+    git
+    llvmPackages.libclang
+    llvmPackages.clang
+    ensureNewerSourcesForZipFilesHook
+  ] ++
+    lib.optionals pythonSupport [ pythonPackages.setuptools ]
+  ;
+
+  checkInputs = lib.optionals pythonSupport [
+    pythonPackages.pytest
+    pythonPackages.pytestrunner
+  ];
+
+  buildInputs = [
+    openssl
+    sqlite
+    nettle
+    capnproto
+  ]
+    ++ lib.optionals pythonSupport [ pythonPackages.python pythonPackages.cffi ]
+    ++ lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.Security ]
+  ;
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+  ];
+
+  buildFlags = [
+    "build-release"
+  ];
+
+  LIBCLANG_PATH = "${llvmPackages.libclang}/lib";
+
+  postPatch = ''
+    # otherwise, the check fails because we delete the `.git` in the unpack phase
+    substituteInPlace openpgp-ffi/Makefile \
+      --replace 'git grep' 'grep -R'
+    # Without this, the check fails
+    substituteInPlace openpgp-ffi/examples/Makefile \
+      --replace '-O0 -g -Wall -Werror' '-g'
+    substituteInPlace ffi/examples/Makefile \
+      --replace '-O0 -g -Wall -Werror' '-g'
+  '';
+
+  preInstall = lib.optionalString pythonSupport ''
+    export installFlags="PYTHONPATH=$PYTHONPATH:$out/${pythonPackages.python.sitePackages}"
+  '' + lib.optionalString (!pythonSupport) ''
+    export installFlags="PYTHON=disable"
+  '';
+
+  # Don't use buildRustPackage phases, only use it for rust deps setup
+  configurePhase = null;
+  buildPhase = null;
+  doCheck = true;
+  checkPhase = null;
+  installPhase = null;
+
+  meta = with stdenv.lib; {
+    description = "A cool new OpenPGP implementation";
+    homepage = "https://sequoia-pgp.org/";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ minijackson doronbehar ];
+    platforms = platforms.all;
+    broken = stdenv.targetPlatform.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/sha1collisiondetection/default.nix b/nixpkgs/pkgs/tools/security/sha1collisiondetection/default.nix
new file mode 100644
index 000000000000..8c6a026a6124
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sha1collisiondetection/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchFromGitHub, libtool, which }:
+
+stdenv.mkDerivation  rec {
+  pname = "sha1collisiondetection";
+  version = "1.0.3";
+
+  src = fetchFromGitHub {
+    owner = "cr-marcstevens";
+    repo = "sha1collisiondetection";
+    rev = "stable-v${version}";
+    sha256 = "0xn31hkkqs0kj9203rzx6w4nr0lq8fnrlm5i76g0px3q4v2dzw1s";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  doCheck = true;
+
+  nativeBuildInputs = [ libtool which ];
+
+  meta = with stdenv.lib; {
+    description = "Library and command line tool to detect SHA-1 collision";
+    longDescription = ''
+      This library and command line tool were designed as near drop-in
+      replacements for common SHA-1 libraries and sha1sum. They will
+      compute the SHA-1 hash of any given file and additionally will
+      detect cryptanalytic collision attacks against SHA-1 present in
+      each file. It is very fast and takes less than twice the amount
+      of time as regular SHA-1.
+      '';
+    platforms = platforms.all;
+    maintainers = with maintainers; [ leenaars ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/shc/default.nix b/nixpkgs/pkgs/tools/security/shc/default.nix
new file mode 100644
index 000000000000..18814eb7fa8f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/shc/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "shc";
+  version = "4.0.3";
+  rev = version;
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "neurobin";
+    repo = "shc";
+    sha256 = "0bfn404plsssa14q89k9l3s5lxq3df0sny5lis4j2w75qrkqx694";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://neurobin.org/projects/softwares/unix/shc/;
+    description = "Shell Script Compiler";
+    platforms = stdenv.lib.platforms.linux;
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/signify/default.nix b/nixpkgs/pkgs/tools/security/signify/default.nix
new file mode 100644
index 000000000000..22604a3f70ba
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/signify/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchFromGitHub, libbsd, pkgconfig }:
+
+stdenv.mkDerivation rec {
+  pname = "signify";
+  version = "25";
+
+  src = fetchFromGitHub {
+    owner = "aperezdc";
+    repo = "signify";
+    rev = "v${version}";
+    sha256 = "0zg0rffxwj2a71s1bllhrn491xsmirg9sshpq8f3vl25lv4c2cnq";
+  };
+
+  doCheck = true;
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libbsd ];
+
+  preInstall = ''
+    export PREFIX=$out
+  '';
+
+  meta = with stdenv.lib; {
+    description = "OpenBSD signing tool";
+    longDescription = ''
+      OpenBSDs signing tool, which uses the Ed25519 public key signature system
+      for fast signing and verification of messages using small public keys.
+    '';
+    homepage = https://www.tedunangst.com/flak/post/signify;
+    license = licenses.isc;
+    maintainers = [ maintainers.rlupton20 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/signing-party/default.nix b/nixpkgs/pkgs/tools/security/signing-party/default.nix
new file mode 100644
index 000000000000..ea487fed2a1d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/signing-party/default.nix
@@ -0,0 +1,221 @@
+{ stdenv, fetchFromGitLab, autoconf, automake, makeWrapper
+, python3, perl, perlPackages
+, libmd, gnupg, which, getopt, libpaper, nettools, qprint
+, sendmailPath ? "/run/wrappers/bin/sendmail" }:
+
+let
+  # All runtime dependencies from the CPAN graph:
+  # https://widgets.stratopan.com/wheel?q=GnuPG-Interface-0.52&runtime=1&fs=1
+  GnuPGInterfaceRuntimeDependencies = with perlPackages; [
+    strictures ClassMethodModifiers DataPerl DevelGlobalDestruction ExporterTiny
+    GnuPGInterface ListMoreUtils ModuleRuntime Moo MooXHandlesVia MooXlate
+    RoleTiny SubExporterProgressive SubQuote TypeTiny
+  ];
+in stdenv.mkDerivation rec {
+  pname = "signing-party";
+  version = "2.10";
+
+  src = fetchFromGitLab {
+    domain = "salsa.debian.org";
+    owner = "signing-party-team";
+    repo = "signing-party";
+    rev = "v${version}";
+    sha256 = "0lq8nmwjmysry0n4jg6vb7bh0lagbyb9pa11ii3s41p1mhzchf2r";
+  };
+
+  # TODO: Get this patch upstream...
+  patches = [ ./gpgwrap_makefile.patch ];
+
+  postPatch = ''
+    substituteInPlace gpg-mailkeys/gpg-mailkeys --replace \
+      "/usr/sbin/sendmail" "${sendmailPath}"
+  '';
+
+  # One can use the following command to find all relevant Makefiles:
+  # grep -R '$(DESTDIR)/usr' | cut -d: -f1 | sort -u | grep -v 'debian/rules'
+  preBuild = ''
+    substituteInPlace gpgsigs/Makefile --replace '$(DESTDIR)/usr' "$out"
+    substituteInPlace keyanalyze/Makefile --replace '$(DESTDIR)/usr' "$out"
+    substituteInPlace keylookup/Makefile --replace '$(DESTDIR)/usr' "$out"
+    substituteInPlace sig2dot/Makefile --replace '$(DESTDIR)/usr' "$out"
+    substituteInPlace springgraph/Makefile --replace '$(DESTDIR)/usr' "$out"
+  '';
+
+  # Perl is required for it's pod2man.
+  # Python and Perl are required for patching the script interpreter paths.
+  nativeBuildInputs = [ autoconf automake makeWrapper ];
+  buildInputs = [ python3 perl perlPackages.GnuPGInterface libmd gnupg ];
+
+  postInstall = ''
+    # Install all tools which aren't handled by 'make install'.
+    # TODO: Fix upstream...!
+
+    # caff: CA - Fire and Forget signs and mails a key
+    install -D -m555 caff/caff $out/bin/caff;
+    install -D -m444 caff/caff.1 $out/share/man/man1/caff.1;
+
+    # pgp-clean: removes all non-self signatures from key
+    install -D -m555 caff/pgp-clean $out/bin/pgp-clean;
+    install -D -m444 caff/pgp-clean.1 $out/share/man/man1/pgp-clean.1;
+
+    # pgp-fixkey: removes broken packets from keys
+    install -D -m555 caff/pgp-fixkey $out/bin/pgp-fixkey;
+    install -D -m444 caff/pgp-fixkey.1 $out/share/man/man1/pgp-fixkey.1;
+
+    # gpg-mailkeys: simply mail out a signed key to its owner
+    install -D -m555 gpg-mailkeys/gpg-mailkeys $out/bin/gpg-mailkeys;
+    install -D -m444 gpg-mailkeys/gpg-mailkeys.1 $out/share/man/man1/gpg-mailkeys.1;
+
+    # gpg-key2ps: generate PostScript file with fingerprint paper slips
+    install -D -m555 gpg-key2ps/gpg-key2ps $out/bin/gpg-key2ps;
+    install -D -m444 gpg-key2ps/gpg-key2ps.1 $out/share/man/man1/gpg-key2ps.1;
+
+    # gpgdir: recursive directory encryption tool
+    install -D -m555 gpgdir/gpgdir $out/bin/gpgdir;
+    install -D -m444 gpgdir/gpgdir.1 $out/share/man/man1/gpgdir.1;
+
+    # gpglist: show who signed which of your UIDs
+    install -D -m555 gpglist/gpglist $out/bin/gpglist;
+    install -D -m444 gpglist/gpglist.1 $out/share/man/man1/gpglist.1;
+
+    # gpgsigs: annotates list of GnuPG keys with already done signatures
+    # The manual page is not handled by 'make install'
+    install -D -m444 gpgsigs/gpgsigs.1 $out/share/man/man1/gpgsigs.1;
+
+    # gpgparticipants: create list of party participants for the organiser
+    install -D -m555 gpgparticipants/gpgparticipants $out/bin/gpgparticipants;
+    install -D -m444 gpgparticipants/gpgparticipants.1 $out/share/man/man1/gpgparticipants.1;
+    install -D -m555 gpgparticipants/gpgparticipants-prefill $out/bin/gpgparticipants-prefill;
+    install -D -m444 gpgparticipants/gpgparticipants-prefill.1 $out/share/man/man1/gpgparticipants-prefill.1;
+
+    # gpgwrap: a passphrase wrapper
+    install -D -m555 gpgwrap/bin/gpgwrap $out/bin/gpgwrap;
+    install -D -m444 gpgwrap/doc/gpgwrap.1 $out/share/man/man1/gpgwrap.1;
+
+    # keyanalyze: minimum signing distance (MSD) analysis on keyrings
+    # Only the binaries are handled by 'make install'
+    install -D -m444 keyanalyze/keyanalyze.1 $out/share/man/man1/keyanalyze.1;
+    install -D -m444 keyanalyze/pgpring/pgpring.1 $out/share/man/man1/pgpring.1;
+    install -D -m444 keyanalyze/process_keys.1 $out/share/man/man1/process_keys.1;
+
+    # keylookup: ncurses wrapper around gpg --search
+    # Handled by 'make install'
+
+    # sig2dot: converts a list of GnuPG signatures to a .dot file
+    # Handled by 'make install'
+
+    # springgraph: creates a graph from a .dot file
+    # Handled by 'make install'
+
+    # keyart: creates a random ASCII art of a PGP key file
+    install -D -m555 keyart/keyart $out/bin/keyart;
+    install -D -m444 keyart/doc/keyart.1 $out/share/man/man1/keyart.1;
+
+    # gpg-key2latex: generate LaTeX file with fingerprint paper slips
+    install -D -m555 gpg-key2latex/gpg-key2latex $out/bin/gpg-key2latex;
+    install -D -m444 gpg-key2latex/gpg-key2latex.1 $out/share/man/man1/gpg-key2latex.1;
+  '';
+
+  postFixup = ''
+    # Add the runtime dependencies for all programs (but mainly for the Perl
+    # scripts)
+
+    wrapProgram $out/bin/caff --set PERL5LIB \
+      ${with perlPackages; makePerlPath ([
+        TextTemplate MIMETools MailTools TimeDate NetIDNEncode ]
+        ++ GnuPGInterfaceRuntimeDependencies)} \
+      --prefix PATH ":" \
+      "${stdenv.lib.makeBinPath [ nettools gnupg ]}"
+
+    wrapProgram $out/bin/gpg-key2latex --set PERL5LIB \
+      ${perlPackages.makePerlPath GnuPGInterfaceRuntimeDependencies} \
+      --prefix PATH ":" \
+      "${stdenv.lib.makeBinPath [ gnupg libpaper ]}"
+
+    wrapProgram $out/bin/gpg-key2ps --prefix PATH ":" \
+      "${stdenv.lib.makeBinPath [ which gnupg libpaper ]}"
+
+    wrapProgram $out/bin/gpg-mailkeys --prefix PATH ":" \
+      "${stdenv.lib.makeBinPath [ gnupg qprint ]}"
+
+    wrapProgram $out/bin/gpgdir --set PERL5LIB \
+      ${with perlPackages; makePerlPath ([
+        TermReadKey ]
+        ++ GnuPGInterfaceRuntimeDependencies)} \
+      --prefix PATH ":" \
+      "${stdenv.lib.makeBinPath [ gnupg ]}"
+
+    wrapProgram $out/bin/gpglist --prefix PATH ":" \
+      "${stdenv.lib.makeBinPath [ gnupg ]}"
+
+    wrapProgram $out/bin/gpgparticipants --prefix PATH ":" \
+      "${stdenv.lib.makeBinPath [ getopt gnupg ]}"
+
+#    wrapProgram $out/bin/gpgparticipants-prefill
+
+    wrapProgram $out/bin/gpgsigs --set PERL5LIB \
+      ${perlPackages.makePerlPath GnuPGInterfaceRuntimeDependencies} \
+      --prefix PATH ":" \
+      "${stdenv.lib.makeBinPath [ gnupg ]}"
+
+    wrapProgram $out/bin/gpgwrap --prefix PATH ":" \
+      "${stdenv.lib.makeBinPath [ gnupg ]}"
+
+#    wrapProgram $out/bin/keyanalyze --set PERL5LIB \
+
+    wrapProgram $out/bin/keyart --prefix PATH ":" \
+      "${stdenv.lib.makeBinPath [ gnupg ]}"
+
+    wrapProgram $out/bin/keylookup --prefix PATH ":" \
+      "${stdenv.lib.makeBinPath [ gnupg ]}"
+
+    wrapProgram $out/bin/pgp-clean --set PERL5LIB \
+      ${perlPackages.makePerlPath GnuPGInterfaceRuntimeDependencies} \
+      --prefix PATH ":" \
+      "${stdenv.lib.makeBinPath [ gnupg ]}"
+
+    wrapProgram $out/bin/pgp-fixkey --set PERL5LIB \
+      ${perlPackages.makePerlPath GnuPGInterfaceRuntimeDependencies} \
+      --prefix PATH ":" \
+      "${stdenv.lib.makeBinPath [ gnupg ]}"
+
+#    wrapProgram $out/bin/pgpring
+
+#    wrapProgram $out/bin/process_keys
+
+     # Upstream-Bug: Seems like sig2dot doesn't work with 2.1 (modern) anymore,
+     # please use 2.0 (stable) instead.
+#    wrapProgram $out/bin/sig2dot
+
+    wrapProgram $out/bin/springgraph --set PERL5LIB \
+      ${with perlPackages; makePerlPath [ GD ]}
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://salsa.debian.org/signing-party-team/signing-party;
+    description = "A collection of several projects relating to OpenPGP";
+    longDescription = ''
+      This is a collection of several projects relating to OpenPGP.
+
+      * caff: CA - Fire and Forget signs and mails a key
+      * pgp-clean: removes all non-self signatures from key
+      * pgp-fixkey: removes broken packets from keys
+      * gpg-mailkeys: simply mail out a signed key to its owner
+      * gpg-key2ps: generate PostScript file with fingerprint paper slips
+      * gpgdir: recursive directory encryption tool
+      * gpglist: show who signed which of your UIDs
+      * gpgsigs: annotates list of GnuPG keys with already done signatures
+      * gpgparticipants: create list of party participants for the organiser
+      * gpgwrap: a passphrase wrapper
+      * keyanalyze: minimum signing distance (MSD) analysis on keyrings
+      * keylookup: ncurses wrapper around gpg --search
+      * sig2dot: converts a list of GnuPG signatures to a .dot file
+      * springgraph: creates a graph from a .dot file
+      * keyart: creates a random ASCII art of a PGP key file
+      * gpg-key2latex: generate LaTeX file with fingerprint paper slips
+    '';
+    license = with licenses; [ bsd2 bsd3 gpl2 gpl2Plus gpl3Plus ];
+    maintainers = with maintainers; [ fpletz primeos ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/signing-party/gpgwrap_makefile.patch b/nixpkgs/pkgs/tools/security/signing-party/gpgwrap_makefile.patch
new file mode 100644
index 000000000000..4beaf5b80887
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/signing-party/gpgwrap_makefile.patch
@@ -0,0 +1,16 @@
+--- a/gpgwrap/Makefile	2015-06-03 16:24:48.723129144 +0200
++++ b/gpgwrap/Makefile	2015-06-03 16:24:11.639744346 +0200
+@@ -1,9 +1,12 @@
+ MAKE=make
+ 
+-.PHONY: all clean
++.PHONY: all clean install
+ 
+ all:
+ 	cd src && ${MAKE} all DIET="${DIET}"
+ 
++install:
++
++
+ clean:
+ 	cd src && ${MAKE} clean
diff --git a/nixpkgs/pkgs/tools/security/simple-tpm-pk11/default.nix b/nixpkgs/pkgs/tools/security/simple-tpm-pk11/default.nix
new file mode 100644
index 000000000000..16056f9a59e0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/simple-tpm-pk11/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub, trousers, openssl, opencryptoki, autoreconfHook, libtool }:
+
+stdenv.mkDerivation rec {
+  pname = "simple-tpm-pk11";
+  version = "0.06";
+
+  src = fetchFromGitHub {
+    owner = "ThomasHabets";
+    repo = "simple-tpm-pk11";
+    rev = version;
+    sha256 = "0vpbaklr4r1a2am0pqcm6m41ph22mkcrq33y8ab5h8qkhkvhd6a6";
+  };
+
+  nativeBuildInputs = [ autoreconfHook libtool ];
+  buildInputs = [ trousers openssl opencryptoki ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "Simple PKCS11 provider for TPM chips";
+    longDescription = ''
+      A simple library for using the TPM chip to secure SSH keys.
+    '';
+    homepage    = https://github.com/ThomasHabets/simple-tpm-pk11;
+    license     = licenses.asl20;
+    maintainers = with maintainers; [ tstrobel ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/softhsm/default.nix b/nixpkgs/pkgs/tools/security/softhsm/default.nix
new file mode 100644
index 000000000000..94642700c336
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/softhsm/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, botan, libobjc, Security }:
+
+stdenv.mkDerivation rec {
+
+  pname = "softhsm";
+  version = "2.5.0";
+
+  src = fetchurl {
+    url = "https://dist.opendnssec.org/source/${pname}-${version}.tar.gz";
+    sha256 = "1cijq78jr3mzg7jj11r0krawijp99p253f4qdqr94n728p7mdalj";
+  };
+
+  configureFlags = [
+    "--with-crypto-backend=botan"
+    "--with-botan=${botan}"
+    "--sysconfdir=$out/etc"
+    "--localstatedir=$out/var"
+    ];
+
+  propagatedBuildInputs =
+    stdenv.lib.optionals stdenv.isDarwin [ libobjc Security ];
+
+  buildInputs = [ botan ];
+
+  postInstall = "rm -rf $out/var";
+
+  meta = with stdenv.lib; {
+    homepage = https://www.opendnssec.org/softhsm;
+    description = "Cryptographic store accessible through a PKCS #11 interface";
+    license = licenses.bsd2;
+    maintainers = [ maintainers.leenaars ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/sops/default.nix b/nixpkgs/pkgs/tools/security/sops/default.nix
new file mode 100644
index 000000000000..8aa2e219e7df
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sops/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "sops";
+  version = "3.5.0";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "mozilla";
+    repo = pname;
+    sha256 = "1515bk0fl0pvdkp402l51gdg63bmqlh89sglss6prc1qqvv5v2xy";
+  };
+
+  modSha256 = "0vhxd3dschj5i9sig6vpxzbl59cas1qa843akzmjnfjrrafb916y";
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/mozilla/sops";
+    description = "Mozilla sops (Secrets OPerationS) is an editor of encrypted files";
+    maintainers = [ maintainers.marsam ];
+    license = licenses.mpl20;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/spectre-meltdown-checker/default.nix b/nixpkgs/pkgs/tools/security/spectre-meltdown-checker/default.nix
new file mode 100644
index 000000000000..656efbf390cb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/spectre-meltdown-checker/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchFromGitHub, makeWrapper, coreutils, binutils-unwrapped }:
+
+stdenv.mkDerivation rec {
+  pname = "spectre-meltdown-checker";
+  version = "0.43";
+
+  src = fetchFromGitHub {
+    owner = "speed47";
+    repo = "spectre-meltdown-checker";
+    rev = "v${version}";
+    sha256 = "1ys5m1yvm26qjlsjpqqd33lwpb880p0ay289hmifxjjawkqddjgg";
+  };
+
+  prePatch = ''
+    substituteInPlace spectre-meltdown-checker.sh \
+      --replace /bin/echo ${coreutils}/bin/echo
+  '';
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = with stdenv.lib; ''
+    runHook preInstall
+
+    install -Dm755 spectre-meltdown-checker.sh $out/bin/spectre-meltdown-checker
+    wrapProgram $out/bin/spectre-meltdown-checker \
+      --prefix PATH : ${makeBinPath [ binutils-unwrapped ]}
+
+    runHook postInstall
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Spectre & Meltdown vulnerability/mitigation checker for Linux";
+    homepage = https://github.com/speed47/spectre-meltdown-checker;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ dotlambda ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/srm/default.nix b/nixpkgs/pkgs/tools/security/srm/default.nix
new file mode 100644
index 000000000000..9782d00267f5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/srm/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+
+  name = "srm-" + version;
+  version = "1.2.15";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/srm/${version}/${name}.tar.gz";
+    sha256 = "10sjarhprs6s4zandndg720528rcnd4xk8dl48pjj7li1q9c30vm";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Delete files securely";
+    longDescription = ''
+      srm (secure rm) is a command-line compatible rm(1) which
+      overwrites file contents before unlinking. The goal is to
+      provide drop in security for users who wish to prevent recovery
+      of deleted information, even if the machine is compromised.
+    '';
+    homepage = http://srm.sourceforge.net;
+    license = licenses.mit;
+    maintainers = with maintainers; [ edwtjo ];
+    platforms = platforms.unix;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/security/ssdeep/default.nix b/nixpkgs/pkgs/tools/security/ssdeep/default.nix
new file mode 100644
index 000000000000..33ab4c373bca
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ssdeep/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "ssdeep";
+  version = "2.14.1";
+
+  src = fetchFromGitHub {
+    owner = "ssdeep-project";
+    repo = "ssdeep";
+    rev = "release-${version}";
+    sha256 = "1yx6yjkggshw5yl89m4kvyzarjdg2l3hs0bbjbrfzwp1lkfd8i0c";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  # Hack to avoid TMPDIR in RPATHs.
+  preFixup = ''rm -rf "$(pwd)" '';
+
+  meta = {
+    description = "A program for calculating fuzzy hashes";
+    homepage    = "http://www.ssdeep.sf.net";
+    license     = stdenv.lib.licenses.gpl2;
+    platforms   = stdenv.lib.platforms.unix;
+    maintainers = [ stdenv.lib.maintainers.thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ssh-audit/default.nix b/nixpkgs/pkgs/tools/security/ssh-audit/default.nix
new file mode 100644
index 000000000000..e615cec945dd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ssh-audit/default.nix
@@ -0,0 +1,53 @@
+{ fetchFromGitHub, python3Packages, stdenv }:
+
+python3Packages.buildPythonPackage rec {
+  pname = "ssh-audit";
+  version = "1.7.0";
+
+  src = fetchFromGitHub {
+    owner = "arthepsy";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    sha256 = "0akrychkdym9f6830ysq787c9nc0bkyqvy4h72498lyghwvwc2ms";
+  };
+
+  checkInputs = [
+    python3Packages.pytest
+    python3Packages.pytestcov
+  ];
+
+  checkPhase = ''
+    py.test --cov-report= --cov=ssh-audit -v test
+  '';
+
+  postPatch = ''
+    printf %s "$setupPy" > setup.py
+    mkdir scripts
+    cp ssh-audit.py scripts/ssh-audit
+    mkdir ssh_audit
+    cp ssh-audit.py ssh_audit/__init__.py
+  '';
+
+  setupPy = /* py */ ''
+    from distutils.core import setup
+    setup(
+      author='arthepsy',
+      description='${meta.description}',
+      license='${meta.license.spdxId}',
+      name='${pname}',
+      packages=['ssh_audit'],
+      scripts=['scripts/ssh-audit'],
+      url='${meta.homepage}',
+      version='${version}',
+    )
+  '';
+
+  meta = {
+    description = "Tool for ssh server auditing";
+    homepage = "https://github.com/arthepsy/ssh-audit";
+    license = stdenv.lib.licenses.mit;
+    maintainers = [
+      stdenv.lib.maintainers.tv
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/sshguard/default.nix b/nixpkgs/pkgs/tools/security/sshguard/default.nix
new file mode 100644
index 000000000000..a196fe9ca47a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sshguard/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, autoreconfHook, yacc, flex}:
+
+stdenv.mkDerivation rec {
+  version = "2.4.0";
+  pname = "sshguard";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/sshguard/${pname}-${version}.tar.gz";
+    sha256 = "1h6n2xyh58bshplbdqlr9rbnf3lz7nydnq5m2hkq15is3c4s8p06";
+  };
+
+  doCheck = true;
+
+  nativeBuildInputs = [ autoreconfHook yacc flex ];
+
+  configureFlags = [ "--sysconfdir=/etc" ];
+
+  meta = with stdenv.lib; {
+    description = "SSHGuard protects hosts from brute-force attacks";
+    longDescription = ''
+      SSHGuard can read log messages from various input sources. Log messages are parsed, line-by-line, for recognized patterns.
+      If an attack, such as several login failures within a few seconds, is detected, the offending IP is blocked.
+    '';
+    homepage = https://sshguard.net;
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ sargon ];
+    platforms = with platforms; linux ++ darwin ++ freebsd ++ netbsd ++ openbsd;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/sshuttle/default.nix b/nixpkgs/pkgs/tools/security/sshuttle/default.nix
new file mode 100644
index 000000000000..0e0e8c7ad753
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sshuttle/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, python3Packages, fetchurl, makeWrapper
+, coreutils, iptables, nettools, openssh, procps }:
+
+python3Packages.buildPythonApplication rec {
+  name = "sshuttle-${version}";
+  version = "0.78.5";
+
+  src = fetchurl {
+    sha256 = "0vp13xwrhx4m6zgsyzvai84lkq9mzkaw47j58dk0ll95kaymk2x8";
+    url = "mirror://pypi/s/sshuttle/${name}.tar.gz";
+  };
+
+  patches = [ ./sudo.patch ];
+
+  nativeBuildInputs = [ makeWrapper python3Packages.setuptools_scm ];
+  buildInputs =
+    [ coreutils openssh procps nettools ]
+    ++ stdenv.lib.optionals stdenv.isLinux [ iptables ];
+
+  checkInputs = with python3Packages; [ mock pytest pytestcov pytestrunner flake8 ];
+
+  postInstall = let
+    mapPath = f: x: stdenv.lib.concatStringsSep ":" (map f x);
+  in ''
+  wrapProgram $out/bin/sshuttle \
+    --prefix PATH : "${mapPath (x: "${x}/bin") buildInputs}" \
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/sshuttle/sshuttle/;
+    description = "Transparent proxy server that works as a poor man's VPN";
+    longDescription = ''
+      Forward connections over SSH, without requiring administrator access to the
+      target network (though it does require Python 2.7, Python 3.5 or later at both ends).
+      Works with Linux and Mac OS and supports DNS tunneling.
+    '';
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ domenkozar carlosdagos ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/sshuttle/sudo.patch b/nixpkgs/pkgs/tools/security/sshuttle/sudo.patch
new file mode 100644
index 000000000000..6e8634bd4a1f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sshuttle/sudo.patch
@@ -0,0 +1,13 @@
+diff --git a/sshuttle/client.py b/sshuttle/client.py
+index cab5b1c..e89f8a6 100644
+--- a/sshuttle/client.py
++++ b/sshuttle/client.py
+@@ -192,7 +192,7 @@ class FirewallClient:
+ 
+         self.auto_nets = []
+         python_path = os.path.dirname(os.path.dirname(__file__))
+-        argvbase = ([sys.executable, sys.argv[0]] +
++        argvbase = ([sys.argv[0]] +
+                     ['-v'] * (helpers.verbose or 0) +
+                     ['--method', method_name] +
+                     ['--firewall'])
diff --git a/nixpkgs/pkgs/tools/security/sslscan/default.nix b/nixpkgs/pkgs/tools/security/sslscan/default.nix
new file mode 100644
index 000000000000..15ac376d72a7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sslscan/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "sslscan";
+  version = "1.11.13";
+
+  src = fetchFromGitHub {
+    owner = "rbsec";
+    repo = "sslscan";
+    rev = "${version}-rbsec";
+    sha256 = "0sa8iw91wi3515lw761j84wagab1x9rxr0mn8m08qj300z2044yk";
+  };
+
+  buildInputs = [ openssl ];
+
+  makeFlags = [ "PREFIX=$(out)" "CC=cc" ];
+
+  meta = with stdenv.lib; {
+    description = "Tests SSL/TLS services and discover supported cipher suites";
+    homepage = https://github.com/rbsec/sslscan;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ fpletz globin ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/ssss/default.nix b/nixpkgs/pkgs/tools/security/ssss/default.nix
new file mode 100644
index 000000000000..157e007c534a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/ssss/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, gmp }:
+
+stdenv.mkDerivation {
+  name = "ssss-0.5";
+
+  src = fetchurl {
+    url = http://point-at-infinity.org/ssss/ssss-0.5.tar.gz;
+    sha256 = "15grn2fp1x8p92kxkwbmsx8rz16g93y9grl3hfqbh1jn21ama5jx";
+  };
+
+  buildInputs = [ gmp ];
+
+  preBuild =
+    ''
+      sed -e s@/usr/@$out/@g -i Makefile
+      cp ssss.manpage.xml ssss.1
+      cp ssss.manpage.xml ssss.1.html
+      mkdir -p $out/bin $out/share/man/man1
+      echo -e 'install:\n\tcp ssss-combine ssss-split '"$out"'/bin' >>Makefile
+    '';
+
+  meta = {
+    description = "Shamir Secret Sharing Scheme";
+    homepage = http://point-at-infinity.org/ssss/;
+    platforms = stdenv.lib.platforms.unix;
+    license = stdenv.lib.licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/steghide/default.nix b/nixpkgs/pkgs/tools/security/steghide/default.nix
new file mode 100644
index 000000000000..7a759c3c3336
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/steghide/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, libjpeg, libmcrypt, zlib, libmhash, gettext, libtool}:
+
+stdenv.mkDerivation rec {
+  buildInputs = [ libjpeg libmcrypt zlib libmhash gettext libtool ];
+  version = "0.5.1";
+  pname = "steghide";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/steghide/steghide/${version}/steghide-${version}.tar.gz" ;
+    sha256 = "78069b7cfe9d1f5348ae43f918f06f91d783c2b3ff25af021e6a312cf541b47b";
+  };
+
+  patches = [
+    ./patches/steghide-0.5.1-gcc34.patch
+    ./patches/steghide-0.5.1-gcc4.patch
+    ./patches/steghide-0.5.1-gcc43.patch
+  ];
+
+  # AM_CXXFLAGS needed for automake
+  preConfigure = ''
+    export AM_CXXFLAGS="$CXXFLAGS -std=c++0x"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://steghide.sourceforge.net/;
+    description = "Steganography program that is able to hide data in various kinds of image- and audio-files";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/steghide/patches/steghide-0.5.1-gcc34.patch b/nixpkgs/pkgs/tools/security/steghide/patches/steghide-0.5.1-gcc34.patch
new file mode 100644
index 000000000000..373316c78406
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/steghide/patches/steghide-0.5.1-gcc34.patch
@@ -0,0 +1,42 @@
+--- steghide-0.5.1.old/src/Makefile.am
++++ steghide-0.5.1.new/src/Makefile.am	2004-07-16 19:01:39.673947633 +0200
+@@ -33,5 +33,5 @@
+ WavPCMSampleValue.cc error.cc main.cc msg.cc SMDConstructionHeuristic.cc
+ LIBS = @LIBINTL@ @LIBS@
+ localedir = $(datadir)/locale
+-LIBTOOL = $(SHELL) libtool
++LIBTOOL = $(SHELL) libtool --tag=CXX
+ MAINTAINERCLEANFILES = Makefile.in
+--- steghide-0.5.1.old/src/AuSampleValues.cc
++++ steghide-0.5.1.new/src/AuSampleValues.cc	2004-07-16 18:59:18.934578427 +0200
+@@ -17,21 +17,21 @@
+  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+  *
+  */
+-
++#include "common.h"
+ #include "AuSampleValues.h"
+ 
+ // AuMuLawSampleValue
+-const BYTE AuMuLawSampleValue::MinValue = 0 ;
+-const BYTE AuMuLawSampleValue::MaxValue = BYTE_MAX ;
++template<> const BYTE  AuMuLawSampleValue::MinValue = 0 ;
++template<> const BYTE AuMuLawSampleValue::MaxValue = BYTE_MAX ;
+ 
+ // AuPCM8SampleValue
+-const SBYTE AuPCM8SampleValue::MinValue = SBYTE_MIN ;
+-const SBYTE AuPCM8SampleValue::MaxValue = SBYTE_MAX ;
++template<> const SBYTE AuPCM8SampleValue::MinValue = SBYTE_MIN ;
++template<> const SBYTE AuPCM8SampleValue::MaxValue = SBYTE_MAX ;
+ 
+ // AuPCM16SampleValue
+-const SWORD16 AuPCM16SampleValue::MinValue = SWORD16_MIN ;
+-const SWORD16 AuPCM16SampleValue::MaxValue = SWORD16_MAX ;
++template<> const SWORD16 AuPCM16SampleValue::MinValue = SWORD16_MIN ;
++template<> const SWORD16 AuPCM16SampleValue::MaxValue = SWORD16_MAX ;
+ 
+ // AuPCM32SampleValue
+-const SWORD32 AuPCM32SampleValue::MinValue = SWORD32_MIN ;
+-const SWORD32 AuPCM32SampleValue::MaxValue = SWORD32_MAX ;
++template<> const SWORD32 AuPCM32SampleValue::MinValue = SWORD32_MIN ;
++template<> const SWORD32 AuPCM32SampleValue::MaxValue = SWORD32_MAX ;
diff --git a/nixpkgs/pkgs/tools/security/steghide/patches/steghide-0.5.1-gcc4.patch b/nixpkgs/pkgs/tools/security/steghide/patches/steghide-0.5.1-gcc4.patch
new file mode 100644
index 000000000000..a8df1735e9d4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/steghide/patches/steghide-0.5.1-gcc4.patch
@@ -0,0 +1,46 @@
+diff -Naur steghide-0.5.1-orig/src/AuData.h steghide-0.5.1/src/AuData.h
+--- steghide-0.5.1-orig/src/AuData.h	2003-09-28 09:30:29.000000000 -0600
++++ steghide-0.5.1/src/AuData.h	2007-05-11 22:04:56.000000000 -0600
+@@ -26,22 +26,30 @@
+ 
+ // AuMuLawAudioData
+ typedef AudioDataImpl<AuMuLaw,BYTE> AuMuLawAudioData ;
++template<>
+ inline BYTE AuMuLawAudioData::readValue (BinaryIO* io) const { return (io->read8()) ; }
++template<>
+ inline void AuMuLawAudioData::writeValue (BinaryIO* io, BYTE v) const { io->write8(v) ; }
+ 
+ // AuPCM8AudioData
+ typedef AudioDataImpl<AuPCM8,SBYTE> AuPCM8AudioData ;
++template<>
+ inline SBYTE AuPCM8AudioData::readValue (BinaryIO* io) const { return ((SBYTE) io->read8()) ; }
++template<>
+ inline void AuPCM8AudioData::writeValue (BinaryIO* io, SBYTE v) const { io->write8((BYTE) v) ; }
+ 
+ // AuPCM16AudioData
+ typedef AudioDataImpl<AuPCM16,SWORD16> AuPCM16AudioData ;
++template<>
+ inline SWORD16 AuPCM16AudioData::readValue (BinaryIO* io) const { return ((SWORD16) io->read16_be()) ; }
++template<>
+ inline void AuPCM16AudioData::writeValue (BinaryIO* io, SWORD16 v) const { io->write16_be((UWORD16) v) ; }
+ 
+ // AuPCM32AudioData
+ typedef AudioDataImpl<AuPCM32,SWORD32> AuPCM32AudioData ;
++template<>
+ inline SWORD32 AuPCM32AudioData::readValue (BinaryIO* io) const { return ((SWORD32) io->read32_be()) ; }
++template<>
+ inline void AuPCM32AudioData::writeValue (BinaryIO* io, SWORD32 v) const { io->write32_be((UWORD32) v) ; }
+ 
+ #endif // ndef SH_AUDATA_H
+diff -Naur steghide-0.5.1-orig/src/MHashPP.cc steghide-0.5.1/src/MHashPP.cc
+--- steghide-0.5.1-orig/src/MHashPP.cc	2003-10-05 04:17:50.000000000 -0600
++++ steghide-0.5.1/src/MHashPP.cc	2007-05-11 22:07:01.000000000 -0600
+@@ -120,7 +120,7 @@
+ 
+ std::string MHashPP::getAlgorithmName (hashid id)
+ {
+-	char *name = mhash_get_hash_name (id) ;
++	char *name = (char *) mhash_get_hash_name (id) ;
+ 	std::string retval ;
+ 	if (name == NULL) {
+ 		retval = std::string ("<algorithm not found>") ;
diff --git a/nixpkgs/pkgs/tools/security/steghide/patches/steghide-0.5.1-gcc43.patch b/nixpkgs/pkgs/tools/security/steghide/patches/steghide-0.5.1-gcc43.patch
new file mode 100644
index 000000000000..ca66b9c544f5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/steghide/patches/steghide-0.5.1-gcc43.patch
@@ -0,0 +1,349 @@
+--- steghide-0.5.1.old/configure.in	2003-10-15 09:48:52.000000000 +0200
++++ steghide-0.5.1.new/configure.in	2008-05-09 19:04:46.000000000 +0200
+@@ -7,27 +7,26 @@
+ dnl checks for programs.
+ AC_PROG_CXX
+ AC_PROG_INSTALL
+ AC_PROG_AWK
+ AC_PROG_LN_S
++AC_CXX_COMPILE_STDCXX_0X
+ 
+ dnl GNU gettext
+ AC_CHECK_FUNCS(strchr)
+ AM_GNU_GETTEXT
+ AM_CONDITIONAL(USE_INTLDIR, test "$nls_cv_use_gnu_gettext" = yes)
+ 
+ dnl check if debugging support is requested
+-AC_MSG_CHECKING([wether to enable debugging])
++AC_MSG_CHECKING([whether to enable debugging])
+ AC_ARG_ENABLE(debug,[  --enable-debug          enable debugging],
+ 	if test "$enableval" = yes ;
+ 	then
+ 		AC_MSG_RESULT([yes])
+ 		AC_DEFINE(DEBUG,1,[enable code used only for debugging])
+-		CXXFLAGS="-O2 -Wall -g"
+ 	else
+ 		AC_MSG_RESULT([no])
+-		CXXFLAGS="-O2 -Wall"
+ 	fi
+ 	,
+ 	AC_MSG_RESULT([no])
+ 	CXXFLAGS="-O2 -Wall"
+ )
+@@ -213,7 +212,18 @@
+ 	echo "libmhash can be downloaded from http://mhash.sourceforge.net/.";
+ 	echo "**********";
+ 	AC_MSG_ERROR([[libmhash not found]])
+ fi
+ 
++dnl Should we add std=c++0x?
++
++if test "$ac_cv_cxx_compile_cxx0x_cxx" = yes;
++then
++	CXXFLAGS="${CXXFLAGS} -std=c++0x -Wall -Wextra"
++else
++	CXXFLAGS="${CXXFLAGS} -Wall -Wextra"
++fi
++
++AC_SUBST(CXXFLAGS)
++
+ dnl create Makefiles
+ AC_OUTPUT([Makefile steghide.spec steghide.doxygen doc/Makefile po/Makefile.in src/Makefile tests/Makefile tests/data/Makefile m4/Makefile intl/Makefile])
+--- steghide-0.5.1.old/m4/ac_cxx_compile_stdcxx_0x.m4	1970-01-01 01:00:00.000000000 +0100
++++ steghide-0.5.1.new/m4/ac_cxx_compile_stdcxx_0x.m4	2008-05-09 19:04:46.000000000 +0200
+@@ -0,0 +1,107 @@
++# ===========================================================================
++#        http://autoconf-archive.cryp.to/ac_cxx_compile_stdcxx_0x.html
++# ===========================================================================
++#
++# SYNOPSIS
++#
++#   AC_CXX_COMPILE_STDCXX_0X
++#
++# DESCRIPTION
++#
++#   Check for baseline language coverage in the compiler for the C++0x
++#   standard.
++#
++# LAST MODIFICATION
++#
++#   2008-04-17
++#
++# COPYLEFT
++#
++#   Copyright (c) 2008 Benjamin Kosnik <bkoz@redhat.com>
++#
++#   Copying and distribution of this file, with or without modification, are
++#   permitted in any medium without royalty provided the copyright notice
++#   and this notice are preserved.
++
++AC_DEFUN([AC_CXX_COMPILE_STDCXX_0X], [
++  AC_CACHE_CHECK(if g++ supports C++0x features without additional flags,
++  ac_cv_cxx_compile_cxx0x_native,
++  [AC_LANG_SAVE
++  AC_LANG_CPLUSPLUS
++  AC_TRY_COMPILE([
++  template <typename T>
++    struct check
++    {
++      static_assert(sizeof(int) <= sizeof(T), "not big enough");
++    };
++
++    typedef check<check<bool>> right_angle_brackets;
++
++    int a;
++    decltype(a) b;
++
++    typedef check<int> check_type;
++    check_type c;
++    check_type&& cr = c;],,
++  ac_cv_cxx_compile_cxx0x_native=yes, ac_cv_cxx_compile_cxx0x_native=no)
++  AC_LANG_RESTORE
++  ])
++
++  AC_CACHE_CHECK(if g++ supports C++0x features with -std=c++0x,
++  ac_cv_cxx_compile_cxx0x_cxx,
++  [AC_LANG_SAVE
++  AC_LANG_CPLUSPLUS
++  ac_save_CXXFLAGS="$CXXFLAGS"
++  CXXFLAGS="$CXXFLAGS -std=c++0x"
++  AC_TRY_COMPILE([
++  template <typename T>
++    struct check
++    {
++      static_assert(sizeof(int) <= sizeof(T), "not big enough");
++    };
++
++    typedef check<check<bool>> right_angle_brackets;
++
++    int a;
++    decltype(a) b;
++
++    typedef check<int> check_type;
++    check_type c;
++    check_type&& cr = c;],,
++  ac_cv_cxx_compile_cxx0x_cxx=yes, ac_cv_cxx_compile_cxx0x_cxx=no)
++  CXXFLAGS="$ac_save_CXXFLAGS"
++  AC_LANG_RESTORE
++  ])
++
++  AC_CACHE_CHECK(if g++ supports C++0x features with -std=gnu++0x,
++  ac_cv_cxx_compile_cxx0x_gxx,
++  [AC_LANG_SAVE
++  AC_LANG_CPLUSPLUS
++  ac_save_CXXFLAGS="$CXXFLAGS"
++  CXXFLAGS="$CXXFLAGS -std=gnu++0x"
++  AC_TRY_COMPILE([
++  template <typename T>
++    struct check
++    {
++      static_assert(sizeof(int) <= sizeof(T), "not big enough");
++    };
++
++    typedef check<check<bool>> right_angle_brackets;
++
++    int a;
++    decltype(a) b;
++
++    typedef check<int> check_type;
++    check_type c;
++    check_type&& cr = c;],,
++  ac_cv_cxx_compile_cxx0x_gxx=yes, ac_cv_cxx_compile_cxx0x_gxx=no)
++  CXXFLAGS="$ac_save_CXXFLAGS"
++  AC_LANG_RESTORE
++  ])
++
++  if test "$ac_cv_cxx_compile_cxx0x_native" = yes ||
++     test "$ac_cv_cxx_compile_cxx0x_cxx" = yes ||
++     test "$ac_cv_cxx_compile_cxx0x_gxx" = yes; then
++    AC_DEFINE(HAVE_STDCXX_0X,,[Define if g++ supports C++0x features. ])
++  fi
++])
+--- steghide-0.5.1.old/src/Arguments.cc	2003-10-11 23:25:04.000000000 +0200
++++ steghide-0.5.1.new/src/Arguments.cc	2008-05-09 19:04:44.000000000 +0200
+@@ -26,10 +26,12 @@
+ #include "Terminal.h"
+ #include "common.h"
+ #include "error.h"
+ #include "msg.h"
+ 
++float Arguments::Default_Goal = 100.0 ;
++
+ // the global Arguments object
+ Arguments Args ;
+ 
+ Arguments::Arguments (int argc, char* argv[])
+ {
+--- steghide-0.5.1.old/src/Arguments.h	2003-10-11 23:23:57.000000000 +0200
++++ steghide-0.5.1.new/src/Arguments.h	2008-05-09 19:04:44.000000000 +0200
+@@ -98,11 +98,11 @@
+ 	static const bool		Default_EmbedEmbFn = true ;
+ 	static const bool		Default_Force = false ;
+ 	static const VERBOSITY	Default_Verbosity = NORMAL ;
+ 	static const unsigned long	Default_Radius = 0 ; // there is no default radius for all file formats
+ 	static const unsigned int	Max_Algorithm = 3 ;
+-	static const float		Default_Goal = 100.0 ;
++	static float			Default_Goal ;
+ 	static const DEBUGCOMMAND	Default_DebugCommand = NONE ;
+ 	static const bool		Default_Check = false ;
+ 	static const unsigned int	Default_DebugLevel = 0 ;
+ 	static const unsigned int	Default_GmlGraphRecDepth = 0 ;
+ 	static const unsigned int	Default_GmlStartVertex = 0 ;
+--- steghide-0.5.1.old/src/EncryptionMode.h	2003-09-28 17:30:30.000000000 +0200
++++ steghide-0.5.1.new/src/EncryptionMode.h	2008-05-09 19:04:46.000000000 +0200
+@@ -69,11 +69,11 @@
+ 	static const unsigned int NumValues = 8 ;
+ 	IRep Value ;
+ 
+ 	typedef struct struct_Translation {
+ 		IRep	irep ;
+-		char*	srep ;
++		const char*	srep ;
+ 	} Translation ;
+ 	static const Translation Translations[] ;
+ } ;
+ 
+ #endif // ndef SH_ENCMODE_H
+--- steghide-0.5.1.old/src/Graph.cc	2003-10-11 23:54:26.000000000 +0200
++++ steghide-0.5.1.new/src/Graph.cc	2008-05-09 19:04:46.000000000 +0200
+@@ -20,10 +20,12 @@
+ 
+ #include <ctime>
+ #include <list>
+ #include <map>
+ #include <vector>
++#include <algorithm>
++#include <climits>
+ 
+ #include "BitString.h"
+ #include "CvrStgFile.h"
+ #include "Edge.h"
+ #include "Graph.h"
+--- steghide-0.5.1.old/src/Matching.cc	2003-10-11 23:54:30.000000000 +0200
++++ steghide-0.5.1.new/src/Matching.cc	2008-05-09 19:04:46.000000000 +0200
+@@ -16,10 +16,11 @@
+  * along with this program; if not, write to the Free Software
+  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+  *
+  */
+ 
++#include <algorithm>
+ #include "Edge.h"
+ #include "Graph.h"
+ #include "Matching.h"
+ #include "ProgressOutput.h"
+ #include "common.h"
+--- steghide-0.5.1.old/src/ProgressOutput.cc	2003-10-11 11:20:51.000000000 +0200
++++ steghide-0.5.1.new/src/ProgressOutput.cc	2008-05-09 19:04:44.000000000 +0200
+@@ -21,10 +21,12 @@
+ #include <cmath>
+ 
+ #include "ProgressOutput.h"
+ #include "common.h"
+ 
++float ProgressOutput::NoAvgWeight = 1.0 ;
++
+ ProgressOutput::ProgressOutput ()
+ 	: Message("__nomessage__")
+ {
+ 	LastUpdate = time(NULL) - 1 ; // -1 to ensure that message is written first time
+ }
+--- steghide-0.5.1.old/src/ProgressOutput.h	2003-09-28 17:30:30.000000000 +0200
++++ steghide-0.5.1.new/src/ProgressOutput.h	2008-05-09 19:04:44.000000000 +0200
+@@ -60,13 +60,13 @@
+ 	/**
+ 	 * update the output appending rate, [average edge weight], "done" and a newline
+ 	 * \param rate the rate of matched vertices
+ 	 * \param avgweight the average edge weight (is not printed if not given)
+ 	 **/
+-	void done (float rate, float avgweight = NoAvgWeight) const ;
++	void done (float rate, float avgweight = 1.0) const ;
+ 
+-	static const float NoAvgWeight = -1.0 ;
++	static float NoAvgWeight ;
+ 
+ 	protected:
+ 	std::string vcompose (const char *msgfmt, va_list ap) const ;
+ 
+ 	private:
+--- steghide-0.5.1.old/src/SMDConstructionHeuristic.cc	2003-09-28 17:30:30.000000000 +0200
++++ steghide-0.5.1.new/src/SMDConstructionHeuristic.cc	2008-05-09 19:04:46.000000000 +0200
+@@ -16,10 +16,12 @@
+  * along with this program; if not, write to the Free Software
+  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+  *
+  */
+ 
++#include <algorithm>
++
+ #include "Edge.h"
+ #include "Graph.h"
+ #include "Matching.h"
+ #include "SMDConstructionHeuristic.h"
+ #include "Vertex.h"
+--- steghide-0.5.1.old/src/WavFile.cc	2003-09-28 17:30:30.000000000 +0200
++++ steghide-0.5.1.new/src/WavFile.cc	2008-05-09 19:04:46.000000000 +0200
+@@ -19,10 +19,11 @@
+  */
+ 
+ #include <cstdio>
+ #include <cstdlib>
+ #include <cstring>
++#include <algorithm>
+ 
+ #include "CvrStgFile.h"
+ #include "DFSAPHeuristic.h"
+ #include "SampleValueAdjacencyList.h"
+ #include "SMDConstructionHeuristic.h"
+--- steghide-0.5.1.old/src/wrapper_hash_map.h	2003-09-28 17:30:30.000000000 +0200
++++ steghide-0.5.1.new/src/wrapper_hash_map.h	2008-05-09 19:04:46.000000000 +0200
+@@ -25,17 +25,21 @@
+ 
+ #ifdef __GNUC__
+ # if __GNUC__ < 3
+ #  include <hash_map.h>
+     namespace sgi { using ::hash ; using ::hash_map ; } ;
+-# else
++# elif __GNUC__ == 3 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 3 )
+ #  include <ext/hash_map>
+-#  if __GNUC_MINOR__ == 0
++#  if __GNUC__ == 3 &&  __GNUC_MINOR__ == 0
+     namespace sgi = std ;			// GCC 3.0
+ #  else
+     namespace sgi = __gnu_cxx ;	// GCC 3.1 and later
+ #  endif
++# else
++#  include <unordered_map>
++#  define hash_map unordered_map
++   namespace sgi = std ;
+ # endif
+ #else
+   namespace sgi = std ;
+ #endif
+ 
+--- steghide-0.5.1.old/src/wrapper_hash_set.h	2003-09-28 17:30:30.000000000 +0200
++++ steghide-0.5.1.new/src/wrapper_hash_set.h	2008-05-09 19:04:46.000000000 +0200
+@@ -26,17 +26,21 @@
+ 
+ #ifdef __GNUC__
+ # if __GNUC__ < 3
+ #  include <hash_set.h>
+     namespace sgi { using ::hash ; using ::hash_set ; } ;
+-# else
++# elif __GNUC__ == 3 || ( __GNUC__ == 4 && __GNUC_MINOR__ < 3 )
+ #  include <ext/hash_set>
+-#  if __GNUC_MINOR__ == 0
++#  if __GNUC__ == 3 && __GNUC_MINOR__ == 0
+     namespace sgi = std ;			// GCC 3.0
+ #  else
+     namespace sgi = ::__gnu_cxx ;	// GCC 3.1 and later
+ #  endif
++# else
++#  include <unordered_set>
++#  define hash_set unordered_set
++   namespace sgi = std ;
+ # endif
+ #else
+   namespace sgi = std ;
+ #endif
+ 
diff --git a/nixpkgs/pkgs/tools/security/step-ca/default.nix b/nixpkgs/pkgs/tools/security/step-ca/default.nix
new file mode 100644
index 000000000000..e5574be8ab94
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/step-ca/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "step-ca";
+  version = "0.13.3";
+
+  goPackagePath = "github.com/smallstep/certificates";
+
+  src = fetchFromGitHub {
+    owner = "smallstep";
+    repo = "certificates";
+    rev = "v${version}";
+    sha256 = "1i42j7v5a5qqqb9ng8irblfyzykhyws0394q3zac290ymjijxbnq";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with lib; {
+    description = "A private certificate authority (X.509 & SSH) & ACME server for secure automated certificate management, so you can use TLS everywhere & SSO for SSH";
+    homepage = "https://smallstep.com/certificates/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ cmcdragonkai ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/step-ca/deps.nix b/nixpkgs/pkgs/tools/security/step-ca/deps.nix
new file mode 100644
index 000000000000..07607b6f65d2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/step-ca/deps.nix
@@ -0,0 +1,291 @@
+# file generated from Gopkg.lock using dep2nix (https://github.com/nixcloud/dep2nix)
+[
+  {
+    goPackagePath  = "github.com/AndreasBriese/bbloom";
+    fetch = {
+      type = "git";
+      url = "https://github.com/AndreasBriese/bbloom";
+      rev =  "e2d15f34fcf99d5dbb871c820ec73f710fca9815";
+      sha256 = "05kkrsmpragy69bj6s80pxlm3pbwxrkkx7wgk0xigs6y2n6ylpds";
+    };
+  }
+  {
+    goPackagePath  = "github.com/chzyer/readline";
+    fetch = {
+      type = "git";
+      url = "https://github.com/chzyer/readline";
+      rev =  "2972be24d48e78746da79ba8e24e8b488c9880de";
+      sha256 = "104q8dazj8yf6b089jjr82fy9h1g80zyyzvp3g8b44a7d8ngjj6r";
+    };
+  }
+  {
+    goPackagePath  = "github.com/dgraph-io/badger";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dgraph-io/badger";
+      rev =  "391b6d3b93e6014fe8c2971fcc0c1266e47dbbd9";
+      sha256 = "13zyd6irxagwfv4azgmpk2qg8f80plhxrcjl8x89jzsjkl0a0pkx";
+    };
+  }
+  {
+    goPackagePath  = "github.com/dgryski/go-farm";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dgryski/go-farm";
+      rev =  "6a90982ecee230ff6cba02d5bd386acc030be9d3";
+      sha256 = "1x3l4jgps0v1bjvd446kj4dp0ckswjckxgrng9afm275ixnf83ix";
+    };
+  }
+  {
+    goPackagePath  = "github.com/go-chi/chi";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-chi/chi";
+      rev =  "0ebf7795c516423a110473652e9ba3a59a504863";
+      sha256 = "18hwj6vni19ykp3bsmg9ggnl6y2hawym0vbsigdgx8craqbp7jb1";
+    };
+  }
+  {
+    goPackagePath  = "github.com/go-sql-driver/mysql";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-sql-driver/mysql";
+      rev =  "72cd26f257d44c1114970e19afddcd812016007e";
+      sha256 = "1fvsvwc1v2i0gqn01mynvi1shp5xm0xaym6xng09fcbqb56lbjx1";
+    };
+  }
+  {
+    goPackagePath  = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev =  "aa810b61a9c79d51363740d207bb46cf8e620ed5";
+      sha256 = "0kf4b59rcbb1cchfny2dm9jyznp8ri2hsb14n8iak1q8986xa0ab";
+    };
+  }
+  {
+    goPackagePath  = "github.com/juju/ansiterm";
+    fetch = {
+      type = "git";
+      url = "https://github.com/juju/ansiterm";
+      rev =  "720a0952cc2ac777afc295d9861263e2a4cf96a1";
+      sha256 = "0n6j0y7xhashp8gdkdl0r7vlbkdrkymrzxn9hxrx522k2isggs7h";
+    };
+  }
+  {
+    goPackagePath  = "github.com/konsorten/go-windows-terminal-sequences";
+    fetch = {
+      type = "git";
+      url = "https://github.com/konsorten/go-windows-terminal-sequences";
+      rev =  "5c8c8bd35d3832f5d134ae1e1e375b69a4d25242";
+      sha256 = "1lchgf27n276vma6iyxa0v1xds68n2g8lih5lavqnx5x6q5pw2ip";
+    };
+  }
+  {
+    goPackagePath  = "github.com/lunixbochs/vtclean";
+    fetch = {
+      type = "git";
+      url = "https://github.com/lunixbochs/vtclean";
+      rev =  "2d01aacdc34a083dca635ba869909f5fc0cd4f41";
+      sha256 = "1ss88dyx5hr4imvpg5lixvp0cf7c2qm4x9m8mdgshjpm92g5rqmf";
+    };
+  }
+  {
+    goPackagePath  = "github.com/manifoldco/promptui";
+    fetch = {
+      type = "git";
+      url = "https://github.com/manifoldco/promptui";
+      rev =  "157c96fb638a14d268b305cf2012582431fcc410";
+      sha256 = "0zha48i5f529q4j1qycybdzza4l9706hijiqws36ikd5jzg8i7wz";
+    };
+  }
+  {
+    goPackagePath  = "github.com/mattn/go-colorable";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-colorable";
+      rev =  "167de6bfdfba052fa6b2d3664c8f5272e23c9072";
+      sha256 = "1nwjmsppsjicr7anq8na6md7b1z84l9ppnlr045hhxjvbkqwalvx";
+    };
+  }
+  {
+    goPackagePath  = "github.com/mattn/go-isatty";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-isatty";
+      rev =  "6ca4dbf54d38eea1a992b3c722a76a5d1c4cb25c";
+      sha256 = "0zs92j2cqaw9j8qx1sdxpv3ap0rgbs0vrvi72m40mg8aa36gd39w";
+    };
+  }
+  {
+    goPackagePath  = "github.com/mmcloughlin/avo";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mmcloughlin/avo";
+      rev =  "2e7d06bc7ada2979f17ccf8ebf486dba23b84fc7";
+      sha256 = "0fna1hhg193zy428lkj24a8853g3qviqs2c9xi96mji6ldprna5d";
+    };
+  }
+  {
+    goPackagePath  = "github.com/newrelic/go-agent";
+    fetch = {
+      type = "git";
+      url = "https://github.com/newrelic/go-agent";
+      rev =  "f5bce3387232559bcbe6a5f8227c4bf508dac1ba";
+      sha256 = "1zbp1cqhxp0sz3faymam6h1f91r1gl8dnnjx7qg8r06bd5fbzllb";
+    };
+  }
+  {
+    goPackagePath  = "github.com/pkg/errors";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pkg/errors";
+      rev =  "ba968bfe8b2f7e042a574c888954fccecfa385b4";
+      sha256 = "0g5qcb4d4fd96midz0zdk8b9kz8xkzwfa8kr1cliqbg8sxsy5vd1";
+    };
+  }
+  {
+    goPackagePath  = "github.com/rs/xid";
+    fetch = {
+      type = "git";
+      url = "https://github.com/rs/xid";
+      rev =  "15d26544def341f036c5f8dca987a4cbe575032c";
+      sha256 = "1vgw1dikqw273awcci6pzifs7shkl5ah4l88j1zjbnpgbiwzlx9j";
+    };
+  }
+  {
+    goPackagePath  = "github.com/samfoo/ansi";
+    fetch = {
+      type = "git";
+      url = "https://github.com/samfoo/ansi";
+      rev =  "b6bd2ded7189ce35bc02233b554eb56a5146af73";
+      sha256 = "0sw2d7c6l2ry34x0n4j37ydr8s7hxnax76yh6n35gb2g6f1h46sz";
+    };
+  }
+  {
+    goPackagePath  = "github.com/shurcooL/sanitized_anchor_name";
+    fetch = {
+      type = "git";
+      url = "https://github.com/shurcooL/sanitized_anchor_name";
+      rev =  "86672fcb3f950f35f2e675df2240550f2a50762f";
+      sha256 = "142m507s9971cl8qdmbcw7sqxnkgi3xqd8wzvfq15p0w7w8i4a3h";
+    };
+  }
+  {
+    goPackagePath  = "github.com/sirupsen/logrus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/sirupsen/logrus";
+      rev =  "ad15b42461921f1fb3529b058c6786c6a45d5162";
+      sha256 = "02xdfcp4f6dqvpavwf1vvr794qgz2fx8929paam7wnvcxy7ib606";
+    };
+  }
+  {
+    goPackagePath  = "github.com/smallstep/assert";
+    fetch = {
+      type = "git";
+      url = "https://github.com/smallstep/assert";
+      rev =  "de77670473b5492f5d0bce155b5c01534c2d13f7";
+      sha256 = "15z2b4qyylnwgq2pzlaxsdabqxh8dbna4ddprk9rzmsvnfkpds16";
+    };
+  }
+  {
+    goPackagePath  = "github.com/smallstep/cli";
+    fetch = {
+      type = "git";
+      url = "https://github.com/smallstep/cli";
+      rev =  "eeecaac062cb548ee2ab7c7563bc3c2f2160f019";
+      sha256 = "1khhd1vgwqb08vki1nh0k4i2yk6jjdqmnq4f8anqn125zsj7hvdk";
+    };
+  }
+  {
+    goPackagePath  = "github.com/smallstep/nosql";
+    fetch = {
+      type = "git";
+      url = "https://github.com/smallstep/nosql";
+      rev =  "f80b3f432de0662f07ebd58fe52b0a119fe5dcd9";
+      sha256 = "155blxdgaprl1py5g8p52gipp0ckz3k6v41hgsp83nay01yynafb";
+    };
+  }
+  {
+    goPackagePath  = "github.com/urfave/cli";
+    fetch = {
+      type = "git";
+      url = "https://github.com/urfave/cli";
+      rev =  "b67dcf995b6a7b7f14fad5fcb7cc5441b05e814b";
+      sha256 = "0n5vq4nydlhb7w12jiwphvxqdy4jwpxc3zwlxyhf05lq1nxfb56h";
+    };
+  }
+  {
+    goPackagePath  = "go.etcd.io/bbolt";
+    fetch = {
+      type = "git";
+      url = "https://github.com/etcd-io/bbolt";
+      rev =  "63597a96ec0ad9e6d43c3fc81e809909e0237461";
+      sha256 = "13d5l6p6c5wvkr6vn9hkhz9c593qifn7fgx0hg4d6jcvg1y0bnm2";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev =  "4d3f4d9ffa16a13f451c3b2999e9c49e9750bf06";
+      sha256 = "0sbsgjm6wqa162ssrf1gnpv62ak5wjn1bn8v7sxwwfg8a93z1028";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev =  "c44066c5c816ec500d459a2a324a753f78531ae0";
+      sha256 = "0mgww74bl15d0jvsh4f3qr1ckjzb8icb8hn0mgs5ppa0b2fgpc4f";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev =  "9b800f95dbbc54abff0acf7ee32d88ba4e328c89";
+      sha256 = "07v3l7q7y59cwvw0mc85i39v7qjcc1jh4svwi789rmrqqm5nq7q6";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/text";
+      rev =  "f21a4dfb5e38f5895301dc265a8def02365cc3d0";
+      sha256 = "0r6x6zjzhr8ksqlpiwm5gdd7s209kwk5p4lw54xjvz10cs3qlq19";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/tools";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/tools";
+      rev =  "3a10b9bf0a52df7e992a8c3eb712a86d3c896c75";
+      sha256 = "19f3dijcc54jnd7458jab2dgpd0gzccmv2qympd9wi8cc8jpnhws";
+    };
+  }
+  {
+    goPackagePath  = "google.golang.org/appengine";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/appengine";
+      rev =  "54a98f90d1c46b7731eb8fb305d2a321c30ef610";
+      sha256 = "0l7mkdnwhidv8m686x432vmx8z5nqcrr9f46ddgvrxbh4wvyfcll";
+    };
+  }
+  {
+    goPackagePath  = "gopkg.in/square/go-jose.v2";
+    fetch = {
+      type = "git";
+      url = "https://github.com/square/go-jose";
+      rev =  "730df5f748271903322feb182be83b43ebbbe27d";
+      sha256 = "11r93g9xrcjqj7qvq8sbd5hy5rnbpmim0vdsp6rbav8gl7wimaa3";
+    };
+  }
+]
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/security/step-cli/default.nix b/nixpkgs/pkgs/tools/security/step-cli/default.nix
new file mode 100644
index 000000000000..0ecd3bc82532
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/step-cli/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "step-cli";
+  version = "0.13.3";
+
+  goPackagePath = "github.com/smallstep/cli";
+
+  src = fetchFromGitHub {
+    owner = "smallstep";
+    repo = "cli";
+    rev = "v${version}";
+    sha256 = "0b5hk9a8yq1nyh8m1gmf28yiha95xwsc4dk321g84hvai7g47pbr";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with lib; {
+    description = "A zero trust swiss army knife for working with X509, OAuth, JWT, OATH OTP, etc";
+    homepage = https://smallstep.com/cli/;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ xfix ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/step-cli/deps.nix b/nixpkgs/pkgs/tools/security/step-cli/deps.nix
new file mode 100644
index 000000000000..bae1ba070a69
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/step-cli/deps.nix
@@ -0,0 +1,453 @@
+# file generated from Gopkg.lock using dep2nix (https://github.com/nixcloud/dep2nix)
+[
+  {
+    goPackagePath  = "github.com/AndreasBriese/bbloom";
+    fetch = {
+      type = "git";
+      url = "https://github.com/AndreasBriese/bbloom";
+      rev =  "e2d15f34fcf99d5dbb871c820ec73f710fca9815";
+      sha256 = "05kkrsmpragy69bj6s80pxlm3pbwxrkkx7wgk0xigs6y2n6ylpds";
+    };
+  }
+  {
+    goPackagePath  = "github.com/ThomasRooney/gexpect";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ThomasRooney/gexpect";
+      rev =  "5482f03509440585d13d8f648989e05903001842";
+      sha256 = "04zan78ndabxlwsw2hdcqbz32435pw2s04ljza07jlxnxzjp4kws";
+    };
+  }
+  {
+    goPackagePath  = "github.com/asaskevich/govalidator";
+    fetch = {
+      type = "git";
+      url = "https://github.com/asaskevich/govalidator";
+      rev =  "ccb8e960c48f04d6935e72476ae4a51028f9e22f";
+      sha256 = "1sih4yb6fqmdp5g6594yyida0qm7dvvqcfvf8pgikydkxyqb8g0k";
+    };
+  }
+  {
+    goPackagePath  = "github.com/boombuler/barcode";
+    fetch = {
+      type = "git";
+      url = "https://github.com/boombuler/barcode";
+      rev =  "3cfea5ab600ae37946be2b763b8ec2c1cf2d272d";
+      sha256 = "1fzb8wz1ny2sc78g9rm0bcm80pgwvkm2k6lmim2sb4jgm1j3sajd";
+    };
+  }
+  {
+    goPackagePath  = "github.com/chzyer/readline";
+    fetch = {
+      type = "git";
+      url = "https://github.com/chzyer/readline";
+      rev =  "2972be24d48e78746da79ba8e24e8b488c9880de";
+      sha256 = "104q8dazj8yf6b089jjr82fy9h1g80zyyzvp3g8b44a7d8ngjj6r";
+    };
+  }
+  {
+    goPackagePath  = "github.com/corpix/uarand";
+    fetch = {
+      type = "git";
+      url = "https://github.com/corpix/uarand";
+      rev =  "2b8494104d86337cdd41d0a49cbed8e4583c0ab4";
+      sha256 = "06ml5m8l9wbr96gvyg6z1syawn797f8kmq74nhgry3vqpngyb6yn";
+    };
+  }
+  {
+    goPackagePath  = "github.com/davecgh/go-spew";
+    fetch = {
+      type = "git";
+      url = "https://github.com/davecgh/go-spew";
+      rev =  "8991bc29aa16c548c550c7ff78260e27b9ab7c73";
+      sha256 = "0hka6hmyvp701adzag2g26cxdj47g21x6jz4sc6jjz1mn59d474y";
+    };
+  }
+  {
+    goPackagePath  = "github.com/dgraph-io/badger";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dgraph-io/badger";
+      rev =  "391b6d3b93e6014fe8c2971fcc0c1266e47dbbd9";
+      sha256 = "13zyd6irxagwfv4azgmpk2qg8f80plhxrcjl8x89jzsjkl0a0pkx";
+    };
+  }
+  {
+    goPackagePath  = "github.com/dgryski/go-farm";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dgryski/go-farm";
+      rev =  "6a90982ecee230ff6cba02d5bd386acc030be9d3";
+      sha256 = "1x3l4jgps0v1bjvd446kj4dp0ckswjckxgrng9afm275ixnf83ix";
+    };
+  }
+  {
+    goPackagePath  = "github.com/go-chi/chi";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-chi/chi";
+      rev =  "0ebf7795c516423a110473652e9ba3a59a504863";
+      sha256 = "18hwj6vni19ykp3bsmg9ggnl6y2hawym0vbsigdgx8craqbp7jb1";
+    };
+  }
+  {
+    goPackagePath  = "github.com/go-sql-driver/mysql";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-sql-driver/mysql";
+      rev =  "72cd26f257d44c1114970e19afddcd812016007e";
+      sha256 = "1fvsvwc1v2i0gqn01mynvi1shp5xm0xaym6xng09fcbqb56lbjx1";
+    };
+  }
+  {
+    goPackagePath  = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev =  "b5d812f8a3706043e23a9cd5babf2e5423744d30";
+      sha256 = "15am4s4646qy6iv0g3kkqq52rzykqjhm4bf08dk0fy2r58knpsyl";
+    };
+  }
+  {
+    goPackagePath  = "github.com/google/certificate-transparency-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/certificate-transparency-go";
+      rev =  "3629d6846518309d22c16fee15d1007262a459d2";
+      sha256 = "16vsq7dd2kbbk3vwlrhm3jrlg5kq16wf4iz6d1gnyc32s5fcy9d7";
+    };
+  }
+  {
+    goPackagePath  = "github.com/icrowley/fake";
+    fetch = {
+      type = "git";
+      url = "https://github.com/icrowley/fake";
+      rev =  "4178557ae428460c3780a381c824a1f3aceb6325";
+      sha256 = "1mv4bxfphaqbvacy49v4lf4gf2nmadzpmjq0jbdx93wi5bnkc977";
+    };
+  }
+  {
+    goPackagePath  = "github.com/juju/ansiterm";
+    fetch = {
+      type = "git";
+      url = "https://github.com/juju/ansiterm";
+      rev =  "720a0952cc2ac777afc295d9861263e2a4cf96a1";
+      sha256 = "0n6j0y7xhashp8gdkdl0r7vlbkdrkymrzxn9hxrx522k2isggs7h";
+    };
+  }
+  {
+    goPackagePath  = "github.com/kballard/go-shellquote";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kballard/go-shellquote";
+      rev =  "95032a82bc518f77982ea72343cc1ade730072f0";
+      sha256 = "1rspvmnsikdq95jmx3dykxd4k1rmgl98ryjrysvl0cf18hl1vq80";
+    };
+  }
+  {
+    goPackagePath  = "github.com/konsorten/go-windows-terminal-sequences";
+    fetch = {
+      type = "git";
+      url = "https://github.com/konsorten/go-windows-terminal-sequences";
+      rev =  "5c8c8bd35d3832f5d134ae1e1e375b69a4d25242";
+      sha256 = "1lchgf27n276vma6iyxa0v1xds68n2g8lih5lavqnx5x6q5pw2ip";
+    };
+  }
+  {
+    goPackagePath  = "github.com/kr/pty";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kr/pty";
+      rev =  "db8e3cd836b82e82e0a9c8edc6896967dd31374f";
+      sha256 = "0knzlvndfgjm2k23vhp2xj1cv3fm31vbg5b20gdl1vnxk7rh549h";
+    };
+  }
+  {
+    goPackagePath  = "github.com/lunixbochs/vtclean";
+    fetch = {
+      type = "git";
+      url = "https://github.com/lunixbochs/vtclean";
+      rev =  "2d01aacdc34a083dca635ba869909f5fc0cd4f41";
+      sha256 = "1ss88dyx5hr4imvpg5lixvp0cf7c2qm4x9m8mdgshjpm92g5rqmf";
+    };
+  }
+  {
+    goPackagePath  = "github.com/manifoldco/promptui";
+    fetch = {
+      type = "git";
+      url = "https://github.com/manifoldco/promptui";
+      rev =  "157c96fb638a14d268b305cf2012582431fcc410";
+      sha256 = "0zha48i5f529q4j1qycybdzza4l9706hijiqws36ikd5jzg8i7wz";
+    };
+  }
+  {
+    goPackagePath  = "github.com/mattn/go-colorable";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-colorable";
+      rev =  "167de6bfdfba052fa6b2d3664c8f5272e23c9072";
+      sha256 = "1nwjmsppsjicr7anq8na6md7b1z84l9ppnlr045hhxjvbkqwalvx";
+    };
+  }
+  {
+    goPackagePath  = "github.com/mattn/go-isatty";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-isatty";
+      rev =  "6ca4dbf54d38eea1a992b3c722a76a5d1c4cb25c";
+      sha256 = "0zs92j2cqaw9j8qx1sdxpv3ap0rgbs0vrvi72m40mg8aa36gd39w";
+    };
+  }
+  {
+    goPackagePath  = "github.com/mmcloughlin/avo";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mmcloughlin/avo";
+      rev =  "2e7d06bc7ada2979f17ccf8ebf486dba23b84fc7";
+      sha256 = "0fna1hhg193zy428lkj24a8853g3qviqs2c9xi96mji6ldprna5d";
+    };
+  }
+  {
+    goPackagePath  = "github.com/newrelic/go-agent";
+    fetch = {
+      type = "git";
+      url = "https://github.com/newrelic/go-agent";
+      rev =  "f5bce3387232559bcbe6a5f8227c4bf508dac1ba";
+      sha256 = "1zbp1cqhxp0sz3faymam6h1f91r1gl8dnnjx7qg8r06bd5fbzllb";
+    };
+  }
+  {
+    goPackagePath  = "github.com/pkg/errors";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pkg/errors";
+      rev =  "ba968bfe8b2f7e042a574c888954fccecfa385b4";
+      sha256 = "0g5qcb4d4fd96midz0zdk8b9kz8xkzwfa8kr1cliqbg8sxsy5vd1";
+    };
+  }
+  {
+    goPackagePath  = "github.com/pmezard/go-difflib";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pmezard/go-difflib";
+      rev =  "792786c7400a136282c1664665ae0a8db921c6c2";
+      sha256 = "0c1cn55m4rypmscgf0rrb88pn58j3ysvc2d0432dp3c6fqg6cnzw";
+    };
+  }
+  {
+    goPackagePath  = "github.com/pquerna/otp";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pquerna/otp";
+      rev =  "b7b89250c468c06871d3837bee02e2d5c155ae19";
+      sha256 = "0gsl9rh8awira21z6cj26c6swasskx03z66q72yjc1mpbvyg6han";
+    };
+  }
+  {
+    goPackagePath  = "github.com/rs/xid";
+    fetch = {
+      type = "git";
+      url = "https://github.com/rs/xid";
+      rev =  "15d26544def341f036c5f8dca987a4cbe575032c";
+      sha256 = "1vgw1dikqw273awcci6pzifs7shkl5ah4l88j1zjbnpgbiwzlx9j";
+    };
+  }
+  {
+    goPackagePath  = "github.com/samfoo/ansi";
+    fetch = {
+      type = "git";
+      url = "https://github.com/samfoo/ansi";
+      rev =  "b6bd2ded7189ce35bc02233b554eb56a5146af73";
+      sha256 = "0sw2d7c6l2ry34x0n4j37ydr8s7hxnax76yh6n35gb2g6f1h46sz";
+    };
+  }
+  {
+    goPackagePath  = "github.com/shurcooL/sanitized_anchor_name";
+    fetch = {
+      type = "git";
+      url = "https://github.com/shurcooL/sanitized_anchor_name";
+      rev =  "86672fcb3f950f35f2e675df2240550f2a50762f";
+      sha256 = "142m507s9971cl8qdmbcw7sqxnkgi3xqd8wzvfq15p0w7w8i4a3h";
+    };
+  }
+  {
+    goPackagePath  = "github.com/sirupsen/logrus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/sirupsen/logrus";
+      rev =  "ad15b42461921f1fb3529b058c6786c6a45d5162";
+      sha256 = "02xdfcp4f6dqvpavwf1vvr794qgz2fx8929paam7wnvcxy7ib606";
+    };
+  }
+  {
+    goPackagePath  = "github.com/smallstep/assert";
+    fetch = {
+      type = "git";
+      url = "https://github.com/smallstep/assert";
+      rev =  "de77670473b5492f5d0bce155b5c01534c2d13f7";
+      sha256 = "15z2b4qyylnwgq2pzlaxsdabqxh8dbna4ddprk9rzmsvnfkpds16";
+    };
+  }
+  {
+    goPackagePath  = "github.com/smallstep/certificates";
+    fetch = {
+      type = "git";
+      url = "https://github.com/smallstep/certificates";
+      rev =  "effb490d276f33b8cdab661df8b57a8ded67e082";
+      sha256 = "1i76bbm4rbpv4cw2ln36v0x74jjkss6j8pdh49hfvb75j2n32790";
+    };
+  }
+  {
+    goPackagePath  = "github.com/smallstep/certinfo";
+    fetch = {
+      type = "git";
+      url = "https://github.com/smallstep/certinfo";
+      rev =  "78e21b44234ef6ddeb58f5e8aad2ed09975b694a";
+      sha256 = "0zrxql9173vzn7zirv4299j0vw2mzwknivrg8rzhdbkhvbfiql9q";
+    };
+  }
+  {
+    goPackagePath  = "github.com/smallstep/nosql";
+    fetch = {
+      type = "git";
+      url = "https://github.com/smallstep/nosql";
+      rev =  "a0934e12468769d8cbede3ed316c47a4b88de4ca";
+      sha256 = "08bg0sgrhkzflyl0ybi8v2vmk8bfk5pmcyfrizpxssyql7k27fam";
+    };
+  }
+  {
+    goPackagePath  = "github.com/smallstep/truststore";
+    fetch = {
+      type = "git";
+      url = "https://github.com/smallstep/truststore";
+      rev =  "e16045d94a61ca04b60d5d246da3117e7eeb1ecf";
+      sha256 = "15cv3dkn2npf6rwhkb575sdq089rf70rha8wrym4ygc8rjbgwbab";
+    };
+  }
+  {
+    goPackagePath  = "github.com/smallstep/zcrypto";
+    fetch = {
+      type = "git";
+      url = "https://github.com/smallstep/zcrypto";
+      rev =  "6bab21fcaafc3d150cf793b6d5f25fe32f49c80e";
+      sha256 = "129az7k556lmnhh14ayrwzrp1y205zdgwk3rj1xcmgisx5irliqp";
+    };
+  }
+  {
+    goPackagePath  = "github.com/smallstep/zlint";
+    fetch = {
+      type = "git";
+      url = "https://github.com/smallstep/zlint";
+      rev =  "d84eaafe274f9dc1f811ebfbb073e18c466e2a44";
+      sha256 = "1xm7b1wvbify20vk9f3kmgmi5mnj5x2z3czc0r4zylcqcwwjkfd6";
+    };
+  }
+  {
+    goPackagePath  = "github.com/stretchr/testify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/stretchr/testify";
+      rev =  "f35b8ab0b5a2cef36673838d662e249dd9c94686";
+      sha256 = "0dlszlshlxbmmfxj5hlwgv3r22x0y1af45gn1vd198nvvs3pnvfs";
+    };
+  }
+  {
+    goPackagePath  = "github.com/urfave/cli";
+    fetch = {
+      type = "git";
+      url = "https://github.com/urfave/cli";
+      rev =  "b67dcf995b6a7b7f14fad5fcb7cc5441b05e814b";
+      sha256 = "0n5vq4nydlhb7w12jiwphvxqdy4jwpxc3zwlxyhf05lq1nxfb56h";
+    };
+  }
+  {
+    goPackagePath  = "github.com/weppos/publicsuffix-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/weppos/publicsuffix-go";
+      rev =  "386050f8211b04c965721c3591e7d96650a1ea86";
+      sha256 = "17nvc0m0azm418w4mcyk7r1qcik0099vjpn455ia0lxhbqbl701b";
+    };
+  }
+  {
+    goPackagePath  = "go.etcd.io/bbolt";
+    fetch = {
+      type = "git";
+      url = "https://github.com/etcd-io/bbolt";
+      rev =  "63597a96ec0ad9e6d43c3fc81e809909e0237461";
+      sha256 = "13d5l6p6c5wvkr6vn9hkhz9c593qifn7fgx0hg4d6jcvg1y0bnm2";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev =  "4d3f4d9ffa16a13f451c3b2999e9c49e9750bf06";
+      sha256 = "0sbsgjm6wqa162ssrf1gnpv62ak5wjn1bn8v7sxwwfg8a93z1028";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev =  "c44066c5c816ec500d459a2a324a753f78531ae0";
+      sha256 = "0mgww74bl15d0jvsh4f3qr1ckjzb8icb8hn0mgs5ppa0b2fgpc4f";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev =  "9b800f95dbbc54abff0acf7ee32d88ba4e328c89";
+      sha256 = "07v3l7q7y59cwvw0mc85i39v7qjcc1jh4svwi789rmrqqm5nq7q6";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/text";
+      rev =  "f21a4dfb5e38f5895301dc265a8def02365cc3d0";
+      sha256 = "0r6x6zjzhr8ksqlpiwm5gdd7s209kwk5p4lw54xjvz10cs3qlq19";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/tools";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/tools";
+      rev =  "3a10b9bf0a52df7e992a8c3eb712a86d3c896c75";
+      sha256 = "19f3dijcc54jnd7458jab2dgpd0gzccmv2qympd9wi8cc8jpnhws";
+    };
+  }
+  {
+    goPackagePath  = "google.golang.org/appengine";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/appengine";
+      rev =  "54a98f90d1c46b7731eb8fb305d2a321c30ef610";
+      sha256 = "0l7mkdnwhidv8m686x432vmx8z5nqcrr9f46ddgvrxbh4wvyfcll";
+    };
+  }
+  {
+    goPackagePath  = "gopkg.in/square/go-jose.v2";
+    fetch = {
+      type = "git";
+      url = "https://github.com/square/go-jose";
+      rev =  "730df5f748271903322feb182be83b43ebbbe27d";
+      sha256 = "11r93g9xrcjqj7qvq8sbd5hy5rnbpmim0vdsp6rbav8gl7wimaa3";
+    };
+  }
+  {
+    goPackagePath  = "howett.net/plist";
+    fetch = {
+      type = "git";
+      url = "https://gitlab.howett.net/go/plist.git";
+      rev =  "591f970eefbbeb04d7b37f334a0c4c3256e32876";
+      sha256 = "1gr74rf6m8bgayf6mxcfaxb3cc49ldlhydzqfafx7di5nds5hxk9";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/security/stoken/default.nix b/nixpkgs/pkgs/tools/security/stoken/default.nix
new file mode 100644
index 000000000000..d6375bee6495
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/stoken/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromGitHub, autoconf, automake, libtool, pkgconfig
+, libxml2, nettle
+, withGTK3 ? true, gtk3 }:
+
+stdenv.mkDerivation rec {
+  pname = "stoken";
+  version = "0.92";
+  src = fetchFromGitHub {
+    owner = "cernekee";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0q7cv8vy5b2cslm57maqb6jsm7s4rwacjyv6gplwp26yhm38hw7y";
+  };
+
+  preConfigure = ''
+    aclocal
+    libtoolize --automake --copy
+    autoheader
+    automake --add-missing --copy
+    autoconf
+  '';
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [
+    autoconf automake libtool
+    libxml2 nettle
+  ] ++ stdenv.lib.optional withGTK3 gtk3;
+
+  meta = with stdenv.lib; {
+    description = "Software Token for Linux/UNIX";
+    homepage = https://github.com/cernekee/stoken;
+    license = licenses.lgpl21Plus;
+    maintainers = [ ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/stricat/default.nix b/nixpkgs/pkgs/tools/security/stricat/default.nix
new file mode 100644
index 000000000000..28c462cbb0a2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/stricat/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "stricat";
+  version = "20140609100300";
+
+  src = fetchurl {
+    url    = "http://www.stribob.com/dist/${pname}-${version}.tgz";
+    sha256 = "1axg8r4g5n5kdqj5013pgck80nni3z172xkg506vz4zx1zcmrm4r";
+  };
+
+  buildFlags = [ "CC=cc" ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv stricat $out/bin
+  '';
+
+  meta = {
+    description = "Multi-use cryptographic tool based on the STRIBOB algorithm";
+    homepage    = "https://www.stribob.com/stricat/";
+    license     = stdenv.lib.licenses.bsd3;
+    platforms   = stdenv.lib.platforms.unix;
+    maintainers = [ stdenv.lib.maintainers.thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/su-exec/default.nix b/nixpkgs/pkgs/tools/security/su-exec/default.nix
new file mode 100644
index 000000000000..8ff33ee1ec91
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/su-exec/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "su-exec";
+  version = "0.2";
+
+  src = fetchFromGitHub {
+    owner  = "ncopa";
+    repo   = "su-exec";
+    rev    = "v${version}";
+    sha256 = "12vqlnpv48cjfh25sn98k1myc7h2wiv5qw2y2awgp6sipzv88abv";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -a su-exec $out/bin/su-exec
+  '';
+
+  meta = with stdenv.lib; {
+    description = "switch user and group id and exec";
+    homepage    = "https://github.com/ncopa/su-exec";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ zimbatm ];
+    platforms   = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/sudo/default.nix b/nixpkgs/pkgs/tools/security/sudo/default.nix
new file mode 100644
index 000000000000..71a71be9147e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sudo/default.nix
@@ -0,0 +1,83 @@
+{ stdenv, fetchurl, coreutils, pam, groff, sssd
+, sendmailPath ? "/run/wrappers/bin/sendmail"
+, withInsults ? false
+, withSssd ? false
+}:
+
+stdenv.mkDerivation rec {
+  pname = "sudo";
+  version = "1.8.30";
+
+  src = fetchurl {
+    url = "ftp://ftp.sudo.ws/pub/sudo/${pname}-${version}.tar.gz";
+    sha256 = "1rvrqlqrrjsd06dczgj9cwjdkpkqil5zzlwh87h06ms6qzfx6nm3";
+  };
+
+  prePatch = ''
+    # do not set sticky bit in nix store
+    substituteInPlace src/Makefile.in --replace 04755 0755
+  '';
+
+  configureFlags = [
+    "--with-env-editor"
+    "--with-editor=/run/current-system/sw/bin/nano"
+    "--with-rundir=/run/sudo"
+    "--with-vardir=/var/db/sudo"
+    "--with-logpath=/var/log/sudo.log"
+    "--with-iologdir=/var/log/sudo-io"
+    "--with-sendmail=${sendmailPath}"
+    "--enable-tmpfiles.d=no"
+  ] ++ stdenv.lib.optional withInsults [
+    "--with-insults"
+    "--with-all-insults"
+  ] ++ stdenv.lib.optional withSssd [
+    "--with-sssd"
+    "--with-sssd-lib=${sssd}/lib"
+  ];
+
+  configureFlagsArray = [
+    "--with-passprompt=[sudo] password for %p: "  # intentional trailing space
+  ];
+
+  postConfigure =
+    ''
+    cat >> pathnames.h <<'EOF'
+      #undef _PATH_MV
+      #define _PATH_MV "${coreutils}/bin/mv"
+    EOF
+    makeFlags="install_uid=$(id -u) install_gid=$(id -g)"
+    installFlags="sudoers_uid=$(id -u) sudoers_gid=$(id -g) sysconfdir=$out/etc rundir=$TMPDIR/dummy vardir=$TMPDIR/dummy DESTDIR=/"
+    '';
+
+  nativeBuildInputs = [ groff ];
+  buildInputs = [ pam ];
+
+  enableParallelBuilding = true;
+
+  doCheck = false; # needs root
+
+  postInstall =
+    ''
+    rm -f $out/share/doc/sudo/ChangeLog
+    '';
+
+  meta = {
+    description = "A command to run commands as root";
+
+    longDescription =
+      ''
+      Sudo (su "do") allows a system administrator to delegate
+      authority to give certain users (or groups of users) the ability
+      to run some (or all) commands as root or another user while
+      providing an audit trail of the commands and their arguments.
+      '';
+
+    homepage = https://www.sudo.ws/;
+
+    license = https://www.sudo.ws/sudo/license.html;
+
+    maintainers = [ stdenv.lib.maintainers.eelco ];
+
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/sudolikeaboss/default.nix b/nixpkgs/pkgs/tools/security/sudolikeaboss/default.nix
new file mode 100644
index 000000000000..97db4a28c458
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sudolikeaboss/default.nix
@@ -0,0 +1,33 @@
+# This file was generated by go2nix, then modified by hand for Darwin support.
+{ stdenv, buildGoPackage, fetchFromGitHub, fixDarwinDylibNames, darwin }:
+
+buildGoPackage rec {
+  pname = "sudolikeaboss-unstable";
+  version = "20161127-${stdenv.lib.strings.substring 0 7 rev}";
+  rev = "2d9afe19f872c9f433d476e57ee86169781b164c";
+
+  goPackagePath = "github.com/ravenac95/sudolikeaboss";
+
+  src = fetchFromGitHub {
+    owner = "ravenac95";
+    repo = "sudolikeaboss";
+    inherit rev;
+    sha256 = "0ni3v4kanxfzxzjd48f5dgv62jbfrw7kdmq0snj09hw7ciw55yg6";
+  };
+
+  goDeps = ./deps.nix;
+
+  propagatedBuildInputs = with darwin.apple_sdk.frameworks; [
+    Cocoa
+    fixDarwinDylibNames
+  ];
+
+  meta = with stdenv.lib; {
+    inherit version;
+    inherit (src.meta) homepage;
+    description = "Get 1password access from iterm2";
+    license = licenses.mit;
+    maintainers = [ maintainers.grahamc ];
+    platforms = platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/sudolikeaboss/deps.nix b/nixpkgs/pkgs/tools/security/sudolikeaboss/deps.nix
new file mode 100644
index 000000000000..350306a24f4b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/sudolikeaboss/deps.nix
@@ -0,0 +1,39 @@
+# This file was generated by go2nix.
+[
+  {
+    goPackagePath = "github.com/Sirupsen/logrus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Sirupsen/logrus";
+      rev = "881bee4e20a5d11a6a88a5667c6f292072ac1963";
+      sha256 = "176a09lp20f0qfhwwlh2xg0vk7z1g7gq8k2wr3sg1fd8m86wrzzg";
+    };
+  }
+  {
+    goPackagePath = "github.com/satori/go.uuid";
+    fetch = {
+      type = "git";
+      url = "https://github.com/satori/go.uuid";
+      rev = "b061729afc07e77a8aa4fad0a2fd840958f1942a";
+      sha256 = "0q87n5an7ha2d8kl6gn9wi41rq0whsxq68w5x3nxz7w9vgkfnq1k";
+    };
+  }
+  {
+    goPackagePath = "github.com/urfave/cli";
+    fetch = {
+      type = "git";
+      url = "https://github.com/urfave/cli";
+      rev = "0bdeddeeb0f650497d603c4ad7b20cfe685682f6";
+      sha256 = "1ny63c7bfwfrsp7vfkvb4i0xhq4v7yxqnwxa52y4xlfxs4r6v6fg";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev = "0c96df335ed3f17f758cba1a2c71b7849dd828e3";
+      sha256 = "02zn1f539y5yc1sx82ym8c3pp3z371d1ldhl20skwjwbdw1ln8hm";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/security/super/default.nix b/nixpkgs/pkgs/tools/security/super/default.nix
new file mode 100644
index 000000000000..716973a3e2e7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/super/default.nix
@@ -0,0 +1,46 @@
+{ stdenv, fetchurl, fetchpatch }:
+
+stdenv.mkDerivation rec {
+  name = "super-3.30.0";
+
+  src = fetchurl {
+    name = "${name}.tar.gz";
+    url = "https://www.ucolick.org/~will/RUE/super/${name}-tar.gz";
+    sha256 = "0k476f83w7f45y9jpyxwr00ikv1vhjiq0c26fgjch9hnv18icvwy";
+  };
+
+  prePatch = ''
+    # do not set sticky bit in nix store
+    substituteInPlace Makefile.in \
+      --replace "-o root" "" \
+      --replace 04755 755
+  '';
+
+  patches = [
+   (fetchpatch { url = https://salsa.debian.org/debian/super/raw/debian/3.30.0-7/debian/patches/14-Fix-unchecked-setuid-call.patch;
+                 sha256 = "08m9hw4kyfjv0kqns1cqha4v5hkgp4s4z0q1rgif1fnk14xh7wqh";
+               })
+  ];
+
+  NIX_CFLAGS_COMPILE = "-D_GNU_SOURCE";
+
+  configureFlags = [
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+  ];
+
+  installFlags = [ "sysconfdir=$(out)/etc" "localstatedir=$(TMPDIR)" ];
+
+  meta = {
+    homepage = "https://www.ucolick.org/~will/#super";
+    description = "Allows users to execute scripts as if they were root";
+    longDescription =
+      ''
+        This package provides two commands: 1) “super”, which allows
+        users to execute commands under a different uid/gid (specified
+        in /etc/super.tab); and 2) “setuid”, which allows root to
+        execute a command under a different uid.
+      '';
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/tboot/default.nix b/nixpkgs/pkgs/tools/security/tboot/default.nix
new file mode 100644
index 000000000000..062bf40b7d6d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/tboot/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchurl, trousers, openssl, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "tboot";
+  version = "1.9.8";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/tboot/${pname}-${version}.tar.gz";
+    sha256 = "06f0ggl6vrb5ghklblvh2ixgmmjv31rkp1vfj9qm497iqwq9ac00";
+  };
+
+  patches = [ ./tboot-add-well-known-secret-option-to-lcp_writepol.patch ];
+
+  buildInputs = [ trousers openssl zlib ];
+
+  enableParallelBuilding = true;
+
+  hardeningDisable = [ "pic" "stackprotector" ];
+
+  NIX_CFLAGS_COMPILE = [ "-Wno-error=address-of-packed-member" ];
+
+  configurePhase = ''
+    for a in lcptools utils tb_polgen; do
+      substituteInPlace $a/Makefile --replace /usr/sbin /sbin
+    done
+    substituteInPlace docs/Makefile --replace /usr/share /share
+  '';
+
+  installFlags = [ "DESTDIR=$(out)" ];
+
+  meta = with stdenv.lib; {
+    description = "A pre-kernel/VMM module that uses Intel(R) TXT to perform a measured and verified launch of an OS kernel/VMM";
+    homepage    = https://sourceforge.net/projects/tboot/;
+    license     = licenses.bsd3;
+    maintainers = with maintainers; [ ak ];
+    platforms   = [ "x86_64-linux" "i686-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/tboot/tboot-add-well-known-secret-option-to-lcp_writepol.patch b/nixpkgs/pkgs/tools/security/tboot/tboot-add-well-known-secret-option-to-lcp_writepol.patch
new file mode 100644
index 000000000000..a16ba9f4fbab
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/tboot/tboot-add-well-known-secret-option-to-lcp_writepol.patch
@@ -0,0 +1,50 @@
+diff -urp tboot-1.8.0.orig/lcptools/writepol.c tboot-1.8.0/lcptools/writepol.c
+--- tboot-1.8.0.orig/lcptools/writepol.c	2014-01-30 10:34:57.000000000 +0100
++++ tboot-1.8.0/lcptools/writepol.c	2014-02-12 01:48:51.523581057 +0100
+@@ -40,6 +40,7 @@
+ #include <getopt.h>
+ #include <trousers/tss.h>
+ #include <trousers/trousers.h>
++#include <tss/tss_defines.h>
+ 
+ #define PRINT   printf
+ #include "../include/uuid.h"
+@@ -51,14 +52,15 @@ static uint32_t index_value = 0;
+ static char *file_arg=NULL;
+ static uint32_t fLeng;
+ static unsigned char *policy_data = NULL;
+-static char *password = NULL;
++static const char *password = NULL;
+ static uint32_t passwd_length = 0;
++static const char well_known_secret[] = TSS_WELL_KNOWN_SECRET;
+ static int help_input = 0;
+ static unsigned char empty_pol_data[] = {0};
+ 
+-static const char *short_option = "ehi:f:p:";
++static const char *short_option = "ehi:f:p:Z";
+ static const char *usage_string = "lcp_writepol -i index_value "
+-                                  "[-f policy_file] [-e] [-p passwd] [-h]";
++                                  "[-f policy_file] [-e] [-p passwd|-Z] [-h]";
+ 
+ static const char *option_strings[] = {
+     "-i index value: uint32/string.\n"
+@@ -67,6 +69,7 @@ static const char *option_strings[] = {
+     "\tINDEX_AUX:0x50000002 or \"aux\"\n",
+     "-f file_name: string. File name of the policy data is stored. \n",
+     "-p password: string. \n",
++    "-Z use well known secret as password. \n",
+     "-e write 0 length data to the index.\n"
+     "\tIt will be used for some special index.\n"
+     "\tFor example, the index with permission WRITEDEFINE.\n",
+@@ -119,6 +122,11 @@ parse_cmdline(int argc, const char * arg
+                 fLeng = 0;
+                 break;
+ 
++            case 'Z':
++                password = well_known_secret;
++                passwd_length = sizeof(well_known_secret);
++                break;
++
+             case 'h':
+                 help_input = 1;
+                 break;
diff --git a/nixpkgs/pkgs/tools/security/tcpcrypt/default.nix b/nixpkgs/pkgs/tools/security/tcpcrypt/default.nix
new file mode 100644
index 000000000000..86a65a060280
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/tcpcrypt/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchFromGitHub, autoreconfHook
+, openssl
+, libcap, libpcap, libnfnetlink, libnetfilter_conntrack, libnetfilter_queue
+}:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  pname = "tcpcrypt";
+  version = "0.5";
+
+  src = fetchFromGitHub {
+    repo = "tcpcrypt";
+    owner = "scslab";
+    rev = "v${version}";
+    sha256 = "0a015rlyvagz714pgwr85f8gjq1fkc0il7d7l39qcgxrsp15b96w";
+  };
+
+  postUnpack = ''mkdir -vp $sourceRoot/m4'';
+
+  outputs = [ "bin" "dev" "out" ];
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ openssl libpcap ]
+    ++ optionals stdenv.isLinux [ libcap libnfnetlink libnetfilter_conntrack libnetfilter_queue ];
+
+  enableParallelBuilding = true;
+
+  meta = {
+    homepage = http://tcpcrypt.org/;
+    description = "Fast TCP encryption";
+    platforms = platforms.all;
+    license = licenses.bsd2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/thc-hydra/default.nix b/nixpkgs/pkgs/tools/security/thc-hydra/default.nix
new file mode 100644
index 000000000000..aa36901e46b9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/thc-hydra/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, lib, fetchFromGitHub, zlib, openssl, ncurses, libidn, pcre, libssh, libmysqlclient, postgresql
+, withGUI ? false, makeWrapper, pkgconfig, gtk2 }:
+
+stdenv.mkDerivation rec {
+  pname = "thc-hydra";
+  version = "9.0";
+
+  src = fetchFromGitHub {
+    owner = "vanhauser-thc";
+    repo = "thc-hydra";
+    rev = "v${version}";
+    sha256 = "09d2f55wky1iabnl871d4r6dyyvr8zhp47d9j1p6d0pvdv93kl4z";
+  };
+
+  postPatch = let
+    makeDirs = output: subDir: lib.concatStringsSep " " (map (path: lib.getOutput output path + "/" + subDir) buildInputs);
+  in ''
+    substituteInPlace configure \
+      --replace '$LIBDIRS' "${makeDirs "lib" "lib"}" \
+      --replace '$INCDIRS' "${makeDirs "dev" "include"}" \
+      --replace "/usr/include/math.h" "${lib.getDev stdenv.cc.libc}/include/math.h" \
+      --replace "libcurses.so" "libncurses.so" \
+      --replace "-lcurses" "-lncurses"
+  '';
+
+  nativeBuildInputs = lib.optionals withGUI [ pkgconfig makeWrapper ];
+
+  buildInputs = [
+    zlib openssl ncurses libidn pcre libssh libmysqlclient postgresql
+  ] ++ lib.optional withGUI gtk2;
+
+  enableParallelBuilding = true;
+
+  DATADIR = "/share/${pname}";
+
+  postInstall = lib.optionalString withGUI ''
+    wrapProgram $out/bin/xhydra \
+      --add-flags --hydra-path --add-flags "$out/bin/hydra"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A very fast network logon cracker which support many different services";
+    homepage = "https://www.thc.org/thc-hydra/";
+    license = licenses.agpl3;
+    maintainers = with maintainers; [ offline ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/theharvester/default.nix b/nixpkgs/pkgs/tools/security/theharvester/default.nix
new file mode 100644
index 000000000000..4153ddafbf48
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/theharvester/default.nix
@@ -0,0 +1,36 @@
+{ lib, fetchFromGitHub, python3 }:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "theHarvester";
+  version = "3.1";
+
+  src = fetchFromGitHub {
+    owner = "laramies";
+    repo = pname;
+    rev = "V${version}";
+    sha256 = "0lxzxfa9wbzim50d2jmd27i57szd0grm1dfayhnym86jn01qpvn3";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [ 
+    aiodns beautifulsoup4 dns grequests netaddr
+    plotly pyyaml requests retrying shodan texttable
+  ];
+
+  checkInputs = [ python3.pkgs.pytest ];
+
+  checkPhase = "runHook preCheck ; pytest tests/test_myparser.py ; runHook postCheck";
+  # We don't run other tests (discovery modules) because they require network access
+
+  meta = with lib; {
+    description = "Gather E-mails, subdomains and names from different public sources";
+    longDescription = ''
+      theHarvester is a very simple, yet effective tool designed to be used in the early
+      stages of a penetration test. Use it for open source intelligence gathering and
+      helping to determine an entity's external threat landscape on the internet. The tool
+      gathers emails, names, subdomains, IPs, and URLs using multiple public data sources.
+    '';
+    homepage = "https://github.com/laramies/theHarvester";
+    maintainers = with maintainers; [ c0bw3b treemo ];
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/tor/default.nix b/nixpkgs/pkgs/tools/security/tor/default.nix
new file mode 100644
index 000000000000..819b96889246
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/tor/default.nix
@@ -0,0 +1,88 @@
+{ stdenv, fetchurl, pkgconfig, libevent, openssl, zlib, torsocks
+, libseccomp, systemd, libcap, lzma, zstd, scrypt
+
+# for update.nix
+, writeScript
+, common-updater-scripts
+, bash
+, coreutils
+, curl
+, gnugrep
+, gnupg
+, gnused
+, nix
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tor";
+  version = "0.4.2.5";
+
+  src = fetchurl {
+    url = "https://dist.torproject.org/${pname}-${version}.tar.gz";
+    sha256 = "1hnqg6psf7shcmlvfk44mkpaz7v66mify3cnx7mzl23q5s37anad";
+  };
+
+  outputs = [ "out" "geoip" ];
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libevent openssl zlib lzma zstd scrypt ] ++
+    stdenv.lib.optionals stdenv.isLinux [ libseccomp systemd libcap ];
+
+  NIX_CFLAGS_LINK = stdenv.lib.optionalString stdenv.cc.isGNU "-lgcc_s";
+
+  postPatch = ''
+    substituteInPlace contrib/client-tools/torify \
+      --replace 'pathfind torsocks' true          \
+      --replace 'exec torsocks' 'exec ${torsocks}/bin/torsocks'
+
+    patchShebangs ./scripts/maint/checkShellScripts.sh
+  '';
+
+  enableParallelBuilding = true;
+  enableParallelChecking = false; # 4 tests fail randomly
+
+  doCheck = true;
+
+  postInstall = ''
+    mkdir -p $geoip/share/tor
+    mv $out/share/tor/geoip{,6} $geoip/share/tor
+    rm -rf $out/share/tor
+  '';
+
+  passthru.updateScript = import ./update.nix {
+    inherit (stdenv) lib;
+    inherit
+      writeScript
+      common-updater-scripts
+      bash
+      coreutils
+      curl
+      gnupg
+      gnugrep
+      gnused
+      nix
+    ;
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://www.torproject.org/;
+    repositories.git = https://git.torproject.org/git/tor;
+    description = "Anonymizing overlay network";
+
+    longDescription = ''
+      Tor helps improve your privacy by bouncing your communications around a
+      network of relays run by volunteers all around the world: it makes it
+      harder for somebody watching your Internet connection to learn what sites
+      you visit, and makes it harder for the sites you visit to track you. Tor
+      works with many of your existing applications, including web browsers,
+      instant messaging clients, remote login, and other applications based on
+      the TCP protocol.
+    '';
+
+    license = licenses.bsd3;
+
+    maintainers = with maintainers;
+      [ phreedom doublec thoughtpolice joachifm ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/tor/tor-arm.nix b/nixpkgs/pkgs/tools/security/tor/tor-arm.nix
new file mode 100644
index 000000000000..896ab50562d8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/tor/tor-arm.nix
@@ -0,0 +1,55 @@
+{ stdenv, fetchurl, makeWrapper
+, python2Packages, ncurses, lsof, nettools
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tor-arm";
+  version = "1.4.5.0";
+
+  src = fetchurl {
+    url = "https://www.atagar.com/arm/resources/static/arm-${version}.tar.bz2";
+    sha256 = "1yi87gdglkvi1a23hv5c3k7mc18g0rw7b05lfcw81qyxhlapf3pw";
+  };
+
+  nativeBuildInputs = [ makeWrapper python2Packages.python ];
+
+  outputs = [ "out" "man" ];
+
+  postPatch = ''
+    substituteInPlace ./setup.py --replace "/usr/bin" "$out/bin"
+    substituteInPlace ./src/util/connections.py \
+      --replace "lsof -wnPi"   "${lsof}/bin/lsof"
+    substituteInPlace ./src/util/torTools.py \
+      --replace "netstat -npl" "${nettools}/bin/netstat -npl" \
+      --replace "lsof -wnPi"   "${lsof}/bin/lsof"
+
+    substituteInPlace ./arm --replace '"$0" = /usr/bin/arm' 'true'
+    substituteInPlace ./arm --replace "python" "${python2Packages.python}/bin/python"
+
+    for i in ./install ./arm ./src/gui/controller.py ./src/cli/wizard.py ./src/resources/torrcOverride/override.h ./src/resources/torrcOverride/override.py ./src/resources/arm.1 ./setup.py; do
+      substituteInPlace $i --replace "/usr/share" "$out/share"
+    done
+
+    # fixes man page installation
+    substituteInPlace ./setup.py --replace "src/resoureces" "src/resources"
+  '';
+
+  installPhase = ''
+    mkdir -p $out/share/arm $out/bin $out/libexec
+    python setup.py install --prefix=$out --docPath $out/share/doc/arm
+    cp -R src/TorCtl $out/libexec
+
+    wrapProgram $out/bin/arm \
+      --prefix PYTHONPATH : "$(toPythonPath $out):$out/libexec:$PYTHONPATH" \
+      --set TERMINFO "${ncurses.out}/share/terminfo" \
+      --set TERM "xterm"
+  '';
+
+  meta = {
+    description = "A terminal status monitor for Tor relays";
+    homepage    = "https://www.atagar.com/arm/";
+    license     = stdenv.lib.licenses.gpl3;
+    platforms   = stdenv.lib.platforms.unix;
+    maintainers = [ stdenv.lib.maintainers.thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/tor/torsocks.nix b/nixpkgs/pkgs/tools/security/tor/torsocks.nix
new file mode 100644
index 000000000000..8681d80c2ed3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/tor/torsocks.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchgit, autoreconfHook, libcap }:
+
+stdenv.mkDerivation rec {
+  pname = "torsocks";
+  version = "2.3.0";
+
+  src = fetchgit {
+    url    = meta.repositories.git;
+    rev    = "refs/tags/v${version}";
+    sha256 = "0x0wpcigf22sjxg7bm0xzqihmsrz51hl4v8xf91qi4qnmr4ny1hb";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  postPatch = ''
+    # Patch torify_app()
+    sed -i \
+      -e 's,\(local app_path\)=`which $1`,\1=`type -P $1`,' \
+      -e 's,\(local getcap\)=.*,\1=${libcap}/bin/getcap,' \
+      src/bin/torsocks.in
+  '';
+
+  doInstallCheck = true;
+  installCheckTarget = "check-recursive";
+
+  meta = {
+    description      = "Wrapper to safely torify applications";
+    homepage         = https://github.com/dgoulet/torsocks;
+    repositories.git = https://git.torproject.org/torsocks.git;
+    license          = stdenv.lib.licenses.gpl2;
+    platforms        = stdenv.lib.platforms.unix;
+    maintainers      = with stdenv.lib.maintainers; [ phreedom thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/tor/update.nix b/nixpkgs/pkgs/tools/security/tor/update.nix
new file mode 100644
index 000000000000..c944883d4178
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/tor/update.nix
@@ -0,0 +1,71 @@
+{ lib
+, writeScript
+, common-updater-scripts
+, bash
+, coreutils
+, curl
+, gnugrep
+, gnupg
+, gnused
+, nix
+}:
+
+with lib;
+
+let
+  downloadPageUrl = "https://dist.torproject.org";
+
+  # See https://www.torproject.org/docs/signing-keys.html
+  signingKeys = [
+    # Roger Dingledine
+    "B117 2656 DFF9 83C3 042B C699 EB5A 896A 2898 8BF5"
+    "F65C E37F 04BA 5B36 0AE6 EE17 C218 5258 19F7 8451"
+    # Nick Mathewson
+    "2133 BC60 0AB1 33E1 D826 D173 FE43 009C 4607 B1FB"
+    "B117 2656 DFF9 83C3 042B C699 EB5A 896A 2898 8BF5"
+  ];
+in
+
+writeScript "update-tor" ''
+#! ${bash}/bin/bash
+
+set -eu -o pipefail
+
+export PATH=${makeBinPath [
+  common-updater-scripts
+  coreutils
+  curl
+  gnugrep
+  gnupg
+  gnused
+  nix
+]}
+
+srcBase=$(curl -L --list-only -- "${downloadPageUrl}" \
+  | grep -Eo 'tor-([[:digit:]]+\.?)+\.tar\.gz' \
+  | sort -Vu \
+  | tail -n1)
+srcFile=$srcBase
+srcUrl=${downloadPageUrl}/$srcBase
+
+srcName=''${srcBase/.tar.gz/}
+srcVers=(''${srcName//-/ })
+version=''${srcVers[1]}
+
+sigUrl=$srcUrl.asc
+sigFile=''${sigUrl##*/}
+
+# upstream does not support byte ranges ...
+[[ -e "$srcFile" ]] || curl -L -o "$srcFile" -- "$srcUrl"
+[[ -e "$sigFile" ]] || curl -L -o "$sigFile" -- "$sigUrl"
+
+export GNUPGHOME=$PWD/gnupg
+mkdir -m 700 -p "$GNUPGHOME"
+
+gpg --batch --recv-keys ${concatStringsSep " " (map (x: "'${x}'") signingKeys)}
+gpg --batch --verify "$sigFile" "$srcFile"
+
+sha256=$(nix-hash --type sha256 --flat --base32 "$srcFile")
+
+update-source-version tor "$version" "$sha256"
+''
diff --git a/nixpkgs/pkgs/tools/security/tpm-luks/default.nix b/nixpkgs/pkgs/tools/security/tpm-luks/default.nix
new file mode 100644
index 000000000000..94d833ca7462
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/tpm-luks/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchgit, autoreconfHook, gawk, trousers, cryptsetup, openssl }:
+
+stdenv.mkDerivation {
+  pname = "tpm-luks";
+  version = "git-2015-07-11";
+
+  src = fetchgit {
+    url = "https://github.com/momiji/tpm-luks";
+    rev = "c9c5b7fdddbcdac1cd4d2ea6baddd0617cc88ffa";
+    sha256 = "1ms2v57f13r9km6mvf9rha5ndmlmjvrz3mcikai6nzhpj0nrjz0w";
+  };
+
+  patches = [
+    ./openssl-1.1.patch
+    ./signed-ptr.patch
+  ];
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ gawk trousers cryptsetup openssl ];
+
+  installPhase = ''
+    mkdir -p $out
+    make install DESTDIR=$out
+    mv $out/$out/sbin $out/bin
+    rm -r $out/nix
+    '';
+
+  meta = with stdenv.lib; {
+    description = "LUKS key storage in TPM NVRAM";
+    homepage    = https://github.com/shpedoikal/tpm-luks/;
+    maintainers = [ maintainers.tstrobel ];
+    platforms   = platforms.linux;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/security/tpm-luks/openssl-1.1.patch b/nixpkgs/pkgs/tools/security/tpm-luks/openssl-1.1.patch
new file mode 100644
index 000000000000..10132242b345
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/tpm-luks/openssl-1.1.patch
@@ -0,0 +1,63 @@
+diff --git a/swtpm-utils/lib/hmac.c b/swtpm-utils/lib/hmac.c
+index 5545375..f9bedea 100644
+--- a/swtpm-utils/lib/hmac.c
++++ b/swtpm-utils/lib/hmac.c
+@@ -381,15 +381,19 @@ uint32_t TSS_authhmac(unsigned char *digest, unsigned char *key, unsigned int ke
+ /****************************************************************************/
+ uint32_t TSS_rawhmac(unsigned char *digest, const unsigned char *key, unsigned int keylen, ...)
+    {
+-   HMAC_CTX hmac;
++   HMAC_CTX* hmac;
+    unsigned int dlen;
+    unsigned char *data;
+    va_list argp;
+-   
+-#ifdef HAVE_HMAC_CTX_CLEANUP
+-   HMAC_CTX_init(&hmac);
+-#endif
+-   HMAC_Init(&hmac,key,keylen,EVP_sha1());
++
++   hmac = HMAC_CTX_new();
++
++   if (hmac == NULL)
++     {
++     return ERR_MEM_ERR;
++     }
++
++   HMAC_Init_ex(hmac,key,keylen,EVP_sha1(),NULL);
+ 
+    va_start(argp,keylen);
+    for (;;)
+@@ -398,15 +402,11 @@ uint32_t TSS_rawhmac(unsigned char *digest, const unsigned char *key, unsigned i
+       if (dlen == 0) break;
+       data = (unsigned char *)va_arg(argp,unsigned char *);
+       if (data == NULL) return ERR_NULL_ARG;
+-      HMAC_Update(&hmac,data,dlen);
++      HMAC_Update(hmac,data,dlen);
+       }
+-   HMAC_Final(&hmac,digest,&dlen);
++   HMAC_Final(hmac,digest,&dlen);
+ 
+-#ifdef HAVE_HMAC_CTX_CLEANUP
+-   HMAC_CTX_cleanup(&hmac);
+-#else
+-   HMAC_cleanup(&hmac);
+-#endif
++   HMAC_CTX_free(hmac);
+    va_end(argp);
+    return 0;
+    }
+diff --git a/swtpm-utils/lib/keys.c b/swtpm-utils/lib/keys.c
+index 99691b6..6627a1f 100644
+--- a/swtpm-utils/lib/keys.c
++++ b/swtpm-utils/lib/keys.c
+@@ -1249,8 +1249,7 @@ RSA *TSS_convpubkey(pubkeydata *k)
+                 exp);
+    }
+    /* set up the RSA public key structure */
+-   rsa->n = mod;
+-   rsa->e = exp;
++   RSA_set0_key(rsa, mod, exp, NULL);
+    return rsa;
+    }
+ 
diff --git a/nixpkgs/pkgs/tools/security/tpm-luks/signed-ptr.patch b/nixpkgs/pkgs/tools/security/tpm-luks/signed-ptr.patch
new file mode 100644
index 000000000000..83e356a4ef9e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/tpm-luks/signed-ptr.patch
@@ -0,0 +1,15 @@
+diff --git a/swtpm-utils/getcapability.c b/swtpm-utils/getcapability.c
+index 7359ba3..17b4324 100644
+--- a/swtpm-utils/getcapability.c
++++ b/swtpm-utils/getcapability.c
+@@ -480,7 +480,8 @@ int main(int argc, char *argv[])
+ 				  }
+ 
+ 				  if (c) {
+-				      char pcrmap[4], *pf;
++				      char pcrmap[4];
++				      unsigned char *pf;
+ 
+ 				      memcpy(pcrmap, ndp.pcrInfoRead.pcrSelection.pcrSelect,
+ 					     ndp.pcrInfoRead.pcrSelection.sizeOfSelect);
+
diff --git a/nixpkgs/pkgs/tools/security/tpm-quote-tools/default.nix b/nixpkgs/pkgs/tools/security/tpm-quote-tools/default.nix
new file mode 100644
index 000000000000..f7526ac7225d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/tpm-quote-tools/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, trousers, openssl }:
+
+stdenv.mkDerivation rec { 
+  pname = "tpm-quote-tools";
+  version = "1.0.4";
+
+  src = fetchurl { 
+    url = "mirror://sourceforge/project/tpmquotetools/${version}/${pname}-${version}.tar.gz";
+    sha256 = "1qjs83xb4np4yn1bhbjfhvkiika410v8icwnjix5ad96w2nlxp0h";
+  };
+
+  buildInputs = [ trousers openssl ];
+
+  postFixup = ''
+    patchelf \
+      --set-rpath "${stdenv.lib.makeLibraryPath [ openssl ]}:$(patchelf --print-rpath $out/bin/tpm_mkaik)" \
+      $out/bin/tpm_mkaik
+  '';
+
+  meta = with stdenv.lib; { 
+    description = "A collection of programs that provide support for TPM based attestation using the TPM quote mechanism";
+    longDescription = ''
+      The TPM Quote Tools is a collection of programs that provide support
+      for TPM based attestation using the TPM quote mechanism.  The manual
+      page for tpm_quote_tools provides a usage overview.
+    '';
+    homepage    = http://tpmquotetools.sourceforge.net/;
+    license     = licenses.bsd3;
+    maintainers = with maintainers; [ ak ];
+    platforms   = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/tpm-tools/default.nix b/nixpkgs/pkgs/tools/security/tpm-tools/default.nix
new file mode 100644
index 000000000000..e546cc5a10fb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/tpm-tools/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchurl, trousers, openssl, opencryptoki, perl }:
+
+let
+  version = "1.3.9.1";
+in
+stdenv.mkDerivation rec {
+  pname = "tpm-tools";
+  inherit version;
+
+  src = fetchurl {
+    url = "mirror://sourceforge/trousers/tpm-tools/${version}/${pname}-${version}.tar.gz";
+    sha256 = "0s7srgghykxnlb1g4izabzf2gfb1knxc0nzn6bly49h8cpi19dww";
+  };
+
+  sourceRoot = ".";
+
+  patches = [
+    (fetchurl {
+      url = https://sources.debian.org/data/main/t/tpm-tools/1.3.9.1-0.1/debian/patches/05-openssl1.1_fix_data_mgmt.patch;
+      sha256 = "161yysw4wgy3spsz6p1d0ib0h5pnrqm8bdh1l71c4hz6a6wpcyxj";
+    })
+  ];
+
+  nativeBuildInputs = [ perl ];
+  buildInputs = [ trousers openssl opencryptoki ];
+
+  meta = with stdenv.lib; {
+    description = "Management tools for TPM hardware";
+    longDescription = ''
+      tpm-tools is an open-source package designed to enable user and
+      application enablement of Trusted Computing using a Trusted Platform
+      Module (TPM), similar to a smart card environment.
+    '';
+    homepage    = https://sourceforge.net/projects/trousers/files/tpm-tools/;
+    license     = licenses.cpl10;
+    maintainers = [ maintainers.ak ];
+    platforms   = platforms.unix;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/security/tpm2-abrmd/default.nix b/nixpkgs/pkgs/tools/security/tpm2-abrmd/default.nix
new file mode 100644
index 000000000000..84dafca4e0c4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/tpm2-abrmd/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, lib
+, tpm2-tss, pkgconfig, glib, which, dbus, cmocka }:
+
+stdenv.mkDerivation rec {
+  pname = "tpm2-abrmd";
+  version = "2.2.0";
+
+  src = fetchurl {
+    url = "https://github.com/tpm2-software/${pname}/releases/download/${version}/${pname}-${version}.tar.gz";
+    sha256 = "1lbfhyyh9k54r8s1h8ca2czxv4hg0yq984kdh3vqh3990aca0x9a";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [
+    tpm2-tss glib which dbus cmocka
+  ];
+
+  # Unit tests are currently broken as the check phase attempts to start a dbus daemon etc.
+  #configureFlags = [ "--enable-unit" ];
+  doCheck = false;
+
+  meta = with lib; {
+    description = "TPM2 resource manager, accessible via D-Bus";
+    homepage = https://github.com/tpm2-software/tpm2-tools;
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ lschuermann ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/tpm2-tools/default.nix b/nixpkgs/pkgs/tools/security/tpm2-tools/default.nix
new file mode 100644
index 000000000000..b7c2141b0f7c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/tpm2-tools/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, fetchurl, lib
+, pandoc, pkgconfig, makeWrapper, curl, openssl, tpm2-tss
+, abrmdSupport ? true, tpm2-abrmd ? null }:
+
+stdenv.mkDerivation rec {
+  pname = "tpm2-tools";
+  version = "4.1";
+
+  src = fetchurl {
+    url = "https://github.com/tpm2-software/${pname}/releases/download/${version}/${pname}-${version}.tar.gz";
+    sha256 = "1wnw4i2m6dkafqjjma8mxw9419py2v1knhn3zf1gaizdabskgkh7";
+  };
+
+  nativeBuildInputs = [ pandoc pkgconfig makeWrapper ];
+  buildInputs = [
+    curl openssl tpm2-tss
+  ];
+
+  preFixup = let
+    ldLibraryPath = lib.makeLibraryPath ([
+      tpm2-tss
+    ] ++ (lib.optional abrmdSupport tpm2-abrmd));
+  in ''
+    for bin in $out/bin/*; do
+      wrapProgram $bin \
+        --suffix LD_LIBRARY_PATH : "${ldLibraryPath}"
+    done
+  '';
+
+
+  # Unit tests disabled, as they rely on a dbus session
+  #configureFlags = [ "--enable-unit" ];
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Command line tools that provide access to a TPM 2.0 compatible device";
+    homepage = https://github.com/tpm2-software/tpm2-tools;
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ delroth ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/trousers/allow-non-tss-config-file-owner.patch b/nixpkgs/pkgs/tools/security/trousers/allow-non-tss-config-file-owner.patch
new file mode 100644
index 000000000000..774a14f72bab
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/trousers/allow-non-tss-config-file-owner.patch
@@ -0,0 +1,19 @@
+diff -ur trousers-0.3.11.2.orig/src/tcsd/tcsd_conf.c trousers-0.3.11.2/src/tcsd/tcsd_conf.c
+--- trousers-0.3.11.2.orig/src/tcsd/tcsd_conf.c	2013-07-12 18:27:37.000000000 +0200
++++ trousers-0.3.11.2/src/tcsd/tcsd_conf.c	2013-08-21 14:29:42.917231648 +0200
+@@ -763,6 +763,7 @@
+ 		return TCSERR(TSS_E_INTERNAL_ERROR);
+ 	}
+ 
++#ifndef ALLOW_NON_TSS_CONFIG_FILE
+ 	/* make sure user/group TSS owns the conf file */
+ 	if (pw->pw_uid != stat_buf.st_uid || grp->gr_gid != stat_buf.st_gid) {
+ 		LogError("TCSD config file (%s) must be user/group %s/%s", tcsd_config_file,
+@@ -775,6 +776,7 @@
+ 		LogError("TCSD config file (%s) must be mode 0600", tcsd_config_file);
+ 		return TCSERR(TSS_E_INTERNAL_ERROR);
+ 	}
++#endif
+ #endif /* SOLARIS */
+ 
+ 	if ((f = fopen(tcsd_config_file, "r")) == NULL) {
diff --git a/nixpkgs/pkgs/tools/security/trousers/default.nix b/nixpkgs/pkgs/tools/security/trousers/default.nix
new file mode 100644
index 000000000000..a38c011d7a49
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/trousers/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl, openssl, pkgconfig }:
+
+stdenv.mkDerivation rec {
+  pname = "trousers";
+  version = "0.3.14";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/trousers/trousers/${version}/${pname}-${version}.tar.gz";
+    sha256 = "0iwgsbrbb7nfqgl61x8aailwxm8akxh9gkcwxhsvf50x4qx72l6f";
+  };
+
+  sourceRoot = ".";
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ openssl ];
+
+  patches = [ ./allow-non-tss-config-file-owner.patch ];
+
+  configureFlags = [ "--disable-usercheck" ];
+
+  NIX_CFLAGS_COMPILE = [ "-DALLOW_NON_TSS_CONFIG_FILE" ];
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "Trusted computing software stack";
+    homepage    = http://trousers.sourceforge.net/;
+    license     = licenses.bsd3;
+    maintainers = [ maintainers.ak ];
+    platforms   = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/trufflehog/default.nix b/nixpkgs/pkgs/tools/security/trufflehog/default.nix
new file mode 100644
index 000000000000..9492f2bb6eac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/trufflehog/default.nix
@@ -0,0 +1,38 @@
+{ lib, pythonPackages }:
+
+let
+  truffleHogRegexes = pythonPackages.buildPythonPackage rec {
+    pname = "truffleHogRegexes";
+    version = "0.0.4";
+    src = pythonPackages.fetchPypi {
+      inherit pname version;
+      sha256 = "09vrscbb4h4w01gmamlzghxx6cvrqdscylrbdcnbjsd05xl7zh4z";
+    };
+  };
+in
+  pythonPackages.buildPythonApplication rec {
+    pname = "truffleHog";
+    version = "2.0.97";
+
+    src = pythonPackages.fetchPypi {
+      inherit pname version;
+      sha256 = "034kpv1p4m90286slvc6d4mlrzaf0b5jbd4qaj87hj65wbpcpg8r";
+    };
+
+    # Relax overly restricted version constraint
+    postPatch = ''
+      substituteInPlace setup.py --replace "GitPython ==" "GitPython >= "
+    '';
+
+    propagatedBuildInputs = [ pythonPackages.GitPython truffleHogRegexes ];
+
+    # Test cases run git clone and require network access
+    doCheck = false;
+
+    meta = {
+      homepage = https://github.com/dxa4481/truffleHog;
+      description = "Searches through git repositories for high entropy strings and secrets, digging deep into commit history";
+      license = with lib.licenses; [ gpl2 ];
+      maintainers = with lib.maintainers; [ bhipple ];
+    };
+  }
diff --git a/nixpkgs/pkgs/tools/security/vault/default.nix b/nixpkgs/pkgs/tools/security/vault/default.nix
new file mode 100644
index 000000000000..11b0b067ccb8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/vault/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, buildGoPackage }:
+
+buildGoPackage rec {
+  pname = "vault";
+  version = "1.3.1";
+
+  src = fetchFromGitHub {
+    owner = "hashicorp";
+    repo = "vault";
+    rev = "v${version}";
+    sha256 = "052aj79gwmydc7ph1g567cbssqf8dsmqxad47k5hc5sc58bx7c93";
+  };
+
+  goPackagePath = "github.com/hashicorp/vault";
+
+  subPackages = [ "." ];
+
+  buildFlagsArray = [
+    "-tags='vault'"
+    "-ldflags=\"-X github.com/hashicorp/vault/sdk/version.GitCommit='v${version}'\""
+  ];
+
+  postInstall = ''
+    mkdir -p $bin/share/bash-completion/completions
+    echo "complete -C $bin/bin/vault vault" > $bin/share/bash-completion/completions/vault
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://www.vaultproject.io;
+    description = "A tool for managing secrets";
+    platforms = platforms.linux ++ platforms.darwin;
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ rushmorem lnl7 offline pradeepchhetri ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/vault/vault-bin.nix b/nixpkgs/pkgs/tools/security/vault/vault-bin.nix
new file mode 100644
index 000000000000..6e2ab221c42f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/vault/vault-bin.nix
@@ -0,0 +1,54 @@
+{ stdenv, fetchurl, unzip }:
+
+let
+  version = "1.3.0";
+
+  sources = let
+    base = "https://releases.hashicorp.com/vault/${version}";
+  in {
+    x86_64-linux = fetchurl {
+      url = "${base}/vault_${version}_linux_amd64.zip";
+      sha256 = "1crfj4gd1qwwa2xidd0pjffv0n6hf5hbhv6568m6zc1ig0qqm6yq";
+    };
+    i686-linux = fetchurl {
+      url = "${base}/vault_${version}_linux_386.zip";
+      sha256 = "0pyf0kyvxpmx3fwfvin1r0x30r9byx9lyi81894q06xrhiwbqc0l";
+    };
+    x86_64-darwin = fetchurl {
+      url = "${base}/vault_${version}_darwin_amd64.zip";
+      sha256 = "113vnpz9n6y7z2k9jqpfpxqxqbrmd9bhny79yaxqzkfdqw8vyv3g";
+    };
+    i686-darwin = fetchurl {
+      url = "${base}/vault_${version}_darwin_386.zip";
+      sha256 = "0d191qai0bpl7cyivca26wqgycsj2dz08809z147d1vnrz321v6w";
+    };
+    aarch64-linux = fetchurl {
+      url = "${base}/vault_${version}_linux_arm64.zip";
+      sha256 = "1bk5y3knc42mh07gnnn6p109qz908014620h1s0348wp4qfdy49w";
+    };
+  };
+
+in stdenv.mkDerivation {
+  pname = "vault-bin";
+  inherit version;
+
+  src = sources.${stdenv.hostPlatform.system} or (throw "unsupported system: ${stdenv.hostPlatform.system}");
+
+  nativeBuildInputs = [ unzip ];
+
+  sourceRoot = ".";
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/bash-completion/completions
+    mv vault $out/bin
+    echo "complete -C $out/bin/vault vault" > $out/share/bash-completion/completions/vault
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://www.vaultproject.io;
+    description = "A tool for managing secrets, this binary includes the UI";
+    platforms = [ "x86_64-linux" "i686-linux" "x86_64-darwin" "aarch64-linux" "i686-darwin" ];
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ offline psyanticy mkaito ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/verifpal/default.nix b/nixpkgs/pkgs/tools/security/verifpal/default.nix
new file mode 100644
index 000000000000..95afb580d4e1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/verifpal/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, fetchgit
+, buildGoPackage
+, pigeon
+}:
+
+buildGoPackage rec {
+  pname = "verifpal";
+  version = "0.7.5";
+
+  goPackagePath = "github.com/SymbolicSoft/verifpal";
+  goDeps = ./deps.nix;
+
+  src = fetchgit {
+    url = "https://source.symbolic.software/verifpal/verifpal.git";
+    rev = version;
+    sha256 = "0njgn6j5qg5kgid6ddv23axhw5gwjbayhdjkj4ya08mnxndr284m";
+  };
+
+  nativeBuildInputs = [ pigeon ];
+
+  postPatch = ''
+    sed -e 's|/bin/echo |echo |g' -i Makefile
+  '';
+
+  buildPhase = ''
+    make -C go/src/$goPackagePath parser linux
+  '';
+
+  installPhase = ''
+    mkdir -p $bin/bin
+    cp go/src/$goPackagePath/build/bin/linux/verifpal $bin/bin/
+  '';
+
+  meta = {
+    homepage = "https://verifpal.com/";
+    description = "Cryptographic protocol analysis for students and engineers";
+    maintainers = with lib.maintainers; [ zimbatm ];
+    license = with lib.licenses; [ gpl3 ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/verifpal/deps.nix b/nixpkgs/pkgs/tools/security/verifpal/deps.nix
new file mode 100644
index 000000000000..aaa4269416a6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/verifpal/deps.nix
@@ -0,0 +1,12 @@
+# file generated from go.mod using vgo2nix (https://github.com/adisbladis/vgo2nix)
+[
+  {
+    goPackagePath = "github.com/logrusorgru/aurora";
+    fetch = {
+      type = "git";
+      url = "https://github.com/logrusorgru/aurora";
+      rev = "94edacc10f9b";
+      sha256 = "0bhwy3rrd8mwb8xjwf44nj6vmxaj5hdvayvszr1rskkmz08l5v01";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/security/volatility/default.nix b/nixpkgs/pkgs/tools/security/volatility/default.nix
new file mode 100644
index 000000000000..bc8f1ce52c1d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/volatility/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl, pythonPackages }:
+
+pythonPackages.buildPythonApplication rec {
+  version = "2.6";
+  pname = "volatility";
+
+  src = fetchurl {
+    url = "https://downloads.volatilityfoundation.org/releases/${version}/${pname}-${version}.zip";
+    sha256 = "15cjrx31nnqa3bpjkv0x05j7f2sb7pq46a72zh7qg55zf86hawsv";
+  };
+
+  doCheck = false;
+
+  propagatedBuildInputs = [ pythonPackages.pycrypto pythonPackages.distorm3 ];
+
+  meta = with stdenv.lib; {
+    homepage = https://www.volatilityfoundation.org/;
+    description = "Advanced memory forensics framework";
+    maintainers = with maintainers; [ bosu ];
+    license = stdenv.lib.licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/vulnix/default.nix b/nixpkgs/pkgs/tools/security/vulnix/default.nix
new file mode 100644
index 000000000000..59d8b8c08754
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/vulnix/default.nix
@@ -0,0 +1,53 @@
+{ stdenv, python3Packages, nix, ronn }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "vulnix";
+  version = "1.9.4";
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "06dpdsnz1ih0syas3x25s557qpw0f4kmypvxwaffm734djg8klmi";
+  };
+
+  outputs = [ "out" "doc" "man" ];
+  nativeBuildInputs = [ ronn ];
+
+  checkInputs = with python3Packages; [
+    freezegun
+    pytest
+    pytestcov
+    pytest-flake8
+  ];
+
+  propagatedBuildInputs = [
+    nix
+  ] ++ (with python3Packages; [
+    click
+    colorama
+    pyyaml
+    requests
+    setuptools
+    toml
+    zodb
+  ]);
+
+  postBuild = "make -C doc";
+
+  checkPhase = "py.test src/vulnix";
+
+  postInstall = ''
+    install -D -t $doc/share/doc/vulnix README.rst CHANGES.rst
+    gzip $doc/share/doc/vulnix/*.rst
+    install -D -t $man/share/man/man1 doc/vulnix.1
+    install -D -t $man/share/man/man5 doc/vulnix-whitelist.5
+  '';
+
+  dontStrip = true;
+
+  meta = with stdenv.lib; {
+    description = "NixOS vulnerability scanner";
+    homepage = "https://github.com/flyingcircusio/vulnix";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ ckauhaus ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/wipe/default.nix b/nixpkgs/pkgs/tools/security/wipe/default.nix
new file mode 100644
index 000000000000..25c7921d34c8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/wipe/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "wipe";
+  version = "2.3.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/wipe/${version}/${pname}-${version}.tar.bz2";
+    sha256 = "180snqvh6k6il6prb19fncflf2jcvkihlb4w84sbndcv1wvicfa6";
+  };
+
+  patches = [ ./fix-install.patch ];
+
+  meta = with stdenv.lib; {
+    description = "Secure file wiping utility";
+    homepage    = http://wipe.sourceforge.net/;
+    license     = licenses.gpl2;
+    platforms   = platforms.linux;
+    maintainers = [ maintainers.abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/wipe/fix-install.patch b/nixpkgs/pkgs/tools/security/wipe/fix-install.patch
new file mode 100644
index 000000000000..2df3a1eec6a0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/wipe/fix-install.patch
@@ -0,0 +1,18 @@
+diff -ru3 wipe-2.3.1/Makefile.in wipe-2.3.1-new/Makefile.in
+--- wipe-2.3.1/Makefile.in	2009-11-02 00:11:30.000000000 +0300
++++ wipe-2.3.1-new/Makefile.in	2014-10-18 02:51:10.088966232 +0400
+@@ -60,12 +60,12 @@
+ 	$(INSTALL_BIN) -d $(bindir)
+ 	$(INSTALL_BIN) -s $(BIN_OUT) $(bindir)
+ 	$(INSTALL) -d $(mandir)/man1
+-	$(INSTALL) -o root -m 0644 wipe.1 $(mandir)/man1/
++	$(INSTALL) -m 0644 wipe.1 $(mandir)/man1/
+ 	rm -rf $(datadir)/doc/wipe*
+ 	$(INSTALL) -d $(datadir)/doc/wipe
+ 
+ 	for file in $(DOCS); do \
+-		$(INSTALL) -o root -m 0644 $$file $(datadir)/doc/wipe/; \
++		$(INSTALL) -m 0644 $$file $(datadir)/doc/wipe/; \
+ 	done
+ 
+ install_home: $(BIN_OUT)
diff --git a/nixpkgs/pkgs/tools/security/wpscan/Gemfile b/nixpkgs/pkgs/tools/security/wpscan/Gemfile
new file mode 100644
index 000000000000..5d76cd24f3ea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/wpscan/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'wpscan'
diff --git a/nixpkgs/pkgs/tools/security/wpscan/Gemfile.lock b/nixpkgs/pkgs/tools/security/wpscan/Gemfile.lock
new file mode 100644
index 000000000000..7a29a18b7c33
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/wpscan/Gemfile.lock
@@ -0,0 +1,59 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    activesupport (6.0.1)
+      concurrent-ruby (~> 1.0, >= 1.0.2)
+      i18n (>= 0.7, < 2)
+      minitest (~> 5.1)
+      tzinfo (~> 1.1)
+      zeitwerk (~> 2.2)
+    addressable (2.7.0)
+      public_suffix (>= 2.0.2, < 5.0)
+    cms_scanner (0.7.1)
+      get_process_mem (~> 0.2.5)
+      nokogiri (~> 1.10.4)
+      opt_parse_validator (~> 1.8.1)
+      public_suffix (>= 3.0, < 4.1)
+      ruby-progressbar (~> 1.10.0)
+      sys-proctable (~> 1.2.2)
+      typhoeus (~> 1.3.0)
+      xmlrpc (~> 0.3)
+      yajl-ruby (~> 1.4.1)
+    concurrent-ruby (1.1.5)
+    ethon (0.12.0)
+      ffi (>= 1.3.0)
+    ffi (1.11.3)
+    get_process_mem (0.2.5)
+      ffi (~> 1.0)
+    i18n (1.7.0)
+      concurrent-ruby (~> 1.0)
+    mini_portile2 (2.4.0)
+    minitest (5.13.0)
+    nokogiri (1.10.7)
+      mini_portile2 (~> 2.4.0)
+    opt_parse_validator (1.8.1)
+      activesupport (> 4.2, < 6.1.0)
+      addressable (>= 2.5, < 2.8)
+    public_suffix (4.0.1)
+    ruby-progressbar (1.10.1)
+    sys-proctable (1.2.2)
+      ffi
+    thread_safe (0.3.6)
+    typhoeus (1.3.1)
+      ethon (>= 0.9.0)
+    tzinfo (1.2.5)
+      thread_safe (~> 0.1)
+    wpscan (3.7.5)
+      cms_scanner (~> 0.7.1)
+    xmlrpc (0.3.0)
+    yajl-ruby (1.4.1)
+    zeitwerk (2.2.2)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  wpscan
+
+BUNDLED WITH
+   1.17.3
diff --git a/nixpkgs/pkgs/tools/security/wpscan/default.nix b/nixpkgs/pkgs/tools/security/wpscan/default.nix
new file mode 100644
index 000000000000..e7a784c1a779
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/wpscan/default.nix
@@ -0,0 +1,21 @@
+{ bundlerApp, lib, makeWrapper, curl }:
+
+bundlerApp {
+  pname = "wpscan";
+  gemdir = ./.;
+  exes = [ "wpscan" ];
+
+  buildInputs = [ makeWrapper ];
+  postBuild = ''
+    wrapProgram "$out/bin/wpscan" \
+      --prefix PATH : ${lib.makeBinPath [ curl ]}
+  '';
+
+  meta = with lib; {
+    description = "Black box WordPress vulnerability scanner";
+    homepage    = "https://wpscan.org/";
+    license     = licenses.unfreeRedistributable;
+    maintainers = with maintainers; [ nyanloutre manveru ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/wpscan/gemset.nix b/nixpkgs/pkgs/tools/security/wpscan/gemset.nix
new file mode 100644
index 000000000000..5c0691fda1bc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/wpscan/gemset.nix
@@ -0,0 +1,234 @@
+{
+  activesupport = {
+    dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo" "zeitwerk"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "190xv21yz03zz8nlfly557ir859jr5zkwi89naziy65hskdnkw1s";
+      type = "gem";
+    };
+    version = "6.0.1";
+  };
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fvchp2rhp2rmigx7qglf69xvjqvzq7x0g49naliw29r2bz656sy";
+      type = "gem";
+    };
+    version = "2.7.0";
+  };
+  cms_scanner = {
+    dependencies = ["get_process_mem" "nokogiri" "opt_parse_validator" "public_suffix" "ruby-progressbar" "sys-proctable" "typhoeus" "xmlrpc" "yajl-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14xmsigczibihlziisdgabsaz9lm2v31snlkc8kmza73pv8a61r4";
+      type = "gem";
+    };
+    version = "0.7.1";
+  };
+  concurrent-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1x07r23s7836cpp5z9yrlbpljcxpax14yw4fy4bnp6crhr6x24an";
+      type = "gem";
+    };
+    version = "1.1.5";
+  };
+  ethon = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gggrgkcq839mamx7a8jbnp2h7x2ykfn34ixwskwb0lzx2ak17g9";
+      type = "gem";
+    };
+    version = "0.12.0";
+  };
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10ay35dm0lkcqprsiya6q2kwvyid884102ryipr4vrk790yfp8kd";
+      type = "gem";
+    };
+    version = "1.11.3";
+  };
+  get_process_mem = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1q7pivp9z9pdxc2ha32q7x9zgqy8m9jf87g6n5mvi5l6knxya8sh";
+      type = "gem";
+    };
+    version = "0.2.5";
+  };
+  i18n = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hmypvx9iyc0b4hski7aic2xzm09cg1c7q1qlpnk3k8s5acxzyhl";
+      type = "gem";
+    };
+    version = "1.7.0";
+  };
+  mini_portile2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15zplpfw3knqifj9bpf604rb3wc1vhq6363pd6lvhayng8wql5vy";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+  minitest = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0w16p7cvslh3hxd3cia8jg4pd85z7rz7xqb16vh42gj4rijn8rmi";
+      type = "gem";
+    };
+    version = "5.13.0";
+  };
+  nokogiri = {
+    dependencies = ["mini_portile2"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0r0qpgf80h764k176yr63gqbs2z0xbsp8vlvs2a79d5r9vs83kln";
+      type = "gem";
+    };
+    version = "1.10.7";
+  };
+  opt_parse_validator = {
+    dependencies = ["activesupport" "addressable"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19rm44ww3zfb440kqpdprwb7y2d0gcm4znhv4kfs8dkhz8k1k5vy";
+      type = "gem";
+    };
+    version = "1.8.1";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xnfv2j2bqgdpg2yq9i2rxby0w2sc9h5iyjkpaas2xknwrgmhdb0";
+      type = "gem";
+    };
+    version = "4.0.1";
+  };
+  ruby-progressbar = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1k77i0d4wsn23ggdd2msrcwfy0i376cglfqypkk2q77r2l3408zf";
+      type = "gem";
+    };
+    version = "1.10.1";
+  };
+  sys-proctable = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ndk34ipd4v96v5cbvj0kbkhnssi4nqrzd7sifyg3bavi1jrw3w8";
+      type = "gem";
+    };
+    version = "1.2.2";
+  };
+  thread_safe = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy";
+      type = "gem";
+    };
+    version = "0.3.6";
+  };
+  typhoeus = {
+    dependencies = ["ethon"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0cni8b1idcp0dk8kybmxydadhfpaj3lbs99w5kjibv8bsmip2zi5";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  tzinfo = {
+    dependencies = ["thread_safe"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fjx9j327xpkkdlxwmkl3a8wqj7i4l4jwlrv3z13mg95z9wl253z";
+      type = "gem";
+    };
+    version = "1.2.5";
+  };
+  wpscan = {
+    dependencies = ["cms_scanner"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0vn6i48msxhj8g769vn2s3siv98cnqchblw69ldk1mr85lw4jci6";
+      type = "gem";
+    };
+    version = "3.7.5";
+  };
+  xmlrpc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1s744iwblw262gj357pky3d9fcx9hisvla7rnw29ysn5zsb6i683";
+      type = "gem";
+    };
+    version = "0.3.0";
+  };
+  yajl-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16v0w5749qjp13xhjgr2gcsvjv6mf35br7iqwycix1n2h7kfcckf";
+      type = "gem";
+    };
+    version = "1.4.1";
+  };
+  zeitwerk = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jywi63w1m2b2w9fj9rjb9n3imf6p5bfijfmml1xzdnsrdrjz0x1";
+      type = "gem";
+    };
+    version = "2.2.2";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/yara/default.nix b/nixpkgs/pkgs/tools/security/yara/default.nix
new file mode 100644
index 000000000000..e09e1e694083
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/yara/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, fetchFromGitHub, fetchpatch, autoconf, automake, libtool, pcre
+, withCrypto ? true, openssl
+, enableMagic ? true, file
+, enableCuckoo ? true, jansson
+}:
+
+stdenv.mkDerivation rec {
+  version = "3.11.0";
+  pname = "yara";
+
+  src = fetchFromGitHub {
+    owner = "VirusTotal";
+    repo = "yara";
+    rev = "v${version}";
+    sha256 = "0mx3xm2a70fx8vlynkavq8gfd9w5yjcix5rx85444i2s1h6kcd0j";
+  };
+
+  # See: https://github.com/VirusTotal/yara/issues/1036
+  # TODO: This patch should not be necessary in the next release
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/VirusTotal/yara/commit/04df811fa61fa54390b274bfcf56d7403c184404.patch";
+      sha256 = "0hsbc2k7nmk2kskll971draz0an4rmcs5v0iql47mz596vqvkzmb";
+    })
+  ];
+
+  buildInputs = [ autoconf automake libtool pcre ]
+    ++ stdenv.lib.optionals withCrypto [ openssl ]
+    ++ stdenv.lib.optionals enableMagic [ file ]
+    ++ stdenv.lib.optionals enableCuckoo [ jansson ]
+  ;
+
+  preConfigure = "./bootstrap.sh";
+
+  configureFlags = [
+    (stdenv.lib.withFeature withCrypto "crypto")
+    (stdenv.lib.enableFeature enableMagic "magic")
+    (stdenv.lib.enableFeature enableCuckoo "cuckoo")
+  ];
+
+  meta = with stdenv.lib; {
+    description = "The pattern matching swiss knife for malware researchers";
+    homepage    = http://Virustotal.github.io/yara/;
+    license     = licenses.asl20;
+    platforms   = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/zmap/default.nix b/nixpkgs/pkgs/tools/security/zmap/default.nix
new file mode 100644
index 000000000000..f98b4295e9e6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/zmap/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, cmake, pkgconfig, libjson, json_c, gengetopt, flex, byacc, gmp
+, libpcap
+}:
+
+stdenv.mkDerivation rec {
+  pname = "zmap";
+  version = "2.1.1";
+
+  src = fetchFromGitHub {
+    owner = "zmap";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0yaahaiawkjk020hvsb8pndbrk8k10wxkfba1irp12a4sj6rywcs";
+  };
+
+  cmakeFlags = [ "-DRESPECT_INSTALL_PREFIX_CONFIG=ON" ];
+  dontUseCmakeBuildDir = true;
+
+  nativeBuildInputs = [ cmake pkgconfig gengetopt flex byacc ];
+  buildInputs = [ libjson json_c gmp libpcap ];
+
+  outputs = [ "out" "man" ];
+
+  meta = with stdenv.lib; {
+    homepage = https://zmap.io/;
+    license = licenses.asl20;
+    description = "Fast single packet network scanner designed for Internet-wide network surveys";
+    maintainers = with maintainers; [ ma27 ];
+    platforms = platforms.unix;
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/security/zzuf/default.nix b/nixpkgs/pkgs/tools/security/zzuf/default.nix
new file mode 100644
index 000000000000..dc2cfe81746a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/security/zzuf/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub, autoconf, automake, libtool, pkgconfig }:
+
+stdenv.mkDerivation rec {
+  pname = "zzuf";
+  version = "0.15";
+
+  src = fetchFromGitHub {
+    owner = "samhocevar";
+    repo = "zzuf";
+    rev = "v${version}";
+    sha256 = "0li1s11xf32dafxq1jbnc8c63313hy9ry09dja2rymk9mza4x2n9";
+  };
+
+  buildInputs = [ autoconf automake libtool pkgconfig ];
+
+  preConfigure = "./bootstrap";
+
+  meta = with stdenv.lib; {
+    description = "Transparent application input fuzzer.";
+    homepage = http://caca.zoy.org/wiki/zzuf;
+    license = licenses.wtfpl;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ lihop ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/acct/default.nix b/nixpkgs/pkgs/tools/system/acct/default.nix
new file mode 100644
index 000000000000..669c91adf10d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/acct/default.nix
@@ -0,0 +1,30 @@
+{ fetchurl, stdenv }:
+
+stdenv.mkDerivation rec {
+  name = "acct-6.6.4";
+
+  src = fetchurl {
+    url = "mirror://gnu/acct/${name}.tar.gz";
+    sha256 = "0gv6m8giazshvgpvwbng98chpas09myyfw1zr2y7hqxib0mvy5ac";
+  };
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    description = "GNU Accounting Utilities, login and process accounting utilities";
+
+    longDescription = ''
+      The GNU Accounting Utilities provide login and process accounting
+      utilities for GNU/Linux and other systems.  It is a set of utilities
+      which reports and summarizes data about user connect times and process
+      execution statistics.
+    '';
+
+    license = licenses.gpl3Plus;
+
+    homepage = https://www.gnu.org/software/acct/;
+
+    maintainers = with maintainers; [ pSub ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/acpica-tools/default.nix b/nixpkgs/pkgs/tools/system/acpica-tools/default.nix
new file mode 100644
index 000000000000..269b6a82bbca
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/acpica-tools/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchurl, bison, flex }:
+
+stdenv.mkDerivation rec {
+  pname = "acpica-tools";
+  version = "20191018";
+
+  src = fetchurl {
+    url = "https://acpica.org/sites/acpica/files/acpica-unix-${version}.tar.gz";
+    sha256 = "0pz95fb1zvsj9238bg7a4vxl1svn5mnjg10sn5qvgr008q0v9782";
+  };
+
+  NIX_CFLAGS_COMPILE = "-O3";
+
+  enableParallelBuilding = true;
+
+  buildFlags = [
+    "acpibin"
+    "acpidump"
+    "acpiexec"
+    "acpihelp"
+    "acpinames"
+    "acpixtract"
+  ];
+
+  nativeBuildInputs = [ bison flex ];
+
+  installFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  meta = with stdenv.lib; {
+    description = "ACPICA Tools";
+    homepage = "https://www.acpica.org/";
+    license = with licenses; [ gpl2 bsd3 ];
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ tadfisher ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/actkbd/default.nix b/nixpkgs/pkgs/tools/system/actkbd/default.nix
new file mode 100644
index 000000000000..501311e96724
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/actkbd/default.nix
@@ -0,0 +1,34 @@
+{ fetchurl, stdenv }:
+
+stdenv.mkDerivation rec {
+  name = "actkbd-0.2.8";
+
+  src = fetchurl {
+    url = "http://users.softlab.ece.ntua.gr/~thkala/projects/actkbd/files/${name}.tar.bz2";
+    sha256 = "1ipb7k5q7k7p54is96ij2n74jfa6xc0llb9lpjwxhsqviqxn9slm";
+  };
+
+  preConfigure = ''
+    substituteInPlace Makefile \
+      --replace /usr/local $out \
+      --replace /etc $out/etc
+  '';
+
+  postInstall = ''
+    mkdir -p $out/share/doc/actkbd
+    cp -r README samples $out/share/doc/actkbd
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A keyboard shortcut daemon";
+    longDescription = ''
+      actkbd is a simple daemon that binds actions to keyboard events
+      directly on evdev interface (that is, no X11 required). It
+      recognises key combinations and can handle press, repeat and
+      release events.
+    '';
+    license = licenses.gpl2;
+    homepage = http://users.softlab.ece.ntua.gr/~thkala/projects/actkbd/;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/amtterm/default.nix b/nixpkgs/pkgs/tools/system/amtterm/default.nix
new file mode 100644
index 000000000000..7e92fc06b2d7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/amtterm/default.nix
@@ -0,0 +1,28 @@
+{ fetchurl, stdenv, makeWrapper, perl, perlPackages }:
+
+
+stdenv.mkDerivation rec {
+  pname = "amtterm";
+  version = "1.6-1";
+
+  buildInputs = with perlPackages; [ perl SOAPLite ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  src = fetchurl {
+    url = "https://www.kraxel.org/cgit/amtterm/snapshot/${pname}-${version}.tar.gz";
+    sha256 = "1jxcsqkag2bxmrnr4m6g88sln1j2d9liqlna57fj8kkc85316vlc";
+  };
+
+  makeFlags = [ "prefix=$(out)" "STRIP=" ];
+
+  postInstall =
+    "wrapProgram $out/bin/amttool --prefix PERL5LIB : $PERL5LIB";
+
+  meta = with stdenv.lib;
+    { description = "Intel AMT® SoL client + tools";
+      homepage = https://www.kraxel.org/cgit/amtterm/;
+      license = licenses.gpl2;
+      maintainers = [ maintainers.ehmry ];
+      platforms = platforms.linux;
+    };
+}
diff --git a/nixpkgs/pkgs/tools/system/at/default.nix b/nixpkgs/pkgs/tools/system/at/default.nix
new file mode 100644
index 000000000000..fded1da861d4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/at/default.nix
@@ -0,0 +1,59 @@
+{ stdenv, fetchurl, fetchpatch, bison, flex, pam, perl
+, sendmailPath ? "/run/wrappers/bin/sendmail"
+, atWrapperPath ? "/run/wrappers/bin/at"
+}:
+
+stdenv.mkDerivation rec {
+  pname = "at";
+  version = "3.1.23";
+
+  src = fetchurl {
+    # Debian is apparently the last location where it can be found.
+    url = "mirror://debian/pool/main/a/at/at_${version}.orig.tar.gz";
+    sha256 = "040pr2ivfbrhvrhzis97cpwfkzpr7nin33nc301aga5aajlhlicp";
+  };
+
+  patches = [
+    ./install.patch
+    (fetchpatch {
+      url = "https://raw.githubusercontent.com/riscv/riscv-poky/master/meta/recipes-extended/at/at/0001-remove-glibc-assumption.patch";
+      sha256 = "1rk4hskp0c1jqkanzdxf873i6jgki3xhrm609fsam8an8sl1njnm";
+    })
+  ];
+
+  nativeBuildInputs = [ bison flex perl /* for `prove` (tests) */ ];
+
+  buildInputs = [ pam ];
+
+  preConfigure =
+    ''
+      export SENDMAIL=${sendmailPath}
+      # Purity: force atd.pid to be placed in /var/run regardless of
+      # whether it exists now.
+      substituteInPlace ./configure --replace "test -d /var/run" "true"
+    '';
+
+  configureFlags = [
+    "--with-etcdir=/etc/at"
+    "--with-jobdir=/var/spool/atjobs"
+    "--with-atspool=/var/spool/atspool"
+    "--with-daemon_username=atd"
+    "--with-daemon_groupname=atd"
+  ];
+
+  doCheck = true;
+
+  # Ensure that "batch" can invoke the setuid "at" wrapper, if it exists, or
+  # else we get permission errors (on NixOS). "batch" is a shell script, so
+  # when the kernel executes it it drops setuid perms.
+  postInstall = ''
+    sed -i "6i test -x ${atWrapperPath} && exec ${atWrapperPath} -qb now  # exec doesn't return" "$out/bin/batch"
+  '';
+
+  meta = {
+    description = ''The classical Unix `at' job scheduling command'';
+    license = stdenv.lib.licenses.gpl2Plus;
+    homepage = https://packages.qa.debian.org/at;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/at/install.patch b/nixpkgs/pkgs/tools/system/at/install.patch
new file mode 100644
index 000000000000..41a35a789538
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/at/install.patch
@@ -0,0 +1,54 @@
+--- at-3.1.14/Makefile.in	2013-09-08 14:43:53.000000000 +0200
++++ at-3.1.14/Makefile.in	2014-07-27 20:42:04.017703443 +0200
+@@ -91,35 +91,28 @@
+ 	$(CC) -c $(CFLAGS) $(DEFS) $*.c
+ 
+ install: all
+-	$(INSTALL) -g root -o root -m 755 -d $(IROOT)$(etcdir)
+-	$(INSTALL) -g root -o root -m 755 -d $(IROOT)$(bindir)
+-	$(INSTALL) -g root -o root -m 755 -d $(IROOT)$(sbindir)
+-	$(INSTALL) -g root -o root -m 755 -d $(IROOT)$(docdir)
+-	$(INSTALL) -g root -o root -m 755 -d $(IROOT)$(atdocdir)
+-	$(INSTALL) -g $(DAEMON_GROUPNAME) -o $(DAEMON_USERNAME) -m 755 -d $(IROOT)$(ATSPOOL_DIR) $(IROOT)$(ATJOB_DIR)
+-	chmod 1770 $(IROOT)$(ATSPOOL_DIR) $(IROOT)$(ATJOB_DIR)
+-	touch $(IROOT)$(LFILE)
+-	chmod 600 $(IROOT)$(LFILE)
+-	chown $(DAEMON_USERNAME):$(DAEMON_GROUPNAME) $(IROOT)$(LFILE)
+-	test -f $(IROOT)$(etcdir)/at.allow || test -f $(IROOT)$(etcdir)/at.deny || $(INSTALL) -o root -g $(DAEMON_GROUPNAME) -m 640 at.deny $(IROOT)$(etcdir)/
+-	$(INSTALL) -g $(DAEMON_GROUPNAME) -o $(DAEMON_USERNAME) -m 6755 at $(IROOT)$(bindir)
++	$(INSTALL) -m 755 -d $(IROOT)$(bindir)
++	$(INSTALL) -m 755 -d $(IROOT)$(sbindir)
++	$(INSTALL) -m 755 -d $(IROOT)$(docdir)
++	$(INSTALL) -m 755 -d $(IROOT)$(atdocdir)
++	$(INSTALL) -m 0755 at $(IROOT)$(bindir)
+ 	$(LN_S) -f at $(IROOT)$(bindir)/atq
+ 	$(LN_S) -f at $(IROOT)$(bindir)/atrm
+-	$(INSTALL) -g root -o root -m 755 batch $(IROOT)$(bindir)
+-	$(INSTALL) -d -o root -g root -m 755 $(IROOT)$(man1dir)
+-	$(INSTALL) -d -o root -g root -m 755 $(IROOT)$(man5dir)
+-	$(INSTALL) -d -o root -g root -m 755 $(IROOT)$(man8dir)
+-	$(INSTALL) -g root -o root -m 755 atd $(IROOT)$(sbindir)
+-	$(INSTALL) -g root -o root -m 755 atrun $(IROOT)$(sbindir)
+-	$(INSTALL) -g root -o root -m 644 at.1 $(IROOT)$(man1dir)/
++	$(INSTALL) -m 755 batch $(IROOT)$(bindir)
++	$(INSTALL) -d -m 755 $(IROOT)$(man1dir)
++	$(INSTALL) -d -m 755 $(IROOT)$(man5dir)
++	$(INSTALL) -d -m 755 $(IROOT)$(man8dir)
++	$(INSTALL) -m 755 atd $(IROOT)$(sbindir)
++	$(INSTALL) -m 755 atrun $(IROOT)$(sbindir)
++	$(INSTALL) -m 644 at.1 $(IROOT)$(man1dir)/
+ 	cd $(IROOT)$(man1dir) && $(LN_S) -f at.1 atq.1 && $(LN_S) -f at.1 batch.1 && $(LN_S) -f at.1 atrm.1
+-	$(INSTALL) -g root -o root -m 644 atd.8 $(IROOT)$(man8dir)/
++	$(INSTALL) -m 644 atd.8 $(IROOT)$(man8dir)/
+ 	sed "s,\$${exec_prefix},$(exec_prefix),g" <atrun.8>tmpman
+-	$(INSTALL) -g root -o root -m 644 tmpman $(IROOT)$(man8dir)/atrun.8
++	$(INSTALL) -m 644 tmpman $(IROOT)$(man8dir)/atrun.8
+ 	rm -f tmpman
+-	$(INSTALL) -g root -o root -m 644 at.allow.5 $(IROOT)$(man5dir)/
++	$(INSTALL) -m 644 at.allow.5 $(IROOT)$(man5dir)/
+ 	cd $(IROOT)$(man5dir) && $(LN_S) -f at.allow.5 at.deny.5
+-	$(INSTALL) -g root -o root -m 644 $(DOCS) $(IROOT)$(atdocdir)
++	$(INSTALL) -m 644 $(DOCS) $(IROOT)$(atdocdir)
+ 	rm -f $(IROOT)$(mandir)/cat1/at.1* $(IROOT)$(mandir)/cat1/batch.1* \
+ 		$(IROOT)$(mandir)/cat1/atq.1*
+ 	rm -f $(IROOT)$(mandir)/cat1/atd.8*
diff --git a/nixpkgs/pkgs/tools/system/augeas/default.nix b/nixpkgs/pkgs/tools/system/augeas/default.nix
new file mode 100644
index 000000000000..08731cd6db23
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/augeas/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchurl, pkgconfig, readline, libxml2 }:
+
+stdenv.mkDerivation rec {
+  pname = "augeas";
+  version = "1.12.0";
+
+  src = fetchurl {
+    url = "http://download.augeas.net/${pname}-${version}.tar.gz";
+    sha256 = "11ybhb13wkkilsn7b416a1dn61m1xrq0lbdpkhp5w61jrk4l469j";
+  };
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ readline libxml2 ];
+
+  meta = with stdenv.lib; {
+    description = "Configuration editing tool";
+    license = licenses.lgpl2;
+    homepage = http://augeas.net/;
+    maintainers = with maintainers; [ offline ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/awstats/default.nix b/nixpkgs/pkgs/tools/system/awstats/default.nix
new file mode 100644
index 000000000000..6d191f33a64d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/awstats/default.nix
@@ -0,0 +1,62 @@
+{ stdenv, fetchurl, perlPackages, jdk }:
+
+perlPackages.buildPerlPackage rec {
+  pname = "awstats";
+  version = "7.7";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/awstats/${pname}-${version}.tar.gz";
+    sha256 = "0z3p77jnpjilajs9yv87r8xla2x1gjqlvrhpbgbh5ih73386v3j2";
+  };
+
+  postPatch = ''
+    substituteInPlace wwwroot/cgi-bin/awstats.pl \
+      --replace /usr/share/awstats/ "$out/wwwroot/cgi-bin/"
+  '';
+
+  outputs = [ "bin" "out" "doc" ]; # bin just links the user-run executable
+  propagatedBuildOutputs = [ ]; # otherwise out propagates bin -> cycle
+
+  buildInputs = with perlPackages; [ ]; # plugins will need some
+
+  preConfigure = ''
+    touch Makefile.PL
+    patchShebangs .
+  '';
+
+  # build our own JAR
+  preBuild = ''
+    (
+      cd wwwroot/classes/src
+      rm ../*.jar
+      PATH="${jdk}/bin" "$(type -P perl)" Makefile.pl
+      test -f ../*.jar
+    )
+  '';
+
+  doCheck = false;
+
+  installPhase = ''
+    mkdir "$out"
+    mv wwwroot "$out/wwwroot"
+    rm -r "$out/wwwroot/classes/src/"
+
+    mkdir -p "$out/share/awstats"
+    mv tools "$out/share/awstats/tools"
+
+    mkdir -p "$bin/bin"
+    ln -s "$out/wwwroot/cgi-bin/awstats.pl" "$bin/bin/awstats"
+
+    mkdir -p "$doc/share/doc"
+    mv README.md docs/
+    mv docs "$doc/share/doc/awstats"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Real-time logfile analyzer to get advanced statistics";
+    homepage = http://awstats.org;
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/system/bar/default.nix b/nixpkgs/pkgs/tools/system/bar/default.nix
new file mode 100644
index 000000000000..a295da844af2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/bar/default.nix
@@ -0,0 +1,18 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation {
+  name = "bar-1.11.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/clpbar/clpbar/bar-1.11.1/bar_1.11.1.tar.gz";
+    sha256 = "00v5cb6vzizyyhflgr62d3k8dqc0rg6wdgfyyk11c0s0r32mw3zs";
+  };
+
+  meta = {
+    description = "Console progress bar";
+    homepage = http://clpbar.sourceforge.net/;
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = [ stdenv.lib.maintainers.rdnetto ];
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/bfs/default.nix b/nixpkgs/pkgs/tools/system/bfs/default.nix
new file mode 100644
index 000000000000..1387a6c6ed17
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/bfs/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, libcap, acl }:
+
+stdenv.mkDerivation rec {
+  pname = "bfs";
+  version = "1.5.2";
+
+  src = fetchFromGitHub {
+    repo = "bfs";
+    owner = "tavianator";
+    rev = version;
+    sha256 = "04jgah6yvz3i2bwrv1ki2nmj1yinba7djbfq8n8ism4gffsza9dz";
+  };
+
+  buildInputs = stdenv.lib.optionals stdenv.isLinux [ libcap acl ];
+
+  # Disable LTO on darwin. See https://github.com/NixOS/nixpkgs/issues/19098
+  preConfigure = stdenv.lib.optionalString stdenv.isDarwin ''
+    substituteInPlace Makefile --replace "-flto -DNDEBUG" "-DNDEBUG"
+  '';
+
+  makeFlags = [ "PREFIX=$(out)" ];
+  buildFlags = [ "release" ]; # "release" enables compiler optimizations
+
+  meta = with stdenv.lib; {
+    description = "A breadth-first version of the UNIX find command";
+    longDescription = ''
+      bfs is a variant of the UNIX find command that operates breadth-first rather than
+      depth-first. It is otherwise intended to be compatible with many versions of find.
+    '';
+    homepage = https://github.com/tavianator/bfs;
+    license = licenses.bsd0;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ yesbox ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/chase/default.nix b/nixpkgs/pkgs/tools/system/chase/default.nix
new file mode 100644
index 000000000000..6c48d3341ecc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/chase/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl ,pkgconfig, libatomic_ops , boehmgc }:
+
+stdenv.mkDerivation rec {
+  pname = "chase";
+  version = "0.5.2";
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libatomic_ops boehmgc ] ;
+  src = fetchurl {
+    url = "mirror://debian/pool/main/c/chase/chase_${version}.orig.tar.gz";
+    sha256 = "68d95c2d4dc45553b75790fcea4413b7204a2618dff148116ca9bdb0310d737f";
+  };
+
+  doCheck = true;
+  makeFlags = [ "-e" ];
+  makeFlagsArray="LIBS=-lgc";
+
+  meta = with stdenv.lib ; {
+    description = "Follow a symlink and print out its target file";
+    longDescription = ''
+    A commandline program that chases symbolic filesystems links to the original file
+    '';
+    homepage = https://qa.debian.org/developer.php?login=rotty%40debian.org;
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.polyrod ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/clinfo/default.nix b/nixpkgs/pkgs/tools/system/clinfo/default.nix
new file mode 100644
index 000000000000..dd6e3d4a84b8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/clinfo/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub, ocl-icd, opencl-headers }:
+
+stdenv.mkDerivation rec {
+  pname = "clinfo";
+  version = "2.2.18.04.06";
+
+    src = fetchFromGitHub {
+      owner = "Oblomov";
+      repo = "clinfo";
+      rev = version;
+      sha256 = "0y2q0lz5yzxy970b7w7340vp4fl25vndahsyvvrywcrn51ipgplx";
+    };
+
+  buildInputs = [ ocl-icd opencl-headers ];
+
+  NIX_CFLAGS_COMPILE = [ "-Wno-error=stringop-truncation" ];
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  meta = with stdenv.lib; {
+    description = "Print all known information about all available OpenCL platforms and devices in the system";
+    homepage = https://github.com/Oblomov/clinfo;
+    license = licenses.cc0;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ athas ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/collectd/data.nix b/nixpkgs/pkgs/tools/system/collectd/data.nix
new file mode 100644
index 000000000000..378eb62d6cc5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/collectd/data.nix
@@ -0,0 +1,14 @@
+{ stdenv, collectd }:
+
+stdenv.mkDerivation {
+  inherit (collectd) meta version;
+
+  pname = "collectd-data";
+
+  phases = [ "installPhase" ];
+
+  installPhase = ''
+    mkdir -p $out/share/collectd
+    cp ${collectd}/share/collectd/*.{db,conf} $out/share/collectd/
+  '';
+}
diff --git a/nixpkgs/pkgs/tools/system/collectd/default.nix b/nixpkgs/pkgs/tools/system/collectd/default.nix
new file mode 100644
index 000000000000..517d0afb95f2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/collectd/default.nix
@@ -0,0 +1,58 @@
+{ stdenv, fetchurl, fetchpatch, darwin, callPackage
+, autoreconfHook
+, pkgconfig
+, libtool
+, ...
+}@args:
+let
+  plugins = callPackage ./plugins.nix args;
+in
+stdenv.mkDerivation rec {
+  version = "5.8.1";
+  pname = "collectd";
+
+  src = fetchurl {
+    url = "https://collectd.org/files/${pname}-${version}.tar.bz2";
+    sha256 = "1njk8hh56gb755xafsh7ahmqr9k2d4lam4ddj7s7fqz0gjigv5p7";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/rpv-tomsk/collectd/commit/d5a3c020d33cc33ee8049f54c7b4dffcd123bf83.patch";
+      sha256 = "1n65zw4d2k2bxapayaaw51ym7hy72a0cwi2abd8jgxcw3d0m5g15";
+    })
+  ];
+
+  nativeBuildInputs = [ pkgconfig autoreconfHook ];
+  buildInputs = [
+    libtool
+  ] ++ stdenv.lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.ApplicationServices
+  ] ++ plugins.buildInputs;
+
+  configureFlags = [
+    "--localstatedir=/var"
+    "--disable-werror"
+  ] ++ plugins.configureFlags;
+
+  # do not create directories in /var during installPhase
+  postConfigure = ''
+     substituteInPlace Makefile --replace '$(mkinstalldirs) $(DESTDIR)$(localstatedir)/' '#'
+  '';
+
+  postInstall = ''
+    if [ -d $out/share/collectd/java ]; then
+      mv $out/share/collectd/java $out/share/
+    fi
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "Daemon which collects system performance statistics periodically";
+    homepage = https://collectd.org;
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ bjornfor fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/collectd/plugins.nix b/nixpkgs/pkgs/tools/system/collectd/plugins.nix
new file mode 100644
index 000000000000..f1a87847a5ce
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/collectd/plugins.nix
@@ -0,0 +1,347 @@
+{ stdenv
+, curl
+, darwin
+, hiredis
+, iptables
+, jdk
+, libatasmart
+, libdbi
+, libgcrypt
+, libmemcached, cyrus_sasl
+, libmodbus
+, libmicrohttpd
+, libmnl
+, libmysqlclient
+, libnotify, gdk-pixbuf
+, liboping
+, libpcap
+, libsigrok
+, libvirt
+, libxml2
+, libapparmor, libcap_ng, numactl
+, lvm2
+, lua
+, lm_sensors
+, mongoc
+, mosquitto
+, net-snmp
+, postgresql
+, protobufc
+, python
+, rabbitmq-c
+, rdkafka
+, riemann_c_client
+, rrdtool
+, udev
+, varnish
+, yajl
+# Defaults to `null` for all supported plugins,
+# list of plugin names for a custom build
+, enabledPlugins ? null
+, ...
+}:
+
+let
+  # All plugins and their dependencies.
+  # Please help complete this!
+  plugins = {
+    aggregation = {};
+    amqp = {
+      buildInputs = [ yajl ] ++
+        stdenv.lib.optionals stdenv.isLinux [ rabbitmq-c ];
+    };
+    apache = {
+      buildInputs = [ curl ];
+    };
+    apcups = {};
+    apple_sensors = {};
+    aquaero = {};
+    ascent = {
+      buildInputs = [ curl libxml2 ];
+    };
+    barometer = {};
+    battery = {
+      buildInputs = stdenv.lib.optionals stdenv.isDarwin [
+        darwin.apple_sdk.frameworks.IOKit
+      ];
+    };
+    bind = {
+      buildInputs = [ curl libxml2 ];
+    };
+    ceph = {
+      buildInputs = [ yajl ];
+    };
+    cgroups = {};
+    chrony = {};
+    conntrack = {};
+    contextswitch = {};
+    cpu = {};
+    cpufreq = {};
+    cpusleep = {};
+    csv = {};
+    curl = {
+      buildInputs = [ curl ];
+    };
+    curl_json = {
+      buildInputs = [ curl yajl ];
+    };
+    curl_xml = {
+      buildInputs = [ curl libxml2 ];
+    };
+    dbi = {
+      buildInputs = [ libdbi ];
+    };
+    df = {};
+    disk = {
+      buildInputs = stdenv.lib.optionals stdenv.isLinux [
+        udev
+      ] ++ stdenv.lib.optionals stdenv.isDarwin [
+        darwin.apple_sdk.frameworks.IOKit
+      ];
+    };
+    dns = {
+      buildInputs = [ libpcap ];
+    };
+    dpdkevents = {};
+    dpdkstat = {};
+    drbd = {};
+    email = {};
+    entropy = {};
+    ethstat = {};
+    exec = {};
+    fhcount = {};
+    filecount = {};
+    fscache = {};
+    gmond = {};
+    gps = {};
+    grpc = {};
+    hddtemp = {};
+    hugepages = {};
+    intel_pmu = {};
+    intel_rdt = {};
+    interface = {};
+    ipc = {};
+    ipmi = {};
+    iptables = {
+      buildInputs = [
+        libpcap
+      ] ++ stdenv.lib.optionals stdenv.isLinux [
+        iptables libmnl
+      ];
+    };
+    ipvs = {};
+    irq = {};
+    java = {
+      buildInputs = [ jdk libgcrypt libxml2 ];
+    };
+    load = {};
+    logfile = {};
+    log_logstash = {
+      buildInputs = [ yajl ];
+    };
+    lpar = {};
+    lua = {
+      buildInputs = [ lua ];
+    };
+    lvm = {};
+    madwifi = {};
+    match_empty_counter = {};
+    match_hashed = {};
+    match_regex = {};
+    match_timediff = {};
+    match_value = {};
+    mbmon = {};
+    mcelog = {};
+    md = {};
+    memcachec = {
+      buildInputs = [ libmemcached cyrus_sasl ];
+    };
+    memcached = {};
+    memory = {};
+    mic = {};
+    modbus = {
+      buildInputs = stdenv.lib.optionals stdenv.isLinux [ libmodbus ];
+    };
+    mqtt = {
+      buildInputs = [ mosquitto ];
+    };
+    multimeter = {};
+    mysql = {
+      buildInputs = stdenv.lib.optionals (libmysqlclient != null) [
+        libmysqlclient
+      ];
+    };
+    netapp = {};
+    netlink = {
+      buildInputs = [
+        libpcap
+      ] ++ stdenv.lib.optionals stdenv.isLinux [
+        libmnl
+      ];
+    };
+    network = {
+      buildInputs = [ libgcrypt ];
+    };
+    nfs = {};
+    nginx = {
+      buildInputs = [ curl ];
+    };
+    notify_desktop = {
+      buildInputs = [ libnotify gdk-pixbuf ];
+    };
+    notify_email = {};
+    notify_nagios = {};
+    ntpd = {};
+    numa = {};
+    nut = {};
+    olsrd = {};
+    onewire = {};
+    openldap = {};
+    openvpn = {};
+    oracle = {};
+    ovs_events = {
+      buildInputs = [ yajl ];
+    };
+    ovs_stats = {
+      buildInputs = [ yajl ];
+    };
+    perl = {};
+    pf = {};
+    pinba = {
+      buildInputs = [ protobufc ];
+    };
+    ping = {
+      buildInputs = [ liboping ];
+    };
+    postgresql = {
+      buildInputs = [ postgresql ];
+    };
+    powerdns = {};
+    processes = {};
+    protocols = {};
+    python = {
+      buildInputs = [ python ];
+    };
+    redis = {
+      buildInputs = [ hiredis ];
+    };
+    routeros = {};
+    rrdcached = {
+      buildInputs = [ rrdtool libxml2 ];
+    };
+    rrdtool = {
+      buildInputs = [ rrdtool libxml2 ];
+    };
+    sensors = {
+      buildInputs = stdenv.lib.optionals stdenv.isLinux [ lm_sensors ];
+    };
+    serial = {};
+    sigrok = {
+      buildInputs = stdenv.lib.optionals stdenv.isLinux [ libsigrok udev ];
+    };
+    smart = {
+      buildInputs = stdenv.lib.optionals stdenv.isLinux [ libatasmart udev ];
+    };
+    snmp = {
+      buildInputs = stdenv.lib.optionals stdenv.isLinux [ net-snmp ];
+    };
+    snmp_agent = {
+      buildInputs = stdenv.lib.optionals stdenv.isLinux [ net-snmp ];
+    };
+    statsd = {};
+    swap = {};
+    synproxy = {};
+    syslog = {};
+    table = {};
+    tail_csv = {};
+    tail = {};
+    tape = {};
+    target_notification = {};
+    target_replace = {};
+    target_scale = {};
+    target_set = {};
+    target_v5upgrade = {};
+    tcpconns = {};
+    teamspeak2 = {};
+    ted = {};
+    thermal = {};
+    threshold = {};
+    tokyotyrant = {};
+    turbostat = {};
+    unixsock = {};
+    uptime = {};
+    users = {};
+    uuid = {};
+    varnish = {
+      buildInputs = [ curl varnish ];
+    };
+    virt = {
+      buildInputs = [ libvirt libxml2 yajl ] ++
+        stdenv.lib.optionals stdenv.isLinux [ lvm2 udev
+          # those might be no longer required when https://github.com/NixOS/nixpkgs/pull/51767
+          # is merged
+          libapparmor numactl libcap_ng
+        ];
+    };
+    vmem = {};
+    vserver = {};
+    wireless = {};
+    write_graphite = {};
+    write_http = {
+      buildInputs = [ curl yajl ];
+    };
+    write_kafka = {
+      buildInputs = [ yajl rdkafka ];
+    };
+    write_log = {
+      buildInputs = [ yajl ];
+    };
+    write_mongodb = {
+      buildInputs = [ mongoc ];
+    };
+    write_prometheus = {
+      buildInputs = [ protobufc libmicrohttpd ];
+    };
+    write_redis = {
+      buildInputs = [ hiredis ];
+    };
+    write_riemann = {
+      buildInputs = [ protobufc riemann_c_client ];
+    };
+    write_sensu = {};
+    write_tsdb = {};
+    xencpu = {};
+    xmms = {};
+    zfs_arc = {};
+    zone = {};
+    zookeeper = {};
+  };
+
+  configureFlags =
+    if enabledPlugins == null
+    then []
+    else (map (plugin: "--enable-${plugin}") enabledPlugins) ++
+    (map (plugin: "--disable-${plugin}")
+      (builtins.filter (plugin: ! builtins.elem plugin enabledPlugins)
+        (builtins.attrNames plugins))
+    );
+
+  pluginBuildInputs = plugin:
+        if ! builtins.hasAttr plugin plugins
+        then throw "Unknown collectd plugin: ${plugin}"
+        else
+          let
+            pluginAttrs = builtins.getAttr plugin plugins;
+          in
+          if pluginAttrs ? "buildInputs"
+          then pluginAttrs.buildInputs
+          else [];
+
+  buildInputs =
+    if enabledPlugins == null
+    then builtins.concatMap pluginBuildInputs
+      (builtins.attrNames plugins)
+    else builtins.concatMap pluginBuildInputs enabledPlugins;
+in {
+  inherit configureFlags buildInputs;
+}
diff --git a/nixpkgs/pkgs/tools/system/colorls/Gemfile b/nixpkgs/pkgs/tools/system/colorls/Gemfile
new file mode 100644
index 000000000000..0d41bd279ccb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/colorls/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'colorls'
diff --git a/nixpkgs/pkgs/tools/system/colorls/Gemfile.lock b/nixpkgs/pkgs/tools/system/colorls/Gemfile.lock
new file mode 100644
index 000000000000..583fd3b12028
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/colorls/Gemfile.lock
@@ -0,0 +1,21 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    clocale (0.0.4)
+    colorls (1.2.0)
+      clocale (~> 0)
+      filesize (~> 0)
+      manpages (~> 0)
+      rainbow (>= 2.2, < 4.0)
+    filesize (0.2.0)
+    manpages (0.6.1)
+    rainbow (3.0.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  colorls
+
+BUNDLED WITH
+   1.17.2
diff --git a/nixpkgs/pkgs/tools/system/colorls/default.nix b/nixpkgs/pkgs/tools/system/colorls/default.nix
new file mode 100644
index 000000000000..1631b9f72180
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/colorls/default.nix
@@ -0,0 +1,18 @@
+{ lib, bundlerApp, ruby, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "colorls";
+
+  gemdir = ./.;
+  exes = [ "colorls" ];
+
+  passthru.updateScript = bundlerUpdateScript "colorls";
+
+  meta = with lib; {
+    description = "Prettified LS";
+    homepage    = https://github.com/athityakumar/colorls;
+    license     = with licenses; mit;
+    maintainers = with maintainers; [ lukebfox nicknovitski ];
+    platforms   = ruby.meta.platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/colorls/gemset.nix b/nixpkgs/pkgs/tools/system/colorls/gemset.nix
new file mode 100644
index 000000000000..e7264a895a2c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/colorls/gemset.nix
@@ -0,0 +1,53 @@
+{
+  clocale = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "065pb7hzmd6zndbln4ag94bjpw3hsm71jagsgiqskpxhgrbq03jz";
+      type = "gem";
+    };
+    version = "0.0.4";
+  };
+  colorls = {
+    dependencies = ["clocale" "filesize" "manpages" "rainbow"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bcrig88ipzj43lnkrb5qmimdrml4lx15rcrhr6m2hxb0pks8932";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  filesize = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17p7rf1x7h3ivaznb4n4kmxnnzj25zaviryqgn2n12v2kmibhp8g";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+  manpages = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11p6ilnfda6af15ks3xiz2pr0hkvdvadnk1xm4ahqlf84dld3fnd";
+      type = "gem";
+    };
+    version = "0.6.1";
+  };
+  rainbow = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bb2fpjspydr6x0s8pn1pqkzmxszvkfapv0p4627mywl7ky4zkhk";
+      type = "gem";
+    };
+    version = "3.0.0";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/system/confd/default.nix b/nixpkgs/pkgs/tools/system/confd/default.nix
new file mode 100644
index 000000000000..e7a5dc86578a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/confd/default.nix
@@ -0,0 +1,19 @@
+{ buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "confd";
+  version = "0.9.0";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/kelseyhightower/confd";
+  subPackages = [ "./" ];
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "kelseyhightower";
+    repo = "confd";
+    sha256 = "0rz533575hdcln8ciqaz79wbnga3czj243g7fz8869db6sa7jwlr";
+  };
+
+  goDeps = ./deps.nix;
+}
diff --git a/nixpkgs/pkgs/tools/system/confd/deps.nix b/nixpkgs/pkgs/tools/system/confd/deps.nix
new file mode 100644
index 000000000000..74467ddf9cc7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/confd/deps.nix
@@ -0,0 +1,74 @@
+[
+  {
+    goPackagePath = "github.com/Sirupsen/logrus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Sirupsen/logrus";
+      rev = "be52937128b38f1d99787bb476c789e2af1147f1";
+      sha256 = "1m6vvd4pg4lwglhk54lv5mf6cc8h7bi0d9zb3gar4crz531r66y4";
+    };
+  }
+  {
+    goPackagePath = "github.com/coreos/go-etcd";
+    fetch = {
+      type = "git";
+      url = "https://github.com/coreos/go-etcd";
+      rev = "9847b93751a5fbaf227b893d172cee0104ac6427";
+      sha256 = "1ihq01ayqzxvn6hca5j00vl189vi5lm78f0fy2wpk5mrm3xi01l4";
+    };
+  }
+  {
+    goPackagePath = "github.com/ugorji/go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ugorji/go";
+      rev = "03e33114d4d60a1f37150325e15f51b0fa6fc4f6";
+      sha256 = "01kdzgx23cgb4k867m1pvsw14hhdr9jf2frqy6i4j4221055m57v";
+    };
+  }
+  {
+    goPackagePath = "github.com/samuel/go-zookeeper";
+    fetch = {
+      type = "git";
+      url = "https://github.com/samuel/go-zookeeper";
+      rev = "5bb5cfc093ad18a28148c578f8632cfdb4d802e4";
+      sha256 = "1kpx1ymh7rds0b2km291idnyqi0zck74nd8hnk72crgz7wmpqv6z";
+    };
+  }
+  {
+    goPackagePath = "github.com/BurntSushi/toml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/BurntSushi/toml";
+      rev = "056c9bc7be7190eaa7715723883caffa5f8fa3e4";
+      sha256 = "0gkgkw04ndr5y7hrdy0r4v2drs5srwfcw2bs1gyas066hwl84xyw";
+    };
+  }
+  {
+    goPackagePath = "github.com/kelseyhightower/memkv";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kelseyhightower/memkv";
+      rev = "7f9c7f36f45ba80c62fe22779ee78d9b4ca36580";
+      sha256 = "090x65kr3gqh8fc8z4rm9hc2r0v0k7rfm5vsbmhdh21f48ixw540";
+    };
+  }
+  {
+    goPackagePath = "github.com/armon/consul-api";
+    fetch = {
+      type = "git";
+      url = "https://github.com/armon/consul-api";
+      rev = "f79efe463cdbb62f6d5a55f879a63ec554eb13e5";
+      sha256 = "1rkmzfhsazj9p2b6ywvs8yramzvxfxyvplzxi0ldvhcv04887gcp";
+    };
+  }
+  {
+    goPackagePath = "github.com/garyburd/redigo";
+    fetch = {
+      type = "git";
+      url = "https://github.com/garyburd/redigo";
+      rev = "535138d7bcd717d6531c701ef5933d98b1866257";
+      sha256 = "1m7nc1gvv5yqnq8ii75f33485il6y6prf8gxl97dimsw94qccc5v";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/system/consul-template/default.nix b/nixpkgs/pkgs/tools/system/consul-template/default.nix
new file mode 100644
index 000000000000..ad120dd6481e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/consul-template/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "consul-template";
+  version = "0.19.4";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/hashicorp/consul-template";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "hashicorp";
+    repo = "consul-template";
+    sha256 = "06agjzpax45gw7s9b69cz9w523nx7ksikqcg0z0vipwrp7pwrydd";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/hashicorp/consul-template/;
+    description = "Generic template rendering and notifications with Consul";
+    platforms = platforms.linux ++ platforms.darwin;
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ pradeepchhetri ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/cron/default.nix b/nixpkgs/pkgs/tools/system/cron/default.nix
new file mode 100644
index 000000000000..aa047ca4a681
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/cron/default.nix
@@ -0,0 +1,47 @@
+{stdenv, fetchurl, vim, sendmailPath ? "/usr/sbin/sendmail"}:
+
+stdenv.mkDerivation {
+  name = "cron-4.1";
+  src = fetchurl {
+    url = ftp://ftp.isc.org/isc/cron/cron_4.1.shar;
+    sha256 = "16n3dras4b1jh7g958nz1k54pl9pg5fwb3fvjln8z67varvq6if4";
+  };
+
+  unpackCmd = "(mkdir cron && cd cron && sh $curSrc)";
+
+  hardeningEnable = [ "pie" ];
+
+  preBuild = ''
+    # do not set sticky bit in /nix/store
+    substituteInPlace Makefile --replace ' -o root' ' ' --replace 111 755 --replace 4755 0755
+    # do not strip during install, broken on cross and we'll do ourselves as needed
+    substituteInPlace Makefile --replace ' -s cron' ' cron'
+    makeFlags="DESTROOT=$out CC=$CC"
+
+    # We want to ignore the $glibc/include/paths.h definition of
+    # sendmail path.
+    # Also set a usable default PATH (#16518).
+    cat >> pathnames.h <<__EOT__
+    #undef _PATH_SENDMAIL
+    #define _PATH_SENDMAIL "${sendmailPath}"
+
+    #undef _PATH_VI
+    #define _PATH_VI "${vim}/bin/vim"
+
+    #undef _PATH_DEFPATH
+    #define _PATH_DEFPATH "/run/wrappers/bin:/nix/var/nix/profiles/default/bin:/run/current-system/sw/bin:/usr/bin:/bin"
+    __EOT__
+
+    # Implicit saved uids do not work here due to way NixOS uses setuid wrappers
+    # (#16518).
+    echo "#undef HAVE_SAVED_UIDS" >> externs.h
+  '';
+
+  preInstall = "mkdir -p $out/bin $out/sbin $out/share/man/man1 $out/share/man/man5 $out/share/man/man8";
+
+  meta = with stdenv.lib; {
+    description = "Daemon for running commands at specific times (Vixie Cron)";
+    license = licenses.bsd0;
+    platforms = with platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/ctop/default.nix b/nixpkgs/pkgs/tools/system/ctop/default.nix
new file mode 100644
index 000000000000..4f492def1624
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/ctop/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "ctop";
+  version = "0.7.3";
+
+  src = fetchFromGitHub {
+    owner = "bcicen";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0y72l65xgfqrgghzbm1zcy776l5m31z0gn6vfr689zyi3k3f4kh8";
+  };
+
+  modSha256 = "0wxv6yzlgki7047qszx9p9xpph95bg097jkgaa0b3wbpx8vg7qml";
+
+  buildFlagsArray = [ "-ldflags=-s -w -X main.version=${version} -X main.build=v${version}" ];
+
+  meta = with lib; {
+    description = "Top-like interface for container metrics";
+    homepage = "https://ctop.sh/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ apeyroux marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/daemon/default.nix b/nixpkgs/pkgs/tools/system/daemon/default.nix
new file mode 100644
index 000000000000..76f53b55f3db
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/daemon/default.nix
@@ -0,0 +1,25 @@
+{stdenv, fetchurl, perl}:
+
+stdenv.mkDerivation {
+  name = "daemon-0.6.4";
+  src = fetchurl {
+    url = http://libslack.org/daemon/download/daemon-0.6.4.tar.gz;
+    sha256 = "18aw0f8k3j30xqwv4z03962kdpqd10nf1w9liihylmadlx5fmff4";
+  };
+  makeFlags = [ "PREFIX=$(out)" ];
+  buildInputs = [ perl ];
+
+  meta = {
+    description = "Daemon turns other process into daemons";
+    longDescription = ''
+      Daemon turns other process into daemons. There are many tasks that need
+      to be performed to correctly set up a daemon process. This can be tedious.
+      Daemon performs these tasks for other processes. This is useful for
+      writing daemons in languages other than C, C++ or Perl (e.g. /bin/sh,
+      Java).
+    '';
+    license = stdenv.lib.licenses.gpl2Plus;
+    maintainers = [ stdenv.lib.maintainers.sander ];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/daemonize/default.nix b/nixpkgs/pkgs/tools/system/daemonize/default.nix
new file mode 100644
index 000000000000..205b693dd924
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/daemonize/default.nix
@@ -0,0 +1,18 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "daemonize";
+  version = "1.7.8";
+
+  src = fetchurl {
+    url    = "https://github.com/bmc/daemonize/archive/release-${version}.tar.gz";
+    sha256 = "0q2c3i3si3k7wfhl6fyckkmkc81yp67pz52p3ggis79p4nczri10";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Runs a command as a Unix daemon";
+    homepage    = http://software.clapper.org/daemonize/;
+    license     = licenses.bsd3;
+    platforms = with platforms; linux ++ freebsd ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/das_watchdog/default.nix b/nixpkgs/pkgs/tools/system/das_watchdog/default.nix
new file mode 100644
index 000000000000..29767c879ffb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/das_watchdog/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchgit, libgtop, xmessage, which, pkgconfig }:
+
+stdenv.mkDerivation {
+  pname = "das_watchdog";
+  version = "git-2015-09-12";
+
+  src = fetchgit {
+    url = "https://github.com/kmatheussen/das_watchdog.git";
+    rev = "5ac0db0b98e5b4e690aca0aa7fb6ec60ceddcb06";
+    sha256 = "02y1vfb3wh4908xjj1kpyf8kgxk29x8dw7yl3pnl220qz2gi99vr";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libgtop xmessage which ];
+
+  installPhase = ''
+    mkdir -p $out/bin/
+    cp das_watchdog $out/bin/
+    cp test_rt $out/bin/
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/kmatheussen/das_watchdog;
+    description = "A general watchdog for the linux operating system";
+    longDescription = ''
+      It should run in the background at all times to ensure a realtime process
+      won't hang the machine.";
+    '';
+    license = licenses.free;
+    maintainers = [ maintainers.magnetophon ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/datefudge/default.nix b/nixpkgs/pkgs/tools/system/datefudge/default.nix
new file mode 100644
index 000000000000..63aa563bfa0c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/datefudge/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchgit }:
+
+stdenv.mkDerivation {
+  pname = "datefudge";
+  version = "1.23";
+
+  src = fetchgit {
+    url = "https://salsa.debian.org/debian/datefudge.git";
+    rev = "090d3aace17640478f7f5119518b2f4196f62617";
+    sha256 = "0r9g8v9xnv60hq3j20wqy34kyig3sc2pisjxl4irn7jjx85f1spv";
+  };
+
+  patchPhase = ''
+    substituteInPlace Makefile \
+     --replace "/usr" "/" \
+     --replace "-o root -g root" ""
+    substituteInPlace datefudge.sh \
+     --replace "@LIBDIR@" "$out/lib/"
+    '';
+
+  preInstallPhase = "mkdir -P $out/lib/datefudge";
+
+  installFlags = [ "DESTDIR=$(out)" ];
+
+  postInstall = "chmod +x $out/lib/datefudge/datefudge.so";
+
+  meta = with stdenv.lib; {
+    description = "Fake the system date";
+    longDescription = ''
+      datefudge is a small utility that pretends that the system time is
+      different by pre-loading a small library which modifies the time,
+      gettimeofday and clock_gettime system calls.
+    '';
+    homepage = https://packages.qa.debian.org/d/datefudge.html;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ leenaars ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/dcfldd/default.nix b/nixpkgs/pkgs/tools/system/dcfldd/default.nix
new file mode 100644
index 000000000000..240cc36f7266
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/dcfldd/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "dcfldd-1.3.4-1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/dcfldd/${name}.tar.gz";
+    sha256 = "1y6mwsvm75f5jzxsjjk0yhf8xnpmz6y8qvcxfandavx59lc3l57m";
+  };
+
+  buildInputs = [ ];
+
+  meta = with stdenv.lib; {
+    description = "An enhanced version of GNU dd";
+
+    homepage = http://dcfldd.sourceforge.net/;
+
+    license = licenses.gpl2;
+
+    platforms = platforms.all;
+    maintainers = with maintainers; [ qknight ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/dd_rescue/default.nix b/nixpkgs/pkgs/tools/system/dd_rescue/default.nix
new file mode 100644
index 000000000000..9962337de078
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/dd_rescue/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, fetchurl, autoconf }:
+
+stdenv.mkDerivation rec {
+  version = "1.99.8";
+  pname = "dd_rescue";
+
+  src = fetchurl {
+    sha256 = "1gbxm8gr9sx5g1q9dycs21hkxikcy97q09lp1lvs59pnd9qpdnwh";
+    url="http://www.garloff.de/kurt/linux/ddrescue/${pname}-${version}.tar.bz2";
+  };
+
+  dd_rhelp_src = fetchurl {
+    url = "http://www.kalysto.org/pkg/dd_rhelp-0.3.0.tar.gz";
+    sha256 = "0br6fs23ybmic3i5s1w4k4l8c2ph85ax94gfp2lzjpxbvl73cz1g";
+  };
+
+  buildInputs = [ autoconf ];
+
+  preBuild = ''
+    substituteInPlace Makefile \
+      --replace "\$(DESTDIR)/usr" "$out" \
+      --replace "-o root" "" \
+      --replace "-g root" ""
+  '';
+  makeFlags = [ "LIBDIR=$out" ];
+
+  postInstall = ''
+    mkdir -p "$out/share/dd_rescue" "$out/bin"
+    tar xf "${dd_rhelp_src}" -C "$out/share/dd_rescue"
+    cp "$out/share/dd_rescue"/dd_rhelp*/dd_rhelp "$out/bin"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A tool to copy data from a damaged block device";
+    maintainers = with maintainers; [ raskin domenkozar ];
+    platforms = platforms.linux;
+    homepage = "http://www.garloff.de/kurt/linux/ddrescue/";
+    license = licenses.gpl2Plus;
+    inherit version;
+    updateWalker = true;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/ddrescue/default.nix b/nixpkgs/pkgs/tools/system/ddrescue/default.nix
new file mode 100644
index 000000000000..c2d3b33c7490
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/ddrescue/default.nix
@@ -0,0 +1,51 @@
+{ stdenv
+, fetchurl, lzip
+}:
+
+stdenv.mkDerivation rec {
+  name = "ddrescue-1.24";
+
+  src = fetchurl {
+    url = "mirror://gnu/ddrescue/${name}.tar.lz";
+    sha256 = "11qh0bbzf00mfb4yq35gnv5m260k4d7q9ixklry6bqvhvvp3ypab";
+  };
+
+  nativeBuildInputs = [ lzip ];
+
+  doCheck = true; # not cross;
+  configureFlags = [ "CXX=${stdenv.cc.targetPrefix}c++" ];
+
+  meta = with stdenv.lib; {
+    description = "GNU ddrescue, a data recovery tool";
+
+    longDescription =
+      '' GNU ddrescue is a data recovery tool.  It copies data from one file
+         or block device (hard disc, cdrom, etc) to another, trying hard to
+         rescue data in case of read errors.
+
+         The basic operation of ddrescue is fully automatic.  That is, you
+         don't have to wait for an error, stop the program, read the log, run
+         it in reverse mode, etc.
+
+         If you use the logfile feature of ddrescue, the data is rescued very
+         efficiently (only the needed blocks are read).  Also you can
+         interrupt the rescue at any time and resume it later at the same
+         point.
+
+         Automatic merging of backups: If you have two or more damaged copies
+         of a file, cdrom, etc, and run ddrescue on all of them, one at a
+         time, with the same output file, you will probably obtain a complete
+         and error-free file.  This is so because the probability of having
+         damaged areas at the same places on different input files is very
+         low.  Using the logfile, only the needed blocks are read from the
+         second and successive copies.
+      '';
+
+    homepage = https://www.gnu.org/software/ddrescue/ddrescue.html;
+
+    license = licenses.gpl3Plus;
+
+    platforms = platforms.all;
+    maintainers = with maintainers; [ domenkozar fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/ddrescueview/default.nix b/nixpkgs/pkgs/tools/system/ddrescueview/default.nix
new file mode 100644
index 000000000000..466232e2bf77
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/ddrescueview/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, lib, fetchurl, fpc, lazarus, atk, cairo, gdk-pixbuf, glib, gtk2, libX11, pango }:
+
+stdenv.mkDerivation rec {
+  name = "ddrescueview-0.4alpha3";
+
+  src = fetchurl {
+    name = "${name}.tar.xz";
+    url = "mirror://sourceforge/ddrescueview/ddrescueview-source-0.4%7Ealpha3.tar.xz";
+    sha256 = "0603jisxkswfyh93s3i20f8ns4yf83dmgmy0lg5001rvaw9mkw9j";
+  };
+
+  nativeBuildInputs = [ fpc lazarus ];
+
+  buildInputs = [ atk cairo gdk-pixbuf glib gtk2 libX11 pango ];
+
+  sourceRoot = "source";
+
+  NIX_LDFLAGS = "--as-needed -rpath ${lib.makeLibraryPath buildInputs}";
+
+  buildPhase = ''
+    lazbuild --lazarusdir=${lazarus}/share/lazarus ddrescueview.lpi
+  '';
+
+  installPhase = ''
+    install -Dt $out/bin ddrescueview
+    cd ../resources/linux
+    install -Dt $out/share/applications ddrescueview.desktop
+    install -Dt $out/share/icons/hicolor/32x32/apps ddrescueview.xpm
+    install -Dt $out/share/man/man1 ddrescueview.1
+  '';
+
+  meta = with lib; {
+    description = "A tool to graphically examine ddrescue mapfiles";
+    homepage = https://sourceforge.net/projects/ddrescueview/;
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ orivej ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/ddrutility/default.nix b/nixpkgs/pkgs/tools/system/ddrutility/default.nix
new file mode 100644
index 000000000000..54bf6fbaf42b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/ddrutility/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "ddrutility";
+  version = "2.8";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/ddrutility/${pname}-${version}.tar.gz";
+    sha256 = "023g7f2sfv5cqk3iyss4awrw3b913sy5423mn5zvlyrri5hi2cac";
+  };
+
+  postPatch = ''
+    substituteInPlace makefile --replace /usr/local ""
+  '';
+
+  makeFlags = [ "DESTDIR=$(out)" ];
+
+  meta = with stdenv.lib; {
+    description = "A set of utilities for hard drive data rescue";
+    homepage = https://sourceforge.net/projects/ddrutility/;
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ orivej ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/dfc/default.nix b/nixpkgs/pkgs/tools/system/dfc/default.nix
new file mode 100644
index 000000000000..8575d971898a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/dfc/default.nix
@@ -0,0 +1,21 @@
+{stdenv, fetchurl, cmake, gettext}:
+
+stdenv.mkDerivation rec {
+  pname = "dfc";
+  version = "3.1.1";
+
+  src = fetchurl {
+    url = "https://projects.gw-computing.net/attachments/download/615/${pname}-${version}.tar.gz";
+    sha256 = "0m1fd7l85ckb7bq4c5c3g257bkjglm8gq7x42pkmpp87fkknc94n";
+  };
+
+  nativeBuildInputs = [ cmake gettext ];
+
+  meta = {
+    homepage = https://projects.gw-computing.net/projects/dfc;
+    description = "Displays file system space usage using graphs and colors";
+    license = stdenv.lib.licenses.bsd3;
+    maintainers = with stdenv.lib.maintainers; [qknight];
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/di/default.nix b/nixpkgs/pkgs/tools/system/di/default.nix
new file mode 100644
index 000000000000..3aef366ea066
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/di/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "di";
+  version = "4.47.3";
+
+  src = fetchurl {
+    url = "https://gentoo.com/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "0m4npba50sf5s61g5z3xd2r7937zwja941f2h3f081xi24c2hfck";
+  };
+
+  makeFlags = [ "INSTALL_DIR=$(out)" ];
+
+  meta = with stdenv.lib; {
+    description = "Disk information utility; displays everything 'df' does and more";
+    homepage = https://gentoo.com/di/;
+    license = licenses.zlib;
+    updateWalker = true;
+    maintainers = with maintainers; [ manveru ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/dog/default.nix b/nixpkgs/pkgs/tools/system/dog/default.nix
new file mode 100644
index 000000000000..8bb84c562b64
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/dog/default.nix
@@ -0,0 +1,30 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation {
+  name = "dog-1.7";
+
+  src = fetchurl {
+    url = "http://archive.debian.org/debian/pool/main/d/dog/dog_1.7.orig.tar.gz";
+    sha256 = "3ef25907ec5d1dfb0df94c9388c020b593fbe162d7aaa9bd08f35d2a125af056";
+  };
+
+  patchPhase = ''
+    substituteInPlace Makefile \
+      --replace "gcc" "cc"
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mkdir -p $out/man/man1
+    cp dog.1 $out/man/man1
+    cp dog $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://lwn.net/Articles/421072/;
+    description = "cat replacement";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ qknight ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/efibootmgr/default.nix b/nixpkgs/pkgs/tools/system/efibootmgr/default.nix
new file mode 100644
index 000000000000..272809e486c1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/efibootmgr/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchFromGitHub, fetchpatch, pkgconfig, efivar, popt }:
+
+stdenv.mkDerivation rec {
+  pname = "efibootmgr";
+  version = "17";
+
+  nativeBuildInputs = [ pkgconfig ];
+
+  buildInputs = [ efivar popt ];
+
+  src = fetchFromGitHub {
+    owner = "rhboot";
+    repo = "efibootmgr";
+    rev = version;
+    sha256 = "1niicijxg59rsmiw3rsjwy4bvi1n42dynvm01lnp9haixdzdpq03";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "remove-extra-decl.patch";
+      url = "https://github.com/rhboot/efibootmgr/commit/99b578501643377e0b1994b2a068b790d189d5ad.patch";
+      sha256 = "1sbijvlpv4khkix3vix9mbhzffj8lp8zpnbxm9gnzjz8yssz9p5h";
+    })
+  ];
+
+  makeFlags = [ "EFIDIR=nixos" ];
+
+  installFlags = [ "prefix=$(out)" ];
+
+  meta = with stdenv.lib; {
+    description = "A Linux user-space application to modify the Intel Extensible Firmware Interface (EFI) Boot Manager";
+    homepage = https://github.com/rhboot/efibootmgr;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/efivar/default.nix b/nixpkgs/pkgs/tools/system/efivar/default.nix
new file mode 100644
index 000000000000..f02923de349f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/efivar/default.nix
@@ -0,0 +1,52 @@
+{ stdenv, buildPackages, fetchFromGitHub, fetchurl, pkgconfig, popt }:
+
+stdenv.mkDerivation rec {
+  pname = "efivar";
+  version = "37";
+
+  outputs = [ "bin" "out" "dev" "man" ];
+
+  src = fetchFromGitHub {
+    owner = "rhinstaller";
+    repo = "efivar";
+    rev = version;
+    sha256 = "1z2dw5x74wgvqgd8jvibfff0qhwkc53kxg54v12pzymyibagwf09";
+  };
+  patches = [
+    (fetchurl {
+      name = "r13y.patch";
+      url = "https://patch-diff.githubusercontent.com/raw/rhboot/efivar/pull/133.patch";
+      sha256 = "038cwldb8sqnal5l6mhys92cqv8x7j8rgsl8i4fiv9ih9znw26i6";
+    })
+    (fetchurl {
+      name = "fix-misaligned-pointer.patch";
+      url = "https://github.com/rhboot/efivar/commit/b98ba8921010d03f46704a476c69861515deb1ca.patch";
+      sha256 = "0ni9mz7y40a2wf1d1q5n9y5dhcbydxvfdhqic7zsmgnaxs3a0p27";
+    })
+    (fetchurl {
+      name = "fix-gcc9-error.patch";
+      url = "https://github.com/rhboot/efivar/commit/c3c553db85ff10890209d0fe48fb4856ad68e4e0.patch";
+      sha256 = "0lc38npydp069nlcga25wzzm204ww9l6mpjfn6wmhdfhn0pgjwky";
+    })
+  ];
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ popt ];
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+
+  makeFlags = [
+    "prefix=$(out)"
+    "libdir=$(out)/lib"
+    "bindir=$(bin)/bin"
+    "mandir=$(man)/share/man"
+    "includedir=$(dev)/include"
+    "PCDIR=$(dev)/lib/pkgconfig"
+  ];
+
+  meta = with stdenv.lib; {
+    inherit (src.meta) homepage;
+    description = "Tools and library to manipulate EFI variables";
+    platforms = platforms.linux;
+    license = licenses.lgpl21;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/envconsul/default.nix b/nixpkgs/pkgs/tools/system/envconsul/default.nix
new file mode 100644
index 000000000000..c2f5556cec67
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/envconsul/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "envconsul";
+  version = "0.7.3";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/hashicorp/envconsul";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "hashicorp";
+    repo = "envconsul";
+    sha256 = "03cgxkyyynr067dg5b0lhvaxn60318fj9fh55p1n43vj5nrzgnbc";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/hashicorp/envconsul/;
+    description = "Read and set environmental variables for processes from Consul";
+    platforms = platforms.linux ++ platforms.darwin;
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ pradeepchhetri ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/evemu/default.nix b/nixpkgs/pkgs/tools/system/evemu/default.nix
new file mode 100644
index 000000000000..1ba2b78e8609
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/evemu/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchgit, autoreconfHook, pkgconfig, pythonPackages
+, libevdev
+}:
+
+stdenv.mkDerivation rec {
+  pname = "evemu";
+  version = "2.6.0";
+
+  # We could have downloaded a release tarball from cgit, but it changes hash
+  # each time it is downloaded :/
+  src = fetchgit {
+    url = git://git.freedesktop.org/git/evemu;
+    rev = "refs/tags/v${version}";
+    sha256 = "1m38fxwy2s82vb2qm9aqxinws12akmqqq7q66is931lc3awqkbah";
+  };
+
+  nativeBuildInputs = [ pkgconfig autoreconfHook ];
+
+  buildInputs = [ pythonPackages.python pythonPackages.evdev libevdev ];
+
+  meta = with stdenv.lib; {
+    description = "Records and replays device descriptions and events to emulate input devices through the kernel's input system";
+    homepage = https://www.freedesktop.org/wiki/Evemu/;
+    repositories.git = git://git.freedesktop.org/git/evemu;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.amorsillo ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/facter/default.nix b/nixpkgs/pkgs/tools/system/facter/default.nix
new file mode 100644
index 000000000000..acc3990378fd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/facter/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromGitHub, boost, cmake, cpp-hocon, curl, leatherman, libwhereami, libyamlcpp, openssl, ruby, utillinux }:
+
+stdenv.mkDerivation rec {
+  pname = "facter";
+  version = "3.14.7";
+
+  src = fetchFromGitHub {
+    sha256 = "1x71ynnp8l5bf6m1a56rwcjya2swrhpxmd0cg9ndjplam6zys2v7";
+    rev = version;
+    repo = pname;
+    owner = "puppetlabs";
+  };
+
+  CXXFLAGS = "-fpermissive -Wno-error=catch-value";
+  NIX_LDFLAGS = "-lblkid";
+
+  cmakeFlags = [
+    "-DFACTER_RUBY=${ruby}/lib/libruby.so"
+    "-DRUBY_LIB_INSTALL=${placeholder "out"}/lib/ruby"
+  ];
+
+  NIX_CFLAGS_COMPILE = "-Wno-error=deprecated-copy";
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ boost cpp-hocon curl leatherman libwhereami libyamlcpp openssl ruby utillinux ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/puppetlabs/facter";
+    description = "A system inventory tool";
+    license = licenses.asl20;
+    maintainers = [ maintainers.womfoo ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/fakechroot/default.nix b/nixpkgs/pkgs/tools/system/fakechroot/default.nix
new file mode 100644
index 000000000000..77ba6689b0d4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/fakechroot/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchFromGitHub, fetchpatch, autoreconfHook, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "fakechroot";
+  version = "2.20.1";
+
+  src = fetchFromGitHub {
+    owner  = "dex4er";
+    repo   = pname;
+    rev    = version;
+    sha256 = "0xgnwazrmrg4gm30xjxdn6sx3lhqvxahrh6gmy3yfswxc30pmg86";
+  };
+
+  # Use patch from https://github.com/dex4er/fakechroot/pull/46 , remove once merged!
+  # Courtesy of one of our own, @copumpkin!
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/dex4er/fakechroot/pull/46/commits/dcc0cfe3941e328538f9e62b2c0b15430d393ec1.patch";
+      sha256 = "1mk8j2njd94s7vf2wggi08xxxzx8dxrvdricl9cbspvkyp715w2m";
+      # Don't bother trying to reconcile conflicts for NEWS entries, as they will continue to occur
+      # and are uninteresting as well as unimportant for our purposes (since NEWS never leaves the build env).
+      excludes = [ "NEWS.md" ];
+    })
+  ];
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ perl ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/dex4er/fakechroot;
+    description = "Give a fake chroot environment through LD_PRELOAD";
+    license = licenses.lgpl21;
+    maintainers = with maintainers; [offline];
+    platforms = platforms.linux;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/system/fakeroot/default.nix b/nixpkgs/pkgs/tools/system/fakeroot/default.nix
new file mode 100644
index 000000000000..934b74dd3846
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/fakeroot/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, fetchurl, fetchpatch, getopt, libcap, gnused }:
+
+stdenv.mkDerivation rec {
+  version = "1.23";
+  pname = "fakeroot";
+
+  src = fetchurl {
+    url = "http://http.debian.net/debian/pool/main/f/fakeroot/fakeroot_${version}.orig.tar.xz";
+    sha256 = "1xpl0s2yjyjwlf832b6kbkaa5921liybaar13k7n45ckd9lxd700";
+  };
+
+  patches = stdenv.lib.optional stdenv.isLinux ./einval.patch
+  # patchset from brew
+  ++ stdenv.lib.optionals stdenv.isDarwin [
+    (fetchpatch {
+      name = "0001-Implement-openat-2-wrapper-which-handles-optional-ar.patch";
+      url = "https://bugs.debian.org/cgi-bin/bugreport.cgi?msg=5;filename=0001-Implement-openat-2-wrapper-which-handles-optional-ar.patch;att=1;bug=766649";
+      sha256 = "1m6ggrqwqy0in264sxqk912vniipiw629dxq7kibakvsswfk6bkk";
+    })
+    (fetchpatch {
+      name = "0002-OS-X-10.10-introduced-id_t-int-in-gs-etpriority.patch";
+      url = "https://bugs.debian.org/cgi-bin/bugreport.cgi?msg=5;filename=0002-OS-X-10.10-introduced-id_t-int-in-gs-etpriority.patch;att=2;bug=766649";
+      sha256 = "0rhayp42x4i1a6yc4d28kpshmf7lrmaprq64zfrjpdn4kbs0rkln";
+    })
+    (fetchpatch {
+      name = "fakeroot-always-pass-mode.patch";
+      url = "https://bugs.debian.org/cgi-bin/bugreport.cgi?att=2;bug=766649;filename=fakeroot-always-pass-mode.patch;msg=20";
+      sha256 = "0i3zaca1v449dm9m1cq6wq4dy6hc2y04l05m9gg8d4y4swld637p";
+    })
+  ];
+
+  buildInputs = [ getopt gnused ]
+    ++ stdenv.lib.optional (!stdenv.isDarwin) libcap
+    ;
+
+  postUnpack = ''
+    sed -i -e "s@getopt@$(type -p getopt)@g" -e "s@sed@$(type -p sed)@g" ${pname}-${version}/scripts/fakeroot.in
+  '';
+
+  meta = {
+    homepage = https://salsa.debian.org/clint/fakeroot;
+    description = "Give a fake root environment through LD_PRELOAD";
+    license = stdenv.lib.licenses.gpl2Plus;
+    maintainers = with stdenv.lib.maintainers; [viric];
+    platforms = stdenv.lib.platforms.unix;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/system/fakeroot/einval.patch b/nixpkgs/pkgs/tools/system/fakeroot/einval.patch
new file mode 100644
index 000000000000..f8d4fb83d137
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/fakeroot/einval.patch
@@ -0,0 +1,47 @@
+Ignore EINVAL errors.  This matters within user namespaces.
+
+See:
+https://github.com/NixOS/nixpkgs/issues/25901
+https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=802612
+https://github.com/NixOS/nixpkgs/issues/10496
+
+diff --git a/libfakeroot.c b/libfakeroot.c
+index 68a95fb..70da8bc 100644
+--- a/libfakeroot.c
++++ b/libfakeroot.c
+@@ -792,7 +792,7 @@ int chown(const char *path, uid_t owner, gid_t group){
+     r=next_lchown(path,owner,group);
+   else
+     r=0;
+-  if(r&&(errno==EPERM))
++  if(r&&(errno==EPERM||errno==EINVAL))
+     r=0;
+
+   return r;
+@@ -819,7 +819,7 @@ int lchown(const char *path, uid_t owner, gid_t group){
+     r=next_lchown(path,owner,group);
+   else
+     r=0;
+-  if(r&&(errno==EPERM))
++  if(r&&(errno==EPERM||errno==EINVAL))
+     r=0;
+
+   return r;
+@@ -843,7 +843,7 @@ int fchown(int fd, uid_t owner, gid_t group){
+   else
+     r=0;
+
+-  if(r&&(errno==EPERM))
++  if(r&&(errno==EPERM||errno==EINVAL))
+     r=0;
+
+   return r;
+@@ -870,7 +870,7 @@ int fchownat(int dir_fd, const char *path, uid_t owner, gid_t group, int flags)
+   else
+     r=0;
+
+-  if(r&&(errno==EPERM))
++  if(r&&(errno==EPERM||errno==EINVAL))
+     r=0;
+
+   return r;
diff --git a/nixpkgs/pkgs/tools/system/fcron/default.nix b/nixpkgs/pkgs/tools/system/fcron/default.nix
new file mode 100644
index 000000000000..3dd84aa8a9cc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/fcron/default.nix
@@ -0,0 +1,61 @@
+# restart using 'killall -TERM fcron; fcron -b
+# use convert-fcrontab to update fcrontab files
+
+{ stdenv, fetchurl, perl, busybox, vim }:
+
+stdenv.mkDerivation rec {
+  pname = "fcron";
+  version = "3.3.0";
+
+  src = fetchurl {
+    url = "http://fcron.free.fr/archives/${pname}-${version}.src.tar.gz";
+    sha256 = "0q5b1fdq1rpsd4lj7v717x47pmn62hhm13394g0yxqi614xd7sls";
+  };
+
+  buildInputs = [ perl ];
+
+  patches = [ ./relative-fcronsighup.patch ];
+
+  configureFlags =
+    [ "--with-sendmail=${busybox}/sbin/sendmail"
+      "--with-editor=${vim}/bin/vi"  # TODO customizable
+      "--with-bootinstall=no"
+      "--localstatedir=/var"
+      "--sysconfdir=/etc"
+      "--with-rootname=root"
+      "--with-rootgroup=root"
+      "--disable-checks"
+    ];
+
+  installTargets = [ "install-staged" ]; # install does also try to change permissions of /etc/* files
+
+  # fcron tries to install pid into system directory on install
+  installFlags = [
+    "ETC=."
+    "PIDDIR=."
+    "PIDFILE=fcron.pid"
+    "REBOOT_LOCK=fcron.reboot"
+    "FIFODIR=."
+    "FIFOFILE=fcron.fifo"
+    "FCRONTABS=."
+  ];
+
+  preConfigure = ''
+    sed -i 's@/usr/bin/env perl@${perl}/bin/perl@g' configure script/*
+    # Don't let fcron create the group fcron, nix(os) should do this
+    sed -i '2s@.*@exit 0@' script/user-group
+
+    # --with-bootinstall=no shoud do this, didn't work. So just exit the script before doing anything
+    sed -i '2s@.*@exit 0@' script/boot-install
+
+    # also don't use chown or chgrp for documentation (or whatever) when installing
+    find -type f | xargs sed -i -e 's@^\(\s\)*chown@\1:@' -e 's@^\(\s\)*chgrp@\1:@'
+  '';
+
+  meta = with stdenv.lib; {
+    description="A command scheduler with extended capabilities over cron and anacron";
+    homepage = http://fcron.free.fr;
+    license = licenses.gpl2;
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/fcron/relative-fcronsighup.patch b/nixpkgs/pkgs/tools/system/fcron/relative-fcronsighup.patch
new file mode 100644
index 000000000000..c0bbfc1ee3ef
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/fcron/relative-fcronsighup.patch
@@ -0,0 +1,16 @@
+Use relative fcronsighup to prefer setuid executable over package binary.
+--- fcron-3.2.1.orig/fcrontab.c	2016-06-26 17:02:48.000000000 +0200
++++ fcron-3.2.1/fcrontab.c	2017-03-05 21:54:24.676871335 +0100
+@@ -154,10 +154,10 @@
+                         fcrontab_gid);
+                 exit(ERR);
+             }
+-            execl(BINDIREX "/fcronsighup", BINDIREX "/fcronsighup", fcronconf,
++            execlp("fcronsighup",  "fcronsighup", fcronconf,
+                   NULL);
+ 
+-            error_e("Could not exec " BINDIREX " fcronsighup");
++            error_e("Could not exec fcronsighup");
+             exit(ERR);
+             break;
+ 
diff --git a/nixpkgs/pkgs/tools/system/fdisk/default.nix b/nixpkgs/pkgs/tools/system/fdisk/default.nix
new file mode 100644
index 000000000000..0aea3ced3b52
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/fdisk/default.nix
@@ -0,0 +1,29 @@
+{ fetchurl, stdenv, parted, libuuid, gettext, guile }:
+
+stdenv.mkDerivation rec {
+  name = "gnufdisk-2.0.0a"; # .0a1 seems broken, see https://lists.gnu.org/archive/html/bug-fdisk/2012-09/msg00000.html
+
+  src = fetchurl {
+    url = "mirror://gnu/fdisk/${name}.tar.gz";
+    sha256 = "04nd7civ561x2lwcmxhsqbprml3178jfc58fy1v7hzqg5k4nbhy3";
+  };
+
+  buildInputs = [ parted libuuid gettext guile ];
+
+  doCheck = true;
+
+  meta = {
+    description = "A command-line disk partitioning tool";
+
+    longDescription = ''
+      GNU fdisk provides alternatives to util-linux fdisk and util-linux
+      cfdisk.  It uses GNU Parted.
+    '';
+
+    license = stdenv.lib.licenses.gpl3Plus;
+
+    homepage = https://www.gnu.org/software/fdisk/;
+
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/fio/default.nix b/nixpkgs/pkgs/tools/system/fio/default.nix
new file mode 100644
index 000000000000..3718f69370e4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/fio/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchFromGitHub, makeWrapper
+, libaio, python, zlib
+, withGnuplot ? false, gnuplot ? null }:
+
+stdenv.mkDerivation rec {
+  pname = "fio";
+  version = "3.17";
+
+  src = fetchFromGitHub {
+    owner  = "axboe";
+    repo   = "fio";
+    rev    = "fio-${version}";
+    sha256 = "1s37w8bhg23ml1f89x0bkaifywlkgh31305vmip4xfvh3j3vjbym";
+  };
+
+  buildInputs = [ python zlib ]
+    ++ stdenv.lib.optional (!stdenv.isDarwin) libaio;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  enableParallelBuilding = true;
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace "mandir = /usr/share/man" "mandir = \$(prefix)/man" \
+      --replace "sharedir = /usr/share/fio" "sharedir = \$(prefix)/share/fio"
+    substituteInPlace tools/plot/fio2gnuplot --replace /usr/share/fio $out/share/fio
+  '';
+
+  postInstall = stdenv.lib.optionalString withGnuplot ''
+    wrapProgram $out/bin/fio2gnuplot \
+      --prefix PATH : ${stdenv.lib.makeBinPath [ gnuplot ]}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Flexible IO Tester - an IO benchmark tool";
+    homepage = "https://git.kernel.dk/cgit/fio/";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/foreman/Gemfile b/nixpkgs/pkgs/tools/system/foreman/Gemfile
new file mode 100644
index 000000000000..e25e6d790fc0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/foreman/Gemfile
@@ -0,0 +1,3 @@
+source "https://rubygems.org"
+
+gem "foreman"
diff --git a/nixpkgs/pkgs/tools/system/foreman/Gemfile.lock b/nixpkgs/pkgs/tools/system/foreman/Gemfile.lock
new file mode 100644
index 000000000000..8fa9a213ab28
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/foreman/Gemfile.lock
@@ -0,0 +1,15 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    foreman (0.78.0)
+      thor (~> 0.19.1)
+    thor (0.19.1)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  foreman
+
+BUNDLED WITH
+   1.11.2
diff --git a/nixpkgs/pkgs/tools/system/foreman/default.nix b/nixpkgs/pkgs/tools/system/foreman/default.nix
new file mode 100644
index 000000000000..e97d71f5c84a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/foreman/default.nix
@@ -0,0 +1,15 @@
+{ bundlerEnv, lib, ruby }:
+
+bundlerEnv {
+  inherit ruby;
+  pname = "foreman";
+  gemdir = ./.;
+
+  meta = with lib; {
+    description = "Process manager for applications with multiple components";
+    homepage = https://github.com/ddollar/foreman;
+    license = licenses.mit;
+    maintainers = with maintainers; [ zimbatm ];
+    platforms = ruby.meta.platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/foreman/gemset.nix b/nixpkgs/pkgs/tools/system/foreman/gemset.nix
new file mode 100644
index 000000000000..b35bd15c9749
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/foreman/gemset.nix
@@ -0,0 +1,18 @@
+{
+  thor = {
+    version = "0.19.1";
+    source = {
+      type = "gem";
+      remotes = ["https://rubygems.org"];
+      sha256 = "08p5gx18yrbnwc6xc0mxvsfaxzgy2y9i78xq7ds0qmdm67q39y4z";
+    };
+  };
+  foreman = {
+    version = "0.78.0";
+    source = {
+      type = "gem";
+      remotes = ["https://rubygems.org"];
+      sha256 = "1caz8mi7gq1hs4l1flcyyw1iw1bdvdbhppsvy12akr01k3s17xaq";
+    };
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/system/foremost/default.nix b/nixpkgs/pkgs/tools/system/foremost/default.nix
new file mode 100644
index 000000000000..be33f45ca9dc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/foremost/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "foremost";
+  version = "1.5.7";
+
+  src = fetchurl {
+    sha256 = "0d2zxw0ijg8cd3ksgm8cf8jg128zr5x7z779jar90g9f47pm882h";
+    url = "http://foremost.sourceforge.net/pkg/${pname}-${version}.tar.gz";
+  };
+
+  patches = [ ./makefile.patch ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  enableParallelBuilding = true;
+
+  hardeningDisable = [ "format" ];
+
+  preInstall = ''
+    mkdir -p $out/{bin,share/man/man8}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Recover files based on their contents";
+    longDescription = ''
+      Foremost is a console program to recover files based on their headers,
+      footers, and internal data structures. Foremost can work on image files, such
+      as those generated by dd, Safeback, Encase, etc, or directly on a drive.
+      The headers and footers can be specified by a configuration file or you can
+      use command line switches to specify built-in file types. These built-in types
+      look at the data structures of a given file format allowing for a more
+      reliable and faster recovery.
+    '';
+    homepage = http://foremost.sourceforge.net/;
+    license = licenses.publicDomain;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/foremost/makefile.patch b/nixpkgs/pkgs/tools/system/foremost/makefile.patch
new file mode 100644
index 000000000000..6626c9520ec1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/foremost/makefile.patch
@@ -0,0 +1,23 @@
+--- a/Makefile	2015-04-21 00:40:46.949266581 +0200
++++ b/Makefile	2015-04-21 00:41:38.637165883 +0200
+@@ -24,9 +24,9 @@
+ RAW_FLAGS += -DVERSION=\"$(VERSION)\"
+ 
+ # Where we get installed
+-BIN = /usr/local/bin
+-MAN = /usr/share/man/man8
+-CONF= /usr/local/etc
++BIN = $(PREFIX)/bin
++MAN = $(PREFIX)/share/man/man8
++CONF= $(PREFIX)/etc
+ # Setup for compiling and cross-compiling for Windows
+ # The CR_ prefix refers to cross compiling from OSX to Windows
+ CR_CC = $(CR_BASE)/gcc
+@@ -120,7 +120,6 @@
+ install: goals
+ 	install -m 755 $(NAME) $(BIN)
+ 	install -m 444 $(MAN_PAGES) $(MAN)
+-	install -m 444 foremost.conf $(CONF)
+ macinstall: BIN = /usr/local/bin/
+ macinstall: MAN = /usr/share/man/man1/
+ macinstall: CONF = /usr/local/etc/
diff --git a/nixpkgs/pkgs/tools/system/freeipmi/default.nix b/nixpkgs/pkgs/tools/system/freeipmi/default.nix
new file mode 100644
index 000000000000..b057c80c74ec
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/freeipmi/default.nix
@@ -0,0 +1,44 @@
+{ fetchurl, stdenv, libgcrypt, readline, libgpgerror }:
+
+stdenv.mkDerivation rec {
+  version = "1.6.4";
+  pname = "freeipmi";
+
+  src = fetchurl {
+    url = "mirror://gnu/freeipmi/${pname}-${version}.tar.gz";
+    sha256 = "0g0s4iwx0ng4rv7hp5cc3kkx4drahsc89981gwjblf04lfavppv5";
+  };
+
+  buildInputs = [ libgcrypt readline libgpgerror ];
+
+  doCheck = true;
+
+  meta = {
+    description = "Implementation of the Intelligent Platform Management Interface";
+
+    longDescription =
+      '' GNU FreeIPMI provides in-band and out-of-band IPMI software based on
+         the IPMI v1.5/2.0 specification.  The IPMI specification defines a
+         set of interfaces for platform management and is implemented by a
+         number vendors for system management.  The features of IPMI that
+         most users will be interested in are sensor monitoring, system event
+         monitoring, power control, and serial-over-LAN (SOL).  The FreeIPMI
+         tools and libraries listed below should provide users with the
+         ability to access and utilize these and many other features.  A
+         number of useful features for large HPC or cluster environments have
+         also been implemented into FreeIPMI. See the README or FAQ for more
+         info.
+      '';
+
+    homepage = https://www.gnu.org/software/freeipmi/;
+    downloadPage = "https://www.gnu.org/software/freeipmi/download.html";
+
+    license = stdenv.lib.licenses.gpl3Plus;
+
+    maintainers = with stdenv.lib.maintainers; [ raskin ];
+    platforms = stdenv.lib.platforms.gnu ++ stdenv.lib.platforms.linux;  # arbitrary choice
+
+    updateWalker = true;
+    inherit version;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/gdmap/default.nix b/nixpkgs/pkgs/tools/system/gdmap/default.nix
new file mode 100644
index 000000000000..4adc81608293
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/gdmap/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl, gtk2, pkgconfig, libxml2, intltool, gettext }:
+
+stdenv.mkDerivation rec {
+  name = "gdmap-0.8.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/gdmap/${name}.tar.gz";
+    sha256 = "0nr8l88cg19zj585hczj8v73yh21k7j13xivhlzl8jdk0j0cj052";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ gtk2 libxml2 intltool gettext ];
+
+  patches = [ ./get_sensitive.patch ./set_flags.patch ];
+
+  hardeningDisable = [ "format" ];
+
+  NIX_LDFLAGS = "-lm";
+
+  meta = with stdenv.lib; {
+    homepage = http://gdmap.sourceforge.net;
+    description = "Recursive rectangle map of disk usage";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/gdmap/get_sensitive.patch b/nixpkgs/pkgs/tools/system/gdmap/get_sensitive.patch
new file mode 100644
index 000000000000..3cdb6291dfac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/gdmap/get_sensitive.patch
@@ -0,0 +1,34 @@
+From 166de50914191303b232ec123cfbaadad521560c Mon Sep 17 00:00:00 2001
+From: Alexander Myltsev <avm@altlinux.ru>
+Date: Wed, 21 Apr 2010 22:43:14 +0400
+Subject: [PATCH] GTK_WIDGET_SENSITIVE -> gtk_widget_get_sensitive
+
+---
+ gdmap/src/gui_support.c |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/gui_support.c b/src/gui_support.c
+index 3027e29..45272d3 100644
+--- a/src/gui_support.c
++++ b/src/gui_support.c
+@@ -85,7 +85,7 @@ on_ebox_enter(GtkWidget* box, GdkEventCrossing* event, GtkLabel* label) {
+   const char* text;
+ 
+   (void)event;
+-  if (GTK_WIDGET_SENSITIVE(label)) {
++  if (gtk_widget_get_sensitive(GTK_WIDGET(label))) {
+     char* temp;
+ 
+     text = g_object_get_data(G_OBJECT(label), "label");
+@@ -129,7 +129,7 @@ static void on_clear_label(GtkWidget* widget) {
+ void ui_event_label_set_sensitive(GtkWidget* ebox, gboolean set) {
+   gpointer callback = g_object_get_data(G_OBJECT(ebox), "callback");
+   GtkWidget* child = GTK_BIN(ebox)->child;
+-  if (GTK_WIDGET_SENSITIVE(child) == set) return;
++  if (gtk_widget_get_sensitive(child) == set) return;
+ 
+   if (set && !callback) return;
+   gtk_widget_set_sensitive(child, set);
+-- 
+1.7.3.3
+
diff --git a/nixpkgs/pkgs/tools/system/gdmap/set_flags.patch b/nixpkgs/pkgs/tools/system/gdmap/set_flags.patch
new file mode 100644
index 000000000000..388836f6e5f4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/gdmap/set_flags.patch
@@ -0,0 +1,25 @@
+From 9a5537d2b0aba18438dd77a45354ac2e73eae23d Mon Sep 17 00:00:00 2001
+From: Alexander Myltsev <avm@altlinux.ru>
+Date: Mon, 13 Dec 2010 23:24:30 +0300
+Subject: [PATCH] GTK_WIDGET_SET_FLAGS -> gtk_widget_set_can_focus
+
+---
+ gdmap/src/gui_support.c |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/src/gui_support.c b/src/gui_support.c
+index 45272d3..ca02d72 100644
+--- a/src/gui_support.c
++++ b/src/gui_support.c
+@@ -164,7 +164,7 @@ GtkWidget* ui_create_event_label(const char* text, GCallback callback,
+                         // GDK_FOCUS_CHANGE_MASK |
+                         GDK_ENTER_NOTIFY_MASK |
+                         GDK_LEAVE_NOTIFY_MASK);
+-  GTK_WIDGET_SET_FLAGS(ebox, GTK_CAN_FOCUS);
++  gtk_widget_set_can_focus(ebox, TRUE);
+ 
+   gtk_widget_show(ebox);
+ 
+-- 
+1.7.3.3
+
diff --git a/nixpkgs/pkgs/tools/system/gohai/default.nix b/nixpkgs/pkgs/tools/system/gohai/default.nix
new file mode 100644
index 000000000000..c0dd2c89d2f1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/gohai/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildGoPackage, fetchgit }:
+
+buildGoPackage rec {
+  pname = "gohai";
+  version = "2018-05-23";
+  rev = "60e13eaed98afa238ad6dfc98224c04fbb7b19b1";
+
+  goPackagePath = "github.com/DataDog/gohai";
+
+  src = fetchgit {
+    inherit rev;
+    url    = "https://github.com/DataDog/gohai";
+    sha256 = "15hdw195f6ayrmj1nbyfpfswdai1r1z3qjw927mbma7rwql24dkr";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with lib; {
+    description      = "System information collector";
+    homepage         = "https://github.com/DataDog/gohai";
+    license          = licenses.mit;
+    maintainers      = [ maintainers.tazjin ];
+    platforms        = platforms.unix;
+    repositories.git = git://github.com/DataDog/gohai.git;
+
+    longDescription = ''
+      Gohai is a tool which collects an inventory of system
+      information. It is used by the Datadog agent to provide detailed
+      system metrics.
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/gohai/deps.nix b/nixpkgs/pkgs/tools/system/gohai/deps.nix
new file mode 100644
index 000000000000..f6d63e460246
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/gohai/deps.nix
@@ -0,0 +1,30 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "github.com/cihub/seelog";
+    fetch = {
+      type = "git";
+      url = "https://github.com/cihub/seelog";
+      rev = "f561c5e57575bb1e0a2167028b7339b3a8d16fb4";
+      sha256 = "0r3228hvgljgpaggj6b9mvxfsizfw25q2c1761wsvcif8gz49cvl";
+    };
+  }
+  {
+    goPackagePath = "github.com/shirou/gopsutil";
+    fetch = {
+      type = "git";
+      url = "https://github.com/shirou/gopsutil";
+      rev = "eeb1d38d69593f121e060d24d17f7b1f0936b203";
+      sha256 = "01qsznk599225gf4pld7p2m30p61y77mvzhrs6raxpk6wf7icp4w";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "77b0e4315053a57ed2962443614bdb28db152054";
+      sha256 = "1024gcv1b40i2rgvpgyw2hgy1k5g7473pn29yavwysj37m1rrplp";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/system/goreman/default.nix b/nixpkgs/pkgs/tools/system/goreman/default.nix
new file mode 100644
index 000000000000..22918f14145c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/goreman/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+buildGoPackage rec {
+  pname = "goreman";
+  version = "0.2.1";
+
+  goPackagePath = "github.com/mattn/goreman";
+  subPackages = ["."];
+
+  src = fetchFromGitHub {
+    owner = "mattn";
+    repo = "goreman";
+    rev = "v${version}";
+    sha256 = "1h7ip788j7bkygahpp7ylgnrx9jrbhwjzqpjhd1pflmlaxcbflcy";
+  };
+
+  meta = with lib; {
+    description = "foreman clone written in go language";
+    homepage = "https://github.com/mattn/goreman";
+    license = licenses.mit;
+    maintainers = with maintainers; [ zimbatm ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/system/gotop/default.nix b/nixpkgs/pkgs/tools/system/gotop/default.nix
new file mode 100644
index 000000000000..daf9ce58c911
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/gotop/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "gotop";
+  version = "3.0.0";
+
+  goPackagePath = "github.com/cjbassi/gotop";
+
+  src = fetchFromGitHub {
+    owner = "cjbassi";
+    repo = pname;
+    rev = version;
+    sha256 = "1kndj5qjaqgizjakh642fay2i0i1jmfjlk1p01gnjbh2b0yzvj1r";
+  };
+
+  meta = with stdenv.lib; {
+    description = "A terminal based graphical activity monitor inspired by gtop and vtop";
+    homepage = https://github.com/cjbassi/gotop;
+    license = licenses.agpl3;
+    maintainers = [ maintainers.magnetophon ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/gptfdisk/default.nix b/nixpkgs/pkgs/tools/system/gptfdisk/default.nix
new file mode 100644
index 000000000000..71f82bfc3864
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/gptfdisk/default.nix
@@ -0,0 +1,46 @@
+{ fetchurl, stdenv, libuuid, popt, icu, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "gptfdisk";
+  version = "1.0.4";
+
+  src = fetchurl {
+    # https://www.rodsbooks.com/gdisk/${name}.tar.gz also works, but the home
+    # page clearly implies a preference for using SourceForge's bandwidth:
+    url = "mirror://sourceforge/gptfdisk/${pname}-${version}.tar.gz";
+    sha256 = "13d7gff4prl1nsdknjigmb7bbqhn79165n01v4y9mwbnd0d3jqxn";
+  };
+
+  postPatch = ''
+    patchShebangs gdisk_test.sh
+  '' + stdenv.lib.optionalString stdenv.isDarwin ''
+    substituteInPlace Makefile.mac --replace \
+      "-mmacosx-version-min=10.4" "-mmacosx-version-min=10.6"
+    substituteInPlace Makefile.mac --replace \
+      " -arch i386" ""
+    substituteInPlace Makefile.mac --replace \
+      " -I/opt/local/include -I /usr/local/include -I/opt/local/include" ""
+    substituteInPlace Makefile.mac --replace \
+      "/opt/local/lib/libncurses.a" "${ncurses.out}/lib/libncurses.dylib"
+  '';
+
+  buildPhase = stdenv.lib.optionalString stdenv.isDarwin "make -f Makefile.mac";
+  buildInputs = [ libuuid popt icu ncurses ];
+
+  installPhase = ''
+    mkdir -p $out/sbin
+    mkdir -p $out/share/man/man8
+    for prog in gdisk sgdisk fixparts cgdisk
+    do
+        install -v -m755 $prog $out/sbin
+        install -v -m644 $prog.8 $out/share/man/man8
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Set of text-mode partitioning tools for Globally Unique Identifier (GUID) Partition Table (GPT) disks";
+    license = licenses.gpl2;
+    homepage = https://www.rodsbooks.com/gdisk/;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/gt5/default.nix b/nixpkgs/pkgs/tools/system/gt5/default.nix
new file mode 100644
index 000000000000..ea121b0e43c9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/gt5/default.nix
@@ -0,0 +1,26 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  name = "gt5-1.4.0";
+  
+  src = fetchurl {
+    url = "mirror://sourceforge/gt5/${name}.tar.gz";
+    sha256 = "0gm0gzyp4d9rxqddbaskbz5zvmlhyr4nyb5x9g7x4abyyxqjlnkq";
+  };
+
+  patchPhase = ''
+    sed 's/-o root -g root//' -i Makefile
+  '';
+
+  preConfigure = ''
+    makeFlags="$makeFlags PREFIX=$out"
+  '';
+
+  meta = {
+    description = "A diff-capable 'du' browser";
+    homepage = http://gt5.sourceforge.net/;
+    license = stdenv.lib.licenses.gpl2Plus;
+    maintainers = with stdenv.lib.maintainers; [viric];
+    platforms = with stdenv.lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/hardinfo/default.nix b/nixpkgs/pkgs/tools/system/hardinfo/default.nix
new file mode 100644
index 000000000000..6c5019847ff3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/hardinfo/default.nix
@@ -0,0 +1,50 @@
+{ stdenv, fetchurl, which, pkgconfig, gtk2, pcre, glib, libxml2
+, libsoup ? null
+}:
+
+stdenv.mkDerivation rec {
+  pname = "hardinfo";
+  version = "0.5.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/hardinfo.berlios/hardinfo-${version}.tar.bz2";
+    sha256 = "0yhvfc5icam3i4mphlz0m9d9d2irjw8mbsxq203x59wjgh6nrpx0";
+  };
+
+  # Not adding 'hostname' command, the build shouldn't depend on what the build
+  # host is called.
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ which gtk2 pcre glib libxml2 libsoup ];
+
+  # Fixes '#error You must compile this program without "-O"'
+  hardeningDisable = [ "all" ];
+
+  # Ignore undefined references to a bunch of libsoup symbols
+  NIX_LDFLAGS = "--unresolved-symbol=ignore-all";
+
+  preConfigure = ''
+    patchShebangs configure
+
+    # -std=gnu89 fixes build error, copied from
+    # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=757525
+    sed -i -e "s/^CFLAGS = \(.*\)/CFLAGS = \1 -std=gnu89/" Makefile.in
+
+    substituteInPlace ./arch/linux/common/modules.h --replace /sbin/modinfo modinfo
+    substituteInPlace ./arch/linux/common/os.h --replace /lib/libc.so.6 ${stdenv.glibc.out}/lib/libc.so.6
+  '';
+
+  # Makefile supports DESTDIR but not PREFIX (it hardcodes $DESTDIR/usr/).
+  installFlags = [ "DESTDIR=$(out)" ];
+  postInstall = ''
+    mv "$out/usr/"* "$out"
+    rmdir "$out/usr"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://hardinfo.org/;
+    description = "Display information about your hardware and operating system";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ bjornfor ];
+    platforms = [ "x86_64-linux" "i686-linux" ]; # ARMv7 and AArch64 are unsupported
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/hardlink/default.nix b/nixpkgs/pkgs/tools/system/hardlink/default.nix
new file mode 100644
index 000000000000..d1d2b7a3e769
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/hardlink/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl, pcre2 }:
+
+
+stdenv.mkDerivation {
+  pname = "hardlink";
+  version = "1.3-4";
+
+  src = fetchurl {
+    url = "https://src.fedoraproject.org/cgit/rpms/hardlink.git/snapshot/hardlink-aa6325ac4e8100b8ac7d38c7f0bc2708e69bd855.tar.xz";
+    sha256 = "0g4hyrnd9hpykbf06qvvp3s4yyk7flbd95gilkf7r3w9vqiagvs2";
+  };
+
+  buildInputs = [ pcre2 ];
+  NIX_CFLAGS_LINK = "-lpcre2-8";
+
+  buildPhase = ''
+    $CC -O2 hardlink.c -o hardlink $NIX_CFLAGS_LINK
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man/man1
+    cp -f hardlink $out/bin/hardlink
+    cp -f hardlink.1 $out/share/man/man1/hardlink.1
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Consolidate duplicate files via hardlinks";
+    homepage = https://pagure.io/hardlink;
+    repositories.git = https://src.fedoraproject.org/cgit/rpms/hardlink.git;
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/hiera-eyaml/Gemfile b/nixpkgs/pkgs/tools/system/hiera-eyaml/Gemfile
new file mode 100644
index 000000000000..2c2e8f27e403
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/hiera-eyaml/Gemfile
@@ -0,0 +1,3 @@
+source 'https://rubygems.org'
+
+gem 'hiera-eyaml'
diff --git a/nixpkgs/pkgs/tools/system/hiera-eyaml/Gemfile.lock b/nixpkgs/pkgs/tools/system/hiera-eyaml/Gemfile.lock
new file mode 100644
index 000000000000..259c2e170b0e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/hiera-eyaml/Gemfile.lock
@@ -0,0 +1,17 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    hiera-eyaml (3.0.0)
+      highline (~> 1.6.19)
+      optimist
+    highline (1.6.21)
+    optimist (3.0.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  hiera-eyaml
+
+BUNDLED WITH
+   1.17.2
diff --git a/nixpkgs/pkgs/tools/system/hiera-eyaml/default.nix b/nixpkgs/pkgs/tools/system/hiera-eyaml/default.nix
new file mode 100644
index 000000000000..33d97aa7d6b6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/hiera-eyaml/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerEnv, ruby, bundlerUpdateScript }:
+
+bundlerEnv {
+  inherit ruby;
+  pname = "hiera-eyaml";
+  gemdir = ./.;
+
+  passthru.updateScript = bundlerUpdateScript "hiera-eyaml";
+
+  meta = with lib; {
+    description = "Per-value asymmetric encryption of sensitive data for Hiera";
+    homepage = https://github.com/TomPoulton/hiera-eyaml;
+    license = licenses.mit;
+    maintainers = with maintainers; [ benley nicknovitski ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/hiera-eyaml/gemset.nix b/nixpkgs/pkgs/tools/system/hiera-eyaml/gemset.nix
new file mode 100644
index 000000000000..d5aa722e5fce
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/hiera-eyaml/gemset.nix
@@ -0,0 +1,31 @@
+{
+  hiera-eyaml = {
+    dependencies = ["highline" "optimist"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "049rxnwyivqgyjl0sjg7cb2q44ic0wsml288caspd1ps8v31gl18";
+      type = "gem";
+    };
+    version = "3.0.0";
+  };
+  highline = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06bml1fjsnrhd956wqq5k3w8cyd09rv1vixdpa3zzkl6xs72jdn1";
+      type = "gem";
+    };
+    version = "1.6.21";
+  };
+  optimist = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05jxrp3nbn5iilc1k7ir90mfnwc5abc9h78s5rpm3qafwqxvcj4j";
+      type = "gem";
+    };
+    version = "3.0.0";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/system/honcho/default.nix b/nixpkgs/pkgs/tools/system/honcho/default.nix
new file mode 100644
index 000000000000..fcdcc23961b5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/honcho/default.nix
@@ -0,0 +1,50 @@
+{ stdenv, fetchFromGitHub, pythonPackages }:
+
+let
+  inherit (pythonPackages) python;
+  pname = "honcho";
+
+in
+
+pythonPackages.buildPythonApplication rec {
+  name = "${pname}-${version}";
+  version = "1.0.1";
+  namePrefix = "";
+
+  src = fetchFromGitHub {
+    owner = "nickstenning";
+    repo = "honcho";
+    rev = "v${version}";
+    sha256 = "11bd87474qpif20xdcn0ra1idj5k16ka51i658wfpxwc6nzsn92b";
+  };
+
+  checkInputs = with pythonPackages; [ jinja2 pytest mock coverage ];
+
+  buildPhase = ''
+    ${python.interpreter} setup.py build
+  '';
+
+  installPhase = ''
+    mkdir -p "$out/${python.sitePackages}"
+
+    export PYTHONPATH="$out/${python.sitePackages}:$PYTHONPATH"
+
+    ${python.interpreter} setup.py install \
+      --install-lib=$out/${python.sitePackages} \
+      --prefix="$out"
+  '';
+
+  checkPhase = ''
+    runHook preCheck
+    PATH=$out/bin:$PATH coverage run -m pytest
+    runHook postCheck
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A Python clone of Foreman, a tool for managing Procfile-based applications";
+    license = licenses.mit;
+    homepage = https://github.com/nickstenning/honcho;
+    maintainers = with maintainers; [ benley ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/htop/default.nix b/nixpkgs/pkgs/tools/system/htop/default.nix
new file mode 100644
index 000000000000..1b68273a5700
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/htop/default.nix
@@ -0,0 +1,29 @@
+{ lib, fetchurl, stdenv, ncurses,
+IOKit, python3 }:
+
+stdenv.mkDerivation rec {
+  pname = "htop";
+  version = "2.2.0";
+
+  src = fetchurl {
+    url = "https://hisham.hm/htop/releases/${version}/${pname}-${version}.tar.gz";
+    sha256 = "0mrwpb3cpn3ai7ar33m31yklj64c3pp576vh1naqff6f21pq5mnr";
+  };
+
+  nativeBuildInputs = [ python3 ];
+  buildInputs =
+    [ ncurses ] ++
+    lib.optionals stdenv.isDarwin [ IOKit ];
+
+  prePatch = ''
+    patchShebangs scripts/MakeHeader.py
+  '';
+
+  meta = with stdenv.lib; {
+    description = "An interactive process viewer for Linux";
+    homepage = https://hisham.hm/htop/;
+    license = licenses.gpl2Plus;
+    platforms = with platforms; linux ++ freebsd ++ openbsd ++ darwin;
+    maintainers = with maintainers; [ rob relrod ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/hwinfo/default.nix b/nixpkgs/pkgs/tools/system/hwinfo/default.nix
new file mode 100644
index 000000000000..d323f048ba05
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/hwinfo/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchFromGitHub, libx86emu, flex, perl, libuuid }:
+
+stdenv.mkDerivation rec {
+  pname = "hwinfo";
+  version = "21.67";
+
+  src = fetchFromGitHub {
+    owner = "opensuse";
+    repo = "hwinfo";
+    rev = version;
+    sha256 = "1fvlrqx1wgl79a9j3xhhhdihj4lkpbrchfsc27il0p52fynn4dji";
+  };
+
+  patchPhase = ''
+    # VERSION and changelog are usually generated using Git
+    # unless HWINFO_VERSION is defined (see Makefile)
+    export HWINFO_VERSION="${version}"
+    sed -i 's|^\(TARGETS\s*=.*\)\<changelog\>\(.*\)$|\1\2|g' Makefile
+
+    substituteInPlace Makefile --replace "/sbin" "/bin" --replace "/usr/" "/"
+    substituteInPlace src/isdn/cdb/Makefile --replace "lex isdn_cdb.lex" "flex isdn_cdb.lex"
+    substituteInPlace hwinfo.pc.in --replace "prefix=/usr" "prefix=$out"
+  '';
+
+  nativeBuildInputs = [ flex ];
+  buildInputs = [ libx86emu perl libuuid ];
+
+  makeFlags = [ "LIBDIR=/lib" ];
+  #enableParallelBuilding = true;
+
+  installFlags = [ "DESTDIR=$(out)" ];
+
+  meta = with stdenv.lib; {
+    description = "Hardware detection tool from openSUSE";
+    license = licenses.gpl2;
+    homepage = https://github.com/openSUSE/hwinfo;
+    maintainers = with maintainers; [ bobvanderlinden ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/idle3tools/default.nix b/nixpkgs/pkgs/tools/system/idle3tools/default.nix
new file mode 100644
index 000000000000..d1631776d393
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/idle3tools/default.nix
@@ -0,0 +1,22 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation {
+  name = "idle3-tools-0.9.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/idle3-tools/idle3-tools-0.9.1.tgz";
+    sha256 = "00ia7xq9yldxyl9gz0mr4xa568nav14p0fnv82f2rbbkg060cy4p";
+  };
+
+  preInstall = ''
+    installFlags=DESTDIR=$out
+  '';
+
+  meta = {
+    homepage = http://idle3-tools.sourceforge.net/;
+    description = "Tool to get/set the infamous idle3 timer in WD HDDs";
+    license = stdenv.lib.licenses.gpl3;
+    maintainers = with stdenv.lib.maintainers; [viric];
+    platforms = with stdenv.lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/illum/default.nix b/nixpkgs/pkgs/tools/system/illum/default.nix
new file mode 100644
index 000000000000..767fccbd3882
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/illum/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchgit, pkgconfig, ninja, libevdev, libev }:
+
+stdenv.mkDerivation {
+  version = "0.4";
+  pname = "illum";
+
+  src = fetchgit {
+    url = "https://github.com/jmesmon/illum.git";
+    fetchSubmodules = true;
+    rev = "48ce8631346b1c88a901a8e4fa5fa7e8ffe8e418";
+    sha256 = "05v3hz7n6b1mlhc6zqijblh1vpl0ja1y8y0lafw7mjdz03wxhfdb";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ ninja libevdev libev ];
+
+  configurePhase = ''
+    bash ./configure
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv illum-d $out/bin
+  '';
+
+  meta = {
+    homepage = https://github.com/jmesmon/illum;
+    description = "Daemon that wires button presses to screen backlight level";
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ stdenv.lib.maintainers.dancek ];
+    license = stdenv.lib.licenses.agpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/incron/default.nix b/nixpkgs/pkgs/tools/system/incron/default.nix
new file mode 100644
index 000000000000..2afbed2f9bb2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/incron/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromGitHub, bash }:
+
+stdenv.mkDerivation rec {
+  name = "incron-0.5.12";
+  src = fetchFromGitHub {
+    owner = "ar-";
+    repo = "incron";
+    rev = name;
+    sha256 = "11d5f98cjafiv9h9zzzrw2s06s2fvdg8gp64km7mdprd2xmy6dih";
+  };
+
+  patches = [ ./default_path.patch ];
+
+  prePatch = ''
+    sed -i "s|/bin/bash|${bash}/bin/bash|g" usertable.cpp
+  '';
+
+  installFlags = [ "PREFIX=$(out)" ];
+  installTargets = [ "install-man" ];
+
+  preInstall = ''
+    mkdir -p $out/bin
+
+    # make install doesn't work because setuid and permissions
+    # just manually install the binaries instead
+    cp incrond incrontab $out/bin/
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A cron-like daemon which handles filesystem events.";
+    homepage = https://github.com/ar-/incron;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.aanderse ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/incron/default_path.patch b/nixpkgs/pkgs/tools/system/incron/default_path.patch
new file mode 100644
index 000000000000..ae173ea29e62
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/incron/default_path.patch
@@ -0,0 +1,36 @@
+diff --git usertable.cpp usertable.cpp
+index 11fd04b..a8681bd 100644
+--- a/usertable.cpp
++++ b/usertable.cpp
+@@ -43,9 +43,6 @@
+ #define DONT_FOLLOW(mask) (false)
+ #endif // IN_DONT_FOLLOW
+ 
+-// this is not enough, but...
+-#define DEFAULT_PATH "/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin"
+-
+ 
+ PROC_MAP UserTable::s_procMap;
+ 
+@@ -597,12 +594,20 @@ void UserTable::RunAsUser(std::string cmd) const
+     if (clearenv() != 0)
+       goto failed;
+ 
++    // try to recreate the user path as best as possible
++    std::string DEFAULT_PATH;
++    DEFAULT_PATH += "/run/wrappers/bin:";
++    DEFAULT_PATH += pwd->pw_dir;
++    DEFAULT_PATH += "/.nix-profile/bin:/nix/var/nix/profiles/default/bin:/run/current-system/sw/bin:/etc/profiles/per-user/";
++    DEFAULT_PATH += pwd->pw_name;
++    DEFAULT_PATH += "/bin";
++
+     if (    setenv("LOGNAME",   pwd->pw_name,   1) != 0
+         ||  setenv("USER",      pwd->pw_name,   1) != 0
+         ||  setenv("USERNAME",  pwd->pw_name,   1) != 0
+         ||  setenv("HOME",      pwd->pw_dir,    1) != 0
+         ||  setenv("SHELL",     pwd->pw_shell,  1) != 0
+-        ||  setenv("PATH",      DEFAULT_PATH,   1) != 0)
++        ||  setenv("PATH",      DEFAULT_PATH.c_str(),   1) != 0)
+     {
+       goto failed;
+     }
diff --git a/nixpkgs/pkgs/tools/system/inxi/default.nix b/nixpkgs/pkgs/tools/system/inxi/default.nix
new file mode 100644
index 000000000000..7866bece0661
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/inxi/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, perl, perlPackages, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "inxi";
+  version = "3.0.37-1";
+
+  src = fetchFromGitHub {
+    owner = "smxi";
+    repo = "inxi";
+    rev = version;
+    sha256 = "15wvj9w601ci3bavd1hk5qlm8dfm7a7cjglczk29yir5yw2jww3f";
+  };
+
+  buildInputs = [ perl makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp inxi $out/bin/
+    wrapProgram $out/bin/inxi \
+      --set PERL5LIB "${perlPackages.makePerlPath (with perlPackages; [ CpanelJSONXS ])}"
+    mkdir -p $out/share/man/man1
+    cp inxi.1 $out/share/man/man1/
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A full featured CLI system information tool";
+    homepage = https://smxi.org/docs/inxi.htm;
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ primeos ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/ioping/default.nix b/nixpkgs/pkgs/tools/system/ioping/default.nix
new file mode 100644
index 000000000000..5cd3a707dde2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/ioping/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "ioping";
+  version = "1.1";
+
+  src = fetchFromGitHub {
+    owner = "koct9i";
+    repo = "ioping";
+    rev = "v${version}";
+    sha256 = "0cv2496jplka55yqdcf3ln78r8yggy4lgmgf06l6fbljjrdx7pgq";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with stdenv.lib; {
+    description = "Disk I/O latency measuring tool";
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.unix;
+    license = licenses.gpl3Plus;
+    homepage = https://github.com/koct9i/ioping;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/iops/default.nix b/nixpkgs/pkgs/tools/system/iops/default.nix
new file mode 100644
index 000000000000..7e6854afe627
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/iops/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "iops";
+  version = "0.1";
+
+  src = fetchurl {
+    url = "https://www.vanheusden.com/iops/${pname}-${version}.tgz";
+    sha256 = "1knih6dwwiicycp5ml09bj3k8j7air9bng070sfnxwfv786y90bz";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp iops $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Measure I/O operations per second of a storage device";
+    longDescription = ''
+      Iops lets you measure how many I/O operations per second a storage device can perform.
+      Usefull for determing e.g. the best RAID-setting of your storage device.
+    '';
+    homepage = http://www.vanheusden.com/iops/;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ davidak ];
+    platforms = platforms.linux; # build problems on Darwin
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/system/ior/default.nix b/nixpkgs/pkgs/tools/system/ior/default.nix
new file mode 100644
index 000000000000..6217f601121c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/ior/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, openmpi, automake, autoconf, perl }:
+
+let
+  version = "3.0.1";
+  sha256 = "039rh4z3lsj4vqjsqgakk0b7dkrdrkkzj0p1cjikpc9gn36zpghc";
+in
+
+stdenv.mkDerivation {
+  pname = "ior";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://github.com/LLNL/ior/archive/${version}.tar.gz";
+    inherit sha256;
+  };
+
+  buildInputs = [ openmpi automake autoconf perl ];
+
+  enableParallelBuilding = true;
+
+  preConfigure = "./bootstrap";
+
+  meta = with stdenv.lib; {
+    homepage = https://www.nersc.gov/users/computational-systems/cori/nersc-8-procurement/trinity-nersc-8-rfp/nersc-8-trinity-benchmarks/ior/;
+    description = "Parallel file system I/O performance test";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ bzizou ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/ipmitool/default.nix b/nixpkgs/pkgs/tools/system/ipmitool/default.nix
new file mode 100644
index 000000000000..3105cba5a344
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/ipmitool/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, lib, fetchurl, openssl, static ? false }:
+
+let
+  pkgname = "ipmitool";
+  version = "1.8.18";
+in
+stdenv.mkDerivation {
+  name = "${pkgname}-${version}";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pkgname}/${pkgname}-${version}.tar.gz";
+    sha256 = "0kfh8ny35rvwxwah4yv91a05qwpx74b5slq2lhrh71wz572va93m";
+  };
+
+  patchPhase = stdenv.lib.optionalString stdenv.isDarwin ''
+    substituteInPlace src/plugins/ipmi_intf.c --replace "s6_addr16" "s6_addr"
+  '';
+
+  buildInputs = [ openssl ];
+
+  preConfigure = ''
+    configureFlagsArray=(
+      --infodir=$out/share/info
+      --mandir=$out/share/man
+      ${if static then "LDFLAGS=-static --enable-static --disable-shared" else "--enable-shared"}
+    )
+  '';
+  makeFlags = stdenv.lib.optional static "AM_LDFLAGS=-all-static";
+  dontDisableStatic = static;
+
+  meta = with lib; {
+    description = ''Command-line interface to IPMI-enabled devices'';
+    license = licenses.bsd3;
+    homepage = https://sourceforge.net/projects/ipmitool/;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/ipmiutil/default.nix b/nixpkgs/pkgs/tools/system/ipmiutil/default.nix
new file mode 100644
index 000000000000..0d2a78efba12
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/ipmiutil/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, openssl }:
+
+stdenv.mkDerivation rec {
+  baseName = "ipmiutil";
+  version = "3.1.5";
+  name = "${baseName}-${version}";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/${baseName}/${name}.tar.gz";
+    sha256 = "18q1nc2caaixy3dr2axdvwq37iz916piarvmg0jdfzaxfpaxpk2q";
+  };
+
+  buildInputs = [ openssl ];
+
+  preBuild = ''
+    sed -e "s@/usr@$out@g" -i Makefile */Makefile */*/Makefile
+    sed -e "s@/etc@$out/etc@g" -i Makefile */Makefile */*/Makefile
+    sed -e "s@/var@$out/var@g" -i Makefile */Makefile */*/Makefile
+  '';
+
+  NIX_CFLAGS_COMPILE = "-fno-stack-protector";
+
+  meta = with stdenv.lib; {
+    description = "An easy-to-use IPMI server management utility";
+    homepage = http://ipmiutil.sourceforge.net/;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+    license = licenses.bsd3;
+    downloadPage = "https://sourceforge.net/projects/ipmiutil/files/ipmiutil/";
+    inherit version;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/ipmiutil/default.upstream b/nixpkgs/pkgs/tools/system/ipmiutil/default.upstream
new file mode 100644
index 000000000000..45e3a936825a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/ipmiutil/default.upstream
@@ -0,0 +1,4 @@
+url https://sourceforge.net/projects/ipmiutil/files/
+SF_version_tarball
+SF_redirect
+minimize_overwrite
diff --git a/nixpkgs/pkgs/tools/system/java-service-wrapper/default.nix b/nixpkgs/pkgs/tools/system/java-service-wrapper/default.nix
new file mode 100644
index 000000000000..19502e5a352f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/java-service-wrapper/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchurl
+, jdk
+, ant, cunit, ncurses
+}:
+
+stdenv.mkDerivation rec {
+  pname = "java-service-wrapper";
+  version = "3.5.41";
+
+  src = fetchurl {
+    url = "https://wrapper.tanukisoftware.com/download/${version}/wrapper_${version}_src.tar.gz";
+    sha256 = "0wvazc4y134brn99aa4rc9jdh1h2q3l7qhhvbcs6lhf4ym47sskm";
+  };
+
+  buildInputs = [ jdk ];
+  nativeBuildInputs = [ ant cunit ncurses ];
+
+  buildPhase = ''
+    export ANT_HOME=${ant}
+    export JAVA_HOME=${jdk}/lib/openjdk/jre/
+    export JAVA_TOOL_OPTIONS=-Djava.home=$JAVA_HOME
+    export CLASSPATH=${jdk}/lib/openjdk/lib/tools.jar
+
+    ${if stdenv.isi686 then "./build32.sh" else "./build64.sh"}
+  '';
+
+  installPhase = ''
+    mkdir -p $out/{bin,lib}
+    cp bin/wrapper $out/bin/wrapper
+    cp lib/wrapper.jar $out/lib/wrapper.jar
+    cp lib/libwrapper.so $out/lib/libwrapper.so
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Enables a Java Application to be run as a Windows Service or Unix Daemon";
+    homepage = "https://wrapper.tanukisoftware.com/";
+    license = licenses.gpl2;
+    platforms = [ "x86_64-linux" "i686-linux" ];
+    maintainers = [ maintainers.suhr ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/journalwatch/default.nix b/nixpkgs/pkgs/tools/system/journalwatch/default.nix
new file mode 100644
index 000000000000..e0aaee31217c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/journalwatch/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, buildPythonPackage, fetchFromGitHub, pythonOlder, systemd, pytest }:
+
+buildPythonPackage rec {
+  pname = "journalwatch";
+  version = "1.1.0";
+  disabled = pythonOlder "3.3";
+
+  src = fetchFromGitHub {
+    owner = "The-Compiler";
+    repo = pname;
+    rev = "v${version}";
+    sha512 = "11g2f1w9lfqw6zxxyg7qrqpb914s6w71j0gnpw7qr7cak2l5jlf2l39dlg30y55rw7jgmf0yg77wwzd0c430mq1n6q1v8w86g1rwkzb";
+  };
+
+  # can be removed post 1.1.0
+  postPatch = ''
+    substituteInPlace test_journalwatch.py \
+      --replace "U Thu Jan  1 00:00:00 1970 prio foo [1337]" "U Thu Jan  1 00:00:00 1970 pprio foo [1337]"
+  '';
+
+
+  doCheck = true;
+  checkInputs = [ pytest ];
+  checkPhase = ''
+    pytest
+  '';
+
+  propagatedBuildInputs = [
+    systemd
+  ];
+
+
+  meta = with stdenv.lib; {
+    description = "journalwatch is a tool to find error messages in the systemd journal.";
+    homepage = https://github.com/The-Compiler/journalwatch;
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ florianjacob ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/jump/default.nix b/nixpkgs/pkgs/tools/system/jump/default.nix
new file mode 100644
index 000000000000..697fc77d090a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/jump/default.nix
@@ -0,0 +1,40 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "jump";
+  version = "0.23.0";
+
+  src = fetchFromGitHub {
+    owner = "gsamokovarov";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1acpvg3adcjnxnz9vx7q99cvnkkvkxfdjkbh2rb6iwakx7ksaakv";
+  };
+
+  modSha256 = "1fzsm85c31vkdw80kijxmjhk8jyhjz8b21npgks2qrnizhm6iaf8";
+
+  outputs = [ "out" "man"];
+  postInstall = ''
+    install -D --mode=444 man/j.1 man/jump.1 -t $man/man/man1/
+
+    # generate completion scripts for jump
+    export HOME="$NIX_BUILD_TOP"
+    mkdir -p $out/share/{bash-completion/completions,fish/vendor_completions.d,zsh/site-functions}
+    $out/bin/jump shell bash > "$out/share/bash-completion/completions/jump"
+    $out/bin/jump shell fish > $out/share/fish/vendor_completions.d/jump.fish
+    $out/bin/jump shell zsh > $out/share/zsh/site-functions/_jump
+  '';
+
+  meta = with lib; {
+    description = "Jump helps you navigate faster by learning your habits.";
+    longDescription = ''
+      Jump integrates with the shell and learns about your
+      navigational habits by keeping track of the directories you visit. It
+      strives to give you the best directory for the shortest search term.
+    '';
+    homepage = https://github.com/gsamokovarov/jump;
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ sondr3 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/krakenx/default.nix b/nixpkgs/pkgs/tools/system/krakenx/default.nix
new file mode 100644
index 000000000000..c6866264a9b0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/krakenx/default.nix
@@ -0,0 +1,23 @@
+{ lib, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "krakenx";
+  version = "0.0.3";
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "1khw1rxra5hn7hwp16i6kgj89znq8vjsyly3r2dxx2z2bddil000";
+  };
+
+  propagatedBuildInputs = lib.singleton python3Packages.pyusb;
+
+  doCheck = false; # there are no tests
+
+  meta = with lib; {
+    description = "Python script to control NZXT cooler Kraken X52/X62/X72";
+    homepage = https://github.com/KsenijaS/krakenx;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.willibutz ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/ledmon/default.nix b/nixpkgs/pkgs/tools/system/ledmon/default.nix
new file mode 100644
index 000000000000..ab11fc9e27f8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/ledmon/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, perl, udev, sg3_utils }:
+
+stdenv.mkDerivation rec {
+  pname = "ledmon";
+  version = "0.92";
+
+  src = fetchFromGitHub {
+    owner = "intel";
+    repo = "ledmon";
+    rev = "v${version}";
+    sha256 = "1lz59606vf2sws5xwijxyffm8kxcf8p9qbdpczsq1b5mm3dk6lvp";
+  };
+
+  nativeBuildInputs = [
+    perl # for pod2man
+  ];
+  buildInputs = [ udev sg3_utils ];
+
+  installTargets = [ "install" "install-systemd" ];
+
+  makeFlags = [
+    "MAN_INSTDIR=${placeholder "out"}/share/man"
+    "SYSTEMD_SERVICE_INSTDIR=${placeholder "out"}/lib/systemd/system"
+    "LEDCTL_INSTDIR=${placeholder "out"}/sbin"
+    "LEDMON_INSTDIR=${placeholder "out"}/sbin"
+  ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/intel/ledmon;
+    description = "Enclosure LED Utilities";
+    platforms = platforms.linux;
+    license = with licenses; [ gpl2 ];
+    maintainers = with stdenv.lib.maintainers; [ sorki ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/loadwatch/default.nix b/nixpkgs/pkgs/tools/system/loadwatch/default.nix
new file mode 100644
index 000000000000..eb7f1e3bb59b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/loadwatch/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchgit, ... }:
+
+stdenv.mkDerivation {
+  name = "loadwatch-1.1-1-g6d2544c";
+  src = fetchgit {
+    url = "git://woffs.de/git/fd/loadwatch.git";
+    sha256 = "1bhw5ywvhyb6snidsnllfpdi1migy73wg2gchhsfbcpm8aaz9c9b";
+    rev = "6d2544c0caaa8a64bbafc3f851e06b8056c30e6e";
+  };
+  installPhase = ''
+    mkdir -p $out/bin
+    install loadwatch lw-ctl $out/bin
+  '';
+  meta = with stdenv.lib; {
+    description = "Run a program using only idle cycles";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ woffs ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/localtime/default.nix b/nixpkgs/pkgs/tools/system/localtime/default.nix
new file mode 100644
index 000000000000..39e1bc7b6e7d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/localtime/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromGitHub, buildGoPackage, m4 }:
+
+buildGoPackage rec {
+  name = "localtime-2017-11-07";
+
+  src = fetchFromGitHub {
+    owner = "Stebalien";
+    repo = "localtime";
+    rev = "2e7b4317c723406bd75b2a1d640219ab9f8090ce";
+    sha256 = "04fyna8p7q7skzx9fzmncd6gx7x5pwa9jh8a84hpljlvj0kldfs8";
+  };
+  goPackagePath = "github.com/Stebalien/localtime";
+
+  buildInputs = [ m4 ];
+
+  makeFlags = [ 
+    "PREFIX=${placeholder "out"}" 
+    "BINDIR=${placeholder "bin"}/bin" 
+  ];
+
+  buildPhase = ''
+    cd go/src/${goPackagePath}
+    make $makeFlags
+  '';
+
+  installPhase = ''
+    make install $makeFlags
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A daemon for keeping the system timezone up-to-date based on the current location";
+    homepage = https://github.com/Stebalien/localtime;
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/logcheck/default.nix b/nixpkgs/pkgs/tools/system/logcheck/default.nix
new file mode 100644
index 000000000000..d51df4f408a4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/logcheck/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, fetchurl, lockfileProgs, perlPackages }:
+
+stdenv.mkDerivation rec {
+  pname = "logcheck";
+  version = "1.3.20";
+  _name    = "logcheck_${version}";
+
+  src = fetchurl {
+    url = "mirror://debian/pool/main/l/logcheck/${_name}.tar.xz";
+    sha256 = "1rmkvxhcwr9gb6z4dlgr6rrx5l70hshlxdggs6qx0w1ljcmx1dlz";
+  };
+
+  prePatch = ''
+    # do not set sticky bit in nix store.
+    substituteInPlace Makefile --replace 2750 0750
+  '';
+
+  preConfigure = ''
+    substituteInPlace src/logtail --replace "/usr/bin/perl" "${perlPackages.perl}/bin/perl"
+    substituteInPlace src/logtail2 --replace "/usr/bin/perl" "${perlPackages.perl}/bin/perl"
+
+    sed -i -e 's|! -f /usr/bin/lockfile|! -f ${lockfileProgs}/bin/lockfile|' \
+           -e 's|^\([ \t]*\)lockfile-|\1${lockfileProgs}/bin/lockfile-|' \
+           -e "s|/usr/sbin/logtail2|$out/sbin/logtail2|" \
+           -e 's|mime-construct|${perlPackages.mimeConstruct}/bin/mime-construct|' \
+           -e 's|\$(run-parts --list "\$dir")|"$dir"/*|' src/logcheck
+  '';
+
+  makeFlags = [
+    "DESTDIR=$(out)"
+    "SBINDIR=sbin"
+    "BINDIR=bin"
+    "SHAREDIR=share/logtail/detectrotate"
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Mails anomalies in the system logfiles to the administrator";
+    longDescription = ''
+      Mails anomalies in the system logfiles to the administrator.
+
+      Logcheck helps spot problems and security violations in your logfiles automatically and will send the results to you by e-mail.
+      Logcheck was part of the Abacus Project of security tools, but this version has been rewritten.
+    '';
+    homepage = https://salsa.debian.org/debian/logcheck;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.bluescreen303 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/logrotate/default.nix b/nixpkgs/pkgs/tools/system/logrotate/default.nix
new file mode 100644
index 000000000000..9fd6c4ea81a5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/logrotate/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchFromGitHub, gzip, popt, autoreconfHook
+, mailutils ? null
+}:
+
+stdenv.mkDerivation rec {
+  pname = "logrotate";
+  version = "3.15.1";
+
+  src = fetchFromGitHub {
+    owner = "logrotate";
+    repo = "logrotate";
+    rev = version;
+    sha256 = "0l92zarygp34qnw3p5rcwqsvgz7zmmhi7lgh00vj2jb9zkjbldc0";
+  };
+
+  # Logrotate wants to access the 'mail' program; to be done.
+  patchPhase = ''
+    sed -i -e 's,[a-z/]\+gzip,${gzip}/bin/gzip,' \
+           -e 's,[a-z/]\+gunzip,${gzip}/bin/gunzip,' configure.ac
+
+    ${stdenv.lib.optionalString (mailutils != null) ''
+    sed -i -e 's,[a-z/]\+mail,${mailutils}/bin/mail,' configure.ac
+    ''}
+  '';
+
+  autoreconfPhase = ''
+    ./autogen.sh
+  '';
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ popt ];
+
+  meta = {
+    homepage = https://fedorahosted.org/releases/l/o/logrotate/;
+    description = "Rotates and compresses system logs";
+    license = stdenv.lib.licenses.gpl2Plus;
+    maintainers = [ stdenv.lib.maintainers.viric ];
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/lr/default.nix b/nixpkgs/pkgs/tools/system/lr/default.nix
new file mode 100644
index 000000000000..788319c0c044
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/lr/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "lr";
+  version = "1.5";
+
+  src = fetchFromGitHub {
+    owner = "chneukirchen";
+    repo = "lr";
+    rev = "v${version}";
+    sha256 = "1dxla14ldyym01lhmacfwps1vim0fk67c2ik2w08gg534siyj770";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/chneukirchen/lr;
+    description = "List files recursively";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ vika_nezrimaya ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/lshw/default.nix b/nixpkgs/pkgs/tools/system/lshw/default.nix
new file mode 100644
index 000000000000..29c20ad8d534
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/lshw/default.nix
@@ -0,0 +1,54 @@
+{ stdenv, lib, fetchurl, fetchpatch
+, withGUI ? false, gtk2, pkgconfig, sqlite # compile GUI
+}:
+
+let numVersion = "02.18"; # :(
+in
+stdenv.mkDerivation rec {
+  name = "lshw-${numVersion}b";
+  version = numVersion;
+
+  src = fetchurl {
+    url = "https://ezix.org/software/files/lshw-B.${version}.tar.gz";
+    sha256 = "0brwra4jld0d53d7jsgca415ljglmmx1l2iazpj4ndilr48yy8mf";
+  };
+
+  patches = [
+    (fetchpatch {
+      # fix crash in scan_dmi_sysfs() when run as non-root
+      url = "https://github.com/lyonel/lshw/commit/fbdc6ab15f7eea0ddcd63da355356ef156dd0d96.patch";
+      sha256 = "147wyr5m185f8swsmb4q1ahs9r1rycapbpa2548aqbv298bbish3";
+    })
+    (fetchpatch {
+      # support cross-compilation
+      url = "https://github.com/lyonel/lshw/commit/8486d25cea9b68794504fbd9e5c6e294bac6cb07.patch";
+      sha256 = "08f0wnxsq0agvsc66bhc7lxvk564ir0pp8pg3cym6a621prb9lm0";
+    })
+  ];
+
+  nativeBuildInputs = [ pkgconfig ];
+
+  buildInputs = lib.optionals withGUI [ gtk2 sqlite ];
+
+  # Fix version info.
+  preConfigure = ''
+    sed -e "s/return \"unknown\"/return \"${version}\"/" \
+        -i src/core/version.cc
+  '';
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  buildFlags = [ "all" ] ++ lib.optional withGUI "gui";
+
+  installTargets = [ "install" ] ++ lib.optional withGUI "install-gui";
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    homepage = https://ezix.org/project/wiki/HardwareLiSter;
+    description = "Provide detailed information on the hardware configuration of the machine";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ phreedom ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/mcron/default.nix b/nixpkgs/pkgs/tools/system/mcron/default.nix
new file mode 100644
index 000000000000..1831041063b6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/mcron/default.nix
@@ -0,0 +1,38 @@
+{ fetchurl, stdenv, guile, which, ed, libtool }:
+
+stdenv.mkDerivation rec {
+  name = "mcron-1.0.6";
+
+  src = fetchurl {
+    url = "mirror://gnu/mcron/${name}.tar.gz";
+    sha256 = "0yvrfzzdy2m7fbqkr61fw01wd9r2jpnbyabxhcsfivgxywknl0fy";
+  };
+
+  patches = [ ./install-vixie-programs.patch ];
+
+  # don't attempt to chmod +s files in the nix store
+  postPatch = ''
+    substituteInPlace makefile.in --replace "rwxs" "rwx"
+  '';
+
+  buildInputs = [ guile which ed libtool ];
+
+  doCheck = true;
+
+  meta = {
+    description = "Flexible implementation of `cron' in Guile";
+
+    longDescription = ''
+      The GNU package mcron (Mellor's cron) is a 100% compatible
+      replacement for Vixie cron.  It is written in pure Guile, and
+      allows configuration files to be written in scheme (as well as
+      Vixie's original format) for infinite flexibility in specifying
+      when jobs should be run.  Mcron was written by Dale Mellor.
+    '';
+
+    homepage = https://www.gnu.org/software/mcron/;
+
+    license = stdenv.lib.licenses.gpl3Plus;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/mcron/install-vixie-programs.patch b/nixpkgs/pkgs/tools/system/mcron/install-vixie-programs.patch
new file mode 100644
index 000000000000..d268ecb4a0ab
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/mcron/install-vixie-programs.patch
@@ -0,0 +1,23 @@
+This patch allows us to install the Vixie-compatible binaries as
+non-root without creating /var/run, etc.
+
+--- mcron-1.0.6/makefile.in	2010-06-19 20:44:17.000000000 +0200
++++ mcron-1.0.6/makefile.in	2010-07-04 16:16:25.000000000 +0200
+@@ -1004,15 +1004,11 @@ mcron.c : main.scm crontab.scm makefile.
+ 	@rm -f mcron.escaped.scm > /dev/null 2>&1
+ 
+ install-exec-hook:
+-	@if [ "x@NO_VIXIE_CLOBBER@" != "xyes"   -a   "`id -u`" -eq "0" ]; then \
++	@if [ "x@NO_VIXIE_CLOBBER@" != "xyes" ]; then \
+        rm -f $(fpp)cron$(EXEEXT) > /dev/null 2>&1; \
+        $(INSTALL) --mode='u=rwx' mcron$(EXEEXT) $(fpp)cron$(EXEEXT); \
+        rm -f $(fpp)crontab$(EXEEXT) > /dev/null 2>&1; \
+        $(INSTALL) --mode='u=rwxs,og=rx' mcron$(EXEEXT) $(fpp)crontab$(EXEEXT); \
+-       $(INSTALL) -d --mode='u=rwx' $(DESTDIR)/var/cron; \
+-       $(INSTALL) -d --mode='u=rwx,og=rx' $(DESTDIR)/var/run; \
+-       $(INSTALL) -d --mode='u=rwx,og=rx' $(DESTDIR)@GUILE_SITE@; \
+-       $(INSTALL) -d --mode='u=rwx,og=rx' $(DESTDIR)@GUILE_SITE@/mcron; \
+     elif [ "x@NO_VIXIE_CLOBBER@" = "xyes" ]; then \
+        echo "Not installing Vixie-style programs"; \
+     else \
+
diff --git a/nixpkgs/pkgs/tools/system/memtester/default.nix b/nixpkgs/pkgs/tools/system/memtester/default.nix
new file mode 100644
index 000000000000..ff6ccb534fb9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/memtester/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "memtester";
+  version = "4.3.0";
+
+  preConfigure = ''
+    echo "$CC" > conf-cc
+    echo "$CC" > conf-ld
+  '';
+
+  src = fetchurl {
+    url = "http://pyropus.ca/software/memtester/old-versions/memtester-${version}.tar.gz";
+    sha256 = "127xymmyzb9r6dxqrwd69v7gf8csv8kv7fjvagbglf3wfgyy5pzr";
+  };
+
+  installFlags = [ "INSTALLPATH=$(out)" ];
+
+  meta = with stdenv.lib; {
+    description = "A userspace utility for testing the memory subsystem for faults";
+    homepage = http://pyropus.ca/software/memtester/;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.dezgeg ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/minijail/default.nix b/nixpkgs/pkgs/tools/system/minijail/default.nix
new file mode 100644
index 000000000000..2b4d1deb9f9b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/minijail/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, fetchFromGitiles, libcap }:
+
+stdenv.mkDerivation rec {
+  pname = "minijail";
+  version = "android-10.0.0_r9";
+
+  src = fetchFromGitiles {
+    url = "https://android.googlesource.com/platform/external/minijail";
+    rev = version;
+    sha256 = "0gcfsyim1krrddcklydqfxl8mamaxgail2xl5qp9yclq60km8f22";
+  };
+
+  buildInputs = [ libcap ];
+
+  makeFlags = [ "LIBDIR=$(out)/lib" ];
+
+  preConfigure = ''
+    substituteInPlace common.mk --replace /bin/echo echo
+    sed -i '/#include <asm\/siginfo.h>/ d' signal_handler.c
+  '';
+
+  postPatch = ''
+    patchShebangs platform2_preinstall.sh
+  '';
+
+  postBuild = ''
+    ./platform2_preinstall.sh ${version} $out/include/chromeos
+  '';
+
+  installPhase = ''
+    mkdir -p $out/lib/pkgconfig $out/include/chromeos $out/bin
+    cp -v *.so $out/lib
+    cp -v *.pc $out/lib/pkgconfig
+    cp -v libminijail.h scoped_minijail.h $out/include/chromeos
+    cp -v minijail0 $out/bin
+  '';
+
+  meta = {
+    homepage = https://android.googlesource.com/platform/external/minijail/;
+    description = "Sandboxing library and application using Linux namespaces and capabilities";
+    license = stdenv.lib.licenses.bsd3;
+    maintainers = with stdenv.lib.maintainers; [pcarrier];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/monit/default.nix b/nixpkgs/pkgs/tools/system/monit/default.nix
new file mode 100644
index 000000000000..f4238e272480
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/monit/default.nix
@@ -0,0 +1,41 @@
+{ stdenv
+, fetchurl, bison, flex
+, zlib
+, usePAM ? stdenv.hostPlatform.isLinux, pam
+, useSSL ? true, openssl
+}:
+
+stdenv.mkDerivation rec {
+  name = "monit-5.26.0";
+
+  src = fetchurl {
+    url = "${meta.homepage}dist/${name}.tar.gz";
+    sha256 = "1hpk0agxi7g9vmfqvrwr5wk7pr52wdlv3vs0j3l2p6mgldl4bz47";
+  };
+
+  nativeBuildInputs = [ bison flex ];
+  buildInputs = [ zlib.dev ] ++
+    stdenv.lib.optionals useSSL [ openssl ] ++
+    stdenv.lib.optionals usePAM [ pam ];
+
+  configureFlags = [
+    (stdenv.lib.withFeature usePAM "pam")
+  ] ++ (if useSSL then [
+      "--with-ssl-incl-dir=${openssl.dev}/include"
+      "--with-ssl-lib-dir=${openssl.out}/lib"
+    ] else [
+      "--without-ssl"
+  ]) ++ stdenv.lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
+    # will need to check both these are true for musl
+    "libmonit_cv_setjmp_available=yes"
+    "libmonit_cv_vsnprintf_c99_conformant=yes"
+  ];
+
+  meta = {
+    homepage = http://mmonit.com/monit/;
+    description = "Monitoring system";
+    license = stdenv.lib.licenses.agpl3;
+    maintainers = with stdenv.lib.maintainers; [ raskin wmertens ];
+    platforms = with stdenv.lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/mq-cli/default.nix b/nixpkgs/pkgs/tools/system/mq-cli/default.nix
new file mode 100644
index 000000000000..930bf8382c64
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/mq-cli/default.nix
@@ -0,0 +1,24 @@
+{ fetchFromGitHub, lib, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mq-cli";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner  = "aprilabank";
+    repo   = "mq-cli";
+    rev    = "v${version}";
+    sha256 = "02z85waj5jc312biv2qhbgplsggxgjmfmyv9v8b1ky0iq1mpxjw7";
+  };
+
+  cargoSha256 = "03ab6jbcgmbgg9hn7ihk8814sjwdmrr9p4xlll6nfdad4a7gq3yn";
+
+  meta = with lib; {
+    description      = "CLI tool to manage POSIX message queues";
+    homepage         = "https://github.com/aprilabank/mq-cli";
+    license          = licenses.mit;
+    maintainers      = with maintainers; [ tazjin ];
+    platforms        = platforms.linux;
+    repositories.git = git://github.com/aprilabank/mq-cli.git;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/netdata/default.nix b/nixpkgs/pkgs/tools/system/netdata/default.nix
new file mode 100644
index 000000000000..4f8cfb966e86
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/netdata/default.nix
@@ -0,0 +1,73 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig
+, CoreFoundation, IOKit, libossp_uuid
+, curl, libcap,  libuuid, lm_sensors, zlib
+, withCups ? false, cups
+, withDBengine ? true, libuv, lz4, judy
+, withIpmi ? (!stdenv.isDarwin), freeipmi
+, withNetfilter ? (!stdenv.isDarwin), libmnl, libnetfilter_acct
+, withSsl ? true, openssl
+, withDebug ? false
+}:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  version = "1.19.0";
+  pname = "netdata";
+
+  src = fetchFromGitHub {
+    owner = "netdata";
+    repo = "netdata";
+    rev = "v${version}";
+    sha256 = "1s6kzx4xh8b6v7ki8h2mfzprj5rxvlgx2md20cr8c0v81qpz3q3q";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  buildInputs = [ curl.dev zlib.dev ]
+    ++ optionals stdenv.isDarwin [ CoreFoundation IOKit libossp_uuid ]
+    ++ optionals (!stdenv.isDarwin) [ libcap.dev libuuid.dev ]
+    ++ optionals withCups [ cups ]
+    ++ optionals withDBengine [ libuv lz4.dev judy ]
+    ++ optionals withIpmi [ freeipmi ]
+    ++ optionals withNetfilter [ libmnl libnetfilter_acct ]
+    ++ optionals withSsl [ openssl.dev ];
+
+  patches = [
+    ./no-files-in-etc-and-var.patch
+  ];
+
+  NIX_CFLAGS_COMPILE = optionalString withDebug "-O1 -ggdb -DNETDATA_INTERNAL_CHECKS=1";
+
+  postInstall = optionalString (!stdenv.isDarwin) ''
+    # rename this plugin so netdata will look for setuid wrapper
+    mv $out/libexec/netdata/plugins.d/apps.plugin \
+       $out/libexec/netdata/plugins.d/apps.plugin.org
+    ${optionalString withIpmi ''
+      mv $out/libexec/netdata/plugins.d/freeipmi.plugin \
+         $out/libexec/netdata/plugins.d/freeipmi.plugin.org
+    ''}
+  '';
+
+  preConfigure =  optionalString (!stdenv.isDarwin) ''
+    substituteInPlace collectors/python.d.plugin/python_modules/third_party/lm_sensors.py \
+      --replace 'ctypes.util.find_library("sensors")' '"${lm_sensors.out}/lib/libsensors${stdenv.hostPlatform.extensions.sharedLibrary}"'
+  '';
+
+  configureFlags = [
+    "--localstatedir=/var"
+    "--sysconfdir=/etc"
+  ];
+
+  postFixup = ''
+    rm -r $out/sbin
+  '';
+
+  meta = {
+    description = "Real-time performance monitoring tool";
+    homepage = https://my-netdata.io/;
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.lethalman ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/system/netdata/no-files-in-etc-and-var.patch b/nixpkgs/pkgs/tools/system/netdata/no-files-in-etc-and-var.patch
new file mode 100644
index 000000000000..138787b98f1f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/netdata/no-files-in-etc-and-var.patch
@@ -0,0 +1,155 @@
+diff --git a/Makefile.am b/Makefile.am
+index 2625dcc..1fdd645 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -113,10 +113,10 @@ AM_CFLAGS = \
+     $(NULL)
+ 
+ sbin_PROGRAMS =
+-dist_cache_DATA = packaging/installer/.keep
+-dist_varlib_DATA = packaging/installer/.keep
+-dist_registry_DATA = packaging/installer/.keep
+-dist_log_DATA = packaging/installer/.keep
++dist_cache_DATA =
++dist_varlib_DATA =
++dist_registry_DATA =
++dist_log_DATA =
+ plugins_PROGRAMS =
+ 
+ LIBNETDATA_FILES = \
+diff --git a/collectors/Makefile.am b/collectors/Makefile.am
+index 7431025..f62f8ac 100644
+--- a/collectors/Makefile.am
++++ b/collectors/Makefile.am
+@@ -30,11 +30,6 @@ SUBDIRS = \
+ usercustompluginsconfigdir=$(configdir)/custom-plugins.d
+ usergoconfigdir=$(configdir)/go.d
+ 
+-# Explicitly install directories to avoid permission issues due to umask
+-install-exec-local:
+-	$(INSTALL) -d $(DESTDIR)$(usercustompluginsconfigdir)
+-	$(INSTALL) -d $(DESTDIR)$(usergoconfigdir)
+-
+ dist_noinst_DATA = \
+     README.md \
+     $(NULL)
+diff --git a/collectors/charts.d.plugin/Makefile.am b/collectors/charts.d.plugin/Makefile.am
+index b3b2fb9..68b768e 100644
+--- a/collectors/charts.d.plugin/Makefile.am
++++ b/collectors/charts.d.plugin/Makefile.am
+@@ -31,13 +31,8 @@ dist_charts_DATA = \
+ 
+ userchartsconfigdir=$(configdir)/charts.d
+ dist_userchartsconfig_DATA = \
+-    .keep \
+     $(NULL)
+ 
+-# Explicitly install directories to avoid permission issues due to umask
+-install-exec-local:
+-	$(INSTALL) -d $(DESTDIR)$(userchartsconfigdir)
+-
+ chartsconfigdir=$(libconfigdir)/charts.d
+ dist_chartsconfig_DATA = \
+     $(NULL)
+diff --git a/collectors/node.d.plugin/Makefile.am b/collectors/node.d.plugin/Makefile.am
+index 411bce9..ba60276 100644
+--- a/collectors/node.d.plugin/Makefile.am
++++ b/collectors/node.d.plugin/Makefile.am
+@@ -23,13 +23,8 @@ dist_noinst_DATA = \
+ 
+ usernodeconfigdir=$(configdir)/node.d
+ dist_usernodeconfig_DATA = \
+-    .keep \
+     $(NULL)
+ 
+-# Explicitly install directories to avoid permission issues due to umask
+-install-exec-local:
+-	$(INSTALL) -d $(DESTDIR)$(usernodeconfigdir)
+-
+ nodeconfigdir=$(libconfigdir)/node.d
+ dist_nodeconfig_DATA = \
+     $(NULL)
+diff --git a/collectors/python.d.plugin/Makefile.am b/collectors/python.d.plugin/Makefile.am
+index cb14e35..8a6c5a7 100644
+--- a/collectors/python.d.plugin/Makefile.am
++++ b/collectors/python.d.plugin/Makefile.am
+@@ -29,13 +29,8 @@ dist_python_DATA = \
+ 
+ userpythonconfigdir=$(configdir)/python.d
+ dist_userpythonconfig_DATA = \
+-    .keep \
+     $(NULL)
+ 
+-# Explicitly install directories to avoid permission issues due to umask
+-install-exec-local:
+-	$(INSTALL) -d $(DESTDIR)$(userpythonconfigdir)
+-
+ pythonconfigdir=$(libconfigdir)/python.d
+ dist_pythonconfig_DATA = \
+     $(NULL)
+diff --git a/collectors/statsd.plugin/Makefile.am b/collectors/statsd.plugin/Makefile.am
+index 87b6ca7..9d010c7 100644
+--- a/collectors/statsd.plugin/Makefile.am
++++ b/collectors/statsd.plugin/Makefile.am
+@@ -14,9 +14,4 @@ dist_statsdconfig_DATA = \
+ 
+ userstatsdconfigdir=$(configdir)/statsd.d
+ dist_userstatsdconfig_DATA = \
+-    .keep \
+     $(NULL)
+-
+-# Explicitly install directories to avoid permission issues due to umask
+-install-exec-local:
+-	$(INSTALL) -d $(DESTDIR)$(userstatsdconfigdir)
+diff --git a/health/Makefile.am b/health/Makefile.am
+index f63faa8..8912ef2 100644
+--- a/health/Makefile.am
++++ b/health/Makefile.am
+@@ -16,13 +16,8 @@ dist_noinst_DATA = \
+ 
+ userhealthconfigdir=$(configdir)/health.d
+ dist_userhealthconfig_DATA = \
+-    .keep \
+     $(NULL)
+ 
+-# Explicitly install directories to avoid permission issues due to umask
+-install-exec-local:
+-	$(INSTALL) -d $(DESTDIR)$(userhealthconfigdir)
+-
+ healthconfigdir=$(libconfigdir)/health.d
+ dist_healthconfig_DATA = \
+     health.d/adaptec_raid.conf \
+diff --git a/system/Makefile.am b/system/Makefile.am
+index ad68c65..bf6a840 100644
+--- a/system/Makefile.am
++++ b/system/Makefile.am
+@@ -16,14 +16,6 @@ CLEANFILES = \
+ include $(top_srcdir)/build/subst.inc
+ SUFFIXES = .in
+ 
+-dist_config_SCRIPTS = \
+-    edit-config \
+-    $(NULL)
+-
+-# Explicitly install directories to avoid permission issues due to umask
+-install-exec-local:
+-	$(INSTALL) -d $(DESTDIR)$(configdir)
+-
+ nodist_noinst_DATA = \
+     netdata-openrc \
+     netdata.logrotate \
+diff --git a/web/Makefile.am b/web/Makefile.am
+index ccaccd7..f2fed50 100644
+--- a/web/Makefile.am
++++ b/web/Makefile.am
+@@ -11,10 +11,6 @@ SUBDIRS = \
+ 
+ usersslconfigdir=$(configdir)/ssl
+ 
+-# Explicitly install directories to avoid permission issues due to umask
+-install-exec-local:
+-	$(INSTALL) -d $(DESTDIR)$(usersslconfigdir)
+-
+ dist_noinst_DATA = \
+     README.md \
+     gui/confluence/README.md \
diff --git a/nixpkgs/pkgs/tools/system/nq/default.nix b/nixpkgs/pkgs/tools/system/nq/default.nix
new file mode 100644
index 000000000000..89c84c8c9ca8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/nq/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, lib, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "nq";
+  version = "0.3.1";
+  src = fetchFromGitHub {
+    owner = "chneukirchen";
+    repo = "nq";
+    rev = "v${version}";
+    sha256 = "1db96ykz35r273jyhf7cdknqk4p2jj9l8gbz7pjy1hq4pb6ffk99";
+  };
+  makeFlags = [ "PREFIX=$(out)" ];
+  postPatch = ''
+    sed -i tq \
+      -e 's|\bfq\b|'$out'/bin/fq|g' \
+      -e 's|\bnq\b|'$out'/bin/nq|g'
+  '';
+  meta = with lib; {
+    description = "Unix command line queue utility";
+    homepage = https://github.com/chneukirchen/nq;
+    license = licenses.publicDomain;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ cstrahan ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/nvtop/default.nix b/nixpkgs/pkgs/tools/system/nvtop/default.nix
new file mode 100644
index 000000000000..0e7a5d4a3111
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/nvtop/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchFromGitHub, cmake, nvidia_x11, cudatoolkit, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "nvtop";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "Syllo";
+    repo  = "nvtop";
+    rev = version;
+    sha256 = "1b6yz54xddip1r0k8cbqg41dpyhds18fj29bj3yf40xvysklb0f4";
+  };
+
+  cmakeFlags = [
+    "-DNVML_INCLUDE_DIRS=${cudatoolkit}/include"
+    "-DNVML_LIBRARIES=${nvidia_x11}/lib/libnvidia-ml.so"
+    "-DCMAKE_BUILD_TYPE=Release"
+  ];
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ ncurses nvidia_x11 cudatoolkit ];
+
+  meta = with stdenv.lib; {
+    description = "A (h)top like like task monitor for NVIDIA GPUs";
+    homepage = https://github.com/Syllo/nvtop;
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ willibutz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/opencl-info/default.nix b/nixpkgs/pkgs/tools/system/opencl-info/default.nix
new file mode 100644
index 000000000000..d1c3d0ec6c0c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/opencl-info/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub, opencl-clhpp, ocl-icd }:
+
+stdenv.mkDerivation {
+  name = "opencl-info-2014-02-21";
+
+  src = fetchFromGitHub {
+    owner = "marchv";
+    repo = "opencl-info";
+    rev = "3e53d001a98978feb865650cf0e93b045400c0d7";
+    sha256 = "114lxgnjg40ivjjszkv4n3f3yq2lbrvywryvbazf20kqmdz7315l";
+  };
+
+  buildInputs = [ opencl-clhpp ocl-icd ];
+
+  NIX_LDFLAGS = "-lOpenCL";
+
+  installPhase = ''
+    install -Dm755 opencl-info $out/bin/opencl-info
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A tool to dump OpenCL platform/device information";
+    homepage = https://github.com/marchv/opencl-info;
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/pciutils/default.nix b/nixpkgs/pkgs/tools/system/pciutils/default.nix
new file mode 100644
index 000000000000..b773529a0d77
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/pciutils/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl, pkgconfig, zlib, kmod, which }:
+
+stdenv.mkDerivation rec {
+  name = "pciutils-3.6.2"; # with release-date database
+
+  src = fetchurl {
+    url = "mirror://kernel/software/utils/pciutils/${name}.tar.xz";
+    sha256 = "1wwkpglvvr1sdj2gxz9khq507y02c4px48njy25divzdhv4jwifv";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ zlib kmod which ];
+
+  makeFlags = [
+    "SHARED=yes"
+    "PREFIX=\${out}"
+    "STRIP="
+    "HOST=${stdenv.hostPlatform.system}"
+    "CROSS_COMPILE=${stdenv.cc.targetPrefix}"
+    "DNS=yes"
+  ];
+
+  installTargets = [ "install" "install-lib" ];
+
+  # Get rid of update-pciids as it won't work.
+  postInstall = "rm $out/sbin/update-pciids $out/man/man8/update-pciids.8";
+
+  meta = with stdenv.lib; {
+    homepage = http://mj.ucw.cz/pciutils.html;
+    description = "A collection of programs for inspecting and manipulating configuration of PCI devices";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.vcunat ]; # not really, but someone should watch it
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/pcstat/default.nix b/nixpkgs/pkgs/tools/system/pcstat/default.nix
new file mode 100644
index 000000000000..5a1bad1092db
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/pcstat/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage {
+  pname = "pcstat-unstable";
+  version = "2017-05-28";
+
+  goPackagePath = "github.com/tobert/pcstat";
+
+  src = fetchFromGitHub {
+    rev    = "91a7346e5b462a61e876c0574cb1ba331a6a5ac5";
+    owner  = "tobert";
+    repo   = "pcstat";
+    sha256 = "88853e42d16c05e580af4fb8aa815a84ea0fc43e3a25e19c85e649a5f5a2874c";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    description = "Page Cache stat: get page cache stats for files on Linux.";
+    homepage = https://github.com/tobert/pcstat;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ aminechikhaoui ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/pcstat/deps.nix b/nixpkgs/pkgs/tools/system/pcstat/deps.nix
new file mode 100644
index 000000000000..809bde1122f3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/pcstat/deps.nix
@@ -0,0 +1,11 @@
+[
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "d38bf781f16e180a1b2ad82697d2f81d7b7ecfac";
+      sha256 = "0eedd518ab68c6dfd431a41709d9888bbc13ed31ff64d69dcbd947442b3aaa04";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/system/plan9port/builder.sh b/nixpkgs/pkgs/tools/system/plan9port/builder.sh
new file mode 100644
index 000000000000..f5c447ea0a53
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/plan9port/builder.sh
@@ -0,0 +1,79 @@
+source $stdenv/setup
+
+export PLAN9=$out/plan9
+export PLAN9_TARGET=$PLAN9
+
+plan9portLinkFlags()
+{
+    local -a linkFlags=()
+    eval set -- "$NIX_LDFLAGS"
+    while (( $# > 0 )); do
+        if [[ $1 = -rpath ]]; then
+            linkFlags+=( "-Wl,-rpath,$2" )
+            shift 2
+        else
+            linkFlags+=( "$1" )
+            shift
+        fi
+    done
+    echo "${linkFlags[*]}"
+}
+
+configurePhase()
+{
+    (
+        echo CC9=\"$(command -v $CC)\"
+        echo CFLAGS=\"$NIX_CFLAGS_COMPILE\"
+        echo LDFLAGS=\"$(plan9portLinkFlags)\"
+        echo X11=\"${libXt_dev}/include\"
+        case "$system" in
+          x86_64-*) echo OBJTYPE=x86_64;;
+          i?86-*)   echo OBJTYPE=386;;
+          *power*)  echo OBJTYPE=power;;
+          *sparc*)  echo OBJTYPE=sparc;;
+          *) exit 12
+        esac
+        if [[ $system =~ .*linux.* ]]; then
+          echo SYSVERSION=2.6.x
+        fi
+    ) >config
+
+    for f in `grep -l -r /usr/local/plan9`; do
+        sed "s,/usr/local/plan9,${PLAN9},g" -i $f
+    done
+}
+
+buildPhase()
+{
+    mkdir -p $PLAN9
+
+    # Copy sources, some necessary bin scripts
+    cp -R * $PLAN9
+
+    local originalPath="$PATH"
+    export PATH="$PLAN9/bin:$PATH"
+    export NPROC=$NIX_BUILD_CORES
+    pushd src
+    ../dist/buildmk
+    mk clean
+    mk libs-nuke
+    mk all
+    mk -k install
+    if [[ -f $PLAN9/bin/quote1 ]]; then
+        cp $PLAN9/bin/quote1 $PLAN9/bin/'"'
+        cp $PLAN9/bin/quote2 $PLAN9/bin/'""'
+    fi
+    popd
+    export PATH="$originalPath"
+}
+
+installPhase()
+{
+    # Copy the `9' utility. This way you can use
+    # $ 9 awk
+    # to use the plan 9 awk
+    mkdir $out/bin
+    ln -s $PLAN9/bin/9 $out/bin
+}
+
+genericBuild
diff --git a/nixpkgs/pkgs/tools/system/plan9port/darwin-cfframework.patch b/nixpkgs/pkgs/tools/system/plan9port/darwin-cfframework.patch
new file mode 100644
index 000000000000..01541af92e37
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/plan9port/darwin-cfframework.patch
@@ -0,0 +1,24 @@
+From d1f0bd3de7d3d54523aeefd9731ea850d20eaab4 Mon Sep 17 00:00:00 2001
+From: Jason Felice <jason.m.felice@gmail.com>
+Date: Tue, 2 Jul 2019 13:19:23 -0400
+Subject: [PATCH] Need CoreFoundation
+
+---
+ src/cmd/devdraw/cocoa-screen.m | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/cmd/devdraw/cocoa-screen.m b/src/cmd/devdraw/cocoa-screen.m
+index 97128da2..0e380dd3 100644
+--- a/src/cmd/devdraw/cocoa-screen.m
++++ b/src/cmd/devdraw/cocoa-screen.m
+@@ -56,6 +56,7 @@
+ #endif
+ 
+ AUTOFRAMEWORK(Cocoa)
++AUTOFRAMEWORK(CoreFoundation)
+ 
+ #define LOG	if(0)NSLog
+ #define panic	sysfatal
+-- 
+2.21.0
+
diff --git a/nixpkgs/pkgs/tools/system/plan9port/darwin-sw_vers.patch b/nixpkgs/pkgs/tools/system/plan9port/darwin-sw_vers.patch
new file mode 100644
index 000000000000..3e61c83e5403
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/plan9port/darwin-sw_vers.patch
@@ -0,0 +1,47 @@
+From d21d082275f04f88eabcc8ecdb03ee932c71ebf1 Mon Sep 17 00:00:00 2001
+From: Jason Felice <jason.m.felice@gmail.com>
+Date: Mon, 1 Jul 2019 15:23:19 -0400
+Subject: [PATCH 2/3] Build for 10.12
+
+---
+ bin/osxvers                    | 3 +--
+ src/cmd/devdraw/mkwsysrules.sh | 4 ++--
+ 2 files changed, 3 insertions(+), 4 deletions(-)
+
+diff --git a/bin/osxvers b/bin/osxvers
+index 4af44da2..3be7e6e9 100755
+--- a/bin/osxvers
++++ b/bin/osxvers
+@@ -2,6 +2,5 @@
+ 
+ u=`uname`
+ case "$u" in
+-Darwin)
+-	sw_vers | awk '$1 == "ProductVersion:" {print $2}' | awk -F. '{printf("CFLAGS=$CFLAGS -DOSX_VERSION=%d%02d%02d\n", $1, $2, $3)}'
++Darwin) printf 'CFLAGS=$CFLAGS -DOSX_VERSION=101200\n';;
+ esac
+diff --git a/src/cmd/devdraw/mkwsysrules.sh b/src/cmd/devdraw/mkwsysrules.sh
+index e94afbd3..40e632db 100644
+--- a/src/cmd/devdraw/mkwsysrules.sh
++++ b/src/cmd/devdraw/mkwsysrules.sh
+@@ -22,7 +22,7 @@ fi
+ 
+ if [ "x$WSYSTYPE" = "x" ]; then
+ 	if [ "x`uname`" = "xDarwin" ]; then
+-		if sw_vers | grep 'ProductVersion:	10\.[0-5]\.' >/dev/null; then
++		if false; then
+ 			echo 1>&2 'OS X 10.5 and older are not supported'
+ 			exit 1
+ 		else
+@@ -54,7 +54,7 @@ if [ $WSYSTYPE = x11 ]; then
+ 	XO=`ls x11-*.c 2>/dev/null | sed 's/\.c$/.o/'`
+ 	echo 'WSYSOFILES=$WSYSOFILES '$XO
+ elif [ $WSYSTYPE = osx-cocoa ]; then
+-	if sw_vers|awk '/ProductVersion/{split($2,a,".");exit(a[2]<14)}' >/dev/null; then	# 0 is true in sh.
++	if false; then
+ 		echo 'OBJCFLAGS=$OBJCFLAGS -fobjc-arc'
+ 		echo 'WSYSOFILES=$WSYSOFILES osx-draw.o cocoa-screen-metal-objc.o cocoa-srv.o cocoa-thread.o'
+ 	else
+-- 
+2.21.0
+
diff --git a/nixpkgs/pkgs/tools/system/plan9port/default.nix b/nixpkgs/pkgs/tools/system/plan9port/default.nix
new file mode 100644
index 000000000000..9a4a22385584
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/plan9port/default.nix
@@ -0,0 +1,96 @@
+{ stdenv, fetchFromGitHub, which
+, darwin ? null
+, xorgproto ? null
+, libX11
+, libXext ? null
+, libXt ? null
+, fontconfig ? null
+, freetype ? null
+, perl ? null  # For building web manuals
+}:
+
+stdenv.mkDerivation {
+  pname = "plan9port";
+  version = "2019-02-25";
+
+  src =  fetchFromGitHub {
+    owner = "9fans";
+    repo = "plan9port";
+    rev = "047fd921744f39a82a86d9370e03f7af511e6e84";
+    sha256 = "1lp17948q7vpl8rc2bf5a45bc8jqyj0s3zffmks9r25ai42vgb43";
+  };
+
+  patches = [
+    ./tmpdir.patch
+    ./darwin-sw_vers.patch
+    ./darwin-cfframework.patch
+  ];
+
+  postPatch = ''
+    #hardcoded path
+    substituteInPlace src/cmd/acme/acme.c \
+      --replace /lib/font/bit $out/plan9/font
+
+    #deprecated flags
+    find . -type f \
+      -exec sed -i -e 's/_SVID_SOURCE/_DEFAULT_SOURCE/g' {} \; \
+      -exec sed -i -e 's/_BSD_SOURCE/_DEFAULT_SOURCE/g' {} \;
+
+    substituteInPlace bin/9c \
+      --replace 'which uniq' '${which}/bin/which uniq'
+  '' + stdenv.lib.optionalString (!stdenv.isDarwin) ''
+    #add missing ctrl+c\z\x\v keybind for non-Darwin
+    substituteInPlace src/cmd/acme/text.c \
+      --replace "case Kcmd+'c':" "case 0x03: case Kcmd+'c':" \
+      --replace "case Kcmd+'z':" "case 0x1a: case Kcmd+'z':" \
+      --replace "case Kcmd+'x':" "case 0x18: case Kcmd+'x':" \
+      --replace "case Kcmd+'v':" "case 0x16: case Kcmd+'v':"
+  '';
+
+  buildInputs = [
+    perl
+  ] ++ stdenv.lib.optionals (!stdenv.isDarwin) [
+    xorgproto libX11 libXext libXt fontconfig
+    freetype # fontsrv wants ft2build.h provides system fonts for acme and sam.
+  ] ++ stdenv.lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [
+    Carbon Cocoa IOKit Metal QuartzCore
+  ]);
+
+  builder = ./builder.sh;
+  libXt_dev = libXt.dev;
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/9 rc -c 'echo rc is working.'
+
+    # 9l can find and use its libs
+    cd $TMP
+    cat >test.c <<EOF
+    #include <u.h>
+    #include <libc.h>
+    #include <thread.h>
+    void
+    threadmain(int argc, char **argv)
+    {
+        threadexitsall(nil);
+    }
+    EOF
+    $out/bin/9 9c -o test.o test.c
+    $out/bin/9 9l -o test test.o
+    ./test
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://9fans.github.io/plan9port/;
+    description = "Plan 9 from User Space";
+    longDescription = ''
+      Plan 9 from User Space (aka plan9port) is a port of many Plan 9 programs
+      from their native Plan 9 environment to Unix-like operating systems.
+    '';
+    license = licenses.lpl-102;
+    maintainers = with maintainers; [ AndersonTorres bbarker
+                                      ftrvxmtrx kovirobi ];
+    platforms = platforms.unix;
+  };
+}
+# TODO: investigate the mouse chording support patch
diff --git a/nixpkgs/pkgs/tools/system/plan9port/tmpdir.patch b/nixpkgs/pkgs/tools/system/plan9port/tmpdir.patch
new file mode 100644
index 000000000000..e8200a177a27
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/plan9port/tmpdir.patch
@@ -0,0 +1,41 @@
+From c762625549ff367b54bcd8281d1ce248a69b4401 Mon Sep 17 00:00:00 2001
+From: Jason Felice <jason.m.felice@gmail.com>
+Date: Mon, 1 Jul 2019 15:01:21 -0400
+Subject: [PATCH] Use $TMPDIR if available
+
+NixOS sandboxed builds (at least on Mac) don't have access to /tmp,
+and this should be better POSIX.
+---
+ bin/9c | 2 +-
+ bin/9l | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/bin/9c b/bin/9c
+index 3ffb716c..88c47887 100755
+--- a/bin/9c
++++ b/bin/9c
+@@ -133,7 +133,7 @@ case "$tag" in
+ esac
+ 
+ # N.B. Must use temp file to avoid pipe; pipe loses status.
+-xtmp=/tmp/9c.$$.$USER.out
++xtmp=${TMPDIR-/tmp}/9c.$$.$USER.out
+ $cc -DPLAN9PORT -I$PLAN9/include $cflags "$@" 2>$xtmp
+ status=$?
+ quiet $xtmp
+diff --git a/bin/9l b/bin/9l
+index 6195815f..717a540a 100755
+--- a/bin/9l
++++ b/bin/9l
+@@ -346,7 +346,7 @@ then
+ 	echo $ld -L$PLAN9/lib "$@" $libsl $extralibs $frameworks
+ fi
+ 
+-xtmp=/tmp/9l.$$.$USER.out
++xtmp="${TMPDIR-/tmp}/9l.$$.$USER.out"
+ xxout() {
+ 	sed 's/.*: In function `[^:]*: *//' $xtmp | egrep . | 
+ 	egrep -v 'is (often|almost always) misused|is dangerous, better use|text-based stub' 
+-- 
+2.21.0
+
diff --git a/nixpkgs/pkgs/tools/system/procodile/Gemfile b/nixpkgs/pkgs/tools/system/procodile/Gemfile
new file mode 100644
index 000000000000..77e4bb430e96
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/procodile/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'procodile'
diff --git a/nixpkgs/pkgs/tools/system/procodile/Gemfile.lock b/nixpkgs/pkgs/tools/system/procodile/Gemfile.lock
new file mode 100644
index 000000000000..7989b7bf1f7f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/procodile/Gemfile.lock
@@ -0,0 +1,15 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    json (2.2.0)
+    procodile (1.0.23)
+      json
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  procodile
+
+BUNDLED WITH
+   1.17.2
diff --git a/nixpkgs/pkgs/tools/system/procodile/default.nix b/nixpkgs/pkgs/tools/system/procodile/default.nix
new file mode 100644
index 000000000000..3ae80a312ed6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/procodile/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "procodile";
+  gemdir = ./.;
+  exes = [ "procodile" ];
+
+  passthru.updateScript = bundlerUpdateScript "procodile";
+
+  meta = with lib; {
+    description = "Run processes in the background (and foreground) on Mac & Linux from a Procfile (for production and/or development environments)";
+    homepage    = https://adam.ac/procodile;
+    license     = with licenses; mit;
+    maintainers = with maintainers; [ ravloony manveru nicknovitski ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/procodile/gemset.nix b/nixpkgs/pkgs/tools/system/procodile/gemset.nix
new file mode 100644
index 000000000000..36ec2a9cf185
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/procodile/gemset.nix
@@ -0,0 +1,23 @@
+{
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sx97bm9by389rbzv8r1f43h06xcz8vwi3h5jv074gvparql7lcx";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  procodile = {
+    dependencies = ["json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "025pbr1kah7cgs527n5q56m5agaa2smzac4rpmpk619xg4r1rdhs";
+      type = "gem";
+    };
+    version = "1.0.23";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/system/proot/default.nix b/nixpkgs/pkgs/tools/system/proot/default.nix
new file mode 100644
index 000000000000..5ff8ff95f8ae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/proot/default.nix
@@ -0,0 +1,46 @@
+{ stdenv, fetchFromGitHub
+, talloc, docutils, swig, python, coreutils, enablePython ? true }:
+
+stdenv.mkDerivation {
+  pname = "proot";
+  version = "20190510";
+
+  src = fetchFromGitHub {
+    repo = "proot";
+    owner = "proot-me";
+    rev = "803e54d8a1b3d513108d3fc413ba6f7c80220b74";
+    sha256 = "0gwzqm5wpscj3fchlv3qggf3zzn0v00s4crb5ciwljan1zrqadhy";
+  };
+
+  postPatch = ''
+    substituteInPlace src/GNUmakefile \
+      --replace /bin/echo ${coreutils}/bin/echo
+    # our cross machinery defines $CC and co just right
+    sed -i /CROSS_COMPILE/d src/GNUmakefile
+  '';
+
+  buildInputs = [ talloc ] ++ stdenv.lib.optional enablePython python;
+  nativeBuildInputs = [ docutils ] ++ stdenv.lib.optional enablePython swig;
+
+  enableParallelBuilding = true;
+
+  makeFlags = [ "-C src" ];
+
+  postBuild = ''
+    make -C doc proot/man.1
+  '';
+
+  installFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  postInstall = ''
+    install -Dm644 doc/proot/man.1 $out/share/man/man1/proot.1
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://proot-me.github.io;
+    description = "User-space implementation of chroot, mount --bind and binfmt_misc";
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ ianwookim makefu veprbl dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/ps_mem/default.nix b/nixpkgs/pkgs/tools/system/ps_mem/default.nix
new file mode 100644
index 000000000000..bde4429c4813
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/ps_mem/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, pythonPackages, fetchFromGitHub }:
+
+let
+  version = "3.13";
+  pname = "ps_mem";
+in pythonPackages.buildPythonApplication {
+  name = "${pname}-${version}";
+
+  src = fetchFromGitHub {
+    owner = "pixelb";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0pgi9hvwfbkzvwicqlkwx4rwal1ikza018yxbwpnf7c80zw0zaw9";
+  };
+
+  meta = with stdenv.lib; {
+    description = "A utility to accurately report the in core memory usage for a program";
+    homepage = https://github.com/pixelb/ps_mem;
+    license = licenses.lgpl21;
+    maintainers = [ maintainers.gnidorah ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/psensor/default.nix b/nixpkgs/pkgs/tools/system/psensor/default.nix
new file mode 100644
index 000000000000..83d281642bd3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/psensor/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, lib, fetchurl, pkgconfig, lm_sensors, libgtop, libatasmart, gtk3
+, libnotify, udisks2, libXNVCtrl, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "psensor";
+
+  version = "1.2.0";
+
+  src = fetchurl {
+    url = "https://wpitchoune.net/psensor/files/psensor-${version}.tar.gz";
+    sha256 = "1smbidbby4rh14jnh9kn7y64qf486aqnmyxcgacjvkz27cqqnw4r";
+  };
+
+  nativeBuildInputs = [ pkgconfig wrapGAppsHook ];
+
+  buildInputs = [
+    lm_sensors libgtop libatasmart gtk3 libnotify udisks2
+  ];
+
+  preConfigure = ''
+    NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -I${libXNVCtrl}/include"
+    NIX_LDFLAGS="$NIX_LDFLAGS -L${libXNVCtrl}/lib"
+  '';
+
+  meta = with lib; {
+    description = "Graphical hardware monitoring application for Linux";
+    homepage = https://wpitchoune.net/psensor/;
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ cstrahan ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/psstop/default.nix b/nixpkgs/pkgs/tools/system/psstop/default.nix
new file mode 100644
index 000000000000..4d413e60c77f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/psstop/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, glib }:
+
+stdenv.mkDerivation rec {
+  pname = "psstop";
+  version = "1.3";
+
+  src = fetchFromGitHub {
+    owner = "clearlinux";
+    repo = "psstop";
+    rev = "v${version}";
+    sha256 = "03ir3jjpzm7q8n1qc5jr99hqarr9r529w1zb6f7q4wak2vfj7w9h";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+
+  buildInputs = [ glib ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/clearlinux/psstop;
+    description = "Show processes' memory usage by looking into pss"; # upstream summary
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/r10k/Gemfile b/nixpkgs/pkgs/tools/system/r10k/Gemfile
new file mode 100644
index 000000000000..c9363ff3dbdf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/r10k/Gemfile
@@ -0,0 +1,5 @@
+# frozen_string_literal: true
+# A sample Gemfile
+source "https://rubygems.org"
+
+gem "r10k"
diff --git a/nixpkgs/pkgs/tools/system/r10k/Gemfile.lock b/nixpkgs/pkgs/tools/system/r10k/Gemfile.lock
new file mode 100644
index 000000000000..f399068b56ec
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/r10k/Gemfile.lock
@@ -0,0 +1,46 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    colored (1.2)
+    cri (2.15.5)
+    faraday (0.13.1)
+      multipart-post (>= 1.2, < 3)
+    faraday_middleware (0.12.2)
+      faraday (>= 0.7.4, < 1.0)
+    fast_gettext (1.1.2)
+    gettext (3.2.9)
+      locale (>= 2.0.5)
+      text (>= 1.3.0)
+    gettext-setup (0.30)
+      fast_gettext (~> 1.1.0)
+      gettext (>= 3.0.2)
+      locale
+    locale (2.1.2)
+    log4r (1.1.10)
+    minitar (0.8)
+    multi_json (1.13.1)
+    multipart-post (2.0.0)
+    puppet_forge (2.2.9)
+      faraday (>= 0.9.0, < 0.14.0)
+      faraday_middleware (>= 0.9.0, < 0.13.0)
+      gettext-setup (~> 0.11)
+      minitar
+      semantic_puppet (~> 1.0)
+    r10k (3.2.0)
+      colored (= 1.2)
+      cri (~> 2.15.1)
+      gettext-setup (~> 0.24)
+      log4r (= 1.1.10)
+      multi_json (~> 1.10)
+      puppet_forge (~> 2.2.8)
+    semantic_puppet (1.0.2)
+    text (1.3.1)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  r10k
+
+BUNDLED WITH
+   1.17.2
diff --git a/nixpkgs/pkgs/tools/system/r10k/default.nix b/nixpkgs/pkgs/tools/system/r10k/default.nix
new file mode 100644
index 000000000000..56e4e4f94fae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/r10k/default.nix
@@ -0,0 +1,23 @@
+{ lib, bundlerApp, bundlerUpdateScript, makeWrapper, git, gnutar, gzip }:
+
+bundlerApp {
+  pname = "r10k";
+  gemdir = ./.;
+  exes = [ "r10k" ];
+
+  buildInputs = [ makeWrapper ];
+
+  postBuild = ''
+    wrapProgram $out/bin/r10k --prefix PATH : ${lib.makeBinPath [ git gnutar gzip ]}
+  '';
+
+  passthru.updateScript = bundlerUpdateScript "r10k";
+
+  meta = with lib; {
+    description = "Puppet environment and module deployment";
+    homepage    = https://github.com/puppetlabs/r10k;
+    license     = licenses.asl20;
+    maintainers = with maintainers; [ zimbatm manveru nicknovitski ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/r10k/gemset.nix b/nixpkgs/pkgs/tools/system/r10k/gemset.nix
new file mode 100644
index 000000000000..b918fe788b59
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/r10k/gemset.nix
@@ -0,0 +1,168 @@
+{
+  colored = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0b0x5jmsyi0z69bm6sij1k89z7h0laag3cb4mdn7zkl9qmxb90lx";
+      type = "gem";
+    };
+    version = "1.2";
+  };
+  cri = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0z1z1aj7a3gf16wv31kc0mr45snlxrjavcj762rx791ymalmxkbr";
+      type = "gem";
+    };
+    version = "2.15.5";
+  };
+  faraday = {
+    dependencies = ["multipart-post"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gyqsj7vlqynwvivf9485zwmcj04v1z7gq362z0b8zw2zf4ag0hw";
+      type = "gem";
+    };
+    version = "0.13.1";
+  };
+  faraday_middleware = {
+    dependencies = ["faraday"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1p7icfl28nvl8qqdsngryz1snqic9l8x6bk0dxd7ygn230y0k41d";
+      type = "gem";
+    };
+    version = "0.12.2";
+  };
+  fast_gettext = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ci71w9jb979c379c7vzm88nc3k6lf68kbrsgw9nlx5g4hng0s78";
+      type = "gem";
+    };
+    version = "1.1.2";
+  };
+  gettext = {
+    dependencies = ["locale" "text"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0764vj7gacn0aypm2bf6m46dzjzwzrjlmbyx6qwwwzbmi94r40wr";
+      type = "gem";
+    };
+    version = "3.2.9";
+  };
+  gettext-setup = {
+    dependencies = ["fast_gettext" "gettext" "locale"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04c243gwwlnh4m8rn1zx0w8mzhixjf9fvpfb65xcmgs5a19146j4";
+      type = "gem";
+    };
+    version = "0.30";
+  };
+  locale = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1sls9bq4krx0fmnzmlbn64dw23c4d6pz46ynjzrn9k8zyassdd0x";
+      type = "gem";
+    };
+    version = "2.1.2";
+  };
+  log4r = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ri90q0frfmigkirqv5ihyrj59xm8pq5zcmf156cbdv4r4l2jicv";
+      type = "gem";
+    };
+    version = "1.1.10";
+  };
+  minitar = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1dfw1q83h6jxrmivd3fsg0dsbkdhv63qns0jc1a6kf1vmhd6ihwd";
+      type = "gem";
+    };
+    version = "0.8";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rl0qy4inf1mp8mybfk56dfga0mvx97zwpmq5xmiwl5r770171nv";
+      type = "gem";
+    };
+    version = "1.13.1";
+  };
+  multipart-post = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09k0b3cybqilk1gwrwwain95rdypixb2q9w65gd44gfzsd84xi1x";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  puppet_forge = {
+    dependencies = ["faraday" "faraday_middleware" "gettext-setup" "minitar" "semantic_puppet"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00qma88kwg2f4nh5yid9w4pqfdbwlh8bz2mmgiiwji38s0pdahba";
+      type = "gem";
+    };
+    version = "2.2.9";
+  };
+  r10k = {
+    dependencies = ["colored" "cri" "gettext-setup" "log4r" "multi_json" "puppet_forge"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yjvklvdvx0wjgg6bhhaszdsk62cysjviwj0536z7ng25q3ci5kj";
+      type = "gem";
+    };
+    version = "3.2.0";
+  };
+  semantic_puppet = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "046m45rdwpvfz77s7bxid27c89w329c1nj593p74wdd8kknf0nv0";
+      type = "gem";
+    };
+    version = "1.0.2";
+  };
+  text = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1x6kkmsr49y3rnrin91rv8mpc3dhrf3ql08kbccw8yffq61brfrg";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/system/rofi-systemd/default.nix b/nixpkgs/pkgs/tools/system/rofi-systemd/default.nix
new file mode 100644
index 000000000000..73c1b4881559
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/rofi-systemd/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, fetchFromGitHub, rofi, systemd, coreutils, utillinux, gawk, makeWrapper
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rofi-systemd";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "IvanMalison";
+    repo = "rofi-systemd";
+    rev = "v${version}";
+    sha256 = "1dbygq3qaj1f73hh3njdnmibq7vi6zbyzdc6c0j989c0r1ksv0zi";
+  };
+
+  buildInputs = [ makeWrapper ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -a rofi-systemd $out/bin/rofi-systemd
+  '';
+
+  wrapperPath = with stdenv.lib; makeBinPath [
+    rofi
+    coreutils
+    utillinux
+    gawk
+    systemd
+  ];
+
+  fixupPhase = ''
+    patchShebangs $out/bin
+
+    wrapProgram $out/bin/rofi-systemd --prefix PATH : "${wrapperPath}"
+  '';
+
+  meta = {
+    description = "Control your systemd units using rofi";
+    homepage = https://github.com/IvanMalison/rofi-systemd;
+    maintainers = with stdenv.lib.maintainers; [ imalison ];
+    license = stdenv.lib.licenses.gpl3;
+    platforms = with stdenv.lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/rowhammer-test/default.nix b/nixpkgs/pkgs/tools/system/rowhammer-test/default.nix
new file mode 100644
index 000000000000..64c184a61229
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/rowhammer-test/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+  name = "rowhammer-test-20150811";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "rowhammer-test";
+    rev = "c1d2bd9f629281402c10bb10e52bc1f1faf59cc4"; # 2015-08-11
+    sha256 = "1fbfcnm5gjish47wdvikcsgzlb5vnlfqlzzm6mwiw2j5qkq0914i";
+  };
+
+  NIX_CFLAGS_COMPILE = stdenv.lib.optionalString stdenv.isi686 "-Wno-error=format";
+
+  buildPhase = "sh -e make.sh";
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp rowhammer_test double_sided_rowhammer $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Test DRAM for bit flips caused by the rowhammer problem";
+    homepage = https://github.com/google/rowhammer-test;
+    license = licenses.asl20;
+    maintainers = [ maintainers.viric ];
+    platforms = [ "x86_64-linux" "i686-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/rsyslog/default.nix b/nixpkgs/pkgs/tools/system/rsyslog/default.nix
new file mode 100644
index 000000000000..7c5b9a189667
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/rsyslog/default.nix
@@ -0,0 +1,111 @@
+{ stdenv, fetchurl, pkgconfig, autoreconfHook, libestr, json_c, zlib, pythonPackages, fastJson
+, libkrb5 ? null, systemd ? null, jemalloc ? null, libmysqlclient ? null, postgresql ? null
+, libdbi ? null, net-snmp ? null, libuuid ? null, curl ? null, gnutls ? null
+, libgcrypt ? null, liblognorm ? null, openssl ? null, librelp ? null, libksi ? null
+, liblogging ? null, libnet ? null, hadoop ? null, rdkafka ? null
+, libmongo-client ? null, czmq ? null, rabbitmq-c ? null, hiredis ? null, mongoc ? null
+}:
+
+with stdenv.lib;
+let
+  mkFlag = cond: name: if cond then "--enable-${name}" else "--disable-${name}";
+in
+stdenv.mkDerivation rec {
+  pname = "rsyslog";
+  version = "8.1911.0";
+
+  src = fetchurl {
+    url = "https://www.rsyslog.com/files/download/rsyslog/${pname}-${version}.tar.gz";
+    sha256 = "01713vwz3w5fx9b97286h1rx9hxhjsdah96nyhh75bb23impgx71";
+  };
+
+  #patches = [ ./fix-gnutls-detection.patch ];
+
+  nativeBuildInputs = [ pkgconfig autoreconfHook ];
+  buildInputs = [
+    fastJson libestr json_c zlib pythonPackages.docutils libkrb5 jemalloc
+    postgresql libdbi net-snmp libuuid curl gnutls libgcrypt liblognorm openssl
+    librelp libksi liblogging libnet hadoop rdkafka libmongo-client czmq
+    rabbitmq-c hiredis mongoc
+  ] ++ stdenv.lib.optional (libmysqlclient != null) libmysqlclient
+    ++ stdenv.lib.optional stdenv.isLinux systemd;
+
+  configureFlags = [
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+    "--with-systemdsystemunitdir=\${out}/etc/systemd/system"
+    (mkFlag true                      "largefile")
+    (mkFlag true                      "regexp")
+    (mkFlag (libkrb5 != null)         "gssapi-krb5")
+    (mkFlag true                      "klog")
+    (mkFlag true                      "kmsg")
+    (mkFlag (systemd != null)         "imjournal")
+    (mkFlag true                      "inet")
+    (mkFlag (jemalloc != null)        "jemalloc")
+    (mkFlag true                      "unlimited-select")
+    (mkFlag false                     "debug")
+    (mkFlag false                     "debug-symbols")
+    (mkFlag true                      "debugless")
+    (mkFlag false                     "valgrind")
+    (mkFlag false                     "diagtools")
+    (mkFlag true                      "usertools")
+    (mkFlag (libmysqlclient != null)  "mysql")
+    (mkFlag (postgresql != null)      "pgsql")
+    (mkFlag (libdbi != null)          "libdbi")
+    (mkFlag (net-snmp != null)        "snmp")
+    (mkFlag (libuuid != null)         "uuid")
+    (mkFlag (curl != null)            "elasticsearch")
+    (mkFlag (gnutls != null)          "gnutls")
+    (mkFlag (libgcrypt != null)       "libgcrypt")
+    (mkFlag true                      "rsyslogrt")
+    (mkFlag true                      "rsyslogd")
+    (mkFlag true                      "mail")
+    (mkFlag (liblognorm != null)      "mmnormalize")
+    (mkFlag true                      "mmjsonparse")
+    (mkFlag true                      "mmaudit")
+    (mkFlag true                      "mmanon")
+    (mkFlag true                      "mmutf8fix")
+    (mkFlag true                      "mmcount")
+    (mkFlag true                      "mmsequence")
+    (mkFlag true                      "mmfields")
+    (mkFlag true                      "mmpstrucdata")
+    (mkFlag (openssl != null)         "mmrfc5424addhmac")
+    (mkFlag (librelp != null)         "relp")
+    (mkFlag (libksi != null)          "ksi-ls12")
+    (mkFlag (liblogging != null)      "liblogging-stdlog")
+    (mkFlag (liblogging != null)      "rfc3195")
+    (mkFlag true                      "imfile")
+    (mkFlag false                     "imsolaris")
+    (mkFlag true                      "imptcp")
+    (mkFlag true                      "impstats")
+    (mkFlag true                      "omprog")
+    (mkFlag (libnet != null)          "omudpspoof")
+    (mkFlag true                      "omstdout")
+    (mkFlag (systemd != null)         "omjournal")
+    (mkFlag true                      "pmlastmsg")
+    (mkFlag true                      "pmcisconames")
+    (mkFlag true                      "pmciscoios")
+    (mkFlag true                      "pmaixforwardedfrom")
+    (mkFlag true                      "pmsnare")
+    (mkFlag true                      "omruleset")
+    (mkFlag true                      "omuxsock")
+    (mkFlag true                      "mmsnmptrapd")
+    (mkFlag (hadoop != null)          "omhdfs")
+    (mkFlag (rdkafka != null)         "omkafka")
+    (mkFlag (libmongo-client != null) "ommongodb")
+    (mkFlag (czmq != null)            "imczmq")
+    (mkFlag (czmq != null)            "omczmq")
+    (mkFlag (rabbitmq-c != null)      "omrabbitmq")
+    (mkFlag (hiredis != null)         "omhiredis")
+    (mkFlag (curl != null)            "omhttpfs")
+    (mkFlag true                      "generate-man-pages")
+  ];
+
+  meta = {
+    homepage = https://www.rsyslog.com/;
+    description = "Enhanced syslog implementation";
+    changelog = "https://raw.githubusercontent.com/rsyslog/rsyslog/v${version}/ChangeLog";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/rsyslog/fix-gnutls-detection.patch b/nixpkgs/pkgs/tools/system/rsyslog/fix-gnutls-detection.patch
new file mode 100644
index 000000000000..c8955ea57dc0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/rsyslog/fix-gnutls-detection.patch
@@ -0,0 +1,60 @@
+From 588b4ca7412326abd51a5b2060eafbc04611e419 Mon Sep 17 00:00:00 2001
+From: Radovan Sroka <rsroka@redhat.com>
+Date: Tue, 11 Aug 2015 17:09:15 +0200
+Subject: [PATCH] Fix detection of the GnuTLS package
+
+This commit fixes a number of issues that cropped up from these changes:
+23c5b3e replace deprecated GnuTLS functions with newer ones if available
+88f0651 bugfix: ommysql did not work when gnutls was enabled
+ce560b6 build system: Failure action in AC_CHECK_LIB check for
+
+The solution is based on the assumption that the call to AC_CHECK_LIB()
+was added purely to satisfy the subsequent calls to AC_CHECK_FUNCS().
+23c5b3e had the unintentional result of libgnutls being added to LIBS
+and linked to undesired components.
+The next commit removed libgnutls from LIBS which made the following
+calls to AC_CHECK_FUNCS() nonfunctional.
+Another commit made the processing not stop upon detecting a missing
+component which, again, makes the calls to AC_CHECK_FUNCS() malfunction.
+
+The solution is to get rid of AC_CHECK_LIB() and temporarily override
+LIBS for use by AC_CHECK_FUNCS().
+---
+ configure.ac | 14 ++++----------
+ 1 file changed, 4 insertions(+), 10 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 6f82f0c..ba3f791 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -763,18 +763,13 @@ AC_ARG_ENABLE(gnutls,
+ if test "x$enable_gnutls" = "xyes"; then
+ 	PKG_CHECK_MODULES(GNUTLS, gnutls >= 1.4.0)
+ 	AC_DEFINE([ENABLE_GNUTLS], [1], [Indicator that GnuTLS is present])
+-	AC_CHECK_LIB(
+-	    [gnutls],
+-	    [gnutls_global_init],
+-	    [
+-	     AC_DEFINE(HAVE_LIB_GNUTLS, 1, [gnutls is available])
+-	    ],
+-	    [AC_MSG_WARN([gnutls_global_init function missing or not detected])],
+-	    []
+-	)
++	save_libs=$LIBS
++	LIBS="$LIBS $GNUTLS_LIBS"
+ 	AC_CHECK_FUNCS(gnutls_certificate_set_retrieve_function,,)
+ 	AC_CHECK_FUNCS(gnutls_certificate_type_set_priority,,)
++	LIBS=$save_libs
+ fi
++
+ AM_CONDITIONAL(ENABLE_GNUTLS, test x$enable_gnutls = xyes)
+ 
+ # libgcrypt support
+@@ -1655,7 +1650,6 @@ else
+         AC_MSG_NOTICE([Not running from git source])
+ fi
+ 
+-
+ AM_CONDITIONAL(ENABLE_GENERATE_MAN_PAGES, test x$have_to_generate_man_pages = xyes)
+ 
+ # rst2man
diff --git a/nixpkgs/pkgs/tools/system/runit/default.nix b/nixpkgs/pkgs/tools/system/runit/default.nix
new file mode 100644
index 000000000000..78306907079e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/runit/default.nix
@@ -0,0 +1,60 @@
+{ stdenv, fetchurl
+
+# Build runit-init as a static binary
+, static ? false
+}:
+
+stdenv.mkDerivation rec {
+  pname = "runit";
+  version = "2.1.2";
+
+  src = fetchurl {
+    url = "http://smarden.org/runit/${pname}-${version}.tar.gz";
+    sha256 = "065s8w62r6chjjs6m9hapcagy33m75nlnxb69vg0f4ngn061dl3g";
+  };
+
+  patches = [
+    ./fix-ar-ranlib.patch
+  ];
+
+  outputs = [ "out" "man" ];
+
+  sourceRoot = "admin/${pname}-${version}";
+
+  doCheck = true;
+
+  buildInputs = stdenv.lib.optionals static [ stdenv.cc.libc stdenv.cc.libc.static ];
+
+  postPatch = ''
+    sed -i "s,\(#define RUNIT\) .*,\1 \"$out/bin/runit\"," src/runit.h
+    # usernamespace sandbox of nix seems to conflict with runit's assumptions
+    # about unix users. Therefor skip the check
+    sed -i '/.\/chkshsgr/d' src/Makefile
+  '' + stdenv.lib.optionalString (!static) ''
+    sed -i 's,-static,,g' src/Makefile
+  '';
+
+  preBuild = ''
+    cd src
+
+    # Both of these are originally hard-coded to gcc
+    echo ${stdenv.cc.targetPrefix}cc > conf-cc
+    echo ${stdenv.cc.targetPrefix}cc > conf-ld
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -t $out/bin $(< ../package/commands)
+
+    mkdir -p $man/share/man
+    cp -r ../man $man/share/man/man8
+  '';
+
+  meta = with stdenv.lib; {
+    description = "UNIX init scheme with service supervision";
+    license = licenses.bsd3;
+    homepage = http://smarden.org/runit;
+    maintainers = with maintainers; [ joachifm ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/runit/fix-ar-ranlib.patch b/nixpkgs/pkgs/tools/system/runit/fix-ar-ranlib.patch
new file mode 100644
index 000000000000..c65a037d5242
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/runit/fix-ar-ranlib.patch
@@ -0,0 +1,18 @@
+--- runit-2.1.2/src/print-ar.sh
++++ runit-2.1.2/src/print-ar.sh
+@@ -1,7 +1,7 @@
+ cat warn-auto.sh
+ echo 'main="$1"; shift'
+ echo 'rm -f "$main"'
+-echo 'ar cr "$main" ${1+"$@"}'
++echo '$AR cr "$main" ${1+"$@"}'
+ case "`cat systype`" in
+   sunos-5.*) ;;
+   unix_sv*) ;;
+@@ -10,5 +10,5 @@ case "`cat systype`" in
+   dgux-*) ;;
+   hp-ux-*) ;;
+   sco*) ;;
+-  *) echo 'ranlib "$main"' ;;
++  *) echo '$RANLIB "$main"' ;;
+ esac
diff --git a/nixpkgs/pkgs/tools/system/s-tui/default.nix b/nixpkgs/pkgs/tools/system/s-tui/default.nix
new file mode 100644
index 000000000000..063a338f6e8d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/s-tui/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, pythonPackages }:
+
+pythonPackages.buildPythonPackage rec {
+  pname = "s-tui";
+  version = "0.8.3";
+
+  src = pythonPackages.fetchPypi {
+    inherit pname version;
+    sha256 = "00lsh2v4i8rwfyjyxx5lijd6rnk9smcfffhzg5sv94ijpcnh216m";
+  };
+
+  propagatedBuildInputs = with pythonPackages; [
+    urwid
+    psutil
+  ];
+
+  meta = with stdenv.lib; {
+    homepage = https://amanusk.github.io/s-tui/;
+    description = "Stress-Terminal UI monitoring tool";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ infinisil ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/s6-rc/default.nix b/nixpkgs/pkgs/tools/system/s6-rc/default.nix
new file mode 100644
index 000000000000..95d4b376d0aa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/s6-rc/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, skawarePackages }:
+
+with skawarePackages;
+
+buildPackage {
+  pname = "s6-rc";
+  version = "0.5.1.1";
+  sha256 = "0lmg517l8inn7bi57q35rjd7b4jmqlmkhrbvs5ybbhinhd12qzi5";
+
+  description = "A service manager for s6-based systems";
+  platforms = stdenv.lib.platforms.linux;
+
+  outputs = [ "bin" "lib" "dev" "doc" "out" ];
+
+  configureFlags = [
+    "--libdir=\${lib}/lib"
+    "--libexecdir=\${lib}/libexec"
+    "--dynlibdir=\${lib}/lib"
+    "--bindir=\${bin}/bin"
+    "--includedir=\${dev}/include"
+    "--with-sysdeps=${skalibs.lib}/lib/skalibs/sysdeps"
+    "--with-include=${skalibs.dev}/include"
+    "--with-include=${execline.dev}/include"
+    "--with-include=${s6.dev}/include"
+    "--with-lib=${skalibs.lib}/lib"
+    "--with-lib=${execline.lib}/lib"
+    "--with-lib=${s6.out}/lib"
+    "--with-dynlib=${skalibs.lib}/lib"
+    "--with-dynlib=${execline.lib}/lib"
+    "--with-dynlib=${s6.out}/lib"
+  ];
+
+  postInstall = ''
+    # remove all s6 executables from build directory
+    rm $(find -name "s6-rc-*" -type f -mindepth 1 -maxdepth 1 -executable)
+    rm s6-rc libs6rc.*
+
+    mv doc $doc/share/doc/s6-rc/html
+    mv examples $doc/share/doc/s6-rc/examples
+  '';
+
+}
diff --git a/nixpkgs/pkgs/tools/system/s6/default.nix b/nixpkgs/pkgs/tools/system/s6/default.nix
new file mode 100644
index 000000000000..efdf173a22c6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/s6/default.nix
@@ -0,0 +1,42 @@
+{ skawarePackages }:
+
+with skawarePackages;
+
+buildPackage {
+  pname = "s6";
+  version = "2.9.0.1";
+  sha256 = "0mvcjrz8nlj9p2zclmcv22b4y6bqzd2iz38arhgc989vdvrbmkg0";
+
+  description = "skarnet.org's small & secure supervision software suite";
+
+  # NOTE lib: cannot split lib from bin at the moment,
+  # since some parts of lib depend on executables in bin.
+  # (the `*_startf` functions in `libs6`)
+  outputs = [ /*"bin" "lib"*/ "out" "dev" "doc" ];
+
+  # TODO: nsss support
+  configureFlags = [
+    "--libdir=\${out}/lib"
+    "--libexecdir=\${out}/libexec"
+    "--dynlibdir=\${out}/lib"
+    "--bindir=\${out}/bin"
+    "--includedir=\${dev}/include"
+    "--with-sysdeps=${skalibs.lib}/lib/skalibs/sysdeps"
+    "--with-include=${skalibs.dev}/include"
+    "--with-include=${execline.dev}/include"
+    "--with-lib=${skalibs.lib}/lib"
+    "--with-lib=${execline.lib}/lib"
+    "--with-dynlib=${skalibs.lib}/lib"
+    "--with-dynlib=${execline.lib}/lib"
+  ];
+
+  postInstall = ''
+    # remove all s6 executables from build directory
+    rm $(find -type f -mindepth 1 -maxdepth 1 -executable)
+    rm libs6.*
+
+    mv doc $doc/share/doc/s6/html
+    mv examples $doc/share/doc/s6/examples
+  '';
+
+}
diff --git a/nixpkgs/pkgs/tools/system/safe-rm/default.nix b/nixpkgs/pkgs/tools/system/safe-rm/default.nix
new file mode 100644
index 000000000000..571f70e0756c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/safe-rm/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchgit, perl, coreutils }:
+
+stdenv.mkDerivation rec {
+  pname = "safe-rm";
+  version = "0.12";
+
+  src = fetchgit {
+    url = "https://gitorious.org/safe-rm/mainline.git";
+    rev = "refs/tags/${pname}-${version}";
+    sha256 = "0zkmwxyl1870ar6jr9h537vmqgkckqs9jd1yv6m4qqzdsmg5gdbq";
+  };
+
+  propagatedBuildInputs = [ perl coreutils ];
+
+  postFixup = ''
+    sed -e 's@/bin/rm@${coreutils}/bin/rm@' -i $out/bin/safe-rm
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp safe-rm $out/bin
+
+    mkdir -p $out/share/man/man1
+    pod2man safe-rm > $out/share/man/man1/safe-rm.1
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Tool intended to prevent the accidental deletion of important files";
+    homepage = https://launchpad.net/safe-rm;
+    license = licenses.gpl3;
+    platforms = platforms.all;
+    maintainers = [ maintainers.koral ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/safecopy/default.nix b/nixpkgs/pkgs/tools/system/safecopy/default.nix
new file mode 100644
index 000000000000..ce0779c0999c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/safecopy/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "safecopy-1.7";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/safecopy/safecopy/${name}/${name}.tar.gz";
+    sha256 = "1zf4kk9r8za9pn4hzy1y3j02vrhl1rxfk5adyfq0w0k48xfyvys2";
+  };
+
+  meta = {
+    description = "Data recovery tool for damaged hardware";
+
+    longDescription =
+      '' Safecopy is a data recovery tool which tries to extract as much data as possible from a
+         problematic (i.e. damaged sectors) source - like floppy drives, hard disk partitions, CDs,
+         tape devices, etc, where other tools like dd would fail due to I/O errors.
+
+         Safecopy includes a low level IO layer to read CDROM disks in raw mode, and issue device
+         resets and other helpful low level operations on a number of other device classes.
+       '';
+
+    homepage = http://safecopy.sourceforge.net;
+
+    license = stdenv.lib.licenses.gpl2Plus;
+
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ stdenv.lib.maintainers.bluescreen303 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/setserial/default.nix b/nixpkgs/pkgs/tools/system/setserial/default.nix
new file mode 100644
index 000000000000..68ea32e1e8ac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/setserial/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl, groff }:
+
+stdenv.mkDerivation rec {
+  pname = "setserial";
+  version = "2.17";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/setserial/${pname}-${version}.tar.gz";
+    sha256 = "0jkrnn3i8gbsl48k3civjmvxyv9rbm1qjha2cf2macdc439qfi3y";
+  };
+
+  buildInputs = [ groff ];
+
+  installFlags = [ "DESTDIR=$(out)" ];
+
+  postConfigure = ''
+    sed -e s@/usr/man/@/share/man/@ -i Makefile
+  '';
+
+  preInstall = ''mkdir -p "$out/bin" "$out/share/man/man8"'';
+
+  meta = {
+    description = "Serial port configuration utility";
+    platforms = stdenv.lib.platforms.linux;
+    license = stdenv.lib.licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/sg3_utils/default.nix b/nixpkgs/pkgs/tools/system/sg3_utils/default.nix
new file mode 100644
index 000000000000..67145bc3cc54
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/sg3_utils/default.nix
@@ -0,0 +1,17 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "sg3_utils-1.44";
+
+  src = fetchurl {
+    url = "http://sg.danny.cz/sg/p/${name}.tgz";
+    sha256 = "0yxfbkd48mbzipwmggcvpq60zybsb6anrca878si26z7496nibld";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = http://sg.danny.cz/sg/;
+    description = "Utilities that send SCSI commands to devices";
+    platforms = platforms.linux;
+    license = with licenses; [ bsd2 gpl2Plus ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/sleuthkit/default.nix b/nixpkgs/pkgs/tools/system/sleuthkit/default.nix
new file mode 100644
index 000000000000..7c90d41da18e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/sleuthkit/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, libewf, afflib, openssl, zlib }:
+
+stdenv.mkDerivation rec {
+  version = "4.6.5";
+  pname = "sleuthkit";
+
+  src = fetchFromGitHub {
+    owner = "sleuthkit";
+    repo = "sleuthkit";
+    rev = "${pname}-${version}";
+    sha256 = "1q1cdixnfv9v4qlzza8xwdsyvq1vdw6gjgkd41yc1d57ldp1qm0c";
+  };
+
+  postPatch = ''
+    substituteInPlace tsk/img/ewf.c --replace libewf_handle_read_random libewf_handle_read_buffer_at_offset
+  '';
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ libewf afflib openssl zlib ];
+
+  # Hack to fix the RPATH.
+  preFixup = "rm -rf */.libs";
+
+  meta = {
+    description = "A forensic/data recovery tool";
+    homepage = https://www.sleuthkit.org/;
+    maintainers = [ stdenv.lib.maintainers.raskin ];
+    platforms = stdenv.lib.platforms.linux;
+    license = stdenv.lib.licenses.ipl10;
+    inherit version;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/smartmontools/default.nix b/nixpkgs/pkgs/tools/system/smartmontools/default.nix
new file mode 100644
index 000000000000..2da76cce0cdd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/smartmontools/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchurl, autoreconfHook
+, IOKit ? null , ApplicationServices ? null }:
+
+let
+  version = "7.0";
+
+  dbrev = "4883";
+  drivedbBranch = "RELEASE_${builtins.replaceStrings ["."] ["_"] version}_DRIVEDB";
+  driverdb = fetchurl {
+    url    = "https://sourceforge.net/p/smartmontools/code/${dbrev}/tree/branches/${drivedbBranch}/smartmontools/drivedb.h?format=raw";
+    sha256 = "07x3haz65jyhj579h4z17v6jkw6bbyid34442gl4qddmgv2qzvwx";
+    name   = "smartmontools-drivedb.h";
+  };
+
+in stdenv.mkDerivation rec {
+  pname = "smartmontools";
+  inherit version;
+
+  src = fetchurl {
+    url = "mirror://sourceforge/smartmontools/${pname}-${version}.tar.gz";
+    sha256 = "077nx2rn9szrg6isdh0938zbp7vr3dsyxl4jdyyzv1xwhqksrqg5";
+  };
+
+  patches = [ ./smartmontools.patch ];
+  postPatch = "cp -v ${driverdb} drivedb.h";
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [] ++ stdenv.lib.optionals stdenv.isDarwin [IOKit ApplicationServices];
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "Tools for monitoring the health of hard drives";
+    homepage    = https://www.smartmontools.org/;
+    license     = licenses.gpl2Plus;
+    maintainers = with maintainers; [ peti ];
+    platforms   = with platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/smartmontools/smartmontools.patch b/nixpkgs/pkgs/tools/system/smartmontools/smartmontools.patch
new file mode 100644
index 000000000000..144b2be2d334
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/smartmontools/smartmontools.patch
@@ -0,0 +1,26 @@
+diff --git a/../smartmontools-6.5/configure b/./configure
+index acb028a..5e2c7a1 100755
+--- a/../smartmontools-6.5/configure
++++ b/./configure
+@@ -6703,7 +6703,7 @@ fi
+     ;;
+   *-*-darwin*)
+     os_deps='os_darwin.o'
+-    os_libs='-framework CoreFoundation -framework IOKit'
++    os_libs='-framework ApplicationServices -framework IOKit'
+     os_darwin=yes
+     os_man_filter=Darwin
+     ;;
+diff --git a/../smartmontools-6.5/configure.ac b/./configure.ac
+index 6bd61d7..32ff50c 100644
+--- a/../smartmontools-6.5/configure.ac
++++ b/./configure.ac
+@@ -508,7 +508,7 @@ case "${host}" in
+     ;;
+   *-*-darwin*)
+     os_deps='os_darwin.o'
+-    os_libs='-framework CoreFoundation -framework IOKit'
++    os_libs='-framework ApplicationServices -framework IOKit'
+     os_darwin=yes
+     os_man_filter=Darwin
+     ;;
diff --git a/nixpkgs/pkgs/tools/system/socklog/default.nix b/nixpkgs/pkgs/tools/system/socklog/default.nix
new file mode 100644
index 000000000000..9f2cc2257472
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/socklog/default.nix
@@ -0,0 +1,59 @@
+{ stdenv, fetchurl }:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+  pname = "socklog";
+  version = "2.1.0";
+
+  src = fetchurl {
+    url = "http://smarden.org/socklog/socklog-${version}.tar.gz";
+    sha256 = "0mdlmhiq2j2fip7c4l669ams85yc3c1s1d89am7dl170grw9m1ma";
+  };
+
+  sourceRoot = "admin/socklog-${version}";
+
+  outputs = [ "out" "man" "doc" ];
+
+  postPatch = ''
+    # Fails to run as user without supplementary groups
+    echo "int main() { return 0; }" >src/chkshsgr.c
+
+    # Fixup implicit function declarations
+    sed -i src/pathexec_run.c -e '1i#include <unistd.h>'
+    sed -i src/prot.c -e '1i#include <unistd.h>' -e '2i#include <grp.h>'
+    sed -i src/seek_set.c -e '1i#include <unistd.h>'
+  '';
+
+  configurePhase = ''
+    echo "$NIX_CC/bin/cc $NIX_CFLAGS_COMPILE"   >src/conf-cc
+    echo "$NIX_CC/bin/cc -s"                    >src/conf-ld
+  '';
+
+  buildPhase = ''package/compile'';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv command"/"* $out/bin
+
+    for i in {1,8} ; do
+      mkdir -p $man/share/man/man$i
+      mv man"/"*.$i $man/share/man/man$i
+    done
+
+    mkdir -p $doc/share/doc/socklog/html
+    mv doc/*.html $doc/share/doc/socklog/html/
+  '';
+
+  checkPhase = ''package/check'';
+
+  doCheck = true;
+
+  meta = {
+    description = "System and kernel logging services";
+    homepage = http://smarden.org/socklog/;
+    license = licenses.publicDomain;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.joachifm ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/storebrowse/default.nix b/nixpkgs/pkgs/tools/system/storebrowse/default.nix
new file mode 100644
index 000000000000..e3b58a50c925
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/storebrowse/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, fetchurl, fetchhg, go, sqlite}:
+
+stdenv.mkDerivation rec {
+  name = "storebrowse-20130318212204";
+
+  src = fetchurl {
+    url = "http://viric.name/cgi-bin/storebrowse/tarball/storebrowse-775928f68e53.tar.gz?uuid=775928f68e53";
+    name = "${name}.tar.gz";
+    sha256 = "1yb8qbw95d9561s10k12a6lwv3my8h52arsbfcpizx74dwfsv7in";
+  };
+
+  # This source has license BSD
+  srcGoSqlite = fetchhg {
+    url = "https://code.google.com/p/gosqlite/";
+    rev = "5baefb109e18";
+    sha256 = "0mqfnx06jj15cs8pq9msny2z18x99hgk6mchnaxpg343nzdiz4zk";
+  };
+
+  buildPhase = ''
+    PATH=${go}/bin:$PATH
+    mkdir $TMPDIR/go
+    export GOPATH=$TMPDIR/go
+
+    ${stdenv.lib.optionalString (stdenv.hostPlatform.system == "armv5tel-linux") "export GOARM=5"}
+
+    GOSQLITE=$GOPATH/src/code.google.com/p/gosqlite
+    mkdir -p $GOSQLITE
+    cp -R $srcGoSqlite/* $GOSQLITE/
+    export CGO_CFLAGS=-I${sqlite.dev}/include
+    export CGO_LDFLAGS=-L${sqlite.out}/lib
+    go build -ldflags "-r ${sqlite.out}/lib" -o storebrowse
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp storebrowse $out/bin
+  '';
+
+  meta = {
+    homepage = http://viric.name/cgi-bin/storebrowse;
+    license = stdenv.lib.licenses.agpl3Plus;
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/stress-ng/default.nix b/nixpkgs/pkgs/tools/system/stress-ng/default.nix
new file mode 100644
index 000000000000..7d3e62d7beb5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/stress-ng/default.nix
@@ -0,0 +1,72 @@
+{ stdenv, fetchurl
+, attr, judy, keyutils, libaio, libapparmor, libbsd, libcap, libgcrypt, lksctp-tools, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "stress-ng";
+  version = "0.10.14";
+
+  src = fetchurl {
+    url = "https://kernel.ubuntu.com/~cking/tarballs/${pname}/${pname}-${version}.tar.xz";
+    sha256 = "0lazjxrlqzhxd6fg3y1vh38h66v8swkd9q2say4m6sglzkfqdfnq";
+  };
+
+  postPatch = ''
+    sed -i '/\#include <bsd\/string.h>/i #undef HAVE_STRLCAT\n#undef HAVE_STRLCPY' stress-ng.h
+  ''; # needed because of Darwin patch on libbsd
+
+  # All platforms inputs then Linux-only ones
+  buildInputs = [ judy libbsd libgcrypt zlib ]
+    ++ stdenv.lib.optionals stdenv.hostPlatform.isLinux [
+      attr keyutils libaio libapparmor libcap lksctp-tools
+    ];
+
+  makeFlags = [
+    "BINDIR=${placeholder "out"}/bin"
+    "MANDIR=${placeholder "out"}/share/man/man1"
+    "JOBDIR=${placeholder "out"}/share/stress-ng/example-jobs"
+    "BASHDIR=${placeholder "out"}/share/bash-completion/completions"
+  ];
+
+  NIX_CFLAGS_COMPILE = stdenv.lib.optionalString stdenv.hostPlatform.isMusl "-D_LINUX_SYSINFO_H=1";
+
+  # Won't build on i686 because the binary will be linked again in the
+  # install phase without checking the dependencies. This will prevent
+  # triggering the rebuild. Why this only happens on i686 remains a
+  # mystery, though. :-(
+  enableParallelBuilding = (!stdenv.isi686);
+
+  meta = with stdenv.lib; {
+    description = "Stress test a computer system";
+    longDescription = ''
+      stress-ng will stress test a computer system in various selectable ways. It
+      was designed to exercise various physical subsystems of a computer as well as
+      the various operating system kernel interfaces. Stress-ng features:
+
+        * over 210 stress tests
+        * over 50 CPU specific stress tests that exercise floating point, integer,
+          bit manipulation and control flow
+        * over 20 virtual memory stress tests
+        * portable: builds on Linux, Solaris, *BSD, Minix, Android, MacOS X,
+          Debian Hurd, Haiku, Windows Subsystem for Linux and SunOs/Dilos with
+          gcc, clang, tcc and pcc.
+
+      stress-ng was originally intended to make a machine work hard and trip hardware
+      issues such as thermal overruns as well as operating system bugs that only
+      occur when a system is being thrashed hard. Use stress-ng with caution as some
+      of the tests can make a system run hot on poorly designed hardware and also can
+      cause excessive system thrashing which may be difficult to stop.
+
+      stress-ng can also measure test throughput rates; this can be useful to observe
+      performance changes across different operating system releases or types of
+      hardware. However, it has never been intended to be used as a precise benchmark
+      test suite, so do NOT use it in this manner.
+    '';
+    homepage = "https://kernel.ubuntu.com/~cking/stress-ng/";
+    downloadPage = "https://kernel.ubuntu.com/~cking/tarballs/stress-ng/";
+    changelog = "https://kernel.ubuntu.com/git/cking/stress-ng.git/plain/debian/changelog?h=V${version}";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ c0bw3b ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/stress/default.nix b/nixpkgs/pkgs/tools/system/stress/default.nix
new file mode 100644
index 000000000000..1595e8347e15
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/stress/default.nix
@@ -0,0 +1,16 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "stress-1.0.4";
+ 
+  src = fetchurl {
+    url = "https://people.seas.harvard.edu/~apw/stress/${name}.tar.gz";
+    sha256 = "0nw210jajk38m3y7h8s130ps2qsbz7j75wab07hi2r3hlz14yzh5";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Simple workload generator for POSIX systems. It imposes a configurable amount of CPU, memory, I/O, and disk stress on the system";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/suid-chroot/default.nix b/nixpkgs/pkgs/tools/system/suid-chroot/default.nix
new file mode 100644
index 000000000000..9697748e056d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/suid-chroot/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "suid-chroot";
+  version = "1.0.2";
+
+  src = fetchurl {
+    sha256 = "1a9xqhck0ikn8kfjk338h9v1yjn113gd83q0c50k78xa68xrnxjx";
+    url = "http://myweb.tiscali.co.uk/scottrix/linux/download/${pname}-${version}.tar.bz2";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile --replace /usr $out
+    sed -i -e '/chmod u+s/d' Makefile
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Setuid-safe wrapper for chroot";
+    license = licenses.gpl2Plus;
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/supervise/default.nix b/nixpkgs/pkgs/tools/system/supervise/default.nix
new file mode 100644
index 000000000000..3834b3762f03
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/supervise/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchzip }:
+
+stdenv.mkDerivation rec {
+
+  pname = "supervise";
+  version = "1.4.0";
+
+  src = fetchzip {
+    url = "https://github.com/catern/supervise/releases/download/v${version}/supervise-${version}.tar.gz";
+    sha256 = "0jk6q2f67pfs18ah040lmsbvbrnjap7w04jjddsfn1j5bcrvs13x";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/catern/supervise;
+    description = "A minimal unprivileged process supervisor making use of modern Linux features";
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+    maintainers = with stdenv.lib.maintainers; [ catern ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/symlinks/default.nix b/nixpkgs/pkgs/tools/system/symlinks/default.nix
new file mode 100644
index 000000000000..93a6bbf0c75b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/symlinks/default.nix
@@ -0,0 +1,27 @@
+{ fetchurl, stdenv }:
+
+stdenv.mkDerivation rec {
+  pname = "symlinks";
+  version = "1.4.3";
+
+  src = fetchurl {
+    url = "https://github.com/brandt/symlinks/archive/v${version}.tar.gz";
+    sha256 = "1cihrd3dap52z1msdhhgda7b7wy1l5ysfvyba8yxb3zjk0l5n417";
+  };
+
+  buildFlags = [ "CC=${stdenv.cc}/bin/cc" ];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man/man8
+    cp symlinks $out/bin
+    cp symlinks.8 $out/share/man/man8
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Find and remedy problematic symbolic links on a system";
+    homepage = "https://github.com/brandt/symlinks";
+    license = licenses.mit;
+    maintainers = with maintainers; [ goibhniu ckauhaus ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/syslog-ng-incubator/default.nix b/nixpkgs/pkgs/tools/system/syslog-ng-incubator/default.nix
new file mode 100644
index 000000000000..881fda241ed7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/syslog-ng-incubator/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, glib, syslogng
+, eventlog, perl, python, yacc, protobufc, libivykis, libcap, czmq
+}:
+
+stdenv.mkDerivation rec {
+  pname = "syslog-ng-incubator";
+  version = "0.6.2";
+
+  src = fetchFromGitHub {
+    owner = "balabit";
+    repo = "syslog-ng-incubator";
+    rev = "${pname}-${version}";
+    sha256 = "17y85cqcyfbp882gaii731cvz5bg1s8rgda271jh6kgnrz5rbd4s";
+  };
+
+  nativeBuildInputs = [ pkgconfig autoreconfHook yacc ];
+
+  buildInputs = [
+    glib syslogng eventlog perl python protobufc libivykis libcap czmq
+  ];
+
+  configureFlags = [
+    "--with-module-dir=$(out)/lib/syslog-ng"
+  ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/balabit/syslog-ng-incubator;
+    description = "A collection of tools and modules for syslog-ng";
+    license = licenses.gpl2;
+    maintainers = [];
+    platforms = platforms.linux;
+    broken = true; # 2018-05-12
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/syslog-ng/default.nix b/nixpkgs/pkgs/tools/system/syslog-ng/default.nix
new file mode 100644
index 000000000000..d070e1673c23
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/syslog-ng/default.nix
@@ -0,0 +1,64 @@
+{ stdenv, fetchurl, openssl, libcap, curl, which
+, eventlog, pkgconfig, glib, python, systemd, perl
+, riemann_c_client, protobufc, pcre, libnet
+, json_c, libuuid, libivykis, mongoc, rabbitmq-c
+, libesmtp
+}:
+
+stdenv.mkDerivation rec {
+  pname = "syslog-ng";
+  version = "3.24.1";
+
+  src = fetchurl {
+    url = "https://github.com/${pname}/${pname}/releases/download/${pname}-${version}/${pname}-${version}.tar.gz";
+    sha256 = "0ggsb5867mca83f5mqsi0j7hslvmj8943xynd5myjas5gcss1l6l";
+  };
+
+  nativeBuildInputs = [ pkgconfig which ];
+
+  buildInputs = [
+    libcap
+    curl
+    openssl
+    eventlog
+    glib
+    perl
+    python
+    systemd
+    riemann_c_client
+    protobufc
+    pcre
+    libnet
+    json_c
+    libuuid
+    libivykis
+    mongoc
+    rabbitmq-c
+    libesmtp
+  ];
+
+  configureFlags = [
+    "--enable-manpages"
+    "--enable-dynamic-linking"
+    "--enable-systemd"
+    "--enable-smtp"
+    "--with-ivykis=system"
+    "--with-librabbitmq-client=system"
+    "--with-mongoc=system"
+    "--with-jsonc=system"
+    "--with-systemd-journal=system"
+    "--with-systemdsystemunitdir=$(out)/etc/systemd/system"
+  ];
+
+  outputs = [ "out" "man" ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    homepage = https://www.syslog-ng.com;
+    description = "Next-generation syslogd with advanced networking and filtering capabilities";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ fpletz ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/systemd-journal2gelf/default.nix b/nixpkgs/pkgs/tools/system/systemd-journal2gelf/default.nix
new file mode 100644
index 000000000000..3f23624071f4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/systemd-journal2gelf/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "SystemdJournal2Gelf-unstable";
+  version = "20190702";
+
+  src = fetchFromGitHub {
+    rev = "b1aa5ff31307d11a3c9b4dd08c3cd6230d935ec5";
+    owner = "parse-nl";
+    repo = "SystemdJournal2Gelf";
+    sha256 = "13jyh34wprjixinmh6l7wj7lr1f6qy6nrjcf8l29a74mczbphnvv";
+    fetchSubmodules = true;
+  };
+
+  goPackagePath = "github.com/parse-nl/SystemdJournal2Gelf";
+
+  meta = with stdenv.lib; {
+    description = "Export entries from systemd's journal and send them to a graylog server using gelf";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ fadenb fpletz ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/testdisk/default.nix b/nixpkgs/pkgs/tools/system/testdisk/default.nix
new file mode 100644
index 000000000000..ad11cd2e3b65
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/testdisk/default.nix
@@ -0,0 +1,68 @@
+{ mkDerivation
+, stdenv
+, fetchurl
+, ncurses
+, libuuid
+, pkgconfig
+, libjpeg
+, zlib
+, libewf
+, enableNtfs ? !stdenv.isDarwin, ntfs3g ? null
+, enableExtFs ? !stdenv.isDarwin, e2fsprogs ? null
+, enableQt ? false, qtbase ? null, qttools ? null, qwt ? null
+}:
+
+assert enableNtfs -> ntfs3g != null;
+assert enableExtFs -> e2fsprogs != null;
+assert enableQt -> qtbase != null;
+assert enableQt -> qttools != null;
+assert enableQt -> qwt != null;
+
+(if enableQt then mkDerivation else stdenv.mkDerivation) rec {
+  pname = "testdisk";
+  version = "7.1";
+  src = fetchurl {
+    url = "https://www.cgsecurity.org/testdisk-${version}.tar.bz2";
+    sha256 = "1zlh44w67py416hkvw6nrfmjickc2d43v51vcli5p374d5sw84ql";
+  };
+
+  enableParallelBuilding = true;
+
+  buildInputs = [
+    ncurses
+    libuuid
+    libjpeg
+    zlib
+    libewf
+  ]
+  ++ stdenv.lib.optional enableNtfs ntfs3g
+  ++ stdenv.lib.optional enableExtFs e2fsprogs
+  ++ stdenv.lib.optionals enableQt [ qtbase qttools qwt ];
+
+  nativeBuildInputs = [ pkgconfig ];
+
+  NIX_CFLAGS_COMPILE="-Wno-unused";
+
+  meta = with stdenv.lib; {
+    homepage = https://www.cgsecurity.org/wiki/Main_Page;
+    downloadPage = https://www.cgsecurity.org/wiki/TestDisk_Download;
+    description = "Testdisk / Photorec - Data recovery utilities";
+    longDescription = ''
+      TestDisk is a powerful free data recovery software. It was primarily
+      designed to help recover lost partitions and/or make non-booting disks
+      bootable again when these symptoms are caused by faulty software: certain
+      types of viruses or human error (such as accidentally deleting a
+      Partition Table).
+
+      PhotoRec is a file data recovery software designed to recover lost files
+      including video, documents and archives from hard disks, CD-ROMs, and
+      lost pictures (thus the Photo Recovery name) from digital camera memory.
+      PhotoRec ignores the file system and goes after the underlying data, so
+      it will still work even if your media's file system has been severely
+      damaged or reformatted.
+    '';
+    license = stdenv.lib.licenses.gpl2Plus;
+    platforms = stdenv.lib.platforms.all;
+    maintainers = with maintainers; [ fgaz eelco ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/thermald/default.nix b/nixpkgs/pkgs/tools/system/thermald/default.nix
new file mode 100644
index 000000000000..7afa91abf130
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/thermald/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchFromGitHub, autoconf, automake, libtool
+, pkgconfig, dbus, dbus-glib, libxml2 }:
+
+stdenv.mkDerivation rec {
+  pname = "thermald";
+  version = "1.9.1";
+
+  src = fetchFromGitHub {
+    owner = "01org";
+    repo = "thermal_daemon";
+    rev = "v${version}";
+    sha256 = "0iagc3jqpnh6q2fa1gx4wx6r8qg0556j60xr159zqg95djr4dv99";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ autoconf automake libtool dbus dbus-glib libxml2 ];
+
+  patchPhase = ''sed -e 's/upstartconfdir = \/etc\/init/upstartconfdir = $(out)\/etc\/init/' -i data/Makefile.am'';
+
+  preConfigure = ''
+    export PKG_CONFIG_PATH="${dbus.dev}/lib/pkgconfig:$PKG_CONFIG_PATH"
+    ./autogen.sh
+  '';
+
+  configureFlags = [
+    "--sysconfdir=${placeholder "out"}/etc"
+    "--localstatedir=/var"
+    "--with-dbus-sys-dir=${placeholder "out"}/share/dbus-1/system.d"
+    "--with-systemdsystemunitdir=${placeholder "out"}/etc/systemd/system"
+    ];
+
+  meta = with stdenv.lib; {
+    description = "Thermal Daemon";
+    homepage = https://01.org/linux-thermal-daemon;
+    license = licenses.gpl2;
+    platforms = [ "x86_64-linux" "i686-linux" ];
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/thinkfan/default.nix b/nixpkgs/pkgs/tools/system/thinkfan/default.nix
new file mode 100644
index 000000000000..f3b4ab8440e3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/thinkfan/default.nix
@@ -0,0 +1,46 @@
+{ stdenv, fetchFromGitHub, cmake, libyamlcpp, pkgconfig
+, smartSupport ? false, libatasmart }:
+
+stdenv.mkDerivation rec {
+  pname = "thinkfan";
+  version = "1.0.2";
+
+  src = fetchFromGitHub {
+    owner = "vmatare";
+    repo = "thinkfan";
+    rev = version;
+    sha256 = "107vw0962hrwva3wra9n3hxlbfzg82ldc10qssv3dspja88g8psr";
+  };
+
+  cmakeFlags = [
+    "-DCMAKE_INSTALL_DOCDIR=share/doc/${pname}"
+    "-DUSE_NVML=OFF"
+  ] ++ stdenv.lib.optional smartSupport "-DUSE_ATASMART=ON";
+
+  nativeBuildInputs = [ cmake pkgconfig ];
+
+  buildInputs = [ libyamlcpp ] ++ stdenv.lib.optional smartSupport libatasmart;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 {.,$out/bin}/thinkfan
+
+    cd "$NIX_BUILD_TOP"; cd "$sourceRoot" # attempt to be a bit robust
+    install -Dm644 {.,$out/share/doc/thinkfan}/README
+    cp -R examples $out/share/doc/thinkfan
+    install -Dm644 {src,$out/share/man/man1}/thinkfan.1
+
+    runHook postInstall
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A minimalist fan control program. Originally designed
+specifically for IBM/Lenovo Thinkpads, it now supports any kind of system via
+the sysfs hwmon interface (/sys/class/hwmon).";
+    license = licenses.gpl3;
+    homepage = "https://github.com/vmatare/thinkfan";
+    maintainers = with maintainers; [ domenkozar ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/throttled/default.nix b/nixpkgs/pkgs/tools/system/throttled/default.nix
new file mode 100644
index 000000000000..4f52b5e09455
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/throttled/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchFromGitHub, python3Packages }:
+
+stdenv.mkDerivation rec {
+  pname = "throttled";
+  version = "0.6";
+
+  src = fetchFromGitHub {
+    owner = "erpalma";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1icb2288pj25vbdnd16zvisw9c01hp8vkk25ilkc74gy76xhpcs4";
+  };
+
+  nativeBuildInputs = [ python3Packages.wrapPython ];
+
+  pythonPath = with python3Packages; [ 
+    configparser
+    dbus-python
+    pygobject3
+  ];
+
+  # The upstream unit both assumes the install location, and tries to run in a virtualenv 
+  postPatch = ''sed -e 's|ExecStart=.*|ExecStart=${placeholder "out"}/bin/lenovo_fix.py|' -i systemd/lenovo_fix.service'';
+
+  installPhase = ''
+    runHook preInstall
+    install -D -m755 -t $out/bin lenovo_fix.py
+    install -D -t $out/bin lenovo_fix.py mmio.py
+    install -D -m644 -t $out/etc etc/*
+    install -D -m644 -t $out/lib/systemd/system systemd/*
+    runHook postInstall
+  '';
+
+  postFixup = ''wrapPythonPrograms'';
+
+  meta = with stdenv.lib; {
+    description = "Fix for Intel CPU throttling issues";
+    homepage = https://github.com/erpalma/throttled;
+    license = licenses.mit;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ michaelpj ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/tm/default.nix b/nixpkgs/pkgs/tools/system/tm/default.nix
new file mode 100644
index 000000000000..cbb1fd88669a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/tm/default.nix
@@ -0,0 +1,26 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation {
+
+  name = "tm-0.4.1";
+
+  installPhase=''make install "PREFIX=$out"'';
+
+  patchPhase = ''
+    sed -i 's@/usr/bin/install@install@g ; s/gcc/cc/g' Makefile
+  '';
+
+  src = fetchurl {
+    url = http://vicerveza.homeunix.net/~viric/soft/tm/tm-0.4.1.tar.gz;
+    sha256 = "3b389bc03b6964ad5ffa57a344b891fdbcf7c9b2604adda723a863f83657c4a0";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = http://vicerveza.homeunix.net/~viric/soft/tm;
+    description = "Terminal mixer - multiplexer for the i/o of terminal applications";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ viric ];
+    platforms = platforms.all;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/system/tre-command/default.nix b/nixpkgs/pkgs/tools/system/tre-command/default.nix
new file mode 100644
index 000000000000..6050b2a709eb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/tre-command/default.nix
@@ -0,0 +1,24 @@
+{ rustPlatform, fetchFromGitHub, stdenv }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tre";
+  version = "0.2.2";
+
+  src = fetchFromGitHub {
+    owner = "dduan";
+    repo = "tre";
+    rev = "v${version}";
+    sha256 = "1fazw2wn738iknbv54gv7qll7d4q2gy9bq1s3f3cv21cdv6bqral";
+  };
+
+  cargoSha256 = "0m82zbi610zgvcza6n03xl80g31x6bfkjyrfxcxa6fyf2l5cj9pv";
+  verifyCargoDeps = true;
+
+  meta = with stdenv.lib; {
+    description = "Tree command, improved";
+    homepage = "https://github.com/dduan/tre";
+    license = licenses.mit;
+    maintainers = [ maintainers.dduan ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/tree/default.nix b/nixpkgs/pkgs/tools/system/tree/default.nix
new file mode 100644
index 000000000000..0163d5502173
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/tree/default.nix
@@ -0,0 +1,59 @@
+{ stdenv, fetchurl }:
+
+let
+  version = "1.8.0";
+
+  # These settings are found in the Makefile, but there seems to be no
+  # way to select one ore the other setting other than editing the file
+  # manually, so we have to duplicate the know how here.
+  systemFlags = with stdenv;
+    if isDarwin then ''
+      CFLAGS="-O2 -Wall -fomit-frame-pointer"
+      LDFLAGS=
+      EXTRA_OBJS=strverscmp.o
+    '' else if isCygwin then ''
+      CFLAGS="-O2 -Wall -fomit-frame-pointer -DCYGWIN"
+      LDFLAGS=-s
+      TREE_DEST=tree.exe
+      EXTRA_OBJS=strverscmp.o
+    '' else if (isFreeBSD || isOpenBSD) then ''
+      CFLAGS="-O2 -Wall -fomit-frame-pointer"
+      LDFLAGS=-s
+      EXTRA_OBJS=strverscmp.o
+    '' else
+    ""; # use linux flags by default
+in
+stdenv.mkDerivation {
+  pname = "tree";
+  inherit version;
+
+  src = fetchurl {
+    url = "http://mama.indstate.edu/users/ice/tree/src/tree-${version}.tgz";
+    sha256 = "1hmpz6k0mr6salv0nprvm1g0rdjva1kx03bdf1scw8a38d5mspbi";
+  };
+
+  configurePhase = ''
+    sed -i Makefile -e 's|^OBJS=|OBJS=$(EXTRA_OBJS) |'
+    makeFlagsArray=(
+      prefix=$out
+      MANDIR=$out/share/man/man1
+      ${systemFlags}
+      CC="$CC"
+    )
+  '';
+
+  meta = {
+    homepage = http://mama.indstate.edu/users/ice/tree/;
+    description = "Command to produce a depth indented directory listing";
+    license = stdenv.lib.licenses.gpl2;
+
+    longDescription = ''
+      Tree is a recursive directory listing command that produces a
+      depth indented listing of files, which is colorized ala dircolors if
+      the LS_COLORS environment variable is set and output is to tty.
+    '';
+
+    platforms = stdenv.lib.platforms.all;
+    maintainers = [stdenv.lib.maintainers.peti];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/ts/default.nix b/nixpkgs/pkgs/tools/system/ts/default.nix
new file mode 100644
index 000000000000..79ba7d893040
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/ts/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl
+, sendmailPath ? "/run/wrappers/bin/sendmail"
+}:
+
+stdenv.mkDerivation rec {
+
+  name = "ts-1.0";
+
+  installPhase=''make install "PREFIX=$out"'';
+
+  patchPhase = ''
+    sed -i s,/usr/sbin/sendmail,${sendmailPath}, mail.c ts.1
+  '';
+
+  src = fetchurl {
+    url = "http://viric.name/~viric/soft/ts/${name}.tar.gz";
+    sha256 = "15dkzczx10fhl0zs9bmcgkxfbwq2znc7bpscljm4rchbzx7y6lsg";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = http://vicerveza.homeunix.net/~viric/soft/ts;
+    description = "Task spooler - batch queue";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ viric ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/uefitool/common.nix b/nixpkgs/pkgs/tools/system/uefitool/common.nix
new file mode 100644
index 000000000000..7d5ee82dcf98
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/uefitool/common.nix
@@ -0,0 +1,39 @@
+{ version, sha256, installFiles }:
+{ lib, mkDerivation, fetchFromGitHub, qtbase, qmake, cmake, zip }:
+
+mkDerivation rec {
+  passthru = {
+    inherit version;
+    inherit sha256;
+    inherit installFiles;
+  };
+  pname = "uefitool";
+  inherit version;
+
+  src = fetchFromGitHub {
+    inherit sha256;
+    owner = "LongSoft";
+    repo = pname;
+    rev = version;
+  };
+
+  buildInputs = [ qtbase ];
+  nativeBuildInputs = [ qmake cmake zip ];
+
+  configurePhase = ":";
+  buildPhase = "bash unixbuild.sh";
+
+  installPhase = ''
+    mkdir -p "$out"/bin
+    cp ${lib.concatStringsSep " " installFiles} "$out"/bin
+  '';
+
+  meta = with lib; {
+    description = "UEFI firmware image viewer and editor";
+    homepage = "https://github.com/LongSoft/uefitool";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ ajs124 ];
+    # uefitool supposedly works on other platforms, but their build script only works on linux in nixpkgs
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/uefitool/variants.nix b/nixpkgs/pkgs/tools/system/uefitool/variants.nix
new file mode 100644
index 000000000000..cced17e6ddd4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/uefitool/variants.nix
@@ -0,0 +1,15 @@
+{ libsForQt5 }:
+let
+  common = opts: libsForQt5.callPackage (import ./common.nix opts) {};
+in rec {
+  new-engine = common rec {
+    version = "A56";
+    sha256 = "0sxmjkrwcchxg2qmcjsw2vr42s7cdcg2fxkwb8axq2r2z23465gp";
+    installFiles = [ "UEFITool/UEFITool" "UEFIFind/UEFIFind" "UEFIExtract/UEFIExtract" ];
+  };
+  old-engine = common rec {
+    version = "0.27.0";
+    sha256 = "1i1p823qld927p4f1wcphqcnivb9mq7fi5xmzibxc3g9zzgnyc2h";
+    installFiles = [ "UEFITool" "UEFIReplace/UEFIReplace" "UEFIPatch/UEFIPatch" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/undaemonize/default.nix b/nixpkgs/pkgs/tools/system/undaemonize/default.nix
new file mode 100644
index 000000000000..0f33a8d34c33
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/undaemonize/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+  name = "undaemonize-2017-07-11";
+  src = fetchFromGitHub {
+    repo = "undaemonize";
+    owner = "nickstenning";
+    rev = "a181cfd900851543ee1f85fe8f76bc8916b446d4";
+    sha256 = "1fkrgj3xfhj820qagh5p0rabl8z2hpad6yp984v92h9pgbfwxs33";
+  };
+  installPhase = ''
+    install -D undaemonize $out/bin/undaemonize
+  '';
+  meta = {
+    description = "Tiny helper utility to force programs which insist on daemonizing themselves to run in the foreground";
+    homepage = https://github.com/nickstenning/undaemonize;
+    license = stdenv.lib.licenses.mit;
+    maintainers = [ stdenv.lib.maintainers.canndrew ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/system/uptimed/default.nix b/nixpkgs/pkgs/tools/system/uptimed/default.nix
new file mode 100644
index 000000000000..2e856aaf9bea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/uptimed/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "uptimed";
+  version = "0.4.2";
+
+  src = fetchFromGitHub {
+    sha256 = "0wnnpjfxnycigqj6hag0n6p5piss8cv40y9jda72d9s4df5n91z8";
+    rev = "v${version}";
+    repo = "uptimed";
+    owner = "rpodgorny";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  patches = [ ./no-var-spool-install.patch ];
+
+  meta = with stdenv.lib; {
+    description = "Uptime record daemon";
+    longDescription = ''
+      An uptime record daemon keeping track of the highest uptimes a computer
+      system ever had. It uses the system boot time to keep sessions apart from
+      each other. Uptimed comes with a console front-end to parse the records,
+      which can also easily be used to show your records on a web page.
+    '';
+    homepage = https://github.com/rpodgorny/uptimed/;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/system/uptimed/no-var-spool-install.patch b/nixpkgs/pkgs/tools/system/uptimed/no-var-spool-install.patch
new file mode 100644
index 000000000000..f591aad4b504
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/uptimed/no-var-spool-install.patch
@@ -0,0 +1,15 @@
+diff -rc uptimed-0.3.16/Makefile.am uptimed-0.3.16-new/Makefile.am
+*** uptimed-0.3.16/Makefile.am	2009-01-02 00:46:00.000000000 +0100
+--- uptimed-0.3.16-new/Makefile.am	2009-09-16 09:24:29.952524967 +0200
+***************
+*** 8,16 ****
+  
+  AM_CFLAGS = @CFLAGS@ -DFILE_CONFIG=\"$(sysconfdir)/uptimed.conf\"
+  
+- install-data-local:
+- 	$(INSTALL) -d $(DESTDIR)/var/spool/uptimed
+- 
+  srpm: dist
+  	@(rpmbuild -ts uptimed-$(PACKAGE_VERSION).tar.gz)
+  
+--- 8,13 ----
diff --git a/nixpkgs/pkgs/tools/system/vbetool/default.nix b/nixpkgs/pkgs/tools/system/vbetool/default.nix
new file mode 100644
index 000000000000..06ae28626624
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/vbetool/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl, pciutils, libx86, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "vbetool";
+  version = "1.1";
+
+  src = fetchurl {
+    url = "https://www.codon.org.uk/~mjg59/vbetool/download/${pname}-${version}.tar.gz";
+    sha256 = "0m7rc9v8nz6w9x4x96maza139kin6lg4hscy6i13fna4672ds9jd";
+  };
+
+  buildInputs = [ pciutils libx86 zlib ];
+
+  patchPhase = ''
+    substituteInPlace Makefile.in --replace '$(libdir)/libpci.a' ""
+  '';
+
+  configureFlags = [ "LDFLAGS=-lpci" ];
+
+  meta = with stdenv.lib; {
+    description = "Video BIOS execution tool";
+    homepage = http://www.codon.org.uk/~mjg59/vbetool/;
+    maintainers = [ maintainers.raskin ];
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/vboot_reference/default.nix b/nixpkgs/pkgs/tools/system/vboot_reference/default.nix
new file mode 100644
index 000000000000..1391a2a5ed23
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/vboot_reference/default.nix
@@ -0,0 +1,50 @@
+{ stdenv, fetchFromGitiles, pkgconfig, libuuid, openssl, libyaml, lzma }:
+
+stdenv.mkDerivation rec {
+  version = "20180311";
+  checkout = "4c84e077858c809ee80a9a6f9b38185cf7dcded7";
+
+  pname = "vboot_reference";
+
+  src = fetchFromGitiles {
+    url = "https://chromium.googlesource.com/chromiumos/platform/vboot_reference";
+    rev = checkout;
+    sha256 = "1zja4ma6flch08h5j2l1hqnxmw2xwylidnddxxd5y2x05dai9ddj";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ openssl libuuid libyaml lzma ];
+
+  enableParallelBuilding = true;
+
+  patches = [ ./dont_static_link.patch ];
+
+  # fix build with gcc9
+  NIX_CFLAGS_COMPILE = [ "-Wno-error" ];
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace "ar qc" '${stdenv.cc.bintools.targetPrefix}ar qc'
+  '';
+
+  preBuild = ''
+    patchShebangs scripts
+  '';
+
+  makeFlags = [
+    "DESTDIR=$(out)"
+    "HOST_ARCH=${stdenv.hostPlatform.parsed.cpu.name}"
+  ];
+
+  postInstall = ''
+    mkdir -p $out/share/vboot
+    cp -r tests/devkeys* $out/share/vboot/
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Chrome OS partitioning and kernel signing tools";
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ lheckemann ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/vboot_reference/dont_static_link.patch b/nixpkgs/pkgs/tools/system/vboot_reference/dont_static_link.patch
new file mode 100644
index 000000000000..506b942e246e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/vboot_reference/dont_static_link.patch
@@ -0,0 +1,30 @@
+---
+--- a/Makefile
++++ b/Makefile
+@@ -964,7 +964,7 @@ ${UTILLIB21}: ${UTILLIB21_OBJS} ${FWLIB2
+ # Link tests for external repos
+ ${BUILD}/host/linktest/extern: ${HOSTLIB}
+ ${BUILD}/host/linktest/extern: LIBS = ${HOSTLIB}
+-${BUILD}/host/linktest/extern: LDLIBS += -static
++#${BUILD}/host/linktest/extern: LDLIBS += -static
+ TEST_OBJS += ${BUILD}/host/linktest/extern.o
+ 
+ .PHONY: hostlib
+@@ -1056,7 +1056,7 @@ ${UTIL_BINS} ${UTIL_BINS_STATIC}: ${UTIL
+ ${UTIL_BINS} ${UTIL_BINS_STATIC}: LIBS = ${UTILLIB}
+ 
+ # Utilities for auto-update toolkits must be statically linked.
+-${UTIL_BINS_STATIC}: LDFLAGS += -static
++${UTIL_BINS_STATIC}:
+ 
+ 
+ .PHONY: utils
+@@ -1089,7 +1089,7 @@ futil: ${FUTIL_STATIC_BIN} ${FUTIL_BIN}
+ 
+ ${FUTIL_STATIC_BIN}: ${FUTIL_STATIC_OBJS} ${UTILLIB}
+ 	@${PRINTF} "    LD            $(subst ${BUILD}/,,$@)\n"
+-	${Q}${LD} -o $@ ${CFLAGS} ${LDFLAGS} -static $^ ${LDLIBS}
++	${Q}${LD} -o $@ ${CFLAGS} ${LDFLAGS} $^ ${LDLIBS}
+ 
+ ${FUTIL_BIN}: LDLIBS += ${CRYPTO_LIBS}
+ ${FUTIL_BIN}: ${FUTIL_OBJS} ${UTILLIB}
diff --git a/nixpkgs/pkgs/tools/system/which/default.nix b/nixpkgs/pkgs/tools/system/which/default.nix
new file mode 100644
index 000000000000..12aac2508cbf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/which/default.nix
@@ -0,0 +1,17 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "which-2.21";
+
+  src = fetchurl {
+    url = "mirror://gnu/which/${name}.tar.gz";
+    sha256 = "1bgafvy3ypbhhfznwjv1lxmd6mci3x1byilnnkc7gcr486wlb8pl";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://www.gnu.org/software/which/;
+    description = "Shows the full path of (shell) commands";
+    platforms = platforms.all;
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/wsmancli/default.nix b/nixpkgs/pkgs/tools/system/wsmancli/default.nix
new file mode 100644
index 000000000000..da502946781b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/wsmancli/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig
+, openssl, openwsman }:
+
+stdenv.mkDerivation rec {
+  pname = "wsmancli";
+  version = "2.6.0";
+
+  src = fetchFromGitHub {
+    owner  = "Openwsman";
+    repo   = "wsmancli";
+    rev    = "v${version}";
+    sha256 = "0a67fz9lj7xkyfqim6ai9kj7v6hzx94r1bg0g0l5dymgng648b9j";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+
+  buildInputs = [ openwsman openssl ];
+
+  postPatch = ''
+    touch AUTHORS NEWS README
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Openwsman command-line client";
+    longDescription = ''
+      Openwsman provides a command-line tool, wsman, to perform basic
+      operations on the command-line. These operations include Get, Put,
+      Invoke, Identify, Delete, Create, and Enumerate. The command-line tool
+      also has several switches to allow for optional features of the
+      WS-Management specification and Testing.
+    '';
+    downloadPage = https://github.com/Openwsman/wsmancli/releases;
+    inherit (openwsman.meta) homepage license maintainers platforms;
+    inherit version;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/xe/default.nix b/nixpkgs/pkgs/tools/system/xe/default.nix
new file mode 100644
index 000000000000..62423ff594ff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/xe/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, lib, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "xe";
+  version = "0.11";
+
+  src = fetchFromGitHub {
+    owner = "chneukirchen";
+    repo = "xe";
+    rev = "v${version}";
+    sha256 = "04jr8f6jcijr0bsmn8ajm0aj35qh9my3xjsaq64h8lwg5bpyn29x";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Simple xargs and apply replacement";
+    homepage = https://github.com/chneukirchen/xe;
+    license = licenses.publicDomain;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ cstrahan ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/system/yeshup/default.nix b/nixpkgs/pkgs/tools/system/yeshup/default.nix
new file mode 100644
index 000000000000..42060aed295a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/system/yeshup/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "yeshup";
+  version = "unstable-2013-10-29";
+
+  src = fetchFromGitHub {
+    owner = "RhysU";
+    repo  = "yeshup";
+    rev = "5461a8f957c686ccd0240be3f0fd8124d7381b08";
+    sha256 = "1wwbc158y46jsmdi1lp0m3dlbr9kvzvwxfvzj6646cpy9d6h21v9";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -v yeshup $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/RhysU/yeshup;
+    platforms = platforms.linux;
+    license = licenses.cc-by-sa-30; # From Stackoverflow answer
+    maintainers = with maintainers; [ obadz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/a2ps/default.nix b/nixpkgs/pkgs/tools/text/a2ps/default.nix
new file mode 100644
index 000000000000..f423bd7ea1c4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/a2ps/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, fetchurl, fetchpatch, autoconf, bison, libpaper, gperf, file, perl }:
+
+stdenv.mkDerivation rec {
+  name = "a2ps-4.14";
+  src = fetchurl {
+    url = "mirror://gnu/a2ps/${name}.tar.gz";
+    sha256 = "195k78m1h03m961qn7jr120z815iyb93gwi159p1p9348lyqvbpk";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://sources.debian.net/data/main/a/a2ps/1:4.14-1.3/debian/patches/09_CVE-2001-1593.diff";
+      sha256 = "1hrfmvb21zlklmg2fqikgywhqgc4qnvbhx517w87faafrhzhlnh0";
+    })
+    (fetchpatch {
+      url = "https://sources.debian.net/data/main/a/a2ps/1:4.14-1.3/debian/patches/CVE-2014-0466.diff";
+      sha256 = "0grqqsc3m45niac56m19m5gx7gc0m8zvia5iman1l4rlq31shf8s";
+    })
+    (fetchpatch {
+      url = "https://sources.debian.net/data/main/a/a2ps/1:4.14-1.3/debian/patches/fix-format-security.diff";
+      sha256 = "0pq7zl41gf2kc6ahwyjnzn93vbxb4jc2c5g8j20isp4vw6dqrnwv";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace afm/make_fonts_map.sh --replace "/bin/rm" "rm"
+    substituteInPlace tests/defs.in --replace "/bin/rm" "rm"
+  '';
+
+  nativeBuildInputs = [ autoconf file bison perl ];
+  buildInputs = [ libpaper gperf ];
+
+  meta = with stdenv.lib; {
+    description = "An Anything to PostScript converter and pretty-printer";
+    longDescription = ''
+      GNU a2ps converts files into PostScript for printing or viewing. It uses a nice default format,
+      usually two pages on each physical page, borders surrounding pages, headers with useful information
+      (page number, printing date, file name or supplied header), line numbering, symbol substitution as
+      well as pretty printing for a wide range of programming languages.
+    '';
+    homepage = https://www.gnu.org/software/a2ps/;
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.bennofs ];
+    platforms = platforms.linux;
+
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/agrep/default.nix b/nixpkgs/pkgs/tools/text/agrep/default.nix
new file mode 100644
index 000000000000..902067b3d535
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/agrep/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+  pname = "agrep";
+  version = "3.41.5";
+
+  src = fetchFromGitHub {
+    owner = "Wikinaut";
+    repo = "agrep";
+    # This repository has numbered versions, but not Git tags.
+    rev = "eef20411d605d9d17ead07a0ade75046f2728e21";
+    sha256 = "14addnwspdf2mxpqyrw8b84bb2257y43g5ccy4ipgrr91fmxq2sk";
+  };
+
+  # Related: https://github.com/Wikinaut/agrep/pull/11
+  prePatch = stdenv.lib.optionalString (stdenv.hostPlatform.isMusl || stdenv.isDarwin) ''
+    sed -i '1i#include <sys/stat.h>' checkfil.c newmgrep.c recursiv.c
+  '';
+  installPhase = ''
+    install -Dm 555 agrep -t "$out/bin"
+    install -Dm 444 docs/* -t "$out/doc"
+  '';
+
+  meta = {
+    description = "Approximate grep for fast fuzzy string searching";
+    homepage = https://www.tgries.de/agrep/;
+    license = stdenv.lib.licenses.isc;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/aha/default.nix b/nixpkgs/pkgs/tools/text/aha/default.nix
new file mode 100644
index 000000000000..7dc07664fcef
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/aha/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "aha";
+  version = "0.5";
+
+  src = fetchFromGitHub {
+    sha256 = "0byml4rmpiaalwx69jcixl3yvpvwmwiss1jzgsqwshilb2p4qnmz";
+    rev = version;
+    repo = "aha";
+    owner = "theZiz";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "ANSI HTML Adapter";
+    longDescription = ''
+      aha takes ANSI SGR-coloured input and produces W3C-conformant HTML code.
+    '';
+    homepage = https://github.com/theZiz/aha;
+    license = with licenses; [ lgpl2Plus mpl11 ];
+    maintainers = with maintainers; [ pSub ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/amber/default.nix b/nixpkgs/pkgs/tools/text/amber/default.nix
new file mode 100644
index 000000000000..935b6a607298
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/amber/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchFromGitHub, rustPlatform
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "amber";
+  version = "0.5.3";
+
+  src = fetchFromGitHub {
+    owner = "dalance";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0k70rk19hwdlhhqm91x12xcb8r09kzpijs0xwhplrwdh86qfxymx";
+  };
+
+  cargoSha256 = "0hh3sgcdcp0llgf3i3dysrr3vry3fv3fzzf44ad1953d5mnyhvap";
+
+  buildInputs = stdenv.lib.optional stdenv.isDarwin Security;
+
+  meta = with stdenv.lib; {
+    description = "A code search-and-replace tool";
+    homepage = https://github.com/dalance/amber;
+    license = with licenses; [ mit ];
+    maintainers = [ maintainers.bdesham ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/ansifilter/default.nix b/nixpkgs/pkgs/tools/text/ansifilter/default.nix
new file mode 100644
index 000000000000..bc265c5a5aee
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ansifilter/default.nix
@@ -0,0 +1,31 @@
+{ fetchurl, stdenv, pkgconfig, boost, lua }:
+
+stdenv.mkDerivation rec {
+  pname = "ansifilter";
+  version = "2.15";
+
+  src = fetchurl {
+    url = "http://www.andre-simon.de/zip/ansifilter-${version}.tar.bz2";
+    sha256 = "07x1lha6xkfn5sr2f45ynk1fxmzc3qr4axxm0hip4adqygx2zsky";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ boost lua ];
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+    "conf_dir=/etc/ansifilter"
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Tool to convert ANSI to other formats";
+    longDescription = ''
+      Tool to remove ANSI or convert them to another format
+      (HTML, TeX, LaTeX, RTF, Pango or BBCode)
+    '';
+    homepage = "http://www.andre-simon.de/doku/ansifilter/en/ansifilter.php";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.Adjective-Object ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/ascii/default.nix b/nixpkgs/pkgs/tools/text/ascii/default.nix
new file mode 100644
index 000000000000..b01ce7773e30
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ascii/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "ascii";
+  version = "3.18";
+
+  src = fetchurl {
+    url = "http://www.catb.org/~esr/ascii/${pname}-${version}.tar.gz";
+    sha256 = "0b87vy06s8s3a8q70pqavsbk4m4ff034sdml2xxa6qfsykaj513j";
+  };
+
+  prePatch = ''
+    sed -i -e "s|^PREFIX = .*|PREFIX = $out|" Makefile
+  '';
+
+  preInstall = ''
+    mkdir -vp "$out/bin" "$out/share/man/man1"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Interactive ASCII name and synonym chart";
+    homepage = http://www.catb.org/~esr/ascii/;
+    license = licenses.bsd3;
+    platforms = platforms.all;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/bcat/Gemfile b/nixpkgs/pkgs/tools/text/bcat/Gemfile
new file mode 100644
index 000000000000..a25a2e890978
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/bcat/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'bcat'
diff --git a/nixpkgs/pkgs/tools/text/bcat/Gemfile.lock b/nixpkgs/pkgs/tools/text/bcat/Gemfile.lock
new file mode 100644
index 000000000000..09108977c718
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/bcat/Gemfile.lock
@@ -0,0 +1,15 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    bcat (0.6.2)
+      rack (~> 1.0)
+    rack (1.6.11)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  bcat
+
+BUNDLED WITH
+   1.17.2
diff --git a/nixpkgs/pkgs/tools/text/bcat/default.nix b/nixpkgs/pkgs/tools/text/bcat/default.nix
new file mode 100644
index 000000000000..e8000f17cdeb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/bcat/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "bcat";
+  gemdir = ./.;
+  exes = [ "bcat" "btee" "a2h" ];
+
+  passthru.updateScript = bundlerUpdateScript "bcat";
+
+  meta = with lib; {
+    description = "Pipe to browser utility";
+    homepage    = http://rtomayko.github.com/bcat/;
+    license     = licenses.mit;
+    maintainers = with maintainers; [ jraygauthier nicknovitski ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/bcat/gemset.nix b/nixpkgs/pkgs/tools/text/bcat/gemset.nix
new file mode 100644
index 000000000000..75de0e5cf38a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/bcat/gemset.nix
@@ -0,0 +1,23 @@
+{
+  bcat = {
+    dependencies = ["rack"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0w2wwlngcs7f4lmvifixrb89bjkw2lx8z0nn72w360hz394ic651";
+      type = "gem";
+    };
+    version = "0.6.2";
+  };
+  rack = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g9926ln2lw12lfxm4ylq1h6nl0rafl10za3xvjzc87qvnqic87f";
+      type = "gem";
+    };
+    version = "1.6.11";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/text/boxes/default.nix b/nixpkgs/pkgs/tools/text/boxes/default.nix
new file mode 100644
index 000000000000..8325c6c08f35
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/boxes/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, fetchFromGitHub, bison, flex }:
+
+stdenv.mkDerivation rec {
+  pname = "boxes";
+  version = "1.3";
+
+  src = fetchFromGitHub {
+    owner = "ascii-boxes";
+    repo = "boxes";
+    rev = "v${version}";
+    sha256 = "0b12rsynrmkldlwcb62drk33kk0aqwbj10mq5y5x3hjf626gjwsi";
+  };
+
+  # Building instructions:
+  # https://boxes.thomasjensen.com/build.html#building-on-linux--unix
+  nativeBuildInputs = [ bison flex ];
+
+  dontConfigure = true;
+
+  # Makefile references a system wide config file in '/usr/share'. Instead, we
+  # move it within the store by default.
+  preBuild = ''
+    substituteInPlace Makefile \
+      --replace "GLOBALCONF = /usr/share/boxes" \
+                "GLOBALCONF=${placeholder "out"}/share/boxes/boxes-config"
+  '';
+
+  makeFlags = stdenv.lib.optionals stdenv.isDarwin [ "CC=cc" ];
+
+  installPhase = ''
+    install -Dm755 -t $out/bin src/boxes
+    install -Dm644 -t $out/share/boxes boxes-config
+    install -Dm644 -t $out/share/man/man1 doc/boxes.1
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Command line ASCII boxes unlimited!";
+    longDescription = ''
+      Boxes is a command line filter program that draws ASCII art boxes around
+      your input text.
+    '';
+    homepage = https://boxes.thomasjensen.com;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ waiting-for-dev ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/catdoc/default.nix b/nixpkgs/pkgs/tools/text/catdoc/default.nix
new file mode 100644
index 000000000000..64ef092f36be
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/catdoc/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl, fetchpatch }:
+
+stdenv.mkDerivation rec {
+  pname = "catdoc";
+  version = "0.95";
+
+  src = fetchurl {
+    url = "http://ftp.wagner.pp.ru/pub/catdoc/${pname}-${version}.tar.gz";
+    sha256 = "514a84180352b6bf367c1d2499819dfa82b60d8c45777432fa643a5ed7d80796";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/c/catdoc/1:0.95-4.1/debian/patches/05-CVE-2017-11110.patch";
+      sha256 = "1ljnwvssvzig94hwx8843b88p252ww2lbxh8zybcwr3kwwlcymx7";
+    })
+  ];
+
+  configureFlags = [ "--disable-wordview" ];
+
+  meta = with stdenv.lib; {
+    description = "MS-Word/Excel/PowerPoint to text converter";
+    platforms = platforms.all;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/catdocx/default.nix b/nixpkgs/pkgs/tools/text/catdocx/default.nix
new file mode 100644
index 000000000000..adf9d17815b0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/catdocx/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, lib, fetchFromGitHub, makeWrapper, unzip, catdoc }:
+
+stdenv.mkDerivation {
+  name = "catdocx-20170102";
+
+  src = fetchFromGitHub {
+    owner = "jncraton";
+    repo = "catdocx";
+    rev = "04fa0416ec1f116d4996685e219f0856d99767cb";
+    sha256 = "1sxiqhkvdqn300ygfgxdry2dj2cqzjhkzw13c6349gg5vxfypcjh";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/libexec $out/bin
+    cp catdocx.sh $out/libexec
+    chmod +x $out/libexec/catdocx.sh
+    wrapProgram $out/libexec/catdocx.sh --prefix PATH : "${lib.makeBinPath [ unzip catdoc ]}"
+    ln -s $out/libexec/catdocx.sh $out/bin/catdocx
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Extracts plain text from docx files";
+    homepage = https://github.com/jncraton/catdocx;
+    license = with licenses; [ bsd3 ];
+    maintainers = [ maintainers.michalrus ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/cconv/default.nix b/nixpkgs/pkgs/tools/text/cconv/default.nix
new file mode 100644
index 000000000000..3b80af365f65
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/cconv/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchurl, autoreconfHook }:
+let version = "0.6.3"; in
+  stdenv.mkDerivation {
+  pname = "cconv";
+  inherit version;
+  
+  src = fetchurl {
+    url = "https://github.com/xiaoyjy/cconv/archive/v${version}.tar.gz";
+    sha256 = "82f46a94829f5a8157d6f686e302ff5710108931973e133d6e19593061b81d84";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  
+  meta = with stdenv.lib; {
+    description = "A iconv based simplified-traditional chinese conversion tool";
+    homepage = https://github.com/xiaoyjy/cconv;
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.redfish64 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/codesearch/default.nix b/nixpkgs/pkgs/tools/text/codesearch/default.nix
new file mode 100644
index 000000000000..521b4c5b284f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/codesearch/default.nix
@@ -0,0 +1,26 @@
+# This file was generated by go2nix.
+{ stdenv, buildGoPackage, fetchgit }:
+
+buildGoPackage rec {
+  pname = "codesearch";
+  version = "20150717-${stdenv.lib.strings.substring 0 7 rev}";
+  rev = "a45d81b686e85d01f2838439deaf72126ccd5a96";
+
+  goPackagePath = "github.com/google/codesearch";
+
+  src = fetchgit {
+    inherit rev;
+    url = "https://github.com/google/codesearch";
+    sha256 = "12bv3yz0l3bmsxbasfgv7scm9j719ch6pmlspv4bd4ix7wjpyhny";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = {
+    description = "Fast, indexed regexp search over large file trees";
+    homepage = https://github.com/google/codesearch;
+    license = [ stdenv.lib.licenses.bsd3 ];
+    maintainers = [ stdenv.lib.maintainers.bennofs ];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/codesearch/deps.nix b/nixpkgs/pkgs/tools/text/codesearch/deps.nix
new file mode 100644
index 000000000000..2d1dad706340
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/codesearch/deps.nix
@@ -0,0 +1,3 @@
+# This file was generated by go2nix.
+[
+]
diff --git a/nixpkgs/pkgs/tools/text/colordiff/default.nix b/nixpkgs/pkgs/tools/text/colordiff/default.nix
new file mode 100644
index 000000000000..46fdf29ad46c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/colordiff/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, perl /*, xmlto */}:
+
+stdenv.mkDerivation rec {
+  name = "colordiff-1.0.18";
+
+  src = fetchurl {
+    urls = [
+      "https://www.colordiff.org/${name}.tar.gz"
+      "http://www.colordiff.org/archive/${name}.tar.gz"
+    ];
+    sha256 = "1q6n60n4b9fnzccxyxv04mxjsql4ddq17vl2c74ijvjdhpcfrkr9";
+  };
+
+  buildInputs = [ perl /* xmlto */ ];
+
+  dontBuild = 1; # do not build doc yet.
+
+  installPhase = ''make INSTALL_DIR=/bin MAN_DIR=/share/man/man1 DESTDIR="$out" install'';
+
+  meta = with stdenv.lib; {
+    description = "Wrapper for 'diff' that produces the same output but with pretty 'syntax' highlighting";
+    homepage = https://www.colordiff.org/;
+    license = licenses.gpl3;
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/coloursum/default.nix b/nixpkgs/pkgs/tools/text/coloursum/default.nix
new file mode 100644
index 000000000000..5cac5a9f90e5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/coloursum/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub, rustPlatform, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "coloursum";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "ticky";
+    repo = "coloursum";
+    rev = "v${version}";
+    sha256 = "1piz0l7qdcvjzfykm6rzqc8s1daxp3cj3923v9cmm41bc2v0p5q0";
+  };
+
+  cargoSha256 = "091flc5ymx0y43ld6bdmig5cy479b90bkmwv3yaysi5kpr28skvh";
+
+  buildInputs = stdenv.lib.optional stdenv.isDarwin Security;
+
+  meta = with stdenv.lib; {
+    description = "Colourise your checksum output";
+    homepage = "https://github.com/ticky/coloursum";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ fgaz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/convertlit/default.nix b/nixpkgs/pkgs/tools/text/convertlit/default.nix
new file mode 100644
index 000000000000..ffc2dc1c4d5c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/convertlit/default.nix
@@ -0,0 +1,36 @@
+{stdenv, fetchzip, libtommath}:
+
+stdenv.mkDerivation {
+  name = "convertlit-1.8";
+
+  src = fetchzip {
+    url = http://www.convertlit.com/convertlit18src.zip;
+    sha256 = "182nsin7qscgbw2h92m0zadh3h8q410h5cza6v486yjfvla3dxjx";
+    stripRoot = false;
+  };
+
+  buildInputs = [libtommath];
+
+  hardeningDisable = [ "format" ];
+
+  buildPhase = ''
+    cd lib
+    make
+    cd ../clit18
+    substituteInPlace Makefile \
+      --replace ../libtommath-0.30/libtommath.a -ltommath
+    make
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp clit $out/bin
+  '';
+
+  meta = {
+    homepage = http://www.convertlit.com/;
+    description = "A tool for converting Microsoft Reader ebooks to more open formats";
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/copyright-update/default.nix b/nixpkgs/pkgs/tools/text/copyright-update/default.nix
new file mode 100644
index 000000000000..9a405674dc7a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/copyright-update/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitHub, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "copyright-update";
+  version = "2016.1018";
+
+  src = fetchFromGitHub {
+    name = "${pname}-${version}-src";
+    owner = "jaalto";
+    repo = "project--copyright-update";
+    rev = "release/${version}";
+    sha256 = "1kj6jlgyxrgvrpv7fcgbibfqqa83xljp17v6sas42dlb105h6sgd";
+  };
+
+  buildInputs = [ perl ];
+
+  installFlags = [ "INSTALL=install" "prefix=$(out)" ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/jaalto/project--copyright-update;
+    description = "Updates the copyright information in a set of files";
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+    maintainers = [ maintainers.rycee ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/csvkit/default.nix b/nixpkgs/pkgs/tools/text/csvkit/default.nix
new file mode 100644
index 000000000000..d2c710d10f8c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/csvkit/default.nix
@@ -0,0 +1,41 @@
+{ lib, python3, glibcLocales }:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "csvkit";
+  version = "1.0.4";
+
+  src = python3.pkgs.fetchPypi {
+    inherit pname version;
+    sha256 = "1830lb95rh1iyi3drlwxzb6y3pqkii0qiyzd40c1kvhvaf1s6lqk";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    agate
+    agate-excel
+    agate-dbf
+    # sql test fail with agate-sql-0.5.4
+    (agate-sql.overridePythonAttrs(old: rec {
+      version = "0.5.3";
+      src = python3.pkgs.fetchPypi {
+        inherit (old) pname;
+        inherit version;
+        sha256 = "1d6rbahmdix7xi7ma2v86fpk5yi32q5dba5vama35w5mmn2pnyw7";
+      };}))
+    six
+  ];
+
+  checkInputs = with python3.pkgs; [
+    glibcLocales nose
+  ];
+
+  checkPhase = ''
+    LC_ALL="en_US.UTF-8" nosetests -e test_csvsql
+  '';
+
+  meta = with lib; {
+    description = "A suite of command-line tools for converting to and working with CSV";
+    maintainers = with maintainers; [ vrthra ];
+    license = licenses.mit;
+    homepage = https://github.com/wireservice/csvkit;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/dadadodo/default.nix b/nixpkgs/pkgs/tools/text/dadadodo/default.nix
new file mode 100644
index 000000000000..5f6b0a8a6058
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/dadadodo/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "dadadodo";
+  version = "1.04";
+
+  src = fetchurl {
+    url = "https://www.jwz.org/dadadodo/${pname}-${version}.tar.gz";
+    sha256 = "1pzwp3mim58afjrc92yx65mmgr1c834s1v6z4f4gyihwjn8bn3if";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp dadadodo $out/bin
+  '';
+
+  hardeningDisable = [ "format" ];
+
+  meta = with stdenv.lib; {
+    description = "Markov chain-based text generator";
+    homepage = http://www.jwz.org/dadadodo;
+    maintainers = with maintainers; [ pSub ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/diction/default.nix b/nixpkgs/pkgs/tools/text/diction/default.nix
new file mode 100644
index 000000000000..f43cd94a83e7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/diction/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "diction";
+  version = "1.13";
+
+  src = fetchurl {
+    url = "http://www.moria.de/~michael/diction/${pname}-${version}.tar.gz";
+    sha256 = "08fi971b8qa4xycxbgb42i6b5ms3qx9zpp5hwpbxy2vypfs0wph9";
+  };
+
+  meta = {
+    description = "GNU style and diction utilities";
+    longDescription = ''
+      Diction and style are two old standard Unix commands. Diction identifies
+      wordy and commonly misused phrases. Style analyses surface
+      characteristics of a document, including sentence length and other
+      readability measures.
+    '';
+    license = stdenv.lib.licenses.gpl3Plus;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/diffr/default.nix b/nixpkgs/pkgs/tools/text/diffr/default.nix
new file mode 100644
index 000000000000..c032d2e8b361
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/diffr/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub, rustPlatform, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "diffr";
+  version = "v0.1.2";
+
+  # diffr's tests expect the diffr binary to be at `$CARGO_MANIFEST_DIR/target/debug/diffr`.
+  doCheck = false;
+
+  src = fetchFromGitHub {
+    owner = "mookid";
+    repo = pname;
+    rev = version;
+    sha256 = "1fpcyl4kc4djfl6a2jlj56xqra42334vygz8n7614zgjpyxz3zx2";
+  };
+
+  cargoSha256 = "1dddb3a547qnpm1vvrgffb3v9m8sh19hmhy0fg6xjqpm032lqx3v";
+
+  nativeBuildInputs = [];
+  buildInputs = (stdenv.lib.optional stdenv.isDarwin Security);
+
+  meta = with stdenv.lib; {
+    description = "Yet another diff highlighting tool";
+    homepage = https://github.com/mookid/diffr;
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ davidtwco ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/diffstat/default.nix b/nixpkgs/pkgs/tools/text/diffstat/default.nix
new file mode 100644
index 000000000000..bf4ff279f8fc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/diffstat/default.nix
@@ -0,0 +1,26 @@
+{ fetchurl, stdenv }:
+
+stdenv.mkDerivation rec {
+  name = "diffstat-1.63";
+
+  src = fetchurl {
+    urls = [
+      "ftp://ftp.invisible-island.net/diffstat/${name}.tgz"
+      "https://invisible-mirror.net/archives/diffstat/${name}.tgz"
+    ];
+    sha256 = "0vyw200s5dv1257pmrh6c6fdkmw3slyz5szpqfx916xr04sdbpby";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Read output of diff and display a histogram of the changes";
+    longDescription = ''
+      diffstat reads the output of diff and displays a histogram of the
+      insertions, deletions, and modifications per-file. It is useful for
+      reviewing large, complex patch files.
+    '';
+    homepage = https://invisible-island.net/diffstat/;
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/diffutils/default.nix b/nixpkgs/pkgs/tools/text/diffutils/default.nix
new file mode 100644
index 000000000000..67f397dbe48a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/diffutils/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, xz, coreutils ? null }:
+
+stdenv.mkDerivation rec {
+  name = "diffutils-3.7";
+
+  src = fetchurl {
+    url = "mirror://gnu/diffutils/${name}.tar.xz";
+    sha256 = "09isrg0isjinv8c535nxsi1s86wfdfzml80dbw41dj9x3hiad9xk";
+  };
+
+  outputs = [ "out" "info" ];
+
+  nativeBuildInputs = [ xz.bin ];
+  /* If no explicit coreutils is given, use the one from stdenv. */
+  buildInputs = [ coreutils ];
+
+  configureFlags =
+    # "pr" need not be on the PATH as a run-time dep, so we need to tell
+    # configure where it is. Covers the cross and native case alike.
+    stdenv.lib.optional (coreutils != null) "PR_PROGRAM=${coreutils}/bin/pr"
+    ++ stdenv.lib.optional (stdenv.buildPlatform != stdenv.hostPlatform) "gl_cv_func_getopt_gnu=yes";
+
+  meta = with stdenv.lib; {
+    homepage = https://www.gnu.org/software/diffutils/diffutils.html;
+    description = "Commands for showing the differences between files (diff, cmp, etc.)";
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/discount/default.nix b/nixpkgs/pkgs/tools/text/discount/default.nix
new file mode 100644
index 000000000000..c1183d4c5a01
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/discount/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  version = "2.2.6";
+  pname = "discount";
+
+  src = fetchFromGitHub {
+    owner = "Orc";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1y066jkxfas0vdixbqq66j9p00a102sbfgq5gbrblfczqjrmc38w";
+  };
+
+  patches = ./fix-configure-path.patch;
+  configureScript = "./configure.sh";
+
+  configureFlags = [
+    "--enable-all-features"
+    "--pkg-config"
+    "--shared"
+    "--with-fenced-code"
+  ];
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    description = "Implementation of Markdown markup language in C";
+    homepage = http://www.pell.portland.or.us/~orc/Code/discount/;
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ shell ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/discount/fix-configure-path.patch b/nixpkgs/pkgs/tools/text/discount/fix-configure-path.patch
new file mode 100644
index 000000000000..045b369b4b69
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/discount/fix-configure-path.patch
@@ -0,0 +1,12 @@
+diff -rupN discount-2.1.6-original/configure.inc discount-2.1.6/configure.inc
+--- discount-2.1.6-original/configure.inc	2014-10-10 15:34:24.158325345 +0100
++++ discount-2.1.6/configure.inc	2014-10-10 15:34:33.553325321 +0100
+@@ -32,7 +32,7 @@
+ # this preamble code is executed when this file is sourced and it picks
+ # interesting things off the command line.
+ #
+-ac_default_path="/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin"
++ac_default_path=$PATH
+ 
+ ac_standard="--src=DIR		where the source lives (.)
+ --prefix=DIR		where to install the final product (/usr/local)
diff --git a/nixpkgs/pkgs/tools/text/dos2unix/default.nix b/nixpkgs/pkgs/tools/text/dos2unix/default.nix
new file mode 100644
index 000000000000..b7efe02f4cdb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/dos2unix/default.nix
@@ -0,0 +1,22 @@
+{stdenv, fetchurl, perl, gettext }:
+
+stdenv.mkDerivation rec {
+  pname = "dos2unix";
+  version = "7.4.1";
+
+  src = fetchurl {
+    url = "https://waterlan.home.xs4all.nl/dos2unix/${pname}-${version}.tar.gz";
+    sha256 = "08w6yywzirsxq8bh87jycvvw922ybhc2l426j2iqzliyn1h8mm8w";
+  };
+
+  nativeBuildInputs = [ perl gettext ];
+  makeFlags = [ "prefix=${placeholder "out"}" ];
+
+  meta = with stdenv.lib; {
+    description = "Convert text files with DOS or Mac line breaks to Unix line breaks and vice versa";
+    homepage = "https://waterlan.home.xs4all.nl/dos2unix.html";
+    changelog = "https://sourceforge.net/p/dos2unix/dos2unix/ci/dos2unix-${version}/tree/dos2unix/NEWS.txt?format=raw";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ c0bw3b ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/ebook-tools/default.nix b/nixpkgs/pkgs/tools/text/ebook-tools/default.nix
new file mode 100644
index 000000000000..7dcd94e5363f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ebook-tools/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl, cmake, pkgconfig, libxml2, libzip }:
+
+stdenv.mkDerivation rec {
+  name = "ebook-tools-0.2.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/ebook-tools/${name}.tar.gz";
+    sha256 = "1bi7wsz3p5slb43kj7lgb3r6lb91lvb6ldi556k4y50ix6b5khyb";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ cmake libxml2 libzip ];
+
+  preConfigure = 
+    ''
+      NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE $(pkg-config --cflags libzip)"
+    '';
+
+  meta = {
+    homepage = http://ebook-tools.sourceforge.net;
+    description = "Tools and library for dealing with various ebook file formats";
+    maintainers = [ ];
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/enca/default.nix b/nixpkgs/pkgs/tools/text/enca/default.nix
new file mode 100644
index 000000000000..6cfb4721066c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/enca/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, libiconv, recode }:
+
+stdenv.mkDerivation rec {
+  pname = "enca";
+  version = "1.19";
+
+  src = fetchurl {
+    url = "https://dl.cihar.com/enca/${pname}-${version}.tar.xz";
+    sha256 = "1f78jmrggv3jymql8imm5m9yc8nqjw5l99mpwki2245l8357wj1s";
+  };
+
+  buildInputs = [ recode libiconv ];
+
+  meta = with stdenv.lib; {
+    description = "Detects the encoding of text files and reencodes them";
+
+    longDescription = ''
+        Enca detects the encoding of text files, on the basis of knowledge
+        of their language. It can also convert them to other encodings,
+        allowing you to recode files without knowing their current encoding.
+        It supports most of Central and East European languages, and a few
+        Unicode variants, independently on language.
+    '';
+
+    license = licenses.gpl2;
+   
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/enscript/default.nix b/nixpkgs/pkgs/tools/text/enscript/default.nix
new file mode 100644
index 000000000000..24ac649026af
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/enscript/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchurl, gettext }:
+
+stdenv.mkDerivation rec {
+  name = "enscript-1.6.6";
+
+  src = fetchurl {
+    url = "mirror://gnu/enscript/${name}.tar.gz";
+    sha256 = "1fy0ymvzrrvs889zanxcaxjfcxarm2d3k43c9frmbl1ld7dblmkd";
+  };
+
+  preBuild =
+    ''
+      # Fix building on Darwin with GCC.
+      substituteInPlace compat/regex.c --replace \
+         __private_extern__  '__attribute__ ((visibility ("hidden")))'
+    '';
+
+  buildInputs = [ gettext ];
+
+  doCheck = true;
+
+  meta = {
+    description = "Converter from ASCII to PostScript, HTML, or RTF";
+
+    longDescription =
+      '' GNU Enscript converts ASCII files to PostScript, HTML, or RTF and
+         stores generated output to a file or sends it directly to the
+         printer.  It includes features for `pretty-printing'
+         (language-sensitive code highlighting) in several programming
+         languages.
+
+         Enscript can be easily extended to handle different output media and
+         it has many options that can be used to customize printouts.
+      '';
+
+    license = stdenv.lib.licenses.gpl3Plus;
+
+    homepage = https://www.gnu.org/software/enscript/;
+
+    maintainers = [ ];
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/epubcheck/default.nix b/nixpkgs/pkgs/tools/text/epubcheck/default.nix
new file mode 100644
index 000000000000..4e117ab7a481
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/epubcheck/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchzip
+, jre, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "epubcheck";
+  version = "4.2.2";
+
+  src = fetchzip {
+    url = "https://github.com/w3c/epubcheck/releases/download/v${version}/epubcheck-${version}.zip";
+    sha256 = "0vz7k6i6y60ml20pbw2p9iqy6kxw4ziqszg6hbgz102x1jk8788d";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/lib
+    cp -r lib/* $out/lib
+
+    mkdir -p $out/libexec/epubcheck
+    cp epubcheck.jar $out/libexec/epubcheck
+
+    classpath=$out/libexec/epubcheck/epubcheck.jar
+    for jar in $out/lib/*.jar; do
+      classpath="$classpath:$jar"
+    done
+
+    mkdir -p $out/bin
+    makeWrapper ${jre}/bin/java $out/bin/epubcheck \
+      --add-flags "-classpath $classpath com.adobe.epubcheck.tool.Checker"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/w3c/epubcheck;
+    description = "Validation tool for EPUB";
+    license = with licenses; [ asl20 bsd3 mpl10 w3c ];
+    platforms = platforms.all;
+    maintainers = with maintainers; [ eadwu ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/esh/default.nix b/nixpkgs/pkgs/tools/text/esh/default.nix
new file mode 100644
index 000000000000..231a16bdc1b3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/esh/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchFromGitHub, asciidoctor, gawk, gnused, runtimeShell }:
+
+stdenv.mkDerivation rec {
+  pname = "esh";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner = "jirutka";
+    repo = "esh";
+    rev = "v${version}";
+    sha256 = "1ddaji5nplf1dyvgkrhqjy8m5djaycqcfhjv30yprj1avjymlj6w";
+  };
+
+  nativeBuildInputs = [ asciidoctor ];
+
+  buildInputs = [ gawk gnused ];
+
+  makeFlags = [ "prefix=$(out)" "DESTDIR=" ];
+
+  postPatch = ''
+    patchShebangs .
+    substituteInPlace esh \
+        --replace '"/bin/sh"' '"${runtimeShell}"' \
+        --replace '"awk"' '"${gawk}/bin/awk"' \
+        --replace 'sed' '${gnused}/bin/sed'
+    substituteInPlace tests/test-dump.exp \
+        --replace '#!/bin/sh' '#!${runtimeShell}'
+  '';
+
+  doCheck = true;
+  checkTarget = "test";
+
+  meta = with stdenv.lib; {
+    description = "Simple templating engine based on shell";
+    homepage = https://github.com/jirutka/esh;
+    license = licenses.mit;
+    maintainers = with maintainers; [ mnacamura ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/fanficfare/default.nix b/nixpkgs/pkgs/tools/text/fanficfare/default.nix
new file mode 100644
index 000000000000..105a2d3308f3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/fanficfare/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "FanFicFare";
+  version = "3.15.0";
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "12nsrl8nvg52mi136m7ayvaivwjapn7ry95137ynj1njy2w990hm";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    beautifulsoup4
+    chardet
+    html5lib
+    html2text
+  ];
+
+  doCheck = false; # no tests exist
+
+  meta = with stdenv.lib; {
+    description = "Tool for making eBooks from fanfiction web sites";
+    homepage = https://github.com/JimmXinu/FanFicFare;
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ dwarfmaster ];
+    inherit version;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/gawk/default.nix b/nixpkgs/pkgs/tools/text/gawk/default.nix
new file mode 100644
index 000000000000..0d5a50570f5f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/gawk/default.nix
@@ -0,0 +1,84 @@
+{ stdenv, fetchurl
+# TODO: links -lsigsegv but loses the reference for some reason
+, withSigsegv ? (false && stdenv.hostPlatform.system != "x86_64-cygwin"), libsigsegv
+, interactive ? false, readline
+
+/* Test suite broke on:
+       stdenv.isCygwin # XXX: `test-dup2' segfaults on Cygwin 6.1
+    || stdenv.isDarwin # XXX: `locale' segfaults
+    || stdenv.isSunOS  # XXX: `_backsmalls1' fails, locale stuff?
+    || stdenv.isFreeBSD
+*/
+, doCheck ? (interactive && stdenv.isLinux), glibcLocales ? null
+, locale ? null
+}:
+
+assert (doCheck && stdenv.isLinux) -> glibcLocales != null;
+
+let
+  inherit (stdenv.lib) optional;
+in
+stdenv.mkDerivation rec {
+  name = "gawk-5.0.1";
+
+  src = fetchurl {
+    url = "mirror://gnu/gawk/${name}.tar.xz";
+    sha256 = "15570p7g2x54asvr2fsc56sxzmm08fbk4mzpcs5n92fp9vq8cklf";
+  };
+
+  # When we do build separate interactive version, it makes sense to always include man.
+  outputs = [ "out" "info" ] ++ optional (!interactive) "man";
+
+  nativeBuildInputs = optional (doCheck && stdenv.isLinux) glibcLocales;
+
+  buildInputs =
+       optional withSigsegv libsigsegv
+    ++ optional interactive readline
+    ++ optional stdenv.isDarwin locale;
+
+  configureFlags = [
+    (if withSigsegv then "--with-libsigsegv-prefix=${libsigsegv}" else "--without-libsigsegv")
+    (if interactive then "--with-readline=${readline.dev}" else "--without-readline")
+  ];
+
+  makeFlags = [
+    "AR=${stdenv.cc.targetPrefix}ar"
+  ];
+
+  inherit doCheck;
+
+  postInstall = ''
+    rm "$out"/bin/gawk-*
+    ln -s gawk.1 "''${!outputMan}"/share/man/man1/awk.1
+  '';
+
+  passthru = {
+    libsigsegv = if withSigsegv then libsigsegv else null; # for stdenv bootstrap
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://www.gnu.org/software/gawk/;
+    description = "GNU implementation of the Awk programming language";
+
+    longDescription = ''
+      Many computer users need to manipulate text files: extract and then
+      operate on data from parts of certain lines while discarding the rest,
+      make changes in various text files wherever certain patterns appear,
+      and so on.  To write a program to do these things in a language such as
+      C or Pascal is a time-consuming inconvenience that may take many lines
+      of code.  The job is easy with awk, especially the GNU implementation:
+      Gawk.
+
+      The awk utility interprets a special-purpose programming language that
+      makes it possible to handle many data-reformatting jobs with just a few
+      lines of code.
+    '';
+
+    license = licenses.gpl3Plus;
+
+    platforms = platforms.unix ++ platforms.windows;
+
+    maintainers = [ ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/text/gawk/gawk-with-extensions.nix b/nixpkgs/pkgs/tools/text/gawk/gawk-with-extensions.nix
new file mode 100644
index 000000000000..751e5181bb58
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/gawk/gawk-with-extensions.nix
@@ -0,0 +1,12 @@
+{ runCommand, gawk, extensions, makeWrapper }:
+
+runCommand "gawk-with-extensions" {
+  buildInputs = [ makeWrapper gawk ] ++ extensions;
+} ''
+  mkdir -p $out/bin
+  for i in ${gawk}/bin/*; do
+    name="$(basename "$i")"
+    makeWrapper $i $out/bin/$name \
+      --prefix AWKLIBPATH : "${gawk}/lib/gawk:''${AWKLIBPATH:-}"
+  done
+''
diff --git a/nixpkgs/pkgs/tools/text/gawk/gawkextlib.nix b/nixpkgs/pkgs/tools/text/gawk/gawkextlib.nix
new file mode 100644
index 000000000000..e15b2d4e257d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/gawk/gawkextlib.nix
@@ -0,0 +1,149 @@
+{ stdenv, recurseIntoAttrs, fetchgit, writeText, pkgconfig, autoreconfHook
+, autoconf, automake, libiconv, libtool, texinfo, gettext, gawk, rapidjson, gd
+, shapelib, libharu, lmdb, gmp, glibcLocales, mpfr, more, postgresql, hiredis
+, expat, tre, makeWrapper }:
+
+let
+  buildExtension = stdenv.lib.makeOverridable
+    ({ name, gawkextlib, extraBuildInputs ? [ ], doCheck ? true }:
+      let is_extension = !isNull gawkextlib;
+      in stdenv.mkDerivation rec {
+        pname = "gawkextlib-${name}";
+        version = "unstable-2019-11-21";
+
+        src = fetchgit {
+          url = "git://git.code.sf.net/p/gawkextlib/code";
+          rev = "f70f10da2804e4fd0a0bac57736e9c1cf21e345d";
+          sha256 = "0r8fz89n3l4dfszs1980yqj0ah95430lj0y1lb7blfkwxa6c2xik";
+        };
+
+        postPatch = ''
+          cd ${name}
+        '';
+
+        nativeBuildInputs = [
+          autoconf
+          automake
+          libtool
+          autoreconfHook
+          pkgconfig
+          texinfo
+          gettext
+        ];
+
+        buildInputs = [ gawk ] ++ extraBuildInputs;
+        propagatedBuildInputs = stdenv.lib.optional is_extension gawkextlib;
+
+        setupHook = if is_extension then ./setup-hook.sh else null;
+        inherit gawk;
+
+        inherit doCheck;
+        checkInputs = [ more ];
+
+        meta = with stdenv.lib; {
+          homepage = "https://sourceforge.net/projects/gawkextlib/";
+          description = "Dynamically loaded extension libraries for GNU AWK";
+          longDescription = ''
+            The gawkextlib project provides several extension libraries for
+            gawk (GNU AWK), as well as libgawkextlib containing some APIs that
+            are useful for building gawk extension libraries. These libraries
+            enable gawk to process XML data, interact with a PostgreSQL
+            database, use the GD graphics library, and perform unlimited
+            precision MPFR calculations.
+          '';
+          license = licenses.gpl3Plus;
+          platforms = platforms.unix;
+          maintainers = with maintainers; [ tomberek ];
+        };
+      });
+  gawkextlib = buildExtension {
+    gawkextlib = null;
+    name = "lib";
+  };
+  libs = {
+    abort = buildExtension {
+      inherit gawkextlib;
+      name = "abort";
+    };
+    aregex = buildExtension {
+      inherit gawkextlib;
+      name = "aregex";
+      extraBuildInputs = [ tre ];
+    };
+    csv = buildExtension {
+      inherit gawkextlib;
+      name = "csv";
+    };
+    errno = buildExtension {
+      inherit gawkextlib;
+      name = "errno";
+    };
+    gd = buildExtension {
+      inherit gawkextlib;
+      name = "gd";
+      extraBuildInputs = [ gd ];
+    };
+    haru = buildExtension {
+      inherit gawkextlib;
+      name = "haru";
+      extraBuildInputs = [ libharu ];
+    };
+    json = buildExtension {
+      inherit gawkextlib;
+      name = "json";
+      extraBuildInputs = [ rapidjson ];
+    };
+    lmdb = buildExtension {
+      inherit gawkextlib;
+      name = "lmdb";
+      extraBuildInputs = [ lmdb ];
+      #  mdb_env_open(env, /dev/null)
+      #! No such device
+      #  mdb_env_open(env, /dev/null)
+      #! Operation not supported by device
+      doCheck = !stdenv.isDarwin;
+    };
+    mbs = buildExtension {
+      inherit gawkextlib;
+      name = "mbs";
+      extraBuildInputs = [ glibcLocales ];
+      #! "spät": length: 5, mbs_length: 6, wcswidth: 4
+      doCheck = !stdenv.isDarwin;
+    };
+    mpfr = buildExtension {
+      inherit gawkextlib;
+      name = "mpfr";
+      extraBuildInputs = [ gmp mpfr ];
+    };
+    nl_langinfo = buildExtension {
+      inherit gawkextlib;
+      name = "nl_langinfo";
+    };
+    pgsql = buildExtension {
+      inherit gawkextlib;
+      name = "pgsql";
+      extraBuildInputs = [ postgresql ];
+    };
+    redis = buildExtension {
+      inherit gawkextlib;
+      name = "redis";
+      extraBuildInputs = [ hiredis ];
+    };
+    select = buildExtension {
+      inherit gawkextlib;
+      name = "select";
+    };
+    timex = buildExtension {
+      inherit gawkextlib;
+      name = "timex";
+    };
+    xml = buildExtension {
+      inherit gawkextlib;
+      name = "xml";
+      extraBuildInputs = [ expat libiconv ];
+    };
+  };
+in recurseIntoAttrs (libs // {
+  inherit gawkextlib buildExtension;
+  full = builtins.attrValues libs;
+})
diff --git a/nixpkgs/pkgs/tools/text/gawk/setup-hook.sh b/nixpkgs/pkgs/tools/text/gawk/setup-hook.sh
new file mode 100644
index 000000000000..d568cb8c7dd9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/gawk/setup-hook.sh
@@ -0,0 +1,6 @@
+local oldOpts="-u"
+shopt -qo nounset || oldOpts="+u"
+set +u
+. @gawk@/etc/profile.d/gawk.sh
+gawklibpath_append @out@/lib/gawk
+set "$oldOpts"
diff --git a/nixpkgs/pkgs/tools/text/gist/default.nix b/nixpkgs/pkgs/tools/text/gist/default.nix
new file mode 100644
index 000000000000..7091031d28f0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/gist/default.nix
@@ -0,0 +1,17 @@
+{ buildRubyGem, lib, ruby }:
+
+buildRubyGem rec {
+  inherit ruby;
+  name = "${gemName}-${version}";
+  gemName = "gist";
+  version = "5.0.0";
+  source.sha256 = "1i0a73mzcjv4mj5vjqwkrx815ydsppx3v812lxxd9mk2s7cj1vyd";
+
+  meta = with lib; {
+    description = "Upload code to https://gist.github.com (or github enterprise)";
+    homepage = http://defunkt.io/gist/;
+    license = licenses.mit;
+    maintainers = with maintainers; [ zimbatm ];
+    platforms = ruby.meta.platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/glogg/default.nix b/nixpkgs/pkgs/tools/text/glogg/default.nix
new file mode 100644
index 000000000000..6e9ff5170f2b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/glogg/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, qmake, boost }:
+
+stdenv.mkDerivation rec {
+
+  pname = "glogg";
+  version = "1.1.4";
+
+  src = fetchurl {
+    url = "https://glogg.bonnefon.org/files/${pname}-${version}.tar.gz";
+    sha256 = "0nwnfk9bcz2k7rf08w2cb6qipzdhwmxznik44jxmn9gwxdrdq78c";
+  };
+
+  nativeBuildInputs = [ qmake ];
+  buildInputs = [ boost ];
+
+  qmakeFlags = [ "glogg.pro" ];
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "The fast, smart log explorer";
+    longDescription = ''
+      A multi-platform GUI application to browse and search through long or complex log files. It is designed with programmers and system administrators in mind. glogg can be seen as a graphical, interactive combination of grep and less.
+    '';
+    homepage = https://glogg.bonnefon.org/;
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ c0bw3b ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/gnugrep/default.nix b/nixpkgs/pkgs/tools/text/gnugrep/default.nix
new file mode 100644
index 000000000000..87c8fdfd8903
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/gnugrep/default.nix
@@ -0,0 +1,61 @@
+{ stdenv, fetchurl, pcre, libiconv, perl }:
+
+let version = "3.3"; in
+
+stdenv.mkDerivation {
+  pname = "gnugrep";
+  inherit version;
+
+  src = fetchurl {
+    url = "mirror://gnu/grep/grep-${version}.tar.xz";
+    sha256 = "055mqp6vrd0brkygmygb2673qwz409a7kyp1mzbfy6cn94f58q5r";
+  };
+
+  # Perl is needed for testing
+  nativeBuildInputs = [ perl ];
+  outputs = [ "out" "info" ]; # the man pages are rather small
+
+  buildInputs = [ pcre libiconv ];
+
+  # cygwin: FAIL: multibyte-white-space
+  # freebsd: FAIL mb-non-UTF8-performance
+  # all platforms: timing sensitivity in long-pattern-perf 
+  #doCheck = !stdenv.isDarwin && !stdenv.isSunOS && !stdenv.isCygwin && !stdenv.isFreeBSD;
+  doCheck = false;
+
+  # On macOS, force use of mkdir -p, since Grep's fallback
+  # (./install-sh) is broken.
+  preConfigure = ''
+    export MKDIR_P="mkdir -p"
+  '';
+
+  # Fix reference to sh in bootstrap-tools, and invoke grep via
+  # absolute path rather than looking at argv[0].
+  postInstall =
+    ''
+      rm $out/bin/egrep $out/bin/fgrep
+      echo "#! /bin/sh" > $out/bin/egrep
+      echo "exec $out/bin/grep -E \"\$@\"" >> $out/bin/egrep
+      echo "#! /bin/sh" > $out/bin/fgrep
+      echo "exec $out/bin/grep -F \"\$@\"" >> $out/bin/fgrep
+      chmod +x $out/bin/egrep $out/bin/fgrep
+    '';
+
+  meta = with stdenv.lib; {
+    homepage = https://www.gnu.org/software/grep/;
+    description = "GNU implementation of the Unix grep command";
+
+    longDescription = ''
+      The grep command searches one or more input files for lines
+      containing a match to a specified pattern.  By default, grep
+      prints the matching lines.
+    '';
+
+    license = licenses.gpl3Plus;
+
+    maintainers = [ maintainers.eelco ];
+    platforms = platforms.all;
+  };
+
+  passthru = {inherit pcre;};
+}
diff --git a/nixpkgs/pkgs/tools/text/gnupatch/CVE-2018-6951.patch b/nixpkgs/pkgs/tools/text/gnupatch/CVE-2018-6951.patch
new file mode 100644
index 000000000000..22d5f061c332
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/gnupatch/CVE-2018-6951.patch
@@ -0,0 +1,28 @@
+From f290f48a621867084884bfff87f8093c15195e6a Mon Sep 17 00:00:00 2001
+From: Andreas Gruenbacher <agruen@gnu.org>
+Date: Mon, 12 Feb 2018 16:48:24 +0100
+Subject: Fix segfault with mangled rename patch
+
+http://savannah.gnu.org/bugs/?53132
+* src/pch.c (intuit_diff_type): Ensure that two filenames are specified
+for renames and copies (fix the existing check).
+---
+ src/pch.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/pch.c b/src/pch.c
+index ff9ed2c..bc6278c 100644
+--- a/src/pch.c
++++ b/src/pch.c
+@@ -974,7 +974,8 @@ intuit_diff_type (bool need_header, mode_t *p_file_type)
+     if ((pch_rename () || pch_copy ())
+ 	&& ! inname
+ 	&& ! ((i == OLD || i == NEW) &&
+-	      p_name[! reverse] &&
++	      p_name[reverse] && p_name[! reverse] &&
++	      name_is_valid (p_name[reverse]) &&
+ 	      name_is_valid (p_name[! reverse])))
+       {
+ 	say ("Cannot %s file without two valid file names\n", pch_rename () ? "rename" : "copy");
+-- 
+cgit v1.0-41-gc330
diff --git a/nixpkgs/pkgs/tools/text/gnupatch/CVE-2018-6952.patch b/nixpkgs/pkgs/tools/text/gnupatch/CVE-2018-6952.patch
new file mode 100644
index 000000000000..2da323c69844
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/gnupatch/CVE-2018-6952.patch
@@ -0,0 +1,28 @@
+From 9c986353e420ead6e706262bf204d6e03322c300 Mon Sep 17 00:00:00 2001
+From: Andreas Gruenbacher <agruen@gnu.org>
+Date: Fri, 17 Aug 2018 13:35:40 +0200
+Subject: Fix swapping fake lines in pch_swap
+
+* src/pch.c (pch_swap): Fix swapping p_bfake and p_efake when there is a
+blank line in the middle of a context-diff hunk: that empty line stays
+in the middle of the hunk and isn't swapped.
+
+Fixes: https://savannah.gnu.org/bugs/index.php?53133
+---
+ src/pch.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/pch.c b/src/pch.c
+index e92bc64..a500ad9 100644
+--- a/src/pch.c
++++ b/src/pch.c
+@@ -2122,7 +2122,7 @@ pch_swap (void)
+     }
+     if (p_efake >= 0) {			/* fix non-freeable ptr range */
+ 	if (p_efake <= i)
+-	    n = p_end - i + 1;
++	    n = p_end - p_ptrn_lines;
+ 	else
+ 	    n = -i;
+ 	p_efake += n;
+-- 
diff --git a/nixpkgs/pkgs/tools/text/gnupatch/CVE-2019-13636.patch b/nixpkgs/pkgs/tools/text/gnupatch/CVE-2019-13636.patch
new file mode 100644
index 000000000000..e62c3d41753c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/gnupatch/CVE-2019-13636.patch
@@ -0,0 +1,108 @@
+From dce4683cbbe107a95f1f0d45fabc304acfb5d71a Mon Sep 17 00:00:00 2001
+From: Andreas Gruenbacher <agruen@gnu.org>
+Date: Mon, 15 Jul 2019 16:21:48 +0200
+Subject: Don't follow symlinks unless --follow-symlinks is given
+
+* src/inp.c (plan_a, plan_b), src/util.c (copy_to_fd, copy_file,
+append_to_file): Unless the --follow-symlinks option is given, open files with
+the O_NOFOLLOW flag to avoid following symlinks.  So far, we were only doing
+that consistently for input files.
+* src/util.c (create_backup): When creating empty backup files, (re)create them
+with O_CREAT | O_EXCL to avoid following symlinks in that case as well.
+---
+ src/inp.c  | 12 ++++++++++--
+ src/util.c | 14 +++++++++++---
+ 2 files changed, 21 insertions(+), 5 deletions(-)
+
+diff --git a/src/inp.c b/src/inp.c
+index 32d0919..22d7473 100644
+--- a/src/inp.c
++++ b/src/inp.c
+@@ -238,8 +238,13 @@ plan_a (char const *filename)
+     {
+       if (S_ISREG (instat.st_mode))
+         {
+-	  int ifd = safe_open (filename, O_RDONLY|binary_transput, 0);
++	  int flags = O_RDONLY | binary_transput;
+ 	  size_t buffered = 0, n;
++	  int ifd;
++
++	  if (! follow_symlinks)
++	    flags |= O_NOFOLLOW;
++	  ifd = safe_open (filename, flags, 0);
+ 	  if (ifd < 0)
+ 	    pfatal ("can't open file %s", quotearg (filename));
+ 
+@@ -340,6 +345,7 @@ plan_a (char const *filename)
+ static void
+ plan_b (char const *filename)
+ {
++  int flags = O_RDONLY | binary_transput;
+   int ifd;
+   FILE *ifp;
+   int c;
+@@ -353,7 +359,9 @@ plan_b (char const *filename)
+ 
+   if (instat.st_size == 0)
+     filename = NULL_DEVICE;
+-  if ((ifd = safe_open (filename, O_RDONLY | binary_transput, 0)) < 0
++  if (! follow_symlinks)
++    flags |= O_NOFOLLOW;
++  if ((ifd = safe_open (filename, flags, 0)) < 0
+       || ! (ifp = fdopen (ifd, binary_transput ? "rb" : "r")))
+     pfatal ("Can't open file %s", quotearg (filename));
+   if (TMPINNAME_needs_removal)
+diff --git a/src/util.c b/src/util.c
+index 1cc08ba..fb38307 100644
+--- a/src/util.c
++++ b/src/util.c
+@@ -388,7 +388,7 @@ create_backup (char const *to, const struct stat *to_st, bool leave_original)
+ 
+ 	  try_makedirs_errno = ENOENT;
+ 	  safe_unlink (bakname);
+-	  while ((fd = safe_open (bakname, O_CREAT | O_WRONLY | O_TRUNC, 0666)) < 0)
++	  while ((fd = safe_open (bakname, O_CREAT | O_EXCL | O_WRONLY | O_TRUNC, 0666)) < 0)
+ 	    {
+ 	      if (errno != try_makedirs_errno)
+ 		pfatal ("Can't create file %s", quotearg (bakname));
+@@ -579,10 +579,13 @@ create_file (char const *file, int open_flags, mode_t mode,
+ static void
+ copy_to_fd (const char *from, int tofd)
+ {
++  int from_flags = O_RDONLY | O_BINARY;
+   int fromfd;
+   ssize_t i;
+ 
+-  if ((fromfd = safe_open (from, O_RDONLY | O_BINARY, 0)) < 0)
++  if (! follow_symlinks)
++    from_flags |= O_NOFOLLOW;
++  if ((fromfd = safe_open (from, from_flags, 0)) < 0)
+     pfatal ("Can't reopen file %s", quotearg (from));
+   while ((i = read (fromfd, buf, bufsize)) != 0)
+     {
+@@ -625,6 +628,8 @@ copy_file (char const *from, char const *to, struct stat *tost,
+   else
+     {
+       assert (S_ISREG (mode));
++      if (! follow_symlinks)
++	to_flags |= O_NOFOLLOW;
+       tofd = create_file (to, O_WRONLY | O_BINARY | to_flags, mode,
+ 			  to_dir_known_to_exist);
+       copy_to_fd (from, tofd);
+@@ -640,9 +645,12 @@ copy_file (char const *from, char const *to, struct stat *tost,
+ void
+ append_to_file (char const *from, char const *to)
+ {
++  int to_flags = O_WRONLY | O_APPEND | O_BINARY;
+   int tofd;
+ 
+-  if ((tofd = safe_open (to, O_WRONLY | O_BINARY | O_APPEND, 0)) < 0)
++  if (! follow_symlinks)
++    to_flags |= O_NOFOLLOW;
++  if ((tofd = safe_open (to, to_flags, 0)) < 0)
+     pfatal ("Can't reopen file %s", quotearg (to));
+   copy_to_fd (from, tofd);
+   if (close (tofd) != 0)
+-- 
+cgit v1.0-41-gc330
+
diff --git a/nixpkgs/pkgs/tools/text/gnupatch/CVE-2019-13638-and-CVE-2018-20969.patch b/nixpkgs/pkgs/tools/text/gnupatch/CVE-2019-13638-and-CVE-2018-20969.patch
new file mode 100644
index 000000000000..38caff628aaf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/gnupatch/CVE-2019-13638-and-CVE-2018-20969.patch
@@ -0,0 +1,38 @@
+From 3fcd042d26d70856e826a42b5f93dc4854d80bf0 Mon Sep 17 00:00:00 2001
+From: Andreas Gruenbacher <agruen@gnu.org>
+Date: Fri, 6 Apr 2018 19:36:15 +0200
+Subject: Invoke ed directly instead of using the shell
+
+* src/pch.c (do_ed_script): Invoke ed directly instead of using a shell
+command to avoid quoting vulnerabilities.
+---
+ src/pch.c | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/src/pch.c b/src/pch.c
+index 4fd5a05..16e001a 100644
+--- a/src/pch.c
++++ b/src/pch.c
+@@ -2459,9 +2459,6 @@ do_ed_script (char const *inname, char const *outname,
+ 	    *outname_needs_removal = true;
+ 	    copy_file (inname, outname, 0, exclusive, instat.st_mode, true);
+ 	  }
+-	sprintf (buf, "%s %s%s", editor_program,
+-		 verbosity == VERBOSE ? "" : "- ",
+-		 outname);
+ 	fflush (stdout);
+ 
+ 	pid = fork();
+@@ -2470,7 +2467,8 @@ do_ed_script (char const *inname, char const *outname,
+ 	else if (pid == 0)
+ 	  {
+ 	    dup2 (tmpfd, 0);
+-	    execl ("/bin/sh", "sh", "-c", buf, (char *) 0);
++	    assert (outname[0] != '!' && outname[0] != '-');
++	    execlp (editor_program, editor_program, "-", outname, (char  *) NULL);
+ 	    _exit (2);
+ 	  }
+ 	else
+-- 
+cgit v1.0-41-gc330
+
diff --git a/nixpkgs/pkgs/tools/text/gnupatch/default.nix b/nixpkgs/pkgs/tools/text/gnupatch/default.nix
new file mode 100644
index 000000000000..b85d16ea4e92
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/gnupatch/default.nix
@@ -0,0 +1,61 @@
+{ stdenv, fetchurl
+, ed, autoreconfHook
+}:
+
+stdenv.mkDerivation rec {
+  name = "patch-2.7.6";
+
+  src = fetchurl {
+    url = "mirror://gnu/patch/${name}.tar.xz";
+    sha256 = "1zfqy4rdcy279vwn2z1kbv19dcfw25d2aqy9nzvdkq5bjzd0nqdc";
+  };
+
+  patches = [
+    # https://git.savannah.gnu.org/cgit/patch.git/patch/?id=f290f48a621867084884bfff87f8093c15195e6a
+    ./CVE-2018-6951.patch
+    (fetchurl {
+      url = https://git.savannah.gnu.org/cgit/patch.git/patch/?id=b5a91a01e5d0897facdd0f49d64b76b0f02b43e1;
+      name = "Allow_input_files_to_be_missing_for_ed-style_patches.patch";
+      sha256 = "0iw0lk0yhnhvfjzal48ij6zdr92mgb84jq7fwryy1hdhi47hhq64";
+    })
+    (fetchurl {
+      url = https://git.savannah.gnu.org/cgit/patch.git/patch/?id=123eaff0d5d1aebe128295959435b9ca5909c26d;
+      name = "CVE-2018-1000156.patch";
+      sha256 = "1bpy16n3hm5nv9xkrn6c4wglzsdzj3ss1biq16w9kfv48p4hx2vg";
+    })
+    # https://git.savannah.gnu.org/cgit/patch.git/commit/?id=9c986353e420ead6e706262bf204d6e03322c300
+    ./CVE-2018-6952.patch
+
+    # https://git.savannah.gnu.org/cgit/patch.git/patch/?id=dce4683cbbe107a95f1f0d45fabc304acfb5d71a
+    ./CVE-2019-13636.patch
+
+    # https://git.savannah.gnu.org/cgit/patch.git/patch/?id=3fcd042d26d70856e826a42b5f93dc4854d80bf0
+    ./CVE-2019-13638-and-CVE-2018-20969.patch
+  ];
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  configureFlags = stdenv.lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
+    "ac_cv_func_strnlen_working=yes"
+  ];
+
+  doCheck = stdenv.hostPlatform.libc != "musl"; # not cross;
+  checkInputs = [ed];
+
+  meta = {
+    description = "GNU Patch, a program to apply differences to files";
+
+    longDescription =
+      '' GNU Patch takes a patch file containing a difference listing
+         produced by the diff program and applies those differences to one or
+         more original files, producing patched versions.
+      '';
+
+    homepage = https://savannah.gnu.org/projects/patch;
+
+    license = stdenv.lib.licenses.gpl3Plus;
+
+    maintainers = [ ];
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/gnused/422.nix b/nixpkgs/pkgs/tools/text/gnused/422.nix
new file mode 100644
index 000000000000..3a9856c3dd37
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/gnused/422.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation {
+  name = "gnused-4.2.2";
+
+  src = fetchurl {
+    url = mirror://gnu/sed/sed-4.2.2.tar.bz2;
+    sha256 = "f048d1838da284c8bc9753e4506b85a1e0cc1ea8999d36f6995bcb9460cddbd7";
+  };
+
+  configureFlags = stdenv.lib.optional stdenv.hostPlatform.isMinGW "ac_cv_func__set_invalid_parameter_handler=no";
+
+  outputs = [ "out" "info" ];
+
+  meta = {
+    homepage = https://www.gnu.org/software/sed/;
+    description = "GNU sed, a batch stream editor";
+
+    longDescription = ''
+      Sed (stream editor) isn't really a true text editor or text
+      processor.  Instead, it is used to filter text, i.e., it takes
+      text input and performs some operation (or set of operations) on
+      it and outputs the modified text.  Sed is typically used for
+      extracting part of a file using pattern matching or substituting
+      multiple occurrences of a string within a file.
+    '';
+
+    license = stdenv.lib.licenses.gpl3Plus;
+
+    platforms = stdenv.lib.platforms.all;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/gnused/default.nix b/nixpkgs/pkgs/tools/text/gnused/default.nix
new file mode 100644
index 000000000000..3d73bfba6576
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/gnused/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchurl, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "gnused";
+  version = "4.7";
+
+  src = fetchurl {
+    url = "mirror://gnu/sed/sed-${version}.tar.xz";
+    sha256 = "0smxcx66vx29djzb542nxcynl7qnzxqa5032ibazi7x2s267d198";
+  };
+
+  outputs = [ "out" "info" ];
+
+  nativeBuildInputs = [ perl ];
+  preConfigure = "patchShebangs ./build-aux/help2man";
+
+  # Prevents attempts of running 'help2man' on cross-built binaries.
+  PERL = if stdenv.hostPlatform == stdenv.buildPlatform then null else "missing";
+
+  meta = {
+    homepage = https://www.gnu.org/software/sed/;
+    description = "GNU sed, a batch stream editor";
+
+    longDescription = ''
+      Sed (stream editor) isn't really a true text editor or text
+      processor.  Instead, it is used to filter text, i.e., it takes
+      text input and performs some operation (or set of operations) on
+      it and outputs the modified text.  Sed is typically used for
+      extracting part of a file using pattern matching or substituting
+      multiple occurrences of a string within a file.
+    '';
+
+    license = stdenv.lib.licenses.gpl3Plus;
+
+    platforms = stdenv.lib.platforms.unix;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/grin/default.nix b/nixpkgs/pkgs/tools/text/grin/default.nix
new file mode 100644
index 000000000000..837ec5b7a5ff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/grin/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchFromGitHub, python2Packages }:
+
+python2Packages.buildPythonApplication rec {
+  program = "grin";
+  version = "1.2.1";
+  name = "${program}-${version}";
+  namePrefix = "";
+
+  src = fetchFromGitHub {
+    owner = "rkern";
+    repo = program;
+    rev = "8dd4b5309b3bc04fe9d3e71836420f7d8d4a293f";
+    sha256 = "0vz2aahwdcy1296g4w3i79dkvmzk9jc2n2zmlcvlg5m3s6h7b6jd";
+  };
+
+  buildInputs = with python2Packages; [ nose ];
+
+  meta = {
+    homepage = https://github.com/rkern/grin;
+    description = "A grep program configured the way I like it";
+    platforms = stdenv.lib.platforms.all;
+    maintainers = [ stdenv.lib.maintainers.sjagoe ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/grip-search/default.nix b/nixpkgs/pkgs/tools/text/grip-search/default.nix
new file mode 100644
index 000000000000..921691a40afd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/grip-search/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub, boost, pkgconfig, cmake, catch2 }:
+
+stdenv.mkDerivation rec {
+  pname = "grip-search";
+  version = "0.8";
+
+  src = fetchFromGitHub {
+    owner = "sc0ty";
+    repo = "grip";
+    rev = "v${version}";
+    sha256 = "0bkqarylgzhis6fpj48qbifcd6a26cgnq8784hgnm707rq9kb0rx";
+  };
+
+  nativeBuildInputs = [ pkgconfig cmake catch2 ];
+
+  doCheck = true;
+
+  buildInputs = [ boost ];
+
+  patchPhase = ''
+    substituteInPlace src/general/config.h --replace "CUSTOM-BUILD" "${version}"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Fast, indexed regexp search over large file trees";
+    homepage = "https://github.com/sc0ty/grip";
+    license = licenses.gpl3;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ tex ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/groff/0001-Fix-cross-compilation-by-looking-for-ar.patch b/nixpkgs/pkgs/tools/text/groff/0001-Fix-cross-compilation-by-looking-for-ar.patch
new file mode 100644
index 000000000000..671293cda5b1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/groff/0001-Fix-cross-compilation-by-looking-for-ar.patch
@@ -0,0 +1,46 @@
+From 1454525f70b43a6957b7c9e1870e997368787da3 Mon Sep 17 00:00:00 2001
+From: Samuel Dionne-Riel <samuel@dionne-riel.com>
+Date: Fri, 8 Nov 2019 21:59:21 -0500
+Subject: [PATCH] Fix cross-compilation by looking for `ar`.
+
+---
+ Makefile.am  | 2 +-
+ configure.ac | 2 ++
+ 2 files changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index d18c49b8..b1b53338 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -494,7 +494,7 @@ CCC=@CXX@
+ # INSTALL_INFO
+ # LN_S
+ 
+-AR=ar
++AR=@AR@
+ ETAGS=etags
+ ETAGSFLAGS=
+ # Flag that tells etags to assume C++.
+diff --git a/configure.ac b/configure.ac
+index 28e75f17..2449b9f5 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -37,6 +37,7 @@ AC_CONFIG_AUX_DIR([build-aux])
+ 
+ AC_CONFIG_HEADERS([src/include/config.h:src/include/config.hin])
+ AC_CONFIG_SRCDIR([src/roff/groff/groff.cpp])
++AC_CONFIG_MACRO_DIR([m4])
+ 
+ AC_USE_SYSTEM_EXTENSIONS
+ 
+@@ -72,6 +73,7 @@ GROFF_DOC_CHECK
+ GROFF_MAKEINFO
+ GROFF_TEXI2DVI
+ AC_PROG_RANLIB
++AC_CHECK_TOOL([AR], [ar], [ar])
+ GROFF_INSTALL_SH
+ GROFF_INSTALL_INFO
+ AC_PROG_INSTALL
+-- 
+2.23.0
+
diff --git a/nixpkgs/pkgs/tools/text/groff/default.nix b/nixpkgs/pkgs/tools/text/groff/default.nix
new file mode 100644
index 000000000000..ec7e724d1fc3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/groff/default.nix
@@ -0,0 +1,130 @@
+{ stdenv, fetchurl, perl
+, ghostscript #for postscript and html output
+, psutils, netpbm #for html output
+, buildPackages
+, autoreconfHook
+, pkgconfig
+, texinfo
+}:
+
+stdenv.mkDerivation rec {
+  pname = "groff";
+  version = "1.22.4";
+
+  src = fetchurl {
+    url = "mirror://gnu/groff/${pname}-${version}.tar.gz";
+    sha256 = "14q2mldnr1vx0l9lqp9v2f6iww24gj28iyh4j2211hyynx67p3p7";
+  };
+
+  outputs = [ "out" "man" "doc" "info" "perl" ];
+
+  enableParallelBuilding = false;
+
+  patches = [
+    ./0001-Fix-cross-compilation-by-looking-for-ar.patch
+  ];
+
+  postPatch = stdenv.lib.optionalString (psutils != null) ''
+    substituteInPlace src/preproc/html/pre-html.cpp \
+      --replace "psselect" "${psutils}/bin/psselect"
+  '' + stdenv.lib.optionalString (netpbm != null) ''
+    substituteInPlace src/preproc/html/pre-html.cpp \
+      --replace "pnmcut" "${netpbm}/bin/pnmcut" \
+      --replace "pnmcrop" "${netpbm}/bin/pnmcrop" \
+      --replace "pnmtopng" "${netpbm}/bin/pnmtopng"
+    substituteInPlace tmac/www.tmac \
+      --replace "pnmcrop" "${netpbm}/bin/pnmcrop" \
+      --replace "pngtopnm" "${netpbm}/bin/pngtopnm" \
+      --replace "@PNMTOPS_NOSETPAGE@" "${netpbm}/bin/pnmtops -nosetpage"
+  '';
+
+  buildInputs = [ ghostscript psutils netpbm perl ];
+  nativeBuildInputs = [ autoreconfHook pkgconfig texinfo ];
+
+  # Builds running without a chroot environment may detect the presence
+  # of /usr/X11 in the host system, leading to an impure build of the
+  # package. To avoid this issue, X11 support is explicitly disabled.
+  # Note: If we ever want to *enable* X11 support, then we'll probably
+  # have to pass "--with-appresdir", too.
+  configureFlags = [
+    "--without-x"
+  ] ++ stdenv.lib.optionals (ghostscript != null) [
+    "--with-gs=${ghostscript}/bin/gs"
+  ] ++ stdenv.lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [
+    "ac_cv_path_PERL=${buildPackages.perl}/bin/perl"
+  ];
+
+  makeFlags = stdenv.lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [
+    # Trick to get the build system find the proper 'native' groff
+    # http://www.mail-archive.com/bug-groff@gnu.org/msg01335.html
+    "GROFF_BIN_PATH=${buildPackages.groff}/bin"
+    "GROFFBIN=${buildPackages.groff}/bin/groff"
+  ];
+
+  doCheck = true;
+
+  postInstall = ''
+    for f in 'man.local' 'mdoc.local'; do
+        cat '${./site.tmac}' >>"$out/share/groff/site-tmac/$f"
+    done
+
+    moveToOutput bin/gropdf $perl
+    moveToOutput bin/pdfmom $perl
+    moveToOutput bin/roff2text $perl
+    moveToOutput bin/roff2pdf $perl
+    moveToOutput bin/roff2ps $perl
+    moveToOutput bin/roff2dvi $perl
+    moveToOutput bin/roff2ps $perl
+    moveToOutput bin/roff2html $perl
+    moveToOutput bin/glilypond $perl
+    moveToOutput bin/mmroff $perl
+    moveToOutput bin/roff2x $perl
+    moveToOutput bin/afmtodit $perl
+    moveToOutput bin/gperl $perl
+    moveToOutput bin/chem $perl
+    moveToOutput share/groff/${version}/font/devpdf $perl
+
+    # idk if this is needed, but Fedora does it
+    moveToOutput share/groff/${version}/tmac/pdf.tmac $perl
+
+    moveToOutput bin/gpinyin $perl
+    moveToOutput lib/groff/gpinyin $perl
+    substituteInPlace $perl/bin/gpinyin \
+      --replace $out/lib/groff/gpinyin $perl/lib/groff/gpinyin
+
+    moveToOutput bin/groffer $perl
+    moveToOutput lib/groff/groffer $perl
+    substituteInPlace $perl/bin/groffer \
+      --replace $out/lib/groff/groffer $perl/lib/groff/groffer
+
+    moveToOutput bin/grog $perl
+    moveToOutput lib/groff/grog $perl
+    substituteInPlace $perl/bin/grog \
+      --replace $out/lib/groff/grog $perl/lib/groff/grog
+
+  '' + stdenv.lib.optionalString (stdenv.buildPlatform != stdenv.hostPlatform) ''
+    find $perl/ -type f -print0 | xargs --null sed -i 's|${buildPackages.perl}|${perl}|'
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://www.gnu.org/software/groff/;
+    description = "GNU Troff, a typesetting package that reads plain text and produces formatted output";
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ pSub ];
+
+    longDescription = ''
+      groff is the GNU implementation of troff, a document formatting
+      system.  Included in this release are implementations of troff,
+      pic, eqn, tbl, grn, refer, -man, -mdoc, -mom, and -ms macros,
+      and drivers for PostScript, TeX dvi format, HP LaserJet 4
+      printers, Canon CAPSL printers, HTML and XHTML format (beta
+      status), and typewriter-like devices.  Also included is a
+      modified version of the Berkeley -me macros, the enhanced
+      version gxditview of the X11 xditview previewer, and an
+      implementation of the -mm macros.
+    '';
+
+    outputsToInstall = [ "out" "perl" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/groff/site.tmac b/nixpkgs/pkgs/tools/text/groff/site.tmac
new file mode 100644
index 000000000000..8ef1040ca4a0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/groff/site.tmac
@@ -0,0 +1,16 @@
+.
+.if n \{\
+.  \" Character translations for non-keyboard
+.  \" characters - to make them searchable
+.  if '\*[.T]'utf8' \{\
+.    char \- \N'45'
+.    char - \N'45'
+.    char ' \N'39'
+.    char \' \N'39'
+.  \}
+.
+.  \" Shut off SGR by default (groff colors)
+.  \" Require GROFF_SGR envvar defined to turn it on
+.  if '\V[GROFF_SGR]'' \
+.    output x X tty: sgr 0
+.\}
diff --git a/nixpkgs/pkgs/tools/text/gtranslator/default.nix b/nixpkgs/pkgs/tools/text/gtranslator/default.nix
new file mode 100644
index 000000000000..b871ac6ffaa0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/gtranslator/default.nix
@@ -0,0 +1,72 @@
+{ stdenv
+, fetchurl
+, meson
+, ninja
+, pkgconfig
+, itstool
+, gettext
+, python3
+, wrapGAppsHook
+, libxml2
+, libgda
+, libsoup
+, json-glib
+, gspell
+, glib
+, gtk3
+, gtksourceview4
+, gnome3
+, gsettings-desktop-schemas
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gtranslator";
+  version = "3.34.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "05zvpx330h9k7b12p07bhcy47vq66260fmiph2b6h97xpl15rwmj";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkgconfig
+    itstool
+    gettext
+    python3
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    libxml2
+    glib
+    gtk3
+    gtksourceview4
+    libgda
+    libsoup
+    json-glib
+    gettext
+    gspell
+    gsettings-desktop-schemas
+  ];
+
+  postPatch = ''
+    chmod +x build-aux/meson/meson_post_install.py
+    patchShebangs build-aux/meson/meson_post_install.py
+  '';
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+    };
+  };
+
+  meta = with stdenv.lib; {
+    description = "GNOME translation making program";
+    homepage = https://wiki.gnome.org/Apps/Gtranslator;
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ jtojnar ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/gucci/default.nix b/nixpkgs/pkgs/tools/text/gucci/default.nix
new file mode 100644
index 000000000000..58f1768bfa1f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/gucci/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "gucci";
+  version = "0.1.0";
+
+  goPackagePath = "github.com/noqcks/gucci";
+
+  src = fetchFromGitHub {
+    owner = "noqcks";
+    repo = "gucci";
+    rev = version;
+    sha256 = "0ksrmzb3iggc7gm51fl0jbb15d0gmpclslpkq2sl2xjzk29pkllq";
+  };
+
+  goDeps = ./deps.nix;
+
+  buildFlagsArray = ''
+    -ldflags=-X main.AppVersion=${version}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A simple CLI templating tool written in golang";
+    homepage = https://github.com/noqcks/gucci;
+    license = licenses.mit;
+    maintainers = [ maintainers.braydenjw ];
+    platforms = platforms.unix;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/text/gucci/deps.nix b/nixpkgs/pkgs/tools/text/gucci/deps.nix
new file mode 100644
index 000000000000..8e2cc5af3bf1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/gucci/deps.nix
@@ -0,0 +1,30 @@
+[
+  {
+    goPackagePath = "gopkg.in/yaml.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/yaml.v2";
+      rev = "5420a8b6744d3b0345ab293f6fcba19c978f1183";
+      sha256 = "0dwjrs2lp2gdlscs7bsrmyc5yf6mm4fvgw71bzr9mv2qrd2q73s1";
+    };
+  }
+  {
+    goPackagePath = "github.com/imdario/mergo";
+    fetch = {
+      type = "git";
+      url = "https://github.com/imdario/mergo";
+      rev = "v0.3.6";
+      sha256 = "1lbzy8p8wv439sqgf0n21q52flf2wbamp6qa1jkyv6an0nc952q7";
+    };
+  }
+  {
+    goPackagePath = "github.com/urfave/cli";
+    fetch = {
+      type = "git";
+      url = "https://github.com/urfave/cli";
+      rev = "v1.20.0";
+      sha256 = "0y6f4sbzkiiwrxbl15biivj8c7qwxnvm3zl2dd3mw4wzg4x10ygj";
+    };
+  }
+]
+
diff --git a/nixpkgs/pkgs/tools/text/highlight/default.nix b/nixpkgs/pkgs/tools/text/highlight/default.nix
new file mode 100644
index 000000000000..51cafeb8c4a4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/highlight/default.nix
@@ -0,0 +1,58 @@
+{ stdenv, fetchFromGitLab, getopt, lua, boost, pkgconfig, swig, perl, gcc }:
+
+with stdenv.lib;
+
+let
+  self = stdenv.mkDerivation rec {
+    pname = "highlight";
+    version = "3.54";
+
+    src = fetchFromGitLab {
+      owner = "saalen";
+      repo = "highlight";
+      rev = "v${version}";
+      sha256 = "1144qv3c02hd3qrnms9cxfprdmkvz06vy4zjq500wg4iz7r8654m";
+    };
+
+    enableParallelBuilding = true;
+
+    nativeBuildInputs = [ pkgconfig swig perl ] ++ optional stdenv.isDarwin gcc;
+
+    buildInputs = [ getopt lua boost ];
+
+    prePatch = stdenv.lib.optionalString stdenv.cc.isClang ''
+      substituteInPlace src/makefile \
+          --replace 'CXX=g++' 'CXX=clang++'
+    '';
+
+    preConfigure = ''
+      makeFlags="PREFIX=$out conf_dir=$out/etc/highlight/ CXX=$CXX AR=$AR"
+    '';
+
+    # This has to happen _before_ the main build because it does a
+    # `make clean' for some reason.
+    preBuild = optionalString (!stdenv.isDarwin) ''
+      make -C extras/swig $makeFlags perl
+    '';
+
+    postCheck = optionalString (!stdenv.isDarwin) ''
+      perl -Iextras/swig extras/swig/testmod.pl
+    '';
+
+    preInstall = optionalString (!stdenv.isDarwin) ''
+      mkdir -p $out/${perl.libPrefix}
+      install -m644 extras/swig/highlight.{so,pm} $out/${perl.libPrefix}
+      make -C extras/swig clean # Clean up intermediate files.
+    '';
+
+    meta = with stdenv.lib; {
+      description = "Source code highlighting tool";
+      homepage = "http://www.andre-simon.de/doku/highlight/en/highlight.php";
+      platforms = platforms.unix;
+      maintainers = with maintainers; [ willibutz ];
+    };
+  };
+
+in
+  if stdenv.isDarwin then self
+  else perl.pkgs.toPerlModule self
diff --git a/nixpkgs/pkgs/tools/text/html-tidy/default.nix b/nixpkgs/pkgs/tools/text/html-tidy/default.nix
new file mode 100644
index 000000000000..e31db4378507
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/html-tidy/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, cmake, libxslt }:
+
+stdenv.mkDerivation rec {
+  pname = "html-tidy";
+  version = "5.6.0";
+
+  src = fetchFromGitHub {
+    owner = "htacg";
+    repo = "tidy-html5";
+    rev = version;
+    sha256 = "0w175c5d1babq0w1zzdzw9gl6iqbgyq58v8587s7srp05y3hwy9k";
+  };
+
+  nativeBuildInputs = [ cmake libxslt/*manpage*/ ];
+
+  cmakeFlags = [];
+
+  # ATM bin/tidy is statically linked, as upstream provides no other option yet.
+  # https://github.com/htacg/tidy-html5/issues/326#issuecomment-160322107
+
+  meta = with stdenv.lib; {
+    description = "A HTML validator and `tidier'";
+    longDescription = ''
+      HTML Tidy is a command-line tool and C library that can be
+      used to validate and fix HTML data.
+    '';
+    license = licenses.libpng; # very close to it - the 3 clauses are identical
+    homepage = http://html-tidy.org;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ edwtjo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/html2text/default.nix b/nixpkgs/pkgs/tools/text/html2text/default.nix
new file mode 100644
index 000000000000..194484755481
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/html2text/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation {
+  name = "html2text-1.3.2a";
+
+  src = fetchurl {
+    url = http://www.mbayer.de/html2text/downloads/html2text-1.3.2a.tar.gz;
+    sha256 = "000b39d5d910b867ff7e087177b470a1e26e2819920dcffd5991c33f6d480392";
+  };
+
+  preConfigure = ''
+    substituteInPlace configure \
+        --replace /bin/echo echo \
+        --replace CXX=unknown ':'
+  '';
+
+  # the --prefix has no effect
+  installPhase = ''
+    mkdir -p $out/bin $out/man/man{1,5}
+    cp html2text $out/bin
+    cp html2text.1.gz $out/man/man1
+    cp html2textrc.5.gz $out/man/man5
+  '';
+
+  meta = {
+    description = "Convert HTML to plain text";
+    homepage = http://www.mbayer.de/html2text/;
+    license = stdenv.lib.licenses.gpl2Plus;
+    platforms = stdenv.lib.platforms.unix;
+    maintainers = [ stdenv.lib.maintainers.eikek ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/hyx/default.nix b/nixpkgs/pkgs/tools/text/hyx/default.nix
new file mode 100644
index 000000000000..70745266fe55
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/hyx/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "hyx-0.1.5";
+
+  src = fetchurl {
+    url = "https://yx7.cc/code/hyx/${name}.tar.xz";
+    sha256 = "0gd8fbdyw12jwffa5dgcql4ry22xbdhqdds1qwzk1rkcrkgnc1mg";
+  };
+
+  patches = [ ./no-wall-by-default.patch ];
+
+  installPhase = ''
+    install -vD hyx $out/bin/hyx
+  '';
+
+  meta = with lib; {
+    description = "minimalistic but powerful Linux console hex editor";
+    homepage = https://yx7.cc/code/;
+    license = licenses.mit;
+    maintainers = with maintainers; [ fpletz ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/hyx/no-wall-by-default.patch b/nixpkgs/pkgs/tools/text/hyx/no-wall-by-default.patch
new file mode 100644
index 000000000000..48ee20eff179
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/hyx/no-wall-by-default.patch
@@ -0,0 +1,11 @@
+--- hyx-0.1.5.org/Makefile	2018-06-02 17:14:37.000000000 +0100
++++ hyx-0.1.5/Makefile	2018-11-10 09:25:49.569961762 +0000
+@@ -1,7 +1,7 @@
+ 
+ all: CFLAGS ?= -O2 -Wl,-s \
+                -Wl,-z,relro,-z,now -fpic -pie -D_FORTIFY_SOURCE=2 -fstack-protector-all
+-all: CFLAGS += -std=c99 -pedantic -Wall -Wextra -DNDEBUG
++all: CFLAGS += -std=c99 -DNDEBUG
+ all: hyx
+ 
+ debug: CFLAGS ?= -O0 -g \
diff --git a/nixpkgs/pkgs/tools/text/icdiff/default.nix b/nixpkgs/pkgs/tools/text/icdiff/default.nix
new file mode 100644
index 000000000000..79bcf90718b1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/icdiff/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchFromGitHub, pythonPackages }:
+
+pythonPackages.buildPythonApplication rec {
+  pname = "icdiff";
+  version = "1.9.5";
+
+  src = fetchFromGitHub {
+    owner = "jeffkaufman";
+    repo = "icdiff";
+    rev = "release-${version}";
+    sha256 = "080v8h09pv8qwplin4kwfm0kmqjwdqjfxbpcdrv16sv4hwfwl5qd";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://www.jefftk.com/icdiff;
+    description = "Side-by-side highlighted command line diffs";
+    maintainers = with maintainers; [ aneeshusa ];
+    license = licenses.psfl;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/invoice2data/default.nix b/nixpkgs/pkgs/tools/text/invoice2data/default.nix
new file mode 100644
index 000000000000..0e2e4cedfc22
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/invoice2data/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, python3Packages, xpdf, imagemagick, tesseract }:
+
+python3Packages.buildPythonPackage rec {
+  pname = "invoice2data";
+  version = "0.2.93";
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "1phz0a8jxg074k0im7shrrdfvdps7bn1fa4zwcf8q3sa2iig26l4";
+  };
+
+  makeWrapperArgs = ["--prefix" "PATH" ":" (stdenv.lib.makeBinPath [ imagemagick xpdf tesseract ]) ];
+
+  propagatedBuildInputs = with python3Packages; [ unidecode dateparser pyyaml pillow chardet pdfminer ];
+
+  # Tests fails even when ran manually on my ubuntu machine !!
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "Data extractor for PDF invoices";
+    homepage = https://github.com/invoice-x/invoice2data;
+    license = licenses.mit;
+    maintainers = with maintainers; [ psyanticy ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/ispell/default.nix b/nixpkgs/pkgs/tools/text/ispell/default.nix
new file mode 100644
index 000000000000..2f61536ed2c0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ispell/default.nix
@@ -0,0 +1,58 @@
+{ stdenv, fetchurl, bison, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "ispell";
+  version = "3.4.00";
+
+  src = fetchurl {
+    url = "http://fmg-www.cs.ucla.edu/geoff/tars/${pname}-${version}.tar.gz";
+    sha256 = "1d7c2fqrdjckp91ajpkn5nnmpci2qrxqn8b6cyl0zn1afb9amxbz";
+  };
+
+  buildInputs = [ bison ncurses ];
+
+  patches = [
+    ./patches/0007-Use-termios.patch
+    ./patches/0008-Tex-backslash.patch
+    ./patches/0009-Fix-FTBFS-on-glibc.patch
+    ./patches/0011-Missing-prototypes.patch
+    ./patches/0012-Fix-getline.patch
+    ./patches/0013-Fix-man-pages.patch
+    ./patches/0021-Fix-gcc-warnings.patch
+    ./patches/0023-Exclusive-options.patch
+    ./patches/0024-Check-tempdir-creation.patch
+    ./patches/0025-Languages.patch
+    ./patches/0030-Display-whole-multibyte-character.patch
+  ];
+
+  postPatch = ''
+    cat >> local.h <<EOF
+    ${stdenv.lib.optionalString (!stdenv.isDarwin) "#define USG"}
+    #define TERMLIB "-lncurses"
+    #define LANGUAGES "{american,MASTERDICTS=american.med,HASHFILES=americanmed.hash}"
+    #define MASTERHASH "americanmed.hash"
+    #define BINDIR "$out/bin"
+    #define LIBDIR "$out/lib"
+    #define ELISPDIR "{$out}/share/emacs/site-lisp"
+    #define TEXINFODIR "$out/share/info"
+    #define MAN1DIR "$out/share/man/man1"
+    #define MAN4DIR "$out/share/man/man4"
+    #define MAN45DIR "$out/share/man/man5"
+    #define MINIMENU
+    #define HAS_RENAME
+    EOF
+  '';
+
+  preBuild = ''
+    for dir in $out/share/emacs/site-lisp $out/share/info $out/share/man/man1 $out/share/man/man4 $out/bin $out/lib; do
+    mkdir -p $dir
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    description = "An interactive spell-checking program for Unix";
+    homepage = "https://www.cs.hmc.edu/~geoff/ispell.html";
+    license = licenses.free;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/ispell/patches/0007-Use-termios.patch b/nixpkgs/pkgs/tools/text/ispell/patches/0007-Use-termios.patch
new file mode 100644
index 000000000000..299e3c01ab13
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ispell/patches/0007-Use-termios.patch
@@ -0,0 +1,188 @@
+From: Torsten Landschoff <t.landschoff@gmx.net>
+Date: Tue, 30 Mar 1999 21:05:09 +0100
+Subject: 0007 Use termios
+
+Use termios instead of termio (Closes: #35288).
+
+Patch updated on Mon, 07 Mar 2011 20:40:53 +0100 based on
+ispell-3.3.02-terminal.patch from ispell-3.3.02-102.1.src.rpm
+---
+ term.c |   58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 files changed, 58 insertions(+), 0 deletions(-)
+
+diff --git a/term.c b/term.c
+index 4923844..47c1aa0 100644
+--- a/term.c
++++ b/term.c
+@@ -87,13 +87,22 @@ static char Rcs_Id[] =
+ #include "proto.h"
+ #include "msgs.h"
+ #ifdef USG
++#if defined(__GLIBC__) && __GLIBC__ >= 2
++/* Use termios under at least glibc */
++  #include <termios.h>
++  #define USE_TERMIOS
++#else
+ #include <termio.h>
++#endif
+ #else
+ #ifndef __DJGPP__
+ #include <sgtty.h>
+ #endif
+ #endif
+ #include <signal.h>
++#include <unistd.h>
++#include <sys/types.h>
++#include <sys/wait.h>
+ 
+ void		ierase P ((void));
+ void		imove P ((int row, int col));
+@@ -166,8 +175,13 @@ static int iputch (c)
+     }
+ 
+ #ifdef USG
++#ifdef USE_TERMIOS
++static struct termios	sbuf;
++static struct termios	osbuf;
++#else
+ static struct termio	sbuf;
+ static struct termio	osbuf;
++#endif
+ #else
+ static struct sgttyb	sbuf;
+ static struct sgttyb	osbuf;
+@@ -190,9 +204,13 @@ void terminit ()
+     int			tpgrp;
+ #else
+ #ifdef TIOCGPGRP
++#ifdef USE_TERMIOS
++    pid_t		tpgrp;
++#else
+     int			tpgrp;
+ #endif
+ #endif
++#endif
+ #ifdef TIOCGWINSZ
+     struct winsize	wsize;
+ #endif /* TIOCGWINSZ */
+@@ -276,7 +294,11 @@ retry:
+ 	(void) fprintf (stderr, TERM_C_NO_BATCH);
+ 	exit (1);
+ 	}
++#ifdef USE_TERMIOS
++    (void) tcgetattr (0, &osbuf);
++#else
+     (void) ioctl (0, TCGETA, (char *) &osbuf);
++#endif
+     termchanged = 1;
+ 
+     sbuf = osbuf;
+@@ -285,7 +307,11 @@ retry:
+     sbuf.c_iflag &= ~(INLCR | IGNCR | ICRNL);
+     sbuf.c_cc[VMIN] = 1;
+     sbuf.c_cc[VTIME] = 1;
++#ifdef USE_TERMIOS
++    (void) tcsetattr (0, TCSADRAIN, &sbuf);
++#else
+     (void) ioctl (0, TCSETAW, (char *) &sbuf);
++#endif
+ 
+     uerasechar = osbuf.c_cc[VERASE];
+     ukillchar = osbuf.c_cc[VKILL];
+@@ -298,7 +324,11 @@ retry:
+ #endif
+ #endif
+ #ifdef TIOCGPGRP
++#ifdef USE_TERMIOS
++    if ((tpgrp = tcgetpgrp (0)) == -1)
++#else
+     if (ioctl (0, TIOCGPGRP, (char *) &tpgrp) != 0)
++#endif
+ 	{
+ 	(void) fprintf (stderr, TERM_C_NO_BATCH);
+ 	exit (1);
+@@ -373,7 +403,11 @@ SIGNAL_TYPE done (signo)
+ 	if (te)
+ 	    tputs (te, 1, iputch);
+ #ifdef USG
++#ifdef USE_TERMIOS
++	(void) tcsetattr (0, TCSADRAIN, &osbuf);
++#else
+ 	(void) ioctl (0, TCSETAW, (char *) &osbuf);
++#endif
+ #else
+ 	(void) ioctl (0, TIOCSETP, (char *) &osbuf);
+ #ifdef TIOCSLTC
+@@ -394,7 +428,11 @@ static SIGNAL_TYPE onstop (signo)
+ 	if (te)
+ 	    tputs (te, 1, iputch);
+ #ifdef USG
++#ifdef USE_TERMIOS
++    (void) tcsetattr (0, TCSANOW, &osbuf); /* OpenSuse: TCSADRAIN */
++#else
+ 	(void) ioctl (0, TCSETAW, (char *) &osbuf);
++#endif
+ #else
+ 	(void) ioctl (0, TIOCSETP, (char *) &osbuf);
+ #ifdef TIOCSLTC
+@@ -413,7 +451,11 @@ static SIGNAL_TYPE onstop (signo)
+     if (termchanged)
+ 	{
+ #ifdef USG
++#ifdef USE_TERMIOS
++    (void) tcsetattr (0, TCSANOW, &sbuf);
++#else
+ 	(void) ioctl (0, TCSETAW, (char *) &sbuf);
++#endif
+ #else
+ 	(void) ioctl (0, TIOCSETP, (char *) &sbuf);
+ #ifdef TIOCSLTC
+@@ -481,7 +523,11 @@ int shellescape	(buf)
+     argv[i] = NULL;
+ 
+ #ifdef USG
++#ifdef USE_TERMIOS
++    (void) tcsetattr (0, TCSADRAIN, &osbuf);
++#else
+     (void) ioctl (0, TCSETAW, (char *) &osbuf);
++#endif
+ #else
+     (void) ioctl (0, TIOCSETP, (char *) &osbuf);
+ #ifdef TIOCSLTC
+@@ -527,7 +573,11 @@ int shellescape	(buf)
+ #endif
+ 
+ #ifdef USG
++#ifdef USE_TERMIOS
++    (void) tcsetattr (0, TCSADRAIN, &sbuf);
++#else
+     (void) ioctl (0, TCSETAW, (char *) &sbuf);
++#endif
+ #else
+     (void) ioctl (0, TIOCSETP, (char *) &sbuf);
+ #ifdef TIOCSLTC
+@@ -563,7 +613,11 @@ void shescape (buf)
+ #endif
+ 
+ #ifdef USG
++#ifdef USE_TERMIOS
++    (void) tcsetattr (0, TCSADRAIN, &osbuf);
++#else
+     (void) ioctl (0, TCSETAW, (char *) &osbuf);
++#endif
+ #else
+     (void) ioctl (0, TIOCSETP, (char *) &osbuf);
+ #ifdef TIOCSLTC
+@@ -611,7 +665,11 @@ void shescape (buf)
+ #endif
+ 
+ #ifdef USG
++#ifdef USE_TERMIOS
++    (void) tcsetattr (0, TCSADRAIN, &sbuf);
++#else
+     (void) ioctl (0, TCSETAW, (char *) &sbuf);
++#endif
+ #else
+     (void) ioctl (0, TIOCSETP, (char *) &sbuf);
+ #ifdef TIOCSLTC
+-- 
diff --git a/nixpkgs/pkgs/tools/text/ispell/patches/0008-Tex-backslash.patch b/nixpkgs/pkgs/tools/text/ispell/patches/0008-Tex-backslash.patch
new file mode 100644
index 000000000000..21b44d505db0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ispell/patches/0008-Tex-backslash.patch
@@ -0,0 +1,48 @@
+From: Ken Stevens <kstevens@ece.utah.edu>
+Date: Sat, 15 Jul 2000 22:10:53 -0400
+Subject: 0008 Tex backslash
+
+Version 3.1.20 contains an irritating bug when using latex that causes all
+sorts of problems when the backslash is used. (The backslash is a common
+character in latex that is used, among other things, to create a forced space
+similar to the tilde character.) In the current version, 3.1.20, the next TWO
+characters are skipped after a backslash. This can results in misspellings and
+the file being incorrectly parsed. (For example, if the text contains the
+sequence `\ $' math mode will not be entered until the matching $ which should
+end it, resulting in the body of the text not being spell checked and the math
+region being checked.)
+
+Make sure to undefine NO8BIT and use a larger number for MASKBITS if you are
+using iso character sets.
+
+http://www.kdstevens.com/~stevens/ispell-faq.html#bslash
+---
+ defmt.c |    7 +++----
+ 1 files changed, 3 insertions(+), 4 deletions(-)
+
+diff --git a/defmt.c b/defmt.c
+index 35f93e4..7499752 100644
+--- a/defmt.c
++++ b/defmt.c
+@@ -884,6 +884,8 @@ static int TeX_math_end (bufp)
+ 	return 0;
+     }
+ 
++/* Updates bufp to point to the next character to skip. */
++/*  Should only be called on non-word characters. */
+ static int TeX_math_begin (bufp)
+     unsigned char **	bufp;
+     {
+@@ -902,10 +904,7 @@ static int TeX_math_begin (bufp)
+ 	if (**bufp == TEXLEFTPAREN  ||  **bufp == TEXLEFTSQUARE)
+ 	    return 1;
+ 	else if (!isalpha(**bufp)  &&  **bufp != '@')
+-	    {
+-	    (*bufp)++;
+-	    continue;
+-	    }
++	    return 0;
+ 	else if (TeX_strncmp (*bufp, "begin", 5) == 0)
+ 	    {
+ 	    if (TeX_math_check ('b', bufp))
+-- 
diff --git a/nixpkgs/pkgs/tools/text/ispell/patches/0009-Fix-FTBFS-on-glibc.patch b/nixpkgs/pkgs/tools/text/ispell/patches/0009-Fix-FTBFS-on-glibc.patch
new file mode 100644
index 000000000000..dbe0db9a0533
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ispell/patches/0009-Fix-FTBFS-on-glibc.patch
@@ -0,0 +1,23 @@
+From: Richard Braakman <dark@dark.wapit.fi>
+Date: Fri, 2 Feb 2001 17:22:53 +0200
+Subject: 0009 Fix FTBFS on glibc
+
+Fix FTBFS on glibc (Closes: #75377)
+---
+ config.X |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/config.X b/config.X
+index 18bf621..0a47cb2 100644
+--- a/config.X
++++ b/config.X
+@@ -531,7 +531,7 @@
+ #endif /* NO_MKSTEMP */
+ 
+ /* Aliases for some routines */
+-#ifdef USG
++#if defined (USG) && !defined(__GLIBC__)
+ #define BCOPY(s, d, n)	memcpy (d, s, n)
+ #define BZERO(d, n)	memset (d, 0, n)
+ #define index strchr
+-- 
diff --git a/nixpkgs/pkgs/tools/text/ispell/patches/0011-Missing-prototypes.patch b/nixpkgs/pkgs/tools/text/ispell/patches/0011-Missing-prototypes.patch
new file mode 100644
index 000000000000..5e77b6a4f371
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ispell/patches/0011-Missing-prototypes.patch
@@ -0,0 +1,84 @@
+From: Doug Porter <dsp@debian.org>
+Date: Tue, 22 Jan 2002 10:28:44 -0500
+Subject: 0011 Missing prototypes
+
+Fixing implicit declarations (Closes: #130405).
+---
+ correct.c |    1 +
+ ijoin.c   |    2 +-
+ ispell.c  |    2 ++
+ lookup.c  |    2 ++
+ tree.c    |    1 +
+ 5 files changed, 7 insertions(+), 1 deletions(-)
+
+diff --git a/correct.c b/correct.c
+index e2b63c8..661bf57 100644
+--- a/correct.c
++++ b/correct.c
+@@ -201,6 +201,7 @@ static char Rcs_Id[] =
+  */
+ 
+ #include <ctype.h>
++#include <unistd.h>
+ #include "config.h"
+ #include "ispell.h"
+ #include "proto.h"
+diff --git a/ijoin.c b/ijoin.c
+index edb18d1..5da039a 100644
+--- a/ijoin.c
++++ b/ijoin.c
+@@ -115,6 +115,7 @@ static char Rcs_Id[] =
+  */
+ 
+ #include <stdio.h>
++#include <string.h>
+ #include "config.h"
+ #include "ispell.h"
+ #include "proto.h"
+@@ -169,7 +170,6 @@ static char *		tabchar = " \t"; /* Field separator character(s) */
+ static int		unpairable1 = 0; /* NZ if -a1 */
+ static int		unpairable2 = 0; /* NZ if -a2 */
+ 
+-extern int	strcmp ();
+ 
+ int main (argc, argv)			/* Join files */
+     int			argc;		/* Argument count */
+diff --git a/ispell.c b/ispell.c
+index 9b509d0..59fe358 100644
+--- a/ispell.c
++++ b/ispell.c
+@@ -235,6 +235,8 @@ static char Rcs_Id[] =
+ #include <fcntl.h>
+ #endif /* NO_FCNTL_H */
+ #include <sys/stat.h>
++#include <ctype.h>
++#include <unistd.h>
+ 
+ static void	usage P ((void));
+ int		main P ((int argc, char * argv[]));
+diff --git a/lookup.c b/lookup.c
+index 648f9c8..8bf1f6c 100644
+--- a/lookup.c
++++ b/lookup.c
+@@ -87,6 +87,8 @@ static char Rcs_Id[] =
+ 
+ #include <fcntl.h>
+ 
++#include <sys/types.h>
++#include <unistd.h>
+ #include "config.h"
+ #include "ispell.h"
+ #include "proto.h"
+diff --git a/tree.c b/tree.c
+index 073a6a6..c26f635 100644
+--- a/tree.c
++++ b/tree.c
+@@ -94,6 +94,7 @@ static char Rcs_Id[] =
+ 
+ #include <ctype.h>
+ #include <errno.h>
++#include <unistd.h>
+ #include "config.h"
+ #include "ispell.h"
+ #include "proto.h"
+-- 
diff --git a/nixpkgs/pkgs/tools/text/ispell/patches/0012-Fix-getline.patch b/nixpkgs/pkgs/tools/text/ispell/patches/0012-Fix-getline.patch
new file mode 100644
index 000000000000..ea966d67792e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ispell/patches/0012-Fix-getline.patch
@@ -0,0 +1,62 @@
+From: Stefan Potyra <sistpoty@ubuntu.com>
+Date: Sat, 3 Oct 2009 04:00:34 +0200
+Subject: 0012 Fix getline
+
+getline is not provided by eglibc, avoid conflict
+
+Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=549401
+Forwarded: no
+---
+ correct.c |   10 +++++-----
+ 1 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/correct.c b/correct.c
+index 661bf57..ff7cb99 100644
+--- a/correct.c
++++ b/correct.c
+@@ -246,7 +246,7 @@ static void	save_root_cap P ((ichar_t * word, ichar_t * pattern,
+ 		  struct flagent * sufent,
+ 		  ichar_t savearea[MAX_CAPS][INPUTWORDLEN + MAXAFFIXLEN],
+ 		  int * nsaved));
+-static char *	getline P ((char * buf, int bufsize));
++static char *	getline_ispell P ((char * buf, int bufsize));
+ void		askmode P ((void));
+ void		copyout P ((unsigned char ** cc, int cnt));
+ static void	lookharder P ((unsigned char * string));
+@@ -572,7 +572,7 @@ checkagain:
+ 
+ 		imove (li - 1, 0);
+ 		(void) putchar ('!');
+-		if (getline ((char *) buf, sizeof buf) == NULL)
++		if (getline_ispell ((char *) buf, sizeof buf) == NULL)
+ 		    {
+ 		    (void) putchar (7);
+ 		    ierase ();
+@@ -597,7 +597,7 @@ checkagain:
+ 		    (void) printf ("%s ", CORR_C_READONLY);
+ 		    }
+ 		(void) printf (CORR_C_REPLACE_WITH);
+-		if (getline ((char *) ctok, ctokl) == NULL)
++		if (getline_ispell ((char *) ctok, ctokl) == NULL)
+ 		    {
+ 		    (void) putchar (7);
+ 		    /* Put it back */
+@@ -665,7 +665,7 @@ checkagain:
+ 		unsigned char	buf[100];
+ 		imove (li - 1, 0);
+ 		(void) printf (CORR_C_LOOKUP_PROMPT);
+-		if (getline ((char *) buf, sizeof buf) == NULL)
++		if (getline_ispell ((char *) buf, sizeof buf) == NULL)
+ 		    {
+ 		    (void) putchar (7);
+ 		    ierase ();
+@@ -1584,7 +1584,7 @@ static void save_root_cap (word, pattern, prestrip, preadd, sufstrip, sufadd,
+     return;
+     }
+ 
+-static char * getline (s, len)
++static char * getline_ispell(s, len)
+     register char *	s;
+     register int	len;
+     {
+-- 
diff --git a/nixpkgs/pkgs/tools/text/ispell/patches/0013-Fix-man-pages.patch b/nixpkgs/pkgs/tools/text/ispell/patches/0013-Fix-man-pages.patch
new file mode 100644
index 000000000000..9c0aedb67d76
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ispell/patches/0013-Fix-man-pages.patch
@@ -0,0 +1,227 @@
+From: David Paleino <d.paleino@gmail.com>
+Date: Mon, 9 Nov 2009 09:22:12 +0000
+Subject: 0013 Fix man pages
+
+Fix man pages, manpage-has-errors-from-man and hyphen-used-as-minus-sign
+
+Forwarded: no
+---
+ ispell.1X |   26 +++++++++++++-------------
+ ispell.5X |   26 +++++++++++++-------------
+ 2 files changed, 26 insertions(+), 26 deletions(-)
+
+diff --git a/ispell.1X b/ispell.1X
+index b27b120..79894d4 100644
+--- a/ispell.1X
++++ b/ispell.1X
+@@ -236,8 +236,8 @@ count affix-file
+ .RB [ \-p | \-s]
+ .RB [ \-c ]
+ .I expanded-file
+-.IR affix [ +addition ]
+-...
++.IR affix
++.RI [ +addition ]
+ .PP
+ .B icombine
+ .RB [ \-T
+@@ -336,7 +336,7 @@ The amount of context is subject to a system-imposed limit.
+ If the
+ .B \-V
+ flag is given, characters that are not in the 7-bit ANSI printable
+-character set will always be displayed in the style of "cat -v", even if
++character set will always be displayed in the style of "cat \-v", even if
+ .I ispell
+ thinks that these characters are legal ISO Latin-1 on your system.
+ This is useful when working with older terminals.
+@@ -542,7 +542,7 @@ option is used to specify an alternate hashed dictionary file,
+ other than the default.
+ If the filename does not contain a "/",
+ the library directory for the default dictionary file is prefixed;
+-thus, to use a dictionary in the local directory "-d ./xxx.hash" must
++thus, to use a dictionary in the local directory "\-d ./xxx.hash" must
+ be used.
+ This is useful to allow dictionaries for alternate languages.
+ Unlike previous versions of
+@@ -615,7 +615,7 @@ alphabetics have no meaning - alphabetics are already accepted.
+ .I Ispell
+ will typically be used with input from a file, meaning that preserving
+ parity for possible 8 bit characters from the input text is OK.  If you
+-specify the -l option, and actually type text from the terminal, this may
++specify the \-l option, and actually type text from the terminal, this may
+ create problems if your stty settings preserve parity.
+ .PP
+ It is not possible to use
+@@ -799,7 +799,7 @@ that the '&' is replaced by '?' (and the near-miss count is always zero).
+ The suggested derivations following the near misses are in the form:
+ .PP
+ .RS
+-[prefix+] root [-prefix] [-suffix] [+suffix]
++[prefix+] root [\-prefix] [\-suffix] [+suffix]
+ .RE
+ .PP
+ (e.g., "re+fry-y+ies" to get "refries")
+@@ -841,7 +841,7 @@ These output lines can be summarized as follows:
+ .PP
+ For example, a dummy dictionary containing the words "fray", "Frey",
+ "fry", and "refried" might produce the following response to the
+-command "echo 'frqy refries | ispell -a -m -d ./test.hash":
++command "echo 'frqy refries | ispell \-a \-m \-d ./test.hash":
+ .RS
+ .nf
+ (#) International Ispell Version 3.0.05 (beta), 08/10/91
+@@ -1036,7 +1036,7 @@ script does this.
+ As an example, the command:
+ .PP
+ .RS
+-echo BOTHER | ispell -c
++echo BOTHER | ispell \-c
+ .RE
+ .PP
+ produces:
+@@ -1055,7 +1055,7 @@ it expands affix flags to produce a list of words.
+ For example, the command:
+ .PP
+ .RS
+-echo BOTH/R | ispell -e
++echo BOTH/R | ispell \-e
+ .RE
+ .PP
+ produces:
+@@ -1268,7 +1268,7 @@ hash file if it were added to the language table.
+ Only affixes that generate legal roots (found in the original input)
+ are listed.
+ .PP
+-If the "-c" option is not given, the output lines are in the
++If the "\-c" option is not given, the output lines are in the
+ following format:
+ .IP
+ strip/add/count/bytes
+@@ -1298,7 +1298,7 @@ If the
+ the output is made visually cleaner (but harder to post-process)
+ by changing it to:
+ .IP
+--strip+add<tab>count<tab>bytes
++\-strip+add<tab>count<tab>bytes
+ .PP
+ where
+ .IR strip ,
+@@ -1313,7 +1313,7 @@ represents the ASCII tab character.
+ The method used to generate possible affixes will also generate
+ longer affixes which have common headers or trailers.  For example,
+ the two words "moth" and "mother" will generate not only the obvious
+-substitution "+er" but also "-h+her" and "-th+ther" (and possibly
++substitution "+er" but also "\-h+her" and "\-th+ther" (and possibly
+ even longer ones, depending on the value of
+ .IR min ).
+ To prevent
+@@ -1621,7 +1621,7 @@ redirected.
+ However, a lot of the temporary space needed is for sorting, so TMPDIR
+ is only a partial help on systems with an uncooperative
+ .IR sort (1).
+-("Cooperative" is defined as accepting the undocumented -T switch).
++("Cooperative" is defined as accepting the undocumented \-T switch).
+ At its peak usage,
+ .I munchlist
+ takes 10 to 40 times the original
+diff --git a/ispell.5X b/ispell.5X
+index ab526ed..7a1c2e5 100644
+--- a/ispell.5X
++++ b/ispell.5X
+@@ -137,8 +137,8 @@ This feature can be used to convert an entire dictionary if necessary:)
+ 	echo qqqqq > dummy.dict
+ 	buildhash dummy.dict \fIaffix-file\fP dummy.hash
+ 	awk '{print "*"}END{print "#"}' \fIold-dict-file\fP \e
+-	| ispell -a -T \fIold-dict-string-type\fP \e
+-	  -d ./dummy.hash -p ./\fInew-dict-file\fP \e
++	| ispell \-a \-T \fIold-dict-string-type\fP \e
++	  \-d ./dummy.hash \-p ./\fInew-dict-file\fP \e
+ 	  > /dev/null
+ 	rm dummy.*
+ .fi
+@@ -622,7 +622,7 @@ or
+ .B stringchar
+ statements.
+ For example, if the hyphen is a boundary character (useful in French),
+-the string "foo-bar" would be a single word, but "-foo" would be the
++the string "foo-bar" would be a single word, but "\-foo" would be the
+ same as "foo", and "foo--bar" would be two words separated by non-word
+ characters.
+ .PP
+@@ -916,7 +916,7 @@ The following (suffix) replacements:
+ .RS
+ .nf
+ \&.	>	MENT
+-Y	>	-Y,IES
++Y	>	\-Y,IES
+ .fi
+ .RE
+ .PP
+@@ -956,8 +956,8 @@ Instead, you must use two separate rules:
+ .PP
+ .RS
+ .nf
+-E	>	-E,IES
+-Y	>	-Y,IES
++E	>	\-E,IES
++Y	>	\-Y,IES
+ .fi
+ .RE
+ .PP
+@@ -1005,7 +1005,7 @@ For example, to specify words ending in "ED", write:
+ .PP
+ .RS
+ .nf
+-E D	>	-ED,ING		# As in covered > covering
++E D	>	\-ED,ING		# As in covered > covering
+ .fi
+ .RE
+ .PP
+@@ -1013,7 +1013,7 @@ If you write:
+ .PP
+ .RS
+ .nf
+-ED	>	-ED,ING
++ED	>	\-ED,ING
+ .fi
+ .RE
+ .PP
+@@ -1021,7 +1021,7 @@ the effect will be the same as:
+ .PP
+ .RS
+ .nf
+-[ED]	>	-ED,ING
++[ED]	>	\-ED,ING
+ .fi
+ .RE
+ .PP
+@@ -1047,7 +1047,7 @@ is useful, as in the following example:
+ .PP
+ .RS
+ .nf
+-$ munchlist -c oldaffixes -l newaffixes olddict > newdict
++$ munchlist \-c oldaffixes \-l newaffixes olddict > newdict
+ .fi
+ .RE
+ .PP
+@@ -1070,7 +1070,7 @@ flag from the English affix file:
+ .RS
+ .nf
+ flag *S:
+-    [^AEIOU]Y	>	-Y,IES	# As in imply > implies
++    [^AEIOU]Y	>	\-Y,IES	# As in imply > implies
+     [AEIOU]Y	>	S		# As in convey > conveys
+     [SXZH]	>	ES		# As in fix > fixes
+     [^SXZHY]	>	S		# As in bat > bats
+@@ -1099,8 +1099,8 @@ For example, we could extend the English "R" flag as follows:
+ flag *R:
+    E			>	R		# As in skate > skater
+    E			>	RS		# As in skate > skaters
+-   [^AEIOU]Y	>	-Y,IER	# As in multiply > multiplier
+-   [^AEIOU]Y	>	-Y,IERS	# As in multiply > multipliers
++   [^AEIOU]Y	>	\-Y,IER	# As in multiply > multiplier
++   [^AEIOU]Y	>	\-Y,IERS	# As in multiply > multipliers
+    [AEIOU]Y	>	ER		# As in convey > conveyer
+    [AEIOU]Y	>	ERS		# As in convey > conveyers
+    [^EY]		>	ER		# As in build > builder
+-- 
diff --git a/nixpkgs/pkgs/tools/text/ispell/patches/0021-Fix-gcc-warnings.patch b/nixpkgs/pkgs/tools/text/ispell/patches/0021-Fix-gcc-warnings.patch
new file mode 100644
index 000000000000..8902018dab58
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ispell/patches/0021-Fix-gcc-warnings.patch
@@ -0,0 +1,57 @@
+From: Robert Luberda <robert@debian.org>
+Date: Mon, 7 Mar 2011 22:23:56 +0100
+Subject: 0021 Fix gcc warnings
+
+Fix some gcc warnings.
+---
+ correct.c                |    2 +-
+ languages/english/msgs.h |    8 ++++----
+ tree.c                   |    2 +-
+ 3 files changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/correct.c b/correct.c
+index 79b259f..982b7c6 100644
+--- a/correct.c
++++ b/correct.c
+@@ -825,7 +825,7 @@ static void inserttoken (buf, start, tok, curchar, oktochange)
+ 	for (p = start;  p != *curchar;  p++)
+ 	    (void) putc (*p, logfile);
+ 	(void) putc (' ', logfile);
+-	(void) fputs (tok, logfile);
++	(void) fputs ((char*) tok, logfile);
+ 	(void) putc ('\n', logfile);
+ 	(void) fflush (logfile);
+ 	}
+diff --git a/languages/english/msgs.h b/languages/english/msgs.h
+index d33b42b..f9c87ca 100644
+--- a/languages/english/msgs.h
++++ b/languages/english/msgs.h
+@@ -182,10 +182,10 @@
+ #define CORR_C_HELP_4		"next to each one.  You have the option of replacing the word%s\n"
+ #define CORR_C_HELP_5		"completely, or choosing one of the suggested words.%s\n"
+     /* You may add HELP_6 through HELP_9 if your language needs more lines */
+-#define CORR_C_HELP_6		""
+-#define CORR_C_HELP_7		""
+-#define CORR_C_HELP_8		""
+-#define CORR_C_HELP_9		""
++#define CORR_C_HELP_6		"%s"
++#define CORR_C_HELP_7		"%s"
++#define CORR_C_HELP_8		"%s"
++#define CORR_C_HELP_9		"%s"
+ #define CORR_C_HELP_COMMANDS	"%s\nCommands are:%s\n%s\n"
+ #define CORR_C_HELP_R_CMD	"R       Replace the misspelled word completely.%s\n"
+ #define CORR_C_HELP_BLANK	"Space   Accept the word this time only.%s\n"
+diff --git a/tree.c b/tree.c
+index 05a6918..229ae16 100644
+--- a/tree.c
++++ b/tree.c
+@@ -351,7 +351,7 @@ void treeinsert (word, wordlen, keep)
+     struct dent *	oldhtab;
+     unsigned int	oldhsize;
+     ichar_t		nword[INPUTWORDLEN + MAXAFFIXLEN];
+-    int			isvariant;
++    MASKTYPE		isvariant;
+ 
+     /*
+      * Expand hash table when it is MAXPCT % full.
+-- 
diff --git a/nixpkgs/pkgs/tools/text/ispell/patches/0023-Exclusive-options.patch b/nixpkgs/pkgs/tools/text/ispell/patches/0023-Exclusive-options.patch
new file mode 100644
index 000000000000..392d94d27d33
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ispell/patches/0023-Exclusive-options.patch
@@ -0,0 +1,38 @@
+From: Robert Luberda <robert@debian.org>
+Date: Tue, 8 Mar 2011 21:12:23 +0100
+Subject: 0023 Exclusive options
+
+Make options -x and -b mutually exclusive
+---
+ ispell.c |    6 ++++--
+ 1 files changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/ispell.c b/ispell.c
+index d130a0e..cd5802a 100644
+--- a/ispell.c
++++ b/ispell.c
+@@ -279,6 +279,7 @@ int main (argc, argv)
+     static char	outbuf[BUFSIZ];
+     int		argno;
+     int		arglen;
++    int		bflag = 0;
+ 
+     Cmd = *argv;
+ 
+@@ -728,12 +729,13 @@ int main (argc, argv)
+ 		nodictflag++;
+ 		break;
+ 	    case 'b':
+-		if (arglen > 2)
++		if (arglen > 2 || xflag == 1)
+ 		    usage ();
+ 		xflag = 0;		/* Keep a backup file */
++		bflag = 1;
+ 		break;
+ 	    case 'x':
+-		if (arglen > 2)
++		if (arglen > 2 || bflag == 1)
+ 		    usage ();
+ 		xflag = 1;		/* Don't keep a backup file */
+ 		break;
+-- 
diff --git a/nixpkgs/pkgs/tools/text/ispell/patches/0024-Check-tempdir-creation.patch b/nixpkgs/pkgs/tools/text/ispell/patches/0024-Check-tempdir-creation.patch
new file mode 100644
index 000000000000..fd35ee34ec16
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ispell/patches/0024-Check-tempdir-creation.patch
@@ -0,0 +1,69 @@
+From: Robert Luberda <robert@debian.org>
+Date: Tue, 8 Mar 2011 21:00:31 +0100
+Subject: 0024 Check tempdir creation
+
+Fail if temporary directory cannot be created.
+---
+ findaffix.X |    3 ++-
+ munchlist.X |    3 ++-
+ subset.X    |    3 ++-
+ zapdups.X   |    3 ++-
+ 4 files changed, 8 insertions(+), 4 deletions(-)
+
+diff --git a/findaffix.X b/findaffix.X
+index 2c253e2..58cabab 100755
+--- a/findaffix.X
++++ b/findaffix.X
+@@ -179,7 +179,8 @@ TEMPDIR=`mktemp -d ${TDIR}/faffXXXXXXXXXX 2>/dev/null`  ||  TEMPDIR="$TDIR"
+ TMP=${TEMPDIR}/faff$$
+ if [ "$TEMPDIR" = "$TDIR" ]
+ then
+-    TOREMOVE="${TMP}*"
++    echo "Failed to create temporary directory; exiting"
++    exit 1
+ else
+     TOREMOVE="$TEMPDIR"
+ fi
+diff --git a/munchlist.X b/munchlist.X
+index ada3f1d..47bb908 100755
+--- a/munchlist.X
++++ b/munchlist.X
+@@ -180,7 +180,8 @@ MUNCHDIR=`mktemp -d ${TDIR}/munchXXXXXXXXXX 2>/dev/null`  ||  MUNCHDIR="$TDIR"
+ TMP=${MUNCHDIR}/munch$$
+ if [ "$MUNCHDIR" = "$TDIR" ]
+ then
+-    TOREMOVE="${TMP}*"
++    echo "$0: Failed to create temporary directory, exiting..."
++	exit 1
+ else
+     TOREMOVE="$MUNCHDIR"
+ fi
+diff --git a/subset.X b/subset.X
+index cc748ec..9c904cc 100755
+--- a/subset.X
++++ b/subset.X
+@@ -125,7 +125,8 @@ TEMPDIR=`mktemp -d ${TDIR}/ssetXXXXXXXXXX 2>/dev/null`  ||  TEMPDIR="$TDIR"
+ TMP=${TEMPDIR}/sset$$
+ if [ "$TEMPDIR" = "$TDIR" ]
+ then
+-    TOREMOVE="${TMP}*"
++    echo "$0: Failed to create temporary directory, exiting..."
++    exit 1
+ else
+     TOREMOVE="$TEMPDIR"
+ fi
+diff --git a/zapdups.X b/zapdups.X
+index a68852a..1c610d4 100755
+--- a/zapdups.X
++++ b/zapdups.X
+@@ -111,7 +111,8 @@ TEMPDIR=`mktemp -d ${TDIR}/zapdXXXXXXXXXX 2>/dev/null`  ||  TEMPDIR="$TDIR"
+ TMP=${TEMPDIR}/zapd$$
+ if [ "$TEMPDIR" = "$TDIR" ]
+ then
+-    TOREMOVE="${TMP}*"
++    echo "$0: Failed to create temporary directory, exiting..."
++    exit 1
+ else
+     TOREMOVE="$TEMPDIR"
+ fi
+-- 
diff --git a/nixpkgs/pkgs/tools/text/ispell/patches/0025-Languages.patch b/nixpkgs/pkgs/tools/text/ispell/patches/0025-Languages.patch
new file mode 100644
index 000000000000..ffa114d28a12
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ispell/patches/0025-Languages.patch
@@ -0,0 +1,81 @@
+From: Robert Luberda <robert@debian.org>
+Date: Tue, 8 Mar 2011 21:02:47 +0100
+Subject: 0025 Languages
+
+Fix a few words.
+---
+ languages/english/british.0 |    1 +
+ languages/english/english.0 |    8 ++++++--
+ languages/english/english.1 |    3 ++-
+ 3 files changed, 9 insertions(+), 3 deletions(-)
+
+diff --git a/languages/english/british.0 b/languages/english/british.0
+index dc4caa7..04d9177 100644
+--- a/languages/english/british.0
++++ b/languages/english/british.0
+@@ -46,6 +46,7 @@ armour/DGMRSZ
+ armoured/U
+ armourer/MS
+ armoury/DMS
++artefact/MS
+ atomisation/MS
+ atomise/DGRSZ
+ authorisation/AMS
+diff --git a/languages/english/english.0 b/languages/english/english.0
+index fc13212..f85e15a 100644
+--- a/languages/english/english.0
++++ b/languages/english/english.0
+@@ -3502,6 +3502,7 @@ closure/DGMS
+ cloth/DGS
+ clothe/DGS
+ clothed/U
++cloths
+ cloud/DGS
+ clouded/U
+ cloudless/PY
+@@ -10019,9 +10020,10 @@ mystery/MS
+ mystic/MS
+ mystical/Y
+ mysticism/S
+-myth/MS
++myth/M
+ mythical/Y
+ mythology/MS
++myths
+ nag/MS
+ nail/DGRS
+ naive/PRY
+@@ -14818,6 +14820,7 @@ tent/DGRS
+ tentacle/DS
+ tentative/PY
+ tented/U
++tenth
+ tenths
+ tenure/DS
+ tenured/U
+@@ -16511,8 +16514,9 @@ youngster/MS
+ your/MS
+ yourself
+ yourselves
+-youth/MS
++youth/M
+ youthful/PY
++youths
+ yuck
+ Yugoslavian/MS
+ yummy/R
+diff --git a/languages/english/english.1 b/languages/english/english.1
+index 2bfac86..78a7edf 100644
+--- a/languages/english/english.1
++++ b/languages/english/english.1
+@@ -7449,7 +7449,8 @@ metalloid
+ metallurgic
+ metallurgical/Y
+ metallurgists
+-metalsmith/S
++metalsmith
++metalsmiths
+ metalwork/GJR
+ metamorphic
+ metamorphism
+-- 
diff --git a/nixpkgs/pkgs/tools/text/ispell/patches/0030-Display-whole-multibyte-character.patch b/nixpkgs/pkgs/tools/text/ispell/patches/0030-Display-whole-multibyte-character.patch
new file mode 100644
index 000000000000..bf687f04413c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ispell/patches/0030-Display-whole-multibyte-character.patch
@@ -0,0 +1,35 @@
+From: Robert Luberda <robert@debian.org>
+Date: Mon, 21 Mar 2011 10:36:15 +0100
+Subject: 0030 Display whole multibyte character
+
+Display all bytes from multibyte characters instead of converting them
+into `cat -v' format. This fixes an ugly screen content shown while
+checking UTF-8 files.
+---
+ correct.c |   11 +++++++----
+ 1 files changed, 7 insertions(+), 4 deletions(-)
+
+diff --git a/correct.c b/correct.c
+index 982b7c6..c91b41b 100644
+--- a/correct.c
++++ b/correct.c
+@@ -733,11 +733,14 @@ static int show_char (cp, linew, output, maxw)
+ 	ichar = SET_SIZE + laststringch;
+     else
+ 	ichar = chartoichar (ch);
+-    if (!vflag  &&  iswordch (ichar)  &&  len == 1)
++    if (!vflag  &&  iswordch (ichar)  &&  len >= 1)
+ 	{
+-	if (output)
+-	    (void) putchar (ch);
+-	(*cp)++;
++	for (i = 0; i < len; ++i)
++	    {
++		if (output)
++			(void) putchar (**cp);
++		(*cp)++;
++	    }
+ 	return 1;
+ 	}
+     if (ch == '\t')
+-- 
diff --git a/nixpkgs/pkgs/tools/text/jsawk/default.nix b/nixpkgs/pkgs/tools/text/jsawk/default.nix
new file mode 100644
index 000000000000..c7f4002e2d3a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/jsawk/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub, makeWrapper, spidermonkey }:
+
+stdenv.mkDerivation {
+  pname = "jsawk";
+  version = "1.5-pre";
+  src = fetchFromGitHub {
+    owner = "micha";
+    repo = "jsawk";
+    rev = "5a14c4af3c7b59807701b70a954ecefc6f77e978";
+    sha256 = "0z3vdr3c8nvdrrxkjv9b4xg47mdb2hsknxpimw6shgwbigihapyr";
+  };
+  dontBuild = true;
+  buildInputs = [ makeWrapper ];
+  installPhase = ''
+    mkdir -p $out/bin
+    cp $src/jsawk $out/bin/
+    wrapProgram $out/bin/jsawk \
+      --prefix PATH : "${spidermonkey}/bin"
+  '';
+
+  meta = {
+    description = "Jsawk is like awk, but for JSON";
+    homepage = https://github.com/micha/jsawk;
+    license = stdenv.lib.licenses.publicDomain;
+    maintainers = with stdenv.lib.maintainers; [ puffnfresh ];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/jumanpp/default.nix b/nixpkgs/pkgs/tools/text/jumanpp/default.nix
new file mode 100644
index 000000000000..6be7106f2b95
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/jumanpp/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, cmake, protobuf }:
+stdenv.mkDerivation rec {
+  pname = "jumanpp";
+  version = "2.0.0-rc2";
+
+  src = fetchurl {
+    url = "https://github.com/ku-nlp/${pname}/releases/download/v${version}/${pname}-${version}.tar.xz";
+    sha256 = "17fzmd0f5m9ayfhsr0mg7hjp3pg1mhbgknhgyd8v87x46g8bg6qp";
+  };
+  buildInputs = [ cmake protobuf ];
+
+  meta = with stdenv.lib; {
+    description = "A Japanese morphological analyser using a recurrent neural network language model (RNNLM)";
+    longDescription = ''
+      JUMAN++ is a new morphological analyser that considers semantic
+      plausibility of word sequences by using a recurrent neural network
+      language model (RNNLM).
+    '';
+    homepage = http://nlp.ist.i.kyoto-u.ac.jp/index.php?JUMAN++;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ mt-caret ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/kakasi/default.nix b/nixpkgs/pkgs/tools/text/kakasi/default.nix
new file mode 100644
index 000000000000..626455732599
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/kakasi/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, libiconv }:
+
+stdenv.mkDerivation rec {
+  name = "kakasi-2.3.6";
+
+  buildInputs = stdenv.lib.optional stdenv.isDarwin [ libiconv ];
+
+  meta = with stdenv.lib; {
+    description = "Kanji Kana Simple Inverter";
+    longDescription = ''
+      KAKASI is the language processing filter to convert Kanji
+      characters to Hiragana, Katakana or Romaji and may be
+      helpful to read Japanese documents.
+    '';
+    homepage    = "http://kakasi.namazu.org/";
+    license     = licenses.gpl2Plus;
+    platforms   = platforms.unix;
+  };
+
+  src = fetchurl {
+    url = "http://kakasi.namazu.org/stable/${name}.tar.xz";
+    sha256 = "1qry3xqb83pjgxp3my8b1sy77z4f0893h73ldrvdaky70cdppr9f";
+  };
+
+  postPatch = ''
+    for a in tests/kakasi-* ; do
+      substituteInPlace $a \
+        --replace "/bin/echo" echo
+    done
+  '';
+
+  doCheck = false; # fails 1 of 6 tests
+
+}
diff --git a/nixpkgs/pkgs/tools/text/kdiff3/default.nix b/nixpkgs/pkgs/tools/text/kdiff3/default.nix
new file mode 100644
index 000000000000..d55ed89e633d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/kdiff3/default.nix
@@ -0,0 +1,27 @@
+{
+  mkDerivation, lib, fetchurl,
+  extra-cmake-modules, kdoctools, wrapGAppsHook,
+  kcrash, kconfig, kinit, kparts, kiconthemes
+}:
+
+mkDerivation rec {
+  pname = "kdiff3";
+  version = "1.8.1";
+
+  src = fetchurl {
+    url = "https://download.kde.org/stable/${pname}/${pname}-${version}.tar.xz";
+    sha256 = "0vj3rw5w0kry2c1y8gv6hniam417w7k3ydb1dkf5xwr4iprw0xvq";
+  };
+
+  nativeBuildInputs = [ extra-cmake-modules kdoctools wrapGAppsHook ];
+
+  propagatedBuildInputs = [ kconfig kcrash kinit kparts kiconthemes ];
+
+  meta = with lib; {
+    homepage = http://kdiff3.sourceforge.net/;
+    license = licenses.gpl2Plus;
+    description = "Compares and merges 2 or 3 files or directories";
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/kytea/default.nix b/nixpkgs/pkgs/tools/text/kytea/default.nix
new file mode 100644
index 000000000000..621408866e8c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/kytea/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+
+  pname = "kytea";
+  version = "0.4.7";
+
+  src = fetchurl {
+    url    = "http://www.phontron.com/kytea/download/${pname}-${version}.tar.gz";
+    sha256 = "0ilzzwn5vpvm65bnbyb9f5rxyxy3jmbafw9w0lgl5iad1ka36jjk";
+  };
+
+  patches = [ ./gcc-O3.patch ];
+
+  NIX_CFLAGS_COMPILE = stdenv.lib.optionalString stdenv.cc.isClang "-Wno-error=c++11-narrowing";
+
+  meta = with stdenv.lib; {
+    homepage = http://www.phontron.com/kytea/;
+    description = "General toolkit developed for analyzing text";
+
+    longDescription = ''
+      A general toolkit developed for analyzing text, with a focus on Japanese,
+      Chinese and other languages requiring word or morpheme segmentation.
+    '';
+
+    license = licenses.asl20;
+
+    maintainers = with maintainers; [ ericsagnes ];
+    platforms = platforms.unix;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/text/kytea/gcc-O3.patch b/nixpkgs/pkgs/tools/text/kytea/gcc-O3.patch
new file mode 100644
index 000000000000..71b1d0c3b16e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/kytea/gcc-O3.patch
@@ -0,0 +1,13 @@
+diff --git a/src/lib/kytea-util.cpp b/src/lib/kytea-util.cpp
+index 7c8c4c6..4492df1 100644
+--- a/src/lib/kytea-util.cpp
++++ b/src/lib/kytea-util.cpp
+@@ -49,5 +49,8 @@ void checkValueVecEqual(const std::vector<T> * a, const std::vector<T> * b) {
+ 
++template void checkValueVecEqual(const std::vector<unsigned int> & a, const std::vector<unsigned int> & b);
+ template void checkValueVecEqual(const std::vector<unsigned int> * a, const std::vector<unsigned int> * b);
++template void checkValueVecEqual(const std::vector<short> & a, const std::vector<short> & b);
+ template void checkValueVecEqual(const std::vector<short> * a, const std::vector<short> * b);
+ template void checkValueVecEqual(const std::vector<vector<KyteaString> > * a, const std::vector<vector<KyteaString> > * b);
++template void checkValueVecEqual(const std::vector<int> & a, const std::vector<int> & b);
+ template void checkValueVecEqual(const std::vector<int> * a, const std::vector<int> * b);
diff --git a/nixpkgs/pkgs/tools/text/languagetool/default.nix b/nixpkgs/pkgs/tools/text/languagetool/default.nix
new file mode 100644
index 000000000000..f6ca3a7d760f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/languagetool/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchzip, jre, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "LanguageTool";
+  version = "4.7";
+
+  src = fetchzip {
+    url = "https://www.languagetool.org/download/${pname}-${version}.zip";
+    sha256 = "08200f9vk157jv27lmm89rsf9r05sb6jxcmnphrpz1hxykixd294";
+  };
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ jre ];
+
+  installPhase = ''
+    mkdir -p $out/share
+    mv * $out/share/
+
+    for lt in languagetool{,-commandline,-server};do
+      makeWrapper ${jre}/bin/java $out/bin/$lt \
+        --add-flags "-cp $out/share/ -jar $out/share/$lt.jar"
+    done
+
+    makeWrapper ${jre}/bin/java $out/bin/languagetool-http-server \
+      --add-flags "-cp $out/share/languagetool-server.jar org.languagetool.server.HTTPServer"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://languagetool.org;
+    license = licenses.lgpl21Plus;
+    maintainers = with maintainers; [
+      edwtjo
+    ];
+    description = "A proofreading program for English, French German, Polish, and more";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/link-grammar/default.nix b/nixpkgs/pkgs/tools/text/link-grammar/default.nix
new file mode 100644
index 000000000000..ce9b0bfa8838
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/link-grammar/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, pkgconfig, python3, sqlite, libedit, zlib }:
+
+stdenv.mkDerivation rec {
+  version = "5.7.0";
+  pname = "link-grammar";
+
+  outputs = [ "bin" "out" "dev" "man" ];
+
+  src = fetchurl {
+    url = "http://www.abisource.com/downloads/${pname}/${version}/${pname}-${version}.tar.gz";
+    sha256 = "0ak1v469k56v3511kxxkxvx1nw6zcxcl0f1kcvc82ffacqbr4y96";
+  };
+
+  nativeBuildInputs = [ pkgconfig python3 ];
+  buildInputs = [ sqlite libedit zlib ];
+
+  configureFlags = [
+    "--disable-java-bindings"
+  ];
+
+  meta = with stdenv.lib; {
+    description = "A Grammar Checking library";
+    homepage = https://www.abisource.com/projects/link-grammar/;
+    license = licenses.lgpl21;
+    maintainers = with maintainers; [ jtojnar ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/lv/default.nix b/nixpkgs/pkgs/tools/text/lv/default.nix
new file mode 100644
index 000000000000..3e96858f9c9c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/lv/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "lv";
+  version = "4.51";
+
+  src = fetchurl {
+    url = "mirror://debian/pool/main/l/${pname}/${pname}_${version}.orig.tar.gz";
+    sha256 = "0yf3idz1qspyff1if41xjpqqcaqa8q8icslqlnz0p9dj36gmm5l3";
+  };
+
+  makeFlags = [ "prefix=${placeholder "out"}" ];
+
+  buildInputs = [ ncurses ];
+
+  configurePhase = ''
+    mkdir -p build
+    cd build
+    ../src/configure
+  '';
+
+  preInstall = ''
+    mkdir -p $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Powerful multi-lingual file viewer / grep";
+    homepage = "https://web.archive.org/web/20160310122517/www.ff.iij4u.or.jp/~nrt/lv/";
+    license = licenses.gpl2;
+    platforms = with platforms; linux ++ darwin;
+    maintainers = with maintainers; [ kayhide ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/mairix/default.nix b/nixpkgs/pkgs/tools/text/mairix/default.nix
new file mode 100644
index 000000000000..e72824db6273
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mairix/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl, zlib, bzip2, bison, flex }:
+
+stdenv.mkDerivation rec {
+  name = "mairix-0.24";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/mairix/${name}.tar.gz";
+    sha256 = "0msaxz5c5hf7k1ci16i67m4ynrbrpsxbqzk84nz6z2vnkh3jww50";
+  };
+
+  buildInputs = [ zlib bzip2 bison flex ];
+
+  # https://github.com/rc0/mairix/pull/19
+  patches = [ ./mmap.patch ];
+
+  enableParallelBuilding = true;
+
+  meta = {
+    homepage = http://www.rc0.org.uk/mairix;
+    license = stdenv.lib.licenses.gpl2Plus;
+    description = "Program for indexing and searching email messages stored in maildir, MH or mbox";
+    maintainers = with stdenv.lib.maintainers; [viric];
+    platforms = with stdenv.lib.platforms; all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/mairix/mmap.patch b/nixpkgs/pkgs/tools/text/mairix/mmap.patch
new file mode 100644
index 000000000000..241083f2dde5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mairix/mmap.patch
@@ -0,0 +1,161 @@
+Making mairix work with mbox files over 2GB.
+
+https://github.com/rc0/mairix/pull/19
+
+diff --git a/mairix.h b/mairix.h
+index 2480492..cb25824 100644
+--- a/mairix.h
++++ b/mairix.h
+@@ -327,9 +327,9 @@ enum data_to_rfc822_error {
+   DTR8_BAD_HEADERS, /* corrupt headers */
+   DTR8_BAD_ATTACHMENT /* corrupt attachment (e.g. no body part) */
+ };
+-struct rfc822 *data_to_rfc822(struct msg_src *src, char *data, int length, enum data_to_rfc822_error *error);
+-void create_ro_mapping(const char *filename, unsigned char **data, int *len);
+-void free_ro_mapping(unsigned char *data, int len);
++struct rfc822 *data_to_rfc822(struct msg_src *src, char *data, size_t length, enum data_to_rfc822_error *error);
++void create_ro_mapping(const char *filename, unsigned char **data, size_t *len);
++void free_ro_mapping(unsigned char *data, size_t len);
+ char *format_msg_src(struct msg_src *src);
+ 
+ /* In tok.c */
+diff --git a/mbox.c b/mbox.c
+index ebbfa78..396e27d 100644
+--- a/mbox.c
++++ b/mbox.c
+@@ -816,7 +816,7 @@ void build_mbox_lists(struct database *db, const char *folder_base, /*{{{*/
+         mb->n_old_msgs_valid = mb->n_msgs;
+       } else {
+         unsigned char *va;
+-        int len;
++        size_t len;
+         create_ro_mapping(mb->path, &va, &len);
+         if (va) {
+           rescan_mbox(mb, (char *) va, len);
+@@ -852,7 +852,7 @@ int add_mbox_messages(struct database *db)/*{{{*/
+   int any_new = 0;
+   int N;
+   unsigned char *va;
+-  int valen;
++  size_t valen;
+   enum data_to_rfc822_error error;
+ 
+   for (i=0; i<db->n_mboxen; i++) {
+diff --git a/reader.c b/reader.c
+index 71ac5bd..18f0108 100644
+--- a/reader.c
++++ b/reader.c
+@@ -81,7 +81,8 @@ static void read_toktable2_db(char *data, struct toktable2_db *toktable, int sta
+ /*}}}*/
+ struct read_db *open_db(char *filename)/*{{{*/
+ {
+-  int fd, len;
++  int fd;
++  size_t len;
+   char *data;
+   struct stat sb;
+   struct read_db *result;
+diff --git a/reader.h b/reader.h
+index 9b5dfa3..d709cc4 100644
+--- a/reader.h
++++ b/reader.h
+@@ -138,7 +138,7 @@ struct toktable2_db {/*{{{*/
+ struct read_db {/*{{{*/
+   /* Raw file parameters, needed later for munmap */
+   char *data;
+-  int len;
++  size_t len;
+ 
+   /* Pathname information */
+   int n_msgs;
+diff --git a/rfc822.c b/rfc822.c
+index b411f85..9c8e1a4 100644
+--- a/rfc822.c
++++ b/rfc822.c
+@@ -990,7 +990,7 @@ static void scan_status_flags(const char *s, struct headers *hdrs)/*{{{*/
+ 
+ /*{{{ data_to_rfc822() */
+ struct rfc822 *data_to_rfc822(struct msg_src *src,
+-    char *data, int length,
++    char *data, size_t length,
+     enum data_to_rfc822_error *error)
+ {
+   struct rfc822 *result;
+@@ -1265,7 +1265,7 @@ static struct ro_mapping *add_ro_cache(const char *filename, int fd, size_t len)
+ }
+ #endif /* USE_GZIP_MBOX || USE_BZIP_MBOX */
+ 
+-void create_ro_mapping(const char *filename, unsigned char **data, int *len)/*{{{*/
++void create_ro_mapping(const char *filename, unsigned char **data, size_t *len)/*{{{*/
+ {
+   struct stat sb;
+   int fd;
+@@ -1386,7 +1386,7 @@ comp_error:
+   data_alloc_type = ALLOC_MMAP;
+ }
+ /*}}}*/
+-void free_ro_mapping(unsigned char *data, int len)/*{{{*/
++void free_ro_mapping(unsigned char *data, size_t len)/*{{{*/
+ {
+   int r;
+ 
+@@ -1414,7 +1414,7 @@ static struct msg_src *setup_msg_src(char *filename)/*{{{*/
+ /*}}}*/
+ struct rfc822 *make_rfc822(char *filename)/*{{{*/
+ {
+-  int len;
++  size_t len;
+   unsigned char *data;
+   struct rfc822 *result;
+ 
+diff --git a/search.c b/search.c
+index 18b51ee..97967bc 100644
+--- a/search.c
++++ b/search.c
+@@ -681,7 +681,7 @@ static void mbox_terminate(const unsigned char *data, int len, FILE *out)/*{{{*/
+ static void append_file_to_mbox(const char *path, FILE *out)/*{{{*/
+ {
+   unsigned char *data;
+-  int len;
++  size_t len;
+   create_ro_mapping(path, &data, &len);
+   if (data) {
+     fprintf(out, "From mairix@mairix Mon Jan  1 12:34:56 1970\n");
+@@ -698,8 +698,8 @@ static int had_failed_checksum;
+ 
+ static void get_validated_mbox_msg(struct read_db *db, int msg_index,/*{{{*/
+                                    int *mbox_index,
+-                                   unsigned char **mbox_data, int *mbox_len,
+-                                   unsigned char **msg_data,  int *msg_len)
++                                   unsigned char **mbox_data, size_t *mbox_len,
++                                   unsigned char **msg_data,  size_t *msg_len)
+ {
+   /* msg_data==NULL if checksum mismatches */
+   unsigned char *start;
+@@ -738,7 +738,7 @@ static void append_mboxmsg_to_mbox(struct read_db *db, int msg_index, FILE *out)
+ {
+   /* Need to common up code with try_copy_to_path */
+   unsigned char *mbox_start, *msg_start;
+-  int mbox_len, msg_len;
++  size_t mbox_len, msg_len;
+   int mbox_index;
+ 
+   get_validated_mbox_msg(db, msg_index, &mbox_index, &mbox_start, &mbox_len, &msg_start, &msg_len);
+@@ -759,7 +759,7 @@ static void append_mboxmsg_to_mbox(struct read_db *db, int msg_index, FILE *out)
+ static void try_copy_to_path(struct read_db *db, int msg_index, char *target_path)/*{{{*/
+ {
+   unsigned char *data;
+-  int mbox_len, msg_len;
++  size_t mbox_len, msg_len;
+   int mbi;
+   FILE *out;
+   unsigned char *start;
+@@ -1214,7 +1214,7 @@ static int do_search(struct read_db *db, char **args, char *output_path, int sho
+                 unsigned int mbix, msgix;
+                 int start, len, after_end;
+                 unsigned char *mbox_start, *msg_start;
+-                int mbox_len, msg_len;
++                size_t mbox_len, msg_len;
+                 int mbox_index;
+ 
+                 start = db->mtime_table[i];
diff --git a/nixpkgs/pkgs/tools/text/markdown-pp/default.nix b/nixpkgs/pkgs/tools/text/markdown-pp/default.nix
new file mode 100644
index 000000000000..f479c221b65f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/markdown-pp/default.nix
@@ -0,0 +1,24 @@
+{ fetchFromGitHub, pythonPackages, stdenv }:
+
+with pythonPackages;
+buildPythonApplication rec {
+  pname = "MarkdownPP";
+  version = "1.4";
+  propagatedBuildInputs = [ pillow watchdog ];
+  checkPhase = ''
+    cd test
+    PATH=$out/bin:$PATH ${python}/bin/${python.executable} test.py
+  '';
+  src = fetchFromGitHub {
+    owner = "jreese";
+    repo = "markdown-pp";
+    rev = "v${version}";
+    sha256 = "1xmc0cxvvf6jzr7p4f0hm8icysrd44sy2kgff9b99lr1agwkmysq";
+  };
+  meta = with stdenv.lib; {
+    description = "Preprocessor for Markdown files to generate a table of contents and other documentation needs";
+    license = licenses.mit;
+    homepage = "https://github.com/jreese/markdown-pp";
+    maintainers = with maintainers; [ zgrannan ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/mawk/default.nix b/nixpkgs/pkgs/tools/text/mawk/default.nix
new file mode 100644
index 000000000000..fbfc032445b4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mawk/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "mawk-1.3.4-20190203";
+
+  src = fetchurl {
+    urls = [
+      "ftp://ftp.invisible-island.net/mawk/${name}.tgz"
+      "https://invisible-mirror.net/archives/mawk/${name}.tgz"
+    ];
+    sha256 = "0h5qlslaj5czz4v25hqg8a6kg4c5mlkmdpxhhvpvp1ci08ab7b6s";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Interpreter for the AWK Programming Language";
+    homepage = https://invisible-island.net/mawk/mawk.html;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ ehmry ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/mb2md/default.nix b/nixpkgs/pkgs/tools/text/mb2md/default.nix
new file mode 100644
index 000000000000..91c958cf0675
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mb2md/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchurl, makeWrapper, perlPackages }:
+
+let
+  perlDeps = with perlPackages; [ TimeDate ];
+in
+stdenv.mkDerivation rec {
+  version = "3.20";
+  pname = "mb2md";
+
+  src = fetchurl {
+    url = "http://batleth.sapienti-sat.org/projects/mb2md/mb2md-${version}.pl.gz";
+    sha256 = "0bvkky3c90738h3skd2f1b2yy5xzhl25cbh9w2dy97rs86ssjidg";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perlPackages.perl ];
+
+  unpackPhase = ''
+    sourceRoot=.
+    gzip -d < $src > mb2md.pl
+  '';
+
+  installPhase = ''
+    install -D $sourceRoot/mb2md.pl $out/bin/mb2md
+  '';
+
+  postFixup = ''
+    wrapProgram $out/bin/mb2md \
+      --set PERL5LIB "${perlPackages.makePerlPath perlDeps}"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "mbox to maildir tool";
+    license = licenses.publicDomain;
+    platforms = platforms.all;
+    maintainers = [ maintainers.jb55 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/mdbook/default.nix b/nixpkgs/pkgs/tools/text/mdbook/default.nix
new file mode 100644
index 000000000000..b21523ce863a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mdbook/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub, rustPlatform, CoreServices, darwin }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mdbook";
+  version = "0.3.5";
+
+  src = fetchFromGitHub {
+    owner = "rust-lang-nursery";
+    repo = "mdBook";
+    rev = "v${version}";
+    sha256 = "0gcrv54iswphzxxkmak1c7pmmpakiri6jk50j4bxrsplwjr76f7n";
+  };
+
+  cargoSha256 = "00grlxjz61vxinr18f28ga6610yjxcq48lr75wmyc5wq317j12fn";
+
+  buildInputs = stdenv.lib.optionals stdenv.isDarwin [ CoreServices ];
+
+  meta = with stdenv.lib; {
+    description = "Create books from MarkDown";
+    homepage = https://github.com/rust-lang-nursery/mdbook;
+    license = [ licenses.mpl20 ];
+    maintainers = [ maintainers.havvy ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/mdcat/default.nix b/nixpkgs/pkgs/tools/text/mdcat/default.nix
new file mode 100644
index 000000000000..6b19251acf8e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mdcat/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromGitHub, rustPlatform, pkgconfig, openssl, Security, ansi2html }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mdcat";
+  version = "0.15.0";
+
+  src = fetchFromGitHub {
+    owner = "lunaryorn";
+    repo = pname;
+    rev = "mdcat-${version}";
+    sha256 = "1x9c3cj3y8wvwr74kbz6nrdh61rinr98gcp3hnjpi6c3vg3xx4wh";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ openssl ] ++ stdenv.lib.optional stdenv.isDarwin Security;
+
+  cargoSha256 = "1kc434pa72n9xll2r4ddmd9xdwv3ls36cwsmdry392j41zmics51";
+
+  checkInputs = [ ansi2html ];
+  checkPhase = ''
+    # Skip tests that use the network and that include files.
+    cargo test -- --skip terminal::iterm2 \
+      --skip magic::tests::detect_mimetype_of_svg_image \
+      --skip magic::tests::detect_mimetype_of_png_image \
+      --skip resources::tests::read_url_with_http_url_fails_when_status_404 \
+      --skip resources::tests::read_url_with_http_url_returns_content_when_status_200
+  '';
+
+  meta = with stdenv.lib; {
+    description = "cat for markdown";
+    homepage = https://github.com/lunaryorn/mdcat;
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ davidtwco ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/mecab/base.nix b/nixpkgs/pkgs/tools/text/mecab/base.nix
new file mode 100644
index 000000000000..e97980ef3d2d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mecab/base.nix
@@ -0,0 +1,16 @@
+{ fetchurl }:
+
+{
+    version = "0.996";
+
+    src = fetchurl {
+      url = https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7cENtOXlicTFaRUE;
+      name = "mecab-0.996.tar.gz";
+      sha256 = "0ncwlqxl1hdn1x4v4kr2sn1sbbcgnhdphp0lcvk74nqkhdbk4wz0";
+    };
+
+    buildPhase = ''
+      make
+      make check
+    '';
+}
diff --git a/nixpkgs/pkgs/tools/text/mecab/default.nix b/nixpkgs/pkgs/tools/text/mecab/default.nix
new file mode 100644
index 000000000000..0b7e7e86df1b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mecab/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl, mecab-ipadic }:
+
+let
+  mecab-base = import ./base.nix { inherit fetchurl; };
+in
+stdenv.mkDerivation (mecab-base // {
+    name = "mecab-${mecab-base.version}";
+
+    postInstall = ''
+      sed -i 's|^dicdir = .*$|dicdir = ${mecab-ipadic}|' "$out/etc/mecabrc"
+    '';
+
+    meta = with stdenv.lib; {
+      description = "Japanese morphological analysis system";
+      homepage = http://taku910.github.io/mecab/;
+      license = licenses.bsd3;
+      platforms = platforms.unix;
+      maintainers = with maintainers; [ auntie ];
+    };
+})
diff --git a/nixpkgs/pkgs/tools/text/mecab/ipadic.nix b/nixpkgs/pkgs/tools/text/mecab/ipadic.nix
new file mode 100644
index 000000000000..3b011787c7cb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mecab/ipadic.nix
@@ -0,0 +1,18 @@
+{ stdenv, fetchurl, mecab-nodic }:
+
+stdenv.mkDerivation {
+  pname = "mecab-ipadic";
+  version = "2.7.0-20070801";
+
+  src = fetchurl {
+    url = https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7MWVlSDBCSXZMTXM;
+    name = "mecab-ipadic-2.7.0-20070801.tar.gz";
+    sha256 = "08rmkvj0f0x6jq0axrjw2y5nam0mavv6x77dp9v4al0wi1ym4bxn";
+  };
+
+  buildInputs = [ mecab-nodic ];
+
+  configurePhase = ''
+    ./configure --with-dicdir="$out"
+  '';
+}
diff --git a/nixpkgs/pkgs/tools/text/mecab/nodic.nix b/nixpkgs/pkgs/tools/text/mecab/nodic.nix
new file mode 100644
index 000000000000..1cbc31be4ee1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mecab/nodic.nix
@@ -0,0 +1,8 @@
+{ stdenv, fetchurl }:
+
+let
+  mecab-base = import ./base.nix { inherit fetchurl; };
+in
+stdenv.mkDerivation (mecab-base // {
+    name = "mecab-nodic-${mecab-base.version}";
+})
diff --git a/nixpkgs/pkgs/tools/text/miller/default.nix b/nixpkgs/pkgs/tools/text/miller/default.nix
new file mode 100644
index 000000000000..1fc462bad8b0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/miller/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, flex, libtool }:
+
+stdenv.mkDerivation rec {
+  pname = "miller";
+
+  version = "5.6.2";
+
+  src = fetchFromGitHub {
+    owner = "johnkerl";
+    repo = "miller";
+    rev = "v${version}";
+    sha256 = "1xajaab02y9bysanfn4i5c77q1zfmjzdswyvw2mzbidsxnjsgn6l";
+  };
+
+  nativeBuildInputs = [ autoreconfHook flex libtool ];
+
+  meta = with stdenv.lib; {
+    description = "Miller is like awk, sed, cut, join, and sort for name-indexed data such as CSV, TSV, and tabular JSON.";
+    homepage    = "http://johnkerl.org/miller/";
+    license     = licenses.bsd2;
+    maintainers = with maintainers; [ mstarzyk ];
+    platforms   = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/mir-qualia/default.nix b/nixpkgs/pkgs/tools/text/mir-qualia/default.nix
new file mode 100644
index 000000000000..0a9b3777783b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mir-qualia/default.nix
@@ -0,0 +1,21 @@
+{ lib, pythonPackages, fetchurl }:
+
+pythonPackages.buildPythonApplication rec {
+  pname = "mir.qualia";
+  version = "2.0.0";
+  doCheck = false; # 2.0.0-released pytests are broken
+
+  buildInputs = with pythonPackages; [ pytest ];
+
+  src = fetchurl {
+    url = "mirror://pypi/m/mir.qualia/mir.qualia-${version}.tar.gz";
+    sha256 = "1ybq6jb5clh9hw0sp3idp4hjv2gkm9yiaph48gcc208affflc8m9";
+  };
+
+  meta = {
+    description = "Dynamically enable sections of config files";
+    homepage = https://github.com/darkfeline/mir.qualia;
+    license = lib.licenses.asl20;
+    maintainers = [ lib.maintainers.srhb ] ;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/mpage/default.nix b/nixpkgs/pkgs/tools/text/mpage/default.nix
new file mode 100644
index 000000000000..6665b377ccf5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/mpage/default.nix
@@ -0,0 +1,29 @@
+{ fetchurl, stdenv }:
+
+stdenv.mkDerivation rec {
+  name = "mpage-2.5.7";
+  src = fetchurl {
+    url = "http://www.mesa.nl/pub/mpage/${name}.tgz";
+    sha256 = "1zn37r5xrvjgjbw2bdkc0r7s6q8b1krmcryzj0yf0dyxbx79rasi";
+  };
+
+  patchPhase = ''
+    sed -i "Makefile" -e "s|^ *PREFIX *=.*$|PREFIX = $out|g"
+  '';
+
+  meta = {
+    description = "Many-to-one page printing utility";
+
+    longDescription = ''
+      Mpage reads plain text files or PostScript documents and prints
+      them on a PostScript printer with the text reduced in size so
+      that several pages appear on one sheet of paper.  This is useful
+      for viewing large printouts on a small amount of paper.  It uses
+      ISO 8859.1 to print 8-bit characters.
+    '';
+
+    license = "liberal";  # a non-copyleft license, see `Copyright' file
+    homepage = http://www.mesa.nl/pub/mpage/;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/multitran/data/default.nix b/nixpkgs/pkgs/tools/text/multitran/data/default.nix
new file mode 100644
index 000000000000..d4b4902303b6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/multitran/data/default.nix
@@ -0,0 +1,25 @@
+{stdenv, fetchurl} :
+
+# This package requires a locale ru_RU.cp1251 locale entry.
+# Waiting for a better idea, I created it modifying a store file using:
+#   localedef -f CP1251 -i ru_RU ru_RU.CP1251
+# The store file mentioned is in "${glibc.out}/lib/locale/locale-archive"
+
+stdenv.mkDerivation {
+  name = "multitran-data-0.3";
+  src = fetchurl {
+      url = mirror://sourceforge/multitran/multitran-data.tar.bz2;
+      sha256 = "9c2ff5027c2fe72b0cdf056311cd7543f447feb02b455982f20d4a3966b7828c";
+  };
+
+  patchPhase = ''
+    sed -i -e 's@\$(DESTDIR)/usr@'$out'@' Makefile
+  '';
+
+  meta = {
+    homepage = http://multitran.sourceforge.net/;
+    description = "Multitran data english-russian";
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/multitran/libbtree/default.nix b/nixpkgs/pkgs/tools/text/multitran/libbtree/default.nix
new file mode 100644
index 000000000000..ae4ece899a4c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/multitran/libbtree/default.nix
@@ -0,0 +1,19 @@
+{stdenv, fetchurl} :
+
+stdenv.mkDerivation {
+  name = "libbtree-0.0.1alpha2";
+  src = fetchurl {
+    url = mirror://sourceforge/multitran/libbtree-0.0.1alpha2.tar.bz2;
+    sha256 = "34a584e45058950337ff9342693b6739b52c3ce17e66440526c4bd6f9575802c";
+  };
+  patchPhase = ''
+    sed -i -e 's@\$(DESTDIR)/usr@'$out'@' src/Makefile;
+  '';
+
+  meta = {
+    homepage = http://multitran.sourceforge.net/;
+    description = "Multitran lib: library for reading Multitran's BTREE database format";
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/multitran/libfacet/default.nix b/nixpkgs/pkgs/tools/text/multitran/libfacet/default.nix
new file mode 100644
index 000000000000..4470511f6163
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/multitran/libfacet/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl, libmtsupport }:
+
+stdenv.mkDerivation {
+  name = "libfacet-0.0.1alpha2";
+  
+  src = fetchurl {
+    url = mirror://sourceforge/multitran/libfacet-0.0.1alpha2.tar.bz2;
+    sha256 = "dc53351c4035a3c27dc6c1d0410e808346fbc107e7e7c112ec65c59d0df7a144";
+  };
+
+  buildInputs = [ libmtsupport ];
+
+  patchPhase = ''
+    sed -i -e 's@\$(DESTDIR)/usr@'$out'@' \
+      -e 's@/usr/include/mt/support@${libmtsupport}/include/mt/support@' \
+      src/Makefile;
+  '';
+
+  meta = {
+    homepage = http://multitran.sourceforge.net/;
+    description = "Multitran lib: enchanced locale facets";
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/multitran/libmtquery/default.nix b/nixpkgs/pkgs/tools/text/multitran/libmtquery/default.nix
new file mode 100644
index 000000000000..baccdfdedba5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/multitran/libmtquery/default.nix
@@ -0,0 +1,29 @@
+{stdenv, fetchurl, libmtsupport, libfacet, libbtree, multitrandata } :
+
+stdenv.mkDerivation {
+  name = "libmtquery-0.0.1alpha3";
+  src = fetchurl {
+    url = mirror://sourceforge/multitran/libmtquery-0.0.1alpha3.tar.bz2;
+    sha256 = "e24c7c15772445f1b14871928d84dd03cf93bd88f9d2b2ed1bf0257c2cf2b15e";
+  };
+
+  buildInputs = [ libmtsupport libfacet libbtree multitrandata ];
+
+  NIX_LDFLAGS = "-lbtree";
+
+  patchPhase = ''
+    sed -i -e 's@\$(DESTDIR)/usr@'$out'@' \
+      -e 's@/usr/include/mt/support@${libmtsupport}/include/mt/support@' \
+      -e 's@/usr/include/btree@${libbtree}/include/btree@' \
+      -e 's@/usr/include/facet@${libfacet}/include/facet@' \
+      src/Makefile testsuite/Makefile;
+    sed -i -e 's@/usr/share/multitran@${multitrandata}/share/multitran@' src/config.cc
+  '';
+
+  meta = {
+    homepage = http://multitran.sourceforge.net/;
+    description = "Multitran lib: main engine to query translations";
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/multitran/libmtsupport/default.nix b/nixpkgs/pkgs/tools/text/multitran/libmtsupport/default.nix
new file mode 100644
index 000000000000..9b214e6b5027
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/multitran/libmtsupport/default.nix
@@ -0,0 +1,19 @@
+{stdenv, fetchurl} :
+
+stdenv.mkDerivation {
+  name = "libmtsupport-0.0.1alpha2";
+  src = fetchurl {
+    url = mirror://sourceforge/multitran/libmtsupport-0.0.1alpha2.tar.bz2;
+    sha256 = "481f0f1ec15d7274f1e4eb93e7d060df10a181efd037eeff5e8056d283a9298b";
+  };
+  patchPhase = ''
+    sed -i -e 's@\$(DESTDIR)/usr@'$out'@' src/Makefile;
+  '';
+
+  meta = {
+    homepage = http://multitran.sourceforge.net/;
+    description = "Multitran lib: basic useful functions";
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/multitran/mtutils/default.nix b/nixpkgs/pkgs/tools/text/multitran/mtutils/default.nix
new file mode 100644
index 000000000000..ca65c567c661
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/multitran/mtutils/default.nix
@@ -0,0 +1,32 @@
+{stdenv, fetchurl, libmtsupport, libfacet, libbtree, libmtquery, help2man} :
+
+stdenv.mkDerivation {
+  name = "mt-utils-0.0.1alpha3";
+  src = fetchurl {
+      url = mirror://sourceforge/multitran/mt-utils-0.0.1alpha3.tar.bz2;
+      sha256 = "e407702c90c5272882386914e1eeca5f6c5039393af9a44538536b94867b0a0e";
+  };
+
+  buildInputs = [ libmtsupport libfacet libbtree libmtquery help2man ];
+
+  patchPhase = ''
+    sed -i -e 's@\$(DESTDIR)/usr@'$out'@' \
+      -e 's@/usr/include/mt/support@${libmtsupport}/include/mt/support@' \
+      -e 's@/usr/include/btree@${libbtree}/include/btree@' \
+      -e 's@/usr/include/facet@${libfacet}/include/facet@' \
+      -e 's@/usr/include/mt/query@${libmtquery}/include/mt/query@' \
+      -e 's@-lmtquery@-lmtquery -lmtsupport -lfacet@' \
+      src/Makefile;
+    # Fixing multibyte locale output
+    sed -i -e 's@message.length()@message.length()*5@' \
+      src/converter.cc;
+  '';
+
+  meta = {
+    homepage = http://multitran.sourceforge.net/;
+    description = "Multitran: simple command line utilities for dictionary maintenance";
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = with stdenv.lib.maintainers; [viric];
+    platforms = with stdenv.lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/namazu/default.nix b/nixpkgs/pkgs/tools/text/namazu/default.nix
new file mode 100644
index 000000000000..59cfc86efbf3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/namazu/default.nix
@@ -0,0 +1,44 @@
+{ fetchurl, stdenv, perl }:
+
+stdenv.mkDerivation rec {
+  name = "namazu-2.0.21";
+
+  src = fetchurl {
+    url = "http://namazu.org/stable/${name}.tar.gz";
+    sha256 = "1xvi7hrprdchdpzhg3fvk4yifaakzgydza5c0m50h1yvg6vay62w";
+  };
+
+  buildInputs = [ perl ];
+
+  # First install the `File::MMagic' Perl module.
+  preConfigure = ''
+    ( cd File-MMagic &&                              \
+      perl Makefile.PL                               \
+        LIB="$out/${perl.libPrefix}/${perl.version}" \
+        INSTALLSITEMAN3DIR="$out/man" &&             \
+      make && make install )
+    export PERL5LIB="$out/${perl.libPrefix}/${perl.version}:$PERL5LIB"
+  '';
+
+  # FIXME: The `tests/namazu-6' test fails on GNU/Linux, presumably because
+  # phrase searching is broken somehow.  However, it doesn't fail on other
+  # platforms.
+  doCheck = !stdenv.isLinux;
+
+  meta = {
+    description = "Full-text search engine";
+
+    longDescription = ''
+      Namazu is a full-text search engine intended for easy use.  Not
+      only does it work as a small or medium scale Web search engine,
+      but also as a personal search system for email or other files.
+    '';
+
+    license = stdenv.lib.licenses.gpl2Plus;
+    homepage = http://namazu.org/;
+
+    platforms = stdenv.lib.platforms.gnu ++ stdenv.lib.platforms.linux;  # arbitrary choice
+    maintainers = [ ];
+    broken = true; # File-MMagic is not compatible with our Perl version
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/nawk/default.nix b/nixpkgs/pkgs/tools/text/nawk/default.nix
new file mode 100644
index 000000000000..a746c4544350
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/nawk/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchurl, yacc }:
+
+stdenv.mkDerivation rec {
+  name = "nawk-20121220";
+
+  src = fetchurl {
+    url = "https://www.cs.princeton.edu/~bwk/btl.mirror/awk.tar.gz";
+    sha256 = "10wvdn7xwc5bbp5h7l0b9fxby3bds21n8a34z54i8kjsbhb95h4d";
+  };
+
+  nativeBuildInputs = [ yacc ];
+
+  unpackPhase = ''
+    mkdir build
+    cd build
+    tar xvf ${src}
+  '';
+
+  patchPhase = ''
+    substituteInPlace ./makefile \
+    --replace "YACC = yacc -d -S" ""
+  '';
+
+  installPhase = ''
+    install -Dm755 a.out "$out/bin/nawk"
+    install -Dm644 awk.1 "$out/share/man/man1/nawk.1"
+  '';
+
+  meta = {
+    description = "The one, true implementation of AWK";
+    longDescription = ''
+       This is the version of awk described in "The AWK Programming
+       Language", by Al Aho, Brian Kernighan, and Peter Weinberger
+       (Addison-Wesley, 1988, ISBN 0-201-07981-X).
+    '';
+    homepage = https://www.cs.princeton.edu/~bwk/btl.mirror/;
+    license = stdenv.lib.licenses.mit;
+    maintainers = [ stdenv.lib.maintainers.konimex ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/nkf/default.nix b/nixpkgs/pkgs/tools/text/nkf/default.nix
new file mode 100644
index 000000000000..8a314d448439
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/nkf/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "nkf";
+  version = "2.1.5";
+
+  src = fetchurl {
+    url = "mirror://osdn/nkf/70406/${pname}-${version}.tar.gz";
+    sha256 = "0i5dbcb9aipwr8ym4mhvgf1in3frl6y8h8x96cprz9s7b11xz9yi";
+  };
+
+  makeFlags = [ "prefix=$(out)" ];
+
+  meta = {
+    description = "Tool for converting encoding of Japanese text";
+    homepage = "https://nkf.osdn.jp/";
+    license = stdenv.lib.licenses.zlib;
+    platforms = stdenv.lib.platforms.unix;
+    maintainers = [ stdenv.lib.maintainers.auntie ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/numdiff/default.nix b/nixpkgs/pkgs/tools/text/numdiff/default.nix
new file mode 100644
index 000000000000..f7543dc0f70e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/numdiff/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchurl }:
+
+
+stdenv.mkDerivation rec {
+  pname = "numdiff";
+  version = "5.9.0";
+
+  src = fetchurl {
+    url = "mirror://savannah/numdiff/numdiff-${version}.tar.gz";
+    sha256 = "1vzmjh8mhwwysn4x4m2vif7q2k8i19x8azq7pzmkwwj4g48lla47";
+  };
+  meta = with stdenv.lib; {
+    description = ''
+      A little program that can be used to compare putatively similar files
+      line by line and field by field, ignoring small numeric differences
+      or/and different numeric formats
+    '';
+    homepage = https://www.nongnu.org/numdiff/;
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [];
+    platforms = platforms.gnu ++ platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/ocrmypdf/default.nix b/nixpkgs/pkgs/tools/text/ocrmypdf/default.nix
new file mode 100644
index 000000000000..13353daa1711
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ocrmypdf/default.nix
@@ -0,0 +1,105 @@
+{ fetchFromGitHub
+, ghostscript
+, img2pdf
+, jbig2enc
+, leptonica
+, pngquant
+, python3
+, python3Packages
+, qpdf
+, stdenv
+, tesseract4
+, unpaper
+}:
+
+let
+  inherit (python3Packages) buildPythonApplication;
+
+  runtimeDeps = with python3Packages; [
+    ghostscript
+    jbig2enc
+    leptonica
+    pngquant
+    qpdf
+    tesseract4
+    unpaper
+    pillow
+  ];
+
+in buildPythonApplication rec {
+  pname = "ocrmypdf";
+  version = "9.2.0";
+  disabled = ! python3Packages.isPy3k;
+
+  src = fetchFromGitHub {
+    owner = "jbarlow83";
+    repo = "OCRmyPDF";
+    rev = "v${version}";
+    sha256 = "1mvc6x5nn242z65pxv39ch71vaikgi89bb0sjbfy2jbw91vk41xa";
+  };
+
+  nativeBuildInputs = with python3Packages; [
+    pytestrunner
+    setuptools
+    setuptools-scm-git-archive
+    setuptools_scm
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    cffi
+    chardet
+    img2pdf
+    pdfminer
+    pikepdf
+    pillow
+    reportlab
+    setuptools
+    tqdm
+  ];
+
+  checkInputs = with python3Packages; [
+    pypdf2
+    pytest
+    pytest-helpers-namespace
+    pytest_xdist
+    pytestcov
+    pytestrunner
+    python-xmp-toolkit
+    setuptools
+  ] ++ runtimeDeps;
+
+  postPatch = ''
+    substituteInPlace src/ocrmypdf/leptonica.py \
+      --replace "lept = ffi.dlopen(_libpath)" \
+      'lept = ffi.dlopen("${stdenv.lib.makeLibraryPath [leptonica]}/liblept${stdenv.hostPlatform.extensions.sharedLibrary}")'
+  '';
+
+  # The tests take potentially 20+ minutes, depending on machine
+  doCheck = false;
+
+  # These tests fail and it might be upstream problem... or packaging. :)
+  # development is happening on macos and the pinned test versions are
+  # significantly newer than nixpkgs has. Program still works...
+  # (to the extent I've used it) -- Kiwi
+  checkPhase = ''
+    export HOME=$TMPDIR
+    pytest -k 'not test_force_ocr_on_pdf_with_no_images \
+    and not test_tesseract_crash \
+    and not test_tesseract_crash_autorotate \
+    and not test_ghostscript_pdfa_failure \
+    and not test_gs_render_failure \
+    and not test_gs_raster_failure \
+    and not test_bad_utf8 \
+    and not test_old_unpaper'
+  '';
+
+  makeWrapperArgs = [ "--prefix PATH : ${stdenv.lib.makeBinPath [ ghostscript jbig2enc pngquant qpdf tesseract4 unpaper ]}" ];
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/jbarlow83/OCRmyPDF";
+    description = "Adds an OCR text layer to scanned PDF files, allowing them to be searched";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.kiwi ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/odt2txt/default.nix b/nixpkgs/pkgs/tools/text/odt2txt/default.nix
new file mode 100644
index 000000000000..69277d0412df
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/odt2txt/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchurl, zlib, libiconv }:
+
+stdenv.mkDerivation rec {
+  pname = "odt2txt";
+  version = "0.5";
+
+  src = fetchurl {
+    url = "${meta.homepage}/archive/v${version}.tar.gz";
+    sha256 = "23a889109ca9087a719c638758f14cc3b867a5dcf30a6c90bf6a0985073556dd";
+  };
+
+  configurePhase="export makeFlags=\"DESTDIR=$out\"";
+
+  buildInputs = [ zlib libiconv ];
+
+  meta = {
+    description = "Simple .odt to .txt converter";
+    homepage = https://github.com/dstosberg/odt2txt;
+    platforms = stdenv.lib.platforms.all;
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/opencc/default.nix b/nixpkgs/pkgs/tools/text/opencc/default.nix
new file mode 100644
index 000000000000..a2a02049d267
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/opencc/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl, cmake, python }:
+
+stdenv.mkDerivation {
+  name = "opencc-1.0.5";
+  src = fetchurl {
+    url = "https://github.com/BYVoid/OpenCC/archive/ver.1.0.5.tar.gz";
+    sha256 = "1ce1649ba280cfc88bb76e740be5f54b29a9c034400c97a3ae211c37d7030705";
+  };
+
+  buildInputs = [ cmake python ];
+
+  makeFlags = [
+    # let intermediate tools find intermediate library
+    "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(CURDIR)/src"
+  ];
+
+  # Parallel building occasionaly fails with: Error copying file "/tmp/nix-build-opencc-1.0.5.drv-0/OpenCC-ver.1.0.5/build/src/libopencc.so.1.0.0" to "/tmp/nix-build-opencc-1.0.5.drv-0/OpenCC-ver.1.0.5/build/src/tools".
+  enableParallelBuilding = false;
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/BYVoid/OpenCC;
+    license = licenses.asl20;
+    description = "A project for conversion between Traditional and Simplified Chinese";
+    longDescription = ''
+      Open Chinese Convert (OpenCC) is an opensource project for conversion between
+      Traditional Chinese and Simplified Chinese, supporting character-level conversion,
+      phrase-level conversion, variant conversion and regional idioms among Mainland China,
+      Taiwan and Hong kong.
+    '';
+    maintainers = [ maintainers.sifmelcara ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/papertrail/Gemfile b/nixpkgs/pkgs/tools/text/papertrail/Gemfile
new file mode 100755
index 000000000000..199cd1422aaa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/papertrail/Gemfile
@@ -0,0 +1,4 @@
+# frozen_string_literal: true
+source "https://rubygems.org"
+
+gem "papertrail"
diff --git a/nixpkgs/pkgs/tools/text/papertrail/Gemfile.lock b/nixpkgs/pkgs/tools/text/papertrail/Gemfile.lock
new file mode 100644
index 000000000000..0d1b2a6fbe6d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/papertrail/Gemfile.lock
@@ -0,0 +1,17 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    ansi (1.5.0)
+    chronic (0.10.2)
+    papertrail (0.10.1)
+      ansi (~> 1.5)
+      chronic (~> 0.10)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  papertrail
+
+BUNDLED WITH
+   1.14.4
diff --git a/nixpkgs/pkgs/tools/text/papertrail/default.nix b/nixpkgs/pkgs/tools/text/papertrail/default.nix
new file mode 100644
index 000000000000..d20727f725a2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/papertrail/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, bundlerEnv, ruby, bundlerUpdateScript }:
+
+let
+  papertrail-env = bundlerEnv {
+    name = "papertrail-env";
+    inherit ruby;
+    gemfile = ./Gemfile;
+    lockfile = ./Gemfile.lock;
+    gemset = ./gemset.nix;
+  };
+in stdenv.mkDerivation {
+  name = "papertrail-${(import ./gemset.nix).papertrail.version}";
+
+  phases = [ "installPhase" ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    ln -s ${papertrail-env}/bin/papertrail $out/bin/papertrail
+  '';
+
+  passthru.updateScript = bundlerUpdateScript "papertrail";
+
+  meta = with stdenv.lib; {
+    description = "Command-line client for Papertrail log management service";
+    homepage    = https://github.com/papertrail/papertrail-cli/;
+    license     = licenses.mit;
+    maintainers = with maintainers; [ nicknovitski ];
+    platforms   = ruby.meta.platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/papertrail/gemset.nix b/nixpkgs/pkgs/tools/text/papertrail/gemset.nix
new file mode 100644
index 000000000000..91bfe3198963
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/papertrail/gemset.nix
@@ -0,0 +1,26 @@
+{
+  ansi = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14ims9zfal4gs2wpx2m5rd8zsrl2k794d359shkrsgg3fhr2a22l";
+      type = "gem";
+    };
+    version = "1.5.0";
+  };
+  chronic = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hrdkn4g8x7dlzxwb1rfgr8kw3bp4ywg5l4y4i9c2g5cwv62yvvn";
+      type = "gem";
+    };
+    version = "0.10.2";
+  };
+  papertrail = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0vb7bh7qh5hr4v3w711bl0yrr3rlhz5c3h3qx3fq31dr5y4100v7";
+      type = "gem";
+    };
+    version = "0.10.1";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/text/par/default.nix b/nixpkgs/pkgs/tools/text/par/default.nix
new file mode 100644
index 000000000000..88325c38731d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/par/default.nix
@@ -0,0 +1,39 @@
+{stdenv, fetchurl, fetchpatch}:
+
+stdenv.mkDerivation {
+  pname = "par";
+  version = "1.52";
+
+  src = fetchurl {
+    url = http://www.nicemice.net/par/Par152.tar.gz;
+    sha256 = "33dcdae905f4b4267b4dc1f3efb032d79705ca8d2122e17efdecfd8162067082";
+  };
+
+  patches = [
+    # A patch by Jérôme Pouiller that adds support for multibyte
+    # charsets (like UTF-8), plus Debian packaging.
+    (fetchpatch {
+      url = "http://sysmic.org/dl/par/par-1.52-i18n.4.patch";
+      sha256 = "0alw44lf511jmr38jnh4j0mpp7vclgy0grkxzqf7q158vzdb6g23";
+    })
+  ];
+
+  buildPhase = ''make -f protoMakefile'';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp par $out/bin
+
+    mkdir -p $out/share/man/man1
+    cp  par.1 $out/share/man/man1
+  '';
+
+
+  meta = with stdenv.lib; {
+    homepage = http://www.nicemice.net/par/;
+    description = "Paragraph reflow for email";
+    platforms = platforms.unix;
+    # See https://fedoraproject.org/wiki/Licensing/Par for license details
+    license = licenses.free;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/patchutils/0.3.3.nix b/nixpkgs/pkgs/tools/text/patchutils/0.3.3.nix
new file mode 100644
index 000000000000..f50354199c3f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/patchutils/0.3.3.nix
@@ -0,0 +1,7 @@
+{ callPackage, ... } @ args:
+
+callPackage ./generic.nix (args // {
+  version = "0.3.3";
+  sha256 = "0g5df00cj4nczrmr4k791l7la0sq2wnf8rn981fsrz1f3d2yix4i";
+  patches = [ ./drop-comments.patch ]; # we would get into a cycle when using fetchpatch on this one
+})
diff --git a/nixpkgs/pkgs/tools/text/patchutils/default.nix b/nixpkgs/pkgs/tools/text/patchutils/default.nix
new file mode 100644
index 000000000000..902773f40fa4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/patchutils/default.nix
@@ -0,0 +1,6 @@
+{ callPackage, ... } @ args:
+
+callPackage ./generic.nix (args // {
+  version = "0.3.4";
+  sha256 = "0xp8mcfyi5nmb5a2zi5ibmyshxkb1zv1dgmnyn413m7ahgdx8mfg";
+})
diff --git a/nixpkgs/pkgs/tools/text/patchutils/drop-comments.patch b/nixpkgs/pkgs/tools/text/patchutils/drop-comments.patch
new file mode 100644
index 000000000000..e02693a5683d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/patchutils/drop-comments.patch
@@ -0,0 +1,84 @@
+From 58987954647f51dc42fb13b7759923c6170dd905 Mon Sep 17 00:00:00 2001
+From: Tim Waugh <twaugh@redhat.com>
+Date: Fri, 9 May 2014 16:23:27 +0100
+Subject: Make --clean drop comments after '@@' lines as well (trac #29).
+
+
+diff --git a/Makefile.am b/Makefile.am
+index 99ad2a3..f3c6dbc 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -198,6 +198,7 @@ TESTS = tests/newline1/run-test \
+ 	tests/convert1/run-test \
+ 	tests/convert2/run-test \
+ 	tests/clean1/run-test \
++	tests/clean2/run-test \
+ 	tests/stdin/run-test
+ 
+ # These ones don't work yet.
+diff --git a/src/filterdiff.c b/src/filterdiff.c
+index 383e72b..6ca2316 100644
+--- a/src/filterdiff.c
++++ b/src/filterdiff.c
+@@ -2,7 +2,7 @@
+  * filterdiff - extract (or exclude) a diff from a diff file
+  * lsdiff - show which files are modified by a patch
+  * grepdiff - show files modified by a patch containing a regexp
+- * Copyright (C) 2001, 2002, 2003, 2004, 2008, 2009, 2011 Tim Waugh <twaugh@redhat.com>
++ * Copyright (C) 2001, 2002, 2003, 2004, 2008, 2009, 2011, 2013, 2014 Tim Waugh <twaugh@redhat.com>
+  *
+  * This program is free software; you can redistribute it and/or modify
+  * it under the terms of the GNU General Public License as published by
+@@ -408,7 +408,8 @@ do_unified (FILE *f, char *header[2], int match, char **line,
+ 							 " Hunk #%lu, %s",
+ 							 hunknum, bestname);
+ 
+-					fputs (trailing, output_to);
++					fputs (clean_comments ? "\n" : trailing,
++					       output_to);
+ 					break;
+ 				case Before:
+ 					// Note the initial line number
+diff --git a/tests/clean2/run-test b/tests/clean2/run-test
+new file mode 100755
+index 0000000..42320df
+--- /dev/null
++++ b/tests/clean2/run-test
+@@ -0,0 +1,34 @@
++#!/bin/sh
++
++# This is a filterdiff(1) testcase.
++# Test: Make sure --clean removes hunk-level comments.
++
++
++. ${top_srcdir-.}/tests/common.sh
++
++cat << EOF > diff
++non-diff line
++--- a/file1
+++++ b/file1
++@@ -0,0 +1 @@ this is a hunk-level comment
+++a
++EOF
++
++${FILTERDIFF} --clean diff 2>errors >filtered || exit 1
++[ -s errors ] && exit 1
++
++cat << EOF | cmp - filtered || exit 1
++--- a/file1
+++++ b/file1
++@@ -0,0 +1 @@
+++a
++EOF
++
++${FILTERDIFF} --clean -x file1 diff 2>errors >filtered || exit 1
++[ -s errors ] && exit 1
++cat << EOF | cmp - filtered || exit 1
++--- a/file1
+++++ b/file1
++@@ -0,0 +1 @@
+++a
++EOF
+-- 
+cgit v0.10.1
+
diff --git a/nixpkgs/pkgs/tools/text/patchutils/generic.nix b/nixpkgs/pkgs/tools/text/patchutils/generic.nix
new file mode 100644
index 000000000000..9d7ac4b53f05
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/patchutils/generic.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, perl
+, version, sha256, patches ? []
+, ...
+}:
+stdenv.mkDerivation rec {
+  pname = "patchutils";
+  inherit version patches;
+
+  src = fetchurl {
+    url = "http://cyberelk.net/tim/data/patchutils/stable/${pname}-${version}.tar.xz";
+    inherit sha256;
+  };
+
+  buildInputs = [ perl ];
+  hardeningDisable = [ "format" ];
+
+  doCheck = false; # fails
+
+  meta = with stdenv.lib; {
+    description = "Tools to manipulate patch files";
+    homepage = http://cyberelk.net/tim/software/patchutils;
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+    executables = [ "combinediff" "dehtmldiff" "editdiff" "espdiff"
+      "filterdiff" "fixcvsdiff" "flipdiff" "grepdiff" "interdiff" "lsdiff"
+      "recountdiff" "rediff" "splitdiff" "unwrapdiff" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/peco/default.nix b/nixpkgs/pkgs/tools/text/peco/default.nix
new file mode 100644
index 000000000000..9407e68ed165
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/peco/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "peco";
+  version = "0.5.3";
+
+  goPackagePath = "github.com/peco/peco";
+  subPackages = [ "cmd/peco" ];
+
+  src = fetchFromGitHub {
+    owner = "peco";
+    repo = "peco";
+    rev = "v${version}";
+    sha256 = "1m3s1jrrhqccgg3frfnq6iprwwi97j13wksckpcyrg51z6y5q041";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    description = "Simplistic interactive filtering tool";
+    homepage = https://github.com/peco/peco;
+    license = licenses.mit;
+    # peco should work on Windows or other POSIX platforms, but the go package
+    # declares only linux and darwin.
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/peco/deps.nix b/nixpkgs/pkgs/tools/text/peco/deps.nix
new file mode 100644
index 000000000000..29bae2de5b51
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/peco/deps.nix
@@ -0,0 +1,57 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "github.com/google/btree";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/btree";
+      rev = "0c3044bc8bada22db67b93f5760fe3f05d6a5c25";
+      sha256 = "05rdnf2c9r0yicg17zsq58i0sm32p0lk8zdnb7nhr0v5hqldvps4";
+    };
+  }
+  {
+    goPackagePath = "github.com/jessevdk/go-flags";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jessevdk/go-flags";
+      rev = "8bc97d602c3bfeb5fc6fc9b5a9c898f245495637";
+      sha256 = "1h3il3ycgd54flbyqys4hm4gzx1lyn5ja1k79f2y7zbs6y0mf1lz";
+    };
+  }
+  {
+    goPackagePath = "github.com/lestrrat/go-pdebug";
+    fetch = {
+      type = "git";
+      url = "https://github.com/lestrrat/go-pdebug";
+      rev = "2e6eaaa5717f81bda41d27070d3c966f40a1e75f";
+      sha256 = "05dx1f1yln47nazyi50zix82xbnyva3hily4gh5gaz021h01npax";
+    };
+  }
+  {
+    goPackagePath = "github.com/mattn/go-runewidth";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-runewidth";
+      rev = "737072b4e32b7a5018b4a7125da8d12de90e8045";
+      sha256 = "09ni8bmj6p2b774bdh6mfcxl03bh5sqk860z03xpb6hv6yfxqkjm";
+    };
+  }
+  {
+    goPackagePath = "github.com/nsf/termbox-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/nsf/termbox-go";
+      rev = "e2050e41c8847748ec5288741c0b19a8cb26d084";
+      sha256 = "181b1df2b6fcn5wizq2qqxl1kwqbih5k15n08rx3bcz36q34n23s";
+    };
+  }
+  {
+    goPackagePath = "github.com/pkg/errors";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pkg/errors";
+      rev = "248dadf4e9068a0b3e79f02ed0a610d935de5302";
+      sha256 = "03l80r0i9bxl0vz363w62k4a8apzglgbrz6viwym3044sxkl1qks";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/text/platinum-searcher/default.nix b/nixpkgs/pkgs/tools/text/platinum-searcher/default.nix
new file mode 100644
index 000000000000..342377b85aea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/platinum-searcher/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "the_platinum_searcher";
+  version = "2.1.5";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/monochromegane/the_platinum_searcher";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "monochromegane";
+    repo = "the_platinum_searcher";
+    sha256 = "1y7kl3954dimx9hp2bf1vjg1h52hj1v6cm4f5nhrqzwrawp0b6q0";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/monochromegane/the_platinum_searcher;
+    description = "A code search tool similar to ack and the_silver_searcher(ag).";
+    platforms = platforms.all;
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/platinum-searcher/deps.nix b/nixpkgs/pkgs/tools/text/platinum-searcher/deps.nix
new file mode 100644
index 000000000000..04fb9bd4be34
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/platinum-searcher/deps.nix
@@ -0,0 +1,83 @@
+[
+  {
+    goPackagePath = "gopkg.in/yaml.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/yaml.v2";
+      rev = "a5b47d31c556af34a302ce5d659e6fea44d90de0";
+      sha256 = "0v6l48fshdjrqzyq1kwn22gy7vy434xdr1i0lm3prsf6jbln9fam";
+    };
+  }
+  {
+    goPackagePath = "github.com/jessevdk/go-flags";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jessevdk/go-flags";
+      rev = "4e64e4a4e2552194cf594243e23aa9baf3b4297e";
+      sha256 = "02x7f1wm8119s27h4dc3a4aw6shydnpnnkvzwg5xm0snn5kb4zxm";
+    };
+  }
+  {
+    goPackagePath = "github.com/BurntSushi/toml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/BurntSushi/toml";
+      rev = "99064174e013895bbd9b025c31100bd1d9b590ca";
+      sha256 = "058qrar8rvw3wb0ci1mf1axnqq2729cvv9zmdr4ms2nn9s97yiz9";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/text";
+      rev = "a49bea13b776691cb1b49873e5d8df96ec74831a";
+      sha256 = "1pcmgf88wml6ca8v63nh3nxsfvpzjv3c4qj2w2wkizbil826g7as";
+    };
+  }
+  {
+    goPackagePath = "github.com/monochromegane/conflag";
+    fetch = {
+      type = "git";
+      url = "https://github.com/monochromegane/conflag";
+      rev = "6d68c9aa4183844ddc1655481798fe4d90d483e9";
+      sha256 = "0csfr5c8d3kbna9sqhzfp2z06wq6mc6ijja1zj2i82kzsq8534wa";
+    };
+  }
+  {
+    goPackagePath = "github.com/monochromegane/go-home";
+    fetch = {
+      type = "git";
+      url = "https://github.com/monochromegane/go-home";
+      rev = "25d9dda593924a11ea52e4ffbc8abdb0dbe96401";
+      sha256 = "172chakrj22xfm0bcda4qj5zqf7lwr53pzwc3xj6wz8vd2bcxkww";
+    };
+  }
+  {
+    goPackagePath = "github.com/monochromegane/terminal";
+    fetch = {
+      type = "git";
+      url = "https://github.com/monochromegane/terminal";
+      rev = "2da212063ce19aed90ee5bbb00ad1ad7393d7f48";
+      sha256 = "1rddaq9pk5q57ildms35iihghqk505gb349pb0f6k3svchay38nh";
+    };
+  }
+  {
+    goPackagePath = "github.com/monochromegane/go-gitignore";
+    fetch = {
+      type = "git";
+      url = "https://github.com/monochromegane/go-gitignore";
+      rev = "38717d0a108ca0e5af632cd6845ca77d45b50729";
+      sha256 = "0r1inabpgg6sn6i47b02hcmd2p4dc1ab1mcy20mn1b2k3mpdj4b7";
+    };
+  }
+  {
+    goPackagePath = "github.com/shiena/ansicolor";
+    fetch = {
+      type = "git";
+      url = "https://github.com/shiena/ansicolor";
+      rev = "a422bbe96644373c5753384a59d678f7d261ff10";
+      sha256 = "1dcn8a9z6a5dxa2m3fkppnajcls8lanbl38qggkf646yi5qsk1hc";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/text/podiff/default.nix b/nixpkgs/pkgs/tools/text/podiff/default.nix
new file mode 100644
index 000000000000..a71ef2f06bd0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/podiff/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation {
+  pname = "podiff";
+  version = "1.1";
+
+  src = fetchurl {
+    url = "ftp://download.gnu.org.ua/pub/release/podiff/podiff-1.1.tar.gz";
+    sha256 = "1zz6bcmka5zvk2rq775qv122lqh54aijkxlghvx7z0r6kh880x59";
+  };
+
+  patchPhase = ''
+    sed "s#PREFIX=/usr#PREFIX=$out#g" -i Makefile
+    mkdir -p $out/bin
+    mkdir -p $out/share/man/man1
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Finds differences in translations between two PO files, or revisions";
+    homepage = http://puszcza.gnu.org.ua/software/podiff;
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.goibhniu ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/poedit/default.nix b/nixpkgs/pkgs/tools/text/poedit/default.nix
new file mode 100644
index 000000000000..4d29c380483d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/poedit/default.nix
@@ -0,0 +1,46 @@
+{ stdenv, fetchurl, autoconf, automake, libtool, gettext, pkgconfig, wxGTK30,
+  boost, icu, lucenepp, asciidoc, libxslt, xmlto, gtk2, gtkspell2, pugixml,
+  nlohmann_json, hicolor-icon-theme, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "poedit";
+  version = "2.2.4";
+
+  src = fetchurl {
+    url = "https://github.com/vslavik/poedit/archive/v${version}-oss.tar.gz";
+    sha256 = "1k5ql41g635z01s1i9bchvf72ynwsvg54gs3s40f07f9dihb23gd";
+  };
+
+  nativeBuildInputs = [ autoconf automake asciidoc wrapGAppsHook 
+    libxslt xmlto boost libtool pkgconfig ];
+
+  buildInputs = [ lucenepp nlohmann_json wxGTK30 icu pugixml gtk2 gtkspell2 hicolor-icon-theme ];
+
+  propagatedBuildInputs = [ gettext ];
+  
+  preConfigure = "
+    patchShebangs bootstrap
+    ./bootstrap
+  ";
+
+  configureFlags = [
+    "--without-cld2"
+    "--without-cpprest"
+    "--with-boost-libdir=${boost.out}/lib"
+    "CPPFLAGS=-I${nlohmann_json}/include/nlohmann/"
+  ];
+ 
+  preFixup = ''
+    gappsWrapperArgs+=(--prefix PATH : "${stdenv.lib.makeBinPath [ gettext ]}")
+  '';
+ 
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "Cross-platform gettext catalogs (.po files) editor";
+    homepage = https://www.poedit.net/;
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ domenkozar genesis ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/popfile/default.nix b/nixpkgs/pkgs/tools/text/popfile/default.nix
new file mode 100644
index 000000000000..5e76e3541733
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/popfile/default.nix
@@ -0,0 +1,59 @@
+{ stdenv, fetchzip, makeWrapper, perlPackages,
+... }:
+
+stdenv.mkDerivation rec {
+  appname = "popfile";
+  version = "1.1.3";
+  name = "${appname}-${version}";
+
+  src = fetchzip {
+    url = "http://getpopfile.org/downloads/${appname}-${version}.zip";
+    sha256 = "0gcib9j7zxk8r2vb5dbdz836djnyfza36vi8215nxcdfx1xc7l63";
+    stripRoot = false;
+  };
+
+  buildInputs = [ makeWrapper ] ++ (with perlPackages; [
+    ## These are all taken from the popfile documentation as applicable to Linux
+    ## http://getpopfile.org/docs/howtos:allplatformsrequireperl
+    perl
+    DBI
+    DBDSQLite
+    HTMLTagset
+    TimeDate # == DateParse
+    HTMLTemplate
+    # IO::Socket::Socks is not in nixpkgs
+    # IOSocketSocks
+    IOSocketSSL
+    NetSSLeay
+    SOAPLite
+  ]);
+
+  installPhase = ''
+    mkdir -p $out/bin
+    # I user `cd` rather than `cp $out/* ...` b/c the * breaks syntax
+    # highlighting in emacs for me.
+    cd $src
+    cp -r * $out/bin
+    cd $out/bin
+    chmod +x *.pl
+
+    find $out -name '*.pl' -executable | while read path; do
+      wrapProgram "$path" \
+        --prefix PERL5LIB : $PERL5LIB:$out/bin \
+        --set POPFILE_ROOT $out/bin \
+        --run 'export POPFILE_USER=''${POPFILE_USER:-$HOME/.popfile}' \
+        --run 'test -d "$POPFILE_USER" || mkdir -m 0700 -p "$POPFILE_USER"'
+    done
+  '';
+
+  meta = {
+    description = "An email classification system that automatically sorts messages and fights spam";
+    homepage = http://getpopfile.org;
+    license = stdenv.lib.licenses.gpl2;
+
+    # Should work on macOS, but havent tested it.
+    # Windows support is more complicated.
+    # http://getpopfile.org/docs/faq:systemrequirements
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/proselint/default.nix b/nixpkgs/pkgs/tools/text/proselint/default.nix
new file mode 100644
index 000000000000..27e9c80bc7d5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/proselint/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl, buildPythonApplication, click, future, six }:
+
+buildPythonApplication rec {
+  pname = "proselint";
+  version = "0.10.2";
+
+  doCheck = false; # fails to pass because it tries to run in home directory
+
+  src = fetchurl {
+    url = "mirror://pypi/p/proselint/${pname}-${version}.tar.gz";
+    sha256 = "017risn0j1bjy9ygzfgphjnyjl4gk7wbrr4qv1vvrlan60wyp1rs";
+  };
+
+  propagatedBuildInputs = [ click future six ];
+
+  meta = with stdenv.lib; {
+    description = "A linter for prose";
+    homepage = http://proselint.com;
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ alibabzo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/qgrep/default.nix b/nixpkgs/pkgs/tools/text/qgrep/default.nix
new file mode 100644
index 000000000000..c45398e31a1f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/qgrep/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchFromGitHub, CoreServices, CoreFoundation, fetchpatch }:
+
+stdenv.mkDerivation rec {
+  version = "1.1";
+  pname = "qgrep";
+
+  src = fetchFromGitHub {
+    owner = "zeux";
+    repo = "qgrep";
+    rev = "v${version}";
+    sha256 = "046ccw34vz2k5jn6gyxign5gs2qi7i50jy9b74wqv7sjf5zayrh0";
+    fetchSubmodules = true;
+  };
+
+  patches = stdenv.lib.optionals stdenv.isDarwin [
+    (fetchpatch {
+      url = "https://github.com/zeux/qgrep/commit/21c4d1a5ab0f0bdaa0b5ca993c1315c041418cc6.patch";
+      sha256 = "0wpxzrd9pmhgbgby17vb8279xwvkxfdd99gvv7r74indgdxqg7v8";
+    })
+  ];
+
+  buildInputs = stdenv.lib.optionals stdenv.isDarwin [ CoreServices CoreFoundation ];
+
+  postPatch = stdenv.lib.optionalString stdenv.isAarch64 ''
+    substituteInPlace Makefile \
+      --replace "-msse2" "" --replace "-DUSE_SSE2" ""
+  '';
+
+  installPhase = '' 
+    install -Dm755 qgrep $out/bin/qgrep
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Fast regular expression grep for source code with incremental index updates";
+    homepage = https://github.com/zeux/qgrep;
+    license = licenses.mit;
+    maintainers = [ maintainers.yrashk ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/qprint/default.nix b/nixpkgs/pkgs/tools/text/qprint/default.nix
new file mode 100644
index 000000000000..8f998e3a26d2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/qprint/default.nix
@@ -0,0 +1,28 @@
+{ fetchurl, stdenv }:
+
+stdenv.mkDerivation rec {
+  name = "qprint-1.1";
+
+  src = fetchurl {
+    url = "https://www.fourmilab.ch/webtools/qprint/${name}.tar.gz";
+    sha256 = "1701cnb1nl84rmcpxzq11w4cyj4385jh3gx4aqxznwf8a4fwmagz";
+  };
+
+  doCheck = true;
+
+  checkTarget = "wringer";
+
+  preInstall = ''
+    mkdir -p $out/bin
+    mkdir -p $out/share/man/man1
+  '';
+
+  meta = {
+    homepage = http://www.fourmilab.ch/webtools/qprint/;
+    license = stdenv.lib.licenses.publicDomain;
+    description = "Encode and decode Quoted-Printable files";
+    maintainers = [ stdenv.lib.maintainers.tv ];
+    platforms = stdenv.lib.platforms.all;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/text/qshowdiff/default.nix b/nixpkgs/pkgs/tools/text/qshowdiff/default.nix
new file mode 100644
index 000000000000..9cf9349badb2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/qshowdiff/default.nix
@@ -0,0 +1,25 @@
+{stdenv, fetchurl, qt4, perl, pkgconfig }:
+
+stdenv.mkDerivation rec {
+  pname = "qshowdiff";
+  version = "1.2";
+
+  src = fetchurl {
+    url = "https://github.com/danfis/qshowdiff/archive/v${version}.tar.gz";
+    sha256 = "027959xbzvi5c2w9y1x122sr5i26k9mvp43banz2wln6gd860n1a";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ qt4 perl ];
+
+  configurePhase = ''
+    mkdir -p $out/{bin,man/man1}
+    makeFlags="PREFIX=$out CC=$CXX"
+  '';
+
+  meta = {
+    homepage = http://qshowdiff.danfis.cz/;
+    description = "Colourful diff viewer";
+    license = stdenv.lib.licenses.gpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/reckon/Gemfile b/nixpkgs/pkgs/tools/text/reckon/Gemfile
new file mode 100644
index 000000000000..f708ddd93664
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/reckon/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'reckon'
diff --git a/nixpkgs/pkgs/tools/text/reckon/Gemfile.lock b/nixpkgs/pkgs/tools/text/reckon/Gemfile.lock
new file mode 100644
index 000000000000..0ede7e2a2564
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/reckon/Gemfile.lock
@@ -0,0 +1,21 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    chronic (0.10.2)
+    fastercsv (1.5.5)
+    highline (1.7.8)
+    reckon (0.4.4)
+      chronic (>= 0.3.0)
+      fastercsv (>= 1.5.1)
+      highline (>= 1.5.2)
+      terminal-table (>= 1.4.2)
+    terminal-table (1.6.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  reckon
+
+BUNDLED WITH
+   1.12.5
diff --git a/nixpkgs/pkgs/tools/text/reckon/default.nix b/nixpkgs/pkgs/tools/text/reckon/default.nix
new file mode 100644
index 000000000000..261149229b64
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/reckon/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, lib, bundlerEnv, bundlerUpdateScript, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "reckon";
+  version = (import ./gemset.nix).reckon.version;
+
+  phases = [ "installPhase" ];
+
+  buildInputs = [ makeWrapper ];
+
+  installPhase = let
+    env = bundlerEnv {
+      name = "${pname}-${version}-gems";
+
+      gemdir = ./.;
+    };
+  in ''
+    mkdir -p $out/bin
+    makeWrapper ${env}/bin/reckon $out/bin/reckon
+  '';
+
+  passthru.updateScript = bundlerUpdateScript "reckon";
+
+  meta = with lib; {
+    description = "Flexibly import bank account CSV files into Ledger for command line accounting";
+    license = licenses.mit;
+    maintainers = with maintainers; [ nicknovitski ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/reckon/gemset.nix b/nixpkgs/pkgs/tools/text/reckon/gemset.nix
new file mode 100644
index 000000000000..e1e4a43188df
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/reckon/gemset.nix
@@ -0,0 +1,42 @@
+{
+  chronic = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hrdkn4g8x7dlzxwb1rfgr8kw3bp4ywg5l4y4i9c2g5cwv62yvvn";
+      type = "gem";
+    };
+    version = "0.10.2";
+  };
+  fastercsv = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1df3vfgw5wg0s405z0pj0rfcvnl9q6wak7ka8gn0xqg4cag1k66h";
+      type = "gem";
+    };
+    version = "1.5.5";
+  };
+  highline = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nf5lgdn6ni2lpfdn4gk3gi47fmnca2bdirabbjbz1fk9w4p8lkr";
+      type = "gem";
+    };
+    version = "1.7.8";
+  };
+  reckon = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1p6w8w7vpl8fq4yfggrxbv6ph76psg7l5b4q29a8zvfbzzx6a0xw";
+      type = "gem";
+    };
+    version = "0.4.4";
+  };
+  terminal-table = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hbmzfr17ji5ws5x5z3kypmb5irwwss7q7kkad0gs005ibqrxv0a";
+      type = "gem";
+    };
+    version = "1.6.0";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/text/recode/default.nix b/nixpkgs/pkgs/tools/text/recode/default.nix
new file mode 100644
index 000000000000..e1c3d87bdcbc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/recode/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl, python3, perl, intltool, flex, texinfo, libiconv, libintl }:
+
+stdenv.mkDerivation rec {
+  pname = "recode";
+  version = "3.7.6";
+
+  # Use official tarball, avoid need to bootstrap/generate build system
+  src = fetchurl {
+    url = "https://github.com/rrthomas/${pname}/releases/download/v${version}/${pname}-${version}.tar.gz";
+    sha256 = "0m59sd1ca0zw1aydpc3m8sw03nc885knmccqryg7byzmqs585ia6";
+  };
+
+  nativeBuildInputs = [ python3 python3.pkgs.cython perl intltool flex texinfo libiconv ];
+  buildInputs = [ libintl ];
+
+  doCheck = true;
+
+  meta = {
+    homepage = https://github.com/rrthomas/recode;
+    description = "Converts files between various character sets and usages";
+    platforms = stdenv.lib.platforms.unix;
+    license = stdenv.lib.licenses.gpl2Plus;
+    maintainers = with stdenv.lib.maintainers; [ jcumming ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/replace/default.nix b/nixpkgs/pkgs/tools/text/replace/default.nix
new file mode 100644
index 000000000000..3549e7c1c943
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/replace/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation {
+  name = "replace-2.24";
+
+  src = fetchurl {
+    url = ftp://hpux.connect.org.uk/hpux/Users/replace-2.24/replace-2.24-src-11.11.tar.gz;
+    sha256 = "1c2nkxx83vmlh1v3ib6r2xqh121gdb1rharwsimcb2h0xwc558dm";
+  };
+
+  outputs = [ "out" "man" ];
+
+  makeFlags = [ "TREE=\$(out)" "MANTREE=\$(TREE)/share/man" ];
+
+  preBuild = ''
+    sed -e "s@/bin/mv@$(type -P mv)@" -i replace.h
+  '';
+
+  preInstall = "mkdir -p \$out/share/man";
+  postInstall = "mv \$out/bin/replace \$out/bin/replace-literal";
+
+  patches = [./malloc.patch];
+
+  meta = {
+    homepage = https://replace.richardlloyd.org.uk/;
+    description = "A tool to replace verbatim strings";
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/replace/malloc.patch b/nixpkgs/pkgs/tools/text/replace/malloc.patch
new file mode 100644
index 000000000000..1ee95c4bae18
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/replace/malloc.patch
@@ -0,0 +1,13 @@
+diff -rc replace-2.24-orig/replace.h replace-2.24/replace.h
+*** replace-2.24-orig/replace.h	2004-10-07 15:15:06.000000000 +0200
+--- replace-2.24/replace.h	2008-02-21 14:57:47.000000000 +0100
+***************
+*** 11,17 ****
+  #include <ctype.h>
+  #include <unistd.h>
+  #include <string.h>
+- #include <malloc.h>
+  #include <sys/stat.h>
+  #include <ftw.h>
+  #include <utime.h>
+--- 11,16 ----
diff --git a/nixpkgs/pkgs/tools/text/ripgrep-all/default.nix b/nixpkgs/pkgs/tools/text/ripgrep-all/default.nix
new file mode 100644
index 000000000000..df54724d3847
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ripgrep-all/default.nix
@@ -0,0 +1,63 @@
+{ stdenv, lib, fetchFromGitHub, rustPlatform, makeWrapper, ffmpeg
+, pandoc, poppler_utils, ripgrep, Security, imagemagick, tesseract
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "ripgrep-all";
+  version = "0.9.3";
+
+  src = fetchFromGitHub {
+    owner = "phiresky";
+    repo = pname;
+    rev = version;
+    sha256 = "0fxvnd8qflzvqz2181njdhpbr4wdvd1jc6lcw38c3pknk9h3ymq9";
+  };
+
+  cargoSha256 = "1jcwipsb7sl65ky78cypl4qvjvxvv4sjlwcg1pirgmqikcyiiy2l";
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  postInstall = ''
+    wrapProgram $out/bin/rga \
+      --prefix PATH ":" "${lib.makeBinPath [ ffmpeg pandoc poppler_utils ripgrep imagemagick tesseract ]}"
+  '';
+
+  # Use upstream's example data to run a couple of queries to ensure the dependencies
+  # for all of the adapters are available.
+  installCheckPhase = ''
+    set -e
+    export PATH="$PATH:$out/bin"
+
+    test1=$(rga --rga-no-cache "hello" exampledir/ | wc -l)
+    test2=$(rga --rga-no-cache --rga-adapters=tesseract "crate" exampledir/screenshot.png | wc -l)
+
+    if [ $test1 != 26 ]
+    then
+      echo "ERROR: test1 failed! Could not find the word 'hello' 26 times in the sample data."
+      exit 1
+    fi
+
+    if [ $test2 != 1 ]
+    then
+      echo "ERROR: test2 failed! Could not find the word 'crate' in the screenshot."
+      exit 1
+    fi
+  '';
+
+  doInstallCheck = true;
+
+  meta = with stdenv.lib; {
+    description = "Ripgrep, but also search in PDFs, E-Books, Office documents, zip, tar.gz, and more";
+    longDescription = ''
+      Ripgrep, but also search in PDFs, E-Books, Office documents, zip, tar.gz, etc.
+
+      rga is a line-oriented search tool that allows you to look for a regex in
+      a multitude of file types. rga wraps the awesome ripgrep and enables it
+      to search in pdf, docx, sqlite, jpg, movie subtitles (mkv, mp4), etc.
+    '';
+    homepage = https://github.com/phiresky/ripgrep-all;
+    license = with licenses; [ agpl3Plus ];
+    maintainers = with maintainers; [ zaninime ma27 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/ripgrep/default.nix b/nixpkgs/pkgs/tools/text/ripgrep/default.nix
new file mode 100644
index 000000000000..963ef99c68a1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ripgrep/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, fetchFromGitHub, rustPlatform, asciidoc, docbook_xsl, libxslt
+, Security
+, withPCRE2 ? true, pcre2 ? null
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "ripgrep";
+  version = "11.0.2";
+
+  src = fetchFromGitHub {
+    owner = "BurntSushi";
+    repo = pname;
+    rev = version;
+    sha256 = "1iga3320mgi7m853la55xip514a3chqsdi1a1rwv25lr9b1p7vd3";
+  };
+
+  cargoSha256 = "17ldqr3asrdcsh4l29m3b5r37r5d0b3npq1lrgjmxb6vlx6a36qh";
+
+  cargoBuildFlags = stdenv.lib.optional withPCRE2 "--features pcre2";
+
+  nativeBuildInputs = [ asciidoc docbook_xsl libxslt ];
+  buildInputs = (stdenv.lib.optional withPCRE2 pcre2)
+    ++ (stdenv.lib.optional stdenv.isDarwin Security);
+
+  preFixup = ''
+    mkdir -p "$out/man/man1"
+    cp target/release/build/ripgrep-*/out/rg.1 "$out/man/man1/"
+
+    mkdir -p "$out/share/"{bash-completion/completions,fish/vendor_completions.d,zsh/site-functions}
+    cp target/release/build/ripgrep-*/out/rg.bash "$out/share/bash-completion/completions/"
+    cp target/release/build/ripgrep-*/out/rg.fish "$out/share/fish/vendor_completions.d/"
+    cp "$src/complete/_rg" "$out/share/zsh/site-functions/"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A utility that combines the usability of The Silver Searcher with the raw speed of grep";
+    homepage = https://github.com/BurntSushi/ripgrep;
+    license = with licenses; [ unlicense /* or */ mit ];
+    maintainers = with maintainers; [ tailhook globin ma27 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/rpl/default.nix b/nixpkgs/pkgs/tools/text/rpl/default.nix
new file mode 100644
index 000000000000..7ac3790f8a98
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/rpl/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchFromGitHub, pythonPackages }:
+
+pythonPackages.buildPythonApplication rec {
+  pname = "rpl";
+  version = "1.5.7";
+
+  # Tests not included in pip package.
+  doCheck = false;
+
+  src = fetchFromGitHub {
+    owner  = "kcoyner";
+    repo   = "rpl";
+    rev    = "v${version}";
+    sha256 = "1xhpgcmq91ivy9ijfyz5ilg51m7fz8ar2077r7gq246j8gbf8ggr";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Replace strings in files";
+    homepage    = "https://github.com/kcoyner/rpl";
+    license     = licenses.gpl2;
+    maintainers = with maintainers; [ teto ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/rst2html5/default.nix b/nixpkgs/pkgs/tools/text/rst2html5/default.nix
new file mode 100644
index 000000000000..83ac2d4d766d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/rst2html5/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchurl, pythonPackages }:
+
+pythonPackages.buildPythonPackage rec {
+  pname = "rst2html5";
+  version = "1.9.4";
+
+  src = fetchurl {
+    url = "mirror://pypi/${builtins.substring 0 1 pname}/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "d044589d30eeaf7336986078b7bd175510fd649a212b01a457d7806b279e6c73";
+  };
+
+  propagatedBuildInputs = with pythonPackages;
+  [ docutils genshi pygments beautifulsoup4 ];
+
+  meta = with stdenv.lib;{
+    homepage = https://bitbucket.org/andre_felipe_dias/rst2html5;
+    description = "Converts ReSTructuredText to (X)HTML5";
+    license = licenses.mit;
+    maintainers = with maintainers; [ AndersonTorres ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/ruby-zoom/Gemfile b/nixpkgs/pkgs/tools/text/ruby-zoom/Gemfile
new file mode 100644
index 000000000000..4bb5d8c175d7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ruby-zoom/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'ruby-zoom'
diff --git a/nixpkgs/pkgs/tools/text/ruby-zoom/Gemfile.lock b/nixpkgs/pkgs/tools/text/ruby-zoom/Gemfile.lock
new file mode 100644
index 000000000000..820a972d106d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ruby-zoom/Gemfile.lock
@@ -0,0 +1,24 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    djinni (2.2.4)
+      fagin (~> 1.2, >= 1.2.1)
+    fagin (1.2.1)
+    hilighter (1.2.3)
+    json_config (1.1.0)
+    ruby-zoom (5.3.0)
+      djinni (~> 2.2, >= 2.2.4)
+      fagin (~> 1.2, >= 1.2.1)
+      hilighter (~> 1.2, >= 1.2.3)
+      json_config (~> 1.0, >= 1.0.0)
+      scoobydoo (~> 1.0, >= 1.0.0)
+    scoobydoo (1.0.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  ruby-zoom
+
+BUNDLED WITH
+   1.17.2
diff --git a/nixpkgs/pkgs/tools/text/ruby-zoom/default.nix b/nixpkgs/pkgs/tools/text/ruby-zoom/default.nix
new file mode 100644
index 000000000000..c39538408362
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ruby-zoom/default.nix
@@ -0,0 +1,18 @@
+{ lib, bundlerEnv, ruby, bundlerUpdateScript }:
+
+bundlerEnv {
+  pname = "ruby-zoom";
+
+  inherit ruby;
+  gemdir = ./.;
+
+  passthru.updateScript = bundlerUpdateScript "ruby-zoom";
+
+  meta = with lib; {
+    description = "Quickly open CLI search results in your favorite editor!";
+    homepage    = https://gitlab.com/mjwhitta/zoom;
+    license     = with licenses; gpl3;
+    maintainers = with maintainers; [ vmandela nicknovitski ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/ruby-zoom/gemset.nix b/nixpkgs/pkgs/tools/text/ruby-zoom/gemset.nix
new file mode 100644
index 000000000000..f4c637aadf88
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ruby-zoom/gemset.nix
@@ -0,0 +1,64 @@
+{
+  djinni = {
+    dependencies = ["fagin"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18zk80jk70xq1bnsvzcgxb13x9fqdb5g4m02b2f6mvqm4cyw26pl";
+      type = "gem";
+    };
+    version = "2.2.4";
+  };
+  fagin = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0psyydh4hf2s1kz0r50aiyjf5v2pqhkbmy0gicxzaj5n17q2ga24";
+      type = "gem";
+    };
+    version = "1.2.1";
+  };
+  hilighter = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03zm49g96dfpan5fhblcjxrzv7ldwan57sn0jcllkcmrqfd0zlyz";
+      type = "gem";
+    };
+    version = "1.2.3";
+  };
+  json_config = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0slb618n1ipn47j6dsxbfv2j9pl06dxn2i651llix09d529m7zwa";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  ruby-zoom = {
+    dependencies = ["djinni" "fagin" "hilighter" "json_config" "scoobydoo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0iqxc0rzypsxy4wbxnvgvk98dbcsrcczq3xi9xd4wz4ggwq564l3";
+      type = "gem";
+    };
+    version = "5.3.0";
+  };
+  scoobydoo = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "162p75nc9x078kqcpdsrsd7kngs6jc5n4injz3kzpwf0jgbbm8n7";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/text/ruplacer/default.nix b/nixpkgs/pkgs/tools/text/ruplacer/default.nix
new file mode 100644
index 000000000000..7fdde0b3a694
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/ruplacer/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub, rustPlatform, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "ruplacer";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "TankerHQ";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0yj753d9wsnp4s5a71ph241jym5rfz3161a1v3qxfc4w23v86j1q";
+  };
+
+  cargoSha256 = "1lzw4x40j25khf68x5srj8i05c11ls5y7km206vxn19vsy9ah4k9";
+
+  buildInputs = (stdenv.lib.optional stdenv.isDarwin Security);
+
+  meta = with stdenv.lib; {
+    description = "Find and replace text in source files";
+    homepage = "https://github.com/TankerHQ/ruplacer";
+    license = [ licenses.bsd3 ];
+    maintainers = with maintainers; [ filalex77 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/schema2ldif/default.nix b/nixpkgs/pkgs/tools/text/schema2ldif/default.nix
new file mode 100644
index 000000000000..5df4e90ff1aa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/schema2ldif/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl, makeWrapper, perlPackages }: stdenv.mkDerivation rec {
+  pname = "schema2ldif";
+  version = "1.3";
+
+  src = fetchurl {
+    url = "https://repos.fusiondirectory.org/sources/schema2ldif/schema2ldif-${version}.tar.gz";
+    sha256 = "00cd9xx9g0mnnfn5lvay3vg166z84jla0ya1x34ljdc8bflxsr9a";
+  };
+
+  buildInputs = [ perlPackages.perl ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man/man1
+
+    cp bin/{schema2ldif,ldap-schema-manager} $out/bin
+    gzip -c man/schema2ldif.1 > $out/share/man/man1/schema2ldif.1.gz
+    gzip -c man/ldap-schema-manager.1 > $out/share/man/man1/ldap-schema-manager.1.gz
+
+    wrapProgram $out/bin/schema2ldif \
+       --prefix PERL5PATH : "${perlPackages.makePerlPath [ perlPackages.GetoptLong ]}"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Utilities to manage schema in .schema and .ldif format";
+    homepage = "https://www.fusiondirectory.org/schema2ldif-project-and-components/";
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ das_j ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/sd/default.nix b/nixpkgs/pkgs/tools/text/sd/default.nix
new file mode 100644
index 000000000000..3b4a6edba0ff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/sd/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitHub, rustPlatform, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "sd";
+  version = "0.6.5";
+
+  src = fetchFromGitHub {
+    owner = "chmln";
+    repo = pname;
+    rev = version;
+    sha256 = "1vxljmd1vh245yhv095i3l44pk915zr2pix4v9r8pz2fynp2nnmj";
+  };
+
+  cargoSha256 = "1shqphbpn3ib28hnyib7mh1i5q56nshj864jm209s8qggbp96wp1";
+
+  buildInputs = stdenv.lib.optionals stdenv.isDarwin [ Security ];
+
+  meta = with stdenv.lib; {
+    description = "Intuitive find & replace CLI (sed alternative)";
+    homepage = "https://github.com/chmln/sd";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = [ maintainers.amar1729 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/sgml/jade/default.nix b/nixpkgs/pkgs/tools/text/sgml/jade/default.nix
new file mode 100644
index 000000000000..2cc40510121b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/sgml/jade/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, gnum4 }:
+
+stdenv.mkDerivation rec {
+  name = "jade-${version}-${debpatch}";
+  version = "1.2.1";
+  debpatch = "47.3";
+
+  src = fetchurl {
+    url = "ftp://ftp.jclark.com/pub/jade/jade-${version}.tar.gz";
+    sha256 = "84e2f8a2a87aab44f86a46b71405d4f919b219e4c73e03a83ab6c746a674b187";
+  };
+
+  patchsrc =  fetchurl {
+    url = "http://ftp.debian.org/debian/pool/main/j/jade/jade_${version}-${debpatch}.diff.gz";
+    sha256 = "8e94486898e3503308805f856a65ba5b499a6f21994151270aa743de48305464";
+  };
+
+  patches = [ patchsrc ];
+
+  buildInputs = [ gnum4 ];
+
+  NIX_CFLAGS_COMPILE = "-Wno-deprecated";
+
+  preInstall = ''
+    install -d -m755 "$out"/lib
+  '';
+
+  postInstall = ''
+    mv "$out/bin/sx" "$out/bin/sgml2xml"
+  '';
+
+  meta = {
+    description = "James Clark's DSSSL Engine";
+    license = "custom";
+    homepage = http://www.jclark.com/jade/;
+    platforms = with stdenv.lib.platforms; linux;
+    maintainers = with stdenv.lib.maintainers; [ e-user ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/sgml/openjade/default.nix b/nixpkgs/pkgs/tools/text/sgml/openjade/default.nix
new file mode 100644
index 000000000000..cf3b2bad6c99
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/sgml/openjade/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, opensp, perl }:
+
+stdenv.mkDerivation rec {
+  name = "openjade-1.3.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/openjade/${name}.tar.gz";
+    sha256 = "1l92sfvx1f0wmkbvzv1385y1gb3hh010xksi1iyviyclrjb7jb8x";
+  };
+
+  patches = [ ./msggen.patch ];
+
+  buildInputs = [ opensp perl ];
+
+  configureFlags = [
+    "--enable-spincludedir=${opensp}/include/OpenSP"
+    "--enable-splibdir=${opensp}/lib"
+  ];
+
+  meta = {
+    description = "An implementation of DSSSL, an ISO standard for formatting SGML (and XML) documents";
+    license = stdenv.lib.licenses.mit;
+    homepage = http://openjade.sourceforge.net/;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/sgml/openjade/msggen.patch b/nixpkgs/pkgs/tools/text/sgml/openjade/msggen.patch
new file mode 100644
index 000000000000..d59573fa49cf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/sgml/openjade/msggen.patch
@@ -0,0 +1,34 @@
+http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/app-text/openjade/files/openjade-1.3.2-msggen.pl.patch?revision=1.2
+
+Use Getopt::Std in place of getopts.pl.
+https://bugs.gentoo.org/show_bug.cgi?id=420083
+
+--- a/msggen.pl
++++ b/msggen.pl
+@@ -4,6 +4,7 @@
+ # See the file COPYING for copying permission.
+ 
+ use POSIX;
++use Getopt::Std;
+ 
+ # Package and version.
+ $package = 'openjade';
+@@ -18,8 +19,7 @@
+ undef $opt_l;
+ undef $opt_p;
+ undef $opt_t;
+-do 'getopts.pl';
+-&Getopts('l:p:t:');
++getopts('l:p:t:');
+ $module = $opt_l;
+ $pot_file = $opt_p;
+ 
+@@ -72,7 +72,7 @@
+     else {
+ 	$field[0] =~ /^[IWQXE][0-9]$/ || &error("invalid first field");;
+ 	$type[$num] = substr($field[0], 0, 1);
+-	$argc = int(substr($field[0], 1, 1));
++	$argc = substr($field[0], 1, 1);
+     }
+     $nargs[$num] = $argc;
+     $field[1] =~ /^[a-zA-Z_][a-zA-Z0-9_]+$/ || &error("invalid tag");
diff --git a/nixpkgs/pkgs/tools/text/sgml/opensp/default.nix b/nixpkgs/pkgs/tools/text/sgml/opensp/default.nix
new file mode 100644
index 000000000000..ade640dac7a9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/sgml/opensp/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, fetchurl, fetchpatch, xmlto, docbook_xml_dtd_412
+, libxslt, docbook_xsl, autoconf, automake, gettext, libiconv, libtool}:
+
+stdenv.mkDerivation {
+  name = "opensp-1.5.2";
+
+  src = fetchurl {
+    url = mirror://sourceforge/openjade/OpenSP-1.5.2.tar.gz;
+    sha256 = "1khpasr6l0a8nfz6kcf3s81vgdab8fm2dj291n5r2s53k228kx2p";
+  };
+
+  postPatch = ''
+    sed -i s,/usr/share/sgml/docbook/xml-dtd-4.1.2/,${docbook_xml_dtd_412}/xml/dtd/docbook/, \
+      docsrc/*.xml
+  '';
+
+  patches = [
+    (fetchpatch {
+      url = "https://gitweb.gentoo.org/repo/gentoo.git/plain/app-text/opensp/files/opensp-1.5.2-c11-using.patch?id=688d9675782dfc162d4e6cff04c668f7516118d0";
+      sha256 = "04q14s8qsad0bkjmj067dn831i0r6v7742rafdlnbfm5y249m2q6";
+    })
+  ];
+  
+  setupHook = ./setup-hook.sh;
+
+  postFixup = ''
+    # Remove random ids in the release notes
+    sed -i -e 's/href="#idm.*"//g' $out/share/doc/OpenSP/releasenotes.html
+    sed -i -e 's/name="idm.*"//g' $out/share/doc/OpenSP/releasenotes.html
+    '';
+
+  preConfigure = if stdenv.isCygwin then "autoreconf -fi" else null;
+
+  # need autoconf, automake, gettext, and libtool for reconfigure
+  nativeBuildInputs = stdenv.lib.optionals stdenv.isCygwin [ autoconf automake libtool ];
+
+  buildInputs = [ xmlto docbook_xml_dtd_412 libxslt docbook_xsl gettext libiconv ];
+
+  doCheck = false; # fails
+
+  meta = {
+    description = "A suite of SGML/XML processing tools";
+    license = stdenv.lib.licenses.mit;
+    homepage = http://openjade.sourceforge.net/;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/sgml/opensp/setup-hook.sh b/nixpkgs/pkgs/tools/text/sgml/opensp/setup-hook.sh
new file mode 100644
index 000000000000..5bace3c66889
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/sgml/opensp/setup-hook.sh
@@ -0,0 +1,22 @@
+addSGMLCatalogs () {
+      if test -d $1/sgml/dtd; then
+          for i in $(find $1/sgml/dtd -name docbook.cat); do
+              export SGML_CATALOG_FILES="${SGML_CATALOG_FILES:+:}$i"
+          done
+      fi
+}
+
+if test -z "${sgmlHookDone-}"; then
+    sgmlHookDone=1
+
+    # Set http_proxy and ftp_proxy to a invalid host to prevent
+    # xmllint and xsltproc from trying to download DTDs from the
+    # network even when --nonet is not given.  That would be impure.
+    # (Note that .invalid is a reserved domain guaranteed not to
+    # work.)
+    export http_proxy=http://nodtd.invalid/
+    export ftp_proxy=http://nodtd.invalid/
+
+    export SGML_CATALOG_FILES
+    addEnvHooks "$targetOffset" addSGMLCatalogs
+fi
diff --git a/nixpkgs/pkgs/tools/text/shab/default.nix b/nixpkgs/pkgs/tools/text/shab/default.nix
new file mode 100644
index 000000000000..02d2d545122a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/shab/default.nix
@@ -0,0 +1,73 @@
+{ bash, stdenv, lib, runCommand, writeText, fetchFromGitHub }:
+let
+  version = "1.0.0";
+
+  shab = stdenv.mkDerivation {
+    pname = "shab";
+    inherit version;
+
+    src = fetchFromGitHub {
+      owner = "zimbatm";
+      repo = "shab";
+      rev = "v${version}";
+      sha256 = "02lf1s6plhhcfyj9xha44wij9jbphb1x5q55xj3b5bx2ji2jsvji";
+    };
+
+    postPatch = ''
+      for f in test.sh test/*.sh; do
+        patchShebangs "$f"
+      done
+    '';
+
+    doCheck = true;
+    doInstallCheck = true;
+
+    checkPhase = ''
+      ./test.sh
+    '';
+
+    installPhase = ''
+      mkdir -p $out/bin
+      cp ./shab $out/bin/shab
+    '';
+
+    installCheckPhase = ''
+      [[ "$(echo 'Hello $entity' | entity=world $out/bin/shab)" == 'Hello world' ]]
+    '';
+
+    passthru = {
+      inherit render renderText;
+    };
+
+    meta = with lib; {
+      description = "The bash templating language";
+      homepage = https://github.com/zimbatm/shab;
+      license = licenses.unlicense;
+      maintainers = with maintainers; [ zimbatm ];
+      platforms = bash.meta.platforms;
+    };
+  };
+
+  /*
+     shabScript:       a path or filename to use as a template
+     parameters.name:  the name to use as part of the store path
+     parameters:       variables to expose to the template
+   */
+  render = shabScript: parameters:
+    let extraParams = {
+          inherit shabScript;
+        };
+    in runCommand "out" (parameters // extraParams) ''
+      ${shab}/bin/shab "$shabScript" >$out
+    '';
+
+  /*
+     shabScriptText:   a string to use as a template
+     parameters.name:  the name to use as part of the store path
+     parameters:       variables to expose to the template
+   */
+  renderText = shabScriptText: parameters:
+    render (writeText "template" shabScriptText) parameters;
+
+in
+  shab
diff --git a/nixpkgs/pkgs/tools/text/shfmt/default.nix b/nixpkgs/pkgs/tools/text/shfmt/default.nix
new file mode 100644
index 000000000000..0bcd663ae5a9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/shfmt/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "shfmt";
+  version = "3.0.1";
+
+  src = fetchFromGitHub {
+    owner = "mvdan";
+    repo = "sh";
+    rev = "v${version}";
+    sha256 = "1y6n2xi8m579xksnnsdzb4zvcvij48kywjfqzp7qm43ni8g7w9a8";
+  };
+
+  modSha256 = "1ll2cxhgf8hh19wzdykgc81c4yfcp8bzmfaif08nvvb63rhjdb5y";
+  subPackages = ["cmd/shfmt"];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/mvdan/sh;
+    description = "A shell parser and formatter";
+    longDescription = ''
+      shfmt formats shell programs. It can use tabs or any number of spaces to indent.
+      You can feed it standard input, any number of files or any number of directories to recurse into.
+    '';
+    license = licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/shocco/default.nix b/nixpkgs/pkgs/tools/text/shocco/default.nix
new file mode 100644
index 000000000000..f657df5b780b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/shocco/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub, perlPackages, pythonPackages }:
+
+stdenv.mkDerivation rec {
+  pname = "shocco";
+  version = "1.0";
+
+  src = fetchFromGitHub {
+    owner = "rtomayko";
+    repo = "shocco";
+    rev = version;
+    sha256 = "1nkwcw9fqf4vyrwidqi6by7nrmainkjqkirkz3yxmzk6kzwr38mi";
+  };
+
+  prePatch = ''
+    # Don't change $PATH
+    substituteInPlace configure --replace PATH= NIRVANA=
+  '';
+
+  buildInputs = [ perlPackages.TextMarkdown pythonPackages.pygments ];
+
+  meta = with stdenv.lib; {
+    description = "A quick-and-dirty, literate-programming-style documentation generator for / in POSIX shell";
+    homepage = https://rtomayko.github.io/shocco/;
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/sift/default.nix b/nixpkgs/pkgs/tools/text/sift/default.nix
new file mode 100644
index 000000000000..c2a4cf22ea6d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/sift/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "sift";
+  version = "0.9.0";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/svent/sift";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "svent";
+    repo = "sift";
+    sha256 = "0bgy0jf84z1c3msvb60ffj4axayfchdkf0xjnsbx9kad1v10g7i1";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with lib; {
+    description = "sift is a fast and powerful alternative to grep";
+    homepage = https://sift-tool.org;
+    maintainers = [ maintainers.carlsverre ];
+    license = licenses.gpl3;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/sift/deps.nix b/nixpkgs/pkgs/tools/text/sift/deps.nix
new file mode 100644
index 000000000000..038555fa3cab
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/sift/deps.nix
@@ -0,0 +1,29 @@
+[
+  {
+    goPackagePath = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev = "575fdbe86e5dd89229707ebec0575ce7d088a4a6";
+      sha256 = "1kgv1mkw9y404pk3lcwbs0vgl133mwyp294i18jg9hp10s5d56xa";
+    };
+  }
+  {
+    goPackagePath = "github.com/svent/go-flags";
+    fetch = {
+      type = "git";
+      url = "https://github.com/svent/go-flags";
+      rev = "4bcbad344f0318adaf7aabc16929701459009aa3";
+      sha256 = "1gb416fgxl9gq4q6wsv3i2grq1mzbi7lvfvmfdqbxqbv9vizzh34";
+    };
+  }
+  {
+    goPackagePath = "github.com/svent/go-nbreader";
+    fetch = {
+      type = "git";
+      url = "https://github.com/svent/go-nbreader";
+      rev = "7cef48da76dca6a496faa7fe63e39ed665cbd219";
+      sha256 = "0hw11jj5r3f6qwydg41nc3c6aadlbkhc1qpxra2609lis0qa9h4r";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/text/silver-searcher/bash-completion.patch b/nixpkgs/pkgs/tools/text/silver-searcher/bash-completion.patch
new file mode 100644
index 000000000000..30e8c72389b7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/silver-searcher/bash-completion.patch
@@ -0,0 +1,5 @@
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -9 +9 @@
+-bashcompdir = $(pkgdatadir)/completions
++bashcompdir = $(datadir)/bash-completion/completions
diff --git a/nixpkgs/pkgs/tools/text/silver-searcher/default.nix b/nixpkgs/pkgs/tools/text/silver-searcher/default.nix
new file mode 100644
index 000000000000..2c28f9ea5a56
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/silver-searcher/default.nix
@@ -0,0 +1,28 @@
+{stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, pcre, zlib, lzma}:
+
+stdenv.mkDerivation rec {
+  pname = "silver-searcher";
+  version = "2.2.0";
+
+  src = fetchFromGitHub {
+    owner = "ggreer";
+    repo = "the_silver_searcher";
+    rev = version;
+    sha256 = "0cyazh7a66pgcabijd27xnk1alhsccywivv6yihw378dqxb22i1p";
+  };
+
+  patches = [ ./bash-completion.patch ];
+
+  NIX_LDFLAGS = stdenv.lib.optionalString stdenv.isLinux "-lgcc_s";
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  buildInputs = [ pcre zlib lzma ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/ggreer/the_silver_searcher/;
+    description = "A code-searching tool similar to ack, but faster";
+    maintainers = with maintainers; [ madjar ];
+    platforms = platforms.all;
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/smu/default.nix b/nixpkgs/pkgs/tools/text/smu/default.nix
new file mode 100644
index 000000000000..50bceb4fcb34
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/smu/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, lib, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  name = "smu";
+  version = "1.5";
+
+  src = fetchFromGitHub {
+    owner = "Gottox";
+    repo = "smu";
+    rev = "v${version}";
+    sha256 = "1jm7lhnzjx4q7gcwlkvsbffcy0zppywyh50d71ami6dnq182vvcc";
+  };
+
+  # _FORTIFY_SOURCE requires compiling with optimization (-O)
+  NIX_CFLAGS_COMPILE = "-O";
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+  ];
+
+  meta = with lib; {
+    description = "simple markup - markdown like syntax";
+    homepage = "https://github.com/Gottox/smu";
+    license = licenses.mit;
+    maintainers = with maintainers; [ geistesk ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/text/snippetpixie/default.nix b/nixpkgs/pkgs/tools/text/snippetpixie/default.nix
new file mode 100644
index 000000000000..585c183a81cb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/snippetpixie/default.nix
@@ -0,0 +1,89 @@
+{ stdenv
+, fetchFromGitHub
+, meson
+, ninja
+, vala
+, pkgconfig
+, wrapGAppsHook
+, appstream
+, desktop-file-utils
+, python3
+, libgee
+, glib
+, gtk3
+, sqlite
+, at-spi2-atk
+, at-spi2-core
+, dbus
+, ibus
+, json-glib
+, pantheon
+}:
+
+stdenv.mkDerivation rec {
+  pname = "snippetpixie";
+  version = "1.2.2";
+
+  src = fetchFromGitHub {
+    owner = "bytepixie";
+    repo = pname;
+    rev = version;
+    sha256 = "096xj7n1ypr8ss8mbwd1hyypvmzw5lc0hjlj2d1x8hbjljldfd13";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    vala
+    pkgconfig
+    wrapGAppsHook
+    appstream
+    desktop-file-utils
+    python3
+  ];
+
+  buildInputs = [
+    libgee
+    glib
+    gtk3
+    sqlite
+    at-spi2-atk
+    at-spi2-core
+    dbus
+    ibus
+    json-glib
+    pantheon.granite
+    pantheon.elementary-gtk-theme
+    pantheon.elementary-icon-theme
+  ];
+
+  doCheck = true;
+
+  postPatch = ''
+    chmod +x meson/post_install.py
+    patchShebangs meson/post_install.py
+  '';
+
+  passthru = {
+    updateScript = pantheon.updateScript {
+      attrPath = pname;
+    };
+  };
+
+  meta = with stdenv.lib; {
+    description = "Your little expandable text snippet helper";
+    longDescription = ''
+      Your little expandable text snippet helper.
+
+      Save your often used text snippets and then expand them whenever you type their abbreviation.
+
+      For example:- "spr`" expands to "Snippet Pixie rules!"
+    '';
+    homepage = https://www.snippetpixie.com;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [
+      ianmjones
+    ] ++ pantheon.maintainers;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/source-highlight/default.nix b/nixpkgs/pkgs/tools/text/source-highlight/default.nix
new file mode 100644
index 000000000000..8e937fe8518b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/source-highlight/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, boost }:
+
+let
+  name = "source-highlight";
+  version = "3.1.9";
+in
+stdenv.mkDerivation {
+  name = "${name}-${version}";
+
+  src = fetchurl {
+    url = "mirror://gnu/src-highlite/${name}-${version}.tar.gz";
+    sha256 = "148w47k3zswbxvhg83z38ifi85f9dqcpg7icvvw1cm6bg21x4zrs";
+  };
+
+  buildInputs = [ boost ];
+
+  configureFlags = [ "--with-boost=${boost.out}" ];
+
+  enableParallelBuilding = false;
+
+  meta = {
+    description = "Source code renderer with syntax highlighting";
+    homepage = https://www.gnu.org/software/src-highlite/;
+    license = stdenv.lib.licenses.gpl3Plus;
+    platforms = with stdenv.lib.platforms; linux ++ darwin;
+    longDescription =
+      ''
+        GNU Source-highlight, given a source file, produces a document
+        with syntax highlighting.
+      '';
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/staccato/default.nix b/nixpkgs/pkgs/tools/text/staccato/default.nix
new file mode 100644
index 000000000000..a68d2266b431
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/staccato/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "staccato";
+  version = "0.1.6";
+
+  src = fetchFromGitHub {
+    owner = "tshlabs";
+    repo = "staccato";
+    rev = version;
+    sha256 = "1zbd1gx0ik2r7bavcid776j37g6rzd3f6cs94kq1qar4gyf1gqjm";
+  };
+
+  cargoSha256 = "0h1822hba6lpv14y6hgn8qgh7p812b3kkf592ggr6yjlhqfh37n7";
+
+  meta = {
+    broken = true;
+    description = "A command line program that lets you compute statistics from values from a file or standard input";
+    longDescription = ''
+      Staccato (`st` for short) is a command line program that lets you
+      compute statistics from values from a file or standard input. It
+      computes things about the stream of numbers like min, max, mean, median,
+      and standard deviation. It can also compute these things about some
+      subset of the stream, for example the lower 95% of values.
+    '';
+    homepage = https://docs.rs/crate/staccato;
+    license = stdenv.lib.licenses.gpl3;
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/tab/default.nix b/nixpkgs/pkgs/tools/text/tab/default.nix
new file mode 100644
index 000000000000..b7855bc75325
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/tab/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromBitbucket, python2 }:
+
+stdenv.mkDerivation rec {
+  version = "7.2";
+  pname = "tab";
+
+  src = fetchFromBitbucket {
+    owner = "tkatchev";
+    repo = pname;
+    rev = version;
+    sha256 = "1bm15lw0vp901dj2vsqx6yixmn7ls3brrzh1w6zgd1ksjzlm5aax";
+  };
+
+  nativeBuildInputs = [ python2 ];
+
+  doCheck = true;
+
+  checkTarget = "test";
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm555 -t $out/bin tab
+    install -Dm444 -t $out/share/doc/tab docs/*.html
+
+    runHook postInstall
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Programming language/shell calculator";
+    homepage    = https://tkatchev.bitbucket.io/tab/;
+    license     = licenses.boost;
+    maintainers = with maintainers; [ mstarzyk ];
+    platforms   = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/transifex-client/default.nix b/nixpkgs/pkgs/tools/text/transifex-client/default.nix
new file mode 100644
index 000000000000..403adaf71b6f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/transifex-client/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, buildPythonApplication, fetchPypi
+, python-slugify, requests, urllib3, six, setuptools }:
+
+buildPythonApplication rec {
+  pname = "transifex-client";
+  version = "0.13.6";
+
+  propagatedBuildInputs = [
+    urllib3 requests python-slugify six setuptools
+  ];
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0y6pprlmkmi7wfqr3k70sb913qa70p3i90q5mravrai7cr32y1w8";
+  };
+
+  prePatch = ''
+    substituteInPlace requirements.txt --replace "urllib3<1.24" "urllib3>=1.24" \
+      --replace "six==1.11.0" "six>=1.11.0" \
+      --replace "python-slugify==1.2.6" "python-slugify>=1.2.6"
+  '';
+
+  # Requires external resources
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    homepage = "https://www.transifex.com/";
+    license = licenses.gpl2;
+    description = "Transifex translation service client";
+    maintainers = [ maintainers.etu ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/txt2tags/default.nix b/nixpkgs/pkgs/tools/text/txt2tags/default.nix
new file mode 100644
index 000000000000..100124043ed7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/txt2tags/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl, python }:
+
+stdenv.mkDerivation rec {
+  version = "2.6";
+  pname = "txt2tags";
+
+  dontBuild = true;
+
+  # Python script, needs the interpreter
+  propagatedBuildInputs = [ python ];
+
+  installPhase = ''
+    mkdir -p "$out/bin"
+    mkdir -p "$out/share/doc"
+    mkdir -p "$out/share/man/man1/"
+    sed '1s|/usr/bin/env python|${python}/bin/python|' < txt2tags > "$out/bin/txt2tags"
+    chmod +x "$out/bin/txt2tags"
+    gzip - < doc/manpage.man > "$out/share/man/man1/txt2tags.1.gz"
+    cp doc/userguide.pdf "$out/share/doc"
+    cp -r extras/ samples/ test/ "$out/share"
+  '';
+
+  src = fetchurl {
+    url = "http://txt2tags.googlecode.com/files/${pname}-${version}.tgz";
+    sha256 = "0p5hql559pk8v5dlzgm75yrcxwvz4z30f1q590yzng0ghvbnf530";
+  };
+
+  meta = {
+    homepage = https://txt2tags.org/;
+    description = "A KISS markup language";
+    license  = stdenv.lib.licenses.gpl2;
+    maintainers = with stdenv.lib.maintainers; [ kovirobi ];
+    platforms = with stdenv.lib.platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/uni2ascii/default.nix b/nixpkgs/pkgs/tools/text/uni2ascii/default.nix
new file mode 100644
index 000000000000..ccf17695f6cd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/uni2ascii/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "uni2ascii-4.18";
+  src = fetchurl {
+    url = "https://billposer.org/Software/Downloads/${name}.tar.gz";
+    sha256 = "03lklnzr6ngs4wqiqa7rifd246f441gfvardbsaa5l6fn9pbn94y";
+  };
+
+  meta = {
+    license = stdenv.lib.licenses.gpl3;
+    homepage = http://billposer.org/Software/uni2ascii.html;
+    description = "Converts between UTF-8 and many 7-bit ASCII equivalents and back";
+
+    longDescription = '' 
+    This package provides conversion in both directions between UTF-8
+    Unicode and more than thirty 7-bit ASCII equivalents, including
+    RFC 2396 URI format and RFC 2045 Quoted Printable format, the
+    representations used in HTML, SGML, XML, OOXML, the Unicode
+    standard, Rich Text Format, POSIX portable charmaps, POSIX locale
+    specifications, and Apache log files, and the escapes used for
+    including Unicode in Ada, C, Common Lisp, Java, Pascal, Perl,
+    Postscript, Python, Scheme, and Tcl.
+
+    Such ASCII equivalents are useful when including Unicode text in
+    program source, when debugging, and when entering text into web
+    programs that can handle the Unicode character set but are not
+    8-bit safe. For example, MovableType, the blog software, truncates
+    posts as soon as it encounters a byte with the high bit
+    set. However, if Unicode is entered in the form of HTML numeric
+    character entities, Movable Type will not garble the post.
+
+    It also provides ways of converting non-ASCII characters to
+    similar ASCII characters, e.g. by stripping diacritics.
+    '';
+    maintainers = with stdenv.lib.maintainers; [ goibhniu ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/unoconv/default.nix b/nixpkgs/pkgs/tools/text/unoconv/default.nix
new file mode 100644
index 000000000000..7ebd2652d2da
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/unoconv/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchFromGitHub, python3, libreoffice-unwrapped, asciidoc, makeWrapper
+# whether to install odt2pdf/odt2doc/... symlinks to unoconv
+, installSymlinks ? true
+}:
+
+# IMPORTANT: unoconv must use the same python version as libreoffice (unless it
+# will not be able to load the pyuno module from libreoffice).
+
+stdenv.mkDerivation rec {
+  pname = "unoconv";
+  version = "0.8.2";
+
+  src = fetchFromGitHub {
+    owner = "unoconv";
+    repo = "unoconv";
+    rev = version;
+    sha256 = "0ix605lk0k3hv241jb2kf4jq5744q2wh9x0pzkmay5m126vv8kq4";
+  };
+
+  buildInputs = [ asciidoc makeWrapper ];
+
+  preBuild = ''
+    makeFlags=prefix="$out"
+  '';
+
+  postInstall = ''
+    sed -i "s|/usr/bin/env python.*|${python3}/bin/${python3.executable}|" "$out/bin/unoconv"
+    wrapProgram "$out/bin/unoconv" \
+       --set-default UNO_PATH ${libreoffice-unwrapped}/lib/libreoffice/program/
+  '' + (if installSymlinks then ''
+    make install-links prefix="$out"
+  '' else "");
+
+  meta = with stdenv.lib; {
+    description = "Convert between any document format supported by LibreOffice/OpenOffice";
+    homepage = http://dag.wieers.com/home-made/unoconv/;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/unrtf/default.nix b/nixpkgs/pkgs/tools/text/unrtf/default.nix
new file mode 100644
index 000000000000..93611ec5531d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/unrtf/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, fetchpatch, autoconf, automake, libiconv }:
+
+stdenv.mkDerivation rec {
+  pname = "unrtf";
+  version = "0.21.9";
+
+  src = fetchurl {
+    url = "https://www.gnu.org/software/unrtf/${pname}-${version}.tar.gz";
+    sha256 = "1pcdzf2h1prn393dkvg93v80vh38q0v817xnbwrlwxbdz4k7i8r2";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "CVE-2016-10091-0001-convert.c-Use-safe-buffer-size-and-snprintf.patch";
+      url = "https://bugs.debian.org/cgi-bin/bugreport.cgi?att=1;bug=849705;filename=0001-convert.c-Use-safe-buffer-size-and-snprintf.patch;msg=20";
+      sha256 = "0s0fjvm3zdm9967sijlipfrwjs0h23n2n8fa6f40xxp8y5qq5a0b";
+    })
+  ];
+
+  nativeBuildInputs = [ autoconf automake ];
+
+  buildInputs = [ libiconv ];
+
+  preConfigure = "./bootstrap";
+
+  outputs = [ "out" "man" ];
+
+  meta = with stdenv.lib; {
+    description = "A converter from Rich Text Format to other formats";
+    longDescription = ''
+      UnRTF converts documents in Rich Text Format to other
+      formats, including HTML, LaTeX, and RTF itself.
+    '';
+    homepage = https://www.gnu.org/software/unrtf/;
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ joachifm ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/untex/default.nix b/nixpkgs/pkgs/tools/text/untex/default.nix
new file mode 100644
index 000000000000..f9c7e3cdfc63
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/untex/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "untex";
+  version = "1.3";
+
+  src = fetchurl {
+    url = "ftp://ftp.thp.uni-duisburg.de/pub/source/${pname}-${version}.tar.gz";
+    sha256 = "1jww43pl9qvg6kwh4h8imp966fzd62dk99pb4s93786lmp3kgdjv";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  unpackPhase = "tar xf $src";
+  installTargets = [ "install" "install.man" ];
+  installFlags = [ "BINDIR=$(out)/bin" "MANDIR=$(out)/share/man/man1" ];
+  preBuild = ''
+    sed -i '1i#include <stdlib.h>\n#include <string.h>' untex.c
+    mkdir -p $out/bin $out/share/man/man1
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A utility which removes LaTeX commands from input";
+    homepage = https://www.ctan.org/pkg/untex;
+    license = licenses.gpl1;
+    maintainers = with maintainers; [ joachifm ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/vale/default.nix b/nixpkgs/pkgs/tools/text/vale/default.nix
new file mode 100644
index 000000000000..308f893e73b7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/vale/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "vale";
+  version = "1.7.1";
+
+  subPackages = [ "." ];
+
+  src = fetchFromGitHub {
+    owner  = "errata-ai";
+    repo   = "vale";
+    rev    = "v${version}";
+    sha256 = "1qi3brjppiymk6as0xic2n3bhq8g8qw1z8d9a24w60x9gp52yq5m";
+  };
+
+  goPackagePath = "github.com/errata-ai/vale";
+
+  meta = with stdenv.lib; {
+    homepage = https://errata-ai.github.io/vale/;
+    description = "A syntax-aware linter for prose built with speed and extensibility in mind";
+    license = licenses.mit;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/wdiff/default.nix b/nixpkgs/pkgs/tools/text/wdiff/default.nix
new file mode 100644
index 000000000000..001ed1addaad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/wdiff/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl, texinfo, which }:
+
+stdenv.mkDerivation rec {
+  name = "wdiff-1.2.2";
+
+  src = fetchurl {
+    url = "mirror://gnu/wdiff/${name}.tar.gz";
+    sha256 = "0sxgg0ms5lhi4aqqvz1rj4s77yi9wymfm3l3gbjfd1qchy66kzrl";
+  };
+
+  buildInputs = [ texinfo ];
+
+  checkInputs = [ which ];
+
+  meta = {
+    homepage = https://www.gnu.org/software/wdiff/;
+    description = "Comparing files on a word by word basis";
+    license = stdenv.lib.licenses.gpl3Plus;
+    maintainers = [ stdenv.lib.maintainers.eelco ];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/wgetpaste/default.nix b/nixpkgs/pkgs/tools/text/wgetpaste/default.nix
new file mode 100644
index 000000000000..3360fd4cbe09
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/wgetpaste/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, wget, bash }:
+
+stdenv.mkDerivation rec {
+  version = "2.29";
+  pname = "wgetpaste";
+
+  src = fetchurl {
+    url = "http://wgetpaste.zlin.dk/${pname}-${version}.tar.bz2";
+    sha256 = "1rp0wxr3zy7y2xp3azaadfghrx7g0m138f9qg6icjxkkz4vj9r22";
+  };
+  # currently zsh-autocompletion support is not installed
+
+  prePatch = ''
+    substituteInPlace wgetpaste --replace "/usr/bin/env bash" "${bash}/bin/bash"
+    substituteInPlace wgetpaste --replace "LC_ALL=C wget" "LC_ALL=C ${wget}/bin/wget"
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin;
+    cp wgetpaste $out/bin;
+  '';
+
+  meta = {
+    description = "Command-line interface to various pastebins";
+    homepage = http://wgetpaste.zlin.dk/;
+    license = stdenv.lib.licenses.publicDomain;
+    maintainers = with stdenv.lib.maintainers; [ qknight domenkozar ];
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/xidel/default.nix b/nixpkgs/pkgs/tools/text/xidel/default.nix
new file mode 100644
index 000000000000..92ad2e005884
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/xidel/default.nix
@@ -0,0 +1,49 @@
+{ stdenv, fetchurl, dpkg }:
+
+stdenv.mkDerivation rec {
+  pname = "xidel";
+  version = "0.9.6";
+
+  ## Source archive lacks file (manageUtils.sh), using pre-built package for now.
+  #src = fetchurl {
+  #  url = "mirror://sourceforge/videlibri/Xidel/Xidel%20${version}/${name}.src.tar.gz";
+  #  sha256 = "1h5xn16lgzx0s94iyhxa50lk05yf0af44nzm5w5k57615nd82kz2";
+  #};
+
+  src =
+    if stdenv.hostPlatform.system == "x86_64-linux" then
+      fetchurl {
+        url = "mirror://sourceforge/videlibri/Xidel/Xidel%20${version}/xidel_${version}-1_amd64.deb";
+        sha256 = "0hskc74y7p4j1x33yx0w4fvr610p2yimas8pxhr6bs7mb9b300h7";
+      }
+    else if stdenv.hostPlatform.system == "i686-linux" then
+      fetchurl {
+        url = "mirror://sourceforge/videlibri/Xidel/Xidel%20${version}/xidel_${version}-1_i386.deb";
+        sha256 = "07yk5sk1p4jm0jmgjwdm2wq8d2wybi1wkn1qq5j5y03z1pdc3fi6";
+      }
+    else throw "xidel is not supported on ${stdenv.hostPlatform.system}";
+
+  buildInputs = [ dpkg ];
+
+  unpackPhase = ''
+    dpkg-deb -x ${src} ./
+  '';
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p "$out/bin"
+    cp -a usr/* "$out/"
+    patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" "$out/bin/xidel"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Command line tool to download and extract data from html/xml pages";
+    homepage = http://videlibri.sourceforge.net/xidel.html;
+    # source contains no license info (AFAICS), but sourceforge says GPLv2
+    license = licenses.gpl2;
+    # more platforms will be supported when we switch to source build
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/xml/basex/basex.svg b/nixpkgs/pkgs/tools/text/xml/basex/basex.svg
new file mode 100644
index 000000000000..9d476cec2ca1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/xml/basex/basex.svg
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   id="svg2178"
+   sodipodi:version="0.32"
+   inkscape:version="0.45"
+   width="1568"
+   height="1164"
+   version="1.0"
+   sodipodi:docbase="F:\Uni\Scholl\Research\Conferences\BTW2007\Poster"
+   sodipodi:docname="Logo.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   sodipodi:modified="true">
+  <metadata
+     id="metadata2183">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs2181" />
+  <sodipodi:namedview
+     inkscape:window-height="1150"
+     inkscape:window-width="1143"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     guidetolerance="10.0"
+     gridtolerance="10.0"
+     objecttolerance="10.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base"
+     inkscape:zoom="0.64948454"
+     inkscape:cx="784"
+     inkscape:cy="584.00852"
+     inkscape:window-x="412"
+     inkscape:window-y="20"
+     inkscape:current-layer="layer2"
+     showgrid="false"
+     inkscape:object-bbox="true"
+     inkscape:object-points="true"
+     gridempspacing="10" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     style="opacity:1">
+    <path
+       style="font-size:1470px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:19.98425102;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;font-family:Clarendo"
+       d="M 628.08008,847.55762 C 613.24569,864.30587 601.88095,879.3791 593.98584,892.77734 C 586.08995,906.17595 582.1422,916.94254 582.14258,925.07715 C 582.1422,937.9972 586.92735,947.08899 596.49805,952.35254 C 606.06796,957.61633 624.49079,960.24816 651.7666,960.24805 L 720.67285,960.24805 L 720.67285,1072.2207 L 207.46484,1072.2207 L 207.46484,960.24805 L 256.27344,960.24805 C 284.9843,960.24816 308.07265,955.94152 325.53857,947.32813 C 343.00426,938.71498 364.89633,919.09586 391.21484,888.4707 L 673.2998,568.34375 L 441.45898,276.92773 C 416.57596,245.82505 393.60723,224.77038 372.55273,213.76367 C 351.4979,202.75868 325.89734,197.25576 295.75098,197.25488 L 245.50684,197.25488 L 245.50684,86 L 767.32813,86 L 767.32813,197.25488 L 699.85742,197.25488 C 685.97999,197.25576 675.45266,199.76796 668.27539,204.7915 C 661.0972,209.81678 657.50834,217.11414 657.50879,226.68359 C 657.50834,233.38365 659.30277,240.20249 662.89209,247.14014 C 666.4805,254.07943 672.58156,262.57308 681.19531,272.62109 L 810.39453,429.81348 L 967.58691,265.44336 C 974.76388,258.26644 980.50606,250.84945 984.81348,243.19238 C 989.11933,235.53697 991.27265,229.07702 991.27344,223.8125 C 991.27265,215.20008 985.88936,208.62049 975.12354,204.07373 C 964.35618,199.5287 948.20629,197.25576 926.67383,197.25488 L 869.25195,197.25488 L 869.25195,86 L 1332.2158,86 L 1332.2158,197.25488 L 1279.1006,197.25488 C 1241.2968,197.25576 1189.8564,233.14439 1124.7793,304.9209 L 1123.3438,306.35645 L 905.8584,544.65723 L 1155.6436,856.1709 C 1194.8808,904.97966 1224.6684,934.52797 1245.0063,944.81592 C 1265.3422,955.10412 1294.412,960.24816 1332.2158,960.24805 L 1376,960.24805 L 1376,1072.2207 L 810.39453,1072.2207 L 810.39453,960.24805 L 877.86523,960.24805 C 901.79032,960.24816 919.25612,958.21447 930.2627,954.14697 C 941.26782,950.07971 946.77074,943.26087 946.77148,933.69043 C 946.77074,926.51284 945.3352,918.97623 942.46484,911.08057 C 939.59302,903.18523 935.28638,895.64861 929.54492,888.4707 L 768.76367,685.34082 L 628.08008,847.55762 z "
+       id="text2175" />
+    <path
+       style="font-size:500px;font-style:normal;font-variant:normal;font-weight:800;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#e00000;fill-opacity:1;stroke:#ffffff;stroke-width:20;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;font-family:Arial Black"
+       d="M 146.16714,395.52869 L 353.19839,395.52869 C 387.70332,395.52904 414.19255,404.07396 432.66616,421.16345 C 451.13913,438.25361 460.37577,459.41244 460.37612,484.64001 C 460.37577,505.79912 453.78398,523.94688 440.60073,539.08337 C 431.81135,549.17472 418.95329,557.14998 402.02651,563.00916 C 427.74234,569.19424 446.66322,579.81434 458.78921,594.86951 C 470.9145,609.92499 476.97732,628.84587 476.97768,651.6322 C 476.97732,670.18697 472.66417,686.8699 464.03823,701.68103 C 455.41158,716.49227 443.61146,728.211 428.63784,736.83728 C 419.36019,742.20839 405.3628,746.11463 386.64565,748.55603 C 361.74306,751.81124 345.22289,753.43884 337.08511,753.43884 L 146.16714,753.43884 L 146.16714,395.52869 z M 257.7394,535.90955 L 305.83511,535.90955 C 323.0875,535.90976 335.09107,532.93939 341.84585,526.99841 C 348.60017,521.05789 351.97744,512.47229 351.97768,501.24158 C 351.97744,490.82517 348.60017,482.68716 341.84585,476.82751 C 335.09107,470.96842 323.33164,468.03874 306.56753,468.03845 L 257.7394,468.03845 L 257.7394,535.90955 z M 257.7394,676.53455 L 314.13589,676.53455 C 333.17863,676.53462 346.60635,673.15735 354.41909,666.40271 C 362.23134,659.64825 366.13758,650.57436 366.13784,639.18103 C 366.13758,628.60173 362.27203,620.0975 354.54116,613.66833 C 346.8098,607.23944 333.26001,604.02493 313.89175,604.02478 L 257.7394,604.02478 L 257.7394,676.53455 z "
+       id="text2205" />
+    <path
+       style="font-size:500px;font-style:normal;font-variant:normal;font-weight:800;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#e00000;fill-opacity:1;stroke:#ffffff;stroke-width:20;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;font-family:Arial Black"
+       d="M 703.69272,694.35681 L 577.71616,694.35681 L 560.38217,753.43884 L 447.34506,753.43884 L 581.86655,395.52869 L 702.47202,395.52869 L 836.9935,753.43884 L 721.27084,753.43884 L 703.69272,694.35681 z M 680.49936,616.96423 L 640.94858,488.30212 L 601.64194,616.96423 L 680.49936,616.96423 z "
+       id="text3180" />
+    <path
+       style="font-size:500px;font-style:normal;font-variant:normal;font-weight:800;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#e00000;fill-opacity:1;stroke:#ffffff;stroke-width:20;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;font-family:Arial Black"
+       d="M 810.90509,641.13416 L 916.1297,634.54236 C 918.40822,651.63231 923.04689,664.65313 930.04572,673.60486 C 941.4388,688.09061 957.71482,695.33344 978.87384,695.33337 C 994.6614,695.33344 1006.8277,691.63064 1015.3729,684.22498 C 1023.9176,676.81946 1028.19,668.23386 1028.1902,658.46814 C 1028.19,649.19091 1024.121,640.89013 1015.9832,633.5658 C 1007.845,626.24171 988.96479,619.3244 959.34259,612.81384 C 910.83987,601.90905 876.25331,587.42339 855.58282,569.35681 C 834.74945,551.29061 824.33279,528.26004 824.33282,500.26501 C 824.33279,481.87337 829.66319,464.49871 840.32404,448.14099 C 850.98479,431.7839 867.01667,418.92584 888.41974,409.56677 C 909.82262,400.20841 939.16015,395.52905 976.43243,395.52869 C 1022.1679,395.52905 1057.0393,404.03327 1081.0467,421.04138 C 1105.0535,438.05017 1119.3358,465.10906 1123.8934,502.21814 L 1019.6453,508.32166 C 1016.8782,492.20864 1011.0595,480.4899 1002.1893,473.16541 C 993.31863,465.84148 981.07092,462.17937 965.44611,462.17908 C 952.58787,462.17937 942.90364,464.90561 936.39337,470.35779 C 929.88282,475.81055 926.62761,482.44303 926.62775,490.25525 C 926.62761,495.95213 929.31316,501.07908 934.68439,505.63611 C 939.89257,510.35641 952.26235,514.75094 971.79376,518.8197 C 1020.1334,529.2366 1054.7606,539.77533 1075.6756,550.43591 C 1096.59,561.09692 1111.8081,574.32119 1121.3299,590.10876 C 1130.851,605.89668 1135.6118,623.55617 1135.6121,643.08728 C 1135.6118,666.03659 1129.2641,687.19543 1116.5692,706.56384 C 1103.8735,725.93237 1086.1327,740.62148 1063.3465,750.63123 C 1040.5598,760.64099 1011.8326,765.64587 977.16486,765.64587 C 916.29234,765.64587 874.13743,753.92713 850.70001,730.48962 C 827.26248,707.05218 813.99752,677.26705 810.90509,641.13416 L 810.90509,641.13416 z "
+       id="text3184" />
+    <path
+       style="font-size:500px;font-style:normal;font-variant:normal;font-weight:800;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#e00000;fill-opacity:1;stroke:#ffffff;stroke-width:20;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;font-family:Arial Black"
+       d="M 1139.0592,395.52869 L 1435.4459,395.52869 L 1435.4459,471.9447 L 1249.899,471.9447 L 1249.899,528.82947 L 1422.0182,528.82947 L 1422.0182,601.82751 L 1249.899,601.82751 L 1249.899,672.38416 L 1440.817,672.38416 L 1440.817,753.43884 L 1139.0592,753.43884 L 1139.0592,395.52869 z "
+       id="text3188" />
+  </g>
+</svg>
diff --git a/nixpkgs/pkgs/tools/text/xml/basex/default.nix b/nixpkgs/pkgs/tools/text/xml/basex/default.nix
new file mode 100644
index 000000000000..704ccede799b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/xml/basex/default.nix
@@ -0,0 +1,73 @@
+{ stdenv, fetchurl, unzip, jre, coreutils, makeDesktopItem }:
+
+stdenv.mkDerivation rec {
+  pname = "basex";
+  version = "8.6.6";
+
+  src = fetchurl {
+    url = "http://files.basex.org/releases/${version}/BaseX866.zip";
+    sha256 = "1kws6swisdaa17yhijjvkh2ikwz9rd5cw8mdjvkqw6vlcp1nq6m4";
+  };
+
+  buildInputs = [ unzip jre ];
+
+  desktopItem = makeDesktopItem {
+    name = "basex";
+    exec = "basexgui %f";
+    icon = ./basex.svg; # icon copied from Ubuntu basex package
+    comment = "Visually query and analyse your XML data";
+    desktopName = "BaseX XML Database";
+    genericName = "XML database tool";
+    categories = "Development;Utility;Database";
+    mimeType = "text/xml";
+  };
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p "$out"
+    cp -r * "$out"
+
+    # Remove Windows batch files (unclutter $out/bin)
+    rm -f "$out"/bin/*.bat
+
+    # Move some top-level stuff to $out/share/basex (unclutter $out)
+    mkdir -p "$out/share/basex"
+    mv "$out"/*.txt "$out/share/basex/"
+    mv "$out"/webapp "$out/share/basex/"
+
+    # Remove empty directories
+    rmdir "$out/repo"
+    rmdir "$out/data"
+
+    # Install desktop file
+    mkdir -p "$out/share/applications"
+    cp "$desktopItem"/share/applications/* "$out/share/applications/"
+
+    # Use substitutions instead of wrapper scripts
+    for file in "$out"/bin/*; do
+        sed -i -e "s|/usr/bin/env bash|${stdenv.shell}|" \
+               -e "s|java|${jre}/bin/java|" \
+               -e "s|readlink|${coreutils}/bin/readlink|" \
+               -e "s|dirname|${coreutils}/bin/dirname|" \
+               -e "s|basename|${coreutils}/bin/basename|" \
+               -e "s|echo|${coreutils}/bin/echo|" \
+            "$file"
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    description = "XML database and XPath/XQuery processor";
+    longDescription = ''
+      BaseX is a very fast and light-weight, yet powerful XML database and
+      XPath/XQuery processor, including support for the latest W3C Full Text
+      and Update Recommendations. It supports large XML instances and offers a
+      highly interactive front-end (basexgui). Apart from two local standalone
+      modes, BaseX offers a client/server architecture.
+    '';
+    homepage = http://basex.org/;
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/xml/html-xml-utils/default.nix b/nixpkgs/pkgs/tools/text/xml/html-xml-utils/default.nix
new file mode 100644
index 000000000000..7ac624caff18
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/xml/html-xml-utils/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl, curl, libiconv }:
+
+stdenv.mkDerivation rec {
+  pname = "html-xml-utils";
+  version = "7.8";
+
+  src = fetchurl {
+    url = "https://www.w3.org/Tools/HTML-XML-utils/${pname}-${version}.tar.gz";
+    sha256 = "0p8df3c6mw879vdi8l63kbdqylkf1is10b067mh9kipgfy91rd4s";
+  };
+
+  buildInputs = [curl libiconv];
+
+  meta = with stdenv.lib; {
+    description = "Utilities for manipulating HTML and XML files";
+    homepage = http://www.w3.org/Tools/HTML-XML-utils/;
+    license = licenses.w3c;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/xml/jing-trang/default.nix b/nixpkgs/pkgs/tools/text/xml/jing-trang/default.nix
new file mode 100644
index 000000000000..b38c2b3e34de
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/xml/jing-trang/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchFromGitHub, jre_headless, jdk, ant, saxon }:
+
+stdenv.mkDerivation {
+  pname = "jing-trang";
+  version = "20151127";
+
+  src = fetchFromGitHub {
+    owner = "relaxng";
+    repo = "jing-trang";
+    rev = "47a0cbdaec2d48824b78a1c19879ac7875509598"; # needed to compile with jdk8
+    sha256 = "1hhn52z9mv1x9nyvyqnmzg5yrs2lzm9xac7i15izppv02wp32qha";
+  };
+
+  buildInputs = [ jdk ant saxon ];
+
+  CLASSPATH = "lib/saxon.jar";
+
+  preBuild = "ant";
+
+  installPhase = ''
+    mkdir -p "$out"/{share/java,bin}
+    cp ./build/*.jar "$out/share/java/"
+
+    for tool in jing trang; do
+    cat > "$out/bin/$tool" <<EOF
+    #! $SHELL
+    export JAVA_HOME='${jre_headless}'
+    exec '${jre_headless}/bin/java' -jar '$out/share/java/$tool.jar' "\$@"
+    EOF
+    done
+
+    chmod +x "$out"/bin/*
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A RELAX NG validator in Java";
+    # The homepage is www.thaiopensource.com, but it links to googlecode.com
+    # for downloads and call it the "project site".
+    homepage = https://www.thaiopensource.com/relaxng/trang.html;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/xml/rnv/default.nix b/nixpkgs/pkgs/tools/text/xml/rnv/default.nix
new file mode 100644
index 000000000000..21869cef4ee4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/xml/rnv/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl, expat }:
+
+stdenv.mkDerivation rec {
+  pname = "rnv";
+  version = "1.7.11";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/rnv/rnv-${version}.tar.xz";
+    sha256 = "1rlxrkkkp8b5j6lyvnd9z1d85grmwwmdggkxq6yl226nwkqj1faa";
+  };
+
+  buildInputs = [ expat ];
+
+  meta = with stdenv.lib; {
+    description = "Relax NG Compact Syntax validator";
+    homepage = http://www.davidashen.net/rnv.html;
+    license = licenses.bsd3;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/xml/rxp/default.nix b/nixpkgs/pkgs/tools/text/xml/rxp/default.nix
new file mode 100644
index 000000000000..093f1b0aec7f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/xml/rxp/default.nix
@@ -0,0 +1,18 @@
+{stdenv, fetchurl} :
+
+stdenv.mkDerivation rec {
+  pname = "rxp";
+  version = "1.5.0";
+
+  src = fetchurl {
+    url = "mirror://debian/pool/main/r/rxp/rxp_${version}.orig.tar.gz";
+    sha256 = "0y365r36wzj4xn1dzhb03spxljnrx8vwqbiwnnwz4630129gzpm6";
+  };
+
+  meta = {
+    license = stdenv.lib.licenses.gpl2Plus;
+    description = "A validating XML parser written in C";
+    homepage = http://www.cogsci.ed.ac.uk/~richard/rxp.html;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/xml/xml2/default.nix b/nixpkgs/pkgs/tools/text/xml/xml2/default.nix
new file mode 100644
index 000000000000..3be952358b65
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/xml/xml2/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchurl, pkgconfig, libxml2 }:
+
+stdenv.mkDerivation {
+  name = "xml2-0.5";
+
+  src = fetchurl {
+    url = https://web.archive.org/web/20160427221603/http://download.ofb.net/gale/xml2-0.5.tar.gz;
+    sha256 = "01cps980m99y99cnmvydihga9zh3pvdsqag2fi1n6k2x7rfkl873";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libxml2 ];
+
+  meta = with stdenv.lib; {
+    homepage = https://web.archive.org/web/20160515005047/http://dan.egnor.name:80/xml2;
+    description = "Tools for command line processing of XML, HTML, and CSV";
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+    maintainers = [ maintainers.rycee ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/xml/xmlformat/default.nix b/nixpkgs/pkgs/tools/text/xml/xmlformat/default.nix
new file mode 100644
index 000000000000..8dfec26e8116
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/xml/xmlformat/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, perl }:
+stdenv.mkDerivation rec {
+  pname = "xmlformat";
+  version = "1.04";
+
+  src = fetchurl {
+    url = "http://www.kitebird.com/software/xmlformat/xmlformat-${version}.tar.gz";
+    sha256 = "1vwgzn4ha0az7dx0cyc6dx5nywwrx9gxhyh08mvdcq27wjbh79vi";
+  };
+
+  buildInputs = [ perl ];
+  buildPhase = ''
+    patchShebangs ./xmlformat.pl
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ./xmlformat.pl $out/bin/xmlformat
+    cp ./LICENSE $out/
+  '';
+
+  meta = {
+    description = "a configurable formatter (or 'pretty-printer') for XML documents";
+    homepage = "http://www.kitebird.com/software/xmlformat/";
+    license = stdenv.lib.licenses.bsd3;
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/xml/xmloscopy/default.nix b/nixpkgs/pkgs/tools/text/xml/xmloscopy/default.nix
new file mode 100644
index 000000000000..5d085e411963
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/xml/xmloscopy/default.nix
@@ -0,0 +1,53 @@
+{ stdenv, lib, makeWrapper, dev_only_shellcheck ? null,
+fetchFromGitHub,
+
+fzf, coreutils, libxml2, libxslt, jing, findutils, gnugrep, gnused,
+docbook5
+}:
+stdenv.mkDerivation rec {
+  pname = "xmloscopy";
+  version = "0.1.3";
+
+  nativeBuildInputs = [
+    makeWrapper
+    dev_only_shellcheck
+  ];
+
+  spath = lib.makeBinPath [
+    fzf
+    coreutils
+    libxml2
+    libxslt
+    jing
+    findutils
+    gnugrep
+    gnused
+  ];
+
+  src = fetchFromGitHub {
+    owner = "grahamc";
+    repo = "xmloscopy";
+    rev = "v${version}";
+    sha256 = "06y5bckrmnq7b5ny2hfvlmdws910jw3xbw5nzy3bcpqsccqnjxrc";
+  };
+
+  installPhase = ''
+    sed -i "s/hard to say/v${version}/" ./xmloscopy
+    type -P shellcheck && shellcheck ./xmloscopy
+    chmod +x ./xmloscopy
+    patchShebangs ./xmloscopy
+    mkdir -p $out/bin
+    cp ./xmloscopy $out/bin/
+    wrapProgram $out/bin/xmloscopy \
+      --set RNG "${docbook5}/xml/rng/docbook/docbook.rng" \
+      --set PATH "${spath}"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "wtf is my docbook broken?";
+    homepage = https://github.com/grahamc/xmloscopy;
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ grahamc ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/xml/xmlstarlet/default.nix b/nixpkgs/pkgs/tools/text/xml/xmlstarlet/default.nix
new file mode 100644
index 000000000000..4fe6ad6b3dc9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/xml/xmlstarlet/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl, pkgconfig, libxml2, libxslt }:
+
+stdenv.mkDerivation rec {
+  name = "xmlstarlet-1.6.1";
+  
+  src = fetchurl {
+    url = "mirror://sourceforge/xmlstar/${name}.tar.gz";
+    sha256 = "1jp737nvfcf6wyb54fla868yrr39kcbijijmjpyk4lrpyg23in0m";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libxml2 libxslt ];
+
+  preConfigure =
+    ''
+      export LIBXSLT_PREFIX=${libxslt.dev}
+      export LIBXML_PREFIX=${libxml2.dev}
+      export LIBXSLT_LIBS=$(pkg-config --libs libxslt libexslt)
+      export LIBXML_LIBS=$(pkg-config --libs libxml-2.0)
+    '';
+
+  postInstall =
+    ''
+      ln -s xml $out/bin/xmlstarlet
+    '';
+
+  meta = {
+    description = "A command line tool for manipulating and querying XML data";
+    homepage = http://xmlstar.sourceforge.net/;
+    license = stdenv.lib.licenses.mit;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/xml/xpf/default.nix b/nixpkgs/pkgs/tools/text/xml/xpf/default.nix
new file mode 100644
index 000000000000..b35053d362bb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/xml/xpf/default.nix
@@ -0,0 +1,20 @@
+{stdenv, fetchurl, python2, libxml2}:
+
+assert libxml2.pythonSupport == true;
+
+stdenv.mkDerivation {
+  name = "xpf-0.2";
+  
+  src = fetchurl {
+    url = http://tarballs.nixos.org/xpf-0.2.tar.gz;
+    sha256 = "0ljx91w68rnh4871c0xlq2whlmhqz8dr39wcdczfjjpniqz1fmpz";
+  };
+  
+  buildInputs = [ python2 libxml2 ];
+
+  meta = {
+    description = "XML Pipes and Filters - command line tools for manipulating and querying XML data";
+    homepage = http://www.cs.uu.nl/wiki/bin/view/Martin/XmlPipesAndFilters;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/xsv/default.nix b/nixpkgs/pkgs/tools/text/xsv/default.nix
new file mode 100644
index 000000000000..cf44782432c4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/xsv/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub, rustPlatform, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "xsv";
+  version = "0.13.0";
+
+  src = fetchFromGitHub {
+    owner = "BurntSushi";
+    repo = "xsv";
+    rev = version;
+    sha256 = "17v1nw36mrarrd5yv4xd3mpc1d7lvhd5786mqkzyyraf78pjg045";
+  };
+
+  cargoSha256 = "1xlbszr9ccv924ww45lnc0qqb7nxj2cnc41480xbpvsdqsdrgbhs";
+
+  buildInputs = stdenv.lib.optional stdenv.isDarwin Security;
+
+  meta = with stdenv.lib; {
+    description = "A fast CSV toolkit written in Rust";
+    homepage = https://github.com/BurntSushi/xsv;
+    license = with licenses; [ unlicense /* or */ mit ];
+    maintainers = [ maintainers.jgertm ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/xurls/default.nix b/nixpkgs/pkgs/tools/text/xurls/default.nix
new file mode 100644
index 000000000000..c8d10a6e2699
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/xurls/default.nix
@@ -0,0 +1,24 @@
+{ buildGoPackage, stdenv, fetchFromGitHub }:
+
+buildGoPackage rec {
+  version = "2.0.0";
+  pname = "xurls";
+
+  src = fetchFromGitHub {
+    owner = "mvdan";
+    repo = "xurls";
+    rev = "v${version}";
+    sha256 = "1jdjwlp19r8cb7vycyrjmpwf8dz2fzrqphq4lkvy9x2v7x0kksx8";
+  };
+
+  goPackagePath = "mvdan.cc/xurls/v2";
+  subPackages = [ "cmd/xurls" ];
+
+  meta = with stdenv.lib; {
+    description = "Extract urls from text";
+    homepage = https://github.com/mvdan/xurls;
+    maintainers = with maintainers; [ koral ];
+    platforms = platforms.unix;
+    license = licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/yaml-merge/default.nix b/nixpkgs/pkgs/tools/text/yaml-merge/default.nix
new file mode 100644
index 000000000000..95a94cee7c4b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/yaml-merge/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub, pythonPackages }:
+
+stdenv.mkDerivation {
+  name= "yaml-merge-2016-02-16";
+
+  src = fetchFromGitHub {
+    owner = "abbradar";
+    repo = "yaml-merge";
+    rev = "4eef7b68632d79dec369b4eff5a8c63f995f81dc";
+    sha256 = "0mwda2shk43i6f22l379fcdchmb07fm7nf4i2ii7fk3ihkhb8dgp";
+  };
+
+  pythonPath = with pythonPackages; [ pyyaml ];
+  nativeBuildInputs = [ pythonPackages.wrapPython ];
+
+  installPhase = ''
+    install -Dm755 yaml-merge.py $out/bin/yaml-merge
+    wrapPythonPrograms
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Merge YAML data files";
+    homepage = https://github.com/abbradar/yaml-merge;
+    license = licenses.bsd2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/zimreader/default.nix b/nixpkgs/pkgs/tools/text/zimreader/default.nix
new file mode 100644
index 000000000000..177f9326dd27
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/zimreader/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchFromGitHub, fetchpatch, automake, autoconf, libtool
+, zimlib, cxxtools, tntnet
+}:
+
+stdenv.mkDerivation {
+  name = "zimreader-0.92";
+
+  src = fetchFromGitHub {
+    owner = "wikimedia";
+    repo = "openzim";
+    rev = "r1.3"; # there multiple tools with different version in the repo
+    sha256 = "0x529137rxy6ld64xqa6xmn93121ripxvkf3sc7hv3wg6km182sw";
+  };
+
+  patchFlags = [ "-p2" ];
+  patches = [
+    (fetchpatch {
+      name = "zimreader_tntnet221.patch";
+      url = "https://github.com/wikimedia/openzim/compare/r1.3...juliendehos:3ee5f11eaa811284d340451e6f466529c00f6ef2.patch";
+      sha256 = "0rc5n20svyyndqh7hsynjyblfraphgi0f6khw6f5jq89w9i1j1hd";
+    })
+  ];
+
+  enableParallelBuilding = true;
+  buildInputs = [ automake autoconf libtool zimlib cxxtools tntnet ];
+  setSourceRoot = ''
+    sourceRoot=$(echo */zimreader)
+  '';
+  preConfigure = "./autogen.sh";
+
+  meta = {
+    description = "A tool to serve ZIM files using HTTP";
+    homepage = http://git.wikimedia.org/log/openzim;
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = with stdenv.lib.maintainers; [ robbinch juliendehos ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/text/zimwriterfs/default.nix b/nixpkgs/pkgs/tools/text/zimwriterfs/default.nix
new file mode 100644
index 000000000000..27334bf09b4c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/text/zimwriterfs/default.nix
@@ -0,0 +1,43 @@
+{ stdenv
+, fetchFromGitHub
+
+, autoconf
+, automake
+, libtool
+, pkgconfig
+
+, file
+, icu
+, gumbo
+, lzma
+, xapian
+, zimlib
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "zimwriterfs";
+  version = "1.0";
+
+  src = fetchFromGitHub {
+    owner = "wikimedia";
+    repo = "openzim";
+    rev = "${pname}-${version}";
+    sha256 = "1vkrrq929a8s3m5rri1lg0l2vd0mc9n2fsb2z1g88k4n4j2l6f19";
+  };
+
+  nativeBuildInputs = [ automake autoconf libtool pkgconfig ];
+  buildInputs = [ file icu gumbo lzma zimlib zlib xapian ];
+  setSourceRoot = ''
+    sourceRoot=$(echo */zimwriterfs)
+  '';
+  preConfigure = "./autogen.sh";
+
+  meta = {
+    description = "A console tool to create ZIM files";
+    homepage = http://git.wikimedia.org/log/openzim;
+    maintainers = with stdenv.lib.maintainers; [ robbinch ];
+    license = stdenv.lib.licenses.gpl3;
+    platforms = with stdenv.lib.platforms; [ linux ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/toml2nix/default.nix b/nixpkgs/pkgs/tools/toml2nix/default.nix
new file mode 100644
index 000000000000..ac4de4eee144
--- /dev/null
+++ b/nixpkgs/pkgs/tools/toml2nix/default.nix
@@ -0,0 +1,18 @@
+# Generated by carnix 0.9.7: carnix generate-nix
+{ lib, buildPlatform, buildRustCrate, buildRustCrateHelpers, cratesIO, fetchgit }:
+with buildRustCrateHelpers;
+let inherit (lib.lists) fold;
+    inherit (lib.attrsets) recursiveUpdate;
+in
+let crates = cratesIO; in
+rec {
+  toml2nix = crates.crates.toml2nix."0.1.1" deps;
+  __all = [ (toml2nix {}) ];
+  deps.serde."1.0.84" = {};
+  deps.toml."0.4.10" = {
+    serde = "1.0.84";
+  };
+  deps.toml2nix."0.1.1" = {
+    toml = "0.4.10";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/asciidoc/default.nix b/nixpkgs/pkgs/tools/typesetting/asciidoc/default.nix
new file mode 100644
index 000000000000..44c5f6d1f242
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/asciidoc/default.nix
@@ -0,0 +1,281 @@
+{ fetchurl, stdenv, python2
+
+, enableStandardFeatures ? false
+, sourceHighlight ? null
+, highlight ? null
+, pygments ? null
+, graphviz ? null
+, texlive ? null
+, dblatexFull ? null
+, libxslt ? null
+, w3m ? null
+, lynx ? null
+, imagemagick ? null
+, lilypond ? null
+, libxml2 ? null
+, docbook_xml_dtd_45 ? null
+, docbook_xsl_ns ? null
+, docbook_xsl ? null
+, fop ? null
+# TODO: Package this:
+#, epubcheck ? null
+, gnused ? null
+, coreutils ? null
+
+# if true, enable all the below filters and backends
+, enableExtraPlugins ? false
+
+# unzip is needed to extract filter and backend plugins
+, unzip ? null
+# filters
+, enableDitaaFilter ? false, jre ? null
+, enableMscgenFilter ? false, mscgen ? null
+, enableDiagFilter ? false, blockdiag ? null, seqdiag ? null, actdiag ? null, nwdiag ? null
+, enableQrcodeFilter ? false, qrencode ? null
+, enableMatplotlibFilter ? false, matplotlib ? null, numpy ? null
+, enableAafigureFilter ? false, aafigure ? null, recursivePthLoader ? null
+# backends
+, enableDeckjsBackend ? false
+, enableOdfBackend ? false
+
+# java is problematic on some platforms, where it is unfree
+, enableJava ? true
+}:
+
+assert enableStandardFeatures ->
+  sourceHighlight != null &&
+  highlight != null &&
+  pygments != null &&
+  graphviz != null &&
+  texlive != null &&
+  dblatexFull != null &&
+  libxslt != null &&
+  w3m != null &&
+  lynx != null &&
+  imagemagick != null &&
+  lilypond != null &&
+  libxml2 != null &&
+  docbook_xml_dtd_45 != null &&
+  docbook_xsl_ns != null &&
+  docbook_xsl != null &&
+  (fop != null || !enableJava) &&
+# TODO: Package this:
+#  epubcheck != null &&
+  gnused != null &&
+  coreutils != null;
+
+# filters
+assert enableExtraPlugins || enableDitaaFilter || enableMscgenFilter || enableDiagFilter || enableQrcodeFilter || enableAafigureFilter -> unzip != null;
+assert (enableExtraPlugins && enableJava) || enableDitaaFilter -> jre != null;
+assert enableExtraPlugins || enableMscgenFilter -> mscgen != null;
+assert enableExtraPlugins || enableDiagFilter -> blockdiag != null && seqdiag != null && actdiag != null && nwdiag != null;
+assert enableExtraPlugins || enableMatplotlibFilter -> matplotlib != null && numpy != null;
+assert enableExtraPlugins || enableAafigureFilter -> aafigure != null && recursivePthLoader != null;
+# backends
+assert enableExtraPlugins || enableDeckjsBackend || enableOdfBackend -> unzip != null;
+
+let
+
+  _enableDitaaFilter = (enableExtraPlugins && enableJava) || enableDitaaFilter;
+  _enableMscgenFilter = enableExtraPlugins || enableMscgenFilter;
+  _enableDiagFilter = enableExtraPlugins || enableDiagFilter;
+  _enableQrcodeFilter = enableExtraPlugins || enableQrcodeFilter;
+  _enableMatplotlibFilter = enableExtraPlugins || enableMatplotlibFilter;
+  _enableAafigureFilter = enableExtraPlugins || enableAafigureFilter;
+  _enableDeckjsBackend = enableExtraPlugins || enableDeckjsBackend;
+  _enableOdfBackend = enableExtraPlugins || enableOdfBackend;
+
+  #
+  # filters
+  #
+
+  ditaaFilterSrc = fetchurl {
+    url = "https://asciidoc-ditaa-filter.googlecode.com/files/ditaa-filter-1.1.zip";
+    sha256 = "0p7hm2a1xywx982ia3vg4c0lam5sz0xknsc10i2a5vswy026naf6";
+  };
+
+  mscgenFilterSrc = fetchurl {
+    url = "https://asciidoc-mscgen-filter.googlecode.com/files/mscgen-filter-1.2.zip";
+    sha256 = "1nfwmj375gpv5dn9i770pjv59aihzy2kja0fflsk96xwnlqsqq61";
+  };
+
+  diagFilterSrc = fetchurl {
+    # unfortunately no version number
+    url = "https://asciidoc-diag-filter.googlecode.com/files/diag_filter.zip";
+    sha256 = "1qlqrdbqkdqqgfdhjsgdws1al0sacsyq6jmwxdfy7r8k7bv7n7mm";
+  };
+
+  qrcodeFilterSrc = fetchurl {
+    url = "https://asciidoc-qrencode-filter.googlecode.com/files/qrcode-filter-1.0.zip";
+    sha256 = "0h4bql1nb4y4fmg2yvlpfjhvy22ln8jsaxdr10f8bfcg5lr0zkxs";
+  };
+
+  # there are no archives or tags, using latest commit in master branch as per 2013-09-22
+  matplotlibFilterSrc = let commit = "75f0d009629f93f33fab04b83faca20cc35dd358"; in fetchurl {
+    name = "mplw-${commit}.tar.gz";
+    url = "https://api.github.com/repos/lvv/mplw/tarball/${commit}";
+    sha256 = "0yfhkm2dr8gnp0fcg25x89hwiymkri2m5cyqzmzragzwj0hbmcf1";
+  };
+
+  aafigureFilterSrc = fetchurl {
+    url = "https://asciidoc-aafigure-filter.googlecode.com/files/aafigure-filter-1.1.zip";
+    sha256 = "1hq2s30dvmv5dqvj0xm1qwdwafhgm9w1iyr0lr0c40cyk8h00j8j";
+  };
+
+  #
+  # backends
+  #
+
+  deckjsBackendSrc = fetchurl {
+    url = "https://github.com/downloads/houqp/asciidoc-deckjs/deckjs-1.6.2.zip";
+    sha256 = "1siy1j8naj5irrrrv5bfgl4d8nal6j9pyahy4f50wmrr9wv59s46";
+  };
+
+  # the odf backend is actually two plugins: odt + odp
+  odtBackendSrc = fetchurl {
+    url = "https://github.com/downloads/dagwieers/asciidoc-odf/odt-backend-0.1.zip";
+    sha256 = "1zaa97h9sx6ncxcdkl1x3ggydi7f8kjgvrnpjnkjiizi45k350kw";
+  };
+  odpBackendSrc = fetchurl {
+    url = "https://github.com/downloads/dagwieers/asciidoc-odf/odp-backend-0.1.zip";
+    sha256 = "08ya4bskygzqkfqwjllpg31qc5k08xp2k78z9b2480g8y57bfy10";
+  };
+
+in
+
+stdenv.mkDerivation rec {
+  name = "asciidoc-8.6.9";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/asciidoc/${name}.tar.gz";
+    sha256 = "1w71nk527lq504njmaf0vzr93pgahkgzzxzglrq6bay8cw2rvnvq";
+  };
+
+  buildInputs = [ python2 unzip ];
+
+  # install filters early, so their shebangs are patched too
+  patchPhase = with stdenv.lib; ''
+    mkdir -p "$out/etc/asciidoc/filters"
+    mkdir -p "$out/etc/asciidoc/backends"
+  '' + optionalString _enableDitaaFilter ''
+    echo "Extracting ditaa filter"
+    unzip -d "$out/etc/asciidoc/filters/ditaa" "${ditaaFilterSrc}"
+    sed -i -e "s|java -jar|${jre}/bin/java -jar|" \
+        "$out/etc/asciidoc/filters/ditaa/ditaa2img.py"
+  '' + optionalString _enableMscgenFilter ''
+    echo "Extracting mscgen filter"
+    unzip -d "$out/etc/asciidoc/filters/mscgen" "${mscgenFilterSrc}"
+    sed -i -e "s|filter-wrapper.py mscgen|filter-wrapper.py ${mscgen}/bin/mscgen|" \
+        "$out/etc/asciidoc/filters/mscgen/mscgen-filter.conf"
+  '' + optionalString _enableDiagFilter ''
+    echo "Extracting diag filter"
+    unzip -d "$out/etc/asciidoc/filters/diag" "${diagFilterSrc}"
+    sed -i \
+        -e "s|filter='blockdiag|filter=\'${blockdiag}/bin/blockdiag|" \
+        -e "s|filter='seqdiag|filter=\'${seqdiag}/bin/seqdiag|" \
+        -e "s|filter='actdiag|filter=\'${actdiag}/bin/actdiag|" \
+        -e "s|filter='nwdiag|filter=\'${nwdiag}/bin/nwdiag|" \
+        -e "s|filter='packetdiag|filter=\'${nwdiag}/bin/packetdiag|" \
+        "$out/etc/asciidoc/filters/diag/diag-filter.conf"
+  '' + optionalString _enableQrcodeFilter ''
+    echo "Extracting qrcode filter"
+    unzip -d "$out/etc/asciidoc/filters/qrcode" "${qrcodeFilterSrc}"
+    sed -i -e "s|systemcmd('qrencode|systemcmd('${qrencode}/bin/qrencode|" \
+        "$out/etc/asciidoc/filters/qrcode/qrcode2img.py"
+  '' + optionalString _enableMatplotlibFilter ''
+    echo "Extracting mpl (matplotlib) filter"
+    mkdir -p "$out/etc/asciidoc/filters/mpl"
+    tar xvf "${matplotlibFilterSrc}" -C "$out/etc/asciidoc/filters/mpl" --strip-components=1
+    # Stop asciidoc from loading mpl/.old/chart-filter.conf
+    rm -rf "$out/etc/asciidoc/filters/mpl/.old"
+    # Add matplotlib and numpy to sys.path
+    matplotlib_path="$(toPythonPath ${matplotlib})"
+    numpy_path="$(toPythonPath ${numpy})"
+    sed -i "/^import.*sys/asys.path.append(\"$matplotlib_path\"); sys.path.append(\"$numpy_path\");" \
+        "$out/etc/asciidoc/filters/mpl/mplw.py"
+  '' + optionalString _enableAafigureFilter ''
+    echo "Extracting aafigure filter"
+    unzip -d "$out/etc/asciidoc/filters/aafigure" "${aafigureFilterSrc}"
+    # Add aafigure to sys.path (and it needs recursive-pth-loader)
+    pth_loader_path="$(toPythonPath ${recursivePthLoader})"
+    aafigure_path="$(toPythonPath ${aafigure})"
+    sed -i "/^import.*sys/asys.path.append(\"$pth_loader_path\"); sys.path.append(\"$aafigure_path\"); import sitecustomize" \
+        "$out/etc/asciidoc/filters/aafigure/aafig2img.py"
+  '' + optionalString _enableDeckjsBackend ''
+    echo "Extracting deckjs backend"
+    unzip -d "$out/etc/asciidoc/backends/deckjs" "${deckjsBackendSrc}"
+  '' + optionalString _enableOdfBackend ''
+    echo "Extracting odf backend (odt + odp)"
+    unzip -d "$out/etc/asciidoc/backends/odt" "${odtBackendSrc}"
+    unzip -d "$out/etc/asciidoc/backends/odp" "${odpBackendSrc}"
+    # The odt backend has a TODO note about removing this hardcoded path, but
+    # the odp backend already has that fix. Copy it here until fixed upstream.
+    sed -i "s|'/etc/asciidoc/backends/odt/asciidoc.ott'|os.path.dirname(__file__),'asciidoc.ott'|" \
+        "$out/etc/asciidoc/backends/odt/a2x-backend.py"
+  '' + optionalString enableStandardFeatures ''
+    sed -e "s|dot|${graphviz}/bin/dot|g" \
+        -e "s|neato|${graphviz}/bin/neato|g" \
+        -e "s|twopi|${graphviz}/bin/twopi|g" \
+        -e "s|circo|${graphviz}/bin/circo|g" \
+        -e "s|fdp|${graphviz}/bin/fdp|g" \
+        -i "filters/graphviz/graphviz2png.py"
+
+    sed -e "s|run('latex|run('${texlive}/bin/latex|g" \
+        -e "s|cmd = 'dvipng'|cmd = '${texlive}/bin/dvipng'|g" \
+        -i "filters/latex/latex2png.py"
+
+    sed -e "s|run('abc2ly|run('${lilypond}/bin/abc2ly|g" \
+        -e "s|run('lilypond|run('${lilypond}/bin/lilypond|g" \
+        -e "s|run('convert|run('${imagemagick.out}/bin/convert|g" \
+        -i "filters/music/music2png.py"
+
+    sed -e 's|filter="source-highlight|filter="${sourceHighlight}/bin/source-highlight|' \
+        -e 's|filter="highlight|filter="${highlight}/bin/highlight|' \
+        -e 's|filter="pygmentize|filter="${pygments}/bin/pygmentize|' \
+        -i "filters/source/source-highlight-filter.conf"
+
+    # ENV is custom environment passed to programs that a2x invokes. Here we
+    # use it to work around an impurity in the tetex package; tetex tools
+    # cannot find their neighbours (e.g. pdflatex doesn't find mktextfm).
+    # We can remove PATH= when those impurities are fixed.
+    # TODO: Is this still necessary when using texlive?
+    sed -e "s|^ENV =.*|ENV = dict(XML_CATALOG_FILES='${docbook_xml_dtd_45}/xml/dtd/docbook/catalog.xml ${docbook_xsl_ns}/xml/xsl/docbook/catalog.xml ${docbook_xsl}/xml/xsl/docbook/catalog.xml', PATH='${stdenv.lib.makeBinPath [ texlive coreutils gnused ]}')|" \
+        -e "s|^ASCIIDOC =.*|ASCIIDOC = '$out/bin/asciidoc'|" \
+        -e "s|^XSLTPROC =.*|XSLTPROC = '${libxslt.bin}/bin/xsltproc'|" \
+        -e "s|^DBLATEX =.*|DBLATEX = '${dblatexFull}/bin/dblatex'|" \
+        ${optionalString enableJava ''-e "s|^FOP =.*|FOP = '${fop}/bin/fop'|"''} \
+        -e "s|^W3M =.*|W3M = '${w3m}/bin/w3m'|" \
+        -e "s|^LYNX =.*|LYNX = '${lynx}/bin/lynx'|" \
+        -e "s|^XMLLINT =.*|XMLLINT = '${libxml2.bin}/bin/xmllint'|" \
+        -e "s|^EPUBCHECK =.*|EPUBCHECK = 'nixpkgs_is_missing_epubcheck'|" \
+        -i a2x.py
+  '' + ''
+    for n in $(find "$out" . -name \*.py); do
+      sed -i -e "s,^#![[:space:]]*.*/bin/env python,#!${python2}/bin/python,g" "$n"
+      chmod +x "$n"
+    done
+
+    sed -i -e "s,/etc/vim,,g" Makefile.in
+  '';
+
+  preInstall = "mkdir -p $out/etc/vim";
+  makeFlags = stdenv.lib.optional stdenv.isCygwin "DESTDIR=/.";
+
+  meta = with stdenv.lib; {
+    description = "Text-based document generation system";
+    longDescription = ''
+      AsciiDoc is a text document format for writing notes, documentation,
+      articles, books, ebooks, slideshows, web pages, man pages and blogs.
+      AsciiDoc files can be translated to many formats including HTML, PDF,
+      EPUB, man page.
+
+      AsciiDoc is highly configurable: both the AsciiDoc source file syntax and
+      the backend output markups (which can be almost any type of SGML/XML
+      markup) can be customized and extended by the user.
+    '';
+    homepage = http://www.methods.co.nz/asciidoc/;
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/asciidoctor/Gemfile b/nixpkgs/pkgs/tools/typesetting/asciidoctor/Gemfile
new file mode 100644
index 000000000000..f9329a80a815
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/asciidoctor/Gemfile
@@ -0,0 +1,9 @@
+source 'https://rubygems.org'
+gem 'asciidoctor'
+gem 'asciidoctor-diagram'
+gem 'asciidoctor-pdf'
+gem 'asciidoctor-epub3'
+gem 'asciidoctor-mathematical'
+gem 'coderay'
+gem 'pygments.rb'
+gem 'rouge'
diff --git a/nixpkgs/pkgs/tools/typesetting/asciidoctor/Gemfile.lock b/nixpkgs/pkgs/tools/typesetting/asciidoctor/Gemfile.lock
new file mode 100644
index 000000000000..02081e117d6e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/asciidoctor/Gemfile.lock
@@ -0,0 +1,96 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    Ascii85 (1.0.3)
+    addressable (2.6.0)
+      public_suffix (>= 2.0.2, < 4.0)
+    afm (0.2.2)
+    asciidoctor (2.0.10)
+    asciidoctor-diagram (1.5.18)
+      asciidoctor (>= 1.5.0, < 3.x)
+    asciidoctor-epub3 (1.5.0.alpha.9)
+      asciidoctor (>= 1.5.0, < 3.0.0)
+      concurrent-ruby (~> 1.1.5)
+      gepub (~> 1.0.2)
+      thread_safe (~> 0.3.6)
+    asciidoctor-mathematical (0.3.0)
+      asciidoctor (~> 2.0, >= 2.0.0)
+      mathematical (~> 1.5, >= 1.5.8)
+      ruby-enum (~> 0.4)
+    asciidoctor-pdf (1.5.0.alpha.18)
+      asciidoctor (>= 1.5.3, < 3.0.0)
+      concurrent-ruby (~> 1.1.0)
+      prawn (~> 2.2.0)
+      prawn-icon (~> 2.3.0)
+      prawn-svg (~> 0.29.0)
+      prawn-table (~> 0.2.0)
+      prawn-templates (~> 0.1.0)
+      safe_yaml (~> 1.0.0)
+      thread_safe (~> 0.3.0)
+      treetop (~> 1.5.0)
+    coderay (1.1.2)
+    concurrent-ruby (1.1.5)
+    css_parser (1.7.0)
+      addressable
+    gepub (1.0.4)
+      nokogiri (>= 1.8.2, < 1.11)
+      rubyzip (>= 1.1.1)
+    hashery (2.1.2)
+    i18n (1.6.0)
+      concurrent-ruby (~> 1.0)
+    mathematical (1.6.12)
+      ruby-enum (~> 0.4)
+    mini_portile2 (2.4.0)
+    multi_json (1.13.1)
+    nokogiri (1.10.3)
+      mini_portile2 (~> 2.4.0)
+    pdf-core (0.7.0)
+    pdf-reader (2.2.0)
+      Ascii85 (~> 1.0.0)
+      afm (~> 0.2.1)
+      hashery (~> 2.0)
+      ruby-rc4
+      ttfunk
+    polyglot (0.3.5)
+    prawn (2.2.2)
+      pdf-core (~> 0.7.0)
+      ttfunk (~> 1.5)
+    prawn-icon (2.3.0)
+      prawn (>= 1.1.0, < 3.0.0)
+    prawn-svg (0.29.1)
+      css_parser (~> 1.6)
+      prawn (>= 0.11.1, < 3)
+    prawn-table (0.2.2)
+      prawn (>= 1.3.0, < 3.0.0)
+    prawn-templates (0.1.1)
+      pdf-reader (~> 2.0)
+      prawn (~> 2.2)
+    public_suffix (3.1.1)
+    pygments.rb (1.2.1)
+      multi_json (>= 1.0.0)
+    rouge (3.5.1)
+    ruby-enum (0.7.2)
+      i18n
+    ruby-rc4 (0.1.5)
+    rubyzip (1.2.3)
+    safe_yaml (1.0.5)
+    thread_safe (0.3.6)
+    treetop (1.5.3)
+      polyglot (~> 0.3)
+    ttfunk (1.5.1)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  asciidoctor
+  asciidoctor-diagram
+  asciidoctor-epub3
+  asciidoctor-mathematical
+  asciidoctor-pdf
+  coderay
+  pygments.rb
+  rouge
+
+BUNDLED WITH
+   1.17.2
diff --git a/nixpkgs/pkgs/tools/typesetting/asciidoctor/default.nix b/nixpkgs/pkgs/tools/typesetting/asciidoctor/default.nix
new file mode 100644
index 000000000000..20bbe782d91d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/asciidoctor/default.nix
@@ -0,0 +1,40 @@
+{ lib, bundlerApp, makeWrapper,
+  # Optional dependencies, can be null
+  epubcheck, kindlegen,
+  bundlerUpdateScript
+}:
+
+let
+  app = bundlerApp {
+    pname = "asciidoctor";
+    gemdir = ./.;
+
+    exes = [
+      "asciidoctor"
+      "asciidoctor-pdf"
+      "asciidoctor-safe"
+      "asciidoctor-epub3"
+    ];
+
+    buildInputs = [ makeWrapper ];
+
+    postBuild = ''
+        wrapProgram "$out/bin/asciidoctor-epub3" \
+          ${lib.optionalString (epubcheck != null) "--set EPUBCHECK ${epubcheck}/bin/epubcheck"} \
+          ${lib.optionalString (kindlegen != null) "--set KINDLEGEN ${kindlegen}/bin/kindlegen"}
+      '';
+
+    passthru = {
+      updateScript = bundlerUpdateScript "asciidoctor";
+    };
+
+    meta = with lib; {
+      description = "A faster Asciidoc processor written in Ruby";
+      homepage = https://asciidoctor.org/;
+      license = licenses.mit;
+      maintainers = with maintainers; [ gpyh nicknovitski ];
+      platforms = platforms.unix;
+    };
+  };
+in
+  app
diff --git a/nixpkgs/pkgs/tools/typesetting/asciidoctor/gemset.nix b/nixpkgs/pkgs/tools/typesetting/asciidoctor/gemset.nix
new file mode 100644
index 000000000000..02700962eb28
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/asciidoctor/gemset.nix
@@ -0,0 +1,381 @@
+{
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bcm2hchn897xjhqj9zzsxf3n9xhddymj4lsclz508f4vw3av46l";
+      type = "gem";
+    };
+    version = "2.6.0";
+  };
+  afm = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06kj9hgd0z8pj27bxp2diwqh6fv7qhwwm17z64rhdc4sfn76jgn8";
+      type = "gem";
+    };
+    version = "0.2.2";
+  };
+  Ascii85 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0658m37jjjn6drzqg1gk4p6c205mgp7g1jh2d00n4ngghgmz5qvs";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  asciidoctor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1b2ajs3sabl0s27r7lhwkacw0yn0zfk4jpmidg9l8lzp2qlgjgbz";
+      type = "gem";
+    };
+    version = "2.0.10";
+  };
+  asciidoctor-diagram = {
+    dependencies = ["asciidoctor"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "095ar1hj96mi9vxnjjdkj7yzc3lp4wjxh4qsijx9inqflbcw7x71";
+      type = "gem";
+    };
+    version = "1.5.18";
+  };
+  asciidoctor-epub3 = {
+    dependencies = ["asciidoctor" "concurrent-ruby" "gepub" "thread_safe"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "056yp0z64b1fhhkzz2kaiqsd11gpbgx2d1yjgq7cqma9c70bbxa5";
+      type = "gem";
+    };
+    version = "1.5.0.alpha.9";
+  };
+  asciidoctor-mathematical = {
+    dependencies = ["asciidoctor" "mathematical" "ruby-enum"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1n6qhfp6xc5jlqkscr9g7zzp9f2cv28jzcqzawhl8vjgcny7i6j3";
+      type = "gem";
+    };
+    version = "0.3.0";
+  };
+  asciidoctor-pdf = {
+    dependencies = ["asciidoctor" "concurrent-ruby" "prawn" "prawn-icon" "prawn-svg" "prawn-table" "prawn-templates" "safe_yaml" "thread_safe" "treetop"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19rgi43abhkyv85r2gnwqq6kxwsn29hhv4clnnmln58d7s589n0j";
+      type = "gem";
+    };
+    version = "1.5.0.alpha.18";
+  };
+  coderay = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15vav4bhcc2x3jmi3izb11l4d9f3xv8hp2fszb7iqmpsccv1pz4y";
+      type = "gem";
+    };
+    version = "1.1.2";
+  };
+  concurrent-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1x07r23s7836cpp5z9yrlbpljcxpax14yw4fy4bnp6crhr6x24an";
+      type = "gem";
+    };
+    version = "1.1.5";
+  };
+  css_parser = {
+    dependencies = ["addressable"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1y4vc018b5mzp7winw4pbb22jk0dpxp22pzzxq7w0rgvfxzi89pd";
+      type = "gem";
+    };
+    version = "1.7.0";
+  };
+  gepub = {
+    dependencies = ["nokogiri" "rubyzip"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kg2h0mscb2hq6l3wjzq5fp5vw4552nglq8n9pawm7bzacf1gzyf";
+      type = "gem";
+    };
+    version = "1.0.4";
+  };
+  hashery = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qj8815bf7q6q7llm5rzdz279gzmpqmqqicxnzv066a020iwqffj";
+      type = "gem";
+    };
+    version = "2.1.2";
+  };
+  i18n = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hfxnlyr618s25xpafw9mypa82qppjccbh292c4l3bj36az7f6wl";
+      type = "gem";
+    };
+    version = "1.6.0";
+  };
+  mathematical = {
+    dependencies = ["ruby-enum"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19f9icaixg60wl8dvcxp6glbm5vpx2rsyx53sfk2rvwnzgsr42qh";
+      type = "gem";
+    };
+    version = "1.6.12";
+  };
+  mini_portile2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15zplpfw3knqifj9bpf604rb3wc1vhq6363pd6lvhayng8wql5vy";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rl0qy4inf1mp8mybfk56dfga0mvx97zwpmq5xmiwl5r770171nv";
+      type = "gem";
+    };
+    version = "1.13.1";
+  };
+  nokogiri = {
+    dependencies = ["mini_portile2"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02bjydih0j515szfv9mls195cvpyidh6ixm7dwbl3s2sbaxxk5s4";
+      type = "gem";
+    };
+    version = "1.10.3";
+  };
+  pdf-core = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19llwch2wfg51glb0kff0drfp3n6nb9vim4zlvzckxysksvxpby1";
+      type = "gem";
+    };
+    version = "0.7.0";
+  };
+  pdf-reader = {
+    dependencies = ["Ascii85" "afm" "hashery" "ruby-rc4" "ttfunk"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0aas2f5clgwpgryywrh4gihdi10afx3kbyfs1n31cinri02psd43";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  polyglot = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bqnxwyip623d8pr29rg6m8r0hdg08fpr2yb74f46rn1wgsnxmjr";
+      type = "gem";
+    };
+    version = "0.3.5";
+  };
+  prawn = {
+    dependencies = ["pdf-core" "ttfunk"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qdjf1v6sfl44g3rqxlg8k4jrzkwaxgvh2l4xws97a8f3xv4na4m";
+      type = "gem";
+    };
+    version = "2.2.2";
+  };
+  prawn-icon = {
+    dependencies = ["prawn"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nc810wdpa93z162yzjgvf7mdanfxm4bjwinjjxx5smq6wdvhdqi";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  prawn-svg = {
+    dependencies = ["css_parser" "prawn"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wwfv6lw2diywgjp15pd3awpr8g7xkjfi10jzhmvziikakzsz6gj";
+      type = "gem";
+    };
+    version = "0.29.1";
+  };
+  prawn-table = {
+    dependencies = ["prawn"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nxd6qmxqwl850icp18wjh5k0s3amxcajdrkjyzpfgq0kvilcv9k";
+      type = "gem";
+    };
+    version = "0.2.2";
+  };
+  prawn-templates = {
+    dependencies = ["pdf-reader" "prawn"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gs894sj9zdlwx59h3rk4p0l3y8r18p22zhnfiyx9lngsa56gcrj";
+      type = "gem";
+    };
+    version = "0.1.1";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0g9ds2ffzljl6jjmkjffwxc1z6lh5nkqqmhhkxjk71q5ggv0rkpm";
+      type = "gem";
+    };
+    version = "3.1.1";
+  };
+  "pygments.rb" = {
+    dependencies = ["multi_json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lbvnwvz770ambm4d6lxgc2097rydn5rcc5d6986bnkzyxfqqjnv";
+      type = "gem";
+    };
+    version = "1.2.1";
+  };
+  rouge = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yfhazlhjc4abgzhkgq8zqmdphvkh52211widkl4zhsbhqh8wg2q";
+      type = "gem";
+    };
+    version = "3.5.1";
+  };
+  ruby-enum = {
+    dependencies = ["i18n"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0h62avini866kxpjzqxlqnajma3yvj0y25l6hn9h2mv5pp6fcrhx";
+      type = "gem";
+    };
+    version = "0.7.2";
+  };
+  ruby-rc4 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00vci475258mmbvsdqkmqadlwn6gj9m01sp7b5a3zd90knil1k00";
+      type = "gem";
+    };
+    version = "0.1.5";
+  };
+  rubyzip = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1w9gw28ly3zyqydnm8phxchf4ymyjl2r7zf7c12z8kla10cpmhlc";
+      type = "gem";
+    };
+    version = "1.2.3";
+  };
+  safe_yaml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j7qv63p0vqcd838i2iy2f76c3dgwzkiz1d1xkg7n0pbnxj2vb56";
+      type = "gem";
+    };
+    version = "1.0.5";
+  };
+  thread_safe = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy";
+      type = "gem";
+    };
+    version = "0.3.6";
+  };
+  treetop = {
+    dependencies = ["polyglot"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wpl5z33796nz2ah44waflrd1girbra281d9i3m9nz4ylg1ljg5b";
+      type = "gem";
+    };
+    version = "1.5.3";
+  };
+  ttfunk = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mgrnqla5n51v4ivn844albsajkck7k6lviphfqa8470r46c58cd";
+      type = "gem";
+    };
+    version = "1.5.1";
+  };
+}
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/typesetting/asciidoctorj/default.nix b/nixpkgs/pkgs/tools/typesetting/asciidoctorj/default.nix
new file mode 100644
index 000000000000..39e7eab34abb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/asciidoctorj/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchzip, jdk, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "asciidoctorj";
+  version = "2.2.0";
+
+  src = fetchzip {
+    url = "http://dl.bintray.com/asciidoctor/maven/org/asciidoctor/${pname}/${version}/${pname}-${version}-bin.zip";
+    sha256 = "0akxzfibfa8msnardvyy9hkj2z6sqn7pnwphz6avixdcclg6yxa5";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    rm bin/asciidoctorj.bat
+    cp -r . $out
+    wrapProgram $out/bin/asciidoctorj \
+      --prefix JAVA_HOME : ${jdk}
+  '';
+
+  meta = with stdenv.lib; {
+    description = ''
+      AsciidoctorJ is the official library for running Asciidoctor on the JVM.
+    '';
+    longDescription = ''
+      AsciidoctorJ is the official library for running Asciidoctor on the JVM. 
+      Using AsciidoctorJ, you can convert AsciiDoc content or analyze the 
+      structure of a parsed AsciiDoc document from Java and other JVM 
+      languages.
+    '';
+    homepage = https://asciidoctor.org/docs/asciidoctorj/;
+    license = licenses.asl20;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ moaxcp ];
+  };
+} 
diff --git a/nixpkgs/pkgs/tools/typesetting/biber/default.nix b/nixpkgs/pkgs/tools/typesetting/biber/default.nix
new file mode 100644
index 000000000000..e42681dbd831
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/biber/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchpatch, perlPackages, shortenPerlShebang, texlive }:
+
+let
+  biberSource = stdenv.lib.head (builtins.filter (p: p.tlType == "source") texlive.biber.pkgs);
+in
+
+perlPackages.buildPerlModule {
+  pname = "biber";
+  inherit (biberSource) version;
+
+  src = "${biberSource}/source/bibtex/biber/biblatex-biber.tar.gz";
+
+  # TODO: remove TextBibTeX for biber 2.14: https://github.com/plk/biber/blob/dev/Changes
+  buildInputs = with perlPackages; [
+    autovivification BusinessISBN BusinessISMN BusinessISSN ConfigAutoConf
+    DataCompare DataDump DateSimple EncodeEUCJPASCII EncodeHanExtra EncodeJIS2K
+    DateTime DateTimeFormatBuilder DateTimeCalendarJulian
+    ExtUtilsLibBuilder FileSlurper FileWhich IPCRun3 LogLog4perl LWPProtocolHttps ListAllUtils
+    ListMoreUtils MozillaCA IOString ReadonlyXS RegexpCommon TextBibTeX
+    UnicodeLineBreak URI XMLLibXMLSimple XMLLibXSLT XMLWriter
+    ClassAccessor TextCSV TextCSV_XS TextRoman DataUniqid LinguaTranslit SortKey
+    TestDifferences
+    PerlIOutf8_strict
+  ];
+  nativeBuildInputs = stdenv.lib.optional stdenv.isDarwin shortenPerlShebang;
+
+  postInstall = stdenv.lib.optionalString stdenv.isDarwin ''
+    shortenPerlShebang $out/bin/biber
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Backend for BibLaTeX";
+    license = with licenses; [ artistic1 gpl1Plus ];
+    platforms = platforms.unix;
+    maintainers = [ maintainers.ttuegel ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/djvu2pdf/default.nix b/nixpkgs/pkgs/tools/typesetting/djvu2pdf/default.nix
new file mode 100644
index 000000000000..cb667e6b1218
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/djvu2pdf/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, makeWrapper, fetchurl, djvulibre, ghostscript, which }:
+
+stdenv.mkDerivation rec {
+  version = "0.9.2";
+  pname = "djvu2pdf";
+
+  src = fetchurl {
+    url = "http://0x2a.at/site/projects/djvu2pdf/djvu2pdf-${version}.tar.gz";
+    sha256 = "0v2ax30m7j1yi4m02nzn9rc4sn4vzqh5vywdh96r64j4pwvn5s5g";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -p djvu2pdf $out/bin
+    wrapProgram $out/bin/djvu2pdf --prefix PATH : ${stdenv.lib.makeBinPath [ ghostscript djvulibre which ]}
+
+    mkdir -p $out/man/man1
+    cp -p djvu2pdf.1.gz $out/man/man1
+  '';
+
+  meta = {
+    description = "Convert DjVu files to PDF files";
+    homepage = https://0x2a.at/s/projects/djvu2pdf;
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.all;
+    inherit version;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/docbook2odf/default.nix b/nixpkgs/pkgs/tools/typesetting/docbook2odf/default.nix
new file mode 100644
index 000000000000..7200909660bd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/docbook2odf/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, fetchurl, perlPackages, makeWrapper, zip, libxslt }:
+
+stdenv.mkDerivation rec {
+  name = "docbook2odf-0.244";
+
+  src = fetchurl {
+    url = "http://open.comsultia.com/docbook2odf/dwn/${name}.tar.gz";
+    sha256 = "10k44g0qqa37k30pfj8vz95j6zdzz0nmnqjq1lyahfs2h4glzgwb";
+  };
+
+  buildInputs = [ perlPackages.perl makeWrapper ];
+
+  installPhase = ''
+    mkdir -p "$out/bin/"
+    mkdir -p "$out/share/docbook2odf/"
+    mkdir -p "$out/share/doc/docbook2odf/"
+    mkdir -p "$out/share/man/man1/"
+    mkdir -p "$out/share/applications/"
+
+    cp utils/docbook2odf "$out/bin/"
+    cp docs/docbook2odf.1 "$out/share/man/man1/"
+    cp -r examples/ "$out/share/doc/docbook2odf/"
+    cp -r xsl/ "$out/share/docbook2odf/"
+    cp bindings/desktop/docbook2odf.desktop "$out/share/applications/"
+
+    sed -i "s|/usr/share/docbook2odf|$out/share/docbook2odf|" "$out/bin/docbook2odf"
+
+    wrapProgram "$out/bin/docbook2odf" \
+      --prefix PATH : "${stdenv.lib.makeBinPath [ zip libxslt ]}" \
+      --prefix PERL5PATH : "${perlPackages.makePerlPath [ perlPackages.PerlMagick ]}"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Convert DocBook to OpenDocument Format (ODF)";
+    longDescription = ''
+      Docbook2odf is a toolkit that automaticaly converts DocBook to OASIS
+      OpenDocument (ODF, the ISO standardized format used for texts,
+      spreadsheets and presentations). Conversion is based on a XSLT which
+      makes it easy to convert DocBook->ODF, ODT, ODS and ODP as all these
+      documents are XML based.
+    '';
+    homepage = http://open.comsultia.com/docbook2odf/;
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/docbook2x/db2x_texixml-to-stdout.patch b/nixpkgs/pkgs/tools/typesetting/docbook2x/db2x_texixml-to-stdout.patch
new file mode 100644
index 000000000000..8daa5c87a661
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/docbook2x/db2x_texixml-to-stdout.patch
@@ -0,0 +1,15 @@
+--- docbook2X-0.8.8/perl/db2x_texixml.pl	2006-04-20 05:02:31.000000000 +0200
++++ docbook2X-0.8.8/perl/db2x_texixml.pl	2008-03-12 15:36:55.000000000 +0100
+@@ -432,8 +432,12 @@ sub texi_openfile {
+                 $openstr = '>-';
+             }
+         } else {
++	    if(not $self->{options}->{'to-stdout'}) {
+             $openstr .= '> ' . shell_quote($filename);
+             print "$filename\n"
+                 if $self->{options}->{'list-files'};
++	    } else {
++		$openstr = '>-';
++	    }
+         }
+     }
diff --git a/nixpkgs/pkgs/tools/typesetting/docbook2x/default.nix b/nixpkgs/pkgs/tools/typesetting/docbook2x/default.nix
new file mode 100644
index 000000000000..5309e4555b49
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/docbook2x/default.nix
@@ -0,0 +1,57 @@
+{ fetchurl, stdenv, texinfo, perlPackages
+, groff, libxml2, libxslt, gnused, libiconv, opensp
+, docbook_xml_dtd_43
+, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  name = "docbook2X-0.8.8";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/docbook2x/${name}.tar.gz";
+    sha256 = "0ifwzk99rzjws0ixzimbvs83x6cxqk1xzmg84wa1p7bs6rypaxs0";
+  };
+
+  # This patch makes sure that `docbook2texi --to-stdout' actually
+  # writes its output to stdout instead of creating a file.
+  patches = [ ./db2x_texixml-to-stdout.patch ];
+
+  buildInputs = [ texinfo groff libxml2 libxslt makeWrapper opensp libiconv ]
+    ++ (with perlPackages; [ perl XMLSAX XMLParser XMLNamespaceSupport ]);
+
+  postConfigure = ''
+    # Broken substitution is used for `perl/config.pl', which leaves literal
+    # `$prefix' in it.
+    substituteInPlace "perl/config.pl"       \
+      --replace '${"\$" + "{prefix}"}' "$out"
+  '';
+
+  doCheck = false; # fails a lot of tests
+
+  postInstall = ''
+    perlPrograms="db2x_manxml db2x_texixml db2x_xsltproc
+                  docbook2man docbook2texi";
+    for i in $perlPrograms
+    do
+      # XXX: We work around the fact that `wrapProgram' doesn't support
+      # spaces below by inserting escaped backslashes.
+      wrapProgram $out/bin/$i \
+        --prefix PERL5LIB : ${with perlPackages; makeFullPerlPath [XMLSAX XMLParser XMLNamespaceSupport]} \
+        --prefix XML_CATALOG_FILES "\ " \
+        "$out/share/docbook2X/dtd/catalog.xml\ $out/share/docbook2X/xslt/catalog.xml\ ${docbook_xml_dtd_43}/xml/dtd/docbook/catalog.xml"
+    done
+
+    wrapProgram $out/bin/sgml2xml-isoent --prefix PATH : \
+      "${gnused}/bin"
+  '';
+
+  meta = with stdenv.lib; {
+    longDescription = ''
+      docbook2X is a software package that converts DocBook documents
+      into the traditional Unix man page format and the GNU Texinfo
+      format.
+    '';
+    license = licenses.mit;
+    homepage = http://docbook2x.sourceforge.net/;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/fop/default.nix b/nixpkgs/pkgs/tools/typesetting/fop/default.nix
new file mode 100644
index 000000000000..0b5c79756bd6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/fop/default.nix
@@ -0,0 +1,51 @@
+{ fetchurl, stdenv, ant, jdk, runtimeShell }:
+
+stdenv.mkDerivation rec {
+  pname = "fop";
+  version = "2.1";
+
+  src = fetchurl {
+    url = "mirror://apache/xmlgraphics/fop/source/${pname}-${version}-src.tar.gz";
+    sha256 = "165rx13q47l6qc29ppr7sg1z26vw830s3rkklj5ap7wgvy0ivbz5";
+  };
+
+  buildInputs = [ ant jdk ];
+
+  buildPhase = "ant";
+
+  installPhase = ''
+    mkdir -p $out/bin $out/lib $out/share/doc/fop
+
+    cp build/*.jar lib/*.jar $out/lib/
+    cp -r README examples/ $out/share/doc/fop/
+
+    # There is a fop script in the source archive, but it has many impurities.
+    # Instead of patching out 90 % of the script, we write our own.
+    cat > "$out/bin/fop" <<EOF
+    #!${runtimeShell}
+    java_exec_args="-Djava.awt.headless=true"
+    exec ${jdk.jre}/bin/java \$java_exec_args -classpath "$out/lib/*" org.apache.fop.cli.Main "\$@"
+    EOF
+    chmod a+x $out/bin/fop
+  '';
+
+  meta = with stdenv.lib; {
+    description = "XML formatter driven by XSL Formatting Objects (XSL-FO)";
+    longDescription = ''
+      FOP is a Java application that reads a formatting object tree and then
+      turns it into a wide variety of output presentations (including AFP, PCL,
+      PDF, PNG, PostScript, RTF, TIFF, and plain text), or displays the result
+      on-screen.
+
+      The formatting object tree can be in the form of an XML document (output
+      by an XSLT engine like xalan) or can be passed in memory as a DOM
+      Document or (in the case of xalan) SAX events.
+
+      This package contains the fop command line tool.
+    '';
+    homepage = https://xmlgraphics.apache.org/fop/;
+    license = licenses.asl20;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/git-latexdiff/default.nix b/nixpkgs/pkgs/tools/typesetting/git-latexdiff/default.nix
new file mode 100644
index 000000000000..c214bd3cac7e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/git-latexdiff/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchFromGitLab, git, bash }:
+
+stdenv.mkDerivation rec {
+  version = "1.3.0";
+  pname = "git-latexdiff";
+
+  src = fetchFromGitLab {
+    sha256 = "05fnhr1pqvj8l25vi9hdccwfk4mv2f0pfhn05whbdvf66gyl4fs9";
+    rev = "v${version}";
+    repo = "git-latexdiff";
+    owner = "git-latexdiff";
+  };
+
+  buildInputs = [ git bash ];
+
+  dontBuild = true;
+
+  patches = [ ./version-test.patch ];
+
+  postPatch = ''
+    substituteInPlace git-latexdiff \
+      --replace "@GIT_LATEXDIFF_VERSION@" "v${version}"
+    patchShebangs git-latexdiff
+  '';
+
+  installPhase = ''
+    mkdir -p $prefix/bin
+    mv git-latexdiff $prefix/bin
+    chmod +x $prefix/bin/git-latexdiff
+  '';
+
+  meta = with stdenv.lib; {
+    description = "View diff on LaTeX source files on the generated PDF files";
+    homepage = https://gitlab.com/git-latexdiff/git-latexdiff;
+    maintainers = [ ];
+    license = licenses.bsd3; # https://gitlab.com/git-latexdiff/git-latexdiff/issues/9
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/git-latexdiff/version-test.patch b/nixpkgs/pkgs/tools/typesetting/git-latexdiff/version-test.patch
new file mode 100644
index 000000000000..243bd90f9005
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/git-latexdiff/version-test.patch
@@ -0,0 +1,17 @@
+Fix for https://gitlab.com/git-latexdiff/git-latexdiff/issues/7
+---
+--- src/git-latexdiff	2016-01-26 14:04:54.338568955 +0100
++++ src/git-latexdiff	2016-01-26 14:40:23.700381943 +0100
+@@ -44,11 +44,7 @@
+ git_latexdiff_version='@GIT_LATEXDIFF_VERSION@'
+
+ git_latexdiff_compute_version () {
+-    if [ "$git_latexdiff_version" = '@GIT_LATEXDIFF''_VERSION@' ]; then
+-	(cd "$(dirname "$0")" && git describe --tags HEAD 2>/dev/null || echo 'Unknown version')
+-    else
+-	echo "$git_latexdiff_version"
+-    fi
++    echo "$git_latexdiff_version"
+ }
+
+ usage () {
diff --git a/nixpkgs/pkgs/tools/typesetting/halibut/default.nix b/nixpkgs/pkgs/tools/typesetting/halibut/default.nix
new file mode 100644
index 000000000000..f0ed44351a20
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/halibut/default.nix
@@ -0,0 +1,34 @@
+{stdenv, fetchurl, perl}:
+
+stdenv.mkDerivation rec {
+  name = "halibut-1.2";
+
+  src = fetchurl {
+    url = "http://ww.chiark.greenend.org.uk/~sgtatham/halibut/${name}/${name}.tar.gz";
+    sha256 = "0gqnhfqf555rfpk5xj1imbdxnbkkrv4wl3rrdb1r0wgj81igpv8s";
+  };
+
+  buildInputs = [ perl ];
+
+  patchPhase = ''
+    sed -i -e s@/usr/local@$out@ Makefile
+    sed -i -e 's@(prefix)/man@(prefix)/share/man@' doc/Makefile
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mkdir -p $out/share/man/man1
+    pushd doc
+    make halibut.1
+    popd
+    make install
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Documentation production system for software manuals";
+    homepage = https://www.chiark.greenend.org.uk/~sgtatham/halibut/;
+    license = licenses.mit;
+    maintainers = with maintainers; [ pSub ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/hevea/default.nix b/nixpkgs/pkgs/tools/typesetting/hevea/default.nix
new file mode 100644
index 000000000000..2a126ac5c839
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/hevea/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl, ocamlPackages }:
+
+stdenv.mkDerivation rec {
+  name = "hevea-2.32";
+
+  src = fetchurl {
+    url = "http://pauillac.inria.fr/~maranget/hevea/distri/${name}.tar.gz";
+    sha256 = "1s4yqphfcr1pf5mcj5c84mvmd107k525iiym5jdwsxz0ka0ccmfy";
+  };
+
+  buildInputs = with ocamlPackages; [ ocaml ocamlbuild ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with stdenv.lib; {
+    description = "A quite complete and fast LATEX to HTML translator";
+    homepage = http://pauillac.inria.fr/~maranget/hevea/;
+    license = licenses.qpl;
+    maintainers = with maintainers; [ pSub ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/htmldoc/default.nix b/nixpkgs/pkgs/tools/typesetting/htmldoc/default.nix
new file mode 100644
index 000000000000..7fca57ab9d26
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/htmldoc/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl
+
+, SystemConfiguration ? null, Foundation ? null
+}:
+
+assert stdenv.isDarwin -> SystemConfiguration != null
+                       && Foundation != null;
+
+stdenv.mkDerivation rec {
+  version = "1.8.29";
+  pname = "htmldoc";
+  src = fetchurl {
+    url = "https://github.com/michaelrsweet/htmldoc/releases/download"
+      + "/release-${version}/htmldoc-${version}-source.tar.gz";
+    sha256 = "15x0xdf487j4i4gfap5yr83airxnbp2v4lxaz79a4s3iirrq39p0";
+  };
+  buildInputs = with stdenv;
+       lib.optional isDarwin SystemConfiguration
+    ++ lib.optional isDarwin Foundation;
+
+  meta = with stdenv.lib; {
+    description = "Converts HTML files to PostScript and PDF";
+    homepage    = https://michaelrsweet.github.io/htmldoc;
+    license     = licenses.gpl2;
+    maintainers = with maintainers; [ shanemikel ];
+    platforms   = with platforms; linux ++ darwin;
+
+    longDescription = ''
+      HTMLDOC is a program that reads HTML source files or web pages and
+      generates corresponding HTML, PostScript, or PDF files with an optional
+      table of contents.
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/kindlegen/default.nix b/nixpkgs/pkgs/tools/typesetting/kindlegen/default.nix
new file mode 100644
index 000000000000..ff63ece34173
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/kindlegen/default.nix
@@ -0,0 +1,51 @@
+{ fetchurl, stdenv, unzip }:
+
+let
+  version = "2.9";
+  fileVersion = builtins.replaceStrings [ "." ] [ "_" ] version;
+
+  sha256 = {
+    x86_64-linux  = "15i20kzhdcmi94w7wfhqbl6j20v47cdakjm2mn3x8w495iddna4q";
+    i686-linux    = "15i20kzhdcmi94w7wfhqbl6j20v47cdakjm2mn3x8w495iddna4q";
+    x86_64-darwin = "0zniyn0s41fxqrajbgwxbcsj5vzf9m7a6yvdz2b11mphr00kpbbs";
+    i686-darwin   = "0zniyn0s41fxqrajbgwxbcsj5vzf9m7a6yvdz2b11mphr00kpbbs";
+    x86_64-cygwin = "02slfh1bbpijay4skj85cjiv7z43ha8vm5aa1lwiqjk86qbl1f3h";
+    i686-cygwin   = "02slfh1bbpijay4skj85cjiv7z43ha8vm5aa1lwiqjk86qbl1f3h";
+  }.${stdenv.hostPlatform.system} or (throw "system #{stdenv.hostPlatform.system.} is not supported");
+
+  url = {
+    x86_64-linux  = "http://kindlegen.s3.amazonaws.com/kindlegen_linux_2.6_i386_v${fileVersion}.tar.gz";
+    i686-linux    = "http://kindlegen.s3.amazonaws.com/kindlegen_linux_2.6_i386_v${fileVersion}.tar.gz";
+    x86_64-darwin = "http://kindlegen.s3.amazonaws.com/KindleGen_Mac_i386_v${fileVersion}.zip";
+    i686-darwin   = "http://kindlegen.s3.amazonaws.com/KindleGen_Mac_i386_v${fileVersion}.zip";
+    x86_64-cygwin = "http://kindlegen.s3.amazonaws.com/kindlegen_win32_v${fileVersion}.zip";
+    i686-cygwin   = "http://kindlegen.s3.amazonaws.com/kindlegen_win32_v${fileVersion}.zip";
+  }.${stdenv.hostPlatform.system} or (throw "system #{stdenv.hostPlatform.system.} is not supported");
+
+in stdenv.mkDerivation {
+  pname = "kindlegen";
+  inherit version;
+
+  src = fetchurl {
+    inherit url;
+    inherit sha256;
+  };
+
+  sourceRoot = ".";
+
+  nativeBuildInputs = stdenv.lib.optional (stdenv.lib.hasSuffix ".zip" url) unzip;
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/kindlegen/doc
+    install -m755 kindlegen $out/bin/kindlegen
+    cp -r *.txt *.html docs/* $out/share/kindlegen/doc
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Convert documents to .mobi for use with Amazon Kindle";
+    homepage = https://www.amazon.com/gp/feature.html?docId=1000765211;
+    license = licenses.unfree;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = [ "x86_64-linux" "i686-linux" "x86_64-darwin" "i686-darwin" "x86_64-cygwin" "i686-cygwin" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/lout/builder.sh b/nixpkgs/pkgs/tools/typesetting/lout/builder.sh
new file mode 100755
index 000000000000..61459e48b7f0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/lout/builder.sh
@@ -0,0 +1,42 @@
+# Prepare a makefile specifying the appropriate output directories.
+#
+# Written by Ludovic Courtès <ludo@gnu.org>.
+
+source "$stdenv/setup" || exit 1
+
+nixMakefile="nix-makefile"
+
+# Build and install documentation, PS and PDF.
+installDoc ()
+{
+  echo "building and installing documentation..."
+  for doc in design expert slides user
+  do
+    echo "building \`$doc' document..."
+    if [ ! -f "doc/$doc/outfile.ps" ]
+    then
+      ( PATH="$PWD:$PATH" ;				\
+        cd "doc/$doc" && lout -r4 -o outfile.ps all )	\
+      || return 1
+    fi
+    cp "doc/$doc/outfile.ps" "$out/doc/lout/$doc.ps" &&		\
+    ps2pdf -dPDFSETTINGS=/prepress -sPAPERSIZE=a4		\
+           "doc/$doc/outfile.ps" "$out/doc/lout/$doc.pdf"
+  done
+
+  return 0
+}
+
+unpackPhase &&									\
+cd lout-*.* &&									\
+cat makefile |									\
+  sed -e "s|^PREFIX[[:blank:]]*=.*\$|PREFIX = $out|g ;				\
+          s|^LOUTLIBDIR[[:blank:]]*=.*$|LOUTLIBDIR = \$(PREFIX)/lib/lout|g ;	\
+	  s|^LOUTDOCDIR[[:blank:]]*=.*$|LOUTDOCDIR = \$(PREFIX)/doc/lout|g ;	\
+	  s|^MANDIR[[:blank:]]*=.*$|MANDIR = \$(PREFIX)/man|g"			\
+  > "$nixMakefile" &&								\
+mkdir -p "$out/bin" && mkdir -p "$out/lib"					\
+mkdir -p "$out/man" && mkdir -p "$out/doc/lout" &&				\
+make -f "$nixMakefile" CC=cc install installman &&					\
+installDoc &&									\
+fixupPhase
diff --git a/nixpkgs/pkgs/tools/typesetting/lout/default.nix b/nixpkgs/pkgs/tools/typesetting/lout/default.nix
new file mode 100644
index 000000000000..85c0bacf3155
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/lout/default.nix
@@ -0,0 +1,52 @@
+{stdenv, fetchurl, ghostscript}:
+
+stdenv.mkDerivation rec {
+  name = "lout-3.40";
+
+  src = fetchurl {
+    urls = [
+      "ftp://ftp.cs.usyd.edu.au/jeff/lout/${name}.tar.gz"
+      "mirror://savannah/lout/${name}.tar.gz"      # new!
+      "mirror://sourceforge/lout/${name}.tar.gz"   # to be phased out
+      # XXX: We could add the CTAN mirrors
+      # (see https://www.ctan.org/tex-archive/support/lout/).
+    ];
+    sha256 = "1gb8vb1wl7ikn269dd1c7ihqhkyrwk19jwx5kd0rdvbk6g7g25ix";
+  };
+
+  buildInputs = [ ghostscript ];
+  builder = ./builder.sh;
+
+  meta = {
+    description = "Document layout system similar in style to LaTeX";
+
+    longDescription = ''
+      The Lout document formatting system is now reads a high-level
+      description of a document similar in style to LaTeX and produces
+      a PostScript or plain text output file.
+
+      Lout offers an unprecedented range of advanced features,
+      including optimal paragraph and page breaking, automatic
+      hyphenation, PostScript EPS file inclusion and generation,
+      equation formatting, tables, diagrams, rotation and scaling,
+      sorted indexes, bibliographic databases, running headers and
+      odd-even pages, automatic cross referencing, multilingual
+      documents including hyphenation (most European languages are
+      supported), formatting of computer programs, and much more, all
+      ready to use.  Furthermore, Lout is easily extended with
+      definitions which are very much easier to write than troff of
+      TeX macros because Lout is a high-level, purely functional
+      language, the outcome of an eight-year research project that
+      went back to the beginning.
+    '';
+
+    # Author's page: http://jeffreykingston.id.au/lout/
+    # Wiki: https://sourceforge.net/p/lout/wiki/
+    homepage = https://savannah.nongnu.org/projects/lout/;
+
+    license = stdenv.lib.licenses.gpl3Plus;
+
+    platforms = stdenv.lib.platforms.all;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/mmark/default.nix b/nixpkgs/pkgs/tools/typesetting/mmark/default.nix
new file mode 100644
index 000000000000..064e75ecbdc1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/mmark/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "mmark";
+  version = "1.3.6";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/miekg/mmark";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "miekg";
+    repo = "mmark";
+    sha256 = "0q2zrwa2vwk7a0zhmi000zpqrc01zssrj9c5n3573rg68fksg77m";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = {
+    description = "A powerful markdown processor in Go geared towards the IETF";
+    homepage = https://github.com/miekg/mmark;
+    license = with stdenv.lib.licenses; bsd2;
+    maintainers = with stdenv.lib.maintainers; [ yrashk ];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/mmark/deps.nix b/nixpkgs/pkgs/tools/typesetting/mmark/deps.nix
new file mode 100644
index 000000000000..47f964c6a477
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/mmark/deps.nix
@@ -0,0 +1,12 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "github.com/BurntSushi/toml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/BurntSushi/toml";
+      rev = "a368813c5e648fee92e5f6c30e3944ff9d5e8895";
+      sha256 = "1sjxs2lwc8jpln80s4rlzp7nprbcljhy5mz4rf9995gq93wqnym5";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/typesetting/multimarkdown/default.nix b/nixpkgs/pkgs/tools/typesetting/multimarkdown/default.nix
new file mode 100644
index 000000000000..4cdbac7d6381
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/multimarkdown/default.nix
@@ -0,0 +1,52 @@
+{ stdenv, fetchgit, perl }:
+
+stdenv.mkDerivation {
+  pname = "multimarkdown";
+  version = "4.7.1";
+
+  src = fetchgit {
+    url = "https://github.com/fletcher/MultiMarkdown-4.git";
+    fetchSubmodules = true;
+    rev = "dd060247518715ef2b52be22b8f49d0e6d2c3a8b";
+    sha256 = "11f246r30q2fx4xw7valhqjj4mc4ydj5fv5f2kbl5h93y69q0bw7";
+  };
+
+  preBuild = ''
+    substituteInPlace enumsToPerl.pl --replace "/usr/bin/perl" "${perl}/bin/perl"
+  '';
+
+  buildInputs = [ stdenv ];
+  checkPhase = "make test-all";
+  installPhase = "make pkg-install prefix='' DESTDIR=$out; make pkg-install-scripts prefix='' DESTDIR=$out";
+
+  meta = with stdenv.lib; {
+    description = "A derivative of Markdown that adds new syntax features";
+    longDescription = ''
+      MultiMarkdown is a lightweight markup language created by
+      Fletcher T. Penney and based on Markdown, which supports
+      more export-formats (html, latex, beamer, memoir, odf, opml,
+      lyx, mmd) and implements some added features currently not
+      available with plain Markdown syntax.
+
+      It adds the following features to Markdown:
+
+      footnotes
+      tables
+      citations and bibliography (works best in LaTeX using BibTeX)
+      math support
+      automatic cross-referencing ability
+      smart typography, with support for multiple languages
+      image attributes
+      table and image captions
+      definition lists
+      glossary entries (LaTeX only)
+      document metadata (e.g. title, author, date, etc.)
+    '';
+    homepage = https://fletcherpenney.net/multimarkdown/;
+    # licensed under GPLv2+ or MIT:
+    # https://raw.githubusercontent.com/fletcher/MultiMarkdown-4/master/LICENSE
+    license = with stdenv.lib.licenses; [ gpl2Plus mit ];
+    platforms = platforms.all;
+    maintainers = with stdenv.lib.maintainers; [ lowfatcomputing ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/odpdown/default.nix b/nixpkgs/pkgs/tools/typesetting/odpdown/default.nix
new file mode 100644
index 000000000000..9f62671a4fac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/odpdown/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl, pythonPackages, libreoffice }:
+
+pythonPackages.buildPythonApplication rec {
+
+  pname = "odpdown";
+  version = "0.4.1";
+
+  src = fetchurl {
+    url = "https://github.com/thorstenb/odpdown/archive/v${version}.tar.gz";
+    sha256 = "005eecc73c65b9d4c09532547940718a7b308cd565f62a213dfa040827d4d565";
+  };
+
+  propagatedBuildInputs = with pythonPackages; [ libreoffice lpod lxml mistune pillow pygments ];
+
+  checkInputs = with pythonPackages; [
+    nose
+  ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/thorstenb/odpdown;
+    repositories.git = https://github.com/thorstenb/odpdown.git;
+    description = "Create nice-looking slides from your favourite text editor";
+    longDescription = ''
+      Have a tool like pandoc, latex beamer etc, that you can write (or
+      auto-generate) input for within your favourite hacker's editor, and
+      generate nice-looking slides from. Using your corporation's mandatory,
+      CI-compliant and lovely-artsy Impress template. Including
+      syntax-highlighted code snippets of your latest hack, auto-fitted into the
+      slides.
+    '';
+    license = licenses.bsd3;
+    platforms = with platforms; linux ++ darwin;
+    maintainers = with maintainers; [ vandenoever ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/pdf2djvu/default.nix b/nixpkgs/pkgs/tools/typesetting/pdf2djvu/default.nix
new file mode 100644
index 000000000000..1090ad300f73
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/pdf2djvu/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, fetchurl, fetchpatch, pkgconfig, djvulibre, poppler, fontconfig, libjpeg }:
+
+stdenv.mkDerivation rec {
+  version = "0.9.14";
+  pname = "pdf2djvu";
+
+  src = fetchurl {
+    url = "https://github.com/jwilk/pdf2djvu/releases/download/${version}/${pname}-${version}.tar.xz";
+    sha256 = "05z2bbg54pfsi668fwcjrcr5iz9llf9gprzdsrn6fw5wjv4876zi";
+  };
+
+  patches = [
+    # fix build with Poppler 0.83
+    (fetchpatch {
+      url = "https://github.com/jwilk/pdf2djvu/commit/0aa17bb79dbcdfc249e4841f5b5398e27cfdfd41.patch";
+      sha256 = "0mr14nz5w7z4ri2556bxkf3cnn2f7dhwsld7csrh6z5qqb7d5805";
+    })
+    (fetchpatch {
+      url = "https://github.com/jwilk/pdf2djvu/commit/27b9e028091a2f370367e9eaf37b4bb1cde87b62.patch";
+      sha256 = "03apsg1487jl800q8j70hicvg6xsndd593bg7babm4vgivkxb0da";
+    })
+  ];
+
+  nativeBuildInputs = [ pkgconfig ];
+
+  buildInputs = [ djvulibre poppler fontconfig libjpeg ];
+
+  preConfigure = ''
+    sed -i 's#\$djvulibre_bin_path#${djvulibre.bin}/bin#g' configure
+
+    # Configure skips the failing check for usability of windres when it is nonempty.
+    unset WINDRES
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    description = "Creates djvu files from PDF files";
+    homepage = https://jwilk.net/software/pdf2djvu;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ pSub ];
+    inherit version;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/pdf2htmlEX/add-glib-cmake.patch b/nixpkgs/pkgs/tools/typesetting/pdf2htmlEX/add-glib-cmake.patch
new file mode 100644
index 000000000000..8e1d9dfc1914
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/pdf2htmlEX/add-glib-cmake.patch
@@ -0,0 +1,17 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 3fdabb0..378621a 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -59,6 +59,12 @@ include_directories(${FONTFORGE_INCLUDE_DIRS})
+ link_directories(${FONTFORGE_LIBRARY_DIRS})
+ set(PDF2HTMLEX_LIBS ${PDF2HTMLEX_LIBS} ${FONTFORGE_LIBRARIES})
+ 
++# add glib dependency
++pkg_check_modules(GLIB REQUIRED glib-2.0)
++include_directories(${GLIB_INCLUDE_DIRS})
++link_directories(${GLIB_INCLUDE_DIRS})
++set(PDF2HTMLEX_LIBS ${PDF2HTMLEX_LIBS} ${GLIB_LIBRARIES})
++
+ # debug build flags (overwrite default cmake debug flags)
+ set(CMAKE_C_FLAGS_DEBUG "-ggdb -pg")
+ set(CMAKE_CXX_FLAGS_DEBUG "-ggdb -pg")
diff --git a/nixpkgs/pkgs/tools/typesetting/pdf2htmlEX/default.nix b/nixpkgs/pkgs/tools/typesetting/pdf2htmlEX/default.nix
new file mode 100644
index 000000000000..dee6ec3c6fff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/pdf2htmlEX/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, fetchFromGitHub, cmake, pkgconfig
+, poppler, xorg, pcre, python, glib, fontforge, cairo, pango, openjdk8
+
+}:
+
+stdenv.mkDerivation {
+  name = "pdf2htmlEX-0.14.6";
+
+  src = fetchFromGitHub {
+    repo   = "pdf2htmlEX";
+    owner  = "coolwanglu";
+    rev    = "v0.14.6";
+    sha256 = "1nh0ab8f11fsyi4ldknlkmdzcfvm1dfh8b9bmprjgq6q0vjj7f78";
+  };
+
+  patches = [ ./add-glib-cmake.patch ];
+
+  cmakeFlags = [ "-DENABLE_SVG=ON" ];
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [
+    cmake
+    pkgconfig
+  ];
+
+  buildInputs = [
+    xorg.libpthreadstubs
+    xorg.libXdmcp
+    pcre
+    python
+    glib
+    cairo
+    pango
+    poppler
+    fontforge
+    openjdk8
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Render PDF files to beautiful HTML";
+    homepage    = "https://github.com/coolwanglu/pdf2htmlEX";
+    license     = licenses.gpl3Plus;
+    maintainers = [ maintainers.taktoa ];
+    platforms   = with platforms; linux;
+    broken      = true; # 2018-09-08
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/pdf2odt/default.nix b/nixpkgs/pkgs/tools/typesetting/pdf2odt/default.nix
new file mode 100644
index 000000000000..c8e27fb5a6e7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/pdf2odt/default.nix
@@ -0,0 +1,49 @@
+{ stdenv, lib, makeWrapper, fetchFromGitHub
+, bc, coreutils, file, gawk, ghostscript, gnused, imagemagick, zip }:
+
+let
+  path = lib.makeBinPath [
+    bc
+    coreutils
+    file
+    gawk
+    ghostscript
+    gnused
+    imagemagick
+    zip
+  ];
+
+in stdenv.mkDerivation rec {
+  pname = "pdf2odt";
+  version = "20170207";
+
+  src = fetchFromGitHub {
+    owner  = "gutschke";
+    repo   = "pdf2odt";
+    rev    = "4533bd14306c30c085001db59dbb8114ea09c360";
+    sha256 = "14f9r5f0g6jzanl54jv86ls0frvspka1p9c8dy3fnriqpm584j0r";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  patches = [ ./use_mktemp.patch ];
+
+  installPhase = ''
+    install -Dm0755 pdf2odt           -t $out/bin
+    install -Dm0644 README.md LICENSE -t $out/share/doc/pdf2odt
+
+    ln -rs $out/bin/pdf2odt $out/bin/pdf2ods
+
+    wrapProgram $out/bin/pdf2odt \
+      --prefix PATH : ${path}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "PDF to ODT format converter";
+    homepage    = https://github.com/gutschke/pdf2odt;
+    license     = licenses.mit;
+    platforms   = platforms.all;
+    maintainers = with maintainers; [ peterhoeg ];
+    inherit version;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/pdf2odt/use_mktemp.patch b/nixpkgs/pkgs/tools/typesetting/pdf2odt/use_mktemp.patch
new file mode 100644
index 000000000000..1425aa5ae6a3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/pdf2odt/use_mktemp.patch
@@ -0,0 +1,19 @@
+diff --git a/pdf2odt b/pdf2odt
+index d38bb07..e1ddf05 100755
+--- a/pdf2odt
++++ b/pdf2odt
+@@ -173,13 +173,7 @@ if [ -e "${out}" ] &&
+ fi
+ 
+ # Set up temporary staging directory
+-TMPDIR="/tmp/pdf2odt.$$"
+-[ \! -e "${TMPDIR}" ] || {
+-  echo "Staging directory ${TMPDIR} already exists" >&2
+-  exit 1
+-}
+-trap 'rm -rf "${TMPDIR}"' EXIT INT TERM QUIT HUP
+-mkdir -p "${TMPDIR}"
++TMPDIR=$(mktemp -d)
+ 
+ # Adjust DPI so that the image fits on a letter- or a4-sized page.
+ function scale() {
diff --git a/nixpkgs/pkgs/tools/typesetting/pdfgrep/default.nix b/nixpkgs/pkgs/tools/typesetting/pdfgrep/default.nix
new file mode 100644
index 000000000000..20da90961dda
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/pdfgrep/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, pkgconfig, poppler, libgcrypt, pcre, asciidoc }:
+
+stdenv.mkDerivation rec {
+  pname = "pdfgrep";
+  version = "2.1.2";
+
+  src = fetchurl {
+    url = "https://pdfgrep.org/download/${pname}-${version}.tar.gz";
+    sha256 = "1fia10djcxxl7n9jw2prargw4yzbykk6izig2443ycj9syhxrwqf";
+  };
+
+  postPatch = ''
+    for i in ./src/search.h ./src/pdfgrep.cc ./src/search.cc; do
+      substituteInPlace $i --replace '<cpp/' '<'
+    done
+  '';
+
+  nativeBuildInputs = [ pkgconfig asciidoc ];
+  buildInputs = [ poppler libgcrypt pcre ];
+
+  meta = {
+    description = "Commandline utility to search text in PDF files";
+    homepage = https://pdfgrep.org/;
+    license = stdenv.lib.licenses.gpl2Plus;
+    maintainers = with stdenv.lib.maintainers; [ qknight fpletz ];
+    platforms = with stdenv.lib.platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/pdfsandwich/default.nix b/nixpkgs/pkgs/tools/typesetting/pdfsandwich/default.nix
new file mode 100644
index 000000000000..f8b17be01ddc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/pdfsandwich/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, ocaml, makeWrapper, fetchsvn, ghostscript, imagemagick, perl, poppler_utils, tesseract, unpaper }:
+
+stdenv.mkDerivation {
+  version = "0.1.7";
+  pname = "pdfsandwich";
+
+  src = fetchsvn {
+    url = "svn://svn.code.sf.net/p/pdfsandwich/code/trunk/src";
+    rev = "75";
+    sha256 = "1420c33divch087xrr61lvyf975bapqkgjqaighl581i69nlzsm6";
+  };
+
+  buildInputs = [ ocaml perl makeWrapper];
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -p pdfsandwich $out/bin
+    wrapProgram $out/bin/pdfsandwich --prefix PATH : ${stdenv.lib.makeBinPath [ imagemagick ghostscript poppler_utils unpaper tesseract ]}
+
+    mkdir -p $out/man/man1
+    cp -p pdfsandwich.1.gz $out/man/man1
+  '';
+
+meta = with stdenv.lib; {
+    description = "OCR tool for scanned PDFs";
+    homepage = http://www.tobias-elze.de/pdfsandwich/;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.rps ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/pdftk/default.nix b/nixpkgs/pkgs/tools/typesetting/pdftk/default.nix
new file mode 100644
index 000000000000..72f25ef099bc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/pdftk/default.nix
@@ -0,0 +1,42 @@
+{ fetchurl, stdenv, gcj, unzip }:
+
+stdenv.mkDerivation {
+  name = "pdftk-2.02";
+
+  src = fetchurl {
+    url = "https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/pdftk-2.02-src.zip";
+    sha256 = "1hdq6zm2dx2f9h7bjrp6a1hfa1ywgkwydp14i2sszjiszljnm3qi";
+  };
+
+  nativeBuildInputs = [ gcj unzip ];
+
+  hardeningDisable = [ "fortify" "format" ];
+
+  preBuild = ''
+    cd pdftk
+    sed -e 's@/usr/bin/@@g' -i Makefile.*
+    NIX_ENFORCE_PURITY= \
+      make \
+      LIBGCJ="${gcj.cc}/share/java/libgcj-${gcj.cc.version}.jar" \
+      GCJ=gcj GCJH=gcjh GJAR=gjar \
+      -iC ../java all
+  '';
+
+  # Makefile.Debian has almost fitting defaults
+  makeFlags = [ "-f" "Makefile.Debian" "VERSUFF=" ];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man/man1
+    cp pdftk $out/bin
+    cp ../pdftk.1 $out/share/man/man1
+  '';
+
+
+  meta = {
+    description = "Simple tool for doing everyday things with PDF documents";
+    homepage = https://www.pdflabs.com/tools/pdftk-server/;
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = with stdenv.lib.maintainers; [raskin];
+    platforms = with stdenv.lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/psutils/default.nix b/nixpkgs/pkgs/tools/typesetting/psutils/default.nix
new file mode 100644
index 000000000000..39beab751a7a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/psutils/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl, perl }:
+
+stdenv.mkDerivation {
+  name = "psutils-17";
+
+  src = fetchurl {
+    url = "ftp://ftp.knackered.org/pub/psutils/psutils-p17.tar.gz";
+    sha256 = "1r4ab1fvgganm02kmm70b2r1azwzbav2am41gbigpa2bb1wynlrq";
+  };
+
+  configurePhase = ''
+    sed -e 's,/usr/local/bin/perl,${perl}/bin/perl,' \
+      -e "s,/usr/local,$out," \
+      Makefile.unix > Makefile
+  '';
+
+  preInstall = ''
+    mkdir -p $out/bin $out/share/man/man1
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Collection of useful utilities for manipulating PS documents";
+    homepage = http://knackered.knackered.org/angus/psutils/;
+    license = licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/rubber/default.nix b/nixpkgs/pkgs/tools/typesetting/rubber/default.nix
new file mode 100644
index 000000000000..21d83dd1dd06
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/rubber/default.nix
@@ -0,0 +1,43 @@
+{ fetchurl, stdenv, python3Packages, texinfo }:
+
+python3Packages.buildPythonApplication rec {
+  name = "rubber-${version}";
+  version = "1.5.1";
+
+  src = fetchurl {
+    url = "https://launchpad.net/rubber/trunk/${version}/+download/${name}.tar.gz";
+    sha256 = "178dmrp0mza5gqjiqgk6dqs0c10s0c517pk6k9pjbam86vf47a1p";
+  };
+
+  nativeBuildInputs = [ texinfo ];
+
+  # I couldn't figure out how to pass the proper parameter to disable pdf generation, so we
+  # use sed to change the default
+  preBuild = ''
+    sed -i -r 's/pdf\s+= True/pdf = False/g' setup.py
+  '';
+
+  # the check scripts forces python2. If we need to use python3 at some point, we should use
+  # the correct python
+  checkPhase = ''
+    sed -i 's|python=python3|python=${python3Packages.python.interpreter}|' tests/run.sh
+    cd tests && ${stdenv.shell} run.sh
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Wrapper for LaTeX and friends";
+    longDescription = ''
+      Rubber is a program whose purpose is to handle all tasks related
+      to the compilation of LaTeX documents.  This includes compiling
+      the document itself, of course, enough times so that all
+      references are defined, and running BibTeX to manage
+      bibliographic references.  Automatic execution of dvips to
+      produce PostScript documents is also included, as well as usage
+      of pdfLaTeX to produce PDF documents.
+    '';
+    license = licenses.gpl2Plus;
+    homepage = https://launchpad.net/rubber;
+    maintainers = with maintainers; [ ttuegel peterhoeg ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/satysfi/default.nix b/nixpkgs/pkgs/tools/typesetting/satysfi/default.nix
new file mode 100644
index 000000000000..6a2ebb089d21
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/satysfi/default.nix
@@ -0,0 +1,70 @@
+{ stdenv, fetchzip, fetchFromGitHub, ruby, dune, ocamlPackages
+, ipaexfont, junicode
+}:
+let
+  lm = fetchzip {
+    url = "http://www.gust.org.pl/projects/e-foundry/latin-modern/download/lm2.004otf.zip";
+    sha256 = "1mc88fbhfd2wki2vr700pgv96smya6d1z783xs3mfy138yb6ga2p";
+    stripRoot = false;
+  };
+  lm-math = fetchzip {
+    url = "http://www.gust.org.pl/projects/e-foundry/lm-math/download/latinmodern-math-1959.zip";
+    sha256 = "15l3lxjciyjmbh0q6jjvzz16ibk4ij79in9fs47qhrfr2wrddpvs";
+  };
+  camlpdf = ocamlPackages.camlpdf.overrideAttrs (o: {
+    src = fetchFromGitHub {
+      owner = "gfngfn";
+      repo = "camlpdf";
+      rev = "v2.2.1+satysfi";
+      sha256 = "1s8v2i8nq52kz038bvc2n0spz68fpdq6kgxrabcs6zvml6n1frzy";
+    };
+  });
+  otfm = ocamlPackages.otfm.overrideAttrs (o: {
+    src = fetchFromGitHub {
+      owner = "gfngfn";
+      repo = "otfm";
+      rev = "v0.3.2+satysfi";
+      sha256 = "1h795pdi5qi2nwymsfvb53x56h9pqi9iiqbzw10mi6fazgd2dzhd";
+    };
+  });
+in
+  stdenv.mkDerivation rec {
+    pname = "satysfi";
+    version = "0.0.3";
+    src = fetchFromGitHub {
+      owner = "gfngfn";
+      repo = "SATySFi";
+      rev = "v${version}";
+      sha256 = "0qk284jhxnfb69s24j397a6155dhl4dcgamicin7sq04d0wj6c7f";
+      fetchSubmodules = true;
+    };
+
+    preConfigure = ''
+      substituteInPlace src/frontend/main.ml --replace \
+      '/usr/local/share/satysfi"; "/usr/share/satysfi' \
+      $out/share/satysfi
+    '';
+
+    nativeBuildInputs = [ ruby dune ];
+
+    buildInputs = [ camlpdf otfm ] ++ (with ocamlPackages; [
+      ocaml findlib menhir
+      batteries camlimages core_kernel ppx_deriving uutf yojson
+    ]);
+
+    installPhase = ''
+      cp -r ${ipaexfont}/share/fonts/opentype/* lib-satysfi/dist/fonts/
+      cp -r ${junicode}/share/fonts/junicode-ttf/* lib-satysfi/dist/fonts/
+      cp -r ${lm}/* lib-satysfi/dist/fonts/
+      cp -r ${lm-math}/otf/latinmodern-math.otf lib-satysfi/dist/fonts/
+      make install PREFIX=$out LIBDIR=$out/share/satysfi
+    '';
+
+    meta = with stdenv.lib; {
+      homepage = https://github.com/gfngfn/SATySFi;
+      description = "A statically-typed, functional typesetting system";
+      license = licenses.lgpl3;
+      maintainers = [ maintainers.mt-caret ];
+      platforms = platforms.all;
+    };
+  }
diff --git a/nixpkgs/pkgs/tools/typesetting/scdoc/default.nix b/nixpkgs/pkgs/tools/typesetting/scdoc/default.nix
new file mode 100644
index 000000000000..011a8f24ece9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/scdoc/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "scdoc";
+  version = "1.10.0";
+
+  src = fetchurl {
+    url = "https://git.sr.ht/~sircmpwn/scdoc/archive/${version}.tar.gz";
+    sha256 = "0lk8wpz95ld1fnpnc3xkhvnd58px1vbhvlpkr8labi2ck65y10il";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace "-static" "" \
+      --replace "/usr/local" "$out"
+  '';
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    description = "A simple man page generator";
+    longDescription = ''
+      scdoc is a simple man page generator written for POSIX systems written in
+      C99.
+    '';
+    homepage = https://git.sr.ht/~sircmpwn/scdoc;
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ primeos ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/sile/default.nix b/nixpkgs/pkgs/tools/typesetting/sile/default.nix
new file mode 100644
index 000000000000..3b6ec809869d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/sile/default.nix
@@ -0,0 +1,77 @@
+{ stdenv, darwin, fetchurl, makeWrapper, pkgconfig
+, harfbuzz, icu
+, fontconfig, lua, libiconv
+, makeFontsConf, gentium, gentium-book-basic, dejavu_fonts
+}:
+
+with stdenv.lib;
+
+let
+  luaEnv = lua.withPackages(ps: with ps;[ lpeg luaexpat lua-zlib luafilesystem luasocket luasec]);
+
+in
+
+stdenv.mkDerivation rec {
+  pname = "sile";
+  version = "0.9.5.1";
+
+  src = fetchurl {
+    url = "https://github.com/simoncozens/sile/releases/download/v${version}/${pname}-${version}.tar.bz2";
+    sha256 = "0fh0jbpsyqyq0hzq4midn7yw2z11hqdgqb9mmgz766cp152wrkb0";
+  };
+
+  nativeBuildInputs = [pkgconfig makeWrapper];
+  buildInputs = [ harfbuzz icu fontconfig libiconv luaEnv ]
+  ++ optional stdenv.isDarwin darwin.apple_sdk.frameworks.AppKit
+  ;
+
+  preConfigure = optionalString stdenv.isDarwin ''
+    sed -i -e 's|@import AppKit;|#import <AppKit/AppKit.h>|' src/macfonts.m
+  '';
+
+  NIX_LDFLAGS = optionalString stdenv.isDarwin "-framework AppKit";
+
+  FONTCONFIG_FILE = makeFontsConf {
+    fontDirectories = [
+      gentium
+      gentium-book-basic
+      dejavu_fonts
+    ];
+  };
+
+  doCheck = stdenv.targetPlatform == stdenv.hostPlatform
+  && ! stdenv.isAarch64 # random seg. faults
+  && ! stdenv.isDarwin; # dy lib not found
+
+  enableParallelBuilding = true;
+
+  checkPhase = ''
+    make documentation/developers.pdf documentation/sile.pdf
+  '';
+
+  postInstall = ''
+    install -D -t $out/share/doc/sile documentation/*.pdf
+  '';
+
+  # Hack to avoid TMPDIR in RPATHs.
+  preFixup = ''rm -rf "$(pwd)" && mkdir "$(pwd)" '';
+
+  outputs = [ "out" "doc" ];
+
+  meta = {
+    description = "A typesetting system";
+    longDescription = ''
+      SILE is a typesetting system; its job is to produce beautiful
+      printed documents. Conceptually, SILE is similar to TeX—from
+      which it borrows some concepts and even syntax and
+      algorithms—but the similarities end there. Rather than being a
+      derivative of the TeX family SILE is a new typesetting and
+      layout engine written from the ground up using modern
+      technologies and borrowing some ideas from graphical systems
+      such as InDesign.
+    '';
+    homepage = http://www.sile-typesetter.org;
+    platforms = platforms.unix;
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/skribilo/default.nix b/nixpkgs/pkgs/tools/typesetting/skribilo/default.nix
new file mode 100644
index 000000000000..b06b2e25fcc2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/skribilo/default.nix
@@ -0,0 +1,58 @@
+{ stdenv, fetchurl, pkgconfig, gettext
+, guile, guile-reader, guile-lib
+, ploticus, imagemagick
+, ghostscript, transfig
+, enableEmacs ? false, emacs ? null
+, enableLout ? true, lout ? null
+, enableTex ? true, tex ? null
+, makeWrapper }:
+
+with stdenv.lib;
+stdenv.mkDerivation rec {
+
+  pname = "skribilo";
+  version = "0.9.4";
+
+  src = fetchurl {
+    url = "http://download.savannah.nongnu.org/releases/skribilo/${pname}-${version}.tar.gz";
+    sha256 = "06ywnfjfa9sxrzdszb5sryzg266380g519cm64kq62sskzl7zmnf";
+  };
+
+  nativeBuildInputs = [ pkgconfig makeWrapper ];
+
+  buildInputs = [ gettext guile ploticus imagemagick ghostscript transfig ]
+  ++ optional enableEmacs emacs
+  ++ optional enableLout lout
+  ++ optional enableTex tex;
+
+  propagatedBuildInputs = [ guile-reader guile-lib ];
+
+  postInstall = ''
+    wrapProgram $out/bin/skribilo \
+      --prefix GUILE_LOAD_PATH : "$out/share/guile/site:${guile-lib}/share/guile/site:${guile-reader}/share/guile/site" \
+      --prefix GUILE_LOAD_COMPILED_PATH : "$out/share/guile/site:${guile-lib}/share/guile/site:${guile-reader}/share/guile/site"
+  '';
+
+  meta = {
+    description = "The Ultimate Document Programming Framework";
+    longDescription = ''
+      Skribilo is a free document production tool that takes a
+      structured document representation as its input and renders that
+      document in a variety of output formats: HTML and Info for
+      on-line browsing, and Lout and LaTeX for high-quality hard
+      copies.
+
+      The input document can use Skribilo's markup language to provide
+      information about the document's structure, which is similar to
+      HTML or LaTeX and does not require expertise. Alternatively, it
+      can use a simpler, "markup-less" format that borrows from Emacs'
+      outline mode and from other conventions used in emails, Usenet
+      and text.
+    '';
+    homepage = https://www.nongnu.org/skribilo/;
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.unix;
+  };
+}
+# TODO: Better Emacs and TeX integration
diff --git a/nixpkgs/pkgs/tools/typesetting/sshlatex/default.nix b/nixpkgs/pkgs/tools/typesetting/sshlatex/default.nix
new file mode 100644
index 000000000000..be218cda535a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/sshlatex/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchFromGitHub, inotify-tools, openssh, perl, gnutar, bash, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "sshlatex";
+  version = "0.8";
+
+  src = fetchFromGitHub {
+    owner = "iblech";
+    repo = "sshlatex";
+    rev = version;
+    sha256 = "0kaah8is74zba9373xccmsxmnnn6kh0isr4qpg21x3qhdzhlxl7q";
+  };
+
+  buildInputs = [ makeWrapper ];
+
+  installPhase = let
+    binPath = stdenv.lib.makeBinPath [ openssh perl gnutar bash inotify-tools ];
+  in ''
+    mkdir -p $out/bin
+    cp sshlatex $out/bin
+    wrapProgram $out/bin/sshlatex --prefix PATH : "${binPath}"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A collection of hacks to efficiently run LaTeX via ssh";
+    longDescription = ''
+      sshlatex is a tool which uploads LaTeX source files to a remote, runs
+      LaTeX there, and streams the resulting PDF file to the local host.
+      Because sshlatex prestarts LaTeX with the previous run's preamble,
+      thereby preloading the required LaTeX packages, it is also useful in a
+      purely local setting.
+    '';
+    homepage = https://github.com/iblech/sshlatex;
+    license = stdenv.lib.licenses.gpl3Plus;  # actually dual-licensed gpl3Plus | lppl13cplus
+    platforms = stdenv.lib.platforms.all;
+    maintainers = [ maintainers.iblech ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/tectonic/default.nix b/nixpkgs/pkgs/tools/typesetting/tectonic/default.nix
new file mode 100644
index 000000000000..c78e60996bb2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tectonic/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, rustPlatform
+, darwin, fontconfig, harfbuzz, openssl, pkgconfig }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tectonic";
+  version = "0.1.12";
+
+  src = fetchFromGitHub {
+    owner = "tectonic-typesetting";
+    repo = "tectonic";
+    rev = "v${version}";
+    sha256 = "0dycv135bkpf71iwlwh8rwwvn287d605nl7v8mjxlrsayiivdmn9";
+  };
+
+  cargoSha256 = "0bkgh73kqcdv3j9hr3m13wrdhls3zrk7aii9shzbzl6rnp2ry1az";
+
+  nativeBuildInputs = [ pkgconfig ];
+
+  buildInputs = [ fontconfig harfbuzz openssl ]
+    ++ stdenv.lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [ ApplicationServices Cocoa Foundation ]);
+
+  # tests fail due to read-only nix store
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "Modernized, complete, self-contained TeX/LaTeX engine, powered by XeTeX and TeXLive";
+    homepage = https://tectonic-typesetting.github.io/;
+    license = with licenses; [ mit ];
+    maintainers = [ maintainers.lluchs ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/ted/default.nix b/nixpkgs/pkgs/tools/typesetting/ted/default.nix
new file mode 100644
index 000000000000..a03432b729ad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/ted/default.nix
@@ -0,0 +1,83 @@
+{ stdenv, fetchurl, pkgconfig, zlib, pcre, xorg, libjpeg, libtiff, libpng, gtk2, libpaper, makeWrapper, ghostscript }:
+
+stdenv.mkDerivation rec {
+  pname = "ted";
+  version = "2.23";
+
+  src = fetchurl {
+    url = "http://ftp.nluug.nl/pub/editors/${pname}/${pname}-${version}.src.tar.gz";
+    sha256 = "0v1ipynyjklb3chd1vq26a21sjjg66sir57gi2kkrbwnpk195a9z";
+  };
+
+  preConfigure = ''
+    mkdir pkgconfig-append
+    pushd pkgconfig-append
+
+    # ted looks for libtiff, not libtiff-4 in its pkg-config invokations
+    cp ${libtiff.dev}/lib/pkgconfig/libtiff-4.pc libtiff.pc
+
+    # ted needs a libpaper pkg-config file
+    cat > libpaper.pc << EOF
+    prefix=${libpaper}
+    libdir=${libpaper}/lib
+    includedir=${libpaper}/include
+    exec_prefix=\''${prefix}
+
+    Name: libpaper
+    Version: ${libpaper.version}
+    Description: ${libpaper.meta.description}
+    Libs: -L\''${libdir} -lpaper
+    Cflags: -I\''${includedir}
+    EOF
+
+    export PKG_CONFIG_PATH="$PWD:$PKG_CONFIG_PATH"
+
+    popd
+  '';
+
+  makeFlags = [ "CONFIGURE_OPTIONS=--with-GTK" "CONFIGURE_OPTIONS+=--prefix=$(out)" "compile.shared" ];
+
+  installPhase = ''
+    runHook preInstall
+
+    make tedPackage/makefile
+    pushd tedPackage
+    substituteInPlace makefile --replace /usr ""
+    make PKGDESTDIR=$out datadir
+    popd
+
+    pushd $out/share/Ted/examples
+    for f in rtf2*.sh
+    do
+        makeWrapper "$PWD/$f" "$out/bin/$f" --prefix PATH : $out/bin:${stdenv.lib.makeBinPath [ ghostscript ]}
+    done
+    popd
+
+    cp -v Ted/Ted $out/bin
+
+    runHook postInstall
+  '';
+
+  buildInputs = [ pkgconfig zlib pcre xorg.xlibsWrapper xorg.libXpm libjpeg libtiff libpng gtk2 libpaper makeWrapper ];
+
+  meta = with stdenv.lib; {
+    description = "Ted, an easy rich text processor";
+    longDescription = ''
+      Ted is a text processor running under X Windows on Unix/Linux systems.
+      Ted was developed as a standard easy light weight word processor, having
+      the role of Wordpad on MS-Windows. Since then, Ted has evolved to a real
+      word processor. It still has the same easy appearance and the same speed
+      as the original. The possibility to type a letter, a note or a report
+      with a simple light weight program on a Unix/Linux machine is clearly
+      missing. Ted was made to make it possible to edit rich text documents on
+      Unix/Linux in a wysiwyg way. RTF files from Ted are fully compatible with
+      MS-Word. Additionally, Ted also is an RTF to PostScript and an RTF to
+      Acrobat PDF converter.
+    '';
+    homepage    = https://nllgg.nl/Ted/;
+    license     = licenses.gpl2;
+    platforms   = platforms.all;
+    broken      = stdenv.isDarwin;
+    maintainers = with maintainers; [ obadz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/auctex/default.nix b/nixpkgs/pkgs/tools/typesetting/tex/auctex/default.nix
new file mode 100644
index 000000000000..787f19d91f4a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/auctex/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchurl, emacs, texlive, ghostscript }:
+ 
+let auctex = stdenv.mkDerivation ( rec {
+  version = "12.2";
+
+  # Make this a valid tex(live-new) package;
+  # the pkgs attribute is provided with a hack below.
+  pname = "auctex";
+  tlType = "run";
+
+
+  outputs = [ "out" "tex" ];
+
+  src = fetchurl {
+    url = "mirror://gnu/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "14vqs08mkfzc91jg7kabs9sdn74vywj8a29gyrfa3ivnm9c7jrsr";
+  };
+
+  buildInputs = [ emacs texlive.combined.scheme-basic ghostscript ];
+
+  preConfigure = ''
+    mkdir -p "$tex"
+  '';
+
+  configureFlags = [
+    "--with-lispdir=\${out}/share/emacs/site-lisp"
+    "--with-texmf-dir=\${tex}"
+  ];
+
+  meta = {
+    description = "Extensible package for writing and formatting TeX files in GNU Emacs and XEmacs";
+    homepage = https://www.gnu.org/software/auctex;
+    platforms = stdenv.lib.platforms.unix;
+    license = stdenv.lib.licenses.gpl3;
+  };
+});
+
+in auctex // { pkgs = [ auctex.tex ]; }
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/dblatex/default.nix b/nixpkgs/pkgs/tools/typesetting/tex/dblatex/default.nix
new file mode 100644
index 000000000000..cc9432f6f22d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/dblatex/default.nix
@@ -0,0 +1,72 @@
+{ stdenv, fetchurl, python2, libxslt, texlive
+, enableAllFeatures ? false, imagemagick ? null, transfig ? null, inkscape ? null, fontconfig ? null, ghostscript ? null
+
+, tex ? texlive.combine { # satisfy all packages that ./configure mentions
+    inherit (texlive) scheme-basic epstopdf anysize appendix changebar
+      fancybox fancyvrb float footmisc listings jknapltx/*for mathrsfs.sty*/
+      multirow overpic pdfpages graphics stmaryrd subfigure titlesec wasysym
+      # pkgs below don't seem requested by dblatex, but our manual fails without them
+      ec zapfding symbol eepic times rsfs cs tex4ht courier helvetic ly1;
+  }
+}:
+
+# NOTE: enableAllFeatures just purifies the expression, it doesn't actually
+# enable any extra features.
+
+assert enableAllFeatures ->
+  imagemagick != null &&
+  transfig != null &&
+  inkscape != null &&
+  fontconfig != null &&
+  ghostscript != null;
+
+stdenv.mkDerivation rec {
+  name = "dblatex-0.3.11";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/dblatex/${name}.tar.bz2";
+    sha256 = "0rp1bc2lgisigscq1i7zxfd2qdaxxxld6khbcxss4pq7fpi9fzkv";
+  };
+
+  buildInputs = [ python2 libxslt tex ]
+    ++ stdenv.lib.optionals enableAllFeatures [ imagemagick transfig ];
+
+  # TODO: dblatex tries to execute texindy command, but nixpkgs doesn't have
+  # that yet. In Ubuntu, texindy is a part of the xindy package.
+  preConfigure = ''
+    sed -i 's|self.install_layout == "deb"|False|' setup.py
+  '' + stdenv.lib.optionalString enableAllFeatures ''
+    for file in $(find -name "*.py"); do
+        sed -e 's|cmd = \["xsltproc|cmd = \["${libxslt.bin}/bin/xsltproc|g' \
+            -e 's|Popen(\["xsltproc|Popen(\["${libxslt.bin}/bin/xsltproc|g' \
+            -e 's|cmd = \["texindy|cmd = ["nixpkgs_is_missing_texindy|g' \
+            -e 's|cmd = "epstopdf|cmd = "${tex}/bin/epstopdf|g' \
+            -e 's|cmd = \["makeindex|cmd = ["${tex}/bin/makeindex|g' \
+            -e 's|doc.program = "pdflatex"|doc.program = "${tex}/bin/pdflatex"|g' \
+            -e 's|self.program = "latex"|self.program = "${tex}/bin/latex"|g' \
+            -e 's|Popen("pdflatex|Popen("${tex}/bin/pdflatex|g' \
+            -e 's|"fc-match"|"${fontconfig.bin}/bin/fc-match"|g' \
+            -e 's|"fc-list"|"${fontconfig.bin}/bin/fc-list"|g' \
+            -e 's|cmd = "inkscape|cmd = "${inkscape}/bin/inkscape|g' \
+            -e 's|cmd = "fig2dev|cmd = "${transfig}/bin/fig2dev|g' \
+            -e 's|cmd = \["ps2pdf|cmd = ["${ghostscript}/bin/ps2pdf|g' \
+            -e 's|cmd = "convert|cmd = "${imagemagick.out}/bin/convert|g' \
+            -i "$file"
+    done
+  '';
+
+  dontBuild = true;
+
+  installPhase = ''
+    ${python2.interpreter} ./setup.py install --prefix="$out" --use-python-path --verbose
+  '';
+
+  passthru = { inherit tex; };
+
+  meta = {
+    description = "A program to convert DocBook to DVI, PostScript or PDF via LaTeX or ConTeXt";
+    homepage = http://dblatex.sourceforge.net/;
+    license = stdenv.lib.licenses.gpl2Plus;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/latexrun/default.nix b/nixpkgs/pkgs/tools/typesetting/tex/latexrun/default.nix
new file mode 100644
index 000000000000..6d64b536502e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/latexrun/default.nix
@@ -0,0 +1,29 @@
+{ stdenvNoCC, fetchFromGitHub, python3 }:
+
+stdenvNoCC.mkDerivation {
+  pname = "latexrun";
+  version = "unstable-2015-11-18";
+  src = fetchFromGitHub {
+    owner = "aclements";
+    repo = "latexrun";
+    rev = "38ff6ec2815654513c91f64bdf2a5760c85da26e";
+    sha256 = "0xdl94kn0dbp6r7jk82cwxybglm9wp5qwrjqjxmvadrqix11a48w";
+  };
+
+  buildInputs = [ python3 ];
+
+  dontBuild = true;
+  installPhase = ''
+    mkdir -p $out/bin
+    cp latexrun $out/bin/latexrun
+    chmod +x $out/bin/latexrun
+  '';
+
+  meta = with stdenvNoCC.lib; {
+    description = "A 21st century LaTeX wrapper";
+    homepage = https://github.com/aclements/latexrun;
+    license = licenses.mit;
+    maintainers = [ maintainers.lucus16 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/lkproof/default.nix b/nixpkgs/pkgs/tools/typesetting/tex/lkproof/default.nix
new file mode 100644
index 000000000000..db0ec6d9bead
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/lkproof/default.nix
@@ -0,0 +1,22 @@
+{stdenv, fetchurl, unzip}:
+
+stdenv.mkDerivation {
+  name = "lkproof-3.1";
+
+  src = fetchurl {
+    url = http://mirror.ctan.org/macros/latex/contrib/lkproof.zip;
+    sha256 = "1qjkjhpc4rm62qxn18r83zdlwnj1wvnkcpdiqlv7w4bakh0gvjly";
+  };
+
+  buildInputs = [ unzip ];
+
+  installPhase = "
+    mkdir -p $out/share/texmf-nix/tex/generic/lkproof
+    cp -prd *.sty $out/share/texmf-nix/tex/generic/lkproof
+  ";
+
+  meta = with stdenv.lib; {
+    platforms = platforms.unix;
+    license = licenses.gpl1Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/nix/animatedot.sh b/nixpkgs/pkgs/tools/typesetting/tex/nix/animatedot.sh
new file mode 100644
index 000000000000..f038b83ff7ad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/nix/animatedot.sh
@@ -0,0 +1,9 @@
+source $stdenv/setup
+
+mkdir -p $out
+
+for ((i = 1; i <= $nrFrames; i++)); do
+    echo "producing frame $i...";
+    targetName=$out/$(basename $(stripHash $dotGraph) .dot)-f-$i.dot
+    cpp -DFRAME=$i < $dotGraph > $targetName
+done
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/nix/copy-includes.pl b/nixpkgs/pkgs/tools/typesetting/tex/nix/copy-includes.pl
new file mode 100644
index 000000000000..2cec62fc7cb6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/nix/copy-includes.pl
@@ -0,0 +1,43 @@
+use strict;
+use File::Basename;
+
+sub createDirs;
+sub createDirs {
+    my $path = shift;
+    return unless $path =~ /^(.*)\/([^\/]*)$/;
+    my $dir = $1;
+    return if -d $dir;
+    return if -e $dir;
+    createDirs $dir;
+    mkdir $dir or die "cannot create directory `$dir'";
+}
+
+my $maxParents = 0;
+for (my $n = 0; $n < @ARGV; $n += 2) {
+    my $fullPath = $ARGV[$n];
+    my $relPath = $ARGV[$n + 1];
+    my $parents = 0;
+    foreach my $comp (split /\//, $relPath) {
+        $parents++ if ($comp eq "..") 
+    }
+    $maxParents = $parents if $parents > $maxParents;
+}
+
+my $startDir = "./";
+for (my $n = 0; $n < $maxParents; $n++) {
+    $startDir .= "dotdot/";
+    mkdir "$startDir" or die "cannot create directory `$startDir': $!";
+}
+
+chdir $startDir or die;
+
+for (my $n = 0; $n < @ARGV; $n += 2) {
+    my $fullPath = $ARGV[$n];
+    my $relPath = $ARGV[$n + 1];
+
+    createDirs $relPath;
+        
+    symlink $fullPath, $relPath or die "cannot create symlink `$relPath'";
+}
+
+print "$startDir\n";
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/nix/default.nix b/nixpkgs/pkgs/tools/typesetting/tex/nix/default.nix
new file mode 100644
index 000000000000..4ee45bf4bc8f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/nix/default.nix
@@ -0,0 +1,249 @@
+pkgs:
+
+rec {
+
+
+  runLaTeX =
+    { rootFile
+    , generatePDF ? true # generate PDF, not DVI
+    , generatePS ? false # generate PS in addition to DVI
+    , extraFiles ? []
+    , compressBlanksInIndex ? true
+    , packages ? []
+    , texPackages ? {}
+    , copySources ? false
+    }:
+
+    assert generatePDF -> !generatePS;
+
+    let
+      tex = pkgs.texlive.combine
+        # always include basic stuff you need for LaTeX
+        ({inherit (pkgs.texlive) scheme-basic;} // texPackages);
+    in
+
+    pkgs.stdenv.mkDerivation {
+      name = "doc";
+
+      builder = ./run-latex.sh;
+      copyIncludes = ./copy-includes.pl;
+
+      inherit rootFile generatePDF generatePS extraFiles
+        compressBlanksInIndex copySources;
+
+      includes = map (x: [x.key (baseNameOf (toString x.key))])
+        (findLaTeXIncludes {inherit rootFile;});
+
+      buildInputs = [ tex pkgs.perl ] ++ packages;
+    };
+
+
+  # Returns the closure of the "dependencies" of a LaTeX source file.
+  # Dependencies are other LaTeX source files (e.g. included using
+  # \input{}), images (e.g. \includegraphics{}), bibliographies, and
+  # so on.
+  findLaTeXIncludes =
+    { rootFile
+    }:
+
+    builtins.genericClosure {
+      startSet = [{key = rootFile;}];
+
+      operator =
+        {key, ...}:
+
+        let
+
+          # `find-includes.pl' returns the dependencies of the current
+          # source file (`key') as a list, e.g. [{type = "tex"; name =
+          # "introduction.tex";} {type = "img"; name = "example"}].
+          # The type denotes the kind of dependency, which determines
+          # what extensions we use to look for it.
+          deps = import (pkgs.runCommand "latex-includes"
+            { rootFile = baseNameOf (toString rootFile); src = key; }
+            "${pkgs.perl}/bin/perl ${./find-includes.pl}");
+
+          # Look for the dependencies of `key', trying various
+          # extensions determined by the type of each dependency.
+          # TODO: support a search path.
+          foundDeps = dep: xs:
+            let
+              exts =
+                if dep.type == "img" then [".pdf" ".png" ".ps" ".jpg"]
+                else if dep.type == "tex" then [".tex" ""]
+                else [""];
+              fn = pkgs.lib.findFirst (fn: builtins.pathExists fn) null
+                (map (ext: dirOf key + ("/" + dep.name + ext)) exts);
+            in if fn != null then [{key = fn;}] ++ xs
+               else xs;
+
+        in pkgs.lib.fold foundDeps [] deps;
+    };
+
+
+  findLhs2TeXIncludes =
+    { rootFile
+    }:
+
+    builtins.genericClosure {
+      startSet = [{key = rootFile;}];
+
+      operator =
+        {key, ...}:
+
+        let
+
+          deps = import (pkgs.runCommand "lhs2tex-includes"
+            { src = key; }
+            "${pkgs.stdenv.bash}/bin/bash ${./find-lhs2tex-includes.sh}");
+
+        in pkgs.lib.concatMap (x: if builtins.pathExists x then [{key = x;}] else [])
+                              (map (x: dirOf key + ("/" + x)) deps);
+    };
+
+  dot2pdf =
+    { dotGraph
+    }:
+
+    pkgs.stdenv.mkDerivation {
+      name = "pdf";
+      builder = ./dot2pdf.sh;
+      inherit dotGraph fontsConf;
+      buildInputs = [
+        pkgs.perl pkgs.graphviz
+      ];
+    };
+
+
+  dot2ps =
+    { dotGraph
+    }:
+
+    pkgs.stdenv.mkDerivation {
+      name = "ps";
+      builder = ./dot2ps.sh;
+      inherit dotGraph;
+      buildInputs = [
+        pkgs.perl pkgs.graphviz pkgs.ghostscript
+      ];
+    };
+
+  lhs2tex =
+    { source, flags ? null } :
+    pkgs.stdenv.mkDerivation {
+      name = "tex";
+      builder = ./lhs2tex.sh;
+      inherit source flags;
+      buildInputs = [ pkgs.lhs2tex pkgs.perl ];
+      copyIncludes = ./copy-includes.pl;
+      includes = map (x: [x.key (baseNameOf (toString x.key))])
+        (findLhs2TeXIncludes {rootFile = source;});
+    };
+
+  animateDot = dotGraph: nrFrames: pkgs.stdenv.mkDerivation {
+    name = "dot-frames";
+    builder = ./animatedot.sh;
+    inherit dotGraph nrFrames;
+  };
+
+
+  # Wrap a piece of TeX code in a document.  Useful when generating
+  # inline images from TeX code.
+  wrapSimpleTeX =
+    { preamble ? null
+    , body
+    , name ? baseNameOf (toString body)
+    }:
+
+    pkgs.stdenv.mkDerivation {
+      inherit name preamble body;
+      buildCommand = ''
+        touch $out
+        echo '\documentclass{article}' >> $out
+        echo '\pagestyle{empty}' >> $out
+        if test -n "$preamble"; then cat $preamble >> $out; fi
+        echo '\begin{document}' >> $out
+        cat $body >> $out
+        echo '\end{document}' >> $out
+      '';
+    };
+
+
+  # Convert a Postscript file to a PNG image, trimming it so that
+  # there is no unnecessary surrounding whitespace.
+  postscriptToPNG =
+    { postscript
+    }:
+
+    pkgs.stdenv.mkDerivation {
+      name = "png";
+      inherit postscript;
+
+      buildInputs = [pkgs.imagemagick pkgs.ghostscript];
+
+      buildCommand = ''
+        if test -d $postscript; then
+          input=$(ls $postscript/*.ps)
+        else
+          input=$(stripHash $postscript)
+          ln -s $postscript $input
+        fi
+
+        mkdir -p $out
+        convert -units PixelsPerInch \
+          -density 600 \
+          -trim \
+          -matte \
+          -transparent '#ffffff' \
+          -type PaletteMatte \
+          +repage \
+          $input \
+          "$out/$(basename $input .ps).png"
+      ''; # */
+    };
+
+
+  # Convert a piece of TeX code to a PNG image.
+  simpleTeXToPNG =
+    { preamble ? null
+    , body
+    , packages ? []
+    }:
+
+    postscriptToPNG {
+      postscript = runLaTeX {
+        rootFile = wrapSimpleTeX {
+          inherit body preamble;
+        };
+        inherit packages;
+        generatePDF = false;
+        generatePS = true;
+      };
+    };
+
+
+  # Convert a piece of TeX code to a PDF.
+  simpleTeXToPDF =
+    { preamble ? null
+    , body
+    , packages ? []
+    }:
+
+    runLaTeX {
+      rootFile = wrapSimpleTeX {
+        inherit body preamble;
+      };
+      inherit packages;
+    };
+
+
+  # Some tools (like dot) need a fontconfig configuration file.
+  # This should be extended to allow the called to add additional
+  # fonts.
+  fontsConf = pkgs.makeFontsConf {
+    fontDirectories = [
+      "${pkgs.ghostscript}/share/ghostscript/fonts"
+    ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/nix/dot2pdf.sh b/nixpkgs/pkgs/tools/typesetting/tex/nix/dot2pdf.sh
new file mode 100644
index 000000000000..71cf601dfac0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/nix/dot2pdf.sh
@@ -0,0 +1,20 @@
+source $stdenv/setup
+
+mkdir -p $out
+
+dot2pdf() {
+    sourceFile=$1
+    targetName=$out/$(basename $(stripHash $sourceFile) .dot).pdf
+    echo "converting $sourceFile to $targetName..."
+    export FONTCONFIG_FILE=$fontsConf
+    dot -Tpdf $sourceFile > $targetName
+}
+
+for i in $dotGraph; do
+    if test -d $i; then
+        for j in $i/*; do dot2pdf $j; done
+    else
+        dot2pdf $i
+    fi
+done
+
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/nix/dot2ps.sh b/nixpkgs/pkgs/tools/typesetting/tex/nix/dot2ps.sh
new file mode 100644
index 000000000000..dd8de4a23dbc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/nix/dot2ps.sh
@@ -0,0 +1,19 @@
+source $stdenv/setup
+
+mkdir -p $out
+
+dot2ps() {
+    sourceFile=$1
+    targetName=$out/$(basename $(stripHash $sourceFile) .dot).ps
+    echo "converting $sourceFile to $targetName..."
+    dot -Tps $sourceFile > $targetName
+}
+
+for i in $dotGraph; do
+    if test -d $i; then
+        for j in $i/*; do dot2ps $j; done
+    else
+        dot2ps $i
+    fi
+done
+
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/nix/find-includes.pl b/nixpkgs/pkgs/tools/typesetting/tex/nix/find-includes.pl
new file mode 100644
index 000000000000..41675e939f60
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/nix/find-includes.pl
@@ -0,0 +1,69 @@
+use strict;
+use File::Basename;
+
+my $src = $ENV{"src"};
+my $out = $ENV{"out"};
+my $path = $ENV{"searchRelativeTo"};
+
+open OUT, ">$out" or die;
+print OUT "[\n";
+
+open FILE, "< $src" or die;
+
+sub addName {
+    my ($type, $name) = @_;
+    print OUT "{ type = \"$type\"; name = \"$name\"; }\n";
+}
+    
+while (<FILE>) {
+    if (/\\input\{(.*)\}/) {
+        my $fn2 = $1;
+        die "absolute path! $fn2" if substr($fn2, 0, 1) eq "/";
+        addName "tex", "$fn2";
+    } elsif (/\\input (.*)$/) {
+        my $fn2 = $1;
+        die "absolute path! $fn2" if substr($fn2, 0, 1) eq "/";
+        addName "tex", "$fn2";
+    } elsif (/\\RequirePackage(\[.*\])?\{(.*)\}/) {
+        my $fn2 = $2;
+        die "absolute path! $fn2" if substr($fn2, 0, 1) eq "/";
+        addName "misc", "$fn2.sty";
+    } elsif (/\\usepackage(\[.*\])?\{(.*)\}/) {
+        my $fn2 = $2;
+        die "absolute path! $fn2" if substr($fn2, 0, 1) eq "/";
+        addName "misc", "$fn2.sty";
+    } elsif (/\\documentclass(\[.*\])?\{(.*)\}/) {
+        my $fn2 = $2;
+        die "absolute path! $fn2" if substr($fn2, 0, 1) eq "/";
+        addName "misc", "$fn2.cls";
+    } elsif (/\\bibliographystyle\{(.*)\}/) {
+        my $fn2 = $1;
+        die "absolute path! $fn2" if substr($fn2, 0, 1) eq "/";
+        addName "misc", "$fn2.bst";
+    } elsif (/\\bibliography\{(.*)\}/) {
+        foreach my $bib (split /,/, $1) {
+            $bib =~ s/^\s+//; # remove leading / trailing whitespace
+            $bib =~ s/\s+$//;
+            addName "misc", "$bib.bib";
+            addName "misc", (basename($ENV{"rootFile"}, ".tex", ".ltx") . ".bbl");
+        }
+    } elsif (/\\includegraphics(\[.*\])?\{(.*)\}/) {
+        my $fn2 = $2;
+        die "absolute path! $fn2" if substr($fn2, 0, 1) eq "/";
+        addName "img", "$fn2";
+    } elsif (/\\pgfdeclareimage(\[.*\])?\{.*\}\{(.*)\}/) {
+        my $fn2 = $2;
+        die "absolute path! $fn2" if substr($fn2, 0, 1) eq "/";
+        addName "img", "$fn2";
+    } elsif (/\\pgfimage(\[.*\])?\{(.*)\}/) {
+        my $fn2 = $2;
+        die "absolute path! $fn2" if substr($fn2, 0, 1) eq "/";
+        addName "img", "$fn2";
+    }
+    # !!! also support \usepackage
+}
+
+close FILE;
+
+print OUT "]\n";
+close OUT;
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/nix/find-lhs2tex-includes.sh b/nixpkgs/pkgs/tools/typesetting/tex/nix/find-lhs2tex-includes.sh
new file mode 100644
index 000000000000..2dc12aa517a7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/nix/find-lhs2tex-includes.sh
@@ -0,0 +1,3 @@
+echo '[' > $out
+grep '^%include ' $src | cut -d ' ' -f 2 | sed 's/^\(.*\)$/"\1"/' >> $out
+echo ']' >> $out
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/nix/lhs2tex.sh b/nixpkgs/pkgs/tools/typesetting/tex/nix/lhs2tex.sh
new file mode 100644
index 000000000000..bfef3df6b0e1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/nix/lhs2tex.sh
@@ -0,0 +1,19 @@
+source $stdenv/setup
+
+mkdir -p $out
+
+mkdir root
+cd root
+
+startDir=$(perl $copyIncludes $includes)
+cd $startDir
+
+lhstex() {
+    sourceFile=$1
+    targetName=$out/$(basename $(stripHash $sourceFile) .lhs).tex
+    echo "converting $sourceFile to $targetName..."
+    lhs2TeX -o "$targetName" $flags "$sourceFile"
+}
+
+lhstex $source
+
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/nix/run-latex.sh b/nixpkgs/pkgs/tools/typesetting/tex/nix/run-latex.sh
new file mode 100644
index 000000000000..3941fdcac4a4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/nix/run-latex.sh
@@ -0,0 +1,166 @@
+source $stdenv/setup
+
+mkdir -p $out
+
+export VARTEXFONTS=$TMPDIR/texfonts
+export TEXMFCNF=$TMPDIR:
+echo 'max_print_line = 8192' >> $TMPDIR/texmf.cnf
+
+mkdir root
+cd root
+
+startDir=$(perl $copyIncludes $includes)
+cd $startDir
+
+for i in $extraFiles; do
+    if test -d $i; then
+        ln -s $i/* .
+    else
+        ln -s $i $(stripHash $i)
+    fi
+done
+
+rootName=$(basename $(stripHash "$rootFile"))
+
+rootNameBase=$(echo "$rootName" | sed 's/\..*//')
+
+if test -n "$generatePDF"; then
+    latex=pdflatex
+else
+    latex=latex
+fi
+
+latexFlags="-file-line-error"
+tmpFile=$out/log
+
+showError() {
+    echo
+    echo "LATEX ERROR (LAST LOG LINES SHOWN):"
+    tail -n 20 $tmpFile
+    bzip2 $tmpFile
+    exit 1
+}
+
+runLaTeX() {
+    if ! $latex $latexFlags $rootName >$tmpFile 2>&1; then showError; fi
+    runNeeded=
+    if fgrep -q \
+        -e "LaTeX Warning: Label(s) may have changed." \
+        -e "Rerun to get citations correct." \
+        "$tmpFile"; then
+        runNeeded=1
+    fi
+}
+
+echo
+
+
+if test -n "$copySources"; then
+    cp -prd $TMPDIR/root $out/tex-srcs
+fi
+
+
+echo "PASS 1..."
+runLaTeX
+echo
+
+
+for auxFile in $(find . -name "*.aux"); do
+    # Run bibtex to process all bibliographies.  There may be several
+    # when we're using the multibib package.
+    if grep -q '\\citation' $auxFile; then
+        auxBase=$(basename $auxFile .aux)
+        if [ -e $auxBase.bbl ]; then
+            echo "SKIPPING BIBTEX ON $auxFile!"
+        else
+            echo "RUNNING BIBTEX ON $auxFile..."
+            bibtex --terse $auxBase
+            cp $auxBase.bbl $out
+            runNeeded=1
+        fi
+        echo
+    fi
+
+    # "\pgfsyspdfmark" in the aux file seems to indicate that PGF/TikZ
+    # requires a second run (e.g. to resolve arrows between pictures).
+    if grep -q pgfsyspdfmark $auxFile; then
+        runNeeded=1
+    fi
+done
+
+
+if test "$runNeeded"; then
+    echo "PASS 2..."
+    runLaTeX
+    echo
+fi
+
+
+if test -f $rootNameBase.idx; then
+    echo "MAKING INDEX..."
+    if test -n "$compressBlanksInIndex"; then
+        makeindexFlags="$makeindexFlags -c"
+    fi
+    makeindex $makeindexFlags $rootNameBase.idx
+    runNeeded=1
+    echo
+fi    
+
+
+if test "$runNeeded"; then
+    echo "PASS 3..."
+    runLaTeX
+    echo
+fi
+
+
+if test "$runNeeded"; then
+    echo "PASS 4..."
+    runLaTeX
+    echo
+fi
+
+
+if test "$runNeeded"; then
+    echo "Hm, still not done :-("
+    echo
+fi
+
+
+if test -n "$generatePDF"; then
+    cp $rootNameBase.pdf $out
+else
+    cp $rootNameBase.dvi $out
+    if test -n "$generatePS"; then
+        echo "CONVERTING TO POSTSCRIPT..."
+        dvips $rootNameBase.dvi -o $out/$rootNameBase.ps
+        echo
+    fi
+fi
+
+
+echo "WARNINGS:"
+cat $tmpFile | grep "Warning:" | grep -v "Citation.*undefined" || true
+
+echo
+echo "OVERFULL/UNDERFULL:"
+cat $tmpFile | egrep "Overfull|Underfull" || true
+
+echo
+echo "UNDEFINED REFERENCES:"
+cat $tmpFile | grep "Reference.*undefined" || true
+
+echo
+echo "UNDEFINED CITATIONS:"
+cat $tmpFile | grep "Citation.*undefined" || true
+
+echo
+echo "STATS:"
+printf "%5d overfull/underfull h/vboxes\n" $(cat $tmpFile | egrep -c "Overfull|Underfull" || true)
+printf "%5d undefined references\n" $(cat $tmpFile | grep -c "Reference.*undefined" || true)
+printf "%5d undefined citations\n" $(cat $tmpFile | grep -c "Citation.*undefined" || true)
+printf "%5d pages\n" \
+    $(cat $tmpFile | grep "Output written.*(.*pages" | sed "s/.*(\([0-9]*\) pages.*/\1/" || true)
+echo
+
+bzip2 $tmpFile
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/pgf/1.x.nix b/nixpkgs/pkgs/tools/typesetting/tex/pgf/1.x.nix
new file mode 100644
index 000000000000..9215a1e0ac48
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/pgf/1.x.nix
@@ -0,0 +1,23 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation {
+  name = "pgf-1.18";
+
+  src = fetchurl {
+    url = mirror://sourceforge/pgf/pgf-1.18.tar.gz;
+    sha256 = "0s6b8rx9yfxcjjg18vx1mphnwbd28fl5lnq0dasjz40pp3ypwdjv";
+  };
+
+  dontBuild = true;
+
+  installPhase = "
+    mkdir -p $out/share/texmf-nix
+    cp -prd * $out/share/texmf-nix
+  ";
+
+  meta = with stdenv.lib; {
+    branch = "1";
+    platforms = platforms.unix;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/pgf/2.x.nix b/nixpkgs/pkgs/tools/typesetting/tex/pgf/2.x.nix
new file mode 100644
index 000000000000..56e50e444081
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/pgf/2.x.nix
@@ -0,0 +1,23 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation {
+  name = "pgf-2.00";
+
+  src = fetchurl {
+    url = mirror://sourceforge/pgf/pgf-2.00.tar.gz;
+    sha256 = "0j57niag4jb2k0iyrvjsannxljc3vkx0iag7zd35ilhiy4dh6264";
+  };
+
+  dontBuild = true;
+
+  installPhase = "
+    mkdir -p $out/share/texmf-nix
+    cp -prd * $out/share/texmf-nix
+  ";
+
+  meta = with stdenv.lib; {
+    branch = "2";
+    platforms = platforms.unix;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/pgf/3.x.nix b/nixpkgs/pkgs/tools/typesetting/tex/pgf/3.x.nix
new file mode 100644
index 000000000000..0835c7c547df
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/pgf/3.x.nix
@@ -0,0 +1,32 @@
+{stdenv, fetchurl, unzip}:
+
+stdenv.mkDerivation {
+  name = "pgf-3.00";
+
+  src = fetchurl {
+    url = mirror://sourceforge/project/pgf/pgf/version%203.0.0/pgf_3.0.0.tds.zip;
+    sha256 = "0kj769hyp4z2zmdv3f8xv443wcfqn5nkkbzxzqgfxjizlz81aav7";
+  };
+
+  buildInputs = [ unzip ];
+
+  # Multiple files problem
+  unpackPhase = ''
+    mkdir pgf
+    cd pgf
+    unzip $src
+  '';
+
+  dontBuild = true;
+
+  installPhase = "
+    mkdir -p $out/share/texmf-nix
+    cp -prd * $out/share/texmf-nix
+  ";
+
+  meta = with stdenv.lib; {
+    branch = "3";
+    platforms = platforms.unix;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/pgfplots/default.nix b/nixpkgs/pkgs/tools/typesetting/tex/pgfplots/default.nix
new file mode 100644
index 000000000000..fcdebedb7d87
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/pgfplots/default.nix
@@ -0,0 +1,28 @@
+{stdenv, fetchurl, unzip}:
+
+stdenv.mkDerivation {
+  name = "pgfplots-1.5.1";
+
+  src = fetchurl {
+    url = mirror://sourceforge/pgfplots/pgfplots_1.5.1.tds.zip;
+    sha256 = "1xajrmq35i0qlsfwydy5zzg6f1jg88hqqh5b3xsmglzrarnllbdi";
+  };
+
+  buildInputs = [ unzip ];
+
+  unpackPhase = "unzip $src";
+
+  dontBuild = true;
+
+  installPhase = "
+    mkdir -p $out/share/texmf-nix
+    cp -prd * $out/share/texmf-nix
+  ";
+
+  meta = with stdenv.lib; {
+    description = "TeX package to draw plots directly in TeX in two and three dimensions";
+    homepage = http://pgfplots.sourceforge.net;
+    platforms = platforms.unix;
+    license = licenses.gpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/pplatex/default.nix b/nixpkgs/pkgs/tools/typesetting/tex/pplatex/default.nix
new file mode 100644
index 000000000000..01777f3dd428
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/pplatex/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, cmake, pkgconfig, pcre }:
+
+stdenv.mkDerivation {
+  pname = "pplatex";
+  version = "unstable-2015-09-14";
+
+  src = fetchFromGitHub {
+    owner = "stefanhepp";
+    repo = "pplatex";
+    rev = "5cec891ad6aec0115081cdd114ae1cc4f1ed7c06";
+    sha256 = "0wrkkbz6b6x91650nm8gccz7xghlp7b1i31fxwalz9xw3py9xygb";
+  };
+
+  nativeBuildInputs = [ cmake pkgconfig ];
+
+  buildInputs = [ pcre ];
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm555 src/pplatex "$out"/bin/pplatex
+    runHook postInstall
+  '';
+
+  meta = with stdenv.lib; {
+    description =
+      "A tool to reformat the output of latex and friends into readable messages";
+    homepage = "https://github.com/stefanhepp/pplatex";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.srgom ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/tetex/clang.patch b/nixpkgs/pkgs/tools/typesetting/tex/tetex/clang.patch
new file mode 100644
index 000000000000..50d83f624437
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/tetex/clang.patch
@@ -0,0 +1,13 @@
+diff --git a/texk/ps2pkm/type1.c b/texk/ps2pkm/type1.c
+index 027bf1f..4dcbad0 100644
+--- a/texk/ps2pkm/type1.c
++++ b/texk/ps2pkm/type1.c
+@@ -800,7 +800,7 @@ static void PSFakePush(Num)
+ static DOUBLE PSFakePop ()
+ {
+   if (PSFakeTop >= 0) return(PSFakeStack[PSFakeTop--]);
+-  else Error0("PSFakePop : Stack empty\n");
++  else { CC; IfTrace0(TRUE, "PSFakePop : Stack empty\n"); errflag = TRUE; return 0; }
+   /*NOTREACHED*/
+ }
+  
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/tetex/default.nix b/nixpkgs/pkgs/tools/typesetting/tex/tetex/default.nix
new file mode 100644
index 000000000000..ac317fd51dcb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/tetex/default.nix
@@ -0,0 +1,56 @@
+{ stdenv, fetchurl, flex, bison, zlib, libpng, ncurses, ed, automake }:
+
+stdenv.mkDerivation {
+  name = "tetex-3.0";
+
+  src = fetchurl {
+    url = http://mirrors.ctan.org/obsolete/systems/unix/teTeX/3.0/distrib/tetex-src-3.0.tar.gz;
+    sha256 = "16v44465ipd9yyqri9rgxp6rbgs194k4sh1kckvccvdsnnp7w3ww";
+  };
+
+  texmf = fetchurl {
+    url = http://mirrors.ctan.org/obsolete/systems/unix/teTeX/3.0/distrib/tetex-texmf-3.0.tar.gz;
+    sha256 = "1hj06qvm02a2hx1a67igp45kxlbkczjlg20gr8lbp73l36k8yfvc";
+  };
+
+  buildInputs = [ flex bison zlib libpng ncurses ed ];
+
+  hardeningDisable = [ "format" ];
+
+  # fixes "error: conflicting types for 'calloc'", etc.
+  preBuild = stdenv.lib.optionalString stdenv.isDarwin ''
+    sed -i 57d texk/kpathsea/c-std.h
+  '';
+
+  preConfigure = if stdenv.isCygwin then ''
+    find ./ -name "config.guess" -exec rm {} \; -exec ln -s ${automake}/share/automake-*/config.guess {} \;
+  '' else null;
+
+  patches = [ ./environment.patch ./getline.patch ./clang.patch ./extramembot.patch ];
+
+  setupHook = ./setup-hook.sh;
+
+  configureFlags =
+    [ "--disable-multiplatform" "--without-x11" "--without-xdvik"
+      "--without-oxdvik" "--without-texinfo" "--without-texi2html"
+      "--with-system-zlib" "--with-system-pnglib" "--with-system-ncurses" ]
+    # couldn't get gsftopk working on darwin
+    ++ stdenv.lib.optional stdenv.isDarwin "--without-gsftopk";
+
+  postUnpack = ''
+    mkdir -p $out/share/texmf
+    mkdir -p $out/share/texmf-dist
+    gunzip < $texmf | (cd $out/share/texmf-dist && tar xvf -)
+
+    substituteInPlace ./tetex-src-3.0/configure --replace /usr/bin/install $(type -P install)
+  '';
+
+  meta = with stdenv.lib; {
+    description  = "A full-featured (La)TeX distribution";
+    homepage     = http://www.tug.org/tetex/;
+    maintainers  = with maintainers; [ lovek323 ];
+    platforms    = platforms.unix;
+    hydraPlatforms = [];
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/tetex/environment.patch b/nixpkgs/pkgs/tools/typesetting/tex/tetex/environment.patch
new file mode 100644
index 000000000000..6e652849b773
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/tetex/environment.patch
@@ -0,0 +1,35 @@
+diff -rc --exclude=texmf.in tetex-src-3.0.orig/texk/kpathsea/texmf.in-teTeX tetex-src-3.0/texk/kpathsea/texmf.in-teTeX
+*** tetex-src-3.0.orig/texk/kpathsea/texmf.in-teTeX	2006-01-27 17:33:11.000000000 +0100
+--- tetex-src-3.0/texk/kpathsea/texmf.in-teTeX	2006-01-27 17:38:35.000000000 +0100
+***************
+*** 104,109 ****
+--- 104,115 ----
+  %   TEXMFCONFIG = @texmf@-config
+  TEXMFCONFIG = $HOME/.texmf-config
+  
++ % TEXMFNIX is supposed to be unset. It's used by the Nix
++ % system to add trees during the build of nix-expressions.
++ 
++ % TEXMFNIXHOME, for packages in the user environment.
++ TEXMFNIXHOME = $HOME/.nix-profile/share/texmf-nix
++ 
+  % Now, list all the texmf trees. If you have multiple trees you can
+  % use shell brace notation, like this:
+  %   TEXMF = {$TEXMFHOME,!!$TEXMFLOCAL,!!$TEXMFMAIN}
+***************
+*** 111,117 ****
+  %
+  % For texconfig to work properly, TEXMFCONGIG and TEXMFVAR should be named
+  % explicitly and before all other trees.
+! TEXMF = {!!$TEXMFCONFIG,!!$TEXMFVAR,$TEXMFHOME,!!$TEXMFSYSCONFIG,!!$TEXMFSYSVAR,!!$TEXMFMAIN,!!$TEXMFLOCAL,!!$TEXMFDIST}
+  
+  % The system trees.  These are the trees that are shared by all the users.
+  SYSTEXMF = $TEXMFLOCAL;$TEXMFMAIN;$TEXMFDIST
+--- 117,123 ----
+  %
+  % For texconfig to work properly, TEXMFCONGIG and TEXMFVAR should be named
+  % explicitly and before all other trees.
+! TEXMF = {!!$TEXMFCONFIG,!!$TEXMFVAR,$TEXMFNIX,$TEXMFHOME,$TEXMFNIXHOME,!!$TEXMFSYSCONFIG,!!$TEXMFSYSVAR,!!$TEXMFMAIN,!!$TEXMFLOCAL,!!$TEXMFDIST}
+  
+  % The system trees.  These are the trees that are shared by all the users.
+  SYSTEXMF = $TEXMFLOCAL;$TEXMFMAIN;$TEXMFDIST
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/tetex/extramembot.patch b/nixpkgs/pkgs/tools/typesetting/tex/tetex/extramembot.patch
new file mode 100644
index 000000000000..f6c954fcfa5c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/tetex/extramembot.patch
@@ -0,0 +1,12 @@
+diff -up texlive-2007/texk/web2c/tex.ch.extramembot texlive-2007/texk/web2c/tex.ch
+--- texlive-2007/texk/web2c/tex.ch.extramembot	2006-12-19 02:11:11.000000000 +0100
++++ texlive-2007/texk/web2c/tex.ch	2011-11-30 12:03:32.052795763 +0100
+@@ -365,7 +365,7 @@ for i:=@'177 to @'377 do xchr[i]:=i;
+ {Initialize enc\TeX\ data.}
+ for i:=0 to 255 do mubyte_read[i]:=null;
+ for i:=0 to 255 do mubyte_write[i]:=0;
+-for i:=0 to 128 do mubyte_cswrite[i]:=null;
++for i:=0 to 127 do mubyte_cswrite[i]:=null;
+ mubyte_keep := 0; mubyte_start := false; 
+ write_noexpanding := false; cs_converting := false;
+ special_printing := false; message_printing := false;
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/tetex/getline.patch b/nixpkgs/pkgs/tools/typesetting/tex/tetex/getline.patch
new file mode 100644
index 000000000000..c82c1b3ac360
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/tetex/getline.patch
@@ -0,0 +1,96 @@
+Glibc 2.10 has a `getline' symbol that clashes with teTeX's.
+Taken from http://lists.ibiblio.org/pipermail/sm-commit/2009-July/024831.html
+
+diff -rc -x '*~' tetex-src-3.0-orig/texk/dvipsk/afm2tfm.c tetex-src-3.0/texk/dvipsk/afm2tfm.c
+*** tetex-src-3.0-orig/texk/dvipsk/afm2tfm.c	2005-01-30 14:17:09.000000000 +0100
+--- tetex-src-3.0/texk/dvipsk/afm2tfm.c	2010-02-03 13:50:21.000000000 +0100
+***************
+*** 257,263 ****
+  }
+  
+  int
+! getline P1H(void) {
+     register char *p ;
+     register int c ;
+  
+--- 257,263 ----
+  }
+  
+  int
+! tetex_getline P1H(void) {
+     register char *p ;
+     register int c ;
+  
+***************
+*** 606,612 ****
+     ai = newchar() ;
+     ai->adobenum = -1 ;
+     ai->adobename = "||" ; /* boundary character name */
+!    while (getline()) {
+        switch(interest(paramstring())) {
+  case FontName:
+           fontname = paramnewstring() ;
+--- 606,612 ----
+     ai = newchar() ;
+     ai->adobenum = -1 ;
+     ai->adobename = "||" ; /* boundary character name */
+!    while (tetex_getline()) {
+        switch(interest(paramstring())) {
+  case FontName:
+           fontname = paramnewstring() ;
+***************
+*** 1882,1888 ****
+  
+     while (1) {
+        while (param == 0 || *param == 0) {
+!          if (getline() == 0)
+              error("! premature end in encoding file") ;
+           for (p=buffer; *p; p++)
+              if (*p == '%') {
+--- 1882,1888 ----
+  
+     while (1) {
+        while (param == 0 || *param == 0) {
+!          if (tetex_getline() == 0)
+              error("! premature end in encoding file") ;
+           for (p=buffer; *p; p++)
+              if (*p == '%') {
+***************
+*** 1973,1979 ****
+        p = gettoken() ;
+        if (strcmp(p, "]"))
+           error("! token 258 in encoding must be make-array (])") ;
+!       while (getline()) {
+           for (p=buffer; *p; p++)
+              if (*p == '%') {
+                 if (ignoreligkern == 0)
+--- 1973,1979 ----
+        p = gettoken() ;
+        if (strcmp(p, "]"))
+           error("! token 258 in encoding must be make-array (])") ;
+!       while (tetex_getline()) {
+           for (p=buffer; *p; p++)
+              if (*p == '%') {
+                 if (ignoreligkern == 0)
+diff -rc -x '*~' tetex-src-3.0-orig/texk/web2c/cpascal.h tetex-src-3.0/texk/web2c/cpascal.h
+*** tetex-src-3.0-orig/texk/web2c/cpascal.h	2004-08-28 22:49:59.000000000 +0200
+--- tetex-src-3.0/texk/web2c/cpascal.h	2010-02-03 13:51:04.000000000 +0100
+***************
+*** 240,245 ****
+--- 240,255 ----
+  #undef getname
+  #define getname vms_getname
+  #endif
++ 
++ /* Apparently POSIX 2008 has getline and glibc 2.9.90 exports it.
++  *    tangle, weave, et al. use that symbol; try to define it away so
++  *       something that a standard won't usurp.
++  * From http://tutimura.ath.cx/ptetex/?%C6%B0%BA%EE%CA%F3%B9%F0%2F134 */
++ #ifdef getline
++ #undef getline
++ #endif
++ #define getline web2c_getline
++ 
+  
+  /* Declarations for the routines we provide ourselves in lib/.  */
+  
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/tetex/setup-hook.sh b/nixpkgs/pkgs/tools/typesetting/tex/tetex/setup-hook.sh
new file mode 100644
index 000000000000..5faef7fe5df5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/tetex/setup-hook.sh
@@ -0,0 +1,7 @@
+addTeXMFPath () {
+    if test -d "$1/share/texmf-nix"; then
+        export TEXINPUTS="${TEXINPUTS}${TEXINPUTS:+:}$1/share/texmf-nix//:"
+    fi
+}
+
+addEnvHooks "$targetOffset" addTeXMFPath
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/texlive/UPGRADING.md b/nixpkgs/pkgs/tools/typesetting/tex/texlive/UPGRADING.md
new file mode 100644
index 000000000000..3f37184e5d3f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/texlive/UPGRADING.md
@@ -0,0 +1,69 @@
+# Notes on maintaining/upgrading
+
+## Upgrading texlive.bin
+
+texlive contains a few binaries, defined in bin.nix and released once a year.
+
+In order to reduce closure size for users who just need a few of them, we split it into
+packages such as core, core-big, xvdi, etc. This requires making assumptions
+about dependencies between the projects that may change between releases; if
+you upgrade you may have to do some work here.
+
+
+## Updating the package set
+
+texlive contains several thousand packages from CTAN, defined in pkgs.nix.
+
+The CTAN mirrors are not version-controlled and continuously moving,
+with more than 100 updates per month.
+
+To create a consistent and reproducible package set in nixpkgs, we snapshot CTAN
+and generate nix expressions for all packages in texlive at that point.
+
+We mirror CTAN sources of this snapshot on community-operated servers and on IPFS.
+
+To upgrade the package snapshot, follow this process:
+
+
+### Snapshot sources and texlive package database
+
+Mirror the current CTAN archive to our mirror(s) and IPFS (URLs in `default.nix`).
+See https://tug.org/texlive/acquire-mirror.html for instructions.
+
+
+### Upgrade package information from texlive package database
+
+
+```bash
+curl -L http://mirror.ctan.org/tex-archive/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz \
+         | xzcat | uniq -u | sed -rn -f ./tl2nix.sed > ./pkgs.nix
+```
+
+This will download a current snapshot of the CTAN package database `texlive.tlpdb.xz`
+and regenerate all of the sha512 hashes for the current upstream distribution in `pkgs.nix`.
+
+
+### Build packages locally and generate fix hashes
+
+To save disk space and prevent unnecessary rebuilds, texlive packages are built
+as fixed-output derivations whose hashes are contained in `fixedHashes.nix`.
+
+Updating the list of fixed hashes requires a local build of *all* packages,
+which is a resource-intensive process:
+
+
+```bash
+# move fixedHashes away, otherwise build will fail on updated packages
+mv fixedHashes.nix fixedHashes-old.nix
+# start with empty fixedHashes
+echo '{}' > fixedHashes.nix
+
+nix-build ../../../../.. -Q --no-out-link -A texlive.scheme-full.pkgs | ./fixHashes.sh > ./fixedHashes-new.nix
+
+# The script wrongly includes the nix store path to `biber`, which is a separate nixpkgs package
+grep -v -F '/nix/store/' fixedHashes-new.nix > fixedHashes.nix
+```
+
+### Commit changes
+
+Commit the updated `pkgs.nix` and `fixedHashes.nix` to the repository.
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/texlive/bin.nix b/nixpkgs/pkgs/tools/typesetting/tex/texlive/bin.nix
new file mode 100644
index 000000000000..9eaa81e144b6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/texlive/bin.nix
@@ -0,0 +1,482 @@
+{ stdenv, fetchurl, fetchpatch, patchutils
+, texlive
+, zlib, libiconv, libpng, libX11
+, freetype, gd, libXaw, icu, ghostscript, libXpm, libXmu, libXext
+, perl, perlPackages, python2Packages, pkgconfig, autoreconfHook
+, poppler, libpaper, graphite2, zziplib, harfbuzz, potrace, gmp, mpfr
+, cairo, pixman, xorg, clisp, biber, xxHash
+, makeWrapper, shortenPerlShebang
+}:
+
+# Useful resource covering build options:
+# http://tug.org/texlive/doc/tlbuild.html
+
+let
+  withSystemLibs = map (libname: "--with-system-${libname}");
+
+  year = "2019";
+  version = year; # keep names simple for now
+
+  common = {
+    src = fetchurl {
+      urls = [
+        "http://ftp.math.utah.edu/pub/tex/historic/systems/texlive/${year}/texlive-${year}0410-source.tar.xz"
+              "ftp://tug.ctan.org/pub/tex/historic/systems/texlive/${year}/texlive-${year}0410-source.tar.xz"
+      ];
+      sha256 = "1dfps39q6bdr1zsbp9p74mvalmy3bycihv19sb9c6kg30kprz8nj";
+    };
+
+    patches = [
+    ];
+
+    postPatch = let
+      # The source compatible with Poppler ${popplerVersion} not yet available in TeXLive ${year}
+      # so we need to use files introduced in https://www.tug.org/svn/texlive?view=revision&revision=52959
+      popplerVersion = "0.83.0";
+      pdftoepdf = let
+        revert-pdfmajorversion = fetchpatch {
+          name = "pdftoepdf-revert-pdfmajorversion.patch";
+          url = "https://www.tug.org/svn/texlive/trunk/Build/source/texk/web2c/pdftexdir/pdftoepdf.cc?view=patch&r1=52953&r2=52952&pathrev=52953";
+          sha256 = "19jiv5xbvnfdk8lj6yd6mdxgs8f313a4dwg8svjj90dd35kjcfh8";
+          revert = true;
+          postFetch = ''
+            # The default file, changed by this patch, contains a branch for vendored Poppler
+            # The version-specific file replaces the section with an error, so we need to drop that part from the patch.
+            # Fortunately, there is not anything else in the patch after #else.
+            sed '/ #else/q' $out > "$tmpfile"
+            ${patchutils}/bin/recountdiff "$tmpfile" > "$out"
+          '';
+        };
+      in fetchurl {
+        name = "pdftoepdf-poppler${popplerVersion}.cc";
+        url = "https://www.tug.org/svn/texlive/trunk/Build/source/texk/web2c/pdftexdir/pdftoepdf-poppler${popplerVersion}.cc?revision=52959&view=co";
+        sha256 = "0pngvw1jgnm4cqskrzf5a3z8rj4ssl10007n3wbblj50hvvzjph3";
+        postFetch = ''
+          # The trunk added some extra arguments to certain functions so we need to revert that
+          # https://www.tug.org/svn/texlive?view=revision&revision=52953
+          patch $out < ${revert-pdfmajorversion}
+        '';
+      };
+      pdftosrc = fetchurl {
+        name = "pdftosrc-poppler${popplerVersion}.cc";
+        url = "https://www.tug.org/svn/texlive/trunk/Build/source/texk/web2c/pdftexdir/pdftosrc-poppler${popplerVersion}.cc?revision=52959&view=co";
+        sha256 = "0iq2cmwvf2lxy32sygrafwqgcwvvbdnvxm5l3mrg9cb2a1g06380";
+      };
+    in ''
+      for i in texk/kpathsea/mktex*; do
+        sed -i '/^mydir=/d' "$i"
+      done
+      cp -pv ${pdftoepdf} texk/web2c/pdftexdir/pdftoepdf.cc
+      cp -pv ${pdftosrc} texk/web2c/pdftexdir/pdftosrc.cc
+    '';
+
+    # remove when removing synctex-missing-header.patch
+    preAutoreconf = "pushd texk/web2c";
+    postAutoreconf = "popd";
+
+    configureFlags = [
+      "--with-banner-add=/NixOS.org"
+      "--disable-missing" "--disable-native-texlive-build"
+      "--enable-shared" # "--enable-cxx-runtime-hack" # static runtime
+      "--enable-tex-synctex"
+      "-C" # use configure cache to speed up
+    ]
+      ++ withSystemLibs [
+      # see "from TL tree" vs. "Using installed"  in configure output
+      "zziplib" "xpdf" "poppler" "mpfr" "gmp"
+      "pixman" "potrace" "gd" "freetype2" "libpng" "libpaper" "zlib"
+        # beware: xpdf means to use stuff from poppler :-/
+    ];
+
+    # clean broken links to stuff not built
+    cleanBrokenLinks = ''
+      for f in "$out"/bin/*; do
+        if [[ ! -x "$f" ]]; then rm "$f"; fi
+      done
+    '';
+  };
+in rec { # un-indented
+
+inherit (common) cleanBrokenLinks;
+texliveYear = year;
+
+
+core = stdenv.mkDerivation rec {
+  pname = "texlive-bin";
+  inherit version;
+
+  inherit (common) src patches postPatch preAutoreconf postAutoreconf;
+
+  outputs = [ "out" "doc" ];
+
+  nativeBuildInputs = [ pkgconfig autoreconfHook ];
+  buildInputs = [
+    /*teckit*/ zziplib poppler mpfr gmp
+    pixman gd freetype libpng libpaper zlib
+    perl
+  ];
+
+  hardeningDisable = [ "format" ];
+
+  preConfigure = ''
+    rm -r libs/{cairo,freetype2,gd,gmp,graphite2,harfbuzz,icu,libpaper,libpng} \
+      libs/{mpfr,pixman,poppler,xpdf,zlib,zziplib}
+    mkdir WorkDir
+    cd WorkDir
+  '';
+  configureScript = "../configure";
+
+  configureFlags = common.configureFlags
+    ++ [ "--without-x" ] # disable xdvik and xpdfopen
+    ++ map (what: "--disable-${what}") ([
+      "dvisvgm" "dvipng" # ghostscript dependency
+      "luatex" "luajittex" "mp" "pmp" "upmp" "mf" # cairo would bring in X and more
+      "xetex" "bibtexu" "bibtex8" "bibtex-x" "upmendex" # ICU isn't small
+    ] ++ stdenv.lib.optional (stdenv.hostPlatform.isPower && stdenv.hostPlatform.is64bit) "mfluajit")
+    ++ [ "--without-system-harfbuzz" "--without-system-icu" ] # bogus configure
+    ;
+
+  enableParallelBuilding = true;
+
+  doCheck = false; # triptest fails, likely due to missing TEXMF tree
+  preCheck = "patchShebangs ../texk/web2c";
+
+  installTargets = [ "install" "texlinks" ];
+
+  # TODO: perhaps improve texmf.cnf search locations
+  postInstall = /* a few texmf-dist files are useful; take the rest from pkgs */ ''
+    mv "$out/share/texmf-dist/web2c/texmf.cnf" .
+    rm -r "$out/share/texmf-dist"
+    mkdir -p "$out"/share/texmf-dist/{web2c,scripts/texlive/TeXLive}
+    mv ./texmf.cnf "$out/share/texmf-dist/web2c/"
+    cp ../texk/tests/TeXLive/*.pm "$out/share/texmf-dist/scripts/texlive/TeXLive/"
+    cp ../texk/texlive/linked_scripts/scripts.lst "$out/share/texmf-dist/scripts/texlive/"
+  '' +
+    (let extraScripts =
+          ''
+            tex4ht/ht.sh
+            tex4ht/htcontext.sh
+            tex4ht/htcopy.pl
+            tex4ht/htlatex.sh
+            tex4ht/htmex.sh
+            tex4ht/htmove.pl
+            tex4ht/httex.sh
+            tex4ht/httexi.sh
+            tex4ht/htxelatex.sh
+            tex4ht/htxetex.sh
+            tex4ht/mk4ht.pl
+            tex4ht/xhlatex.sh
+          '';
+      in
+        ''
+          echo -e 'texmf_scripts="$texmf_scripts\n${extraScripts}"' \
+            >> "$out/share/texmf-dist/scripts/texlive/scripts.lst"
+        '')
+  + /* doc location identical with individual TeX pkgs */ ''
+    mkdir -p "$doc/doc"
+    mv "$out"/share/{man,info} "$doc"/doc
+  '' + cleanBrokenLinks;
+
+  # needed for poppler and xpdf
+  CXXFLAGS = stdenv.lib.optionalString stdenv.cc.isClang "-std=c++14";
+
+  setupHook = ./setup-hook.sh; # TODO: maybe texmf-nix -> texmf (and all references)
+  passthru = { inherit version buildInputs; };
+
+  meta = with stdenv.lib; {
+    description = "Basic binaries for TeX Live";
+    homepage    = http://www.tug.org/texlive;
+    license     = stdenv.lib.licenses.gpl2;
+    maintainers = with maintainers; [ vcunat veprbl lovek323 raskin jwiegley ];
+    platforms   = platforms.all;
+  };
+};
+
+
+inherit (core-big) metafont metapost luatex xetex;
+core-big = stdenv.mkDerivation { #TODO: upmendex
+  pname = "texlive-core-big.bin";
+  inherit version;
+
+  inherit (common) src patches postPatch preAutoreconf postAutoreconf;
+
+  hardeningDisable = [ "format" ];
+
+  inherit (core) nativeBuildInputs;
+  buildInputs = core.buildInputs ++ [ core cairo harfbuzz icu graphite2 libX11 ];
+
+  configureFlags = common.configureFlags
+    ++ withSystemLibs [ "kpathsea" "ptexenc" "cairo" "harfbuzz" "icu" "graphite2" ]
+    ++ map (prog: "--disable-${prog}") # don't build things we already have
+      [ "tex" "ptex" "eptex" "uptex" "euptex" "aleph" "pdftex"
+        "web-progs" "synctex"
+        # luajittex is mostly not needed, see:
+        # http://tex.stackexchange.com/questions/97999/when-to-use-luajittex-in-favour-of-luatex
+        "luajittex" "mfluajit"
+      ];
+
+  configureScript = ":";
+
+  # we use static libtexlua, because it's only used by a single binary
+  postConfigure = ''
+    mkdir ./WorkDir && cd ./WorkDir
+    for path in libs/{teckit,lua53} texk/web2c; do
+      (
+        if [[ "$path" =~ "libs/lua5" ]]; then
+          extraConfig="--enable-static --disable-shared"
+        else
+          extraConfig=""
+        fi
+
+        mkdir -p "$path" && cd "$path"
+        "../../../$path/configure" $configureFlags $extraConfig
+      )
+    done
+  '';
+
+  preBuild = "cd texk/web2c";
+  enableParallelBuilding = true;
+
+  doCheck = false; # fails
+
+  # now distribute stuff into outputs, roughly as upstream TL
+  # (uninteresting stuff remains in $out, typically duplicates from `core`)
+  outputs = [ "out" "metafont" "metapost" "luatex" "xetex" ];
+  postInstall = ''
+    for output in $outputs; do
+      mkdir -p "''${!output}/bin"
+    done
+
+    mv "$out/bin"/{inimf,mf,mf-nowin} "$metafont/bin/"
+    mv "$out/bin"/{*tomp,mfplain,*mpost} "$metapost/bin/"
+    mv "$out/bin"/{luatex,texlua*} "$luatex/bin/"
+    mv "$out/bin"/xetex "$xetex/bin/"
+  '';
+};
+
+
+dvisvgm = stdenv.mkDerivation {
+  pname = "texlive-dvisvgm.bin";
+  inherit version;
+
+  inherit (common) src;
+
+  patches = [
+    # Fix for ghostscript>=9.27
+    # Backport of
+    # https://github.com/mgieseki/dvisvgm/commit/bc51951bc90b700c28ea018993bdb058e5271e9b
+    ./dvisvgm-fix.patch
+
+    # Needed for ghostscript>=9.50
+    (fetchpatch {
+      url = "https://github.com/mgieseki/dvisvgm/commit/7b93a9197b69305429183affd24fa40ee04a663a.patch";
+      sha256 = "1gmj76ja9xng39wxckhs9q140abixgb8rkrcfv2cdgq786wm3vag";
+      stripLen = 1;
+      extraPrefix = "texk/dvisvgm/dvisvgm-src/";
+    })
+  ];
+
+  nativeBuildInputs = [ pkgconfig ];
+  # TODO: dvisvgm still uses vendored dependencies
+  buildInputs = [ core/*kpathsea*/ ghostscript zlib freetype /*potrace xxHash*/ ];
+
+  preConfigure = "cd texk/dvisvgm";
+
+  # configure script has a bug: it refers to $HAVE_LIBGS but sets $have_libgs
+  # TODO: remove for texlive 2020?
+  HAVE_LIBGS = 1;
+
+  configureFlags = common.configureFlags
+    ++ [ "--with-system-kpathsea" ];
+
+  enableParallelBuilding = true;
+};
+
+
+dvipng = stdenv.mkDerivation {
+  pname = "texlive-dvipng.bin";
+  inherit version;
+
+  inherit (common) src;
+
+  nativeBuildInputs = [ perl pkgconfig ];
+  buildInputs = [ core/*kpathsea*/ zlib libpng freetype gd ghostscript makeWrapper ];
+
+  patches = [
+    (fetchpatch {
+      url = "http://git.savannah.nongnu.org/cgit/dvipng.git/patch/?id=f3ff241827a587e3d39eda477041fd3280f5b245";
+      sha256 = "1a0ixl9mga24p6xk8dy3v60yifvbzd27vs0hv8996rfkp8jqa7is";
+      stripLen = 1;
+      extraPrefix = "texk/dvipng/dvipng-src/";
+    })
+  ];
+
+  preConfigure = ''
+    cd texk/dvipng
+    patchShebangs doc/texi2pod.pl
+  '';
+
+  configureFlags = common.configureFlags
+    ++ [ "--with-system-kpathsea" "--with-gs=yes" "--disable-debug" ];
+
+  enableParallelBuilding = true;
+
+  # I didn't manage to hardcode gs location by configureFlags
+  postInstall = ''
+    wrapProgram "$out/bin/dvipng" --prefix PATH : '${ghostscript}/bin'
+  '';
+};
+
+
+latexindent = perlPackages.buildPerlPackage rec {
+  pname = "latexindent";
+  inherit (src) version;
+
+  src = stdenv.lib.head (builtins.filter (p: p.tlType == "run") texlive.latexindent.pkgs);
+
+  outputs = [ "out" ];
+
+  nativeBuildInputs = stdenv.lib.optional stdenv.isDarwin shortenPerlShebang;
+  propagatedBuildInputs = with perlPackages; [ FileHomeDir LogDispatch LogLog4perl UnicodeLineBreak YAMLTiny ];
+
+  postPatch = ''
+    substituteInPlace scripts/latexindent/LatexIndent/GetYamlSettings.pm \
+      --replace '$FindBin::RealBin/defaultSettings.yaml' ${src}/scripts/latexindent/defaultSettings.yaml
+  '';
+
+  # Dirty hack to apply perlFlags, but do no build
+  preConfigure = ''
+    touch Makefile.PL
+  '';
+  buildPhase = ":";
+  installPhase = ''
+    install -D ./scripts/latexindent/latexindent.pl "$out"/bin/latexindent
+    mkdir -p "$out"/${perl.libPrefix}
+    cp -r ./scripts/latexindent/LatexIndent "$out"/${perl.libPrefix}/
+  '' + stdenv.lib.optionalString stdenv.isDarwin ''
+    shortenPerlShebang "$out"/bin/latexindent
+  '';
+};
+
+
+pygmentex = python2Packages.buildPythonApplication rec {
+  pname = "pygmentex";
+  inherit (src) version;
+
+  src = stdenv.lib.head (builtins.filter (p: p.tlType == "run") texlive.pygmentex.pkgs);
+
+  propagatedBuildInputs = with python2Packages; [ pygments chardet ];
+
+  dontBuild = true;
+
+  doCheck = false;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D ./scripts/pygmentex/pygmentex.py "$out"/bin/pygmentex
+
+    runHook postInstall
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://www.ctan.org/pkg/pygmentex;
+    description = "Auxiliary tool for typesetting code listings in LaTeX documents using Pygments";
+    longDescription = ''
+      PygmenTeX is a Python-based LaTeX package that can be used for
+      typesetting code listings in a LaTeX document using Pygments.
+
+      Pygments is a generic syntax highlighter for general use in all kinds of
+      software such as forum systems, wikis or other applications that need to
+      prettify source code.
+    '';
+    license = licenses.lppl13c;
+    maintainers = with maintainers; [ romildo ];
+  };
+};
+
+
+inherit biber;
+bibtexu = bibtex8;
+bibtex8 = stdenv.mkDerivation {
+  pname = "texlive-bibtex-x.bin";
+  inherit version;
+
+  inherit (common) src;
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ core/*kpathsea*/ icu ];
+
+  preConfigure = "cd texk/bibtex-x";
+
+  configureFlags = common.configureFlags
+    ++ [ "--with-system-kpathsea" "--with-system-icu" ];
+
+  enableParallelBuilding = true;
+};
+
+
+xdvi = stdenv.mkDerivation {
+  pname = "texlive-xdvi.bin";
+  inherit version;
+
+  inherit (common) src;
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ core/*kpathsea*/ freetype ghostscript ]
+    ++ (with xorg; [ libX11 libXaw libXi libXpm libXmu libXaw libXext libXfixes ]);
+
+  preConfigure = "cd texk/xdvik";
+
+  configureFlags = common.configureFlags
+    ++ [ "--with-system-kpathsea" "--with-system-libgs" ];
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    substituteInPlace "$out/bin/xdvi" \
+      --replace "exec xdvi-xaw" "exec '$out/bin/xdvi-xaw'"
+  '';
+  # TODO: it's suspicious that mktexpk generates fonts into ~/.texlive2014
+};
+
+} # un-indented
+
+// stdenv.lib.optionalAttrs (!stdenv.isDarwin) # see #20062
+{
+
+xindy = stdenv.mkDerivation {
+  pname = "texlive-xindy.bin";
+  inherit version;
+
+  inherit (common) src;
+
+  # If unset, xindy will try to mkdir /homeless-shelter
+  HOME = ".";
+
+  prePatch = "cd utils/xindy";
+  # hardcode clisp location
+  postPatch = ''
+    substituteInPlace xindy-*/user-commands/xindy.in \
+      --replace "our \$clisp = ( \$is_windows ? 'clisp.exe' : 'clisp' ) ;" \
+                "our \$clisp = '$(type -P clisp)';"
+  '';
+
+  nativeBuildInputs = [
+    pkgconfig perl
+    (texlive.combine { inherit (texlive) scheme-basic cyrillic ec; })
+  ];
+  buildInputs = [ clisp libiconv ];
+
+  configureFlags = [ "--with-clisp-runtime=system" "--disable-xindy-docs" ];
+
+  preInstall = ''mkdir -p "$out/bin" '';
+  # fixup various file-location errors of: lib/xindy/{xindy.mem,modules/}
+  postInstall = ''
+    mkdir -p "$out/lib/xindy"
+    mv "$out"/{bin/xindy.mem,lib/xindy/}
+    ln -s ../../share/texmf-dist/xindy/modules "$out/lib/xindy/"
+  '';
+};
+
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/texlive/combine.nix b/nixpkgs/pkgs/tools/typesetting/tex/texlive/combine.nix
new file mode 100644
index 000000000000..a4b0fb99f3e9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/texlive/combine.nix
@@ -0,0 +1,291 @@
+params: with params;
+# combine =
+args@{
+  pkgFilter ? (pkg: pkg.tlType == "run" || pkg.tlType == "bin" || pkg.pname == "core")
+, extraName ? "combined", ...
+}:
+let
+  pkgSet = removeAttrs args [ "pkgFilter" "extraName" ] // {
+    # include a fake "core" package
+    core.pkgs = [
+      (bin.core.out // { pname = "core"; tlType = "bin"; })
+      (bin.core.doc // { pname = "core"; tlType = "doc"; })
+    ];
+  };
+  pkgList = rec {
+    all = lib.filter pkgFilter (combinePkgs pkgSet);
+    splitBin = builtins.partition (p: p.tlType == "bin") all;
+    bin = mkUniqueOutPaths splitBin.right
+      ++ lib.optional
+          (lib.any (p: p.tlType == "run" && p.pname == "pdfcrop") splitBin.wrong)
+          (lib.getBin ghostscript);
+    nonbin = mkUniqueOutPaths splitBin.wrong;
+
+    # extra interpreters needed for shebangs, based on 2015 schemes "medium" and "tetex"
+    # (omitted tk needed in pname == "epspdf", bin/epspdftk)
+    pkgNeedsPython = pkg: pkg.tlType == "run" && lib.elem pkg.pname
+      [ "de-macro" "pythontex" "dviasm" "texliveonfly" ];
+    pkgNeedsRuby = pkg: pkg.tlType == "run" && pkg.pname == "match-parens";
+    extraInputs =
+      lib.optional (lib.any pkgNeedsPython splitBin.wrong) python
+      ++ lib.optional (lib.any pkgNeedsRuby splitBin.wrong) ruby;
+  };
+
+  # TODO: replace by buitin once it exists
+  fastUnique = comparator: list: with lib;
+    let un_adj = l: if length l < 2 then l
+      else optional (head l != elemAt l 1) (head l) ++ un_adj (tail l);
+    in un_adj (lib.sort comparator list);
+
+  uniqueStrings = fastUnique (a: b: a < b);
+
+  mkUniqueOutPaths = pkgs: uniqueStrings
+    (map (p: p.outPath) (builtins.filter lib.isDerivation pkgs));
+
+in buildEnv {
+  name = "texlive-${extraName}-${bin.texliveYear}";
+
+  extraPrefix = "/share/texmf";
+
+  ignoreCollisions = false;
+  paths = pkgList.nonbin;
+
+  buildInputs = [ makeWrapper ] ++ pkgList.extraInputs;
+
+  postBuild = ''
+    cd "$out"
+    mkdir -p ./bin
+  '' +
+    lib.concatMapStrings
+      (path: ''
+        for f in '${path}'/bin/*; do
+          if [[ -L "$f" ]]; then
+            cp -d "$f" ./bin/
+          else
+            ln -s "$f" ./bin/
+          fi
+        done
+      '')
+      pkgList.bin
+    +
+
+    # Patch texlinks.sh back to 2015 version;
+    # otherwise some bin/ links break, e.g. xe(la)tex.
+  ''
+    (
+      cd "$out/share/texmf/scripts/texlive"
+      local target="$(readlink texlinks.sh)"
+      rm texlinks.sh && cp "$target" texlinks.sh
+      patch --verbose -R texlinks.sh < '${./texlinks.diff}'
+    )
+  '' +
+  ''
+    export PATH="$out/bin:$out/share/texmf/scripts/texlive:${perl}/bin:$PATH"
+    export TEXMFCNF="$out/share/texmf/web2c"
+    export TEXMFDIST="$out/share/texmf"
+    export TEXMFSYSCONFIG="$out/share/texmf-config"
+    export TEXMFSYSVAR="$out/share/texmf-var"
+    export PERL5LIB="$out/share/texmf/scripts/texlive"
+  '' +
+    # patch texmf-dist  -> $out/share/texmf
+    # patch texmf-local -> $out/share/texmf-local
+    # TODO: perhaps do lua actions?
+    # tried inspiration from install-tl, sub do_texmf_cnf
+  ''
+    patchCnfLua() {
+      local cnfLua="$1"
+
+      if [ -e "$cnfLua" ]; then
+        local cnfLuaOrig="$(realpath "$cnfLua")"
+        rm ./texmfcnf.lua
+        sed \
+          -e 's,texmf-dist,texmf,g' \
+          -e "s,\(TEXMFLOCAL[ ]*=[ ]*\)[^\,]*,\1\"$out/share/texmf-local\",g" \
+          -e "s,\$SELFAUTOLOC,$out,g" \
+          -e "s,selfautodir:/,$out/share/,g" \
+          -e "s,selfautodir:,$out/share/,g" \
+          -e "s,selfautoparent:/,$out/share/,g" \
+          -e "s,selfautoparent:,$out/share/,g" \
+          "$cnfLuaOrig" > "$cnfLua"
+      fi
+    }
+
+    (
+      cd ./share/texmf/web2c/
+      local cnfOrig="$(realpath ./texmf.cnf)"
+      rm ./texmf.cnf
+      sed \
+        -e 's,texmf-dist,texmf,g' \
+        -e "s,\$SELFAUTOLOC,$out,g" \
+        -e "s,\$SELFAUTODIR,$out/share,g" \
+        -e "s,\$SELFAUTOPARENT,$out/share,g" \
+        -e "s,\$SELFAUTOGRANDPARENT,$out/share,g" \
+        -e "/^mpost,/d" `# CVE-2016-10243` \
+        "$cnfOrig" > ./texmf.cnf
+
+      patchCnfLua "./texmfcnf.lua"
+
+      mkdir $out/share/texmf-local
+    )
+  '' +
+    # now filter hyphenation patterns, in a hacky way ATM
+  (let
+    pnames = uniqueStrings (map (p: p.pname) pkgList.splitBin.wrong);
+    script =
+      writeText "hyphens.sed" (
+        # pick up the header
+        "1,/^% from/p;"
+        # pick up all sections matching packages that we combine
+        + lib.concatMapStrings (pname: "/^% from ${pname}:$/,/^%/p;\n") pnames
+      );
+  in ''
+    (
+      cd ./share/texmf/tex/generic/config/
+      for fname in language.dat language.def; do
+        [ -e $fname ] || continue;
+        cnfOrig="$(realpath ./$fname)"
+        rm ./$fname
+        cat "$cnfOrig" | sed -n -f '${script}' > ./$fname
+      done
+    )
+  '') +
+
+  # function to wrap created executables with required env vars
+  ''
+    wrapBin() {
+    for link in ./bin/*; do
+      [ -L "$link" -a -x "$link" ] || continue # if not link, assume OK
+      local target=$(readlink "$link")
+
+      # skip simple local symlinks; mktexfmt in particular
+      echo "$target" | grep / > /dev/null || continue;
+
+      echo -n "Wrapping '$link'"
+      rm "$link"
+      makeWrapper "$target" "$link" \
+        --prefix PATH : "$out/bin:${perl}/bin" \
+        --prefix PERL5LIB : "$out/share/texmf/scripts/texlive"
+
+      # avoid using non-nix shebang in $target by calling interpreter
+      if [[ "$(head -c 2 "$target")" = "#!" ]]; then
+        local cmdline="$(head -n 1 "$target" | sed 's/^\#\! *//;s/ *$//')"
+        local relative=`basename "$cmdline" | sed 's/^env //' `
+        local newInterp=`echo "$relative" | cut -d\  -f1`
+        local params=`echo "$relative" | cut -d\  -f2- -s`
+        local newPath="$(type -P "$newInterp")"
+        if [[ -z "$newPath" ]]; then
+          echo " Warning: unknown shebang '$cmdline' in '$target'"
+          continue
+        fi
+        echo " and patching shebang '$cmdline'"
+        sed "s|^exec |exec $newPath $params |" -i "$link"
+
+      elif head -n 1 "$target" | grep -q 'exec perl'; then
+        # see #24343 for details of the problem
+        echo " and patching weird perl shebang"
+        sed "s|^exec |exec '${perl}/bin/perl' -w |" -i "$link"
+
+      else
+        sed 's|^exec |exec -a "$0" |' -i "$link"
+        echo
+      fi
+    done
+    }
+  '' +
+  # texlive post-install actions
+  ''
+    mkdir -p "$out/share/texmf/scripts/texlive/"
+    ln -s '${bin.core.out}/share/texmf-dist/scripts/texlive/TeXLive' "$out/share/texmf/scripts/texlive/"
+
+    for tool in updmap; do
+      ln -sf "$out/share/texmf/scripts/texlive/$tool."* "$out/bin/$tool"
+    done
+  '' +
+    # now hack to preserve "$0" for mktexfmt
+  ''
+    cp "$out"/share/texmf/scripts/texlive/fmtutil.pl "$out/bin/fmtutil"
+    patchShebangs "$out/bin/fmtutil"
+    sed "1s|$| -I $out/share/texmf/scripts/texlive|" -i "$out/bin/fmtutil"
+    ln -sf fmtutil "$out/bin/mktexfmt"
+
+    perl `type -P mktexlsr.pl` ./share/texmf
+    texlinks.sh "$out/bin" && wrapBin
+    (perl `type -P fmtutil.pl` --sys --all || true) | grep '^fmtutil' # too verbose
+    #texlinks.sh "$out/bin" && wrapBin # do we need to regenerate format links?
+
+    # Disable unavailable map files
+    echo y | perl `type -P updmap.pl` --sys --syncwithtrees --force
+    # Regenerate the map files (this is optional)
+    perl `type -P updmap.pl` --sys --force
+
+    perl `type -P mktexlsr.pl` ./share/texmf-* # to make sure
+  '' +
+    # install (wrappers for) scripts, based on a list from upstream texlive
+  ''
+    (
+      cd "$out/share/texmf/scripts"
+      source '${bin.core.out}/share/texmf-dist/scripts/texlive/scripts.lst'
+      for s in $texmf_scripts; do
+        [[ -x "./$s" ]] || continue
+        tName="$(basename $s | sed 's/\.[a-z]\+$//')" # remove extension
+        [[ ! -e "$out/bin/$tName" ]] || continue
+        ln -sv "$(realpath $s)" "$out/bin/$tName" # wrapped below
+      done
+    )
+  '' +
+    # A hacky way to provide repstopdf
+    #  * Copy is done to have a correct "$0" so that epstopdf enables the restricted mode
+    #  * ./bin/repstopdf needs to be a symlink to be processed by wrapBin
+  ''
+    if [[ -e ./bin/epstopdf ]]; then
+      cp $(realpath ./bin/epstopdf) ./share/texmf/scripts/repstopdf
+      ln -s "$out"/share/texmf/scripts/repstopdf ./bin/repstopdf
+    fi
+  '' +
+    # finish up the wrappers
+  ''
+    rm "$out"/bin/*-sys
+    wrapBin
+  '' +
+    # Perform a small test to verify that the restricted mode get enabled when
+    # needed (detected by checking if it disallows --gscmd)
+  ''
+    if [[ -e ./bin/epstopdf ]]; then
+      echo "Testing restricted mode for {,r}epstopdf"
+      ! (epstopdf --gscmd echo /dev/null 2>&1 || true) | grep forbidden
+      (repstopdf --gscmd echo /dev/null 2>&1 || true) | grep forbidden
+    fi
+  '' +
+  # TODO: a context trigger https://www.preining.info/blog/2015/06/debian-tex-live-2015-the-new-layout/
+    # http://wiki.contextgarden.net/ConTeXt_Standalone#Unix-like_platforms_.28Linux.2FMacOS_X.2FFreeBSD.2FSolaris.29
+
+    # I would just create links from "$out"/share/{man,info},
+    #   but buildenv has problems with merging symlinks with directories;
+    #   note: it's possible we might need deepen the work-around to man/*.
+  ''
+    for d in {man,info}; do
+      [[ -e "./share/texmf/doc/$d" ]] || continue;
+      (
+        mkdir -p "./share/$d" && cd "./share/$d"
+        ln -s -t . ../texmf/doc/"$d"/*
+      )
+    done
+  '' +
+  # MkIV uses its own lookup mechanism and we need to initialize
+  # caches for it. Unsetting TEXMFCNF is needed to let mtxrun
+  # determine it from kpathsea so that the config path is given with
+  # "selfautodir:" as it will be in runtime. This is important because
+  # the cache is identified by a hash of this path.
+  ''
+    if [[ -e "$out/bin/mtxrun" ]]; then
+      (
+        unset TEXMFCNF
+        mtxrun --generate
+      )
+    fi
+  ''
+    + bin.cleanBrokenLinks
+  ;
+}
+# TODO: make TeX fonts visible by fontconfig: it should be enough to install an appropriate file
+#       similarly, deal with xe(la)tex font visibility?
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/texlive/default.nix b/nixpkgs/pkgs/tools/typesetting/tex/texlive/default.nix
new file mode 100644
index 000000000000..44dc45fdfb2c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/texlive/default.nix
@@ -0,0 +1,190 @@
+/* TeX Live user docs
+  - source: ../../../../../doc/languages-frameworks/texlive.xml
+  - current html: http://nixos.org/nixpkgs/manual/#sec-language-texlive
+*/
+{ stdenv, lib, fetchurl, runCommand, writeText, buildEnv
+, callPackage, ghostscriptX, harfbuzz, poppler_min
+, makeWrapper, python, ruby, perl
+, useFixedHashes ? true
+, recurseIntoAttrs
+}:
+let
+  # various binaries (compiled)
+  bin = callPackage ./bin.nix {
+    poppler = poppler_min; # otherwise depend on various X stuff
+    ghostscript = ghostscriptX;
+    harfbuzz = harfbuzz.override {
+      withIcu = true; withGraphite2 = true;
+    };
+  };
+
+  # map: name -> fixed-output hash
+  # sha1 in base32 was chosen as a compromise between security and length
+  fixedHashes = lib.optionalAttrs useFixedHashes (import ./fixedHashes.nix);
+
+  # function for creating a working environment from a set of TL packages
+  combine = import ./combine.nix {
+    inherit bin combinePkgs buildEnv lib makeWrapper writeText
+      stdenv python ruby perl;
+    ghostscript = ghostscriptX; # could be without X, probably, but we use X above
+  };
+
+  # the set of TeX Live packages, collections, and schemes; using upstream naming
+  tl = let
+    orig = import ./pkgs.nix tl;
+    removeSelfDep = lib.mapAttrs
+      (n: p: if p ? deps then p // { deps = lib.filterAttrs (dn: _: n != dn) p.deps; }
+                         else p);
+    clean = removeSelfDep (orig // {
+      # overrides of texlive.tlpdb
+
+      texlive-msg-translations = orig.texlive-msg-translations // {
+        hasRunfiles = false; # only *.po for tlmgr
+      };
+
+      xdvi = orig.xdvi // { # it seems to need it to transform fonts
+        deps = (orig.xdvi.deps or {}) // { inherit (tl) metafont; };
+      };
+
+      # remove dependency-heavy packages from the basic collections
+      collection-basic = orig.collection-basic // {
+        deps = removeAttrs orig.collection-basic.deps [ "metafont" "xdvi" ];
+      };
+      # add them elsewhere so that collections cover all packages
+      collection-metapost = orig.collection-metapost // {
+        deps = orig.collection-metapost.deps // { inherit (tl) metafont; };
+      };
+      collection-plaingeneric = orig.collection-plaingeneric // {
+        deps = orig.collection-plaingeneric.deps // { inherit (tl) xdvi; };
+      };
+    }); # overrides
+
+    # tl =
+    in lib.mapAttrs flatDeps clean;
+    # TODO: texlive.infra for web2c config?
+
+
+  flatDeps = pname: attrs:
+    let
+      version = attrs.version or bin.texliveYear;
+      mkPkgV = tlType: let
+        pkg = attrs // {
+          sha512 = attrs.sha512.${tlType};
+          inherit pname tlType version;
+        };
+        in mkPkg pkg;
+    in {
+      # TL pkg contains lists of packages: runtime files, docs, sources, binaries
+      pkgs =
+        # tarball of a collection/scheme itself only contains a tlobj file
+        [( if (attrs.hasRunfiles or false) then mkPkgV "run"
+            # the fake derivations are used for filtering of hyphenation patterns
+          else { inherit pname version; tlType = "run"; }
+        )]
+        ++ lib.optional (attrs.sha512 ? doc) (mkPkgV "doc")
+        ++ lib.optional (attrs.sha512 ? source) (mkPkgV "source")
+        ++ lib.optional (bin ? ${pname})
+            ( bin.${pname} // { inherit pname; tlType = "bin"; } )
+        ++ combinePkgs (attrs.deps or {});
+    };
+
+  # create a derivation that contains an unpacked upstream TL package
+  mkPkg = { pname, tlType, version, sha512, postUnpack ? "", stripPrefix ? 1, ... }@args:
+    let
+      # the basename used by upstream (without ".tar.xz" suffix)
+      urlName = pname + lib.optionalString (tlType != "run") ".${tlType}";
+      tlName = urlName + "-${version}";
+      fixedHash = fixedHashes.${tlName} or null; # be graceful about missing hashes
+
+      urls = args.urls or (if args ? url then [ args.url ] else
+              map (up: "${up}/${urlName}.tar.xz") urlPrefixes
+            );
+
+      # The tarballs on CTAN mirrors for the current release are constantly
+      # receiving updates, so we can't use those directly. Stable snapshots
+      # need to be used instead. Ideally, for the release branches of NixOS we
+      # should be switching to the tlnet-final versions
+      # (https://tug.org/historic/).
+      urlPrefixes = args.urlPrefixes or [
+        # Snapshots hosted by one of the texlive release managers
+        https://texlive.info/tlnet-archive/2019/10/19/tlnet/archive
+
+        # Mirror hosted by @veprbl
+        http://146.185.144.154/texlive-2019
+
+        # TODO: Upgrade to the final snapshot of the packages before 20.03
+        #http://ftp.math.utah.edu/pub/tex/historic/systems/texlive/2019/tlnet-final/archive
+        #ftp://tug.org/texlive/historic/2019/tlnet-final/archive
+      ];
+
+      src = fetchurl { inherit urls sha512; };
+
+      passthru = {
+        inherit pname tlType version;
+      } // lib.optionalAttrs (sha512 != "") { inherit src; };
+      unpackCmd = file: ''
+        tar -xf ${file} \
+          '--strip-components=${toString stripPrefix}' \
+          -C "$out" --anchored --exclude=tlpkg --keep-old-files
+      '' + postUnpack;
+
+    in if sha512 == "" then
+      # hash stripped from pkgs.nix to save space -> fetch&unpack in a single step
+      fetchurl {
+        inherit urls;
+        sha1 = if fixedHash == null then throw "TeX Live package ${tlName} is missing hash!"
+          else fixedHash;
+        name = tlName;
+        recursiveHash = true;
+        downloadToTemp = true;
+        postFetch = ''mkdir "$out";'' + unpackCmd "$downloadedFile";
+        # TODO: perhaps override preferHashedMirrors and allowSubstitutes
+     }
+        // passthru
+
+    else runCommand "texlive-${tlName}"
+      ( { # lots of derivations, not meant to be cached
+          preferLocalBuild = true; allowSubstitutes = false;
+          inherit passthru;
+        } // lib.optionalAttrs (fixedHash != null) {
+          outputHash = fixedHash;
+          outputHashAlgo = "sha1";
+          outputHashMode = "recursive";
+        }
+      )
+      ( ''
+          mkdir "$out"
+        '' + unpackCmd "'${src}'"
+      );
+
+  # combine a set of TL packages into a single TL meta-package
+  combinePkgs = pkgSet: lib.concatLists # uniqueness is handled in `combine`
+    (lib.mapAttrsToList (_n: a: a.pkgs) pkgSet);
+
+in
+  tl // {
+    inherit bin combine;
+
+    # Pre-defined combined packages for TeX Live schemes,
+    # to make nix-env usage more comfortable and build selected on Hydra.
+    combined = with lib; recurseIntoAttrs (
+      mapAttrs
+        (pname: attrs:
+          addMetaAttrs rec {
+            description = "TeX Live environment for ${pname}";
+            platforms = lib.platforms.all;
+            hydraPlatforms = lib.optionals
+              (lib.elem pname ["scheme-small" "scheme-basic"]) platforms;
+            maintainers = with lib.maintainers;  [ veprbl ];
+          }
+          (combine {
+            ${pname} = attrs;
+            extraName = "combined" + lib.removePrefix "scheme" pname;
+          })
+        )
+        { inherit (tl)
+            scheme-basic scheme-context scheme-full scheme-gust scheme-infraonly
+            scheme-medium scheme-minimal scheme-small scheme-tetex;
+        }
+    );
+  }
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/texlive/dvisvgm-fix.patch b/nixpkgs/pkgs/tools/typesetting/tex/texlive/dvisvgm-fix.patch
new file mode 100644
index 000000000000..0e927e24fd0e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/texlive/dvisvgm-fix.patch
@@ -0,0 +1,16 @@
+diff a/texk/dvisvgm/dvisvgm-src/src/psdefs.cpp b/texk/dvisvgm/dvisvgm-src/src/psdefs.cpp
+--- a/texk/dvisvgm/dvisvgm-src/src/psdefs.cpp
++++ b/texk/dvisvgm/dvisvgm-src/src/psdefs.cpp
+@@ -107,8 +107,7 @@ const char *PSInterpreter::PSDEFS =
+ "dmode sysexec<</Normal 0/Compatible 0/Multiply 1/Screen 2/Overlay 3/SoftLight "
+ "4/HardLight 5/ColorDodge 6/ColorBurn 7/Darken 8/Lighten 9/Difference 10/Exclus"
+ "ion 11/Hue 12/Saturation 13/Color 14/Luminosity 15/CompatibleOverprint 16>>exc"
+-"h get 1(setblendmode)prcmd}def/@pdfpagecount{GS_PDF_ProcSet begin pdfdict begi"
+-"n(r)file pdfopen begin pdfpagecount currentdict pdfclose end end end}def/@pdfp"
+-"agebox{GS_PDF_ProcSet begin pdfdict begin(r)file pdfopen begin dup dup 1 lt ex"
+-"ch pdfpagecount gt or{pop}{pdfgetpage/MediaBox pget pop aload pop}ifelse curre"
+-"ntdict pdfclose end end end}def DELAYBIND{.bindnow}if ";
++"h get 1(setblendmode)prcmd}def/@pdfpagecount{(r)file runpdfbegin pdfpagecount "
++"runpdfend}def/@pdfpagebox{(r)file runpdfbegin dup dup 1 lt exch pdfpagecount g"
++"t or{pop}{pdfgetpage/MediaBox pget pop aload pop}ifelse runpdfend}def DELAYBIN"
++"D{.bindnow}if ";
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/texlive/fixHashes.sh b/nixpkgs/pkgs/tools/typesetting/tex/texlive/fixHashes.sh
new file mode 100755
index 000000000000..439660682e2e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/texlive/fixHashes.sh
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+echo "{"
+grep -v -F '.bin-' | while read path; do
+    hash=`nix-hash --type sha1 --base32 "$path"`
+    echo -n "$path" | sed -E 's/[^-]*-texlive-(.*)/"\1"/'
+    echo "=\"$hash\";"
+done
+echo "}"
+
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/texlive/fixedHashes.nix b/nixpkgs/pkgs/tools/typesetting/tex/texlive/fixedHashes.nix
new file mode 100644
index 000000000000..f6cd70c0aa39
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/texlive/fixedHashes.nix
@@ -0,0 +1,8377 @@
+{
+"amsfonts-3.04"="hi87s0fxrkcq0w2389kwpxd3zzwsk1zf";
+"amsfonts.doc-3.04"="ch872rwfiar58praz8f880rcspy4mjxa";
+"amsfonts.source-3.04"="vjiw3vdxv44nl4yvaxqfy4b78girpjs7";
+"bibtex-0.99d"="ybimfc49fzmgpy88wagy0z55sdsshr50";
+"bibtex.doc-0.99d"="z85q61ajdnn1h1rljqf3cmz76j7wk7ch";
+"kpathsea-2019"="pxadnxm342pbnkx16swvqkh3h4i0dm01";
+"kpathsea.doc-2019"="riqk53rhn7kpqlsiygpbxb2pdqpxw0sm";
+"cm-2019"="5xrqls79s3drpagj8j3ihqzkll10605w";
+"cm.doc-2019"="36wag31jc0lrgncaxhcspiaqpwnw7xvy";
+"colorprofiles-20181105"="9rs3wkarffy7hf7c9kymzacy20znvcqf";
+"colorprofiles.doc-20181105"="v1asppz0kqvfg85skaiisphh2z4y6mbh";
+"dvipdfmx-2019"="ijnr5k9wvwq8lnd22qjrrjmm962la5f4";
+"dvipdfmx.doc-2019"="rg5skprlg10ac8xyxkbsja5mgyncx3x0";
+"glyphlist-2019"="i4nay4q38l3367hlc93rhkgxvrkcmyjb";
+"dvips-2019"="92wx71n0k4ia02l5m44xkmw5z1q22pbg";
+"dvips.doc-2019"="6sb1q07cc45fhk8vzgnlk2q5zrbn3haa";
+"enctex-2019"="j6lf040j733q0aj90wvx2vwq0x61zwdm";
+"enctex.doc-2019"="p2pad1ncy8izfag44p0pndyvgckfngvv";
+"etex-2019"="mdrs8yrrjf03pcndsr5azzxz7lvk08jp";
+"etex.doc-2019"="xdmkddsi3lykqy5hm03xamxsmmwplmnb";
+"etex-pkg-2.7"="2p6j6s4jm1y7k82jhh9lrfgcbph03h1a";
+"etex-pkg.doc-2.7"="0xlalpljqrcinaazh35yv9vc2a925h90";
+"graphics-def-2019"="yvcmr3xc5jflyh8fhaw0hgm68h3x5sk7";
+"graphics-def.doc-2019"="vykac1brcska9rhk2kni4krgjqwmcb7j";
+"gsftopk-1.19.2"="s7f70s4jyd5rnif4gwrli43k0pmfhhw9";
+"gsftopk.doc-1.19.2"="ygqc2yjbjw4mcjbj38pj8ar6x172xq9r";
+"hyph-utf8-2019"="2p5nhs05nj1wkihyf08yfvvhj5w2l91v";
+"hyph-utf8.doc-2019"="gnsa3x6b0vnzxm27xplvmxxvhghp41l6";
+"hyph-utf8.source-2019"="jqzgwpvs62p4j2i2rr7hi9ai38gx1x70";
+"hyphen-base-2019"="dxji64yb6fkmvqnf1vs0mca9zymr4xs3";
+"hyphenex-2019"="1ak1ymbmsfx7z8kh09jzkr3a4dvkrfjw";
+"hyphenex.source-2019"="n4rvv61jcw6s91mydy65qq90clva5zrs";
+"ifluatex-1.4"="ccsyxfkf1qb03cxnkfs6gy7iinz89dwc";
+"ifluatex.doc-1.4"="g4dzj6fi4rmlz468v3ivq00gkbs0v363";
+"ifluatex.source-1.4"="q4pdan6i8fdhyr4h029ci1qv6nfrff3h";
+"ifplatform-0.4a"="sfnfrx7iqg6kikiqd44yx8004l2mqkza";
+"ifplatform.doc-0.4a"="sab580hpgp0nw6gq5li9vvv3x5gxp50b";
+"ifplatform.source-0.4a"="nkwc32c56f1s585rr18r54ib1xa9hn4z";
+"ifxetex-0.6"="llq1x3f5fykh5mg6avzb1a21x1vh2mxz";
+"ifxetex.doc-0.6"="1iy2bgx7adrh6dbbrhraskqggr65f7f2";
+"ifxetex.source-0.6"="dl81ang1gw395giysn3vk6lv4v5h9xr2";
+"knuth-lib-2019"="cvjgvw8rwhmr98sz0y3azsyawzswcv3n";
+"knuth-local-2019"="g5vihblw8w8p8k8s14nakk959vpdgnh4";
+"lua-alt-getopt-0.7.0"="s2qkgq8dv65ib6chsah4xcargxh26bml";
+"lua-alt-getopt.doc-0.7.0"="xv8zqch612n2ww2pnpfranafcf7jhl96";
+"luatex-2019"="cyv130m5b93raz9qyqb23g2069cvfqz6";
+"luatex.doc-2019"="rli7lcyjk0igxdwxzz5g4vd8pizsfs41";
+"plain-3.141592653"="my32apfgd55b14vf8bsldaqwdd931gcg";
+"tex-ini-files-2019"="831h7dslin8dnan7llz8mki6zibqfglj";
+"tex-ini-files.doc-2019"="pqfrqdqmlbhmcpjycpf644v4vg0qw7ic";
+"unicode-data-1.10"="rdgsyc2626nybhwiwanp6zrmc3xgq61s";
+"unicode-data.doc-1.10"="hj4y19lylzpyqd3z58cr7al485ymgnpn";
+"makeindex-2019"="yzy90d3n087yrdsawabd0bn7iwz3m1i6";
+"makeindex.doc-2019"="9x9r1qc16jdij986xvyz13ipzqvc7ard";
+"mflogo-2.0"="mnn3p5gn5h9yi4inkllswxn142j31mz4";
+"mflogo.doc-2.0"="rdirf33m53y719b35aby2d98v1i0jhh5";
+"mflogo.source-2.0"="hl5rzcmk83lpc5rxcvy31kzm6qbwx3g5";
+"mfware-2019"="7mwvvyrb9cz2d3k5jl8r1fl238m3gl6n";
+"mfware.doc-2019"="px98kdlpy9a8j5wwr41bj26sy7v0ydhj";
+"pdftex-2019"="jlscd5nj9rdhdhczjah0vmarhrqdv9z2";
+"pdftex.doc-2019"="y0hg5pllb0nl8q2cf7cka9y2s783ml4f";
+"dehyph-2019"="dwnq2aajr29sdydc45056na079ph8gc6";
+"tetex-3.0"="1av633anrh1362bd0jdjzmxccdihmkdc";
+"tetex.doc-3.0"="kkk61vzd79mpq8yzj26c88v9hz5iia7c";
+"tex.doc-3.14159265"="p071mch50kkp8fv3jppqz8wpixi6638s";
+"texlive-common.doc-2019"="amx0fzzmrb3p1cd6ianbl8vync5kl47m";
+"texlive-docindex-2019"="5j5z0j2qwdlg2v7wxwz8ndmbwql2s0vk";
+"texlive-docindex.doc-2019"="bw11wjaqjjahs4x0hnakfvmvrjmjckkb";
+"texlive-en.doc-2019"="xjar2iksr9zvpd8sa19nz94d27zwlx2i";
+"texlive-scripts-2019"="4slnm2lcj74cbda5ilf6qspc66zw2f7s";
+"texlive-scripts.doc-2019"="i65h4yvfw765smdvzlhm15fw38s2yjz3";
+"tlshell-2019"="533phr4487bjy6756yndli62gvbwh85i";
+"tlshell.doc-2019"="yps67a47kr5r3ljhd18kq35bhn2qjj3y";
+"updmap-map-2019"="vs5lh5y6140dsd49w12gyvgvpwjg8nsv";
+"aichej-2019"="rmm8q17dvb470lyarcvgbpgip24a4fxb";
+"ajl-2019"="j0z05x267dbbw5r8s0ybvlj0hwky6sg5";
+"amsrefs-2.14"="crmn3pm2zy2fcr5d82dwwwxjm42na6j3";
+"amsrefs.doc-2.14"="r45n92fihia786v5nsab5vgjvwgmij6d";
+"amsrefs.source-2.14"="k1rzn2d509i2nkfwclpbpir3q6a41ya9";
+"apacite-6.03"="sj9k6bnr8qhfddlzk7wd0daf12458yi9";
+"apacite.doc-6.03"="cbhyw6lwyg7mnx8h421y0hxf3h5m6n4y";
+"apacite.source-6.03"="cby7n3f9rzm83736nm4rn1m77km3lr9y";
+"apalike2-2019"="vf25kvilm8g379d8c5mkzv749nd9p8ap";
+"archaeologie-2.4.2"="fj7j1agf9h442pqf3qhr4rh456jhc077";
+"archaeologie.doc-2.4.2"="m7fgm0v0hqqnb2hnnsabpvf21wj9w2h1";
+"archaeologie.source-2.4.2"="mh92z13ri04fpgybdkl5xq59cff3jdbj";
+"beebe-2019"="vlf2az2sjd14kkyzc1wfhr9sq0mqsms0";
+"besjournals-2019"="n3ljrkamca5v9w0rk3m38nqw86s1izc8";
+"besjournals.doc-2019"="3swy1ix6cxbp87hjlaf3x4ws4kg8sz77";
+"bestpapers-1.0"="15nq2m32h0giv41k6dslrw28han015aq";
+"bestpapers.doc-1.0"="mmlnsl83sil5zbdhwq16b6025sxdh9s6";
+"bib2gls-1.9"="20vrj8bvv3sxy871sxmbx1fbpvcfk6ka";
+"bib2gls.doc-1.9"="x4rsjfm3x052b6fmf609l07xj35y4d36";
+"bib2gls.source-1.9"="gg417lsy2grri0fd71nakl97bna20d21";
+"bibarts-2.2"="w813f5qw2kbsmlhcwxsg62na06bp0p0r";
+"bibarts.doc-2.2"="xrv6r5iwpdyrjzqzanvgw2dy07xgkgb0";
+"bibarts.source-2.2"="c4js97f9wx1ndh8isk3fgg6lp1rhrrmb";
+"biber.doc-2.13"="p5ki8hv1wymby7l19ampq1d8i5bd9j9d";
+"biber.source-2.13"="3c1mnm03rb2m9rbp2ka9d8k7z97zwqjd";
+"bibexport-3.03"="gxzcd5xddarag47glbq02fmxgpn5ndw3";
+"bibexport.doc-3.03"="mvqlfzqzyhbnqw8xixa01qdfgrlm5xln";
+"bibexport.source-3.03"="q41ipwczv79cxnl2420cvcj5q9c6l57l";
+"bibhtml-2.0.2"="b0klmx8rd09znlxg7wz5m8b1f8qpxsjv";
+"bibhtml.doc-2.0.2"="snqyqvgwdwpkyfqfj69zwd478z96mcj4";
+"biblatex-3.13a"="6l70zbayjarzsri0vdxyx5hwcxg92lhm";
+"biblatex.doc-3.13a"="mr59rpjlcqpkziy1q4kl2pf5r930h9c2";
+"biblatex-abnt-3.4"="ryrk1n85x197ff723jla7vrcv4jkb2fv";
+"biblatex-abnt.doc-3.4"="i1b7mjmy8din75dzaqb407n5byavjwzy";
+"biblatex-anonymous-2.6.2"="yv83qimx8n31f00csmlxxlmymxsq1ngf";
+"biblatex-anonymous.doc-2.6.2"="s3g5ndv0alcpi8jmslrashcg4slb96hz";
+"biblatex-apa-8.0"="3grx9ci8fpg4x673kb74xyy4vwfwrv8x";
+"biblatex-apa.doc-8.0"="7rvsh97frkac4cr9622if48bhj9myk65";
+"biblatex-archaeology-2.1"="fwk746qhhpvx6cdwnlpr9lsk4fz2p6k5";
+"biblatex-archaeology.doc-2.1"="ci6qj0qllffk6xbdwddhdv7i3fq0jip2";
+"biblatex-archaeology.source-2.1"="g4xg5j30gj6qjr5diqxw4j6wn2p7y3xk";
+"biblatex-arthistory-bonn-1.2"="298lp84p62rlsin8y7spz0ig2g8wla3b";
+"biblatex-arthistory-bonn.doc-1.2"="bkssng4czmqvimlv8f2bdh4sxdrag13i";
+"biblatex-bath-3.1"="yqsh8dki8m1vqfsgp581sg1603dia6wr";
+"biblatex-bath.doc-3.1"="m2brk51j4svs62zligpih1cmbmqbx9f9";
+"biblatex-bath.source-3.1"="ph4vmzn2q8a4g5bla9jqh46yrq9awql3";
+"biblatex-bookinarticle-1.3.1a"="bnx6iravlnrkkyqb3ah21p0ikq00ab57";
+"biblatex-bookinarticle.doc-1.3.1a"="6shjhb1lajkivsh3mrr2whli5hcsb8b4";
+"biblatex-bookinother-2.3.1"="r1bfwp8rzwmkbn47yi7m5lv5z4q439ch";
+"biblatex-bookinother.doc-2.3.1"="98cz0hzxvjs7qvc25hj4snm2cy6xqw9f";
+"biblatex-bwl-0.02"="0a11hlav9gsavdisyjckvnrxkkb4134w";
+"biblatex-bwl.doc-0.02"="b7ddxvcabp9qd88mzb6dxvw7sz8dnqfq";
+"biblatex-caspervector-0.3.3"="lpdqh2pgsaz1rm3zkpm07pgrac1hqxpn";
+"biblatex-caspervector.doc-0.3.3"="3c2lhsgv6ywx3q48iw2wc39ib9c4rgaf";
+"biblatex-chem-1.1x"="83hmyr4xgjn1g1zfnxhlzjlhgicd6j0j";
+"biblatex-chem.doc-1.1x"="dnhi32pmha9nzzngd4dqx4mmxdb3an0x";
+"biblatex-chicago-1.0rc5"="0m7wf9glvcqm20cfn6xgpciz6nvg8vib";
+"biblatex-chicago.doc-1.0rc5"="zr7fqjvzg0i8nmzldwsidq8r58xcbhlx";
+"biblatex-claves-1.2.1"="yq5s9plvimz4w9san81swl08g2v6pa6q";
+"biblatex-claves.doc-1.2.1"="36qjs0m893389s9wkw5wxai04qp8zxs6";
+"biblatex-dw-1.7"="9nf2hg43q6if3v5hdrfxnpbdww7y06jv";
+"biblatex-dw.doc-1.7"="ppry56vc44c86m47r1z8mq9s7fg77n8m";
+"biblatex-enc-1.0"="ccc2f3rnf7kyavb3r2hmah6pcfl1xivg";
+"biblatex-enc.doc-1.0"="b54x1g0296ln6lkw1zvlbmshhr93vg7y";
+"biblatex-ext-0.8"="nz7zmq8xw0s63rvg6qz7y3mbxybfzlnj";
+"biblatex-ext.doc-0.8"="y8q3dr3l9ld521s9q748pd3qf22kki2l";
+"biblatex-fiwi-1.7"="xwb00mw95l90bba4fc31kw62p43cxjz1";
+"biblatex-fiwi.doc-1.7"="y5hpi0gwp2s7hgqir2qw2yam9l3aqzdw";
+"biblatex-gb7714-2015-1.0s"="349q48k7k21nwy0fkkha7jjgjkyygcqa";
+"biblatex-gb7714-2015.doc-1.0s"="x5gybphqsrbydy3lp2vkdfzcfacxjlwn";
+"biblatex-gost-1.17"="db6rrz6vh7bhn8mi21lqii2r0ha8ii26";
+"biblatex-gost.doc-1.17"="2n6ghdccgmqgpd0rj53zhaja1p4dimd8";
+"biblatex-historian-0.4"="xp6r6a37ibm9fhdc95b2v3x5kgyz26c8";
+"biblatex-historian.doc-0.4"="6280kicfk2n0hwp03pyhl29ljdg911hb";
+"biblatex-ieee-1.3"="sm3ssfjjdkvmnbak50dk3rs1pzh12dba";
+"biblatex-ieee.doc-1.3"="pv4yx2prl0xzk7bbnj03i3blc5n7mpkv";
+"biblatex-ijsra-0.1"="179hh36v47xfagjwp5vj3hczc18jkrgf";
+"biblatex-ijsra.doc-0.1"="x3js5mb545xapavsqq4phml7zqiswiki";
+"biblatex-iso690-0.3.2"="y5032mfrc8djxnwsawcpa611rpdhmas3";
+"biblatex-iso690.doc-0.3.2"="rsv82pgp6f8prdw2yqw6zw7q94wk1sax";
+"biblatex-juradiss-0.1g"="0smwgi3vg97aiy6w8ya68zmaz711drlp";
+"biblatex-juradiss.doc-0.1g"="d4dp9hld95b70k8b5qxlmvcgcsxpv0g8";
+"biblatex-lni-0.5"="hqp4whkb7d4h71kdc8gvqjrrr12f6dda";
+"biblatex-lni.doc-0.5"="z9pj0sxkl3ld3hq89bnlllx1522rv3kn";
+"biblatex-luh-ipw-0.3"="83gar343q3h1h96h8lzs2bmsp1ba82n0";
+"biblatex-luh-ipw.doc-0.3"="yxcknwckw9s58qhrbdd70jz5yrpnyip2";
+"biblatex-manuscripts-philology-2.1.1"="z6sn2zg9ahldf95jh3kpzbagzg6szynj";
+"biblatex-manuscripts-philology.doc-2.1.1"="8fv3b9xphj57awnyfjpz2prn1lr9i5jb";
+"biblatex-mla-1.9"="1m10jmh42x7qahq16bzi2rwvv7j7biq5";
+"biblatex-mla.doc-1.9"="f6b9nj6xj93vikp4agvkrjddrrgfvjc2";
+"biblatex-morenames-1.3.1"="vbcnaicg2pa0jrqd170cs31wim08yk07";
+"biblatex-morenames.doc-1.3.1"="ksn965q79yv6badima68frbgmycjz9pn";
+"biblatex-multiple-dm-1.0.1"="6c7h8i04ksazrq2lbc6hbpcxkjdvih07";
+"biblatex-multiple-dm.doc-1.0.1"="j1hb0xn9gz6mywx018i4rq4g5xwi7af4";
+"biblatex-musuos-1.0"="dj5nsyf90mbi4dlghyh8aklqr28jvx76";
+"biblatex-musuos.doc-1.0"="ypw7naafkwm22kfq1hd4b0z665g4jz9p";
+"biblatex-nature-1.3c"="wjgvlv71qv8q988pc8xnffzx7gfk1xl8";
+"biblatex-nature.doc-1.3c"="dqwyqgdszfmpj5jmpwfx3607hsgp1s3a";
+"biblatex-nejm-0.5.0"="vybm8b0dqd5xyw3x6wp5xmq3dvl4by1k";
+"biblatex-nejm.doc-0.5.0"="6ppfzm4xdys6akhzc300kfh31jg49hlf";
+"biblatex-nejm.source-0.5.0"="q9s7ml5f366r7v1130brjvx20c4bpy6y";
+"biblatex-nottsclassic-0.1"="gyisgdfsns506vcbhyr7a20mnbhmldr9";
+"biblatex-nottsclassic.doc-0.1"="mswi2valgb31i1whlspd2mxvfcs1szdh";
+"biblatex-opcit-booktitle-1.9.0"="3aspv5b3a0lpif4wksanjq3fqclqkdij";
+"biblatex-opcit-booktitle.doc-1.9.0"="sz4gb2ahn58y76cl92hpap7xxg0mg0y5";
+"biblatex-oxref-2.0"="50cq5z924lx7l5i6p5di5qy42m0x6sm5";
+"biblatex-oxref.doc-2.0"="vsrcdc86gwn1iy74117lmdxs730f8ijj";
+"biblatex-oxref.source-2.0"="hxsvlk8vqcv7m52lycq6gcg5v7kay5vn";
+"biblatex-philosophy-1.9.8a"="kha09gq8n5db4fxh2w6s5690vms39hlw";
+"biblatex-philosophy.doc-1.9.8a"="3m8nl72q1q3hfv3xxdj978pmxjvn43s2";
+"biblatex-philosophy.source-1.9.8a"="3102fdih2bxplhadmwvi09lns9agflcz";
+"biblatex-phys-1.1a"="02hwhka1l116g9dzzj8yypq6ym4x8jb1";
+"biblatex-phys.doc-1.1a"="ys5z5v2rwqq0y2rs9n9hkgcsqc31cfar";
+"biblatex-publist-1.16"="jz1rnnnqx61jc88ksl536sldn2sc066j";
+"biblatex-publist.doc-1.16"="yikna45mkm4k222s7kpgs827q28al3vf";
+"biblatex-realauthor-2.7.1a"="6qb576bh9x616f02msiq3xz83xzaa047";
+"biblatex-realauthor.doc-2.7.1a"="9pbd2aixmwj8as9lrmivkkfl4081820q";
+"biblatex-sbl-0.11"="kd461qdagb93p72av0ffqpy6747yz37k";
+"biblatex-sbl.doc-0.11"="6y9nz59fsqw1mhr6f3pg6sfqasjpllsm";
+"biblatex-science-1.2"="7ql42aav0jqxx7zdfd3mavkbv14rwq7n";
+"biblatex-science.doc-1.2"="y4vhwv5nybp628i852dmq61wqccqpgvn";
+"biblatex-shortfields-1.0.1"="ji0p9w4dzyf4mi46nbcpvswas9r40xij";
+"biblatex-shortfields.doc-1.0.1"="4lq9x8wydvl7vmnl7wvz3x3zarnjgld0";
+"biblatex-socialscienceshuberlin-0.0.1"="63ccn3japdafc8mdxncldds97zvkwa64";
+"biblatex-socialscienceshuberlin.doc-0.0.1"="08n3z5lxx9sjrlwf747h9z38a1nk1wdp";
+"biblatex-source-division-2.4.2"="kdxm789jnmvyzkx7pi9983jq25p30iib";
+"biblatex-source-division.doc-2.4.2"="4j6h8k98v95n05lzfzp8804gir24vbmc";
+"biblatex-subseries-1.2.0"="v7rfg6wqkqgzm8fwrg0ncwinjzsibcdf";
+"biblatex-subseries.doc-1.2.0"="hgqxbs3qjqya9pxs1spylh2m1clfg5zk";
+"biblatex-swiss-legal-1.1.2a"="lp3jw955jpyfjyn6mp6wna8rqwbhsvfj";
+"biblatex-swiss-legal.doc-1.1.2a"="23bam0vm3zqrcj1cd10g8bml0jsyvmcq";
+"biblatex-trad-0.4a"="56an46jjpvfzrxsif262x8zm81m6ly4i";
+"biblatex-trad.doc-0.4a"="i3b3iybys9x78z52bal216qi3p6xr83z";
+"biblatex-true-citepages-omit-2.0.0"="y7mg4jqb3fl9mzy93xcpxz3y0l5fw3kc";
+"biblatex-true-citepages-omit.doc-2.0.0"="7cxbqdyazdfp0masgk6a31rr3h9606xd";
+"biblist-2019"="b565jl60ysccd5qkzgidjb188i509y9l";
+"biblist.doc-2019"="50kjqxwhdncn09c7cx0abkcihvhfzzpl";
+"bibtexperllibs-1.5"="nnb90d3rqwa1vcc92fmmbnhs7di0rkgv";
+"bibtexperllibs.doc-1.5"="mzvrc7zyrq6agqb5vhxy743brp57yf4j";
+"bibtexperllibs.source-1.5"="ailmqz0d71gscxa584pkb6jpvvzish9r";
+"bibtopic-1.1a"="r3rbv97qik2ikmkp3vx6srw7qf5v704c";
+"bibtopic.doc-1.1a"="anrfs022bvwbfwsm05hxl10zgwckidn6";
+"bibtopic.source-1.1a"="s32v3bwk7a1aqfkmp1scaf812x6ra9rx";
+"bibtopicprefix-1.10"="88rj42z15zlp4x439faf8x8qm062vqmw";
+"bibtopicprefix.doc-1.10"="km3hfa44kxwjbf0d1np34vsc0n7qkn9b";
+"bibtopicprefix.source-1.10"="9al2wqnk8affigq30j4zb70ds2hgzqmd";
+"bibunits-2.2"="vkahqz7zjn0g4dkpffvg8rfhjlynvmnf";
+"bibunits.doc-2.2"="d6xcf9xdkabjg3jrnyklla7kpbylrg61";
+"bibunits.source-2.2"="1hxc8yqjpri8pn512pfvcq7b2m9qnwib";
+"biolett-bst-2019"="c2iw962bwa5815qk2sbhhqjd7z4ygmns";
+"biolett-bst.doc-2019"="7w39z3hdps980l2g1yqbzy8384w4vbqr";
+"bookdb-0.2"="b4mqk50dn86zf30w2z8953ms8m8v9lrs";
+"bookdb.doc-0.2"="y5sdn2fijycnyx9is1cqc5vx6zkyav62";
+"breakcites-2019"="cvqm5ljgdl47idyjvfs2hg98xmkscfj9";
+"breakcites.doc-2019"="jjqimy63648q6n4mzlwrd7p723m09cbw";
+"cell-2019"="qlg2sy9fj9cv6c8jbdmwzysadl8fhw8b";
+"cell.doc-2019"="61a0456g9i76nxwhpv18fw532nimk2l4";
+"chbibref-1.0"="7d51sy03z9ww5ns8x0mfiplyk00dgb00";
+"chbibref.doc-1.0"="xyypa6w4gx297hpp1ixg8g431rz436qf";
+"chembst-0.2.5"="08b5a38p2x2xgv5nw1ibi0xpc4xqixnn";
+"chembst.doc-0.2.5"="wgbb4bcl51wnixp4rb94qqqn880mxm7f";
+"chembst.source-0.2.5"="360yyds5c6mbcsm60mm3jq8xfxcpnw5v";
+"chicago-2019"="k9y76g5a4nfy88igklw08n27zvnnap2b";
+"chicago-annote-2019"="nyasy7sal5vikd1jysdvhg0ym7hs6q0p";
+"chicago-annote.doc-2019"="8qhd3kj016s9laavhg1wvimy4325zz0g";
+"chscite-2.9999"="yc7v9v66md3dy5k2gjswzh58xzxdhwp4";
+"chscite.doc-2.9999"="fbcykh46rifs4kvn728sav04fnshr6br";
+"chscite.source-2.9999"="vsii846cdlrd9fdmf4npwy8jxh0fcafb";
+"citeall-1.4"="q68vpb470x12izyjbf7ax4ni71hvwpr4";
+"citeall.doc-1.4"="246v29kz1slb8m3ib5rhnp74lhyn761j";
+"citeref-1.1"="hs7rw9cynm2zbr8s7455l1hakvr2nz2r";
+"citeref.doc-1.1"="fifrx8d8fq9msajvpg2wwj7xhv6l4h20";
+"ae-1.4"="zx6mlxrdhfvp0a5ql61jhlj97pcxazwz";
+"ae.doc-1.4"="pgvyvlql6hncc8bv2wdf8ja6xxqjjqs7";
+"ae.source-1.4"="jzwswwwsb988mvhiiyb7p43g33985n8p";
+"amscls-2.20.4"="hjr4w21h3fp0y6m5gb30p6f54ybv0l0j";
+"amscls.doc-2.20.4"="zyf0gsqks7yvszlngwzjbjiigc0943cd";
+"amscls.source-2.20.4"="8lgim0r54srk961ys2q7v80dq5w04i9b";
+"amsmath-2019-10-01_PL1"="56ydwy656jmvlrqnksw6v0v56xvkwlmd";
+"amsmath.doc-2019-10-01_PL1"="4g50843qsxgdyhg4f9iwz2v46332p0bm";
+"amsmath.source-2019-10-01_PL1"="n2gqxbxbnjrrlgwqsalzkg701xg29lxd";
+"babel-3.34"="wadnjmg9fbalgj65app4588ky6bv5yr8";
+"babel.doc-3.34"="adhzabyv276nc6df3xrid4kb7ra478x0";
+"babel.source-3.34"="03jmz4d3836jrhrbrgzbkbl7a5yhghsb";
+"babel-english-3.3r"="lrsz299wwvr17sshfjvsvrzs0s9y2acs";
+"babel-english.doc-3.3r"="y7rp46lrpxsp8z1ridc6msxnbb008k0c";
+"babel-english.source-3.3r"="5sxvprjfcqhw6xb3mv3b0smp2gsckjs9";
+"babelbib-1.32"="0jpv3d5s8inkpg1nyz1b8m80aq6simwa";
+"babelbib.doc-1.32"="cixpp9aiajyjxj23gzvxw94zydsxd3az";
+"carlisle-2019"="wlkxgqdq20dlbinabdia2n1af9nhz5vm";
+"carlisle.doc-2019"="i2mg4zqlcsipqcz4wa9y9p89nnfzvavf";
+"carlisle.source-2019"="bvla3z6fd0m46k365s2fsbpb5ypvb3rv";
+"colortbl-1.0d"="4lw5iwy35py4w2arbznxb3r9yd443z68";
+"colortbl.doc-1.0d"="45mzaihfjzwfv33k6c01d1nwdyp0agsc";
+"colortbl.source-1.0d"="9val9i06wbmvv4xaqp79ci1nqckswcbp";
+"fancyhdr-3.10"="0jn1ivsf29hmmclhxbl1fc2gmglgwcq8";
+"fancyhdr.doc-3.10"="dndsyllh1bb96p5acr7dics7831g4pax";
+"fancyhdr.source-3.10"="xg41mjxhd1vajr1n1s8vzvggkf4zi9lz";
+"fix2col-0.04"="4lr11c6qqbsmm3jixayn7jlyikh65b83";
+"fix2col.doc-0.04"="k9hlwbz12vqc446y1ydy045j7c29yzng";
+"fix2col.source-0.04"="524zn5yfy3zwy70m11vch4ri5xwrgi0p";
+"geometry-5.8"="3xdzw74y7vizrlzxrcb5xbqzs67v8g02";
+"geometry.doc-5.8"="w0ldwyyv86y0d8ghpg9x603ldmqa33gw";
+"geometry.source-5.8"="x0dgg7kpn2apxabf2clw02ba8ci83pvk";
+"graphics-2019-10-01_PL1"="2ba5bkbsx0cr555yc2fdg8nya9y915kv";
+"graphics.doc-2019-10-01_PL1"="yibgggcnv294s7f6lqyvby1psd6v15ry";
+"graphics.source-2019-10-01_PL1"="25rd6d1klffzzih3anv4jm49xz72p9g0";
+"graphics-cfg-2019"="j73na78ajl4n50wn2is5wvw7mf27da86";
+"graphics-cfg.doc-2019"="nzdjyk00lx0xhflm04d2kmyn5ya2v487";
+"hyperref-7.00a"="jbr8bq1504pmig2vd31bckicwm5p3g0z";
+"hyperref.doc-7.00a"="d177im8cpmc0hm6084lrims8zysbchlq";
+"hyperref.source-7.00a"="acwybgz16b0h3b9arhxrqlgg28phizfs";
+"latex-2019-10-01_PL1"="pjjiksxcbbrg4fwsqzj7xxy1g75ma8wk";
+"latex.doc-2019-10-01_PL1"="ibfpbbkvvk682gczxcfl3586kc11wyp1";
+"latex.source-2019-10-01_PL1"="a0x0c407wv20dx8dw2hgwzwl89mh8p4n";
+"latex-fonts-2019"="pw97wy7b4hhzm28r0wl44lacn7nx41ia";
+"latex-fonts.doc-2019"="mv9ivpdxgyjj92fq9141bsw5s306mg83";
+"latexconfig-2019"="4vggm9mgi3pyfk3rqqfmwhdcp9hcva4z";
+"latex-bin.doc-2019"="sklvy72k0l7x05rnj2hc4dwgjqq5jf5v";
+"ltxmisc-2019"="lf6x6jbl1d3i77wb0dg7lmy26qxk7h8x";
+"mfnfss-2019"="52p8xnxca0ypcxbbjakx42mljjwv5jjj";
+"mfnfss.doc-2019"="0c2hn0h964j1c0kzn0aq19cvff0n87hs";
+"mfnfss.source-2019"="829y6cng0z45bdsb2vdrs4wkq2pp0cxz";
+"mptopdf-2019"="ppsa0jcj7d7gi35cp2y5pbw6kqgkzfac";
+"mptopdf.doc-2019"="0v8v04k9s2i5yxdl77l3rnjhg0k628bz";
+"natbib-8.31b"="c4fyqph06vxqm37z88r31q84xz5imcnj";
+"natbib.doc-8.31b"="fsg1kcjvbp5hfn9h8lwhygnil9wr7awg";
+"natbib.source-8.31b"="c4b7bqivps74v8286lf4j36p551jhnzj";
+"oberdiek-2019"="jjyf8yvabnnn9qq9p5984803gb1s1wc6";
+"oberdiek.doc-2019"="qzviygm5dqka4fphpj2s6pxsrllr37a4";
+"oberdiek.source-2019"="3jha5akdwhi1998gvg0hk5kbk0f5mp6b";
+"pslatex-2019"="7apd53ad70mr9pf8ja87iz4cfm41qs9p";
+"pslatex.source-2019"="cqc3yah7p9cgbbsj6var19b4xzyqj01l";
+"psnfss-9.2a"="a4gfps30ywrjdah9m5dknsv5yl80h0gz";
+"psnfss.doc-9.2a"="pbiaqsf1gqrwic9pf499k89aw757wr9m";
+"psnfss.source-9.2a"="vi285d52bbvq01x4yan9md3cck4dc1lh";
+"pspicture-2019"="siqi85kfmyg91cf7nggs71jh38g2aicl";
+"pspicture.doc-2019"="h26v6akzzgg6hn4ay096fvg2qw6l2ww8";
+"pspicture.source-2019"="fclpkng5q7dhd1vfzv2031r4l3f3vh5y";
+"tools-2019"="c9058cqv0a32gnz32nf5gy3998jcj181";
+"tools.doc-2019"="pysraqwxj1869p6dhlwj72a5vkxlvr10";
+"tools.source-2019"="q75n910y7g8q55w5z5zpizzvphnkrk9n";
+"url-3.4"="vf34zjwlv43kcw53sdla9052x7x0kn7y";
+"url.doc-3.4"="ii3z3l7xkmrkxb8dkgk6lcqyb34niirc";
+"collref-2.0c"="xxcnjj8qnbb06zkmh5kqysdm6k5yf4z4";
+"collref.doc-2.0c"="5a9ns23lv1n780ll3kp969dhi0mx93gb";
+"collref.source-2.0c"="7msfby8bxs89i87jiibpbnp97byjs6p5";
+"compactbib-2019"="5365y0lxziirnp7rraxwbcksrky9hr1m";
+"crossrefware-2019"="qb2vwvcmvb0xmsj75vxgd7fn26c5npmf";
+"crossrefware.doc-2019"="69qdw8b3xrqnydxih94sjpj7pd8jpy5x";
+"custom-bib-4.33"="9vqjbilzlsqg3f609hnz27pwmrl5gfg5";
+"custom-bib.doc-4.33"="nz1gxi8ixypxpf4cv7nilabq1ivr6fiz";
+"custom-bib.source-4.33"="vmak3xkin0hmg92mmpxj53dgs2f2yihg";
+"din1505-2019"="dc7lv2c8zid1c6pklllsiac390hx0v4c";
+"din1505.doc-2019"="fhdc3badjmz3zylmgahy34fbzjgkss0m";
+"dk-bib-0.6"="yvbpqypgxkh6i47yvkk0cp7qsfy083gr";
+"dk-bib.doc-0.6"="px69q4pi9444kwmw6fpmajvdwl8ivw9i";
+"dk-bib.source-0.6"="1jmv0pg8x913y6y0xjb888s0zg91iw1l";
+"doipubmed-1.01"="wcw6jjj2y6mikmx8a4if14277szjqzak";
+"doipubmed.doc-1.01"="yiws3r5cbfhdws0s74sn314q4iq4hxjf";
+"doipubmed.source-1.01"="mz2ld43x7sp8np0qmcs86p5lc09nl4dr";
+"ecobiblatex-1.0"="ikxp3jlzlsnc7jh7vcxcfq8wvpd5r8ll";
+"ecobiblatex.doc-1.0"="y5hifg3r0xkgv6zklw7l9j7shl87fnf0";
+"econ-bst-2.5"="dfb5v9f83gkb7h53xd3iig951ay2aw6y";
+"econ-bst.doc-2.5"="px5fik2wrgkc67v6ddja3c2f5hrl0wlx";
+"economic-2019"="xw85nd7v6i1d2ma0airnc7bwf1fdsipp";
+"economic.doc-2019"="pv3irnv3gj70q22ac3kr858hac50vrbz";
+"fbs-2019"="h6ghp5i14cqy46hzp9i481c8gvk2ddza";
+"figbib-2019"="imp65i6ddqyw5xck7k6gzb976glq9xj8";
+"figbib.doc-2019"="6v3sj56vg039mrm7kk71wdjhp04h1rf6";
+"footbib-2.0.7"="xhrwnw5kvs3rxp32a8awv8ma7098cv6h";
+"footbib.doc-2.0.7"="dzyra0rwf5hl2g6f7c2pw88d78f7yls1";
+"footbib.source-2.0.7"="xj3agjgzfnwnfzzbzk4xjfk90fr1a6fm";
+"francais-bst-1.1"="zz8wcr2ymwd7m721qr94l1k799mi9cia";
+"francais-bst.doc-1.1"="qmq30903zrvvw6bprngklx5pwq9c1cqd";
+"gbt7714-1.1.1"="m93b7kdmx9qwas372saxfydrnh2cz21c";
+"gbt7714.doc-1.1.1"="2wxs8msr5n51ai13g23ly82ilrgv28w4";
+"gbt7714.source-1.1.1"="iz3wimzdq8cp06fjzbfjf08a3ygrcah7";
+"geschichtsfrkl-1.4"="94vlnvvfy0py3ig3mjjizxbnp3xcnpv6";
+"geschichtsfrkl.doc-1.4"="212pcrypha38lk3nri43fvj12fgjlqzm";
+"geschichtsfrkl.source-1.4"="ak3n8j6n1wx9pgawvyr4diklq9971wx1";
+"harvard-2.0.5"="yhk8zvlhgd1knzfdndba31whwj7ixh1j";
+"harvard.doc-2.0.5"="c3jps721d0cndqjqgqkhcz4n7xvaj1f2";
+"harvard.source-2.0.5"="kjg78fvynjjna03hh2xzcrqvsm8d9yjw";
+"harvmac-2019"="30iiq3zikvmyy87j98knxbc9iak232bb";
+"harvmac.doc-2019"="3q1j6s2rdz18fg3hknp7ifyzixgmwr8h";
+"historische-zeitschrift-1.2"="6zli1x9hz1dsy8p4hpi9rdb0hs35vka9";
+"historische-zeitschrift.doc-1.2"="y76j031x8zym5i6sqr0r67ws0z49q306";
+"icite-1.2"="saan1djq4x1i8zxs7a2wvf8g5qdkb7h9";
+"icite.doc-1.2"="m5qw69c6523g1ix7ik4h1kqpk2w6ldgs";
+"icite.source-1.2"="c2ziq7jww339p059lvgc4ba48k93nlsa";
+"ietfbibs.doc-1.0.0"="mqqb9qjrk1lg7w85w8jbhizmh1qh4zqa";
+"ijqc-1.2"="ry2ydiqc71zjfkb46l4fvlxa1h6wnq1c";
+"ijqc.doc-1.2"="zz9ai19qd2rxvpw5kx1k1rd3ndndjv6v";
+"inlinebib-2019"="gkr44f3f9m92bx42gcvwgzclbjya5gdm";
+"inlinebib.doc-2019"="bpfx7h4w0zqr7xdxn51glllzf20qj24y";
+"iopart-num-2.1"="92jbzj605pi9chj3ymfxm9ii2dh62haz";
+"iopart-num.doc-2.1"="smix69mc1n89q45nw3rl18lasn2c2kwa";
+"jneurosci-1.00"="r5k91lza98jn52s8fmgrbclslb6zps08";
+"jneurosci.doc-1.00"="z01ga0ccmahx9i6p2bvvl7mr8676ki7p";
+"jurabib-0.6"="xlxc8i2x6ddydrb6n8myqkh0j5acn9y1";
+"jurabib.doc-0.6"="jgf4mbfd2vy1ihxa2fm7h90s75wp8mjz";
+"jurabib.source-0.6"="2ihyirxdbfz55js8nb8fjnzj4fwr5fji";
+"ksfh_nat-1.1"="9rsf0xfzd2am2ap7skhj4nrs6nkyxpp7";
+"listbib-2.2"="h7sl4g92wc0h56k7a13crhnj9g0xlb3g";
+"listbib.doc-2.2"="jgdniqxy4x1awiyls70z9lsycy61fb0l";
+"listbib.source-2.2"="266hzszszrdwa0x6hk5xrz9gjs1srsb8";
+"logreq-1.0"="4kl4g8kjy4zch0rdn8aj2mr5yxpssdc0";
+"logreq.doc-1.0"="8s7ly9p9m270mhhh16gv5p71r10cpnzv";
+"ltb2bib-0.01"="mid475rg33jg29rxq0ci49vq4y81j4ng";
+"ltb2bib.doc-0.01"="7k2q8zzzhf5zf71fw0yinyghlb1kwqy7";
+"ltb2bib.source-0.01"="8py2zhz04b0hals44ypv67m2c71b1j0p";
+"luabibentry-0.1a"="lm4x9gqyj8ha0cjwmmy7h4yffnd8wymx";
+"luabibentry.doc-0.1a"="psn62xnv0l494i67jzsc0sbij0r2kcvb";
+"luabibentry.source-0.1a"="9l96kjwd1kwkj7rjcrlq3vcyiylbawrl";
+"margbib-1.0c"="315vswcfl035s528hmj5wvl43iar5d0p";
+"margbib.doc-1.0c"="lix6xbc2in8r6cc1yvdb565nky1f6jq3";
+"margbib.source-1.0c"="gnjk0pwcdim1mnbsyq9mmkmrqw75a771";
+"multibib-1.4"="6sjcmriv5y27z54i0q6nb4c0wxyqc06f";
+"multibib.doc-1.4"="gwyxcbw8csmiyid8ck2sjgkq9hmx0k6m";
+"multibib.source-1.4"="kp5q2hjb64a1vhj4zbb0ah0c9c5cc0xw";
+"multibibliography-1.03"="3svp5l6al4k7adk99d6fcy7m54qbfbqy";
+"multibibliography.doc-1.03"="1bl112qsviy7jzhm1qdvn42x0lvcnjkd";
+"multibibliography.source-1.03"="65bvyr4gr7sdwhsraq9rmbv16d4fi6qc";
+"munich-2019"="0a6hgpvjyd8hzvmrf5bjc6rniwj39bx8";
+"munich.doc-2019"="22c6rhm479c1gg7df9mzza2vl7jgb3ij";
+"nar-3.19"="iaann8dbnvignc32m1wnlz4j77i7ngx8";
+"nmbib-1.04"="mbz1wjyaxsx3cn4wymvz4w9wf10580da";
+"nmbib.doc-1.04"="s6bbxc8lyp7kbrpsi0i4jrvda00260ks";
+"nmbib.source-1.04"="x0gvyn54csgywd7wlmbi0c8djkwrp4xq";
+"notes2bib-2.0m"="18cgk3w262q3ji8c2safphbnv63yh7j7";
+"notes2bib.doc-2.0m"="3ivpnsxqwfsy5rhrc5wacl0b6va2sva1";
+"notes2bib.source-2.0m"="75wz1scfq0j5pdix1ksvwh90y5j3dzaf";
+"notex-bst-2019"="x4042ry48i6p1qr2l4yv0d52x4wmjarg";
+"oscola-1.6"="vq11bym9gl0s90nawvvlvhifb6z4mq1c";
+"oscola.doc-1.6"="cg73zf6fnga143mk6yjxpxmv77kv76lz";
+"perception-2019"="xpljy8xycf22akdj5dzzzmcb34zx8d1z";
+"perception.doc-2019"="sn4m1gc1s04h1crw3gbaahbxa6b76npy";
+"pnas2009-1.0"="k4xy9dabg8i4mf18317wf8mp3hrlpmqy";
+"rsc-3.1f"="4hhv7zw4v3w8sslxwj14pk4azil1cdhh";
+"rsc.doc-3.1f"="d20wkd2qw8dabh30gdpasxqacn193f1b";
+"rsc.source-3.1f"="rfsxjn597ylr3m2vl72dh7fa8x2a08yw";
+"showtags-1.05"="hbxk7ijniaffjnk02hkjwgw8gwgnx5qb";
+"showtags.doc-1.05"="q22k5ckq0q4228ssvqnz9n139x32a5iq";
+"sort-by-letters-2019"="4m8cm6rnhgsc40liy2yhfc4r76zpdnsq";
+"sort-by-letters.doc-2019"="3z4kw7hvnjmp7hlfjw2gchraw69zyx09";
+"splitbib-1.17"="az1n021wdajs8dc0q93wgfb1r0jcr2h2";
+"splitbib.doc-1.17"="qsb89h2ch89qhbxir7f90xx5sqvgm1px";
+"splitbib.source-1.17"="c9m7hp7fh86qj53qwaqxh8xj8yf3gxdy";
+"turabian-formatting-2019"="dcm9mzg25w818sqjfhd7ih3azvydv0qy";
+"turabian-formatting.doc-2019"="2qhbgk9x91k0r4ar0hc3jydw1raaf3z0";
+"uni-wtal-ger-0.2"="i4nr7hq5gym5rcs2pc43qclci7jy9y4m";
+"uni-wtal-ger.doc-0.2"="a4r7w5m71h1kfgzxgpmb84hndnhrxhhy";
+"uni-wtal-lin-0.2"="8cdd4qcy3i5bvf25nn89kdaqph3a6fan";
+"uni-wtal-lin.doc-0.2"="cmaxr111gp38f9s5n42lg66c4i7iyz2l";
+"urlbst-0.8"="sq9q7vzdfgmx1j16mdbimczajjk985pa";
+"urlbst.doc-0.8"="j5y3m03lbs32i9w2fvzm6bnhmchgs4s0";
+"urlbst.source-0.8"="i907zv423gy5ic3wb6qcyzwg8i3zfcki";
+"usebib-1.0a"="4b8sv3fknxfaz9cgnvn3l5wf9c8c76wx";
+"usebib.doc-1.0a"="ba1nqv90zkfzi8n17xlk7rkx2s92lkd9";
+"usebib.source-1.0a"="967j287dsb1j4wa5k9sxsv4xp7194q3b";
+"vak-2019"="7ar45am5q9mhv8liz1zvix9wgcwqgjhl";
+"vak.doc-2019"="sr1gi7csll74iw13j24r1hdwn3gql9ak";
+"windycity-2019"="d4xmbwf69spcn35mjmccdq37gszl3nyc";
+"windycity.doc-2019"="0vshfrxbpfndxsljkd1qghkinvxhyli6";
+"xcite-1.0"="fpgsqqg3rliap6chn99xzlj676ll25hd";
+"xcite.doc-1.0"="wvhx1d2wkws7fcrplh55v9fsq1r8a3hw";
+"xcite.source-1.0"="8n5kfjr7xfjicd1hw6hlhcrn8dzicp5q";
+"zootaxa-bst-1.0"="78lffb7mvla2yryr0lmljd5w4pmakggp";
+"zootaxa-bst.doc-1.0"="bx9v8rj2nlbdapknqk8wigrq9jdfjggn";
+"a2ping-2.83p"="6m6vil4rjfwnkgaw4apxfda97n2nx6g4";
+"a2ping.doc-2.83p"="v6k8vhfmq1f1k71qn8651v86mid1z4dk";
+"adhocfilelist-2019"="l8ayz7mqaa5lma2bvqb2brc879y0viij";
+"adhocfilelist.doc-2019"="gm20nhwq88s1cmch3pcgkqnyahb5gnri";
+"adhocfilelist.source-2019"="3qx23im0z07cnk2bd5vrskl153zxy6ff";
+"arara-4.0.6"="qk5dq5f0il52m1gp8ckd7ilqbmpkvfmj";
+"arara.doc-4.0.6"="rvkrcair91scrk763igaj9mmi23n5j7x";
+"arara.source-4.0.6"="s7rlspqx9dqsbixbnmnaz9hh7gwkmkfi";
+"asymptote-2.49"="ka921kxzvyq3hi5frln4hh7qg1kfgch7";
+"asymptote.doc-2.49"="b1bh1i57rh28a4mdjx9bcplhb1qgd5cg";
+"bibtex8-3.71"="sri58vnydvfpv947gmlxd1s3c2056fp1";
+"bibtex8.doc-3.71"="cffvi0y0lv801yj5d8v9cr2d4x8gr0wa";
+"bibtexu.doc-2019"="lkrsyq73l14mmcviv2qwa3hrwp0nm793";
+"bundledoc-3.4"="3r6cx7n6wy995jd9hpg2n4qkbhwmnyfi";
+"bundledoc.doc-3.4"="cd59kzd2v9pq2d058jx5pxkcjhbvbrr1";
+"checklistings-1.0"="a2gvh85pcmrc82wq4h6n9ycqj86z9f8d";
+"checklistings.doc-1.0"="ymkplhp7331fs0kq4qcpmh9la0wxj5lq";
+"checklistings.source-1.0"="8ya9yd2by50zppk7rrqjkc34ans6ffb0";
+"chktex-1.7.6"="4khiza97qvhdbzdlz7pacnr16zmi9b9d";
+"chktex.doc-1.7.6"="dmr9yb4fygjxk0sznghrfjq2yx441378";
+"clojure-pamphlet-1.3"="czmy129a09h3r5ssnlhaxgz932vmqx6g";
+"clojure-pamphlet.doc-1.3"="cha12zds1j3adykqd9d697izik89i3xh";
+"clojure-pamphlet.source-1.3"="flbrsg215hp85fn6hrpygjmdggrzx6rs";
+"cluttex-0.4"="6kz3s0g8c6jmv2izivbhvrkyz9knrmpf";
+"cluttex.doc-0.4"="mghq29dal4f8lchx76jb7jnm4qfjv4j3";
+"ctan-o-mat-1.2"="jcmhpw3irmr4hix6j1n1wk1g4wgc0nm7";
+"ctan-o-mat.doc-1.2"="f43qd3ynl7x47g4wwfnd1icsrzxj3sgp";
+"ctan_chk.doc-1.0"="m4i1vj19h48zyk9pxadfq1qrwmvqy3i1";
+"ctanbib-0.1d"="wiax2a49wa64ga9g1smf2jyhlpv2n1qq";
+"ctanbib.doc-0.1d"="arizd3ayag3733c551wvcibdvy99imrb";
+"ctanify-1.9.1"="y939628500ks8apq2qdzcbj490y0c4bb";
+"ctanify.doc-1.9.1"="dfah3y6kn3r18mjj39p13mq7y6zpalqb";
+"ctanupload-1.2c"="jmvh3rrdy0hyvdxz55gydlgsh7xzp4vv";
+"ctanupload.doc-1.2c"="38wlhcxvvpbk01sj6vhwjs9mccw1xs14";
+"ctie.doc-1.1"="zz696bci66pc2p1pkwa0ddrh7fn7q6gp";
+"cweb-3.64b"="rq96m12nzl8qip0zvafdssa1nsglq42z";
+"cweb.doc-3.64b"="2nyvzqjz5xg4hfyf1z2qjbhr1gj1pjg3";
+"de-macro-1.3"="mscrdz5y4zdxszz37dnh6kw4hmwm185q";
+"de-macro.doc-1.3"="hdmn9ds4kiqsalhx5r2l4adv19ijf5f2";
+"detex.doc-2019"="95vhzy5wyc21v8n1xjvmfbbxhw7hg912";
+"dtl.doc-0.6.1"="cb9x8v43asvzq5cppgvni86lxlmy8ny7";
+"dtxgen-1.08"="n3cwjwkf92c5zgbs7hmc9fgrwjvwky9i";
+"dtxgen.doc-1.08"="87sb4lz077jgnzpya1y1qyzakwd5j00x";
+"dvi2tty.doc-6.0.0"="9n1fws5f6glys7wwsz1ax16145wb103r";
+"dviasm-2019"="j2wkfisw3hlackcz0f498zx59z24yk0n";
+"dviasm.doc-2019"="wj8a3skfwd5i6d1hb8v3dghijlgmbmdc";
+"dvicopy.doc-1.5"="szvfihzbpfvz66w6v96nygkf7pnfa38v";
+"dvidvi.doc-2019"="hdnm6xayhr5smgch1qly5lc29wig7svc";
+"dviinfox-1.04"="zjbfw4kzwfqnvlwzvjibsgim855fc30c";
+"dviinfox.doc-1.04"="1n52la52nchv27j82lisrh8q7wygx6lp";
+"dviljk.doc-2019"="xjwvp52cq4895gsxlbv5r6048b87h779";
+"dviout-util.doc-2019"="hjmdykwbfg32ki7s27y4y8xffb4kck1g";
+"dvipng.doc-1.15"="zvsvnhcy54qj7i16j719shjx8ihhx621";
+"dvipos.doc-2019"="bb5388riin59hqxrrfnbflpvgjdass0g";
+"dvisvgm.doc-2.6.1"="vl2jk25bnzpwh16msfr5j21lv2ygvg2l";
+"findhyph-3.4"="4kc8qj2hs4hf7h25xb031fy5m9j8jygv";
+"findhyph.doc-3.4"="ivpfnjybcl80xzda2jlrplaglqhf9adc";
+"fragmaster-1.6"="r6wbba0qjxr5shfrf5ia8984dcrijpir";
+"fragmaster.doc-1.6"="vwmmc7jmhxfvblz3fpdj0saxjs75bgia";
+"hook-pre-commit-pkg.doc-1.1.2"="0rf4zqwdix7npi9g6nlcpp95mdpxana5";
+"installfont-1.7"="ds2zbs2f6kasda98jn1k8i0ym5168ax8";
+"installfont.doc-1.7"="jmwwjkliwr7wl1gyx8fzpyslscsnlqlx";
+"ketcindy-20190927.0"="pi0hx1f1ma795z77fkjigfxxvkinxwly";
+"ketcindy.doc-20190927.0"="l2xhr32r5qfpk31qb2k2qbdss533kk8q";
+"lacheck.doc-2019"="bnhws6g9ddrf6pf76i8p4r3razpiylp1";
+"latex-git-log-0.9"="samiv870lgj4smwh80l5ck8q6q8m1yqm";
+"latex-git-log.doc-0.9"="1hjp3dx0d0yhj2c3n02cdk4fdg6iv6nc";
+"latex-papersize-1.62"="c2qx25bgknw9350pi7vr5hdnnj3i2ak6";
+"latex-papersize.doc-1.62"="8w0cczb884w53zzv3dwra31zcvjh4jzf";
+"latex2man-1.29"="0c6w2zmys7mpnc5lvaix37bcksk19wq3";
+"latex2man.doc-1.29"="wclw51af38i0m17pclqpc46163wq3z6b";
+"latex2nemeth-1.0.1"="isj2xl6s5liv6q12knhl4dsyihc9j593";
+"latex2nemeth.doc-1.0.1"="qpvqm76bb09nn4s42yhi1i6lf7ji4bhv";
+"latexdiff-1.3.0"="mjj1i3wsrdhyji8ifgl01s8spm2zmf75";
+"latexdiff.doc-1.3.0"="wbi6pnbzlm15dmknl8z3xywig6khh2f0";
+"latexfileversion-0.3"="79yrcgv4lj33pavgn48ycvsd9a1x49s3";
+"latexfileversion.doc-0.3"="c6n7z8c3lzrhk2g1fn4v05l2y6299sr8";
+"latexindent-3.7.1"="q4ir39azl49h758n2nrnfnpwv4jyj41g";
+"latexindent.doc-3.7.1"="vzf97xlc626l1r171k8753m5xv5493cw";
+"latexmk-4.64a"="3375f05ip87vzvr9fcy9pnhzqm6bfwg0";
+"latexmk.doc-4.64a"="9dqh7i2fpg4nx5xrfj6vca77zh7aws6b";
+"latexmk.source-4.64a"="m32pbzkr0my5gv38jw54bancbk66r15c";
+"latexpand-1.5"="4w2x5njn2fc3pp9h2qd7lxifh7xswwxh";
+"latexpand.doc-1.5"="96q0sv1v5zn8hwaan17wd8k0gakwh9xj";
+"listings-ext-67"="zbinp0czaglig761svs0s13np81qpsr6";
+"listings-ext.doc-67"="slcbwzsy505nhjriszn993pgqlmdlfib";
+"listings-ext.source-67"="95y2zv6bcfkvqmwf6cpa4piaydlkjwz5";
+"ltxfileinfo-2.04"="fqka5xkp7758sr7hyiyy18nns1dir95f";
+"ltxfileinfo.doc-2.04"="rbqwgb89q514rih3hf5bv613xqw1gbci";
+"ltximg-1.7"="8hijfmwbnd6cjgk2zi3ik7flixy0xp09";
+"ltximg.doc-1.7"="kgggjbx84f62niwjkydqxxs7szkakczf";
+"ltximg.source-1.7"="akx09az4qpcrfp4011bpi6k52x1177vd";
+"make4ht-0.2g"="d9l9wfgfcnb67xaj1fb2k39r5g7yg2mv";
+"make4ht.doc-0.2g"="yichzrf0sy7cp9dnhscr6m2kcqfvz6bi";
+"match_parens-1.43"="hahwx0ca506ykknc9plsnrfg6fsb5rs4";
+"match_parens.doc-1.43"="1h445p7nl5n70rskvq4d10b15kb8058k";
+"mflua-2019"="zicmiqdsbqz7ddgmbwjcay8q5q4jyzqj";
+"metafont-2.7182818"="sxdr5v17hpv8g1562g06lhn26c1wbs8f";
+"metafont.doc-2.7182818"="wfy96iw7g8v6mcfmlnbbx1hix9zxhac4";
+"mkjobtexmf-0.8"="raq7ql17c3fdqqpaqbd53r0dg7kjrvh2";
+"mkjobtexmf.doc-0.8"="3cgxbgxpha9139jfz4v3478ny7yv3xm1";
+"mkjobtexmf.source-0.8"="dky5rv3xrbjqj7pg8spdjsllggpq61k9";
+"patgen.doc-2.3"="1p6bnifmajisixh6m0mar8lmzr3rd7s6";
+"pdfbook2-1.3"="j72jmp7cx48gmh9r9qadi5mqzvm8f7mc";
+"pdfbook2.doc-1.3"="yhv6d7m5b5ys1z6pzc893k62calf9s9x";
+"pdfcrop-1.37"="mr2zg2ji7gqm14zq5xsf8wk081fbdwdn";
+"pdfcrop.doc-1.37"="28jgvjwk6v7dvldqgqd4ry32ccd8avgn";
+"pdfjam-2.02"="p9l1q18vqf1yjaxxdyizz9b9rgr1kv4w";
+"pdfjam.doc-2.02"="c6aawcwvnijzmjakmlnlzbnhq0yx2vmx";
+"pdflatexpicscale-0.32"="sc7xcy0agdg458w49n72q6sd8sk8zqn4";
+"pdflatexpicscale.doc-0.32"="ria6cfi0nvviddn0gmylwcjw53v6ryqy";
+"pdftex-quiet-1.1.0"="3cx8zd0q9z19d1xhhc8rd640ifwsrjxc";
+"pdftex-quiet.doc-1.1.0"="84mb3zp9h3jnl179kc6svsd52pmx13pd";
+"pdftools-0.86"="a8nv2mqs26gb1dinymxa9kwk4baqch7l";
+"pdftools.doc-0.86"="lhw8aadv99w7zl6hqnpwpmbl9z4l426z";
+"pdfxup-1.30"="r29ka6pw53vdscrpxbaar5g8x171c0l2";
+"pdfxup.doc-1.30"="kc5qc6a8q4f8yn2xa7cbabidk9gxg6sh";
+"pfarrei-r36"="n351xhnwd12vvy4b4zv2r9cqx1crd435";
+"pfarrei.doc-r36"="bi4wqwx32x2498kr0k1rmkmslyz134x0";
+"pfarrei.source-r36"="zrdbqakfqkm5kwbpwpy5d1pqp4w5sz42";
+"pkfix-1.7"="gmnyddib832v8lxj6j0w73z2xcars3kv";
+"pkfix.doc-1.7"="r2lyi06ra63icn8b63l3hzkfv8min1w8";
+"pkfix-helper-1.4"="3pqfismv6absn1ll9jqhllmz6hnjsn1f";
+"pkfix-helper.doc-1.4"="gljfwywrvwin5fl5szfnpa095cr2r0m5";
+"purifyeps-1.1"="qmwy8zk8h0kzpsknp0430gdxq0zqj4hf";
+"purifyeps.doc-1.1"="4fj0jj42mjldhg90pkvj7bsd1b682x0c";
+"pythontex-0.17"="1gza81rq8sz3172y81zkm5lvg8193spd";
+"pythontex.doc-0.17"="4z6bswby7179xqx47n89qfzcd7sxvxg9";
+"pythontex.source-0.17"="pnzqd2k0q1nng61d2ral344q8211vfma";
+"seetexk.doc-2019"="4cw2dn59pzvn6rmhnaj5sa97vnn4qh9q";
+"srcredact-1.0"="dzxdwnn9l06gngyvaarf10h6ws8aa73y";
+"srcredact.doc-1.0"="m028dd5fqv2x9xcxq7vhdsaz2xcyxwl1";
+"sty2dtx-2.3"="irvwyxk3ggfbc8p4b8s70v5704lqmsib";
+"sty2dtx.doc-2.3"="s9qzsp01129wgi8qfh0ljxkaj9jvdr65";
+"synctex.doc-2019"="g88kvc6r9ga4mq0mgv298n29l705jx93";
+"tex4ebook-0.2c"="79p9z5smzw75qxkqv8lzaihni3fr3kp4";
+"tex4ebook.doc-0.2c"="fvyvgvr7vhz551k497y8zd3vhzf2nsaz";
+"texcount-3.1.1"="spfdnfgbcy8y8c7191pd973wmdnrgp8j";
+"texcount.doc-3.1.1"="idd45zpjjy6cgibnndxygdmljw28gyq4";
+"texdef-1.8a"="iyiqbv4h91h6qchgcddj251sas6ayf93";
+"texdef.doc-1.8a"="1d01vr68i8zcbpr1113vq1zmfkhm9ylr";
+"texdef.source-1.8a"="5j1accwlb84bk99g7vm2p9xjfwvshny6";
+"texdiff-0.4"="83vghxcac89m0kji1rr4ry3fy55im9sa";
+"texdiff.doc-0.4"="r9wsmivjyiwdnav7qc35kydk9b8pbcz8";
+"texdirflatten-1.3"="135358h2mb608wg3ni93rrsvvqgxm4ya";
+"texdirflatten.doc-1.3"="n9jxdwjiylvwy6n55vgci9a32qi10xhl";
+"texdoc-3.1"="3zs9kxqd47nlrg8z7frq4h8kjz7a98r8";
+"texdoc.doc-3.1"="10xjlhy57y2knrws7bq5x01byjvzzi6f";
+"texdoctk-0.6.0"="48ix4zaj1k1v3i997rvl1kg0mc8a9g5s";
+"texdoctk.doc-0.6.0"="5h3azns62pa78gwr7gl07fj7ydpb1330";
+"texfot-1.38"="3qdqa7pywvk3f5rgdhn9806bfcfgr9dk";
+"texfot.doc-1.38"="06n4pipdm912xri2cpbv8vdlqja8fzk1";
+"texliveonfly-2019"="8csnp69s8i4bs18r18qqr2cmkqhgx437";
+"texliveonfly.doc-2019"="ic6vdfmbvl34zjqrn0lvp59armsin54n";
+"texloganalyser-0.9"="8dlsnkjvsic0xyaxjwixrgm4pf40snpz";
+"texloganalyser.doc-0.9"="yh3y429s0fbkjai3kmh3z1q4f1pja6g3";
+"texosquery-1.6"="8f8lapbim73bxwfmzgi07jl5qg5d0n6g";
+"texosquery.doc-1.6"="rph058iy26cxdk6n0i7kbgxv43rkmfx7";
+"texosquery.source-1.6"="6r8grnnhqr2jcmns2vrcxq6gai939nhb";
+"texware.doc-2019"="qy1dmjyam2slw0b2qcpq02jvr82bq25b";
+"tie.doc-2.4"="s7h7c6wbmzbsp0ixcm64jq8gskjjwwpb";
+"tlcockpit-1.1"="3cpabpc7kq0j0rfx217i3sh1lz825791";
+"tlcockpit.doc-1.1"="l7w6h4na36nfhky0w0jn53v4lx48yi1x";
+"tlcockpit.source-1.1"="dqgari1h9a0ny1jkjqqk3yx2rs59v0kc";
+"tpic2pdftex.doc-2019"="g21w28jq3l00jpg4k6ff7aajl2yla9c6";
+"typeoutfileinfo-0.31"="vjs333wmdxb9s1vd215af0vryplvb8hl";
+"typeoutfileinfo.doc-0.31"="qdrwm9hi7qk7hxzcz0grv7cfl4r9k4v6";
+"web.doc-4.5"="sdmcsfyc18z4ldyiajpv5fqhfbb1gzgq";
+"xindex-0.16"="c9j47127l5yjkj0v2k3r2nbr2kysmazs";
+"xindex.doc-0.16"="2wm9d48w71s5mah2jz4bygcl153s0cva";
+"xindy-2.5.1"="rp60v85lrsbllzkwvhhz5sprxalf6kxp";
+"xindy.doc-2.5.1"="akx5bx8m387zsaxd7v6xh97nglbzd9k6";
+"context-2019"="1a004zz4xs83m9jgy16k6q552lpn9dr6";
+"context.doc-2019"="zc8knfsrllnfggxxsgyijjzx59vjdscm";
+"lm-2.004"="ci5dpznkzlal3bkn0dcd2m5i05aws66g";
+"lm.doc-2.004"="w3g5xn4pfqhri4glpbh66rs8d6nbrd02";
+"lm.source-2.004"="bw69srvx8mprnj8d5f48bq3mg1ysfk1n";
+"lm-math-1.959"="j995x0y357lac8mn1kzn9v8p3v995bz7";
+"lm-math.doc-1.959"="bgfq2c4l1shm9453822cnmq7yq6hlknq";
+"manfnt-font-2019"="isk7hkf6lfg41mjli9sgn77kvn6fkl96";
+"metapost-2019"="6hm4z5b1yw7qdhnk5zvr0li679rvfvi0";
+"metapost.doc-2019"="3x54j33i3p3m3pf84805w011yr6v896j";
+"mflogo-font-1.002"="m5lb3rhr5yighsixjb0k6zp2hx8fxvr9";
+"mflogo-font.doc-1.002"="va6f9qjbh5ah4zvlmc4wi9m395x3bhpr";
+"stmaryrd-2019"="shivgpyz8sa63sqkmpgqvw1v1iyc0g35";
+"stmaryrd.doc-2019"="r91xmqmmm6i6jka78qyaiilas94xc5hi";
+"stmaryrd.source-2019"="ch2gj89jxrqysjsl24s40za3y5z03yan";
+"xetex-2019"="5mai30qjzqsc5hdmzavbsgchlarv6gfh";
+"xetex.doc-2019"="dv515mqnylhpsi5v7xsnv662041lmva8";
+"latex-base-dev-2019-10-01_pre-release_3"="g5lvvym5jk74zznlz170020dmsr9fq0i";
+"latex-base-dev.doc-2019-10-01_pre-release_3"="160hg8dhji6chzni7blcbicyfzkpp0cn";
+"latex-base-dev.source-2019-10-01_pre-release_3"="is6g4w5blf79pqvwnwyg52iqkhdrrbmr";
+"xetexconfig-2019"="2wjm3wl2975pd1d3ql2qd3yhhdh3gvmp";
+"context-account-2019"="85lpl8g1by9mvqnmxy6v9iasvgmjnazr";
+"context-account.doc-2019"="lms208c3s9clga2ymi1j2i5whyz2dffy";
+"context-algorithmic-2019"="zvjfp5dzy3saz67hcfl2n1haxjdkavml";
+"context-algorithmic.doc-2019"="gsckrj1g30x8lq52cil2z9bq7zf5vaba";
+"context-animation-2019"="lg4cn50cshxd9qg2i7hd54lcgsy8zwyz";
+"context-animation.doc-2019"="lazsfqd8djbbkn4byqrgl93nnvygm8xd";
+"context-annotation-2019"="vgnpr8wv2l93qcwifsyslyanyd9hp1vz";
+"context-annotation.doc-2019"="05lrbacq308akhvdbdpwlwg9b0dhsghp";
+"context-bnf-2019"="pzpk8q0zc179zbpj2l9w5fw3r8gmhq82";
+"context-bnf.doc-2019"="jyvr2yk2shkzj122v53khmxx4skbasn0";
+"context-chromato-2019"="721l06z298fqfaj6rcz9sh66jshq447s";
+"context-chromato.doc-2019"="lwbqab6vnyipsjq0xlfgl15iag6h27nj";
+"context-cmscbf-2019"="nwk7dqb2kxbj9y6ijlpa3ack1an9d5f8";
+"context-cmscbf.doc-2019"="s09578i62xh352zmd1rssg0rd1qjpc7q";
+"context-cmttbf-2019"="dgrblidva7k2q8yvmkdb0kg2n4bzln1k";
+"context-cmttbf.doc-2019"="fp7blzzh8p24bpab0vnlyc336kildj4b";
+"context-construction-plan-2019"="b42ncfcmywfwwnvzy2z58pig0spz39g2";
+"context-construction-plan.doc-2019"="x76mm90ba9lwvjb3dkhmbv6ajc93444z";
+"context-cyrillicnumbers-2019"="iwzzhbrrkf377k54rfbna7zfbhdal6g6";
+"context-cyrillicnumbers.doc-2019"="4q6ba2gxc5apykkirfjhyn29n387ifq1";
+"context-degrade-2019"="d7fvjlrj0gya4ycpy01b3xw96cqpgmw7";
+"context-degrade.doc-2019"="nkal1h165g0mnf0h677b22c7r5q89sbp";
+"context-fancybreak-2019"="dkqfx16sjcxdl8a50al6x87rhwbrz61z";
+"context-fancybreak.doc-2019"="vqgypbxyr7ay3qasrnfsxsvnzg1rddfc";
+"context-filter-2019"="kjyrcq6p1hw9gi95zpmrvpbni1dn3l8w";
+"context-filter.doc-2019"="1dz0rmsac0f2nvnd83qaxwdhibbkq42v";
+"context-french-2019"="f44vj4in9b4kry17a7cw7ad11ygmnvkr";
+"context-french.doc-2019"="pnndx81zpi4625r2bpk3nyz7x1md9l6v";
+"context-fullpage-2019"="cjfrxynfxahlz5pc60jq27fprlg9jwac";
+"context-fullpage.doc-2019"="4xh4v0zq3wqdaf25jnjpkl73d72h5100";
+"context-gantt-2019"="v50p405xz9ddwlqb0q1hi9m8wbx0c01g";
+"context-gantt.doc-2019"="6600xvqy3ayzn81z6agxpdg6xac1mf90";
+"hatching-0.11"="kngng0rbi2q99417zr3vv3jl0zzjwh6l";
+"hatching.doc-0.11"="5c0n8fhchwpa3vgby9v6dzcg9v834xgr";
+"context-gnuplot-2019"="21gc0nq12aps3d3333yxll6xllnlw0x2";
+"context-gnuplot.doc-2019"="53y32f428jh6lii2zcl4csh8yzfs2ij5";
+"context-handlecsv-2019"="zpdagxljjxskjqd1fpzkba1dn0vxilnm";
+"context-handlecsv.doc-2019"="bc0dzhw5dwjidgscqgwlnfs2xdnapdyz";
+"context-inifile-2019"="fmf14m6wz9ya4lxy3w6mxjzqk491jdd4";
+"context-inifile.doc-2019"="acx93f08cc2z4x4jwwchd8njnkil3bfq";
+"context-layout-2019"="438mv86y37wbxdv9js2s3clnkl7866ff";
+"context-layout.doc-2019"="adh7d3hmcjqqgh69nr8agxznzwijkggk";
+"context-letter-2019"="y43dmsc49337n5mn0axqsa5rln68zg6r";
+"context-letter.doc-2019"="knw1pz7vdmqjf82aiznpqb2hc5y198i4";
+"context-lettrine-2019"="wmfy4c9c13jj525hmrf742kzkiqqmwgk";
+"context-lettrine.doc-2019"="xf4mr1w0z7ybcas306959nmgxih59082";
+"context-mathsets-2019"="5gxx8rbkp1znjh8ycd0k8nflhjcm25kw";
+"context-mathsets.doc-2019"="jjc6lkfrw2a84n4cwvpdnn92wv59pvis";
+"context-notes-zh-cn.doc-2019"="x85l6d8ydz6nw51z8ak3a7cvpc6c45lz";
+"context-rst-2019"="5mwhydc35iywmkdz759sdpz53wkqa64x";
+"context-rst.doc-2019"="c8khxkv5vs9wzfb6l7116iglnwng98gd";
+"context-ruby-2019"="jrwrrwhcvb4bbia0g2lnl6rr0yydh6ix";
+"context-ruby.doc-2019"="s8s9kmgim38l2x08a6cq2n9jjz9hbw6p";
+"context-simplefonts-2019"="5h1qrkcjlkdbd5rc888xrp2nfksyf7x5";
+"context-simplefonts.doc-2019"="xfdzrvfp6kr1abbnsja6grxnvcnbj2wl";
+"context-simpleslides-2019"="idd4q63cvh7qqiv5wzkq3xgrxwhm9z87";
+"context-simpleslides.doc-2019"="smx89kphvq9qjl4mzd2nd2j3nasv6vfj";
+"context-title-2019"="ywgzzyzyvd02qwffkzxpymwhpb548g3k";
+"context-title.doc-2019"="d3m29w07jmdkxhb3g8254ry27j3y5qri";
+"context-transliterator-2019"="q0klk1fqlky9drg0ak4xlcn3xpsi4kyr";
+"context-transliterator.doc-2019"="xik3slvbsnrmjcjd9ypmwxhbslyank86";
+"context-typearea-2019"="ck1fbjmlyq93id8a15nrn81cd10jlcib";
+"context-typearea.doc-2019"="yvf0njazm748j5d40dsyk9l3p4is0g8x";
+"context-typescripts-2019"="q33whgk69qflc06i9q8jpb5lnwvdbhr5";
+"context-typescripts.doc-2019"="gxsm980lz4ddjnnj61yj4yv2vdnck1x9";
+"context-vim-2019"="j1qzdclsyzhrp0x8gkhkzw2s1i9a4xwf";
+"context-vim.doc-2019"="ggyhlwmqw4v4mlgfrh6jwanjkgfsaky7";
+"context-visualcounter-2019"="sh6jnhkfbi4rpw34zw489148rgwsb14r";
+"context-visualcounter.doc-2019"="hbainxhhkx26imhab5kl4k1f7ljhifqv";
+"context-visualcounter.source-2019"="7wbyascsdwh2m9hpwm3c7sd0q5940fd1";
+"jmn-2019"="sxkb92pakb4lx5d9pjpang6mhfrgm4b5";
+"npp-for-context.doc-0.98"="7pczkchxrk8snrl81lrv7wgn928lngq3";
+"Asana-Math-000.958"="ra3pfarx03afq6hzv16an1v2fb22pcpx";
+"Asana-Math.doc-000.958"="wy3f3p15aj22vm3i391dpf2ssphqln97";
+"academicons-1.8.6-2"="ibr3rgpdjalz09gcs8fg31gkasb48qvv";
+"academicons.doc-1.8.6-2"="607w87c6bbhfw1q8jibfkpczgf29f342";
+"accanthis-2019"="3ai0zz1fwlq9v25dsfz63if6i7wgrhp3";
+"accanthis.doc-2019"="zlxlfbawiicbkminjw2laximsn07zpi0";
+"adforn-1.1b"="av77crahnvrjdla03d5511inpd0hikjv";
+"adforn.doc-1.1b"="0r9vmhq3m0m5agj8vhgh9rwi10p238yr";
+"adfsymbols-1.2b"="qsglgklwqna03lj0dyd37vdqlmh3fxwm";
+"adfsymbols.doc-1.2b"="q3840xankbi9xr7fdsfxd3gkgydrvmxr";
+"aecc-1.0"="0vpb9yz2qx0sc15kxzhgqadkcjyr27c5";
+"aecc.doc-1.0"="mn7j1f7j3z5d6pnss9mlhvbw4ahn94ka";
+"alegreya-2019"="g97xv22dfmdfhyn4yqz67rj42mkp35qj";
+"alegreya.doc-2019"="ds3p6fvf6bdrzf9clxksrcl9r3lbbknx";
+"algolrevived-1.03"="99wnibyx8h3x1rf2hnxmnb3gk4lh4yvg";
+"algolrevived.doc-1.03"="8w567kzfdgjxfsdbfyf8rr89wdrrm0xv";
+"allrunes-2.1.1"="yxijvmvgjl2q05v667fmqisbyd7xsjpr";
+"allrunes.doc-2.1.1"="b0sc4d9kla5sg792zvwqjzszz17w19iv";
+"allrunes.source-2.1.1"="n986ppx466mparm30mlv7cn5mmjh74sy";
+"almendra-2019"="bg7ciwcjc1dlqw9nxwlmqqvn9nkd228a";
+"almendra.doc-2019"="1c428ph2c2zjx1ks145ydd7vbaqgvsjq";
+"almfixed-0.92"="kcaraz14gg5k8ws8zkrjfvvn22njv759";
+"almfixed.doc-0.92"="34f4a82gsr0vq47bp9wbdd4wkhhr984j";
+"anonymouspro-2.2"="kzf7kf4bc5cl8vw0k5m34hv7pj566w1n";
+"anonymouspro.doc-2.2"="0952v93206i1n1sziifc0pmrpz6ksina";
+"anonymouspro.source-2.2"="k8bivdv3ghdp0a9inhrirfh01kbszsrn";
+"antiqua-001.003"="131gc30l7jaj79zkc37if3w70nr8w6ic";
+"antiqua.doc-001.003"="36kkp06c9grcgz7py0k7fnr5a56cvsgk";
+"antt-2.08"="ln7vvpz0p5lz4sikwky7f7zmkg08zmcv";
+"antt.doc-2.08"="2449s2gpspkwfmyhvvl8g5h1dqn8bg72";
+"archaic-2019"="jvj1s2dcgkwgi9ywg48vw7i14gmlmq7n";
+"archaic.doc-2019"="mb0z3xq325y48yv0bx4xsz8x5f790c60";
+"archaic.source-2019"="j05dan5d8xxzg43iay4v76vbcdscc6zn";
+"arev-2019"="xc3i2264d5w0ijv10n6ka53311bgnib0";
+"arev.doc-2019"="s39jgnizjbpnh1czr3ck5yd32bxks476";
+"arev.source-2019"="msk58av5fwg6hi4mzpz8abgzigqyskf2";
+"arimo-2019"="1z5ij30qfbd4y2c0292aai2dsg87n1rm";
+"arimo.doc-2019"="2fr1vjv5386lvixzs8idr0wyf9ghlg1f";
+"asapsym-1.0"="gbn04lk9k66wj689vna4kgxq8gddhwca";
+"asapsym.doc-1.0"="qfbaary485cs3q5azl6d650z53kd9s73";
+"asapsym.source-1.0"="g9m2vwmd438fwfczm8xwhv4wdp2aj114";
+"ascii-font-2.0"="xagip7afzxinz33nlz8pf8vbcvbj1qa7";
+"ascii-font.doc-2.0"="8r3hq592fxf4hd5n6dphfv7ggd7chhcj";
+"ascii-font.source-2.0"="ackrvh7723ifwjhl2pzf3mynk3c947f4";
+"aspectratio-2.0"="jhfd7l8dwy9mwi3qa5md8nzraf0fkajj";
+"aspectratio.doc-2.0"="xv7z3aa40dn6fzchrhqwg03356r2znjf";
+"astro-2.20"="isnx9q009wchs33xq4bphi4cp4cnb2m9";
+"astro.doc-2.20"="xa1szbc33k2yyahgwy294mgiiyi5yiy4";
+"augie-2019"="w863x04n1ks9jkmaw8fm4hd6a1390s3x";
+"augie.doc-2019"="dlmy9i2fh0db4aghd8dqsv9227cqk4d9";
+"auncial-new-2.0"="nnaar0yvi6r1fynyzxmqhw7mnify474d";
+"auncial-new.doc-2.0"="jvyica87kxg5gm3zb8kmka9ja87f28si";
+"auncial-new.source-2.0"="hfdl71c7lx3lpb9rkwfz5vpaq0s19bh6";
+"aurical-1.5"="nsq6vfvs11v1z0jyrhizbd29fkn1jp9w";
+"aurical.doc-1.5"="3glvxhpb6l2y06kz1icv2cpgrxacl998";
+"b1encoding-1.0"="cxsgg97c3bsw9dl2aj9c9rb8vlpyn4s4";
+"b1encoding.doc-1.0"="mcm5yr55av0rj342bxdljkdid5qxyv97";
+"b1encoding.source-1.0"="jdnzzki5929xpzvpfvx5a9z51dk40pvs";
+"barcodes-2019"="8j88bc82j5a0xhm46671mj0k439zm5da";
+"barcodes.doc-2019"="7729a4f9hn4qzx2cndyxv04wwpchpjax";
+"barcodes.source-2019"="yh5ci4axi82ps6hbm6f0a08alrnapxiv";
+"baskervald-1.016"="igfnj3pwvb6443c531va9kzylizxm9vs";
+"baskervald.doc-1.016"="mq8ms68crhv6afh9ld6scyx2xn2ik6jk";
+"baskervald.source-1.016"="7y8d5vqbd1bp3gri0rhzk3cb12cwchr1";
+"baskervaldx-1.072"="jjwb2m99l3vwzcpr7dzd8z360cv4qib6";
+"baskervaldx.doc-1.072"="bprkagqwmczadxymgadg1d98d6g2l4xq";
+"baskervillef-1.047"="0b8hb8q8ddq07j40c39rxwpxa3m9jbk6";
+"baskervillef.doc-1.047"="1gwvmy6yqilz5z1v1jg928n5qwj0nckc";
+"bbding-1.01"="8kh5c0chlw1f2pqzh9pc7zx8y2jcgh0g";
+"bbding.doc-1.01"="zjngi582jrb99j6w1amwbyvjmfvsk40d";
+"bbding.source-1.01"="axvp8f0zag6bkr9v3fg22j4h5gcbcgzx";
+"bbm-2019"="ayg703c4frfpv9mhahz36f9zs11y9vxc";
+"bbm.doc-2019"="bzfab62k5j167p5qzs79gps14hbpq7nq";
+"bbm-macros-2019"="lbvpxxa0rzhl0z0081s6wfdvmx3vlhv4";
+"bbm-macros.doc-2019"="ncijdxbxfk9xkrnvvsk937ji5nd60z1s";
+"bbm-macros.source-2019"="39wj6mqzn9qcvavqr8p5ny4ajjxm9m8w";
+"bbold-1.01"="s88rwky3f2jjcg6w00g7s5lkvviqkwpm";
+"bbold.doc-1.01"="sa83x4g1n5b2lafj9n61cggkyk7h1z5v";
+"bbold.source-1.01"="ki3gxl970iirhkckqblr490jlznl0kc7";
+"bbold-type1-2019"="00rizb6fky3rsyn1id4p1dik8963bhwr";
+"bbold-type1.doc-2019"="lnpyln41q3qdsmzdkini0q1wqx7v2n7h";
+"belleek-2019"="8y1nbwn46cgyzfyd3and8aws7mqclsfa";
+"belleek.doc-2019"="8d258516ak2b5va5smkfc87ipyj329f9";
+"belleek.source-2019"="n6fypvkn7cq1c1l7jqvjb6cfjyqrq0wv";
+"bera-2019"="mq0j1sn7fg1qk7qd7x1l4ixqddyp3rjg";
+"bera.doc-2019"="6iv3gc8kfqcw909sa4x7msc7dsxndy8i";
+"berenisadf-1.004"="2ci0vxfqyc18anpy68r6anbdz76nrf2b";
+"berenisadf.doc-1.004"="00vx76lkvv0vf68a7sck05ls3l5va5gj";
+"beuron-1.3"="c04r71cvsva6yr9gvj1jrmix7q8n1i94";
+"beuron.doc-1.3"="6iihw343dcgq64505br49lkllnjxn8lw";
+"bguq-0.4"="cgq4fhairknzbp65cmhv0m19zn0cnkgp";
+"bguq.doc-0.4"="9rwhzxijcyl4zzrc88dg8730p11hkm4q";
+"bguq.source-0.4"="7856n14czw3z30maxv7m4xz6js47rkbj";
+"bitter-2019"="rjfk57bl3z3wwg6gxram55w7xzk9w5sz";
+"bitter.doc-2019"="mlkk2966kwfcldhn8n8rcpy93l88y7pg";
+"blacklettert1-2019"="hzd441k3wi58rrysk0h48yklnp5i776p";
+"blacklettert1.doc-2019"="8n61621w6273ik991i2asvsm4w8xlimx";
+"blacklettert1.source-2019"="ir0cn80nw9jgchx4kisv9j27gpgykhvc";
+"boisik-0.5"="xz0hk8fwnrwnydy9dglm93c4gzrqpz87";
+"boisik.doc-0.5"="wsssy9bh8wi35x67ifgnj9wrjx0vpmvy";
+"bookhands-2019"="6dgc2p6zs8hxjx4b3xa317ni1pglza7c";
+"bookhands.doc-2019"="l8mlzpwi0bh220ag4ip8qzxq6vxz9s5g";
+"bookhands.source-2019"="xx98dvqz312dbb4fm57fmh3yp3krq7wj";
+"boondox-1.02d"="i1hwfxc7ji83724177ir5hdgfn6cbcqr";
+"boondox.doc-1.02d"="wwa8ar557myv3rfjkw9jlw1pxs26vwbh";
+"braille-2019"="slk0qzcahb3qkmq91jcrm5gakcwa7czv";
+"braille.doc-2019"="00dv14s64fm8g5jy8b30dx813a304nlh";
+"brushscr-2019"="342p5p6h8v377mnbrv1f56kicbbjfcdx";
+"brushscr.doc-2019"="hikb5s9iv60pfq2kjdbfiq1216d3rabk";
+"cabin-2019"="q0p67y7vxsy5j6nswhapbiyjnrvxdn1d";
+"cabin.doc-2019"="ijqxxnz4fip9lfbwm2kxa02c3n2dp405";
+"caladea-2019"="1rb8sq2yh4hizlcjp8zd68ayb7cx6275";
+"caladea.doc-2019"="9qr79slzxmnnvvh2iy310ypqj9g11s4b";
+"calligra-2019"="cisw7fvdys863szqvsxzm164vina8al3";
+"calligra.doc-2019"="36bzakyiw9awp36v7c6dyb3vwl01shb0";
+"calligra-type1-001.000"="2bl0g899jhyspyhyzh45xdkkis88ja46";
+"calligra-type1.doc-001.000"="3zza4sgsnvcg2asdv27gd7y6jmab5j4y";
+"cantarell-3.2"="kfhii4bxf2s204kidpr7d9cwa5kd1vwy";
+"cantarell.doc-3.2"="22q109ydjdvd11y6dhxbgsax3rnd43qi";
+"carlito-2019"="7v0571swhiw0pbsqcb1a4sj7izdincb0";
+"carlito.doc-2019"="bs67zjydc9fcigiaaf9y9lm05lkgw68a";
+"carolmin-ps-2019"="rx6y9nb8l3cslla44c422jzwjlqw7ilz";
+"carolmin-ps.doc-2019"="hq8477r3q2cg2laafi8ryvjan90wxjcg";
+"ccicons-1.6"="g89dzfgas16vgx8ydp43ihina82z8df8";
+"ccicons.doc-1.6"="sphr2i8d6yf8xz5rkr0ib5ji6x6w428l";
+"ccicons.source-1.6"="1rkyqlpvm3v01cswmjmycayxh0kbgin6";
+"cfr-initials-1.01"="piy7c7f39bjqk0igmqcvrjk0pg86lw6z";
+"cfr-initials.doc-1.01"="4grvqnf5f5ga3d8jdsmanfgiwpp5gygc";
+"cfr-lm-1.5"="7y9qg3jnq6xnlq0f1wqm6493qax92cc3";
+"cfr-lm.doc-1.5"="cfshavfcmpkig5p9kypglmrs55rl5lsb";
+"cfr-lm.source-1.5"="nglav2q22aybb23snhm6x17dxz3976sc";
+"cherokee-2019"="hmmaav3k7vd1rh6rm26l2nal48r1wxz3";
+"cherokee.doc-2019"="zaq092r56asdcf62a7zscfp4zp7a5lwq";
+"chivo-2.1"="0xrf456zk0yvgw2v6rss6rzlzpb0qkmk";
+"chivo.doc-2.1"="w9p59bx5wdz963lcdqvwc7v50pm1a8da";
+"chivo.source-2.1"="mqwg3ryb1lfam2ii20dn6m6j7pahqqxr";
+"cinzel-2019"="g6w1yxjm4bb49qdhgwrrmnj535za01kp";
+"cinzel.doc-2019"="4kj5zj40jq8dm7br7xb9vr2nwwqjl530";
+"clearsans-2019"="f47wzjm2yacf2mmpy3vpld01x2l42fdw";
+"clearsans.doc-2019"="zbx3h5xxcin47ql221mjwlwsnfz01hl7";
+"cm-lgc-0.5"="wnmmrhnlldps15r2v360bdvlfyjd1fpn";
+"cm-lgc.doc-0.5"="wb18g3w86wfb7fv2iaaxm0j2amrws9yf";
+"cm-mf-extra-bold-2019"="87n4wnhy5wylwl1qw8i0nq4jj7jfr5fs";
+"cm-unicode-0.7.0"="wmmgwafdisxnkgdh571y2mlcybjlnvf6";
+"cm-unicode.doc-0.7.0"="6nykmggl860gvrzr1v9xahvl6gpy7phg";
+"cmbright-8.1"="rjlqiwya67ispglypa4gmix8hyk6f2h3";
+"cmbright.doc-8.1"="wsjakpl6b7zyv3j9yx50v9hjm3sgx317";
+"cmbright.source-8.1"="vwgnzs47an6mjgw898scvdp8dc3m1w0w";
+"cmexb-2019"="jxb62ixs1vqaqscv1ixg27vv1p7na0p1";
+"cmexb.doc-2019"="92888gd06jfx2q4xd01n45c1yyhnp03l";
+"cmll-2019"="bipbbgh6jc5r1imk467r5pvj4m62a85k";
+"cmll.doc-2019"="k2sshj6rp40m29fm29jd7jy492gcrwcf";
+"cmll.source-2019"="lbaw2209cz5ymklza36486jzfpq1cqc5";
+"cmpica-2019"="z5mc7yl40mzwk5bcjs3lb1ifqsr7x4s1";
+"cmpica.doc-2019"="9bl7bhpb9dhp58p9hxay8xka0nz2cg2l";
+"cmsrb-3.1"="m0gdzswn71b5ch9a6i8yvkkhp7zqzngx";
+"cmsrb.doc-3.1"="4d4jcwqpmklpyc3c60wmn6xnjw5kss11";
+"cmtiup-2.1"="k6sk5isdzms460hm17lkx5b6p6p9wz1g";
+"cmtiup.doc-2.1"="ycj4il7cxfnigs8sxxwga045g9v8rv8h";
+"cochineal-1.055"="9dnbrqsxf5g3jirv5kv6xwbpkbnzi28n";
+"cochineal.doc-1.055"="wf9xv0l5h2z177sky4fyiwgb0z9yl605";
+"coelacanth-0.005"="0na6wjl5p6fjp3wljqsyd0klna5sid85";
+"coelacanth.doc-0.005"="lkzvg1p9c6vksdgmxsxp1af6gvvd1hmy";
+"comfortaa-3.2"="r9sis4ra19lgzsl56h3xp8s56awhlbrq";
+"comfortaa.doc-3.2"="jqsyn47waavk5a34d7cin4fc2z4pc9z6";
+"comicneue-1.1"="zsv445k74adkzqnas2g8p3i6c49bccqf";
+"comicneue.doc-1.1"="9il2nyy63bx62n603j1kwaagvplwndps";
+"concmath-fonts-2019"="875viaxzrrljcarkg11cb830fmq5321f";
+"concmath-fonts.doc-2019"="q2wyl5cw03rbk4602vg18jrxg3j133lj";
+"cookingsymbols-1.1"="qhjzkivpxbk3rk6pricxsxpdk7c40rxc";
+"cookingsymbols.doc-1.1"="8l7yii9vvmaxfnf0h2snis7476k18mlc";
+"cookingsymbols.source-1.1"="z7r8n2lhgaqzgpx0jz8xq4sd4zzigbs9";
+"cormorantgaramond-3.00"="52jsmiiw30hrj3501y6rxy798903xqaf";
+"cormorantgaramond.doc-3.00"="zs9669ryf0v4nrm8q40g18vz60m5sl0k";
+"countriesofeurope-0.23"="12hskf06qcaaq2ngadchixzg58sq1v55";
+"countriesofeurope.doc-0.23"="z2rmvqi92b23rwk5msp5zyqa27x8x70n";
+"courier-scaled-2019"="qrm6a468azlw2s89v7j992wxs2mkqfv9";
+"courier-scaled.doc-2019"="1bwlrdxpl1fj4f9ml688ybimig5ylxwv";
+"crimson-2019"="wwvxgknvkd3ycswpp9wnlp9dlkilj7wz";
+"crimson.doc-2019"="wnxfzc5llkk38ky7bf8hkn7zsdawpr2x";
+"crimsonpro-2019"="232xj0064ymrjjzbx1c31hmmx2mf0idv";
+"crimsonpro.doc-2019"="ifc4l8cz8mqk2jll5cfwl5225fvllpci";
+"cryst-2019"="56jlp0hk9vrfxbhlfjnpim398ggxccjg";
+"cryst.doc-2019"="qazhz2hzgpqlghbg67fnmf8adba1wl5d";
+"cuprum-2019"="lb84z2x4ab6q22wj6vh0m2rqnfqr5cgm";
+"cuprum.doc-2019"="88iiq2wn37gz4bqawpsb0q8a0nrdpr62";
+"cyklop-0.915"="5ksv3v36mc6557jckr5gk22pbqr30wnr";
+"cyklop.doc-0.915"="d85643zgnh0r0j53gfpi84qsx4694xpv";
+"dancers-2019"="qlpshkppzr84rr3smqpwch5j11klm3a7";
+"dantelogo-0.03"="iiqbbimigxpj8kg628sj694xha98q0fw";
+"dantelogo.doc-0.03"="d42k8bqdvp20af1wzilbcjfd1b7ywim5";
+"dejavu-2.34"="90lkxdpj8ihrs68355fal0h0a1dp3v67";
+"dejavu.doc-2.34"="2v6nhxrkny5haczrpvqjzcal7bixngas";
+"dejavu-otf-0.04"="ssbkk7plshbikfmxsm8fhs860c921ri8";
+"dejavu-otf.doc-0.04"="h5xkf02syyclkizh6xhxha96ay14f3kb";
+"dice-2019"="916yfiq60a1qz7d0jn1jd9slck7rjwy1";
+"dice.doc-2019"="rfkm493k3g4slyjsy6bcgljxjsy88z76";
+"dictsym-2019"="lc5sz8d50hirk5yqg9baj2vhj4f7cf8x";
+"dictsym.doc-2019"="d13rhwg29k9gd4ymlipbp5ink908sdnn";
+"dingbat-1.0"="9yc0zy6qlxi9zmpyi3wd5irgq89shanr";
+"dingbat.doc-1.0"="z4km9f9xrw1n44ylh16872lzq8r4zvy4";
+"dingbat.source-1.0"="rq7v2cny05d4f8bkxbs2z6kj36q5bwfd";
+"doublestroke-1.111"="z58ah73655dsas48b432ahkkags5n8wv";
+"doublestroke.doc-1.111"="403diym6rx34bwmrh63zaka3xdhzs2dp";
+"dozenal-7.2"="6d1mbaf4l9yk7admwg05a6ix98cq5h97";
+"dozenal.doc-7.2"="5qfx3qa1dnadw5qc1fxq156xhh9wrjws";
+"dozenal.source-7.2"="w7i42zvkj2ln8z9m4r8p5371jbjn56kp";
+"drm-4.4"="i8782x71pbzgag927fqjqgw2w7zdisvj";
+"drm.doc-4.4"="vs4rq0w6c2yyyzv4g4qk1pn25z0czs8l";
+"drm.source-4.4"="g1n0k02ma60mrb12cdq20qfw8khgdpmm";
+"droid-3.2"="9r4y9qywb92m9jsc2wq0x9gpj13l1qdk";
+"droid.doc-3.2"="7imljgs9xh8zavab0kh5bj0fdgvf8pq1";
+"dsserif-1.00"="8iq2vinr2pnpasv54rih1fy8majnq0x6";
+"dsserif.doc-1.00"="0a4vccbhpq9amjcc005v1z3ilipr2d9g";
+"dsserif.source-1.00"="yawadjy2742rvvkp232zadkjsij8ja3m";
+"duerer-2019"="vbldf1vbzs3if3mp2lcl65afgiqa54j4";
+"duerer.doc-2019"="75dd80vmi5wx804zkrq48z12y3alihqc";
+"duerer-latex-1.1"="nwigxc3gb4phmv584bma819dcrrafsmx";
+"duerer-latex.doc-1.1"="9nkvhaa662x9la2spm3iwmni9bj86kll";
+"dutchcal-1.0"="6gpi804yy8xyiznzwyy2nqg7qvq6q2rd";
+"dutchcal.doc-1.0"="s0m4n06xg8h0jmlj31w27la569vkl1im";
+"ean-2019"="m0gkapni85n6zw1armbn1y770n8aj0rm";
+"ean.doc-2019"="1b7rkp30r8k0dgk9clz71jp8dlsvhrqc";
+"ebgaramond-2019"="albamgmnphchg44q9yzqf6ggm37kqji2";
+"ebgaramond.doc-2019"="1q1pmanzxdjnzqicpin5rfb5jnhad649";
+"ebgaramond-maths-1.2"="7xa6g5hnnl2ry0v3gf0s33p6l3qqn3ds";
+"ebgaramond-maths.doc-1.2"="2l73rdm7kwy43k9z4fwnxlvd7prca25a";
+"ecc-2019"="0g013kqml9jfkqq94v7zi46mhrwdzdck";
+"ecc.doc-2019"="v9al4v4j1qlrc9w7ph6ww1h1mc6flqsz";
+"eco-1.3"="7ycccps2kab77rr3cpwsbpi2cpl40kl7";
+"eco.doc-1.3"="1r1jxijx9wk6q2124xjwrmsjps7446fp";
+"eco.source-1.3"="4kcml0rm4pkg827qpfvhywnzrrx5p7dz";
+"eiad-2019"="m3n9a3rawxsj5gm64vggw7xvrq4cy4ry";
+"eiad.doc-2019"="z3wss8sc5vnawaqkz7kagwm1gv4l1czv";
+"eiad-ltx-1.0"="0zq83567n75h8zxlag2qas2q8li6vyqn";
+"eiad-ltx.doc-1.0"="7kymr597yg8j8291gy7jz16a89aqmqny";
+"eiad-ltx.source-1.0"="illi6i1hp4lmx7ylxazrmmzi89ymh9cs";
+"electrum-1.005-b"="6hdyjv1dakcj5zxn6p8rrksdvc7jl0sb";
+"electrum.doc-1.005-b"="c11jl0zjq8nva5nl96p9qyq3nrvgx0zn";
+"electrum.source-1.005-b"="67i1gwyiwwarncpbnj47fmws4dc42bii";
+"elvish-2019"="wp858zclk17yrhpf1yrgd3c4srh07vcj";
+"elvish.doc-2019"="mwgvj8fzb806dsjcx01zs6lhdygx35r8";
+"epigrafica-1.01"="mc08k5ajn2lr4k30lzhsn2si922frq9c";
+"epigrafica.doc-1.01"="vv1fqij6w2fir3myffcafyyrdckvvi4q";
+"epsdice-2.1"="xbz7jkdzzsqrskdi4vhb0ra7m62hk9q1";
+"epsdice.doc-2.1"="7lc7wwfxwxnjfgf13br3wa6n8j25ml6w";
+"epsdice.source-2.1"="6px6gazxv7pr9cagfrg7mzx1w3z2nxn3";
+"erewhon-1.093"="fq4wkxfwqd9nma3zql6pilga4rfxcff4";
+"erewhon.doc-1.093"="jlj4fyri1h8hfqxs1f65ri5vgblvxpzj";
+"esrelation-2019"="zhs9fa75r0wr060cfsk4gmmvn06mywmy";
+"esrelation.doc-2019"="08i1bczpz8sccj5lf32axfl3c5ix1sri";
+"esrelation.source-2019"="r1ylhybcbbxjkyvs07m6csmqgz14rrcv";
+"esstix-1.0"="0ddmfrgh39pwcd2n8rggma4pqwgamp7s";
+"esstix.doc-1.0"="5pf3r0xhssrgkp779n06a63yjb5cdg6a";
+"esvect-1.3"="dd9wb3zgs99s93z0jig2z5pwccxh3vvk";
+"esvect.doc-1.3"="c9x8najv8ihx22n1kfd9hbqba40ilz3x";
+"esvect.source-1.3"="170376cm3v7mzlh5909qyzw6y18m5rjm";
+"eulervm-4.0"="ica20j8a3ljzxrmp03k60y6f4kpcbiy2";
+"eulervm.doc-4.0"="g5fxzw7dvnff2w9ys2gpgnvr2x8dabx6";
+"eulervm.source-4.0"="ifvn5n0dvcr4qpcv1yp4xvnx9lj26krg";
+"euxm-2019"="pb3kg627b3skhbi0prgik6y9n9zgk8s0";
+"fbb-1.14"="ai9024x530swbm9r2lnfps5qijy0rvsq";
+"fbb.doc-1.14"="34dvrfj52ylz45x9kj80p1i61iyyffvc";
+"fdsymbol-0.8"="hx8wp66hsznj0sj8jkz0vdah0bp9vvyb";
+"fdsymbol.doc-0.8"="n457nji3718qh1nrjr9wbj9zqj21nkw0";
+"fdsymbol.source-0.8"="3n6d2j9wh5cxakdmxg087mznnrdkjw27";
+"fetamont-2019"="4b0n4awl8k1zz1pn0pnc2hic5shsyb2h";
+"fetamont.doc-2019"="vq97fpky2mf9p09zwqvk6vkl5k9swkbb";
+"fetamont.source-2019"="j6zizdhly6lam1y4f37sy8py5ibaz4xz";
+"feyn-0.4.1"="mb9rzhjkx06m1yv6knnfx59if98wda3n";
+"feyn.doc-0.4.1"="hz41vacil1r726v0f6k2fjpn7zky7xrz";
+"feyn.source-0.4.1"="lqz2b6w4z325ba7mq42aj0brw2hpx01z";
+"fge-1.25"="59jqqyl11vinxa29f6gmalv30q6zfbzi";
+"fge.doc-1.25"="49bgdsclk4zlpdfj9pimffpr4qkd2z7q";
+"fge.source-1.25"="ak2gj4nk82ya7dfbi2vwp60lvnqlvnzl";
+"fira-4.3"="szqwp685dh828hs8w032cq48p8inaar6";
+"fira.doc-4.3"="6yfabm4jjy7fyvzm8gkw61crj0b5h7vq";
+"firamath-0.3.2"="04mhb3w3kymxi51100l1nxsv5pl9y6fh";
+"firamath.doc-0.3.2"="9xldfkq7q07rs5y64aj2zbngj31s65pc";
+"firamath-otf-0.02a"="8va0xil2r5i2bjmmv7xj39jbk9j8l9d8";
+"firamath-otf.doc-0.02a"="0i3j6rfpa5jahxipwa5ibfkh4x7vhz48";
+"foekfont-2019"="wha0shrvr3lv9ll9d3gv60mcav605vcc";
+"foekfont.doc-2019"="n91sl0xzglqfbdyb9mzv7wav3y4zv9sx";
+"fonetika-2019"="firgrcsksy4jdk632aqfwlaki3xxgmak";
+"fonetika.doc-2019"="ahz61pg6qnn2dpi3c9iz2kh2f4fvywbl";
+"fontawesome-4.6.3.2"="0n13dha58d0w511pzzckcq51fal6zxgl";
+"fontawesome.doc-4.6.3.2"="x7hzlyxv5k2zjz5lk8hy15pnvbhhhijj";
+"fontawesome5-5.9.0"="xm37wzc60g5rdg16srmq5g7miprlqq5b";
+"fontawesome5.doc-5.9.0"="25mnrvnak9dr7j142lk77ycrl72jhqnk";
+"fontmfizz-2019"="rkf93c9imj2wd7aps85m6450zbd9p3yl";
+"fontmfizz.doc-2019"="y70dshapwj7xp7h9b6sbjipv6v9k02wg";
+"fonts-churchslavonic-1.1"="3d67nxsgrrv480997rlbrzz5siyb2gvj";
+"fonts-churchslavonic.doc-1.1"="arcilr5n1w0rg97zkxy162kx21ygns31";
+"forum-2019"="nk35nrq1d7yilp3jps95zdrajxzb2kdh";
+"forum.doc-2019"="ba7bz482qb17yxxciawg01il4798v185";
+"fourier-1.3"="rl6alzjlkyyhhk0gbra08b99fb3aax85";
+"fourier.doc-1.3"="6b2bnjvp45lqxmjbp0pj5yd4m39kgg6y";
+"fourier.source-1.3"="dcl6cw6vfsd0xjpic29161iswkv52gm4";
+"fouriernc-2019"="9pxp21fllg7yh9jfa8nzpy6ifa3w6y18";
+"fouriernc.doc-2019"="dn9wfy53asfp1bbxnfa9nxvnfy3z9nn1";
+"frcursive-2019"="fs9aw12gfd5gs55fhqxg2p06c50i9s1v";
+"frcursive.doc-2019"="r0bj4g91m2w3yl8q8kim6ldm4d8lyziy";
+"frederika2016-1.000_2016_initial_release"="bl8g27dfv6xsqfwlr2i6w9yar7916qnn";
+"frederika2016.doc-1.000_2016_initial_release"="ncd2plzgwdwcv1many94alkvbjh7xjf6";
+"garamond-libre-1.1"="rcbndbzsxxs01mibalvyclkrgvp8saqh";
+"garamond-libre.doc-1.1"="hacrmaazg60scpg4wx7387xr3bi1gam8";
+"garamond-math-2019"="dgxryvlk911pqsy6j7yycqhmbllmnhbm";
+"garamond-math.doc-2019"="dmk1l4fnkqlvx4ff3wd45aray4s374fn";
+"genealogy-2019"="hdl046d3paihjmlkh2q3crfj1n88fsyv";
+"genealogy.doc-2019"="7115cwa2l6nsnyijcdik7kw513q3a41h";
+"gentium-tug-1.1.1"="gdd212mv253371hvn1bxlr2q863qzy3m";
+"gentium-tug.doc-1.1.1"="02avjmn2f3hlr18688rn12y1f5qc68ff";
+"gentium-tug.source-1.1.1"="k50zhzwymzygzqf7xywv4bzz47vw5hxs";
+"gfsartemisia-1.0"="98gdcspx1jqdry7iiq7mgxxmicl57zz0";
+"gfsartemisia.doc-1.0"="drbwq4z57xl8748mwmy86j97ycs3b16a";
+"gfsbodoni-1.01"="dzcgyjfwabmywpi5zkac7lbf88jzsbpj";
+"gfsbodoni.doc-1.01"="cbw698q7jmg09k301zwbnnqig853c14i";
+"gfscomplutum-1.0"="bic1cr1c3dii9nlfmhlgsm6rpj3g0im7";
+"gfscomplutum.doc-1.0"="ddz279xl7glgi201dizr2gdkcgiy77qz";
+"gfsdidot-2019"="j0mg1pn4n9dfy9hdia5v88hds4j2h2d2";
+"gfsdidot.doc-2019"="xrnlqx0gkb79g50mwzsmi9g6ib1pa92y";
+"gfsneohellenic-2019"="az5rq4d44zysnvcqlky0hr5qb7bh3nza";
+"gfsneohellenic.doc-2019"="04y313wjm59sgg4xlnili0kfw3dwljp9";
+"gfsneohellenicmath-1.0"="l1san6zqbd1r2r2j0zp81i723jpqyqzf";
+"gfsneohellenicmath.doc-1.0"="pj6lv282l62rz9yb4mlk6w07n0ncz0vn";
+"gfssolomos-1.0"="wq24prphxxnn94n0nd4xmrf23f5yqchp";
+"gfssolomos.doc-1.0"="rq87k1bymgyb837k103ps50w9krmxca8";
+"gillcm-1.1"="42vc5sx8shjzqkc10qv7gyq9689bzlgq";
+"gillcm.doc-1.1"="4rmm7nn5z0bw3qgn8gfkl86bblkvkh6g";
+"gillius-2019"="fw49hi1cvp9zknv23xccgffkxyqwimqv";
+"gillius.doc-2019"="dhkvy2y5v117xzm4lan27k7q2rcdvs5p";
+"gnu-freefont-2019"="1zqn27grz5h290g4fk4q8kd9pf4l05ag";
+"gnu-freefont.doc-2019"="3saxb0d0h7dn8a1f7l8ax0dj5ic8piib";
+"gnu-freefont.source-2019"="716drmmfwyq7pabpgagk0zwkj77lrhda";
+"gofonts-2019"="gd9n6q1il2jfwz6hjp5hag2gkpr2mhl5";
+"gofonts.doc-2019"="4r2jm1373lkk3j89i9clb528dj04lmly";
+"gothic-2019"="p88xyzda6r94ibzxlv1r7kkb7mc99h68";
+"gothic.doc-2019"="wrpx52hq1g5dhi38sjj7dxi2y7gh1201";
+"gothic.source-2019"="6gh7hma17066gk20ri4qjvml8d424c1h";
+"greenpoint-2019"="qlqfkgcn8gc1hy7gmfajqliriilf68ck";
+"greenpoint.doc-2019"="xf889ii8gmck30vlpwkfp7d9242ivffr";
+"grotesq-2019"="rqv47whzwig31vfd8581ncd87ja7pb82";
+"grotesq.doc-2019"="rim68sz4x0r1m6j69zryv98gfgvpkbz0";
+"hacm-0.1"="jvhbypj31pcc0imgwlmzpv8nmb1n9dxk";
+"hacm.doc-0.1"="0dys4q83mfgxlwrz16fsm2cx2vgcn5ly";
+"hands-2019"="570kl4m7mximvq87lfqa6fim30hmjjqz";
+"heuristica-1.092"="9y69nm9nw275afi7qzdlm6rr207rq1xd";
+"heuristica.doc-1.092"="kyhkr5x04gs4k2pqgnhysgdg9wk96s1h";
+"hfbright-2019"="j8vk71r5c8iyhfmfwqspj1c4iczl2p0f";
+"hfbright.doc-2019"="wqqxw523sh1yjl0hnh31902wap7xcjwm";
+"hfoldsty-1.15"="79zmah1m2xg56m7cvfybzw68kbfcf5c5";
+"hfoldsty.doc-1.15"="16gmfqd9kwg0isf4wp1nlndfwn5132ph";
+"hfoldsty.source-1.15"="vyly65j4d7wl49gmm8wgpxrnv1s2ygq2";
+"ifsym-2019"="qy3w8h8slb44vg4s7q7ddb9db2fd9s06";
+"ifsym.doc-2019"="wpnp4ykxz7qa1ycwzkfpp5sjrs49np12";
+"imfellenglish-2019"="y1vkapnwlqxwb3via4yhpszgfmlyqa9q";
+"imfellenglish.doc-2019"="g7r6rv584d412gqassqba30jfg3i1490";
+"inconsolata-1.121"="wk0j1458yhq5r1zl03qlb3gbzm0dwfb3";
+"inconsolata.doc-1.121"="iyjsfc6sgi4g6k3vljlmdjr6arvm09bn";
+"initials-2019"="sd0v18xidrmnllf1ihmgk02jz3v2qw8j";
+"initials.doc-2019"="6nhvprdk8nd8gxmhq2hb8s41rpjwmv4g";
+"inriafonts-1.0"="v2z21gr8glh8557carc8405d39h9yxyq";
+"inriafonts.doc-1.0"="dq2aix14cqch32dywqyka5ci8qn31ayw";
+"ipaex-type1-0.5"="pzqc88hkzspswvgps1bswsn6khablb87";
+"ipaex-type1.doc-0.5"="xls1iggs58i1mnpc79fp15v1f1i59h3y";
+"iwona-0.995b"="l8pylg2zq5pvxs7czq17b3v1xpar4qkr";
+"iwona.doc-0.995b"="piyd7fk40bqwdb3fxshkcwwrdi8gra32";
+"jablantile-2019"="7fh0mnp320r5b8740vs3z19dg1l0i4ds";
+"jablantile.doc-2019"="yml29hq7xcawh3zkd6b32dbsk0aj024q";
+"jamtimes-1.12"="mdyyd5fy4hhi74rpc5hb7bmrxwdsk9k9";
+"jamtimes.doc-1.12"="c9849k8v23lrfrchf00yvrvq5q7g1gq0";
+"junicode-0.7.7"="s9grb6y7k5mxsfaxxyp1aj8c289cdb2r";
+"junicode.doc-0.7.7"="b66ag5n2apfdkwlhqsvg6aq1p8pdbiyn";
+"kixfont-2019"="b9z3zajxsqs84zh5k15rx3jgkwwgwa40";
+"kixfont.doc-2019"="xp8ai67z856fmkzcssavksidg7n7j2yj";
+"kpfonts-3.33"="rsl5v8zsm8pblyjryw3f14svxjzhnchm";
+"kpfonts.doc-3.33"="rr7q8ww1nkpzqy29xmxhsyizszf59mqx";
+"kpfonts.source-3.33"="448xjy1djbz9l9wbhmq7r6fpgvsn9dyy";
+"kurier-0.995b"="dadp8vkzvblj60424k75bchravcr0338";
+"kurier.doc-0.995b"="a4hw3w7qg492qnf4kivjsdfxqyrq669b";
+"lato-3.3"="5cl837pwnp1zd7h8w5j7cwqpvf6pmik6";
+"lato.doc-3.3"="fjxgmfdin3rrl6dn338f9ss9729napxr";
+"lfb-1.0"="kqspj6w9i4bzbxcngqdfk8rnw33j0yyd";
+"lfb.doc-1.0"="ikbhi6ahzxlplvizphmpimf9ah2ninqg";
+"libertine-5.3.0"="9p4n4dm4l1vra87kfhipy4a9cvl1vcg7";
+"libertine.doc-5.3.0"="yp3dchk8j3vkmj4rfvvmc43r8sard2pg";
+"libertinegc-1.01"="jmz5hjyld04g175sgg322lrlazcbmbz7";
+"libertinegc.doc-1.01"="qf8q9c30ljq44kqh8l855xdkq9i4w857";
+"libertinus-0.01"="q8ddwlppxzzmwfb6lzdcsix9kb4i61vr";
+"libertinus.doc-0.01"="y5didmz6809s0cfa8lnhhqfmbdshy9v6";
+"libertinus-fonts-6.9"="mgg77ljqyvp9sx78pfjfyr875qz52h48";
+"libertinus-fonts.doc-6.9"="msqi6clqw8rxg5jzzysbs1nr9ivsqar3";
+"libertinus-otf-0.20"="6jkvz7v959d0gyvvd62f3mr0z0cckq6j";
+"libertinus-otf.doc-0.20"="lmdc9rj9620j7m0d1dh22jzibb07ymfz";
+"libertinus-type1-2019"="ji91vwfsyg1qgh8k96c9qh8ha8136dzw";
+"libertinus-type1.doc-2019"="g284knxnq9i7rm4cmqjfisv51cr7wqsw";
+"libertinust1math-1.1.9"="afqrfb41ndii7pm2ry6ydhhxbakr6k86";
+"libertinust1math.doc-1.1.9"="w485wvhpf2v60racrip2wysr21rgdaqy";
+"librebaskerville-2019"="2dc8cilcgmmp0wrla8ayyyh4khhh7lfl";
+"librebaskerville.doc-2019"="5yargvzlnq9sckyy629jzsmi17gb8h7n";
+"librebodoni-2019"="1znd7g37rmm1qsv35dd9kvkmkfj4d3w5";
+"librebodoni.doc-2019"="hzihx71p9ggdp2pxrjvck7lhx2mrgdmj";
+"librecaslon-2019"="1m4qqdc9s66mlzrh3zlnlf29rkm8qkhv";
+"librecaslon.doc-2019"="1xy6qdg2ca7lkqr3rnyxdwgijr5pg1s6";
+"librefranklin-2019"="f59w30bwjk8swggjwvnl3ba91gxdlnjs";
+"librefranklin.doc-2019"="g3ywhprd6x6lx2ym0869l6xrs8d7qd8q";
+"libris-1.007"="fi5cn5ag6zgprgc0iqgk4iln6kb8knv8";
+"libris.doc-1.007"="82p29lh7cbavrshdx4s0pvqpgbvb21d4";
+"libris.source-1.007"="gd4aiv3pxy5as8cwfy9m1f4a8jp7v6d1";
+"linearA-2019"="fs5s95s31qczmlr0m3dk16c7gl4kpn3z";
+"linearA.doc-2019"="6b5jz6pfmv5f88gkwj5642jvd35ga3gm";
+"linearA.source-2019"="zdfpl9gwgrxwvs9ymj3vngfxdc23vv0q";
+"linguisticspro-2019"="7g6x7p9w5fx3dg01c9xqzlrn7zvxyf82";
+"linguisticspro.doc-2019"="db4pdcspfhvjlydnhfqp157n6v3sd307";
+"lobster2-2019"="lx95j46k68gz8jbcxam8a3xy4jgxy9jk";
+"lobster2.doc-2019"="psr2bid2fjynzfvwb4s86biamv1r6q9l";
+"logix-1.01"="qr4r6n9rdr30ym97iv0rxn639xh4hpiq";
+"logix.doc-1.01"="ycvsbj23n717ffbdx3b775b66kja9cwy";
+"lxfonts-2.0b"="3s303f06r7561x3x38sy3c9nr80x8gdq";
+"lxfonts.doc-2.0b"="swgvazf325j99kjrcb94r8611fs6jmqv";
+"lxfonts.source-2.0b"="sxn1hl96bsg6ai8fafskxj8palg8vpk7";
+"ly1-2019"="ry7x1505pv1szprb9fi2x21s97m23ln2";
+"ly1.doc-2019"="iw3amhkw5vjcmrq43cwqg653nyc3ks1p";
+"marcellus-2019"="3cl1xsmz3m466smgxzm1apmpvda8kq78";
+"marcellus.doc-2019"="dqf1bhhl6lflp2qipkbi8nbd5ac7m1ri";
+"mathabx-2019"="qgy1qqn1bk43nk938d7bvbyj75v4fz57";
+"mathabx.doc-2019"="q0n88v61h3bqf0vvldd1lb03d6i1z8mc";
+"mathabx-type1-2019"="z96jirmwabbav354qlyphhjvxnsgjqxl";
+"mathabx-type1.doc-2019"="yq8n84cpw8kqvqivham4pqxq1740z36w";
+"mathdesign-2.31"="30x7w3a7v1654a9n5mcj5kdak8i2qxw2";
+"mathdesign.doc-2.31"="sgp7bi4m5480jvsdj9n2pq933cfjkiqr";
+"mdputu-1.2"="6wr48jgiyfprwwrla53qshm2817zrmm2";
+"mdputu.doc-1.2"="9lfn1jh6370mv6ic1gg36nlannbv73pf";
+"mdsymbol-0.5"="hjaz8ph3zrnl7x0545k3937yl5a0ghqh";
+"mdsymbol.doc-0.5"="g8m1964gq8gnn3cc3ij1iqhc4akwmc3q";
+"mdsymbol.source-0.5"="7hy2zpaw41c46i7kd4m65lhzgbpkn5xv";
+"merriweather-2019"="d816wypw36p0wmyqkk4z7kyqqs586klb";
+"merriweather.doc-2019"="jzgrh95z11msb6m0yhbcjfxlnil40pwh";
+"miama-1.1"="w96rjiv6fhqv14lfl1w4rvlcy2z7x6dc";
+"miama.doc-1.1"="hs6gq60jbv0mvvfznhfrzz0g6s2l3rrp";
+"miama.source-1.1"="4khxj1rk9xzil5nlp19v7a9rxf9npq99";
+"mintspirit-2019"="wc4wyi1dfc7ql5sdcyycyqxjfir4g97r";
+"mintspirit.doc-2019"="w1ld9009591p4inkky5jfppjaiy0ja8s";
+"missaali-1.004"="yv5k1an5kf5fygdjphwyg34k7yxzhvfm";
+"missaali.doc-1.004"="dwrqnc25398agbnc9nqmmiviray9fgw3";
+"mnsymbol-1.4"="gmjs2ra3yb01bxw90gjdri3p6n7kbc6l";
+"mnsymbol.doc-1.4"="7ngazrr147x9gdadm651fv9hjr1f87i2";
+"mnsymbol.source-1.4"="7bf82bljx9w783jg3kibc5rn2l9j0ym2";
+"montserrat-1.01"="69sgwbg4w8kxgl2sixbx2p5l8x09m95i";
+"montserrat.doc-1.01"="qs93cxc3d97zzny9702zm5gydz9p45f9";
+"mweights-2019"="6rwqdlv6x82pskdga8yzzz61yfxgvzpq";
+"mweights.doc-2019"="w719n3h6cg10izpzgcqd4n0i5gbm644a";
+"newpx-1.403"="kdm5i09f3qwvp0hl1frivfnirqnm2ghb";
+"newpx.doc-1.403"="zb2i33rif9gb4p9b33fqcrwcx6189qx9";
+"newtx-1.604"="5r6iq9rp4hri3z3aziwing41k795zy04";
+"newtx.doc-1.604"="lls627k613jbd6yw5q2qig6dx1czdcfv";
+"kastrup-2019"="qdr5cacl37ans3zd5jlzwr2356xxgswy";
+"kastrup.doc-2019"="mvq3abnsjmzb3kv4c2z116apbzgfh2dw";
+"kastrup.source-2019"="13vj32k48f0ahs5694zrsvk953kxjrwc";
+"newtxsf-1.051"="k228m8b49w8pxij91bgw6xb8ikwa5q6b";
+"newtxsf.doc-1.051"="4mn23hq7waqwd7n1b6p67pjgbck0vlaa";
+"newtxtt-1.055"="7v1rd11ryiynfmwzrmwywd2m9qc5i3fh";
+"newtxtt.doc-1.055"="zblj8j85biikhm989slz2hwbvkhq5yf2";
+"niceframe-type1-2019"="0kr9sg5vnawjrd2aw8vbf8mg975sifl1";
+"niceframe-type1.doc-2019"="12bn96xfs68zy9sfxi5q67mnaqkl1v2a";
+"nimbus15-1.011"="b2vqxi65978p1bxnacgmd2z9jqlbfz8g";
+"nimbus15.doc-1.011"="gx3ij2574891g2s1b4i37dj294ccnpaa";
+"nkarta-0.2"="g55hn51ys8zd7in6c6z46mwva577s6qd";
+"nkarta.doc-0.2"="59na8icxp6l11jk6nsp53c1y5gqyjsff";
+"nkarta.source-0.2"="jqh4ghyi8ry5w9x909w3kscg9p6m1279";
+"noto-2019"="cwbxgh84c1a2vm9n2rxcc0jmh0mpa5p1";
+"noto.doc-2019"="izii3yn2m788xyn3bs65542ij801psip";
+"obnov-0.11"="49j5a74f298hw84np3ih4xd0hnh6r1wh";
+"obnov.doc-0.11"="m9c4z3ckj08ai2cdb3hhiv040y6n1bfl";
+"ocherokee-2019"="1fg65c5gpjsx8vv9vsdg8szagf1xmg6a";
+"ocherokee.doc-2019"="p9lx15xl112908b004y0y6nlfxzgam24";
+"ocr-b-2019"="q1id788vglvlc7lsfr35gvzf0xmgr22n";
+"ocr-b.doc-2019"="lgwx91waimda6cdr05fi2jdwh4x18fqf";
+"ocr-b-outline-2019"="b8hhnggqxzs8285f55ixpwcpd7hb2dym";
+"ocr-b-outline.doc-2019"="bl1m2hny1zvs3wy4i4pndd2vxq7jhd9j";
+"ocr-b-outline.source-2019"="pf5dql2llykwb6x5a2s3scg4kc5r2f77";
+"ogham-2019"="22q1nc2fd6vv7hr7l4iryxi5bp6hqfnb";
+"ogham.doc-2019"="awnlhhzp2ch289lpnwybhz1k3zqwqq5d";
+"oinuit-2019"="n4di43fhkw1zcmy9xgxn7g4wl23qinyi";
+"oinuit.doc-2019"="s5hi4bk5yc19fb5lhmnc2vvxpr3ahd2k";
+"oinuit.source-2019"="caij5pbyylnhlhx149kl2h5sj4qda57z";
+"old-arrows-2.0"="7s0s5g2vif8hkzj768a0zgg46xjh57y6";
+"old-arrows.doc-2.0"="n9ly98pmz304gymkiafs3fncs9qq29mb";
+"oldlatin-1.00"="dw53za52apri5agrh2jpxrw0qvnk1mbd";
+"oldlatin.doc-1.00"="ngf614psg11qa2gmda30c6an4f371lda";
+"oldstandard-2.4a"="y4af7d3f3d1k8c8k26cq3j0vyz8h4n1y";
+"oldstandard.doc-2.4a"="189m5n4hb7hq50fpj0401mpfib738g2p";
+"opensans-2.2"="a68ghfiy4iiv9n6z78s956grswbdyf4k";
+"opensans.doc-2.2"="c70nwprgs35f2a7bvabdbsnmkayxyvd3";
+"orkhun-2019"="fmazxvhmc0r0m96ms6a234wj139g00iy";
+"orkhun.doc-2019"="mgamvmayvdi43vxfqmxgbgzfahpn3d2l";
+"overlock-2019"="54p5y0zlnv9csly2qwl6lrv69lin5611";
+"overlock.doc-2019"="x3q8m3py3np069p90a616z26a2jv7ffd";
+"pacioli-2019"="ka7a174yd3q3mymkbfyqbi7hhzpbhgvv";
+"pacioli.doc-2019"="5pzk9mjcdlzcnxwfkba4hzn23bzlhfh9";
+"pacioli.source-2019"="wwvfswngg0rrng6f3xck0f4qyg5m3shk";
+"paratype-2019"="877hrpz9vdgw6hsi6zf9d44bwnqjd6cb";
+"paratype.doc-2019"="12a3wq98sk2sb66rd08sx3f3vqvyqsr3";
+"phaistos-1.0"="5vv58ibkgjmpih67p2qgm9vdiqh4ag6m";
+"phaistos.doc-1.0"="z69jyiz7nm44yg9qy5vfhrzwby903g3s";
+"phaistos.source-1.0"="clhmyfpd5l1zx29352smmnyhal3lpa5q";
+"phonetic-2019"="1ha5wc46jqc3r9ziq7wmx0va8svybyjk";
+"phonetic.doc-2019"="xa7kxz7lh1sqmb6x9n4sh7bjpr9mvzqp";
+"pigpen-0.2"="d6rr06gpzr27134dqh8rv6h6g4i9hg4x";
+"pigpen.doc-0.2"="gqnp68lkhnnyh1ib0sa34cxjg52jj0rs";
+"playfair-2019"="70y4jv653pcwv0s6rnmjz271saz179vn";
+"playfair.doc-2019"="v7jcyickh5fflqx8h2b7s307sx9zcg2l";
+"plex-2019"="wg42rjzqd27999sw5rg3xslysq0h262y";
+"plex.doc-2019"="1sh7f2g0q9idrp5df1qbbh0k9ifm1n2y";
+"plex-otf-0.07a"="2k3j1snsf3d414k4pjq56d9b1vn2vh1x";
+"plex-otf.doc-0.07a"="z6clw20q3nfwzn087f3c3ifc4g2yr4kp";
+"poiretone-2019"="isnd3cmsm0ps7dh40sjqiwa9vrpc1d19";
+"poiretone.doc-2019"="k2g9vk6snvf66n1g6x2d4hd2d1z6cghm";
+"poltawski-1.101"="ipqjw12syp38hj1pw4b9g03kx07l40vn";
+"poltawski.doc-1.101"="g3shi2lp499x96az1f77y5bf8mhrgzl2";
+"prodint-2019"="vgqm1rmgqqvn7d4akab3x7jqz89kb0hq";
+"prodint.doc-2019"="fclf35r9hmfq76bvxwz5df0q18zms1sm";
+"punk-2019"="1bqwz8g3apk49mhg7m63qsynrxjxg76x";
+"punk.doc-2019"="1gc59v1xvh9sls0nr2ypmifripdspd1l";
+"punk-latex-1.1"="i1gqgbivxd8yl1rwjbssf2g0ib9nvb57";
+"punk-latex.doc-1.1"="8nzibnm4247rapxb9kfkyv5i49w19ipk";
+"punknova-1.003"="0q3dx65cyb1kh2iwbs9if8p6943m3gw8";
+"punknova.doc-1.003"="hjlldk6yr4hjh4chwcxmzq761h1ygwnq";
+"pxtxalfa-1"="rapvsla1cgyinabn1w9cshpm3y5af13r";
+"pxtxalfa.doc-1"="fg8arijrsm7gc3liyf3036pj014w0243";
+"quattrocento-2019"="isv4srm4yxgrn89hsx8if1224x6mbmai";
+"quattrocento.doc-2019"="qcz3715r89gpj53jcy69rzimbcqlzw2z";
+"raleway-1.4"="qyqkxw2r0kjdc5ccq6ixlsjgv75gcmhv";
+"raleway.doc-1.4"="kw13y1533fwj7lgjc986ydb97plij1vh";
+"recycle-2019"="4fgfdk09nzljd5a6vz52nvv8b23xk8rw";
+"recycle.doc-2019"="3wazkwncn9gh1lpcax4hb8x38jr6ynxd";
+"roboto-2019"="l8rcqx70vnwm438x3h6mh7ziglqw2c5x";
+"roboto.doc-2019"="dr5a7g26r4znmzy8j6fphky5dswdna8b";
+"romande-1.008-v7-sc"="v5sf9cqkvd7wmbrrb48dffi59m048kal";
+"romande.doc-1.008-v7-sc"="bf5a3jzcqr74l7qp2im80r9x73rk3asy";
+"romande.source-1.008-v7-sc"="g2p0didwlqqf9gsdzrhmh0f9543wdwwz";
+"rosario-2.1"="mhjqi8h40lfdhv9b0q1qzla4s577l0ky";
+"rosario.doc-2.1"="az8qmdmm2fsrwygfmp4rfklpbwnkzjqi";
+"rosario.source-2.1"="pyzgnc976vz8grb6dx3cwzkgxv2i11i8";
+"rsfso-1.02"="3n75qwpji7z995wb2r3dqwrszkw6m61m";
+"rsfso.doc-1.02"="vga3jyv3s730mgx97mqw92igvvypbyb4";
+"sansmathaccent-2019"="i74c6yiwx5g1ilgjw2i0wsf2ip5ym9dp";
+"sansmathaccent.doc-2019"="dxbr7vs0j710wz9ym4n7wb3930kcrccj";
+"sansmathfonts-2019"="90f8gdxlqiqx6aw1nx0hfbmkrs6aw331";
+"sansmathfonts.doc-2019"="wcnhx85h99brrisdz8yb0m34mv5qsvd9";
+"sauter-2.4"="flw49y2l5355jpvq7f3q3vannwcfni3f";
+"sauterfonts-2019"="kciqmij0w173na214ix5yhngc18likch";
+"sauterfonts.doc-2019"="x2lc53r2wnwrjfainmngafdsg39zyf48";
+"sauterfonts.source-2019"="kfi5301zd7pwmnr1fhqc6kfni0nr5d4m";
+"schulschriften-4"="3g5c3l5mnpp3a6472ayj0iykriini807";
+"schulschriften.doc-4"="ad6v7vnksqfglwb18via23p45xm2hr81";
+"semaphor-2019"="rb37ln7zq51ck9k6g0wj1cx1q02x2i35";
+"semaphor.doc-2019"="5lc0796kh9slmk1hrm3720mcnqjlqrcv";
+"shobhika-1.05"="rcrfsl2fd8mq929xv6zjlk91hmwvw85c";
+"shobhika.doc-1.05"="cb72lp8n0xrj4gvfhzy6mvr4jz44m27g";
+"skull-0.1"="4nkkh74v0mlyyriyhqwgk4la8l3mjxhj";
+"skull.source-0.1"="szzd5b98j04aj4f4aq5av7fs7316156m";
+"sourcecodepro-2.7"="yx2x3lbn1mc24xx25b4vpq03rbazdby5";
+"sourcecodepro.doc-2.7"="vqwr6xly6p3yds1la5cdn3c0hi95q2xk";
+"sourcesanspro-2.6"="z54yjkharb2lcq260in8q07d2d1s5w8n";
+"sourcesanspro.doc-2.6"="cwyk6i4sdl4iag4ggdxm0c3l8ndz7cd7";
+"sourceserifpro-1.4"="zxfp95p1ah6yv6n7p0bdsvnmrpm42kjl";
+"sourceserifpro.doc-1.4"="qg32lg4s8ba732ac5z3gzc6i7iy0mdls";
+"starfont-1.2"="phdad9yy6nvcxi7ym1chdvz0vvb309ag";
+"starfont.doc-1.2"="96h183mv5rmxmnkgy6766519cz5nff6g";
+"staves-2019"="9vcnfl7q4czfhyl3zxadig3nzdxg900r";
+"staves.doc-2019"="rn25a0syl0d0n89jp09906y30679mr7v";
+"staves.source-2019"="2vby0srv43ikzb1br9wgnsyxmgqpfrv3";
+"step-2.0.1"="w2cbwwjf32bwlhlzpw09zi6zh3fwgqm5";
+"step.doc-2.0.1"="lsxp4rg609djqlz54izp8j2pgy5dyn8f";
+"stickstoo-1.033"="k0kj2930hby7wkrxlal4wr7ajagm9lnd";
+"stickstoo.doc-1.033"="mn4pm8hwyl39h1v7xkvhd8dghkbnwlk3";
+"stix-1.1.3"="sxfvkk30xb94rfby1kli4xny57xsbqv8";
+"stix.doc-1.1.3"="xa4z5gssrb74xsdc392ni8rww37c2phd";
+"stix.source-1.1.3"="m4csxq0wlzy246f1kgbd4n0sfgrcbnri";
+"stix2-otf-2.0.1"="285yjdyipk7zmqbxnxp3bd0y5bn3k7s1";
+"stix2-otf.doc-2.0.1"="dgvidfdad1dng5bydbpnh25iblahzgqj";
+"stix2-type1-2.0.0a"="jzv0fmvvibsa2kfgw0mbxqxjpwc01pwp";
+"stix2-type1.doc-2.0.0a"="nwaygsbapf3f8d00wkb7vyw93kj412xa";
+"stix2-type1.source-2.0.0a"="c9ajhq2dinxzps5kb0h3czz0jjk6gy8q";
+"superiors-1.06"="gw1aw7hc05xzywylps60lzgwif3gli7i";
+"superiors.doc-1.06"="m2ppyah3wrk61cvq149bsvdgrjww94yk";
+"svrsymbols-2.0b"="wgq0gxpls40hwxlbxw65ykap0zkw8y1d";
+"svrsymbols.doc-2.0b"="na04gi2mhbqlxyp4jajs65vn9gx0rgc0";
+"svrsymbols.source-2.0b"="3f15gcxzd2rm4m95ikwvpnvil128i71h";
+"tapir-0.2"="sawmv4raa4l1x5sb5df85ds4l4w14ly6";
+"tapir.doc-0.2"="4kn8pfirjbny0k07r1vp1vqyb0r69rqi";
+"tempora-1.05"="b3l8kqm33s3f24smwljks341214ljsz8";
+"tempora.doc-1.05"="62ib93cvg5q0gvdi6bjv9xzg7x9q31jz";
+"tengwarscript-1.3.1"="krhlp4pdfk21rkn0bfm4ghg9sl6hh8qd";
+"tengwarscript.doc-1.3.1"="rj77kc9g6cpy4xnmn8gyl0c68wnrzirf";
+"tengwarscript.source-1.3.1"="8pkcc064pbw50jcn40hzzcrpkvd5hvn5";
+"tfrupee-1.02"="2srhr23mwajngahy1hcihhivix7x6af3";
+"tfrupee.doc-1.02"="pvmd0anqdv38a904hhafsr9mq5hy7f5d";
+"tfrupee.source-1.02"="sz4z2j5kzk9431pvdhj2l11b8qsw3mlv";
+"theanodidot-2019"="wq3wrhkk66z3q327fq4mdv0lw8wghm4d";
+"theanodidot.doc-2019"="6c7za0972a3x9cqa4gmj9c42bz9k7hqp";
+"theanomodern-2019"="2mv2fh328c75bffssj0l8dgdkaq519lv";
+"theanomodern.doc-2019"="qs48kz3hqbh0wv36m5ph30za13wmss3x";
+"theanooldstyle-2019"="ww6kab8p4jm1wsvlsn7hydl2fa1s3nnf";
+"theanooldstyle.doc-2019"="pn7xnn9dq4i2b1wdrn2qqzx7dx9cqrcz";
+"tinos-2019"="c1b84zg78hqp8fm15cgr59qrksqd5prp";
+"tinos.doc-2019"="09w8iyqc8538x1d7cm8jcwk1mkmv93vx";
+"tpslifonts-0.6"="6d6zngl99bgbzqidn4249bv3p3ykz5pb";
+"tpslifonts.doc-0.6"="64fr89dkcr0zzxcmshmhpczvbc4byp22";
+"tpslifonts.source-0.6"="0267nah6ffiwph29ay6cpfl9zqm4vgbh";
+"trajan-1.1"="j8dsrxip2s58sgw90hl98v2w9r106cz6";
+"trajan.doc-1.1"="kwiwf13cr6c6v10vd1irq5srl82kvl58";
+"trajan.source-1.1"="nm5fpl91wscxri9bgcvfhmyfqrryvdil";
+"txfontsb-1.1"="lspmvs805a2sjf5my3py4dkai740n05k";
+"txfontsb.doc-1.1"="cgi4jnv4ks21p7m4y4ry4wajzcgkws8g";
+"txfontsb.source-1.1"="4zypgg4dchni1zh8sx4wh4sb5fdh8x98";
+"txuprcal-1.00"="8yk9lvdxj1ap0lcnywllxhzdz8hplk78";
+"txuprcal.doc-1.00"="pmlz2hhjd7a2q3bdbz01yd61w3hf2i79";
+"typicons-2.0.7"="0mmcwr2xcx7hdb4yllndrzq7bxava3yb";
+"typicons.doc-2.0.7"="6bcmldiywvwfhknmdvpj8fdz0fmdizkp";
+"umtypewriter-001.002"="4k8n89mabkcc3pyc6vhj47hvxncz40zm";
+"universa-2.1"="1hdi5bjzg9w8ipll8d3hdjxr23adcg16";
+"universa.doc-2.1"="pxdcwsm75lji29nggdy53wv4y96ixqjh";
+"universa.source-2.1"="adayns5x3p33i2apy5q7582ahl9kr5wq";
+"universalis-2019"="fwhl8bzgbw53ka6j71zbpc2fxsb20896";
+"universalis.doc-2019"="4w17vpjjhk2wwmc4m6z2n67814fdlrdx";
+"uppunctlm-0.1"="snyyw4gj0736fqykkf94fhkp9d31ml9q";
+"uppunctlm.doc-0.1"="h6cblhxd6xb6nnp3szb0fwv1r7pdwg99";
+"urwchancal-1"="kk9r6rk48qqq9s8l4k42fgj6c84912bw";
+"urwchancal.doc-1"="z0p6cn21n3cxi4mjijy39z9hacfhkk5l";
+"venturisadf-1.005"="nnn3pq2sx0rayjhhsh2pyavkf7c4i7jw";
+"venturisadf.doc-1.005"="gjzclw11zah2cpmgjdpknflrfsaahq9h";
+"venturisadf.source-1.005"="6yz4vcq9mzzm52ca19kcvgj8fg7js28g";
+"wsuipa-2019"="h05k2wwr89dak3ifgvjgjw0zyvlkyyjz";
+"wsuipa.doc-2019"="nrlpxbqgccmccncqa3xx8l3zlbalkcvm";
+"xcharter-1.201"="am3f3s0j1f89sln67zdv9fmaz7cyr5rl";
+"xcharter.doc-1.201"="v3vglfka075ws52w9fw1zn3r9awr6lxp";
+"xits-1.301"="p6p15xy3v136llbzrxhiyiqqjxjx9gzz";
+"xits.doc-1.301"="3qdj5y0g77l89xp1nijqr8kckm0257lg";
+"yfonts-1.4"="i2aacxlhsnkbgfb9i8p0sdwb57qv6gb6";
+"yfonts.doc-1.4"="lw30qiavn4l0ikg3hckps3swjch3wd6s";
+"yfonts.source-1.4"="rcvacgid92pk4m2mqy158gr20jax4835";
+"yfonts-t1-1.0"="b1j2a6sc3npjli2k0y02fgl87k5kq7xb";
+"yfonts-t1.doc-1.0"="say9m82dcmna0f9g1h4ng5ihjkpzwh00";
+"yinit-otf-1.0"="8dd8yhd7fy5wvsl9qnshkvm69g9wx1fj";
+"yinit-otf.doc-1.0"="7rhfxzlfdwl3g0bdlxwsyzzf83f24xx2";
+"zlmtt-1.02"="46x1539n1kc2jqywf2jndg9dzq3zxrvr";
+"zlmtt.doc-1.02"="3yk18czbymf6kynf2ir44b8bh9jyirfj";
+"avantgar-2019"="6x48hsg7wdw4qmf0pyqvb7zmqpn6izqr";
+"bookman-2019"="r9bkd40g0hwcbjhfa2n637i0qyk6ahyf";
+"charter-2019"="1iha6fak3i1mwa6pa6fps80vzik65a4c";
+"charter.doc-2019"="fvn827jh9gfdbs6gnnm83s2yialawz7l";
+"cm-super-2019"="wqamwks565frzn4nf6pq9skasdx5jbmy";
+"cm-super.doc-2019"="246p6vn62gq68n7bnxh1iz258gn3wi85";
+"cmextra-2019"="kqywbrwmg5w0xj0r0qffh1y9z9hlvlaf";
+"courier-2019"="f3rhv0jy01gfhn1rdnai7693y2xy90d4";
+"ec-1.0"="kjq23jms9m9h5af2ri4bxd65w82lli3v";
+"ec.doc-1.0"="a8mvwdx6s8swxhagcc1p36dsy335fhby";
+"euro-1.1"="mpzw5yyqlyb864cqx4wczdnbln4sv4b2";
+"euro.doc-1.1"="82srlwf5vlsmfpwn0l7c7j4wd9fmvbqa";
+"euro.source-1.1"="v5w06s1hfni20mg1flnwgpkr5m49vqvf";
+"euro-ce-3.0b"="csi0m4qrppaz6n7pj6kn8ph63d8m24va";
+"euro-ce.doc-3.0b"="dw6qxpnmbr27k6vzv9gx9i06wgc28rhq";
+"eurosym-1.4-subrfix"="rqclyanzsn8f4ylbhvh9garshg0fzf3w";
+"eurosym.doc-1.4-subrfix"="7abbwvvm5riykgm6mq7hhjxd2gz0ljz3";
+"fpl-1.003"="m1b15fm8wc0lm0x9mbryz69x2dkczkmp";
+"fpl.doc-1.003"="bjc01f8vs5f3qj07my033203rn1na269";
+"fpl.source-1.003"="6rv41z6xg652nkli0flj3102na8k7k0d";
+"helvetic-2019"="q4xi3bdpp7195sqlkbfgnnccq879v86f";
+"marvosym-2.2a"="pn8zahcj87ab0rgiz9inp97randgz890";
+"marvosym.doc-2.2a"="wqd4660d0s4kxgasi3gv09fbjnbqmwsq";
+"marvosym.source-2.2a"="zygnnzkxxsfxvhnkvkq4v6gis1k7lc6h";
+"mathpazo-1.003"="d950j9d7ywwx0air9b1awwxr0a7486qz";
+"mathpazo.doc-1.003"="zna30q1bzd255h9yjnf35ldaiql0b142";
+"mathpazo.source-1.003"="0ly3fqq1s2sf0zva0jx3llbwkqjm0jv4";
+"ncntrsbk-2019"="r2sgybivplsnj8iqwd62wr0ixhlc8x13";
+"palatino-2019"="xp5kg58y1lzsqba3bv9dz4f8rqi3xysd";
+"pxfonts-2019"="9lxhr2mzcx8qkbhqgqx3y8a4pyhfad5a";
+"pxfonts.doc-2019"="q0zqikbb5d4d8wma6xspga1k20bjx8dz";
+"rsfs-2019"="c6wq6zd58x1dqi2l6p4ljkj3p30lfh1y";
+"rsfs.doc-2019"="2rq51dizzivym4mjl4x7lhw7mg6xmcgy";
+"symbol-2019"="3w7a6aib8mdrap257pxjw8x39lck4nyc";
+"tex-gyre-2.501"="bh1inc34f90vb7wh0r9drdjalhwa71cw";
+"tex-gyre.doc-2.501"="8mvblk061marhxqwf21jssgpn9mgvqs2";
+"tex-gyre.source-2.501"="lqv1gkn02k8yr5n4c3h80sq30f9iggxf";
+"tex-gyre-math-2019"="z84v3wzsjwjx7b6wnwnpqmz7xy5v2bic";
+"tex-gyre-math.doc-2019"="41g7sn49g1kxa1dmy5vrv0fzk3rd4915";
+"tex-gyre-math.source-2019"="0wkvmjwxy9ws1h9j1rn0j57dah6z9jvm";
+"times-2019"="jjlr4lksbyjb8z2v21yy9ig0w6x246vk";
+"tipa-1.3"="h92fnvz5cv34vdyrpq52pn79z9lq6s0l";
+"tipa.doc-1.3"="s923q6n8h73f74y77cf171xj9w3mrd69";
+"txfonts-2019"="5fbs9mb86nll7k3j9d37p0bfa08b8nb1";
+"txfonts.doc-2019"="80fli8zzv88yh6rbv99dzsihxbrhmxkp";
+"utopia-2019"="cq5h07i2v6n1d5l4x2gjb0qn7594w5f9";
+"utopia.doc-2019"="sla3qhf9ks0020wq82iv1d3mivpbx79v";
+"wasy-2019"="m5fy0m7fkc0rb3alrvy7hv72659szlsi";
+"wasy.doc-2019"="ig05zmll75wy50l3cwpz51cl8p6prpba";
+"wasy2-ps-2019"="rfx65vba7w8kqvmf0ld02ydr7flyl17f";
+"wasy2-ps.doc-2019"="1ac408160y6br39063cswn8ahp2c9rq4";
+"wasysym-2.0"="zmiwhd64zrf8fa9v2iqch0ksj81q5r1n";
+"wasysym.doc-2.0"="a1qr9h6d7s46a074ckxygm9iwyycbyw9";
+"wasysym.source-2.0"="r9iq0wx65zmc2kp7880hw3ws73xb63xf";
+"zapfchan-2019"="4saylq91v4il4ch3cp3lw7dv8x6sf296";
+"zapfding-2019"="6prjnqim0yrvzj1ary8i5761byqi0ca9";
+"accfonts-0.25"="vnff63f9g4z5bsgrila75lr6lhdl3jhn";
+"accfonts.doc-0.25"="5v97adjwkwxpy4dgw6qiankxfrlz67ab";
+"afm2pl-2019"="vpay128xrpp8jkhyz6kjah0r4vgm2d4y";
+"afm2pl.doc-2019"="4cvj0qi3h4d4ria1xig0i0v1dpplivrn";
+"dosepsbin-1.2"="f00pl9rcgapb03h76g4578za2p0awqh9";
+"dosepsbin.doc-1.2"="41pqpdppqi9658cacc0zhg72cp1pa00x";
+"dosepsbin.source-1.2"="0g1nbmyry93ikcgqhcyg48agnabnzpsk";
+"dvipsconfig-1.6"="llmyk9rhvxs90j3jbjrqz76dxxvzdyp4";
+"epstopdf-2.28"="45cbq50lfbqnlmfp19v43ipzk8pv1jrg";
+"epstopdf.doc-2.28"="ffp11ppmlcb9ri1jdmfjwnaf226j4icd";
+"fontinst-1.933"="ynk1l44cw00x0cxmfxvn0kwixgnaah4d";
+"fontinst.doc-1.933"="dfb4pk5y5kp6ycfsvaxf07bg7h7v0czq";
+"fontinst.source-1.933"="cvbp2ml5kiq35qjnyzbpi8p7h1n5m2l6";
+"fontools-2019"="cih36jq7ysk05hyfm34xn1mgyji95i5b";
+"fontools.doc-2019"="6q07zyw9h8lmrgibp9assa4aiqzilahl";
+"fontware.doc-2019"="2lq4pwncc80f0lh0x7s2a2c9kz9wjprn";
+"lcdftypetools.doc-2019"="z21jpfjpy1ckqk93fszqvwhig9l4a482";
+"metatype1.source-0.56"="infq9kahz9ljr5kk338xbww0g4ifg8cq";
+"mf2pt1-2.5a"="d57jv2y04fsln3q3znw2qi16j7dfq3ap";
+"mf2pt1.doc-2.5a"="gc2i9fp30877ycz5l3wgphwlg9kpfqp7";
+"ps2pk.doc-2019"="z5mvym7cids0yzvjpcc6s4zb04rspj0f";
+"pstools-1.68"="pqsq3y183pf9330bk78l7v42jxiywkga";
+"pstools.doc-1.68"="fxydcv5k21rfmwpbbhrv2c9fxf7966sd";
+"psutils-p17"="g8ci3q98i9cvpw1s7l3mqsv39wqx3gac";
+"psutils.doc-p17"="7dd0cf0q58xxr7mal5c30yalmhxya72h";
+"t1utils.doc-2019"="55a5hkn4ns0qyw961pklpk4jblsn9si6";
+"ttfutils-2019"="hzj3dljvfr9ypzpjgpwxadxf225yi8zj";
+"ttfutils.doc-2019"="vsw2vdd372ll9fjmyc5hj04rnjjfbhp2";
+"aleph.doc-2019"="j2hsggqpjkn1g67g2klps5gn8sc6a21s";
+"antomega-0.8"="jxriw18jifvf24fz8nqql5izp67p8z5a";
+"antomega.doc-0.8"="q9jb5ks7gfxg5gjhkpng5bl0wwbwp2ph";
+"antomega.source-0.8"="l2gs7sapppwxiy712i8vkwfmmc96ch1s";
+"omega-2019"="0v7wvg0vkrwbarcxfnp8k6w09j86y1pv";
+"omega.doc-2019"="zily3hjd30g14zrvj67hdp8nkxk9l5g2";
+"lambda-2019"="ykxajgkmkbqp7l79c4bcm5qg4xnyilxp";
+"edmac-3.17"="29h8y4lna3sv0k7wqmbgrb0mvdxwz330";
+"edmac.doc-3.17"="il4k6vswcqp00005n0084nf99bwxp809";
+"edmac.source-3.17"="90wdkd3rhm8ymi2w9hb64acsy2bzqgg6";
+"eplain-3.9"="r1jby527acphlk6g8l43jj6dprzhdan3";
+"eplain.doc-3.9"="c75qf1sh35qdxpkqm2gb2y7dxjjm09qy";
+"eplain.source-3.9"="grk0m4hjb0i8hb85fc0b37wrxszg6y1q";
+"jadetex-3.13"="79dd0y9m791m62b48pnkyw4352271a6d";
+"jadetex.doc-3.13"="ix7992xnb7xb1789n6d48dv98imfc4m2";
+"jadetex.source-3.13"="3716mhagkrr60rjj9whznfh3v5qwvyv9";
+"cyrillic-2019"="zax5fp5a3p2zd3bhbpng70sydjxm9i1p";
+"cyrillic.doc-2019"="3risjsh9kgr6pk9d0f082a5ipq1827f9";
+"cyrillic.source-2019"="cmq6669b4zjhvhxn0lxq35h4b606yhkb";
+"cyrillic-bin-2019"="h64b7gacxv96hbs0mjxx0s65s4z5znrh";
+"cyrillic-bin.doc-2019"="zz9w85h992lmsvnqh7yq8a0az8ls2759";
+"passivetex-2019"="arr43134jllipw1jl9cbrgnnk1gav4d9";
+"ulem-2019"="cissyhv0gisjf9lpwzxm18ffwxmlnndy";
+"ulem.doc-2019"="b2hvc7p6b57q1qqn44pfrchxrb5ybzas";
+"lollipop-1.07"="c71n12rvjhafkq26bca7q7hxjy5b9xdv";
+"lollipop.doc-1.07"="18wdsl5kq7xwsqhr6v6ldwz66b8xk60z";
+"mltex-2.2"="kkc5ssb6rd3f4kig16sc30npjayw4ab2";
+"mltex.doc-2.2"="qqr7ia4wp66zgasb8sm0bd0qclw6zn7l";
+"mxedruli-3.3c"="f866q8w776cr7k7mxll72va7zb0avsl3";
+"mxedruli.doc-3.3c"="vhcvl3k5lzb1f0g0ghz1rf3cnsy0cp58";
+"omegaware.doc-2019"="hl3ciw90gj71dz23lwn2c2bzcgd20qls";
+"otibet-2019"="66pn5bmsfw3d7l1prcr8p5v6w93lqfrm";
+"otibet.doc-2019"="i308lrxhgqi1gpsh5b5961xisbb9i3si";
+"otibet.source-2019"="hspwgiv9bs4ncmy1yi02jw8ghw2lxcpm";
+"psizzl-0.35"="qx0mhll90g0l0aqzfsjqbn43gxfincyp";
+"psizzl.doc-0.35"="pd8v22iq76j5gkkv9k286yz9i71j8xcn";
+"psizzl.source-0.35"="9i1m36bp80bif8k74q7572j311xxbjlq";
+"startex-1.04"="8fn0wix7vb3xqi2b123z0xlxfvszfbfm";
+"startex.doc-1.04"="mp7rx9aha0622yfrpnm1w2f5pij89nim";
+"startex.source-1.04"="x6bhcd76532n0sfy3cs74whhyw6gy3p3";
+"texsis-2.18"="0mlgxg5a7q80hvpigvz6sl2f6lnkfmls";
+"texsis.doc-2.18"="wawynbj4gxlxbcg8wddrwdlicnlhia14";
+"xmltex-0.8"="0i9h1jakwdh439bi4wq5i4mzfcgmyd8p";
+"xmltex.doc-0.8"="7xl5q081558wnfdyb2r225kckb0wd32x";
+"xmltexconfig-2019"="bm9ibaf0skn5g3ykwpn8gyg8hr80v59v";
+"bartel-chess-fonts-2019"="2mdy450109a2lz95qv50y6wxhhif4nr5";
+"bartel-chess-fonts.doc-2019"="xj41i6y3ssxdpqy3j60pdx2scsf3qx35";
+"chess-1.2"="j9hxdp5kz4dv6wwgy6azrw6yjhdq7384";
+"chess.doc-1.2"="n9xxs3zgzz1vhl7y1d8qxk4cj8fglhpx";
+"chess-problem-diagrams-1.12"="l704rprn6ybj2x2gn469z8zj1kyw8gas";
+"chess-problem-diagrams.doc-1.12"="k3dg6fjx2zmxcj29whrj41awvpmyb7qy";
+"chess-problem-diagrams.source-1.12"="k1kqz5gdj6k6pkbajmpj0qha6lm1gapq";
+"chessboard-1.8"="mpdarc678ndb3qhx72fbkfr5di3mp05f";
+"chessboard.doc-1.8"="9s4g0f3q9dbv521rqxgwf6v4sk9l1mrl";
+"chessboard.source-1.8"="hkh4fq04v2zmw4fwjnkcswhiq46pn3wh";
+"chessfss-1.2a"="is60vi3pamq0qzj8pw0jvj4prvgbzxp2";
+"chessfss.doc-1.2a"="1ia29r7y1ja9d5hx7z17bk0qw7lgz2mf";
+"chessfss.source-1.2a"="r4dzyg9nx44ajf01kbj0qyfg2r4dawc5";
+"crossword-1.9"="k1x6xa5g095ik7rsziladzypsislz1ai";
+"crossword.doc-1.9"="sfqks9j5lypqs02dryhcpjf8hdvkwr6c";
+"crossword.source-1.9"="204s0nxrj1ggqxshkks9inaraskr4mbn";
+"crosswrd-3.0"="66h0iyrwlpkjnasfa6yrc9wsia5cabj6";
+"crosswrd.doc-3.0"="2zik63fs6fqan2z5nxhwz081zpxg04y8";
+"crosswrd.source-3.0"="mi1kqgw3qcy4bj60pz8wl6ym6rf1i8z9";
+"egameps-1.1"="i50d5ijmgapcxf1g1zp7gzv6llx9m68k";
+"egameps.doc-1.1"="8rz7w6n2ip64xgs7i4qrvgc14q1z4p5c";
+"gamebook-1.0"="wnylf38d512bq82hi5jwsf9gxdlb9gai";
+"gamebook.doc-1.0"="f7p5nzs88ps42vwnhcph7vd36s5xfrxg";
+"gamebook.source-1.0"="hgbz9v0wg5kni2lc43yb179b8xqh8mmr";
+"go-2019"="an0cdspxjbbirkz0isbyvknics2pmkmg";
+"go.doc-2019"="17frpsmqhyai4y23xb2zm9qsl18xmynf";
+"go.source-2019"="lw82s14fw0y1yfdhvmmhwy0msyawbcal";
+"hanoi-20120101"="ini1mf0dqm44vabqlqqiw52wpcx3qimh";
+"havannah-2019"="ypcxnwirfyjp28wypyz8gp6zysb26cn7";
+"havannah.doc-2019"="4spiw588y9cw8vvr2b81qp0q61kfbjjf";
+"havannah.source-2019"="jkbnv839cn0i9dnl2v0v9djp630cdzdk";
+"hexgame-1.0"="w9isbb0mqra4kkg0cflryikhm172b7yb";
+"hexgame.doc-1.0"="5xr1vlivrwzhk0zrb2ri8lfc5n1i3zcq";
+"hmtrump-1.2a"="k259b7jj37dzjaavs8f89x26h73sjcgz";
+"hmtrump.doc-1.2a"="5h45jrv7friz8k0nw4s29gmqifnc4q4k";
+"horoscop-0.92"="xw7yniakff9y6f8vsp3rjh9dpx4lidym";
+"horoscop.doc-0.92"="1kzjnm3b51kh9li5p6pmg3a49y47brkh";
+"horoscop.source-0.92"="2ypc7g86drcywds2mj9d9lj1p6zpfnzw";
+"jigsaw-0.1a"="vgmyhbyk2w98cw1ib5kfipsvnppmzdfk";
+"jigsaw.doc-0.1a"="wkl0n9cdf2bqamgwk8kw0b7cggfkjkmz";
+"labyrinth-1.0"="yafwn22imcs3827ilqkwh5kggfsvsk0s";
+"labyrinth.doc-1.0"="xm6sjrs773g8l7x04m6k16a8vzb8nfd4";
+"logicpuzzle-2.5"="7ynzg0ycgp17rqxf4wv3vkxbkwwyh9c3";
+"logicpuzzle.doc-2.5"="snzhcidhpnkjwbrb25lb9g18bc13bl5w";
+"musikui-1"="888sbpw1xvg39606w7xl7qy1f32n9vpc";
+"musikui.doc-1"="v9fa4l7bl6d4dcvcqz6nbpmz3js0jbvm";
+"onedown-1.3"="xkr543whv98k5ni9hrqi00pa8slzqiym";
+"onedown.doc-1.3"="92iyvy5819cbz5nxxphgzlbg0vl132lh";
+"onedown.source-1.3"="zkwm17wpwxvy1d0mnr8ass20nridywvv";
+"othello-2019"="fp9s19jk73qrplyhjnicv8q066a98jli";
+"othello.doc-2019"="q1dqp0zdi9ixxchxnlk60zwfyszbx0ry";
+"othelloboard-1.2"="ymadc4vpkzc0lkl2ws340jf5vzjiq1i9";
+"othelloboard.doc-1.2"="1vi1lc9c75r9qqrhmjp2j7d7p94asbv6";
+"pas-crosswords-1.03"="90v61cxl5ab12bvgnj4k9dc5q6v3zg72";
+"pas-crosswords.doc-1.03"="pm76nswngl127k5c2vwm9nwscci1dcng";
+"psgo-0.17"="487m1ggdz7a554viflmp4cg2kgdw9ghv";
+"psgo.doc-0.17"="cw2v9zzpbmqqw8k8hdq0la2dhdggip3d";
+"reverxii.doc-2019"="2w8l7rs761h556il3d875k0sc86xll98";
+"rubik-5.0"="9wi8kxm1rfbqdmgd08bkfmmcrxh6qglv";
+"rubik.doc-5.0"="byp3r482d99yvd7wj0gw7sy8azki6srs";
+"rubik.source-5.0"="p25x3gpqgyq4hsvgksdspy16w6h593kr";
+"schwalbe-chess-2.3"="2kv49bmr069v1xqlmmq1mag9y76w3jx7";
+"schwalbe-chess.doc-2.3"="f0f7m5nisr4ksa99f4qcxzb707wgbl7q";
+"schwalbe-chess.source-2.3"="lhs87rqjxv2bvxi4shr49aicl2zzx1vs";
+"sgame-2.15"="36xmv070y7wzwj8qj24y5q063v2c1l7f";
+"sgame.doc-2.15"="pm7psgqwg5prx0qfj6wh234raqw849wa";
+"skak-1.5.3"="0wa6kcvgwqz6cnjrf64x03hlbd7yppax";
+"skak.doc-1.5.3"="p8p72b9f2jll6hym1fzrymj7c122z42w";
+"skaknew-2019"="8by6yv9rgn4zbzlq0szcm4yvg8pqfaf6";
+"skaknew.doc-2019"="0p383qca6f0f56skhgvjcwprpb04gldj";
+"soup-1.0.2"="6h4bpg774dpkaxg69k7cyr7pwffk490m";
+"soup.doc-1.0.2"="w67szbnb93rzkm2mznmid3cy5rxzghbs";
+"soup.source-1.0.2"="zna9fyn7n1p5rh2a9fqyvbvsj5pdc3vc";
+"sudoku-1.0"="584gyns58jqsm1ya8l1z63a1wifrgnlj";
+"sudoku.doc-1.0"="rsn0w51h0s7j9w988mmh2q455cx7amqw";
+"sudoku.source-1.0"="cpylv1bwk5yjjfzx8kfz3nha8yfjj2x7";
+"sudokubundle-1.0a"="glfg93s63j960dkz46l4piy8bbs6vjsh";
+"sudokubundle.doc-1.0a"="idw39v50081qhj62hd4w3ylgs6hrvvc3";
+"sudokubundle.source-1.0a"="lih9zbgw5l891hmifvpbdjwaqx70r8dj";
+"xq-0.4"="l2fd2aag0av7znzaw56qbwyp024yx9ql";
+"xq.doc-0.4"="rlabrx8297ad8p4sb4pqkv1lzxiihmyv";
+"xskak-1.5"="r0n5kgq1vnbc9kpqbj4i4c0713hhzgvd";
+"xskak.doc-1.5"="zzqkhgfjsbrllhn13qvkx2v0zarqz2l3";
+"xskak.source-1.5"="5z0q23fhwbxrz4jkfpc9ishdjnxn9k4m";
+"adtrees-1.1"="252iwghr89frhrnm3njrz1l0i1qsjq3q";
+"adtrees.doc-1.1"="4x26n2q1pwdxmwd1v15jp6mbrwwl9l7z";
+"bibleref-1.23"="8cf12j1yzl2g2fwqd9igpy9ir251y704";
+"bibleref.doc-1.23"="s9hihhiwli9r8n43nav5ag2ivg6m82h5";
+"bibleref.source-1.23"="fq7w8mvqsba7sd3826jvn38l40d207wi";
+"bibleref-lds-1.0"="adlzl3qk74vn1z0zdqn9cm6xqbwd8j6x";
+"bibleref-lds.doc-1.0"="cxvgzvgkicpnam43l53vfw9za8gigszv";
+"bibleref-lds.source-1.0"="8ndhf2vnjjii0xywr848janqh7xzdhn3";
+"bibleref-mouth-1.0"="nlxylwgj6nmzf4ky26hamhvsnm3g4h2z";
+"bibleref-mouth.doc-1.0"="by1z7x2h6xmjgnkj302bjgds4jzrjf7y";
+"bibleref-mouth.source-1.0"="drlwpv0xvyrb259ipq71p68929cmp6ka";
+"bibleref-parse-1.1"="ddxzanvw07cnj984ylsmjybwvyl41sg3";
+"bibleref-parse.doc-1.1"="jcsy831ih2d4scdsydj4m9mzlyahqlip";
+"covington-2.3"="a5f2hzdc6fpm677d2dgllpa1jr5lwl8p";
+"covington.doc-2.3"="basski8kn3kk6i9jxxc9p5xy8lfxcp8i";
+"diadia-1.1"="p95dkjaf17pn4qm3syrd2wm4680qxa86";
+"diadia.doc-1.1"="s8q9nnwajrravg7418bldainfxpm874j";
+"dramatist-1.2e"="r8ldaql5igwpsv1bm35jgcgpnlr817m1";
+"dramatist.doc-1.2e"="15bnkrhgbs4jpsk04y9fib7yvvsb83kq";
+"dramatist.source-1.2e"="h52a16aza42dx50gx6lagzahm1n20xx8";
+"dvgloss-0.1"="57wp58gxcs0hv560zj1g4clhlh0k7ssc";
+"dvgloss.doc-0.1"="kr2ndi6s5i1k7grvwmkxzhdrmqwzrkw4";
+"dvgloss.source-0.1"="j6kcgrvqainc1z88amsl8lnym06kw3lx";
+"ecltree-1.1a"="iphdmz9nnnmyvwvvq5hflvbi0xf50wxd";
+"ecltree.doc-1.1a"="qkdycpbl0616mn6495300qcc50a6w05a";
+"edfnotes-0.6b"="dlhivqz4bniprmv8900wh88piiv58cxw";
+"edfnotes.doc-0.6b"="kfkm4q1zf83gipgzb00r4d5fghy9zq2s";
+"edfnotes.source-0.6b"="n5dyvim1rvv5dmnpl8jsmc1r43nll8vp";
+"ednotes-1.3a"="dmv7mq84rw9y8fcvnyj4jspb3qn74h2y";
+"ednotes.doc-1.3a"="bivfyfj5g56m38z4b8wnzd34q2ks4lxg";
+"ncctools-3.5.3"="9ga7xf3c5k1n0gwiw42bs8zda97596dh";
+"ncctools.doc-3.5.3"="9p2ds66immwv89zxs8kn3z0dar3k2dfb";
+"ncctools.source-3.5.3"="f40j4wcw6x5f6r43bjnxyhfsy9vj623k";
+"eledform-1.1a"="34050azcglr1nl4ppvq8f01dffc3hlpm";
+"eledform.doc-1.1a"="qdp4sms5cf7wzi1kdm49fgifs3845whs";
+"eledform.source-1.1a"="53dda59p3czslircl0a23d1dqfh2r45k";
+"eledmac-1.24.12"="327rpi6mzwx3h2nln4zra3pnyfnmg92a";
+"eledmac.doc-1.24.12"="3hygl6qp9sf8gnn02p78bny40bnnmgc5";
+"eledmac.source-1.24.12"="kiqy5wz8qyzxxszhf6k37ricjh13asca";
+"expex-5.1b"="xl0jyizia4cwch1z399dl0r5xz4anxgy";
+"expex.doc-5.1b"="a903i8yj7kqr49jf3f40rrf74j4bn1cb";
+"gb4e-2019"="bzbpagrikdh6z5pbs416l090s559v7i5";
+"gb4e.doc-2019"="72mcbwb79gj584p24lpxbvvqj3pbr77x";
+"gmverse-0.73"="9cx4zlykh23lwblr7q2hbd8d5dffvw8q";
+"gmverse.doc-0.73"="zbq9drljrrh0ms8k5z7ndldilzgd2l0w";
+"jura-4.3"="bparkzmzy3lj0ddqiaw3696msam3v0b4";
+"jura.doc-4.3"="hzgy1v1yl2yrnvi91j2hbs8jhd1x3djh";
+"jura.source-4.3"="0z6qb08mpblnl0jhjx8cmhk0vrciz0f8";
+"juraabbrev-2019"="mb4ikhwg3fjpdrsf8azzvy964gihs0ja";
+"juraabbrev.doc-2019"="i9w4ykaf8q152pc6zag4wykdlfvnkl0l";
+"juraabbrev.source-2019"="9ixz4m7y6cslk2977n0nh792nhqa6l6s";
+"juramisc-0.91"="w2nzviyg6498v4x8vqqp8kc9p2cr2fyb";
+"juramisc.doc-0.91"="0yczb9jcva6i9wvkdpwfd0l9c522krnc";
+"jurarsp-0.52"="bwldii418vmf3b37gnm56f65bzyjrfhj";
+"jurarsp.doc-0.52"="2rqnnrbk56p5i1bi7r9l5y9q8mbdmiip";
+"jurarsp.source-0.52"="0gwifinaym6yjkimyf2m3dg10pld0i4z";
+"ledmac-0.19.4"="kxh78l0ap8zr2rncqg5j4vl7h2f7ajb1";
+"ledmac.doc-0.19.4"="qqziv44yv5fzpk5dnfhjrzdfi4v63558";
+"ledmac.source-0.19.4"="z6n9h86q7yk9rfq87v6ks03b5kqw7cyg";
+"lexikon-1.0c"="ifdy5rb6ggar6w643y94y729bbn75h41";
+"lexikon.doc-1.0c"="52hidkd52nx6dz7ga1lipv6r9l3kcnnh";
+"lexref-1.1a"="4av5iad393sb2vqplzfra63wl1g3pwpd";
+"lexref.doc-1.1a"="3nzknrs8c80yxhw9hf0qpzgx3lpj4hsg";
+"ling-macros-2019"="166zs29qcy5bs1ml9bl5q4ydvx15yhlz";
+"ling-macros.doc-2019"="7b31g3wp6vks8b3h01pf2ifnqgr1r1rn";
+"linguex-4.3"="srm8cr4dr0s29ydpvwf2mhm5gplgv18q";
+"linguex.doc-4.3"="w7jgr0hkj6m368p6x2l3b37m9px04b4f";
+"liturg-1.0"="73vvqhnk6ll3ibzl2gk7znkfm57k0286";
+"liturg.doc-1.0"="r0i6252kbg724crlphqc9rii0xq45jzx";
+"liturg.source-1.0"="8q74i94hbnswf7iscpdm889w3wqvcbz6";
+"metrix-1.5"="89mkz1xmzm0i24410wdhxc2wpr32as11";
+"metrix.doc-1.5"="vr2gg2hy407cycqa00b4iw6lbmi0l54a";
+"metrix.source-1.5"="x2w7zrjw7nxbdiszypa3fnd4am4hhk8k";
+"parallel-2019"="d8gik6iva6h6l2imix4bxb5w9p8j87ka";
+"parallel.doc-2019"="n3dww00ms1a2m3v6fflm637hiazdrqrs";
+"parallel.source-2019"="vkx4q8liyqx0n70dpq6pqv515x1gbr7f";
+"parrun-2019"="3b2gnwqll6qf6x5f6gzh9ym1vsba6522";
+"parrun.doc-2019"="8v8338i5c6lcdgcdcwhfkb0d5brc3n2z";
+"parrun.source-2019"="2bvqjwsq7ngr7n11vnqnwhqzldrb73ri";
+"phonrule-1.3.2"="7gxkh4k5g2znwdrrdy394iw08khwnkvd";
+"phonrule.doc-1.3.2"="h353x4isnarn0bja89cb7104n4wda95l";
+"plari-2019"="nhdf38fv3h24zqq0bzwax05bfvrzmx5z";
+"plari.doc-2019"="i09il1b9f8cchmhc9pj6ndngyym5vd4w";
+"plari.source-2019"="5n2x3k1mf9palhxxlqpqkffd3ms3zrfz";
+"play-2019"="r6ryb6v6svlfv9i9j6r2a7ciks2k53bv";
+"play.doc-2019"="b5kjgd2gvgz5228m98l3lhaawmdfp40h";
+"play.source-2019"="jk04llsraw9d9gl5grvr019rjnkha1h3";
+"poemscol-3.14"="5qyj9w5bi9j4shvvyj7gb84hz2dm7zs8";
+"poemscol.doc-3.14"="f8gcghy84zwpp04id30687hp7hfddba1";
+"poemscol.source-3.14"="rxfy4b92d8275dkis2kjncc6ilmlmknn";
+"poetry-2.0"="f4597yvh6j4qrnzmvrpsc1bmaai5g7k2";
+"poetry.doc-2.0"="9vgmd2rvp38lp2xka75my5i5227j2nhk";
+"poetry.source-2.0"="waq7n2xpvy3fqvqb0x2akzasz1dgl2jc";
+"poetrytex-3.0.1"="a7a68naj2vngygl078qcy6qpyvgjqp87";
+"poetrytex.doc-3.0.1"="d7vp6y5vm8sw1vq3j723ksvivdk3v2a2";
+"poetrytex.source-3.0.1"="v4ynl1n0sgg2n5g0ya2ncm7k1fibfmgg";
+"qobitree-2019"="jxxsb3s665887m15a2v9q4ybdzc86x9k";
+"qobitree.doc-2019"="xi15qg62q42sgh4115gp2mcnv7nriwiz";
+"qtree-3.1b"="d2wip0zniiihfnm77v0rzd95f4zvf9dp";
+"qtree.doc-3.1b"="pzpwi4bdw8sxhmyyx16g59nmi0zj8ijg";
+"reledmac-2.32.1"="b8ci6sz2f1fb11fylb9f7y69lsib5wad";
+"reledmac.doc-2.32.1"="vf2q7rkl8pggivj052yx5svy0f5m9466";
+"reledmac.source-2.32.1"="1lgdnmcbyyd3b8x25hz9mms891ldkw15";
+"rrgtrees-1.1"="gijgmkpg84730ywfcangcf301kff14n5";
+"rrgtrees.doc-1.1"="l557gafpfn0vm4ajcaynvqf14axn1rrq";
+"rrgtrees.source-1.1"="al765qzv8rz1gd9dw672j29q1i27gf2y";
+"rtklage-2019"="j7v1rhi19ly8i5h2j306nvhnhp3wjx8p";
+"rtklage.doc-2019"="02dpc8m2pyxqmpvlls86k2gy0yp8gqyp";
+"screenplay-1.6"="c4jv8c3zrqqjp25nxv1wwp47jy26vdd0";
+"screenplay.doc-1.6"="7vlv28kmw3pag35r1p9q1mhvz005gwv8";
+"screenplay.source-1.6"="88zp5a7raa7ic4474yghk67jj31k3377";
+"screenplay-pkg-1.1"="567syh6jgvm16ch9hhlirgxav4k424ns";
+"screenplay-pkg.doc-1.1"="gvd3ma5bmmcpiq1jpi8081lcvk6zpfgi";
+"sides-2019"="4by0j8k8xj6baip7kdvjr5x3srvz4wbf";
+"sides.doc-2019"="7kcin18x8z42axnrmlqldkzqqbvsjzvl";
+"stage-1.00"="bi5p7sggcnkfmzmjj4535qbraan5yfdm";
+"stage.doc-1.00"="hwjzdlnzybkv0jvgbldansab25ixggnj";
+"textglos-1.0"="lfdr25rxphjmck47gv10zr6dwiwyczla";
+"textglos.doc-1.0"="k8945zjmlx6n8szzighhs4fa1z8zc340";
+"textglos.source-1.0"="mvxkgnsda7v23v765zh7mzg1fzcn0hdn";
+"thalie-0.10b"="wd2ln0n32rvnr8fl2i57hkd8dgdxfbjp";
+"thalie.doc-0.10b"="9j2rg2fh4gbw7jznl0d5kx49x8fhfsv4";
+"thalie.source-0.10b"="pg0mgikmariaqrpd83mdmsilglz5hcpc";
+"theatre.doc-0.1"="lrajd4fl8ib6kabsjpxjr38pdb2gr83q";
+"tree-dvips-.91"="rh2g20j87hg69iym0in6b1jdg5icgina";
+"tree-dvips.doc-.91"="5lwva5wns5mwp1yq94pd31q165gianwp";
+"verse-2.4b"="ip7glx9gvf1c1ggjvkn1ip1vdxycn7wc";
+"verse.doc-2.4b"="vf7lvv27b351xxi81svdqb8hdzcyn9i1";
+"verse.source-2.4b"="9yx8ry4p1d0nvzwzh360xa8828mhgfwn";
+"xyling-1.1"="rxnynyg4j3xzzh27zb23q4qh3w2gy5r6";
+"xyling.doc-1.1"="k41kmgmzw7358f3nhq2ixbxafiq5kir4";
+"alkalami-1.000"="v7sl553x9mw57qsnh66rf7mba26h6m8x";
+"alkalami.doc-1.000"="kg4kz16hp3sylfwrprr4ilc2y4rzrji6";
+"alpha-persian-1.3"="4ga35s96bmxabf62li3kr625nplk8v4k";
+"alpha-persian.doc-1.3"="jk5d6pb4hk1qbl9pzmqm3b45r6ifdmjf";
+"amiri-0.112"="yrfb6z1scjzsm3ih88dfjb5ra9pcyzcf";
+"amiri.doc-0.112"="srqmyfcwdjivj3yzmj9bxbidqlblkvsz";
+"arabi-1.1"="rr1si2q0lih2l2qpascr4kyzy313zyba";
+"arabi.doc-1.1"="cpsn1fgrlivbwqb4n9qrpq3q69kdy3nj";
+"arabi-add-1.0"="djln5r1i53rqvih7wp016j8ga2wqc7dn";
+"arabi-add.doc-1.0"="vwbgh52x3yh6yxhfx6p7m0ljmsrmr4qz";
+"arabluatex-1.17"="a706pfa13hlkdb77bn6j7bzx7g3lf07p";
+"arabluatex.doc-1.17"="py41ksm1nyrv0sc5bx6c5hpal49ph1h9";
+"arabluatex.source-1.17"="0yzrckqik3jydhay3ab79gvmgj9chg53";
+"arabtex-3.17"="fr7avfkwpdbx619kq7h1y31bx4nmkp5v";
+"arabtex.doc-3.17"="b5ng3w5g40m9c3x87nih862msx5nw292";
+"bidi-35.9"="b5dxbd8dlxw33palhswzplasbiipf44a";
+"bidi.doc-35.9"="sl3k8nkrwpw7s36c0db47apalwzhvxcd";
+"bidi.source-35.9"="7vqc2v0cfcpblf94nl6lw7nzzr89k2vf";
+"bidihl-0.1c"="kwa5li9yi8wb452g12y2h0ar6lpqdmmr";
+"bidihl.doc-0.1c"="558l7z4b7giwqqzj5496r7nkzv1wrnqq";
+"dad-1.2"="ivwjd7fhzgk4kl0iwzs49jvhqsb44ysr";
+"dad.doc-1.2"="6sy939pdqxsz24lpfqvb5wx1914nc38h";
+"ghab-0.5"="xlrv9p05w3vm0vyzay9q16rzh1x8lk4a";
+"ghab.doc-0.5"="vhpydw0spag5nlqyr36iy2v70db2hmpx";
+"hyphen-arabic-2019"="lsdwn3707i0hxkj77bmm6l22r9yqrq3a";
+"hyphen-farsi-2019"="54ahl0hlvfpfjnjg9ddg1gxvb1a38yn3";
+"imsproc-0.1"="ylf3kd1bc5rafzfyil4y7wxp6vd9nsm3";
+"imsproc.doc-0.1"="3kv8qk7pnfg2w7xm3lqcimi8vhx8jwf8";
+"kurdishlipsum-1.1"="8frakqhm5sfw4f9j514zh63la69nwnnr";
+"kurdishlipsum.doc-1.1"="1spiraw1mpli2hyyxdh43r72dkr0446a";
+"lshort-persian.doc-5.01"="hba2q0ni1c873gpg2qp835csinw78yi8";
+"luabidi-0.4"="wczrrkgbm40ba2cy5yfb8w0ah6q9s0jy";
+"luabidi.doc-0.4"="319i8wapmdv1gyx5sqy19sql5pkf5p8v";
+"na-box-1.0"="vfrchq5jqb5s18zgngk2qsb0svmnc7p9";
+"na-box.doc-1.0"="7s4wcsg6khlv2lgakqgph9livd38fil9";
+"persian-bib-0.9"="sakc18mdqnzymfvgkwsxvrjd9b5a7dqm";
+"persian-bib.doc-0.9"="q8vjf93qjdkm6qz099464mwdl4w4gjqi";
+"sexam-1"="jlh6d5mzxqbnkn6yy963fnhc6rmggigl";
+"sexam.doc-1"="532l18ix2czx5r80ar4g7mqgdij4r5xx";
+"simurgh-0.01b"="n8bv87n12x5xv3h41487vyqpbigv3qkc";
+"simurgh.doc-0.01b"="z3qq4jx25qyxqmnfbpsdsayi59fkaff6";
+"tram-0.2"="7wcas9syxfvm8pc7wnp817zd9y4q941l";
+"tram.doc-0.2"="ppbq1g4k1swjv7y9qkqhcr0m25knssk5";
+"xepersian-22.7"="cvkpfxxrlx7sqjdflg2rsrh3h6n9ahln";
+"xepersian.doc-22.7"="7axbpnxr09imnpyl0c0qd5m9806a9814";
+"xepersian.source-22.7"="pbpwh6rqh6c3qj8q4l43smbhc3a5kxy5";
+"arphic-2019"="zfax00567h7mdlfkpxihy379cwqmy8ng";
+"arphic.doc-2019"="55lcjk7s78qa39dqd0wj0za5f6hcnkxd";
+"arphic-ttf-2019"="s5kckgwzz84bm3px9cmnw2zgvmaq27yh";
+"arphic-ttf.doc-2019"="s7y95hay8ygbb1viv250vkzf0wbm9s3b";
+"asymptote-by-example-zh-cn.doc-2019"="czm77scbklkpdjgk93w1g8ilchpx3vpr";
+"asymptote-faq-zh-cn.doc-2019"="yzyywm1hv1hs9ngddhdgk7frrpnrbsr8";
+"asymptote-manual-zh-cn.doc-2019"="86bz3am5w7xx9si2a09s432xh882ix9a";
+"cns-4.2.0"="3m0fbs91x53iiqvzl0hs68cks7y3m3q7";
+"cns.doc-4.2.0"="1ddyimvshda2zf3mcs6rk1n4py2aglfq";
+"adobemapping-2019"="xcyk94x5n58vxnbw1j1wrkdizmwi6i74";
+"c90-2019"="jfyd605szid7j3a757fihxhlvaqvprdd";
+"c90.doc-2019"="1v14l7vqrdbc6nhg2k2gshq7p7cqzyk7";
+"c90.source-2019"="l4kfmrrqbnq3y6xbs0izdccvikpsw314";
+"cjk-4.8.4"="zdw3lfngj5zg5d118xjndaj5gg7r0wy2";
+"cjk.doc-4.8.4"="rlwcxn7lnyxc28v9gjscp3p7p9mgzwhs";
+"cjk.source-4.8.4"="i9g2nbr71gnvx71a55aj07qrgw67vhs8";
+"garuda-c90-2019"="d9m07vl6glf3zjb44whqb3flsirwwcx1";
+"garuda-c90.source-2019"="rjy95hqlvbds6pn29r26kh8sshxnd21a";
+"fonts-tlwg-0.7.1"="c6m45bqrgmqhk12766k8ahr0hmimky1g";
+"fonts-tlwg.doc-0.7.1"="xc4wi0yfws579n2z42wssk8cg7m0ildc";
+"fonts-tlwg.source-0.7.1"="3r0l4svknzyp2kpa84kgh2fk23dnhp2g";
+"norasi-c90-2019"="d0972qmh7nk9isx54d46f7jscg6mwcrz";
+"norasi-c90.source-2019"="f0z1ppqy8szazpnwmg2ml8cgasdf5ivs";
+"uhc-2019"="viphfgiqfb1w9kb8103znmzy09n6i45n";
+"uhc.doc-2019"="hp3z13z2yxkrgr7z3qa8pyf4d98rd37z";
+"wadalab-2019"="cpc689ywzaqil8xz78nkzwx30qmqixh5";
+"wadalab.doc-2019"="9gjsw3c2hlxnc1wxvky9mmqi6dyq4i9j";
+"cjk-gs-integrate-20190816.0"="ppc68sldmkv22bjr2zs8czj1s8jgdifd";
+"cjk-gs-integrate.doc-20190816.0"="qm5clja7hsdcivm6ql2xg6l6xdrgy2b1";
+"cjk-gs-integrate.source-20190816.0"="3dzd7xb4bbps69c79dpw7zr4j9h8azka";
+"cjkpunct-4.8.4"="8hwj54qw1xrvs5bn8bncdynich00d0ss";
+"cjkpunct.doc-4.8.4"="c8wmkh6h45an46jqph2s9ljbgfyw1mf9";
+"cjkpunct.source-4.8.4"="0qfm89f4l8jfmgimhrh8vvskca0d866k";
+"cjkutils-4.8.4"="8w069zvnnpkr2qcmsqxh6p64db57b82g";
+"cjkutils.doc-4.8.4"="khlrbsmdr6gadq98xa4mwxc3h2320d4i";
+"dnp-2019"="jf1zsbg60d074ksrz0xk9ihybbabda1f";
+"fixjfm-0.8"="r24s5c53wvxaacm4fmnmp10nl8096nlf";
+"fixjfm.doc-0.8"="inhixa1d1hr6s2473qp0hfchvcn84y45";
+"jfmutil-1.2.3"="grbbd61lx3b8nicqs2yxf3p131abr6bz";
+"jfmutil.doc-1.2.3"="4p1fz7gk04dnzjxvcmzc2gn3h3d7dv80";
+"pxtatescale-0.4"="psd9rlxh4i4rqxgii61r2s43sqy3kibx";
+"pxtatescale.doc-0.4"="bfd49446kr82v3h06mq5hsm1ji2jwzck";
+"xcjk2uni-0.8"="sy7lqifnwc11sf0rzfj208rmlzmv9v2x";
+"xcjk2uni.doc-0.8"="03y9sam560xbp0px56glih05gagz050m";
+"xcjk2uni.source-0.8"="f9g23l42ry05xb3b73hf0vnbi6yg9wyr";
+"zxjafont-0.5"="w83bi9vv8zl9py0jva0khxlbbbdvqllf";
+"zxjafont.doc-0.5"="c8g15pphrd6980ixqk16zcw3z1qmjv1v";
+"ctex-2.4.16"="6g9cw6bbdrzpi6mq8is84qn3pwqc6dsn";
+"ctex.doc-2.4.16"="s7dcd31263b08w2yj86k24k68hbnv1lk";
+"ctex.source-2.4.16"="9cnkch1830v3n2fi6p5n8rjzi390yblc";
+"ctex-faq.doc-2019"="vjxcdrg7i6p9fgrgzfvykibjghpigrz3";
+"fandol-0.3"="lxnjp8m4fcj3pv2hnhib6gjdh90q1ncz";
+"fandol.doc-0.3"="fm0ac37apm0dh1073lp1frja9xbsrv4l";
+"fduthesis-0.7d"="mdxv7dg6a9643h0fxzbalwbr8b76z9fr";
+"fduthesis.doc-0.7d"="cyc56p8fsv2x36y80f3gyl5dhh64am7g";
+"fduthesis.source-0.7d"="vzy2bhl826ldn0ncl440qsgb5rfs6h4y";
+"hyphen-chinese-2019"="yizvna5758n44n2an6wk9bcssa4r9gxz";
+"impatient-cn.doc-2019"="8k1gcnqs5gghbarikj17ykh4vgahpqbw";
+"latex-notes-zh-cn.doc-1.20"="qx777fwi8k06qvknnll3crc1j0yvraxs";
+"lshort-chinese.doc-6.01"="8x6ywzqcixiznmqd4d86gib8iii9mfv7";
+"nanicolle-2.01"="9rpch3hn0y8gbxa4wpiyj4gady989ip9";
+"nanicolle.doc-2.01"="30rgdanih3dpmylr5byma5r7yymwb332";
+"njurepo-1.1.2"="pry1ksmskbm6y5ic43v0hdjkz5mix78h";
+"njurepo.doc-1.1.2"="91clrmlgyja8i7cvi1cbb204dnp76rj2";
+"njurepo.source-1.1.2"="3axj6ar0n3d3lb92z7f33nlxd6qjaa98";
+"pgfornament-han-2019"="906lp285f9mscdc9p40j40zl26ifvbh7";
+"pgfornament-han.doc-2019"="77f050rip24vfjcbylda57chh16n4vfy";
+"texlive-zh-cn.doc-2019"="j99mp1i4j3kp28xyx2sppsrlwp4iz1rx";
+"texproposal.doc-1.4"="8fnrxmyg4wd11kmdh4jw8l1313h0sgqr";
+"upzhkinsoku-0.5"="0yhh0ab2sq4fszra362z9m2md8ycydvk";
+"upzhkinsoku.doc-0.5"="1ijm19cqsdsm9q6a7rknl0zsfa13g28g";
+"xpinyin-2.7"="ggl7qhyn7khg99yxnh26r81vnfhy5gg5";
+"xpinyin.doc-2.7"="n20130b5lslk4jwd7ryxrqcdyhs5rsdi";
+"xpinyin.source-2.7"="20hmsmzva1awcwv7c25y0v7kfm8cm2rp";
+"xtuthesis-1.0"="0lmkzfvp34aiixjir2l8qs9nfpbjb3gn";
+"xtuthesis.doc-1.0"="vvqmvgjjinj3pm8r3kp48bbxs8kzgs31";
+"zhlineskip-1.0e"="k8myar8fv79b0rkjbwimzm24gag072aa";
+"zhlineskip.doc-1.0e"="whb613dc11kyrhgc26nbyzmd74wi8klc";
+"zhlipsum-1.1.1"="4vf2kp4yb045j1rawnz4n52a8v82p37i";
+"zhlipsum.doc-1.1.1"="miraw6ch0naabp8kmj58mxcjqdvn2lcx";
+"zhlipsum.source-1.1.1"="wmir9nxkjijs5d2mnm49ryd7q0rb23l9";
+"zhmetrics-r206"="2li2anrf74242blfd59cxfyn13iwmfxs";
+"zhmetrics.doc-r206"="njh801caaxkfyw5nsfv3q36gkcql14pj";
+"zhmetrics.source-r206"="ls3gazkf44sdal0f0k8n46ml2fgigfsm";
+"zhmetrics-uptex-1.0"="d3r2n6ndjd8zsmlq4hgm1x3gvyvrfnc1";
+"zhmetrics-uptex.doc-1.0"="qqzvr4mf5fg5r8bg6j87yk94nznhrscl";
+"zhnumber-2.7"="p4mgbi2yl3p41xz7hxx2hdp1h4bvqym3";
+"zhnumber.doc-2.7"="7d4ff3ir4qp94ym2636463a369h29b0p";
+"zhnumber.source-2.7"="x2w9f8g02id3g450vhpqwp5nlphnsypj";
+"zhspacing-2019"="p7w7cisgid16ndk1mipdmpn5v7nc1kzf";
+"zhspacing.doc-2019"="kjnyalnxmb2f0kj8w52nvm97a9m1dfsa";
+"babel-belarusian-1.5"="dky0w9qw4j6mbsmx6kbcgqn8p9grbbmj";
+"babel-belarusian.doc-1.5"="3mzf3fmiraiac3w6cd45fy3phm5714qf";
+"babel-belarusian.source-1.5"="bisqg51jp7d4f8mjzirzw2v0f6m78yfk";
+"babel-bulgarian-1.2g"="4c5cdn8lijfw1qhkfz69pvlvl2hcg5hz";
+"babel-bulgarian.doc-1.2g"="pyikwcg47yj8nh416g6wdzwk7a7f460p";
+"babel-bulgarian.source-1.2g"="km3vz4iykb1pckz9bgllgd6xxc77k2c9";
+"babel-russian-1.3j"="chw7lj98rp10jkin4l03d1gx12a8ki5h";
+"babel-russian.doc-1.3j"="i56cj5h3h40ml8an2sbbj8dzyazacwd9";
+"babel-russian.source-1.3j"="cnwygpq3mb5y2araady6kr86wl2bbgdn";
+"babel-serbian-2.0"="nw8spfg8l705baa9x1n61jv87988x81n";
+"babel-serbian.doc-2.0"="ggnbzl98wjm1zak4v1cj6i22c6hmm5iy";
+"babel-serbian.source-2.0"="mlwg9g1nsm1cg0n1x7bpagbssb6hny5s";
+"babel-serbianc-3.0"="xmd8wqwb2fnq360si9ahpr4acrhj6rvv";
+"babel-serbianc.doc-3.0"="8kn5ngjaq927k1xb6lhmpm62p0h7w5r8";
+"babel-serbianc.source-3.0"="n1lsr7mvbi0pn612hg8kr6bbr3bgny8d";
+"babel-ukrainian-1.4c"="zkrzqv0a32c8dm30bin1axbkd1i7fxlm";
+"babel-ukrainian.doc-1.4c"="vj7acrkzm3cdby2aczcancag1y6swvl0";
+"babel-ukrainian.source-1.4c"="yh5qaricqrn5lmvrz9vdycbr5y2lpmr2";
+"churchslavonic-0.2.1"="5pgxy858w0nr769mn4g6832fc0687vfp";
+"churchslavonic.doc-0.2.1"="pz4wqhar8vfzyy8aw4szas78hqs018lw";
+"etoolbox-2.5h"="vkv8mqbzjsyh51cqk0d40gl48cj1zcmf";
+"etoolbox.doc-2.5h"="9rj773kv9ia8v5brs2aw8f4xrgg6r053";
+"hyphen-churchslavonic-2019"="ya6jp4d0krjnwh0qf9lspcnsqrrrwy9f";
+"xcolor-2.12"="d4hv07lqr1p36mkph8s45w93ykk2i0jg";
+"xcolor.doc-2.12"="50k9wrkrb7gaf8dhpq4gbsbyfpbm6dz6";
+"xcolor.source-2.12"="zgpsq8x4n6m23a9d1m5m06davpxv76id";
+"cmcyr-2019"="ba4hsn5a22k73rhiaip6dv560wk5sxv1";
+"cmcyr.doc-2019"="1j63xbl85z8izha2jl2klagny3hk5wf3";
+"cyrplain-2019"="dh1vcz2wdwddkjdqihpc2rlsqjzm4cmm";
+"disser-1.5.0"="m0gldqzdx2idh4ivy43jd13fgmgcsr94";
+"disser.doc-1.5.0"="6s5g533qr53rg2ha6a7p7xr4phcn11iy";
+"disser.source-1.5.0"="h4f1z0azxfnbv1cba1f8z5wfy25hfvg0";
+"eskd-2019"="63ack7kfjg5gf6xv76yfla2z0k9cxzv7";
+"eskd.doc-2019"="g3wsmrvwfz2lm30w2fys9md9nqv5k8jq";
+"eskd.source-2019"="q70i7jl8dkf9vakj558fgwqfbn8230q0";
+"eskdx-0.98"="b2dx9jv2rg97hmlf3gx4h4l3ci16chr2";
+"eskdx.doc-0.98"="l1r5bapnlsz61yasg9gyrzp6za8iw0nf";
+"gost-1.2i"="i4ymhad9kyybwc4072yhc204pr9hfw3p";
+"gost.doc-1.2i"="vwsvpn0p9d4888107r2qj7rghl3l50xg";
+"gost.source-1.2i"="fawqr3q9mk5ki6qgqzv3xa4kz5ak2srq";
+"hyphen-belarusian-2019"="r1j6c9gypfsnp6c41wy79f48xs4s0l7y";
+"hyphen-bulgarian-2019"="pxzvl20al54knx6qykzad7jzis6bjj4m";
+"hyphen-mongolian-2019"="1p4y823w4j6585glzcin13py9jr86xm7";
+"hyphen-russian-2019"="b77ipcv96am0vyl7c2pps2g0bjfb3q39";
+"ruhyphen-1.6"="3d6lyf95cgi2yc8lsy9dz6z5vmvcx1l9";
+"ruhyphen.source-1.6"="i6x3fiidyvl2zkly1p4s7qzgzzza1in7";
+"hyphen-serbian-1.0a"="f498a866scqcgq5z4l03dingqabbvd7i";
+"hyphen-ukrainian-2019"="y8yaggp6qs827vx3kqbdimpvlh6rmhsx";
+"ukrhyph-2019"="l60kvxf1mii3imnl0swqskcrz0bizb5v";
+"ukrhyph.doc-2019"="4mycq4cykkinm5h946xmrng59jghvbp4";
+"lcyw-1.1"="0bxzb7w4z0w04b9c1cvak8i2cp3f4h74";
+"lcyw.doc-1.1"="5kk74h4902f2zjlid26h1rg3fvw0sq9z";
+"lcyw.source-1.1"="3jq3gmm85lr494mm8j61z7shr3c11jg5";
+"lh-3.5g"="h0kq2pb7iay15i1b3sjx3q2yk63pycp7";
+"lh.doc-3.5g"="xzbkgxqjzbr2cx6q5xqqzgynk25jvkvh";
+"lh.source-3.5g"="mh8zzabsf553ml0al618ycym6igh9qyg";
+"lhcyr-2019"="3nj4zxpcahn2ryz47v7nh4k05j1lv6di";
+"lhcyr.source-2019"="kvid1h3vgbzmpn65sdjs0b8dspm5xvyh";
+"lshort-bulgarian.doc-2019"="r2yc6zzq44wddndp762a3hg78ihv013l";
+"lshort-mongol.doc-4.26"="5pj0i8wxlyd35sd3z7npwypicklc0nl3";
+"lshort-russian.doc-2019"="d2sgyyi8aic1j35fqrniim2bcpgk4q0a";
+"lshort-ukr.doc-4.00"="4g85cmgwa4y64rbc51zdw42m2f3m55ps";
+"mongolian-babel-1.2"="2bjw94a6r5wyn2i5gsclrn5fadh60jfg";
+"mongolian-babel.doc-1.2"="darkanaxxhcx7r7nd4mph37m3r29y7gl";
+"mongolian-babel.source-1.2"="cfdxndayfrj10xn000ckxhiaa1qdvypd";
+"montex-IVu.04.092"="ig3y6y6vksci0567g91hkgf8pkn5x56v";
+"montex.doc-IVu.04.092"="phm1049anhqvppklp4cwczfadjmakda3";
+"cbfonts-2019"="bzgl9s6zv9fqpg5m9gicxmpscw7m3z1d";
+"cbfonts.doc-2019"="6cj35wgyk4ss36wc0szhfyqcj3diyd50";
+"cbfonts-fd-1.2"="mybny72ksiflq3lq2y23059lzxidwz70";
+"cbfonts-fd.doc-1.2"="rsxf6gy62snszkcpdzry9gy44falx6ml";
+"cbfonts-fd.source-1.2"="73f27d7a4c2frvvhp1r2z4ia84qrh1cw";
+"mpman-ru.doc-1.004"="6l3vqm4sxcvb5nxy582g2nbr9mwvz1dz";
+"numnameru-2019"="c3fn4n2asbh2lqrn9y44g6yxad9f7469";
+"numnameru.doc-2019"="ibrlw13zibhvhr8mipw7hs2ik1f96z73";
+"pst-eucl-translation-bg.doc-1.3.2"="cqxppyh4546ybhnlk1z4fjkdyw9ij5x7";
+"russ-2019"="981kkq2xmx0r6k095308270hjvmdsm3h";
+"russ.doc-2019"="878fl0cyka7jj5cvdvq19fvlfic3izi9";
+"serbian-apostrophe-2019"="q4n9k2fn70hxcf9chy6a5jw07pq2cllp";
+"serbian-apostrophe.doc-2019"="0yxbbv3xz0jf63g0kvq5dbdv2myc4rks";
+"serbian-date-lat-2019"="3s5yc0xcg6fsaisn7aq0nv16fj69wmws";
+"serbian-date-lat.doc-2019"="pa9rvzpbczmfm4w0977xx05c5sbl6mxg";
+"serbian-def-cyr-2019"="k46ahhqbdg23mx4ld0953dnsws1imhwm";
+"serbian-def-cyr.doc-2019"="zl8x855zmhry6n754l5x9fz8hjn27bls";
+"serbian-lig-2019"="63mjkszwsr22mki4cd6qcskdkk1bg3fq";
+"serbian-lig.doc-2019"="q07af05smgmj1k3a4mba75brqrxxhx3i";
+"t2-2019"="ihwn58py69fx1fx2bjqwyg8caiwwlpy6";
+"t2.doc-2019"="gsqrf898i59wsxcm8b06qfrasfw335r4";
+"texlive-ru.doc-2019"="rqajnqrdlq0n42kkkgp49c8si4bsfgd4";
+"texlive-sr.doc-2019"="r7mj30njj30ymq22hhwmdvz145qbkz25";
+"babel-czech-3.1a"="gdcs2xpcgblb3v0m6jf3ppx643s3cj6r";
+"babel-czech.doc-3.1a"="g2km6r7d90d3f60mfhw4a7m9s0090sg5";
+"babel-czech.source-3.1a"="5s1n9fykrbzppgb36pvybjn9jmj7cxxf";
+"babel-slovak-3.1a"="cl43hp1pnxc1gp4ndrqwv1cv3fh0h47c";
+"babel-slovak.doc-3.1a"="igrg8syk1kd3mq4sm4jrdgsmsr1y9jb1";
+"babel-slovak.source-3.1a"="gvlkvq0zmhdf57a6vpfxlvmvz7ma48af";
+"cnbwp-2019"="whwdam81dc6g8pq664mrmnbxz4f0iwdj";
+"cnbwp.doc-2019"="qv1fxhmq1pig9rq3swhvwlwpm4lmwrjy";
+"cs-2019"="ks76xw08rrkrcxg7rv72w18glx2vncfk";
+"csbulletin-1.2"="4ivi3qgba2mbbhs0wy53hg4q5794g54r";
+"csbulletin.doc-1.2"="4s9iz7qzmwk5az3a5nwy6vw4nl6rk6na";
+"cslatex-2019"="4gf3lz23hvrqgqbvpnq2wc3bwrb2jdkh";
+"cslatex.doc-2019"="7wlgcn2v488xfjnz27rmxb85zlhnb9by";
+"cslatex.source-2019"="fmrx0y2xnxcdczhbqyrh7w70wh7mrccq";
+"csplain-2019"="71mbj1sp6i5n6lhibjlkj7aqb5qzdc5h";
+"luatex85-1.4"="ka3px4aiyi8gq487i085s31y9l95jzp1";
+"luatex85.doc-1.4"="ac2agmy9dkavln2vnd63fmavv7xnkdrw";
+"luatex85.source-1.4"="wpm4dw7j6fikz3dqa4zk3r5avg4isxr8";
+"cstex.doc-2019"="ncjagy0ifn8mw4v4nr30dgzif1jrsrqk";
+"hyphen-czech-2019"="qkh3d1nadwn280p26vx73lw1mm04hyag";
+"hyphen-slovak-2019"="hd7bxmv96ilfpaccvm8fn9rhllriv1h0";
+"lshort-czech.doc-4.27"="2z8dygvm9ilvahsx005zb7z5ss8hxbsf";
+"lshort-slovak.doc-2019"="qnj433q5hfg9cpy0z281zq17z7dr5vh9";
+"texlive-cz.doc-2019"="4pfpprl68pd6cdfb3lzmxjn8d74lpgz2";
+"vlna.doc-2019"="bx04hcv9681ry7h6bx01z23ciwyl02qj";
+"MemoirChapStyles.doc-1.7e"="r54d4g3nh30k5x99nfphvzg7k1jxrijn";
+"Type1fonts.doc-2.14"="jgjs1127jqdrrgnkv3r8p1wirc8lb2gl";
+"amscls-doc.doc-2019"="4hsr68pmd3v06fnxiynmp4xpgik6v8g2";
+"amslatex-primer.doc-2.3"="9d9pxr0jbjm6zwqd51f7m2bzysdq5gv7";
+"around-the-bend.doc-2019"="a6jilpw0nw27vlj1shnhxfv92yn86ys2";
+"ascii-chart.doc-2019"="9x2srgi2sjd6zjjz27p6hs1w9sj73bcx";
+"biblatex-cheatsheet.doc-2019"="vcmb6x1w0cfgvyx0hl8fsv1nh2ffhg6g";
+"components-of-TeX.doc-2019"="7sc5ryfj785jifvw9b44yni2ifmssr7f";
+"comprehensive.doc-12.3"="bn5nyhw62ks4zrhg2gk6m05v1s051921";
+"dickimaw.doc-2019"="jqva0skw6ivc4ikc8m7awd7pgfaxgci7";
+"docsurvey.doc-2019"="0lml7hvr42zsfk14da493xsl24z3i8vx";
+"dtxtut.doc-2.1"="108k3lyvja5wmg8gxyvqskbz8wwh0cyw";
+"first-latex-doc.doc-2019"="8vcday36pq5hlr075kjk6hb82ypazjd9";
+"forest-quickstart.doc-2019"="gyacc77yw1l6kksi62y5plxsvkqbf6yv";
+"gentle.doc-2019"="mpxhsl7g4za410b65awmbb5zlc58h24n";
+"guide-to-latex.doc-2019"="8lw0kcinfq2yd6vkbd531zakby60k2wf";
+"happy4th.doc-20120102"="svmy37c032cvip73n4b98c8kh4hvnh9g";
+"hyphen-english-2019"="9hjwbxk2jphca1g8b561gpfhqm9g95s4";
+"impatient.doc-2019"="172g4hvk6d4z4013h44nr5may3a51gb4";
+"intro-scientific.doc-5th_edition"="qx170vpq4ahipljnmhkvbrxv1xdbbii6";
+"knuth.doc-2019"="2w5hzwaxcl1i2pp3ms0kshmza0p5nqi6";
+"knuth.source-2019"="6dr6qqw0ih676vxc0rj6qgjc0zpac89p";
+"l2tabu-english.doc-1.8.5.7"="j7m684bvmpv1jaa6s856dj9aknrwlqiq";
+"latex-brochure.doc-2019"="azp69yf9xkksqan9n096wabgxlk9hgsn";
+"latex-course.doc-2"="km59hhadaad0hlpa07rqmx91036h123r";
+"latex-doc-ptr.doc-2019"="1dsc8ym34nlj315aln3npfibx37n9c3z";
+"latex-graphics-companion.doc-2019"="70mixdsyyx6jf6dc46qp5kgyx9qwkma2";
+"latex-refsheet.doc-1.2"="9gvmiiqg78xn8348cymz3wfzi45mf8xz";
+"latex-veryshortguide.doc-2019"="mil8qpv4ka19wym6cqz3r5np3n7nzw5r";
+"latex-web-companion.doc-2019"="wzj6qw8bhwr82ipsph640ya62mpj6k3r";
+"latex2e-help-texinfo.doc-2019"="jmg3aygadzdj3jvdsd26rvg9ipjbwq7d";
+"latex4wp.doc-1.0.10"="bxffry3cy7vkcjhdm5yzn4hipma74jdp";
+"latexcheat.doc-1.13"="iav6gzdcadndwli0jar6d7i1711ssq41";
+"latexcourse-rug.doc-1.1"="fxz46xn5hazqy707qrf2mkgk121m6ywv";
+"latexfileinfo-pkgs-0.22"="1hjiwxdk07hl42nyb14azh2w8jyyljil";
+"latexfileinfo-pkgs.doc-0.22"="4y6qxvdwzifa0xj1r2xrp2g5xi7q2ssr";
+"latexfileinfo-pkgs.source-0.22"="b7h771sg8f6c8fq8j7vjbq0yhsp836a5";
+"lshort-english.doc-6.2"="v03zj1nwy584c6idp2d42n9mm7prnqz2";
+"macros2e-0.4a"="5kjjl3wkq04kshrlrrz4qqb4m61mz4lf";
+"macros2e.doc-0.4a"="9rgjs3scm8wavsbgljxy7rpgdwy3nsl7";
+"math-e.doc-2019"="jl3c0l594dii8wjylbc9nmaw6bqkmxvy";
+"math-into-latex-4.doc-2019"="0k2w8mjvn4h6jplrks9mxj6m1bnfmlz0";
+"maths-symbols.doc-3.4"="xi1pjz6rhyw79b10fpdfaa8vc5sf1wlf";
+"memdesign.doc-2019"="92v86h91snhrnssghhllvr0h05cacpm4";
+"metafont-beginners.doc-2019"="7ql41977dp698l2fjlq2xyf221y6xn2f";
+"metapost-examples.doc-2019"="ljbvw9v7xilmkzmifm1vx18dfvqlw6k6";
+"patgen2-tutorial.doc-2019"="3wv4sk7yw0mpy0rsd1j04m8mqsbi465n";
+"pictexsum.doc-2019"="mcxxxznqh0a94sip9vpdbjv5nv83j66s";
+"plain-doc.doc-2019"="5bqxdfbl4fvgvw42033vg9w3kjn7pn49";
+"presentations-en.doc-2019"="b2j47x2qg2rhn4d5pv7413fca2jd7fb9";
+"short-math-guide.doc-2.0"="34mdd47c63946iz86c2r0g2jx11q4mhc";
+"simplified-latex.doc-2019"="mmxjkyv4x0am911mkxmjs1l5ql5z19h9";
+"svg-inkscape.doc-2019"="l8vizn8al3rzgxxamdfqm6hsrh46xm8m";
+"tabulars-e.doc-1.0"="3vrlw3x3h5k0awnns1q06bwzl3ff6mpw";
+"tamethebeast.doc-1.4"="14cs89g2l3bn3xhfrhrw9pfdf65c2xcy";
+"tds.doc-1.1"="fmmdgblpf26x9ajn16g024sn5sbwwy0s";
+"tex-font-errors-cheatsheet.doc-0.1"="4a38bjpzdbj91msw8kaxmk3c6qahq1r5";
+"tex-overview.doc-0.2"="bj9pak1z31fwblcv5bj2imd4p33bi79s";
+"tex-refs.doc-0.4.8"="ad80b3r5rgj7n4m2hc5r6ccjczikff3v";
+"texbytopic.doc-2019"="vcr4rwfg8m85mrlsp0hg3ic0gmd0zcdw";
+"texonly.doc-2"="x2h7skds6icw56bg0p8f4aaryn52sz75";
+"titlepages.doc-2019"="g0fvssp703yk3c2icdb8qgalxikm0xq9";
+"tlc2.doc-2019"="k8qb9ak5wx7k4c4j5g5i681di8cc8p5s";
+"undergradmath.doc-2019"="kp1xxp209mbvyhpmh62yp53c6q8ppnwk";
+"visualfaq.doc-2019"="mdskjr2m6y0ljhczhqmfm50xsv8x4k1m";
+"webguide.doc-2019"="xbp0q21rqfq5gmckdfkc671kbr6gj1n8";
+"xetexref.doc-2019"="w87pmm9ra94xil6mm6n2fciavvpl3dpq";
+"armtex-3.0-beta3"="vg6qlgg6nzci26mnphkbcpc8vak9jwbq";
+"armtex.doc-3.0-beta3"="fam9bkmfjn2v54v3f2xjxjarbrf3adhz";
+"babel-albanian-1.0c"="1dasgklnjx05y74bk0pcwn1ivghswmvs";
+"babel-albanian.doc-1.0c"="vsgwp4d6skqm7v0i0d0bvb32zpylk7a9";
+"babel-albanian.source-1.0c"="yar9fs7vp71nsjmjp7hppgwpyd16w7xa";
+"babel-bosnian-1.1"="l6pdr8hm15swhzxx5ly2rd24jnscsyiz";
+"babel-bosnian.doc-1.1"="gahvgi7r3rs553pi00l1q33k3bz59pqa";
+"babel-bosnian.source-1.1"="idi2fhr3wfq31pz63d3fi0zkjm58gzxi";
+"babel-breton-1.0h"="xx0vkazacywgvv0p8yrngvxwk4pmmhi7";
+"babel-breton.doc-1.0h"="jq8477sjlkv398r3r4w0f1r5f35bq8x7";
+"babel-breton.source-1.0h"="pdrxwqva0cm48qpz6q7g6ajcy5kn6s1r";
+"babel-croatian-1.3l"="phasgq7qfxxhvcprkyc0r6wy68q4yls2";
+"babel-croatian.doc-1.3l"="csmz7g2gzm4nr5zmw3z1s9fwwk2r7fk7";
+"babel-croatian.source-1.3l"="2x239jcr4qky01xf2ddhf9pbj79s8xim";
+"babel-danish-1.3r"="j5ndb7h4jwgkk2ianlqy45sa8f59djd9";
+"babel-danish.doc-1.3r"="9y9h8n6g2rwi004chcm8frm60hv16afi";
+"babel-danish.source-1.3r"="slb1z6vbrhf23x471ivngv28mik8n3ir";
+"babel-dutch-3.8i"="5x891i0b2d78xsh61a96cshjncsshmki";
+"babel-dutch.doc-3.8i"="z93rpjg49q22ixnmvv8n4hy1nip4gv5w";
+"babel-dutch.source-3.8i"="3bwgdf7nzmwdrbfwglf6xm5bnf3nxqz2";
+"babel-estonian-1.1a"="pn52pj8gprmsqf7f7i97vllrkjjm2bbh";
+"babel-estonian.doc-1.1a"="nchqv4ahbhjrh6g49fj8xpjv1ghlqzn9";
+"babel-estonian.source-1.1a"="8d3nvwgv9bvhhxsgdicdlf3gsrscaxsi";
+"babel-finnish-1.3q"="j5w0s8qa0jnwgrw5z208bh3afalx7vzy";
+"babel-finnish.doc-1.3q"="3fajpl6c9jaxnm2bf7ccls1nqdhva2jg";
+"babel-finnish.source-1.3q"="gyss1ciz8xazmhfg67yz6z2s9g63p190";
+"babel-friulan-1.3"="xjbsgl2xyfqfrdyv83c6g5h2qnjzw7vf";
+"babel-friulan.doc-1.3"="m4n4fysx9qxf13c39jm4xq624y6jkagd";
+"babel-friulan.source-1.3"="yf6xqza856qdbxdysw08v707h0pcj7sq";
+"babel-hungarian-1.5c"="5l7i970llxwxzy75dy9an9czkbp9p049";
+"babel-hungarian.doc-1.5c"="czi272jfp95lckd97gkq46lrvz3r63wl";
+"babel-icelandic-1.3"="9rkw2wf3b55cs8d29xzpnh5b7k64hhkf";
+"babel-icelandic.doc-1.3"="gjwyjj570d9vwcq6zvzrsi0x8gz240k1";
+"babel-icelandic.source-1.3"="w3kq7v6nwwc6jqr2jrg9a535hgh0nrgp";
+"babel-irish-1.0h"="1y1j2vrdl4piipf9p57028dkmd05y5rv";
+"babel-irish.doc-1.0h"="3kz3sk14j8kfrym9wlvqkgzvik1xjs4h";
+"babel-irish.source-1.0h"="s1g9x340z49y1kgi8b5b1jql1ri2ckby";
+"babel-kurmanji-1.1"="fj2i35f0i3s7gc1qz6jlx68ygnyd4jrk";
+"babel-kurmanji.doc-1.1"="0ys7iva1xqyk72bz0clk7c822wwxsrbj";
+"babel-kurmanji.source-1.1"="wlnp3c18xhb6n8272jq1pp30h6dfqsfz";
+"babel-latin-3.5"="6y97fgf0ivppj9aq77dd4cfgdgzz0gdw";
+"babel-latin.doc-3.5"="dm7bj4snbnf6vxajv9ayz5x7rp4dc6fl";
+"babel-latin.source-3.5"="8cbyxf31qxs6a0pa0xlc2hdxdqxmhlj5";
+"babel-latvian-2.0b"="7m0a5mr8mwxn3hm88ky0nrv88vzqrfsd";
+"babel-latvian.doc-2.0b"="b5zrhmss194cr40s38rmdh58l7y7zp9k";
+"babel-latvian.source-2.0b"="4k79lcf0rafnkk0qzz4qj15wg3hh46j1";
+"babel-macedonian-2019"="y443c0n5dygb6pf923kwj4fv8y991gg7";
+"babel-macedonian.doc-2019"="gk8d4ijhz5dhnlv9jdc6v48fm9zfcai6";
+"babel-macedonian.source-2019"="jfr605jrv1sywgpkhi05v6n6s96vfyq2";
+"babel-norsk-2.0i"="3a2xqwwyj2pv7ndgaxk11wvb7qanc9qk";
+"babel-norsk.doc-2.0i"="dhi39fgchh0ll1hl2si5qgygi2qsg8bj";
+"babel-norsk.source-2.0i"="qyx1rcxw0zghnc8wrh94yr9i5jkh142k";
+"babel-occitan-0.2"="yzlkm8lf34x1c1q6lvc5shf6fcazz678";
+"babel-occitan.doc-0.2"="ins60sfci09fssxs30mr4kj5c2pj8q02";
+"babel-occitan.source-0.2"="k2s35hvvw47kg5xmqvd63a590y6xhp7c";
+"babel-piedmontese-1.0"="5w9k0d2acxvdsz2p641y5hs96ck0y96w";
+"babel-piedmontese.doc-1.0"="77l935hchidfp11cxwa0zr9wbh3qmbz3";
+"babel-piedmontese.source-1.0"="8pmfjyqsrzxxwqh032dxgs1mdj6siwgj";
+"babel-romanian-1.2l"="76cg7sfsq7lg72c4lqfinv3gjpbwpvri";
+"babel-romanian.doc-1.2l"="5i46fii2472x7ka1xxng45s7n0rgl2s9";
+"babel-romanian.source-1.2l"="pm44w7529qaa4s9n7jyc33qwsfj6vwsb";
+"babel-romansh-2019"="2k6ik89i06j3l29bl8yp7dbm79qgzcb3";
+"babel-romansh.doc-2019"="risjnmxysc7r7va4f3mapz7kvxi01xc9";
+"babel-romansh.source-2019"="hnlwwjxzrv9fsanajh23pr8wirlp87gh";
+"babel-samin-1.0c"="2vg2wrjl0pllgbppkx4bcykcjil8driw";
+"babel-samin.doc-1.0c"="k69nnc0vsw2xhrkqilhqzqv9v4h5fy99";
+"babel-samin.source-1.0c"="p7ywdk038cryll8rr2sy8d8m4qb09k5l";
+"babel-scottish-1.0g"="r9zphrdcdd213xi2sw11mqa1l9hj86c2";
+"babel-scottish.doc-1.0g"="c97pnx5fq4yr02q4ddp7g15h0d5yw838";
+"babel-scottish.source-1.0g"="awb6gq1m0hcya2zfw9dwqddhvwkww1mv";
+"babel-slovenian-1.2i"="0617vvjda9wz2ii59qymfpdfkr6vqmg6";
+"babel-slovenian.doc-1.2i"="586n3l113jndybs2f83pby118m9xsm5g";
+"babel-slovenian.source-1.2i"="azszs37qw3q2rixbyjzs7qk8yq2005ph";
+"babel-swedish-2.3d"="06670d5rm2abf8j7pfm7n6qfapkqnx51";
+"babel-swedish.doc-2.3d"="qi68h0m500mm2lhd5gcns8wkdzwj4vz9";
+"babel-swedish.source-2.3d"="i268zav90a89qacmf2s2dlchag0qby4d";
+"babel-turkish-1.4"="f9xzk8x8q6gd734xa2kyag3j3lcij81d";
+"babel-turkish.doc-1.4"="43yq2kcxf9gjh1ajnahxia0vbq8sv417";
+"babel-turkish.source-1.4"="yx5ihjbky6ls36nx14lxbvjswasba7vl";
+"babel-welsh-1.1a"="dcjbzz80i41bpzb99wdhb84h60y5qg1r";
+"babel-welsh.doc-1.1a"="5p0mqvs4npnz3g6a08hqkf03n2w4pdc1";
+"babel-welsh.source-1.1a"="9fx2i5lxyf8qc0brlrgas2ajzf013m6j";
+"finbib-2019"="aja1ihjvva3aa86xi1f8d563xvlcj5mb";
+"gloss-occitan-0.1"="sha467dmibkfwwdnwrq5da744vfz3p5g";
+"gloss-occitan.doc-0.1"="8wfn7as272hvm7nxz0i5m48bf94b5m0z";
+"gloss-occitan.source-0.1"="qv9zd6r6rmjbfsndm7qgsz7x6xkr14ms";
+"hrlatex-0.23"="7dr0g80mp71nmvrnwahpshawi44s2s9x";
+"hrlatex.doc-0.23"="lrx3m4bg9wlqlrcd08mh90wal16fvilg";
+"hrlatex.source-0.23"="s5ajy6yi6nzivfwafk5ymav4j2dcgif4";
+"hulipsum-1.0"="8pqz5vilzli6in81d604dnkz9024i5s7";
+"hulipsum.doc-1.0"="3sqiw98n02kg8752hzv7vp1r5xysrw0m";
+"hulipsum.source-1.0"="dv9wyvy9cbkvjlc9awaz0mv4vaanz7jn";
+"hyphen-croatian-2019"="grzf0vvrgp4cfvpq5imffv2259zrq6q6";
+"hyphen-danish-2019"="bdxvb9sjzmqg09464c6327wp49kq086p";
+"hyphen-dutch-1.1"="crz45cdpi6y367jp8i7g9yb5318m3a84";
+"hyphen-estonian-2019"="vxwsi96l9zw99fp6gdfnhyd7nhb2y1q3";
+"hyphen-finnish-2019"="dnyiqmsprb3z7wsw0mld6vg3bgm0gd9v";
+"hyphen-friulan-2019"="saqhzx3finwlkmhxj00145r4p81q4xdx";
+"hyphen-hungarian-2019"="si4gj1fvnw344fic5zga5rniqfg30ah2";
+"hyphen-hungarian.doc-2019"="ycdkj87kpnvaxc5szx0vcacy8rg6i7lj";
+"hyphen-icelandic-2019"="lfzhj0drdf7hw65agf505512qrd1w3kx";
+"hyphen-irish-2019"="h5gqkzicgidjgfbf5cmbbjlpprwwz2lf";
+"hyphen-kurmanji-2019"="pvl2dm38dkdixpng1vxmxnm1nnhkzd93";
+"hyphen-latin-3.1"="7hd8jab460zw2kz5x22zg419jd7pkph3";
+"hyphen-latvian-2019"="6aa8sn34wfb9zdn73ksc828wia123rm7";
+"hyphen-lithuanian-2019"="4rb6hpipx7cazglf9lzbfc2n5nfrjymm";
+"hyphen-norwegian-2019"="lb2drbj64qpikapvajfhsk8z06gjn0wz";
+"hyphen-occitan-2019"="1zf4mf08zwr170rd6p28r4p8vad5rwyc";
+"hyphen-piedmontese-2019"="34ibkb5fq0qdmn8nr85mv626387303lw";
+"hyphen-romanian-2019"="vlyvfwvfrfj51kriz2z26my886ab9l8x";
+"hyphen-romansh-2019"="alahn7f907i3pg5hhzib4j50vqxhvxn3";
+"hyphen-slovenian-2019"="cf4gm595n5q68ibz0jzk9sdsv1wngml1";
+"hyphen-swedish-2019"="rkdlzsd4vnl8080gcfwsa89q8yg6jhmj";
+"hyphen-turkish-2019"="93zyzrjw297abia8r4rnsmr4hfdhr0qa";
+"hyphen-turkish.source-2019"="4xv9azgkq91m4afsp9kvsq0f9ajxqfvl";
+"hyphen-uppersorbian-2019"="ix9j2rzdwp3j1xr45yzy747g3iw9ws58";
+"hyphen-welsh-2019"="r3d6rd54889fd0n1gm67lmkqblf6jrcl";
+"lithuanian-2019"="p7vd2rv8md0a1gnyd9jj1ill09dfxmk1";
+"lithuanian.doc-2019"="x4nf13nhkbrn2cnn9gi06zavch8hjr4r";
+"lshort-dutch.doc-1.3"="rswbmzd9fkb0bwbc054pb0raa8zv2lfx";
+"lshort-estonian.doc-5.05"="2xqk5n14f2lizqdisir199mark4y5v2k";
+"lshort-finnish.doc-2019"="5jp8rkaw7qvrv8mpdnbmhg0m53566n8c";
+"lshort-slovenian.doc-4.20"="1w0g2p1l4p456wsx86ihdpadm8lhhcgn";
+"lshort-turkish.doc-4.20"="py0d16ij5gswbli1bgi4z63vajsahwjp";
+"nevelok-1.03"="v5hds3a09c91d79iac1qsyf0mr6lpaqg";
+"nevelok.doc-1.03"="biq2dbyv6mak992s0cqb834k119xfa0p";
+"nevelok.source-1.03"="5c03z6r25gidf0bncaanw1259n1hcdw0";
+"swebib-2019"="5z0719m62712flc3ylrnp5223gbsk98n";
+"swebib.doc-2019"="m23nfcdd5ddlgicd8hzlyfnr042y3bjp";
+"turkmen-0.2"="r8ryr694sxginv96wy2ibwg7mjwckmy0";
+"turkmen.doc-0.2"="ry7di8dm2nk9gbylnm58zrmlpilbch55";
+"turkmen.source-0.2"="jab2389x3cj6hhg0imkfbjcglclqap2s";
+"aeguill-2019"="2qlipazg1v8pj58aym9zwqqzfvprw29f";
+"aeguill.doc-2019"="q4gvvin01hkwmcc2llrkd61pr6dsmwp8";
+"apprendre-a-programmer-en-tex.doc-2019"="ra7bkghkmm4cl88fi1vn3rf9yy1kzya9";
+"apprends-latex.doc-4.02"="fy3lj0gsk1nkcfp2ssyfm26a7ih2ysf5";
+"babel-basque-1.0f"="dasllbbd2k1yhqdwm41i38870lzp9caa";
+"babel-basque.doc-1.0f"="av6dd29g89fsq2hgva9fj4h2myj95jxk";
+"babel-basque.source-1.0f"="mvvhhqj4jd107zicv0gv8yhgjkjhxl33";
+"babel-french-3.5f"="0ppxkaqkqmm37n1m7q34fnjjhdb2s3sr";
+"babel-french.doc-3.5f"="gn6cbcp59q2f4xjls8sc4b81d9l85can";
+"babel-french.source-3.5f"="dv9ryaq0sppxgmd33pyp47g07hb08m7r";
+"basque-book-1.20"="6gmya3w1jnv20p9zyn3b8b095csb45cj";
+"basque-book.doc-1.20"="njw9j7s7mlx35ckjg0z404fizyxpn74n";
+"basque-book.source-1.20"="wydda9ij2ibwnhd8b0pg48bf2f1g969f";
+"basque-date-1.05"="yj2akqid1c810hqjl3giy4yd6dmcz8jh";
+"basque-date.doc-1.05"="kg7m3skhba5kp2iwf6s687l9r0n4yq8k";
+"basque-date.source-1.05"="j1ad62kaxq7yf7bm1l4vgzzwjswhrxj2";
+"bib-fr-1.5"="d2v9lhayizx8carld94ica03ig34mjsi";
+"bib-fr.doc-1.5"="21c1p7mka1a4y2qc5b8wqj25h4il9pjs";
+"bibleref-french-2.3.2"="id805cd5csnkr92r0xry4nc08xg6a0mr";
+"bibleref-french.doc-2.3.2"="97ib4izl1pf181kh4wns6s1bpff9bmvn";
+"bibleref-french.source-2.3.2"="6siqpf7gsybc0pzra1kwkrbnnkb7ka41";
+"booktabs-fr.doc-1.00"="8nmky9zjr4s9s8kikir9l4w6y69yk1vr";
+"droit-fr-1.2"="kqd2m29if8y21y5l72z5k0f6dafm95sj";
+"droit-fr.doc-1.2"="ss2xw9f26frzv9m2xvwbmvgagdhabc69";
+"e-french-6.11"="y1yab7pd915kbnwi20zair37a9haf2is";
+"e-french.doc-6.11"="9dcj407a8vn2j4h3q54s2wrbj5fiawm1";
+"epslatex-fr.doc-2019"="7kqdhx5drijbah1yl3vrwax3cnxg5zdk";
+"facture-1.2.2"="ys1fq6vkml8gnfc6bjkx2lkbdw2w0fsn";
+"facture.doc-1.2.2"="ij99my45fi9m1lcc79rj6kyxggmv4v3r";
+"facture.source-1.2.2"="aywgffiyigrwxv9lipf7a131mycjp839";
+"formation-latex-ul.doc-2019.03"="i0f7ij9m4h02vxd21hs3iw7m23qlgjii";
+"formation-latex-ul.source-2019.03"="3g9v9qrcjkd5dms6aa3zdlr7q0sy572b";
+"frenchmath-1.4"="nvxiiich6w76xzsn9a73sg6d9gl79klb";
+"frenchmath.doc-1.4"="h6h3ywj67r11ljpy6passw07jm8v7zp4";
+"frenchmath.source-1.4"="ansrjlrbxv1ph59ngvr3p53bw04j9cnd";
+"frletter-2019"="4vqb93fvw2jmyxv1f269f6icnk4wbwpl";
+"frletter.doc-2019"="pg2pg5gsjpp0iyzapm6k1m4p95fkbi4h";
+"hyphen-basque-2019"="w1l71iknyndr7smz1yv35asm8wgzfzqn";
+"hyphen-basque.source-2019"="vq3bxdrcsgdmiqfjxfcy9w5jihxf78qf";
+"hyphen-french-2019"="if688jvpcwzcig5qfm1scj4spqkazga6";
+"impatient-fr.doc-2019"="sjzbiaxr5cvnqxn7bylr5zhrkq46l1v8";
+"impnattypo-1.5"="ypvjmb0ys3c5f0mdlcsiljjb94h567wv";
+"impnattypo.doc-1.5"="q72pgsqjgmxrgclh3lziqv83h1r6020j";
+"impnattypo.source-1.5"="z4vzzjjhrxpaj91zqhzg6mx52av49qkq";
+"l2tabu-french.doc-2.3"="ncl8is1rmnk3n9ybrsav882w5qsb1w2k";
+"latex2e-help-texinfo-fr.doc-2019"="0n3q8gzd8xjhl92yyq2526sjsgl3jhid";
+"lshort-french.doc-5.01fr-0"="33vkjmz23zk2jrzyw99zri58jm0cpxax";
+"mafr-1.0"="vl6jgzlqqyn70cndvj91nnkmcxas15j8";
+"mafr.doc-1.0"="v44yahqn2gnnfbnf1ayqr96va6y49aij";
+"tabvar-1.7"="2advqwyg0ahn8xfid3639ivz56rpgkq4";
+"tabvar.doc-1.7"="7zcvqmdzaj9cg0nwyns5720g5jsvhr84";
+"tabvar.source-1.7"="wr3y7w9bb7zdjapiv3w3g1bxndrlirfr";
+"tdsfrmath-1.3"="5nz3qrfq13xyhabzww6092mb13014rhj";
+"tdsfrmath.doc-1.3"="8nnvlh3hw79z3k6c6vsvgnvkq814ldsv";
+"tdsfrmath.source-1.3"="3hfid9ih338p675pz6440f3ds5r3s646";
+"texlive-fr.doc-2019"="aj8pzb3xfjzrwycxfchsihm726bid2kv";
+"translation-array-fr.doc-2019"="yia92yfpyrwv26vh12kks8arbsda05z4";
+"translation-dcolumn-fr.doc-2019"="acapy2zx06rsxwg810avmphyjjxca6gi";
+"translation-natbib-fr.doc-2019"="8yvcb3s928s5lldgy65idpfw23pb46z2";
+"translation-tabbing-fr.doc-2019"="64ix6i3bvaniiw7xj42bhqqmzv474lfy";
+"variations-0.3"="md5bnc4jaiva00gkdjyd63x67hyd09si";
+"variations.doc-0.3"="pxbpjpnsfz728czc4pjfy2nfr88dzmr8";
+"visualtikz.doc-0.65"="2rc26mlib7xnlpgc2l82ky4fcpyv7013";
+"apalike-german-2019"="hyclqnv85va4qmrr89zz8fhsfyqkqx3z";
+"apalike-german.doc-2019"="gqfzgv3kxzskvw0j6n23vsrs8b70vavv";
+"babel-german-2.11"="8y70chxahg5anippladkwlh4aj94hpa7";
+"babel-german.doc-2.11"="zrlg0a334h7v2j66llw25977klr1az6k";
+"babel-german.source-2.11"="igzl8plqhs6fhs8zgfhanzsz49acbr4n";
+"bibleref-german-1.0a"="wd8gzs1hrjyq9dmsjy6ss1qg0krlrzyd";
+"bibleref-german.doc-1.0a"="yc6vn69gsdsl3vxhg6klip8m6wkffyy0";
+"booktabs-de.doc-1.61803"="wcz4xqg22sijz3rczwk6nfnb0pk074ih";
+"csquotes-de.doc-1.01"="bksp4f2zywwkv5qw4njincxbpgcvz7dg";
+"dehyph-exptl-0.6"="ssjjz287qzi9bh4l9mfchx64qwd547ly";
+"dehyph-exptl.doc-0.6"="ggw931bx7r04hxp7dmlrl3gjfxfr0gi4";
+"dhua-0.11"="4n8cvm61marrsbxd7308xw089j0q2wlj";
+"dhua.doc-0.11"="kisr6kymm9v5kk9nfxi0ckdf6k8mhr91";
+"dhua.source-0.11"="a9ap1rwrqqwh394c6hjqx5nlw070iwp6";
+"einfuehrung.doc-2019"="x668r5llhw28bqdr3k32yynf3720bdna";
+"einfuehrung2.doc-2019"="mwzp79i9w8ci8dxpnk4z4k6l9akj1qf8";
+"etdipa.doc-2.6"="cid5wjvbs4hl5lwczp1s1wbdwxfwr24n";
+"etoolbox-de.doc-1"="z53x50c71bvipgvgklp42n1yb50fq8gx";
+"fifinddo-info.doc-1.1b"="d7l7nsb4aj2b7nin8whkif0m5pcv11py";
+"fifinddo-info.source-1.1b"="dpl4j9iigb7q8dqi5srykpkr1syvcnpm";
+"geometry-de.doc-1.1"="ncrm0zcrf2mmv3nynzydvd0vb4zbdv84";
+"german-2.5e"="mwin3zb743v74c97aizyiy86zj1pmdi2";
+"german.doc-2.5e"="invdh78rq8chiirzdlvijssdah8hsyk2";
+"german.source-2.5e"="zs1qxbd8r3bfyq77vaak9srxjxxn213v";
+"germbib-2019"="g11ayb7d5hj8s77kn9zvkvgfhdb0f4nf";
+"germbib.doc-2019"="vskc1hanqpmdm6p0v2np2slblpy8cf70";
+"germkorr-1.0"="szywjh1bj2jqc6zqs5d1y1dwxq9h8540";
+"germkorr.doc-1.0"="bycbcbfrqs1r8l939kdm9f6s395rc5fh";
+"hausarbeit-jura-2.0"="aismjxs0dxac6lvwfink46aci9lwvv78";
+"hausarbeit-jura.doc-2.0"="qg3sx0a4l44hx56v4gs7y3vlmmlsg5xg";
+"hausarbeit-jura.source-2.0"="pj7cdl7rgwwlry37pkhm1l9k5c1wvynz";
+"hyphen-german-2019"="rk2xjqr0iq16694zjjgggmsz53a2z591";
+"koma-script-examples.doc-2019"="rzy2nsllyfdm00lrllk3k8i8yxgvppfk";
+"l2picfaq.doc-1.50"="35c7cwi94qazkf5351kj5hl58xil9nms";
+"l2tabu.doc-2.4"="4sab9w752r7xr6l9a6sxig4q0sdfvfxr";
+"latex-bib-ex.doc-2019"="51d5jw2dmp9rvy8bqxzw6clls5aqi189";
+"latex-bib2-ex.doc-2019"="rggjiidvpwxfd978rkmkwmg70w7amnpi";
+"latex-referenz.doc-2"="463iyb1dhx6kdsqqb4crgdh0xgmrckpp";
+"latex-tabellen.doc-2019"="9y8yqyrkv49pj1v58nmf5qyibyphnias";
+"latexcheat-de.doc-2019"="fjpnrnl8fkv5lnvhg6rmijic0k2yshrf";
+"lshort-german.doc-3.0c"="aplln16lhlxfrck1lgjgsrng7zbgpsqr";
+"lualatex-doc-de.doc-1.0"="9l7ac63knl5cd6lxmrbnmjj8s0nwp5bh";
+"microtype-de.doc-2.4"="22zsps3wqlz58x3x1i3wadbn5jp9mba7";
+"milog-1.0"="lz3w4rhsgbl699hh8431yw6a9si6y9yy";
+"milog.doc-1.0"="zf9qx558g8z5xl906x391c6hylz57x8x";
+"presentations.doc-2019"="rczfpy5ayw0h07xlqhw4k2isp080g2ar";
+"r_und_s-1.3i"="8vn7cjc42dvny30pkgp768yy87z9d2b8";
+"r_und_s.doc-1.3i"="pk63m1jl1yzz2xqiwynpph3nrlri1hkl";
+"templates-fenn.doc-2019"="yy9rn7m9r0paxvya3icnbqwccpjkkbij";
+"templates-sommer.doc-2019"="6n6saza6xd8mjys1ckfy0362sdya4616";
+"termcal-de-2.0"="pql7q4dqaqgg0arqgg7l8iz4hwxrxd7x";
+"termcal-de.doc-2.0"="fpjnpzi59rrqg44j513w4d6f9cqi7ik0";
+"termcal-de.source-2.0"="myc9fjxig0z3dirj1brla1q70ryrczrr";
+"texlive-de.doc-2019"="6h0bib93hy99z40gbmr5vgacwkyxs5df";
+"tipa-de.doc-1.3"="aa0msh91ynxxigmbxwy72i05g095fwxg";
+"translation-arsclassica-de.doc-2019"="xayn50bvfkyf5fh93426fg2m6mmvpdwc";
+"translation-biblatex-de.doc-3.0"="0wan8bpq95jpa0bsx79hfhi9882vbrr3";
+"translation-chemsym-de.doc-2019"="khd057lr5p42wqz3p6n58d2z25jdknrp";
+"translation-ecv-de.doc-2019"="7yrn8n7071yasf0lpswz8dis0vkjg33g";
+"translation-enumitem-de.doc-2019"="8c46h1y6mpz736w2nh01jkh96n0ar2jx";
+"translation-europecv-de.doc-2019"="541qkhphqn2f3bba6prrf2npqxl022ah";
+"translation-filecontents-de.doc-2019"="9c59fnc6krcsswc3hsd4aimzfvycqp59";
+"translation-moreverb-de.doc-2019"="1j0hyf240k1q27li0dnnw0cs4mi2j86w";
+"udesoftec-1.6.2"="wr18qlcg3fmqhfh9sji9qzxg4m3jn9fb";
+"udesoftec.doc-1.6.2"="snycjxc23rmgkdydpxjyqkzvq8qkklq3";
+"udesoftec.source-1.6.2"="b9y4rrqycqayx419ck7ni9y5fvhbjymz";
+"uhrzeit-0.2c"="5fwbnq0kjdcd88bmf0yscqvz1q47rlgx";
+"uhrzeit.doc-0.2c"="22iimwpxs90xz0c6l9v7aq6l4wqm39bl";
+"umlaute-2.1"="097i2xib6dk7g0pbn7h5blv9jnny07b0";
+"umlaute.doc-2.1"="hkjv5ym6954i5l2qxv3jm3p1prbn55h9";
+"umlaute.source-2.1"="p6217bas6hm8kksip8jkb2bhdpa9p91w";
+"voss-mathcol.doc-0.1"="f15dshkczyv9r9a6vzps3ls1cz95sk8v";
+"babel-greek-1.9h"="jpp35w9yqg8hza1hc4m5mrf2l9vm9v3c";
+"babel-greek.doc-1.9h"="xphz8d4rvcmxx9iwj0mz70xgyh7kpgm4";
+"babel-greek.source-1.9h"="w3ykv1fis8rxkyq501lmrisb7bmr5qlq";
+"begingreek-1.5"="7v94fdb2kxzwgvcsjfd5gnqpjhsrgp9i";
+"begingreek.doc-1.5"="rgiglmyfkxghz1w9g67lyx28rvk2bwgc";
+"begingreek.source-1.5"="jscz6nq9n7aq1l3j86xyvki200ja40p5";
+"betababel-0.5"="0sk4kkbjx7swjxgrb3xiy1m7933avcz8";
+"betababel.doc-0.5"="3pd2x8h9mybnwkg71irzkn0n2rd0a8rc";
+"bgreek-0.3"="i1afn21yqrz4ykarvfvvn0jai9daldaz";
+"bgreek.doc-0.3"="w582b5mchimv0v1bgmqbi0n8sh5779gv";
+"gfsbaskerville-1.0"="vjawsy59q3xnr1hmzpjr1myqyb6f7gzf";
+"gfsbaskerville.doc-1.0"="7sx91lqgpn4w4xgbdbpsk41i5mxixqf2";
+"gfsporson-1.01"="k6gimiba8zfbnf4wc4zjrmwwc7ggnxkg";
+"gfsporson.doc-1.01"="6i47g0k5ys9q394g6q0a3686q4h75gz3";
+"greek-fontenc-0.13.4"="9hvk62x7gyl6r4m0ndzj3as3hxjf193a";
+"greek-fontenc.doc-0.13.4"="mc5jx7gysvhk5kygzga6vcmmm0kl7hjr";
+"greek-inputenc-1.7"="4fwqx35kx5yqpbg8hy83pgpm45gm1q6d";
+"greek-inputenc.doc-1.7"="1fwpw7k0xwbfgp38dxr9vw4hds93jbhm";
+"greekdates-1.0"="zm8cfpsxp12s6n38n7lgzha482124m7v";
+"greekdates.doc-1.0"="lyhisq5vmvxpmc1g59dxnpkxnvziddzk";
+"greekdates.source-1.0"="dy4cbvglp6fv0fd13mlm4x5wjfg97889";
+"greektex-2019"="zmms6d4vix6nzw6jc06iir73wj9swvir";
+"greektex.doc-2019"="p5f90xphw0ck7p6iw2gz6anki05v2b9y";
+"greektonoi-2019"="agnjlz6cdb3figh8g8kfnqah4ppzqqci";
+"greektonoi.doc-2019"="8mh04p3y9jizn5zdm63vr50nzk0rjcyv";
+"hyphen-ancientgreek-2019"="ylhxgwgkrwrrmyl45gy4szngqmgnjmwq";
+"hyphen-greek-5"="s5j9z3lw4dgd6kb1nxay76jh143mpips";
+"hyphen-greek.doc-5"="r6v8qyqkrvnqn6729i7p3ah3vmgxnzrn";
+"ibycus-babel-3.0"="m0m76cgm1k930h85s6hi9qnlh86gf8z9";
+"ibycus-babel.doc-3.0"="fyc9gdakl47jq7p76pxi9l3ggqsqfwqg";
+"ibycus-babel.source-3.0"="samw380w28p4621z2f9fav06i9dzj3b0";
+"ibygrk-4.5"="3xwia8yqznfai0wjz7rc63dizdfc3n94";
+"ibygrk.doc-4.5"="ydy3swiwjr9r1j40fhkwhd2d7z614ipa";
+"kerkis-2019"="ydv39ycvib03pkw5pvvnv6mjyvrij0rc";
+"kerkis.doc-2019"="admp7blm0nd44qcnqqxd0bpwxskz7dqm";
+"levy-2019"="isfhykz3fkajjygnpl7psd2n9n9lzfwy";
+"levy.doc-2019"="y92455xr0yq62ppxd650vvxaknkb5qym";
+"lgreek-2019"="64pdy6vj1q7sg23xg31pw0mfznahcvzw";
+"lgreek.doc-2019"="iwa1xfg3sawwblifpgkc3na1r3hld02r";
+"mkgrkindex-2.0"="v5hb36lspx6xyzzpm8ryprr7mwwpcrm5";
+"mkgrkindex.doc-2.0"="mfpkm8mm8n0nqhzgnm70yjy16lzjvvhd";
+"teubner-4.8"="7h0mh95kwrp8l3im9fq4m4my65hxcwpd";
+"teubner.doc-4.8"="w0ygcfsjgrw6r5z49ciwxfwyxzpf6gfg";
+"teubner.source-4.8"="l0syr53r8jk5cjh3lx8bf279hlgwsps1";
+"xgreek-3.0.1"="742vxyljmp433rk26ap2rjqbfd7802ys";
+"xgreek.doc-3.0.1"="qdgh9jnqimis40pf5gj383j01ynx4cqb";
+"xgreek.source-3.0.1"="33imiba9m0sxmjxilflqzsysgr7vdv1q";
+"yannisgr-2019"="0pjpl0qghjh6qdgy7snalxyxw6ca6cwk";
+"yannisgr.doc-2019"="jx7mj6aw24ff9k4qcr51kdlk7xwpiflc";
+"amsldoc-it.doc-2019"="3xqg4bjhsk0r27g7absrq84nwy6zy265";
+"amsmath-it.doc-2019"="mrz7iav2jpify9h3vz703x863km3vb9r";
+"amsthdoc-it.doc-2019"="bpi907wji0gimbc22s86vg3fwv6fkpsq";
+"babel-italian-1.4.01"="06yw3wwnbx72006dxyr7lcym51qxnsdv";
+"babel-italian.doc-1.4.01"="45s0vhvdr1ji95jf9ryvyxpgixcb9q3m";
+"babel-italian.source-1.4.01"="milncc712c5mh0lmpvvap7bzc4rbniln";
+"codicefiscaleitaliano-1.2"="gqzlc6agkwysk75lzdxbkz4azawzyrjh";
+"codicefiscaleitaliano.doc-1.2"="c7spaihgf2fdimihsg5cf7xn5bczkw97";
+"codicefiscaleitaliano.source-1.2"="vxi0halq6yx9gwd0vkcmjx6am7dnjjg1";
+"fancyhdr-it.doc-2019"="nl2xsg3mppyni8ns9zij452dkkw4ayj0";
+"fixltxhyph-0.4"="gkadi0h5794bxkkb809162a1z7aicw78";
+"fixltxhyph.doc-0.4"="l2xq1rsc95fbk3saqnx86l9d73mvm92v";
+"fixltxhyph.source-0.4"="4nhcwfdf5gs7fc5iy5fph8yiq4wavjp3";
+"frontespizio-1.4a"="mqcrdj4b2abhq70zx1alxdm6hs3n4xnz";
+"frontespizio.doc-1.4a"="g6i79280jdkwhp4q9l69h7icm11l78bl";
+"frontespizio.source-1.4a"="gmdqk3hajrn0k5dhcdmyn1a7vxz6f3y7";
+"hyphen-italian-4.8g"="scvfw1wwqf0d6iln142b6k057n3x6740";
+"itnumpar-1.0"="39ydhr855c2sb1xwfd12v61pphzmbc7g";
+"itnumpar.doc-1.0"="2qdpfrsffqfqvd42nn8yhicp8p3vvzk5";
+"itnumpar.source-1.0"="xd2bbq62fn23gbii6147m3n1c16pcgjb";
+"l2tabu-italian.doc-2.3"="p067k2azmr27v0dqbs6vkjl0dbbxywds";
+"latex4wp-it.doc-1.0.10"="7skz5gny3wm7s5h1sxqxjwgk5w5qr45c";
+"layaureo-0.2"="7qqhm139n1afxdpsmikzdyn7pn09hv9x";
+"layaureo.doc-0.2"="pf22ypfazq7hwxpfiidcvkd24zs1gys3";
+"layaureo.source-0.2"="3q0ixl7rw7sz7n2bfd8gyfnglfcq2hcs";
+"lshort-italian.doc-2019"="n79a6mw3xc3ar3adan0l1xpr4xg8wrid";
+"psfrag-italian.doc-2019"="xb8qlcz7f0za963yybhjvbyjq37z516f";
+"texlive-it.doc-2019"="nsbjkzxjwlrbbrciv2qdy6lrfn4ddk66";
+"ascmac-2.0h"="vg8n2gvl9s08xkmhj2jf617fc18b3mzw";
+"ascmac.doc-2.0h"="xi9mjz1aip4x366d3dj71x7bjsznbxk3";
+"ascmac.source-2.0h"="7v01dn2p724l7qh0xhqi7gflxrrcd561";
+"babel-japanese-2.2"="s8sj89mjl5fxb2cr87qn9ix0fyy7if6m";
+"babel-japanese.doc-2.2"="rxwigd9cjla62cw4sgg3j4wvz9f0q8gr";
+"babel-japanese.source-2.2"="01qb909xr4k1kcjk8dz2dpiqwfx5awdx";
+"bxbase-1.1"="9qcjdyngscll1bkc1g0i9d50hjrvnbjv";
+"bxbase.doc-1.1"="icyayz4cr8p3zgbby8zaypclximpiyqf";
+"bxcjkjatype-0.3"="94n8gv2433510cq05vl97zrna0gyya1z";
+"bxcjkjatype.doc-0.3"="z6rarps2vgxp061w0q8amki68j51yqlx";
+"bxghost-0.2.0"="b0lc2wxk3fvsfrg2xg602bz6vi7igdrw";
+"bxghost.doc-0.2.0"="f8wg3ynqd7gpkiym9v6yr9q5fafxk81w";
+"bxjaholiday-1.0.0"="w9mdw9zrcrrf988z2vd314bn0dqr4pd0";
+"bxjaholiday.doc-1.0.0"="yq903l1in5hwp20wj9i2kz4qmx3y0aqs";
+"bxjalipsum-0.3a"="d6svafibkkjc5p3hjzrc8ibb2fwmm05c";
+"bxjalipsum.doc-0.3a"="srwc07mapyqn9hq6hy26gxaj6khy9ffh";
+"bxjaprnind-0.3b"="8pfq18sbkvqzb2may5j4n8xadgjb8a9l";
+"bxjaprnind.doc-0.3b"="1vsxn97w48hn05il79byfms5w6749xpc";
+"bxjscls-1.9h"="mbijcs5l9pp7yrgxyp6bdm76311j4mg7";
+"bxjscls.doc-1.9h"="ad3ghzb8yk72vb12kkknkxwdwpsdydjg";
+"bxjscls.source-1.9h"="9wnggpzky4wb4xrq1nays7id0ipp4c65";
+"bxorigcapt-0.3"="lbrfjjqsjm4n5b7byyrhm1akbmxxap6d";
+"bxorigcapt.doc-0.3"="grspvjmbrcjq91wgi6l3a73y5l7nnl4m";
+"bxwareki-0.6"="rgw2day3m4vr0k6d2mbhrpy8anmzklc1";
+"bxwareki.doc-0.6"="5vh5zrnjy6mb8cg0q2zz1sgb2llz2anr";
+"convbkmk-0.30"="0y0b4dana3gnh74j0y43yp3f8ng0fm2v";
+"convbkmk.doc-0.30"="nvi9mfw8iiw923v54fdi5pk7r93y7vsc";
+"endnotesj-3.0"="p1524a2l6zsh2gl28im4rxzr7afy323b";
+"endnotesj.doc-3.0"="ksn1n0s90shsi65kgw4bppanfsbxrq0z";
+"gentombow-2019"="zw6yd6x0kz3kv5s46ka0f27vyib714jn";
+"gentombow.doc-2019"="qpxjmhszws8x3zk749dj0dakqv6qskhk";
+"gentombow.source-2019"="wccfbmzqqpls622zq1xlqybl7vkyjryg";
+"ifptex-1.2c"="g067kqkal711mapnw2lfqspj557ddr9j";
+"ifptex.doc-1.2c"="x22bmp95nh3g718b8b9ls535vv1nkzck";
+"ifxptex-0.2"="db7waqqfn8nrn8b3z4dh7dy846f2zxad";
+"ifxptex.doc-0.2"="y1039vpyrh9k2dyi1xws45a1gj3b6dv1";
+"ipaex-2019"="pxy5kyyznzddkci3pzdb7fla8gsfsqm5";
+"ipaex.doc-2019"="bv4h64z9gnd6jf3mx85b45dqxalicjcl";
+"japanese-otf-1.7b8"="n7pnmaclyp3yb8rfn3n59g6jdy5k349r";
+"japanese-otf.doc-1.7b8"="kszig0vk5dwk708vff5cfnhcfx0rp39d";
+"japanese-otf.source-1.7b8"="dp0djxlqid3irac8y2zfh0x3r31r305d";
+"japanese-otf-uptex-0.24"="nwq1y9kihylj9y2f0clmy5nrmhiwr9q1";
+"japanese-otf-uptex.doc-0.24"="kr9fwl8hz0dmrs0a1pzkd1g51a4p3qrn";
+"japanese-otf-uptex.source-0.24"="yz6zz6i07i2d1cf1wp80n44nnh77bqly";
+"jlreq-2019"="msjg3lk1b16bcniavl9qddrwv1g9vzm4";
+"jlreq.doc-2019"="5pyv4k244lvdsw92cxivajw8v9s14msi";
+"jsclasses-2019"="j7pgchywpy98am8wa34clkzv5qh9m6gq";
+"jsclasses.doc-2019"="k1mk1j86p2nm0c3943msf8vyd1hjnmwl";
+"jsclasses.source-2019"="8p0j6pfmfv2wxgyk8x2yfn1h9ir1kz0d";
+"lshort-japanese.doc-2019"="5b8svqq4w1ipn3737s73pk969s8yv63d";
+"luatexja-20190926.0"="191dbfq87cajs74dfy0fnrlw6pmi27l1";
+"luatexja.doc-20190926.0"="ygs2lvpk15iq5q780f480n69gxc0wym9";
+"luatexja.source-20190926.0"="p6r0392sp05x607pi2zyacqd18h52hv6";
+"mendex-doc.doc-2019"="vp31541i0l4rfkijbng5zj0q4cmbdz19";
+"mendex-doc.source-2019"="2w1ibgiylpczrzp9xhl7lidn8y2yhnn6";
+"morisawa-2019"="41dcbs61zpdhqnc6qbzcfkq0nrfgfirl";
+"morisawa.doc-2019"="cy0li43jphfx3x8x2ddf57f040s8ygim";
+"morisawa.source-2019"="jhdr4xfya5m21376a8cmnzz4xfr8qh9i";
+"pbibtex-base-2019"="nix33k8m51bymsgnmfz69mwpllkk9rhq";
+"pbibtex-base.doc-2019"="vgmw5w68b5y2rhwsjssm3bx4dn96ix7n";
+"platex-2019"="kgcfk8b8x506aik95228jp3gbv7zmgxy";
+"platex.doc-2019"="015z4v7vdhcv9s1jiszgff5px1wsfn7l";
+"platex.source-2019"="0hc8zw5cx0xzhmzy1ivlk75m48h0krhd";
+"ptex.doc-2019"="fr812pq9d33lksqmm6bdij5jr89arp9l";
+"ptex-base-2019"="yd073fy3fw3cpkph1cpy3w1l148mdjrh";
+"ptex-base.doc-2019"="rjh99cygdmfychyv8gvqg5fd73fwmkda";
+"ptex-base.source-2019"="bli2wy35rgyx2vkfkqk1ajyk73gpnwqm";
+"ptex-fonts-2019"="iqch8gk4nianpr01y03nl0zwp49bw1b4";
+"ptex-fonts.doc-2019"="ln071z7k84vqpdf72ngcn7s24hpkhazc";
+"platex-tools-2019"="lc1vqkviqpr8rhvgsnw2k3sm3hdyq7xb";
+"platex-tools.doc-2019"="6if0avj38q2lwia7sh5qs8rrsk77g27g";
+"platexcheat.doc-3.1"="khwx5x4r6aydzhd5rkv7h9lf58l27494";
+"plautopatch-0.9d"="s732qg4g3y1y3s6sd4s0dc5wwcs9a58w";
+"plautopatch.doc-0.9d"="65lrl1g1p4fv2g1fv6zxw99havdai8d9";
+"plautopatch.source-0.9d"="708dq291a6igjdkm39lcv1wrna1s9f1j";
+"ptex-fontmaps-20190506.0"="afvr6rnd39cdr0rs1pmvbzbc4478hgzf";
+"ptex-fontmaps.doc-20190506.0"="48yrfn623ch7il5i7w593i0g7hlmf9s4";
+"ptex-fontmaps.source-20190506.0"="9ihj3bwyp0ngy115ylcc2dbp7xp40xgq";
+"baekmuk-2.2"="5rhc42dabpd99i92hkdmkjzgr3jqhg16";
+"baekmuk.doc-2.2"="4syhh948m1jw14xlhq6dbpdw5p5p198h";
+"ptex-manual.doc-2019"="d12ipdv5isvbrkf7caps8lrj9i97r0aw";
+"ptex-manual.source-2019"="kap9xs1a3bdn0vh176sgc8nm949pvbsm";
+"ptex2pdf-20181212.0"="lpdchib5gv48nqwq0gax6qrslmqa5vmn";
+"ptex2pdf.doc-20181212.0"="f34l71b1l1fky9jyg3qr6nlk6620rqpd";
+"pxbase-1.1b"="92jsnxmiqmpy56dhdjaark80zsbb5vxa";
+"pxbase.doc-1.1b"="n5ns9b3vpa52b78hhgbvg0114faw0dgi";
+"pxchfon-1.6"="lwcg0b8ibkgb1njxrrwl8awpkyjfjxzr";
+"pxchfon.doc-1.6"="i37blsgfm91wka45ian6p9ld9iq6lacw";
+"pxcjkcat-1.1"="i368i8r85baiimnwh2rfqd0hfrklw8hs";
+"pxcjkcat.doc-1.1"="hcxxg9rg6d64hwysf6nlvfhv8h360168";
+"pxjahyper-0.3e"="fl6plbak539i8l2i5wbyssyr6hx5gyfw";
+"pxjahyper.doc-0.3e"="3jwqknfgjp9q33hddmrmgfjlihrlgrds";
+"pxjodel-0.2a"="wrzn5vf0h8di7zyzw15fqmnjrn8y0569";
+"pxjodel.doc-0.2a"="hihxv3km086xxnwbxfpg6a455r1g1snm";
+"pxrubrica-1.3c"="p6ych4fz68bzhg7nmb0456jr32qhg20g";
+"pxrubrica.doc-1.3c"="mn4xnfbybrmq49w2r11q18k8q4q7mark";
+"pxrubrica.source-1.3c"="5w4m8vac151lxkp76llm5ycvi7818vps";
+"pxufont-0.5"="wh4763by62qf9q7h7ph1ccs0zz528h9r";
+"pxufont.doc-0.5"="d408szf08v8r97kc1k8s7w33i425qy07";
+"texlive-ja.doc-2019"="c9x1ai4v27mnmwkxbc4963a00i1qsjfg";
+"uplatex-2019"="q69iw8hxgnihgqdag00xbxarlws2d1r4";
+"uplatex.doc-2019"="rjgbvzw0raq96sb92vkkls16n5ag6lri";
+"uplatex.source-2019"="r88kywjipg3vfib5z3g5ii7y8y328qz7";
+"uptex.doc-1.20"="rmq7yjynfv7mj33kpgrsv39xflfpz7qw";
+"uptex-base-2019"="dhh84zlmy5qh9848mx5yylmps2x5dhfj";
+"uptex-base.doc-2019"="02jcxdjr8w76l067z88n0dybw5mqik1p";
+"uptex-base.source-2019"="dv52z5ilfxmcrb9420sbw6b8gl2av9x3";
+"uptex-fonts-2019"="g3qnaahn4gp4yc4zlg2n6687bzq738kq";
+"uptex-fonts.doc-2019"="ji8zv1haadkqgrsvnvyp71xx01nhlvql";
+"zxjafbfont-0.2"="gqmmwcbw81z91mwqf731jk0mgdfiw8d5";
+"zxjafbfont.doc-0.2"="0901rpw6rd2wivh0fsqnna6gywc6j8hh";
+"zxjatype-0.6c"="8hllbrldhybkwhnzzvawmn9r6clr85nn";
+"zxjatype.doc-0.6c"="ycymhyq31rb8jph0pwmns5bm5lxm7c2w";
+"cjk-ko-1.8"="bzihr3wa6c0rp7jrj89483w2xlapj6jv";
+"cjk-ko.doc-1.8"="avb0cwq3p97yj94gsfwj29bwdixv2lyg";
+"kotex-oblivoir-2.1.8"="wq598w1jbvbczmznn97basmrybz42zxq";
+"kotex-oblivoir.doc-2.1.8"="inqj292cqra8rxpa11vwkpjx7wcpx3zr";
+"kotex-utf-2.1.2"="x3j8gcy8ylvgpiwyrwrgl8wjj9gdrp63";
+"kotex-utf.doc-2.1.2"="r61iwnwwvwh1999l4ylczvz0d6l9ff1f";
+"memoir-3.7h"="9fvizn4bjfz0j1n6xh2kza9jwv1lhb0p";
+"memoir.doc-3.7h"="6nvxwsa35a72fmxirnz1by47vnbd6kvr";
+"memoir.source-3.7h"="vmysmkv4ddmcw3yj16b3km4yhxxi8y2n";
+"kotex-plain-2.1.1a"="wa5ifv962vi96ikyv53b6x7wg1fi67c5";
+"kotex-plain.doc-2.1.1a"="drkcvf3nb3kkvp63mw3xdz80lvn92w0j";
+"kotex-utils-2.1.0"="gvq7vg419f2wqzl6xp9mcffclvh65hs6";
+"kotex-utils.doc-2.1.0"="xl1v4i3j2wlhdp0rkjkn0d9b11bwlf4b";
+"lshort-korean.doc-2019"="vgmq1j9h0789hhank5mjmag1yq2h2gsw";
+"nanumtype1-3.0"="b1wscjlknaslwhpaxxfi8w2drxg1m770";
+"nanumtype1.doc-3.0"="4jpi6pmfq42sbcfzl403niskxg6qnxfp";
+"unfonts-core-2019"="grx8hl97r9gx2abhhwlwpa425yww7w0k";
+"unfonts-core.doc-2019"="icc501j6sh5ix6v72v7lpb0him7viih3";
+"unfonts-extra-2019"="ib9sxr60ylsw9vyvr3wxya8xhq6hv0ix";
+"unfonts-extra.doc-2019"="2r7sls3pa7a3fq9q74dlzhp7yjbwdsni";
+"amsldoc-vn.doc-2.0"="09zv7q83wc6zg9an9b1x1nvsnqx8bpcr";
+"aramaic-serto-1.0"="mcxkjm533zpz4srgqqbd1asax309lhmk";
+"aramaic-serto.doc-1.0"="2717wqsb2bzap0cjgw8d1rsryjyil57n";
+"babel-azerbaijani-1.0a"="hyp5q2f1i53nwc2fpzrvg73sig4cidi3";
+"babel-azerbaijani.doc-1.0a"="hii173fm6g5kdiai6d26f3zfg1p5bay3";
+"babel-azerbaijani.source-1.0a"="x887igvkinyx05lnir925xva5snhmsvf";
+"babel-esperanto-1.4t"="0zwr18503la5x4gw11ic8x2gbhb5ic06";
+"babel-esperanto.doc-1.4t"="vyjxr4qb3w2nj8a0d51n9k0zrdy56brn";
+"babel-esperanto.source-1.4t"="ngrcz6ixvk4mbpg41jgp38py5ynfqssw";
+"babel-georgian-2.2"="slz23swln354rfmjk3qrf3m6gflcqb1y";
+"babel-georgian.doc-2.2"="zknj2vi3b55gdzq66mxjx4q7j4x3v0hz";
+"babel-hebrew-2.3h"="4mbg393m14m3j2i5sxfznnr486jw83b0";
+"babel-hebrew.doc-2.3h"="arlh4cs388rna2cj734yfi4vjrfli6bd";
+"babel-hebrew.source-2.3h"="8g78490s5lnmgi3h4rxw30cprmqv5mkz";
+"babel-indonesian-1.0m"="q9v0zfb6xbw2q4wa0pa0bray3knhxpm4";
+"babel-indonesian.doc-1.0m"="b9f34f8r7nvdby8z00xw1z56kmd92p2m";
+"babel-indonesian.source-1.0m"="rdb6dd4h5qjsgzqwx71g0n1h41ldfh9n";
+"babel-interlingua-1.6"="sq1l1svm80rfm09l1ys2ha7x0cyg4h3v";
+"babel-interlingua.doc-1.6"="q0zmjgrk58m7ivyi952jr3l0hnicpbxa";
+"babel-interlingua.source-1.6"="v04rpx7bwxjvdl8psjhc8w38krsv837c";
+"babel-malay-1.0m"="72z6yjhaxbkvnvs3x98bp3jrkkyk2ihv";
+"babel-malay.doc-1.0m"="8x81zjk3fmbnl5mq1dzxphhk6ap9sfq8";
+"babel-malay.source-1.0m"="npqm8jnnh4i4kjjsz228ccy6mzg1q5mc";
+"babel-sorbian-lower_sorbian1.0g_upper1.0k"="7vc0b3cfj4j9b1wjim0h68lnr941yarq";
+"babel-sorbian.doc-lower_sorbian1.0g_upper1.0k"="vvpq6ah1mapvcg8mbjm68layvcbhp05d";
+"babel-sorbian.source-lower_sorbian1.0g_upper1.0k"="yi38218h67326i4swrj94ma5pjax5krc";
+"babel-thai-1.0.0"="s3h479l6qbpm7ymfmg6v2y7d4cyi2ga5";
+"babel-thai.doc-1.0.0"="yk77akss918d2yfn1halnvfa5635ikyg";
+"babel-thai.source-1.0.0"="s0cvg8q806xl02n8m647a7wl4yvspl66";
+"babel-vietnamese-1.4"="pi8gc005y8hn42hyxrn7p23kbashsv1c";
+"babel-vietnamese.doc-1.4"="5l7qyvppvihhdzcszaxskiscp8xm686h";
+"babel-vietnamese.source-1.4"="y9wmbn3j1f614p6dfciwnvig3v5r9q39";
+"bangtex-2019"="cn3ss5r73gr19dbjlrnvb7icfpbb2aig";
+"bangtex.doc-2019"="7dwz3jgliyn649ns4iqmgjnqn80bv3xr";
+"bengali-2019"="xv6b2ya4hn8bhhfwmi7sziq9qwmhx6qb";
+"bengali.doc-2019"="f6c5pyzrih551k2p50vqy9jfx4ar3svx";
+"bengali.source-2019"="s77yi86avqzhp5lin4dwhbavb41g4q0n";
+"burmese-2019"="gymkq1rr5pmwaaid3dpks3f8ngz3525f";
+"burmese.doc-2019"="yirjf8crgj2a89451jh8iv66qhdqdrr7";
+"burmese.source-2019"="ixz9y2ck9awijs6w9rz005nkvl613811";
+"cjhebrew-0.2a"="nkca25dwl8i1li6q63sv4w2n35z28bdn";
+"cjhebrew.doc-0.2a"="w8jqlvv6cm125d68dhfsar5y7xynac7d";
+"ctib-2019"="gdfzyzhwfcwi275xdrvah86459bsfxx7";
+"ctib.doc-2019"="jy7r4mkpncfmy0djcxvpcvkwjaqxv7s5";
+"ctib.source-2019"="3pfn4qglvw3wjjw4f3jlk5vzq3ci4zj6";
+"ebong-2019"="mhlr9r7i2zf3rm905m527hbnydppaiar";
+"ebong.doc-2019"="pqr96lyawpif4fzp0izw8j0506gnf06f";
+"ethiop-0.7"="fd4kynb70wkja5fxhi10n52mff3s2a8q";
+"ethiop.doc-0.7"="cabq6vprpklsmzi68af6nb4qiwbrwmzf";
+"ethiop.source-0.7"="yv6pwmbkvahpy2h4vnijnqag2rv09k5l";
+"ethiop-t1-2019"="f73j35aqlr29gmh9k00d3s0jzkmk6zq3";
+"ethiop-t1.doc-2019"="92ly98mz1iim1gfh4cm8hjwc17j9kjhl";
+"fc-1.4"="iyjlb5q55khnp515n1snhpnfrrmfn1pm";
+"fc.doc-1.4"="wd9bn967d6nzzvdrvim470l711v1jkg6";
+"hyphen-afrikaans-2019"="xh3wz9cx83p2hq74r9c794kizgckgxi1";
+"hyphen-armenian-2019"="y5g0vy3p70zplkaam3q98qyfdmd0pr98";
+"hyphen-armenian.source-2019"="0b2gny5672fkb5sd8vb2g3fapx9pl7z2";
+"hyphen-coptic-2019"="nw3l6a7iwpl9aig2fvls6kqq5xg2l00x";
+"hyphen-esperanto-2019"="v3mdyifs03ykymz5jsgr39wzgg70pmm6";
+"hyphen-ethiopic-2019"="y44ic8iklli5vzv2q1zhyypdh1df39d1";
+"hyphen-ethiopic.source-2019"="9gkipr8pk2mb77s168has3sfgrs7cg1i";
+"hyphen-georgian-2019"="1h6sbx79cncxjqj8vav7fq5kr5ycir6z";
+"hyphen-indic-2019"="la27k8603vjbjxsiag80q0vmjgq3vxf7";
+"hyphen-indonesian-2019"="j5vq85rh8hw706xjmyyl3hy6vmwmr1w2";
+"hyphen-interlingua-2019"="nmvxm8nwca6s32k99c2501wxfi4pcslf";
+"hyphen-sanskrit-2019"="nzc595vin9b5cfvfkkq6b9mgxg8h9jgc";
+"hyphen-sanskrit.doc-2019"="pjfnjwbksv532x7idr41hvs874f5p97h";
+"hyphen-thai-2019"="84jcndmnvv346ip8zzxhb9cwixvqml2p";
+"hyphen-turkmen-2019"="rlsciaz81rhwrxglncb8hk837mg94mfa";
+"hyphen-turkmen.source-2019"="c7md4qrdh7hms3vzkpcams5hwl8qy953";
+"latex-mr.doc-1.0"="vwb062hbn3371czg99plccbvxw1a7gjh";
+"latexbangla-0.2"="6ix7rfgj51z585jry3i1g68x4wvm4xxz";
+"latexbangla.doc-0.2"="iw79gb4sk4hys6xbc8j86lpzyji8h7r9";
+"lshort-thai.doc-1.32"="iwmnm7z7b3r8km4i3afq8hz0f2vy9dl2";
+"lshort-vietnamese.doc-4.00"="2y25jrim204g4q916rf1hhkavl7fi6vx";
+"ntheorem-vn.doc-1.203"="ys9g749d9f2nbq55ckyrjrr4mg9yywni";
+"padauk-3.002"="dwdgm603clk71s9gcjx9ghzwlkh6k2gd";
+"padauk.doc-3.002"="zarib60py4ddx2axyrm695pkikxih70z";
+"quran-ur.doc-0.1"="8nc81g4wfrd6q1xcm6fqiqkq8xwkaiym";
+"sanskrit-2.2.1"="scnnwa1xsfnpv0w7xp8ry49ps6s5pw8w";
+"sanskrit.doc-2.2.1"="0ps1lrlzdhq7gaagjqb3m4yygpz4g7p0";
+"sanskrit.source-2.2.1"="dp3nk8wbjrvb3hg4xdxl8s8m1wfcwny5";
+"sanskrit-t1-2019"="lwnbgg4flg35ndf7p0iii468sf6avylv";
+"sanskrit-t1.doc-2019"="h7licx4ivjwnvbym7724rdj3vrcaak5i";
+"thaienum-0.2"="acsj56dxkcqi83yajkm4rjxm99p6r10a";
+"thaienum.doc-0.2"="55zcsq659l2wki581xvcdy3ssljgk9s5";
+"thaispec-0.4"="wzjrh6h9sp2rlkbjzr23z4dgzz74844s";
+"thaispec.doc-0.4"="wzqlgimfzsxi948s3gff8fa693pn5hbr";
+"thaispec.source-0.4"="3k00zbgwdi6w0dm49mywgmdpik0pgk2d";
+"unicode-alphabets-2019"="j7c2skki2c2k13y2pky182pmw86lzxfy";
+"unicode-alphabets.doc-2019"="2y89zg9f1wzd43n8lfh16y8lilvx7w0w";
+"velthuis-2.17.1"="x0zig7csm0nnq7m2n1qqdys57jz38b9h";
+"velthuis.doc-2.17.1"="x703qnfan6yajcqxybmsr274zir3v0ch";
+"xetex-devanagari-0.5"="v4gi0agfvxz808s3mapzf2ylxhv5n8a7";
+"xetex-devanagari.doc-0.5"="b3kz558m6h9avjwalwpw1nnr68q47sjr";
+"vntex-3.2"="vzdcn6z7knkzsj8gxwj8zda00dq6w8is";
+"vntex.doc-3.2"="5ix8dldkd2qmmbwn731ii4ffng7d3fgr";
+"vntex.source-3.2"="72m9wqbqrsam0b6a15lqq4yq5hbcx0kj";
+"wnri-2019"="z6010l0pydl50vy5jnrg5fh2xki5fi6a";
+"wnri.doc-2019"="clpx7kcx1hp0qy30v5nlfz10kd5hmqcl";
+"wnri-latex-1.0b"="y9n4dac8cbzm2gwhcfan32rbv3dyhr0s";
+"wnri-latex.doc-1.0b"="f1m11fnp49h90f3djiml0awlxqcnxkdp";
+"wnri-latex.source-1.0b"="zd4smslq18sp693fgay24m503v01v3bk";
+"babel-polish-1.2l"="k73wcwg7ab64nwjyq9rb78pmgkapy4xq";
+"babel-polish.doc-1.2l"="720j9r3c7y7yak2j3qbgx2baanwl6az5";
+"babel-polish.source-1.2l"="65j5b50flchq2kw6wi8g3i4jz9n9h7w3";
+"bredzenie-1.0"="dhjq0ccgxxin5a6fmwb95275d1i11xkh";
+"bredzenie.doc-1.0"="br35cfyn2zq2qb44mss225ylw16sz0jq";
+"cc-pl-1.02.2"="d0vdpawzrgwsxj9sff3y83mf1xrs891y";
+"cc-pl.doc-1.02.2"="wqnvmgzzh65fhrgwbrmpa307qa7xbh21";
+"gustlib-2019"="x6dscxji10p04msr31f3vsaf6pfpzhsg";
+"gustlib.doc-2019"="07x28ysinfhv15jlkpyfsv7cjyzwbdg7";
+"gustprog.doc-2019"="v1mb66z2nc7vwhy2yg5rk699mvqkpqs3";
+"hyphen-polish-3.0a"="d9fjz8dhcdw5gl66b7bp9syjgbbcj36c";
+"lshort-polish.doc-2019"="7fr1g9j932xjam26nnf6b6zc47m1i9g8";
+"mex-1.05"="z7m8kmw19bg4yw3p99fvpvhhclkj5ff2";
+"mex.doc-1.05"="qajd1x35x1mbkvs39hbxs3qd8df3hp5s";
+"mex.source-1.05"="kf6k037zqvlad7sm8z4a2gkg2xlf01j3";
+"pl-1.09"="glzasf47dgz69y9gkr4amiffpl7wwx8j";
+"pl.doc-1.09"="1p5zh9jmllvddgsnnafm2vabqhwdqq3f";
+"utf8mex-2019"="d8314s7lhlafhspi1qf8hiqzx61n439a";
+"utf8mex.doc-2019"="svpkpbc0caxbynjnjjynng11fdg3dgid";
+"mwcls-0.75"="nldix3j60gjybkg60qdbi1wrdarqggqb";
+"mwcls.doc-0.75"="16cqcaliy99s6dqnb507hcncxbjlhgmq";
+"mwcls.source-0.75"="x6jn9m23ickiy79sk1w1jsgiqpk2jh9v";
+"polski-1.3.4"="j98gsw0v3vf0a9j8bfjbynmrv47fcd34";
+"polski.doc-1.3.4"="zldgln4yhr6qkmay2aqrlv0bbbwqdyyl";
+"polski.source-1.3.4"="a7ig2cy5jamdgk3dxigyz4qa0kjrd36z";
+"przechlewski-book-2019"="qid42vb23l6fzc6dgmx3bflwz7z0mdb5";
+"przechlewski-book.doc-2019"="23zvnv9pcvl5n68js39l4hrcli608qck";
+"qpxqtx-2019"="wxccyd4si0x6338hwmwdaxmjj3brm7p8";
+"qpxqtx.doc-2019"="xvxsnjfajz7zfvgfih7v3mfca5b36qda";
+"tap-0.77"="mgr2m41yv0y4dcf4myk7020hkmqrd5z6";
+"tap.doc-0.77"="mr27kjalpicyv8915p32yyya5imm3m8v";
+"tex-virtual-academy-pl.doc-2019"="rr38v1syb2b4ji3psf47pmwr562zv59n";
+"texlive-pl.doc-2019"="s3mbcbd9mnfc35g7bwwih1w8mgpfsz84";
+"babel-portuges-1.2q"="n9im1w2dz7yfqqq4k8pfmqmxjg5mfl0s";
+"babel-portuges.doc-1.2q"="d5r7vabmr3lhrfcrji8rayi6xx6q6hqy";
+"babel-portuges.source-1.2q"="rgi4li2frm84fbdi0sfhqvmpijlx64lp";
+"beamer-tut-pt.doc-2019"="kxpy2m4hbwm3sfj7ix9x249df3dgmvfm";
+"cursolatex.doc-2019"="arfkwqkjw5kfv2rcfhkvxjq603wdsq3y";
+"feupphdteses-4.0"="696my85w1ngcar81vacyj8nr7m4dn0wd";
+"feupphdteses.doc-4.0"="9nm4793nyfp5v2rjd5297sbyw2b29bqi";
+"hyphen-portuguese-2019"="b29y4gyjll5mvaf2mh5i51qrfkqsxiyi";
+"latex-via-exemplos.doc-0.5.5"="fabr1glc3bvd4cakj73yd2p4ng0bcjgq";
+"latexcheat-ptbr.doc-1.13"="qzgl6v54k07i6lc3ps84s9mj11j1qqqf";
+"lshort-portuguese.doc-5.01.0"="m3r2gbq4v09p9svs0mxsw3s3yc7has5y";
+"numberpt-1.0"="dmp1db9kaskcy2cxxp53sjxr9sl3c7pq";
+"numberpt.doc-1.0"="sgr9zrlf7c6zpqwa89z9pmmdsxbgrzsy";
+"numberpt.source-1.0"="ynlknscylhmrlq30sn5njffmmvmzxkdb";
+"ordinalpt-2.1"="ds49jf4pvghzwn5nqwjbzz6dhp0cdn80";
+"ordinalpt.doc-2.1"="4hg5jx7bnx1j13s1mq8xscr3jfajl6by";
+"ordinalpt.source-2.1"="cc2f6xias35ac0c0kxan2cvcmyjq7l6k";
+"xypic-tut-pt.doc-2019"="2rj58kib26w8jnfzpd9bsm0nf2ladv4i";
+"babel-catalan-2.2p"="18ngggp3v707j48vac5grpqw342jwg3f";
+"babel-catalan.doc-2.2p"="19hc8i6d64n8dfk6hmgpgm03kg5r7wx0";
+"babel-catalan.source-2.2p"="v2750fsyzjlc6iqk44s31idwybz2jvfz";
+"babel-galician-4.3c"="xczl3malfygp6w1fd3rpd26rifcgj3j8";
+"babel-galician.doc-4.3c"="i7r7rp46vmhmf18dgzsac2ay1pwanlxz";
+"babel-galician.source-4.3c"="ix6vzvf936s019948pz5bls7nfca9xng";
+"babel-spanglish-0.3"="17nhdd8za144n05vhvd50kr6bss0swaw";
+"babel-spanglish.doc-0.3"="sfjf3dfj841772k5ipvf0r4qr3zayhak";
+"babel-spanish-5.0p"="lxsy4aq5mwizmif2r3i9h97mccim0ljv";
+"babel-spanish.doc-5.0p"="2aa12l6ndp4r6rdv6v0z405y3hpsmgnx";
+"babel-spanish.source-5.0p"="ad9wxx0qp6kp4r8ri1vwycgf2gpdj6xw";
+"es-tex-faq.doc-1.97"="v9brqkql6xbb1zdk5m6xhff1dxm36nhf";
+"hyphen-catalan-2019"="ygwfaykc624q574saha8j5mjdc1pg681";
+"hyphen-galician-2019"="np4l9swdllfq7mgghipihh2i3jwnkk59";
+"hyphen-galician.source-2019"="jgmyy0n6c4ljqpl5ln9q1vpjq25y9q1p";
+"hyphen-spanish-4.5"="kg7ixasbidwibfdbazms0ra2dx4dvbg2";
+"hyphen-spanish.doc-4.5"="kznsqnkm7dg2rdpisil38syyvs6fs0j6";
+"hyphen-spanish.source-4.5"="lia19yzmwyz4fsbnrca8al43hfc46i55";
+"l2tabu-spanish.doc-1.1"="rc7058j31za1cg1ik27b6gcgscir9bfk";
+"latex2e-help-texinfo-spanish.doc-2019"="zqfixpmcslcpjzg9f3rxcv6z1j7i5d3w";
+"latexcheat-esmx.doc-2.00"="bzjjilpj8rmp1cc93bs32568dc8dvgic";
+"lshort-spanish.doc-0.5"="3gmql5wpqh3h5mhr0pjcs6v0a5jqc1c8";
+"spanish-mx-1.1a"="ipghkbmay6pmwisxrnpkrhnlrlgsr9zz";
+"spanish-mx.doc-1.1a"="4qrhsw2wnpdmq7i3j30vfb04njyhldi3";
+"texlive-es.doc-2019"="z5587h7b2hinylyp173y02bm25dlr8nx";
+"2up-1.2"="qd90xqk7f4p9mgp53yid9rixhhs11ns3";
+"2up.doc-1.2"="gv5blpi2xdbjdi1i2p9j6gz2qzr14d9p";
+"ESIEEcv-2019"="w5zhmx6kk19kwf98gdm7rlp7l3i9k93y";
+"ESIEEcv.doc-2019"="4ci8yn36m2fz6v6n7iqb071291rl23zw";
+"ESIEEcv.source-2019"="kvh03awwlhwd8wn69h32sdjxmcpa6lmn";
+"GS1-22"="2fvvg7l5g84vhg88mzaa6x16p13pp34c";
+"GS1.doc-22"="bsdamqnalwikpldq94f035nh849vjb2h";
+"GS1.source-22"="gzg5ynawvwr24sl31f85q7ksinaks3a8";
+"HA-prosper-4.21"="kbj26h7zvc9v5l330s2hp63l44vrn09r";
+"HA-prosper.doc-4.21"="hpj2qljnhi7x2prcwnra1ycfzazhnqsz";
+"HA-prosper.source-4.21"="wlzyr02pardayic4598mc0v6mks9dcx0";
+"Tabbing-2019"="1ffaxfww9l073hvjvgp4vkxzfdmmgb8l";
+"Tabbing.doc-2019"="gyhcdih64zw18s44f5s1h8ccr2ndd0qs";
+"Tabbing.source-2019"="pifazcagjavajck7h6a0kyvnxxk90k8y";
+"a0poster-1.22b"="dkwb9gdxv3jxnw07ji0ydmpqa0fgy6mh";
+"a0poster.doc-1.22b"="bn6j9nsmcri2irby7njhbdlpgqqaic0x";
+"a4wide-2019"="lsss6h32r10x1v8k9wwdp7ind09y6x5h";
+"a4wide.doc-2019"="vb90v0v79l34fr86i7hzx787ndyq271w";
+"a5comb-4"="sc874hfilkfjjv1aw8qnf36v5jkhd6s2";
+"a5comb.doc-4"="gsp7dsbhk6r2q332apbqrx29mna85dhs";
+"abraces-1.-"="54c3kj96d3symq8nbzrns0pf1200jm5z";
+"abraces.doc-1.-"="78wfnwn3ni90izh9nyqhmjk6jyqrvax0";
+"abstract-1.2a"="qd0czw54z49h3mxnxlk6drblpbl47sln";
+"abstract.doc-1.2a"="qd4dggpq9076j7cma12mkhy238ni4w3z";
+"abstract.source-1.2a"="819fv5rryh634fmqic8fqagdfi9h04wj";
+"accessibility-2019"="pdngb4qicmfvh9ksw6mhvjc9hfl79462";
+"accessibility.doc-2019"="8cf3wr6abm4p0dr1s11vqhqi7bwvjziv";
+"accessibility.source-2019"="xal33psm9wgyivkfk8qaaa136xm4w1jx";
+"achemso-3.12a"="3psjpzbhsk0ynd3xiq0pqf4spk7klxl8";
+"achemso.doc-3.12a"="iqshwkgnwnj0p62g1aggpr2ydyzfpkf0";
+"achemso.source-3.12a"="v0v78aapbda91dcb71k5q2ld26x5ybci";
+"acro-2.10c"="1v9qgz21hbabizc78lc3rc3322qfjv98";
+"acro.doc-2.10c"="2xl0nmrwc4slk8y0vwpi3lhanzwnb1pr";
+"acronym-1.41"="2spcw1vwwm6mwpl2dvv7wybxvndbsqn5";
+"acronym.doc-1.41"="izmrdd0rscib9xa10xm33vvh7bvgzdly";
+"acronym.source-1.41"="1l7ca4pd0nx499pv45sv1092bilsxfkg";
+"acroterm-0.1"="04m91cky6cj3jv546mdf6461bdg6sfkk";
+"acroterm.doc-0.1"="jnxcd65y58xrqg0cfg7y0m8yslbj7xi8";
+"acroterm.source-0.1"="w99kkypzq7c73rx4rv4m917c68vnan00";
+"actuarialangle-2.1"="6wp7jms9n930i1x9ni0g531cccdj6c19";
+"actuarialangle.doc-2.1"="dsl6hfqn9hfdy1sil3svzbz5bpvpa8hd";
+"actuarialangle.source-2.1"="r3fw3z5qz765a7jmb0wb0g567grw4v11";
+"actuarialsymbol-1.1"="c4m5inanc59g934zv5hfg26nc4209030";
+"actuarialsymbol.doc-1.1"="a3dbpjygc8033icdlyli8g47vbwx4xc1";
+"actuarialsymbol.source-1.1"="5p6w3cm9h63nxah663y5l4k7p811qxyv";
+"addfont-1"="16jk4kypw619n5fy7j0hvfiydk5k3mbk";
+"addfont.doc-1"="r6jy27nla35rjdsbcqfb7ckc7hfszngi";
+"addlines-0.3"="gaai0vyqwnm0k02r5kvnxgd4gx32nkbd";
+"addlines.doc-0.3"="njifyb95qrwhhcgaa250vlq2y1a8pvrg";
+"addlines.source-0.3"="m8lhgdfwarlkrwp2nqpdaad7mpi3rszp";
+"adjmulticol-1.1"="pql48y74ir0kniq2zyygqb9yapjj226d";
+"adjmulticol.doc-1.1"="23awvvvy86j9vwzw52yn4404s8acq7wl";
+"adjmulticol.source-1.1"="svlpk0df2c9nh50p8a9fl15bh4an3g05";
+"adjustbox-1.2"="6qf2dmv05q1vz6v2v9x9w67m3z06gzq2";
+"adjustbox.doc-1.2"="m2wiir1pma7j7cxglc5np6vmzcq304r8";
+"adjustbox.source-1.2"="frv0frx11g0pqy8lj80sk7i0r4hj9g7i";
+"adrconv-1.4"="jm0wy6794p7idv2f1ryhsm2v9wr9d5ar";
+"adrconv.doc-1.4"="jyn0sjir5pp69zvlabyamihnlsav24z4";
+"adrconv.source-1.4"="v31vh22mrhxqq4h88rvj97a9n0wc9bmw";
+"advdate-2019"="f0awsj80hyiv2vkjizidk3na8yvfm6i4";
+"advdate.doc-2019"="0yx83g0jz771kjqq6rf07wlmzs4h68x3";
+"akktex-0.3.2"="6mhzn5d98q6vmxp8vjbmb6i26x9zja3g";
+"akktex.doc-0.3.2"="z43q786v20515sgsp4dh5lii0pfa620r";
+"akletter-1.5i"="7i7x6692i5zicjsrp51cvx8sivm1arpw";
+"akletter.doc-1.5i"="lx2pcnwy9zslh99dvrak5j9lzk7gxmra";
+"alertmessage-1.1"="xczq5v43zbpqkhia8dzk9q6918w6h7y0";
+"alertmessage.doc-1.1"="676ky2mwjrvjkx0bd3pqdgisdfxjzr4l";
+"alertmessage.source-1.1"="g3n5rz7j3ldhkviw267rwwd0lfgbf9a4";
+"alnumsec-0.03"="wmcb661yih7nnlwpshx0ahp45hg2b2qj";
+"alnumsec.doc-0.03"="q89lqn201amhxmpqfznyv7vsp40a8az7";
+"alnumsec.source-0.03"="zin3hkq6fr67rz2df7qqfnki4kar8k1n";
+"alterqcm-4.1"="m92dax7znhdwsqis19im7bvmniy7490s";
+"alterqcm.doc-4.1"="14bwfsq021x3h708jqgm9iqray0jzxaf";
+"altfont-1.1"="cickjccw7xjpa3q2hpm1cyzs2jvkx1wy";
+"altfont.doc-1.1"="f8x27hdfap8pz6f96s7jvvaldsjaxwml";
+"altfont.source-1.1"="q75lvhzwgyqxlj9h56i43hwb7v8lq6rl";
+"amsaddr-1.1"="6sf35pmlda97q2dhi5h7cwan25gi9nij";
+"amsaddr.doc-1.1"="m5wxpa9vd09pja40i6lzzrlw62ml5zvm";
+"amsaddr.source-1.1"="b66925k432cw6rqwqapcg1h8gjgnvry7";
+"animate-2019"="jwwbvyfclhk58hklh3l55q19g67n5r8i";
+"animate.doc-2019"="pwj7v93v1dd3mmjz5zqbdjwwpmymm4gj";
+"animate.source-2019"="0fqzq26k1d0lndah94719bbsn4772ni0";
+"anonchap-1.1a"="qpazykls2jy7nqpqkaqvyi35c2ajz0qg";
+"anonchap.doc-1.1a"="3xy9r4p9f22fjdvznba1jjp09gbkvvlr";
+"answers-2.16"="isadn9v17ma5krfq4hm304nrdc8kx7dd";
+"answers.doc-2.16"="3ma0j6diq2zp7k547zp6ilbynsrkw59d";
+"answers.source-2.16"="7w1nvr73ndj7c545xps8h969q4z58gji";
+"anyfontsize-2019"="z7d08jdfvq55ls4va5f5iyixxyp6xjv6";
+"anyfontsize.doc-2019"="fxvax04n8dj9haksiqx0jddi47mb8q1n";
+"appendix-1.2b"="vv6787vrvnmwm8mg85aq1bii0lgprzc3";
+"appendix.doc-1.2b"="095s7b98s2n14xsf2ffv9v6fvsdvl6zz";
+"appendix.source-1.2b"="5ivln5wysazp8nllz5k3z5vh9ivzwwl0";
+"appendixnumberbeamer-1.2"="zrx31sicdmcv1mvv2jsmqb49ykwgxdgd";
+"appendixnumberbeamer.doc-1.2"="ql9zi0i3r3jcc788qx6zrbgfgmrv4pj6";
+"apptools-1.0"="v2ag8kbf87fm4rf66z1a3z93pfs1j6gj";
+"apptools.doc-1.0"="a8mjxckcrk06xajadqf2124k5k0ra2qi";
+"apptools.source-1.0"="q37a0dpqnw1vbqih6p7lbi70a1f58yl3";
+"arabicfront-1.1"="l49m61nd3wrskbvdh3g3alslp2wbkkms";
+"arabicfront.doc-1.1"="9zr0i11vwsh81vsfgp1a758blyl3rigl";
+"arcs-1"="b0qh2cpybhqd0d0d8a183hhv7xlx13di";
+"arcs.doc-1"="x9xzx0p7wmn5mh61lkmlycfcybzfasz5";
+"arcs.source-1"="jbx1wd4pyp8682lbz3mw00ha114adrad";
+"arraycols-1.0"="p6c0xqv9y69fbg7vzv1r10nmq1lspaay";
+"arraycols.doc-1.0"="946328vqw5893d8172f7l2j25bi20wfm";
+"arraycols.source-1.0"="xjw5d1b9vf75nlvnswn4vprk7mnlzjgs";
+"arrayjobx-1.04"="zxqamnkgiq8c9p1z3w89rlgqv61bp2n6";
+"arrayjobx.doc-1.04"="fyx7869qi432q3g06i3xyg92jqh29fbr";
+"arraysort-1.0"="h5gbw2lvn0zfvhz0s5lmc495yz49bdds";
+"arraysort.doc-1.0"="fx9j9a4nhjlfmxvsnqqcxxh7220s1rsg";
+"arraysort.source-1.0"="0xdix5q42gnib80gi1pbaxx9yixbjm61";
+"arydshln-1.76"="ggmcdw747cybjjfsxfkmqm7ganw103q2";
+"arydshln.doc-1.76"="gn95m775xa6kfdyszwmsdv603wpy2bnp";
+"arydshln.source-1.76"="6y2cbdisg8agvlrwdqp1ldc9n3jx9qv5";
+"asciilist-2.2b"="fvd111ywjyrwy897z4bmcby9ymnxcvcc";
+"asciilist.doc-2.2b"="i501s6jaq79nj93ckccihgkv4ca5pn7i";
+"asciilist.source-2.2b"="zqmygnlbfyz70y446mcdwpd9a3bszhl2";
+"assignment-2019"="f5a0sprx94bby245g2cfycrrazgp00k7";
+"assignment.doc-2019"="0d0cafwd56gqn5dacsq4fdgzz8jqks19";
+"assoccnt-0.8"="6bikcn3hf37rs2wp84f9h8nf81z86hr6";
+"assoccnt.doc-0.8"="xb17k2w0skjxh3cw3hag91m5cjxj1vz9";
+"attachfile-1.9"="vmyp7ywfqli6yzs89419885jac9x0yql";
+"attachfile.doc-1.9"="f076ljz64r8ck1l9cz5g7xypm92jb9qs";
+"attachfile.source-1.9"="j93ivs0jy4n52a18gw0icmh0ffsnm1j4";
+"aurl-2019"="8nnjg9zwrc6p5qy2mq32jirxz29wpa0c";
+"aurl.doc-2019"="13g1jz1510lipg3v2m4zpcz2pzi04fyc";
+"authoraftertitle-0.9"="6mqbsmy9gg6qkwgihzapa0xnlqyscz4z";
+"authoraftertitle.doc-0.9"="64j4gkrz0i7bwah7s3dazi1nanw6dfby";
+"authorarchive-1.1.1"="capg6s6r2w20kazk5dh2dqfbxl6246zh";
+"authorarchive.doc-1.1.1"="bzs7qr0gc2sgmsb39q4d46l4f5d55cp7";
+"authorindex-2019"="khcqpf8rh3cqb9fk2wl35lvp1fs3k2nw";
+"authorindex.doc-2019"="d1k8irgqp5vac8ggq66ivcxxgv8q410x";
+"autonum-0.3.11"="z0mz6nrw3s9661lc5s983bj7qpfg9ns3";
+"autonum.doc-0.3.11"="ghxpr5ayzxq1w6v3wy0hqvkfy28n9slp";
+"autonum.source-0.3.11"="5fm5vfmi11jqdgqklj6zmc90vw3vqiqp";
+"autopdf-1.1"="01rm3dax4wa3pbj51d8ryvixmdy2rcp7";
+"autopdf.doc-1.1"="dal0kcyj8y2ki3w0cprjalkb4770kyiy";
+"autopdf.source-1.1"="5pja5c4la5zvg8mvv9155y1rmljnk7j2";
+"avremu-0.1"="xk59ssazl5122hy7cw9h8l8ky47ac58m";
+"avremu.doc-0.1"="sp38mldllwslwxq2rvizcx1dcpfaava7";
+"avremu.source-0.1"="inwrrgrds8ympmhzgrk3m82x544x8nhi";
+"background-2.1"="akcsb7n8iyy4zlcgfp0ikwb5awzdnh9d";
+"background.doc-2.1"="inm76hq9brwc39n6bhp9782766mmgwpx";
+"background.source-2.1"="54l8p1yj06wlcwxrrmjqjhgmxai9l9s2";
+"bankstatement-0.9.2"="gz4wcynn22a2bg7hbdfa3j5iab5ak957";
+"bankstatement.doc-0.9.2"="4q9drl2qzrhqn5xg69sc4x6x6d9rk774";
+"bashful-0.93"="4xa5zrj0cfwm628cycqi053irhdybdj6";
+"bashful.doc-0.93"="d9132bwcay35ssw31rsrraq6b15wrzaa";
+"basicarith-1.1"="81hlw6p432i5ln72shhg2k976as1w1l5";
+"basicarith.doc-1.1"="3hskpplbm89xpzx8q0bajn7i3kxncig8";
+"basicarith.source-1.1"="x4qnlbc6v2dfq23ijrjhk5rcfjc1c2a1";
+"bchart-0.1.3"="4xxv8n13igfgl0n89wmxncp8662fx941";
+"bchart.doc-0.1.3"="11b1xlxkxzayb2a96w1svhba4pkchanx";
+"beamer-rl-1.3"="b7823bzsk1qcq24yxhvqb327zb1fbc1p";
+"beamer-rl.doc-1.3"="2m9wika4z2vysryacn8r1ybi38p6mkcm";
+"beamer2thesis-2.2"="64a0v9a7xr9yi4ffsbm98s058hkmq9wg";
+"beamer2thesis.doc-2.2"="5ypn90w572jlw04xi4vzk7pxxsf7ciwy";
+"beameraudience-0.1"="3zc39f4qsyqi4204k4a5n9pksf6gk3xl";
+"beameraudience.doc-0.1"="wkgcr8dyl8ywxwpdc5h8p96dsw9l229y";
+"beamerauxtheme-1.01"="s3lirw6yl6ir8z6z9iq4pfrbwdcq7yp8";
+"beamerauxtheme.doc-1.01"="a76wy5dqlsv25w2f195jk385j25dk4wg";
+"beamercolorthemeowl-0.1.1"="7b8qfnqjliwvms89bn4mxhjqf8sppadi";
+"beamercolorthemeowl.doc-0.1.1"="dh55h6vzmjlxlwn7wz2b6c2c27c4qjki";
+"beamercolorthemeowl.source-0.1.1"="ppxb50mii9mgch0rzm26npxl99a93c42";
+"beamerdarkthemes-0.4.1"="nw30s7g9lid7b9vmabvnj3z5g22nxgv6";
+"beamerdarkthemes.doc-0.4.1"="kygvsh50b3zi88h51ajnzc3c0xyzb5mh";
+"beamerposter-1.13"="cd6wdcxrci6lc2kj195bwsi5yfddk3zw";
+"beamerposter.doc-1.13"="1hp6dbynh3gbrn6gsz54rihdzzr8pjii";
+"beamersubframe-0.2"="m8capqp9nc8mbi9xdzkz89nnz41972v4";
+"beamersubframe.doc-0.2"="y5m8y5zkbzi553hp8maav6g6a42iklfr";
+"beamersubframe.source-0.2"="kw2rnly2zyqw1ap5g9gkv2xchpvbk7gr";
+"beamertheme-cuerna-2019"="vrgqfiwzbf1082zbj8pvn53dmx77qi4f";
+"beamertheme-cuerna.doc-2019"="jcxa5vs5g4nwgck7913jb2jnxccx2y3f";
+"beamertheme-cuerna.source-2019"="lrn8am3h8x2ic39ghpkdl9bxsp07pdf6";
+"beamertheme-detlevcm-1.02"="25f0c66nnhq9r0qrqf186rwqvifzi4nj";
+"beamertheme-detlevcm.doc-1.02"="5yh3kypxg8cjr8vqy04k1ad1agnlq047";
+"beamertheme-epyt-1.0"="1g3593pcp0b4k9lacp4c0afs7jzffa9b";
+"beamertheme-epyt.doc-1.0"="al12nh23v6l4lfa4616zzivldc5jfkjy";
+"beamertheme-focus-2.4"="nd44fakdvmm37ln2rf0b7v16g3b3835i";
+"beamertheme-focus.doc-2.4"="p7d93zq0psphws9blc0avgd893a0lrq7";
+"beamertheme-light-1.0"="9vz0g593s4ykwasfky58jqq6h7a95p12";
+"beamertheme-light.doc-1.0"="dvyzvi4hl69xvvgbhdbp5ax2l3z68nck";
+"beamertheme-metropolis-1.2"="g062nnxl4v5951xq2xa4smkdjq6v2xpk";
+"beamertheme-metropolis.doc-1.2"="xvapcphzmylh2s3551bglqw712q82bxn";
+"beamertheme-metropolis.source-1.2"="5gmm1q6xagbavzzxhc9750yb3bhxf3zv";
+"beamertheme-npbt-4.1"="7f7y7bijlp1p9pzdw9vv64qb03256zqx";
+"beamertheme-npbt.doc-4.1"="dzjby8rnpsgll6gvab9cslziqszhd4zf";
+"beamertheme-phnompenh-1.0"="01nbk38jh4hxk8vykf37x6bhnb55ijdb";
+"beamertheme-phnompenh.doc-1.0"="p0nj4cqg4vaaq6wlycicz0xbl7391lwp";
+"beamertheme-saintpetersburg-2019"="jkhmvyc96zm66cmfjl1fvrnz86a81zbp";
+"beamertheme-saintpetersburg.doc-2019"="9msrd7ylkwfg6ijdx3rddcl143p17383";
+"beamertheme-saintpetersburg.source-2019"="16hmcal8wb74z1qdi5r46w36w3n87n6z";
+"beamertheme-upenn-bc-1.0"="i535al38gpn0j6mhixm5g6vnlj7gi957";
+"beamertheme-upenn-bc.doc-1.0"="s7wxbnlgqxwpabb06jc5nawxm40bnia7";
+"beamerthemejltree-1.1"="iqjiwv4v9vp84a3cjjmv5gxygyclw5c5";
+"beamerthemenirma-0.1"="jix18byykz4n2mqcipf60pskfjlj3ini";
+"beamerthemenirma.doc-0.1"="llvppchvbd0zz9cl3lpswghs8hjm78rq";
+"beton-2019"="0psc07yssk92pgrf4c9zvyr4k3ibbz3j";
+"beton.doc-2019"="9jpvnkmri3w4m9ik5d4l7mnlfpwxacg5";
+"beton.source-2019"="znwrdd877gdwmsiaxc9v8pczdw21wrb8";
+"bewerbung-1.1"="kb947mnv03wjc8ja8k402inijnplk1vy";
+"bewerbung.doc-1.1"="mv9vrqp8g689cvbwpm3xkczk98s1blas";
+"bewerbung.source-1.1"="w8z7h0w0ld2dd88a0yhp6p6md8hn7kkh";
+"bez123-1.1b"="9lx6fqcskk9lj28vcfhfnkmjb9dhlqdh";
+"bez123.doc-1.1b"="s5s834dhxqlqc5i8dswvayhf62chrqbh";
+"bez123.source-1.1b"="fsc7gqwcbpfjlhn0bljq7l0jd8g6zapd";
+"bhcexam-0.4"="1px8zypnmrvi26ysrplj54pdz67ajcs5";
+"bhcexam.doc-0.4"="ksq01g78a489prh8lrrs0nn9k5jqasvr";
+"bhcexam.source-0.4"="ra3418l0mjj31jrkss9fysd4q1h3bdqn";
+"bibletext-0.1.2"="l1xjz1y65n8788jhskhb7z74fs8azjxr";
+"bibletext.doc-0.1.2"="z37aix7i7hm3rg581np1mi67dn5agl7x";
+"bigfoot-2.1"="i4hdv09y0blcrbhk554ilzc70fv19242";
+"bigfoot.doc-2.1"="ixi0hkjrzg740q3pkp9lwrq43ab1f006";
+"bigfoot.source-2.1"="jp9h2p1j46ha7ksxvh3d6rmxr0832r1w";
+"bigints-2019"="6ig6fmxy6wj6k3yc4x9s7b18xbfxj4kp";
+"bigints.doc-2019"="jyxj3risms61j5aazx9hkxxfwbg6nyzr";
+"biochemistry-colors-1.00"="fvz3nlqi6y12g5pcyh118l6vjbw5kz2i";
+"biochemistry-colors.doc-1.00"="r7n07xkk4ixxk9zhz3ffkg7kqsz0i8fc";
+"bizcard-1.1"="l59w5wy3djx28g5yw2ywagi5am258bry";
+"bizcard.doc-1.1"="yallp1mh43m9224sqhzg85ylymiib9v2";
+"bizcard.source-1.1"="z70q003l3pmi9p0z0a99f2bz0lxkq2y9";
+"blindtext-2.0"="5xyi3x46b5mvl2zr925m0dz7z9qqgvn8";
+"blindtext.doc-2.0"="h3p5d9pr9h362d8jqq4lv3dahcfs2rnq";
+"blindtext.source-2.0"="dr68k54p44vgwp3rw9d1khc733k4apah";
+"blkarray-0.07"="djcla33mmskp42qbf8qg053p34515x1a";
+"blkarray.doc-0.07"="7iy0ssb4spk30f5janvknnhl91csvmyk";
+"block-2019"="b75bd0f6imd8svp869g4j3q2q02pilpp";
+"block.doc-2019"="gza7j45w5qixk19px05wr4q67m4lzhkl";
+"blowup-1.0"="zhslxr7v04yhkdssranpiwpql9z7xsrf";
+"blowup.doc-1.0"="paw88yvcal35rq5wpfxm5s9hlsyz6z86";
+"blowup.source-1.0"="kmbxfjca3pwppfhklyhg8k5ddkxg8r43";
+"bnumexpr-1.2d"="vl4qb1q4y3s894hi9i6s5b8r56zdxx7p";
+"bnumexpr.doc-1.2d"="n4kq212mmqrq2bfdf5n6zcykpfigjqhk";
+"bnumexpr.source-1.2d"="74c56vrq91q0ycsypdh04ssy5v0jp6lz";
+"boites-1.1"="nccwd0yxdm5cr6razvwlkrrb5wxxj1i2";
+"boites.doc-1.1"="q3mcdfg2afqm3w1zhbcb1bxzwqgp4s3n";
+"boites.source-1.1"="vcfgm806kvw3z466j5kimj5wzgaywv0f";
+"bold-extra-0.1"="0kr4p0z1bfng2sindvkk7rkfzm863qmx";
+"bold-extra.doc-0.1"="czal2y2szfldrzkn4h0aj6iwjk7gpifk";
+"bookcover-2.3"="mcs63f0cb9qvma487xqrym0a0p5mfli6";
+"bookcover.doc-2.3"="9zwjwl5k3i02cgizw0gf0j0ig46l5jc8";
+"bookcover.source-2.3"="jw98c4wikxgaj2vaykw25azy189q877s";
+"bookest-1.1"="70j4zrqfn4cr0qg7dhdqainy3pxxilg0";
+"bookest.doc-1.1"="3cbqgyzvm6zvzib6jhgdyy7mcw5p75nc";
+"booklet-0.7b"="fkicb41vlz1m3spn6jf9g1dk28f22v7i";
+"booklet.doc-0.7b"="c8y8mxy7hv7qmp7a8bib37vi3xy2pfxx";
+"booklet.source-0.7b"="h46d62nvn4gnnj26bkd5h8m22s0jld8s";
+"boolexpr-3.14"="acxia88jpd7222wvkr2fwxr48vl33nzz";
+"boolexpr.doc-3.14"="n6rs3hgfaz36fblsz28pshnlhvj6l51r";
+"boolexpr.source-3.14"="gbggikjrx8p47w9zs921k16qx8jq6gd8";
+"bophook-0.02"="l3ljpnwkgsrb646j19kxb3qk51azvzz5";
+"bophook.doc-0.02"="nkpvwq471wzz69vlrwhpvsfcz6w9fbbc";
+"bophook.source-0.02"="s9ybhy14wz90vlffn96y0bzh9f9202p0";
+"boxedminipage-2"="rafdlhvk5v8c9r4ajh4iy32x2r2lpv3p";
+"boxedminipage.doc-2"="6bjh7glkpkpfzsmn9np9ldhk5gsv93cn";
+"boxedminipage2e-1.0"="vrria5lbnyz2gywww0hg7cqm14mzwjmi";
+"boxedminipage2e.doc-1.0"="hmdvly5576aynqybq3p47520x3cjjkgj";
+"boxedminipage2e.source-1.0"="qywgphrh766880xy4xsfs0p1g0fvkpxj";
+"boxhandler-1.30"="j2q8bm858c8qm335w67g0kr82vnigjjl";
+"boxhandler.doc-1.30"="08260asli77clnhfnj1fxff5bbgicac7";
+"boxhandler.source-1.30"="0s647gs05wi22qcrv2zsb8x1713yhf1w";
+"bracketkey-1.0"="4l5l8s1xcwhlkaq50spccp2z90lm161f";
+"bracketkey.doc-1.0"="500h9kzvrkkqj22622hr4a78d6mz94jm";
+"braket-2019"="ck5gh00qn839wsxy2qili0184vswy0br";
+"braket.doc-2019"="mqckibrwr123hhda3fnbf8wrh1d16bxy";
+"breakurl-1.40"="lsl2j1iflzhwwapb03s5hg137rynjjhl";
+"breakurl.doc-1.40"="rjyrmhd32w912qg9wd4qxc9q46kg8qc3";
+"breakurl.source-1.40"="lpxb827p465qc14c38rk14jrzag7jfq6";
+"bullcntr-0.04"="w4fxp9fvpbg882yb855sl4b6w8fypiyy";
+"bullcntr.doc-0.04"="l1p8zz226qbnzmx4n78xhjsrc26z7jxw";
+"bullcntr.source-0.04"="6lw02qi8iyp3qph7yaycfm5p1q6l71r3";
+"bxcalc-1.0a"="2rp7llfsbmsq521zm6kg9y0adrg5vq0b";
+"bxcalc.doc-1.0a"="8ha2i73lx8zhzgwb94wk3y30y6s1c393";
+"bxdpx-beamer-0.3"="q07kpnmln2v70w83z91vsk53c0i63x02";
+"bxdpx-beamer.doc-0.3"="8ynjsgbyifkvz27qp8j4nrfk3pryphdf";
+"bxdvidriver-0.2a"="f6ndmagn10ax4hpmlia649f7c14hjkgx";
+"bxdvidriver.doc-0.2a"="lg3m3lw08iizdhdfjqkh91wk5ma43825";
+"bxenclose-0.2"="h4cay0x5nq4xwqpaihbvyzhjxgsp5fwn";
+"bxenclose.doc-0.2"="9i72bmx63c76m7gc7qavv228g1afrnq7";
+"bxnewfont-0.2b"="42kvrm0ag8zrxavfijin59k9sg3akhhp";
+"bxnewfont.doc-0.2b"="wxkcv5hklkzxs3xsw28z0bknq0sjjhsy";
+"bxpapersize-0.4"="ac5kj0q162hag4q4h5sbbp86i9s7rkky";
+"bxpapersize.doc-0.4"="941fxl6638yxkc826a5hnispxz24z7ik";
+"bxpdfver-0.4"="rcizp6hg0bir8rf3njqc66kjcm7c9nic";
+"bxpdfver.doc-0.4"="nj6cpbjw4paw12ggkxg28nm1wj076dlb";
+"bxtexlogo-0.4"="5czz5b638x3h3gpyb2n5si8py53gwl9v";
+"bxtexlogo.doc-0.4"="51msprgb7p49x3lhk4cr65ay7dpzq5d6";
+"calcage-0.90"="4yzr1l7jhng80xs4n1vavaks3d8cjr49";
+"calcage.doc-0.90"="b4vjy0d8rz4jhhw4vimfdfwhpqx7sgck";
+"calcage.source-0.90"="x42rcz3r7lphziii9v8vgv0lm43ymj8z";
+"calctab-0.6.1"="vmm4595955mrf96s3i77mk120yj527y6";
+"calctab.doc-0.6.1"="98qbw092f77rrsk5w8vbzm4hln0klzvk";
+"calculator-2.0"="z44sdp5jlkqywi01c1x7ly2yvzkx1h9w";
+"calculator.doc-2.0"="dwb0bhngsn0xk56gnil8wbaj5dv7v0yr";
+"calculator.source-2.0"="3m4b364wkgfvxyc8y20rg8c7rh22rhyd";
+"calrsfs-2019"="cq6j9glbxrl31xwx7k5s8ayispn82vfx";
+"calrsfs.doc-2019"="avw2hw984yx1vsxayn96nzhgqcfpz90r";
+"cals-2.4.2"="0xq2pylhs1gl542s86wm23nynnfzk188";
+"cals.doc-2.4.2"="yq4wig26r1cadd3kxg5bfraig4axvyvd";
+"cals.source-2.4.2"="fshbdf6ljfy0c7kdcvz5kyinysplcj86";
+"calxxxx-yyyy-20.19a"="pd3hd9l4a6ys8bls1h7wfhqck3jf2mxx";
+"calxxxx-yyyy.doc-20.19a"="vj6d8ssipxx79dyi72xvv65izrfdqlf2";
+"cancel-2.2"="gq061h1xf31ivc5zz1wqk7c457m33amn";
+"cancel.doc-2.2"="24zhq0iz9iqwm1lnyd6zgzc7dsg9b1gf";
+"canoniclayout-0.4"="hk30976j3lql00w0rj481p8j6z5v69yk";
+"canoniclayout.doc-0.4"="gyr8yvdm21p45qqdjin8abq3v0kbh1lw";
+"canoniclayout.source-0.4"="0bqpq8mn7n7223ay0gfrq3dcpfzkxalc";
+"capt-of-2019"="qmph3ai6555l904xk4q6sy4jml5l6nqb";
+"capt-of.doc-2019"="bpa4ll7afaz43ysz8m7q8fs8klvv4h4k";
+"capt-of.source-2019"="9rjjpf1v8qg3v8j27rn8x3b495lddicd";
+"captcont-2.0"="5s81zvby8iq2l0j4bkz99s56w0kvc5pf";
+"captcont.doc-2.0"="ivp30a2jxrnp8zivmdm61nn0i25kiarz";
+"captcont.source-2.0"="bgy7jzbckqnajp42hy4x31dvb01cjm7s";
+"captdef-2019"="gx42x6flbn7jdbrbqzsn8csgi07ij4k0";
+"captdef.doc-2019"="fykmdpzxx24x66iph3rrzj0sc755y4nh";
+"carbohydrates-0.1"="x4rj3x70sfcdgq8sd8yv2486khxip4wz";
+"carbohydrates.doc-0.1"="lp5y1sx5s74px1x03366lpn676vhl6c9";
+"cases-2.5"="jlc3flcfb7ckwr4320n9gxmv2y7l4d2f";
+"cases.doc-2.5"="rx6wbfbbkrx0gjx1dnpfx836wk9r9jdx";
+"casyl-2.0"="4px818jfrl4q6fs2p7sabq1pihzvnsw9";
+"casyl.doc-2.0"="dcw7gljkwgkgsv1l6g6680mawm0x8sby";
+"catchfilebetweentags-1.1"="4yhcz4rv10s3si8vrbn4ac1yikmvgamk";
+"catchfilebetweentags.doc-1.1"="w4zpyb3a2gwlws0as6ifmi0wcnladgi4";
+"catchfilebetweentags.source-1.1"="819f4z3q4hnbng7hbifk1kd4m88xgfnj";
+"catechis-2.5"="lmc08shlf5vy2v8czk8fs05g4shpijv0";
+"catechis.doc-2.5"="n5qpnb03g5533f698jsgs3fd1dlydvr6";
+"catechis.source-2.5"="9j8fqms4ag6jnkcr44300hgp4dg6ma9b";
+"catoptions-0.2.7h"="40b95bmcg7bw5ndk3pmqqxjq5j8gy1fp";
+"catoptions.doc-0.2.7h"="3yvgf5pzh121hwzlfqjqmylassr8h6cb";
+"cbcoptic-0.2"="rqw0wq5w1hxq7241skb9b26ixnr67aff";
+"cbcoptic.doc-0.2"="b818cvyjz7x0a05b5k36815w4n5ij43r";
+"ccaption-3.2c"="4l3kxgc46z9i4lrm479ghpv7d0077l07";
+"ccaption.doc-3.2c"="qm6lh4nrdndp4vivy815ajpj9jj4w433";
+"ccaption.source-3.2c"="fdfpz99x7z4avqx1q4nrydg3r4csq4fr";
+"cclicenses-2019"="scxyv1a4lh05mfgbs55rcg40vbfyvvij";
+"cclicenses.doc-2019"="17zr0mgalzfnpayvzym8hri1yfz8c6xa";
+"cclicenses.source-2019"="hgm5y1054596k129p6j4s86kv0m0ky76";
+"cd-1.4"="34nj75mgz2mzxjbmpik2kvqhmwdmbw71";
+"cd.doc-1.4"="i7230mqkczs0b3nczmf3gkv8z0bx61mc";
+"cd.source-1.4"="h5plih2dk6kk9klc7lwv5gpx88apljlj";
+"cd-cover-1.0"="vl1q321ziyyiybwjsvaq9h11b69xxi72";
+"cd-cover.doc-1.0"="06rjy67nvlvlnlz9dr9xa3cg22ndgm3j";
+"cd-cover.source-1.0"="kyc8pdbwj8r1dzri0wwqss5fmqkci6cf";
+"cdpbundl-0.36d"="hf7h2yz4c0nydnrhdwl5jwxbzhqxv7mk";
+"cdpbundl.doc-0.36d"="5csmnns276bpm80l1iipvanggljgjq6m";
+"cdpbundl.source-0.36d"="hzg9ax2jn65b0rq2afqfxh1pk1rcvlg9";
+"cellprops-1.6"="j9vh3ffv6rnqj0zii45vxii1y2hcl9p0";
+"cellprops.doc-1.6"="rcv1mrcc7miy8wdf6372qdw6mzp0kf3q";
+"cellprops.source-1.6"="frqyqhc1zzlbf057a0iadrgi36knasry";
+"cellspace-1.8.1"="kngz1r2b59j5437zpz0kl5xpjwci8xra";
+"cellspace.doc-1.8.1"="jn3r4y6idf7ml45vp3q1hd2rn58rbvld";
+"censor-3.22"="6125pgg2a5pj48w6md4vzyi3cnzns4yx";
+"censor.doc-3.22"="rcvd45yfghlg5yc3jcfzgj506zfnbmpz";
+"centeredline-1.1"="cqrj6vf1p84c5sqz09an9dixy4mkvbx5";
+"centeredline.doc-1.1"="k0yjy3jia8qsxh1zzgsdvm5a7xj58ni1";
+"changebar-3.6c"="76f70hw5065zfzmvbkrkia3ih5jhhkjq";
+"changebar.doc-3.6c"="310sfxf3nzqrrkcp2n794kpn4bzv9b3b";
+"changebar.source-3.6c"="xi3ldcm33mq6aa4jad2sfv7g58kwg0p3";
+"changelayout-1.0"="sx1afd6zrrl7jk40van0mwbf1ks7z6fk";
+"changelayout.doc-1.0"="lw4yjf3h1r2qr24b3s98rkm0r3ybdwgi";
+"changelog-2.1.0"="pcrl1awmrc771x3q1643nwv4cjl99mzj";
+"changelog.doc-2.1.0"="rfzl3nl53j2cp7mbc2plfwff741x2q0s";
+"changepage-1.0c"="s3dd0v3z0g8v74i6cnasyaa70wnqiimk";
+"changepage.doc-1.0c"="g63jqnyrkc74dd9ksi0s7pbxq7s4dzwb";
+"changepage.source-1.0c"="0ck3lyl2kzvm1182hmw88ni48paff7aq";
+"changes-3.1.3"="qcqmdxmn4djw537y28wxgnir6r750maq";
+"changes.doc-3.1.3"="cs00bm7sb9bqvwpzvg2qz9w03b5b41hf";
+"changes.source-3.1.3"="qkr4g9ajlzy5fhjgh4b7y6mwy5q44iwi";
+"chappg-2.1b"="231kpsvxwdnmakq4mkca0nisqdl622n2";
+"chappg.doc-2.1b"="nhh2f6k2z5gh449b91fmxnvh359n9adw";
+"chappg.source-2.1b"="74f8nr6m6ssdqxynrxl2y4za3rmj9sd2";
+"chapterfolder-2.0.1"="n1iyz86gz5mb7ixn2kd48i0rgj28d7sr";
+"chapterfolder.doc-2.0.1"="cq3fgi89g5j3l8pjmgb9f76ly6ykdviz";
+"chapterfolder.source-2.0.1"="v9hlnak7v7s4bi4942gc43hh03zy33d7";
+"cheatsheet-0.8"="dbp6g9c967pc45wn345qm95zns815kl0";
+"cheatsheet.doc-0.8"="s3h23qpv0l6hn9bqnrzyiqx2mv4bzxch";
+"cheatsheet.source-0.8"="4x8njfgq1scmiqnkx4xvgxinc133a4vf";
+"checkend-1.0"="7ggrrfbxxr2y2idilmjalw6c0av7qypf";
+"checkend.doc-1.0"="qsvc0vq9mgcryqa2dfgh243mh893xzyn";
+"chet-2.2"="g654s58dhkxsnzbg59zydmncldn3qklv";
+"chet.doc-2.2"="4wc8nmj6lprpqhm5a067nsm00y56pzmi";
+"chextras-1.01"="mc1ymd3wfbwash00ly9gxk6hcx9rl4lk";
+"chextras.doc-1.01"="9rl2yhjmafyp430avjf0dmdmmgb45x01";
+"chextras.source-1.01"="5a4dqp8jyaq0bi98q26mskbpmp1avb35";
+"childdoc-2.0"="pq3pyrsns4672z06makyhs3dlq9yxnq6";
+"childdoc.doc-2.0"="35s7fq214rgxvxr5qvn79c46y82zkvqs";
+"childdoc.source-2.0"="hbll1cd9cf76kx3m0s0lb7d490y471sr";
+"chkfloat-0.1"="m48shpd6qvgscba8rz3dpkx0blzfiw13";
+"chkfloat.doc-0.1"="1l3anr2pkpq0h4wpshscrxmcdj80q6i4";
+"chletter-2.0"="9nvpbffnfn080w6pkf4xv18vwsvrc2z6";
+"chletter.doc-2.0"="h2qv6i4cc4yss3iv9jxwfa3w08h9gsk2";
+"chletter.source-2.0"="q76hqgvq8mjc9zqnxjxlk379gqlm0jgr";
+"chngcntr-1.1a"="pn9hpnfznijphqk5qb064ksyxabhhcqp";
+"chngcntr.doc-1.1a"="7612bvrx1f1ai3q5pwgmkpc33ip4adhh";
+"chronology-1.1.1"="jsrsagv2imvc5hz7mgbqdkdqjih66rd4";
+"chronology.doc-1.1.1"="m8psr1bcvmmi1qyyw0j8pyhy0bsgsvdj";
+"circ-1.1"="i0wnc7sxhx96v3jnnsv5l6i5nzvp94jv";
+"circ.doc-1.1"="v5g8hhvdn9xhqp9r1k9xahrnc0yd2a3l";
+"circ.source-1.1"="j3hksz3r2pa1y4m7kw2qwzm11j7a4za3";
+"classics-0.1"="kpskmb202fj06y3glw5f7m625q6zp4c2";
+"classics.doc-0.1"="ysdwq12pmmxanivxl1j5nxbfh1aw0vz2";
+"classpack-0.77"="dybfkvi6ykzw4s03xgz8r7n88xir9zzb";
+"classpack.doc-0.77"="390v2v6vabq679gr2yqvmyq26x6l6lz0";
+"classpack.source-0.77"="mr188ykwygc0gsznl43vlbx33wa2imyd";
+"clefval-0"="291n2xdsripyiq6zskxqdca5gn3ajfj5";
+"clefval.doc-0"="s9mvnhb1w1q61igbrvbn4fi4hannpx2v";
+"clefval.source-0"="l73m1k6wksnfqwd1jiqjksvdpwwp9k1q";
+"cleveref-0.21.4"="cl7sns14fh7jw87sz45rf4v2yrwqyh2g";
+"cleveref.doc-0.21.4"="9bz4rlbh25z2csnngs9ij9mrqazfq2wr";
+"cleveref.source-0.21.4"="7kvgpyz07knv09q52aplizs5zk455csy";
+"clipboard-0.3"="flll7lf5hy4hysxg3ppaq8ygzqsan82y";
+"clipboard.doc-0.3"="n4lc7mbwwxahicb51214fzgh5j2iyqhs";
+"clock-2019"="bcsbr112z4np0wszh3dwv9h5l8w11bvd";
+"clock.doc-2019"="prj65yh580yg74pckacsr432rki2nsl6";
+"cloze-1.2"="6aawammcpq8n2igbncbkip67ph5mapc8";
+"cloze.doc-1.2"="5lsz6hfblnzj9wjs7j43c07drsgv5mdc";
+"cloze.source-1.2"="x6gbbdxnvgfysjhv3xad83lfs9khg4f9";
+"clrdblpg-1.0"="rw9bphdh47x4kpwzil4pxvlpks1s4hz0";
+"clrdblpg.doc-1.0"="0brjv2dy10l0gy3sx6vjw3f5xq9h67bw";
+"clrdblpg.source-1.0"="7pcjrddv97fdsljj752n5gh9mygyl1ph";
+"clrstrip-2019"="162pb7zzvbjq7pyfs383bjzhzbq4x6c5";
+"clrstrip.doc-2019"="piilqaxr9l6ffjv89lry3wqjv60v9gr0";
+"clrstrip.source-2019"="8h0sa1m29abmxxsdjzsr6iph09wc0174";
+"cmdstring-1.1"="mzw3hf7xhy01j9irvvlba90hb0065p1r";
+"cmdstring.doc-1.1"="l2hjd47d6wmd07rnciadrbir01887nd0";
+"cmdtrack-2019"="1jw2c4hx9xmalis8lkz7lr4b38h6srlq";
+"cmdtrack.doc-2019"="0fniwn5zccpkypjn9v5hjl0baxscpc8a";
+"cmdtrack.source-2019"="hlqnd8ar2w2wyjr7rxi6qbi3mw2ppgsn";
+"cmsd-2019"="4b40ccv8788hg71xh6sv12gnzyy2q4rb";
+"cmsd.doc-2019"="j3bvhldqzjqf1snv9pbg7k39sbwl2ccj";
+"cnltx-0.13"="i7agvf6p3zbmpp0yy54jcz30yk5wgndb";
+"cnltx.doc-0.13"="bfzwcspv6kaizp2cngdbgps61w40a61l";
+"cntformats-0.7"="v6xl1mkldlf6265h96m2q0bylifxhl33";
+"cntformats.doc-0.7"="rdam48ljhih6v72gaa3394zlg8cwsb50";
+"cntperchap-0.3"="xgdrhbyll67dbw0xabqmrl2livxcfsbx";
+"cntperchap.doc-0.3"="y2jdwmpp6r1w17svqw9iww07pi3blbah";
+"codedoc-0.3"="gva56ykkkr58q9gxkff6ng0wd5bk9by7";
+"codedoc.doc-0.3"="8w9r3z61w026a0zqmbsilmf4q382bvd2";
+"codepage-2019"="y9xv0i4lq1nh9nav86b5j34rws8lln53";
+"codepage.doc-2019"="sv2vn5f4kcgzbg52233drja6705lcgcl";
+"codepage.source-2019"="4955x5b5ddysnx8bksmwsqhj1jy83991";
+"codesection-0.1"="mnsfhjy6j2ypxiwmwx85w2k2zyw928pi";
+"codesection.doc-0.1"="s2kwd6brlwa42pvhpjasx84s87vmbz8j";
+"codesection.source-0.1"="j94xngba5c8r55idfqgy7ra3imzkmg8x";
+"collcell-0.5"="vw1ir7qzfyc8pc1z89y8zfhj7cs5yxz4";
+"collcell.doc-0.5"="86mkb3wz8zjsgpqgrn4azls054j27rcy";
+"collcell.source-0.5"="vv91p9mc1ig82bjw4cfd96ir1ndjx82x";
+"collectbox-0.4b"="2kxzzkgkgcjw80ff9n2mjnnfpxaxcdhj";
+"collectbox.doc-0.4b"="2xgqgni67w7q4ad0jqy4vr9wki08kn1g";
+"collectbox.source-0.4b"="szy9gprjqnkx357dca60120lvaiyyy8f";
+"anysize-2019"="0phqi21d8qz3ifadzfzyfb04v10xc46n";
+"anysize.doc-2019"="4as0n5cw5g21j1wy094gdrbw8pzdm460";
+"beamer-3.57"="p5nvgliaj010mp3ll25al5i59jsl465i";
+"beamer.doc-3.57"="810mwi012vlailxyqh88fqq5znnvlccx";
+"pgf-3.1.4b"="0vkablyicyimw0jbrgm29lhw9gfmd6ni";
+"pgf.doc-3.1.4b"="68jw3j17r06gclfyzlsdajgqbbikzrx1";
+"pgf.source-3.1.4b"="axqhmadpaw4srzqcj65lg69dxjr0m45y";
+"ms-2019"="1pl0q5d2rmp29raq2icpn03lfa7hynv9";
+"ms.doc-2019"="xwl23v3xbp7kahsh1d5lgjazbbbn91hm";
+"ms.source-2019"="9bmd1famkcmas9g2bb9mi0z6yjrlrqh7";
+"booktabs-1.6180339"="9fj9ar022akcyx1ymdf6i82j9na7xvvm";
+"booktabs.doc-1.6180339"="pv9qaxxlllqspd1a0i57d5m1lmfaz9nz";
+"booktabs.source-1.6180339"="wvlspksj5nlw9z1y8rmyaiky10wbnjk7";
+"breqn-0.98f"="9xpl65xypy6hgwc5dw3vvy7qqm638bvy";
+"breqn.doc-0.98f"="vppflv79a07m77bfzg1c5qv4521qsv44";
+"breqn.source-0.98f"="h5iqm33kqjrq9yf22grm4lds2hvcyz4j";
+"caption-2019"="8wlk0iizpz7x507gy3jn0s08anylfna7";
+"caption.doc-2019"="0n2msprhml7mdg7gdjrbq152lgaf7rrw";
+"caption.source-2019"="3ac4030rz58az0l1049pq5qfwll47hqv";
+"cite-5.5"="7vzh6m2dnlxwkiw62ifbyn9hx82jpgyj";
+"cite.doc-5.5"="d20p75a21nvifkj1f61fd9ah5580n2bx";
+"cmap-1.0h"="bky8rw1a9f00x6fzx611hgfcyf7d115f";
+"cmap.doc-1.0h"="c4d9810xs1va8kpbwaz53yb8111h7lq1";
+"crop-1.5"="kz5lcgz423v0gqbc07saa30623ah1bv5";
+"crop.doc-1.5"="k9prc7248mi5lrmjbzl0g7mkw4yafrz3";
+"crop.source-1.5"="nlpgsplmw5cckdd4ribmsdaa6jchjrwx";
+"ctable-1.31"="wd1f4k8s98g3lcfn825snbj9pvsr6s2j";
+"ctable.doc-1.31"="sjikmhs468fpx52r50s7qyjc4rkfb9r0";
+"ctable.source-1.31"="a3danbgiabx2z87nxkkcbvdb0l7fs0s8";
+"eso-pic-2.0h"="6wfvn1q4cg1ihjdpjbf9mfl07jmqayjw";
+"eso-pic.doc-2.0h"="3nyp8wi16hnbsnhq1mc96bdrnv10ma1k";
+"eso-pic.source-2.0h"="kyz7rkg9l117m0xbn1s8xyd0rd20722n";
+"euenc-0.1h"="fxp7k516ws4khaccirjxi8xszlif27y0";
+"euenc.doc-0.1h"="28lmb3y1m8dhl0n2r1gprmkrpxfmq134";
+"euenc.source-0.1h"="amsw2lpbcm2grnfch6cag6hyn957acv6";
+"euler-2.5"="32y9kxnr7zw4byr1zxsd2iqcfyzjvn42";
+"euler.doc-2.5"="g4bxh88pzc2872qk0w0sgapcaglal808";
+"euler.source-2.5"="8h1ahs9sbijdsc3xiv1rwv6k0vm9m858";
+"extsizes-1.4a"="g3j8wf0886xf7ww65zi6h8gmc6x4mk3v";
+"extsizes.doc-1.4a"="xb8w2wf5i3lvcmppbklpp1hxc12acj5m";
+"fancybox-1.4"="xlk6adym8ans599d0hrs0x5nbaadkls3";
+"fancybox.doc-1.4"="iwsrzmm34bfmddlg33mrmnwjy88rbcfj";
+"fancyref-0.9c"="0417hndq96cnldfbpc3hc1f7pyfqlscw";
+"fancyref.doc-0.9c"="wr3q5g6hjznnfcr9l5lvl8z07ixm1m8i";
+"fancyref.source-0.9c"="54cyla9pjr00km1djk4jc0h8ly50c8d0";
+"fancyvrb-3.2a"="61ndr9r25hh660320x2mblk2ya0zl1z2";
+"fancyvrb.doc-3.2a"="64pdccdhvxjxvyj7l5g8hmd0hr5mdsm1";
+"filehook-0.6"="srkyqmn87cndcbv0g0czlx47y23w1cxm";
+"filehook.doc-0.6"="gpqb7rw6990yrr748mn172k6fhfkkx0w";
+"filehook.source-0.6"="mpr60zx7c07v8x2hkdkvr2mkmw02xry5";
+"float-1.3d"="dqksfsgqpc0vprkhfc6c9vfxlbrnn8sw";
+"float.doc-1.3d"="88hpzqh1011kwvwwm5bppb2gx6c9qqrv";
+"float.source-1.3d"="j1vp24g1lvwniahnd9vlw32c61cjswn9";
+"fontspec-2.7c"="2842bpfa18b5bgcj9as9ps7hzf2ja1pf";
+"fontspec.doc-2.7c"="z707r1gckqx62pz0a7y77ssv052975cx";
+"fontspec.source-2.7c"="v7dghy4rzkypkvhkk673iyjv8dvynv4y";
+"iftex-0.2"="3amzn5jjz9l90w90rhrrq75shl1v731z";
+"iftex.doc-0.2"="n514jbc0x2jxsk39lhayr74xpzfgqvn1";
+"l3kernel-2019"="3ayz6qzmm29wi7vnjffls8kydc9sy8y1";
+"l3kernel.doc-2019"="8mzh11mvpbl7a2ggvg516330azr7534l";
+"l3kernel.source-2019"="p1f2dsmql6xzbx2x3czv4pfwvv0x1mpw";
+"l3backend-2019"="z55f8pgpikxdkj3pyafq7icrzn1cvk8x";
+"l3backend.doc-2019"="plqmv9h1sl8lxvj2mib0dalcdlbc66m4";
+"l3backend.source-2019"="i97xnksvscihnk10ih2fa066x55aisgj";
+"l3packages-2019"="ms46khqwjk804yk95hilf7dbsp789nz1";
+"l3packages.doc-2019"="xbmww23xqpj8rmmfrw64cs3k7q3pklr0";
+"l3packages.source-2019"="i74rqdvagwb54zrrnff2h0i3j06g6bxa";
+"xunicode-0.981"="ybvkdgz4sdl4nixzgz2rbmqfz7hwajv4";
+"xunicode.doc-0.981"="lydvg50dcpp0lk3m9niwdyf1vra61mgf";
+"footnotehyper-1.1"="3rx9cwmnz90z60lh97lafxidphh5hivv";
+"footnotehyper.doc-1.1"="y1n4fhq1gk9fcdbhl0qdk7qfrbpsm5f6";
+"footnotehyper.source-1.1"="nsq8cwpdz3fljgq6hn1flag38g2fbpv7";
+"fp-2.1d"="lxyxf8jkbgrkk43qbnr2s3ns19ihgmw5";
+"fp.doc-2.1d"="ih2kq6xp1nd5gs9bc9vhd34qa7jcj093";
+"index-4.1beta"="qbh9vs69mrp2czw492icb71wbx4nzshx";
+"index.doc-4.1beta"="l3476by3qz0r0cn3lcbw006ay5p11naz";
+"index.source-4.1beta"="0i38dyjh6278hxgkdzy0wvlcbn2w0k7n";
+"jknapltx-2019"="cvwv1bfgf5s8rnahghpy2pbb7kgwzqwp";
+"jknapltx.doc-2019"="cxdmxr63vm4sm8rv6bp9n3yyw5gqc7y3";
+"koma-script-3.27"="9ksv30m8h1g20wxvh61wj3sfv01cja5i";
+"l3experimental-2019"="5m3d2shrmk7njn1jd7bxswaq5wdp41ba";
+"l3experimental.doc-2019"="c1nqvxyj7yfchgr85p8wbz5x0zm5wf5n";
+"l3experimental.source-2019"="fhav9zik3s03qry2x0krn1g7yiffihiw";
+"latexbug-1.0g"="fjk32p2lbq0bj54snnajz4j21x4dbqsr";
+"latexbug.doc-1.0g"="1s1j51jphz3wphi8idq8jpvi935ag683";
+"latexbug.source-1.0g"="lnghssyyyrc9y2nca730pchkyvjmbk40";
+"lineno-4.41"="kvbdigwxw4db752kssgdb8rlxhljkkpm";
+"lineno.doc-4.41"="cfnil0v0isahd65d1sly2kr29w38h535";
+"lineno.source-4.41"="w30n8z3rnrvzpfa1d1s7mn3rcj03s892";
+"listings-1.8c"="2asfcbjg5w9zxjfq2v9bdfnvyx6p1cmq";
+"listings.doc-1.8c"="xmczlyi7bqi8wy7247p9h08jhabkkq0z";
+"listings.source-1.8c"="9l0i48d1grilpgkna68abx3xbh7pb598";
+"lwarp-0.76"="8r1cpc8d7a09mx8g3k2xclr0wkyxkr6z";
+"lwarp.doc-0.76"="l65xk9wmi5s3qy4p9zm3f167p4fif9is";
+"lwarp.source-0.76"="2bya1h32g31g5ki7ajgib3g1iwkprxp5";
+"mathspec-0.2b"="kwvx81d4nlxj7vbr2n5zvgnfvkasg4y0";
+"mathspec.doc-0.2b"="rqykkdkfahnnnphcns26p19z9mr2mlgh";
+"mathtools-1.22"="jz5mji21zr6wna5dqnl5g9mvkf4z07aa";
+"mathtools.doc-1.22"="zy0nszbmq9jdpdxxin8fyc2rz2307nrn";
+"mathtools.source-1.22"="zjlqphmbjr8hqkv8ail9j83yy2cwl3mb";
+"mdwtools-1.05.4"="fbp8vrgdzc2g4i27m9f4qcsr8yjlbzg3";
+"mdwtools.doc-1.05.4"="jb5r95gmlqj1bx19gbkvcm372ina3bdy";
+"mdwtools.source-1.05.4"="kcm853bwwv69vb5zcmikd1gmpcnhz9pw";
+"metalogo-0.12"="hamja3bdw70llmwnabjq9vsdni1w77qv";
+"metalogo.doc-0.12"="mi09m2hdx668xm2v9igsq25z504n4vrh";
+"metalogo.source-0.12"="4xddwk98vl0xdff6j49jjanzvqbw6yzm";
+"microtype-2.7c"="kb96fykrpc13hn3s0vg6zb33dyx1cdi6";
+"microtype.doc-2.7c"="kr2m34rdkf2a62h8m9zsk0yqpi1g6i5k";
+"microtype.source-2.7c"="ysd9892wj8zi2hi4qzk6pfpknsv9xz73";
+"ntgclass-2.1a"="z5fz8hxig5gp5ii9780b8filsbk7qxyq";
+"ntgclass.doc-2.1a"="900yw3bcc4mdycknaspf867wm8fc3g7b";
+"ntgclass.source-2.1a"="rqd773gdvwmrz54igqz6qz54z4irajvg";
+"parskip-2.0c"="1vbvla6bsakgvv9f17ni5dxlh88xy4jh";
+"parskip.doc-2.0c"="2zm0jh7i14djl8xj2ww657f0qiwgqhn1";
+"parskip.source-2.0c"="1nnnvrl2jshgbwjjzmaw2w5qmczifnm6";
+"pdfpages-0.5n"="a50qjswa0drdgin6zsyz0m005mby2sgi";
+"pdfpages.doc-0.5n"="6j0mvrgzc4vxnc4f5xv2n9zmbshmyb61";
+"pdfpages.source-0.5n"="mbdklw49b4wqb9ir8f3cq105csjlaw57";
+"polyglossia-1.44"="jaqzsrm9qm1ly20a73hj0cjcj92fhqgh";
+"polyglossia.doc-1.44"="pwl89hlpg6b3v9vwwl0jafg9d4x8d6hl";
+"polyglossia.source-1.44"="r9wdjpi1jhr3daxl9wsz4mgc4v0cbgpp";
+"makecmds-2019"="anpaqglvl5rmcy8r2q0ap8m117nsx89q";
+"makecmds.doc-2019"="39zxaxxqlmps1wd4rjy42a1hk027n06v";
+"makecmds.source-2019"="j4g888p0hniq7p6b30q1fb4qfw3qp7i6";
+"xkeyval-2.7a"="nznhb9srbfg7ifdi2mlkqbdcsq6329a4";
+"xkeyval.doc-2.7a"="k84lpc1h5d71qcb2k5rm5fnn04pv8czc";
+"xkeyval.source-2.7a"="9g5vvb4y71qryhdbjwjyxhh2w86cch0f";
+"psfrag-3.04"="k8qyr0l3fsc4insyy1r6q596dq4gf23a";
+"psfrag.doc-3.04"="ybb4r3w20w1pcjwzaw0srpkx5c19rqg7";
+"psfrag.source-3.04"="xk135sb77fk6l9wz6fzifsjvchcqyj0f";
+"ragged2e-2.2"="9d56j53as9gdh5xsyyj1mvz9f5cy93r2";
+"ragged2e.doc-2.2"="911vhpxz6gryks06j0nzcg5d04393jl7";
+"ragged2e.source-2.2"="cndc09ydns267p1r7sr7hwlmpg4mqgsd";
+"rcs-2019"="4lkd02hz1x9zkxnh247wmwy6n9pg4pyw";
+"rcs.doc-2019"="m1lw85b793n2nxywdi39fg438i6kif7x";
+"rcs.source-2019"="iw4nn20q54s2d4wdyby7n03ljcqrjmig";
+"sansmath-1.1"="yxyny4949h4hm4ajn673nzzw8wn8cba8";
+"sansmath.doc-1.1"="b8vzdmm1l2x7cyc15xzhmwjkszlsp2j3";
+"section-2019"="69anwmylbk95jbgr8645abp07ygv9f9g";
+"section.doc-2019"="ri1gsrpfp94rp0dc90djj1kgpka2p5gl";
+"seminar-1.62"="z9nzymppz6hz3lxy0nliqvy5szq6jk4c";
+"seminar.doc-1.62"="23fz6p4ybl42rmr1m3fllg7qn1zbmfki";
+"sepnum-2.0"="x64bd0f3g1x0bcpdgd2lfspr13jyxvcf";
+"sepnum.doc-2.0"="l26xmi7n5vabfpn0lfn3cjzn1wj6lj5n";
+"setspace-6.7a"="jyy54q9bmx158j0cnpwqa43rzvkm4wq6";
+"setspace.doc-6.7a"="xzz3kqsp4ywxmjdnchkmdv2jy4mkbfvc";
+"subfig-1.3"="sbdadp9ya32w2h8f484zwpmpln2zi4l0";
+"subfig.doc-1.3"="y5g4iadgvkfi144zk37fww79r0smsfk4";
+"subfig.source-1.3"="3xn4yhi29m77001w2hy0s04svik5z5xx";
+"textcase-1.00"="bx5a8yyv2wz1y2rj4sjm2psw3x1j3c43";
+"textcase.doc-1.00"="lx43w8yqkg66bg1b2gslsakj97jr7far";
+"textcase.source-1.00"="vjlmjci0821c4cnbh8bq2x3nkiwaji0k";
+"thumbpdf-3.17"="m4b0akrn0sq4ngalczdq287avr5mrpc2";
+"thumbpdf.doc-3.17"="9759lhx69f2406pc4ggg4q2hjws5nnr4";
+"translator-1.12a"="n6lhccnywi25q2hkdk3ddvgywcxb244f";
+"translator.doc-1.12a"="qyspw49icxily7c7ky0apm8313v0rwh0";
+"typehtml-2019"="rk5lpbaikavkp0shg38cdk5b209wx3kh";
+"typehtml.doc-2019"="292x26pw24azh4zdwpy6sh3f1ksk8r2x";
+"typehtml.source-2019"="96p79dyy553b4mc01ihk7qgr11396drn";
+"ucharcat-0.03"="d445ic6gwl7d5d31s691vr63f4hn76dz";
+"ucharcat.doc-0.03"="ma6rz3djr9v3q5p8ffqyznjb91gjj5li";
+"ucharcat.source-0.03"="kh9cnzg1pn8c51bbph2amp5y1j85q38h";
+"underscore-2019"="b7kwk1zddr5a19mcw3yxrp9pffc604x0";
+"underscore.doc-2019"="gwqnbwqn6vjizs1xqnmbv8fmcrs274fr";
+"unicode-math-0.8p"="f2f8bm0png538nm7jydkm9l6qf10vjpz";
+"unicode-math.doc-0.8p"="62rpcr8civdwkdd1gk7fg2mf441h64pl";
+"unicode-math.source-0.8p"="dgv0nciqxh74dr6mxlcpljy5qchvan9w";
+"xltxtra-0.7"="k32hfwrcbhp144n8rplwjgxmz89pw9zm";
+"xltxtra.doc-0.7"="vkw5vjdd8n7qxi8plhjb4xygh97pfj5d";
+"xltxtra.source-0.7"="y27f01j6zgm06nmsgcp5kl05p637wvj9";
+"adigraph-1.7.1"="rd6185ri0shknkd4ixsmlm7229q94sgk";
+"adigraph.doc-1.7.1"="20bk54g9516h3h83pdz74zpknamxj3pn";
+"aobs-tikz-1.0"="klfbwfabfx6lv1pk6kz3vayabsnphvrh";
+"aobs-tikz.doc-1.0"="qh43c30d1xpyl4rbazp4kj8p850rdxwb";
+"aobs-tikz.source-1.0"="xgmck3vrplx5q6blkm6yg2njgkk4k5bz";
+"askmaps-0.1"="4bm7q1w9sz28mj7v79gphh13rlz1ny3d";
+"askmaps.doc-0.1"="dp5c0n7vk509bhwhmxi6wvshz45s3fix";
+"asyfig-0.1c"="61q9dbbmirr3q1fncz10fpvqr68kj3zb";
+"asyfig.doc-0.1c"="1ynfgvq1hvwl8dflmf5vchv2xhmr8511";
+"asyfig.source-0.1c"="2403n3a1pa3gbrrs919rj56jcy4klyz0";
+"asypictureb-0.3"="gl1hc876saxilin18y249r7zz496yk6l";
+"asypictureb.doc-0.3"="9fn9i5plddqx2gxpjhx2m5n7jrwrk9x2";
+"asypictureb.source-0.3"="mskj52di031bhfjir3f7cd5aqwwz7cn4";
+"autoarea-0.3a"="navp9i0m8kf8zqhk4x1avirazzrsgf83";
+"autoarea.doc-0.3a"="zh69glasmj251qwrw6pjrshprd6x4hsh";
+"bardiag-0.4a"="vh54valkzncvzlx8y58gzs3k5jq66s69";
+"bardiag.doc-0.4a"="576s5nnqvq13rjnnn4l2d1g1rnd64vvn";
+"beamerswitch-1.6"="l759yh5xzqdxswf8hvbxpgsvpdbql82a";
+"beamerswitch.doc-1.6"="pixyxdhyci4j613cijcsm2bg20z9q8i9";
+"beamerswitch.source-1.6"="hnq47sdb3cqvxa1z0w1q3pwf838iga4q";
+"binarytree-1.01"="xl1rqgn286y7hpv69bwja6c5rrbx29g9";
+"binarytree.doc-1.01"="7ihijqc33m3ydk77aw0qqqhf94yyrz21";
+"binarytree.source-1.01"="lk7v0gr502ck4z0d605z6mwkswqpmfyk";
+"blochsphere-1.1"="8sagm09ymgd1b2ls78rzrcbn6k0m63rr";
+"blochsphere.doc-1.1"="sj294bshvzlc77wi6mwv4pl0y73j311p";
+"blochsphere.source-1.1"="4kr6ra2cp6fm7r6xfrln38v06iwxqzaf";
+"bloques-1.0"="azx9imhipx08s8zyky9hzkwandvxwyya";
+"bloques.doc-1.0"="8jb9hv62wj4hi9scr78szdm990cqprvs";
+"blox-2.5"="0nv9zh53j52xnly5n28kywznagiy0crf";
+"blox.doc-2.5"="691idhcw777z46rw0azm7jplr6k0fhsm";
+"blox.source-2.5"="0w4dkcqnb09k93zjqslnzf44w7smlp4n";
+"bodegraph-1.4"="h09jfqdgsgfbhakfxqbwz9wa9sdrwkip";
+"bodegraph.doc-1.4"="hwwfy0n7b2a54kywm1jq5nrs6fxbk1xd";
+"bondgraph-1.0"="xaviazf8k9kn6qckni79kxksf7r7mr00";
+"bondgraph.doc-1.0"="f0089d1jj935472sxdjkbnmz4inydkng";
+"bondgraphs-1.0.1"="grfahi07937nnb8nm3b14csxv6bf3w7w";
+"bondgraphs.doc-1.0.1"="dky0vgbx6hfik4xjavvpvvm269hgsqcv";
+"bondgraphs.source-1.0.1"="zmcw2pr67zm6my8021slkbg8zvmbkxic";
+"braids-2.0"="lhgf3jlskfcv3iwsyrnwd8amlr3f0kwq";
+"braids.doc-2.0"="jnj2mqbrrw89wia4vrc24ifg9rv3bzw9";
+"braids.source-2.0"="ny8xkjwdqbx115liw708q6bdyyqzcqil";
+"bxeepic-0.2"="dwf6rg63vzmlcyaxjzwjr8haihfxwv6f";
+"bxeepic.doc-0.2"="qkfwmg27v6ygkp3d9d1l18zrpribbx3q";
+"cachepic-1.0"="hr0pnmjxny590gzhqbwq9qiqd1vcpwrq";
+"cachepic.doc-1.0"="myyjxkc21qrwmvx2nvbg2smvzfzi5f5l";
+"callouts-2019"="i91ky84hjizrxkhb5k6281iq3fkifrsg";
+"callouts.doc-2019"="k4rca9nia095sgskhv0kzp1qqw0ydf8l";
+"celtic-1.1"="mr86xyd6md9n5b17a6wga40k8z98dq7b";
+"celtic.doc-1.1"="3mwjjxnv079m8ginlv5my50jj1cmpjv0";
+"celtic.source-1.1"="z25a01arypma6jfyj2f16n36hqyicffd";
+"chemfig-1.41"="159wgzbnmda73q0s1lgn3jbfm5hywyn2";
+"chemfig.doc-1.41"="h86pl1g5w2fli361za5783pv7w62kkww";
+"circuit-macros-9.1"="9mnl36vzk80ci01283pn05rg6jl83xf8";
+"circuit-macros.doc-9.1"="rdzhyx1inmh6rnqzdbs830xnknvlc7d4";
+"circuitikz-0.9.5"="3z1x5j6p6maapmxgkl4gngn9mhszr0hj";
+"circuitikz.doc-0.9.5"="5psr4l9hdgm6766qh4dhx0sgspx8yjh7";
+"combinedgraphics-0.2.2"="hr8cvhw9ng0nx1v0v34bx5yppzhw8r3a";
+"combinedgraphics.doc-0.2.2"="2s219mqf373sb1rp3dwjd9kdasjl9fdg";
+"combinedgraphics.source-0.2.2"="4q5n4m14613bv27dc7n3z1m8w2sfiv0q";
+"curve-1.16"="w4a3qv419x68y5ydvi1dk6pnm6ni82ci";
+"curve.doc-1.16"="f4n85j7dlkp12vm17vqac8d4hzm1jvd9";
+"curve.source-1.16"="gkfbyzhsaknlrhm3ni81jxswdjv5z9ij";
+"curve2e-2.0.1"="bgzyk69v782swwlc8jj677lqcgc0bglw";
+"curve2e.doc-2.0.1"="bx6bxwa82k1ms94qxr5czhfcgr7qals2";
+"curve2e.source-2.0.1"="29fd9y77g6ijz70qdjnlv5jn4if9hvn9";
+"curves-1.55"="2cyy1kwxbvxpvxpvvsbh7nvh5q5l7n7b";
+"curves.doc-1.55"="jk4ma0hcrdg6lwy4l5238b9xzsb8lfrv";
+"curves.source-1.55"="q9l5hcsi0n14kkcim30yk6i6sxc5cmvw";
+"dcpic-5.0.0"="vw8yp87w2arykklgfbi4sjpqq68nkxl4";
+"dcpic.doc-5.0.0"="0shw5fqn8pmzs2s98yxa12jp6lf23c4b";
+"diagmac2-2.1"="4q9fi0lsnriy4szlgdlg0w302q1gmbrs";
+"diagmac2.doc-2.1"="dfp1br71r19b0pzjzln61wjdn30qy0n7";
+"ditaa-0.9"="pbrv5kj46v258vy3dzlp1js4m0sp8wjj";
+"ditaa.doc-0.9"="db8d34zf2n19xlzljydai7vyz3p11wi2";
+"doc-pictex.doc-2019"="770vj0w7dzrw6n4jf1dfds5ngk11cf6m";
+"dot2texi-3.0"="igh08hai8lpcr0pn4lcfx5b6kgymw4sp";
+"dot2texi.doc-3.0"="r038r86xd4csibgk9n3h76qc5ak1zpl5";
+"dottex-0.6"="yvd132700sxd7hnngskg6w30r1cpx3m3";
+"dottex.doc-0.6"="67dpg655j83k809rs0ybc3cxpy2lvvqb";
+"dottex.source-0.6"="fz625gq3shyvx3wk5jk4hvr33wls038a";
+"dratex-2019"="ydbymdy490gw405n0gn3amd771knss83";
+"dratex.doc-2019"="7z5sxm5li3by76x7sw9hq83gl34f6gkr";
+"drs-1.1b"="h9fz09xdgwgnbif1vxa1k7rxj8v9ri5h";
+"drs.doc-1.1b"="aq84i4xdklf4wcripj60cc9fd4w3zhhc";
+"duotenzor-1.00"="fx9ljkzzp09x8iajbwjlrzcjxf382k9x";
+"duotenzor.doc-1.00"="x6y62df7hjrp64r4w1qvdikqdg6ph8l2";
+"dynkin-diagrams-3.141592"="j4vi8xr90ll5y6i9a5kg5v0ig52cf6pq";
+"dynkin-diagrams.doc-3.141592"="ycb3hbyg2gxky7ki6cq8xnarv0gc5xjp";
+"ecgdraw-0.1"="py3xjb8hz3mdsh42hnjww7i4ndxgkwnc";
+"ecgdraw.doc-0.1"="a9ggi8ivc4wcnqv9gd28lhdw56w4zg8a";
+"ecgdraw.source-0.1"="77vlnnhs178s19gaa4n7wa82lcvyp0s1";
+"eepic-1.1e"="vdbwj455076cwr4fwmx0lmf00nzka9vs";
+"eepic.doc-1.1e"="ngcq5bdryv79z4wazbzibf8fybc2mhb0";
+"ellipse-1.0"="8whg820p9jrqn4nfb7lc3w8d1a2cyfvn";
+"ellipse.doc-1.0"="i9njlr8m3jb9pcrwqsbcjbsb26993p8n";
+"ellipse.source-1.0"="25xhi22s1cvkyzbjwchd50ixsx6awfk5";
+"endofproofwd-2019"="xn4xfhhr3k5cq53ab6rkjwvxqs877kq8";
+"endofproofwd.doc-2019"="q8zg1zy1909bsif59caj8rmmjj4g3v4i";
+"epspdf-0.6.4"="h50y3g5yrpqgsm0w913lf1pv0fnfl83v";
+"epspdf.doc-0.6.4"="g7jxwc3n9qjnj5fby3v84hlwz02lvr2g";
+"epspdfconversion-0.61"="4dsfb50v8zqbx8nqlzlj712jiq9hchwz";
+"epspdfconversion.doc-0.61"="bxc42asj3as5dx1qq4axdvfs30lfm24b";
+"esk-1.0"="1hsqxgyh6nbwdw4fl5lsivg6wh1v2s1r";
+"esk.doc-1.0"="14qzisxfrysqh66dn3irf2c39jjazl1j";
+"esk.source-1.0"="yaq1hdjjgl4j06rvz25liay9p054n1sr";
+"euflag-0.4"="8s7f3ihqnhnsf2wnhbyxwsqy0wscnmpx";
+"euflag.doc-0.4"="r0li7ps034kgwkav392gsw2lqdry04p7";
+"euflag.source-0.4"="m8smqz5db43rh417pimnwh6cai2351hv";
+"fast-diagram-1.1"="sdzr4ya21gayk528rk4zli01l8ywnqm6";
+"fast-diagram.doc-1.1"="anbp06v1p1bczyiij9d2z0li6yski394";
+"fig4latex-0.2"="mwf75sk2i52q6j3gb4pjmw5rlyyihq5g";
+"fig4latex.doc-0.2"="c6qz809776x0rblq5d6l7xcy35bz540v";
+"fitbox-1.02"="1xc0jmbwwwx5qz9n1kdb7ckwqfp69624";
+"fitbox.doc-1.02"="w9pj3arymsl3p2yyis76xiyq8m5v47sd";
+"fitbox.source-1.02"="1vhaxc5s13fkpqgymjlfmp88m41hpm0x";
+"flowchart-3.3"="63krabbf5sfqxf0rjb2h4mjksvb9vgcd";
+"flowchart.doc-3.3"="697hizfchfd691kx07sl1y84p8l6196d";
+"flowchart.source-3.3"="zgn96fhr4z67gpz85717hwwfvkfz2hlx";
+"forest-2.1.5"="zl86yn0am5c7v9c471ai0g4spp3lfc4k";
+"forest.doc-2.1.5"="9sfpasybcfbs0v2afcmhxwpcmdxjpv42";
+"forest.source-2.1.5"="n53yzm6p3nwbxrjj999yvcic58p4iv6z";
+"elocalloc-0.03"="mk2cs80z0gh4dx409y2n3h9cr8ls1la8";
+"elocalloc.doc-0.03"="0p4f0hwr11xvn57adggbbssn9iiynsyf";
+"elocalloc.source-0.03"="spa5lrwk7nikx08v1pgp0xrx4c2gbahk";
+"genealogytree-1.32"="qm4n5cdjzhn48x7bhr8dhzi1harh1hm2";
+"genealogytree.doc-1.32"="ic98gqb5i5cdaczqqwg4mjah7sywdwp4";
+"getmap-1.11"="b3iws7x0vfqj4jcrz2y8m77l9v1ywwk1";
+"getmap.doc-1.11"="291rnf2x2nnyhf2wc82hv77jndrx6ckg";
+"gincltex-0.3"="sqimpp1pb3c7mqcm4jnd40jlahpcnr30";
+"gincltex.doc-0.3"="mpr0nv6ldvvc7wgq35qh34csxhxnknmf";
+"gincltex.source-0.3"="s0dq3s33c04fqmzi9q9wp09vgfm7qh9h";
+"gnuplottex-0.9.3"="r27hfr5pf31ihjv6nyyv3gwpb52pix26";
+"gnuplottex.doc-0.9.3"="5fd22z8bg4wd67sg5dzrmdb6bhv997l5";
+"gnuplottex.source-0.9.3"="1lan5zdflfhb2rvm65zdmcp56izp6khv";
+"gradientframe-0.2"="x80zlqzx72n55qpazclikrafwzny8ss5";
+"gradientframe.doc-0.2"="pgy0vrx4nvys3wki3202r377nryd0r1h";
+"gradientframe.source-0.2"="10dx55zpi0j7xzdkry3dh41ax873mmmk";
+"grafcet-1.3.5"="9yyjgwccj41q284v8cxfhj2l80x95ygs";
+"grafcet.doc-1.3.5"="6k9w774q9japk0n05f45wdqm95n9n71r";
+"graph35-0.1.1"="x18xxd2x7yb5ckpild1s64w9f9rpi5n7";
+"graph35.doc-0.1.1"="qza5xy7xdsncal55gyqs8ay9z1h5rp49";
+"graph35.source-0.1.1"="gaabqpc5jr86g3jbd4sm6df0633c65y3";
+"graphicxpsd-1.1"="1lnxx7fjgam8dyjyay2ws6la9wjhbkn2";
+"graphicxpsd.doc-1.1"="rx8yz6raa7cyyqr37jr41wkgpgljdhr8";
+"graphviz-0.94"="gicmf9qslgbamr7qkac4y3x0wajkbhw1";
+"graphviz.doc-0.94"="xxyyxpgr81jv00v48zv7vxkm9sa4hjsn";
+"graphviz.source-0.94"="kqv26abzy2ff31a3f0aval7lskvk5nql";
+"gtrlib-largetrees-1.2b"="5vpf61cml2gsbvciynamwvv1arq8hrm7";
+"gtrlib-largetrees.doc-1.2b"="fxh9rvq76l19zjv3lbgman4gfcqw34i0";
+"gtrlib-largetrees.source-1.2b"="knfqk3b14idsc57fj80ngw26xi7pcnwk";
+"harveyballs-1.1"="axddj0mvqck1gmg0b7s43q7gi9hm1327";
+"harveyballs.doc-1.1"="rpsz7hqyyp9h5sa0hxmxnlrs6na0imbn";
+"here-2019"="3jh68lc8arqbg7kb8ixc87i12qlrnh23";
+"here.doc-2019"="445zak4q5zdlbhvkb8gvkg20wpmwjmgs";
+"hf-tikz-0.3a"="hfdmzpnpak33573ldllk90rywqz3ngqi";
+"hf-tikz.doc-0.3a"="dy6jw7rgbclhb6c94rm3c1bxz0gznqn4";
+"hf-tikz.source-0.3a"="jn1iy5nysj2y94ar0s2491l97m1y2rw8";
+"hobby-1.8"="kmk2l2ik0anclivgqk6alx1v44j6g8pk";
+"hobby.doc-1.8"="8bdi0hrpyxyczql8rhqfiqlrza5y2g56";
+"hobby.source-1.8"="99k7q3r58r1v7vqh3hv08qbb5s1r552p";
+"hvfloat-2.16"="42b4aspf04rp4gvjlxh51284g8vkmhpn";
+"hvfloat.doc-2.16"="qsn79czwvj36r4ifp0yb8p8hrfrs4p4w";
+"istgame-2.0"="il4ycc7pxqvpyals4cvc2bkgvzc29vmc";
+"istgame.doc-2.0"="rr6wnw1csla45zv7kmcfizj72rfcgx05";
+"kblocks-1.0"="lrlcxbcx98bsjxwkr10w5wax3x4lmyjm";
+"kblocks.doc-1.0"="wkh5wnh52fw7qsw07nq8zvj28l921s05";
+"knitting-3.0"="zggfcjvr02xigbnrhnz1cdlz9hqkcv5j";
+"knitting.doc-3.0"="40gp4l967is4ljnbh4k03w1a87r4n0py";
+"knittingpattern-2019"="8xvccf07iwn71kfnj9f3pnni3imwd9kb";
+"knittingpattern.doc-2019"="bq96pr4hd9mg70qqfwjynhix7ljabbk8";
+"ladder-2019"="wgw0drkb53daslzwsvg48dfznndrz6dp";
+"ladder.doc-2019"="32b2x9zydsp7b2zncs2lg6ldz5cs7gpa";
+"lapdf-1.1"="g5x8axkiscl5796b82is201vcbdxvc3f";
+"lapdf.doc-1.1"="3lpf17r6yqaa7ld8742cp8a7crafpc9x";
+"latex-make-2.3.0"="0q8ifbm69vizlg5bkkqv781w75n2icql";
+"latex-make.doc-2.3.0"="p4cxzn8b8v1602h27sj2w6vgqh08di4j";
+"latex-make.source-2.3.0"="f3bgcyi9903l6a41ryla4a3rm15h5fkw";
+"lpic-0.8"="74wchk7ljfacnfqy6wn0j9ns5bqzhkv1";
+"lpic.doc-0.8"="yqsjlvnfzgj180kssqhp1i11gq8d9c9q";
+"lroundrect-1.0"="x8g1sz9w4xaj9da4y1xy58hrdblmdx4g";
+"lroundrect.doc-1.0"="2pw71ykcm2w7ki2xx5fvhlfk5xgi410a";
+"lroundrect.source-1.0"="4ad9gr28lqir9g0a15pa31wybbc9m935";
+"luamesh-0.51"="h9iynwv9kpydaizfmn51kfvinqnmlixq";
+"luamesh.doc-0.51"="jmg6frxjcmpn3s4wkv11s2kbpb8aaidh";
+"luasseq-2019"="k07ymsxywmasi0nkdd2ldk164lf36z9d";
+"luasseq.doc-2019"="vnqisa721w2nx11wxb3zsk070b3dzm1b";
+"luasseq.source-2019"="341ldjdwdvjin4rq8ica4f69hb5kbwr1";
+"maker-1.0"="88vzniwk6x9fqhp4y3g32a1cj6nb57g3";
+"maker.doc-1.0"="5w3rag10kbzp8whk0hjrl1ic7iqrna8f";
+"makeshape-2.1"="y9d0868x2s8950zphcf6sdz3l7a1sw9s";
+"makeshape.doc-2.1"="wdhhbk50rqxnm4iqd0gvnfzgy17knvqd";
+"makeshape.source-2.1"="5ddzsj9xakk5hwhg54snvv7bp0vlmjd1";
+"mathspic-1.13"="x4m5r6mv0y3cc4vx1qb6anrparbgdvlq";
+"mathspic.doc-1.13"="qh2ycvh04kxfihxnri5fr5zxdkk04ppa";
+"milsymb-1.01"="qcagklmphxh4svksm4wl44hw3jq9zgdw";
+"milsymb.doc-1.01"="pcqfylx6visrn6b9503aq68zh4zgbxp0";
+"miniplot-2019"="3myl55b3q359l0aillyxg7pisii3llpj";
+"miniplot.doc-2019"="hi57wciv475ix91zl4rh30lv5pffns1p";
+"mkpic-1.02"="m0rzxyzpyjzial8vvd5nm2rny449ka5b";
+"mkpic.doc-1.02"="m0v80hkyq699sbmdbv5ydp75ccdh5yd3";
+"modiagram-0.2g"="g2syxjg96d46hkn75ym5p3pszq92kn9y";
+"modiagram.doc-0.2g"="4jdcw6fidn5kds9b31y3nq9czmw42sxd";
+"neuralnetwork-1.0"="3scaqj2kvqri7x23chqymfkg534298ik";
+"neuralnetwork.doc-1.0"="xxsvv8bh5174ihqmaxgy5072z92glvhd";
+"numericplots-2.0.2"="c6kqacnf4qlhx7lkbnrp4xji5xg9nzib";
+"numericplots.doc-2.0.2"="9dlfmdqslpzhsf8zyfnsqy41qmcgzf1x";
+"pb-diagram-5.0"="34vlhfdhm7glvpzprr99v7z7lc8rc8pd";
+"pb-diagram.doc-5.0"="8a36mfpszgjyzddfmmz2qrg9fv03r9vh";
+"penrose-1.0"="k6jlwvn60krdxcf7dj61nydhvf4smmfz";
+"penrose.doc-1.0"="yyv1mdclnrrvb52b68akbah0nd9jr68i";
+"penrose.source-1.0"="brmpi34mmx9b7vs1vl1gb2mbz4mxcnlm";
+"petri-nets-2019"="0yny9mc10syfx1a716sjw3768bf1a51z";
+"petri-nets.doc-2019"="3m0f4r65jhnq3la2qyp0xa7ra66iyahs";
+"pgf-blur-1.02"="30lr14qkrz1ah9kvgadknb9a7yyhv625";
+"pgf-blur.doc-1.02"="x4phrny12czndwvsrml45i6a5ymfncf0";
+"pgf-blur.source-1.02"="hdg79rv84byqmnyahvi65v3ca3h3j14r";
+"pgf-cmykshadings-1.1a"="3q5v126d7na5pj2bvyf6mqz9xd3h3ypl";
+"pgf-cmykshadings.doc-1.1a"="b5cv1lvwc8bwsddm1dxzl22ii1kfgk9b";
+"pgf-cmykshadings.source-1.1a"="yg8shb3ms5gxhv4f779g6ibccw66sk6p";
+"pgf-soroban-1.1"="1l6ifq09crmg68d174y2ms66jjhgklql";
+"pgf-soroban.doc-1.1"="ajlhmwd0fgmamsgnnzr3s15z6irx579s";
+"pgf-spectra-1.0"="w2w6z4fj2g5z77i72q7l5fzrz3hbrb0p";
+"pgf-spectra.doc-1.0"="d9v7k3fbf4hl2yz91q8n5sccn7bfq2v3";
+"pgf-umlcd-0.2.1.1"="h2syv4fn0svppahm66gpwb4jnrl7jdl8";
+"pgf-umlcd.doc-0.2.1.1"="yn8vn90qgh34r1i91cg7k5n81v47i6ni";
+"pgf-umlsd-0.7"="f6lyf7ph9a6ayc082h8bd1hrwjx1jw2y";
+"pgf-umlsd.doc-0.7"="6x7xzfz7zcd43fscprh7s4gniya05nbs";
+"pgfgantt-5.0"="vbi8jb5870r16w4dd7zdw26arrcbbv6x";
+"pgfgantt.doc-5.0"="62rp2q84amm7kgvan2jw00si5fdkq226";
+"pgfgantt.source-5.0"="6r8nhidc0kwxra3p3aywh9y2kcv7zwiq";
+"pgfkeyx-0.0.1"="z2s0v4qmhqbbw3v7bx27i1i454zvzidz";
+"pgfkeyx.doc-0.0.1"="znjsk9dvxksykikfmm69z1kizgpqnpl8";
+"pgfmolbio-0.21"="987pnzviy9l6fbqgkbq8xhjn18w4dpqi";
+"pgfmolbio.doc-0.21"="ckwm7mnw5qhp47vfxmbc5xjvnysp8jxq";
+"pgfmolbio.source-0.21"="l3rs43l6g8bg4l4y7gbf8ji8vpj9pwca";
+"pgfmorepages-1.00"="1w9nmavglic9398ipww68w0v4iajrq03";
+"pgfmorepages.doc-1.00"="cpbd2mqr5rmhj9lyxl2nd5mwn83djy0a";
+"pgfopts-2.1a"="r3hmv29kc7hfcmx1j2kirk27q4y2r5a9";
+"pgfopts.doc-2.1a"="qb2q273gcqw9p1wjzw8hq7z13f689zkg";
+"pgfopts.source-2.1a"="g9ya18k22lcd5f8aq3anl152d98h6b7z";
+"pgfornament-0.21"="v3jz47bv6awc3fq6fq81ybvmsigm8wmq";
+"pgfornament.doc-0.21"="amyhh0pq8p7x6f4ldyf2sgcqfs0qgm5a";
+"pgfplots-1.16"="nwgyxvygiw0lqhh7lz9ykbc5lscmy7lf";
+"pgfplots.doc-1.16"="cdjfvyz34yfbjavxz6hsmmpl49gi9q0p";
+"pgfplots.source-1.16"="m6vxsbqzqmjq6p4n2kxzygdhvxqpdaz9";
+"picinpar-1.2a"="wvxa8vjglc2v1k8dcszj32wx5jgmsm3w";
+"picinpar.doc-1.2a"="ix8d6091agdxivkq3pj0xv5afksr16xj";
+"pict2e-0.3c"="nzynzzmjd5v7yc48a04parddy83xcrz2";
+"pict2e.doc-0.3c"="zc7md0dvssdpj7dcw99dh7h2i231rbyx";
+"pict2e.source-0.3c"="zwmlz98xbvkljr202lzrp3bps8dwqgl3";
+"pictex-1.1"="3wr03wxjs0nbpncsyzzz2flz5h383a30";
+"pictex.doc-1.1"="d96f4qc758wqc5pifjspr2cfhkj3j44q";
+"pictex2-2019"="fmvr7pqdpq2lnigzzbshgwmrjf03kj6h";
+"pinlabel-1.2"="5bshz2446a2c3mgc79b1znaw07n54cck";
+"pinlabel.doc-1.2"="a23kw5gn0cwsg5fzldlq5a9rj03wg1la";
+"pixelart-0.2.0"="hq6wmp9dgfzzqxwn11a3isf2jnzm2b7v";
+"pixelart.doc-0.2.0"="xk2xnxmgcb2i26qnim31dvq7qm209715";
+"pixelart.source-0.2.0"="64lb31p15a52jvprjk61dfg5a9njjkim";
+"pmgraph-1.0"="hp6991d3dq131lsjr5675igjkgnp1hr6";
+"pmgraph.doc-1.0"="yi2b6kiybj2mivsjp7jw0zy895zj7731";
+"postage-1.0"="7n4w4vhx3ck8pvfp69l95yn45f7qbmpp";
+"postage.doc-1.0"="h40jv63ikgmcd83xmvkz3vdc700j5myy";
+"postage.source-1.0"="x0f20a02h113a5z6cppvhrqcq2lmlh8c";
+"prerex-a"="kzqmlwvyiz4gcqfl6jf7gafgxnbz7jf7";
+"prerex.doc-a"="p0c5qjq63scw8bfk0f9v5jid1bnijp5m";
+"productbox-1.1"="7l9nqp2nxybrl35q1slpz9jhn70las0b";
+"productbox.doc-1.1"="j713za0sjbr7plb4xdis6zwvi7bg1n1q";
+"productbox.source-1.1"="aqhyalz52l2nz9v46bi0jn21vqw68w6g";
+"ptolemaicastronomy-1.0"="09a5aimp6j8yxwfhsdb7kf574jcy2p6g";
+"ptolemaicastronomy.doc-1.0"="7ijjcz9y4ah07pwb30b6r0wpg87fxij4";
+"ptolemaicastronomy.source-1.0"="xv9cql2pkkiczvgf3v7sa80p22pbz3h9";
+"pxpgfmark-0.2"="sy9cs1y4gf9xr7jfiyp8zkr1r8di00hc";
+"pxpgfmark.doc-0.2"="25vgpjc0zr0wjny4snksr3yzk908s2mq";
+"qcircuit-2.6.0"="va7w4d1n5djxqa4fis7m409aapx7hqa4";
+"qcircuit.doc-2.6.0"="vibn2wypk17d73k72ab6grqaw1irck68";
+"qrcode-1.51"="x2mibdysf003dgl6i1zq3h68a1km3j2a";
+"qrcode.doc-1.51"="y97sa2ha89kmhfj5kq55qk57sf6yf3h8";
+"qrcode.source-1.51"="f4mxn89cz4f6wvnvxqfxdq411nnz4z44";
+"quantikz-0.9.5"="9zcs4s5jzndxprdhf4k04nvb7bg0ar8d";
+"quantikz.doc-0.9.5"="j3z2hxhp7s4ir1kkjadq8wavlvmy5dbn";
+"randbild-0.2"="bkb9mlnckwhxirdsck7pzqki670mgns4";
+"randbild.doc-0.2"="v89kxn1iiw9spvinn8xcazp81w9a0nb3";
+"randbild.source-0.2"="la433aq038bqyjdv40rvdkinsiq7bf07";
+"randomwalk-0.6"="91mjhj7f7d66khry7iy6y3v5wawg4y0b";
+"randomwalk.doc-0.6"="j5n0mc0grinrafdzb5cvqk3g1m9ir44r";
+"randomwalk.source-0.6"="ksq2jax3pbyqhkg5nk1jdhbzwgynhnyd";
+"realhats-3.0"="wk3pwrbv3mipr4hkdl09x0ysqfkp54qk";
+"realhats.doc-3.0"="6g2lyz0rp1gkjx41jln6mblfdadjd22d";
+"realhats.source-3.0"="kdyds9szcmvmlacgx8ngwnjcqyxjx4rc";
+"reotex-1.1"="yzydkc30vf6csv388xyf4lm9mn894781";
+"reotex.doc-1.1"="63p2w1vjpannypp8izsn8qis0f7zcngg";
+"rviewport-1.0"="c1flf8nck97sgi4994izzh0vwh8np9z2";
+"rviewport.doc-1.0"="jmr9vbj9690mrw18gg9nkilrkld8r4kj";
+"rviewport.source-1.0"="czi8b9lr7ldxh657jirgsvcy3l5m9ybp";
+"sa-tikz-0.7a"="dcl4gm1658qdh6bs082bijsd0fq2p2wv";
+"sa-tikz.doc-0.7a"="27fh1xd288pwk62lngyy91f97rl4ag7h";
+"schemabloc-1.5"="7pm30f9wazndg4cnxv31m616di90d0p4";
+"schemabloc.doc-1.5"="2020d2ivq6qccq1s7fk161pmarznn6ss";
+"scratch-0.41"="r2i8n81lhrl9420xwj61v3rmv98f64fb";
+"scratch.doc-0.41"="rgs8yb5va24k7cl8h6f2813ff0ydkia7";
+"scratch3-0.14"="klj8v60bff3fr4pymifr0wcj9qgr7xv2";
+"scratch3.doc-0.14"="dzzlly4ygm0k69n92xpjfdknhg8h5c7i";
+"scsnowman-1.2d"="vmlm0ilz9v7hxsz6111w8596xajzg2ly";
+"scsnowman.doc-1.2d"="l1svi3nmdzpfnad0w8dzxxzh8c4n2v9j";
+"setdeck-0.1"="jhxxygy339baxmfl252kjjyhw2zbhf8n";
+"setdeck.doc-0.1"="0h0bv2ywm46jj8g1r26scn8r3pc0a2k5";
+"signchart-1.01"="y2yc5dcfwbpicxf3w7kp6lxjgwxz4dsx";
+"signchart.doc-1.01"="r2zsa7zazg4l0z4x18hwzkisqaympv1f";
+"signchart.source-1.01"="81p9ykfplbsb51lnx3wb00zrsrmsd9qr";
+"simpleoptics-1.0.0"="hd3442mvndh1y9qmk4g1c6jgy189927v";
+"simpleoptics.doc-1.0.0"="ivyl8pm0sxqglg6m7qiqyga8cnh8ac47";
+"smartdiagram-0.3b"="2ap0zqyxnbs2lkdgx70rrpm2b6d9gslr";
+"smartdiagram.doc-0.3b"="p0q92dnkzxz2i5zb8837353j4ainabxb";
+"smartdiagram.source-0.3b"="lqy3sqf14w7fxzrfim7mb1y7rmsbln1f";
+"spath3-1.2"="34605r5pm4yvb87if41mx4b5mxvj9d9p";
+"spath3.doc-1.2"="d3rbzd5kx1asx6v8jgldbgss7lzpandp";
+"spath3.source-1.2"="szcj8yyc7azz3xxjqsqxm91hmak5jyb5";
+"spectralsequences-1.2.2"="yahjlarc3vgpzcmb2abr6nwyhqqj5c1j";
+"spectralsequences.doc-1.2.2"="by1zrk0y8nq05qf8csa2gvwl316zc1j4";
+"swimgraf-2019"="x77prbkrnadhj57fbh68hqsmrbk2qsis";
+"swimgraf.doc-2019"="hfrhqz5pj6g0mdyp1fbbfbnasph11pwi";
+"table-fct-1.1"="b7wz94n1h3wpq9mi40zdl3v4m9hi1wxk";
+"table-fct.doc-1.1"="1k2sa9bsygbw1ib85x7yqda1jbzbg05f";
+"texdraw-v2r3"="rkzarniigb4a454964qbfdiaj1z124xi";
+"texdraw.doc-v2r3"="2wq6scv4jygmaam3ywddf8spizq9fi0m";
+"ticollege-1.0"="bznj0maq6a1b7m6p18dhq0fnssx06bwj";
+"ticollege.doc-1.0"="7n7nyn8zrp9za6l355797gq96vxp2d78";
+"tikz-3dplot-2019"="kl827mar9jlbjpwxl90z3fml8i3zabb9";
+"tikz-3dplot.doc-2019"="y736rbqkbjg7nnly25d0jl72z9gyx17w";
+"tikz-bayesnet-0.1"="w9x9vf5hgmv18ljz0kx7rby1dig63539";
+"tikz-bayesnet.doc-0.1"="g7dkg4gg6729jbscb7cf3fsay2dfqv42";
+"tikz-cd-0.9f"="h74wx5r1jclma4zqd78wb3f5bmpfc2pw";
+"tikz-cd.doc-0.9f"="ig04n4ja9ajw1jf0bfv481agc71hjsv3";
+"tikz-dependency-1.2"="yqnd9843awmwy61pd310krnfhyf3867k";
+"tikz-dependency.doc-1.2"="n3rk72ln03anvylh5pc5gyajkvgm6cff";
+"tikz-dimline-1.0"="q2wyvka6vafwaj58iawrrl3capkzvvfj";
+"tikz-dimline.doc-1.0"="gbfqnslkm9piq4jmhcivpyb9y2cjra2j";
+"tikz-feynhand-1.1.0"="06m7r0jzmsblixlp7r67dmpn68j2y9sm";
+"tikz-feynhand.doc-1.1.0"="0w41029zvh26r54ma77l27dkh81mqvxk";
+"tikz-feynman-1.1.0"="icrxa2hwmgnrah6x7br5sqsky8r47v38";
+"tikz-feynman.doc-1.1.0"="afnpl0m1fkwp7cip0ia10z0lgq2vnpwj";
+"tikz-imagelabels-0.2"="16ifa9cz1wy7savmdfdrv8myx01zx4i6";
+"tikz-imagelabels.doc-0.2"="f17aq0xki5f7bbsjzp88q3d0vpmraf88";
+"tikz-imagelabels.source-0.2"="rvmig94wa47dlj17d6qvwvdyp57blxff";
+"tikz-inet-0.1"="mkhy91a9633a5hbqcckgppy43ri13wy0";
+"tikz-inet.doc-0.1"="c62lz4nmz4cw48rjmfl3vn913smpxzcb";
+"tikz-kalender-0.4e"="nnszylg8x712g1kvxmk8cbl7iv2w0x2z";
+"tikz-kalender.doc-0.4e"="ihvfz01yv386i6rhd329p8c5dpgd8j5b";
+"tikz-karnaugh-1.2"="szdj3jvq9704zzzrmmm7kr67f9scc5vs";
+"tikz-karnaugh.doc-1.2"="4v7jmjk6kczigziblmaphpxl1xkr2ylp";
+"tikz-ladder-1.1"="ika5n5wsldxr4fk6qfjr6p9i94iydplp";
+"tikz-ladder.doc-1.1"="33yyhiz2knjssmpvz90n63n3dgh3g57g";
+"tikz-layers-0.9"="fbjyhacy9k7yhpyfg8viqdfb9z5d4dy3";
+"tikz-layers.doc-0.9"="d3q51sfsprqfa0m0plhghgcb3j63fn60";
+"tikz-nef-0.1"="88fk1n97w3dpajkw85ww9mw93p3wmv3q";
+"tikz-nef.doc-0.1"="xf8xsf1qxy0493zwx9nr2rsxnxavyzy9";
+"tikz-network-1.1"="8cdkbdi646835h133djv5vs3d7w87x4f";
+"tikz-network.doc-1.1"="xxy33lp7nk9h2a52qifxvqg5vqsynpr7";
+"tikz-opm-0.1.1"="5hgjh2kg1ynxp4vn8x47wfkcxz27ahra";
+"tikz-opm.doc-0.1.1"="4jqackkzg26vkvrkwflljvxx6ikx1jbf";
+"tikz-optics-0.2.3"="lc3znr18mmhw9v5d7wc8s5hs83bm20bv";
+"tikz-optics.doc-0.2.3"="9fhp84w25nsi4hxq2rys1y6vc03f4nlf";
+"tikz-page-1.0"="zv2wzvv8xzs4s5cf5vs8w9ffsz8sq4rf";
+"tikz-page.doc-1.0"="vgszrg09v23lc7yj3j0h9hwnyvdhsck0";
+"tikz-page.source-1.0"="2x6hmyi5739qskj8wf1k1636kbzns9b7";
+"tikz-palattice-2.3"="l8q247mbkx3qyywwb6sif0if3jv5ykjk";
+"tikz-palattice.doc-2.3"="j7y3y3r0mgm8limkgfljmn3i8dcnj0m3";
+"tikz-qtree-1.2"="vl2jq8b492p7dznrx63mi2zxcpax8a1l";
+"tikz-qtree.doc-1.2"="01bkpz1f0pm7plpkh6a2kx3c93iwcfwa";
+"tikz-relay-1.2"="p4gb81p3j2226g1d7qiclv6d2cj52fq1";
+"tikz-relay.doc-1.2"="q694hq9r39mashph8za9yqf9rs3ixk00";
+"tikz-sfc-1.0.1"="2snmpyh0v493k4jpj29nb8pnad6hcz7k";
+"tikz-sfc.doc-1.0.1"="bx6nm96f145iv6r6250scs4myx6z2sw5";
+"tikz-timing-0.7f"="phaw9fm5dzq5xr4klpnw2dhnrq3lcam0";
+"tikz-timing.doc-0.7f"="cc5mlz7linvwb3ki8bnhhs6qz9xmkkb4";
+"tikz-timing.source-0.7f"="8lpjas5dgvpl8dcxf1549m8nh0vn20fw";
+"svn-prov-3.1862"="d5py1m0kjdzdx371fpvi66l80p92xp4i";
+"svn-prov.doc-3.1862"="kz3zma1cmbi2kxvn560vzl71n0pj5bvj";
+"svn-prov.source-3.1862"="xz3g6ljh9fk8vfla8c3asbzraqymnca4";
+"tikz-truchet-2019"="h8p45wr3xhjslajpyyzr8zha6x52jyci";
+"tikz-truchet.doc-2019"="6nyandwvh9qj5z6pzh20417kl3gd3q68";
+"tikz-truchet.source-2019"="r5gpj9cmqj4njzzx820v7ka0v7chxy24";
+"tikzcodeblocks-0.12"="1g5p5x26xi87pgk6wsmrc8jfr5zbai1z";
+"tikzcodeblocks.doc-0.12"="anwa5r1dzd81pryrgy79cgcnyhr0p6ri";
+"tikzducks-1.1"="rpv9c4xm44kj4p1wg7vc9z0wdmks0ax9";
+"tikzducks.doc-1.1"="77q72vyqavlicgn2y7l9ygln0dvy9lvk";
+"tikzinclude-1.0"="hh3h2srdlz39dv69wdwcrmjr1pps271a";
+"tikzinclude.doc-1.0"="qdzw00zvqp206krl9ph782lvrmvjphm9";
+"tikzinclude.source-1.0"="bznb6w85hk7nzsmnglz01qvi4mp64bqf";
+"tikzlings-0.2"="5zj4kybqjbzbnfkzhac84g2za5wii9a3";
+"tikzlings.doc-0.2"="vrmilr20lir4628xr132mv82gz4z0rd9";
+"tikzmark-1.8"="5k486ngj472l6mz533nfcgj43zlp1sjl";
+"tikzmark.doc-1.8"="0ljfqj9mzqrxy9hz1bjzm0z3i5hk650q";
+"tikzmark.source-1.8"="864falsbql4b9wwxyf5g0xm5dwmzydrh";
+"tikzmarmots-1.0"="d4603hm1maqsp6s2mpr3d9czb040x96q";
+"tikzmarmots.doc-1.0"="yqa28x78pg3513ni6xd11511pyqivkia";
+"tikzorbital-2019"="0jand3q2rnj1l71kiqc5wx9br6iqa8h6";
+"tikzorbital.doc-2019"="8w7za38r9lqh6hjyrx51mhxljlwbr13d";
+"tikzpagenodes-1.1"="bbppcjhxjza1vhld9n9kjdm5jf03by5f";
+"tikzpagenodes.doc-1.1"="qds77qax9drbdmnw93lsg9lzkd7kjmnj";
+"tikzpagenodes.source-1.1"="bm54xhdx003f6j5j2csj6272d6pqxbmd";
+"tikzpeople-0.4"="9cjdrp8gw59kkklf92fmpq8wlflaavxg";
+"tikzpeople.doc-0.4"="fpwfczmdq8qad1c637rcxjzqy2r6gi7f";
+"tikzpfeile-1.0"="ay059ccg53rz4q39dy1cls80g1yi2mq2";
+"tikzpfeile.doc-1.0"="f97bldn28br9f6dfr88b81w8g683xvgq";
+"tikzpfeile.source-1.0"="hcsmvxfza3qg128nsj2n48v7fr12viqg";
+"tikzposter-2.0"="ir2kg1wfppny43rywlc1z8fbc9gnwpp1";
+"tikzposter.doc-2.0"="8bjc46kfilm5jv3z87kpzq5fk1rs1ihr";
+"tikzposter.source-2.0"="s0nhs6jvz6zn6kn7kr8srvwynh8vvfaf";
+"tikzscale-0.2.6"="7cc4pbv23n95rb1b80p1y7w8m55z59yl";
+"tikzscale.doc-0.2.6"="qb6yk80pbipaq95cgasija63px2v836w";
+"tikzscale.source-0.2.6"="2spzfhaff1wn11brhjcx881jmql261ad";
+"tikzsymbols-4.10c"="x1wdz62q9x6idd6893pbcm0d0k55b3j1";
+"tikzsymbols.doc-4.10c"="97p2haamz7kk8i970pa01x5gx1xmcrzh";
+"tikzsymbols.source-4.10c"="wllywv4fs2xfv3xvd92qkgm905yssplw";
+"timing-diagrams-2019"="89d8m3lh174y7p3xx2iqdkxnq71s7fzq";
+"timing-diagrams.doc-2019"="r8xz0yb362glmkcaadipa5v8jsf3w5py";
+"tipfr-1.5"="dd5jgd6y7rzspj6shr5mbqcbbzyncv2b";
+"tipfr.doc-1.5"="w5mslbn2d53wzdkaynxigaw4344psp9j";
+"tkz-base-1.16d"="w03w3abbr404mmxvgvpb6jvzdkbj40d1";
+"tkz-base.doc-1.16d"="2v2w7n3cwq5h20f3hxyqj1dijyvzkipd";
+"tkz-berge-1.00c"="jgkikvl8nnvmhqkkqivl57zc175cp2kk";
+"tkz-berge.doc-1.00c"="dk8ip06kr5rijf38ljwz8ik46zfkg083";
+"tkz-doc-1.1d"="md52c9wdgszfqpnsm8hgm0mhcq4gjqgq";
+"tkz-doc.doc-1.1d"="ic4vldvxdlq9zqx7disw9m872zv28mwq";
+"tkz-euclide-1.16c"="a7aldarmq49sd3kv5glmiwk7j5knzcdc";
+"tkz-euclide.doc-1.16c"="vj3mr7y6s5nyzy7akbn8f8iqbpaxs1r8";
+"tkz-fct-1.16c"="6nf7cazsna57aariv60jf2gcx321wkmm";
+"tkz-fct.doc-1.16c"="dawp55i6vgfhssqn9bs0h3amvh7bzasa";
+"tkz-graph-1.00_d"="bhjvlldz48jx4glwmbqlzsca5ngw72sz";
+"tkz-graph.doc-1.00_d"="cj8h2qaphxpgf1p40vzfwdvxqylh8hjd";
+"tkz-kiviat-0.1b"="1w9f137a433521ihdb8qdp3d3k8qpjy3";
+"tkz-kiviat.doc-0.1b"="axjzch4m75pp2b9xhg24a2938d5dc2sw";
+"tkz-linknodes-1.1d"="xi3k8dlzgayvpjfjmqjvpws952l4mx57";
+"tkz-linknodes.doc-1.1d"="k50ym2dflswvk1wj1fic656v09hllhkr";
+"tkz-orm-0.1.4"="kvjkkbbapnd2f03g4h48ic729s8yvn5z";
+"tkz-orm.doc-0.1.4"="20ccyjaxz59v4yvbrz18ql5dz05nqxj8";
+"tkz-tab-1.4e"="6l6g2sakss447slpcbvi6pybl8csvbhw";
+"tkz-tab.doc-1.4e"="2h8c23y9scrcqapb5s15digbnvcvynvh";
+"tqft-2.1"="jg1k2p45j027wivwykric03v8vgfgaaw";
+"tqft.doc-2.1"="0qc7pjywc0dwxkw750xsqb67f6cpzka2";
+"tqft.source-2.1"="2kasg0q4bb70r80kaxm5hykahynk7vbf";
+"tsemlines-1.0"="qd021jr57lay3xa2hwms13x49y9f3q7v";
+"tufte-latex-3.5.2"="fagszla48gaakgcvvynmhcmk8c2qvbf8";
+"tufte-latex.doc-3.5.2"="nqqzq6qbgcq8w5ih3fns8wibvfdn5df0";
+"ifmtarg-1.2b"="7sq7fspjvzn5f3yvsmwxm9h9xb4y8dkw";
+"ifmtarg.doc-1.2b"="3azjs21rb4iyw6qp6vikgjb5an4b2pam";
+"ifmtarg.source-1.2b"="89na1sf5dvfxw6ajyx2xrh4wmlyymxyb";
+"paralist-2.7"="9x62lrvmw3pkvlrkhrcpm2mk90s23a1p";
+"paralist.doc-2.7"="8jww1j8k4rf6jfnal0dlqv4abcjyz5n5";
+"paralist.source-2.7"="vs1jw2rijrnym49vd3w1nxswq52lvf9g";
+"placeins-2.2"="ac0ckzyrg9k2akv26dg4hck4q3w3z141";
+"placeins.doc-2.2"="ab3faqlwqspnnrvigdsljl9ykqyi2gfm";
+"sauerj-2019"="9x0hghvh5wh6jljwpyf61c6pc4rl9jaa";
+"sauerj.doc-2019"="zk8dghf07j3ijvnr3zxw2bajqx49nbaj";
+"sauerj.source-2019"="j1bdzs9ky0ycfh00sdynswv2vfvx7nmh";
+"xifthen-1.4.0"="4d6x7yb6hdr4xg2dn572gwpfnykppsph";
+"xifthen.doc-1.4.0"="364kifdxmk5ak2flyqcfzjgv0dbsykax";
+"venndiagram-1.2"="pxwyrzjwbkkyhfm22v13p2mm5l9s2bqp";
+"venndiagram.doc-1.2"="xn6lk2l6vjwjirm9s0vmcsqna9q096zv";
+"venndiagram.source-1.2"="aj2hp4pyi0jhirjbsrv8cpajh42q64ai";
+"visualpstricks.doc-2.3"="qml7ki3mr0fj18gxz20j88il4i0d4fbx";
+"xpicture-1.2a"="b3daw2s1dzkvrpa1lywjgqnrahnn539g";
+"xpicture.doc-1.2a"="h5xg50jzdi44vigcgqpc61hmxa8q8ggy";
+"xpicture.source-1.2a"="a0bq9s39fb1askk6bb5yy69bmv3ii59l";
+"xypic-3.8.9"="rh7ahdwsnxzsk42imv3qqa0q2cb15ng1";
+"xypic.doc-3.8.9"="9vnm1j6g180slvahaq3mgdlsjnnllhnh";
+"colophon-1.1"="7naibja70d1kb637ydb5jbj3xbgxa4l5";
+"colophon.doc-1.1"="m0y1dcw2ymnr8a09a8wzj6vw00ns055g";
+"colophon.source-1.1"="xfrkdkkk54q9zbhv9jzwm2bf43czj0na";
+"colordoc-2019"="sb31vsh0mzzd16vrf3gpvs9c50zcjbgx";
+"colordoc.doc-2019"="2sw71l3579qkh4z3hqirvv0y3d79sssh";
+"colordoc.source-2019"="3p7baf59n87p34sxwdm9lf761dmh8w0b";
+"colorinfo-0.3c"="x5wwpzhcm3ppfg6hh0dcr3rl7cjs23zn";
+"colorinfo.doc-0.3c"="ppz8wrqzph8cq5dggikgi0gphmg0y1hj";
+"coloring-0.2"="qdjj8va77wpin0pw6izv2lhjj0cm8zfd";
+"coloring.doc-0.2"="v7z4bnnpghfi39b8jmzpwq496swhwndh";
+"colorspace-1.3"="fvlhzz9q6cyaxgs9yzlajaldvnfx7kx8";
+"colorspace.doc-1.3"="jlyv19xlx618ajj3g0mja99w5c68gbj3";
+"colortab-1.0"="4bqbx02c34g7271mg6y1gw1nyqmj6vwq";
+"colortab.doc-1.0"="qm51gjkcfq5gjimr5pp3svfj1xaqshbd";
+"colorwav-1.0"="ilrircjl70f9pv8g89d8dzjdsipjfbmj";
+"colorwav.doc-1.0"="jzgmaadlkkbb8f94kfzxdkywh1pbviif";
+"colorwav.source-1.0"="m488q2p0lkrf6rs6vy7nfi86778zi66k";
+"colorweb-1.3"="4b0qbipxl6if0adrfblqzpzs48aa2fsb";
+"colorweb.doc-1.3"="9qi2i5x35aq0ks14c1pbvn11b91pdqm1";
+"colorweb.source-1.3"="c207mjpwnn9dwd9yc4wlq414sl2gjbz2";
+"colourchange-1.22"="gy8kllnhrg7i10yl0nrhvyyik5j13vkc";
+"colourchange.doc-1.22"="vjvp7zji8zc7bv2yghvy2zv2d1y2nz2p";
+"combelow-0.99f"="2gm5s37dfs6h0gxjpa221sv38vdpvzs2";
+"combelow.doc-0.99f"="r2dmygqgwcx9ma8frgm3ragqrb198c8x";
+"combine-0.7a"="mnzy6xk1nxfsybm2nxy9qb4k7shrwank";
+"combine.doc-0.7a"="b54dmdzcnpffyws5sbhwrm46hh7gj5wj";
+"combine.source-0.7a"="j9i3psfzvamyz2imf8mmcf4970j9k9gf";
+"comma-1.2"="ai1p7vnnzvazd950aav3xnjggmzh5xac";
+"comma.doc-1.2"="3dkfkh89fy2jy02amwg7kh18hyh7v396";
+"commado-r0.11a"="7jd82pb66a5hapcrqk19bvnszkgs649j";
+"commado.doc-r0.11a"="rg7zy4zsbmvan3vln93y2crrmc11c5dd";
+"commado.source-r0.11a"="2z09138429p7bxlq4392bd8psznnsyib";
+"commedit-1.02"="rixggc6616xjdnlhl4nmzzrw4p4rda5m";
+"commedit.doc-1.02"="h31fx0amimgh9dsh6a4qik65q9v36zd5";
+"commedit.source-1.02"="i142h4pi5v51k5rilxhz1zfybxf78xmw";
+"comment-3.8"="dalw0d3w4mg1i8pg530ji0c5nmyrjvcb";
+"comment.doc-3.8"="hsk8kvj5arq1xznsmv8p6iglrj5f95kh";
+"competences-1.0"="kqk5mzm2c12dydifc1naxhfz0kpykkfk";
+"competences.doc-1.0"="kxhlvgv62b2sqf36qpq45pfab730l43y";
+"competences.source-1.0"="hlmzbgb3fd33miycrryvs4pb3sglrgis";
+"concepts-0.0.5-r1"="n6f2szv53cszq0ybd93wcggz3jl0wf00";
+"concepts.doc-0.0.5-r1"="xww0baz5rff17j0c56d1d0j1mh2zfpqs";
+"concprog-2019"="fy8virjhfw7d1y1l0vg6fgzmxkc4f7gb";
+"concprog.doc-2019"="sm3fl60ymv5z649frky6xck3hd9rr8yb";
+"constants-1.0"="p22vxmnw3a68jgrwxzvs90x1ads7vy08";
+"constants.doc-1.0"="0d8avlpp7ra6jin7rq92vrpa6c97q5g4";
+"constants.source-1.0"="44ajza7nr171n3nlbj0lqqq7bld53i1a";
+"continue-0.2"="8ra5l58pg997c1p19piyqz6rmsmx2d41";
+"continue.doc-0.2"="pzp20wvyq2ksgnf533jcfwv5gjn9bm1k";
+"continue.source-0.2"="jf0dkkyhnaqhds4a6jxmr4xw03fjy6kl";
+"contour-2.14"="nqc3i7nqzk5svszlgb0glkr9m9n3sgvg";
+"contour.doc-2.14"="8kjg0zsy2i6nkvxq4xjcaaqd2by1wq5s";
+"contour.source-2.14"="jx3fc5lngqrdhcwy2dga2ynw64pfvwk2";
+"contracard-2.0.0"="h90hv3p5azhik6lc2xqz2g2n2rq4ab3f";
+"contracard.doc-2.0.0"="ki3pizq78ili2p4d3az97zf3cm5mxldx";
+"contracard.source-2.0.0"="jk3nj5mm4xqvyzzw2g2gva945sjpxl78";
+"conv-xkv-2019"="irm1jvqddc4a7jfl1qraxkii8gmmmh63";
+"conv-xkv.doc-2019"="vs1dc6np4zd01fkq95a0kqwm72h9snli";
+"conv-xkv.source-2019"="8gj6sqrsbxknfpvrfalflkrnhncjhbfz";
+"cooking-0.9b"="sp0gxpgc190gn2wngw7nqzay88hykl4x";
+"cooking.doc-0.9b"="15mncbdsswn8q6914ijlhzlg5ch6schl";
+"cooking.source-0.9b"="n6pvjf2lx012s5y29qc5mjkiz8dinkjr";
+"cooking-units-1.45"="nj1z7da10kvmxv8gp6hlxs449fsm5fhm";
+"cooking-units.doc-1.45"="qq7bsxi1r9n06v2grv0qknv2a0z6aq4h";
+"cooking-units.source-1.45"="26g0kx9w1hkg0yhsm90dc629adgf9k3g";
+"cool-1.35"="djbl4kj33wlqqnj6sl31f57viw5sacvf";
+"cool.doc-1.35"="3l8iy5landcaybfhvb1inj773r55k7hw";
+"cool.source-1.35"="hfd759pc6m30sxnmchmv59nl8xr3hwrm";
+"coollist-1.4"="zvmxdr2hvnis0p8asjqsw67m6j0gv0wy";
+"coollist.doc-1.4"="z2lv3naa383vdbhyccpzs9khbbdzg8fc";
+"coollist.source-1.4"="2p080664dwgg1623jx2x8hd3b8m1k9wv";
+"coolstr-2.2"="7rsqq7nbw6c1z5shk0zcmkhnhqh6mcdq";
+"coolstr.doc-2.2"="sgbapr8y7xrh41ppzhkw9s91npbnnnll";
+"coolstr.source-2.2"="mh1biqrlg5f1gkpy5q9ml82xh0jb4bxa";
+"coolthms-1.2"="bkbjhkhdh1d0zbwz7kn2gx98jp0i1wfd";
+"coolthms.doc-1.2"="xvzlcxf0iijhqshnf10ll3pw1hki8qyb";
+"coolthms.source-1.2"="abpv22k723v32mjxzzfil36yd37p945n";
+"cooltooltips-1.0"="dyya1q998zi4g33qmgkcrzin8d31lmw5";
+"cooltooltips.doc-1.0"="z7fsfbm4rc0amfkw5ry8j2svcmv1q2lh";
+"cooltooltips.source-1.0"="cpan4qfa969dihkaa28rcg8ka9s63xa6";
+"coordsys-1.4"="6x2zn29g7p90x4cgwyclza1xphqfb3lg";
+"coordsys.doc-1.4"="2j52rr9hwa03wsdg21dnn7q56sp265da";
+"coordsys.source-1.4"="is64wqbszsrl7lnzwpgv2z6mjpz99n7v";
+"copyedit-1.6"="dyalfcbrp1wdxym0d31s3ijrbhq6qz7i";
+"copyedit.doc-1.6"="knh4a1w8vapj27rs7b0d703ph3vp94av";
+"copyedit.source-1.6"="b3kpsi78z2rja51lbj3fby031kjr08w5";
+"copyrightbox-0.1"="90am6yc3v6a2syw9q97qgll8dhpl9v8y";
+"copyrightbox.doc-0.1"="6133545797rkbwspbd7c91dbc0mds4wn";
+"coseoul-1.1"="qf1knif80pc43y8qjymya8ry3564gcc9";
+"coseoul.doc-1.1"="3zfkpycv6hz8jhvlfycjn20g2jbddars";
+"counttexruns-1.00a"="chaflhn60my7x9ijf2dj4ja8i3xdpcac";
+"counttexruns.doc-1.00a"="24wzb89912cb3f3gbfhcdz2p1w7gqns0";
+"counttexruns.source-1.00a"="9asga1rjq6c6sd7407f43p3w4d2hwkfy";
+"courseoutline-1.0"="r8syx9ag00aszr89zibwl760ml5fc40h";
+"courseoutline.doc-1.0"="jhrk85cgmca0vhk99l4xq6yhhw2kkpw7";
+"coursepaper-2.0"="222rs2hqsri87xi4zd87m0bi314g76br";
+"coursepaper.doc-2.0"="y7ml6w9cnxy78dld8m24m2p4xvv2in71";
+"coverpage-1.01"="j946qwgfdzx2y6myvj2zb927i04n29vn";
+"coverpage.doc-1.01"="h7krnkyf2nixh2227hfz5ibhjig2d9cs";
+"coverpage.source-1.01"="hxdqs2wzbsb5yjpj15fva764n1qgy19c";
+"cprotect-1.0e"="gsd9ndg4b5fb9s0435ly9pnlvwp5rvwg";
+"cprotect.doc-1.0e"="4q4rzd43yirs522861kk825v8d3avm4v";
+"cprotect.source-1.0e"="lzyx2nvma23d6ds8cl52zfxhsdjjshnc";
+"crbox-0.1"="y7zkz2wszr0iv7y3bhcgcaddsw3d54hp";
+"crbox.doc-0.1"="64zk4z35xzpxa2dmb4am67dnilqs8mqa";
+"crossreference-2019"="rghmvk4vfk0la5kygcm5wmnrrzxag6ff";
+"crossreference.doc-2019"="p589qj9h7vi563dgh5lp2l1gmpzfkyrm";
+"crossreference.source-2019"="pmqnkrcxkwjdsz7pfwmqpjgc2kykv9s6";
+"crossreftools-0.9"="vgcy207mpng8cgp6a7vpy8frjakpfxp0";
+"crossreftools.doc-0.9"="fzfbdclk2h75vzllslywskqlly2pd2sa";
+"csquotes-5.2e"="06561kz86p7isj3bx68b4hrcjsq3qkpg";
+"csquotes.doc-5.2e"="scw57pm13ry5kvk76gk1f2hmvvb3xgzc";
+"css-colors-1.02"="5ybcj58dl55v53z40fvb3mgc8hl93z8x";
+"css-colors.doc-1.02"="kyz6mh1pkrjvz4za7x7sgmig7zrrxk8b";
+"csvmerge-1.0"="r2srdy1zz8m0dkbpg1gaml9ln23q9rgy";
+"csvmerge.doc-1.0"="iv4f2b07k8c9cnw245xgbjzw27d4a5z6";
+"csvmerge.source-1.0"="vgiy7245r2lmkq9r38sbablnvambri1f";
+"csvsimple-1.21"="758dqg2cmy93dfndd3z61pgmkl0pvwil";
+"csvsimple.doc-1.21"="m7nhpkqj87k3pwiz9ib5lck7v4vv945z";
+"cuisine-0.7"="nj3ryfmy997y6llg5b3l1lp84jw3vg54";
+"cuisine.doc-0.7"="50wqmjcv6v117qxi0dkgyzs293y6jx1v";
+"cuisine.source-0.7"="n6zv4r2yz1fcgswbshvyfzji7jga7m3r";
+"currency-0.4"="fqjh128rxjxdrqy84xvsa3wq00r5j0dg";
+"currency.doc-0.4"="2k9w5bdkp4h7gq9ln3x36h0jxpaq5w2b";
+"currency.source-0.4"="43f9s81xgzgcc49wvwv7n6pzn2jzbzd7";
+"currfile-0.7c"="8zm55f76nvvsgyjj4fck1jzqxfgv389q";
+"currfile.doc-0.7c"="y1cdz8qj6n4327smxxbp5fzmn7apg2cp";
+"currfile.source-0.7c"="bfsbb72fld42c15qq3zddgr0agfigc14";
+"currvita-2019"="119xrbrr7d5i8xlvzf15azymj8znxy2r";
+"currvita.doc-2019"="fc8s69xdfiir0a8g7594l7y0m7b5qsiq";
+"currvita.source-2019"="2m1krjlgi5ihm32cfr3ayxmz324zpsxp";
+"cutwin-0.1"="q1c752nzdf2jw9agyb3aj6ishnk3yy7c";
+"cutwin.doc-0.1"="pawz3k75s1nws5nd0ilhgvy3g5ndfwvp";
+"cutwin.source-0.1"="c9aw3vjaxldf082z61m61d7p7rsaynfb";
+"cv-2019"="xpyr31xcphpydv1iyqaalwxfqhs99cg6";
+"cv.doc-2019"="f3xak6320ql3rmbj3fvjsgcsq4mp1vql";
+"cv4tw-0.2"="zw6g6n1l4mcnjdbpfx36h1l7ix8gj6sv";
+"cv4tw.doc-0.2"="49ghjsydw5i13nwglc69xmm1z0ypxlyd";
+"cweb-latex-2019"="w87x1irky7jm1ixvs8m2ig97pk07m19m";
+"cweb-latex.doc-2019"="r4xzcb98w8khj070k9q23ygmq84pxqd5";
+"cyber-2.2"="qw2kap0b32i1zm67s9lz70mxc8v8smrs";
+"cyber.doc-2.2"="9fqzmqyaiclmpl947xwj5kjcp6fic9md";
+"cyber.source-2.2"="jkylpl3n1m87qch68sqm7njxgp8wv86p";
+"cybercic-2.1"="4j6x3ncl6dhbjmbsr75fp28k9p87lj48";
+"cybercic.doc-2.1"="6qzfny1ilk48mhh67pa12rn30v7r8b10";
+"cybercic.source-2.1"="9gxkmwvrrjg0h9jvj1g46hxd79i2pkka";
+"dashbox-1.14"="k72p9zmp5197sh13x688gaaxynj6ra3b";
+"dashbox.doc-1.14"="1igq59rchfjkn3clgbycq3q5h6ablwvv";
+"dashbox.source-1.14"="kh2n6zrij6b14rilncsp9xjnbcd73l7a";
+"dashrule-1.3"="bqc33kv2bljifdybb0qn7wvx48rb9xgs";
+"dashrule.doc-1.3"="vxa8hx7khicjjdjd8p5frwrv4b41fv1x";
+"dashrule.source-1.3"="94ga7n7xpk7wm3j37gp8innc0c0irdz5";
+"dashundergaps-2.0d"="v0dbl8bnxc3vkshq9n6j7ycwqhi6464l";
+"dashundergaps.doc-2.0d"="g06a3biwzfkbamjkc8hwsmdh4vb70c00";
+"dashundergaps.source-2.0d"="3y92cxw29ks64dd44mihrcm2sxgng0pg";
+"dataref-0.6"="s46my6g3mkk7d5g7fm90xxpn2d1h4gmv";
+"dataref.doc-0.6"="ap8c1b9ljp1zg3wpzfbp827kwqcjdp0j";
+"datatool-2.32"="hdkdqrf0g5jbi0ryk0bgiv71k3x98kl3";
+"datatool.doc-2.32"="9garxgrw5k7lxf0c7m5d70wwl3zf76ny";
+"datatool.source-2.32"="1cpr7jgy98fpqjaw58pla1nwgywfyqq7";
+"dateiliste-0.6"="s50fmah2lasy1vfkgkybbaynspnh0wb6";
+"dateiliste.doc-0.6"="frs8z7x6yf2l78g94dxx0w5nxchx7kdx";
+"dateiliste.source-0.6"="idazlpxank1dw1mjym4vcdlq0970i5gy";
+"datenumber-0.02"="byp175cz7kzl8rpg8yyfxlcqfgqr2yfk";
+"datenumber.doc-0.02"="qp66n8ppip85lg6lfmmah86ilxygb5f9";
+"datenumber.source-0.02"="pfirq4wg801vxmbp24s059l8ip1w01r3";
+"datetime-2.60"="59y83sl151h396xz62kp975q9vplg195";
+"datetime.doc-2.60"="dzj8ihkcdv1hcxxi5vrqbv8ga05mx6l1";
+"datetime.source-2.60"="b5x1cfqxg3rlbmdzc1g18i76rk7m1323";
+"datetime2-1.5.3"="1q7rz88d9g4cpi9r1c42mq8wdnxhv8b9";
+"datetime2.doc-1.5.3"="yydvpzhqm5a4yl5cxbr872xhzj10b3gl";
+"datetime2.source-1.5.3"="pkdwwms3zv1dll96nfbb7hj348wiyc5y";
+"datetime2-bahasai-1.01"="avsk4v66gfbscliygrhgk7jvfrv5vyrq";
+"datetime2-bahasai.doc-1.01"="km12sq45cjy831csfq3j0gvy6458j86h";
+"datetime2-bahasai.source-1.01"="y87vz4sib2zw70643lm50cfsknzxnydm";
+"datetime2-basque-1.2a"="hd28pvhxgxxdv9swsnkxvk0d0kmaklxp";
+"datetime2-basque.doc-1.2a"="4ad1pps70dfj98vara5i40fxhk7wsdbc";
+"datetime2-basque.source-1.2a"="8k9957zfg160fs11y3in9js5sabnv0nv";
+"datetime2-breton-1.1"="qr562jcbrvfb4dg45bvxhwng6np7afj8";
+"datetime2-breton.doc-1.1"="x87alkc8bcclzw83f2wxkijms2bi511q";
+"datetime2-breton.source-1.1"="ljrz1n10pl21j7psza4wrvq3qsyvm4cz";
+"datetime2-bulgarian-1.1"="2mlgshnfxai3cpyfy841gm5r07549b9n";
+"datetime2-bulgarian.doc-1.1"="9bnrpw5xshwk7ab59i6argivzd6rnajs";
+"datetime2-bulgarian.source-1.1"="q3jlh85lc1gvp5bxrgh157q88qd56dz1";
+"datetime2-catalan-1.1"="08ckh0hp6lfnm6qvzabn0vfmvpyl8vm0";
+"datetime2-catalan.doc-1.1"="d48asmv26bwgj3zrmp3qdd1z3mld36rr";
+"datetime2-catalan.source-1.1"="mhqp7hh372ngmqv2crrwbhgkkbff7phi";
+"datetime2-croatian-1.0"="7mgjrg95fhf0ymsd2qh68vqqpnw7zpsb";
+"datetime2-croatian.doc-1.0"="x1iac95ydc1sfl5pyy43rrcq9kfa0x29";
+"datetime2-croatian.source-1.0"="sjxvyxph076ciplf0x4274cs6v25z1p3";
+"datetime2-czech-1.1"="481xwx5sfb639j02pz7q3fyzlw4h1xyr";
+"datetime2-czech.doc-1.1"="r9vmd6q4gpm64bglx5n8s6ihl0vm4k02";
+"datetime2-czech.source-1.1"="r8r5q7xy77b0q3krh6rdnc8kq98nwgiw";
+"datetime2-danish-1.1"="maqjjmvq99nxzs36an7fsym8wx884ra5";
+"datetime2-danish.doc-1.1"="qlbz9mfg4z54k9q3qx8xjq3wlz2adczn";
+"datetime2-danish.source-1.1"="zby5mapa0jrx7jhcci00c5p7bqr6crn0";
+"datetime2-dutch-1.1"="rfaajlb5k6y5fk5sphbqkyym5pfqmykm";
+"datetime2-dutch.doc-1.1"="fy3a9l5gk06dm0l5qfq2bm7djl6n6a23";
+"datetime2-dutch.source-1.1"="hfy19bpgiszqawykzqk15724ixlbs9ks";
+"datetime2-en-fulltext-1.0"="j2vw6akprfz3kwsjy5rnb6qnlnmxp9ws";
+"datetime2-en-fulltext.doc-1.0"="q954riws1f9b7ij9c8h0kg3n8zqdhgk8";
+"datetime2-en-fulltext.source-1.0"="54ky0fywkli0nld3ydyqm4k2nnvzl280";
+"datetime2-english-1.04"="g7v24hvkfxnqb43y0vz7v69nkivf3v9g";
+"datetime2-english.doc-1.04"="n6pvkr88fwq9pbhi4lzf2757mrb2dpfn";
+"datetime2-english.source-1.04"="b16bvzwmpqq5z9vgbcsijs1xj4q2hjgg";
+"datetime2-esperanto-1.1"="sf619gxrxm602kjrlslmzd271v5aynw2";
+"datetime2-esperanto.doc-1.1"="pn0jcv342fvczyn2lq6kyi1pbvk689d4";
+"datetime2-esperanto.source-1.1"="91kz15x4skcwsis3c0qjr751vyvdsmpd";
+"datetime2-estonian-1.1"="3x0q23w9xzh48brrkyriqah92488m03v";
+"datetime2-estonian.doc-1.1"="pq4p7wkvmq1z815nk92dcphmya6cska2";
+"datetime2-estonian.source-1.1"="a3dmirap9z4b3cw83y2z7y1dxjlxkibs";
+"datetime2-finnish-1.2"="xsrppqvhgv3agc5d1vgsql812rzfc7m7";
+"datetime2-finnish.doc-1.2"="058m3p472vmra4r5i5f3yjyvrga1f63k";
+"datetime2-finnish.source-1.2"="kxcfwal2hw8hh1niyj0zsghihx3cinpa";
+"datetime2-french-1.02"="0n2l9y4431i1092wkk8h2fkmk2pj1lmx";
+"datetime2-french.doc-1.02"="gc0pp2rnx16vgc4qq359ch6i61a8mbsm";
+"datetime2-french.source-1.02"="97fxzb9swgq0nwisql0fngik9c203pkc";
+"datetime2-galician-1.0"="jdzbi8dkc958r8fvpb5xqjmz7i5iiffz";
+"datetime2-galician.doc-1.0"="kanyn2kcrxp309crnj0wg3v34w93jndg";
+"datetime2-galician.source-1.0"="qjnph2vad7hl5d3jzzn58mz90jyvpgw2";
+"datetime2-german-2.1"="g1wcr457pvxv9ld9qq6b6av5z25dnrsl";
+"datetime2-german.doc-2.1"="6nmwahh375c3hw4jizqh4igdv4k0gfvj";
+"datetime2-german.source-2.1"="x3g3i850vj5zkp3103rjzniwrqy750zs";
+"datetime2-greek-1.1"="0yigs9ycc8ncyyjwzs1vhxgmvzr93rqk";
+"datetime2-greek.doc-1.1"="4w2gjy95fh4m73w46fm86gq8iqrrxwxn";
+"datetime2-greek.source-1.1"="fclkgy9d60pz0m6pfmirgrw0bdb2dwqk";
+"datetime2-hebrew-1.1"="w1dcd2wy5bdgcrchmwiqbwr9rpbabkcs";
+"datetime2-hebrew.doc-1.1"="xyvnscz0f83bzdk274acf4zqp74pdhm6";
+"datetime2-hebrew.source-1.1"="yx2kaxa35r99whh2yrzhiydmis89c5wv";
+"datetime2-icelandic-1.1"="p1qxpalqhyvs0gvwk55y0gz6f2q9sw4m";
+"datetime2-icelandic.doc-1.1"="za1d739glm25a6vm9yyyqsbhjc59lb5v";
+"datetime2-icelandic.source-1.1"="ngqx44p3nr2pw4awwwd9sdpjd3jwr0ai";
+"datetime2-irish-1.1"="c2rxvcqppd332k261a466wsbabfkklml";
+"datetime2-irish.doc-1.1"="yi5v86mssgpf4bvajvmf6l0hmahkcm36";
+"datetime2-irish.source-1.1"="g2q4nz3xrviqzzq88q7jljcv1dl8cjil";
+"datetime2-it-fulltext-1.6"="36m93xw965mj6dn75iwlls9nwzilr3bj";
+"datetime2-it-fulltext.doc-1.6"="7m7hh8w9cl1amldgbh9nkxxadvnvrdkw";
+"datetime2-it-fulltext.source-1.6"="x6ycnnq13kqphgfiihrhcjmg9ij4adl3";
+"datetime2-italian-1.3"="q26yh7zchpfg5gb8xraflh4vp7sa09k3";
+"datetime2-italian.doc-1.3"="rg34p52lxgj6s6cvi8r168psyknkgdb0";
+"datetime2-italian.source-1.3"="lryqdqsg9yk1d9xj866xf8fj0dpwyh3c";
+"datetime2-latin-1.0"="sriib5ngxy04w6xm5ii13a1l6safqsa7";
+"datetime2-latin.doc-1.0"="kls2lc68c3j7f2si0pdx1rsw24rgga42";
+"datetime2-latin.source-1.0"="07cw09layjkvklwy1ndvkai1aglbplz0";
+"datetime2-lsorbian-1.1"="ggcqlpw3b3rvb3blyw9p39gyj3n9ixki";
+"datetime2-lsorbian.doc-1.1"="nqkh7fk0l7zkgi07n7q9x0wl3mcqcf40";
+"datetime2-lsorbian.source-1.1"="q7bj5qd85b4nwgz3gfypsln5x0rj467c";
+"datetime2-magyar-1.1"="da1qjb06hcwmp0qw9hrrhiwl4rfxji5a";
+"datetime2-magyar.doc-1.1"="v2gzjv7nj4sgzym8bar1gz9rpjwbnf3y";
+"datetime2-magyar.source-1.1"="l052vx4a1zsdkbfwqmixi7ad6rz6277g";
+"datetime2-norsk-1.1"="9x884mr1av0xa2acb44cl38arn274z8i";
+"datetime2-norsk.doc-1.1"="4w6bjaid66pf5bnx7ya5vr023mi0bc3x";
+"datetime2-norsk.source-1.1"="r8bbhi1n1k6i635nwrs7hgglgf4sdwal";
+"datetime2-polish-1.1"="i8b07wq5ki25wh7j75gvimwdkd4psipi";
+"datetime2-polish.doc-1.1"="aqarbr89imdgdvqgnw5ggvp09r2dvmc3";
+"datetime2-polish.source-1.1"="hhvb5n65n0n8jv6anqmxrps42p00cvd8";
+"datetime2-portuges-1.1"="pbj76lwnghjjw5vglf9s05jqzkfc4gsf";
+"datetime2-portuges.doc-1.1"="mpg9vz4wd4b3vb3ksyxl21j0wsr2n6dh";
+"datetime2-portuges.source-1.1"="fcjicqpvz5cbshrq1w9y2a19sz0hqifq";
+"datetime2-romanian-1.01"="4cf2q7zs9wccx1cg2an0gfr3pgbfgvld";
+"datetime2-romanian.doc-1.01"="wzjqwrn0xrwhvz5yqdw1v9942h6f1s4b";
+"datetime2-romanian.source-1.01"="9apbkgyiy21r9lahbrffpnn3l1b6z7fg";
+"datetime2-russian-1.1"="hmdzwgxk166nibagd4c1qsxi7y0404zn";
+"datetime2-russian.doc-1.1"="mhv8b0716ihi3lxgyzd481dyv6gkf303";
+"datetime2-russian.source-1.1"="8749wgrkq93h4z7lasrwb3b03z2nfzq1";
+"datetime2-samin-1.1"="hf0cfq9j1681pp4575bwgxhxfrbmlav4";
+"datetime2-samin.doc-1.1"="wznr20pqd6ffkjzgihkjfxq6byms95bq";
+"datetime2-samin.source-1.1"="rszlr5zy6zw52cv6mvh7sfdfnh4y3krq";
+"datetime2-scottish-1.1"="0fw3v8db79rxc1363h70fgaswhzwhm4j";
+"datetime2-scottish.doc-1.1"="078mzhk1a0pd4qvvznp9aqjzhk1419j1";
+"datetime2-scottish.source-1.1"="mfw7dpm3mgh3wdmk4in6ysnnd6awij6w";
+"datetime2-serbian-1.1"="dbcf5c0qaigja5r4k03975vccybbkpxa";
+"datetime2-serbian.doc-1.1"="ajir9076mw38a6di9fjf0f977iq3a4wv";
+"datetime2-serbian.source-1.1"="b8xcnry7snnfwah7kibw3z6wyj7js88k";
+"datetime2-slovak-1.1"="s6drl7indhw6r88bpzzva2jhxrpmjg70";
+"datetime2-slovak.doc-1.1"="z5navvjmgvgxjihffyx9p43p4y3plg8k";
+"datetime2-slovak.source-1.1"="2g2jfgg91mfh572l3bh78sin351788k3";
+"datetime2-slovene-1.1"="jbfcfj6rwjdadwxf80qhbxwphfrz0frb";
+"datetime2-slovene.doc-1.1"="dkf9zsiaqkxk83m14pym8ryciwsg0xzl";
+"datetime2-slovene.source-1.1"="zvxwxqmhzh9fbbwcdsk6vm3y6lxjd4lp";
+"datetime2-spanish-1.1"="x6mlabgqr35m0dw6zkgj7czgxs3kqj01";
+"datetime2-spanish.doc-1.1"="8szzfhyvgppifac3m38s2r57w4dkajdq";
+"datetime2-spanish.source-1.1"="h287bxi9k4xx909qvkrsywyr86nh1qjx";
+"datetime2-swedish-1.0"="kmnrfgqk01ygpd1m25q8s6da0wm39bdy";
+"datetime2-swedish.doc-1.0"="r2scfwnn257vximpv7a88qbmrj2v2554";
+"datetime2-swedish.source-1.0"="swif8xn3c7p4w00cyxxlwvwjh4k82789";
+"datetime2-turkish-1.1"="zz9fgafk07x5z63zkwa029yz6cf6xp57";
+"datetime2-turkish.doc-1.1"="zgh8zd14giw69lpn72gfpgdqc9v2qszs";
+"datetime2-turkish.source-1.1"="c39y1p039rbyp6s8cy7hs32va9904l7p";
+"datetime2-ukrainian-1.2a"="wmslcc8x7xkdzfd31psz7l7mfdpg5r14";
+"datetime2-ukrainian.doc-1.2a"="cyjjb5bmdwqp5by504r3s9s9h29r1bnq";
+"datetime2-ukrainian.source-1.2a"="3lj7rpa4qvljhvwgy6nlb0abmydgvqyy";
+"datetime2-usorbian-1.1"="pm6w3h37qzfbca1p3j5hxrfdn02l84qp";
+"datetime2-usorbian.doc-1.1"="zn6pc9djwh8jjhf1p97ah3n5kiyzidyk";
+"datetime2-usorbian.source-1.1"="qy8g9fi20q25cl1nd0v057bvyp8mi6fn";
+"datetime2-welsh-1.0"="csy75jcm6aqad69jxhm7m01j04802pff";
+"datetime2-welsh.doc-1.0"="5qfzf2lglwj0399cj5y81f8a1y3rdv33";
+"datetime2-welsh.source-1.0"="2a3pn8nifx6bc81zk45cg8p0vdnwhfw4";
+"dblfloatfix-1.0a"="d1796nn206cs1jsas8kc05p0bfcb80rm";
+"dblfloatfix.doc-1.0a"="2rgw8lakmgyv5abzbpcngs9g1lrfdps1";
+"decimal-2019"="a7xks9vjp0pa09i5dbwz78n28a8fg83d";
+"decimal.doc-2019"="ib5j82aqc5l2rkggx5s3i7h0vz81sw01";
+"decimal.source-2019"="znw0p5x4xyg8nbaa0840lw7i27bczkf8";
+"decorule-0.6"="pia1d0196sj7qkdyzximhpf0bidqv7pg";
+"decorule.doc-0.6"="p42gqybrsy773lypbb1nrjcigycf1ilm";
+"decorule.source-0.6"="q90xhppxnggj3gqx9vaf5qvc4aknfbx1";
+"delimtxt-2019"="akp06kcf04g4dx2ph7bs5cg4byld136r";
+"delimtxt.doc-2019"="ddxva98pp4ar0bxdlpbh6v2rxlai5d1n";
+"delimtxt.source-2019"="j788dpwxgryml7ny68nzab9c3dy0322z";
+"denisbdoc-0.7"="fxcj67mah72g8w5xmrwb10vm1hxmciix";
+"denisbdoc.doc-0.7"="k4qq3apgqk0xgxgmrmqpl039hwzb478p";
+"denisbdoc.source-0.7"="45fl1pbbkiwk3b5cwl9ylcs1vxpdz8m5";
+"diagbox-2.2"="mcmg51aism26pvqhs198yngx4sq7hpcs";
+"diagbox.doc-2.2"="p1vln62lkw76jldxxcgr0wkraidcd3fr";
+"diagbox.source-2.2"="a6m49qkh7w30xgg342dd4vs7kpcf8kkx";
+"diagnose-0.2"="dbkvix4h3jhwq9pd2g9ydknc87z3zlr3";
+"diagnose.doc-0.2"="0b0ajzf5gvv3901szcwnkb7938sgqqr9";
+"dialogl-2019"="qn4qmw5yrhvim6fdl2gff1vl0ca4dfs2";
+"dialogl.doc-2019"="bh2vp79kq5adw6smmn0kbkhgk27qqq71";
+"dialogl.source-2019"="zqjq4a7kp63s0m7aq57ragybmigrf05z";
+"dichokey-2019"="0gjqadln2d38gclhy9ggf3i8vcnf2bfm";
+"dichokey.doc-2019"="af0pz0ixx95k8abfhximgla5jjly9ddf";
+"dinbrief-2019"="49584j24lg6vxazw8rqbhzcf0c7anbqy";
+"dinbrief.doc-2019"="i1dwsv81v87ll6wipvd7idsg8vym61k6";
+"dinbrief.source-2019"="b3hcmv6mjq48yhjl7g32yv9s1p3d0hkw";
+"directory-1.20"="7r6n8s393idf94madvzpfz70qvmy9n5z";
+"directory.doc-1.20"="shvbxhb02d3lw1sn3ayvx5xs6qayxjkh";
+"dirtytalk-1.0"="1a6r7pzqjy14f4f7vnlqgqdb6r0yfm1g";
+"dirtytalk.doc-1.0"="h383wrcj7pxb3mnqnssb48qx0zzw61gx";
+"dirtytalk.source-1.0"="dzvypzk6yrjli5zmr06xc2mqyajrvz1j";
+"dlfltxb-2019"="ms6423aqc91c34fmxw8l47d5kbk9yc6b";
+"dlfltxb.doc-2019"="kb0p5vzgr45gzbmwzc9mrk8hpg1z6x0h";
+"dnaseq-0.01"="719cl1bfw7c1psv115pmrn7bijd0kxsr";
+"dnaseq.doc-0.01"="f8yw32bkw0chrk221qga668jpfnb3rk0";
+"dnaseq.source-0.01"="7aw7332aklsigpg8fazvv7ips2a236x6";
+"doclicense-1.10.0"="f063is9c1f8jv30mvpn9c165n9wdkkd0";
+"doclicense.doc-1.10.0"="y8l4xdnynqxarsj5p8y582baf0fx1rbi";
+"doclicense.source-1.10.0"="f6wxl53cvy87ws837gmhdl7rq6r0lxcd";
+"docmfp-1.2d"="5az4cgljj1gmc28z6kwy9g4h49gzkplf";
+"docmfp.doc-1.2d"="rn7s95z09ijvddynz2dda2lpqidzbbnw";
+"docmfp.source-1.2d"="c6swy2dkxzrprrl0zjbphcf15x6my5l2";
+"docmute-1.4"="ijpgwid57874xk9w7p4g4m14j770awwi";
+"docmute.doc-1.4"="w8i5cy5mp1780bglwn08kcywk3q1qqfp";
+"docmute.source-1.4"="qqarpddqxfb4lk6cjsz4d68wvkvqrdn9";
+"doctools-0.1"="xddfhcsq7f0la61bmdv474avf8vm7pgg";
+"doctools.doc-0.1"="zhwqm1k0dl068scr7sfypcii7nkjp01p";
+"doctools.source-0.1"="sfrjlg9h1icqa2wa9m3z2ciqc8j4fzc2";
+"documentation-0.1"="kji3s9vf00jpl198nm49dxfxw8yh3xkh";
+"documentation.doc-0.1"="ir7a948d9yliinmb3y55vx8wa2zi4ada";
+"documentation.source-0.1"="gjlkrc2a087589g9lrk9sh8g4q0l03vq";
+"doi-2019"="x7wlmyfrj7vh3wmf1zjgpyraf2crh7q4";
+"doi.doc-2019"="h1si59g4nhzwixqsi11dzz1x9p8jv265";
+"dotarrow-0.01a"="an0dsydrk9bfcahzi356nrfq9fw0i9fs";
+"dotarrow.doc-0.01a"="ay137znk96s545wq4sligy3q832m4g91";
+"dotarrow.source-0.01a"="g5krgdbp4bdfhk40s759qw2j6f7n6ss7";
+"dotlessi-1.1"="y3g1v1d5q2lxmghfc58msm75421pm2yf";
+"dotlessi.doc-1.1"="hniafmk6wys4p2mlik5v3gfsvmpkshqc";
+"dotseqn-1.1"="pvfjw24r81j8403qav5bfd3i6xfk3xr1";
+"dotseqn.doc-1.1"="7iq10vxjnn14rvlpy10clnrq0kcs0a5q";
+"dotseqn.source-1.1"="fpkmmkp37gnl7cg75i820ry92s13vkx2";
+"download-1.2"="7iyriccjgkp5kr1wf1xbpg5kx44g85f0";
+"download.doc-1.2"="vsrhz791rril9vb50laapa668pc92ixz";
+"download.source-1.2"="ihygdvqagb74hzcbb35673bapx1a3j0p";
+"dox-2.4"="vmv0sf0gjb0hgimhyyxah2n9z7kfc60r";
+"dox.doc-2.4"="mjc4chfbw9nnq06h6sr9v5q7mx0yf3w5";
+"dox.source-2.4"="6pwhbz64rwylp60nhay1ij6bls33aqcx";
+"dpfloat-2019"="lad2kjr2qljjmnrygdlhgqbhpj8cxqb2";
+"dpfloat.doc-2019"="j3mxi39ar6vsyz51w7dj3nsnrrcsqjpy";
+"dprogress-0.1"="6bz0iy8fa34famjb67k3q1xhsca311k3";
+"dprogress.doc-0.1"="9x4n68z2vp63dvhc4g30yar4z70xkxbb";
+"dprogress.source-0.1"="g0d00q6x7wagml9hphd9b2ddg7zn887a";
+"drac-1"="kswhsywlysyj2k87dxad6wyjl2zxj584";
+"drac.doc-1"="23j8r0v8wyivwydi9ij6783d91nd6r00";
+"drac.source-1"="hi0yz77sqs9lj3dqvj2h0zgkmwac3r16";
+"draftcopy-2.16"="jpi5kv4l4r74ahxh9m4nw338hlx9qjxc";
+"draftcopy.doc-2.16"="x49fj5rzavabrdw8c8j05nnqxkdjlhpp";
+"draftcopy.source-2.16"="b6319hjnccfx3xxfrxz1kmx9813aik0a";
+"draftfigure-0.2"="w154bzgm94wzqs4shyi3vir6vzfd7324";
+"draftfigure.doc-0.2"="n3cvgb3mn0a0asrk5wng4f5pnr36k337";
+"draftwatermark-1.2"="r78p4n8jbzjvx8p7gx1fj7fp4h56x4xq";
+"draftwatermark.doc-1.2"="6mzqbw0grmivgby8vqiqf04i9dnvvimb";
+"draftwatermark.source-1.2"="6p47ci9wfjq7svn09df09p4jxwvyfzxa";
+"dtk-2.08c"="3615adj9zkvi51d9xcn8sk6fyk0xahyh";
+"dtk.doc-2.08c"="8pmrd68qj6z09ivscvd5q07ni6wbf8lr";
+"dtxdescribe-1.02"="2bhwnkb5id2raigd4iywhf7da7c772zr";
+"dtxdescribe.doc-1.02"="2ygyzgrllyq4fa2xbf8fyrfk810w2ja9";
+"dtxdescribe.source-1.02"="39inl1ksgzd28sszdfjyyq80gscdc6xs";
+"dtxgallery.doc-1"="bpsakwyq6ihcw2ziqpjv8qh2a90s5mw9";
+"ducksay-2.4.1"="42iy8cbp5yrff5ka5cljvb59wbwywwwb";
+"ducksay.doc-2.4.1"="zl0sz8xb5yhwhaail9kfnx9lg7a204zk";
+"ducksay.source-2.4.1"="lkqqhv6igq38kh8jx8wy131zrqdd3mr3";
+"duckuments-0.5"="vdc247rsaliycjf37gn8lwihycrpgksp";
+"duckuments.doc-0.5"="7ia6rdsdhhnvf2jdxynz780virwl48p7";
+"duckuments.source-0.5"="ndcajqs2y2vmk0fzd25ayc4i9yq03qz2";
+"dvdcoll-1.1a"="x9xdlwqrbq8wflwbwkabwyi9bg8rakqz";
+"dvdcoll.doc-1.1a"="m88326jypnn2i1bqgv458cyjdzdn320i";
+"dynamicnumber-0.1.3"="p6s0hyavqqz8hsfca8ymfqd63ajpbgam";
+"dynamicnumber.doc-0.1.3"="28i12f55m00ma06xi4575m9mxlzlk5j5";
+"dynamicnumber.source-0.1.3"="1s5p8px5hk951cifga7as2cys5p9v9g8";
+"dynblocks-0.2b"="svrn2iyvz97vsdz7zf2npfjjmj1hiiwd";
+"dynblocks.doc-0.2b"="vbfwn0p5rpddhfbj5dzzg8y777i69s62";
+"ean13isbn-2019"="mc1jwh057knlvcn9rh4z55xf23cx3lnn";
+"ean13isbn.doc-2019"="bdnaafy3hkiz4prf7q3fkn00gsf1fw47";
+"easy-0.99"="jb9dranvwd0ngzigpq8kla53wnd99fiz";
+"easy.doc-0.99"="m4hx4j5snaiip3mzz1hnakcqjdmhmy4z";
+"easy-todo-2019"="303p58si7jhry6gzkiqjcdhkgdxdj8yn";
+"easy-todo.doc-2019"="19xs0lb6swakg1f9ci5gfmmfbddcirvp";
+"easyfig-1.2a"="l6pbmvwsjjnrpxl6d9v6askvk0fvqpyn";
+"easyfig.doc-1.2a"="glg4115m5lkacjxdq29my9a01xn5mj13";
+"easyfig.source-1.2a"="szidzjjq2h8aiqh995xcd37460xx5lbz";
+"easyformat-1.4.0"="x6ad1pxvbj09q2kypdg6z5js8q11a7k4";
+"easyformat.doc-1.4.0"="1g0wbnrc4snik4hbzldn9c015ry80n50";
+"easylist-1.3"="3mri8pvv7jc5lkqkmzh8h5a4x8agh702";
+"easylist.doc-1.3"="7ak9lbazspcv1k8yi2j3shf106v4spjx";
+"easyreview-1.0"="gc6ml3qw7j723r20jxc9lvrfm5ll2ljl";
+"easyreview.doc-1.0"="j2jxwz2fimhqyd5j6hzrgamn5cjs4azf";
+"easyreview.source-1.0"="8x8h7c1lldi9mzmwrgcvi3114gh8y3s6";
+"ebezier-4"="m8m99zabbk55zn8l16z2qjpaw2vilfy8";
+"ebezier.doc-4"="mybqgr1ksi07qkwjgr014nbgx47q6rvy";
+"ebezier.source-4"="rpwm8s3jxc47d28595qx4gdgipc9aj45";
+"ecclesiastic-0.3"="mw0n2vbpdvh26xpjh29avdz7lf2jhhx5";
+"ecclesiastic.doc-0.3"="2qblfhxs7h9p9wnrx6m73drlgvwnk6ql";
+"ecclesiastic.source-0.3"="0cv2d5838jv4ra4slgvfp2fkl1v2kv7j";
+"ecv-0.3"="hb27xhgd224h3rwx0bmrkrf3fyjgcsc9";
+"ecv.doc-0.3"="dmf8p191d4s0dvsdyiv1850dzxxg86n4";
+"ecv.source-0.3"="wn8c1zrx28k418cmj93b7ngbg6mrg0q8";
+"ed-1.8"="i6pnwa7a3fvvlsc6cfdzm73c8zh2wjf2";
+"ed.doc-1.8"="bxhdx8i27bjbxybz2lfwk4wjl597mgdk";
+"ed.source-1.8"="3lq35kmqyxqrrj9rznwlj922iwbxr6qc";
+"edmargin-1.2"="crg5k7p997nxfxjhlrv2wcmvb673g0ry";
+"edmargin.doc-1.2"="wfdkbmlhvmwcba9jkg3p83vsqj4k3dxh";
+"edmargin.source-1.2"="j439fzcg8r3rcwr9kadrlx9rp4wvxs9r";
+"eemeir-1.1b"="3d02h2i8l1dz6rljyx5my514qhw1w35p";
+"eemeir.doc-1.1b"="y315ys2zhrnrpfdw1yz0ciay8wsncmvb";
+"eemeir.source-1.1b"="0v0yqby3x8cgldrz67qlkqd5hp4xfh97";
+"efbox-1.0"="lc1r9y6znpl59qq6j0dwksxgnkrwh985";
+"efbox.doc-1.0"="jgi7nzhs6x37syhlpizfc8nnnwqamnqf";
+"efbox.source-1.0"="94p7n1nxcpax59q64i4hygr4gz6z7qjg";
+"egplot-1.02a"="wjw51hmdhl76wqrgj9ylhyb656rfqmg9";
+"egplot.doc-1.02a"="3ybfma3qjwnmd9djk0ckr22kvln7ksgi";
+"egplot.source-1.02a"="lpd8c8hpz0vpln7hq4ck2xm896hhkjz5";
+"ehhline-1.0"="0ayan5v26fd54c0nrvs590ny44pwamg4";
+"ehhline.doc-1.0"="f4gk0s21pnnvjf753z83vyprvhcsvrs2";
+"elegantbook-3.09"="p64inp9fb54g2lkdc8b6z1c0qvnxihd6";
+"elegantbook.doc-3.09"="bzfd025rnz0ha3m7xp5f8gvw5lrrk5sh";
+"elegantnote-2.10"="m6lz4p899gmvmd2939an2amnvj6fhix2";
+"elegantnote.doc-2.10"="ckdxix1rmk6ixxx3nvyh12f3mr325z5s";
+"elegantpaper-0.08"="wccij61cpjzcyw006hzhgdvv7i4kxfpk";
+"elegantpaper.doc-0.08"="mngv13z3srw192zl58fy7vrqn6i31sjg";
+"elements-0.3"="5jhgr3w0l71k6yyah71sns2cyib3w6rs";
+"elements.doc-0.3"="64ad2wwg0s9s56416gdw3y2k19qj3isl";
+"ellipsis-2019"="cnpqy3kavs6v3r35x6hp9cny47lp47vq";
+"ellipsis.doc-2019"="pl4c26az5319bjkqmp0byyjh6m2ghxnf";
+"ellipsis.source-2019"="s1vmh5xsvqrwhd0c4qqk4qw9pgmm62ms";
+"elmath-1.2"="pljnyyb5wp8n5f7g5wp2hb0f7aizxwyd";
+"elmath.doc-1.2"="9rrybpg3pziqa42bkhblp14jjz6zgm2v";
+"elmath.source-1.2"="fnw5k3ck3nbphv71xqlyq6yisgq04xjc";
+"elpres-0.4a"="mqyj4aylv6lah36gxkqrdcl2a4jgvnlk";
+"elpres.doc-0.4a"="fs5jy5zzc8jg2v0gbvqr5nwdad9bmz21";
+"elzcards-1.60"="nyzh9ppq7rch8s38spiddbvgbc3jlav3";
+"elzcards.doc-1.60"="xf2cc42ypl06p2kardrq1nf3bkr0xziv";
+"elzcards.source-1.60"="k346vzql960by6gqi3fcpfjdiq6ncc26";
+"emarks-1.0"="98dkcqyxwjzmy7r7piap7kmf3di5xjqg";
+"emarks.doc-1.0"="caipsh0fic83rak0dbdjfmgkvppj5ini";
+"emarks.source-1.0"="06wmqv5p4nhaqhcb0i8byf6s600bq7in";
+"embedall-2.0"="bkkkbm42s039l4hsy7a06fba7y76pcdh";
+"embedall.doc-2.0"="xifjdsbhrdr372svi21sq1wwl6jin2as";
+"embedall.source-2.0"="kmanpw0yvlllsc52f4wfhh7dpby80bnc";
+"embrac-0.8"="5l14aa7s3k4kiw4lalzr2sx6r6xv4ak3";
+"embrac.doc-0.8"="r07azs58bn2ik5g0y5ybxbxc1q1dgac2";
+"emptypage-1.2"="lbjvj1gf2jiy15yj86d6jxlhrk66zmrm";
+"emptypage.doc-1.2"="07fnrxjidk9b42610wx6696cah8p1zdi";
+"emptypage.source-1.2"="svha86185zhrvab827x8nbn02vlp027l";
+"emulateapj-2019"="2ywrmmrvlkygp6a86i56rn9bm6wzqqki";
+"emulateapj.doc-2019"="ij4q6ixvmmh8xwq7kgb0hzvhz5pcsy68";
+"endfloat-2.7"="4fc93l83sg85k19wjriw7703zn70hz7b";
+"endfloat.doc-2.7"="85zhqgxpdbwzlr0c6dkkxnf15dx4qh3n";
+"endfloat.source-2.7"="6q86lh5x6df037hkk26rc02ypqfjk1nz";
+"endheads-1.6"="0gjn1xldvixl6lh9n2g9gyly9va84sp4";
+"endheads.doc-1.6"="y0phz9mfklcq56h6mwkx2jd535v94r72";
+"endheads.source-1.6"="x01kj0pd2b1ljs3457l1b7880vp8amdx";
+"endnotes-2019"="mwf7b44kh21vis4mjglri12m2ji0fkyq";
+"endnotes.doc-2019"="ksik52m1c5n390015awpj4hszf621ih7";
+"engpron-2"="d0k5j6bdrzm418x90n8858cyw85i439m";
+"engpron.doc-2"="4mhw0220r7x85dshmar87b3jydn2jxdd";
+"engpron.source-2"="3rdxi48m3h33kn1z81md9izji6my7sdk";
+"engrec-1.1"="8wc4zbqvp2lgs3qgvhks8fhy0gcafddy";
+"engrec.doc-1.1"="3rvil27vakyv0c56wykmhb499a3xfbjk";
+"engrec.source-1.1"="3rj7ij1f8rvyb80iaxx0fw8br06w8kgp";
+"enotez-0.10a"="d7wl58rba9810bqn5v1rg1sn6pgpb9xi";
+"enotez.doc-0.10a"="1y5kkfl7j6bi5gbk04xmqf8hx644x90h";
+"enumitem-3.9"="cddx7nd076jvg59bdkqaxnmk4rdlg94a";
+"enumitem.doc-3.9"="nraf0fvdrdn61w2dxiaqcd6xzlywq9pc";
+"enumitem-zref-1.8"="hj60650qiwzxhdk9f9pix1wgvphgqxj4";
+"enumitem-zref.doc-1.8"="nq73212kl36wimf8k4m37xzb5pr6qqdh";
+"enumitem-zref.source-1.8"="3l875sm2v3c2frxhr17rv80q36n19a9h";
+"envbig-2019"="9jl4id16g9bmsqwwdbcdp2925m5c381k";
+"envbig.doc-2019"="5302z09wsidh1fvnfs5d7zf3fzd9z967";
+"environ-0.3"="abj66v6h73l8sj7rll1v0czlx99j5z8k";
+"environ.doc-0.3"="rq5cywlfalfd6c2585ihs8mabnadp2n0";
+"environ.source-0.3"="r3bq7ppaqwidvilrf1hyniqfk1fdh4d8";
+"envlab-1.2"="iqf24bqqcnpp7kiysfb5dy4ksw2ni0pn";
+"envlab.doc-1.2"="5xscix7j6x6fbscw6hk22r4qz864y654";
+"envlab.source-1.2"="ndl09cfzl24rbp7rw71lcv2q6dn9pdih";
+"epigraph-1.5c"="6fjixgh32n7mlygm6dz3xdiv4bzd1p70";
+"epigraph.doc-1.5c"="mmk8d73w2mkhya560hvdz56nvw8l5vz2";
+"epigraph.source-1.5c"="6zj62nlmzvi5pagymipk9611glql8pnx";
+"epiolmec-2019"="hpmg6yy63c52078mqmp861418xi07rgk";
+"epiolmec.doc-2019"="vl11cbnw0avwvjf8ad01fziya1dzrbh8";
+"epiolmec.source-2019"="1b7as37h0ncqjvsypwc9wdzzjhs0sfhs";
+"eqell-2019"="24n6gsirzxiyv3avcm27hll6nwrybkk5";
+"eqell.doc-2019"="xwz1qv3l0345p2al1p02dc5k3f77k48h";
+"eqlist-2.1"="jajr72vgjddrwagibq1nmhf9lqqsk66n";
+"eqlist.doc-2.1"="ln486bm8phd0pmdfa75rjy6p1bwqzgmd";
+"eqlist.source-2.1"="r07gp9r0wb57knv1gy35kwkvksz9bxd2";
+"eqnalign-1.0a"="lcg6zvxcnzmljvqfv6lh1majiywkwnyq";
+"eqnalign.doc-1.0a"="h21nzl5g0hqh3513gbipm4fr79i6pljk";
+"eqnalign.source-1.0a"="m8i3vxkn3ciab2p86shkzzzx2ckp9d7v";
+"eqname-2019"="mjcyi6q46c5jd44m8m9wzx12lhqir4a2";
+"eqparbox-4.1"="c3v8vdwcjfhn85751995viymlfgwpwr1";
+"eqparbox.doc-4.1"="9mn192afkzc3pzxp5xxsm7kxpaa3yis1";
+"eqparbox.source-4.1"="s206q1m2wkjsvjz23xlsx1yy603jjisa";
+"errata-0.3"="kgx1zy8j3g12czpg8hhnjq6dwa3m8xqn";
+"errata.doc-0.3"="518rdbnh3w5jsk4vlfp93cnag3kaiwmy";
+"errata.source-0.3"="p27pa3b4plzwhxl8vpr7qigbnr8aqv11";
+"erw-l3-0.1.3"="481cp6s0xfl52mrsalwrx2k3vzl4xl9h";
+"erw-l3.doc-0.1.3"="axjq9h5zgjvnnx2ccncf2sczgq73m315";
+"erw-l3.source-0.1.3"="2z3s0cf7f2nqjk12sgirrdrg3ajj4d3h";
+"esami-2.5"="8b9bvz0jsn56nq9d27l05kfmwhggm6sw";
+"esami.doc-2.5"="y2n8zs9pk1a3zn1ag5sw4sm0kbaclqr2";
+"esdiff-1.2"="q26sgf5s4ans9qv984p9s04pginqby9z";
+"esdiff.doc-1.2"="67vh3nycsw9h9vv7k25agixsmrdg0068";
+"esdiff.source-1.2"="xy6y4za3k53myl7dxbjxm21rcskb1mqz";
+"esindex-1.7"="4cphr245spz228hg23dgvffry10hqi9q";
+"esindex.doc-1.7"="0aspp9mpf60hxnqyj26jpznsj0xmb7g3";
+"esint-1.2d"="74szrggzvcprs68hisb87p7nvj0i081h";
+"esint.doc-1.2d"="hjpca8jbf1aipkzs30al948hpclk6jy2";
+"esint.source-1.2d"="1mpxmf7kkdmglnz0l6nkcpbyy4k3kbqp";
+"esint-type1-2019"="0fwcq5cpsqzajzlp2rc9ffmcwg5fb5ja";
+"esint-type1.doc-2019"="vmamlk0v1w4ffks6cp9f0gg09rkr37vf";
+"etaremune-1.2"="1x3604jqbswjza4ryv49l2cs63iqcv3r";
+"etaremune.doc-1.2"="6k8qah3w1ksn77is2i8kh1nilr6qgm34";
+"etaremune.source-1.2"="5a4n5d9l39nb0v3affwx0sswnp6sv2yf";
+"etextools-3.1415926"="w78v5hb43si3j8p38simfzscyh6lglsm";
+"etextools.doc-3.1415926"="16fq8y3c226wsf57dkny9484440i61zv";
+"etextools.source-3.1415926"="ch6lsyh0nlzkdrwzsxgf87srsb40x56k";
+"etoc-1.09"="c4gl9kikkhpjig7nzq621ihbx56ij309";
+"etoc.doc-1.09"="79790h8winia72jc9vxq50816nwigckk";
+"etoc.source-1.09"="6cl0xm9j4faq58l1fwh9vmr6vr6cqsxm";
+"eukdate-1.04"="5lql99zq8izsri87dhqf28nnchrjkyhq";
+"eukdate.doc-1.04"="f3xl3nllsr8299rjnxnhpksv7rz8pdq0";
+"eukdate.source-1.04"="scjqaadvah0kf1rxj9r2nphvffk86cis";
+"eulerpx-0.2.1"="1kvqcqfjh77lg1d1jzwj6mr2rchjpnyb";
+"eulerpx.doc-0.2.1"="8jybcgzjn8c3qyagdmaxmmy0fx89sj93";
+"europasscv-2019"="l85dmsidqdd33pivkp8q5bl50mxynhhd";
+"europasscv.doc-2019"="vm9plycg2pppcnqv2mzhnxf09adzr2ff";
+"europecv-2019"="hiyv06bv9v7dxykzabh410lkxc57xgas";
+"europecv.doc-2019"="dx6iy85q63v4k48yq6dc8fx54x7mwryv";
+"everyhook-1.2"="ndig4g0nsbqla2i2p1n6skjjxsr3qjhv";
+"everyhook.doc-1.2"="690qpw68wri4cr4ahv1xfqibm3flc5mr";
+"everyhook.source-1.2"="rvh60i8j1gbyal0pjpdgld9l5g20zilf";
+"everypage-1.1"="ds2s326xkr4qvzz1pd3ln8j6841pgndq";
+"everypage.doc-1.1"="8d3v8gk3mmw9vyk9slxwwf8gshq4pcd2";
+"everypage.source-1.1"="v920b95jn03slad6q3w3fr97ricjvd3f";
+"exam-2.603"="c9bgf04s696pqwzvf69w42xqay2wzjjn";
+"exam.doc-2.603"="n4ly7a6sc6vk3n1lc87rs9gqj4yyz5sq";
+"exam-n-1.1.4"="nhyripks5spkljgi7js9mva03lgam717";
+"exam-n.doc-1.1.4"="s5zg21xsdrxmyr4v4fj9gjp5gkcm27wj";
+"exam-n.source-1.1.4"="yfj6g9n8q1i7x9037cmvghzyhm4i28rl";
+"exam-randomizechoices-0.1"="76kpdcd91398dmjcs94270ji9y1hs6n1";
+"exam-randomizechoices.doc-0.1"="m69nv8j74xz3i3wv0byg3x64d6924338";
+"examdesign-1.101"="58mxkjnnwz8z68lvxdc43gn14v6i9ysx";
+"examdesign.doc-1.101"="vr8j3mhp28h6d9zvcg6akfx9sx756zh0";
+"examdesign.source-1.101"="51c9vyfhwcp9vmhsrsvzd47q93ckw2f1";
+"example-2019"="rpbgsy66fj5nxcf2j2kg6mmkb46hq4ir";
+"examplep-0.04"="jnd218glfcwkbz8qprkac3nykm86lhsx";
+"examplep.doc-0.04"="lgm123fsn5wpdgbfx3kqm9h5q92qss83";
+"exceltex-0.5.1"="2zx6110fa87f5f3fabp4a163ybxd8mpv";
+"exceltex.doc-0.5.1"="b1ga5yh8hj9zqzm9axzdmryairv6avs1";
+"excludeonly-1.0"="i8iyqw7gylk4jh4xkrvlycpy554iinyn";
+"excludeonly.doc-1.0"="4i3z8xj3prbb8wmb469wp54pal0y545a";
+"exercise-1.6"="x4m7z83dk9yg068fgv9580gpg32fin6y";
+"exercise.doc-1.6"="bcrzrs23c8rrkax8w03yhlmr9sgqw3kq";
+"exercise.source-1.6"="fw34bm9v1gqh9x7vgih6axanakwj523h";
+"exercisebank-0.3.0"="lxmd3p0fn30bkvvh29jlajdilif7c6h4";
+"exercisebank.doc-0.3.0"="qys4wvwrjjxnphcadazvgz6wxxqk98jc";
+"exercisepoints-1.2.3"="givs6qpl3x2lc45lhxp2xa6wfznawp23";
+"exercisepoints.doc-1.2.3"="ad8kxig8in0cc1xdl2rn7yyhfxhcx868";
+"exercises-1.0"="hghjlb5lksvs5nwqdipf0sbfxblqkr8n";
+"exercises.doc-1.0"="2xwg0g0li01d2h27alvm667nz56cz2r1";
+"exercises.source-1.0"="fbq0d5cp7lmgikxgrizj3vs75gxdg4qz";
+"exframe-3.3"="1yxv7ckh5ravavzydcvryykk94k83bbc";
+"exframe.doc-3.3"="afd27v4df5anpviwvv4k87rwr5z4hywz";
+"exframe.source-3.3"="1mcln0ril87yvl3bypnw6qp442i8mp1f";
+"exp-testopt-0.3"="rz188mfdr0hfnrcndv0ncany2g20hv34";
+"exp-testopt.doc-0.3"="icxvqjnip0g92k1hngpvas7f7ii895pa";
+"exp-testopt.source-0.3"="9gq43v996qrrrxjgi28fqf9c8qval8ln";
+"expdlist-2.4"="3l7s7wynbhvmmxlpsvzma7k0fmsrgha0";
+"expdlist.doc-2.4"="pv6g612sac208kk4il3v43ir008916lg";
+"expdlist.source-2.4"="nfs4val465iw3h4x5ggg8606k2nl4n88";
+"export-1.8"="c2cd44yhfphk0wnyaq0db2y5rfjmcvfv";
+"export.doc-1.8"="ijjjprbcnjwwj5hf13b61165mx8xdqn5";
+"export.source-1.8"="0wz3raz7mf5cqz0j0g977b7ghznxgxxs";
+"exsheets-0.21k"="5mzmvibvngsrzbgp4db25w2iwk3s4rrx";
+"exsheets.doc-0.21k"="np244067l6dgsdhfn7dniy21dkzsdqxm";
+"exsol-1.4"="wwghsm9x9vmac2i0nxgjqg8cpwlhzqwa";
+"exsol.doc-1.4"="f2wy6r88019491r16x5kqbfrhvj4np78";
+"exsol.source-1.4"="g428plzbmq561mmilbyizjp5ycpr1v8q";
+"extract-1.9a"="dmilnfy1hx4wr7rxx9422m2m95ksx64r";
+"extract.doc-1.9a"="ngsls0lldkxag0n9iyj97w8bn281xm77";
+"extract.source-1.9a"="hkgq7qf52m44dk9n9mj6xllwqdqz9s90";
+"facsimile-1.0"="mhx5jbh4rwv10z6hd3b2w5haj02bjz0y";
+"facsimile.doc-1.0"="pb8sj68gxph376h1ph6yb65ncyblxbdw";
+"facsimile.source-1.0"="dvjli6r3pr4w74n9mnm2ix30jva6yysc";
+"factura-3.70"="mfwqcli266v23qf2mv40n65gy72pfs9y";
+"factura.doc-3.70"="mnkzfkdx0gnrkp0hcgfmlmf8w1l6m3rv";
+"factura.source-3.70"="81mpw7alzbs5f0zy1kl3ws1y5zj3si60";
+"fancyhandout-2019"="d1l30rd3z334px9zyw74l4x5vjyki6zi";
+"fancyhandout.doc-2019"="y4vl6xw99i4q8j9nr369isqzs9vl39z1";
+"fancylabel-1.1"="fvnw8s5y8rr4sfpff9ay2y1yqqgrwysk";
+"fancylabel.doc-1.1"="xsq1b17afxx971wfyrdgwnq2fkyqsxc7";
+"fancylabel.source-1.1"="rwq6gd28j5m49xv2h91sav2b5pf9cyvn";
+"fancynum-0.92"="5asi7143x3h151vhxxjjyy73nd39zj2s";
+"fancynum.doc-0.92"="54f1hxykwv7k34dpsvg0l6mlz9jia60z";
+"fancynum.source-0.92"="hfgqgx52wiqfw9h4440hwha1zagvw45p";
+"fancypar-1.2"="268b27l8yvn8rcb7770xq9rpaf3w9d3x";
+"fancypar.doc-1.2"="ikjja1g55vxfa2pjivkf1wgyzihikghk";
+"fancypar.source-1.2"="yjzx9b97l97ii96d0wvd6whbq9gkas5d";
+"fancyslides-1.0"="1rm0ay1lphh034nxw2ww5w4jkyz0a8vg";
+"fancyslides.doc-1.0"="h8cl20k630ccmwjxvnkns9yqzv2gx6i6";
+"fancytabs-1.9"="198b3fl0x7n2mghw2f667pxr4dzsyq0h";
+"fancytabs.doc-1.9"="m0fyacjfsm4rc2shbar55bwi6nrf5f12";
+"fancytabs.source-1.9"="4a3il9l6rj6wkxd489q9vxdjihk9c79s";
+"fancytooltips-1.8"="92mbrk8gn6np54fx90qzcgkps3v6k54y";
+"fancytooltips.doc-1.8"="v90g2vxn8yqy9lvibqhldwm23cpvv53j";
+"fancytooltips.source-1.8"="cgj7harpp7wxh1fvh1wfx3pc0c34nhd5";
+"fbox-0.01"="avsffl90axfyd4pliavp0ckwxrm9w3f5";
+"fbox.doc-0.01"="ip8s6059f06097xzz36v0ad9r5j970rd";
+"fcolumn-1.2"="7gnf966fnvfcw5m4gfcxlxhixarf8v2l";
+"fcolumn.doc-1.2"="w9hp3iibs2fzympchad93fwrjzz3mn15";
+"fcolumn.source-1.2"="cx5wmvjqckiw10xd2xi66mwvq85nhmmx";
+"fetchcls-1.0"="hjmchh00z9pl5bhdxdb491f4grb4hvri";
+"fetchcls.doc-1.0"="2p0k1bx3y1b9b8lw2j25ybcaz1gwyyfa";
+"fetchcls.source-1.0"="xzc8psnl98xfsj7hy37f1qgln8hx25pn";
+"ffslides-2019"="v88vqphgndyc8bznnkpc17pcgc4f429f";
+"ffslides.doc-2019"="1378bj25gqxr8mhdwf99rw2q61kbakqd";
+"fgruler-1.0"="z5k7w4nncv381nbznr8c7bwq0a9k9l5m";
+"fgruler.doc-1.0"="rm6g865195d2lm97v9pbaim7jrgsnjyz";
+"fgruler.source-1.0"="67chz0f0pjn70xrxzmw7jvzgskjl9vlv";
+"fibeamer-1.1.7"="39kjk30dpdvclh0zy23x12jiycik3xgn";
+"fibeamer.doc-1.1.7"="qcvd0xn9h1j3dgjdk4kdyh6iy0q0kvl9";
+"fibeamer.source-1.1.7"="kzw9lj7jxl4kp2qqk8lcvbjhsdl3qnrf";
+"fifo-stack-1.0"="dfyb5qmw70jy72ass9iy0k89criyybwh";
+"fifo-stack.doc-1.0"="a5qh0b6zcxnfplc2xf0dy4384rvb8ggf";
+"fifo-stack.source-1.0"="67n2h94p29l1j6dar7s1q8gz1cxg1zxh";
+"figsize-0.1"="hmj352dqpk23wfjhvs58r5rj47gcixj3";
+"figsize.doc-0.1"="sxblgd4i3mklznz336yy925l7xgdnb82";
+"filecontents-1.5"="d22c8airrb5g6gg1v4bym4ai1v6g3bk3";
+"filecontents.doc-1.5"="sqsf9s1517qnxry8shr2mjhpw5d3a91j";
+"filecontents.source-1.5"="gm2b5r5ziyg72fwp6mmxbiqhvlc1viba";
+"filecontentsdef-1.5"="gjx57g35wh6ay7vynnj8wsf14zvs4cnm";
+"filecontentsdef.doc-1.5"="mnmx299zm8cs3l4i13f1y5mz9i67mpbf";
+"filecontentsdef.source-1.5"="42ndk5l7qydnpiaa184r08d4sc2jg71s";
+"filedate-2019"="krqs9ry6gpmk5xi9a2ijkrd90y7v6q5h";
+"filedate.doc-2019"="dq7487rvj7vai1j80j9sgi7hsldg433m";
+"filedate.source-2019"="qq7zspqhd6zl4w5lyy9gxw927ph31sp4";
+"fileinfo-0.81a"="gbv2pynx74765fc966q0l4wpflxyi0cz";
+"fileinfo.doc-0.81a"="5y2xniw8nwg8iw11g49w04xl9fp4zyv3";
+"fileinfo.source-0.81a"="lgcw481ya8a6ag2gzd0g589sm3ndsqys";
+"filemod-1.2"="kgjfr4lx9rpw39aqp3w72hkj9kyfbx8p";
+"filemod.doc-1.2"="cid89p79bmmyb8hp230g9zfl5wxl3gwq";
+"fink-2.2.1"="l8xgqw4b1pc40z8zvhj4x5vd3arirrss";
+"fink.doc-2.2.1"="d78cggifb9b0y730zx116mv90xlcl47w";
+"fink.source-2.2.1"="mb1qfcb5ils48npb6zn10d3dd9781abh";
+"finstrut-0.5"="adqypjvkvnkydw403q2wab9xzpvavhzz";
+"finstrut.doc-0.5"="lcyklm3jkz5nq6j956dv55n0nfyaprkx";
+"finstrut.source-0.5"="54slgzkfps6q4z7x49a5jqpc1j3p98hw";
+"fithesis-0.3.50"="y94p03g5da8ffsj5znr4v57h6d6kd2wq";
+"fithesis.doc-0.3.50"="a63mxxbhw59ywhni4c3si0y3hpxh1fsq";
+"fithesis.source-0.3.50"="25kfd698n7f5ajwz4b8sdxkl84cc8dm8";
+"fixcmex-1.1"="p0y657r350dcr3nnwq3i0ypw3vxb4ja8";
+"fixcmex.doc-1.1"="hi9qnwgbssbkxl45ni29zlkjysn0qmnj";
+"fixcmex.source-1.1"="7b3yc3sn3pqgfzkamp4rkgfman5wy28l";
+"fixfoot-0.3a"="ci2h09kyh2k0w0d8mbmcw57i4cqirz2i";
+"fixfoot.doc-0.3a"="5510blbn341f70ic646ad9jay6sfiilq";
+"fixme-4.5"="7qdkrgbk2nnkdyzdl467mi8wwzhlrwn1";
+"fixme.doc-4.5"="knh1kg97mfy8clms5mwa168d6zw79glk";
+"fixme.source-4.5"="id4lxnr799xmdvfp7796v5gm3118ijmx";
+"fixmetodonotes-0.2.2"="8bzda1486sb6l1miw9fwc4gag8l86pld";
+"fixmetodonotes.doc-0.2.2"="kwvshr4l5r8zgjia62ac04bpc7cy5n8w";
+"fixmetodonotes.source-0.2.2"="c3v82mnqbxnz0b2yy1g5l9yfxh1y41vd";
+"fjodor-2019"="c6ya1a7zfddfil9y5f30af7d0jm8ikij";
+"fjodor.doc-2019"="ba4cxg0czxij6lwkl9w1kzmrcli6s3jm";
+"flabels-1.0"="pphsynfbbj4vxl9g3rklfj0igp6pzliy";
+"flabels.doc-1.0"="hpsnqln41r0ybmv2vjycd0zrxi6mwrcx";
+"flabels.source-1.0"="2x4jjggfjxvqby3yv13k0y1cgcrd0jcq";
+"flacards-0.1.1b"="mysbkp5ascapm70fcnb08ldmskay3c7g";
+"flacards.doc-0.1.1b"="ipa0bk1dr9hlhj5sbfkm1fgyddzrchd5";
+"flagderiv-0.10"="xcwh87j3789v5pbs65xw4kld1k6mwk3a";
+"flagderiv.doc-0.10"="g9zz7g3kqa2jfcwnj1c61fvzfxxkf9lz";
+"flagderiv.source-0.10"="2r4c1f141xqnfav3klxfdh3i5xx4mc2p";
+"flashcards-1.0.1"="wlkf4s8qqhbql2b7jv0h2g6mming75b5";
+"flashcards.doc-1.0.1"="c6j54a7zjc24m6wv71rq43xjxklwgj0g";
+"flashcards.source-1.0.1"="0nwdgq4r431r55k8aa7k46fkxz3c4c0n";
+"flashmovie-0.4"="jb3lv2gg2w8krqzqypkipq4rsygddkv3";
+"flashmovie.doc-0.4"="n1iz704bdaxj2k26m4125h6aqna0g25i";
+"flipbook-0.2"="6mlbadxnf64k383jr2b2phh2ybkk1m81";
+"flipbook.doc-0.2"="j9a1rvi85n2hmhr7233zzz9a5qylb6pl";
+"flippdf-1.0"="g4pw7i38h9ypal2wkqfvchwbr9wn6v5r";
+"flippdf.doc-1.0"="s9xvjdfjxxz1dag35lcbw8dznlx43305";
+"flippdf.source-1.0"="vqjf15dsa1nvx8cw0qbam1zvr2qr171y";
+"floatflt-1.31"="ppv98lki1x3s6xklksd69n5cr8vrd6pd";
+"floatflt.doc-1.31"="7n9r2sl31qx9jnw802mhykidjldhx4hl";
+"floatflt.source-1.31"="byz5ymxby208lx8am35lz229dibcn4ic";
+"floatrow-0.3b"="mk0srwmdcdm8g9i0ncmndkxavsknm2jr";
+"floatrow.doc-0.3b"="xw3x5mm1vlq877jdm537h2cc69q403c8";
+"floatrow.source-0.3b"="qqa4j2hidyh6bb8y5y9hz4mmb4j1i732";
+"flowfram-1.17"="lr7jldig88wv8gsvp8aphxsvc6sv4cax";
+"flowfram.doc-1.17"="3f550irxijq1vdvyxs6fyhpj5w1lw4jq";
+"flowfram.source-1.17"="66z844imyrl7bsi22vrff1f05dqlmr8p";
+"fmp-2019"="3m6zqb7jl5rn5zgy0dbys5r8y1sp20x5";
+"fmp.doc-2019"="3hvfiw6yizjkxnx5h7xlzfig11diglpm";
+"fmp.source-2019"="44cqcijnqc5235rjqsmkj4vhmrs9j7hq";
+"fmtcount-3.05"="lgf2i3g3dqna8nf2apjmim4dsrgr4v1c";
+"fmtcount.doc-3.05"="1cxr7nbb8wc3gyiy8h6vb3lcnlq56cxg";
+"fmtcount.source-3.05"="bsypsb0pa2wjvacpyi0jri32j3y99vfa";
+"fn2end-1.1"="qw34b3ki30fqs4dj4fkj6f46aygw0ylw";
+"fn2end.doc-1.1"="anwhkba91c48wl5p1ch35iplw974sdiq";
+"fnbreak-1.30"="aiwqr078mw2127lbphc0lhmh90m5ddgg";
+"fnbreak.doc-1.30"="5v0ijwzjxmll7ayaihqhgk1dnk2rzp76";
+"fnbreak.source-1.30"="jwyh3gnmafpdr53xg4jy4hz6x8y7vhm2";
+"fncychap-1.34"="pg593a0zc9ycpg6cc3d7bjz92r7grwix";
+"fncychap.doc-1.34"="rncjjlyrjy916hn3ka9yaydjq6pdvn09";
+"fncylab-1.1"="lnd1s9pijjp9fnhp88fhlbz99d3lvp1m";
+"fncylab.doc-1.1"="psv8fimys5h1ps5cvhnjmwfmcwnsim5m";
+"fnpara-2019"="bwgyxjk2k7p76mw5ahsf2b0nm464rvi6";
+"fnpara.doc-2019"="h92c0g634x7n1qcdv6vqp5pnw9ykba0y";
+"fnpct-0.5"="cxgfwv34w1ply4aighh5ln7ahad4v04i";
+"fnpct.doc-0.5"="y5jqirmrd5pggkwgz7fxfrvaid7jm7q7";
+"fnumprint-1.1a"="vhhc4n3xvlkb2a31kjpkxbwrwc30r62y";
+"fnumprint.doc-1.1a"="gyllsixn381a8p0rpr90n31h3qb0ganp";
+"fnumprint.source-1.1a"="kp99n8b3y30ilnih7bk867bf3d93xf3m";
+"foilhtml-1.2"="78dmna552hnh9i11v9zgg6l68hmla7bc";
+"foilhtml.doc-1.2"="a2bsh99xh1lfpssggzxhiz9ipwz6bijd";
+"foilhtml.source-1.2"="lrjc6lj49c8knfh4bh9jx7vzpddxsh71";
+"fontaxes-1.0d"="aaqzfxbcd9fdggw8lmj6syc1ff00m43p";
+"fontaxes.doc-1.0d"="q1qsz0gigyg3x462k337crqng7njvakk";
+"fontaxes.source-1.0d"="6xacssljffql809gpbhl8qdrs944v6cs";
+"fonttable-1.6c"="bljjiigal2igv0y004hwa9i1yc9i4b3d";
+"fonttable.doc-1.6c"="jssz79rldva4rmrziamjqi1krl4yijan";
+"fonttable.source-1.6c"="h3g6s458yvqsrlf0h7d8046ngi10698y";
+"footmisc-5.5b"="ha2palj23dq2c3j4fb1j5s6cjjzisilv";
+"footmisc.doc-5.5b"="22bx6glng885275x22z99lwwhwd3g5xq";
+"footmisc.source-5.5b"="ii8ra20y2k8fzklf2cld2z6hjv8i1fha";
+"footmisx-20161201"="5pcwf6k39ybd84nnhzpc4py1sn3bsch4";
+"footmisx.doc-20161201"="0qniys4b74hs2d420k0xafys1578l2wj";
+"footmisx.source-20161201"="m3510nfdmbc96v66r54ikzkfcfffrxfg";
+"footnotebackref-1.0"="8c8gdjzn36nfxjmpn521548334gbn86h";
+"footnotebackref.doc-1.0"="fzjm17j06la934js2q0sn92l5d8g5z1i";
+"footnoterange-1.0b"="rwxkjfzlwnkci6wxhkb0fppkqc8sb226";
+"footnoterange.doc-1.0b"="c5nd33ha0bbyw53d9d7pqx68l4xl691m";
+"footnoterange.source-1.0b"="hsn4s3qzy592w2d27z8hkzpxy9j8cz1q";
+"footnpag-2019"="ym18m0gmmk7800dd1c4vrar53q66hm7g";
+"footnpag.doc-2019"="8kar3xxxjlrsjascd28122y5rckyv5lf";
+"footnpag.source-2019"="51nmvyy96mjbr46ar058jb7jhpsqz17q";
+"forarray-1.01"="682slfwbrz58fhqj0c07lv1xwab861ks";
+"forarray.doc-1.01"="i7v5q2pjc3sjmcv3mcpdi3sffm4qs4kb";
+"forarray.source-1.01"="q23rvw19x2rk8nv6yhgg76jxfs30qfys";
+"foreign-2.7"="lm3i89k3l6yjajvihjc98kcix3fsa3bb";
+"foreign.doc-2.7"="lbi21kkbscf91yswn2v3jam11615jhpb";
+"foreign.source-2.7"="imrc9f5zvkqj5acfqbzpdvxgvdcf9q51";
+"forloop-3.0"="28l30q6cdvwand7yyg04xzb49kl21zm8";
+"forloop.doc-3.0"="k6pmk3ligld7hxal5vsq8ccjw6d1k1ax";
+"forloop.source-3.0"="9rq5r8x9wv473bw97hyh21ihqzxd1w18";
+"formlett-2.3"="ccr4iqh9ii22b0xkdl0j2rhp6q6cisd6";
+"formlett.doc-2.3"="cwpzl5rhracg51x0lvqxxkbz4id1plml";
+"forms16be-1.3"="wd1qw6m8b290ilqqsqfxdliihj3rhv4y";
+"forms16be.doc-1.3"="5bq4kd42czdg29a9rjsickrq1p7g1m4v";
+"forms16be.source-1.3"="a73kdkw9dn8pjgdszxjlqcxjgxz4v5bx";
+"formular-1.0a"="1ccyslvhjbzqyqyk4m3zh761kw2v45xk";
+"formular.doc-1.0a"="lap9j51p3dsh02ym644576gnzm3a845i";
+"formular.source-1.0a"="v80wnhg3xsl24a6bbsj4xfn82cv7ajd8";
+"fragments-2019"="jjblkk9dj72nvr2gday7p509pnlpwy16";
+"fragments.doc-2019"="z8rmyhlpsv68qbnr6h3sy08gcy6shiac";
+"frame-1.0"="9bdydjkb9dsdvryibfq2p1q071zhhpxb";
+"frame.doc-1.0"="fnv3ssnby17l7zmbgkc1rf4b5hysw7a1";
+"framed-0.96"="n9an7cs91wwfnkalc4j9ccd0p0dg485w";
+"framed.doc-0.96"="bwmgdv9r6rffibrm0wabw95vqdkiryfh";
+"frankenstein-2019"="ldv1sc8j6nxhd9cd95jf934pyz6s8lxs";
+"frankenstein.doc-2019"="j03cxxv0hw0c1j4afrfprgc2ia6nc5c9";
+"frankenstein.source-2019"="zc3nzdkbjrfgv241wj4xxlq6042xv9nb";
+"frege-1.3"="vczq96wx0icl69c5xqcqmfsy2wdw1ncn";
+"frege.doc-1.3"="h07nnplqxq2fyh6f0wh03jpism89ji0d";
+"ftcap-1.4"="7srhgl4z3zpicxv7aakm970xy2yxnpns";
+"ftcap.doc-1.4"="1y7r73w8r779pdchcgwmlvcd2sq8hyfj";
+"ftnxtra-0.1"="8iicyf847h3xf4jvn1y8nzyjk3dw7jng";
+"ftnxtra.doc-0.1"="sna4k84xb01ikgp5aivxlrf8qzbp0gcc";
+"ftnxtra.source-0.1"="60xpxaqbgyzrfxb97zrhdb9rihy2cc6f";
+"fullblck-1.03"="3dzz4aiajr3i1ns3xhh9vl1s5ins4s1h";
+"fullblck.doc-1.03"="xczvd1gvp5s5rvf4n4bxrj7l7c3pxhg9";
+"fullblck.source-1.03"="y7clrinyakc2zm8933j7b6ng7lsl0f7z";
+"fullminipage-0.1.1"="s3rajpd52w578wrvd1rq4dqgp4b1kh36";
+"fullminipage.doc-0.1.1"="ls3zg7gw0lmncmy096f5vzpqi9l9linb";
+"fullminipage.source-0.1.1"="2j6l66kmb8bg04h60001kskyfbbclcnz";
+"fullwidth-0.1"="0m9q9s3ng1gqji2vjs9z14vzri24sap0";
+"fullwidth.doc-0.1"="qyswh8vcacvp9nmhvviq4xm9ariq2aq8";
+"fundus-calligra-1.2"="5jn0qbj8zgi1c0166c2vdwzs1a5i8qm1";
+"fundus-calligra.doc-1.2"="dd87040kysj4av2sq7grslyjv0gx4rmd";
+"fundus-calligra.source-1.2"="s4s97ga289ncgv0rpd90b8i7qh4n7jfj";
+"fundus-cyr-2019"="fjyzn069q34z3ypaj0qwjq3f5zjm7y8k";
+"fundus-sueterlin-1.2"="4xlq7i6k1pqmq8vc6aq8h50gs1f02l3d";
+"fundus-sueterlin.doc-1.2"="i8q42q2rzmby64v4il8jkpk7azfcrrip";
+"fundus-sueterlin.source-1.2"="rl5n5rh9akf41ls7m2gi5l9hqq6wv8j5";
+"fvextra-1.4"="pah47ygjsmqpfiq42448kyz9fahgxs04";
+"fvextra.doc-1.4"="xwl3fw21ywkf6jwchx1axwn5sxr7xwj5";
+"fvextra.source-1.4"="8jnz82fc1n2mm00f32p6sr9gijmz2v5w";
+"fwlw-2019"="887p12xhlcgydw4pddr0npyvp4xr1azf";
+"fwlw.doc-2019"="2di5y3hhm865frn42j1sh87hflxlpc1n";
+"g-brief-4.0.3"="dnx0f0d7qvfrvjczz6zfrkr7dprmgnr3";
+"g-brief.doc-4.0.3"="9z095prb74z0q8b4a7wppdkmmc0c34k5";
+"g-brief.source-4.0.3"="v6210yn1lfk3wkr6y2b2fq9vl0n8cpsz";
+"gatherenum-1.8"="ki18pb9dgca5cpjg723prb0kh2kin6qm";
+"gatherenum.doc-1.8"="w3s6z3566877vg2jshbvcqb8v757v1di";
+"gatherenum.source-1.8"="s37a7faiilrfxyr4iq77j2r3i27l9w98";
+"gauss-2019"="rm0hzy2h1msxkfp2lxm2k881y4iaw773";
+"gauss.doc-2019"="1d71g6781ar41gk3rjjy48bbkdkxx4id";
+"gcard-2019"="vrmrds4xh35bqjq4qaqj8rrvfd7fdykm";
+"gcard.doc-2019"="lxpbgqbbcldhlpwjkj531yh2bm3l2n3v";
+"gcite-1.0.1"="z7ha969s3ry7g9ibv521f2d6vr9lcxx7";
+"gcite.doc-1.0.1"="3bb2z8jbygadc7qzmjz024dqzphncy4f";
+"gcite.source-1.0.1"="v3fbj2j823jh4gy1vrc4f74qsdbfqnpa";
+"gender-1.0"="v985mqnxvb7ymdlzs1j4y3pvbygrkizz";
+"gender.doc-1.0"="d8ickvclnl5647xpq7jz3qh2i9l9hw97";
+"gender.source-1.0"="iiq2vb35q3lqvd49f5gzsz6fa52s0nlj";
+"genmpage-0.3.1"="r91a3wqjc9w7l3dh98j429ja8ymvbb34";
+"genmpage.doc-0.3.1"="midc310i26fannfywf0cl7kp014y9ax4";
+"genmpage.source-0.3.1"="riqs209lh1jip1dypvdhzq05i7n1kh7h";
+"getfiledate-1.2"="jxr6fwmy8lc03cqchndg1dps8vjjfqz8";
+"getfiledate.doc-1.2"="k0r2fr1q7cq0x7lrbk38ik8bqdngsq71";
+"getitems-1.0"="8qdph1kdihdkqyd8rkn4n2i3wd5kfq0g";
+"getitems.doc-1.0"="yhr7vskgqfhij12vrcyl7a9v60nipd32";
+"getitems.source-1.0"="89vcxsad2qxdl0kw2crb0r1ibn4acwpc";
+"gindex-0.2"="128d07f9rns69pxnp02hy0bdv2ylmap1";
+"gindex.doc-0.2"="n1b75gq6nyspvyg0c6ry2287rsj3r9hb";
+"ginpenc-1.0"="gy74qjz23cw3lbmb0nc205qfp1a0ggib";
+"ginpenc.doc-1.0"="9iln48gnlcshrhkk3mbpgqk06sj4bl39";
+"ginpenc.source-1.0"="dkkxzw412c81hrhwnmjw1jgvhz5rrjhk";
+"gitfile-info-0.5"="z9c9f770h40rsxi4cchzka914gzhfv5w";
+"gitfile-info.doc-0.5"="bhbyazh055g7ga0gapv9kywhsrxjynwh";
+"gitfile-info.source-0.5"="ncmilrcdd5bk3563fnh91n149bp83avm";
+"gitinfo-1.0"="a7mcfsqzwi88fsrdbqkwh8p3rd7w51ri";
+"gitinfo.doc-1.0"="5dh5bifav6w87hq29ph7ls65yxjhk7c3";
+"gitinfo2-2.0.7"="dsxgwrlg9j367wxxisxm2wv595xny8x0";
+"gitinfo2.doc-2.0.7"="l2rsxd08m2y44wg53q2adl7d084r14cf";
+"gitlog-0.0.beta"="q64k3v3pwcvg8abw382rijglrgllfvwx";
+"gitlog.doc-0.0.beta"="29ysf5jz8cvwanmhad4ka66jcwxn9a1i";
+"gitver-1.0"="82v18vqp96y60wb50jk7ca2wnhx45i1x";
+"gitver.doc-1.0"="4ib0jxlml1dn8sy6x1al8p6m8n8sink5";
+"globalvals-1.1"="cjs44i0mivi683bifs5icf9nk3jr7v8k";
+"globalvals.doc-1.1"="2pdq5ik88cr3z5x9j5jvqz1k6abkllm4";
+"gloss-1.5.2"="xacfn3b2z30pnj9lwh6mximrbsfvarfs";
+"gloss.doc-1.5.2"="4qial5a0p7ip784xgpqgkl6cmabd9hlq";
+"glossaries-4.43"="5v3d0s2n7hn1pvp5ip40j077kywjaxkf";
+"glossaries.doc-4.43"="kdz8v10i2x358dxnsx0n2bb2q6ajv024";
+"glossaries.source-4.43"="dvidpd8v5920dr7j81m12v0k2xiq80f9";
+"glossaries-danish-1.0"="hmaay0viwacnrz7bfz6xlpb03cmsphcc";
+"glossaries-danish.doc-1.0"="mxgh9b6vc63llhmfildmhkhjxd1s9kbq";
+"glossaries-danish.source-1.0"="s5ayfh10z40cpi9amn2d1wwpnby0qgaw";
+"glossaries-dutch-1.1"="diqdj2nm0yzvdkkxv243pgrwhk4nxayx";
+"glossaries-dutch.doc-1.1"="irbpwmyxxm13fas8fg1kdn5x6assgf75";
+"glossaries-dutch.source-1.1"="hlj6vbl82r5h0ngvr5b7h33k1q54b29f";
+"glossaries-english-1.0"="ydbz6ls58gnxf3wmay4157516ggzsc1f";
+"glossaries-english.doc-1.0"="53w4fzz52hh9jyik6384limy6633l8aa";
+"glossaries-english.source-1.0"="dpc58cbb3snzsjxkz0c82yksx6c60h6h";
+"glossaries-estonian-1.0"="3flqr7abc4hqy63p0bdl0bz0y04mq07s";
+"glossaries-estonian.doc-1.0"="dd2rrp43ix2hcwnrgcidfr8z0shsgdds";
+"glossaries-estonian.source-1.0"="8y8x5qqydmnvjf8nbbj8qj550kbvddg5";
+"glossaries-extra-1.41"="i1lsazwr25z6x51xmxccc5bx8gjvis6s";
+"glossaries-extra.doc-1.41"="qjbl4kpgkxylq5zvki1zi3z4xkfmhx60";
+"glossaries-extra.source-1.41"="0ymb9lrspig48ahj6a9qsapl1rnz5fxy";
+"glossaries-finnish-1.0"="rq7ymhc4ispv4j1zpv5iy6mbn66wr3j4";
+"glossaries-finnish.doc-1.0"="f8rj41dbpqrdxbl7h94rxnbiqm77xcj4";
+"glossaries-finnish.source-1.0"="gnj8dlxpzapvi9yvzy04rhmrs5z7hmid";
+"glossaries-french-1.1"="zkndbp5cq242l196fc6s35yib6ay4mnf";
+"glossaries-french.doc-1.1"="0bj95z10psabgwi3gg65jbmjfjr5jn36";
+"glossaries-french.source-1.1"="87wiw0b01wpqikz8r7wfrkmq8lylviq6";
+"glossaries-german-1.0"="dhfan1gzz50rlg7q2y9x5lg1dgl2cacr";
+"glossaries-german.doc-1.0"="8kajajbjllgcz3h1q6nhs0jh25pv9xdm";
+"glossaries-german.source-1.0"="254c5j11d1xigfcfn5s89bv2i6si8cfr";
+"glossaries-irish-1.0"="ahbzvng9phrhcfiwiam6n2rf76p9i7kl";
+"glossaries-irish.doc-1.0"="4ffcaqrn4a7w66wghvl5vghyn2v5gvzd";
+"glossaries-irish.source-1.0"="qfl7ngfb7cjiif21q38d1r9lwj9nddjw";
+"glossaries-italian-1.0"="sss93i9s603bsmx18w06lpvgk9ldclcz";
+"glossaries-italian.doc-1.0"="8k3ys38zjig011j7xgnhxk7yr2vabrs0";
+"glossaries-italian.source-1.0"="bhz5xknfcddwc6wan5d01hq33v4ilh8r";
+"glossaries-magyar-1.0"="fqbsz09snqw5j0zlail5bh3a13nmnhy1";
+"glossaries-magyar.doc-1.0"="zd4idxawfa6rm2j353dhyak90bq2jd5y";
+"glossaries-magyar.source-1.0"="s8xxg7bh6zgxq6rvzp5lv6sp6h8ywvr3";
+"glossaries-polish-1.0"="7alkf3zirdbg0mgv66grfaa6szhjy806";
+"glossaries-polish.doc-1.0"="hhzkv01s7m4f1cyib722liyaqchxs31r";
+"glossaries-polish.source-1.0"="6pkd4wg9srcd5m92mlaa1vniyh67ahvr";
+"glossaries-portuges-1.1"="z5qc3w9n0fv2x5afsv5k7nl2652byx0v";
+"glossaries-portuges.doc-1.1"="ywr0afkdqfmk6r867pghf07wpwc8sq92";
+"glossaries-portuges.source-1.1"="zzd6nlfq11zc152af3p62bshnh0j8rwh";
+"glossaries-serbian-1.0"="b4p3iy3d6ziqh38r27b0lcqm9clcf8gb";
+"glossaries-serbian.doc-1.0"="h36h8811dfndykwh6q24haghsgy4jl2s";
+"glossaries-serbian.source-1.0"="wf3wbvbaim0w86695crqc0l1dv006ydc";
+"glossaries-slovene-1.0"="4xxwy7xrk64b3s8maw57m7p7zkn9knqc";
+"glossaries-slovene.doc-1.0"="9sjkj3ksgfpkjd7bg4dkp3bq6bmsghap";
+"glossaries-slovene.source-1.0"="03gi4x6kh5rypqq4ssi24qizzr5q37mc";
+"glossaries-spanish-1.0"="aygzxhw0cr8prirvcbsrc1xr11ac6fpz";
+"glossaries-spanish.doc-1.0"="da0ysgd3c6k336sc52pg4w76bj8lamgm";
+"glossaries-spanish.source-1.0"="cij28c7mhivbkwa5lwg7pvmr8h4ymrcd";
+"gmdoc-0.993"="7acw3iajf16bq7vmddr2j7z5apizxj3x";
+"gmdoc.doc-0.993"="zn90pbf45d4fz5d4k8q545fp3jshn0cf";
+"gmdoc-enhance-0.2"="0gc7975jin3dszblbn2zgzm22blk5y3z";
+"gmdoc-enhance.doc-0.2"="gyv8r700rhfigpl57xsj5dmzwb1in6rm";
+"gmdoc-enhance.source-0.2"="vkbi6ys95j5v7nyv3il8mrxins0z743x";
+"gmiflink-0.97"="rxnvc039bqhcq7qna523c2s1hyp7khya";
+"gmiflink.doc-0.97"="59n276lia63cb5n3aicqvwv0njcml1fi";
+"gmutils-0.996"="56895j8b4i9nghfc5w2b2ysgk838dp9j";
+"gmutils.doc-0.996"="2w4257wz5vjp1lwzf3gzhbyyaki5d4x7";
+"gmverb-0.98"="z9il1jbnblh5vqzjz13xkfjsva6xqa1v";
+"gmverb.doc-0.98"="bh1ckqnp1vkqj9qb3fwfk1xszfphvma6";
+"grabbox-1.4"="hxv37a6c6abr0l7p5jca1xq85l8z5a4z";
+"grabbox.doc-1.4"="dx7fw5a3k0fjhfalpzp8nlv1s6m981aq";
+"grabbox.source-1.4"="agll92a3wn1mhbzaym750wpji2wxsb8j";
+"graphbox-1.1"="x0ckk1yx2f9ks1g70g32f4a683rpf4nx";
+"graphbox.doc-1.1"="b4m3rss283l9gfk0vc0apg05biifhpfj";
+"graphbox.source-1.1"="p7vnvaxz5a2grh651f3gld07pj7lcxp9";
+"graphicx-psmin-1.1"="bp0jkvi4zbl88zpfh6zfvmqw9nw56akc";
+"graphicx-psmin.doc-1.1"="rrh6zwqmg0d4qz2r0wa97p0ql3xp982j";
+"graphicx-psmin.source-1.1"="nx2ga2h4xz7qsczgnh3d0y9bjrl2dka5";
+"graphicxbox-1.0"="6grrmcmr2wlpx8dbj1k1nggs2b6z7qh4";
+"graphicxbox.doc-1.0"="2blrwzsralqjrvlx6xjvyaqvsi764nmx";
+"graphicxbox.source-1.0"="1vl41sp02d8byjrapj58v5pg6i2g989l";
+"grayhints-2019"="g0g3914m4qsplnykwnbfy3ik6svxbifq";
+"grayhints.doc-2019"="gayl01rd21rc9i5x6xnd376wm907qlz5";
+"grayhints.source-2019"="jimxcmdqgjndw6dqmwzb0ry84lwr59cy";
+"grfpaste-0.2"="wi95wbrs7k37di2dkqnix5h21p84cb1c";
+"grfpaste.doc-0.2"="7hn9vs80ksnpaa0aqdmbv7qzhrdxwr88";
+"grid-1.0"="hf1jfkwc5j27mhxi2skf3wjwq2y1ca0w";
+"grid.doc-1.0"="39h5w3sw4yi3jb35018rd2r847zzf4yr";
+"grid.source-1.0"="pr4xl73p825jibzhj2h8i4f6f0lbrv2y";
+"grid-system-0.3.0"="a2b7690j7d03zk4d4yzdr2nwjm6bm7sw";
+"grid-system.doc-0.3.0"="qddlxnpnyjjjv1z1irzch3ypv2amlb9y";
+"gridset-0.1"="3cnrwcpmlby1i8b2zxx8hwjrqjs0ylbg";
+"gridset.doc-0.1"="yhwrqdv5rcbxm0j9lanm6x5g38mw8amc";
+"gridset.source-0.1"="bb1kbccwzc806sc9sp7b3dgp0flfamrb";
+"gridslides-0.1.1"="r9lxxzf51dpfaprn6kvv3n1j9hf54xa8";
+"gridslides.doc-0.1.1"="jkri2k8k8nzvchpk11pgig98kw327c3m";
+"guitlogo-1.0.0-alpha.3"="g0knkg1x7mlgc938ydvdk93hcr95nfqk";
+"guitlogo.doc-1.0.0-alpha.3"="cvs2c3417kwq2rvnraxxj2k30v2flrh7";
+"guitlogo.source-1.0.0-alpha.3"="ckrba60qg0xhgrp3jdvpgywx224m83vd";
+"hackthefootline-2019"="kih3c9nczylrh74x0vc4m7g4bzahps5v";
+"hackthefootline.doc-2019"="vp6qn8s2g5d34v44anyr2jd5c0l5b4nb";
+"halloweenmath-0.10a"="mr8nvi7ynzngvgxp0i74wjkxwp77i7p0";
+"halloweenmath.doc-0.10a"="xamcznycdz08kgvbph8pi64h2v9j9j25";
+"halloweenmath.source-0.10a"="hr249rdkmmkm1v7z4cf7ymdwrshz0by3";
+"handin-0.1.1"="gdn6by4gg87043wdz597h9mxr9rzj4jn";
+"handin.doc-0.1.1"="xybg0ai1im3595s07039sklcjbqjdfnz";
+"handout-1.6.0"="jz5qp5n1dij11nyrgmb3x4rl41mnggyl";
+"handout.doc-1.6.0"="xsc8qd00v663bgbpfp4kwjd1ndc47q8y";
+"hang-2.1"="ncymr7c9lsbbxm6z2q3210k185bkkxq0";
+"hang.doc-2.1"="rqlq0rkbqj3vcfpm93m46w40b7llalvg";
+"hanging-1.2b"="48vqvdis9l05842lr3wp64x14qacr9ag";
+"hanging.doc-1.2b"="sicdi70h8j7nnw4p7bj4j3wj2bxzrwhx";
+"hanging.source-1.2b"="hhzby1cywgn7vdcn0b50lhpq0lkxpf53";
+"hardwrap-0.2"="sgzpnlk5kmxxmz5ilipmnns9bi4cd8m3";
+"hardwrap.doc-0.2"="zxy2s0j0lwl7mrl7xpcfw78j77zfz179";
+"hardwrap.source-0.2"="522jg055dil0qq23wd6z8rsf4dxcjzyp";
+"harnon-cv-1.0"="53gnsi8hs4wf9xzdmn3p3n1rfl0xy7z2";
+"harnon-cv.doc-1.0"="a7012x0ckxnym7cpbj8m12ak993bz7nc";
+"harpoon-1.0"="88cndn21h4fshiq6yvd8p68gwl2d2nd9";
+"harpoon.doc-1.0"="z21q49fw0a7wwwr6chwdd73ypkwqz1x3";
+"hc-2019"="vibhz5h2dnzdkwrxgadrwy8crfaa505s";
+"hc.doc-2019"="mhva92gfr4jn40d4sdnh0331iy19a4vi";
+"hc.source-2019"="dfmq6gax4mfq8z074sm76b6k7385d2nc";
+"he-she-1.3"="6rnp8qmascvlz9p0hgacblpx8svapf65";
+"he-she.doc-1.3"="xl7nf17g73pn4jc3z6nc6fknr11lsf3l";
+"hhtensor-0.61"="vnl54f4l78n4x9pllg95fr5dm79qs0jg";
+"hhtensor.doc-0.61"="nlrhij6qgl3y0zq2ija0m1gj4xxhyr06";
+"hhtensor.source-0.61"="kpmhfisxrh5n1j7l5qns4m51fr8vs6as";
+"histogr-1.01"="lykdh22sggl9qgnr3shki4dpp6716iss";
+"histogr.doc-1.01"="dnc1n1fpnhyyah7gkkbzphbxkv7rbwcv";
+"histogr.source-1.01"="k1n6vsnwpayx81ygapkccaw8g3n2yb7c";
+"hitec-0.0beta"="c6fqbzcgn7hlaxpwfcz08c11j6a8i32r";
+"hitec.doc-0.0beta"="c635j2194izgji0aqily4ha7slkzghkl";
+"hletter-4.2"="mq30k7g1v6cwmcfyizfzy3hmbxa74p5g";
+"hletter.doc-4.2"="rz2hrha5xf10050hfnm05r6f4b3mx53z";
+"hpsdiss-1.0"="9hca9lq9r7zs3frqj6lk6hybkpgcdfmb";
+"hpsdiss.doc-1.0"="2mxarcx6cm2v2bsab8gr7ks1mj5danvl";
+"hpsdiss.source-1.0"="k3k828ddx8vv2sr8lw644ny3z5kcl59h";
+"hrefhide-1.0f"="1pr0sfiwb8hdby12fsj59gqi6s05j0sm";
+"hrefhide.doc-1.0f"="ldsnb62r12628qsnwssndmf39b39zf5d";
+"hrefhide.source-1.0f"="42s1cx0nwj58cfhb2d22nsdqzidknwpv";
+"hvindex-0.04"="90sdf5j0a5qr2xp8qzryrvhnsvaz4fs7";
+"hvindex.doc-0.04"="9r6a8mfj7y9kyc2dbc79vf86aw73n6l0";
+"hypdvips-3.03"="vpmmrcrilqybs4ifvd927jlkn5ip28c2";
+"hypdvips.doc-3.03"="85viqi36j6kdsbnpvhf6a4wj2vjks42c";
+"hyper-4.2d"="xpwylfxrx74x9aw96ridad40im7xanw1";
+"hyper.doc-4.2d"="fcllxx04lprzhbna8rk4ycwbw0w6xnq1";
+"hyper.source-4.2d"="v03bmxbg7hqjpl8vfp0l8z81mi2db2hz";
+"hyperbar-0.1"="7mydsb4p7mdy3dd16fdgh7ln5dlia00h";
+"hyperbar.doc-0.1"="5cd4zznxxi8arkdzzkh17yfm1ghmpybf";
+"hyperbar.source-0.1"="iydbmx9cvsd986n970lvc3k6m28ix2rk";
+"hypernat-1.0b"="25v0a423yhy68vf125ys0n6p0qhvr088";
+"hypernat.doc-1.0b"="0n4qzpmvhks66d0g9gnyizpl44jbh4pf";
+"hyperxmp-4.1"="qry3sw3040f8kpj98zg8apqdr21z0d14";
+"hyperxmp.doc-4.1"="3dhn63b11sf4lh9ng6zc781qhk387v36";
+"hyperxmp.source-4.1"="7ylf2spylwk91a5b96nbbjv09ni3bizr";
+"hyphenat-2.3c"="wr2lhsafb13b0zira7190bx5s68fak45";
+"hyphenat.doc-2.3c"="z1sj3r1ny1lgixr2fcmsglz55b23f5lm";
+"hyphenat.source-2.3c"="x70g8xiz9ss4pw775lz82yncq0x7lxf1";
+"identkey-0.1.0"="bk05b433id0rfqw1yzcqrc156snzd6lg";
+"identkey.doc-0.1.0"="dfw1x4sgvqa7rc3h3jxyz2c08vn2mxqd";
+"idxcmds-0.2c"="gh879f4j62vmymyiag89if5k6slra032";
+"idxcmds.doc-0.2c"="040nd6hmrhvhw3nkwikr2s1b2wzw9a8x";
+"idxlayout-0.4d"="klk75b8291j9b1j1irbn1xai2m9712vv";
+"idxlayout.doc-0.4d"="a8i9vf4rlscys8ig0gls0kllahrf7f9m";
+"idxlayout.source-0.4d"="nn6h2msgyj85inpa4gz3qx4da741hi7y";
+"iffont-1.0.0"="xr9jmyz2563jc2nwrr9ykh040dxjad2l";
+"iffont.doc-1.0.0"="4jm8bvp06wm88695jhggd5rhjfv7qk0q";
+"iffont.source-1.0.0"="rrjx3hqrjff5bc8hk99ddxxpbhqqfy3b";
+"ifmslide-0.47"="i0psadvk32l38kx0i47avl03cg76bx8z";
+"ifmslide.doc-0.47"="d44i3i8nx1if9h04xjv0mb781ybyryc8";
+"ifnextok-0.3"="1nss6fp77hcggpr87drfbmggs6fg0riq";
+"ifnextok.doc-0.3"="mwvvllpwbmdhqiwp684hkdk5aw24pgyd";
+"ifnextok.source-0.3"="kcv0c25ga9bls8bpf3qccb8fsarwics3";
+"ifoddpage-1.1"="6f52apknfsjpswzikk3nfi9by5iip7gy";
+"ifoddpage.doc-1.1"="7l75021f0gk7nrpiq2axr88pbnzjq50g";
+"ifoddpage.source-1.1"="njqd27ax6313q2w063xbmw3mnfiajx98";
+"ifthenx-0.1a"="2ah86wn9m3zc1f7hf1yzwyv26xbay35s";
+"ifthenx.doc-0.1a"="2zrlnl6s8fbs3ndyfi21bdqsfx7n6fc6";
+"iitem-1.0"="k0gdz2py6spiqrj4djhwbys9vkar3p88";
+"iitem.doc-1.0"="19wnj2spnjlvhb09y4i52wzix4wwyz6m";
+"iitem.source-1.0"="8xp0919wakx5r9xd21mbm4qwvd0l66fv";
+"image-gallery-1.0j"="3skl1kln38c9g31pa8sbx370kw4jp23r";
+"image-gallery.doc-1.0j"="gq0ngnivnwh35m29qimn54l0gigv79fx";
+"imakeidx-1.3e"="vgspaw7w4kjbm38vzdga08j12aaqf3ad";
+"imakeidx.doc-1.3e"="p39pl4z0xkr2029czqq9nkaxz3dwdypx";
+"imakeidx.source-1.3e"="cn51y6d129cc0kzw3yx3ybziwmxy9mbs";
+"import-5.1"="7i3h4z647jmm3scb0nringfljzk9vv6z";
+"import.doc-5.1"="0sl784aip6r53fdas8xyqhjz5vcs6xpd";
+"incgraph-1.12"="n14gyn5g1am9dyfqvxyxrqsfxdkg39xv";
+"incgraph.doc-1.12"="sp235w68gh5k1d4xg2cxv7dadyjwqyiv";
+"indextools-1.5.1"="sb2fdlrh7xlfhd61g9n3h3s9if9n6wm0";
+"indextools.doc-1.5.1"="1cfxahy568ikv2iwp5kk1dh9ffsi32r2";
+"indextools.source-1.5.1"="dj4fjqppc6d1qnz11p20dgbs258gj25c";
+"inline-images-1.0"="7g2ci2kiwk28qcj7qmphxs93fpmk9jyp";
+"inline-images.doc-1.0"="043q0hshgzprif0a5pvlmxnmidk8zp9g";
+"inlinedef-1.0"="x9ayxzl60mwgv8w3ispv1xc3qxwylij4";
+"inlinedef.doc-1.0"="g5fqhrp1vf6pky2wq3bq1hd2h0jrml8w";
+"inlinedef.source-1.0"="c5qr2b5029bkpgqhahv4licfp89l0k9v";
+"inputtrc-0.3"="vmk80jzg9sllpw28csmhsyjd13amp567";
+"inputtrc.doc-0.3"="dl0qs37bjj4aam7ijfdg64fpl135k7b4";
+"inputtrc.source-0.3"="1nx2jv4m63gc83iy3qp46gxr3v6wyw6h";
+"interactiveworkbook-2019"="4a6mi66i2z1sjzxjddvwajpvxl6i2c6m";
+"interactiveworkbook.doc-2019"="ldph57php6irhdbj9w497xk31n5ggxbz";
+"interfaces-3.1"="pja00rv19b492fv0d1afkj1cmmi09wm4";
+"interfaces.doc-3.1"="bj6l95whavxkrsa5rb8791d2ib4n5gal";
+"interfaces.source-3.1"="f7gxq1s477zab7wh212nyad94kcdacqn";
+"intopdf-0.2.1"="n94n5ajyig2qix0wzfm6h501jygqgb69";
+"intopdf.doc-0.2.1"="hn0ynqp3jc0kqay69i2g7awlnc4fk9qa";
+"intopdf.source-0.2.1"="rkj6i3mfa1kqkhhdc03nrfcj9mfsy017";
+"inversepath-0.2"="8csfwygw95dd5wrawwj7hs4gmpxhdwd8";
+"inversepath.doc-0.2"="b3z6dkfmk19n96dklslzszn7vfrnlcn4";
+"inversepath.source-0.2"="zpg2i1sqr76xvi6jn5vrgxvs44dlfx9z";
+"invoice-2019"="bjzw59mdvxqc2fyc5mpqg964a041zi2m";
+"invoice.doc-2019"="4g5fd3ry648n0i7nbkrl4c8ln7rdbpp0";
+"invoice-class-1.0"="0hyhlrisqlng2zcs0l62d84r9i4g1hv1";
+"invoice-class.doc-1.0"="psxy04bnhh1y2v63pz89j5p4bl6b1q0c";
+"invoice2-2019"="x6kdjp7i7rgy4qqs8q0f7hv8bdnbs3h7";
+"invoice2.doc-2019"="cjarambfqlfz664z498dpi142ik5l12l";
+"invoice2.source-2019"="km7fcfxzdd9y5lvwyg4m729asqm04pcp";
+"iso-2.4"="p6yl8v4jyvzq5fh3qw31kgalhrv1qv22";
+"iso.doc-2.4"="xs5sw6aw59hr3xlk187dhwkg223vycsl";
+"iso.source-2.4"="vrgvl97kvsb6n82w4acm2wfjsqq00cxr";
+"iso10303-1.5"="0y5mrx8f05gl2brzky6gdgf0rzamfsxg";
+"iso10303.doc-1.5"="l6x3gviwqf8jkp2lwdy10ycp3577fk5f";
+"iso10303.source-1.5"="1ljgzik0791d8qdix5nd2151ahm67w1n";
+"isodate-2.28"="chng6rcfh1gy25mwsg30ynxkb87lxv0i";
+"isodate.doc-2.28"="mh1wrizl78fgn2xzqd5brm9hwb8zldhl";
+"isodate.source-2.28"="81a6l211jzdxbf84x0haybl0w0pifjag";
+"isodoc-1.10"="kkbx31k2jizwydv67ahh0zlm9iiard4n";
+"isodoc.doc-1.10"="ym2b7c1yar7h995m2ykrgrghf4i1h405";
+"isodoc.source-1.10"="618ibayyh4kp273h7jcl6zp8wl7i0mai";
+"isonums-1.0"="50diljpihfk6390ak54ml6gxg6h3qarr";
+"isonums.doc-1.0"="qbnvabarywnwbfaxqjr1afkic152hhsf";
+"isopt-0.01"="0gyj9ri30pid0xymfv457g9r0nycy6qm";
+"isopt.doc-0.01"="q8srwcqk4w0mblrqzpy70wbqqrds2k9c";
+"isorot-2019"="pzs5xd3c9n1m3r4m5g82702s0slq0kl8";
+"isorot.doc-2019"="760dh5j78kcgn2zxp6jhghmzxhyplavx";
+"isorot.source-2019"="35mi9l5bcbqmrixngyvb7g780ns0vjg5";
+"isotope-0.3"="paqbsfz0w4sl82imkw2zqsdwg3nlzd9c";
+"isotope.doc-0.3"="f5mylfd5fga3jy0fsdvw1z5kya7kcg6b";
+"isotope.source-0.3"="sc8npgj5397qvqwvfrz2bq51xj5840l4";
+"issuulinks-1.1"="lw4b111230hkhdif9xfvdrryks1cp8k0";
+"issuulinks.doc-1.1"="lcm1rfc9mcx3k7cn1ia3ldfwbv5r36kl";
+"issuulinks.source-1.1"="hmn5nsszd3vf27863sbk647fgfh5gxmd";
+"iwhdp-0.50"="j4m15vz6ky21yk2m95kjz1is1z91vxxy";
+"iwhdp.doc-0.50"="wphgycl74db9mxr5gjc2m80rbzkcqk3l";
+"jlabels-2019"="fw5il0bzwm10lj1ly8fjic2hjiqxnr7d";
+"jlabels.doc-2019"="fndgg419y1rp47d5qifv0k304b5iymab";
+"jslectureplanner-1.8"="il4ypbggr4s3kmmkk8rl3r9vjii1vq5i";
+"jslectureplanner.doc-1.8"="45ngl247v51dy6ikl597xj27rsmys39r";
+"jumplines-0.2"="acxl8nhlznvcwq20n01b41kamc5xmqdr";
+"jumplines.doc-0.2"="hjfl57a9hwdyf6lxl6ah0k7937r03jil";
+"jvlisting-0.7"="fi23ykvl6kw34qri5nz2k4mvgjqgbbyl";
+"jvlisting.doc-0.7"="gfsf50mnhfqjcqb8bmkfig0n86cmhngz";
+"jvlisting.source-0.7"="dj1g56jiw22kabhhvcdrrjipjnf17k4v";
+"kalendarium-1.0"="bspimin9i6nh58ywvqnyv6r72clzfkk1";
+"kalendarium.doc-1.0"="01figqd8r369s9mg4xbvc3kxl5xj3573";
+"kalendarium.source-1.0"="2fmwxzki8sxbf9a11zvb7sc31hmd2bjh";
+"kantlipsum-0.8a"="ss2zmvwx5537qf5vaagp2qgfmykzhwvr";
+"kantlipsum.doc-0.8a"="1xqs1p3ziyxd0snsgkda6kh23lynf28b";
+"kantlipsum.source-0.8a"="92ydj9wclk56jb03704gxqli8yl5i1rn";
+"kerntest-1.32"="r64kkdp6nnkv7qk07lm2p1943q0a92ci";
+"kerntest.doc-1.32"="2py5b3pyrnddfs5cmfp4fgbqd8wc9iag";
+"kerntest.source-1.32"="nfs63gz8wfhdslfiswngxdrdk2rpzijq";
+"keycommand-3.1415"="sq6188m8lc3wl201phjx2qh3vwxf2mrs";
+"keycommand.doc-3.1415"="q9lkdcggi17v7gl8hibk2qn5dm6h07f8";
+"keycommand.source-3.1415"="k1fa9w6r1n1qhz428ipwflj6d6m5ap7k";
+"keyfloat-2.01"="i54c7nljj82qg23f658l0il9xhhihs7r";
+"keyfloat.doc-2.01"="mgn9lp76baj3wl3dzfnpxibgr5ijb8z7";
+"keyfloat.source-2.01"="a5ch4v9hk9brflps5s5c0wxnqwka5rsv";
+"keyindex-1.0"="sirfzfwd3hv4flbwjkwp5ryf04mq916f";
+"keyindex.doc-1.0"="gcpzy4a5ga8k0jzymgrsl3j74q7cv1g5";
+"keyindex.source-1.0"="2ff7jyh03kkm38vsismhfcrawk29iwgk";
+"keyreader-0.5b"="wk5kgrrx4c8682j6a01n57ab33ww2j23";
+"keyreader.doc-0.5b"="fy37315azfr09wzl71wdby8ry1dd40yn";
+"keystroke-1.6"="vi7r9aac2w8jggbxpk5593nsapasmm18";
+"keystroke.doc-1.6"="rlm1i14lgk00yj7hn6mp2njdmjanh1q0";
+"keyval2e-0.0.2"="cbm4pby81d33ldf01h348daihf05hwd6";
+"keyval2e.doc-0.0.2"="7d1mpnzh474k9pc293lh8v94fmy5x6gv";
+"keyvaltable-2.0"="mzz0z6wwf1z2xqf1lpa6fnqr8zff2km5";
+"keyvaltable.doc-2.0"="8n9am1ijk6rjgq4yjn1zk1ijg7n1djdk";
+"keyvaltable.source-2.0"="milc53qz2f6bs1q71w1sd399sc2hzgf4";
+"kix-2019"="lzdrca007a0r5rsm8f14ljx6v8yyg8xz";
+"kix.doc-2019"="jallvk311vqcjc3wrkxqv03ckbc9k1gi";
+"knowledge-1.17"="jzaf04vppnpbyv7qm5wi2nbbbinzpidd";
+"knowledge.doc-1.17"="s9nfwj0hsd89pff5fck07415nmwjrw49";
+"knowledge.source-1.17"="nm6k8ka3b31n1s5qpfb345glvckh4zi5";
+"koma-moderncvclassic-0.5"="s33qvgji09s9glq93mdxzs3smnzlamv5";
+"koma-moderncvclassic.doc-0.5"="dvzcb032fmh5xs804d9mbx6q0afm25r0";
+"koma-script-sfs-1.0"="s9dryf4f0zgcij3v5v93zppqs876p2nq";
+"koma-script-sfs.doc-1.0"="dxm4lfz50b0635g2dg24lzp3fgnlvkgn";
+"komacv-1.1.1"="983485nkvn4jqxsh8mf8lsrlq6dqk6km";
+"komacv.doc-1.1.1"="sqdh6zbs97agsxd051w4g1m2b09hgmhr";
+"komacv.source-1.1.1"="1k5z0bk4hk2g1w88pmd3wgpdxal60qwi";
+"komacv-rg-0.9.2"="s43v41by7cw43381iawl42i7513xq7pw";
+"komacv-rg.doc-0.9.2"="qpqxvjp39fdy972w045kk3kv1b3glxpq";
+"komacv-rg.source-0.9.2"="zbnh158n30miz9kj39sp44jn4hmdrabf";
+"ktv-texdata-05.34"="fdwnms9v43cjsjypsnlq6rw1j3c6zz93";
+"ktv-texdata.doc-05.34"="896wnbqpxncc640x8rsi6gia2wh5njxg";
+"ktv-texdata.source-05.34"="7wq3pi1mm3r1g209vq31im4n4ib21zv2";
+"l3build-2019"="8wc83ggd24fk8v0bz9i9ivsqm4qi3gyc";
+"l3build.doc-2019"="6616ck8x996xzyzglkb19yxlpcwhz277";
+"l3build.source-2019"="3r6xmyyxx377qaymni53x9my9jlil96p";
+"labbook-2019"="x7i28cyfski7ssm9hv28zrlac3inky0c";
+"labbook.doc-2019"="5qs95wc8ms4162nwd7q4lvh7rc62s2h4";
+"labbook.source-2019"="rrybnds4laxyariqq5c2sh1zm9jzvk7f";
+"labels-.13"="rxcv9zw5jal0kr4kw0vlswjc87clgh8p";
+"labels.doc-.13"="70hfinn9fsd8r14bk23fmdc0px7n4x5w";
+"labels.source-.13"="7hps59wlxkqqjm9432dg15ml63n44x3g";
+"labels4easylist-1.0"="xwh50hw724p6mkm7fb061dacids7g0sw";
+"labels4easylist.doc-1.0"="pkwghiybi57r0kdiyzcml7fas0izi1lm";
+"labelschanged-1.0"="k8z64p2cxhizszln06g5736zvf3m4d6z";
+"labelschanged.doc-1.0"="f1g5fxmi61q5an38k6g63gwc93znisyb";
+"labelschanged.source-1.0"="208xinzlpnpsqb3yvh98p02kmn34ai6x";
+"lastpackage-0.1"="mxy23m1fcp4gsypc3mj9327zcvpa36r6";
+"lastpackage.doc-0.1"="940qvlc9v5kaj9s7w6xyjh87l9rqc22q";
+"lastpackage.source-0.1"="g1zqchhc12fw8ja7a8raqrwcyjc1y10z";
+"lastpage-1.2m"="i37ji3jp95j287rx34q4yajih7w1riy4";
+"lastpage.doc-1.2m"="jc40pwdbysv03k1wx113f2q0j8xf54dr";
+"lastpage.source-1.2m"="gika2qk64lahh4l6c6pn76r5l57rspf8";
+"latex-amsmath-dev-2019-10-01_pre-release_3"="w0zy9ffcyvsy57nxzljs8sbvpg81nyrj";
+"latex-amsmath-dev.doc-2019-10-01_pre-release_3"="rns9wjinm96w81jqws8vm8vh01gbcgxc";
+"latex-amsmath-dev.source-2019-10-01_pre-release_3"="vkxw7zkbaxm8ckhivs6x7s6k67janhla";
+"latex-bin-dev.doc-2019"="p4hj5yxinc2kx0b2nxr0k6ilp2ff68m3";
+"latex-graphics-dev-2019-10-01_pre-release_3"="cr3l1n4pzgpnasvww1fsjrwkys9vbi5s";
+"latex-graphics-dev.doc-2019-10-01_pre-release_3"="by2x3v4sj3q3x7d6ikh4qjcnbg08ijpb";
+"latex-graphics-dev.source-2019-10-01_pre-release_3"="pcgrxh27rqadh06cmkb93km85pni9vi7";
+"latex-tds.doc-2019"="m38f5gncr9c56sg2cjs0mfgd57wik7pd";
+"latex-tds.source-2019"="xdigsidx76bs121jl0m42wavzf4y88qj";
+"latex-tools-dev-2019-10-01_pre-release_3"="v5mx5x2aaira12nv4kr81sjnjfkc5hzi";
+"latex-tools-dev.doc-2019-10-01_pre-release_3"="1k8s4liivw1mgrvkvf0jbmcj2kcd2p97";
+"latex-tools-dev.source-2019-10-01_pre-release_3"="r6rm1vjpnfxpzpqvq89flj6lnmf34z63";
+"latex-uni8-0.03"="kh4gfpkynq6f2aqg9r3wfp4b75wd3zaz";
+"latex-uni8.doc-0.03"="qany361f2byfy4p1jsbwr4za45x5j74a";
+"latexcolors-0.1a"="0izwkzw8h2rqlgnl9dsn2zwm0z2wczch";
+"latexcolors.doc-0.1a"="3z4r2mn88jvwrj6rvicgzclizjk3g12n";
+"latexcolors.source-0.1a"="2wmjahbpsyfq2fgnx6aixpg9a4dvd41c";
+"latexdemo-0.1"="qjb630j87mqsczjbhvjgr4a187rg6wzy";
+"latexdemo.doc-0.1"="p14qs32q48w1f8fq0xmwz1maiijhw44z";
+"latexdemo.source-0.1"="vldkpqrsdaa84s356w6nd5a0q0gv40ki";
+"latexgit-2019"="fymcvzwl1sl173r3jgf0298hxzrv66fa";
+"latexgit.doc-2019"="sxi90m4zcf03fym5d2mmyycd9p8f1k0l";
+"latexgit.source-2019"="jgvdi7lnqw37v9c4w7ybl5424sxkzgsf";
+"layouts-2.6d"="j5bph4p5drbgidk6k74k72n6ckzin1qq";
+"layouts.doc-2.6d"="4440l4n1kwphf99pkms09mk8ilbyd416";
+"layouts.source-2.6d"="hay5rjr1crxj98zqj1qm841dkxx55azg";
+"lazylist-1.0a"="324xcbk0vwjfa3950djx17shj5n6xfw5";
+"lazylist.doc-1.0a"="mkdn2aw3hnqpp82l0jdl1jrhca2206ff";
+"lccaps-1.0"="i30xx77l0zxdx1md96pjk4dxpgngj85a";
+"lccaps.doc-1.0"="xibcr632dg2910y05bcl4ysvwgqy7s6g";
+"lccaps.source-1.0"="nni2x4jc8dkmrwa7avbdjjlbabp460hp";
+"lcd-0.3"="y4w0h69pzqkm3wjglzy7qmsg9rrpnx2w";
+"lcd.doc-0.3"="m0l7k241a9i8ny8gky3d3v3b1srlccx0";
+"lcd.source-0.3"="xgvspw8xx0020zl9pl44sbg7fk2ifvsc";
+"lcg-1.3"="idrfim5pvwkppfnrz7mla3m0k1raw0il";
+"lcg.doc-1.3"="wscv34jlkglix6yr8c8c52j6v8qx0wi0";
+"lcg.source-1.3"="9k1mwlgj1bxhbpz75lh4vbhjmxs51qai";
+"leading-0.3"="m10kyvg2pjysh33gajn8a8hisfc74ii1";
+"leading.doc-0.3"="5bc58zdia3qp0742p1hwmxaw13qdgnxw";
+"leading.source-0.3"="ks8sv07mg6n12g60aj3s33siha865chp";
+"leaflet-1.1b"="jaqjjxvh2wb6bg7c608cn6rg9d67pkv4";
+"leaflet.doc-1.1b"="5vgkqz1bw0qlxzz5fczsqf873dqsq50g";
+"leaflet.source-1.1b"="l8g4n75f5d85dj4mfwbrc19bh87jzr81";
+"lectures-1.0.2"="gxziq0f4bcy0q1r02gqc3z63z918mqz9";
+"lectures.doc-1.0.2"="93h48qv5h0c9g3v4ga95d3cmcml595qr";
+"leftidx-2019"="d2q1jibnbyjk72phsf6yj7nxj9l37fvh";
+"leftidx.doc-2019"="db75s45b0v3lqkw9dx09m7zs7zhmng7y";
+"leftidx.source-2019"="whmdclngd2dpahpsmz5s3rahk1bvf7sq";
+"leipzig-2.2"="d4y64gbg2q9mjk2jqz46gqci27vci5lv";
+"leipzig.doc-2.2"="k6ba3ddz4vbnpv99g8nvfia1gj12rib7";
+"leipzig.source-2.2"="ld4r216825mz68j1yz211xlrmzfgblpy";
+"lengthconvert-1.0a"="7rfvx4n625g3rwinbxci25b0xpxrb2sk";
+"lengthconvert.doc-1.0a"="ngl9jfvcplmd9z7kwzfd90m45jp9lbpc";
+"lengthconvert.source-1.0a"="r2lh184znd42l741g816y2ljrsrbncha";
+"lettre-3.000"="cji81arz9mmmd0n31k9zh7pacq0w7df5";
+"lettre.doc-3.000"="szid42pk7qyrimafvma6z62407npv9dj";
+"lettrine-2.22"="i1qjxblg0abxqhgkij7fqy7d0iy69a1w";
+"lettrine.doc-2.22"="ddf39gxbshfml5bb511g6ajbax9f3i5f";
+"lettrine.source-2.22"="lyl09j8cffrs75l9awk4i3254vpaxmbj";
+"lewis-0.1"="dc7cw320gc531z7m47z3pgby0zl5l6nj";
+"lewis.doc-0.1"="di515hv7q93g3mb76d9i4xdm7v35qabs";
+"lhelp-2.0"="47yixr326p1aaxdfbc8y8f051yk4blfs";
+"lhelp.doc-2.0"="drv0y9qml4fw44zmyx91gddbsrlv9x5l";
+"lhelp.source-2.0"="5z2hrf88v8ydgl2savdn68ial9zy6i4b";
+"libgreek-1.0"="dsf5z1fq4y0agzyyv6yi0vjwl233d8d4";
+"libgreek.doc-1.0"="g2bs55qw4b3caw4paxrnapy67n0ha9ri";
+"libgreek.source-1.0"="1fzq025r679gwbakqw9av95ycxj5zlmp";
+"limap-2.2"="kv5hncahb5nmmvrk1rn9j6ikj5i0qvs3";
+"limap.doc-2.2"="531jnlrzb50nsqzbm0amybf98crl0l7f";
+"limap.source-2.2"="djbm84g3cwpypc44slyscyacm1wmpl7n";
+"linegoal-2.9"="amvia15hibyyc6n80wx6lzsdg3rk8h4p";
+"linegoal.doc-2.9"="inrrzzhlascib9kbyjxs4f34xkj6djcg";
+"linegoal.source-2.9"="9207gnjmj07pywp2ikhjhnk6am2i2r1l";
+"linop-0.1"="jspi9l83p1rpndkj55ypbqc1g2myf220";
+"linop.doc-0.1"="l4gampl4ib7ld5pcys9sdw5v5r5x4zfy";
+"lipsum-2.2"="m2fds1xlwhj512drmz8rj9lh85qdxjz4";
+"lipsum.doc-2.2"="j1y176c65m40zhlw99mcjjpn1y3l6zwq";
+"lipsum.source-2.2"="z61av7anz8qrnh2p6k99ic8511sh11ir";
+"lisp-on-tex-2.0"="8a4xfpnjajjpck9c9i6qp72r08priknp";
+"lisp-on-tex.doc-2.0"="ppwjpd8djndd49xh2faspmpial9qy8b9";
+"listing-1.2"="y8ymrx2bxzhz1l0lkjb2nhk6j97q9v09";
+"listing.doc-1.2"="i5bgnc303kwqnzkxr7yn0938y0h2nwpl";
+"listlbls-1.03"="hmdaqr5466rlpkkrq78d4p5rfzm4fyxa";
+"listlbls.doc-1.03"="gmdiwdbadf66b6cchmxv1swlngdw6y5g";
+"listlbls.source-1.03"="8l3lzr022qmx9pw4jgp1n2fkacyl94vb";
+"listliketab-2019"="8d6nwla5nj3m47r2nw7pqhv5kpc9dlmf";
+"listliketab.doc-2019"="7j02b3ng311y78pw6k0q4zjya5gs7zhz";
+"listliketab.source-2019"="vk9ar9i94brrf3csjh9ncp2r5z48glwc";
+"listofsymbols-0.2"="9xg173d0qs233kqf04vm7qdl7ajha3w2";
+"listofsymbols.doc-0.2"="4vhmgkz6wrk2ad9bnzdv3sv3ii1np14p";
+"listofsymbols.source-0.2"="4g49piirj1spdl9hg02n9m1c8b5ql1k5";
+"lkproof-3.1"="ai3j1kpzr6ywlw9hfi3q3ld529kkzbkj";
+"lkproof.doc-3.1"="4h957l6vwp6v4x84ail94w3bfm8yc83l";
+"lmake-1.0"="hwb5nrisk72922zx1v5nqy8kcdqlgg0w";
+"lmake.doc-1.0"="hgdq7lwfi842pcpbk9dvxah687hawzj0";
+"lmake.source-1.0"="0cxjrqd9rysw8s4x0qk34yf1bczg8hj9";
+"locality-0.2"="mr4032njdjyscsy5p9xax5lw5kdbhnnq";
+"locality.doc-0.2"="98r82nbryc9zf5xyhwfnbkgrcybf7fr5";
+"locality.source-0.2"="4g29gqbn9n7kp36x0s44211p8bbmcfi6";
+"localloc-2019"="jjmgwbaj9v9503wkm5x3mr008f3llvls";
+"localloc.doc-2019"="jn8x4qwci949zci0bk1ldrkr192kasgb";
+"localloc.source-2019"="2hhfkp3qb0p6qphv2fq5cyigyrx41iah";
+"logbox-1.0"="6hm79ady9adc3i3c4p0jzmx7fwavbzqj";
+"logbox.doc-1.0"="mxpkm6s6x6zngdy8jgj801vhq3h7mlxr";
+"logbox.source-1.0"="a1q1w9s8pj9aqshkyla8cc1p3g2z9w8z";
+"logical-markup-utils-2019"="zbnw20yl4fjaj4vfmqa5zp4146yq2a84";
+"logical-markup-utils.doc-2019"="gwklf7w5nqlxiwy7avg5nwx514l2ryaz";
+"logpap-0.6"="dhd61y6riva220cjnb193v9cjbjz33bi";
+"logpap.doc-0.6"="pps9ipn239h1vw0d8p2jlzbkmcd12czb";
+"logpap.source-0.6"="6y6gv7qgh503f3n8zrpqddyghkdvzngh";
+"longfbox-1.0"="vdrqzc7ja3xh9hskvq6wby57ijnh8lhb";
+"longfbox.doc-1.0"="z165w26x5hp514f8pgb0v6cm5q1dxaz7";
+"longfigure-1.0"="1s3wdjf4wsjyp8a532a5nnaj2mkdrlsj";
+"longfigure.doc-1.0"="n4m39wdyv2i8lhgwd5756c9yv6hi33xv";
+"longfigure.source-1.0"="9rc80adbzmk2jiw5si7arqfshwg7a74p";
+"longnamefilelist-0.2"="dlicjdpj09c3dhzxv5pvfgw1029rxdrw";
+"longnamefilelist.doc-0.2"="46hypvsg0xpnil02lk942lnp3d22rvdw";
+"longnamefilelist.source-0.2"="3ph503yw35mliqir4k60hv3i8lah3q7v";
+"loops-1.3"="0f0xz58wdvx6cvkynx3xmyxm08x823jh";
+"loops.doc-1.3"="6v1ghg77l3nrab23by4cwqwr014jjwq6";
+"lsc-2019"="m875c3d6lpgh92sym2hav1n0lll6f7nz";
+"lsc.doc-2019"="ajdphikngmbihczhfyarwa94i9r3mg6p";
+"lstaddons-0.1"="n797dx657x03zpkhb1fc2ygd0ppb023g";
+"lstaddons.doc-0.1"="w57l66903jqsb827q96f05as16fr5wf2";
+"lstaddons.source-0.1"="35c9b9n0qi3rjl2gg9dr158v21rh5cq6";
+"lstfiracode-0.1c"="a9nrlvnis7an4vp9jj832x1ipd9khx85";
+"lstfiracode.doc-0.1c"="v72i91x2f5snvhavl0mqcad2v30xgdka";
+"lt3graph-0.1.9"="j25yxznhs8n6c6yl1bf24mvx202av5vy";
+"lt3graph.doc-0.1.9"="zj5lqwnd7mm5rv3ply8l4y8jabfcq41g";
+"ltablex-1.1"="a9hh7jiwaw9k0zkmb5yy7halay61g1x9";
+"ltablex.doc-1.1"="40lyll74mnj18w4fn69a2gnan846v4s6";
+"ltabptch-1.74d"="z6ikfwfzq7wsnnr6acv0fnqmvq37cbnn";
+"ltabptch.doc-1.74d"="aa6psxhjpb4n2cn73asiqnycv9g5gnis";
+"ltxdockit-1.2d"="md2zz844hk8w5jirc633l6jzix82dlwd";
+"ltxdockit.doc-1.2d"="v442rbm6y5ncm6ijzx9b7xwdf0dx28pg";
+"ltxguidex-0.2.0"="jzi1r13lc3pbhbls5h7gy05qa8g5jndi";
+"ltxguidex.doc-0.2.0"="qkxvrhpcm2p78bh4qbp6aik46d1ribgr";
+"ltxindex-0.1c"="1lys1zfka0z2qjnwj8ghak8xhzkzh4bw";
+"ltxindex.doc-0.1c"="90k7xf0b9qiawqf4nm4fx5hkacx33ymz";
+"ltxindex.source-0.1c"="x9ifr8r7ihl5yh8y7sbpxz2hc2y296g6";
+"ltxkeys-0.0.3c"="kg0228ksc3vh9js3bgknkciga0dgip2c";
+"ltxkeys.doc-0.0.3c"="27k3rl3wvxk8a7qys8lmk2vzsgck80a9";
+"ltxnew-1.3"="xap2rn5bk0pjdrpyvfi47zad1i2r0jf6";
+"ltxnew.doc-1.3"="2j8nvnzdjxan23jrky53h6aj3bcn34z2";
+"ltxnew.source-1.3"="30hsnd2yrpqdqxczsza02v4rkqa4fiwa";
+"ltxtools-0.0.1a"="xml1xbh8w9gqi8gim7wps9vmadhmrf3r";
+"ltxtools.doc-0.0.1a"="hdmpfrkdycgs0qh3mcxgydcscilacfr0";
+"lua-check-hyphen-0.7a"="9lmqby4bc5pcfbfib7f45742x7jcxjmx";
+"lua-check-hyphen.doc-0.7a"="36n5ni2jzkydxwi4x4akv21109y0qmsy";
+"luatodonotes-0.4"="pn42k5rx83hibk0aayaydb2z0zkfi1al";
+"luatodonotes.doc-0.4"="9615fx7r9nlvlld7jn47jlgb380jmrxf";
+"luatodonotes.source-0.4"="k8919986lx5jwq3qmwyjpg62qjjpa9gw";
+"macroswap-1.1"="19xdcyrfd1z77ld3isdzxjhvsijifmk3";
+"macroswap.doc-1.1"="dkpw0kw0a0d8cwp237xy5c1a9ab0s0p3";
+"macroswap.source-1.1"="wirvpfkv8zjyqghlabclnvnmb4w8i2rh";
+"magaz-0.4"="zd02izsnb56wz1wcfqfj6p9p7pycwd3g";
+"magaz.doc-0.4"="cdylbzidxq2abda3np8ia16m3lbga9w3";
+"mailing-2019"="4v4vxr5i84yphwj7ff6s3vi0n2wx1jaj";
+"mailing.doc-2019"="fw87jd6gkc88g5a5z17gm7fw3nk6pana";
+"mailing.source-2019"="1zmcm4sg1p3vlgb76yf7gz0ds1958s6b";
+"mailmerge-1.0"="6zixn5f5rjq4fd65bbhkzwgijfhw262i";
+"mailmerge.doc-1.0"="wpim80lnxbf01an1ds6ksasm2271f54w";
+"mailmerge.source-1.0"="00r71m4cliyz9870yfxd5nl0b7b2px0r";
+"makebarcode-1.0"="m3wi7hglpq3ajgldkjipnddl56z1cp09";
+"makebarcode.doc-1.0"="29bd2af0rk7bdy7yiphxjy2x4ixpy9wh";
+"makebase-0.2"="hzw2dp6xmjzjblgbzm1j6qqmbayvzzlw";
+"makebase.doc-0.2"="0nnwh21wv9zl6cvf8a8h123ssys0p9ih";
+"makebase.source-0.2"="nrvlr5z3iwf8w7hy0fja6vki9l1xknby";
+"makebox-0.1"="iqvm1iwwrpnrdyjam0ca2wl6s2n02sx6";
+"makebox.doc-0.1"="i5bdjmv81skcvjjzy4yq8p2cim2vnmm8";
+"makebox.source-0.1"="v8lsifwcglwjacxij0kak54028h7gqrh";
+"makecell-0.1e"="073c9wfpc83jhcbkmjlkpfbpmy082xyv";
+"makecell.doc-0.1e"="irl3sf564yjdnx538vbqbw6ji0x65m56";
+"makecell.source-0.1e"="qaw6f6hmvj4125v30wr0drnlq0piim3k";
+"makecirc-2019"="m4xbci3109krv6agm0nhvry9kd7wjs43";
+"makecirc.doc-2019"="w7jd6g686b8iqqbmyipml4c1rjry4bax";
+"makecookbook.doc-0.85"="jd6jxdslcigvj3gyxs8yy1wihycxq3hc";
+"makedtx-1.2"="1k3yp8ylmvcfx4xcf1kgmpnnrrin2nsk";
+"makedtx.doc-1.2"="shcl10mxk7f7g0i4y2n6fppjjs33g5i0";
+"makedtx.source-1.2"="blsivri3lnfa4grmk46wxlr2yz87djb4";
+"makeglos-2019"="6bgdfjbhxvfj2my954iinjp1xcxnyq4s";
+"makeglos.doc-2019"="g4w2560v1pxm38dj5dsb3irgijzh221g";
+"mandi-2.7.5"="bgfn2zpydmyjpm0n2j78szn4nkkqnksh";
+"mandi.doc-2.7.5"="72r085a0f5nrashgm2xjf5p6ba35c9cd";
+"mandi.source-2.7.5"="baa7wn0s0z61x610jb45s48l31bf49cv";
+"manfnt-2019"="1nl2yh0i4qbxg0js1q4h566vbhh9szlr";
+"manfnt.source-2019"="3vzdqcfcmcmi75xgy4787fqacrsa12ay";
+"manuscript-1.7"="h6a06qa8wdg942c9l85xk2drlc07k340";
+"manuscript.doc-1.7"="9lfydjsxnci0b6nfdmayjigm8gfvbiaf";
+"manuscript.source-1.7"="7s5sj7f198rxkggz1j96kk6fgr5s88ci";
+"manyind-2019"="2akaqcybgc3ia3f3cq8p54yhrj7krlfx";
+"manyind.doc-2019"="398kgdbdflmwqi38qcnbf3zgp08vskg3";
+"marginfit-1.1"="a1cpx8n1camjfznxf5lqcjfaaji46gq8";
+"marginfit.doc-1.1"="c5rk8f7ac1xi00rz2xkh708s242wzfq8";
+"marginfit.source-1.1"="r5a53yzalhc6gmbsxk9z7bba5ns0552k";
+"marginfix-1.1"="00sy5lr6gy3r8nvfqk6pry6rcipvkvpk";
+"marginfix.doc-1.1"="hfaiqs9h55v4c896b6grnhj4xaqsawhz";
+"marginfix.source-1.1"="18sbg2vngagcka14wdl3xsx9iwy08q2a";
+"marginnote-1.4b"="98qa9kfiaiw6lbm0jsblq68vxla8a3z2";
+"marginnote.doc-1.4b"="k5mxj5j1ws3q1a71fj9k4f06n7vrj49h";
+"marginnote.source-1.4b"="i33692nz19pddmvmqw20xx3i04grxn7l";
+"markdown-2.8.1"="857g34dfh6sky0nplxyizbzlhdi0z27z";
+"markdown.doc-2.8.1"="f3vabnl8ksy6dgzwa8s634vbgkdbzcpn";
+"markdown.source-2.8.1"="33k7j1wd4xa734dirk10hnr1mnic27m4";
+"mathalpha-1.13"="wig82v4kfp76z48x8ipcl3i6p97j41j4";
+"mathalpha.doc-1.13"="8zibbm7ga8nk6dcbdvgp3f4xw13r19ml";
+"mathastext-1.3v"="161mdckabl225lz8zx3brlmqj6cil7fw";
+"mathastext.doc-1.3v"="vhrz7s8n2j5hibbi7vhvfccgd3n0jblc";
+"mathastext.source-1.3v"="x3xdyvnjld16m2whcxicd5xgisgwjnnc";
+"mathexam-1.00"="4rhl11na8mqzbl9l7wjk53fdhdpzbgih";
+"mathexam.doc-1.00"="7bhcdnalaakml3rx50sgb0799b9883cp";
+"mathexam.source-1.00"="mcs3csvr3ayvjijs6sh67mk0mrp5zawc";
+"mathfam256-0.3"="287n8w4s9f9mhsk4p0cqr37kyqnf1p7c";
+"mathfam256.doc-0.3"="7sw3j4828k471777g3d0k6yqdikb0kmv";
+"mathfont-1.5"="a3lyw4n90ss5ylg91al5xxzk329nssh5";
+"mathfont.doc-1.5"="vkq2r9ayv1w3jdg7nd84v7v9mj1irg2b";
+"mathfont.source-1.5"="w5ggsvnqi8gmdc39163066p9kzd7ra33";
+"maybemath-2019"="b7n8bgmz0vizghas19svaf1asi7633ck";
+"maybemath.doc-2019"="7scmh5q3xpjd6gdlq07kf59sn5bbflxc";
+"mcaption-3.0"="bxgcc1lkr9p5ghd80mh2ixnc1g4g49f5";
+"mcaption.doc-3.0"="mzbfyspjjjq3mhm2m06jmf9fic78i6bm";
+"mcaption.source-3.0"="ix6v7ldrgqw2kyb8mxppiw47p1fsxj29";
+"mceinleger-2019"="n5kag86y4a1q3m4d2kgc1k4xbbchv1hk";
+"mceinleger.doc-2019"="g3ldzbnb7jl4ii7pvc518va6x8ahlrh1";
+"mcexam-0.4"="3r3kn0mpzsx4p8scl2zf57sj54q6q6n8";
+"mcexam.doc-0.4"="c2hpirn5sl7m6cdf7mw66l7nrpcmz1i9";
+"mcite-1.6"="q16a807pfbxbcqyw1s5f3vrj0yym2z86";
+"mcite.doc-1.6"="6ak2czh685l6gxam0p0vdl8blq8z260r";
+"mcite.source-1.6"="pjqx07klaqvpxxf8xqqgad92h8rgvkb5";
+"mciteplus-1.2"="gxg0f6vk8c4bqcr5zczmwhymnp2hj4md";
+"mciteplus.doc-1.2"="wjdym32052k8qm02dr13qhclbry9r3py";
+"mdframed-1.9b"="kc60c77k0qwqhdmpbk3r777k4q857jx1";
+"mdframed.doc-1.9b"="pr5d7iqc4akn0arxjl7ynqsl6dlh64sy";
+"mdframed.source-1.9b"="xnqih0l0zng5bmrjfrprr43k6l645kvi";
+"media9-1.03"="zkpx9kzlnm5bq9xahz8wi7iyfvbdc9ai";
+"media9.doc-1.03"="i4kyv3rsv14mh2irq1rk67c9b18a0br9";
+"media9.source-1.03"="mimlnbnnii15jzfyj0lc7qlvqh1yhd7a";
+"medstarbeamer-2019"="vplzcqcrgag8dvin3yj0prlcm9gsb2yh";
+"medstarbeamer.doc-2019"="7i4skhq9pj4k3aswbzbpjqqgdj0s69gd";
+"meetingmins-1.6"="d5x8znpkqcghi9lv4gby2l97smw6kddb";
+"meetingmins.doc-1.6"="mkxz4zi4a7rgq8sgwaqsc35n888gzs4g";
+"meetingmins.source-1.6"="5xridwnlmxkws7h293a1pg373mcb3gwv";
+"memexsupp-0.1"="7i8inx1l5wmljf6jil3zjiyfs6p4hqpg";
+"memexsupp.doc-0.1"="2rkln5mprxhm81v54jhd8a777h1n1bzz";
+"memory-1.2"="xbyqh88hgszrma77r32dzly4k928vwpd";
+"memory.doc-1.2"="97n5y37w8k1b1dghkjmdny2lgc2b0z4b";
+"memory.source-1.2"="xj785y1h8zncgikinri52ri4sp7av9cr";
+"mensa-tex-2019"="k0v2gr8sk5lxj658b62h6rnr3iwik4kk";
+"mensa-tex.doc-2019"="cbym06lj2jif90dpqddc2sl36glwlm6k";
+"menu-0.994"="601vvx1mrqc5l4ig4j65bq88yjzcc08g";
+"menu.doc-0.994"="s9wj7viflx78y49dbs3scapk5vslf5xg";
+"menu.source-0.994"="n1pq98wjrfr476cwy442c8l99n1k9f6s";
+"menukeys-1.5"="4paqhdrsa9n9vnlcih3lwbs7ig1cvpxb";
+"menukeys.doc-1.5"="vqip96fgdq26ypfs2xpp947qmjybxpxm";
+"menukeys.source-1.5"="g0i476r5ajhpj65sq4m3h92c236plbkw";
+"metalogox-1.00"="4xl37x2ng2chj7ds59rjkapvmk3fza5q";
+"metalogox.doc-1.00"="wk7qd75laf3wm5wqil70vsrcg1ch6q4n";
+"metalogox.source-1.00"="8yal3yny31s95vd72p10mybmkx7n11xy";
+"method-2.0b"="6lpy1619i1m75cvsi9c2vzjxbcs9ia5a";
+"method.doc-2.0b"="c54snw0hl1agj2fs4r3jqnk9gblxpvhp";
+"method.source-2.0b"="y3rnwdcn8d1zs9s74nsza1zscmfbskq5";
+"metre-1.0"="mf4m9vxkjfkwhv1fqjw051kfb5rz44ml";
+"metre.doc-1.0"="bd500sp1di947i1rll56h80k0pm6312x";
+"metre.source-1.0"="44qm1832z64vxp1kmj3fg5zyv1jvjpb7";
+"mfirstuc-2.06"="rlg93z5nq69rfqjka4r35zn2w20x7d6f";
+"mfirstuc.doc-2.06"="y1j1a3qry6bq4lyfji70sx5jca5kk7fh";
+"mfirstuc.source-2.06"="0w7yc9h4091i7h6ihm5h14ay0hvx5smm";
+"mftinc-1.0a"="ckn9lv76yrkzpbi965rl9zvgcqg8alzg";
+"mftinc.doc-1.0a"="2qb409wrm8pf6nj53fbf16pwjrp7h3n2";
+"mftinc.source-1.0a"="s4kaysarmk404dx4pf1xlanckix06jgg";
+"mi-solns-0.6"="m241psyf1fwkk0m99q9rnh37g08334wy";
+"mi-solns.doc-0.6"="wc29z0jqrzrln9g9lb3aqpbyf5nnf9c0";
+"mi-solns.source-0.6"="3jlnn2himx44zdaw0pb0zks3gxmqfhqn";
+"midpage-1.1a"="k6zlxyg3y73s0npss5d14nizzzf6bl27";
+"midpage.doc-1.1a"="7rbxbq2sy6h6lk25kl4sn2hfr87kjhcx";
+"minibox-0.2a"="4fhpgzi7wc6jh7n8rf2n9s0cpvljwwc9";
+"minibox.doc-0.2a"="sviimirqdwfgk14my3w0zr2qycccckf4";
+"minibox.source-0.2a"="q704gpig53qmnbsvy9kcwl6nm161nak7";
+"minidocument-1.0"="q06hnvnkj19habs189lgsx35srq63g3b";
+"minidocument.doc-1.0"="lccwy6b0j7z28w8zp9gsvassa240xc1p";
+"minidocument.source-1.0"="ksir0ia0gyc7qzr4pfjxzx2hcnzpc0b0";
+"minifp-0.96"="28njw4zhz6fagd3wwk7ybah5c6nx4lrc";
+"minifp.doc-0.96"="xci52b9lqvfx748z6y3a5f6spwqnc9qz";
+"minifp.source-0.96"="y3lmhlpkdcrix3kk3kv7rpqmnb9hlz56";
+"minipage-marginpar-0.2"="39mkfjhflkvby43487kqpwagi8mfb1dr";
+"minipage-marginpar.doc-0.2"="ca67m5ikd0ka529wbi2s22zq5r5cr648";
+"minipage-marginpar.source-0.2"="db4g8ckwnbk7pspwfz9jbvndnzqbmfdf";
+"minitoc-62"="nm22vk0d9n4qsxg30qdg670q2ary85qh";
+"minitoc.doc-62"="i5pyp0xwkd9601vjmmnmsdzhm23bpkfs";
+"minorrevision-1.1"="svc8nrmpcahd95mzyggc6vmpfhmd9917";
+"minorrevision.doc-1.1"="x12xlc4ja8ksnd9rpnic0c0hymj1sdwn";
+"minted-2.5"="4d3kkhjjlhqb1nmp43wwsrw3z0mv94xy";
+"minted.doc-2.5"="pf8yy80fj73nibdnljhlisc18cs1x1cw";
+"minted.source-2.5"="wl128ack6c90ij18fmvf27hnxm6y9gf6";
+"minutes-1.8f"="c864pfgi1a853n93jddnndgsp325sr1i";
+"minutes.doc-1.8f"="z3z8rxzrkwz7k6756b654v6wclx4f6rb";
+"minutes.source-1.8f"="w4skq6nprvgxhvqrf4xa2afccr1hsz6g";
+"mla-paper-2019"="7rh7dh7mzybc5wzzbibh1lc10kyc99p8";
+"mla-paper.doc-2019"="3csgrsb6bh3sbqdzfx6y84i7ph8lwnhc";
+"mlist-0.6a"="5yh180f4d4dsrfzin6cjmshad8w7fi6g";
+"mlist.doc-0.6a"="wqscsdlyx7zqyq1g5hcfcp0cs5w5dxxc";
+"mlist.source-0.6a"="hlnmvms7n3csa2v0ixwz82wp2dlc7jy1";
+"mmap-1.03"="3yv1ma0qa2qw6lnaq3q98g4blg5s287p";
+"mmap.doc-1.03"="w9894wmjjay6c52wks4i80cvk0baba2l";
+"mnotes-0.8"="n7d22a7hh42vdiy9j2mn0x3dw86s81gs";
+"mnotes.doc-0.8"="lk3cmdx93g8vl58b32qc9zdwl6c3mh2y";
+"mnotes.source-0.8"="cz8303fpgl3h17lvncqbpj1xz490waax";
+"moderncv-2.0.0"="879a5m6h3phx4dfiv0pkw5f5pvr49zgc";
+"moderncv.doc-2.0.0"="siyfv7qm8gbqwx21rqm1hq2l0fkq5zad";
+"modernposter-1.03.1"="hlb03arz5iv98iakvimihvcnb50zdf0k";
+"modernposter.doc-1.03.1"="qb4pglm91r4w85lbp7jdvgr8b9nqkmh4";
+"moderntimeline-0.10"="4vqk60zkhx4vk9d8h6mksfmhlxviw7z0";
+"moderntimeline.doc-0.10"="b5sac5b3hx1q2bigs27rp8s1xl128llc";
+"moderntimeline.source-0.10"="lj2nkwbz4d96ch7wlrvcx9i6anxkng6j";
+"modref-1.0"="66l3h642swhw1maq3gd0l3bc59dlb9f3";
+"modref.doc-1.0"="qywhydcrg4qw4lkxa2gkdqdzjzsjc0j0";
+"modref.source-1.0"="a362js5xq7a69k1zawmyfj9f4p6254v0";
+"modroman-1"="yvhwr314ymch4fhvr9zq8l1rsp3jfinn";
+"modroman.doc-1"="2is4g9r40gr23cy469q2vk2kjj2jbkm6";
+"modroman.source-1"="1kddwifbglz7hlhxndcrr28dfgd0bdy5";
+"modular-2019"="gp555cnfp2izjp81bg1l1aij466vcfxr";
+"modular.doc-2019"="5yxpl169qqnh3p4zhwx6glnagv6a210y";
+"monofill-0.2"="jnv36mj3w2vihnq2f17pbm1yzrz2176w";
+"monofill.doc-0.2"="gr0mhc8f2w3dnd9r6flqvq5yyb388h4p";
+"monofill.source-0.2"="gmdpp4qn9x5bxk24afqs4xg7vzvaqkp4";
+"moodle-0.5"="256bfwnph8m38q5y917zfs7fcwzlxijk";
+"moodle.doc-0.5"="574wp6sh5cnn4r3nggvpk1xv06fi2haw";
+"moodle.source-0.5"="y0njw4q1m03x2wd83d64ph0i3vha42rm";
+"moreenum-1.03"="q6a3sxik7whl9zif8j5bs1bgxcp611rr";
+"moreenum.doc-1.03"="f0vzqhha6bbsvwnsgq3ng5v4qg3vkbgr";
+"morefloats-1.0h"="dzx390854qkxvhcas8krahqfg2pkg93y";
+"morefloats.doc-1.0h"="fwyzwvgdmwqdsgl2lwyqxdq0mlbrhxsm";
+"morefloats.source-1.0h"="hvakfpqk8j2r6r4fmrrhx3lrncpb35l1";
+"morehype-r0.83"="7wdy8cw7wk428yy79ca20jlikk3q06ap";
+"morehype.doc-r0.83"="nbm1bmcdi42xn7nyf4p0nlgy5qsrx4iv";
+"morehype.source-r0.83"="wafhphln91wfmqcn7zz0gcpaan0lbz9n";
+"moresize-1.9"="mrny3a5x1zkhbxrfqi4px8izf62axxxv";
+"moresize.doc-1.9"="jgc4rbzb7qyx91k9k7m4mp05m0nhrvkr";
+"moresize.source-1.9"="pglcf851fgiqzx76kihws0c5r8c9gmhb";
+"moreverb-2.3a"="w1rxv8g11dkpi1zyfq7xblgjjwi2dkw6";
+"moreverb.doc-2.3a"="70m0wiik9lqc2r4pi4nrdmm0rsx9d8cp";
+"moreverb.source-2.3a"="zxqcx8a12s33gklfq4zv3mci70nimpir";
+"morewrites-2019"="phc3742cpyisr8i8b9r30w7x28kaydx5";
+"morewrites.doc-2019"="x9cccfv21238zfsfikbnap6a2fj2aymg";
+"morewrites.source-2019"="gg8427vc6r2im1y5n541imkgq909ds99";
+"movie15-2019"="c2vppl6yv82s4n3kqjfp75qby2rwfxkv";
+"movie15.doc-2019"="1kn8iwx5x1gc978p0gjj2rwy4ablkdvg";
+"mparhack-1.4"="5sq75r9p6laimfxiz9kl1j5cgplkzin7";
+"mparhack.doc-1.4"="6i835nghib094n03i095dc0p7zq30znm";
+"mparhack.source-1.4"="07xwzd4pvppkb7ywwzdrip3yk41d5wl0";
+"mpostinl-1.5"="vfsmfj1knm8zxs6nc42c7w82ja9mxx19";
+"mpostinl.doc-1.5"="zh5pgghk7s2m7ygn86zjdb08c26pabf8";
+"mpostinl.source-1.5"="jnx6qz5gxx4v0c93yb7f8n5lq2dj41hd";
+"msc-1.16"="fa7ja4f7a2qpc08q656711qdxlgsjqdq";
+"msc.doc-1.16"="b6mcb2izb71p267zcfhj3l0x7rc2sihf";
+"msg-0.51"="d74m4mhh3k9hmc4py38izy3n075f019r";
+"msg.doc-0.51"="3v872isrjh68l3j4i0bm86l2vk60vi7f";
+"msg.source-0.51"="gcmdjhil29pwakk8jdrf6zaxcp3w5ykw";
+"mslapa-2019"="xmci0mddxivrp23hxp50wnlyvl9kir04";
+"mslapa.doc-2019"="dpvra8ngic2ydqxs8y59zd0jffy2q4ai";
+"mtgreek-1.1+"="afbh9ydcsnf1k0c714ypmqrf0qjcas6a";
+"mtgreek.doc-1.1+"="pq9303jyrj7nq8rwgi5d7njbc2x3jn58";
+"mtgreek.source-1.1+"="6whrwjvzz5jrhirhgr7kymc3jczn2zmf";
+"multenum-2019"="f1d7s8hafvsk4dic8ss1cqdjqvn8dlih";
+"multenum.doc-2019"="w65nsjanh13fxbkwhiinwzyhq0ra2m54";
+"multiaudience-1.03"="dcqxnkwsqd6vyk9wnwmac5b832dzb4ns";
+"multiaudience.doc-1.03"="8z6mbzi6yyv5cmp6pn2fsg5vlagyrlwn";
+"multiaudience.source-1.03"="5v4r06mydnjvq7hksjgdqd17m47b0g1z";
+"multibbl-1.1"="7nvyshlsgfcmlxc0gdn8b353sc6g3qw2";
+"multibbl.doc-1.1"="isxh2fz1yaz86acvpcv8k1hmwnazck6m";
+"multibbl.source-1.1"="z6wbxacy1rzz1l7wx6ppi8dsbipvc5s0";
+"multicap-2019"="9ja1cljsr31lw6rjvph8gi154z8bpl8j";
+"multicap.doc-2019"="z17yw0id2vdhckvirlrq3npkdpxk5hrf";
+"multicap.source-2019"="yv4rw5hjfj5fj0xyh2p3glmz0887x105";
+"multicolrule-1.3"="afncpkm0813g4z2l1h905crz07w3i7ic";
+"multicolrule.doc-1.3"="wqck9ry78z83xfg10v90isv1yq3y89mv";
+"multicolrule.source-1.3"="i5i7mb07lirlvlf1y0nhgvcbpm8jhd1q";
+"multidef-1.10"="5wsklk9lvznmwisl7jyhiai2zz8iizhb";
+"multidef.doc-1.10"="sq7a72nhiyd5384dx9y6k1c72gl8ia2n";
+"multidef.source-1.10"="hx6fbjirp5gmpn9bglp0hcmmhdjn1rsb";
+"multienv-1.0"="r4q7rsyn58q4scrv790dn1jwy2l0w0c7";
+"multienv.doc-1.0"="jpvk0s1crqx5y739hr40ajzkc960mjr0";
+"multienv.source-1.0"="x75lc8vbar75g490rdpjplwi4fr41ff3";
+"multiexpand-1.5"="q49fs09lmw9s8bz91k2iis3q1sa5qnln";
+"multiexpand.doc-1.5"="98kgaaxbfnbhc7rvagk2w2qjscaymaji";
+"multiexpand.source-1.5"="88gj4rql48wvni5la1xbzrpyxcrm2dx4";
+"multilang-0.9b"="56lbpndclbci7ihkidrjqg1i1rb5d540";
+"multilang.doc-0.9b"="k2fcrbwx48nwwmwjb5sln2xfyv7ac03p";
+"multilang.source-0.9b"="26rcwx14xbk0zfwazm40ab76pkv6b1g1";
+"multirow-2.5"="cchqv2b096x37wbngyp264mm97vs78fh";
+"multirow.doc-2.5"="47q33df5nzraljqx9wrrrp8mrn5b417a";
+"multirow.source-2.5"="qq1b7khcjkxzvxr38hazkkl84wn3kw0k";
+"mversion-1.0.1"="7vpmmb88cjk92m2a2hz10cijkxf44bmy";
+"mversion.doc-1.0.1"="a2fx7phvl0i1nyhb5h0w6ld1n9kvcgcv";
+"mversion.source-1.0.1"="zhbd3j6kxsdyznx9haqqh4vk7b8nrl09";
+"mwe-0.5"="dx1fdq96hyssx4pssbww55fqwcx71nys";
+"mwe.doc-0.5"="777ybf035b85yxs1iliv0vs4rd1nzqrb";
+"mwe.source-0.5"="gbqq17i9rnxwh0r2wjg2pcp9x3jzwyql";
+"mycv-1.5.6"="am1khnlv1w5w9732q2azpsjqjp7xd96b";
+"mycv.doc-1.5.6"="gd3fqxrg0y28fw4093g50a9fl5qpb0l8";
+"mycv.source-1.5.6"="9jvb2232smja8fb39hlxnh813vlvs47v";
+"mylatexformat-3.4"="j9yz4p89ln68ra05iyl46vnsia9c2m83";
+"mylatexformat.doc-3.4"="jv51r001b567qdpj04srhpinqza2cbrx";
+"mylatexformat.source-3.4"="27n04f9m812jsgwpr47sk2k39anbk264";
+"nag-0.7"="zvdfnz7z0rgwmf5vpj3dg7l0p8xwaxl0";
+"nag.doc-0.7"="r9gmc719q62qdim96mzw2sm98vwxsdip";
+"nag.source-0.7"="rybplddhj3wzplms9knly5b4fpkny05d";
+"nameauth-3.2"="8mchkgj0v2f3qcvrya80vbx2c55gwjcq";
+"nameauth.doc-3.2"="hq4wywajcb2h28zy4alj8di8ap12c3r0";
+"nameauth.source-3.2"="g1p0ddh1x8g4w2qwc5kvj3p92g8s3js6";
+"namespc-2019"="6f7x6ldx008l8w5ziahgwl42hb5bws4k";
+"namespc.doc-2019"="6aqpn007i8s488j4qi8xhbx9zsyvafbs";
+"namespc.source-2019"="s5ws2rny22j23bqy5cn2mz23qn91ssfj";
+"ncclatex-1.5"="vyc62gppwksnghphh3fch8ac3wji38qv";
+"ncclatex.doc-1.5"="i5klzg6hjqk8gq73g7ck9za6arh58rwx";
+"needspace-1.3d"="n3bhzw4qj1q1pml8yw40q3p8nzncygia";
+"needspace.doc-1.3d"="p8ahld3my116ynhgip3xfgxd58n4w36v";
+"needspace.source-1.3d"="2i7mdcxrdh8p54l31qqcfsdbrwjfiw87";
+"nestquot-2019"="f9rwiwxi2xksi75wfwmsq9gmrj78scg4";
+"newcommand.doc-2.0"="cdy7kzxpazx56gc6a0s62nx1bq3x1kz3";
+"newenviron-1.0"="s27wb3f7q3qk5lv6ficrjs6kkxqal7hi";
+"newenviron.doc-1.0"="j20cd7xar8jxbx17dv9sqpsrck6cydd9";
+"newfile-1.0c"="fc360fhzp2yxcpssdvgwp1fi20w91k2b";
+"newfile.doc-1.0c"="4d3gk4w2jbh96d98qpjh7r329hb11c0l";
+"newfile.source-1.0c"="1dyv1z8dl3hlwd0x3d9jy6kvfyag3klx";
+"newlfm-9.4"="74aqk6qvmq6c226n5m6s0jgf1rb91712";
+"newlfm.doc-9.4"="snw60agnpwxi52h20anf911x3qx0509n";
+"newlfm.source-9.4"="kywnhr9air3kqjqa0hj0ij7605a50qbd";
+"newspaper-1.0"="sp89yvm13f900xrbsn6p097b4dspyxb2";
+"newspaper.doc-1.0"="7gjmij59wric29v4kbwyi0hxlhgkbnm9";
+"newspaper.source-1.0"="r8918czada36fb9bgzddaq9c4vaak5i5";
+"newunicodechar-1.2"="8wfz9yyzv5zphqrwp92i9cci08chh9gr";
+"newunicodechar.doc-1.2"="bj9wp3x1hqj0yfqa13yf7f21svm9sxmy";
+"newunicodechar.source-1.2"="mmv56hgbrkwxca2l3a4kxhpzmrjjm68m";
+"newvbtm-1.1"="2khz8c8b8a5946h97w2rf2gmp6z8wvh0";
+"newvbtm.doc-1.1"="y1rlqvpv8y77ns1a35q6raksa88qqdnd";
+"newvbtm.source-1.1"="1ws90wkmj308mz4qa3hham4mxm3lrl5i";
+"newverbs-1.4"="jbkq6pkmd32mg6g7h424ya7yl08xp15q";
+"newverbs.doc-1.4"="d9spa4vwjarb29jq6ipvrw07nsfbii8m";
+"newverbs.source-1.4"="ral3f0z7s70ir5lwjpjrms6zvxga01lj";
+"nextpage-1.1a"="b7b41bpr8zk2z6m5il51q9vxb3c8h67j";
+"nfssext-cfr-2019"="isp9rw94ck4a9ckl4b5hd8ma3cmlkdwd";
+"nfssext-cfr.doc-2019"="si6j8b4314s0gbnjxwymqbzcajclqn2w";
+"nicefilelist-0.7a"="crqgn906x51nq1d3z0s15f9kl29lbg3b";
+"nicefilelist.doc-0.7a"="a77wbb5ajkj4ab3dy1zzs3hchac77cwh";
+"nicefilelist.source-0.7a"="ng7drfgz7w69za7hmfzm4cv0m2awdx7l";
+"niceframe-1.1c"="dvds5bwfmca1phblf3jzzgj8rxq6va5g";
+"niceframe.doc-1.1c"="lkhliswdxfq68asjbrxal2k38311h9ld";
+"niceframe.source-1.1c"="qyrv98xhjmv852cmzrzrban7dj742n19";
+"nicetext-r0.67"="i3lvy4awa0igc272xv8mn7n4dfaxm9iq";
+"nicetext.doc-r0.67"="iacnv3pa0a676wy34s3s261ypjpcl9gd";
+"nicetext.source-r0.67"="6d0mm3ghwivk44g63875mpq6pafbll8b";
+"nidanfloat-2019"="f9691yflmmv0ziyfj4a65b186gj0ppn3";
+"nidanfloat.doc-2019"="h468vsrcmc06awhvkg8f3bgmc7dwsgy1";
+"nidanfloat.source-2019"="x92x0jk3ab50yd3gyjgqyb21iq0v7g6h";
+"nlctdoc-1.06"="2k3r9a400asfix3n8j3f7lgghr57imrb";
+"nlctdoc.doc-1.06"="3axalhgmiz8f9rikjwbkhckw0hshnpyk";
+"noconflict-1.0"="df9gs1xx7gymaadn2ji4dzir36z6r897";
+"noconflict.doc-1.0"="irvdqh1iyghgs73l3lv2jnrs2gj9jxcd";
+"noindentafter-0.2.2"="w1kg4gv0dpfak1s7xshs04ariccpnx0q";
+"noindentafter.doc-0.2.2"="d94gk5jrfmhpz7b1qha13wi8kmb73nf7";
+"noitcrul-0.2"="y2kmn4b9b37y79c739afhyhk7mindzih";
+"noitcrul.doc-0.2"="fz1jhgv1apc206vwzf1hc25pr5fhklhs";
+"noitcrul.source-0.2"="b8s8g15qwdsxm7ywvgj9g6307ws3hg0d";
+"nolbreaks-1.2"="1603r89wi8sninjv541na8k2islfk4sc";
+"nolbreaks.doc-1.2"="g0nm3i09kzxqqcrycrz2cak05d8qlvqs";
+"nomencl-5.2"="lad6j1wj5z0wibwn8bk1b8sy9hxrb06s";
+"nomencl.doc-5.2"="v9xv6v28mgs3nm7lhxa4xpyq4fkg2zza";
+"nomencl.source-5.2"="g5x54n8biskic2bwiwbwxpb45grxvkrs";
+"nomentbl-0.4"="k74vk3a9kl3sbrkmpyav1snh0cd16np9";
+"nomentbl.doc-0.4"="k2ggwchfqa253i96whp2lh4s3p8vbysk";
+"nomentbl.source-0.4"="al9s24x1ivpw91bbnn9sqrjp3rb5h0ni";
+"nonfloat-1.0"="yry0kys2irxfx7ril0qv6l7is7nm0fji";
+"nonfloat.doc-1.0"="yr85gza4l0wcybg4zwi004ndkl50p2ki";
+"nonfloat.source-1.0"="2zwd1bxb5niyr8higb5y2bipyqa7f3zn";
+"nonumonpart-1"="a121f2i1n005xp51qn642vx30ij74zgs";
+"nonumonpart.doc-1"="wcbvd9c2cv5ydbma4xxb6g2b2bihi0lh";
+"nonumonpart.source-1"="j2jy48jw8hgcs830h187s9rg85kd3rfa";
+"nopageno-2019"="59l05x89jv7q4mm7k73i06rmv467iimz";
+"nopageno.doc-2019"="bn5vq6kzp69p03pfjx9s34ckf4h3q6iq";
+"normalcolor-r11"="jfpqlz85fphm063mb51q9q2s61fcbnmh";
+"normalcolor.doc-r11"="vz9557sxw9c6l8m66aaagcv39x1vkfzz";
+"normalcolor.source-r11"="vs4y1p0zarr6nppqadcdcp03lc6nd2zd";
+"notes-1.0.1"="w3rp5aas5n6sks7d5j7b27s11zi4lx3v";
+"notes.doc-1.0.1"="hn20w72lj73didm46kkay056msa4cr8h";
+"notes.source-1.0.1"="23qrfsbbmyds189kcnq09jbmd23mi50f";
+"notespages-0.8.1"="3cx726w1pbmdiammpbzp0rmcahhza7p8";
+"notespages.doc-0.8.1"="rql7rmn1c85r1rb2jpmwd2h29m7b4gmx";
+"notespages.source-0.8.1"="sskq21wj4vhqyq8xzhrbsh7p8c701r7x";
+"notestex-1.0"="innwzn87vplj094lxw9w48ck6s5hmb5v";
+"notestex.doc-1.0"="p4lyxlar4125y9x3pb6sd5ysdn7w3vqr";
+"notoccite-2019"="ifpkassfd9j5926gsnq00954clc52sbv";
+"notoccite.doc-2019"="5ggqh1mvc03xgyipc6c49ssmlaywh83f";
+"nowidow-1.0"="hf3wjpkn1j2yksdl8mryssv6cxqjn3si";
+"nowidow.doc-1.0"="w1an9iayppa59h2iprjr515w8g72qkg5";
+"nowidow.source-1.0"="b6i3ypchipa228x0s6i66vrvf7zc3hgc";
+"nox-1.0"="dg0znk2gi1j87il21s7gnjpm79xv4plj";
+"nox.doc-1.0"="alyzx228zmwgpcrinv3xy6v569pcmq1r";
+"ntheorem-1.33"="2hhpj2gkad3jbmh0df7hhfy1nr39hkxs";
+"ntheorem.doc-1.33"="1ac6yj6f3c4brkgzy9xkwqmzhy2q2qy9";
+"ntheorem.source-1.33"="fc0wyfgjnckzqrd7lf3a4n6yvbhwaal8";
+"numberedblock-1.10"="x1wlbk0d8xbl0b3mx0bxgymc9jd3vv5y";
+"numberedblock.doc-1.10"="866z5if0xryr7mmi70any7p9l93f0d38";
+"numname-2019"="7gl7dp9c1wj7phv8ys39kxnarifbqfd2";
+"numname.doc-2019"="pfp7zzapdvlfbs9jd5vc2x977nxs3yfw";
+"numprint-1.39"="7fd6ja6vw3c7yg824y30xrqrmrk3qkwx";
+"numprint.doc-1.39"="bbfg2cyh8cykgl3zk9c53wk3q3vbb8pn";
+"numprint.source-1.39"="cr7xjw77r8h4bcjihxc68iraxd760gh2";
+"numspell-1.2"="xv0c8dxm8yncknrmarqy0nhjcqdaq8fv";
+"numspell.doc-1.2"="b6sfqk9wnbrg0l3p0hwff0nkskw13rcl";
+"ocg-p-0.4"="lxy3nprj8j37b2c7aylxzgm17221wscx";
+"ocg-p.doc-0.4"="qg16xjfjp36s3jxm1m75ln2nrl1rlama";
+"ocgx-0.5"="28p11v602hf9w9q1vynbf8fyhivbawl5";
+"ocgx.doc-0.5"="6vx8iiz0zfipwj45xrk1gv9cvifv4y1r";
+"ocgx.source-0.5"="5bm25s1rgsky2qc14nrgg6v3n0ywwcb6";
+"ocgx2-0.46"="sq7aihaxiwh0p6dpqay07a4li1sjm6fb";
+"ocgx2.doc-0.46"="mz25ry3c14482d7j33nwsxlx152fyaww";
+"ocr-latex-2019"="7mi6izsnwk6dksgmscyn45w72n1bgk2h";
+"ocr-latex.doc-2019"="9cz06542a64k4ns92qgkx1hzm5sd275w";
+"octavo-1.2"="fpv1fcrym9gplxjs0zsrrv4iziizqzxy";
+"octavo.doc-1.2"="wcd4cj4ihgmm1d0i36l66bf8dpw5cm58";
+"octavo.source-1.2"="30dsp7266fzc2l2kn98pqwwv6sdb75hr";
+"oldstyle-0.2"="3910vncyk04awikr4g0afgyfqa6dqxa3";
+"oldstyle.doc-0.2"="picdnpvv6c53j0mg8gn3l89c4ydph9s8";
+"oldstyle.source-0.2"="dwsgqd631bncikps4m9fvr7l7y428w5b";
+"onlyamsmath-0.20"="z12vjq71xjihl30fwfhqqm4wimb1dkwr";
+"onlyamsmath.doc-0.20"="h2whk4751icqb332z3h346vcjqrbgjiq";
+"onlyamsmath.source-0.20"="w3yqdsdbhx5m6briw33a0mh8jhyx25kr";
+"opcit-1.1"="59ykfp525lby8p0y5y1b5wk8ab9dvznz";
+"opcit.doc-1.1"="h74vnsw6lf4iaca46r07x0i05rhrq4m8";
+"opcit.source-1.1"="xsw3nb19li1hxnfpr4xhkb2s8qg3ap1w";
+"optidef-3.1"="s39b2v2hbac946vpqvbp0wxmw7kf8rrj";
+"optidef.doc-3.1"="bi8453aa4xxkmjs630hnwm8ci1k6zfbq";
+"optional-2.2b"="akjbm6gzli451ll82zbrwhpcajdn1b15";
+"optional.doc-2.2b"="jg81vzayz3a2pvlxhvyrx8j3w1sw65xg";
+"options-1.0"="5xy1cf8yq8awm7bspjj23nywhbs7ww67";
+"options.doc-1.0"="gy13y93wl0im19p5jc011fjnr49afgsp";
+"outline-2019"="m192v07lmcfzq3zbv87cbckz8jwanbha";
+"outline.doc-2019"="wcm9psb6ap1a5xy16fp91bwpxkhqxmh1";
+"outliner-0.94"="24bsa0d5zxz2i50i4bz0b3zsc5v7hp8d";
+"outliner.doc-0.94"="qgvvmjxq75fq907z1ya4vkir6iq7sbmq";
+"outlines-1.1"="0yh26641p29qj71w6zsx1z6hsr663q1k";
+"outlines.doc-1.1"="zg8b8617kq2vbf6inn2ms6x4a27j8yf5";
+"outlining-0.1"="c5xzw92b42pfbxmzmwrbiy4r879d3ja2";
+"outlining.doc-0.1"="rgikl4vfy01hgv90nip0iwx808iazvfx";
+"outlining.source-0.1"="miidkl85jpy5y6a7n71vilxaissip8c0";
+"overlays-2.10"="gywmsz5lbrp1jz4lp21gdb1s01ggsdxf";
+"overlays.doc-2.10"="vyz8aa3j0hgh7yjw78y8ng5xnsy4qczz";
+"overpic-1.2"="67w43jhskjyniifmjd1xk822zvwxh1pl";
+"overpic.doc-1.2"="3fhl4fi2gaj1jkpjps0s2py83bm8lcg6";
+"overpic.source-1.2"="6cbdphc1ly03k3wmqjkyzjm2px233c8a";
+"padcount-1.0"="am7s242sajkic0xz62kd1blgvbssgymr";
+"padcount.doc-1.0"="790smfw5i39mn1i8kfgd1dq14mgc3v7w";
+"padcount.source-1.0"="1p1pl9s3cdjjd519w8djbx7wnnl6sszd";
+"pagecolor-1.0i"="sllb6vybrngchz5k569b7pl3w13h6qfn";
+"pagecolor.doc-1.0i"="gm3l4g745mp6910pfv5201k63v44yr83";
+"pagecolor.source-1.0i"="ycqzawzck2jisybmxs7yfrr8v2h3vhy0";
+"pagecont-1.0"="8n68c03h2ckbvv11jj3cdv771ih60s4c";
+"pagecont.doc-1.0"="xkbrxr2gk65wgg5zf4cklsyzlgb03fz3";
+"pagecont.source-1.0"="74vmzb28in78lnkb7gjb8pg626vff0za";
+"pagenote-1.1a"="qnzjzijqrg65slkh5963cl1mxy8zr3b0";
+"pagenote.doc-1.1a"="pscbm0bglyryz5y4ghqgh0kkkyqw20ln";
+"pagenote.source-1.1a"="wkgw90mb45sq6baprpygc3qm5acnqrjj";
+"pagerange-0.5"="8w6mqbd385ma3m67h7v1h71mrlgkhqli";
+"pagerange.doc-0.5"="2kz3fnznp92cjp7b1lwpxvggn1q6hs05";
+"pageslts-1.2f"="axyv179gvcnvr6kv8hddpbyzj9prg0aj";
+"pageslts.doc-1.2f"="g0pir7bhi5dy6v1h2l3fzaskyba6kqrp";
+"pageslts.source-1.2f"="6a1az2z2h17z71k1bd8ziawn9ay9nrvb";
+"paper-1.0l"="wxk3akaqvdbc0q5whlwd2jpw0nvccwmn";
+"paper.doc-1.0l"="pppdcafd1gw0y9d5j91b2smzdssvvwyi";
+"paper.source-1.0l"="g5np7r4ncm9pyzpqm3f0h60cihmfbfsf";
+"papercdcase-2019"="dncf3im483zf3ix2ycp8d07bdpdqnfqd";
+"papercdcase.doc-2019"="cv4gkmg3rljv2j0pb0xjw6xzbqdii5cj";
+"papercdcase.source-2019"="qlbxx0dxb9vj7939sr3pl8cam98bc619";
+"papermas-1.0h"="xrl9ldvps0ffrygpgj501bvi4yb6cz2w";
+"papermas.doc-1.0h"="1p87yvwnn29mi2n2q4z1jsxfnq8gd73p";
+"papermas.source-1.0h"="6i3yx6ygswgf7yp1c0grv7gr6qc77r1l";
+"papertex-1.2b"="qq8m5fiyahg69aw4ajb01jg9k8x67kx8";
+"papertex.doc-1.2b"="x0s08fx3x24s5rgbsana1q0k06khczhc";
+"papertex.source-1.2b"="pzlnd4a3gkkdir8il99pkn6iw11w6bjx";
+"paracol-1.35"="nlp7hsfirg9x091qd1yjrpg2d9vanh2g";
+"paracol.doc-1.35"="mn2n3z3656wwk7rqii271778v9ca4yf9";
+"paracol.source-1.35"="zw0z1fnlqd1h9hgxgc6pqnj99rsbn679";
+"parades-2019"="bkr92ffb7s3zzl845jjkj1777517dwk1";
+"parades.doc-2019"="sfmlhp1idjhvy6cldh2v2k5bl5lp7s58";
+"paresse-4.1"="mjz05a7z528h2j2svmk4d8ycc6zfzbh0";
+"paresse.doc-4.1"="yahsg4ij3mnck53fl3mgcywibmnq7nhw";
+"paresse.source-4.1"="ydzd3zya07nc2kpvq3w1bjg5nbq4l37z";
+"parnotes-3b"="42sal99phkqbw05k2d9x6by27iy7sc7j";
+"parnotes.doc-3b"="3hlfpf75qjahy1qzc8l3dl1n8pj323pm";
+"parselines-1.4"="krgfsp0vcnpgwgw70aw8iwbi9r9fnwsm";
+"parselines.doc-1.4"="ahspn4rw6wdwlk9sgd8f2jajb2cbm33n";
+"parselines.source-1.4"="n652xalrpp0s7yy0dvcdz24khybsm1cw";
+"pas-cours-1.6"="2dkbzp14iv265qbbpa5i9s4ir54ihf9c";
+"pas-cours.doc-1.6"="s7d7lps8aay695www7xh7sxpscg26dfd";
+"pas-cv-2.01"="zdvf8flk3kjln11sn5rs3cb265q8fgzv";
+"pas-cv.doc-2.01"="am16i8cjhh2jadlhqsmfx8vb2jyrj8fn";
+"pas-tableur-2.01"="ggwlvzkwdv3qhljir7c8v8fwivi9h7lp";
+"pas-tableur.doc-2.01"="942prkpjhj4zpvdg2d2k27ibvchw2mbz";
+"patch.source-2019"="6k92ah4ka1ljyxwgg9n91m5aj6nwvnq8";
+"patchcmd-1.05"="asi7jsa5gwd1i2k0arh2p24wprnqfb2h";
+"patchcmd.doc-1.05"="8nxwjfkxc3nbj39wfvqm8bkxm4qs1y66";
+"patchcmd.source-1.05"="bpb3vc5kdmhiwh0s6sjvxjshvmgr7hrs";
+"pauldoc-0.5"="jmvlwadvci0ha513vxih3myaq6fzz5q0";
+"pauldoc.doc-0.5"="3zflmnljccqsla1ng0rjkgnmiys81r44";
+"pauldoc.source-0.5"="7q1bzfpfrxq3mfmk4p0w58ri9w1iymks";
+"pawpict-1.0"="spbcprlcpyxh9yd98rfd8vy7ydxyk552";
+"pawpict.doc-1.0"="wrpl43c4g89pgnrpcjky42h1ckhc4dgr";
+"pawpict.source-1.0"="qfmjx2x9vrlm3zq8msph0c30py1n2x96";
+"pax-0.1l"="iqmsy6p191p8bn2bs642zclq3q42n89p";
+"pax.doc-0.1l"="cjppdms9xlc6hsj0mk324ndpjqg2px93";
+"pax.source-0.1l"="harabcx553nchhf8hh9m3wqwic4l80fc";
+"pbox-1.2"="9y4p69w5nskv8j5i8a2pxmhswxz8nc50";
+"pbox.doc-1.2"="hjv8mqhlfa9ggqypr7nwzzf03rgm7cry";
+"pbox.source-1.2"="pk6hx6w8szi4dbb7irkr0wy3xwjjdpxg";
+"pbsheet-0.1"="ph2vnjalj2imlyb1nj1rq5cv84x5a4gp";
+"pbsheet.doc-0.1"="kc5rypxy3ksbhcyh3rkxv572z8r1rmp9";
+"pbsheet.source-0.1"="3lqxvqw0cm5ibnlq16zq2drbd4gcjwmk";
+"pdf14-0.1"="nc5xwg94y7na253fjpk9wv8n9qvsk7b0";
+"pdf14.doc-0.1"="lr3ls4m5rz8fwf37j5zw6prrn5kd4dkf";
+"pdf14.source-0.1"="0y28fgs01xpfadwxc3bfq8y42vh87jkf";
+"pdfcomment-2.4a"="g8bnzph5s7ihl4h1y5s9bkrkgj82yi96";
+"pdfcomment.doc-2.4a"="9x3yh17abc7inrf6nb45gk1cvg78gw5m";
+"pdfcprot-1.7a"="qsbfyac2h2qqbk805q72v4v8vpzn3myp";
+"pdfcprot.doc-1.7a"="ri7rfypz9240jkmvfvlza821k9m2ana8";
+"pdfcprot.source-1.7a"="95cr49yywd59mcyj7qvqkfc9bhj63hxh";
+"pdfmarginpar-0.92"="pra0y1df005b6br3n93zpi7wrvgk2h6d";
+"pdfmarginpar.doc-0.92"="0kc0dgfq3mmnwy3xs79gjmxkkmmfl5l4";
+"pdfoverlay-1.0"="chlr6244jp83vwz6parhh39js451ia65";
+"pdfoverlay.doc-1.0"="jvhhg2ajy75g3qxa2npmqrgsa1f77ddk";
+"pdfoverlay.source-1.0"="d0j8n61jvqpzrcycv4mczhp7wxvzirgd";
+"pdfpagediff-1.4"="3nj0fki5pqm0i50fzacdvnnzhhf2b5a5";
+"pdfpagediff.doc-1.4"="8h093sqzw62ivh2csz6fhkbbkdg1na2h";
+"pdfpc-movie-1.0"="la1blfvhk9kwfy2q0sp6x1ybw5c2i7jh";
+"pdfpc-movie.doc-1.0"="5qc0gdmlgspl5696zvng96nbhgr0j0m4";
+"pdfpc-movie.source-1.0"="2d4v3bwnsws65w57arhbs2j5gvm3w5f4";
+"pdfprivacy-1.0"="0nsgnfid0rp2xkmfvfxnjp7v7dikkxbv";
+"pdfprivacy.doc-1.0"="1wr2s6qkmp8knplyvqwx0micqgal3sw7";
+"pdfprivacy.source-1.0"="jr4iilr7yiknx21fapgzkkgy4mc15r6a";
+"pdfreview-1.2"="fs356zp97y8h48560c0fyjw0aymj8dwr";
+"pdfreview.doc-1.2"="xkd8140x13sfs5krj1l1p3zvj4vwjjf2";
+"pdfscreen-1.5"="5lwdmn4lxkq9hgn6fmr4rc2gdk3ms583";
+"pdfscreen.doc-1.5"="bcg3kviqc0jr3s5h5xa3in5g1hj46zkv";
+"pdfslide-2019"="78wynlp5vyc14zn93gwy73yyykk0yh0i";
+"pdfslide.doc-2019"="j8krgspjlvn4ja9dww3mc0g3zg7qhlmb";
+"pdfsync-2019"="xqg7my569gq36snly1kpii240byrpx7s";
+"pdfsync.doc-2019"="y6am07gh7iwgmgkwq7sg9z704waxgqai";
+"pdfwin-2019"="yfdlssqwsa253r0qzvy5xbgbgwpmmxpm";
+"pdfwin.doc-2019"="7k1kqy2rpr93q4nvdvwcrspqjbzz1h4i";
+"pdfx-1.6.3"="1inx9kkwqj831ikgplqvffk8f0a8s6gc";
+"pdfx.doc-1.6.3"="c1grn1ahiddzp95biymw47x04fv3y23k";
+"pdfx.source-1.6.3"="6jj6972hpnhn46bzfzp1r201pmfnx87i";
+"pecha-0.1"="8bir75jmi5y33ids3wixm0sr7zjd66zq";
+"pecha.doc-0.1"="lhdivjzja3syzm6ksfcckx4a9q3pp8ph";
+"perltex-2.2"="wshi5f5mkd59ncnw7xwp9pfw3mwgv5x5";
+"perltex.doc-2.2"="inj1sx8rkkdxq2sqnqgs0hc9ziybhcvb";
+"perltex.source-2.2"="a8lsqd2ls33rdgjy5fny1jz84gb1z8b3";
+"permute-2019"="anxvxdpnmr31a50r7anwj21vci3dxvg0";
+"permute.doc-2019"="rz1569972rz72laqrxnkphxr3bdx1pxl";
+"permute.source-2019"="va01wn3pv0j0cxqmgh8cjricj4m2vjxv";
+"petiteannonce-1.0001"="xv2yjs519vz0inbcy7m2a201ysjl3gwj";
+"petiteannonce.doc-1.0001"="9xvfy2ivdmlamj4fr1q5i1mfh6diys8s";
+"phffullpagefigure-1.0"="hp51s42ycsary7n2qngls1bm6j6mi5ab";
+"phffullpagefigure.doc-1.0"="wvbhkw4axm3bkx3jyi32iy0g3bbbfc6w";
+"phffullpagefigure.source-1.0"="z0wwcy1cjs0kv9lwxdl7waidccaa9w2x";
+"phfnote-1.0"="77if36imrvp4g43h3vfd6j9qzsd7gv3c";
+"phfnote.doc-1.0"="i0vc3q353aa2f1xjhmddlq273x9jngp9";
+"phfnote.source-1.0"="0c893r2vi32kp5cx0ncwa23zryyy6j3m";
+"phfparen-1.0"="jj8lpyhs4h7li0dmc70xhf2h17vgqrwm";
+"phfparen.doc-1.0"="73rcrl7hp843q2fjgis48raf9hh4yaqg";
+"phfparen.source-1.0"="zqdkqbjn75g379gsw0jvlzbyz5qpr1xp";
+"phfqit-2.0"="yln8ifsblmbsp34na3jfi2j5z9az00y1";
+"phfqit.doc-2.0"="ll95cj7p15xx79q024p6xdf3wsjzlamv";
+"phfqit.source-2.0"="xqiygbddiwvl3l1x9xdqcd6zqdbc4xj3";
+"phfquotetext-1.0"="52h9qw8xvldzr7smwbg7njr8acxf4hp3";
+"phfquotetext.doc-1.0"="gk5008b5k8qbi3q2i7bjk57ipwz0vyhg";
+"phfquotetext.source-1.0"="wl18lww4jvg1k8361ra2jqc5z3drs4vf";
+"phfsvnwatermark-1.0"="11rqnm8ag7p0iv2bziy89w66j9cjv4vk";
+"phfsvnwatermark.doc-1.0"="rd3y1kns876788nmbkm7r95wml31yvg8";
+"phfsvnwatermark.source-1.0"="666y9zym40h351a9fbnwy24aangwswkd";
+"phfthm-1.0"="a1g65ldp21rjb5nk19ygpijbs0xfriqq";
+"phfthm.doc-1.0"="ad1m16cjb9kyi6jk6jnvgxcm2ci8pxqg";
+"phfthm.source-1.0"="lbd9qwdv67spq7v1dy78012a874wg9mv";
+"philex-1.3"="766zmr2yzy48mmdakjhvvy56ck2g5zhf";
+"philex.doc-1.3"="r94769rncbhw6cdvzwm0s9fhwa57z7xx";
+"phonenumbers-2.2"="82hwh6yj11vqrskchkvgnimiyxhzcf7m";
+"phonenumbers.doc-2.2"="ac4b8860hyqw8pjpbcc58bbjzx1pzm4c";
+"photo-2019"="d2rv82rm7jyd2fvgzs545kz32nb7fn6l";
+"photo.doc-2019"="1gn03gddjcbfmidsn9snhbr9nsmlbsmq";
+"photo.source-2019"="70n1vi9qla3kl592hgay45af9m078l58";
+"piff-2019"="xz2idyqgwg5y7r9ac0bykvfx533rd29p";
+"piff.doc-2019"="xwlsyrk4mczbchklsx5x8ip08zc5jk6a";
+"pkgloader-0.7.0"="15p6m1152qc334ljqhnzdagic2ylvpgs";
+"pkgloader.doc-0.7.0"="k6qdk7x5pr11qspbx9ggabp18n88hlmx";
+"plantslabels-1.0"="yi1s2470aj75chj1f5mi9961w9if1mpd";
+"plantslabels.doc-1.0"="m9h0zjyk3jf0ksc6dz4zgw9niha0qkm4";
+"plates-0.1"="chankj3114snam38fsi9nc4zap0b86sh";
+"plates.doc-0.1"="wz1xqxldn325p4c87b16ns4xxx7l5bcz";
+"plweb-3.0"="9d5dh5afrcjlcx279s7hkrsi0xja0fg0";
+"plweb.doc-3.0"="519cpfwspp2kxprill50lqhzimdi26jc";
+"plweb.source-3.0"="2ikq5nka9npdkr8gqkj8lyi1hqmxihzr";
+"polynom-0.19"="lhl6cw071xb7ivyzhdylq48ja6dqq377";
+"polynom.doc-0.19"="6sj89ph1gnbd0xa2f8sp457ip6v8sadb";
+"polynom.source-0.19"="9z3hzyf19ksy521v28p47h1dxh3c9n67";
+"polynomial-1.0"="k11f7cmzycx5q6ww5vnrxfp7xf3238r1";
+"polynomial.doc-1.0"="ffr0i9z96w9ahr8k1jx8klk1kddd1zm0";
+"polynomial.source-1.0"="m844kmijznga9r259cm2h977w4zdmi3d";
+"polytable-0.8.2"="qzfi66r74yb3cvgd5aicyflm4b25f6li";
+"polytable.doc-0.8.2"="36frl3y5hmlbh3cz9s17qnl4rjda1l5w";
+"polytable.source-0.8.2"="768zbijzmx54yrz1j8qvg8an6xis2hmc";
+"postcards-2019"="zvcijbngj8m505fcx22y1hs7y5jmn1kc";
+"postcards.doc-2019"="d1v423a7xl8pi8nqqzbr9y5ag8d2pkkj";
+"poster-mac-1.1"="vjpg0bc2f1qv0hr0kcxasymrchpwzn05";
+"poster-mac.doc-1.1"="8m0bk06l7y5bps6hn3xd40s6yb0m8c19";
+"powerdot-1.5c"="dq53xc4c6n4qpxcqkdazwn6b8v8z94f7";
+"powerdot.doc-1.5c"="ph5p9y3knn1w1hkzb79kdxcwkg6fhrbs";
+"powerdot.source-1.5c"="245bf49s69vlxk1f1mlbdyfhx68icgpj";
+"ppr-prv-0.13c"="8znyclbgzli74aiciayqn88dp4p7mvsl";
+"ppr-prv.doc-0.13c"="x2mvhsnrb56nm2s431xlb7fi9g8irbzx";
+"ppr-prv.source-0.13c"="g4r673h9bqfxkh1ih2qp9shhf40cbz95";
+"practicalreports-2.0.3"="z0zj7cw6zrywmjxwh1kv9qh4340a8729";
+"practicalreports.doc-2.0.3"="qnag6zn4rn2l8gwwrmrm2vminwrz8w4f";
+"preprint-2011"="z8qdsshgjd3dav562qnyx4vh9gdyga27";
+"preprint.doc-2011"="78x9z1vyl7vpcv39nj167bawb4z8fsnf";
+"preprint.source-2011"="i09zkvcpvapyf2jj7yhabmyrpxyf0gp0";
+"pressrelease-1.0"="7bxy141i0a7n3r2z4qnx309ijsi14dka";
+"pressrelease.doc-1.0"="y5pnw0xv53mp7skrjrjrcsr3r7hvwylz";
+"pressrelease.source-1.0"="bqj7qnacxv8mnjqjwdspm5zi5xg10im7";
+"prettyref-3.0"="a75q522ix098qzsnhxg9w12kwp62xgk2";
+"prettyref.doc-3.0"="vlnivj6n4wc0cf9l53352ph04wijswv7";
+"prettyref.source-3.0"="wm5367872id8pf7v2k6wbbqvbh5ysrv0";
+"preview-11.91"="hw31xlmv5xplpnz3gjcmdf4vbmhvy87a";
+"preview.doc-11.91"="zmkw5whmxh98mrc705lcmqw7wj6k5h04";
+"preview.source-11.91"="67s0y9mv40fs0dgvm6zlkfs4ivhh9vrm";
+"printlen-1.1a"="fg8vfmr64nm31r8hycy81iqvqf6l9rim";
+"printlen.doc-1.1a"="95icr7kk7bkg56m6sy8g24if35pfhhwv";
+"probsoln-3.05"="qxvjb9csxhrh20qfk4xh264q4pvb5ghl";
+"probsoln.doc-3.05"="n81pf053v27m4xj6cjnjmd8r0sb8lv5k";
+"probsoln.source-3.05"="k8gwixn5ssp97d05ml01k8f9z6ijspq5";
+"program-3.3.14"="fxq3hls6cibrc92g1dyavcr8s2qjxsr8";
+"program.doc-3.3.14"="qvhjjfq3msq1i9h5jf2nx54cp87b3bl8";
+"progress-1.10"="zf7iqvmc357pfg7phrc9gggwyb8rb0hw";
+"progress.doc-1.10"="2pylrgmyscf4p6ndba4jf87vfglxydrd";
+"progressbar-1.0b-4"="6zvflmdsm1vxkm3sjgmxpvl6jsw6vy82";
+"progressbar.doc-1.0b-4"="ahkr6nf44xv8czg4ffpx2qbxzwn7b24f";
+"proofread-1.04"="910z66xdhwfcs7nja83ys89alq7blh8i";
+"proofread.doc-1.04"="8mk3ch8mi8b1xqcyhcpqqhzp917j8hva";
+"proofread.source-1.04"="q62jds90qpypw0hmi9lzdl72whniqp3r";
+"properties-0.2"="is4zxlnpayim96h9vifb3wazi4hcl018";
+"properties.doc-0.2"="pdpdn0rbg28dq9qgry9w9j2wvzrl9sxx";
+"prosper-1.0h"="kwjg42wqipj8w4rmilmrpsl5spr8hzmp";
+"prosper.doc-1.0h"="9bfspx1labf3y4hhy7a7sv8ccfmqw4mx";
+"protex-2019"="ajf4lsibbzcr2ynvfpx2n4pnazfkng2k";
+"protex.doc-2019"="j9v7mdk5dnlhdrj5sl3afbvgqgpk0bbq";
+"protocol-1.13"="2mpbqs6r1sl8x79dbkzgg0vh0xxs89pi";
+"protocol.doc-1.13"="fzvldl69vw5kxljg5jm4qwcar1k2zg8q";
+"protocol.source-1.13"="x52qwan5dahs53bdm8dm450h2ljr7lsp";
+"psfragx-1.1"="pb5q4bhhn2zxm0vni6xwcyxq76wj85l1";
+"psfragx.doc-1.1"="bfx58if7s6z0sb5faslismic7jbx4ycf";
+"psfragx.source-1.1"="6ikq1jhicgf6109gdnd3ldng0ycy920w";
+"pstool-1.5e"="1niq51k7cvq7kqlxymixhrhrg811rs3q";
+"pstool.doc-1.5e"="y68jbyp1rzd3wkpwvg17kiz5fsfczmi0";
+"pstring-2019"="whkbcsicbqlvz1pwjfypnvwwbbwqpwfr";
+"pstring.doc-2019"="gf1pmfhczjrkjgpawxbk6zqrwindadnr";
+"pxgreeks-1.0"="hdqmxzcwyd5llq80fakhjvx8whjxs8mr";
+"pxgreeks.doc-1.0"="hdm2s76j6vya85lid9lrkzhaj6bkvlda";
+"pxgreeks.source-1.0"="1i5jmxhyphz2mdhl742ydrzam336ix5w";
+"pygmentex-0.8"="bnyslpaj6qfdmak1k1bjyrk0jvflvg1l";
+"pygmentex.doc-0.8"="crqmqfjxlpwibbb9s7sp9qkafnk38f8c";
+"python-0.21"="a7v60025926j1nf783w765d773zla60r";
+"python.doc-0.21"="901hkhiwnx89si1rx242wa3gx2mx5kkg";
+"qcm-2.1"="d9xas7ra5n0hzkc22s6ky3qr752i1i2k";
+"qcm.doc-2.1"="ljb5bhy71jscf6hdw6xmxxyy3jyfa8py";
+"qcm.source-2.1"="zywcw16m4hk75ialbg92bx98snk64hpf";
+"qstest-2019"="girz5x7dqmr96mqyviwld4i06s1h4ldd";
+"qstest.doc-2019"="0w3r2f745k9kj4ig8yrq1w1l1dhdblcs";
+"qstest.source-2019"="z067nizm6rcjm6yz1141pxa7gm5yyfs1";
+"qsymbols-2019"="w1c7ni9qmy255nyg3hb0yf94p1b924n7";
+"qsymbols.doc-2019"="pfhp65iz5ybxccd7yjxg2rww0j9z2xhf";
+"qsymbols.source-2019"="mk7daalfvk3wyyhnlvbhb5144g6qm8xs";
+"quicktype-0.1"="40znnh6yxbhx1i7gsr0icvy5avhm68nk";
+"quicktype.doc-0.1"="ljcdha8k0ngr0ymwqbqbblgyslybvcgp";
+"quiz2socrative-1.0"="8wpvm4ysp513gkigsymd0d0sg3708m4r";
+"quiz2socrative.doc-1.0"="xpz8wilnlh12lf0dfjvmzcprjd7pmr4k";
+"quotchap-1.2"="f0cxvb4c0gzg40k03y6yjn1lgyjibx0v";
+"quotchap.doc-1.2"="mc84x8s62mhh3s2hvgzpw09i33klh59n";
+"quotchap.source-1.2"="s54vgrf4zzbxbcys17z8497y3wxz58x1";
+"quoting-0.1c"="jmw5a88k3r137dxxrvznxx9xqwh9yvlw";
+"quoting.doc-0.1c"="2a4d2w7b4jshz79hhz57fpq6vzgdvb34";
+"quoting.source-0.1c"="g238v3pr075wgknaj82ivn70z6fbf0gp";
+"quotmark-1.0"="8inn8x79cps7g1iw3pfmc7lyky20vyxx";
+"quotmark.doc-1.0"="nkjdi0xl5yvvscs63kjdy7pk3dcvgvxs";
+"quotmark.source-1.0"="nhinvh37dw0n8wk1gvpqnp5l3fmaq3v5";
+"ran_toks-1.1"="075bz1afn45n2klczxlj38jzl27ihxk2";
+"ran_toks.doc-1.1"="av9qzf5q7524xncg54dqiq5skgvqxdbk";
+"ran_toks.source-1.1"="qzsgi73xl8kkccb4rmv8hmhq3l83c8gq";
+"randtext-2019"="bnb1sk549kzmljwjyb9gc45xr2ndckcz";
+"randtext.doc-2019"="9mpim50akqiqp54x6kpz8w4wdv9d12dp";
+"rccol-1.2c"="31w19kr365k8wkvkx91qqcw46fnl0sbk";
+"rccol.doc-1.2c"="80zx3h1b0wjw8qgv81kb4la3zd9hh9m6";
+"rccol.source-1.2c"="sqkkyhka856h4iirnvy4s8bdqlailgxa";
+"rcs-multi-0.1a"="ynh0m6il06lpc6cldc47hvk13n0jhpjy";
+"rcs-multi.doc-0.1a"="p5gwxj7airn6302zk05j32lhhnaxxy0p";
+"rcs-multi.source-0.1a"="6pc8wyv9fgazi1a240fxffwmyslir86p";
+"rcsinfo-1.11"="y7cymhiac6wvahhzkmsrkchrp2i5i9fn";
+"rcsinfo.doc-1.11"="v6wc6q5xv5rwbcgcvfrlkbk8lw3h4qz0";
+"rcsinfo.source-1.11"="86ss0sk5rzss6m4b5n96dwfd0vjh2acs";
+"readarray-2.0"="6f0daia3lp0ipi8swprpgl1pzh44hwc9";
+"readarray.doc-2.0"="bgfhvri7xh8kq5y1qykhzhjrv0vcss2m";
+"realboxes-0.2"="frdrijzjm4yi20fddhxb6gp314qg6bsx";
+"realboxes.doc-0.2"="95b3g7v3hnns9n8l1gv69a9b1jnl4za0";
+"realboxes.source-0.2"="2sj5y6k08cwcp8fs0ay7z7ik02is7vly";
+"recipe-0.9"="ya2zz3axlaax8f7qkz3rwkfwl6kc7hqw";
+"recipe.doc-0.9"="nrgg002rpx1gw16yx9pl4xfiyjg2lk16";
+"recipebook-2019"="z2m105warknssz9d0b5f0fg13mdjrwqv";
+"recipebook.doc-2019"="1w359b6rbd8cfvfa3z140hzsk7515m9m";
+"recipecard-2.0"="ywrn03f3hy5hyzszpghn9rnjkj9a3kqr";
+"recipecard.doc-2.0"="1g67mikrdxmhpn4xgpnlriapp4als1wx";
+"recipecard.source-2.0"="7g35xa8kbcsrxxmp9xxk3rgvas158m9h";
+"rectopma-2019"="j8pxsc46j0m799x9srd74d7q4jjxjdwv";
+"rectopma.doc-2019"="7h3v5rpkvxcmv1nj0wzxpgn4whs1gk4b";
+"refcheck-1.9.1"="llb529mc4gj9wf4zzs7jz9p2qgngwxy6";
+"refcheck.doc-1.9.1"="hvcfjpx9g9wiaqr70vmrpkgqy4i7xikg";
+"refenums-1.1.2"="8zxc6yyp3c597ydikw4zc36ri5xhlpid";
+"refenums.doc-1.1.2"="jqqqwvr0bd163njgkfgz2aj1jlgmlnxk";
+"reflectgraphics-0.2c"="bbpagcn17kwhp9jzp3r6kp23qbr3gqs0";
+"reflectgraphics.doc-0.2c"="klwad1c3lbcf9dga240cipdhf8vm4q0h";
+"reflectgraphics.source-0.2c"="1pwn5m9mclwsmwalal0bcfvi5sq1jh37";
+"refman-2.0e"="32g63hz11bkfsdh6n6jcl84wyjjpq6nj";
+"refman.doc-2.0e"="scp335xnhndrhgfvpd5l1372jn3qashm";
+"refman.source-2.0e"="c1d1va229zsmx2xi1gka45haqc2714s0";
+"refstyle-0.5"="5k4yj6qqvg0xph423q8cfq9yp3m57c11";
+"refstyle.doc-0.5"="w5jaccslhd2ksxq421q6zxj8lddrad45";
+"refstyle.source-0.5"="g5sfid23vsvy6b99hi1jkwcshgcgv5wi";
+"regcount-1.0"="bxa9jg03phjn6ibwfils5jkl9p6r427x";
+"regcount.doc-1.0"="knh85nxr5m3g1ljcmp7z58q0xi4rc46g";
+"regcount.source-1.0"="gr39ifiwslrh971xgq7lz5r81cx4vh6h";
+"regexpatch-0.2d"="ly17zaklhj63kiwpak0h0jn3ci6kfzrj";
+"regexpatch.doc-0.2d"="z576gsq7a8dbxpz8072n24wh4nqqnbmd";
+"regexpatch.source-0.2d"="d0vyjn4ywkcmf876mxqyps2ps4grqbl0";
+"register-1.9"="f7fv3fbc7h07nbb3g0a3hhpib1hs0q2g";
+"register.doc-1.9"="q2r2vr7wkmphr64xrh5l021xij612iym";
+"register.source-1.9"="rjr1x4n5806d9grnavzkzcqkdy1ygk0z";
+"regstats-1.0h"="zkxc3cbq3fr5rpwv3lw3znrs9sn1ajmc";
+"regstats.doc-1.0h"="5ddawlcn7rqzs7i7mjjj8zi3q60qpal9";
+"regstats.source-1.0h"="kafv0h7yl5qhzgq4j4ay54cm9lqgd1w3";
+"relenc-2019"="0ksy9dhzxf7dh2sgnais817krjdrnyip";
+"relenc.doc-2019"="w2s26knmf0pfnbvxbj3f2xmcvjf8mgkl";
+"relenc.source-2019"="vhwmn0hxlv5njl4v2ljz5z4kbi5n4a8g";
+"relsize-4.1"="l9n0cv3vjwqlhxw58bnj4gh1qr0mbkh9";
+"relsize.doc-4.1"="bmv72xvd2n40rclz0a5cw128a4m1khl2";
+"repeatindex-0.01"="6zzlr3miqb7p0q3h1kyaly6ykzwjlq0k";
+"repeatindex.doc-0.01"="gjkm3why0hf1269kqbpg70bwwmcagdwb";
+"repltext-1.0"="l85dk7256ydw2j7hihvjrbl2s70izgns";
+"repltext.doc-1.0"="qggf1dm3xwpz8p0yyy0b2gnw4zxa0bjc";
+"repltext.source-1.0"="rnsd3hg4mcyqj903igcsalp56pvg6g32";
+"returntogrid-0.2"="qvyji03hqf95f50pkv4jj773a8ryv694";
+"returntogrid.doc-0.2"="8s3dy7s20sl37qhayb7vz949k3nsz2k4";
+"rgltxdoc-1.2"="897zfnrkkfzxzbl2gpdj4d4xaqjkyimg";
+"rgltxdoc.doc-1.2"="173dav41zc8h3j5idwhpjr8x7pw504qb";
+"rgltxdoc.source-1.2"="mdv38hd0wxkigcn2h94wwamr4qi11p4r";
+"rjlparshap-1.0"="584zbnkzrqjydg9hz42ayl9r806sd4cw";
+"rjlparshap.doc-1.0"="g4bkg84j236faakga1kl593bjw1p9wq6";
+"rjlparshap.source-1.0"="gys3kddji7j89c63a2kzz7z8xjdakpg5";
+"rlepsf-2019"="zvgnjwbrznazfy89cwbk9injrg0hk19b";
+"rlepsf.doc-2019"="q4jpki613c0b9kx9bxzqw3v7m5ggj4w9";
+"rmpage-0.92"="iqvgmj8ygy8mcqffj9wl5xr3l4g19w7f";
+"rmpage.doc-0.92"="nzm10y262ql87jqmlvbx8s5izflz8nk7";
+"robustcommand-0.1"="pclwgpigb6jf5myrirrgb35jdsrc1r54";
+"robustcommand.doc-0.1"="8236m9s2klnlvii7733r9vkr28ma0758";
+"robustcommand.source-0.1"="a6wczmjbnvfqfqg0cxbnq7srr71w3l6c";
+"robustindex-2019"="sw1cp3wc1z9il2ysrxcyhwp47siik8lz";
+"robustindex.doc-2019"="ga57j7ky0ifk33lmf0ai6xpr8cav2xh1";
+"romanbar-1.0f"="77m3d5fv4abc2xx6nx5cvzpkshnbkmr8";
+"romanbar.doc-1.0f"="7ha3ybbzivbkc7fllhfjv1mlvq20k6i0";
+"romanbar.source-1.0f"="3jn06jd260yipslvs8xjflwd49pzrcqb";
+"romanbarpagenumber-1.0"="x8gs1z6nn976praar888l74avfd1ha6q";
+"romanbarpagenumber.doc-1.0"="cyfpy1g5g14jlxl83a7ngcl631297a58";
+"romanbarpagenumber.source-1.0"="qs1ia3flkqsd1psbha7bfms1anfg336v";
+"romanneg-2019"="7w6wmvkyzy4jzs8akhaswqjpv1lh9lxz";
+"romanneg.doc-2019"="m7rc0j7xbkly1zh63lrym8pzgp1g3ivh";
+"romannum-1.0b"="8l5hrx8svnn1pv9qd3c7y6gxy25fr5r8";
+"romannum.doc-1.0b"="1wlc0m18vg6vl8sgxvj4i3ca4kyfl9c0";
+"romannum.source-1.0b"="h9rkrds6v7b0pvgap090ja271k5jnc7h";
+"rotfloat-1.2"="v9iaw0lv3vc6chkic1dracvgksxrsgqs";
+"rotfloat.doc-1.2"="dmfn4f6nkq621adf18xqy9vdgqn5c68p";
+"rotfloat.source-1.2"="0c3i14195xq03r4nzk58yrdxybk2yl8l";
+"rotpages-3.0"="rzayzgap6j40817pn95w8pmryqi4a3kb";
+"rotpages.doc-3.0"="fh2a3xcl4f5mq95d2ibsgmml6pq95cd1";
+"roundbox-0.2"="g1k35s2jqgfm0ih16zf59w470kzv450f";
+"roundbox.doc-0.2"="97dr0pg7689mm504pld75cmnd3vq61rb";
+"rterface-2019"="l7szd2dbrky3idmzkx724b1ks8d9crwm";
+"rterface.doc-2019"="3hkrf5qycaq84dawxyv5a829bv8vz0qg";
+"rtkinenc-1.0"="bgvb6v03sbayxss84awkaa98i1hza4rm";
+"rtkinenc.doc-1.0"="ggkmbwp3kxa1zs4c5f7v3r5lk5v8pdjr";
+"rtkinenc.source-1.0"="iavp7gzq742v267gf3hjq8vwi1ywqfbj";
+"rulerbox-1.01"="6mg6d4nwip0qmcz10ykpl4rd204xdj5s";
+"rulerbox.doc-1.01"="y5wpxgc3m84kkxi1xip7l3jjcf8b36xw";
+"rulercompass-1"="bhgf5s2zj8xdxg5jhh3c4wdfyv87p9j4";
+"rulercompass.doc-1"="bc9m9y239rjdnmbrj6s6rmqadmd32mvd";
+"rulercompass.source-1"="9l57jpav5vpsvsg42gw79mym778q7623";
+"rvwrite-1.2"="fmxfnps659r2swx7gr9bdxcij2s7vdn5";
+"rvwrite.doc-1.2"="c1wrdxjnjn345siv4xivjxcw8gd5fi8p";
+"sanitize-umlaut-1.00"="fwbjpppg156xfnph18fyhjwg9k6y5dfd";
+"sanitize-umlaut.doc-1.00"="xs52mf005x6v04141qlan3wb314m8dxx";
+"savefnmark-1.0"="jb8wz370wj5gci7mp809d60qwn441cb8";
+"savefnmark.doc-1.0"="lzip7g8z26c8vgfni9n058dk9jvskkck";
+"savefnmark.source-1.0"="sv58x02n2rd7gv7mkd6hjym7sqbxlfsx";
+"savesym-1.2"="gl0rbarz94wa6qqzgza73mdmz7058zlf";
+"savetrees-2.4"="w0mxfybvqjbrqinqc8r3xhapxq80s4mg";
+"savetrees.doc-2.4"="g0zk0ijym5m753jss68ijanks42201wi";
+"savetrees.source-2.4"="8y15qzcspmi19sskifg53agnacylid1d";
+"scale-1.1.2"="v8s6izx8nzpnjd6x39yfz11l7f9rrnwv";
+"scale.doc-1.1.2"="ifyf91yd8avqh90jxa6ih9xg5bzy6a3v";
+"scale.source-1.1.2"="6r1dvrbkdkw418pwagkn2djrzswd28r5";
+"scalebar-1.0"="107wyhbx5wzliqmncsqlaykg7qw5ldwa";
+"scalebar.doc-1.0"="a4krk1zpi2yiyri88r96363l5k5kcjf5";
+"scalebar.source-1.0"="5f555kz7b0rbxh4vsmqa8hfqlv7790cf";
+"scalerel-1.8"="bnzdi8d0mf0ppkvwypxvb6wl2lyw4mpq";
+"scalerel.doc-1.8"="bpamgzs7nr8gfam69mad8qmgjs6hy909";
+"scanpages-1.05a"="vl8kzqsj7dlc21h9148c4cgbrwg92k2w";
+"scanpages.doc-1.05a"="8rc3sz2jw47xz3rz25dfw7g3gssndz7b";
+"schedule-1.20"="h730zhbkd5wwb6jmvjwaaifdn4sia6bj";
+"schedule.doc-1.20"="m45jrx0nks1q26j75h9s9f3zacdc433q";
+"schedule.source-1.20"="gsclgm1vyfv8gnb5lcrgjz35ipvi4wv8";
+"scontents-1.4"="n7xm5mldbpk0kkyhda1kdramgi8d2v12";
+"scontents.doc-1.4"="8nv7r4i98w7bvw8fbi511d3nbcbkg8a5";
+"scontents.source-1.4"="shzh9ipvvkp6qb524qcx58x14xa9q2p0";
+"scrlttr2copy-0.1d"="jw87bnb7phfp7nmvp4gvbi6nhfwifqph";
+"scrlttr2copy.doc-0.1d"="6pfnhhnjm97ap2zbi5bjj011wqbr2yg4";
+"sdrt-1.0"="2pcbwfywj14n08187899xjdhrjr3zzlr";
+"sdrt.doc-1.0"="85y00dj8k3xd2dkd42rzwscq70rhhxny";
+"secdot-1.0"="xb2kkwqh8dwdly3pcd20k3w2y68avkg9";
+"secdot.doc-1.0"="ngfan1hhwcnppgfpvkm0y0a3bjab1fz3";
+"sectionbox-1.01"="mxhi294c4y7knbwiz1i0h4akmlgi0v6d";
+"sectionbox.doc-1.01"="2gapb7fvm8l7m021gp281j5vdq61s1if";
+"sectionbreak-0.1d"="gpda9n0rg3clldz9yck9fqxhz7gkcvjj";
+"sectionbreak.doc-0.1d"="rvb6d4l8zblpcacs19pchyj1b56g0587";
+"sectsty-2.0.2"="7677w338qg7wxalski08070328f4yjcc";
+"sectsty.doc-2.0.2"="plwwncg7vkhqrkkh2b1a6wpp57h6x64q";
+"sectsty.source-2.0.2"="r3z90f7w1nw4hpn61fcrn8iy5m1867jk";
+"seealso-1.2"="2ndffdja6sdc1zgi9ayhfgcfa4ihrqjs";
+"seealso.doc-1.2"="95n5alxkf7brg6dcad5jz0mfnn7w42fy";
+"seealso.source-1.2"="511kb0ka070b9q0973c1khain6yslqmq";
+"selectp-1.0"="fp7iiqkb6xqw55v28rs80in6p47li70c";
+"selectp.doc-1.0"="wy83q63fdm33il8rvia43y1kq51rkc07";
+"semantic-2.0"="ky4ggvzl5171nda0329151c9vbaxs7gp";
+"semantic.doc-2.0"="b1hyb592d0xx35p5dqppyfgykg37xx4s";
+"semantic.source-2.0"="4fwjw0axn8d3ychsqmmdy6x73ckciv9p";
+"semantic-markup-2019"="iclw8kk8b8y3hz5j1jq8n4daa5fpnzh9";
+"semantic-markup.doc-2019"="1g78rz3l215812hr2xvbxf804lzq0id4";
+"semioneside-0.41"="62v5zs95qqi1i0xpm2jmhcx9pa24jymn";
+"semioneside.doc-0.41"="2z2azzz07gj105jrarifhx3ldjc9v09a";
+"semioneside.source-0.41"="31d1fggm0km56jv6qr5yjv7da6y0ifsv";
+"semproc-0.1"="gsf23afimbq3nhqka6vdbxjdasqc9f5j";
+"semproc.doc-0.1"="iki2yxxxmq90xn2bbvxv942rl3lbfi0c";
+"semproc.source-0.1"="rdzjw86dk757ddhwzw3z163zjigjnd9b";
+"sepfootnotes-0.3c"="chdd6rfn5v91c7sc3anf8rq1w7i49g47";
+"sepfootnotes.doc-0.3c"="h9k1nlwdgxynifqcllbplw29hhakzsfx";
+"seqsplit-0.1"="zc3fmzgnaxlx4jvbmqr4g22xqqr46qm5";
+"seqsplit.doc-0.1"="ans9jwdygk6j84fiwxjwr4z07rsswsw4";
+"seqsplit.source-0.1"="syxc6bkp4i55zvrs8sxg8ncq5gmq74xh";
+"sesstime-1.12"="ilsqh79rlc12ayvkwwpnbbcj033ksmid";
+"sesstime.doc-1.12"="67zpm2bqngwd9hpl5y8bvfr7iln31j2c";
+"sesstime.source-1.12"="w2aia0hdnsmhz35g0r1jjcfwwh2h61cr";
+"sf298-1.3"="nvb0bxh78nzvjk3x4d69mmcdbhfxnm03";
+"sf298.doc-1.3"="hdnvzghnkkgy79q6r2b9qqx9gda162mc";
+"sf298.source-1.3"="ixwa6c8c44ph14b5a0rz0js00jac9kpv";
+"sffms-2.0"="jaarxw1lmdgsac04fzdggq0pkaqp0y8f";
+"sffms.doc-2.0"="kqfjz0yn615f068v6349lgdp72gw2wkk";
+"sffms.source-2.0"="h5sazi91347l3qdkn6ghw6ywyp5ddryh";
+"sfmath-0.8"="mkmjhc5jg8ylbjdzx3yal2r3spxv3npz";
+"shadethm-2019"="6d2vr8xkis6ah0032nrbpbh3rs29xh2r";
+"shadethm.doc-2019"="ddw9pngafxfcx4cl0fh4dmnaqcfqnyfn";
+"shadow-2019"="xifs7y18wdkg1kj656swlvx7cpswmgma";
+"shadow.doc-2019"="ppc90h7d8qm8382lp2vzn5piy0mb7d4x";
+"shadowtext-0.3"="m2qsn137ij2l4lq4h0s5mpw1vvic0k4l";
+"shadowtext.doc-0.3"="894a2s4awyxc0vc7d94fp0dfahjq4021";
+"shapepar-2.2"="hps8xx8z0vviywd61vhkh8l758c0gndd";
+"shapepar.doc-2.2"="6i0vwmvrphkjrqphk7vmxphhcvj89f0n";
+"shdoc-2.1b"="grva4fsbp32pq2x7g4wb415y5cmf4cnx";
+"shdoc.doc-2.1b"="ba16nzmjm53zjq81w2zb6npd21wjfg31";
+"shdoc.source-2.1b"="mqn7081yqr3l1yhv3cxxrq6jwnd2h6sq";
+"shipunov-1.2"="y2wk01lmmvjgcfakrn8299qxdg01k0lb";
+"shipunov.doc-1.2"="2j0rf5g6w08szbw6w5wnh45sa9x6hlw2";
+"shorttoc-1.3"="win5ajcivg0ipf38dx85vhhmfjfl1scq";
+"shorttoc.doc-1.3"="9msyjwld245v4a3qvl87q9wxl33rdyg4";
+"shorttoc.source-1.3"="frmzabjdlmlg6n8ds6g45wcm1qackwxw";
+"show2e-1.0"="4gp9cvjx4s9zvsg6ygvpggy35f2qpgxk";
+"show2e.doc-1.0"="zbffqf6nvy9r3ghn718xz2w5piyjqvxy";
+"show2e.source-1.0"="ikfkd1bw7v2s1jv2lzcv5cpbxx72w0f1";
+"showcharinbox-0.1"="282ndmd5991sj7s7znbp3w6sfrl42dmy";
+"showcharinbox.doc-0.1"="xc0lm97nc2j5qs6qa45gh12g4866pdzh";
+"showcharinbox.source-0.1"="v0mn2l95n4mhmxglwrqzwcs9h31hb99j";
+"showdim-1.2"="8pk9x9rwpa46lxxxcrdrj8qvifs30x19";
+"showdim.doc-1.2"="g9zbjc1awcan45gik1czyz2ggnygzzpy";
+"showexpl-0.3o"="d6w2jrriv8w2vplqpgdi67wyl6wfaf7g";
+"showexpl.doc-0.3o"="v8jfqrzrsjxfvxw26qfw7ifj6n56q1cm";
+"showexpl.source-0.3o"="fir737kinjxq1w6igrsncks7bj2asxy6";
+"showhyphens-0.5c"="fcmfcmzkv9k6k2d6l2brhwwvffzz3bcd";
+"showhyphens.doc-0.5c"="451qz6c2k3mvnr488s138m8wmgsf1zvs";
+"showlabels-1.8"="qpsrz097whnqv7phnrpff1j4spc0ccrx";
+"showlabels.doc-1.8"="7pi69s9qfv69piak041lxa0vy3swg91b";
+"showlabels.source-1.8"="raf4jncf7q4i31g7pswqriafllv6rw3c";
+"sidecap-1.6f"="2fcmjz54dxmvynqhmyp5wjlim72rmd7h";
+"sidecap.doc-1.6f"="c4j5qlprbhhki237x3ribn1hhwjiznz5";
+"sidecap.source-1.6f"="22q6s65b782lb9pxqi5iplf6nmf5ni8y";
+"sidenotes-1.00"="28y9hy8h1sfpz19s2d8lxbp292fnlrxy";
+"sidenotes.doc-1.00"="5ikghxxbd0ap3lwr2gqnsia0916ygnj0";
+"sidenotes.source-1.00"="dq548cxifbq345z7ky4xi4nan76c57j7";
+"silence-1.5b"="nabq9i9ix7b42zkk5zq38bl47fhc46vi";
+"silence.doc-1.5b"="9rb3mgnavsarwar2i58s9fp4m13pckrs";
+"silence.source-1.5b"="i3siq83ph2lkjfrvc2zbmn5l2i5ssxkc";
+"simplecd-1.4"="i1cpvz6cd0jp6jw2r10s9qlyqig991h9";
+"simplecd.doc-1.4"="5q6wvnkcx16vpfpzngc194f107fjmbnv";
+"simplecd.source-1.4"="vwb34fhkimk2zsz5cqg8hslvqwsi53s7";
+"simplecv-1.6a"="yif1v302airw953py87hf8xw4vdvcrh1";
+"simplecv.doc-1.6a"="172h9r26s8zjpla2g0ah86z1r9k06cy7";
+"simplecv.source-1.6a"="rqyp3gq1k6mbbfmvxi437dxh50qrp7n2";
+"simpleinvoice-2019"="kib8y509s61mzcg5rzcc7s30ii39f88y";
+"simpleinvoice.doc-2019"="47f3zyl0g351p2xihryq6p21qrphi62i";
+"sitem-1.0"="vkdrrirvcya04rdwr05q5ah2r8qz68d9";
+"sitem.doc-1.0"="asga3xfkxjg1f7zc6jlnmra2bjaxw00k";
+"sitem.source-1.0"="9i52d6r144z0067v8skq23774dg8fk1c";
+"skb-0.52"="4abwsdqy977aj45v4frjhf5p4kqi08aa";
+"skb.doc-0.52"="hgwacvlqab84b3nv6rnmd79irl1ilzkn";
+"skb.source-0.52"="v3b3ggy38vp9z5b9n802dg0xi22yjpwz";
+"skdoc-1.5b"="s8ra69c9il3rmxdxrxpnpzndzyl6ka0h";
+"skdoc.doc-1.5b"="1fcygnqycyj387wgg3ngqgl6smby3nw8";
+"skdoc.source-1.5b"="a6ag2iwqkmrxh0x7dwksxax40n361kpf";
+"skeycommand-0.4"="w3sqnw1xyx8l1qb9h7j8jg8z3f6xsnvi";
+"skeycommand.doc-0.4"="y8kcbdpydw0an53vfw75nvs8f5rhp5f9";
+"skeyval-1.3"="r39dajvb7hh6437jbq3gly44i22im66z";
+"skeyval.doc-1.3"="g9gr3bwzslymzx3a5kja4n4s1n0ns5lm";
+"skrapport-0.12k"="3hili1y9sl6x37pixcsz33a0r1aqqvg4";
+"skrapport.doc-0.12k"="0w6nri4jmaqv9vi8rpg7wd9b68jk58fd";
+"skrapport.source-0.12k"="11fvh9n4pr8xsgg3zwvdxly3z9qrk87v";
+"slantsc-2.11"="mnqakna7b6f0pygw4c66jmxy2r2srpyq";
+"slantsc.doc-2.11"="p4z9p7p33xchy1vqjqpiyw38is5irja2";
+"slantsc.source-2.11"="8c2vrhsrgfpqb47wxik1inq8xpa5r50g";
+"smalltableof-2019"="a0sx95bj2ampjw3b7g4p56ji7fqwmdiq";
+"smalltableof.doc-2019"="1qrbnkki1in5kv142d0qzl3rxmrclm69";
+"smartref-1.9"="7pvgdpjcdvdxbkb1ag4dal46c1hg4d53";
+"smartref.doc-1.9"="hj0c7i3climwjy64h98ddab5skczf3mh";
+"smartunits-1.2"="z3kj39xpdk8pa7bzqdjd6g6qlhwx2vhx";
+"smartunits.doc-1.2"="r72h43bvig293769q6s8glhdlrcg9836";
+"snapshot-2.13"="pyg4abki4d4zy828r5spb45fax7b4glb";
+"snapshot.doc-2.13"="xaggw13x7izmkhcfl92ldqnzcz398zzh";
+"snapshot.source-2.13"="7hjbi6p9bxh9a405dzbhjlxmwyafckfm";
+"snotez-0.3"="vwnz8rgz6lkw0dvpq1m8xygq1qwrgn62";
+"snotez.doc-0.3"="8gxvxc7x918mf5b63b7n3wvp99ix5ka8";
+"soul-2.4"="161jbj81y5m8rclwl6z8pwpbpc0axy56";
+"soul.doc-2.4"="lssr7w6ry8p02mzmwyx7a2zzss2vmbkb";
+"soul.source-2.4"="9w0g3y2pqkzsbg8jdr1vkmn4wlrx1b2i";
+"soulpos-1.1"="908fbjhq1zkq0p3qg4ihs62zxd18988i";
+"soulpos.doc-1.1"="7l3pl7mbjmkpr9fwkrdcyjkhqvw2jfdn";
+"spacingtricks-1.2"="84f9wq44xbh1qsy3q6dnihgdfsdrax09";
+"spacingtricks.doc-1.2"="n9f1q4ph131jk4wfw5nk0991667j2403";
+"spacingtricks.source-1.2"="8a4sl2svxhs1wpwy5mz4iylzl701mfb6";
+"spark-otf-0.05"="9siivrc6cbck4p4vg4ly0r1b37h7lw28";
+"spark-otf.doc-0.05"="y4v051bqbhwc91ipzdfqc1yqrzd5hg0x";
+"sparklines-1.7"="swn54z70rhmbk917dpl37mfr3sx21525";
+"sparklines.doc-1.7"="mjpd57symvhnv6jjzynalmpqy3l4szfa";
+"sphack-2019"="gdrva3zalq63d7j737247ja9a22abdxq";
+"sphack.doc-2019"="3rzyc3sxq2bnlx5pw5xz1kb2gb36brgy";
+"splitindex-1.2c"="72wrcsz1vmka4qal90la093asf12hs6j";
+"splitindex.doc-1.2c"="gf9j1mi46ih0xanr4lzl43gpfjpjws14";
+"splitindex.source-1.2c"="1y60d6s6ws70dgjhn239h4x8c77hjmdz";
+"spot-1.1"="bfwxb7c1lmbvy4g1q7k6syz7yk8wq0zl";
+"spot.doc-1.1"="68spn95gq3irq4rk4p0aw6z7kghriyw1";
+"spot.source-1.1"="hgsxqd8czj5vmy43g4mvvc3954vsmdi9";
+"spotcolor-1.2"="rz2zax5g35slfai6rqmnqslib7wsi14m";
+"spotcolor.doc-1.2"="yhcw8r48q7vi0iryn18d1z746ij1wpkp";
+"spreadtab-0.5"="9hd8rpqawnk531m802dzwf9bgq2h6zbx";
+"spreadtab.doc-0.5"="xcwr817pa38amnm8agrbwgh3c4bb2fnm";
+"spverbatim-1.0"="cpn7cc2f4ila3xfq8yrr5456y2p5navw";
+"spverbatim.doc-1.0"="bnw2p20z8ga1zynk3v8khpgfgbjb5jpx";
+"spverbatim.source-1.0"="ivjx22khzgn0xgzbkb5y8q36i9wh3n49";
+"srbook-mem-2019"="30fmldc7ygh6c4a64z9cb5qcr1z400vs";
+"srbook-mem.doc-2019"="mfn2i8vs1h646gn5fcs3zh7lrn6gj2si";
+"srcltx-1.6"="pamgi7alvxixzd4dy68p502ifdlnz7fa";
+"srcltx.doc-1.6"="1lja1az3vfzxkf2d7pl4cyxbliqml0hc";
+"srcltx.source-1.6"="wk74304mhb77p653l52gmhc990ic0dfh";
+"sseq-2.01"="rypda83sq8zgcnd6fmip2nw85dpqkb2h";
+"sseq.doc-2.01"="2zw94ka78zap6914m7r3xc9slzjr0vig";
+"sseq.source-2.01"="1fw0mc1crac3fps3s62rskzhn946zffb";
+"sslides-2019"="5j8zx3q4f3cm4c78q4vn8cbvp33frz1q";
+"sslides.doc-2019"="xsh6d0caydlgs3kfc0zgw4m79j1vkrxs";
+"stack-1.00"="p32bbliciimyyfpizvi0cdrw7nzkmlx6";
+"stack.source-1.00"="x3hkdwa9hip4zp8paipd8yjjz10pysn6";
+"stackengine-4.01"="nivan4carz07sqpiymvlkjxswkqa9mjd";
+"stackengine.doc-4.01"="1xfhqhhl578sbpgp0s3d2nhddv85dlwl";
+"standalone-1.3a"="clgfqy3aqzn2pcalpfpmi70awz221pbl";
+"standalone.doc-1.3a"="q20i0dkgyfksm7npkiflphr7h2apzqc9";
+"standalone.source-1.3a"="lmqvfd3km9l0gbk05inz2ap09k5v8g0w";
+"stdclsdv-1.1a"="8dj2rvbpc7jbmn7bbxyvwpwmwpv9i1y7";
+"stdclsdv.doc-1.1a"="7rm7mkigckvag58agc7swy3yrg3jgpkg";
+"stdclsdv.source-1.1a"="3pkb3241arg1hl2gwh7ijr7wjy6naszs";
+"stdpage-0.6"="1vx4hlfyz6s89qxqk8kssq2z4j4bv7x4";
+"stdpage.doc-0.6"="qqh8y677jzbamylbm9jyx679sykp21ar";
+"stdpage.source-0.6"="asizav9m4vbfcrgl6c2qhnzsvl4ngmzv";
+"stealcaps-1.0"="8q97ghfyfnsmjp2jw2brp925hr82sprn";
+"stealcaps.doc-1.0"="3sdy3dqpi4axamhvshixk7hdqmspv446";
+"stealcaps.source-1.0"="xzysv6jy1bzcp1dww6imz9358id28lqf";
+"stex-2019"="gaf5gfk5kwfy1m8m4wwfkhx0cppxj58b";
+"stex.doc-2019"="rga6abj8kqig904y3wm4lmzi7lw9jccy";
+"stex.source-2019"="x7x55ags2g5ks59zpcphv1m37dc91192";
+"storebox-1.3a"="kc1a9kwyd31s1376b16hidk21cz2q2zv";
+"storebox.doc-1.3a"="qhjcw6fzxlkzpgnk0ra7l6fqp10byiv6";
+"storebox.source-1.3a"="6zzmya7fcjajy73i8iys9584bldh18z2";
+"storecmd-0.0.2"="k2y4zjx31k7014wpb0kvg3ivm3ssp1kv";
+"storecmd.doc-0.0.2"="8iskfkck7dgqj3i0knwhzqfvhmv1pr74";
+"stringstrings-1.23"="3jyx0rjn2y5s3i7mdwgmbfygfqmph5v9";
+"stringstrings.doc-1.23"="iwlccyqlbypigdzw8dmpfif08wq8nv2g";
+"stringstrings.source-1.23"="lfm6lqdy2r3lazymqcca7padzmcvb0a6";
+"sttools-2.0"="hhzhgswnm5a26ivlaskdzmma472vsl11";
+"sttools.doc-2.0"="rdvrvdri5g9pb2pm6m95sibp73a73d9w";
+"sttools.source-2.0"="95j75a9qmcpqi8b8fm2hagdmw3fzcn50";
+"stubs-0.1.1"="5ia769ndpi4pcrbg6cljdbpxsx353qlj";
+"stubs.doc-0.1.1"="apc0wxqj03fhbab6nwwh5rvzc6i9la8y";
+"studenthandouts-1.0"="3gss3z8gv8fyyj3qygmwmbp1jxs7k7dn";
+"studenthandouts.doc-1.0"="qjih5qdi7861v2mafv4bga62i0lmss3z";
+"subdepth-0.1"="p59zl1bmd52xsf51l1qf4ij5j7qj9f8w";
+"subdepth.doc-0.1"="973874d1ri46l5ixgzrlqxf09lxbhq3x";
+"subdepth.source-0.1"="sdij1y3j4dy8y19pb4aw2azb48i5rssi";
+"subdocs-0.1"="hab4i435srvd4mxbbd6jvg2dpcdcrxri";
+"subdocs.doc-0.1"="knk6a3wn83r8dnqigzx71rr2zn78v25k";
+"subeqn-2.0b"="26vzla83zaqnkwf1llwly1jnmb9dvgnp";
+"subeqn.doc-2.0b"="121c3hsq5lnfx05k85kkgym9a6554ilx";
+"subeqn.source-2.0b"="17dmj6k881xy7cjmx62ranh04x1j946b";
+"subeqnarray-2.1c"="6gn9rmk6b4ssblawa0q1ghhc0pj3d75y";
+"subeqnarray.doc-2.1c"="jx8qb5fyfv0dvkrxiw3dvc2x3hq2ik7g";
+"subeqnarray.source-2.1c"="17950bjzifqhmq4nbm0b3p1dva50nwjs";
+"subfigmat-1.0"="gzki9wj6fvc1rlq1izvbcrmbqqr7w78h";
+"subfigmat.doc-1.0"="kmrf6v742z4wvbrvnjxkzh0kvqnw356y";
+"subfigure-2.1.5"="rnd1mc9gr078d2vna7vwnhv420mnndch";
+"subfigure.doc-2.1.5"="zpsn8d5b6h8s9cwbl4fd9iv6w7hypmc4";
+"subfigure.source-2.1.5"="10lv7vivb3hggcyv8hkygjhhly6ixxlf";
+"subfiles-1.2"="l6qiqpx5avdd2hvfair8kcl88kambnq9";
+"subfiles.doc-1.2"="18d3d5illkyarf90hhsbv62426gp32qh";
+"subfiles.source-1.2"="2pn71xj9k0493xdcgv2f88kw9hxvr09s";
+"subfloat-2.14"="l7d8iz54q7zfi5764jfl8v786wihisw3";
+"subfloat.doc-2.14"="rx97nj1mh981n89pby4prni2wfmqisj9";
+"subfloat.source-2.14"="3a8hj83wyvwrsfk0v6ibzmz4ahzvbkv7";
+"substitutefont-0.1.4"="rga587cq7pkf8b6w35pz76ifpb9h674i";
+"substitutefont.doc-0.1.4"="scmkff0sh6wypcq03sz2prsj7qx362ak";
+"substr-1.2"="qahdkj07s8nl7fnbqgwhsni6w8bn69ch";
+"substr.doc-1.2"="nvjl7r3a8r697gn8p3n81yaamr8jrfs5";
+"supertabular-4.1e"="51mc5fbbk13mmpya5n8lrx5yyk4k1167";
+"supertabular.doc-4.1e"="jmm0dxfps5p36r6ds1fpx00spx10rrv5";
+"supertabular.source-4.1e"="0wa3rcn787hn4707zbdm0jdfflp0dyf7";
+"svg-2.02c"="krfz6gsvr8kx2797caw886znzq4vzhjm";
+"svg.doc-2.02c"="irsvz87m3xqfvz3pvagl5xh0fgfx9pz5";
+"svg.source-2.02c"="wcjj10nzrk6qlmp2402ppl5k2j1nd522";
+"svgcolor-1.0"="ld3wccj2cxdhv0xyz7qmxcvr6saab2s2";
+"svgcolor.doc-1.0"="nj7w6bihmr8hmvcykya9nkxlkhmlcw6r";
+"svn-43"="hv7xk90h5qb4ilx7f4a6zybijnhba9ic";
+"svn.doc-43"="94872fxawm8m49wk0maxvgxzhy000v90";
+"svn.source-43"="08x25isf3p3ixrmc3vy7bdq7kzx72v7k";
+"svn-multi-2.4d"="44fslkzz4ivgq4j3svwhyh1hy7vrzciw";
+"svn-multi.doc-2.4d"="8yayqnji00qcgjah49ffbvwhhdiy9b15";
+"svn-multi.source-2.4d"="4pacxngn9zj7p0hynj1nd3dync6cgaaf";
+"svninfo-0.7.4"="761kpr460h6nfczsf1vakdj9r947in1s";
+"svninfo.doc-0.7.4"="qlhr7rj98m7g55kgrms1jjw3wp3k7z4v";
+"svninfo.source-0.7.4"="xsf1rs0ar8ris0dh8qbslxwx5i0ci6ck";
+"syntax-2019"="1bvja2hjsw8p68202f84sbzcrs0f7d27";
+"syntax.doc-2019"="pkf7w0xwcnl7cm74z99bb32v4ycn4wmr";
+"syntrace-1.1"="02njfsdqh7ssnjcsnpmzi3iwxz2yfj9f";
+"syntrace.doc-1.1"="v5q7643l6spib4kf6mma67pl7xm8aaqc";
+"syntrace.source-1.1"="qqmfivdpilm8qp26v7kf3lcvfp582jv0";
+"synttree-1.4.2"="h94gmy3p4vdg2w1qffsdj02yc0zf04hr";
+"synttree.doc-1.4.2"="vcvl56r20md61vdwphvwncp0mn1105sw";
+"synttree.source-1.4.2"="wc8sjvp0fkvsw9ayybf68ka7c7pz7gj1";
+"tabfigures-1.1"="spwphj1m563rip8gq09fb97mz85yqwiw";
+"tabfigures.doc-1.1"="l68l551i2skm8yns6r2f1ji0kgxhx56a";
+"tabfigures.source-1.1"="6r4li6abzpgpv008xhy0x3lyywpy2w5d";
+"tableaux-2019"="b4zz5qhahr3kxwi68l2hh92w3v29gdry";
+"tableaux.doc-2019"="g4v3wbms4yw4wmzkm6v9aj3l46l4fcxy";
+"tablefootnote-1.1c"="axmzyplpbyfmhfx7jsijk3aaqcyc7c9k";
+"tablefootnote.doc-1.1c"="z65aphzdy953r1r3a5lzpvizmhs638g7";
+"tablefootnote.source-1.1c"="a1qbk028v26pld26654hsl3j3fc90js3";
+"tableof-1.4b"="q6bcg5m4s018c4fihhar660yr63nviqm";
+"tableof.doc-1.4b"="h5vaph5ql8h4rzk9g9zh5ysg7hia54fq";
+"tableof.source-1.4b"="68iil4aymv6wq7pm7kfszrq928gmv5g4";
+"tablestyles-0.1"="91l6ysgskdcijj4zh756956i9s4cmlhp";
+"tablestyles.doc-0.1"="8j8dyc0fxj53xi6jq8vabn7hzrd8krsf";
+"tablestyles.source-0.1"="5kdg1v2s60j7cmrr0w0q2qv58jznkxk4";
+"tablists-0.0e"="5f0qad58xlf65y5204jsg3ajlrmgga3y";
+"tablists.doc-0.0e"="2p6b5b3b693cicbsid4zfr4lqvyiw0z0";
+"tablists.source-0.0e"="jwabyps9hwly3s2xx4l0vs3xwkhg0a33";
+"tabls-3.5"="gdkxv2mfqga5w7pmc8dszx9csma95imb";
+"tabls.doc-3.5"="dg078n18gai6glbgwh0p45560s4zjs4y";
+"tablvar-1.2"="ap3wf7pg37i4cg5cyjzmns9kk4hig3gr";
+"tablvar.doc-1.2"="yvbnydls66gsbdmigljznnf9qf2h53j5";
+"tablvar.source-1.2"="9hjw3agsihfc7lwapgbmwrl9sa03l9zv";
+"tabstackengine-2.10"="df71gwvw34lf6xmarwwmpl897zyar75j";
+"tabstackengine.doc-2.10"="yi5yn8dj15sihk5hdwrjj8vmh3kgkgz1";
+"tabto-ltx-1.4"="9wp6kwifrrzi7xf9m8zgws5ym0vmln5g";
+"tabto-ltx.doc-1.4"="09g64mbplmfgkxhsgqk1rwqw2b8p36yq";
+"tabu-2.9"="pvg42mixn7f8vvz4ll8a5y927hhzh82s";
+"tabu.doc-2.9"="zsybb13fpnbffljq4w7vcpl3nmvg5xk8";
+"tabu.source-2.9"="88pnpips4j95nj427mydnjzqa5nmb2f0";
+"tabularborder-1.0a"="cfbcq6f60xjzsdwdcxnf9alsgdwcgi25";
+"tabularborder.doc-1.0a"="wgd2b7s6bc3349rbhhafcg9iz3wwky33";
+"tabularborder.source-1.0a"="7dchkfap6l9ff49i0xwlpxd04yvh672a";
+"tabularcalc-0.2"="6yz4wvk7638prhnwiwc8bs6fm860ck9x";
+"tabularcalc.doc-0.2"="clkpjkck0zxy4mw71hmm1alysdxjbrl9";
+"tabularew-0.1"="jzndhmbh4fnsksf70wbn4cylp935csa5";
+"tabularew.doc-0.1"="m1jnxhfd882nzayknxwmxl8n535j3by5";
+"tabularew.source-0.1"="1438gnd88289q786gddq2i5jf1gbagxa";
+"tabulary-0.10"="4lnwhfr4bnawqgc5hvmp9m5gi6dmw679";
+"tabulary.doc-0.10"="439yc9m6b5na2i8kg8axqgx2pwhlv2aa";
+"tabulary.source-0.10"="x6a4q2rfm6z97ylwh2skqcpjlf7kap5s";
+"tagging-1.1.0.1"="x89sfr6zw3szcw463a7hyydjancfr14k";
+"tagging.doc-1.1.0.1"="svs9ig2xs2c76mmyalsfsgvzw7x1x6zz";
+"tagpair-1.1"="cw696a7ccw159f38sa6av7f2cr2w5mcl";
+"tagpair.doc-1.1"="n06xlqq579by3hq5rwsmh0l6x1damdrs";
+"tagpdf-0.61"="k0xs4dxr3f3xggz7kyy1yiz2lgvh70yy";
+"tagpdf.doc-0.61"="p7fsdpx0vlsrxkx8h4mw4vhj8i65q3lb";
+"talk-1.1"="w3vffx02kp18gxkk2khsnhcpzhd6kvjq";
+"talk.doc-1.1"="1hcv41gh3rcxncfqv75w92a2hdnb55nq";
+"talk.source-1.1"="mvqbaz1vwya42g0idhhp948dxmb5z0q8";
+"tamefloats-0.42"="biipxghplzwd03drjpiisijhdzr4i04i";
+"tamefloats.doc-0.42"="mnmrchq7k8n04dx35r1plzxcw46hx4cj";
+"tasks-1.0c"="26ax537zl8bnki6rgzv9glgismvljdlr";
+"tasks.doc-1.0c"="pjf8b495x5rl68wiia2g7dhy4x651wcm";
+"tcldoc-2.40"="r9i94qmf78q9j3adkzfly43riv2bzdmr";
+"tcldoc.doc-2.40"="fh6a7m41gxn4988pwr90ph25gg26ky40";
+"tcldoc.source-2.40"="p007ccff6w6d3nlpsp3q476vg9m4rjq9";
+"tcolorbox-4.21"="2w7jrqw2ryfdzidirnxcj8n05dy7j3px";
+"tcolorbox.doc-4.21"="lq2kg4ks9amfj0cm8z87v3izi8s202cx";
+"tdclock-2.5"="dzb2gj8y1dv7qm5mn7xfgzdq9aydqjk8";
+"tdclock.doc-2.5"="sgdpiwcnkifms1lx7xicl3xj194lfhbg";
+"technics-1.0"="cav50vxgp01465wa07bmza4blgsv49wh";
+"technics.doc-1.0"="ljp1qfv5zl1mzgyg5cxb5bgsdm2bdbnl";
+"ted-1.06"="2rd9qzrp0i0yk9qzz4g2zsjafswd6m91";
+"ted.doc-1.06"="02zyzvjncgpgm4iy2nxkx209l8dhgkm2";
+"ted.source-1.06"="isk5yz52jxsdqq8vzcvr99xjcg5sy7pz";
+"templatetools-2019"="byxkf3ad6nbxsjvmqda6iv4qxwh9r66z";
+"templatetools.doc-2019"="yv7q44lxn02yn1fawm3rkcdia11hq99s";
+"templatetools.source-2019"="4cvfpn19a3cqhx9sx2jin35ycakq4wi8";
+"termcal-1.8"="brb1gf3h9zaa07s0ppbvgjiava0yh9k9";
+"termcal.doc-1.8"="3k8kgf7fy8b24n2jbx79a55awzs54far";
+"termcal.source-1.8"="k680hlhzp03wfxnxld82sgsnaggfw38g";
+"termlist-1.1"="150mm3428j9yxvl6jf2y6l66wcymnx1h";
+"termlist.doc-1.1"="b8kdav6vj2hxhfas9s69njvg61263qla";
+"termlist.source-1.1"="c3bvnl6srxclx3fwhrkn9kk1wb08g1p5";
+"testhyphens-0.7"="xn9idcggd15gxl0iaphmlafpwq8ywilj";
+"testhyphens.doc-0.7"="fpkvgpd63hz8zyra7l22rgb9cr4yiz3a";
+"testhyphens.source-0.7"="fg7vps18xgf21gknlbcdikxn1yswafx1";
+"testidx-1.2"="r8p1fcwygn1i6qay7bj0g3qsh1xbshyp";
+"testidx.doc-1.2"="42qb4bpx6fiqg785ij9nsxm23mj291yz";
+"testidx.source-1.2"="kigppvv8csnxmspyd74928qz4r829ghy";
+"tex-label-2019"="wc2rqwp08adm869xmk7a6wkyzhfkbv6n";
+"tex-label.doc-2019"="lf9ff6q6n9rqng6akvbds9f1c6xiq5m4";
+"tex-label.source-2019"="vg5180hyadc0bl0hci4wzx90fvpxa2h9";
+"tex-locale-1.0"="l1ivcvf81xx7g4qm4jr778ssnyzf6m92";
+"tex-locale.doc-1.0"="01d792zq1yc408zzs3lpx3zffv7bi85f";
+"tex-locale.source-1.0"="ak4a3mf5q29g02rx6iy7yv2kp51gdqjm";
+"texlogos-1.3.1"="la6b3lzn1c4gw025npmz5xdm5rnq9n0c";
+"texmate-2"="0i38p40p8maw2v0lypaph7fad88dar56";
+"texmate.doc-2"="vaq40vr5526ic3fjdb2n1fr1q9s58wkv";
+"texmate.source-2"="ngmx2xsnp23cb9qg9n9vh9bl15jgyc3m";
+"texments-0.2.0"="sxnhbqflb88xcmnikjnp1g06zirwc5yz";
+"texments.doc-0.2.0"="lrf50hzpikrzd42q3ihrr1j7sv5prlzq";
+"texments.source-0.2.0"="hb7da3zhw9gs8kr50r6afq7jzs1ybqp3";
+"texpower-0.2"="i05qrli5978ydqd8hax9p81disb96n22";
+"texpower.doc-0.2"="qhdk9dhzlb9kb7ns98c6k5p105kdi4pb";
+"texpower.source-0.2"="4f9jhvif763mqkmkazzalwxilnvgw7mg";
+"texshade-1.25"="b1amaw79k0l8vk85pxkj9r0qzbhrl5kl";
+"texshade.doc-1.25"="b09yid08yxw3cc8bry9ka6w0rbsd8qi9";
+"texshade.source-1.25"="1bw37kwiqgj88qp5g6wd7ckgglf3x2wc";
+"textfit-5"="cik0z02pjb3a4xsbrfqjzva9m8cyab91";
+"textfit.doc-5"="qzr9w01bk6ia7hv5r21m2nbfz2hldc4q";
+"textfit.source-5"="g7ij0x5yghxq9jfr5vxq7vf5h8py3jx0";
+"textmerg-2.01"="k9zrf9l5a75pzf1c30fxx48kly07m2rj";
+"textmerg.doc-2.01"="bjgcbyn95fi8kpq91kkhhxbarw5dn526";
+"textmerg.source-2.01"="4kws4jyfmh7w7z258clr3dd4x7k98iqj";
+"textpos-1.9.1"="9y69phigp9a3mnpxm8pz73scqkjrajfc";
+"textpos.doc-1.9.1"="xlp3qhzsccwq3dsxs86pn66kjd0hpnfa";
+"textpos.source-1.9.1"="617mdm7hify7hwjc7w0af3fnc0d65hs1";
+"textualicomma-1.1"="99h4pfsjnfy89xpwh4djj8fnhkwwxi3z";
+"textualicomma.doc-1.1"="10pyym40s0jszs7632hqxna94x3czwrm";
+"textualicomma.source-1.1"="14fqq28b54pw4b65kv1kwxif9fcr175p";
+"texvc-1.1"="x48959hg957jqqqf4ijb6wiifbrm71sj";
+"texvc.doc-1.1"="pxgl51bvjh0dq9mbs3p65v8giqz5p4zd";
+"texvc.source-1.1"="snic6z1hg65qvljsg4c5faqrjy7hk9qg";
+"theoremref-2019"="1md9iqkfgbhg6v64sgm94lp66x085rwr";
+"theoremref.doc-2019"="846wd88w325ganigw2g9rvhcs9is6ziv";
+"thinsp-0.2"="flil5f3fr9ghxa0bffvqy7wackrg7q27";
+"thinsp.doc-0.2"="pk93sirkywa7hmqggnapklyz0bqy04c2";
+"thmtools-67"="9hby99z4aghnf12c5rdgk7vihj40i2cx";
+"thmtools.doc-67"="y5461jls5a09p7q2ndgdn94ss286jc6j";
+"thmtools.source-67"="v96bsmdp8n9g899sprc0divhd43svw8h";
+"threadcol-1.0"="jwbi62xbc0cmzv65spvx1i6dijg34w6n";
+"threadcol.doc-1.0"="j6v3gi6c2cnhs8z5pm0j1cwg7ayi4hxj";
+"threadcol.source-1.0"="0irgk3ajakrjf1bgbfd71qvpy35fklmb";
+"threeparttable-2019"="1fmr9sbssycx23ql343hvvk4k0n90bgj";
+"threeparttable.doc-2019"="4y119m8549dk5kv4sbhh614nijlv0vx5";
+"threeparttablex-0.3"="7slkq5cfxlah9ckr408l1wqxxc9x5hkh";
+"threeparttablex.doc-0.3"="46r8874q74dgja9ivs4i3wcg35lwlv0b";
+"thumb-1.0"="knz4ixhqam9i803vpaq6qmghx6n7h9hq";
+"thumb.doc-1.0"="mk0751c3mjb5fmw2yxjjk7az8d4ay6qh";
+"thumb.source-1.0"="nqdrk52fc7yrzqfk3bjxxrfyffxa3pjj";
+"thumbs-1.0q"="5ygdz2db68fdz929bqdj60yi8wnnb48k";
+"thumbs.doc-1.0q"="28cswirpmah87x2ll9bld2q95hyn9af1";
+"thumbs.source-1.0q"="pqgs9730gibbg66f9cspb9qlkqraic52";
+"thumby-0.1"="15knwd9cgdmai53kdckgwap67qz0fmn5";
+"thumby.doc-0.1"="6k49q0bwkajwd7wf5wkr0028a7c6p4h7";
+"ticket-0.4d"="skfs956s0lzbxac4ydds9ynam475zk1y";
+"ticket.doc-0.4d"="c6d6arnzv37pczxs39h99s1isldk36fi";
+"titlecaps-1.2"="lf0q66qrj3kw5hs90fbhr93dz7ik1gx8";
+"titlecaps.doc-1.2"="qb1mj8p7srqz37f77wqs1igfcpl8wsg8";
+"titlefoot-2019"="1ggjs95rzvlmznqb8s67f7f3cjid5ynb";
+"titlepic-1.2"="psapnhni7mhwd94s2qmki4hdlpbq3dbs";
+"titlepic.doc-1.2"="c363symm32mhjg8cxw9j4xsmyhdl58kg";
+"titleref-3.1"="1ai0w05ipy1dlxm0n78jzvpdgp42j19j";
+"titleref.doc-3.1"="6rgspvqn51kiw9gpp9bc59jxlyk654f6";
+"titlesec-2.13"="69aqh5wsyycjczrw250kgp2ay0bv0qm8";
+"titlesec.doc-2.13"="g7s6fj2s3g0mj2kh69q0c72y5xak8i12";
+"titling-2.1d"="hzs20qk476wwff6ammqfv863zc50qnib";
+"titling.doc-2.1d"="m84ffgjikqkxfa4x86g7gljhpq1snxva";
+"titling.source-2.1d"="kr5gx6mfggxyxyh0c2pv1y9fzhzw6dq7";
+"tocbibind-1.5k"="f5kf8lxqhg6hn7qjnxxmrwphi11ndgk6";
+"tocbibind.doc-1.5k"="v5vwh1sm8bzqky6lbabvk6j3gjp8bxx6";
+"tocbibind.source-1.5k"="xq2f0iby2zafyghn0a9pjbvv1hw6z6fb";
+"tocdata-2.03"="k4q3rr13qywdl798lg7rx8zgqyhgc0cf";
+"tocdata.doc-2.03"="11pgqzlzvx5hxgw2fizyjrq670d1154d";
+"tocdata.source-2.03"="adp7jfmqm6p1l7gn7p07j7d18jzg7i63";
+"tocloft-2.3i"="yjmv81gig4vic5qsvg5mlnzgksspjgyj";
+"tocloft.doc-2.3i"="nh0fvc66rrd9ckyxv9gyackd180kikni";
+"tocloft.source-2.3i"="3mcnwnx824kls2j5ln3b80hcvdk8ch51";
+"tocvsec2-1.3a"="xwl43cb8m7y9vf9bbkc1lb198mh0yg9k";
+"tocvsec2.doc-1.3a"="pqvg5ky3w445h7i4hf1v1mcq5mpl3znm";
+"tocvsec2.source-1.3a"="8q0df51x5bbj1xphln6skb4cjdicfynm";
+"todo-2.142"="2ydakqj3py3dsviz4npq41s593blhag2";
+"todo.doc-2.142"="hs7ghig9yh4xhyr1y6n570vkiwmimv8r";
+"todo.source-2.142"="3gwsvfv1rhr1c6jb1xdgm9ycws6q8m2r";
+"todonotes-1.1.2"="k9dcrj6jpppwhp1hkibcdpwnpm3fmx32";
+"todonotes.doc-1.1.2"="6lwri4ybslcrfphvg8cah3fsw1lv5liz";
+"todonotes.source-1.1.2"="xyjg7n8m9aq7ykawy9lsa677jpylz730";
+"tokcycle-1.1"="8gd2yggcky1ag3p84z3cm7bprv58qxp9";
+"tokcycle.doc-1.1"="p0r03jvr9r58sr16pb1ihhnjqpmb5s6d";
+"tokenizer-1.1.0"="k1ixh9ndc7r9cna3q86cccz4ibja32cs";
+"tokenizer.doc-1.1.0"="yvz9x41xdnf5449k2ixpbwrpgyhwpr5y";
+"toolbox-5.1"="czvh3swrgna1q4bf7dvbi6vqvaaja1z4";
+"toolbox.doc-5.1"="xl7w44azdaxsr34cz9fpy63pzfgz1pm6";
+"toolbox.source-5.1"="72cwzx2fbbqb0q7n8s2r8rwckfrfc8vj";
+"topfloat-2019"="a6wpasrna61fbpcb35m1gighj3xshfrp";
+"topfloat.doc-2019"="1gqq1kwkhj4s99vrqc3hys2pzr691k0d";
+"topiclongtable-1.3.1"="039ngjqqsjqslmsy4wj9j8lvysdyg2d7";
+"topiclongtable.doc-1.3.1"="66a5bw5zvxrn4dkcyiz8vi9l8qqjcqxb";
+"totcount-1.2"="mjp1wrksnwg89cj9si72fj1zjyrw9szn";
+"totcount.doc-1.2"="q1j4ja1xiqc4aahh7d02cnm8pvb356r6";
+"totcount.source-1.2"="g56d6lcx4g79iqg8af4nazv3lf3973ic";
+"totpages-2.00"="5lxvigm3prx6djwih6imgxf27d57sw2f";
+"totpages.doc-2.00"="9kxxf13pfksp7whw0rkx554qn9dbbbhj";
+"totpages.source-2.00"="y4d9lbpab1xlfdd69q2558c5d0ka5mrj";
+"translations-1.7a"="lf9q67l2kyl24hbhr3ir66rq078dydrj";
+"translations.doc-1.7a"="adqaxzgjhsjn0hcryjgbib4f1n6yii0f";
+"trfsigns-1.01"="5q6ajydw6n8k0b6rfflyp0bh973n4lqa";
+"trfsigns.doc-1.01"="bapnr3mrhxw22p78cg2y7gjbwfqirg7f";
+"trfsigns.source-1.01"="mmk5v5g9xidmfki3jnik1m7rmwcp0xf8";
+"trimspaces-1.1"="cbpq1iybp4vqb3mrbi457gfrfiy4mx5r";
+"trimspaces.doc-1.1"="b2phanji8899yl7ihwrshdqixkmir62q";
+"trimspaces.source-1.1"="07ckjn7k7rwmvr2wji8y72rs9q3nwm0g";
+"trivfloat-1.3b"="vwnj2bh21crx1dkyhq36g4bxpiyjwany";
+"trivfloat.doc-1.3b"="dg12fam23s6510jskihm7hbwvf22p442";
+"trivfloat.source-1.3b"="dr1x8k6sx8rzfglz91clqwfyzl202sai";
+"trsym-1.0"="cxghw734kqq91crnbdrjx6dva71n13zq";
+"trsym.doc-1.0"="c9sygxys9bmz0j9a4w5lalhzggalayax";
+"trsym.source-1.0"="ybdjpd5m7l20jbzf3bxg302fh0r0g6sc";
+"truncate-3.6"="lxlfhy1bngnws701wa0c6zm10fi6b4d0";
+"truncate.doc-3.6"="1bgd0gxv4dhd4syr5cylb2gi2z4wcplv";
+"tucv-1.0"="74q08ki5qlbm4pvc5x9237sz648xy7b4";
+"tucv.doc-1.0"="vnqr21nhz99w92hwc2mjkr8618f1xk24";
+"tucv.source-1.0"="85rsysj0whl6f07njaxigyk14ij204gc";
+"turnthepage-1.3a"="kiaa5nrr0q0zdgbl22349ilfl23hlzvl";
+"turnthepage.doc-1.3a"="akqb1g5iyf9f7shvsm0v5wqzi43w8974";
+"twoinone-2019"="mg0zc3lsfzqfcj9w6qgqiynjkqki9h92";
+"twoinone.doc-2019"="8shpm77vq1ir8f18ix6ddz80jn0qg0ni";
+"twoup-1.3"="9zz59lr969ia2fr0kawfiibwfvjz8803";
+"twoup.doc-1.3"="scznf4yfaq02nd7yq3fkjxn2cnzhd0s8";
+"twoup.source-1.3"="rksz35jmn56sd5s5m3fmsp7a33rgk0c0";
+"txgreeks-1.0"="6g3vnp9prv91yjr054dshpgdl2f62w2x";
+"txgreeks.doc-1.0"="rvca7hs2rrssy46nd855knh10jkav8s0";
+"txgreeks.source-1.0"="aifnmmsvmda0vs6xvw2xrl3dyvr6sxkn";
+"type1cm-2019"="fnxv8a4anvnhl4a2hm1fx45hpdns24mh";
+"type1cm.doc-2019"="fly8yjqm52klwal3cpiw5c3c8pmy75n1";
+"type1cm.source-2019"="735jsqhiaa26wlbbwq764rl18s3j1s7v";
+"typed-checklist-2.0"="nb46bydygh6n37z3w9rcl4vdlgd0jlyj";
+"typed-checklist.doc-2.0"="wpqkpzji27rp6zvrhy988fgjf1mf9hn1";
+"typed-checklist.source-2.0"="yp6qcgrbhlggv7c7n5g40gmiz6azflz8";
+"typeface-0.1"="cfgy9wb6gcjvx6ki1paf42l8qwsh7glc";
+"typeface.doc-0.1"="60y2dvas00811spzl8bjwjzm6hz1plvj";
+"typeface.source-0.1"="v0i8v4sgr0df953cfp39d20shiyk69c5";
+"typoaid-0.4.7"="ab2akk0hicpkgis255a91bqzn67awvba";
+"typoaid.doc-0.4.7"="ab6c2n162jl25cmynkks5z0978ki0myn";
+"typogrid-0.21"="av412ig7qlf5bq7rdwvsg4ik5rsx94dm";
+"typogrid.doc-0.21"="assax9xx3pfnb27qal4q5g2wgxa87mwn";
+"typogrid.source-0.21"="nqrxi01vw8mia4pswp68yvj1rxnya86v";
+"uassign-1.01"="ik7140q4g30a15p6pk9lr09xzvpk9wr8";
+"uassign.doc-1.01"="774bv0pld1aswbmfddl40bxh55x2llk4";
+"ucs-2.2"="7czg37dhlnzl686gaf2fzl0khkl9cca8";
+"ucs.doc-2.2"="z3jxd58nlj0lkch4gc3jg4nwc2aqgzwr";
+"uebungsblatt-1.5.0"="9z0cwx5jfib1mfyq49bq2yl0yfacwg89";
+"uebungsblatt.doc-1.5.0"="vps5ya9a8z6hv7lynd0fwizwxdxyb52j";
+"umoline-2019"="2vm0z3pykwnz31pyxxpmgdl3bbpzxi0x";
+"umoline.doc-2019"="i3rs7g3iqdqnkhicadrnfr981fwkmw8x";
+"umoline.source-2019"="rsd9s0gqx20dvf6sk91gwzlsx4mq6299";
+"underlin-1.01"="vp1wvsy871d28x0z1rw4pgxw9abkr8yg";
+"underlin.doc-1.01"="8cbapdd7sbqfxs6s2fx6pv0d8x6b0sjs";
+"underlin.source-1.01"="52j0xlhajihpgw5mp5zgpnsaiqkyfr62";
+"underoverlap-0.0.1-r1"="k0if1va0b85k80mksnr14lrrgwbsjwf8";
+"underoverlap.doc-0.0.1-r1"="yb4cdch2c1n2hgcs552cjzpp2kiyk2r2";
+"undolabl-1.0l"="d93inn1bzkj056nz3syf6zplallmmjy5";
+"undolabl.doc-1.0l"="qjjvwf6sn52vcnsdqz8my9ahbvv6h26j";
+"undolabl.source-1.0l"="1cjwgz2bwq3rwmqq1q23jbk6dzzawfl1";
+"units-0.9b"="b92vh3z7cr8q1lp5cqzkiw2dhfbla7cg";
+"units.doc-0.9b"="3c1a9x0y99lb2qw8scb0x70jzbh5kjkl";
+"units.source-0.9b"="ha3bz0p0xanqznz0nyfsa02j32wjdl88";
+"unravel-0.2g"="36q5f8m3v8cg5bg7g2b75wvdr05l6mg5";
+"unravel.doc-0.2g"="421v7md0nqgk4h33dnrixpvi67fi0fp3";
+"unravel.source-0.2g"="9v979jli0094ikbpf7dfyfizd7xlx6sy";
+"upmethodology-20190928"="kx48p4k7pcw622vsw0r4d2mhkvg3kiyv";
+"upmethodology.doc-20190928"="h5vqrk88hfxaqp86r93jkg59hhsjvsgg";
+"upquote-1.3"="3pr0j9wkyd8fzk026qk6vzsv5hlyccy7";
+"upquote.doc-1.3"="ilclzgj5m6nxhnz4398f5nwypf4jp2gh";
+"upquote.source-1.3"="4j1q8nck1g1cg4paz65l2zpvyimkf31r";
+"uri-2.0b"="4zxgavx9zjqqqvavpan2dlqkqjs3aqck";
+"uri.doc-2.0b"="dsfg7yx56y278kl5s5wwmnndiakn002m";
+"uri.source-2.0b"="samjvi571k41k0rv2scbnb6d8gnnamj3";
+"ushort-2.2"="p1yyh90qr3whijp18yjv9d6aqxp519k3";
+"ushort.doc-2.2"="p7n00vh408fnmq7j619v8dnj08fw5x18";
+"ushort.source-2.2"="jhn6sxdjyff94x69jhax021qfx39dca7";
+"uspace-0.04"="mc9j21cj64djdxspryc0knx00xm2krvm";
+"uspace.doc-0.04"="72420339xc9l7a1xaz1pdkn7clkdrm7w";
+"uwmslide-2019"="zf5gky1nzsjd1jp5kq843in2prllnk36";
+"uwmslide.doc-2019"="m67bshz8bpzw4vcsj1klgh8sz3mnbx8n";
+"variablelm-1.1.2"="gmqg9y7mmqmzl04n1zh8gfxzglhh4afx";
+"variablelm.doc-1.1.2"="d12x54ynkf2lq50m97p9s3wh2jr1y5jr";
+"varindex-2.3"="isp8j60q76fms3g4nlgf6d6da6f2y0xg";
+"varindex.doc-2.3"="k6f0ji2kbz2slr8cbsbyifb4j19wpx0s";
+"varindex.source-2.3"="g260r972d5dicmhzdch9kp77fxxakpqd";
+"varsfromjobname-1.0"="hy3mbsrrdd55ky6ilrmqfgc5dsx3kdl8";
+"varsfromjobname.doc-1.0"="inwn7n9dn0lym3nfh2szc3vfszhns7vn";
+"varwidth-0.92"="z2p07dqsj6pmdk6wm7snd0bih1s1q2dr";
+"varwidth.doc-0.92"="i4p58c787avqjqn5qqlcd19k8chxpp96";
+"vdmlisting-1.0"="8kkhifiignvk7ilb9ka1b0bssgc7vv1v";
+"vdmlisting.doc-1.0"="aqw59yhbm5sxfp4kmhy63npmlywh31dq";
+"verbasef-1.1"="i92bhi5drkn26s6lc8kwdm2z5f2qr0y0";
+"verbasef.doc-1.1"="qnn12d8793pgj92wfi0254n1kgi96r4x";
+"verbatimbox-3.13"="zb6kvwdpd9a4s4d7wcax8j6c43f3dy7d";
+"verbatimbox.doc-3.13"="sjns6967xicryfcpg4jhwfplsw1sl6nb";
+"verbatimcopy-0.06"="jf7rbdzhqlssq6nk5pnn79dr7a1gjxjh";
+"verbatimcopy.doc-0.06"="2rgg2n7mb1gywp8npzrz8qvc3kfw02f6";
+"verbdef-0.2"="pc0nq3s0vzl7jdw8ncp0fgbs7fps6257";
+"verbdef.doc-0.2"="dak1qyfi1gpb4j16nklvyjh7gldb4b2g";
+"verbments-1.2"="wvi7plkxcf920mdw7qrhbi2fjph1fxa4";
+"verbments.doc-1.2"="3zc8bfvz8a707jzh7zdbmb3rkxwfv2yq";
+"version-2.0"="q06mavcr844zm0dlnk2fm43np58nvjlj";
+"version.doc-2.0"="7hcfbpwhb2ifxy3y84g6rgw2f7465hgj";
+"versions-0.55"="c1vn4pw5im1a93xpp59i3xcf5az1n326";
+"versions.doc-0.55"="l4znzf6z7qwpskdsdnhsdx264a07wvmg";
+"versonotes-0.4"="9k0hj47jjkdgnhhxbw87m5xnqyfpb7jm";
+"versonotes.doc-0.4"="mgp76qfszyhmq2fv5d93y6cs6113nxl6";
+"versonotes.source-0.4"="0zxi7ly18j94kbwq7ipd6ydbgvskc6m8";
+"vertbars-1.0c"="65mc3s841k2j2b02g5qvii5pysjim8pq";
+"vertbars.doc-1.0c"="w04gw5yg7wl8y8882g4brm1ny6hwq3f5";
+"vgrid-0.1"="5qfb52ndm5lf20ya2w4vrhivn7p6vkaf";
+"vgrid.doc-0.1"="s0rr15ll7fy2s03va6kxlgf4ng0dmdrp";
+"vgrid.source-0.1"="2fql0w1qmni7dii9qdn976j6xnypj8yk";
+"vhistory-1.6.1"="mdp8h17cxsj1pvi8q18m4lqn7109q26p";
+"vhistory.doc-1.6.1"="dfvbnfvrfz2k6fgyqdlvh4g8dzz5lq1j";
+"vmargin-2.5"="9zh2l4idqdwpzanfd1z47g6561pfznh5";
+"vmargin.doc-2.5"="3ngc0z34mhrpsv73yw9bm065msqllqwz";
+"vmargin.source-2.5"="yj7f5bq4wlrbynfbcq19534wlh06g6hc";
+"volumes-1.0"="vid094d44cn1lwq7l72718pcz71l60b6";
+"volumes.doc-1.0"="3xgxlj53yay13gxbrx7l5i8rfxn6391p";
+"volumes.source-1.0"="r5ks99pb362xrxfvafl35s1v2n1kj36w";
+"vpe-0.2"="pzaqk160w9401v9vw3zs9kg2kjpmcynf";
+"vpe.doc-0.2"="yr38k5mpbpd8jxvcycvpj0zhl1f75lv1";
+"vruler-2.3"="bw7zccv90946wxjbms3hclxahpxkcpfp";
+"vruler.doc-2.3"="kffmrjhmahvd1pyk1ha5slz34y8g5j9d";
+"vtable-1.0"="3yh1145v9bcj739qrlb685j25rk088n9";
+"vtable.doc-1.0"="w7yq9sbb3jw6k7wxbq2pdqc3gcivvqxp";
+"vwcol-0.2"="hff0d1za1i8jqaa5bd7r94g4zvsxrmcf";
+"vwcol.doc-0.2"="68p9iv66i4mx5l8s90ivl3w1pdmx9fim";
+"vwcol.source-0.2"="x7qa2d5f1hxxbiabgym4g1n1n0g92x1w";
+"wallcalendar-1.3.1"="9ydbcsxj9n0nmrkr4drlbqwarpsa3lsq";
+"wallcalendar.doc-1.3.1"="cpsswrvazx036hyj0b2mfakfhziplm70";
+"wallpaper-1.10"="hj7n1ajpapmwk51fnrhxawmgq6k9cxdv";
+"wallpaper.doc-1.10"="751a0gq1m6px853zvyvbxv8migdm1pkb";
+"warning-0.01"="a4agj71acw6kc20ikk8in8m27fcq7rld";
+"warning.doc-0.01"="pph8n9h9mqgh0qqcv3jb1v89ds8f1qf5";
+"warpcol-1.0c"="91kcbm5m59ym7kfjbhzdq20p9rhi7ci4";
+"warpcol.doc-1.0c"="q72m3zkgkm7fxfq1453jsmqidgacb2bh";
+"warpcol.source-1.0c"="lmr3rlbqz9q7j05glz4s8fyfrlm6ah43";
+"was-2019"="gw9043kq2ai4mkbcca20x5f10wnv8czz";
+"was.doc-2019"="y83pwhhkxlh92cr9b0hmps0izg2cjhmg";
+"was.source-2019"="cwqcmdh86sm58073zm929dxibw3flc02";
+"webquiz-5.2"="9qq4an9pcpirgzrfa7jx1mc74zz5y55q";
+"webquiz.doc-5.2"="36ykfxg7dqx2wzn5k15f85s9wm99c4xd";
+"widetable-2.0"="7dx6njx3r6i0ia40n1rv0j7badl9hkdr";
+"widetable.doc-2.0"="bk5a40zf9a8ylg7zf8sbr3z62607dhd3";
+"widetable.source-2.0"="w0djy8q8m45lvhp53gl3x44h5f0nckag";
+"widows-and-orphans-1.0b"="nra2vcwdz65ab9v2l5j51ly2psp39kz1";
+"widows-and-orphans.doc-1.0b"="s6m3rdja96wpyyq98yirb6y2213264lf";
+"widows-and-orphans.source-1.0b"="b0h0rfg9v872qa5javafixkkjwp518jr";
+"williams-2019"="9xzcvf4nblyp6vl0vhnwi6lbbmp4lagm";
+"williams.doc-2019"="0fr8h1zsj1h1cf3qpjvdkg3yz4fcjdsk";
+"withargs-0.2.0"="ahb75dczlyy8shzql034xqjq72ll0yvx";
+"withargs.doc-0.2.0"="6sr29bzbhwzcf77pjzhqb21fsp0541dj";
+"wordcount-1.7"="wn4d84kxf5phfn6f5imv91draca4wxap";
+"wordcount.doc-1.7"="hsddvb5521vmj65yns8f9d69nnwhh6iq";
+"wordlike-1.2b"="l4ma5j7ga4b3r6f627vf1vwcb872n3jr";
+"wordlike.doc-1.2b"="wywmq3nr85c130ag5vqi0hpcgq8vh2f6";
+"wordlike.source-1.2b"="3zrpdarw3brnc5w1c5bgvxj37qlpc9cd";
+"worksheet-1.1"="1ll03k444qn8zvji2h9xd75ywik46prm";
+"worksheet.doc-1.1"="dwab8sjshckkcm8vmrxr80rmrd31jih6";
+"wrapfig-3.6"="0r2wm95j00mxbiqgyk2d5vsb4l013zdw";
+"wrapfig.doc-3.6"="bb3z98p5kkhh2cw6qm0as75xv914l84d";
+"wtref-0.3.2"="427q1xixm8dz8wfh9z2bny6brs3s9i3j";
+"wtref.doc-0.3.2"="s02aiynd81ksydrfxlksamrdfkhhhfqn";
+"xargs-1.1"="s6g70azr1g9mg42k7lgii1ngmyjad657";
+"xargs.doc-1.1"="d8y9n347qlv5ybr4ahfqf51yb4g9wjzy";
+"xargs.source-1.1"="zvlns27k99jmi1iy7nyc03kyyy8kaycs";
+"xassoccnt-1.7"="9gjhxbaxdfqadbywhka6kqnyyw9wl5ls";
+"xassoccnt.doc-1.7"="38p065jjmz5c8mjc0lbvz0jg793nlr53";
+"xbmks-2019"="3rzl0pi5vajgj80rlwj9s5hxx1lwfq6c";
+"xbmks.doc-2019"="nfcmv5k07kdhily4m4iivg3i3ln7d294";
+"xbmks.source-2019"="xswwxiw3ksa35mism6ib1mqpr8vrisl6";
+"xcntperchap-0.5"="qbrmbcwfdhy1as9i732naj5xnqd8zl7r";
+"xcntperchap.doc-0.5"="ql3z0qizhd2nxxjb5i4hhxvb43951rs1";
+"xcolor-material-0.1"="08zazp49lpmm92ang9i2q34kvx7v4rli";
+"xcolor-material.doc-0.1"="r646x6g0hwsi91hrxzz6b8l6nbbh3gig";
+"xcolor-material.source-0.1"="98z6j5l2iw9j1pyxmglm6b0gjdjyb2l8";
+"xcolor-solarized-0.4"="zwng9y8319hj7khamri46ppb0bcybpwz";
+"xcolor-solarized.doc-0.4"="c83zvv123bjwr6z10dgfih1k6b9wk4k8";
+"xcolor-solarized.source-0.4"="5p141gbzdasinppirw4wyb0mm9875bcw";
+"xcomment-1.3"="qnmk0vpj33sszbi3hfndscjwcmg1gf5h";
+"xcomment.doc-1.3"="m5a8wm984ff59mg0jsf4f402zbjqf0b8";
+"xcookybooky-1.5"="00gb5f064lmiwlhqz979cx5n8d2rxkad";
+"xcookybooky.doc-1.5"="02wq92szswqj8mj94drhgcpqw8px6j8a";
+"xcookybooky.source-1.5"="cky4lpad42pkh175nfddkz76nhl3q0bl";
+"xcpdftips-1.1"="qc6v9ab20hjwg3mb6w5mmzm3rzmavxd0";
+"xcpdftips.doc-1.1"="kr1fr1l8mp7zaj7hfwz0dddzchy2ld73";
+"xcpdftips.source-1.1"="5fxv00bzsn1hpb7qhxn2wl7gqgy4cmdg";
+"xdoc-prot2.5"="awz55rah1196cknc1qsy0dc8ra91dvjn";
+"xdoc.doc-prot2.5"="zx0nabzias47jm6270rmw9wqr117mb75";
+"xdoc.source-prot2.5"="51sid2ab4iwhybxhkwf5wwxflabqy4v9";
+"xellipsis-2.0"="x7m9da1658cxs5896bhn8cjdj0va03xr";
+"xellipsis.doc-2.0"="332vcqlqjbpm5hsqbcfq23avmmgjl837";
+"xellipsis.source-2.0"="3r007qgvxxcfvnd7942yafsznza0jdk0";
+"xfakebold-0.05"="q2dn5s98jir5swsh67d6xaq8cnhxhjwv";
+"xfakebold.doc-0.05"="5gbp1hiqsrsfv3jh8f6rifsllsc6m3iq";
+"xfor-1.05"="x2bs3y606v8f42ds7xp2kmllq0vmrnms";
+"xfor.doc-1.05"="lbgdf0qia743jdvlxqf7vm4w1pc77kar";
+"xfor.source-1.05"="pafv6fqj0nd5xm0wgmwavkmg97rw7dnm";
+"xhfill-1.01"="6c09h61nlwbviwc1vfvmr4jhbrw2fs24";
+"xhfill.doc-1.01"="cw2rx4v66138fsh1vwxhq9smyai1xlr4";
+"xint-1.3f"="ahh09z32y79k5d8rzpw019gkhhf1j70v";
+"xint.doc-1.3f"="pjgafg558x3lw05chxic52xygraxx509";
+"xint.source-1.3f"="f332r3gsqj8d7fi1s62kn0jvf298xfzp";
+"xltabular-0.2b"="rgv3ixm0aynqzfmf8s1682n52ga5mcm6";
+"xltabular.doc-0.2b"="0d48lsksnxlyhaxrhcc497f95k4xjcvl";
+"xmpincl-2.2"="wjg1lw656zbn3h41pxqzwwag9mgrk3h6";
+"xmpincl.doc-2.2"="dczhfj7g5h3gf3vg7wncvccn1q3xavqp";
+"xmpincl.source-2.2"="0pfma5c8agil5jamikja0qh5fnyd9wn0";
+"xnewcommand-1.2"="gc7n5467awcrcwyals55mclkx2ighp3b";
+"xnewcommand.doc-1.2"="i6hx2x96hwjs712zzrp5h8l020b7j0yh";
+"xoptarg-1.0"="dpvgxh3j4vz7k25vbi1a6936pxsg901p";
+"xoptarg.doc-1.0"="hlx9h66iaychpvzkxnwldkffj7fdn45m";
+"xpatch-0.2"="8yzw0fgd1yk8cg1x5dljlywpzbijz485";
+"xpatch.doc-0.2"="zi1mwf1l3li8gghz99408f5v31jnfrm4";
+"xpatch.source-0.2"="wb88mjd06mbw0k8q0ha242zjyy6fr31l";
+"xpeek-0.2"="3dbw2vm05dirfvskchrmgdlv7l3n46nw";
+"xpeek.doc-0.2"="vr8bhx79vb9d4nb8ik4aa5xgiyr8sfp8";
+"xpeek.source-0.2"="cr6cxj638iwax50pkn60az0mawpx7m86";
+"xprintlen-1.0"="icyd4h8hs5yap04snj442adcw8kiknjm";
+"xprintlen.doc-1.0"="lrz20zfh7j4px543jqxy3ljm803mnlf0";
+"xpunctuate-1.0"="n3mxrha0440l5ngic93idrqw2agmisah";
+"xpunctuate.doc-1.0"="lrvqrndq151vfz34ycvjnh3sw77v58lz";
+"xpunctuate.source-1.0"="cmmzrijia2ir3mrhcq4s531la5kx18fj";
+"xsavebox-0.14"="b36qamf4wfpbrkg6gj6n8adi7rjy5gzg";
+"xsavebox.doc-0.14"="19flrbjci9i7xficp822h2x2ni9g4ccv";
+"xsavebox.source-0.14"="3n19vz70bwxcgx02q77gw062z7vr0n98";
+"xsim-0.14"="xj8gby6dkfn8b2xigg921klx1h0jccm4";
+"xsim.doc-0.14"="23760q0xpivdrxwyr3sqfjnb54347pnf";
+"xstring-1.83"="imwhw4cc68bs6q4f9a00sp7f4y6kvg6v";
+"xstring.doc-1.83"="5ad5zk5vvbk6wpgssvzs905b6nq6x8fx";
+"xtab-2.3f"="zqrxzgk3pn3kw19jm28bvg0lch9lc7sm";
+"xtab.doc-2.3f"="pmhfig6nmfimb0didacw2sja2kc1nik7";
+"xtab.source-2.3f"="78m8pqm3r7jhxy1p5cvqy7p0clpzwi6q";
+"xurl-0.07"="1kkihd0ypf2krj0bnby474r6mk6z4bz2";
+"xurl.doc-0.07"="parcxwnyadx2a2z91xjjc1rs23hqjqx7";
+"xwatermark-1.5.2d"="5c0z0yvlrs562482lkz70w6n7i80mkqi";
+"xwatermark.doc-1.5.2d"="1ixadba47dckfx4r1hhzfd8q1wivygpj";
+"xytree-1.5"="2kq4h083zj1zi2zvrhsnqz5wjyl0dkxf";
+"xytree.doc-1.5"="05af0l0bbcbr5gav843zs69p917cx3xy";
+"yafoot-1.1"="j3li8wngwn6ljnjr44rykppzw9dlhf83";
+"yafoot.doc-1.1"="8p4wf74rmhl1xzyp11m3c8wrps38gv3c";
+"yafoot.source-1.1"="zjg8qb79hajfvanp58hzlms21gaipiqh";
+"yagusylo-1.2"="rbhp05f6y6zw687pdw1mbjvaf99v7qy3";
+"yagusylo.doc-1.2"="av3jf7zqa6rprfip5lm173xj2f1rffb4";
+"yagusylo.source-1.2"="6z69ljv1xpv2cn81l63d8xrbwrk8am5m";
+"yaletter-1.1"="br7r3x3n8h5nlfy36csx8a5ji3cf12wl";
+"yaletter.doc-1.1"="x5mhsm4pxjc2klcnwqyrz10gbq4kzw0x";
+"yaletter.source-1.1"="c1la5n24hxfi3paxwxd8m7lxpd083k0h";
+"ycbook-2019"="62sm9jbqxgqdwwm4w39kh5lax93lycc4";
+"ycbook.doc-2019"="piy9cpdcikzknnrdp27dfrciidcjspzz";
+"ydoc-0.6alpha"="4di93jv5wpv4bdng1ibkf0ma6m0bknz9";
+"ydoc.doc-0.6alpha"="80hq2xznj76kgj0zb6zv6li578kc3r2i";
+"ydoc.source-0.6alpha"="39128wyw2py0j8f334r7drff849ad2sv";
+"yplan-2019"="rm8ln7pvl6i672107i8hxic85s994g6g";
+"yplan.doc-2019"="0h0wa59ackd645spdqk9vqy0gzzp8f8y";
+"zebra-goodies-0.8.0"="p6f693z5cywmpln2i6qqxy0g4c0wv78l";
+"zebra-goodies.doc-0.8.0"="0d9dcng2qivm4p2h8112ii3pjrwl1f38";
+"zebra-goodies.source-0.8.0"="dgvli6fpzrs7jgalqvm8m4a8fqldkfnh";
+"zed-csp-2019"="ggjqzwn3zi9x8ziddkh7xizgw80qqlrv";
+"zed-csp.doc-2019"="5p8s701yk431qyngw010qws6b9shx588";
+"ziffer-2.1"="jv9y39n2mj1csaixb3pdfp0qggc16b04";
+"ziffer.doc-2.1"="3ys31swbmm03zmnlvfm155aii3nrd2sm";
+"zwgetfdate-2019"="ibagqadgb3nbq8y72lzhrbamv5xcipk1";
+"zwgetfdate.doc-2019"="idw9limrda31c7h0xd3j6v23xqbd2nn3";
+"zwpagelayout-1.4d"="6wskn5h4bxigry3bjdf90ibdfrkinln3";
+"zwpagelayout.doc-1.4d"="rr3q6ypq18rkaa77ikr0j2sd80pp322j";
+"addliga-1.0"="v46mqcn3yabd6lliclwabya62hvmvpgs";
+"addliga.doc-1.0"="lrmkg7awc61rkjf6n8xn1hhcvrsiz12n";
+"auto-pst-pdf-lua-0.03"="s0l3pyb7y4pr3l67yp3yksd0j2fc212p";
+"auto-pst-pdf-lua.doc-0.03"="784dxagzkrphn2nby5lk4b79s074824y";
+"bezierplot-1.4"="y1vm9s8h8v75k0q73q8089gnr0647ir2";
+"bezierplot.doc-1.4"="crzlgln3g39kmqdba5dffqdx3p9fffzh";
+"checkcites-2.4"="2vzqckrpid1lxi5awbc3s1179j0yw9rm";
+"checkcites.doc-2.4"="5dfipwxsrf3jn446z9ar0caa8bsmw4al";
+"chickenize-0.2.5"="bh3kdbw0yvz28izgmxxw3psmirwmfcd5";
+"chickenize.doc-0.2.5"="hqyyggfs1is65gfl4ck1mki9wgm6238v";
+"chickenize.source-0.2.5"="xhybj8jxyv1fghx7955dcgfcl9kjgbkw";
+"combofont-0.3"="kqlh6sp2y5ssbp38jy6svzgdva4m4sh5";
+"combofont.doc-0.3"="99h3xmx3jv5il99g6wc10csqkmpm5mg6";
+"cstypo-0.03"="4iqsrwnw7pnzhzzspr686pf6y4img6zp";
+"cstypo.doc-0.03"="3s9dsniw0yz2j7iffbsycsgrycfbjlg9";
+"ctablestack-1.0"="cavlzn944q3fhha3i4kf8bgvm2y5zpdh";
+"ctablestack.doc-1.0"="g2d4fq9nl422i3i0skmlrydx6d3ks8cq";
+"ctablestack.source-1.0"="bqrksg21vxxki14v7sadnh35070f2vdy";
+"enigma-0.1"="1d9g45cwjgz5imk677zrza79fhwvz3cz";
+"enigma.doc-0.1"="57pmvf7xx9hp23jxaj4sfam0526y652q";
+"interpreter-1.2"="pk1rbxzpaf3gida3dcshcgl5c12rgxzi";
+"interpreter.doc-1.2"="p249plg4a7qmq65rm84qfs5xvjwywnw4";
+"kanaparser-1.0"="klyk8bqv233cxpg18q10nyzkhql9pqiw";
+"kanaparser.doc-1.0"="kvcxqykqyjdvca2zcga0p6hxiv17vhhj";
+"lua-visual-debug-0.7"="dc1d0z6fxpdsligy9qf6ij32sw7y99np";
+"lua-visual-debug.doc-0.7"="abkl63vyaxlvp9hbl33lwlkkr5ml5ykz";
+"lua2dox-0.2"="f8nhx5l1x2vqsrnh0amwa4nrf77b6zjl";
+"lua2dox.doc-0.2"="af422a39m2llgqkjghlhh9ix120jdrbi";
+"luacode-1.2a"="8ckzckz94cdkygfjyh2dfldhr1pwa8dl";
+"luacode.doc-1.2a"="2xzk8133632231pnn3v0afb003xhl33f";
+"luacode.source-1.2a"="dw3p52gn6g103qkp5v8vmgxpj2b4cwb7";
+"luahyphenrules-1.0"="lpkklcbarmvfm4y9d5zgm9is55y66f56";
+"luahyphenrules.doc-1.0"="ch7vc8skad88crgb1blh85ig9sn97l3f";
+"luaimageembed-0.1"="0cc3hfkj5jqldnv95ifz4j6ls9vj44dj";
+"luaimageembed.doc-0.1"="66vlh8a2w7q9ng1na9sraibw5ixxlyc2";
+"luaindex-0.1b"="hlzsr82cp5vs41bvnp22f8jc3kkwyk4y";
+"luaindex.doc-0.1b"="k1nz25w1nrxbfcg8g9lrb4gm22i3m7ih";
+"luaindex.source-0.1b"="7pg6v1phdz96x5nmwsnf5bd976s2magv";
+"luainputenc-0.973"="a1q2xrryvsn271605s6ir0iymym4qjd7";
+"luainputenc.doc-0.973"="jyiy6f96v5nvrr4lp765vpvhrl96j67q";
+"luainputenc.source-0.973"="5v1n89k8wg4g43fnx0wz53gdxp7cvgji";
+"luaintro.doc-0.03"="gcz5ihcqinbpnqza158xsgw65h17lgi5";
+"lualatex-doc.doc-2019"="9vq4qxdsf4gfskrqpb45wj9m0jdkcykh";
+"lualatex-doc.source-2019"="jnrcirfvz7w28pcq3cvwb8g8khd3gzh2";
+"lualatex-math-1.8"="q833blixbj2qv1h4csxvpy7v0hj2ifg5";
+"lualatex-math.doc-1.8"="xabchvz8l365371h3mv2im3hsad24crd";
+"lualatex-math.source-1.8"="bxjy4dg5jsv23lrhg202lahxwkjqgn15";
+"lualatex-truncate-1.1"="imd10qn2sh19fdz4zp8qz57rqs0kh2n9";
+"lualatex-truncate.doc-1.1"="xfanw53qhm8qhqg45ykvvf213j3q5dy9";
+"lualatex-truncate.source-1.1"="sv3j09xlab2gfqn670wd41xgdk3rjc84";
+"lualibs-2.67"="fvd8pm6k0nkvh1a9hglfbv7iscm87wjm";
+"lualibs.doc-2.67"="5bx73a0xfyvbj73jb0hp3f22khlqk0gy";
+"lualibs.source-2.67"="xn36i7xkkxg8hv4xjdk4pklcs1qikp6c";
+"luamplib-2.20.2"="hbd2ihzk4m3vph5vf5mjmabada2jwfiz";
+"luamplib.doc-2.20.2"="64fz107a010l9b92a2yffkmmni0il0nm";
+"luamplib.source-2.20.2"="y4cv3h54lh1brx576dya2b73vxzv0mza";
+"luaotfload-3.00"="zxc0q7cpk1a4lcp1g459cmli5igkfcrf";
+"luaotfload.doc-3.00"="98w4h05g5wy5m7b5359x2x0lsv61cpq1";
+"luaotfload.source-3.00"="6gn5jrfg8f082s56abjw86ss54x1lg13";
+"luapackageloader-0.1"="rc85q0c3lyjd3c4mhjjbqlcywycwxcgj";
+"luapackageloader.doc-0.1"="dkccp3n7nwkwv9scga2xa1aqqplsird6";
+"luarandom-0.01"="cj3pzwmgrh4d477fv551rlp7afxrsj0a";
+"luarandom.doc-0.01"="zfvmr0649ca85n06y0rdxx7plxrsk6q0";
+"luatexbase-1.3"="hjzprkfxz8i905ffdzfad0myg2ym4vg4";
+"luatexbase.doc-1.3"="3rnbzrql8m9ss0pk1yydy4v9acrk3qq0";
+"luatexbase.source-1.3"="v5x5csbgplvah43m8lbjky2nmfk2s3fp";
+"luatexko-2.4"="s5jl317zwy5l1n1f5pmhidprnds8l4bh";
+"luatexko.doc-2.4"="c65dp9snya3hsl1jd2lma27ghhrh032k";
+"luatextra-1.0.1"="xb3dbgfnm7ww87n60ydpilkwqczj77lz";
+"luatextra.doc-1.0.1"="4pfnnxaynvw166pp1ivb5pjp061n2bvi";
+"luatextra.source-1.0.1"="3ajlrmqc27xyxlkn4vbprh6zzlqpf0xd";
+"luavlna-0.1c"="hdk6is2n47zfn5489f8brncr9v8cpb16";
+"luavlna.doc-0.1c"="k1m38wapbfrkbfi2v70m3g5vbqdddw4c";
+"luaxml-0.1l"="z1abf6izw5yakycwjiyc13bivpmi0bmc";
+"luaxml.doc-0.1l"="0lmrd1fxl26m4cs49qm571ds05fx1njq";
+"nodetree-1.2"="7x6x6xjd3aqhvz1nchhxckfhzjllfr21";
+"nodetree.doc-1.2"="jnpfcdpwafza66wmlvgv4jkmisfc9k46";
+"nodetree.source-1.2"="877wmvyrnhma4v3qdlq4r1pbk1bldlv0";
+"odsfile-0.6"="1h0vzwknsi9w3vpk008mdk87l3c33ffl";
+"odsfile.doc-0.6"="4wvljjvknahcyfnwkpnpbmzg26zaa9bp";
+"pdfarticle-1.0"="gp3238h9g1kcamcamvhndgs1h9wav9ld";
+"pdfarticle.doc-1.0"="zh97mill1idcik9zhb8cp6wyq32lm7i4";
+"placeat-0.1d1"="rkzxsay49qp6qpiy3wpd6r3byzrm4hgy";
+"placeat.doc-0.1d1"="x954mm7qhyffqbh9hrgrxa5khh5h70p3";
+"placeat.source-0.1d1"="l19sqs0ipd1pgpl6kzggfizxvc1cb1p3";
+"plantuml-0.3.0"="a2lka6lq0fvp5zdwb1f7958xishxg6hc";
+"plantuml.doc-0.3.0"="p2xlf2hcj3hqj6j5l7gjn4l6cg4bs75f";
+"selnolig-0.302"="gw2nwscxyg2p83bs90nnbg47wddkh0i1";
+"selnolig.doc-0.302"="d73jxs6xck7m5y95hx6nfls1572za6qh";
+"spelling-0.41"="kajpixvypcfl8ivqqnscfcd1fb1vv78x";
+"spelling.doc-0.41"="r0sqb4qz4n2w8n0092qik847f3dziq0a";
+"typewriter-1.1"="4xbzb4igw0cd0p9ry0xxii4p8gj7y8w3";
+"typewriter.doc-1.1"="vk3rzpx4vpgs5mwq8hmys9m0vv6gmmdj";
+"12many-0.3"="kzixh8p9qmbz0hxczir6pixx8k6zc1an";
+"12many.doc-0.3"="v5qw194xha1w7mr6x3zcwp9a0gpi4w4n";
+"12many.source-0.3"="wqc3q5hqwg09g0sz7l5va9xazvmqbbrv";
+"SIstyle-2.3a"="35jza92m3n8nhfnqxpi4yx5xi90hf5mb";
+"SIstyle.doc-2.3a"="7y6y0ks7aa4yvqcw4jzh7rrrajm5lyfz";
+"SIstyle.source-2.3a"="i5kmfn2pan7a6bvl7saij0wbfq7xsx8g";
+"SIunits-1.36"="jpghwsag31g9f2lnzdzmfg1rg1vjxihs";
+"SIunits.doc-1.36"="1qalyh0q4lvlxxmwykaq3bp3sw76sscg";
+"SIunits.source-1.36"="6v2lr8gjm3f2kyqh7pc06ay5iswbi7p2";
+"accents-1.4"="8vq1cj9iyijb5lcz28w4d09j3gaw598x";
+"accents.doc-1.4"="qqgb9nrldq4bss1b90qn080zb278vxb6";
+"alg-2019"="2z4gi58401dsjwivwji0b169ihz3assx";
+"alg.doc-2019"="43bcrdwkqnx6rharxz9l106cxycm408z";
+"alg.source-2019"="yq6bvw0bwwqq8c367ml9p9cbimqhkr1v";
+"algobox-1.3"="7skblnz1s8jzz079j3cn4igaldvrbvxd";
+"algobox.doc-1.3"="f9dyljs5j5f19wf4zxn0aw76yfda6gy2";
+"algobox.source-1.3"="jkwrxj0z1j2gyd1322qadqzfrw86f8m2";
+"algorithm2e-5.2"="w36nldd3zkmg3v74jzg22kwkw0vhja5b";
+"algorithm2e.doc-5.2"="b2g0vk8jb1yqqi9fnkvxizpdhlaqjn04";
+"algorithmicx-2019"="8hvwf9c6b51yc623g8ivxqzwd10c1j7s";
+"algorithmicx.doc-2019"="1xcga5bk7fgqq2dad5mzv2v2x0m6hqrd";
+"algorithms-0.1"="s07h59vabig8jdk2d7r98hdnxpyq52sm";
+"algorithms.doc-0.1"="vwq0lnznxpwi4zpp4hjaljdfc3c2h6yw";
+"algorithms.source-0.1"="cskf3mpv2rk435przyidljaijx46fiy9";
+"aligned-overset-0.1.0"="ghkj6baw3sppp8vi9msny8ffaf3f0mb9";
+"aligned-overset.doc-0.1.0"="falszy2yd14yzy1gzscp7d3arsb02pv1";
+"aligned-overset.source-0.1.0"="gcapvfxcx8s1qgzcf8f52l4w0dd33b5q";
+"amscdx-2.2x"="73dyfrnv14jh8gavjgivx0ldyczqlazc";
+"amscdx.doc-2.2x"="ya3ljfxmirpyaz7kj29mkyrwrhvz61y5";
+"amscdx.source-2.2x"="da89in5nc7m37m5padb246ra9gl6cjrq";
+"amstex-2019"="lpqwc8f3c8iv9691yxqs6r00dkjp9mh2";
+"amstex.doc-2019"="8rkjw766mwbnpifcn10gjkdap6p8gcch";
+"apxproof-1.2.0"="f4p5sn16ygfnnx6lzjmz6gwhdy2pd88q";
+"apxproof.doc-1.2.0"="xzlmlck028ri44c49sd5vr5ksawjg62b";
+"apxproof.source-1.2.0"="nhmzdgibha22wzmr1ppvinifbq2vs49w";
+"autobreak-0.3"="61yyi2p6gf0sjydn5kr8h8qvpxgmvbin";
+"autobreak.doc-0.3"="lzi2q6g0mrv5l8kb3b9yg0ykiiwimyfv";
+"autobreak.source-0.3"="62cm1l24gp51a8jnag36y8gm1bwya7la";
+"axodraw2-2.1.1b"="g9vd6wfm1v77c7rsl2y7cpa9rl1921zn";
+"axodraw2.doc-2.1.1b"="rhvxvww141sazlyzpwazcdhvsd8p350w";
+"axodraw2.source-2.1.1b"="jfcj5zj3b003mslj4h6iwjbdqvj1hmyr";
+"backnaur-3.1"="y970wq88dx80mbdsaadw18lckbiwgrx4";
+"backnaur.doc-3.1"="426dp81fwq04wqhng79sy1zj4d8igpgh";
+"backnaur.source-3.1"="pflnxz44r4vwhv8yhcdqkfcl5n0y0zfg";
+"begriff-1.6"="w5mcpc6qsm8np9n4lzqbq642frp73szn";
+"begriff.doc-1.6"="wwsqgp4ah07a8z28l8ji33mvj0w16l3g";
+"binomexp-1.0"="5jlh0g22c7b1i94n2qicn0j6k4zmami9";
+"binomexp.doc-1.0"="vh653aqsqkvcsmrvzhw1h4sqvirxg3yv";
+"binomexp.source-1.0"="jairxsdavf3ll4160dlbc39hriyyyrdr";
+"biocon-2019"="d5164k5f9rh092j3yd5vysfzcp6qbvc7";
+"biocon.doc-2019"="w3c6g9qr6s5pm76jq7v0fk4fs90p5d20";
+"bitpattern-2019"="s1gn3l5lfz24xgg768032s318gzx96zy";
+"bitpattern.doc-2019"="8nq9nd4qsrixnnw32saxp6272d26w040";
+"bitpattern.source-2019"="1xa4jib8aihzccs6lrijw5x0cvhlrkcl";
+"bohr-1.0"="5r65jri672mlqzhd26dmys54sj19c8kz";
+"bohr.doc-1.0"="8gsrm5xrxfqqgpljlyizlcdz4lw3xk9h";
+"boldtensors-2019"="ivpsy3mgqghbw4qv325j9rc6nwwmh9ya";
+"boldtensors.doc-2019"="nbg1ilwbjn61g6g93bnqhfm5xgrgqzgk";
+"bosisio-2019"="dinsh8vlzgch7mvajkqmikbpgmzryqld";
+"bosisio.doc-2019"="asd7h31zda58mwykhc4jfp5nwv21y7b2";
+"bosisio.source-2019"="m2y96hhgypgcsli8v19w6jn7y39d23vy";
+"bpchem-1.1"="c1qr5s3jp7zg06sis026ll5b38axvni2";
+"bpchem.doc-1.1"="54qyy00y03jbbhg00az5as1bc5h9i2fr";
+"bpchem.source-1.1"="r4bya1mqkjjnmzc14jlbv676ls312ynl";
+"bropd-1.2"="zhrvx29z8y1gs88y8lx7wvi0dlhamkmq";
+"bropd.doc-1.2"="1k5254jbhikwqrx5wv61qmznkhp41mqw";
+"bropd.source-1.2"="8hny5cxa57186p4brdriyp3hrmmqr9ww";
+"bussproofs-1.1"="v0s3q29bdab23xi07f123bq7gzc2i185";
+"bussproofs.doc-1.1"="6cnd5akpxdcq2q82n7ph5lvmb94ql8sa";
+"bussproofs-extra-0.4"="v5xhwycppwm0mpn11589shbys65hplx5";
+"bussproofs-extra.doc-0.4"="29pwpr7yfc7n2nflvzfpm39gdwx0qis5";
+"bussproofs-extra.source-0.4"="mi485ji1m4vvbd82xavgv05kbd3j96q6";
+"bytefield-2.4"="whxn5qk2z4pia4hpafbzggp6q6zai2c0";
+"bytefield.doc-2.4"="ixgwy7pi37anjp4nmm765hc6hh484gxz";
+"bytefield.source-2.4"="mmnbxv3g3c6i858xs5dazi1nkfvrxsjs";
+"calculation-1.0"="sss6l897zlki1lidr2s5vp60rv1jfm0f";
+"calculation.doc-1.0"="zwcix1a11s0s1hh7ccy28gbdxylz1n3k";
+"calculation.source-1.0"="asdip95ln7gna99vk7hjiq8n1hfcqg1x";
+"cascade-1.01"="8jvsrpg9rf2471bymqmkgf7gwlzdh18p";
+"cascade.doc-1.01"="cnc5din98sb97037mdjy4i6zsjgwh1gi";
+"cascade.source-1.01"="f0v9m4xm3lj2pmjz7b7a1whgmksl94sm";
+"ccfonts-1.1"="11ghrz5bz02nw40srb3ih2v3r6pmsvq5";
+"ccfonts.doc-1.1"="vz7iqli9bwplwd20xvpdkpswc7r5zvlc";
+"ccfonts.source-1.1"="iylfqg59y0yadrzjb1xcb6nbw7rkjfr0";
+"chemarrow-0.9"="mb0i68z92909632g3xd1m3ahvmg0nj72";
+"chemarrow.doc-0.9"="h7g7ldb9837ngsxbmxm2c902bk0k2wdg";
+"chemarrow.source-0.9"="05g345ir5pvd4wik23yykarizwp0l506";
+"chemcompounds-2019"="7m2snwdxnachamq617zap92fsgdqhay3";
+"chemcompounds.doc-2019"="imzf21bm33j290wmy96hx88ahf5zgbff";
+"chemcompounds.source-2019"="nwcxbn1ivdiswdqyr319y93l76527amj";
+"chemcono-1.3"="kppxwgnwc7f62n7bwi2gnb6zndxv4bag";
+"chemcono.doc-1.3"="r527psyb3zf91x0xd6ywiv429b0rmicp";
+"chemexec-1.0"="szl9xw9iiql9yi7la6hwcwx8frhdxkck";
+"chemexec.doc-1.0"="q7rkw9ny7g93m4xm5jvs17v8x4nwb2p1";
+"chemformula-4.15h"="lmksnb4kzdxspa4dlzzid4w1izprk7jh";
+"chemformula.doc-4.15h"="1ykwrpbvy6r8h0fl79xrr34mpzvy69k5";
+"chemgreek-1.1"="6yfyrii5xkc1nz5bniqn134rqa2cdv6a";
+"chemgreek.doc-1.1"="x15bq2wwjyplpwpbj8hpz21zhzwjwryk";
+"chemmacros-5.8f"="fm173p1rcx5isykp7q0hmckmi1rq0f88";
+"chemmacros.doc-5.8f"="abc7v31l9nj6yljy6012dshny4mzwgjm";
+"chemnum-1.2c"="4az4s50lwaray904pnfc9z6i2gqi7a5x";
+"chemnum.doc-1.2c"="wbikxk89zq84klsqq67a5ds50jaf28nx";
+"chemschemex-1.2"="w3v5w049p0g28v8wx70ah804wp3map2v";
+"chemschemex.doc-1.2"="gg19d9gs2fc97f7rh9vs586v6i744a6n";
+"chemschemex.source-1.2"="czw2fh4251yhq1i703zf1nnkd0pjr74x";
+"chemsec-1.12a"="ikf1jvrivixpi5cf51pgryxrlnyh79p6";
+"chemsec.doc-1.12a"="9z5r91ghrdvaq6rsiyccs4g2a484kms5";
+"chemsec.source-1.12a"="m92vrndcyyj3sz7rag3jg6zwjl47jvh0";
+"chemstyle-2.0m"="lzbqwhh58y559q5lbxnbbz21rfxp1rcn";
+"chemstyle.doc-2.0m"="zv454b37y12fspkcphm6qs0yy7x7768s";
+"chemstyle.source-2.0m"="v52wrccz5gh3pswpfilm4qs48bplws5s";
+"clrscode-1.7"="6w0y1xknbskhhahx05688943y4pqr22s";
+"clrscode.doc-1.7"="hwrsnwvcd7yabwdz6qgy52c06hcz65y7";
+"clrscode3e-2019"="0fz3frh68k47pdn3way6fbpiagyillgk";
+"clrscode3e.doc-2019"="ql7vbwbr3z87rb0bnks5z3r1a53jhfmi";
+"codeanatomy-0.4-Alpha"="lnz0qqi52i7rnbsdw5k7s5bspm8i5ysl";
+"codeanatomy.doc-0.4-Alpha"="bzj63h79ral4caiqbx48vrmkgmpd9wph";
+"codeanatomy.source-0.4-Alpha"="4n9lrpl635drmnjbv0clv5xby8p51pwh";
+"commath-0.3"="qgkl9s5w0dadgirg3aqg0si0zm8swxss";
+"commath.doc-0.3"="ririan3s31h8cwcamjlwglbj4fyvc8b9";
+"complexity-0.81a"="id7q2in24z1r6mi47jdh98r7d9gkxdxh";
+"complexity.doc-0.81a"="jppdvfvs5wy2vbkzvizzirgrhf9k6sy5";
+"computational-complexity-2.25f"="hs6ja0ghmdhvkm2m5zk4bsyhr0z0z8b0";
+"computational-complexity.doc-2.25f"="nr5kmmq6nd2ppdyy3pygb2fj6ilz9gfr";
+"computational-complexity.source-2.25f"="br0rz33ycmvpsn5fdhvcjlpffhssnw08";
+"concmath-2019"="7qqfg14ka9d6j0ccb3bswg0jhzg8gvjv";
+"concmath.doc-2019"="rw4q8bbj0jyv9fs9vvxv9iksi39mrjm3";
+"concmath.source-2019"="h0akd4lxynf1anylxfv0dibvpkkgb0f0";
+"concrete-2019"="8076kds0h67rl93yygsicgp8hpk6cfz0";
+"concrete.doc-2019"="xddpal4gfl1km582kqvn79q925mixskv";
+"conteq-0.1.1"="r5vmidbf2afm771ijgph43qc66safd3r";
+"conteq.doc-0.1.1"="6ki2nz31r0b86kd2p9w9a5ph8g5dnj8f";
+"conteq.source-0.1.1"="6sd4m9i6zv68gr0b8r80r477qcj6cbpx";
+"correctmathalign-1.1"="vip10w09k4kq9a67pfp73r64mk75095h";
+"correctmathalign.doc-1.1"="51qjv6v507ahi1jhxd9sp406bd93vkdz";
+"cryptocode-0.3.0"="76si0msbfpcq1dhbk4cysf3ffpyk2rrq";
+"cryptocode.doc-0.3.0"="7zsrddafkyhb2r6259x69brgz2hnr4yv";
+"delim-1.0"="q2f4p0f8bg1nwim31i272i5rpnjibxks";
+"delim.doc-1.0"="5k874svcycyk4y5qalbs4h0x4zkviwc4";
+"delim.source-1.0"="bglajqs1gdzhpjayh5d4afw7h09wln22";
+"delimseasy-2.0"="nv8vysx58m3cgljms4fzrbpqms5wsb7h";
+"delimseasy.doc-2.0"="jgsz6apzs5flbf717bmfgc9p07mfn16p";
+"delimset-1.1"="ag5z8f5h7gf5c824v8rj2xxfz6fbm3lz";
+"delimset.doc-1.1"="40vxv4mmpij621v80ly8mb4rz71r98n8";
+"delimset.source-1.1"="r4j60mdx3nivydxja9mnacqh1s071l93";
+"derivative-0.95b"="ilpzmy1qspsfmryc2vnag2w2lqhpnwan";
+"derivative.doc-0.95b"="b2lm5h2lqsmrbwql4qyqcni65i0vg25f";
+"diffcoeff-3.1"="x9987adk154mqdz3lil1qa86nsls4ns3";
+"diffcoeff.doc-3.1"="n46rn91dvm23pqmagng4v65n2b52d76a";
+"digiconfigs-0.5"="r2ph2xkdaslj50qk54n7a1xx37n8pq19";
+"digiconfigs.doc-0.5"="vignfzc0zrhrx0jgybwmfcgyfcgaqhim";
+"dijkstra-0.11"="25p95xl60c29w1b8z1ggvys4fs3szv9q";
+"dijkstra.doc-0.11"="xn84bb3zgv8jk4slwrr314680l5xybmb";
+"drawmatrix-1.5.0"="pl0mscrd3i4h9m8zq947ajh45apms3fj";
+"drawmatrix.doc-1.5.0"="qxljjk2vh5cc7l9xxn6kicknw2csdk4p";
+"drawmatrix.source-1.5.0"="89lglkdc257iwip9aiwnshzqwhvcqz5b";
+"drawstack-2019"="kdcvc0kd9lm3zxd2zszwriab31p26wrv";
+"drawstack.doc-2019"="plmy162h6z23pzimj4i5wjpih0m21z3p";
+"dyntree-1.0"="820wp3d1dcdm5vxihmk93wqc8qw4rqf4";
+"dyntree.doc-1.0"="j334vdgmzrhlv3x0ihzpa9j2rbbd9xhz";
+"dyntree.source-1.0"="ha5c29s0f6j3r5f3b2v7v7bgxaks28b2";
+"ebproof-2.0"="5ic2h08ff6km04b5j7ya8grg66q00a9j";
+"ebproof.doc-2.0"="3hc5hiis4cssjh2l5a89df29yhjg3h69";
+"econometrics-1.0"="4b5wmgy2zn8mflr9zdfhyc0pcw707h9j";
+"econometrics.doc-1.0"="5rm8ml9qmmq9nnyx9b5x7cfm54qdmqpz";
+"eltex-2.0"="n3kq7kl8i0b1k89i94i4k30qcy31lhfz";
+"eltex.doc-2.0"="pnvsk55d11vh82nn0a77lskyma1mqmpw";
+"emf-1"="l7l1rzphl87qvgldxpdal5pjvlxx834f";
+"emf.doc-1"="sbp51vc20b7m91r43ck9f4czblqa6gfy";
+"endiagram-0.1d"="lvncrih9fmmsd6571dklnq2vzh7jdxv5";
+"endiagram.doc-0.1d"="7nqf9zgjslck0853xy6r6i938k9pd76z";
+"engtlc-3.2"="dc257zhqmzl7yymbv9prpiam1mvznhnm";
+"engtlc.doc-3.2"="d6mmmsi3kr2dlz2g6iwynabjlw1jyp46";
+"eqexpl-1.1"="caz1prans93309xrm4dfhrl5whfj75jz";
+"eqexpl.doc-1.1"="vfkwis39yxrvvwd3nxbknpi4jh4lvqa8";
+"eqnarray-1.3"="iprdk3kp9cbmi01r29rmnjrfzifhiw5m";
+"eqnarray.doc-1.3"="v7l4q95sjrh3kd92xgbqazd7dgq8kaq4";
+"eqnarray.source-1.3"="bwkjz77mw47z33bwbgsx81wbw9i4n2n5";
+"eqnnumwarn-1.0"="vz6kiciv5zhrh16ddisfrik5y9g2qr8h";
+"eqnnumwarn.doc-1.0"="py5m5187p7i643k6wgsm7zyznh6awp4s";
+"extarrows-1.0b"="6fa3hrvqa3qf7wqahhb7k168sz6pzmqd";
+"extarrows.doc-1.0b"="dxnpkgk5iirpmzhznidklfk0xy1y5l3v";
+"extpfeil-0.4"="0yaa2siwn8yvcsd1xy6q3shswdzfzq8j";
+"extpfeil.doc-0.4"="1c0q3h8z0vfy05gmgvi5gbk628xw2pwm";
+"extpfeil.source-0.4"="fly5cib65ppxgrbgq1h8vcxx7m6340bb";
+"faktor-0.1b"="bjbmkxvqgl81pnq0v7hm0a1ija9vwgyi";
+"faktor.doc-0.1b"="mf571k3a23bdizhirzmkr1xwvm5y3fxw";
+"faktor.source-0.1b"="l1lqrdj9dr1waq7dymzij0m1vvhzvw7b";
+"fascicules-1"="68cn721dkmdvz6ff2s0bcpj18f7wvzsd";
+"fascicules.doc-1"="6yc2dc3s7p6yzqidzm15awhkl2qnk84i";
+"fascicules.source-1"="s7l1v4cwz5cwkk5qqk4891034qbvpjkx";
+"fnspe-1.2a"="firv6p5c69ljcf2bw8bqpjd6jjsgy8fq";
+"fnspe.doc-1.2a"="kq29lk89jw7wi84h5dgwvpi5vwqj69c2";
+"fouridx-2.00"="lxj3924da4bfn7605g2akgd3ccynizqc";
+"fouridx.doc-2.00"="ic4hkzvwc05qm91h90cx645gpskcm8f4";
+"fouridx.source-2.00"="zgb2xfg0wl5ld4b5v8rn72mxmfy3qy38";
+"functan-2019"="68wga1s4yiamylxfjma76hirgk867yym";
+"functan.doc-2019"="h6jwmv7wp2a8whhi34r62xvi1qll0vb7";
+"functan.source-2019"="rk42vz9n59n31xx5my1ahlnxmagzap7a";
+"galois-1.5"="b8khw120ihwg30l5wiyrpigb0n76j4pg";
+"galois.doc-1.5"="pl6jyfxfim7igp5lhhsdghiz6awrsf42";
+"galois.source-1.5"="pf7dxm40jcipslw88sqascls74wnvhyn";
+"gastex-2.8"="7ncqqh3yaip7f6fpv1cs57wlsw4krkzk";
+"gastex.doc-2.8"="y3ybpis1prha863r0486c1wr24wfy0y8";
+"gene-logic-1.4"="w7b16bvypbh9l3kiwbgha3dyh4dlqpq4";
+"gene-logic.doc-1.4"="nzraabszgvj8b0j503f7h892grbqjjrp";
+"ghsystem-4.8a"="jsdc3b1x3hicf5w2kd4qi1q7chgam7ic";
+"ghsystem.doc-4.8a"="5ydr6q8ib2y9dbf9ms0pdf8r2i6cfvad";
+"glosmathtools-0.5.1"="k54clj6x7h0zz6b5r6q3v49vld7fqsv8";
+"glosmathtools.doc-0.5.1"="fdyfp8145xg7fc5j377bhk5p2nbc1h89";
+"gotoh-1.1"="lmsc2xb42i0w7ysmq1b7v69798xz6061";
+"gotoh.doc-1.1"="2nh9cbc9jvlwxlg3rhayjx63xyjcq0c9";
+"gotoh.source-1.1"="mbdzb4047z6wzr4gam5dfs5199hq02c6";
+"grundgesetze-1.02"="cd0rxykb2favdbw1f945aalhy0shxcih";
+"grundgesetze.doc-1.02"="7h4rhzzj2jak20jrgv9nnjri35iiyvdb";
+"grundgesetze.source-1.02"="dqxmkagx54l3zhsqm2iixizzqmcwqabv";
+"gu-2019"="4m173j1ac2aiji1xjpxccd5bnasv68hd";
+"gu.doc-2019"="vkm8qnzqcdqh4xv4axh9sfy65bx2jji2";
+"hep-1.0"="f70qsf585a6rw0lzizd5ps7lcv2qqsl9";
+"hep.doc-1.0"="aqaxn42inmw854cm1qps4fkcijc11fm8";
+"hepnames-2.0"="3f4dycnxwd41da8gh67gs89xcb3l7zl7";
+"hepnames.doc-2.0"="99jvklmwjkmrlmr9jfgdax0j9ikr7b60";
+"hepparticles-2.0"="m5541j0ip82ygflxc174k8xzr2kx4fh1";
+"hepparticles.doc-2.0"="34viq0myldrs90f8y0dflrjxhimnzkq7";
+"hepthesis-1.5.2"="2r81h1qwl4g5gh8xbmkqycmxcsaralmd";
+"hepthesis.doc-1.5.2"="l6il72x8l8c3jj81yjaci4fbbi080aj9";
+"hepunits-1.1.1"="a3yzdj6ykcd4522cknwng48wbig08kg0";
+"hepunits.doc-1.1.1"="x8d9hwb5z12ng0ndny3b9vgja741bg9z";
+"includernw-0.1.0"="wdc8hhcr4fciy57k7sg28rkli26ybbq7";
+"includernw.doc-0.1.0"="xl68qyik71z5mhzvv2wzh8k6shk4mzbd";
+"interval-0.4"="ihq8vx6xlxsa3nbyx62l072y79s88wnc";
+"interval.doc-0.4"="cyx47j6d57xvjl92cqs9aiv3q6vg0g03";
+"ionumbers-0.3.3"="rcar5imwp2v1vbkx3vxbq4zika5q8psm";
+"ionumbers.doc-0.3.3"="gsy4yhir7i0gwr0v1x46csqfyxa845r8";
+"ionumbers.source-0.3.3"="vd55vb8qai0kfy0mijzwzgdr52sa5a6v";
+"isomath-0.6.1"="s9cgjw007kx4vcz5f8b51hbiqjmi68w7";
+"isomath.doc-0.6.1"="nhpi08b738hs457jqv7139b44z35xy5j";
+"jkmath-0.1"="l4nykjpkg2p19fdvy4a6h32ik4hcimdq";
+"jkmath.doc-0.1"="79bfybh585f88gcyc82b3ds7nx92jng6";
+"karnaugh-2019"="8s95y2qxd4i5g5q1x0a7h8iwsci6dls2";
+"karnaugh.doc-2019"="85z4avy6yfziaqd7b4w077ys394a3y4z";
+"karnaugh-map-1.1"="mryi5vdfqia142b35n97pwzvh267y6bh";
+"karnaugh-map.doc-1.1"="3zmcy9jclc8q01d3jz642w6j96ksrpx7";
+"karnaugh-map.source-1.1"="8zpvpcrxb35311nynqsxdpz4iqjai964";
+"karnaughmap-2.0"="52mx0flzri3z9y5fc1rgg665z2rpk01n";
+"karnaughmap.doc-2.0"="8m2xi7580kgrxq9v5dkcfcxhn757i7zm";
+"karnaughmap.source-2.0"="47f879r3821kwn8pwpyhh5874adx6f3i";
+"kvmap-0.3.1"="d71q1ji0yh69xkjbl99ssha9jk62l1id";
+"kvmap.doc-0.3.1"="6l4vg5g8zj833grmj03f8blmm2gz6q09";
+"kvmap.source-0.3.1"="m4nhvphc9fm2ivnr17byhp14acz4gdgl";
+"logicproof-2019"="24sbq01252ij7ldzb8achg4m73fakhas";
+"logicproof.doc-2019"="ldn1c2fdmnikc8fzklp5vzwkx73d91jc";
+"logicproof.source-2019"="745pxgmypzv7a1vf8gjm6r28khxk0s3k";
+"longdivision-1.1.0"="hcs2sam1adsz8j6a3sb903p3i6g9r2yq";
+"longdivision.doc-1.1.0"="zbdps6zwk4sd7ilspvv2r5504jm0rl6v";
+"lpform-2019"="ga25ijvkw3cvzkag08jj7w8pv8d8mdj2";
+"lpform.doc-2019"="2pq3d2fni3nc4paaijygb6k5plky9wx5";
+"lplfitch-0.9"="wxiv9ihwv4jdmr4ij0kvggbbnhbkh19c";
+"lplfitch.doc-0.9"="lzz01n3w8zq7p9bn7lpb6rp6zkgmmxjs";
+"lplfitch.source-0.9"="4lxhwsf7366gs7dkq9qk4pyphjv13ya7";
+"lstbayes-2019"="7lfk7lrqr07my6v1qqni2rz39j5wwgpm";
+"lstbayes.doc-2019"="y00fm320wqy608v16idmzc27n8z4q4p0";
+"lstbayes.source-2019"="kzi9c2z11zpwb4lgy87vwyi0qjlmbyr3";
+"mathcommand-1.02"="rpn20gwpp62f33x0r1pfk1aha4jlrqv6";
+"mathcommand.doc-1.02"="p04g245ibp3cy6q4s8d15hlpb2w4m1ad";
+"mathcommand.source-1.02"="x4krsszrqh57w2srbp8i283yjp74696i";
+"mathcomp-0.1f"="rjxadz6409wc6g4ffb2jw40rw52rpwml";
+"mathcomp.doc-0.1f"="098xybrmriwyh7dl5vsxxxy4v7nf4bdj";
+"mathcomp.source-0.1f"="m3y8gisljqfy405d7cffqkda0mlz8rkc";
+"mathfixs-1.01"="8iskcy7ibbkfqq63ri2r65x6q7bq99zp";
+"mathfixs.doc-1.01"="ql7y723mdci6cz9qjnfpk6ck71kqb0w4";
+"mathfixs.source-1.01"="62f1zvd1s17arrg42ba9ydr9yyv3znhh";
+"mathpartir-1.3.2"="ka1crqmcwlidnxb6n91dlfnf16hir45r";
+"mathpartir.doc-1.3.2"="0qn7ym4gl6m9g7vvx0mjnwyq2fjvy9cj";
+"mathpartir.source-1.3.2"="vx38w09k1cfrprj4yr0vy1gkwkssw6yw";
+"mathpunctspace-1.1"="b3cksmp6rs8rf09qvab3fxs525mf9gbh";
+"mathpunctspace.doc-1.1"="9bnslk1yyrab13x6sn6sklkmlpd5q417";
+"matlab-prettifier-0.3"="j5p21f3rgbx8hyf7rdjbpn845mw8fgih";
+"matlab-prettifier.doc-0.3"="zssm3k92kxa3mjja3r4sq2574f7byspr";
+"matlab-prettifier.source-0.3"="nkp80iyfa519dkk8gh7pk7fxbj4yn1lj";
+"matrix-skeleton-1.0"="wydb62byj1nkyfqizq3zajif1bs3ag2j";
+"matrix-skeleton.doc-1.0"="nq18wlaib4r99xga8rjidvq4dfmw3c3x";
+"mattens-1.3"="v9rf7qmiardpzq3zzqzz0p3qnh4lp1ck";
+"mattens.doc-1.3"="dnnzxlvc6vrfy4rrm4vw5w0g85fr886d";
+"mattens.source-1.3"="dw4c26cwsg1hz3wvldlyi8q4f60h3szk";
+"memorygraphs-0.1.1"="8cg3g5pasqglsxnhx6q1bl3jbp2hr8di";
+"memorygraphs.doc-0.1.1"="00j88plcg7qrjwjzhjlmpcwwjn19l6h0";
+"mgltex-4.2"="99vi0f32fla2hmsabmf0d2d3c93kay29";
+"mgltex.doc-4.2"="m4m59xlcjgnd6pbsjsa36da37b61ydlx";
+"mgltex.source-4.2"="k3yw9bfjgkqha34712n3mplxsaqg6j79";
+"mhchem-2019"="1jdqxhaq185m8lpk48mkdmd5yf0msw43";
+"mhchem.doc-2019"="4pw8z3lcy6wgx0lmyb9wwi46zhby3hng";
+"mhequ-1.7"="a6dc7zsnfim8vbrwy8jzbhqhphwzh29j";
+"mhequ.doc-1.7"="im348hlavjvbkg67akz24kcx6hxa8w2h";
+"miller-1.2"="vgpbb05dlbyp2phs7cpwrl9l8v7yczdb";
+"miller.doc-1.2"="fj6s0x2rzvldwm2lrmjx0f3hy9l4ih51";
+"miller.source-1.2"="9n5iljgqg52bzz39i2ailg3wjgfvgvx3";
+"mismath-1.6"="ll7dwvfkg82z544cpqjnb4x015wr1lsd";
+"mismath.doc-1.6"="x3c0lilkwlh6r4s2d96nm3b0mv217bbz";
+"mismath.source-1.6"="bqz0jb26j2ry8zphlpahy27dn6bpl5sg";
+"multiobjective-1.0"="g6fgsq3fzl30yd4hrw2l6v73ldm957gz";
+"multiobjective.doc-1.0"="187syyaknws2i7i84xxzsnl9mj22z731";
+"multiobjective.source-1.0"="qhsg6vg0djg5h279gbs2lbally9vbrj6";
+"mychemistry-1.99b"="8swklvjnvwzm43kg3q8ydiczfl8l75xy";
+"mychemistry.doc-1.99b"="immlivqi6jjsf5g4mkkr1nls63hb5nqm";
+"natded-0.1"="q4nx9b58zsmfmpap3h2qs8pr28vap5v0";
+"natded.doc-0.1"="bkhf1ldr1hzsyc06bcp7rld2dbf7p4rk";
+"nath-2019"="7x3cdih5q3i8dg25h6737vaphmrdxvbp";
+"nath.doc-2019"="ilxg3pmmz0pf1xp6i3g5rfwgvrjprzbg";
+"nicematrix-3.5"="zwxkicravgah5qajr495qgsc8l6hjwps";
+"nicematrix.doc-3.5"="5axjlm44yg4x6cy0jbr5p8lj3xcnz8xi";
+"nicematrix.source-3.5"="1fi36fy741374h8ajjy98476i2xih4dq";
+"nuc-0.1"="4mmxcaippf5kwp6sgcwbcf55m4j415ma";
+"nuc.doc-0.1"="b0pkc17fxlgygmfvr84gq1gf58w95a30";
+"nucleardata-1.1"="b76hnd5fpl3f1hfh8pwgrsnqkadqi2zn";
+"nucleardata.doc-1.1"="vm4jq8b5fs0jx5k2vb8pii7dk548r4vs";
+"nucleardata.source-1.1"="0zzzwn1vrb841l2264mz4cip65va3lha";
+"objectz-2019"="jxzqzh7y1nihr8m7jrsnbw7jh187031h";
+"objectz.doc-2019"="d8rk9nql7l67xn6hyvwg4x3xxkpb407i";
+"objectz.source-2019"="62cr53ff66gqjf6y2i01gr70bblhn18z";
+"oplotsymbl-1.4"="xzbszdakjgy7svbksd8w1csc7akwbg8p";
+"oplotsymbl.doc-1.4"="g6zpsvgp1kar3i9rmig6g7y60a5mmk0g";
+"ot-tableau-2019"="mdvqwhal8vq8bqxqi73p4fyc6qpaskkn";
+"ot-tableau.doc-2019"="gcfni2sp25f6qswns4bfl585gfi36vy8";
+"oubraces-2019"="sm7cbapl8cv51d41dgc46gjckv3icx3z";
+"oubraces.doc-2019"="yfvkv4vgc6ycvsd2sixyph039nm4gzvl";
+"perfectcut-2.3"="ca48sxakrgh4g53i30xa7n9288r9wr51";
+"perfectcut.doc-2.3"="iry7v9xajbzxyn4bbq0pr7qah8a1iy8n";
+"physics-1.3"="y7b93d3qrc6674j33cy58v5c6fhlg3dy";
+"physics.doc-1.3"="ksf5jd2gfrq4dj2p1x2iwpgik5vb4pl6";
+"pm-isomath-1.0.04"="a768qpbak06xs38g804s8rr4lc9ad4kq";
+"pm-isomath.doc-1.0.04"="3ahd6gy58lc04pirlz20fvyhpd5qw4nd";
+"pm-isomath.source-1.0.04"="d2mkfbifgmjm56i9vbrhwkvhyn2pj6bm";
+"polexpr-0.7.4"="1bc4pj1za2mcn97kkby4m5p5md08gm4k";
+"polexpr.doc-0.7.4"="hn2kmfk7gmp53n5r37dlrb2ljrfwpp17";
+"prftree-1.5"="jwghbxhmr9lnai4rh4gnrrd5i98vqi1j";
+"prftree.doc-1.5"="7a0lrs2rak9c45ayjfmn8ghx89zab2pg";
+"proba-2019"="k6j2r5kacbcl25i7zwb71a2mlyn17dap";
+"proba.doc-2019"="a30lrji3wrd9rb8aa7hzflch7cwlybdq";
+"proba.source-2019"="7grfmfi6hwyqzhi0aynjq9cl65yqh5id";
+"proof-at-the-end-2019"="w5hmk64hm538mzqal4i9gxzadqpxp30a";
+"proof-at-the-end.doc-2019"="q8jniylvknscicjp5m5pd1z3751b06m7";
+"proof-at-the-end.source-2019"="nk3sbcnk3176zk76yf9nzj05q94ab006";
+"prooftrees-0.7_svn_8641"="rfmxpnzn1lkxx7b9ylvpnwmk1rag2nda";
+"prooftrees.doc-0.7_svn_8641"="zx19hnafp63xl2vas9frf6blm8974b94";
+"pseudo-1.1.2"="c84fsxf6k7a53jsahws62fmnfkmlq7y3";
+"pseudo.doc-1.1.2"="wmnkvbd0cw3zgy825h5k2x8pv7g4hsyv";
+"pseudocode-2019"="bmn68g4pm7wga21yf97mrnmwc588gn6h";
+"pseudocode.doc-2019"="1hm6d3af5zjrpvx9h5ihd6qqyg2384xl";
+"pythonhighlight-2019"="wyvy6ms2blns0nffsf2lzjs4gwivgh97";
+"pythonhighlight.doc-2019"="9g7wy34pzzhdwsaa4rvn41iblnynvxz4";
+"qsharp-0.3.1901.1401"="fq2s3z8j8fy6y3sm07p4rqmxk0zkq6ky";
+"qsharp.doc-0.3.1901.1401"="kh8kj39fd45k25zli0w26kl2j0fvvxiv";
+"qsharp.source-0.3.1901.1401"="fz446cncrzdyjyxi0zvxnr9aizanr8v0";
+"rank-2-roots-1.0"="7nm53w0h83yyzgg9087bblnz55f3xjq7";
+"rank-2-roots.doc-1.0"="x84hhyxp10nhqk3vh5zwsxdqmkifwc10";
+"rec-thy-3.01"="h60l0869fxcadlsypsqxsw8g683zbsjw";
+"rec-thy.doc-3.01"="9x6x9wvzb8bvncrxy43jjql283bc36dv";
+"revquantum-0.11"="ciws2fb27v2jkmvacgxx5f5rjypxwhxj";
+"revquantum.doc-0.11"="3yx0fd96b5sxmf0950wy2yfswfn5k5j2";
+"revquantum.source-0.11"="a3lxg56ihykvv3wy0az60hbd3n721grf";
+"ribbonproofs-1.0"="7r52zy2n48hichyvyxnhvzcn10v6bm3l";
+"ribbonproofs.doc-1.0"="15wcmvid4xbflmy4lv1njbnvbz5svk41";
+"rmathbr-1.0.3"="fv88qckj67imsc8a7v0y9pgzqdlzcbmz";
+"rmathbr.doc-1.0.3"="giw002mrgbyjbm5mfsxy2aan7mgiqmv6";
+"rmathbr.source-1.0.3"="iq3id8a5cyskh3adf20nxwfwjxbb32ib";
+"sasnrdisplay-0.95"="9yvwv7a6iw8a7g58w0zlgmfaz2zy8nxj";
+"sasnrdisplay.doc-0.95"="0dc8ai8f6b0dn05ljdlnx2dykbhil5xh";
+"sciposter-1.18"="mi8zk7ik6q8rvncwp5m0ch6mfysil8fh";
+"sciposter.doc-1.18"="wan5jxr0084sid3zv4cdhr5kmdv1rjh6";
+"sclang-prettifier-0.1"="594wn96i6q9wgshyqmy7211c2x4j1fih";
+"sclang-prettifier.doc-0.1"="zy33dy1dq1lh9zzqvxh3zwqv53yw2xn6";
+"sclang-prettifier.source-0.1"="0k4nc1bkrw4l66wr47pd6dgigdgs5i0s";
+"scratchx-1.1"="fwylqfph2bpwqd8rl4jq8hi682cd1cw0";
+"scratchx.doc-1.1"="w1x4cg20frqfs889sk91xd5j822ja27x";
+"sesamanuel-0.6"="zivl33hp7zrzz0996fs4822xsbd5pb0g";
+"sesamanuel.doc-0.6"="h4dlbjwcrjk13lnvqxxjmm94pk083zv4";
+"sesamanuel.source-0.6"="fjp5657m4v2qzf4bxzrms7v42ghl861m";
+"sfg-0.91"="5j8965gkq0p9s9ryvy8ym22qz206igqh";
+"sfg.doc-0.91"="ydamww1x4qxpg5bsrcacmfwkkv9c876p";
+"shuffle-1.0"="zg1rq9yihzpl9l7xjlc7djqfg2s3mn2a";
+"shuffle.doc-1.0"="dqra8x226wdqh5baz25qqg905r3xbcld";
+"shuffle.source-1.0"="3r5607h5jsaibvmyvwm1v1scm0yrbfrm";
+"simpler-wick-1.0.0"="pmjzl9cnwrzxhjiwbrjxfd66lamrhvj3";
+"simpler-wick.doc-1.0.0"="pg2id6jpail1iiz92xdr1bvi2725lj8z";
+"simplewick-1.2a"="hfv61gj0g68m17iiimvp1zqzi7ri2z67";
+"simplewick.doc-1.2a"="kxfipc2w97479is7sdd9fmahrbwfk2l7";
+"simplewick.source-1.2a"="48db2ywp9dg6nd5xbclw2w85id3mf97r";
+"siunitx-2.7t"="fd73bsz8nnv9b6zb1q4aqbw6f1qsnqrh";
+"siunitx.doc-2.7t"="98zp3wpjzjsd5vz8370267kxjqq9a372";
+"siunitx.source-2.7t"="50k08510bwm05ag510i76wfxcd5yhnbs";
+"skmath-0.5a"="b9bxkvgrx8566jfqh62vxl9912llffqv";
+"skmath.doc-0.5a"="kpdr4vz3z7k8my710n5772vkbd7jwisb";
+"skmath.source-0.5a"="iks3azv4hmv59laiywdsqjqdsln0a1kc";
+"spalign-2019"="if8r1d1xwq1as1147m3ixkxgyni8yb9q";
+"spalign.doc-2019"="s49kpxsa940l85yc6wzmb71i789874qw";
+"spalign.source-2019"="ahwv44vd19kn8vzbx7ya6275ysnp3q25";
+"stanli-3.0"="6ws3b75qs69jhag24aki76ndgryb9f9s";
+"stanli.doc-3.0"="iygalq6h7fdik4cfjyv5i62mid9gdr1k";
+"statex-1.6"="h8y1sw298ilqajy8vmi00yl9wpklf5fa";
+"statex.doc-1.6"="ksf4vra9673l5ycl8np7l55rxpj1xazg";
+"statex2-2.1"="a7h5agdmh5xw1646faxxwd1n1ajci53h";
+"statex2.doc-2.1"="cpiw77bl9p7y9vd6dwg4lnlk2n8lmmcj";
+"statistics-2.2"="gnv5s73wz2qh8yldvh7y21f2v8gyipxh";
+"statistics.doc-2.2"="hf10bfp5f60am8rhwiq4k18jdx1lyma4";
+"statistics.source-2.2"="k9bm1zgki9d1h1qhwfi0723n1zvdb4fx";
+"statistik-0.03"="2kynwfkkx5b782l4znp1f3vml1lwiihh";
+"statistik.doc-0.03"="m8749zwgm8vz29d24idrsimd6dizdjlf";
+"statistik.source-0.03"="bjfb31dxs4jylym9qc03rp9qjvmm6dn6";
+"statmath-0.1"="464gz51kwvfyy8fp1l69khkgdnbfvl5p";
+"statmath.doc-0.1"="6kdz4g7w763fc6zs1g4xqjvbxlvi4sv0";
+"statmath.source-0.1"="71y6fd8bid5zymcsc8c8j9ik2jyrbpki";
+"steinmetz-1.0"="v8vskhmyjdhc7yi21b9i11j4lfzmhypm";
+"steinmetz.doc-1.0"="5y0xh86b75lm16kjjl4cjs7vvylr6wn3";
+"steinmetz.source-1.0"="m31y5wd20vck85yj3zps711zi6bpcdym";
+"structmech.doc-1.0"="76ngar60cl37ya107zrp1cgbim7zsxgp";
+"struktex-2.3c-0-g7d3fc5b"="22jc8j377rqradvm23ymvmxnsxwnrwqb";
+"struktex.doc-2.3c-0-g7d3fc5b"="bs9vx2xk7yd88v4h22r0v0i7b2cb06ri";
+"struktex.source-2.3c-0-g7d3fc5b"="r4nqs4y6gspbx1yizl4pmarb672x96ph";
+"substances-0.2a"="wwjn0lkspnwgla7j46j2iwlvdrsvdyzs";
+"substances.doc-0.2a"="apg59a7fh980vddnfzjspsyq1jfnvsn7";
+"subsupscripts-1.0"="1nyf4q1szg0q649jmqlzd5p8j9h1fjkh";
+"subsupscripts.doc-1.0"="9yhhgbj7i83v21flfr3gkr35vkdxpx6m";
+"subtext-1.1"="dz6mm9cy33qhlw46fkirvzlqhsknjnak";
+"subtext.doc-1.1"="bllr8v8mflvi6ih3z3r73b5y6vmprafl";
+"susy-2019"="xiv8s7m8lahyc17qdp7vhdnriqcz2gzl";
+"susy.doc-2019"="51apv9rzw9q1aa390a7p6w0d4y5amkms";
+"syllogism-1.2"="gx6hjs32rq3d1sk28cs8ng8m2i1xwgrf";
+"syllogism.doc-1.2"="m6nv4hcwmh5qa7m411vwm8c6s1xbdbx4";
+"sympytexpackage-0.3"="x7b456c7l5nkwaf19g29rpc4m6qz27h2";
+"sympytexpackage.doc-0.3"="klh09byy7h38j068d9qrgyhawcfjknji";
+"sympytexpackage.source-0.3"="lzsz5ly9rnzph5nxnaqbf9nf5abm302c";
+"synproof-1.0"="bv32jflr6n3jdm93xxpbvhz1lrhc3i9v";
+"synproof.doc-1.0"="i74i5km7n20hglq2icb62xcc2pl1fawc";
+"t-angles-2019"="an3w3nw07gc6hyzfjk4bd0j4swj8qr4p";
+"t-angles.doc-2019"="68ylwxvywabhyfqzlb7d642cmhdj3g2j";
+"tablor-4.07-g"="fs9vl9gi63j8bqgiv06dbhbgs2vl1c8r";
+"tablor.doc-4.07-g"="k3d87x83igkq78j1yvav6b08y818qgz9";
+"tensind-1.1"="f76zwp7giabai57l4ryzin9s4b412g93";
+"tensind.doc-1.1"="pq5ahxwn442zc4xc7yilip4ciz2gvhx0";
+"tensor-2.1"="4gzhhxr2w1bbwb0yf799siazn5d6538j";
+"tensor.doc-2.1"="j4hxlj9f804ffrdp8pf06mj79yb8j6qy";
+"tensor.source-2.1"="89fmh96xlj21pm07c80q9cgiaj2a3c3r";
+"tex-ewd-2019"="725h0x4azacxb6pi7bnrvb5gb2b6rb8l";
+"tex-ewd.doc-2019"="npk74dnjx7jy9392pz0m4fzxcxqqsqq5";
+"textgreek-0.7"="m1b05a740x322la70k6ib44sk6cky167";
+"textgreek.doc-0.7"="vah190cds1677yv86nfcyriccln296yd";
+"textgreek.source-0.7"="cqc5zj4ck54rayydvml5m3n4hfnykglx";
+"textopo-1.5"="rvcbhsz8win1g08s6az11ji6ryd9b1fl";
+"textopo.doc-1.5"="3f9w8nbyyjismgdxb5daijc88hfp8m8k";
+"textopo.source-1.5"="4h2x01rkf91dha2yxqpdfgv5qsmz34sx";
+"thmbox-2019"="5b8zyq68dw8c7cylg28k9bmx261k8d5p";
+"thmbox.doc-2019"="rpd99zkmrb85kgldsyi2iwr70q9n8y35";
+"thmbox.source-2019"="hnjviz4vyw78mg6lbcdyv88qajhjdh6w";
+"turnstile-1.0"="c4nm39zwakha4bk75092371db2n0nx4m";
+"turnstile.doc-1.0"="w2hv466gzdsc7vp0al5xk7bwa83szvr2";
+"turnstile.source-1.0"="8p5g2w1pcaxhg2a54rq2h23zd7cbj60h";
+"ulqda-1.1"="llh5ji3r34m637hzb9qi4z0d6hap8fcy";
+"ulqda.doc-1.1"="w5anmbpapkg5r1bi0gvh1wqrqjivgmz1";
+"ulqda.source-1.1"="pl71x58ifcpllalxfw1snj2r464qvx3w";
+"unitsdef-0.2"="j5dhzwnaizymvvj0cvvn8hcjgpiaw3xj";
+"unitsdef.doc-0.2"="m3n8c9wpk9m0il8yn3ip4kwvlbyzfndw";
+"unitsdef.source-0.2"="rpwd7p723jsqcmcl28kkfg3fg9dmyfxa";
+"venn-2019"="vxgbc1jmchjsq3aq1wklgla50p1smqnz";
+"venn.doc-2019"="3z1kgbyilhajm6przv2a1rbdl55fzhqj";
+"witharrows-2.0"="2pd1kgflbhjcdy8n61a7dn90g8092llw";
+"witharrows.doc-2.0"="3ddq9k76s9jascnv0xklzs312ygn7bsp";
+"witharrows.source-2.0"="c2spayi9ibic8ci7gklmp0b2pcdxxpv5";
+"xymtex-5.06"="lh5pr87m1xhyaj74pmwc8vx3an7gppxw";
+"xymtex.doc-5.06"="bbknma6166kqvxhj3523p85lq7qn1ydc";
+"xymtex.source-5.06"="is60w9mjif26y9s3vv8c0v26z16m97g3";
+"yhmath-1.5"="yrwyrmcm5h46dwww8xca42xrif30rkrp";
+"yhmath.doc-1.5"="rg97dmxzfis1yy8mxwhvfs3sxhw9ridb";
+"yhmath.source-1.5"="x04g31n7rly2vkfcv8v7pqlgfcsf9403";
+"youngtab-1.1"="jknzzzxpa549x22gcar9aq433zwidbm4";
+"youngtab.doc-1.1"="1vrl9pqjlxs1izrw4a5d922v9ll8rv3h";
+"youngtab.source-1.1"="dbcchlqr498s741q1990aal2gm39bljz";
+"ytableau-1.3"="37wsbj7an7fvsrh4w5kvjiibhq0abn9j";
+"ytableau.doc-1.3"="wbgandbbk6zgms4jz2ird33kyg9yg19b";
+"ytableau.source-1.3"="2rblxwykvkrljn1xqz7zw9dz1wyib686";
+"automata-0.3"="7v2smy8hlz3yyqwcw11mjgh35z81n22w";
+"automata.doc-0.3"="49q82z2aa5xqgz3wsgcyix4a9hqfh5q6";
+"bbcard-2019"="b26d8663qv8x23sp8q04c8jzdw49f2i5";
+"bbcard.doc-2019"="99jqw22g1xcqdn4q5f408gvlzwnl7wbm";
+"blockdraw_mp-2019"="al2d83amvpz7z19a14zxn4ib8ayc7b9y";
+"blockdraw_mp.doc-2019"="n0a85bchn27q09771kx4idy7hic8iq42";
+"bpolynomial-0.5"="rwijp2lyphgyixi6l1d4j9vrwchr2m8k";
+"bpolynomial.doc-0.5"="1561z658ar885xsbg15psi82qjzc4zbn";
+"cmarrows-0.9"="03hcqmzx16n3y4vvh8aj6vrvpn6minmk";
+"cmarrows.doc-0.9"="vhdy6d8cpv29xp8qc72fr678qh9yi01x";
+"drv-0.97"="ry5vbwf27bm31byj37d34shzrdaf8hjg";
+"drv.doc-0.97"="3sw31jvb9l0n124h9kq9byzmy3ay1wxd";
+"dviincl-1.00"="gf980a6jm4ar28h7464qx1nayjqvi1xx";
+"dviincl.doc-1.00"="sxmj8rcvwj2q4g3c8ha9a84avsn4w1aq";
+"emp-2019"="brxc803kbnrd6qa1jfag6qxgb7f5j39g";
+"emp.doc-2019"="x8lkwbk13jq48h8ml7a0fzlyn4m8qlxl";
+"emp.source-2019"="ir1ng5an1jbffb2pd5rv412dcfzv84r1";
+"epsincl-0.2"="srznlzss5ag3br4pmwny7aqq7gjmqv98";
+"epsincl.doc-0.2"="993m24spzl4jymn69sczm7a8d1ix0zcc";
+"expressg-1.5"="yd8jja79lbjibls84q1r2iqls9hgfp3d";
+"expressg.doc-1.5"="ly3cj040ng9ahdl24yw3fgxfix2vimhc";
+"expressg.source-1.5"="fbdj06ca74j5cabgr1v0x7f15z53fr3c";
+"exteps-0.41"="q3nkzx07ckc0ydw909gliknkmm992lpd";
+"exteps.doc-0.41"="2y57ba9glchpbyyr2xy7kk1y3pvicj72";
+"featpost-0.8.8"="8dafiyq66jwcg8aq919aia13nlyyp73a";
+"featpost.doc-0.8.8"="jankbccig4n7c32970l0p4y9dnvapxvx";
+"feynmf-1.08"="22lldffd38r661ziq9p6fp43xc6595yg";
+"feynmf.doc-1.08"="1wif6ik3s9b4z7h75jxixyakgxf402kj";
+"feynmf.source-1.08"="2zf6gfg0vzz5k51d0aqlb2yg3w4lax1n";
+"feynmp-auto-1.1"="ps9nijgd6kcnsgvg3gq9gn53mf42xdwk";
+"feynmp-auto.doc-1.1"="a1i2ay1mvkpdicyzmcapvpv3fkz6pk3c";
+"feynmp-auto.source-1.1"="2iirzys42l2k5fmpjxxsn31wpfzv02d8";
+"fiziko-0.1.3"="v4nq87d4dahjnskkgvgjf1sh65m9gvkl";
+"fiziko.doc-0.1.3"="djw7v20xazg82gkrh6wxw05vmih1d2jg";
+"garrigues-2019"="b6kfrr0zhmbnb1rh93wy5pxq31kspbmf";
+"garrigues.doc-2019"="zk53ay759rgd40fmf7byqpqmibw7rrza";
+"gmp-1.0"="pzdcapvcjvbn48n6jnl1hs9mbycrccyx";
+"gmp.doc-1.0"="6ir5fj3s209rk3k9r2wbsz46kij8kw9q";
+"gmp.source-1.0"="an64d733yq3h8fy347lppy46yklczrsg";
+"latexmp-1.2.1"="x2plwjlw7cdim8lxh530zf5v2zjsfaxb";
+"latexmp.doc-1.2.1"="d9q1zwyad9p1nkk08mq4lard5rv291rf";
+"mcf2graph-4.45"="v44h4p3gc11sj4cmzpyy0frfmp79pfld";
+"mcf2graph.doc-4.45"="63nlb7vhm682gdwimvhl2ipbs4x828gy";
+"metago-0.9"="4gzbngrpwjbfq5d7jcfavhsmvfwnb77z";
+"metago.doc-0.9"="nn86x3g4dv9y5mbr83r8camfxg0xkv1g";
+"metaobj-0.93"="83hf8awwak3msfmran6q2ylgcs6720lb";
+"metaobj.doc-0.93"="cqzsavf652pmgg7v3isv80szkc3s162z";
+"metaplot-0.91"="jmp99vj4w825s9qx6m8bb7q62l3jp5bk";
+"metaplot.doc-0.91"="jzdw7b2kh7a49vngbwb0xm69kwfl288z";
+"metapost-colorbrewer-2019"="09l2rf2kja80lsajz4vfp9ngb3z442m7";
+"metapost-colorbrewer.doc-2019"="y3vivxgdjykacm90arls8hhk6k8rkv6n";
+"metauml-0.2.6"="15p3yrkws6by8w8wmrnnxij1kp71sbvq";
+"metauml.doc-0.2.6"="mcgmrgsh7x21ci4n8d0yqy9clx7jp1ls";
+"mfpic-1.10"="lslzdy39sbfb1xa5rv3j0whpg1c8vkj6";
+"mfpic.doc-1.10"="cpqqf9cdd3wcd36zjdps0692439zywqr";
+"mfpic.source-1.10"="fwlv0my4cgmbvbv62l8nkzaqz5p7br8q";
+"mfpic4ode-0.4"="83bv2qprp0cankrd54v8vgz58m1xbjdc";
+"mfpic4ode.doc-0.4"="5pjmcvwhz2j8zppx1d98a3lh9fcpa4d9";
+"mfpic4ode.source-0.4"="phmq4zdgz3ikz4ind46w2j0d8jvv4k0k";
+"mp3d-1.34"="sd36lsc5b38ahnf4i1b8a8a5bgw854p7";
+"mp3d.doc-1.34"="gkjwsbz7sgdj5k6vzvswb4k4yb8xkhld";
+"mparrows-0.1"="d1v4j0hrr4cxm42vwlclvccp1wmvbbyh";
+"mparrows.doc-0.1"="jcf975s8ianx9dmiqa9lvv9ywj62rmap";
+"mpattern-2019"="9ym77kwd2kgw46lck4vbfrbbiwps8g6x";
+"mpattern.doc-2019"="vknyl0b4d4sx2c6l7qhwr4rdmx0ncpja";
+"mpcolornames-0.20"="j7qagfiggfwjqapdrh1z23n0paj54bgc";
+"mpcolornames.doc-0.20"="jd5ai6f2ask0pbhrw46bdw8cfsrfpmps";
+"mpcolornames.source-0.20"="1f0wy1lrg0733vnq5mjwcgdi5rnprbis";
+"mpgraphics-0.3"="jad28la9l7z0jwiml56x849d8zwgsh3r";
+"mpgraphics.doc-0.3"="51y5shq3bamhqhpm2hbdki09b9xil2dr";
+"mpgraphics.source-0.3"="2gb71444b968ap0wvw461xskcgxgy519";
+"mptrees-17.06"="lqn20z9inh6qylgljn9k6z398b0vicws";
+"mptrees.doc-17.06"="50ggxw3jc63clpnz0fnxv2p2h4cgwjhl";
+"piechartmp-0.3.0"="k15blq7m78skmi2q46gnazh4qhpfhggs";
+"piechartmp.doc-0.3.0"="xcn16bgnyi4h8pqaisjivmywg234shgm";
+"repere-19.06"="4lbpfqmnvdw93pmabf34bpj69ww2jd4z";
+"repere.doc-19.06"="fjwv88ysck07zlpclf1fyjs4jyzm4mhx";
+"roex-2019"="3dp1ank88mbkx9zd4gl8v6nxa7hjvck6";
+"roex.source-2019"="fbyyci2hg9bvdbxxv09q9h37q98gzzxb";
+"roundrect-2.2"="zihpsds4r0v44h4bbmmpjgx28y3knqc8";
+"roundrect.doc-2.2"="g6kih4vjqjg4v4qxlxkkxgwhqv0x0pdx";
+"roundrect.source-2.2"="rdydd5cwvnbzjlhdd4kcfjq54rzw9k81";
+"shapes-1.1"="cd8q8cgz2c62jla12q136j6wq153k6qn";
+"shapes.doc-1.1"="9w1flaybygr8spm0a104cpwn4bzvg9nq";
+"shapes.source-1.1"="1p66bnb05fsk5fwzj6dd6ykn0229g7hq";
+"slideshow-1.0"="qjdwj7288b4rk5lqj6sxq6cznkaylpd0";
+"slideshow.doc-1.0"="fqp6p6xsw4r87r4vi0j2pani3rx1jbmf";
+"splines-0.2"="bn6gc1n3vbzrns1pzdjc4hf647g6pgj5";
+"splines.doc-0.2"="91g13liz4sfn16vzcvlpqhm388wwvs02";
+"splines.source-0.2"="p527173paps7gqz8wq02jkl6nbx8vw6z";
+"suanpan-2019"="vnglmgbg19g42b79q34fzqr4hjzy7dmc";
+"suanpan.doc-2019"="lvbx0yizc42hgqymw9yscja667h4mz1a";
+"textpath-1.6"="97b12i6v4bz6095z7i7yjf7c3fqg232d";
+"textpath.doc-1.6"="zliwrx3n2r3xjhdi0c80rncxwk5whg76";
+"threeddice-1.0"="91chpiy1n4mg3vcabcm8li91q9lnkcvc";
+"threeddice.doc-1.0"="f9anwvpf5qy57b6g4d71cdjjkkrsc1ky";
+"abc-2.0b"="pmaw58frrdbnj81n21mg15yiz7sp0rci";
+"abc.doc-2.0b"="gild9nm8zph2kr6mj9w0sans8r1jz114";
+"abc.source-2.0b"="g8a921yi51lvw6mqj1hxmkwqqh9fkl03";
+"autosp.doc-2019"="3pp981hsw8czivz0sv8bf5cak4008y4b";
+"bagpipe-3.02"="z9akwcd2fdwzps3bws9vamik64pyyl73";
+"bagpipe.doc-3.02"="6ssnq5756qnhlbyn08pncriz5la8hpzy";
+"chordbars-1.1"="vdmircid5yrvvywih6m0nf5c6b59mz5r";
+"chordbars.doc-1.1"="bld0fmrhhzf1dd6wm4qc790an3hayiip";
+"chordbox-1.0"="0w69pjdnqx79i77jwyjwqhnwm1zss6c4";
+"chordbox.doc-1.0"="9lhbmb35cckxa9bmr4p0vj47mprmskac";
+"ddphonism-0.2"="fsmrgvm95n65brnlslmnyf354b5139bk";
+"ddphonism.doc-0.2"="kav924pxscx87d6qp6hr92h7zy3zip23";
+"figbas-1.0.3"="xkm3zvkdi7512qnk4kfrb875c3q2gfr0";
+"figbas.doc-1.0.3"="pal9rb3bmrypdk6icdv7fyhdfn48qfsy";
+"gchords-1.20"="06q4p9d1j06dz7sqmjyka4k6r2x3l7nd";
+"gchords.doc-1.20"="icn914698j8gkir78wqnjqw08n2zhsdx";
+"gregoriotex-5.2.1"="vpmnsb5zdh11g4v784plxrd91v919vnf";
+"gregoriotex.doc-5.2.1"="qpax5iwm8zxkh9z6i0pckdz037aw29yn";
+"gtrcrd-1.1"="mqaamg8ick2z265cwl1yd6n81f76y8b8";
+"gtrcrd.doc-1.1"="scx1xk6y85zfbn82aqf3cw1sx0prfmgh";
+"guitar-1.6"="xw88497a60kkbh8pribpsi80bj2wdvw2";
+"guitar.doc-1.6"="5y7s8gbahfqzm50z6dgr667f1rgswvzh";
+"guitar.source-1.6"="7i8ma18fm6piiwsccj8lq6nn446mvqrw";
+"guitarchordschemes-0.7"="snccmsq130kvjn2ly56cjck56df5mdzx";
+"guitarchordschemes.doc-0.7"="p74vljfafyj0ap707aydgpf4xs2pabr8";
+"guitartabs-2019"="zl4w2llxyb1173b4asgk93bh70rxil42";
+"guitartabs.doc-2019"="a9rmk3gr37pp0p4fbfasndjglbbwsgck";
+"harmony-2019"="isfyzam48q2f90vyh78rp5df93wzdfq4";
+"harmony.doc-2019"="5zy2cf5afrxlmmxlsycqg3crcl5irkb1";
+"latex4musicians.doc-1.0.1"="aph09gf5cfxm7prwbg5v9y3jz03vpdif";
+"leadsheets-0.6"="371j5dnksvxxm6hz1cia15ll3w2mx17p";
+"leadsheets.doc-0.6"="7nbq4zi22pgsidfknddw8a5iqnfsxhnz";
+"lilyglyphs-0.2.3"="qn7pjnhq8aaynk7s8mis9g0y0m16fbnh";
+"lilyglyphs.doc-0.2.3"="89k4bzc0jy0yx59y8ssiqvjgqspsfyry";
+"lilyglyphs.source-0.2.3"="30yzqq1pw4mh74c87xxk12n834vpq8m6";
+"lyluatex-1.0f"="zgh2b7q3w9p0dic23cwddhhx5cqsdqm7";
+"lyluatex.doc-1.0f"="c8739z6r5mpk001ra6if93kfw799rphi";
+"m-tx-0.63c"="jjs536dwc3qbi72s4d7qr8v3b0rxd41g";
+"m-tx.doc-0.63c"="74xm6cv0ja6h6qcgv1v7mkak90l5qsxh";
+"musicography-2019"="rgdiagjsc1b03pp5056lsgz1ad74ngfw";
+"musicography.doc-2019"="rnpwpnrjlqcyrmnpkfj497752f2bdfdn";
+"musixguit-1.2.2"="29kbldyqlcf8xs5yh5gsx0m7liwbnqg1";
+"musixguit.doc-1.2.2"="pam1limbbmc1jvhznsvrwslmlr86y7vf";
+"musixtex-1.29"="si9nrmj1g186af47kyfsrv41h3p3irsf";
+"musixtex.doc-1.29"="ls2sq1mynqa6a8z3dxjblla277ml7wr2";
+"musixtex.source-1.29"="kb90c2jhgmx77d12x4rg6yivpiq5rxq1";
+"musixtex-fonts-2019"="a8kdi135xis6qcwy90yisg4wafklmw2y";
+"musixtex-fonts.doc-2019"="91fl3b700pvjqkwsl6h29f0z5i5781s3";
+"musixtnt-2019"="6412y8lh8awml9xs7ybcnhkgyjrc08vx";
+"musixtnt.doc-2019"="44c1fndj5grvw5q4jxyk0dgqxr56lzvd";
+"octave-2019"="6yb1bajc26k0pbr0a02zx2zqg7y0rnj8";
+"octave.doc-2019"="152jq3brzf99xwq983k2afrdlq5lhazb";
+"piano-1.0"="vbbcddqx5sk4gg9w1882g4a8lrnnqn2d";
+"piano.doc-1.0"="bn1c29lffw62jsyiygh3i0biaaz0asmv";
+"pmx-2.84"="hamhslbh8fhjjvzvksg0c9xkjwv4kajw";
+"pmx.doc-2.84"="1xm3b6ywqzn0z79yjncp0104ap1dhqkg";
+"pmxchords-2.0.2"="wwn3da9f9br7dpfhq7yg9j2f64bb9183";
+"pmxchords.doc-2.0.2"="f33mk2mv8pjl4ikg3kvig5lr94iwrm4m";
+"songbook-4.5"="jimhdkxsiqzkwnsjsw1rynkrfhhh5n0d";
+"songbook.doc-4.5"="62n794w3gxyivisl16xrz9lg2r0a0s38";
+"songbook.source-4.5"="nyn7mkdylkpywca50izj2czf485s8sm5";
+"songs-3.1"="1air4zpymnrajglbvp8yyfd3z4a72d8g";
+"songs.doc-3.1"="xcfy7all4n141r55c17gsnxj8x40dlqx";
+"songs.source-3.1"="2wx7qd5hzairbrb0qcs6mnkk10l81jh3";
+"xpiano-1.0"="ha9dpa3kpmhbzy3f16d7s6mlvh563mgj";
+"xpiano.doc-1.0"="x579hyy5sibzsn9ldrkwsqrjjrji0xak";
+"xpiano.source-1.0"="77wwb6wxd7c9cqmjlq9cij6p4ibr3r3r";
+"abbr-2019"="n55llxl7fjmx6p1z3ckjfj94dxkg1n0v";
+"abbr.doc-2019"="9lgcwpp4fw2zjx2rsp9w5szi6v2pdsn4";
+"abstyles-2019"="2zmzwsgwh4rv6ysnjjk35cihbifs0jir";
+"abstyles.doc-2019"="xba8x95rimsa16xhr7nziglk7djzv6w8";
+"apnum-1.7"="hvw4fwjm3n7hfj08ik7nkg5w51zg9mbx";
+"apnum.doc-1.7"="isai4pdly4pkhhjnh3afijlrm9mw2i0q";
+"autoaligne-1.4"="lvfsylaqq4sxi02bv9v6z1sy8gayb570";
+"autoaligne.doc-1.4"="7rzi51xaglby24ihmzplk6d0yk2x1wlb";
+"barr-2019"="rsgsgzki68jgx8d4r05qj1awvi02rm33";
+"barr.doc-2019"="jfhxfjazvlpcvrl6zjd1sw2ghmcsscmr";
+"bitelist-0.1"="22q3ivacwl5p0c8plgg1gjz8413l601b";
+"bitelist.doc-0.1"="n00mlj88l6djwcxzj0l6pxiiba94kpl3";
+"bitelist.source-0.1"="w38ccrprx1rn0pc34mr29bnx7gaxa7k8";
+"borceux-2019"="ls6xjxrggjzphr4pl71m2va9mndh1r7v";
+"borceux.doc-2019"="zdg5n9rxc2sfkyi1am8jka05avi7hyng";
+"c-pascal-1.2"="m4x5kfq1vm6vzv0ic910fqi1qijn7g34";
+"c-pascal.doc-1.2"="v6wqph0gaibfv4cwph5w0axp5sf70m6w";
+"catcodes-r0.2"="haljpnhhzvyhmnda9vgk77md5zm88773";
+"catcodes.doc-r0.2"="4227wyg04xryg33b39d81nlh6aaja1lq";
+"catcodes.source-r0.2"="6ljn2lwg4bzr9c02d01vh0saja9sz9yf";
+"chronosys-1.2"="qswnnwyghvsbjf3ddvbl7nl00qxwhs6h";
+"chronosys.doc-1.2"="m11jpa7crg095qf03qx7gcrvcb41f83a";
+"colorsep-2019"="il1sig8hzmvq8q0hlbh6fir15rrl5zc7";
+"cweb-old-2019"="vqf99h9w57jmd9r6l9k8bydqxmm2d9i6";
+"dinat-2.5"="a1gcgwkj0pd1lqdm20356fbjram3wpa0";
+"dinat.doc-2.5"="6dzss5231fdqjzs8j7z4gfx5iga4m895";
+"dirtree-0.32"="xgxmz79hj1q6qyfkdvgj5nm26865dfmm";
+"dirtree.doc-0.32"="im2rhm2fmqk1snrhvrsm112jw1hwcyw8";
+"dirtree.source-0.32"="pyfcid8hir7vvm6fpwimlfgs65dgzfm1";
+"docbytex-2019"="m4jkx2gf05q3ffwfkrk4x9bcwf9f3dmw";
+"docbytex.doc-2019"="01w9mkddxm1l9i12i5n5i5ar81xfn9b5";
+"dowith-r0.32"="vdgkjxphpmycfcsimxih7gnhv58hd9vs";
+"dowith.doc-r0.32"="ql8hdyxcgss7rvlp1913rp52wn4wjvxn";
+"dowith.source-r0.32"="xq0r5c58clz8qzbhz01gv2ph1rs9wg1n";
+"eijkhout-2019"="hdb3ag2knc67ksx39hmax8x83l0d41kl";
+"encxvlna-1.1"="kz3nvz29czk573cxbi5a5l3mbjs3vfkh";
+"encxvlna.doc-1.1"="gv5k36s89g2zslq75s2j7ffvwdiz4lkb";
+"epigram-2019"="0mg36ybg934n4jxgpf88lnvvc0za59ya";
+"epsf-2.7.4"="55vrh3nmvb5p1nkkpwhrq9glsf64bc3k";
+"epsf.doc-2.7.4"="b78n5gm14qk3brywpz4prglkqnpx9fpg";
+"epsf-dvipdfmx-2014"="qvf8n367wnjahzv8bgh7rmqqgnwraa0p";
+"epsf-dvipdfmx.doc-2014"="b290mp5xqfqzzxa92s9j798qyycaph9a";
+"fenixpar-0.92"="61jkr83g6i0bqmp0qg4w09gj7gwcdn96";
+"fenixpar.doc-0.92"="95h02nbzq72mmblzawgqsk8530wi1dpb";
+"figflow-2019"="166qngk7yy25v0rbjavi53m0sazk90gn";
+"figflow.doc-2019"="l92iyzsg4fwkc3nalswwpnz99kfcm1q9";
+"fixpdfmag-2019"="8djdk0baqcg84v6qrmdzckq7k97h4nkv";
+"fltpoint-1.1b"="q48n0d38d8y8m4z6lgmfza4gh1mrzkjn";
+"fltpoint.doc-1.1b"="6ljc5c3g53ig6yj7blcfqy43yvlw5fqf";
+"fltpoint.source-1.1b"="l5ybd1xn6abfhq5kjhvig8zsp721ldzg";
+"fntproof-2019"="bkh1b1j8zlbzmhpif5ji82gwmvg0aprj";
+"fntproof.doc-2019"="hhhxpfkwqpdj0wz78pzg4nbfyzh3j82f";
+"font-change-2015.2"="rvxfsxkwag1pzhh448n737b6ngadrlyg";
+"font-change.doc-2015.2"="14ck6s61lx6gyqmf6i9659lvwd3zh6hs";
+"fontch-2.2"="0h81qy37h3jb2m6g18969189a1jbi73a";
+"fontch.doc-2.2"="csygimfjbm36zfm403jz4kw39zv23zzb";
+"fontname-2019"="p97hi0yx6kka7s80j9cazhpxvhfnf8v2";
+"fontname.doc-2019"="vg79z64v459vl42ba50sar4dhafwr1f0";
+"gates-0.2"="awaxppd6dhv239x03vpwy2hn2zwldmna";
+"gates.doc-0.2"="qqmjk1276kdv0rvsv86gi7ysl3warg95";
+"genmisc-2019"="wyk31w93k04bqfqik1ad1q7bx88m6v4b";
+"getoptk-1.0"="2crphpdvd2wcnqrxm180im84ask9hcq3";
+"getoptk.doc-1.0"="vcj36dsv4y0k8czii5fb5b51c57c7rsd";
+"gfnotation-2.9"="3gkmqmawpzqvqsqcmrfc50261mqv8nmm";
+"gfnotation.doc-2.9"="rwivp94nr9a35q0ram2d4wmwj8gzbhk6";
+"gobble-0.2"="r1knqlpg1ndgkvkmi038jy9g450qm2k4";
+"gobble.doc-0.2"="kpgjg6n4p17fvw93qyih0xslid4x7w66";
+"gobble.source-0.2"="i8dh8xayn1a2lsslnr8wygj0qr168wpx";
+"graphics-pln-2019"="xgwh2sl1l9ckm86ng0pkk49iiajvpvkz";
+"graphics-pln.doc-2019"="0f496bqsp8ar70sw10kkspqpwldwabj6";
+"gtl-0.5"="bypkgzwx7y2srhdxv94a9zvbyxkbwgqh";
+"gtl.doc-0.5"="777isinskwws7m2b47a0w26w9dsp01qd";
+"gtl.source-0.5"="di1lh2gf5xc3wk34q247zvgvgnmnwdh4";
+"hlist-0.11"="zxglyva456i86zmawizc4scm5cjgw89n";
+"hlist.doc-0.11"="0k1ysa58wbhw02564py59gcwzhlaiffr";
+"hyplain-1.0"="cdn3m5p0va7v16wfr2hxi7sbbkvai0h4";
+"hyplain.doc-1.0"="37fvn4xi8ibli2622n1adyzgnnhrs05n";
+"ifetex-1.2a"="rf6dcxybcj2iaza71yrrl4rhqzgq5jcg";
+"ifetex.doc-1.2a"="cv3s6q4cjv23fi31wavygv6l0f0r1y5l";
+"ifetex.source-1.2a"="17yyam712knw6h46kd7q44gzkbbg9r5p";
+"insbox-2.2"="n1wbssqq7h2g00jmvy1g9cx2pb8lp8n3";
+"insbox.doc-2.2"="i5c06kh17g5ghsjivlxsipgkd0ab05x9";
+"js-misc-2019"="shwn2dwi83plybk71sjp3i1drw7xxd18";
+"js-misc.doc-2019"="ppwwslknxds8l1spalpgj950n9amsinz";
+"lambda-lists-2019"="kpvnf57b1s1whhrrrng7j0zvf0cka90v";
+"lambda-lists.doc-2019"="ai0gzwilj0cm1129pl5nlwc9ddsgpchk";
+"langcode-0.2"="6fwjx029l2nalfz81qfn1k7yp0z7iycb";
+"langcode.doc-0.2"="vq8m73ckjicm53q7v8q5k0rhldq55hkc";
+"langcode.source-0.2"="nk07pqb0mfq3vzpdddhb8w3w85svpbq9";
+"lecturer-2019"="4014kfbhxnf4wb9ndfh0qfwbbrvz0wwa";
+"lecturer.doc-2019"="avsvzihsa6jn0abvd4122k358w5sf4y0";
+"librarian-1.0"="5siy7c2xclp1c305vqiayp0n5dzil1gh";
+"librarian.doc-1.0"="8nxz7ac5hdp9820nsfkvhvv0bn55idq2";
+"listofitems-1.63"="kjbscx4fcjbfc502w6k03s466y7xnz34";
+"listofitems.doc-1.63"="h85gl0r28ig6fzm0rh972bxfs48ali56";
+"mathdots-0.9"="6avfq6dlhbqw1i3jrjgcdbdzx2a0w5nq";
+"mathdots.doc-0.9"="syy0i8rjssr81sy26xcx43jbripqx9d9";
+"mathdots.source-0.9"="zpl4xjhcq4hs18hqiyljy3lfyx9xbng3";
+"metatex-1.1"="jidirfi30wf0b4aq279lim2pylirmv3r";
+"metatex.doc-1.1"="b0rgim8d9dns88zvf283czk4zgsvvi3b";
+"midnight-2019"="5zah5lcyxgq6zxdpazqy3lqv7vxl9dcr";
+"midnight.doc-2019"="cl4ff07jfflwqpmbi7d1phc65hvhaif7";
+"mkpattern-1.2"="q3wl8iaijlhsg5qx35f5gcmz6gwj543g";
+"mkpattern.doc-1.2"="8hx2z63klm8dmyiyfg069qy4vf5qzc4f";
+"modulus-1.0"="ia3l2fxzy8dvm42nil9c3c3hgpg65kj7";
+"modulus.doc-1.0"="mls645yi6yafadq1fbv0qx8smj5sm1cq";
+"modulus.source-1.0"="rw91xw2dsgzphvq3sjxx507kfx7x3qkp";
+"multido-1.42"="xvw8537j730srqyigrb1q367g73zh29q";
+"multido.doc-1.42"="qp7jdx0jca995df559f1ji2l32jz2h12";
+"multido.source-1.42"="qc1473wf17ppqxy11xgz226w4d8zrxk8";
+"navigator-1.1"="0q23aqjf31y78hxmlhx4mf04c95rwdn3";
+"navigator.doc-1.1"="vxgrfimg900qa0ibwpbwcbv63rbaplp3";
+"newsletr-2019"="1hrni43c6y624w9nryc8q8rd4w6jjap3";
+"newsletr.doc-2019"="p8jfq33i8ah2a35a7d1rb0s3dz0nicvd";
+"ofs-2019"="1vqjznrdyjqn6ygq61h8rnwjymkx5kpj";
+"ofs.doc-2019"="8i8acpk75frksj5wshpjpcazbd93whzy";
+"olsak-misc-May_2019"="4ymwq2jcmf4gs1hrdj93sgi2wibicw61";
+"olsak-misc.doc-May_2019"="dxc35x4yc0y4xk6488awgkc5qb32kl6p";
+"path-3.05"="gxlifrd0kfxajy8viylk3wsfkycd96xv";
+"path.doc-3.05"="0pbd67di200vghv2a4bp7vwss7bsbkjv";
+"pdf-trans-2.4"="f2qw1mx9qql6xqsnnwcvqx59baz3gzyl";
+"pdf-trans.doc-2.4"="vbg7kp37w1p727nia0p1imyvxhqgzgna";
+"pitex-2019"="6hpvvpnw3bp3sa442b33xsphhyx0vk4b";
+"pitex.doc-2019"="b1y9bprx9harpgqmbchh33gwnc8khzsa";
+"placeins-plain-2.0"="b0dxmvbqfwm4cycyqm9ir7dl7dbgq37x";
+"plainpkg-0.4a"="xsvwz9z9f2jirfyzggiv49y0rfmhmnaj";
+"plainpkg.doc-0.4a"="b0c8mi4mr6bjdhrwbcplwjw920l4zmbc";
+"plainpkg.source-0.4a"="lcrm6734c3dv44wqcf4sp1c1aic0vqqw";
+"plipsum-4.3"="8jq9bahjflimbxs6vmwz2nl50jsy6ygh";
+"plipsum.doc-4.3"="9jp6ipn24yrl486b96ln2nk8i15h9fjs";
+"plnfss-1.1"="wkcli3ca9m6grq1ccbc5jjychw9sdrzx";
+"plnfss.doc-1.1"="smry2whkwygg9v4vgf4xfvpnfxc76b93";
+"plstmary-0.5c"="5qs8clnk15735j0r9id1vxyqabskbxcg";
+"plstmary.doc-0.5c"="jp2lgn5yq10g0jj5hihbcl77hpy2ryfr";
+"poormanlog-0.05"="q3sn08yj1xw45gk0w0na1bca4y6fr8p4";
+"poormanlog.doc-0.05"="30li13ybjpmzh5v9x504061shapvmqq4";
+"present-2.2.1"="nll2w203n4a3ka9dqmsl3bvfz4ypsvdm";
+"present.doc-2.2.1"="m39zcb5c59hd26kz8zcnbljh91hjxjqw";
+"randomlist-1.3"="nfdsmsl3s1wj8p236s3hmwhwfdx289wb";
+"randomlist.doc-1.3"="c6zlhgw9k14wrqffy277jwj3nqp8vsl2";
+"randomlist.source-1.3"="w61n9d30k1gjjrykxps0ssap7xncdfh2";
+"resumemac-2019"="8kydfyx795317240qryrp7zjvpbcd43r";
+"resumemac.doc-2019"="avh8y1vj230yn8bq0mb0mngrki4h0czy";
+"schemata-0.8"="3qik2nhhwhpgkwnay4rsmglh6kffm1pz";
+"schemata.doc-0.8"="7rggpri0l5pj9rppz8ynd8d6jz0v7ssp";
+"schemata.source-0.8"="qixmvsyiaj3yl78053y2s8xgp8ba06f5";
+"shade-1"="4ywc6gkvkgm5fiq6avik748vzj7f23g2";
+"shade.doc-1"="ax6w6sfryrzmjdff803hp6qfc9x7knkf";
+"simplekv-0.1"="hzrb8zzk62jc89bn9hmsg8xskkf7jnyl";
+"simplekv.doc-0.1"="fygasbjw3slr4d11asghdnw57i0r4qqp";
+"systeme-0.32"="wxf6jfpwi5pbgb8fb5ah9qwn4g9bclhg";
+"systeme.doc-0.32"="750pfab3ismjj93z5hs8r4wha9zr9dgl";
+"tabto-generic-2019"="libhmc3f9mcs93xzi22qhk8nyy0vzv4x";
+"termmenu-2019"="b9z1s2xibg6vcrd5qv1n1zlparqlwf3h";
+"termmenu.doc-2019"="0fqaygp9h3wr9x8ghfkxnsi9w1wfjis6";
+"termmenu.source-2019"="xygav2l9gll238dyqa8126sn9hc1n1w2";
+"tex-ps-2019"="jnzaqr3pc6a2bfh7jlsysc8hy30cq4xp";
+"tex-ps.doc-2019"="g377qq7n63mqil18vlfgimfd589pa1qm";
+"tex4ht-2019"="wn3xdb0z68g4wirfnfs4smmk13zq5s15";
+"tex4ht.doc-2019"="hi6p91idcncr8n8hiz6vb4fpwggm1d78";
+"texapi-1.04"="4ysk0vfpgxfdkpaag4982k7ni4qkksjd";
+"texapi.doc-1.04"="l2753w2z702418c8shbami8hzdsyz4lx";
+"texdate-2.0"="vi2h6c5c56i63vhzn64x7qvn11733z70";
+"texdate.doc-2.0"="3yzkfs7q2v20ykcz7754r48p0hb2l09s";
+"texdate.source-2.0"="zwkrw8y0m074w5fpjnaabbv7kk293g80";
+"texinfo-5.1"="6h73zydsfkdmqaly5xfj9j7z591vfgmf";
+"timetable-2019"="ca6qybasxlgqhmlqyjr1dw3n3j2455wb";
+"tracklang-1.3.8"="zs5wi6r2aakidly56h47fkaqr7kwcbn1";
+"tracklang.doc-1.3.8"="hx2yns14r8vzv27lbaq46a6r5hr7wja0";
+"tracklang.source-1.3.8"="b5rc9wdfy91xdg18d94adfc2s4zhly9i";
+"treetex-2019"="gkvpkgqggl2s86h7rmad9z3ax6wrq3hk";
+"treetex.doc-2019"="5r9rz97y0r280vn642x65xgcffb073gx";
+"trigonometry-2019"="ji2axcciqhac3aaly221w3bja28yb2nw";
+"trigonometry.doc-2019"="drmmcz6w0mvdzmf10dpikm8iagq3hjyf";
+"upca-2019"="hfay60269pv5n1r64q1r9d0lqljih70w";
+"upca.doc-2019"="czzbjifd9bdw0g9c8s2b76sq1cmw3hjp";
+"varisize-2019"="h0jdsw1dapsq7ml9hibgg9571da7lipy";
+"varisize.doc-2019"="af8xf6nzd3h9fm52gn6xpa886lzdpz8h";
+"xdvi-22.87"="g5irfc0gf7bra3vngv6kdbkhbyicdz84";
+"xdvi.doc-22.87"="i85gwkaj04296ysrkn1lprjf1xlzva9k";
+"xii.doc-2019"="p1ijdgk0mch86gs858rvkjzjh2yn35d8";
+"xii-lat.doc-2019"="8ilsp524wb5anl3shmdhbnn1nl2c8sav";
+"xlop-0.26"="vjjxxxwsq6pshgia7z796rwmhc5sjqnn";
+"xlop.doc-0.26"="gl0qca1pp05fh8a1baylvl2a26s549y2";
+"xlop.source-0.26"="hdfdp7jn8hch5fydl1zddlfh1av08dxp";
+"yax-1.03"="7kwmcvp6dlxj4jp0xp599f6469zhwnwl";
+"yax.doc-1.03"="4fh5pdqkifpv1zynkl1ycw0xi817wy5h";
+"auto-pst-pdf-0.6"="64qw6a4r38bsb4z3giwdvx18k60x0bch";
+"auto-pst-pdf.doc-0.6"="syhgg4sidch19kh1l9nda10dq7kvyvjq";
+"auto-pst-pdf.source-0.6"="j5n1kpkc88ry8nmb9hd3g382dm1x8c9x";
+"bclogo-3.1"="2j9mb9p1n575pvisvpy7zxhsw8940n2b";
+"bclogo.doc-3.1"="rjmzjjww5vmdzz5qfbsxjmnzz4fmn1gp";
+"dsptricks-1.0"="jrn51r2zwccvvy2dasq0zbf4cls15vy8";
+"dsptricks.doc-1.0"="m018nyxpwvxina15zyhwalzfiqb3ryxx";
+"makeplot-1.0.6"="2l1i1z41gpxaisbcp5qqazff2ff8nyfm";
+"makeplot.doc-1.0.6"="r0cb4v76cf0kcjc8hbik9wv3rkrpxznn";
+"makeplot.source-1.0.6"="f2y39dvyj8i8j7jfgqd8hf52v44k8rwb";
+"pdftricks-1.16"="5886wczqinvi86gby90fwbp36chikia3";
+"pdftricks.doc-1.16"="0q95d84knvpyp44pyv6hpp827m9cw5k8";
+"pdftricks2-1.01"="lqjpqma2f0zc9bvf8hgp73yhf2pgkwc5";
+"pdftricks2.doc-1.01"="311ws9zf7fpc91407lm28mjcckvz4mmg";
+"pedigree-perl-1.0"="2wwngnzbxbdypw4mg5wqr4vlmz770llg";
+"pedigree-perl.doc-1.0"="l3v4vhrvkkiz8av3l0abb4w5v0fizbpn";
+"psbao-0.17"="ma3dzpsa8kxqcjm72s217g3rk8i46pv8";
+"psbao.doc-0.17"="1r5r8xcwizzkbm5nb3xpv1ma58v8hgh6";
+"pst-2dplot-1.5"="krwawa7h5jd8sdsq3axq5wvn1im8k1zq";
+"pst-2dplot.doc-1.5"="gbmabgk6i8q9mi397ny0r8kqzk0hyc0y";
+"pst-3d-1.10"="pg6n52kv7lk6i6rfqyzijfrxdbv7ym5x";
+"pst-3d.doc-1.10"="x7bl3prki06ki517r33ab7pz72n0ycz0";
+"pst-3d.source-1.10"="xchbmh6g5zwja9xgxlkdb04qx4kplclx";
+"pst-3dplot-2.04"="m0ww4lfmigs5knn6i9x5qnd1hw1cvcb9";
+"pst-3dplot.doc-2.04"="jd1vzccssibgymacp05maz256a6iif2v";
+"pst-abspos-0.2"="bbag5d5l1pad71rrc51lbd8k11jm7nn2";
+"pst-abspos.doc-0.2"="70m0f6dbxy9j9iwxx92kj2k4vwqsbrc8";
+"pst-abspos.source-0.2"="3bnsfp2rj4rviirll63zljd7wady41q5";
+"pst-am-1.02"="pydkanpjfkw4s25m2rnxxmx2nq94rsk9";
+"pst-am.doc-1.02"="5sy24k5ivs70h1zg0knnfxyw0k0244nr";
+"pst-am.source-1.02"="ay1y6q7kmpib5bslmylx5xag413a425z";
+"pst-antiprism-0.02"="d79wzkbpk9q3n15qw83svf850x2y08wa";
+"pst-antiprism.doc-0.02"="sgb8fs7xl1szmnlmdpjbp7b8pnd02xln";
+"pst-arrow-0.01"="13pfic6an180whl8c9flfsw83ldrgj39";
+"pst-arrow.doc-0.01"="60rhkqwp0mbrn1ddp4n5akj3b6w03pjs";
+"pst-asr-1.3"="78h56zzm2yq7nv40l2aql6ihrx7da5gk";
+"pst-asr.doc-1.3"="qx4jpg74zpjjjh01bwxmw7lyip0nwxfc";
+"pst-bar-0.92"="a5456vc3299z2n5di8kfv5q07bnp7fvz";
+"pst-bar.doc-0.92"="6p7ag1iq37p5rkvd3a6b32cxnj8jqkz0";
+"pst-bar.source-0.92"="grywxwwpmwyf94rwa8pmcxvbf0r0xanz";
+"pst-barcode-0.18"="mvdpfn6iwpyycb8sfa91jw0mxyq6ai5d";
+"pst-barcode.doc-0.18"="xbyg4yj85i4pj46b8bxha5w8268j1k7f";
+"pst-bezier-0.03"="7gw43wmghlvfv0vmbxb9m75wki7k90ij";
+"pst-bezier.doc-0.03"="1dldcqv70p1iscmp22jh0gkvg9c2z112";
+"pst-blur-2.0"="xlvdgcpxbaqdw7qfp36xx9brl93gknak";
+"pst-blur.doc-2.0"="s2nqfv19ihhsx64hixcj74b9314q0r4v";
+"pst-blur.source-2.0"="km82lbn5chcrqzg19kyyczzzrladh5yy";
+"pst-bspline-1.62"="3l0nwn486w6wfac9g6rjf1rn7bf7cxgj";
+"pst-bspline.doc-1.62"="vk4iq1imd58w0f8a93c7zf56yb0hkr91";
+"pst-calculate-0.02"="gbvmsni943m47k6fqdrpsvscd93h5j2i";
+"pst-calculate.doc-0.02"="c3f57y1x2274abqbvp34q15gf625d1pw";
+"pst-calendar-0.47"="nsnyxxld6q4jzvc8kwysbwn9y6fxi9g1";
+"pst-calendar.doc-0.47"="jvwhyiz2cfzcx6mpwkahmpcb3fyl6yqq";
+"pst-cie-1.06a"="x0vq8n8l6xsiy6xmwfnlsnp59sp2n9rr";
+"pst-cie.doc-1.06a"="bxvays03xan0mw627zwai7ja07kqpf75";
+"pst-circ-2.16"="cnyll2vq7i29a4zs95lfqhr8b5b5v9zb";
+"pst-circ.doc-2.16"="nhh02gq24n5ldlsr71fg65rap9k42668";
+"pst-coil-1.07"="2ai64805vflnfx112c8p0jqf1ad477wn";
+"pst-coil.doc-1.07"="209y878cmqrykmakyy38075dkdfff6nb";
+"pst-contourplot-0.6"="8giwlz62qcmrl9mddfwk9yqp51c01r0k";
+"pst-contourplot.doc-0.6"="4agf1dx03x2jkxjh3v55nj4bns22563m";
+"pst-cox-0.98_Beta"="c03maichp45vxcy6n3p210gpvypr5v2p";
+"pst-cox.doc-0.98_Beta"="8x10b6xh12f1fssbyf8aggprnn7cm6i9";
+"pst-dart-0.02"="q9b7prnysx2xzw6i643ihjyn5ds1ds30";
+"pst-dart.doc-0.02"="hnwnh7aw3rjq1ny6fz4q0cp98j5lk59s";
+"pst-dbicons-0.16"="il8pxplbwqjhr3714g7n3476dyav3sby";
+"pst-dbicons.doc-0.16"="isaxq5v1rnnllahq6zzcd420yzfzc5j3";
+"pst-dbicons.source-0.16"="q70fjninffvwslibi5rwwsnay6jpi14c";
+"pst-diffraction-2.03"="amf1cak741kvz4a2ddz7hxlna2137akz";
+"pst-diffraction.doc-2.03"="iz4aizfbck2z3lgna1lxl3dagvmbnm1b";
+"pst-diffraction.source-2.03"="5v7nl5sf2fsja46jh36w48prx0l5cnsi";
+"pst-electricfield-0.14"="yq6r4m5q162j5y62vbrzgg0ilnk5blym";
+"pst-electricfield.doc-0.14"="7k6gx1q68lzsh4jayxhh1shvrj1ci81m";
+"pst-electricfield.source-0.14"="js2bqzmv8fkyd4j1pj8yzb6x7xlj2fvm";
+"pst-eps-1.0"="djkk1cq45fzh2q1pvl23aiqi8b2znqrk";
+"pst-eps.doc-1.0"="i903x3p9wwb1jjf5al8azqr3iasmxkyk";
+"pst-eps.source-1.0"="r6jcjqy0f5mnkkahzqf9qnfrgwqh52h8";
+"pst-eucl-1.65"="xjmdnvp20hs9qqin055pxqd39qx50r95";
+"pst-eucl.doc-1.65"="xmry09gzi0kh9lbnjas5pxb68smfs4ml";
+"pst-exa-0.06"="1jqv019148d2s5n7cmlclldqd3mzk08w";
+"pst-exa.doc-0.06"="v45ljmsk7y4p256vikzyk7w0z1vnybqz";
+"pst-feyn-0.01"="k5fpn50px7b2i9bq48qd2xwcdqdfwrnp";
+"pst-feyn.doc-0.01"="5kgzlqhig4ma9zhxj5ncmyc3qcp6acn1";
+"pst-fill-1.01"="llnpvgwf57n20wh4p9xfbwcxzlwky62z";
+"pst-fill.doc-1.01"="2wyyhm91dszgjzpvfsyyz7wk3z8k345w";
+"pst-fill.source-1.01"="yg27p6nlmkzbkjrygc2kc6bxj6hm9fdk";
+"pst-fit-0.02"="glmix9zjghzn0pa092yf6qppyax0grf3";
+"pst-fit.doc-0.02"="d2ilipqghmv5i4jmjh63199kn78i4brk";
+"pst-fr3d-1.10"="wcwbrmyh4mn9af5skqaj9pljkc79chwq";
+"pst-fr3d.doc-1.10"="hcf0909wnb4qdhrcy5bsgi7bjhkd3rs3";
+"pst-fr3d.source-1.10"="fyqkqk6p5m83q133ngw9a3j6gpzy8aii";
+"pst-fractal-0.10"="kpy8pii1jlwvgppbcddsa4852whw3r16";
+"pst-fractal.doc-0.10"="y1igkr28qxvj8yb31vca9cxinhvdzwrn";
+"pst-fun-0.04"="klmswb8gqb538ghlay62dwg1asiq8l13";
+"pst-fun.doc-0.04"="xafzv4wa5hzqmclbv7s7xh0ba2kaay69";
+"pst-fun.source-0.04"="s7173q9a44aqd43d8bwcrskc9bsh1c1r";
+"pst-func-0.93"="8fxmgdnwqh2zm7r2k46dx3lcz9jjdab6";
+"pst-func.doc-0.93"="xjgk9jzv3abphq20jgiz9q12zqspp29c";
+"pst-gantt-0.22a"="ghji2bp2wz4xgkmh2vrfyxh933r8dr3q";
+"pst-gantt.doc-0.22a"="zvdlzyll48hrl970ms6j7pgwp2f2vmy3";
+"pst-geo-0.06"="p2q2w8rl3z8xvdylc8inm2i4zbh8jxc8";
+"pst-geo.doc-0.06"="q8fwd5i5fvxchs8hz9l7zml2xqv337sd";
+"pst-geometrictools-1.1"="rx8v1nyhqrny92sqsrwzsra4mhrh7xnh";
+"pst-geometrictools.doc-1.1"="20k0sg2qkfzkcpq1qa42195dw9swjx3h";
+"pst-ghsb-2019"="rzy3vznyr6jd0b0vr9h6ajlqc11bp9rz";
+"pst-ghsb.doc-2019"="5w079f1q4w8yxs4546qzx2c21vrhm2ym";
+"pst-gr3d-1.34"="wpbib4n4j2fmgbirhq8xha4di6f3w1xa";
+"pst-gr3d.doc-1.34"="ipap5gil3j6hkdcl1l1y0a6fnj754zq9";
+"pst-gr3d.source-1.34"="l6i8dnqgpl8iwsmbhiw3a043pbxb3k7m";
+"pst-grad-1.06"="7yprfjpsyszw1wndfkwingz1vncvy1ng";
+"pst-grad.doc-1.06"="da27kdibqih9pbbj4366bin38zznfsis";
+"pst-graphicx-0.02"="pq6a58d7i0bpbzq0wrh54vlyz5hwjb2r";
+"pst-graphicx.doc-0.02"="xq7j614zxh5m9mr5zbfbr7q1ds0f528g";
+"pst-infixplot-0.11"="cpck9sg68imi2ddiaafw7k89hhz8i4ar";
+"pst-infixplot.doc-0.11"="xa4vw2bzwdqm4y46ljqpx3d6n2ff02yq";
+"pst-intersect-0.4"="az34g553vdj45pa35s8ymk0901njq262";
+"pst-intersect.doc-0.4"="756ih3z05zxw0igclcmx7l8r7n6c9n85";
+"pst-intersect.source-0.4"="2fbzddwq4bib97214qq0cqrhraxvc5dp";
+"pst-jtree-2.6"="pcgjwxpmr4356pysfc4jgn5f7wvif4n2";
+"pst-jtree.doc-2.6"="i9qmlbn7apzimcsmxls2vwh5gniizyrc";
+"pst-knot-0.2"="y69z6hv29f73scygpzg5qr0p3yf8cvlp";
+"pst-knot.doc-0.2"="7jbx6gjfjglggmnfgpj0rzf67wp0s549";
+"pst-labo-2.04"="h5lyw06d0i2r5ghn4ljymyy3s9bglmcz";
+"pst-labo.doc-2.04"="8diz0gbmd09is6w4qyicizjbq4gf7lxs";
+"pst-layout-.95"="vwhvczg3rwlvz8r7x4y4n537bwb3x6f3";
+"pst-layout.doc-.95"="y5pl5paib75knak0gamgp31mph6dnpkb";
+"pst-lens-1.02"="y5a0bhzbyh4ncg26rh3k3w7xc2mmw2df";
+"pst-lens.doc-1.02"="f8qa04lxfwy1ic6dl6s4bc3k66b2sjy2";
+"pst-lens.source-1.02"="371k1kh1ryb46asc37r40vbi5i35icfz";
+"pst-light3d-0.12"="p4nppgfa4qw8l2gj23k1rhhfb7vdkq2s";
+"pst-light3d.doc-0.12"="p688y0b5pc29l63dpmrx342m4hmpilxs";
+"pst-light3d.source-0.12"="ic2f2b81hsyhh8pp57ywda8pngw9g0m6";
+"pst-lsystem-0.02"="4wp3nih38lv59313ch6asys1kj1qa27z";
+"pst-lsystem.doc-0.02"="x4k17vgrb4dcm09qrcx4v6lcxlx8h9n5";
+"pst-magneticfield-1.16"="c2m1qvcclbx5gx0jqnq6ps2ypfn2xvn6";
+"pst-magneticfield.doc-1.16"="pdlhzrh670g5hnr7di40mdcsjyjhx6nl";
+"pst-marble-1.6"="qairi5smsg637lgv56g247df3fmxf4wg";
+"pst-marble.doc-1.6"="g32ayxvgck3yfrikkqhw1njgxjsjp0wc";
+"pst-math-0.65"="i4s6m928yxdpxadv4wz0h8vfpw69l31r";
+"pst-math.doc-0.65"="s34g8psqhy9hb0927kbb62cd1fipm972";
+"pst-mirror-1.01"="l1qs4938r324dv9w1ij2xfwk16nslyhk";
+"pst-mirror.doc-1.01"="varxk1wyh1lc7yv5n3ad1yp583rchj3l";
+"pst-moire-2.1"="87fgw7g36l5yhh7wajhcz4fndls21d29";
+"pst-moire.doc-2.1"="j9hx5m27rs1by4igc5nn31wgxb4v0yz4";
+"pst-node-1.42"="a8z022bi9njv8jkmq1bfqpjszms9w01d";
+"pst-node.doc-1.42"="rq9nyzmws417kvj44k57b7najxbvixkh";
+"pst-ob3d-0.21"="b133mvl37zxxqny148r3mnwijp69jzc2";
+"pst-ob3d.doc-0.21"="v0d9mrz4dvpk0qix4fiy632jfhfhqy4l";
+"pst-ob3d.source-0.21"="yqjb2ifyxj2mvs11lxq32dgdr74af9p3";
+"pst-ode-0.13"="5r2l25m2994jjs0v0fal8nyr9wn3ih4v";
+"pst-ode.doc-0.13"="951kjjph98p9m8cqyzcj078ny6pq9z0q";
+"pst-optexp-5.2"="6k171kswlvjz2qrgsr43llpn8a8fx2b9";
+"pst-optexp.doc-5.2"="8nfgcfs6614n1szf9c8b7mjk43f2vqah";
+"pst-optexp.source-5.2"="krh33kab76gxw3vjcaja3y8vk2xjpgla";
+"pst-optic-1.02"="fmp70zsr3gfcxc9d7mik8y7fdq9bhv9z";
+"pst-optic.doc-1.02"="bw2k4jbxfdwyn7pfn708wd3ff8nr14ww";
+"pst-osci-2.82"="5rwmmzwp7jwfv40cg66gi0n75mlvn851";
+"pst-osci.doc-2.82"="nmgp00q4xifasnxnckw04kmd8qxxdd7k";
+"pst-ovl-0.07a"="g6sni4112p1kyribk7p6rv1mwwjb7xb4";
+"pst-ovl.doc-0.07a"="n23m8iv4lv4009x9l6sa177jyfjkp0pi";
+"pst-pad-0.3b"="x3762zh9c5shzl02r9ssykd2a0rqpk7k";
+"pst-pad.doc-0.3b"="ymjpw81y22mbmf62735kqi80yhylvazg";
+"pst-pad.source-0.3b"="7cqccc3ps8qdhbykgc6yyygjds46p5av";
+"pst-pdf-1.2d"="av5rd425773zxnzlwdk4x5sf8wp9w7in";
+"pst-pdf.doc-1.2d"="k2zssqg4qf151a5iiw2nvk8lyrlh7md7";
+"pst-pdf.source-1.2d"="1lswqfmczya2gdhxi28czpznic888yf5";
+"pst-pdgr-0.4"="cijfx5hq5ygnchsgdw7ly5a43a5v6cqb";
+"pst-pdgr.doc-0.4"="s94gqhws251skwh2ap0b3hlvpp818y0z";
+"pst-pdgr.source-0.4"="s2zbikk5v94207zmrmnlpr5bx3jjzc5i";
+"pst-perspective-1.05"="iaq5j9cbgyr5p4np1fn5dqv8m8mv29qc";
+"pst-perspective.doc-1.05"="kvvjyfxnxvzxgjrfv3ysw2qd3bafh5jk";
+"pst-platon-0.01"="c1crbkzj0vvblf8n894g91q7qig185w5";
+"pst-platon.doc-0.01"="54icmvjwsbljdbq03j3npmwr9j85cdpg";
+"pst-platon.source-0.01"="bs136jlsz9yxiw062dlck6km6fsapgjv";
+"pst-plot-1.92"="nb5pbj56m205njaj6xx36fmpnjl2clj0";
+"pst-plot.doc-1.92"="9zns6nss0wbc30dbf42gm3gzkvddgrr3";
+"pst-poker-0.03"="8ny6asww2zmrbm4aqilmhn3wh5rlx4jj";
+"pst-poker.doc-0.03"="icmvyk2m0yn1cqgmfplp6r271ipsnnqf";
+"pst-poly-1.63"="caj343wmgfxzbzchalw7w14jazj3xb3n";
+"pst-poly.doc-1.63"="gq61g8l852k4m8n69kzqdx1sii0jr41n";
+"pst-pulley-0.02"="d7y0xspcv55vq4xhhpwhl9a3q33fpyga";
+"pst-pulley.doc-0.02"="6g5jnm4i5lrxqb45mn60g7nlc9xq13cg";
+"pst-qtree-2019"="6slxqgzm8pzscdf79x1y4zp3rav425g3";
+"pst-qtree.doc-2019"="9bp342h5rimv9wyjncj9m9bb3x2pb77p";
+"pst-rputover-1.0"="39c8h8wq8rcby34dnpq8f9d87zlfd0p8";
+"pst-rputover.doc-1.0"="apm70lr0xn7hgj16acpcll9wd3jcxqbn";
+"pst-rubans-1.2"="akzd33l39b9gh53hkqzaznb6j6rrbif5";
+"pst-rubans.doc-1.2"="sa01cv2q19w3rxlib2j2wppvbjcbn6z8";
+"pst-rubans.source-1.2"="vanr4y960njpckxcy8i10jh8fxmdd94m";
+"pst-shell-0.03"="kllra0m3v64wiw4mg1wjqwcwapgbqw34";
+"pst-shell.doc-0.03"="j8j9vfqbw1bzbncflx0wk7awr599pp2m";
+"pst-shell.source-0.03"="4zzi02gy69lscpmwmsy5i6dzck63ql10";
+"pst-sigsys-1.4"="89mhw4a91vxvm6jr2806w7sdgm0sldzq";
+"pst-sigsys.doc-1.4"="1x1s3l6z4rr8s1s8smck8x8vkg9sb7k5";
+"pst-slpe-1.31"="i8wqm7c5rr1gvrcqdhzgc3wjsnvhxnaq";
+"pst-slpe.doc-1.31"="d63x21a81b3chx59ygn3niagb12lq0vq";
+"pst-slpe.source-1.31"="b8pbhx17ad49g92il07bx2347lim9kr7";
+"pst-solarsystem-0.13"="k3gvgdnwv5054qph6ljijgwlr4mhrsmy";
+"pst-solarsystem.doc-0.13"="sh4if86rr6p8bmjrfndh8lfsibjmlj8l";
+"pst-solides3d-4.34a"="ja56phln33vfw2nih7kmvw6kr5s77400";
+"pst-solides3d.doc-4.34a"="82zcnj9a0sfy42hx7mihhgvrnj4xzg1p";
+"pst-soroban-1.0"="q71r7bilwmgxxvcqngmn9w63cqwh526i";
+"pst-soroban.doc-1.0"="ds57w9f3d4dy5c17xsvrmzs09iccanh7";
+"pst-soroban.source-1.0"="sj27j1n05dfq3szxyifzd24i44c4ls40";
+"pst-spectra-0.91"="7h48zv55xaxbgccdp7710lh3y2s334sn";
+"pst-spectra.doc-0.91"="sc2zbs93vbzp4jqgwwxh7pga2ngrwxnz";
+"pst-spinner-1.02"="c25gya6x35s07ki87x3f8jm85a0hsdqb";
+"pst-spinner.doc-1.02"="b15zdksxzk1dr3rmgi5qfkqwq131qnv2";
+"pst-spirograph-0.41"="2mkxc7vrmv5xa7aggmpc27wss9gw8zzr";
+"pst-spirograph.doc-0.41"="4q5pbwicrqkpmfr7zwa0ykmfy32y4iks";
+"pst-stru-0.13"="9xzgq9yp4wh3939dxg4wvkzsvq8za3vw";
+"pst-stru.doc-0.13"="pm4nj6rck0s7gjhkfjg3i4xa8qd1dihi";
+"pst-support.doc-2019"="z97cka1jrk6jji8lczqfxc09cqj7f34x";
+"pst-text-1.02"="sn30bjp59awsdx31kii7a429wjin0zp0";
+"pst-text.doc-1.02"="3v66zv4kjb8rh3fpbx2wzvg1rn5iicaj";
+"pst-thick-1.0"="b2dnjagm4kkgxfjilahizzyq6mb1cx5f";
+"pst-thick.doc-1.0"="jkybjsqnnavyazal3bf4z54ldqnw1gw5";
+"pst-thick.source-1.0"="1kjjkqgz4fwghaialrqvgnfq57vl13k5";
+"pst-tools-0.09b"="m4bc24jncfjd32n3b4zmkba3nkk8a0az";
+"pst-tools.doc-0.09b"="5jh948lwnk951jpa6wwgkqc6hx49l0q0";
+"pst-tree-1.13"="l1m6c66jv4v02n4mjv9ddgh84qbyllqw";
+"pst-tree.doc-1.13"="jgcx73vrpiwvlq9rg1iszm57bj1qsr73";
+"pst-turtle-0.02"="m4g2qpqvzb71ax94sqcvzzpjzyxs4bzb";
+"pst-turtle.doc-0.02"="rnps80z7lni58fnlfqdx9pf4iw5s1f22";
+"pst-tvz-1.01"="0xky3nd1q8kv7vbs73dcbwgjqbysrwi8";
+"pst-tvz.doc-1.01"="hrigaq1rz3hd5l4969913apdwayy1ifr";
+"pst-tvz.source-1.01"="zs1dh6kiphzy0p7nj7i1faldamjsc1j0";
+"pst-uml-0.83"="0rfbyzqd6xk0aiwrmavfnkr6bmawkrdg";
+"pst-uml.doc-0.83"="jvyfkj9r0zknfbpway8zwl5l81zwfq6n";
+"pst-uml.source-0.83"="50n69kfybcg2qlxjy9d0f330rxy23sv6";
+"pst-vectorian-0.4"="45j3kc2ma7yvpk73724419zxzajyyc0p";
+"pst-vectorian.doc-0.4"="kr9cw6fs2rra7ymmza9mf3winvj17c0j";
+"pst-vehicle-1.2"="fzkkfjzb0s227y1942p89g2s3qn5bgdr";
+"pst-vehicle.doc-1.2"="152w1jskf5ninr660a9cjbyh9q4bhphj";
+"pst-venn-0.01"="a5bibsz9q8lm2yqz7wrmarn54qc134y6";
+"pst-venn.doc-0.01"="vfdaqpl5fr5nh08a4cg4gkl55nxwv5gl";
+"pst-vowel-1.0"="aq45bsp7d1rdflxvs1aga0kqmn9b3zd8";
+"pst-vowel.doc-1.0"="zm075772viyjnm1akx6ixk61gb33nq8m";
+"pst-vue3d-1.24"="kdnn3bssm9xrfr42ni1n8kg04r899624";
+"pst-vue3d.doc-1.24"="qg9v649wjxjfrp14f3ac4shp5nfad89m";
+"pst-vue3d.source-1.24"="zxk7phlcdh2g1x9l4mps6ncwxc8ydryi";
+"pst2pdf-0.18"="rafm5fyifzzz21336l2yvnqs1ynrcrh4";
+"pst2pdf.doc-0.18"="hpjd3gxsk0lmajf2fpac7ykhrznzsily";
+"pstricks-2.97"="l6vcl5rj0qw82chj5hks3a7xilmsvphw";
+"pstricks.doc-2.97"="qk796lx5myp7c5p8s6wv9pby9pb67v3h";
+"pstricks-add-3.87"="vkfiryg7plqky6c43dvyx7zspa8b7fxb";
+"pstricks-add.doc-3.87"="hx8sxyd3fxsp146500flnr8cvwsrm5rw";
+"pstricks_calcnotes.doc-1.2"="4q48najl98h9lb1866avfw6c5ir7p4bj";
+"uml-0.11"="ggl1iw3qhzysy0fza2dbl3igwlcq3i0n";
+"uml.doc-0.11"="rhj5ivlvx43d8c700117lklmgardm76a";
+"uml.source-0.11"="nfmc770r8bp35av4n0x1nml5h23y3whd";
+"vaucanson-g-0.4"="qvnklg80m4p0235g3wx2ln1gk5myd1i9";
+"vaucanson-g.doc-0.4"="iwldpyzbgygg73gyidpj3vgw60jdid9l";
+"vocaltract-1"="dzjd6v5mhb2mcdgrk66dc0wc4hdihsnw";
+"vocaltract.doc-1"="kgb45nb45fmc2hnyg31m92cg74mybnvq";
+"IEEEconf-1.4"="y7pcvgybgsj94x4r1b3p79w2bwrja38s";
+"IEEEconf.doc-1.4"="6pyp532mjalspmalr2ia8nm58fjj5fwj";
+"IEEEconf.source-1.4"="h16jq4q6bvb1wpwjxnyhhp43frcjmnym";
+"IEEEtran-1.8b"="96gd4zxcmg6c2mma4d8z0wganf9ml7d9";
+"IEEEtran.doc-1.8b"="ms8cp0i51knhhbp2fckkmr2cwlvyx4b0";
+"aastex-6.3"="y4ki003dd755ybn25iwr9fzh8cn8jinj";
+"aastex.doc-6.3"="x8lg7m1398a7fdh30yh1iaj9vpdv1419";
+"abnt-2019"="fj4wb6q7pw8gnh87r9ks86h76x0mik3h";
+"abnt.doc-2019"="g3r7s171g24fkl77b6y3khm6rhvjv704";
+"abntex2-1.9.7"="zxahr9mb1vq0yfcj35znym4qx2jh4p53";
+"abntex2.doc-1.9.7"="hs3g3ji0knhsh0gmjcz49dvc547wh0cc";
+"acmart-1.64"="jw81rcgi34yaa2l5w66qrzazsnyhbxlp";
+"acmart.doc-1.64"="swxjs2nc6s40r7m1vixcsk8d4wlhsrfb";
+"acmart.source-1.64"="93h569xdnwl14wx10ycsyl4fz2qc5sv8";
+"acmconf-1.3"="9wid04wqz4l1xisvlng52xabw9m0p1k5";
+"acmconf.doc-1.3"="66xjqp6a86iq2908p77cz57651av2i23";
+"acmconf.source-1.3"="7ssw68bvkxxixxmf9ygp7szxmc59fvik";
+"active-conf-0.3a"="k1b3ykxr34j6mz7qnhl442kiw5mi044k";
+"active-conf.doc-0.3a"="smq9rd7vgsdm8q0mkgrvwifrdjirsi3n";
+"active-conf.source-0.3a"="j59z6864ndi1pvrfdcj1g7h28bb0zs59";
+"adfathesis-2.42"="kipd97l80csijf6nwf4qh9dqs7481gpv";
+"adfathesis.doc-2.42"="1a45imkqk01xwsn8w0sgi04kq9lkjfsm";
+"adfathesis.source-2.42"="wsyrxaljzn15z0mg9fkv7qqbcxfgv7ri";
+"afparticle-1.3"="a47yf3q2kr9imhrr9520gm0xzrbxijpl";
+"afparticle.doc-1.3"="jwrcq8p5jlda9bs8xq364748p9xr3hyk";
+"afparticle.source-1.3"="3j3wg5g8qbrm1lycdd5g49sva0rshjqc";
+"afthesis-2.7"="s423mnyllrn49bbhas0r4nmks9nk4nrh";
+"afthesis.doc-2.7"="8cac60kzq0srba12qa1sdk4fkqxvwjvi";
+"aguplus-1.6b"="92nfqnrbjsfcw7aym6qahl2rsl75kl55";
+"aguplus.doc-1.6b"="8nams9f6dwbv45ad46lxh7c4wspl0hcl";
+"aiaa-3.6"="x8hag1q2jh49y6ad5k774y573zas97c4";
+"aiaa.doc-3.6"="ipldvi4g05v26gzvp2wp71n0xv5mkdd1";
+"aiaa.source-3.6"="wllq5qv20bc4f7m098yn1f5slyrdxazz";
+"ametsoc-4.3.2"="4v5ya7z7mbbxqxkjp5madwpn3m456gpp";
+"ametsoc.doc-4.3.2"="nzphxaasrrgxhiwixz6k6qikbg6z45gi";
+"anufinalexam.doc-2019"="qb1dvx5ryz6p5dia1z13aa0h0822f814";
+"aomart-1.21"="szg9dma84y66pdh8p32kq36fxhnn0lzs";
+"aomart.doc-1.21"="00i2qqh5hlfpiqqp75ri023wlvsj4r9z";
+"aomart.source-1.21"="xf9126s1w02lxbllbzblzd405qg0ydsy";
+"apa-1.3.4"="g7ywm2jp0b70qdwmm59m4rr8glx3wc66";
+"apa.doc-1.3.4"="vjg7gj1wi6mb9b1qyfsznhgcbvivdn1c";
+"apa6-2.33"="3qyl47lciv0f08fvqsb6py1pyvf6sqv0";
+"apa6.doc-2.33"="a988adq52ii3kh28ra3hk71vgk7rxbzg";
+"apa6.source-2.33"="vjs6f857l1swfsnvzw53v9jw8spnmw4q";
+"apa6e-0.3"="0bilb5nbgi83kp1w7d1kci1akg36nv1z";
+"apa6e.doc-0.3"="p7ir3azb68s9pms0gpa968gffr2qr0xw";
+"apa6e.source-0.3"="baqh9z3mlxqy4kklhnb9a66gj36lnhxk";
+"arsclassica-2019"="pk5gn6ifrhj5c33f78d619hq4j3d7nmg";
+"arsclassica.doc-2019"="z21lmz2x0sc7g6gc50j1x0hhzz96ra7b";
+"articleingud-0.3"="45hkl8j1hxdww0igp85iifrdz4g4h18l";
+"articleingud.doc-0.3"="00653rqfzjv2f4wl77vznk2p1pi6f2fd";
+"articleingud.source-0.3"="24wwfplzs8477i5kl1ks5fvkd8w1lv76";
+"asaetr-1.0a"="wkch5k1hxw65dfdkyghyzpcibmnj0zyj";
+"asaetr.doc-1.0a"="8d1x4sq5xpgc1kb5ys4dp02i2r1p3ha1";
+"ascelike-2.3"="b7ff1cj0jmbdr6wrvcqr37byak164fy3";
+"ascelike.doc-2.3"="sqynsfl8cm40n0r7v2a7qlhxx6zny623";
+"asmeconf-1.12"="2db3vqhghx1cyza2696vflsfvajbkx5x";
+"asmeconf.doc-1.12"="bzdzkxg25r7ms67jglacivy6bfr14ndf";
+"asmejour-1.06"="qkwsh5qwgvy8282m868hls9hj8szm9vk";
+"asmejour.doc-1.06"="zp3gnln8qj1g3jk45snh2l8z5w1zdp8l";
+"aucklandthesis-2019"="gqqynyfp4l80jc7a90by84wjmn22s0br";
+"aucklandthesis.doc-2019"="mqasialmycia8nzmrc2m3d9pwf1a39r9";
+"bangorcsthesis-1.5.3"="h92q93ga8029hvd79hywxq73kaszm5a1";
+"bangorcsthesis.doc-1.5.3"="ax2czj8r6am7m2r2inrlsvnfl2rmja4h";
+"bangorcsthesis.source-1.5.3"="hc67sbajczfjxpwkvpl38ss355pziwg2";
+"bangorexam-1.4.0"="6s8rc4pgza915qgldk95ykqmxhf2czxf";
+"bangorexam.doc-1.4.0"="kxjxdnfljg1pracpx514adjp7ynbvvll";
+"bangorexam.source-1.4.0"="rf9s69qaaw2qrbyljcsj9pmg5qw4m18b";
+"bath-bst-3.0"="1ppl98wg6px20rpfs6rn8aqw4r1hs672";
+"bath-bst.doc-3.0"="yfh2hj2kzm0kfr8ckzhgwkzk7608zm8a";
+"bath-bst.source-3.0"="nczg3l893i16k3hmrrci2yvh1903a2jq";
+"beamer-FUBerlin.doc-0.02b"="k09b82znxfk7gi7cxpkffs65v3q5siph";
+"beamer-verona-0.2"="jgqm1267x276xsdikvc586h946xfzhcv";
+"beamer-verona.doc-0.2"="skxiv6nxw4vk3c7ppl2bripmlkada52x";
+"beilstein-1.4"="v59d234rg06vkwrqqcd58jkyc008qj6k";
+"beilstein.doc-1.4"="ysg1dalzi5mzznrfwmcirz0593d9pfmv";
+"beilstein.source-1.4"="vacm0gshx6r8lp12jc40wj97lwwsdw4r";
+"bgteubner-2.11"="kjykk4kfr7iig49zpd26kga2p4kki4gq";
+"bgteubner.doc-2.11"="wi654djqdqp0hff6cshv1hfkhmgcacs7";
+"bgteubner.source-2.11"="jhqhmr6bb4ldma4dscl9l4csan3qrv6q";
+"br-lex-2019"="ipw7gwrsdv691vnv257w9i15f465irnv";
+"br-lex.doc-2019"="kai74ysi41iw5bc9rjv8saj7qh7n0s12";
+"brandeis-dissertation-2.0"="8nqvv44ahsf5nxn6m4qrd5yiarim1zr9";
+"brandeis-dissertation.doc-2.0"="lfpykcdb4yrf7pz7b1ljrissjlk4v20v";
+"brandeis-dissertation.source-2.0"="xnp41jb8wf2zlrcqikp6qxnhw9k6j1z6";
+"brandeis-problemset-0.5.5"="x7ivk7r7qvi08kb7jmdajym04hxyhzk8";
+"brandeis-problemset.doc-0.5.5"="zsa3r4xc2kfp00r3jj7mfzdxaphj7505";
+"cascadilla-1.8.2"="03g1znhjzcvxvclzwb33lrm6703j1xxw";
+"cascadilla.doc-1.8.2"="njy3lpaw3lch5x3p1mm07zis50z38ps1";
+"cesenaexam-0.2"="0n58an00m7xywgjxd4mk4jvr3wkla1sg";
+"cesenaexam.doc-0.2"="1cq9yg0f3j9s40jrkzgxnpk2ya88jgiv";
+"cesenaexam.source-0.2"="213fs3j3x9f0330jy9hfxmq3dhpl1lgf";
+"chem-journal-2019"="8rsrybpvzqr389ip3lfkjna1vy6lclv1";
+"chs-physics-report-2019"="ci2816gvc1ds20gh2jiiyyrc061n0ncz";
+"chs-physics-report.doc-2019"="ipzvx9zkpnnzbdkmbzzk6g4wz4qaql17";
+"cje-1.06"="s4l2hjnfw2s0l19hbzf5249igprbhw7a";
+"cje.doc-1.06"="hyw2lcxsbm0v95l1161v2sh2bprsg421";
+"classicthesis-4.6"="1mdqrwxmh218ni62g9bfgq7v1jx20ilc";
+"classicthesis.doc-4.6"="d0nd57qpb4ya46ipz6c2jwark5sdghfl";
+"cleanthesis-0.4.0"="z2wcfxgawx5pdbw7bfisn89qyl2jlyd9";
+"cleanthesis.doc-0.4.0"="w4wjl5szng8zg0vvjr32914rdzyxcffd";
+"cmpj-3.02"="pgkvrk8r7v31hmhvdxcydnlpgxyj8cbl";
+"cmpj.doc-3.02"="m150sh9q484chkbfx96ldchfwh86nq8c";
+"confproc-0.8"="6anwdx64g1yfr109jrnqfml6bqj8l98a";
+"confproc.doc-0.8"="qczsp87rylnxkd8nsi14kjahnkh57i6m";
+"confproc.source-0.8"="f8yczf6glbb74hvfga786qvamllnza9c";
+"cquthesis-1.40"="7g1w96hbvmqyq1g80w6s4mhsccwh2cqp";
+"cquthesis.doc-1.40"="9brf71cxxkn7dczvmqafg59lyf4y0qk7";
+"cquthesis.source-1.40"="hs0h3na9h7nf6rgm2vs0zv9ppadppj8z";
+"dccpaper-1.8.1"="p8hdx4gbjlpa6zg527003dngbz3b5h4p";
+"dccpaper.doc-1.8.1"="n68flqg7wjg0yiarwrza361rmaskw3md";
+"dccpaper.source-1.8.1"="h77q2ar40hfwsl4p096b8717kidy2kp3";
+"dithesis-0.2"="y0xrpjxnblvgahdwyfhm2hag5hss6qzv";
+"dithesis.doc-0.2"="b7ka35ywbrn2m3a6b8cyzyvajwxyvdkl";
+"ebook-2019"="08y1g19fvjskwm55g1av1x8bs95vmc6y";
+"ebook.doc-2019"="kw04pn3a7pbkgxjrn1p12z65j8k4n3fk";
+"ebsthesis-1.0"="3f8i1srqx6hh10rrjshsispqr3wdhm0m";
+"ebsthesis.doc-1.0"="wic4wfgihf2yyk40937hr2g59933cyy5";
+"ebsthesis.source-1.0"="q1lhixwgkc6zis1sgsnwzsd0p7spp0zz";
+"ecothesis.doc-1.2"="92jxgiddwpj5g62zwg50wm681h2z1ixf";
+"ejpecp-1.7"="bgshb47fig2mcjywnq8cx6k867imsd6x";
+"ejpecp.doc-1.7"="24lb4caf4yk76fpxvvw5zl18yq6kc94r";
+"ejpecp.source-1.7"="z61hdi9di464ywfw1s80wa5acy90ymy1";
+"ekaia-1.06"="r87yx6q2rzrcp150gny82070fk0a8a9i";
+"ekaia.doc-1.06"="lnjkk17sysdnj4l9vpx0qwkr1w185iq7";
+"ekaia.source-1.06"="jvjhgfg1hvj60lcwa7k34zfl9v17bw5h";
+"elbioimp-1.2"="wp7pv78ijjgb48majhg8pjqcmkq29jbl";
+"elbioimp.doc-1.2"="0515vzg1miiljb8grlb8idsb2y9gfcdc";
+"elbioimp.source-1.2"="lzbvgi6d0w8wwf052v6a1gzz2qfvpkn4";
+"els-cas-templates-1.0"="2ksscb78z249vcm9p3m171nrfb2r3bbs";
+"els-cas-templates.doc-1.0"="f3h55yq38qa098gixw53a1zs2zy2v2xj";
+"elsarticle-3.2"="wybpbhzmw2a1h76ik1m7dafh0z83537z";
+"elsarticle.doc-3.2"="1dpvggnxxpyvg331xsgnwnyzrj9sw2hm";
+"elsarticle.source-3.2"="0w53y3wskl6iarnpmdk9c154dp63pnky";
+"elteikthesis-1.2"="fq911ak06fd2h6brn2zsb20pkqgl4kb4";
+"elteikthesis.doc-1.2"="b5ja8g2vrf7gxpsfwshly6h3i0h0kw7d";
+"elteikthesis.source-1.2"="iyrmq8s585am0kb3ixgbi2g3n7aqxwr2";
+"emisa-2.2.0"="5ap5gagakjpx889lpiz1knpd3z8fcff3";
+"emisa.doc-2.2.0"="x1qp5j19svjw388qkmccwlh6by9r5a1r";
+"emisa.source-2.2.0"="i3zqwl03w9ff9caf1nafflv8a3gvbdjm";
+"erdc-1.1"="pmxparxijq91mlqb2z2ci0mk9as4r1nz";
+"erdc.doc-1.1"="a7f0jw1j2l0md2s4hdzv6gb1v867nk8n";
+"erdc.source-1.1"="5rf897hybsib6915bvyp0nai8j7bszgb";
+"estcpmm-0.4"="30s2wysjnicdxnfwliinz0s3xgjz65an";
+"estcpmm.doc-0.4"="kmrdd36g036c2rd86i9lc9n73rcfhwy7";
+"estcpmm.source-0.4"="7pn247fkf44679vcgbf62ishd70sgr8p";
+"etsvthor-1.0"="i9p7vf52g9pxrczw1sfvipk71xjbw2pa";
+"etsvthor.doc-1.0"="jp6bpcx2mwjzs07p16w0ncjfw1kb9kzd";
+"facture-belge-simple-sans-tva-2.1"="v9wdhpc6kjgc3w8dwnscbygspwl07s9l";
+"facture-belge-simple-sans-tva.doc-2.1"="ysil9y0b6ff47yjxhn60q1pbpz03bsm6";
+"fbithesis-1.2m"="1fdf0shkpyjfwikv3raz4a27wssg7j8q";
+"fbithesis.doc-1.2m"="wjh25w45lkz3dg1900qvpvn3r137dw8m";
+"fbithesis.source-1.2m"="qa99zpjzb2q48x55nq9cfsv7gf6ggyjb";
+"fcavtex-1.1"="kh7y3795flgarmi9izzzgq6g7z294jj4";
+"fcavtex.doc-1.1"="qr05ymcfxx8vwm572rd0pa6yq0fam2n2";
+"fcltxdoc-1.0"="gr5vxdra4lcsljhm591xs1b6z4ci2ddc";
+"fcltxdoc.doc-1.0"="mibli0mi846flzm0id9z0cr8x90rivgw";
+"fcltxdoc.source-1.0"="yn567l5sbbrrdbcmiqdpyq8kq5y1ni1v";
+"fei-4.6"="zfjscl3qvmawsfslhj0nkjqx4hwhvwij";
+"fei.doc-4.6"="zlql81212lv8rcsr04pzi80a72bg5bay";
+"fei.source-4.6"="rrq61x01046cd9824y9hnbllqjhf1761";
+"ftc-notebook-1.1"="rmxxga464shdkh4v9c4kk1ihxy9vsl49";
+"ftc-notebook.doc-1.1"="l3a2q406sj7pvfhgw2zsxfyk5qyq0dsp";
+"gaceta-1.06"="gkwy4pkpzmykxm2rqldpjfh5q5m87ca1";
+"gaceta.doc-1.06"="zbxs7kz33kbvx4g5zykh33zn2g9z2cp1";
+"gammas-1.0"="m0ncmil16k09j9k3rq1fl1rfsxr7fmcj";
+"gammas.doc-1.0"="5v48c5pxafvidhkkz0xmfbbgzkavhlrw";
+"gatech-thesis-1.8"="q85fv2ikl3ikw9ja5j7sgygyi6v1x2kp";
+"gatech-thesis.doc-1.8"="q97libi0drg6plfjps8p9fd7fxbxg34n";
+"gradstudentresume-2019"="bmmfv6i9zhk617r9a59yz4m0g14s1q1b";
+"gradstudentresume.doc-2019"="xw0w9hwnyhb6xszynfvz489c9j0vyxsk";
+"grant-0.0.3"="a9bjc5a9i24mymq11dsw78gck3pdb16n";
+"grant.doc-0.0.3"="39g10k0rwfx678fnc8vx6j77wvn8f5c0";
+"grant.source-0.0.3"="4cfhdbqmffiypcs88iij2fxc5lmylxfk";
+"gsemthesis-0.9.4"="jhw29zl7f93xh641ws6ydqh62cv1kbbj";
+"gsemthesis.doc-0.9.4"="3nw8q8pxsfdbd4gmly0bg8ig15ccpy1q";
+"gsemthesis.source-0.9.4"="w1k5h97pgahsar4r1sbg6i2dj4npr6y0";
+"gzt-0.98"="1ji92870bm9rkc0llvmhyqw8brxb9kwl";
+"gzt.doc-0.98"="zip7fdsd96fjgmsyaj43b4zd5i5vw331";
+"gzt.source-0.98"="0jm3vmpy2z28fzk1q5cnw4d3ga13czj8";
+"h2020proposal-1.0"="sdm13gcvhga8q32ai16mnz2rfsnwb7bz";
+"h2020proposal.doc-1.0"="8nsjvgzyw9137ncq9v48dhlncb10snyn";
+"hagenberg-thesis-2019"="173nwqf3ckrpf7l9clx68sbjv2iamqff";
+"hagenberg-thesis.doc-2019"="8q67qw9cj4lrbxs585ymw56q029s5apn";
+"har2nat-1.0"="yn5d36r1lnx5xhrk46laka9crikcd5yl";
+"har2nat.doc-1.0"="8gh35w4a8j117z6dzy9p7mmbxsh789zf";
+"hecthese-1.3.2"="w882kxwpk80lrxl0bnqkp7mz8zdh47bh";
+"hecthese.doc-1.3.2"="fsrvd79g6588zisibmjzb137b4b11xyg";
+"hecthese.source-1.3.2"="d36nipvwmff2napcy14lgciw50061aw0";
+"hithesis-2.0.6"="phgkz2xkzy89q1gdw77qada1ngv012ff";
+"hithesis.doc-2.0.6"="sixfmbvs731n6w0s6hljj82w8hxd72gi";
+"hithesis.source-2.0.6"="s6xrir5z48h3zk8g4s8ydfp6hrkdk3dk";
+"hobete-2019"="k2agw9n4s8imsfi399r1n3v80sdxc41s";
+"hobete.doc-2019"="n60jvwc9ca27sxbyjam8jpp6b73ydc4g";
+"hu-berlin-bundle-1.0.3"="sds4ppapjar9lhgir5jnxfgzbddp5qf0";
+"hu-berlin-bundle.doc-1.0.3"="k7y6kwi7x063ja0wf14yysqxp4b5k94x";
+"hu-berlin-bundle.source-1.0.3"="2fb4mzmmgnf96yfl8slwc8gnvads736p";
+"hustthesis-1.4"="f7wr0296h2a3i6vahvrxysl7dr03sihs";
+"hustthesis.doc-1.4"="jknn279nybf7j78y4s99abb6znbkif9w";
+"hustthesis.source-1.4"="j828cim80xhwzjvn6drhy5qzr8sx87w2";
+"icsv-0.2"="3k7if2nxgb8zcyr7j29v3pxcqcyygg3k";
+"icsv.doc-0.2"="n714ksda39kc8zsqd1x7lnq3crg2w6fi";
+"icsv.source-0.2"="h08pzrpgwn88gz0d6kyrvnyjrra6f3vz";
+"ieeepes-4.0"="xljj9w5kx7mxhv9q6dgmn23wkijvjyqg";
+"ieeepes.doc-4.0"="n7wpz8946kfcd7a4dnx901y40vjbynxi";
+"ijmart-1.7"="nh0kksmb0z5k95s15bwxrbqxxnlq81l2";
+"ijmart.doc-1.7"="b88j6a249p8f9bp35a8p019l02s7lbfc";
+"ijmart.source-1.7"="y5wyzz6jr5lp0syjywlvdpb3s02cb7ks";
+"ijsra-1.1"="zj3pf34flbmdy98fzmshxdwhsm9gypb3";
+"ijsra.doc-1.1"="pmw844flk212zpdvcp026c63snmasbsf";
+"imac-2019"="w4g9hwgh6wvbhf5v8xfjcba6chqlp32z";
+"imac.doc-2019"="5qid3adma0486l4li4mmrgxl9lykzfz3";
+"imtekda-1.7"="rm2w2mx8mxzxjwgsw6gk0i64c2wb0yxa";
+"imtekda.doc-1.7"="m50cfbqcjz4ylda5myzz4idaqfv40nay";
+"imtekda.source-1.7"="wrx5ndn59k0rlz19iq8r4fzb4yly9hr2";
+"inkpaper-1.0"="iabllzkp6m8p3hvic3ajv5b3d6l511g9";
+"inkpaper.doc-1.0"="2hn02y78bnp1w2czqxfrsi2wrmpjn11w";
+"iodhbwm-1.1.1"="z0y1iynvgycqfjvkad8bwi18kdz115mc";
+"iodhbwm.doc-1.1.1"="7a1zjymxxi8mhmrmisnnrbdn240hgkpx";
+"iscram-1.1"="2pywqaa72mb216nmzl0w8cr74vf200cg";
+"iscram.doc-1.1"="0bd1j3dqs4kgsdaag5wkv7n9zci8qgda";
+"jacow-2.4"="z7ag0qa8hzbihrqij6dha0hm4nkp14vp";
+"jacow.doc-2.4"="c08j0j2lc0awnk2l9bcx022wcxzswala";
+"jmlr-1.24"="rnmwix9b0hfdm6zys2zbzy2rx1rfas98";
+"jmlr.doc-1.24"="b7aj9p4s5xzpv2jkih803zx713lp212g";
+"jmlr.source-1.24"="bncl60ks6g38pj64ig53q0s3kr3fpws9";
+"jnuexam-0.5"="0krgibnimk7nlpyd8q93fyg3gynnr93s";
+"jnuexam.doc-0.5"="cygds83h5nrspcrfhxf426isxjzvajl6";
+"jpsj-1.2.2"="xpasajag9rdz7nr5xk7k40g181lyc45x";
+"jpsj.doc-1.2.2"="994fxd5c7947y4s7g71i7031l72qj26b";
+"kdgdocs-1.0"="i0v1kfpnhn5210jj5vd2pyi9s9h1vhmr";
+"kdgdocs.doc-1.0"="0gfi3rfrsjaw25g7mxk7mai8mxy968m1";
+"kdgdocs.source-1.0"="dcafx36f7id055kdwvfsci6wq2ya50c8";
+"kluwer-2019"="y63q5nz0rhxlj362cbj5a4x3wm8imiri";
+"kluwer.doc-2019"="q85mq4id3y04wwq7f8is8lwh7gbzyxxn";
+"kluwer.source-2019"="q4k0f4qgzcxgnxblw1776dhk57i2zq6d";
+"ksp-thesis-1.0.2"="244sggimcsxbqkh6g9nndxvdvr6agqvv";
+"ksp-thesis.doc-1.0.2"="jngi4gfc4r6dkp6xggyg2s05zj38s1vz";
+"ku-template-0.02"="9b1vsd98aqc0b5s33r3z6ayj7ph0lcj3";
+"ku-template.doc-0.02"="067zqymqvljm9ras3a48glc0clfkfwkk";
+"langsci-2019"="2wdzpxs9p7xkj5ka0hafr9831cifyp1p";
+"langsci.doc-2019"="iafasc98czzn1pkk7q2w2iqrglxzflhc";
+"limecv-0.1.3"="kvjmm481ihl7idl0z0k2a7qd1f83b2bg";
+"limecv.doc-0.1.3"="9lxwfgxfgpnkmm5pmikrgsp9kf4vfhvh";
+"limecv.source-0.1.3"="5fcyq9gad359zzhpara50rclrqm62qzh";
+"lion-msc-0.28"="anbklyjjiy9ssy1iy7sggx6mfc1gak9q";
+"lion-msc.doc-0.28"="knq0z2pjiwchnwja3jnxbsmxhyyppmyn";
+"llncsconf-1.0.0"="w9rc61m4yijyf6mb4h78xhr0h7mf3p9g";
+"llncsconf.doc-1.0.0"="8p4z5cm4pp2f3iqmjnhqb8n2fcgx8gxz";
+"lni-1.6"="0g5d0rs62yhy5wrnhm8csxclh8wa3k5v";
+"lni.doc-1.6"="pp39jjz13zknhmm13nsb6y8di2giwhcp";
+"lni.source-1.6"="k8yq69zrfxidcqycqh6id2s7xz07ggrj";
+"lps-0.7"="njaym8455i99rr0vplxlpn95cbp8sv9h";
+"lps.doc-0.7"="9qg688yrg4lfkb284shpgan08vfi5sxn";
+"lps.source-0.7"="d2jid2g08c51lpixvbqp13hkvmbhw2f2";
+"matc3-1.0.1"="1r8svk9xpxv518j58xxrkfpy3lzh3gs6";
+"matc3.doc-1.0.1"="9kwpm6ah02zhwgd5gfhqkk0csba5h401";
+"matc3.source-1.0.1"="cnlk2ffrjczw23mssgwv7i63dg7w3j19";
+"matc3mem-1.1"="1w8m977ngbqivnhlaqsf6bvn7yngg3hg";
+"matc3mem.doc-1.1"="y6b8v00dhz5xg56kz04jql3rdrl0v5n1";
+"matc3mem.source-1.1"="3n9x1jfgrc8jigj8w2bmngk7pxqz9v29";
+"mcmthesis-6.2.2"="ff8c64hwmm0lrajz4lskk1a94bkgigf3";
+"mcmthesis.doc-6.2.2"="7qr2gimafh1li0kmvx2fa8ddbw1b28a1";
+"mcmthesis.source-6.2.2"="xsadfnmz57hhr517clv6bg8x9mnzsj58";
+"mentis-1.5"="nfpcmyxlg0gadqj33jnxji3nvs5fni9l";
+"mentis.doc-1.5"="vnj4lk1vxc0c0710jb21x3vskppk9c86";
+"mentis.source-1.5"="x8djid957v6324m74fn1m8l9hcp7mr1g";
+"mlacls-0.6"="ch1gxkp1g3v8ji6av9k3wn6ldfx084dj";
+"mlacls.doc-0.6"="sah830gprmh0qlbd1ia3ldg971sy103j";
+"mlacls.source-0.6"="5fl7qdqhsrm9h6dy6hiws5pnjmhi9qfp";
+"mnras-3.0"="ib7iykfq2gzv7iljfpqnncwdha05sv36";
+"mnras.doc-3.0"="jns5g8cd4c28jqy106ard1pca1pl0p4k";
+"modeles-factures-belges-assocs-1.0.1"="yildlnjq5szbsvis65ph02bvvzydgldv";
+"modeles-factures-belges-assocs.doc-1.0.1"="ni0ac0babnajp9dlxqgdvazmrx8aixaa";
+"msu-thesis-2.8"="0d0607nv2nq2s2cw64pmkmkhkmnglv8k";
+"msu-thesis.doc-2.8"="lq84fa70s7gpvnllfwrn4w9cgxmgzcpw";
+"mucproc-1.02"="d1xzqp0nvkk4zdf1zcrhngvlc0q412gp";
+"mucproc.doc-1.02"="zpky6iahkhynyv72lg94ankg9wn7gwd7";
+"mucproc.source-1.02"="pxysp457kvf603nz6lwaj55cmlc41n0m";
+"mugsthesis-2019"="cfkw21f3xy6pchbq7ryw2df8bdssilc5";
+"mugsthesis.doc-2019"="xqm757zbzxi9ag50dd22274bk5n1897h";
+"mugsthesis.source-2019"="6awfcfhsqggxvxxxmfbi77pa6bwchg79";
+"musuos-1.1d"="v0bx55bnw5lcpq1w0zxfkf1hlxahxj0x";
+"musuos.doc-1.1d"="iqviyy26inh9bw04maby457bvxip69xw";
+"musuos.source-1.1d"="rx3zcmp2mw88f3jxa0igajz4dzvx135m";
+"muthesis-2019"="w6llbyp3d615mpjazf9i746acl0hqvpb";
+"muthesis.doc-2019"="776dszqb0k9nffhnln310dg20n4z0dlr";
+"mynsfc-1.01"="j3jb9xyv9javnbk9r6fb11ygnd9ygpfx";
+"mynsfc.doc-1.01"="5zlf94gdmkxg37zdwq04w4pzfgransf1";
+"mynsfc.source-1.01"="zzmxbw2xfk91lv6isc6raqnqmvk4da6x";
+"nature-1.0"="147ghy9qhv5w2p0rh84wrpdgk5cwrd1y";
+"nature.doc-1.0"="lvavrpl6wrkxpsidgbzil8g117kkwdf6";
+"navydocs-1.1"="kn549s2m1h0i9ir8q01il9ww3yw05wx0";
+"navydocs.doc-1.1"="72l419vyq79lrhlflxnivg66b9vkbx5m";
+"navydocs.source-1.1"="xcwc5yyvhjhrdjrj9w9prp72mpqlvq3r";
+"nddiss-3.2017.2"="gsqqnmrgc27i78c6s4y1zy7i5yi66yix";
+"nddiss.doc-3.2017.2"="p28y66qyk1zkhmp6f11rkidfjmvpnlgx";
+"nddiss.source-3.2017.2"="7kbka2v5nsdg4wfrv69zsx92rrlax0zw";
+"ndsu-thesis-2019"="l4dsamss5kpl272pbmj720jc6zlb4lij";
+"ndsu-thesis.doc-2019"="6hbh7hl0nwsijq545vym7il5wvrzlbr1";
+"nih-2019"="cv6rcwrnq8rpwmmxva32233isckys2md";
+"nih.doc-2019"="n3j1f7kbygyh0ljz1796b0ywkifvykbh";
+"nihbiosketch-2019"="da0kk90h0paw6wp0x43cqcfm18bh9ajz";
+"nihbiosketch.doc-2019"="l6nx5x7lb8sqfbmac215xbrn36ifx6fc";
+"nostarch-1.3"="5ir7wwqflr7ac9wdz3qq50232lrxk79r";
+"nostarch.doc-1.3"="l4v9sg6lhii6m7z83ap9fghjkzhc1d6k";
+"nostarch.source-1.3"="sn4i3aqmh4r4yfj1dq5ipqyy4424kns6";
+"novel-1.52"="pg1ib5l593diyyb06v6wwvhqny32qm7z";
+"novel.doc-1.52"="1dz1pcpd89kkcbzdqacyk8ck0ik75qra";
+"nrc-2.01a"="pwgmkqwj9nh6c5ibhgz0gx4fha8y4mfa";
+"nrc.doc-2.01a"="y8ga6db77g42jblz5hpvk3vhcsj6zczs";
+"nrc.source-2.01a"="14br9wclpq3sfj0gcb8q3ws6nz3ws7jw";
+"nwejm-0.98f"="58q31l8g24gw092x9njl6mbpqfbv461f";
+"nwejm.doc-0.98f"="i7w6pfk5hxjmli2s9gbpd3dfsj71ncmk";
+"nwejm.source-0.98f"="n6x1i5y1swnm1vblxs3k3cc7d023s7n0";
+"onrannual-1.1"="zfqaz0fi36py1y5izbphl677ny5mcrl6";
+"onrannual.doc-1.1"="hxdcfp7y4lcpc2j1d25sx3p0nga1435h";
+"opteng-1.0"="fnx8hnwcpahlkw6h2q1hbnkwa3kfr477";
+"opteng.doc-1.0"="24dy7xc4wlz223svmhsv4k05bw6b12af";
+"philosophersimprint-1.4"="cdw4cms8w2z5lvj17ayb1yg3075qfpik";
+"philosophersimprint.doc-1.4"="j5ri2kgr97c4z3mzf5kilcwjlqliibjp";
+"philosophersimprint.source-1.4"="i6h47warmh5zlaswpq62mvbc6nkl3hij";
+"pittetd-1.618"="1jjhfr2c6ycp2c6r3kg0y4fziq3vjpv5";
+"pittetd.doc-1.618"="9394r72nr766i8mnb24s4qr4jp15jci4";
+"pittetd.source-1.618"="s0apvlg01wkfzhzp5cgy3jwxx9z14469";
+"pkuthss-1.8.0"="kkhdsrrj8h227xbg7mifxgc63628c5rd";
+"pkuthss.doc-1.8.0"="1pp01q7aakicnjd2187vn2z52wp433im";
+"powerdot-FUBerlin-0.01"="r89y2lmmzzyln4jx6kzdn4rb84jz7w15";
+"powerdot-FUBerlin.doc-0.01"="gy9ianzkp3a81sga5i1xp4kzsnyppzb2";
+"powerdot-tuliplab-1.0.0"="x7ygn34dsmvncmaps2skxfqdakqkp4rz";
+"powerdot-tuliplab.doc-1.0.0"="s41i6f75xbl8wmnsblyrpvdbf1awbanr";
+"pracjourn-0.4n"="iv8vll5az565ki1vcjpacrcb369z2g4c";
+"pracjourn.doc-0.4n"="kvvb2vn1z5phqxy9jiwgj9rgc1fpabhj";
+"pracjourn.source-0.4n"="vl8rarvx6whc3ph6pw892ldwiwzvc78x";
+"procIAGssymp-2019"="ni8xr0fdn9skkadcn1ipadbxs388vl3w";
+"procIAGssymp.doc-2019"="q662hfdf9br5pdya5676ddxqg8dnaw0r";
+"proposal-2019"="3nnzzlv4rcr3v671fipw679yq7ndbw9j";
+"proposal.doc-2019"="hx9nsm0fidsia9v6iki5l4cb500kjm2k";
+"proposal.source-2019"="3md53b23cqzdhjyzk2hw4gsjr5flngfw";
+"prtec-1.06"="b6kj4hm66hp9hgpvjq9mpd3a0f1a53qm";
+"prtec.doc-1.06"="g166iaq7ifcqa9qg4f3010vzv0j06j6f";
+"ptptex-0.91"="w61zrgirw5as67kcbi3yrx5pzpw7dj36";
+"ptptex.doc-0.91"="h0fi9wq2asps1aiwkvrwj93dkzzhclsy";
+"quantumarticle-5.0"="gxfjl7qlir4m4rmqwrxmm1jksgh63crf";
+"quantumarticle.doc-5.0"="vzv5j94a6zvbyvbsbcdxpzialv29313j";
+"resphilosophica-1.35"="vaxdd2gghalbbbikxsyw92fhnx3wn8d9";
+"resphilosophica.doc-1.35"="xwkcpdm9bn3vhfazhbx7fxibz5shrild";
+"resphilosophica.source-1.35"="7wysrjs5ynmpadf39vkj2asysjvchqmz";
+"resumecls-0.3.2"="niqlfjipn9h1dchnx63w89i097kf58il";
+"resumecls.doc-0.3.2"="7jcdgicys21bhfhyn1aflyvry0yy7sxk";
+"resumecls.source-0.3.2"="wpgzwjw6nmg6dq02jdxq12fx7hnmff29";
+"revtex-4.2c"="vpwxc15syh9wqslla3ymij8nxhqh2yrw";
+"revtex.doc-4.2c"="7b6n5lbrw9yl54dyfms6r6j88sg6qarf";
+"revtex.source-4.2c"="zivfnbpbl328psakbycy4k4g4mlhrgkp";
+"revtex4-4.0"="sa5r7jsw4kqqwzzxalj04wcflcawl2xs";
+"revtex4.doc-4.0"="3bki1hg7jr60q7x07w0i8d0a6zkp9qnr";
+"revtex4.source-4.0"="0pq58vkvfc191123k78zaiyy3mxk1m1h";
+"rutitlepage-2.3"="66nf7llsknm6xx2m7yi8hhqp31x3l5ls";
+"rutitlepage.doc-2.3"="c01773xskk6bzvkf5yyjhzvb4b0s2vsd";
+"rutitlepage.source-2.3"="f5cb6hkdi9zw91gil1hph1ksc14l6nma";
+"ryersonsgsthesis-1.0.3"="r85jm6nwl0b859778cxgpl7sycd6b7kj";
+"ryersonsgsthesis.doc-1.0.3"="h7cq92kjyqpsbbaqc25rnmw861xrb6rl";
+"ryethesis-1.36"="vvsqlw02q3ivwlzw3rp0x6vhfdqvfhda";
+"ryethesis.doc-1.36"="xpba1bqp48y0q99kn8w504pzj3176nf7";
+"ryethesis.source-1.36"="4dddvz7f28pbzyymssgsilsyig9rzp45";
+"sageep-1.0"="3jzsiq3wj7wwhlhzyqmi78lv6vin2kk8";
+"sageep.doc-1.0"="px3f2qx88xijb5jyd75v3sxkss671ppa";
+"sageep.source-1.0"="j5qj2vr800891ccgbvgdqbnfa0mxj4n3";
+"sapthesis-4.1"="63dcp1gxf0dhdrlzljj5267j83q97pd5";
+"sapthesis.doc-4.1"="mra57v29ah4bjcmngl3h1vyg5c2z9imd";
+"schule-0.8.1"="0bskmm375d4kvnpnl7askk78ni06k4ds";
+"schule.doc-0.8.1"="b3kmlg0khjb1239nb6myl1w5kxpp9175";
+"scientific-thesis-cover-4.0.2"="g3c3y6l5nb34vmla06bry9nipwjwcxcs";
+"scientific-thesis-cover.doc-4.0.2"="zzlsbapfhvlfgry78cc63a1l9d6gf66c";
+"scientific-thesis-cover.source-4.0.2"="29sksgy5611i9gwmckxmyypkkk1r0vpv";
+"scrjrnl-0.1"="q5rd79j19g0jgafhxj3wc62x6y16378w";
+"scrjrnl.doc-0.1"="s45malh0680ffbg9x0gwfah9c930036w";
+"scrjrnl.source-0.1"="kif8v92z8sn21h0ddw05rm16q7dbz5iq";
+"sduthesis-1.2.1"="dj4596idsn0am4yjhvknm7n70hzdyzqi";
+"sduthesis.doc-1.2.1"="xmznlf85vkps6cwk7sfc4g5arkcs6iaj";
+"sduthesis.source-1.2.1"="bz1cx41qazpy7bfpcgb5xnhk4wzhkcif";
+"seuthesis-2.1.2"="f8djm6sdhwky5kk6vmfrc647rvl3vd70";
+"seuthesis.doc-2.1.2"="kbn5zb8qx89sp8m2q99caf1qn8v29hd3";
+"seuthesis.source-2.1.2"="8r9akmgz64d70bf1mdpq856xw6w9h8jn";
+"seuthesix-1.0.1"="mh346k6d64d1bhhznzsrww66sppysbrh";
+"seuthesix.doc-1.0.1"="a2mghdhdxd7l2rsd5midfibcwsrn7n4z";
+"seuthesix.source-1.0.1"="skmm8a9h0jvgdwn0bsx9fnvwmyf94mz3";
+"soton-0.1"="25iyg10d05ahygjbhfc6g6ydiij3isw9";
+"soton.doc-0.1"="5irwl7khvqcx0siw7wcasicpxzj94cgb";
+"sphdthesis-1.0"="i5i9nf7bky3095bhxvmmvxwca4mf7ai7";
+"sphdthesis.doc-1.0"="nx5kpi9s03jwv5g8adqrn5l55lyqc9hd";
+"spie-3.25"="fj1biarxwagah3b4l5r9p498qwd70yar";
+"spie.doc-3.25"="dgp3in09igj011041akydwgnsw10m927";
+"sr-vorl-1.1"="aspxka23zd8rlwxlvjvw6wlwkg38rj66";
+"sr-vorl.doc-1.1"="y9m89lwhx9rwd1k0w2bgwh5ip64awx41";
+"sr-vorl.source-1.1"="5zsgq5m3fkjip7qr4zkx51j54j4q5qpq";
+"srdp-mathematik-1.3"="qpp7c0xk0g21fq23h6v76558grpc67br";
+"srdp-mathematik.doc-1.3"="b6wy2yzsl6b415mxkw5bj6i3gnf9g2iq";
+"stellenbosch-11a"="s0wddhmfp77y6v54qq4jsmqidjq3bkqh";
+"stellenbosch.doc-11a"="97wbyj0mg7phb66ngkf82ziiy8v624b1";
+"stellenbosch.source-11a"="0raanzzc5qjay7gz94himx8np0437pgb";
+"suftesi-2.9.1"="cap1rpj53n6klf16mc445n4k3r5jj703";
+"suftesi.doc-2.9.1"="jhwkziz34371zgr9sssji656hfr99hyz";
+"suftesi.source-2.9.1"="4jisrrzysq8gm1cr4dsinf6k5f49gwp7";
+"sugconf-2019"="9bgrgs1gqxlj5czai1l1m45z3z4xbr6d";
+"sugconf.doc-2019"="siyxf3blr7z953fm4xy61z4jfx589bcb";
+"tabriz-thesis-1.1"="psrla5z8x9icyxgdqnxpiv2vjnbq4rsq";
+"tabriz-thesis.doc-1.1"="h5p0nj2wp01pdmjfwbcdp5fnwhvlrrrp";
+"technion-thesis-template-1.0"="shaxw3mp0bjmq2lg8a82bs1ddb48dpfk";
+"technion-thesis-template.doc-1.0"="8kkfqc0f3pkn9sm84zw2iqi133nr2sy8";
+"texilikechaps-1.0a"="v3x5w1a3lblqc3pks3yzychj64rvr67l";
+"texilikecover-0.1"="fn8g82q7mvdqaa3i14nsc95wjlp0ziyl";
+"thesis-ekf-3.1"="bbgsv5kal6shxd9sm7pjsgb9gz9syqhx";
+"thesis-ekf.doc-3.1"="b7459cmxvc392xj2mj27bxr8gb4622i2";
+"thesis-ekf.source-3.1"="cilr7qsq9lsv2jhvkzds1276cmc6nsa2";
+"thesis-gwu-1.6.1"="s6xwfmvvc6i8w9limmknqxp44l0dk7px";
+"thesis-gwu.doc-1.6.1"="s4hsb2vq46fdwlxsxn2i4dfcblp2jd02";
+"thesis-qom-0.42"="rnhdvsrpsgjbwih0ia9r1h4kyqdrhg6x";
+"thesis-qom.doc-0.42"="gipmj1b9xh8y2zj52l7r28j0l3g8rnzj";
+"thesis-titlepage-fhac-0.1"="dmyydjxrj16hf8gh7qyp564d195kzmwp";
+"thesis-titlepage-fhac.doc-0.1"="g4jw0jyl09vq4hglb14jx355v9kli1bx";
+"thesis-titlepage-fhac.source-0.1"="zp492p2j40bpphwr3zhjcqiwnj18yk56";
+"thuaslogos-1.2"="jr4nwbd21jwglz99v1aqplzv2jbpn10v";
+"thuaslogos.doc-1.2"="i352h1s47cdbj957kz6c3dj3kwb7rj11";
+"thucoursework-2.5"="0dfnpgz9k0rnfcxd84978j40q9ybqip3";
+"thucoursework.doc-2.5"="2g1mix0k6jas8pwg3gayc3rwhp3bg1bz";
+"thucoursework.source-2.5"="g1503caaz9sfmxdvfkd1ia4hhlalcz61";
+"thuthesis-5.5.2"="1ddg223hv0lahjxfqp4xyam3dqiisrc1";
+"thuthesis.doc-5.5.2"="69b7zd315rns793kcblsdkmn3x3famc2";
+"thuthesis.source-5.5.2"="p4d8lhf6ajacbvqws7pjjwhvk4n9hgnr";
+"timbreicmc-2.0"="8mnap2xvfny35sb0ziq5xhlckwcmgb3w";
+"timbreicmc.doc-2.0"="b649dhjapj0ani2as7783bphamp0hwsq";
+"timbreicmc.source-2.0"="8s3vn2id27cl1164brvkrxg96ggvgb3v";
+"tlc-article-1.0.17"="qh69ly6l3pnz0a6a5c70b5jhzphc2gk5";
+"tlc-article.doc-1.0.17"="aanq53h9in5r73qz4r1g8p5d9irqz2pw";
+"topletter-0.3.0"="01cmbaxzr5fsmwsz8y5l9xfdi43219zg";
+"topletter.doc-0.3.0"="ygpvdw145lnyllcwh8yv4pcc0ssydpwm";
+"topletter.source-0.3.0"="f4lvw616czlsqw7ic5mlwq583097j7ls";
+"toptesi-6.3.06"="dmvzw2y0ds92dli8sb5fwaldd0jh63c3";
+"toptesi.doc-6.3.06"="58d2smp53hc7kqymv2y206s10b14d9qb";
+"toptesi.source-6.3.06"="4030gxyzknihz1xy80j14dykczdz8qh5";
+"tuda-ci-1.11"="lnpnkdv6kpd31vga9358vfz1dla4923n";
+"tuda-ci.doc-1.11"="3gialzi9j38gm4h0cc9iw6z79w4x46ys";
+"tudscr-2.06d"="mzv2v046cg77wk4aqip3sp24cynsw86h";
+"tudscr.doc-2.06d"="vlwzb9lbpsjf43433lcfx38pzxpgpp8b";
+"tudscr.source-2.06d"="wwy27qw6b5a2hizca89a873i99dgaacz";
+"tugboat-2.21"="5kany9pm9v5mx260qhydlnvq3qvcixlq";
+"tugboat.doc-2.21"="9qidcwzj4n5bsiyla1rrgi9gvajmdmjc";
+"tugboat.source-2.21"="0lais4g13s4v33gvwy9qjkv56dp193z0";
+"tugboat-plain-1.25"="hdp8r703mch4096qy67y5zqjma848hh1";
+"tugboat-plain.doc-1.25"="36nn5cxa1rms40af14c7bbxrkz8y7q40";
+"tui-1.9"="s71xp2jz0v4wlvgvx9f9r62i2clj8grw";
+"tui.doc-1.9"="ddway3iy2gx447ypp2cd4vlvhjvnlh0l";
+"turabian-0.1.0"="mkjjkq2fpg1lipzwqn7k0p77j2i3znm0";
+"turabian.doc-0.1.0"="b1pxcnzj5k4l9r571yi924kykw4wk7vd";
+"uaclasses-2019"="d8zwjxcvgb1rnfv239xwf1qblqpzk32c";
+"uaclasses.doc-2019"="mv9hypafmsgnh5pxl2n0929ib8zgrda0";
+"uaclasses.source-2019"="mzvrcc6gvds2bw1a7cdkjd5n9dm3gczq";
+"uafthesis-12.12"="8qdm4v22s3r9g8q16sjnw3bzx1j9w16a";
+"uafthesis.doc-12.12"="d1nns5qzwkrywy9cghr19i70bp16fvw2";
+"uantwerpendocs-2.4"="l61xisx3imhck8sbqykhpjd7py573gaz";
+"uantwerpendocs.doc-2.4"="hk8a9gyw42wfp0300ya1zd7p69ycww4c";
+"uantwerpendocs.source-2.4"="pb13x65657039qbivjfpyni164fz2gbj";
+"ucalgmthesis-2019"="z8s5fzsbfbahahqgyj64g3p21xcxl3sa";
+"ucalgmthesis.doc-2019"="dkbfmm73kgrp5yi7dgy6ys84h58dj921";
+"ucbthesis-3.6"="3wa2xk8yvyh5hwy0d41p9fdrxvy8y2iw";
+"ucbthesis.doc-3.6"="lr9w29xp965yydg4mk93rpq4d3808ksa";
+"ucdavisthesis-1.3"="naibrb9h1lg8y22j26wygm9zxcv3rfc2";
+"ucdavisthesis.doc-1.3"="0mgnn8l7wwi7mhaqanfsrkjwydm8m2gz";
+"ucdavisthesis.source-1.3"="nkag4al3xvv8xnns5gspsq1ix6bii31p";
+"ucsmonograph-1.2.1"="hbsbmdmba2hzr36ganjyigg16cy7dd1p";
+"ucsmonograph.doc-1.2.1"="fip7b5zrciifq89zw9ivvzwfhzjjv1dm";
+"ucsmonograph.source-1.2.1"="k7cvjvv3yrcl10fc0csiqd8s7nrhh1k1";
+"ucthesis-3.2"="kbq1nnk6d3vk378kk5wcwpzh93y8xv08";
+"ucthesis.doc-3.2"="515r7ha1aq9f0zxlgiz2zv2aph460aad";
+"uestcthesis-1.1.0"="h0cz0i3vnalcc3i77qhb941yymg6bl2q";
+"uestcthesis.doc-1.1.0"="7w5wa8z24nrcsd9gfba6ixwq5wi4jp23";
+"uhhassignment-1.0"="0dv6x7f2zzvgqd104aak9j360pqwfy1r";
+"uhhassignment.doc-1.0"="c0impmampnwvrisg300yrmc4zh891r15";
+"uhhassignment.source-1.0"="59yahjzr20xn4j3lnjxf17dwr4vsyy1m";
+"uiucredborder-1.00"="qmpx3zbgnl6224cyigggmsp8a2vndjxv";
+"uiucredborder.doc-1.00"="vc4l9nvnvlfsn44vr48s4irjwaifg8wr";
+"uiucredborder.source-1.00"="l9b35lm36c8gnl1jd9mpxqk07j22b8d3";
+"uiucthesis-2.25"="62smailyn66fyhpdgrmjx0p9m0j0n12y";
+"uiucthesis.doc-2.25"="ygqpzgk5jslsnqa813k0l2nvw2j8gnwq";
+"uiucthesis.source-2.25"="lkq6bvdvm6ya5q5wp263zqkk7y4ig57a";
+"ulthese-5.2"="rms2lyh9h1pb96v75xhh2v47md2z8wsa";
+"ulthese.doc-5.2"="fd9iw7jwfgj8y5yr4rxc5l5yw61g2x87";
+"ulthese.source-5.2"="6mhfbvxxmqpv5v57qxlc5acz9m2shsmy";
+"umbclegislation-2016-6-8"="wjkna9qn6g0w0axsgpa80vc8d8jsl94y";
+"umbclegislation.doc-2016-6-8"="44hd3iax5vblcr03xxgxccmbrf4y5sma";
+"umich-thesis-1.20"="mgwbc9lzd25w17fm9j2098r6y0q1k688";
+"umich-thesis.doc-1.20"="726jjvvq6ps0wxlrh74wnj9gjlqf2d8f";
+"umthesis-0.2"="xsgr2p3cw7q2gv7b2sr6xvcp186cvsy1";
+"umthesis.doc-0.2"="p64jg8jns4xp4y400hwbbbzz2wbpsmas";
+"unam-thesis-0.5"="zd62jxiy95m9p7f5g4lkw4ccdjlknfb3";
+"unam-thesis.doc-0.5"="c6s27rsns1yqhdw1kp03q1z5vhp2wq27";
+"unamth-template.doc-2.0"="jn6hykpgd53yn4px4rp9yk0sp688dqi8";
+"unamthesis-2.1"="jvpbqfbpvrzbvs67r0phdrkrvxxjjcyz";
+"unamthesis.doc-2.1"="jfqnn8prn8x9p68k70b64zd1759v92ak";
+"unifith-1.2"="22rmcvcs8frdj5zdkram69ws513blydf";
+"unifith.doc-1.2"="4gsy6kk4w91df3pkz0wxqybr13jgbvj3";
+"unitn-bimrep-2019"="s3x065jkvzazjx24an10jbwj47903gjl";
+"unitn-bimrep.doc-2019"="k2iakhx4fkiz9ckglr1pvnrqday0sbnp";
+"univie-ling-1.9"="ixg3w4ah5cy424cynzkf355xsx03gb6d";
+"univie-ling.doc-1.9"="4n02b4j80blcvswm9xh5fmhqm9gfvaxp";
+"unizgklasa-1.0"="pz93dd2qidcvdsa78zgl73s07zjgshs4";
+"unizgklasa.doc-1.0"="inphl2x3czqw7mw17if9ahl0jbin3dd7";
+"unswcover-1.0"="5bqxws27nxyhgrlc6c9k9v5pm8jvdhzc";
+"unswcover.doc-1.0"="9c32r1x4094k8saz0w3bcbca28vgl3zj";
+"uothesis-2.5.6"="zbf8swc2haqsdr7sibm4lz9sqyhbfaqs";
+"uothesis.doc-2.5.6"="fa35vj968ywcnj2vcbszrajxi92sh4il";
+"uothesis.source-2.5.6"="ppxr7m777ymzzcl34i9qsil0z859wdxl";
+"uowthesis-1.0a"="g346f0s4phiqykd0n27hgy7f3vh9vp6l";
+"uowthesis.doc-1.0a"="h9g1mwp55hj3jsqmn0fmpjm95g4139rn";
+"uowthesistitlepage-3.0.1"="27sk8zllk19qflnr5am2r0cjrx4n89r2";
+"uowthesistitlepage.doc-3.0.1"="wyz7yz7j3jp1v2z5vildp8lb0li8786p";
+"urcls-2.1"="lkzmasn52h7mfm2xcfxv9gqh64ic9gdd";
+"urcls.doc-2.1"="rkrvkvh23jmn7qhyvgnmgzr7qhyckjy8";
+"uspatent-1.0"="lqv4zrqgwdhav1075ym1wp3cmy7r3ahw";
+"uspatent.doc-1.0"="0pa1qihx7vyc5lfkzr7bbakkphzmxp2p";
+"ut-thesis-2.1"="wz086qs6isll7wfa16yf154zqdbwz7zw";
+"ut-thesis.doc-2.1"="yqaa6h1yz1401ljb6wxnlz3rqmlr7fy0";
+"utexasthesis-1.0"="dyplgpcmg18gjkxvnqzgs99lf3aj6yc2";
+"utexasthesis.doc-1.0"="x4ngw5sm9zm5w46l5xap4cwnygb8qlha";
+"uwthesis-6.13"="1z7cpyrzcb9ga77d9a58jm9234w2zafy";
+"uwthesis.doc-6.13"="w30d568jxqqwdfbrpm8s1i7ylssiz3gc";
+"vancouver-2019"="2yp7l10k8yz7nr3nh9sj0ix8s9q79b5i";
+"vancouver.doc-2019"="gan4b1yrhwvqxnywn8rb6ckqvgv9m9m5";
+"wsemclassic-1.0.1"="8rl3dlv1f1vrklknkssldjnkgdwdcipd";
+"wsemclassic.doc-1.0.1"="n0wnf463jpcq8lbgk45h3924c4qm2r2z";
+"wsemclassic.source-1.0.1"="l4db45ax258zsrgvnw5gq0knflxx2nb5";
+"xduthesis-1.00"="qxvczdxndgw1n1hxzrr5scvnrgcl3q3f";
+"xduthesis.doc-1.00"="a58xwk250qq99pyz4rj2br4dqfzhhmxv";
+"xduthesis.source-1.00"="nw0j5z9vd83a3idksbq2338j8ir01fr6";
+"yathesis-0.99u"="fkb98sisz9gci364livd8m89by2dkjvy";
+"yathesis.doc-0.99u"="9k9f6wvrjl98m46jvhjwvfsfbnjl30y4";
+"yathesis.source-0.99u"="k31bciljvp4lqr3w5klcy3zssazbk3f3";
+"yazd-thesis-0.3"="583l53kxfnfb7s67fnh3n45lvqqww941";
+"yazd-thesis.doc-0.3"="9qw7byq6s1iv4kfq19xy3qm01l9vh0q6";
+"york-thesis-3.6"="rm9hh3b6cq902rr4crmv6c3z3ll2680b";
+"york-thesis.doc-3.6"="fa7z6lks54czsfd04igviykcij1h5lih";
+"york-thesis.source-3.6"="83mnkcdmb930lfh4130vcr82d5lp3f3h";
+"texworks.doc-2019"="gphjjma2ws68drzz6rmmj1hjb7bxc7ma";
+"arabxetex-1.2.1"="yfvy3m6rz45z7frgsw6cg8hk8kqdxfs4";
+"arabxetex.doc-1.2.1"="f8rpfy5hna1b6flvq6y2balxypjm6280";
+"arabxetex.source-1.2.1"="n7qncmdmzvkjxwn5d5nhwy3660ymvwx8";
+"awesomebox-0.6"="hlp6mahq6q1ysjgwlri6l4wszhm23na1";
+"awesomebox.doc-0.6"="cis8fkhcwr08nfv11g9l0iyzdlcmgrnd";
+"bidi-atbegshi-0.1"="qm4zcsccvzxixab9dalzvlwkniwckpjw";
+"bidi-atbegshi.doc-0.1"="lgp4qynjnz73qdhy543halrvx52gs2xj";
+"bidicontour-0.2"="dayiq858hr4ln8503y0xw8vqvfjjb91m";
+"bidicontour.doc-0.2"="mskxjm50p6r7zlfc40qbylycknyyr1x0";
+"bidipagegrid-0.2"="wipsldvij5v86c4hqw3afsxm2ydqsbwx";
+"bidipagegrid.doc-0.2"="57xmh27vfxi9ijr6rzv2d17vwk2pkdhb";
+"bidipresentation-0.3"="r3l1ac0kryn5mpx4029gwpaz2mjhj5ba";
+"bidipresentation.doc-0.3"="fvqx0rc6cn52lsi3adgllwp97mm5kr8y";
+"bidishadowtext-0.1"="fbx3svc7vx6f1kpvd4ws744gxp9gi6w6";
+"bidishadowtext.doc-0.1"="9amilyh1zz17z7x6hnhsvgvli0dp6mrf";
+"businesscard-qrcode-1.2"="9y9q6p5cnddbfdmjnyzrcy47hmaly538";
+"businesscard-qrcode.doc-1.2"="86l3021yvkp9sps2fiiv4073pzv8is33";
+"cqubeamer-1.0"="1ils8i2scbpka22n09ygmkwbx7d01sm2";
+"cqubeamer.doc-1.0"="ncgd5mcghdncvn1jdghrl263m9h1g85m";
+"fixlatvian-1a"="w8dpi3vx0iwfmq09h5gmqaia0a4nr94m";
+"fixlatvian.doc-1a"="nbnwr1icckqpsxdmmwa817a56zkfy17i";
+"fixlatvian.source-1a"="nvdlbmqyg7j8gx3cn48iqq5rmhcnncal";
+"font-change-xetex-2016.1"="qy2c5wdr14i5hhaxm764j3v6b4ycs6f1";
+"font-change-xetex.doc-2016.1"="ahkzrzvpc1syc7x3mm9jq02c1r75jqdr";
+"fontbook-0.2"="af0x6y47qcbfhzs3ngyazacn289x99y4";
+"fontbook.doc-0.2"="yvq7kxismw59wayzyv379hjd0kw048k2";
+"fontbook.source-0.2"="46vhgm8k7pxwxpb654fg3aj96555fanw";
+"fontwrap-2019"="ap8pwxj94larm8p1dngr1mhdavncplq6";
+"fontwrap.doc-2019"="p3m3czhwc1i2psby8dkm5zkpmzzkk91m";
+"interchar-0.2"="mphh4cmn49y1fr2klr1n5c2mjxryyjzm";
+"interchar.doc-0.2"="077lc5c3w5gq2cm2983fqlbhizjssgyy";
+"na-position-1.1"="gmc7vb0cp4c8qp4p99vpvpv0xxbgzhhq";
+"na-position.doc-1.1"="zwcm5ikxlaz2jla53nxbrfs3yva37m6g";
+"philokalia-1.2"="6lcrild0p9jahhgpc1xzz445hh2s1cxy";
+"philokalia.doc-1.2"="k1mn8vwlhrs9bwy87gx2zpn2viidlh0p";
+"philokalia.source-1.2"="80nd8ig65k3xjn92rv7n8g17qq0k4q7p";
+"ptext-1.1"="zy9vq5spxci68zhbfa947x5gmr90ckzf";
+"ptext.doc-1.1"="3dsbqbc9n66hhw8nk4l7rlcbfw5b9pvm";
+"quran-1.51"="70p2yq5ppljyivz8a47i6b50h4i23a40";
+"quran.doc-1.51"="rclicvr93ff0rx4bkixw83s0bg2bydfc";
+"quran-de-0.141"="m2mdwvd6j95q0dfy930kvvsx7m2n3znr";
+"quran-de.doc-0.141"="pdsnrima3mrs3yrra2cm7v4gdiwj3gds";
+"realscripts-0.3d"="h3nl45fx6790wmrfqgnxsy0v46i7gfmy";
+"realscripts.doc-0.3d"="4mm7a354ll0wca7q9nkazx29qbdah3ca";
+"realscripts.source-0.3d"="ngb2fqcmc4j1ijax0qrrdpf0g4587qb5";
+"simple-resume-cv-2019"="vjigpisca1m0lvq3rdc8148lc2in4zmh";
+"simple-resume-cv.doc-2019"="aaxl68aklgpv8996xzd0jgc5gw3859ar";
+"simple-thesis-dissertation-2019"="p1bspb2n9dc7zk0myww59v973rjshfy0";
+"simple-thesis-dissertation.doc-2019"="hrb22ycqxdy8ndw4x6ifl6jifswb7mgw";
+"tetragonos-1"="6v6w3fcjmyb0pq0iia29xcx3wsnpm47k";
+"tetragonos.doc-1"="w3b4g7k13lljq69vg11cakx54m0813r3";
+"ucharclasses-2.3.0"="ss0jlhd052vay3g42nys4mj4mcf5iqgn";
+"ucharclasses.doc-2.3.0"="v76523pb2c60ppcz26pywk8jzipshr9x";
+"unicode-bidi-0.01"="mix51h9rwgjic1g32jx0mv8hh574yn69";
+"unicode-bidi.doc-0.01"="8x4zk0spvhmq3sc8ygvidk03gfzm2875";
+"unisugar-0.92"="wfr974a1y4wzlbw0wwzfr6r0yp9nyasl";
+"unisugar.doc-0.92"="hcnqifbhpj44cwbr8sh4c71phg4i5327";
+"xebaposter-2.51"="glxmnnhjpy8wjab9avncl4v0wmdf0pv7";
+"xebaposter.doc-2.51"="sbpqsj7cqhhhs9gq8jia92hxrdgnhzkk";
+"xechangebar-1.0"="1f2zszj2l5mkqv5zs5bs8g5w4c8rirpv";
+"xechangebar.doc-1.0"="xbirklnxaljhxxghr1prqq7zb9l0mgzm";
+"xecjk-3.7.4"="c8m9j43ij2zqigs6h2r17hbmzgiglfcl";
+"xecjk.doc-3.7.4"="m47k3b09wr6gd5im7qgx4giwmq55ikbc";
+"xecjk.source-3.7.4"="naazw07wpw01ilsmby3zww0i5ralk8y7";
+"xecolor-0.1"="pdybpn00rxsb5ipxx377a77xnmmf5i43";
+"xecolor.doc-0.1"="vl2lpda4kkr2q8gzj6ii2rjfccx6qvl0";
+"xecyr-1.2"="8zv0hcgk6f94mjb7h0vkvpz0yij6p257";
+"xecyr.doc-1.2"="27wisfr0l21bc6rb1sd2yrk9pa1c78z5";
+"xeindex-0.3"="85d9z28381jg0jbkwrjrqlcifp23qsxh";
+"xeindex.doc-0.3"="7q7gxhy5zx11dmwvlfivg91v0gbp8pgw";
+"xesearch-0.2"="avch7ld8isxphjd1qcjcwq8hqqkvcz1a";
+"xesearch.doc-0.2"="p2j9jg8h9xbad53h4d10nqnvv9lqbk2z";
+"xespotcolor-2.0a"="vsdrrcvm377salld5myd4aknid3phcvl";
+"xespotcolor.doc-2.0a"="mzibfcv18iwwwd71id0qajhk55kvnn39";
+"xespotcolor.source-2.0a"="lpc06f6qc8sff0jn78jsvmd43az18vgy";
+"xetex-itrans-4.2"="m9f0xqxgxpqsi5bml6mpgxvqjjpz1fkf";
+"xetex-itrans.doc-4.2"="nlixz1jqx1al7xks2bp723yl63whrhzh";
+"xetex-pstricks-2019"="4vaa9mkycwc7kwaxbzjfypk3xx7nyxqh";
+"xetex-pstricks.doc-2019"="lqs6hni0df78jwiy8k0hxzpwlpn0kfd0";
+"xetex-tibetan-0.1"="yzps4y2frsplnawgai9s9xb6vpk9h4zf";
+"xetex-tibetan.doc-0.1"="m49lmg8669bbir9hcj33clc2v811xdvb";
+"xetexfontinfo-2019"="jzx2is0hbcggma6s0pdzq21hcb5j8vgi";
+"xetexfontinfo.doc-2019"="h4i3q0c5rpbw8pssb7d6nyy7kqvkkj98";
+"xetexko-2.21"="xi7pi65x4bkjzrsfyqj8iwcmyh4fv726";
+"xetexko.doc-2.21"="flqfvmaajg0w96farbiwipyi59vf3ah8";
+"xevlna-1.1"="jwpjj1b3y45n3lksn9wvsh3hyccy1i00";
+"xevlna.doc-1.1"="4559f3ddvnis97px7180q0is9n4aqq2h";
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/texlive/pkgs.nix b/nixpkgs/pkgs/tools/typesetting/tex/texlive/pkgs.nix
new file mode 100644
index 000000000000..31680913a9d8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/texlive/pkgs.nix
@@ -0,0 +1,29957 @@
+tl: { # no indentation
+"12many" = {
+  stripPrefix = 0;
+  sha512.run = "57a177b65450718631f36bfd8db0f2d1bff788f3bf147137b6412714cc945c7e08832f14f9e7e659adf7e072a91f13a2ea27fe3161cd9b60313bc956f1f543c6";
+  sha512.doc = "9ce7fdae151a116ef6b22943bcbd1e94b90862baa5d50f54a00105d1f2d623f75a2e1440c3c49c560e2e6c5baddb8a6772753f400165b63a90a84f540e3fa381";
+  sha512.source = "f007dcaccb364964a73da6a09db5e6a25ee401d8108b19021b67023af273f486392cef6a0b01e951e9fa885304d0e157b919cbd6abc472a96dfbbb0f432b8530";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"2up" = {
+  stripPrefix = 0;
+  sha512.run = "b7844f246ef486d68babff92f2f648ef6b2eab28dbf8d22f649b2c9c26fc857b05f475e766a0c9b4c4cb5be1224afc690c22d19865e9efb9f4e75a8ff6d9dda8";
+  sha512.doc = "c8569e5cec43525d6814816f7fdaa6bc9ce0ea810fd6be60da992c251fcfaaf4c5229a1956c1fc3e6675ea5dfb4529267acc5f198053a80902b69b25a1464b75";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"Asana-Math" = {
+  stripPrefix = 0;
+  sha512.run = "e1ee08540790685aab85c8acb407526f5936478c37d86b266728fdf39bb906bc7f6566bf5eae90b631eb59f59d65d414943a6faab922681199af76102078ed4f";
+  sha512.doc = "69a6615dda5f7e47fdff1b0b1afc4211f749a929b81f19a554246033e6f5f4a482c3c03a6903b64d83c4daeccb70983dacb35467047a467314637e65a19c917c";
+  hasRunfiles = true;
+  version = "000.958";
+};
+"ESIEEcv" = {
+  stripPrefix = 0;
+  sha512.run = "79fe8175d0adf25ebf30421eca323f9042bc98792290763b06ba53978bf4962dabab228b9aa6220f859f64356eabd2cc94e71351aac441e64afa3fca8f73f742";
+  sha512.doc = "85d731182d5284da69254744a7d9e23326f5344a6585ae95410671cd5721961958480fab4b621d58fe01ff9bf0a602b3f94089dafaf5614fc8d57ad243e9b223";
+  sha512.source = "a63bc1de05f659d72f9fc297436e7aad36db6124f22c2a29c65418a1233c37a0a995bba3267fca6fc83f04efa119315c25937aff733b64b7c78275313209d42c";
+  hasRunfiles = true;
+};
+"GS1" = {
+  stripPrefix = 0;
+  sha512.run = "c71acefcb0ff1cd97792c27435e7eb4f4e32f072a275e5eb7dd13d7b9928ca00318d0acdf605f35cc4a3d7099247c290155d6963ac1560f4b11f37a123fde0b6";
+  sha512.doc = "6e714b1087d228923f38dc3c8680e57de314eab79ab15f0aa247ad002a3aa6a9dac2a253c5688c904408c8d14dadbe307b3d3446b38db767a650989d5ed9e878";
+  sha512.source = "3ad67dc4bd1033f828cbc11196a6ce9a25b2abc90348f727423effd6d97acd7fbf617b88740afb9050f481fb403401033c3dc60c3b9ac326467697f9b1d09a49";
+  hasRunfiles = true;
+  version = "22";
+};
+"HA-prosper" = {
+  stripPrefix = 0;
+  sha512.run = "330df0a8d9b7b7ed5e4d2b74c626576ca8ac852cc84f9c79296141b14892819869cbd0e7f68050b4f3e5d107c43f9939ec9c9248c19ddd20da8d16ee2c25104e";
+  sha512.doc = "55822b9703d44481ae62dcb690adaba29cee5432b5b8b9f549884f55e943b1575064419712745166a6c0fd0fdfadac60473c6642816e1efac92c8e27c2cca76c";
+  sha512.source = "646cea88f8d725e30257c15bcd198c0a2c9cd6477b956279a38443d5b22ac4c64e795a2ded53649b3d1504bbc66639946c331ba978e775a5fea33696c9bc6c2d";
+  hasRunfiles = true;
+  version = "4.21";
+};
+"IEEEconf" = {
+  stripPrefix = 0;
+  sha512.run = "bd35025cabe78886f78333cb4ff186d0363480ea0c1f825456e9b6debc08c0a2dbfc7c703fc9caebaf2a20c47925141cb090d50146f054a76e1aecd861408517";
+  sha512.doc = "0316a52d380555afb04358cadd56e6fabe23293bd3b6dd0f0d4e4df9db75e26708dfc7df4c280a8a9759e4c8518050805f197357b2efa43664a984f56dfabb05";
+  sha512.source = "18d0204a051b8c1d0ea034b7c3357228b0dd2f40d44ffc059ee270fc22f284a833eec72527874be0c1414e01ca91f403726c801f75e2f6cd2d0a2b097db5c53a";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"IEEEtran" = {
+  stripPrefix = 0;
+  sha512.run = "7db183824e4a62a9f90046d62d33940573a25d2ebe72de0d57a68340e82e2b4b21fe74e74608cc73fe53b0d889019884aec8e1b11060849a38107280e0fce2f1";
+  sha512.doc = "0fab8351fce31d36fc1cee91feea7d09e1acd78d80b0500d8c3fc7f3ce322055b952423e7f39d09f86e99b22aa24405ff5a0f00207f88a3cae8cf39593e9b326";
+  hasRunfiles = true;
+  version = "1.8b";
+};
+"MemoirChapStyles" = {
+  stripPrefix = 0;
+  sha512.run = "83455766eb557edebad28b73c5decb0a7a23f097bdfb795cad9cc0847af916ab012fd044a63dc9893932ce0f161e831a2a8e7c0138a2157e0f1f4f2211667c16";
+  sha512.doc = "32b171486838a762b2cd49af46d3f2a152e9d592735a15a407784cde02e5be9281798302eb094f0c045f895a8f6e86464e9c214bd06f9061c313807ec36cbb1f";
+  version = "1.7e";
+};
+"SIstyle" = {
+  stripPrefix = 0;
+  sha512.run = "9473f7ef772f10ae4b70ea9d3074cbf7220ab1672076064aae9e54cf72d5007fa7e7f73c66082c53098c772a43d88af3ca1073e875c31c2821e528f8da836fd2";
+  sha512.doc = "553357a037de0494641969db5a434a77984224f7fee3f64a2e153304eed6ae38548a1cf0330bb5e6cfc4f4dfdc21ceb8cd2b0659b0e27aa79a7379a82441451f";
+  sha512.source = "3d2840beed83bb3843b89b08e3a2d111bc346e221335288ae35c19f7b5a843b668a5cd0b9f60a5df270a0c0f8953cb575d27a17f534a7b7808a37ee58aa1007d";
+  hasRunfiles = true;
+  version = "2.3a";
+};
+"SIunits" = {
+  stripPrefix = 0;
+  sha512.run = "b804d61bcdcc9d6f4559a05d8bfa7d8f7a3c378a618e5cd068b29e2661968b7564c36ce2e3d97f7fc7af15c11e89ac61e88ff25318d8c08536181d1f546f260d";
+  sha512.doc = "09c35a6d2e2d90701ac099eaf06116d4bf5b93652c512969dfe2afae74c9c04d70dcda8a5053d707aed0724fba0a8d9c3487a51fc617fd1a757c596a99b974dc";
+  sha512.source = "82081b1c503098847bc5f24c2749fb6abd1a739ccd21b01464119b7b6a92bfbb51666d0f5d14aa335e23a03b72b5eae8fefccf9c790819a4f8cf14b37ff297ad";
+  hasRunfiles = true;
+  version = "1.36";
+};
+"Tabbing" = {
+  stripPrefix = 0;
+  sha512.run = "10d3c274c5838c48bd47f651bfc57aeded8246787e23091307dcabf2794fc9eec19bc3a3af9ae08b812688ebc4fffd295fb01c7be7d61fcd06ccb46ce4f6b739";
+  sha512.doc = "1f4eb22039e3bae3897502fe541e595c802fffa94d2cdefed451cf24883e1f41d29e9ea0065d1d68ddee3e166aaa1ba7896dd84bf612e9c007ecc5c1e2d5f616";
+  sha512.source = "a4c7b558e6e5ad9eeb8b4e3d81c20edb09d66cd8aaec2b501224fb7f93a40c3771f8e23d2fbfb910158464f98d8172bc691787ef1c2256066fb85e96068f368a";
+  hasRunfiles = true;
+};
+"Type1fonts" = {
+  stripPrefix = 0;
+  sha512.run = "858836fc8a955b87f823c25b22fbb4b07f119186ab437e0e7ef7d387bb8295b8a65deb237c649d93afe7d72213745d4cfbe48a51372c69c12d088f5403f22dc3";
+  sha512.doc = "5448b85539d29ace8365bd0e197693c0c4c53a145d5182c3f125e11cb3ca8194675ca9553ad53bf7e503b1636f17614ea2e338113f61474d9744dfa91800390e";
+  version = "2.14";
+};
+"a0poster" = {
+  stripPrefix = 0;
+  sha512.run = "95c13cc0fc3e4c8b76e02aef0622af10a420b9b536807effad3fa99822ebe1babdc7219536178a349aeb671f3bbdcf9e339ddcfa73c7afc71dafc2b2d7486996";
+  sha512.doc = "d17f3a87682008d8110bb5562aefee406d84b15e3678e165cc3f50e0280aad0736ff0b9b9847d9dc47cf08d3db9a28be71b76f9a5c61c8f3dad0aac187b23434";
+  hasRunfiles = true;
+  version = "1.22b";
+};
+"a2ping" = {
+  sha512.run = "983084ca3d70eff729d81d5d52a74e1bf1f95e384916bc81d17be81290f70c1da5ac891c1665a2451975f36fd56ea0036e1d0dc46b2e98b61ddc660ac044c23c";
+  sha512.doc = "daeefb01a0197e3b7751614cb84e2926f670d36b7e8a389bfbbe39cbd941c4d10ef5112593bfb88e11fa15f7f7bb07f2538c7d0a68cefe1482bbdaf02d475512";
+  hasRunfiles = true;
+  version = "2.83p";
+};
+"a4wide" = {
+  stripPrefix = 0;
+  sha512.run = "e0f1f95bf660760683d6c5a917d75e537a0347837eb4388eded8194c6ca5371b2ad9be9829fcaaff1e24b7d8baefd287db6add752c19a57a6cf0737017e311e3";
+  sha512.doc = "bf059462ec7e28ba782d5842d090c93f4e911bdf44eb3d4f184a7324b454105295460a52414ffcb9fc71dceeba902b1d78ba208d0998f71727ad41299eb1138f";
+  hasRunfiles = true;
+};
+"a5comb" = {
+  stripPrefix = 0;
+  sha512.run = "443548964eb48ec458942e97f0d6ceb698050a5d4dc83ad17a71db0f1d5085a2c8e73c3e8d9bdbb7ab7e6328d12e42a6ec05c4c7dd4247717f295fcd5da66423";
+  sha512.doc = "ee845d8b6a21271d2f0e4e6fd24c79a1235d24ba15cc2d037eb41761b05ad3e69dcb5379c223c07b81c62df5f89190c84ff977390e149566710ce7175e4c2823";
+  hasRunfiles = true;
+  version = "4";
+};
+"aastex" = {
+  stripPrefix = 0;
+  sha512.run = "387de695ddcca83c294a39846bad1cac883382f82ce1cf1eb481c12de181c062c3a451da084b42937d7f9bd86e9102acd4fac4b2f7323affbb33bedd558f6df8";
+  sha512.doc = "8cf0ea4b6a71568d7cfa4b6f5470a7a326fddad84ea342834bccea8c3301d52debe835617fa5930414291a977104236fe8483f59913a15ac282c51841fd061fe";
+  hasRunfiles = true;
+  version = "6.3";
+};
+"abbr" = {
+  stripPrefix = 0;
+  sha512.run = "4b5d504cc9438ceb97a6935e66a6eaeb494eb76eb313bed275b1f1a829690569972feec048132e12b5849f398d0a4b291bc5f9ce8462031846ec46bc88ebab3c";
+  sha512.doc = "7080dea132581fdb0803b4ecfdcf4fd5ed5a689bd7e0c7b7b699ef5b3faeab908042f1704cb553ce38e7f37d9facf7d22a74ac71e2cbd269298f35666367f41a";
+  hasRunfiles = true;
+};
+"abc" = {
+  stripPrefix = 0;
+  sha512.run = "8b1ccd152ed2ad90810551a36f0fa7f114625784fa967f70b67559f9f1e8eb32d7edd08efc9e55dd92723df4039d1bdcc212200d712e99f27de84a153c2a3777";
+  sha512.doc = "5f127f8e1ec104b40ac4d5e9bb22965e9376033892362073cdea9f65f1f10a4152f237b4f27bf52dbbe1389f59d3da673434c39a2b3f43d6f17aa60caabd5584";
+  sha512.source = "e47ba563a1018edfad97fb0556e4f74c7f3054a56c38304d9a188a92b51554628430332b4e66ebf1d12eb4ec6719cc13d7ea62c23157e70a3c0d40e172b9a04c";
+  hasRunfiles = true;
+  version = "2.0b";
+};
+"abnt" = {
+  stripPrefix = 0;
+  sha512.run = "e26dff31bb974379dbe8c33ce9a3321870ca0194ad6714e2848c427108626c066dd6c3ae7e0c7ce182f75cf928bb9741c09ccb3fecf3cd20c0f0b7b450219c45";
+  sha512.doc = "dd331cc5a403bcf10e7c9cbb551cc604e9de8df456a373e2b4cbb7ec397ced5b1bc48d0bad1fb9201b73214ffeb54cf0d7291e66b70af697a5638641a22443ec";
+  hasRunfiles = true;
+};
+"abntex2" = {
+  stripPrefix = 0;
+  sha512.run = "951c039cf0c97a6bd3974bd01ed9323876f1ee74b8250037dce3e92e00d598ab1cb2cfd0bbf4ea6d37b5f8c3e1095e531aa245ad1a91ee49262e6f99c5c84e59";
+  sha512.doc = "b6a5871cc33d94c1294a62aeb809f9d29ccf021cff510497c02edbaef2f155a55847dc521a0f698367692e556b2c588a95066bd3097482b0477a67d4a78b7489";
+  hasRunfiles = true;
+  version = "1.9.7";
+};
+"abraces" = {
+  stripPrefix = 0;
+  sha512.run = "8d75830f3230b27fdee0b21cadcc9adf604eba3058607675b23231cc43be6a66d090bd64857b3715703d2aed1e8ecfb618373b89cfee743004f1bbff5c7d21b6";
+  sha512.doc = "e7392bdf5f19e5dd4dafdc1b058cf0d587d9b1d8400ae01bac3a928e3edef962567e24c53b219206a6cb82f24085da43d18525973b7ccadce05efdfe79b5d524";
+  hasRunfiles = true;
+  version = "1.-";
+};
+"abstract" = {
+  stripPrefix = 0;
+  sha512.run = "2d805c2cc322cd802d612213ce525765d49d06bfb371a4ac5d1434a3c752af0ba0182093b0b6e4ee28a80ab926ad0f3a0403c03f871d3e003f6eb5a60ae39c34";
+  sha512.doc = "4feae7e22d9f8c6866a9b873359a3060ff75ebcd833e1ea5f82e833933b5beb36260833675775cdeb83f1cfde4dbae3421434890aa9f0f7539c999acd2e0405b";
+  sha512.source = "e68a030e56dc15481335dfb1ba566f9b68e92933f27d296d72e20b4d3541790b739b945fc1b39415baadf045164158618da98b63be567c1aa263336579986e8f";
+  hasRunfiles = true;
+  version = "1.2a";
+};
+"abstyles" = {
+  stripPrefix = 0;
+  sha512.run = "de7e7a5c7e56ae4fb478c9a072c6b2dc8716ea34ee17be577cf4a485c5506f16cc5b79293cfbc80b245ab350c2e2059dd5fb37a2e28818f492edf7c0416d52e3";
+  sha512.doc = "d12304eeb2cf797153d7e17beb25c462b3fdf75f5b7b1b24e1ff89d52ce8fe5b2a0fbf88d083ba51301afc45f51871e376253aede36bef21becc1a4350da8259";
+  hasRunfiles = true;
+};
+"academicons" = {
+  stripPrefix = 0;
+  sha512.run = "8c394e4ebccb34cf3b9878a3b3577c8d43369bbef3ebe336336b9ece077e9fcef8ebbdff16f00355b7940bb325fc62ca22b428d2f25559bdee0cfaea73617938";
+  sha512.doc = "ab38b79d6893ba290c13862e4518c7cf6ee297f4b3a248d051d1c4351cfec05b3f271bdc95c0d345433733b9de14f852de54351698be93eca0c802959133cb03";
+  hasRunfiles = true;
+  version = "1.8.6-2";
+};
+"accanthis" = {
+  stripPrefix = 0;
+  sha512.run = "9edbbdd97ea30709f0e0e1959bac7806c188d610e414f037a4115747f57ce7ad68be67b75506f9ce186c951a2c46c3bcd5b0697bb72d81fc48465906cd245be0";
+  sha512.doc = "efa2cbf4c11b28dc0a907b62d8818489ca48c458419e37571633adb8403f914c01d28431684705363e56cc100adf7cff6539f19fae9e4b23e6cf3dc210109810";
+  hasRunfiles = true;
+};
+"accents" = {
+  stripPrefix = 0;
+  sha512.run = "738e8299148365c0441495664cd97b408b181d192adb718adeacc93d4c63b7e81c12541746777571f3fd0da37348905269b5d7ecfc2d58f88174cd53edbe56b3";
+  sha512.doc = "50e5cd01da80113ef3247c4a7c7da703d4a9c3df68822b31ff734da2d755f5fd2bf9f5f8982d84e3628e96905276dfe6cc6699bb625ff1dadbe810b11bf5a35b";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"accessibility" = {
+  stripPrefix = 0;
+  sha512.run = "b001529b18f8782519156a63e3aa08079516ac68bbfbf68e991c0981fe9132b1ab07d429870e6b61929d3064894d0be2b4e66eac0647d068a0ac5db068e4ad00";
+  sha512.doc = "d40927f3ad33f3b4ae9996b1a40b5eb92f80fd79fa66476f4d98d8feb1c0232e2f072db20d7171cd9b8b8b118ea25cb2fab73d420ac7b284fdaeeff9ab7b3c74";
+  sha512.source = "c85b049111e566d1a0a5aea7b6e170d4310982b893dbd908317a51f1192b051a49ea17d6535aad4112cc76f13e5c29ba7070ff20a9d6d98b567072149972649e";
+  hasRunfiles = true;
+};
+"accfonts" = {
+  sha512.run = "f70105569c5b8ed83c103e423d29367702a5330d57f743a640ef68fc6a290b246e8f514907d63d6c7f203c12ab3eeb0cc64a45fe5c0379f10ccf1c8002007a47";
+  sha512.doc = "24b19688008b875890a397e2250277f81be1b77c00f95a9a2d40a257c0dc6f4c8adfc07e594f3873e60e1bfbcfeba786e45e9e63eb632ca92b7c935f74b3049e";
+  hasRunfiles = true;
+  version = "0.25";
+};
+"achemso" = {
+  stripPrefix = 0;
+  sha512.run = "87882436a324828c3a787aabf5516f773afa35be70c64392117e356af18c37cca77d439f1cb88422cda441950ca40bbf624fc01ce3eb05d6ae22fa817bf8a743";
+  sha512.doc = "8576bc5db853243bb4b37f53cade79aa1913e763ef6bd2af3a9f74087e68598d40308bf65772a623e44824ee128c8e93aea250abc3499b219233af5aea558efa";
+  sha512.source = "64a121d889d685f2dfb57443e38feb62e4ac1c78b7496d0f708bc3d7379abed7780b48984e5464d04308e61dd3b332908337474383493eddfaf418f63fe15322";
+  hasRunfiles = true;
+  version = "3.12a";
+};
+"acmart" = {
+  stripPrefix = 0;
+  sha512.run = "ea2cf0785986aec984c2b2b147f3848e2930919e719dfff290faa427a384b0d39296b1d0e53e2dc3d871399cdbfacca702926a078517c8df48e2feed839b16df";
+  sha512.doc = "27d213d4e03cd173c5f78b5ab5184369a4ff9cf3dcd1487183b74ec2f8f8d6fa85feadb8675c64dc65e246a273b94d509f7af5331c67e9cb16c825d81d784f36";
+  sha512.source = "be3fdfd03914ecc4aff2629cc7f4ff8f82a08146beaa10c1cba834ea454a03fd907768022d97e5df0e7f157886a0f660aad6069c8578319b5a9a370aeb2bd219";
+  hasRunfiles = true;
+  version = "1.64";
+};
+"acmconf" = {
+  stripPrefix = 0;
+  sha512.run = "9363127ba5d59bee9d41e800a0e11d12bc4493e5a79a94be8efe23a44278ea097a58fb53cd334fef0f2ab32c9350196c46ee1aec8347a4aa5554b317c15249ba";
+  sha512.doc = "a8a971df6a94a9548b71c1463b9ab143525127774daf5aab227a805c302ee0732d3578c361c5346b123983a32e6d6c8afbd543bca4dc7ac7ad4d5919aba63099";
+  sha512.source = "bd9ffcd848571f2a4ffaa7f324835c74abd59ad1d2816b6dbad5fcac7fb06b98c38059dab7261b4bf7d811d56d0ad48d23ac81525cf95a2e6a190a25a6de9d82";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"acro" = {
+  stripPrefix = 0;
+  sha512.run = "bd768e27445f1557019cd3a7f598205fbacf14bee45e31b2da8f1d9958f90f486b6ef01788584565c61bf7bda2a03f12f4e64fb851f750f9b424e65def4daf03";
+  sha512.doc = "9a795393e82518fa5c9a50eeff22f5f6bc1efb42e6bb7cb4b58378799cfbbad6f1b676e5c5e502c509950c6d318649c6b60cdcf6f8947a590326f49eac9e5735";
+  hasRunfiles = true;
+  version = "2.10c";
+};
+"acronym" = {
+  stripPrefix = 0;
+  sha512.run = "68468f027077b6ca895dce3127a78891dc41b1eb245c17f02810180bd0a66d4a5543596f7bce2d751600d49664833a93680339e0adf959681937db8861624673";
+  sha512.doc = "e5ca45891edb4b43f48ad8cef3cb4191e7e8a971a4a6dc86c4b6198aad74599c274fd68c3045b34b539f2bd673619ffe7410058139b39d14830387156cfbcacc";
+  sha512.source = "9b33c43c3573efa5435cbfaee439ed08bd9f46666dac143092f28ba0080b291f97b215fe73cda5d358285619396565d4437245031608fd52e50979eac2877967";
+  hasRunfiles = true;
+  version = "1.41";
+};
+"acroterm" = {
+  stripPrefix = 0;
+  sha512.run = "fbcd24989570b083ec51365b560ad2a082a136fc8b2b57aaca4a03059f66dcbdca1efe39c959c8f1a049fdd978ab58a6920f914589c242264b9d803124d0e0cd";
+  sha512.doc = "603375e44822841b1dbf52d7aab0c91c0ed36dcdada7e6fab607ba805fa896473674123a2594714fa0f698c559570431f09ec55ca41720586fd522df24453253";
+  sha512.source = "e289d4cce2bcbb70b20d1f59055cc019453e526ff2c0bee6e5a2d04573060d1d4490d89ec717fe55e4dd3754170f794e60acd453b21b884f595ea56bb6f95adc";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"active-conf" = {
+  stripPrefix = 0;
+  sha512.run = "afd71b77d016c6f2b36ff045176929409f1fc104d9f3530c1a70fad4fd1c71ac327a3b58dbf4a14b93cc691d88bf6b7d3add07196921876360280ee4e5915134";
+  sha512.doc = "e1b990ceab6820376c18068bf5ac15e984150fe7ad66929496cb77665f0ae334cb28026e0000e788f0580eab549fe2f70e802ca67d0f968961f4582290646758";
+  sha512.source = "06d82683cb44e35a07e2907e00f2f80b247a3ca2cc0e9b230e7417aafc21a73c9ef788c4e88cdf7fe7f812c471c3b34273adcb4d5e272888fc481d9d18a88b68";
+  hasRunfiles = true;
+  version = "0.3a";
+};
+"actuarialangle" = {
+  stripPrefix = 0;
+  sha512.run = "0f3cb2dc7b0e392942c5eee41227c93a2559c3a268916393530342fc9600c9c4b946f469f222250c23d9b635b9b51a9afc598003a00eab71d641d9d78db29cb1";
+  sha512.doc = "ac945df0aad5f51dbc900d7b9def5115cc6aa48c081feaddf8cc7985daedce5fbc0ed633ab4c201a0b0af27327b028bfda1875ec6e2e1c90d038441785a0e8cd";
+  sha512.source = "4958cca024dc6918371f68336a67d9950231630ee8f011f9c190693f7d5454eae1d1daf51147f1887699a9c941562cc8c867ab7c388eaf2c154d5373ff245d86";
+  hasRunfiles = true;
+  version = "2.1";
+};
+"actuarialsymbol" = {
+  stripPrefix = 0;
+  sha512.run = "49dbdc527b3fe204a4fbcac265accc0d0be88201553cf8e4110b51042ab8b72932bcc1488b7b199b1bb345941a624b486ccaed888851bbc6a63f70135a0c42b5";
+  sha512.doc = "3ba7c377010c3d6d1e7c52bb4256c10f78fe72e6fb7e1b794831d68fb9628d17a6a74f31c8b7f6bae41a59d8a29e6705e28d1e466c36e8273a449bd2594d126f";
+  sha512.source = "c87fb2395a4b3bc7871184eb49b83754dda2813249a5df2319e462a375283e6087b46129c0fb78c744944005741e9a1b28c16bf5073c3744c90e7dfd9c9a0ba0";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"addfont" = {
+  stripPrefix = 0;
+  sha512.run = "fff94f6b6bed71f6ba4662c78cf4ee5c3aabe2f9b232fa9b4c52ad39938e7f56306c905ca0c187b0c618f67fd5d245529fb06ce17124b980c29eb278aed9d857";
+  sha512.doc = "10a3d45c3f4a4a1aebdee7f3a6a05866df428cf7bb9a1e3ab13ce6fb6254c679bea293449fb00cf5d1c64c99fe8b615168d011631d264aec2349053643f5bdcb";
+  hasRunfiles = true;
+  version = "1";
+};
+"addliga" = {
+  stripPrefix = 0;
+  sha512.run = "b54db5b075c2ba2f632e40a1ae2d840b0a61cc940512027effa2b2b3cadfd6dfa2407e2580a462b98f48cafed94281d39613397ed34ad76f54d6a7e8b614ecb8";
+  sha512.doc = "572d9aa1396ac80be2cd9ab0bd317759805a6541b656e19ae36915a6277f9a4ff2987c84dbf903133e0a5027f382b0ed48fc882ce7a79df7a27cfe3082d2a666";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"addlines" = {
+  stripPrefix = 0;
+  sha512.run = "5d0a438fceef1481633f37824b686422e5000cf232b7dd24bba0f30c8d62b583daf01a67242283f2e4fe971438c061acad2860f50ce1438ca32677d497db8b2a";
+  sha512.doc = "2993c6caae1d2f230d144c9f93f7694adcb2e17d9bcd60eb3aa3144806a522258fd4c44a314d40cc767b3b069c4c929b8e458e74bebc746771b975b77bba34d2";
+  sha512.source = "6de10a1ddcb65be76594e7389d47316e066aec3a747ef7a61e15fa0e670d914dae3d2ef777c9574e8b85c5d9628784df7f4dc61f589917dbae571f31416bad08";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"adfathesis" = {
+  stripPrefix = 0;
+  sha512.run = "4eb7fda01fa1961d213eadd2f0bc9b1cf102de664dae1f37588e161af22d043319e12ca704c3223e78e963411c3f0533c845b17f7d0744b020ef2dca35b2c7b0";
+  sha512.doc = "86d89f4f139c9ddfe6babb84558f7d89f57b75e28d37f659d9893ef703cef7199272e60f1233d51351b5bd8a4565393dd6f09ba69796d2ab555423c2ba23c2b8";
+  sha512.source = "3d9a376183e2cb22dfd210eb6d453324d035289173c6750d67ee90379d794a50393c49f8fc40e5c51484127632f2489468b215dc510b0db0313372816fc77927";
+  hasRunfiles = true;
+  version = "2.42";
+};
+"adforn" = {
+  stripPrefix = 0;
+  sha512.run = "50369d5874b6ebd35498ab4502661de8630ed3175df02cf938817e17c858cadf0915dbf7c34ddfb0861a0063f7cdeeb40b1097573f77a4696f08354fd28d2a64";
+  sha512.doc = "b2521044ab8869c114579b7ed59ba9b58a66049ead3202d5f62797c9de0fde442b4f39c7083e1626f50b0011fd57fdb4227cab7571bbf85d6076b88e8eece61a";
+  hasRunfiles = true;
+  version = "1.1b";
+};
+"adfsymbols" = {
+  stripPrefix = 0;
+  sha512.run = "d5ad659516da1a4df4b2244f90db9a35fd4ae1415e78067a378d389a536380c1c642d7910491d4d49273c9f3e03a8a916cb418d8e608329b2701df44f8011de2";
+  sha512.doc = "39bebc154e84ea1286e25e8f7b9439e1c1441b7df83db770a75e26580c452cec7ac8be97bd77e2a99448f100d30ea9d5f40f3282a54e5fcfe940cb40c9917cdf";
+  hasRunfiles = true;
+  version = "1.2b";
+};
+"adhocfilelist" = {
+  sha512.run = "57436dae1489c0f614c4b002f83d34a711398a762ac532b44b1d91a51d068462aaedb5b034923629f7630f039988452eb833d1e98af389c788091517bbee8954";
+  sha512.doc = "14bde143bf3ffa3f2b972f93544089e4c0314c7696e1d711719549b7e831278c66fee0676665fe6eaaac744689d613dce159e4eee2e3f9c24dbbe602794fc62e";
+  sha512.source = "15e7f652408c5975ba47131109e0d18bcb1d270e0ea630a9a3ff385e499cf3607a366e708a5ec9559d7ccc2a5e0b2d3d0f5f615142978a918b0bd1bd0218a30d";
+  hasRunfiles = true;
+};
+"adigraph" = {
+  stripPrefix = 0;
+  sha512.run = "6a4684925e542a6ab0e3b97280059dc47fc892efdb99858370dca9dff91074d98030a93f964a5172bfa95a6dbf41f7a639977b0559332178ab8e4ca9dcb20e10";
+  sha512.doc = "763f94d22e939c255cb0b920183403d7c753dd4d77483b79f82f4a302375bee4ea42357091866ddc392b554c6dfb707c624fabfc3f92fb6ae07853e3ddbc8594";
+  hasRunfiles = true;
+  version = "1.7.1";
+};
+"adjmulticol" = {
+  stripPrefix = 0;
+  sha512.run = "1134de8dc37c135e944c223946ca249106d12a6af8c653ef39c0418893ba5d52f6ac4a3df6fd521638f606106830e0ce31aa2ce284617ac11226950fefbd94af";
+  sha512.doc = "299f6cfadae2e1c51021d849c9d2c10132007f4e4d0b2d0550c60a58f12781ca90ebed6052e9f84cc22bbdcd7b955018769264fe016800706ee7548c4f8a1e61";
+  sha512.source = "0b766677e3a95d7878f990c152952a3ad0c1aead2d4248a75070e93e93ec4e81524e565425404ac0579fd7451a562cea5867ef7d7acf58a36046212f7d900556";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"adjustbox" = {
+  stripPrefix = 0;
+  sha512.run = "19ee76701aa1c060d5163a06263cb5b6b58d74d4bba1b7e77813c5a3b683eef35249b6569fadd1c52c0cf82465c4e2acab7091dc1b396c1e938ddd6b0a1d3bb3";
+  sha512.doc = "33febe9f49a7c78950258d1955b4518a4ff15b96f6a866cc8f59ba83bf66a8d560a4d00430da494013aa37a72494280b4d165d2104d81bcfda237350855e1f59";
+  sha512.source = "f473a082b7bd5104a6a11454ffaefadc4df5d245d9395cb51d6922884c653ea73c065677712ba61a6baaef776783627a6bfe15cbdfa44b4ccaa7f3294d444f80";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"adobemapping" = {
+  stripPrefix = 0;
+  sha512.run = "1dd2c4a813bbcd8063d42c1872fd14427bae2e5ce9698ddb0825770653d17798c037da511d43a0939cea1a607f0a7bb7ce974bff72a2ee88c6f56f941cc7510e";
+  hasRunfiles = true;
+};
+"adrconv" = {
+  stripPrefix = 0;
+  sha512.run = "ec4300075ae2fbb0b29fa8126263d8852a405a84df8cdb6f484c989ebe948257ba3d1f3ddf9204ea7d6d50129c294a0130afabb053bc63022928ca748bb4ce14";
+  sha512.doc = "93ec47833fee152b098477f838858a259f5842264d3a7e9a959d60fd35f46d680eba61c9f4b5efa08ab2878da4aec78d19cf83880e33aeabde9854aa88491c78";
+  sha512.source = "25233e23bd1c6aec13609b5d17587747a5840e21637e3d11a478941f98f5f74a77eed31f806b51d07b79f8cc4ebb8c6b8fa419f72927045e3695ca4ada8af388";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"adtrees" = {
+  stripPrefix = 0;
+  sha512.run = "1e06f07576666fb7b54c78d930f66fef78571469bffc3ef448687c8bbb0d23d41761e17c8ec1293bb6527e31fc70413df1b7de5c9a06514e6aa8242ed90deb09";
+  sha512.doc = "ad8f2e42a4a31368000909c5841fddc189bc2331b47f2c64b16ec509bd662a1b82df3ea8b712f0bdf1c40f123ac28221179b4352e20631d9fb776c0b2939bc4c";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"advdate" = {
+  stripPrefix = 0;
+  sha512.run = "80075aa6efb4125bdce79e9b2ec6951caf1a753c8915201767de230acdd1adc2eef31400574effadf6287be159236422840751bf5ea24cd3cab8a01e82a0185c";
+  sha512.doc = "acfcbd6a40630da2cf9024cbf3ed378c1f7f8a16c8f8395b69c12f9693e903ba54b9b051c364c5cb4de957876bbd41f0b480c4f4b320e22f2c6df7b08502873a";
+  hasRunfiles = true;
+};
+"ae" = {
+  stripPrefix = 0;
+  sha512.run = "6b1c57d5bd3f0959e611659f979ed42b81e397a182d09b3482e98865196077334a9796777aa112ff367b97c232859d4f9637730dcd2654e6232c577d2f59c39a";
+  sha512.doc = "927521fb6b6a5787d0e94ad724cf19825b2cf2ce23333e60e13625a36390eaa4cbaa1bbe50dbc718efae97036d5d815860919f536601bb97224b489d20082953";
+  sha512.source = "d82fc85014bb32147c9562482ac1d0ab1d1fbff8140441dafff032e24c3ee9e406c9872a93a66ef96a2f67a75f47c01e53565372a14d1bdece588f312c8f00fe";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"aecc" = {
+  stripPrefix = 0;
+  sha512.run = "d36fd36a4d92a5031b36437ff8c75e3fbe2e3124982f496d6633476dc876a300d3b0ca18874d6d6256a096d01bde96854c30f76a777ad5ebf9755b035b41e7a9";
+  sha512.doc = "58bcfd0db5d39265765a32c9996807dce4e1ef22c47a3b6f4307c59eae01e1f8eab2e8d2252f83ac42a41aeda1542087f21a52ca523a9364f1ecc6b635251df3";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"aeguill" = {
+  stripPrefix = 0;
+  sha512.run = "b75f41c1d179b63d1807ebfa81e9e656bb43433a3291b9e29d5f0f76667868d26840dc6ce7f61f0f959cef724f0b5738b96af2a371f949daefc4179de1f861e8";
+  sha512.doc = "8361fc02999b080f19beb793fb0d1d802203114c1e1581c312a21e3a682191470b93e373fc269f8aea0e2643a69c8caf80855597ff6a71aadb6bfc869f4370da";
+  hasRunfiles = true;
+};
+"afm2pl" = {
+  sha512.run = "daff35d38fc35b83fc270c3d304e2383ce43b277e3e70645f957157d6e57cfaf4ce6a9191504404a9a0a681ff2167f361612cedf920f79e243c8afb9a9f3ecb7";
+  sha512.doc = "667d5a03190ebb1fefa164f854afebb0f703c671a2339dfb0558a547cb53072c6a5d8118c781884c559b8136b3427d08286f74abe31b0ebb021288474f0397c8";
+  hasRunfiles = true;
+};
+"afparticle" = {
+  stripPrefix = 0;
+  sha512.run = "958ed5cbce1dc7bfb5d01befe74de6236a09b3ae5246aa3f2e80225bc353abf21b622f4128641c54a27197560557738d4c224e160c0be87010517c3a30a729ae";
+  sha512.doc = "d8185772e114a891ff5ce0f2a2e12b827420f8c486813d87bbb6fafc662ca1db710178e8cfa260d7d650c3432909b9f7a8521648f6aebd5f90daf1aec4e28d7d";
+  sha512.source = "f12b5a10b929d78c728331704ee83e726bc28562b8179adc2d9e7324b6b742100319078f5ebe8371a34927ae1fecac4779b9442076a95cae1d66e015f235d440";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"afthesis" = {
+  stripPrefix = 0;
+  sha512.run = "0ed83c0a98bdade60c49b3408053e020c6deba1b96d74b47aa2404c778a96ce2898af1d76892704524c0c069128e59c0bee5af73de6ff9237624600b991ed6b5";
+  sha512.doc = "c221f77700f974f0cedeb4f8ecca5280c04203e9cd89042d414eb54037db71cceed450477fe9498a15d9f09b8a0cffa177cc897958594fa7e3952adbd85225a8";
+  hasRunfiles = true;
+  version = "2.7";
+};
+"aguplus" = {
+  stripPrefix = 0;
+  sha512.run = "73bd9b7f01a4911fb25aa7d388c5827c62a01a786ece4317f5b702de4c281bd05f82568780f4396bf289fcbb348abd2a3eca6620fd8e3f801d23aff7a05e104e";
+  sha512.doc = "48b9c010f746b8a85bbf1093b3dd39c2a853d74b20feb71bfebf2ded8d6f4c44538e6e20b24c65849e8adea9d34ff15498e847b1521bfca11d18fc23d18e10f2";
+  hasRunfiles = true;
+  version = "1.6b";
+};
+"aiaa" = {
+  stripPrefix = 0;
+  sha512.run = "9a5c04cc0b24e2b11e4b6953ceed9e506ad9f44922b3407c3aed1f5fd1fda1e86b1a5d6613a059065c1026f69830a8f5af0ed21ad8e1856ab44d22985768f24a";
+  sha512.doc = "cd69337eb21eaeff910696f153bc97fca94afa0b147e3360477f72c5d90afa5d54d375b5eb7801df1b988c8f11d8fd23848a07f013a4e06c28a013248e00599b";
+  sha512.source = "e9542fb3cb5a16a565bb5c349f15b453ccb4c81570425a5825f0f952816ec27edad65ee670bed9069dd0c1c8762b5becf6300ad551b15bc5adff960f73354588";
+  hasRunfiles = true;
+  version = "3.6";
+};
+"aichej" = {
+  stripPrefix = 0;
+  sha512.run = "7edc0ca36209f18dcca0b794c7ee712f0eba82e3e69b09fd46fdc7ede6bd33e93d4936d7bfcff88fe4f699acd04493053a7c76cabb87670215efaae12aaabc83";
+  hasRunfiles = true;
+};
+"ajl" = {
+  stripPrefix = 0;
+  sha512.run = "083a549d425336eceee0ab8e85ef592aa15983e9a4dcf2264d835b5242933fed8719b81b427fcf7784b38b8e0b3dac2e2a7f8b9ffd10cf2690b96bf8b586ff3d";
+  hasRunfiles = true;
+};
+"akktex" = {
+  stripPrefix = 0;
+  sha512.run = "481502410094aedb36f00dc93ff3cad9479e756b00c60abdd7da98713f273cf45a314ccb55ef2436dc54cf7e8f84e2bf9fc5f00974c9978aebacee177380c9a5";
+  sha512.doc = "4378f1e2c96bab5f5926b22863580dc2ae555400d770f5875eff09b8f915da4c83e99679fa7487f788970d17537123d854400e31bfca868d693b3d950c33051b";
+  hasRunfiles = true;
+  version = "0.3.2";
+};
+"akletter" = {
+  stripPrefix = 0;
+  sha512.run = "fc0702fce74b32b04ce2b1e03960a7617c84a89d4581f16bbbe1b16fc01d45300c0a46682460d78cc572b6e20cc42ec7701c5067adf5e4960ed1bdfd5a69e910";
+  sha512.doc = "6a951bf2ad4a7af4a6c87b24e8f4c3b4ff520430024a6abe6b54cf56269a903d78e591def71ce7cac832a4d3f822e8baa14f8decc960b455688801f406d01e74";
+  hasRunfiles = true;
+  version = "1.5i";
+};
+"alegreya" = {
+  stripPrefix = 0;
+  sha512.run = "d1ccf5c1e3b53dbb5e5f41f6845c0ebb03b4d74355aa11f4dedc8214af2c49f2d4023b5296b24b7330b4fef0f0862dbbbac864831dac16317f7025a88c8c4a6a";
+  sha512.doc = "3452ed4d59bdae841afcee2895e9ed64f60b5ce511f29468107f84ccf1cfcb3afc4798a11e48681bf66f17f448c27d3fd1e8b82cc75acfe7d6fb7e892d0efedf";
+  hasRunfiles = true;
+};
+"aleph" = {
+  deps."latex" = tl."latex";
+  deps."plain" = tl."plain";
+  deps."lambda" = tl."lambda";
+  deps."cm" = tl."cm";
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."knuth-lib" = tl."knuth-lib";
+  deps."antomega" = tl."antomega";
+  deps."latex-fonts" = tl."latex-fonts";
+  deps."omega" = tl."omega";
+  sha512.run = "844257e47e80ae4cbd243dc2363ebd6524b97ebc87e02a3a14b8a650d28ba268acef6ea3ccb6eeaa22c12169981410970cd72aa57fd80f00881cc98fdd9004c7";
+  sha512.doc = "8fa6b630a6567afd7f0789182dc382df21cd1557d556f0b9854e2628ca369c578aced877af0b6ef55fef3f12d0b46a30f3b3c92e8e53cee3d02554f35ed4891d";
+};
+"alertmessage" = {
+  stripPrefix = 0;
+  sha512.run = "df06377244dbd962326646fcd0aad535733d275ff6a86bed3739e8b77c6d1231290c4628a98be50d92e9006f25be68c20d5fc5e92c82a6cf841c0af5670f7ca9";
+  sha512.doc = "412cecb146790ed0b7fae601d9ef0eb14381cf75ed20ff1bab3190c249750fb693708c2dce26e76da370a265f99dd312dc6747b6c9e7de62ef51a709accf7e60";
+  sha512.source = "c670adb01cc2e1dfa0997f6faef9a0d0b31ad2c6329174597b781580f02ba5dfffa7afb4538e0e740271d7f9f70b48a1caab91cadf8282d89a3f9a35c8ae8897";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"alg" = {
+  stripPrefix = 0;
+  sha512.run = "923f36ab03aa10cf3da008f4b3d7ba5919f3e4a512c82fd1c42386df22019ca70c4c1700b7596750a00ea7c50586bdb803db3fee22edfbc402ebb9e249668e99";
+  sha512.doc = "d94795e7513612f3eb102b85b9fdcc792b175411fd67edd6779037b1e0dc101378159f58c6c6feb82ca6b73ea2a6fd415a36e4a4ea67913a0d1110582a41e38d";
+  sha512.source = "a8231edf9c10855b312bb00f2bf37b68ada65b876ab621f459b3ee12da5bc5b90080ab6eff5c3a48c0821753a02576aac0100b3a577cfb7c5dc2cd4b47c8a026";
+  hasRunfiles = true;
+};
+"algobox" = {
+  stripPrefix = 0;
+  sha512.run = "0c7b068f117a5eb591646e32faf3a9dfb6a03a218411d092afc33c7adcee30f95836a9d841444fe87a700288e293510763807d393043518ba70e64a3df82099f";
+  sha512.doc = "ccc96b84ea2d1c6c9dab8bd286e24f3dcb4fb9dd31904b1eef4b07a1de34a067f3cccd3d8e33785edced6dee8673e60d50ffc201643912d732660b1f14404d74";
+  sha512.source = "49e1b417bb0df72356f5d4046826268dad628d6872732a61cc7df789bd214799ed49a4a0778eceb31369fbf8cbf21c6b142a85348e10a7ab634828108b7cf03a";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"algolrevived" = {
+  stripPrefix = 0;
+  sha512.run = "b9bfde7e4d0a36f0e55bfff77fd24f8e76553573e1ed2d8596cdc4e1aee74ba9cec90518b4b5a54153d42d85b9645c68c8de02fb28b15f294aef8ddfe7c16d43";
+  sha512.doc = "3f8cb6cf18d02c8b29cae7a64c93d394df958f5b8edf95917169730e95fd90121c52120c821d09bfcb9d335f0bfb762c42734cbb8f0b6111911dc8b1322dd9b8";
+  hasRunfiles = true;
+  version = "1.03";
+};
+"algorithm2e" = {
+  stripPrefix = 0;
+  sha512.run = "0203f337518811a04f255a1ea65045f487dbb4813fb848e0ba1b52d3e5fba96b784852d7e900a82f4c047c2943098e3b37cbca27322d115c341fef6d262c60cf";
+  sha512.doc = "ae737056adb53f943ae8c92d8e7bfffe52a107cca4a7a3151932a581744f1396f43e134a55e9894de0ae1fb5418983ba4643e1e07487b690478a6979555d8768";
+  hasRunfiles = true;
+  version = "5.2";
+};
+"algorithmicx" = {
+  stripPrefix = 0;
+  sha512.run = "b6cccb7bc391ad11a8996d3e6a3a48f79e50e3e685a4b7670a3399d5d400435616794100b38e73d32633fc16cdd1795c2dcd57bc79279266dc6509bb14d08804";
+  sha512.doc = "cda9c4082faeaaf504194d75c014fda9cda20fe85ab9dd8c4f5a3c9e39fc2c8c8428ef20b921790f36c8abae2ecd8ea089353db540477909039575bc65ed5228";
+  hasRunfiles = true;
+};
+"algorithms" = {
+  stripPrefix = 0;
+  sha512.run = "ba02581f18b74ef97f37b7c1052bb7577b256ef94232b045a43c841fc4705f8d7ebcb2b286d95dd70943d309080b05d36dbf847ecd6e661038d6e375d514a787";
+  sha512.doc = "3658a5a31162acf5ea1dc318503a2f9e74944cb998494083de76e2e31119bbc22094bfd41e048f5628730df359d2359943cec3cebd07b364a81703b92520dd01";
+  sha512.source = "d83acd2275e83d37b5bb9a24d9cb0efbf711a2fb76a9a5a18d7299c95d6e1e0ac8fb41990b795a21b23b5e4fd8de5ef08fa480c6b2eaa7d1f7644e0d44c2f1fa";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"aligned-overset" = {
+  stripPrefix = 0;
+  sha512.run = "3998cd5515ad43e559da91bd1f25b835743299ec13fcf22ee9cb3aadc44c285f428ee701f5b27141c4d03c97b31a31e8620a2911854a1781ee5543a99073fed4";
+  sha512.doc = "d44ff38fe36352e1498e12eb56652e935cfeeb9ce6af5711bebe7844b1b7ba16864c8dac3c3b5f2e2bd6fee86de38c7555d5796940b834ce1ad396f5d2cb536e";
+  sha512.source = "56584744fe5700505608c6ced57fed83fa189c9e755b63521f466f40e1080a35032b007831316e4b080cf93ef36958873924246a4cdfe2b0f129effda75380b6";
+  hasRunfiles = true;
+  version = "0.1.0";
+};
+"alkalami" = {
+  stripPrefix = 0;
+  sha512.run = "57d8a09d5643536cb2341cfd7bd84f24f101ebd73ef1456a39fa8557fc81bb6bddfb58990c38d4da229da5c6ccba0b4d956d82f7d07d65c57a87c749ba3ef841";
+  sha512.doc = "c9ebe4fc7bbcb254e0fa0f027e93680be2d1690cded2d9b18f3da091544b05f5dcf38b87400f8c5b8d4dd9ec320379c752615fea99d010a118bf35f4693c704a";
+  hasRunfiles = true;
+  version = "1.000";
+};
+"allrunes" = {
+  stripPrefix = 0;
+  sha512.run = "d05513d484f11a9fcb5d202d02e7ea586cc82c44abe0488294e58c6f31185b083026bad3f17186ff03456481200e05e2ec4a7a7348f6b8fa4e952702b15274eb";
+  sha512.doc = "569f61370178f2517ea4d4625209a1359cd56913073344816f4fa8aa19edc8bc63c073de4373adb0a0a8c8d45fe392da9869bd16bd7477da65d5b0decfe6de61";
+  sha512.source = "9765fe328824806dd96ca1a0e9678ba385eb61acf95d8447213492843f908de65209022d76303be816ee1c500e95aeb35280f3377369315a87752a0c4478feb5";
+  hasRunfiles = true;
+  version = "2.1.1";
+};
+"almendra" = {
+  stripPrefix = 0;
+  sha512.run = "dccb1938af6f4de3a4135f2ed58d31ad1444d78ba7c415bc8d22d57f0c93d1b28b88634cad238df129fa5c40e4971998a70d4f753b0a7b8bf54b036d181c151b";
+  sha512.doc = "da7305ec5775fea53d96985d2d859a490211dda1eaca56934db20f52fcccc9ed811932b498878c896d82300033432288f179c588b55eb774269602096880e3eb";
+  hasRunfiles = true;
+};
+"almfixed" = {
+  stripPrefix = 0;
+  sha512.run = "1a5e41cac48a33c4336fe03576c49165b47a0bec606b0a15a3563922b964a9a3c2de735cd88cf10423b054b5131193441fbcd64fb2edc47d4944ff33cf6367ef";
+  sha512.doc = "f51af6e63070fbf94a3f8ed756d544dc7d9460f37b016fcded0d2c56a6cf672d2e60c7b2cb8be9f9942f43e46b5ff2bfb59c6ae301a5d88a8858d6e60a3fbaa9";
+  hasRunfiles = true;
+  version = "0.92";
+};
+"alnumsec" = {
+  stripPrefix = 0;
+  sha512.run = "d61adf9c03ef9f0b5d68325b435d5145297d85fa04a5bf106de50f58c04c9507eb63fb17070e955e7f476158419a802f0f18d2cd97ca93baa7997c2d57def479";
+  sha512.doc = "ab07f751332fa0ad974e6ea84b10a0249e5bbb69e591d1319a8c5d743f88d63ad9a7c72fc08fbac95e3cf950d090313dd758ed8f604e209206f873c5f0f70880";
+  sha512.source = "2c978d1dc9dc7f6a0f91d90102a37a2c8bdb78a19d7211d179b04ea448bb56baa451e09f945daaf3f219187d39f5938a7c003988fbc905b692931c9cffe465ee";
+  hasRunfiles = true;
+  version = "0.03";
+};
+"alpha-persian" = {
+  stripPrefix = 0;
+  sha512.run = "9907067b5353b62bb2d25833231c3152974f7f0826237e6b18007043a420018c7901505fcbec45414ba67ca8f90f0213c512b16cbd342413ec000144b5fcb1f2";
+  sha512.doc = "aaae11a4d64fcd05b9a98d324356c9b206bf22d5a744f6d9bd124e1c53f2df3ffd7f2901dd63a8dc2addd9783212792e2e3bbc789b1376e8f5f1d5fd28ea3ed3";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"alterqcm" = {
+  stripPrefix = 0;
+  sha512.run = "da1bf55dd283082c5407b8ef8654f5da1b4f2adff120aeb7f2dad556dc01df18a0da16246e2b8b0242579e9fcc44fe0f4e43e8e6f9fea4ef2c67426699fdb3ec";
+  sha512.doc = "b7016f6129e46475d46f0e19bd14604821e2a892ab29963710dee2c404d87f6aa36eaf978535e297333d85b8fc21bb312d44d36fb3fe13422a62c854ec767524";
+  hasRunfiles = true;
+  version = "4.1";
+};
+"altfont" = {
+  stripPrefix = 0;
+  sha512.run = "18212e7107ed2bb6718a7c763d881dff7859e55e5bb33c42e1acfb5ea21228d1ebbdc6e13cb95f041bac99f871306bd3227326953229e69ac6b8ea774434cbd6";
+  sha512.doc = "4d181a21f732b0265d4251d3775fdd8a4305c99c0dc1610adc9af583f73e376cce249b2ef237d8027aa32a269512db71260aebe78e5e1619f506f23d1105dc65";
+  sha512.source = "f6982a69cb4264c633f8174fd8d487896db88e7d849c074c90645a84e7bc4abb1c1e6adf28500d300a74cdd26dc20b62efc013ff9e080df2bbe9a823ad0112f1";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"ametsoc" = {
+  stripPrefix = 0;
+  sha512.run = "34d99bedd34ea4195d4b0f60560c80c7d3624c2dcb3137a559eaa1b5a16bf465c39a0c54b6a5e64d2488dd7d4c1c82636d7c3adcee3e2e687a66b51b96fe6c48";
+  sha512.doc = "80b64ca57599aab07dbd0d000e67fd002a19a8d8227bf9d635bbbefe84417d1f99cd75d81ff67e0d7a7e28231ab5438b4e51e90bbb5405f566877a4ec87b8d48";
+  hasRunfiles = true;
+  version = "4.3.2";
+};
+"amiri" = {
+  stripPrefix = 0;
+  sha512.run = "5d23cbea0fa6a8a0220ac93f6750b0601b8f0c904edbbdba9d4bef6d5ec9f2ef8935a16a29019b711c19f1a02e3515684e84568e4972c9e9eb42b691cad7e374";
+  sha512.doc = "3b59bf9be9f8e35bf056345c380c8c16b5889c61c114d7812e00dcd9943bc46364abb383876f20f4d7e3b51f6523fccb718533280c7de302f4ac56bb39e5b04b";
+  hasRunfiles = true;
+  version = "0.112";
+};
+"amsaddr" = {
+  stripPrefix = 0;
+  sha512.run = "98aecccedd2cbfe9e348a9ca6c66d82da07eac20bbc53dfc5ea79435a20e88bbdc4e17c85723824b216a212c509fcfe96b2b708353cbf7f93773514e5433d8f5";
+  sha512.doc = "dea731e32c5e02252db95deff66e4160ff3ac9c2b488b218098d9d82754a84d2d5821877c887f51086625c18d1bfb9c544dbb8d2fff4c5aa220463aa8c6d3fbe";
+  sha512.source = "007c3c63868f4f4c0fd324d93506ec1c511e7c278bfb81e5f51026248f033586ae8a60ff3b6cc0f94080bcfc7eda895eda21dd01f312ee63d5411eacd775104f";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"amscdx" = {
+  stripPrefix = 0;
+  sha512.run = "6bdebfbe4985eea23ce24db5e0e14162310d81efab18a7a820fe819bd51f839b9deca35b94740f038ae80084f355e5e800fd6e681d859cb7bc9bb8886993c33e";
+  sha512.doc = "65d6ea09c1bec56e5082d3521e1eabdd513013b0606f6cfbd0f7c7566795b8963dab6e9f3a46cbb6d008311e7ee3701efa345ef5dc780a3b18f6f4842d97594e";
+  sha512.source = "94751d2c3f617710b50807de584cf4c4d7c8f1ff82a1ab14a5bbd8b41fb5828b0a208e20c131a0aa023a1c8afcdc3d4b5e36b2df99f76b260ec2d9509a941f76";
+  hasRunfiles = true;
+  version = "2.2x";
+};
+"amscls" = {
+  stripPrefix = 0;
+  sha512.run = "0b69a69452e148113c208d52b8221056378e6f869fa2efb0c52d49980ab574ac21a04d9957a2450a6881514645cd156580ad2a0ff2879e240e217642061afac2";
+  sha512.doc = "8c98528cd59e8da8c017fb49bc9a7cb617261f899770be56d92b1d52be274993b1777923189957f2ff70ef339223be569db586b80db7285cc824f321f258591a";
+  sha512.source = "a6eb2d6fd0a9640ec2ba625e91703403b80564d069bf8b873b40cb38810c30f1d0f7d372b81a194e4022a33393ebc612288d4d833a38db756ef9c344b4cd1726";
+  hasRunfiles = true;
+  version = "2.20.4";
+};
+"amscls-doc" = {
+  stripPrefix = 0;
+  sha512.run = "132432f34812f009233392ea29d6c4145717a80ea305632687da30de6969dcef8af9c2aa88cbf1809dd34b0c3dfca0f40a52b6216a7370f2a225b2602d0bbaf3";
+  sha512.doc = "8c08813abf65f00b68441d1e5cad3eb4a16fc1a77b30e10d96e22f34d6af547804af4d47b62ef0dfc895e2bc7cc5ecf7bc08d912448fefefbf716430c4502a64";
+};
+"amsfonts" = {
+  stripPrefix = 0;
+  sha512.run = "ff1256ae20f435327c12424613a15aa8f207e9133325e3a823ca7ef9951b8d52acb56cc69cbf9f3c0860ac43c9a74ae54154d1cd956d7e25612307dcc6e74585";
+  sha512.doc = "fe0df1a9efc821e21adc0e21bcfaf2defb1749e3206d7dac8cd9b667747c37303cb2c69283a89aa8740fc3e08e8803408903a2a95eb0b91e910931a8333c2fca";
+  sha512.source = "49a99f519fbba1ae7ba91ffe392b4c1bf7b9246ab573a4f2c8b41fa252f080efe66c5df2acc36a5ea9570e51d55890bd89565ec2174ca7aa98980b49aa060a98";
+  hasRunfiles = true;
+  version = "3.04";
+};
+"amslatex-primer" = {
+  stripPrefix = 0;
+  sha512.run = "05c7c19430a85986db770d1ff8686993edcde35171e3653ddfb7db4a09422c80e53632f583371079fe14d3c6fd9ff4eb3f0c37cbecea7ca2d9a5aefb04cabdb0";
+  sha512.doc = "85faf2a9c03f7d7d1e23d72b7041c9b322d5f8bd8cb309a60f7256416249ceb7582c112d25f8953ee67dd2b79a3697e29cf6250d7b199a9eb73a9682f123354f";
+  version = "2.3";
+};
+"amsldoc-it" = {
+  stripPrefix = 0;
+  sha512.run = "9178b17bedc53957118083a78ead56f9fdaf9fd6a60ea0ebdbeee6c87254e7567b47b61bad1f9bda2554f471f79c28f3df7c3d2b9858faad65c3d110664ec4c8";
+  sha512.doc = "eb23cb624c4cf6283b8f777911d102953d31dc8da04392d7023694fed02ee1b8a8a49365fe0f1cba9682e911405f04afc982b6cc9cf9699a4d76ec8dca6a471c";
+};
+"amsldoc-vn" = {
+  stripPrefix = 0;
+  sha512.run = "5b0c2cc1afcc4060249be20271af92c71c866db47d2551a176b5685c58182a6ca17da9540dd9a7c7abd33de75b0335a625aa921fdbd77329bc91d16718fb346a";
+  sha512.doc = "827c294eb1cedd51a3924796b461ec3d6c858e7875254e0fdb6cb496fecbb6d2ec541e930327c54cc446b15dd69ed795470ae6cbf1cf1e51c0f3ae90f3f6c12f";
+  version = "2.0";
+};
+"amsmath" = {
+  stripPrefix = 0;
+  sha512.run = "eb80cfebfbfba8403c2063fefbd9f779ea3d547fc6e7d15f47def3a77ec327e2674fe68d9303f7a3600c04be563f62272e2919387fb1c757246b8d4c33e4c24d";
+  sha512.doc = "4b426d8e89c6291d7325e665d2de8d33fa5552d348478c34495bff3afee29f1ce12a8c37c60d07f555d381099707b1378923ddbe12bbe52afbd33e1db5001ae3";
+  sha512.source = "8571ad765aa182bafdb6dd257020595e454222d00314eaf5acf08285383dcfa99fd900a74ce5b87446430c8ec158f001b79da9f4fe3e509e6d24b7db7f26f7d0";
+  hasRunfiles = true;
+  version = "2019-10-01_PL1";
+};
+"amsmath-it" = {
+  stripPrefix = 0;
+  sha512.run = "6bc869e3cf11a9521ff883e9b8cd227a267d28291124c0f268556ea576bc0af8ea4eaa145e45d1de84709df08182fc83946d80fd0f116a8656a35d75ca83eef5";
+  sha512.doc = "814539a2a82601c930097113a9baca5166fcf68d1b0c4dcf25d8afa8991e667619517879bc415ff114b9e86664b9ff5e25a7bcf1bb04160b9297cbfabb4a639d";
+};
+"amsrefs" = {
+  stripPrefix = 0;
+  sha512.run = "a0993aa374bf845952c934a421d2b344564726207245102dec82915a3cddf33ad8cb1f2d4d48d71ba0263fae0c24c78f0cc21e0b923a875af02d12c602a375d6";
+  sha512.doc = "2c472849194fb72453a541ba443b2232fbf876cd2d4071dd6e6eb65603845ac9715629bbc7b1f44dc0268a809a1a5d74a08f0dc27a81e9b30787a44d133bdd57";
+  sha512.source = "9cdfcb0e841f6dcfb23c5fac930d12cc610ae8002aed13a4867bf384fa0f177f834cb58482647c2daf7c52c0267f85e8dc4f93575b14fe58e2a634307b7bab49";
+  hasRunfiles = true;
+  version = "2.14";
+};
+"amstex" = {
+  deps."tex" = tl."tex";
+  deps."amsfonts" = tl."amsfonts";
+  deps."cm" = tl."cm";
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."knuth-lib" = tl."knuth-lib";
+  deps."plain" = tl."plain";
+  sha512.run = "0be8ae28c39851cb48882041016146d88507109945b6e474fc7758254b7c3a5c1861093861e69f82c4646f7bef369c2b4d212e3bea9e3175cc687032d1476782";
+  sha512.doc = "59a785a7e23e5530b40f45676dc5a0d75fde350d31bb5e6398015e7c9db2a672576d3a91dcb1c928103ce85dd6538f81ce86d8d78dfb2be196f044397a892296";
+  hasRunfiles = true;
+};
+"amsthdoc-it" = {
+  stripPrefix = 0;
+  sha512.run = "17631e2d6306887236f11eed586454a784f256c36c14955be1eb30377f1f73b189686b37ba6c95188fda2e0b0aac9a1f40469a32bc7787b5d4c244de9a01ccdf";
+  sha512.doc = "2d35f87da43f957d7ec3d1e61d052d14b4dc207207fc2e6dc4de08b699e5211db17a84f0305888294ae163691e4dee2d067fb1c3a29fadcc34214033fe8e22eb";
+};
+"animate" = {
+  stripPrefix = 0;
+  sha512.run = "973147378dcc608d797a9886059fb2beba6ea5f2a88a04d9f0d4570b4f6518db80f18a0a02435f673bbc95f809137bfeefb617c3b72257c3b92823bafc01c853";
+  sha512.doc = "46ce529a784fc1360dbc8aaaf99a7d22f0de0d54d676d5aad3fad197bdbca428ee5cc615d2381ca6cb743645253d6575987c1d2e80a88c8af95d3dbbaf6da848";
+  sha512.source = "d11b8b1ce8e89d2457b9e8e244103934cbdb3f0a2fd15d7c20d127de9b40fda55a8df601c95b18ea49bbf912dc3295878354702770ae63179e1f70deb535381e";
+  hasRunfiles = true;
+};
+"anonchap" = {
+  stripPrefix = 0;
+  sha512.run = "4b84d5260c0986191fb4f2b560c386a806c8f93c76360a8d93aa7f9b55dcf089d7d03ca946143b52923130ee751fd47f1ff59908314297fd752ff5fbb17ec0cf";
+  sha512.doc = "087db509e1d9649176614296f84fefe9b726dceb3ac8cb6eeecdd8a6fdb03dc97433c31478638eeb6f5f7cde85b8a8a693fce55ed0b3f5aae35a075a43e5652c";
+  hasRunfiles = true;
+  version = "1.1a";
+};
+"anonymouspro" = {
+  stripPrefix = 0;
+  sha512.run = "105334748bce7fa8a78edd599d6a8466729937f0008c479213a4d3d4b6b3e24b91bd1e124d0e3c1354fd68f99fdf621538696ba9b32ecbf09f5c7202b0b34997";
+  sha512.doc = "ced94c5fd0be106433e99cbe66305b60ac6ddee82d3a1c8046d1467b11fe9ca10c2ba3b4ceba56a0ff439e7fa82d09c303f29200fdcec1600145fe7623773e47";
+  sha512.source = "75d70833e574ab7847208d76d1012105f42712fc1558b9fbb35349871068bd60099d4ffe189eb28f5276807e6d1e48969283c7ea5a48f991cdb959077c1444dc";
+  hasRunfiles = true;
+  version = "2.2";
+};
+"answers" = {
+  stripPrefix = 0;
+  sha512.run = "89f7fa19dad8e94b57a66b53b72578c277037c0c3a9fe008d0802dcdedaea03f01c6554f4c6b80fd038ebc4f18e21bad3fc176f4c4acedae07d9acad2a90700e";
+  sha512.doc = "616569a8d972150c0a1da86625b580baaca642bfad773e9e2240f74d33ddfea203b4c7349660b996adbf8208a92b11861d3f1a42ff88c68f39efba0af97ffa19";
+  sha512.source = "ab865ba5abd9be86d4056cc33ec9436c14cbc0c308cc68d9a6768c094b84dc1bf785bc78c84e1f286e9371c2118ae3c21b8f57d0b4406ba6c2130f633ee6ef09";
+  hasRunfiles = true;
+  version = "2.16";
+};
+"antiqua" = {
+  stripPrefix = 0;
+  sha512.run = "0318b6f81d365cbb4b320642ddb6d8f909b5b136daf952da01c22508c392c58c9f8a25b33e4dd0e5afe777bb0b366633afd6567c3992df2a2e286cc9f41e6211";
+  sha512.doc = "4158160d42fc776891f974cf8de13631aed17578ad2e5a67225442b7e783a36e2a0d3be640d92dce0fa66097dc617ad54b2779a3a3ef9878b46d900c5dc2ed7d";
+  hasRunfiles = true;
+  version = "001.003";
+};
+"antomega" = {
+  stripPrefix = 0;
+  deps."omega" = tl."omega";
+  sha512.run = "af2cbe945ac3495e94fbf69797c05d9a7cd8c3874148c54c602a4a152c669638cf7a861949a3cc2d08aa21f378b57beffddf2d13e3afc1157c74472c348f5405";
+  sha512.doc = "298b2e796736f7598a83a2d4fee53f48e78d0c8b255cc09c686371a3a05a4d36736cef96d812281cfd3fe1024af433f32e117c1c60d7559809220ed8dd5e56a9";
+  sha512.source = "7ee92461e60834af1f736f387823788a44d680171d9a7acbfd71c858885e190f724b5db11074efb74faf63b471af5c34688af1be5b765de67b170dbcf123fe2f";
+  hasRunfiles = true;
+  version = "0.8";
+};
+"antt" = {
+  stripPrefix = 0;
+  sha512.run = "c31e92701d14e0559ca1807389d3f1d95a166e9dee918fc7218ee671227381e3c37a991756e9c19c7e7d3681597c3c012037a74249c7c8eaaefc7c8a3bc2fc36";
+  sha512.doc = "00533390612e68b48dbbe9c1ba11e46a0e48f8b87cea8f6623267d53795ee9170daa1f34adc8cde12356ef779990fcd7fe7a10b601bfc11c9a0f590b5a25f3b2";
+  hasRunfiles = true;
+  version = "2.08";
+};
+"anufinalexam" = {
+  stripPrefix = 0;
+  sha512.run = "0f7deb262a96bf55eba167475ca7c55887c1cdfbe60f9a32debb6926d855764eb595acb693ce9ab74a2af89efd98114f6694255580b5d594915cb2470d84b485";
+  sha512.doc = "0821831108f81bc8d23dfb7d26f2201057a897a2dc783959b9e298b8e59b79a12453db072b824397a9625b8a63e7fb19ad8ba6d4500436bb0f7b9a23f96d1c3d";
+};
+"anyfontsize" = {
+  stripPrefix = 0;
+  sha512.run = "31d1c235d011998043663bc1f5729bd40c5b90996627038be612115daef2b3526c9e616b16c251d6b653d5bad82beee62a7dcfc3b8c10feec0850729afb294ea";
+  sha512.doc = "9003fdbf712448de70c858eba74f7de79e0cb83e8f9fe72d9c1b71869161d5a63099473c4f9ec670b28b356ceccd9b56110a1724dcde3062ae209a678f5b0e16";
+  hasRunfiles = true;
+};
+"anysize" = {
+  stripPrefix = 0;
+  sha512.run = "4439be91f8dd82cdc051c519b5bc36fdfb632cf09941f4e6ec92fa77c2b5f4d767c162018fc9451d48ece17e9cbd5d7d4c574eacea78b8f92b6e07d40d7b590b";
+  sha512.doc = "96591bba808fc91a876dd49a6e1ede3b679c18952244f14b07e992b40d20f6c4a0f4b4dad00a409c766c5f2e883fc4923c501e65b06ad93193719001c2629f08";
+  hasRunfiles = true;
+};
+"aobs-tikz" = {
+  stripPrefix = 0;
+  sha512.run = "76e3f9748c704efafda74e6184aa3c0199f8dae3a9f433615fb87ac5fd7c81d5dd604e91ed7648b68f05919425f82fd19ca0b66f4f590f55e55634a5cc4b7f9a";
+  sha512.doc = "3732ca200dcb7d3d4b99cbb0edbe13ef7c9293e8424457c2493c330b4ea810bca21851161b83740bf3b7b53899941e906b0b2e4b46ba715e7b5bbe19844d2070";
+  sha512.source = "2cc8953d5e03bb1e6fc35d323a35d434aef291b165f1ac4fa0b005689af3d7988770d0a86fb4b4c3dd3ef6ea876f962dac5653e695533e089a7a50653358f40a";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"aomart" = {
+  stripPrefix = 0;
+  sha512.run = "699f0d1fc5e8fa4bccd31609044e2330dd33083acb56832a64ede0d23d4f21e7a8d37ad5734e282d11238c334399f5b5b6449671ab82b737f9c51612b49f727f";
+  sha512.doc = "ca87c32d703e136735fb6e121c4bcf9fcad367121b071bbb792d96da1669001e4221116275aa6b37df1af7788df4ddaa6948aca3405facc0f05af7ae6924215e";
+  sha512.source = "ba9496f1adee23fff0bf5b3d1d5d54f05c6808ce2b40e7fad8450f01d4c02a2e5e6104304131eb52c91df47a1091f46623d4d4e1849d015f1e6b37d86f210c05";
+  hasRunfiles = true;
+  version = "1.21";
+};
+"apa" = {
+  stripPrefix = 0;
+  sha512.run = "53d30a8458538f1852113370a63d49e8c0926437752c9d03299374fcf8adcd79c1c353bf420ac33a364e6ca296079ff385609bf2afbcb95dcf54465715790703";
+  sha512.doc = "df97c4fd9187772847f29950e899fae480cf5fd82d7f6bc3fcd1de93a1535fac7481436c789ae2c04e998f521f23e5b5219b38904afe1394cebb6c68e55d780e";
+  hasRunfiles = true;
+  version = "1.3.4";
+};
+"apa6" = {
+  stripPrefix = 0;
+  sha512.run = "338e7bc7d97fc2b9c322d00fdc084d76e025584fc4584bc253f44ecedd6774cce38913e8ad0c08bb6bc64b63b83702d0a13e896f2e87b0760129e1b734b15fd1";
+  sha512.doc = "2e34f5094708aad343a716d96be89aaca2c86dc08da5280ad2146013e3df635ab9e49b814efb1166a9e43a3b98245f92f2e5144637bd96c13ee4e1a59b2ad04d";
+  sha512.source = "f73170f6eeadfe27dcaf0ffa7b66232eb7da5246b1630ce5794aebd6a6faec0233a3f148225a2df4e7c95af38d5005fe84e1e3cac1011bc7b0398113fd49d9d2";
+  hasRunfiles = true;
+  version = "2.33";
+};
+"apa6e" = {
+  stripPrefix = 0;
+  sha512.run = "155bd30654ec3a2bf3930bdad98235baa6bf7aa8109ad449aa1a7b6f2dbda37851f43978266e1c273cbd2155ed274003dcd91f9f452f2dffe268750fd0d9293b";
+  sha512.doc = "d78ed178d1fbd07668bdeef74cf6f9f3674837a4f83eb5dce590762f7c02fae1017ee2eed6625a85a7b3e251ebff103e37da84af589125bdb60b73c9459cb748";
+  sha512.source = "6a6502eb1a60d2b67d373fd1cb4aea0737d0eba9ed2846c07ff5849c4bfddb9ab3b6369ec0958536e831c79e63beece92393c874d9463bc7e3cc1a56f4c4ecb4";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"apacite" = {
+  stripPrefix = 0;
+  sha512.run = "02b89374a1a61c7f972aa759b11420cbc7a895972a9b36dd09e48f0aba2ab8d83632949d6f8fbdd781170403639b765ee68a22e1962d13751af7fbd121a875df";
+  sha512.doc = "f9840a9ef1cd33ed01b8338956b3da3676167d8ac99cd1ce32dc0383992fc9b141edb20df2fdb6b0d5df5762ff8d434cd84881f8ab1cb4035fcfb2bd9f3ed14a";
+  sha512.source = "4fc1c927dd602684043a803d8e15b7bf548301bf2562a5fcc111a52676f96740db138da3b58993ccffb78bcaf6dace321f196c5a77022955955c87f729bea506";
+  hasRunfiles = true;
+  version = "6.03";
+};
+"apalike-german" = {
+  stripPrefix = 0;
+  sha512.run = "37dec37d8e08a2f124c3874eeb9934e7da3cc9cc8fb1ce82705a461e060e4a59dbd82c779ce89c4d53f1ea909b4b9abfd57e1f9362ed432693dbee7b1ce615b9";
+  sha512.doc = "91899056f7c71a20e08e4f5e1a2cab83282f9436409cf28b120b92a3633ec5287ae2b6d7fec2c20ee28299589150408ef2e9760028231523e4c378351a88432f";
+  hasRunfiles = true;
+};
+"apalike2" = {
+  stripPrefix = 0;
+  sha512.run = "ff569f69538cf82afd19d9dd8f798ac36994791d4c5cdaf8998267883432ee0230485de6b0aa9e9babcb285f1121936e911fe69700762010bcfbdfac6cdf5be6";
+  hasRunfiles = true;
+};
+"apnum" = {
+  stripPrefix = 0;
+  sha512.run = "2e155193dfdd3c88cf336cece23bc6b393a81529c31ac2535840a7c4f4a97530d35d0f4ae964e8f92856eea0d54c356e8bc15427918ba0891730827a3ba561c6";
+  sha512.doc = "4e1a6ff31d9836dbb04fbd90911083a9ff70c7526ef099d437e21c11766314cc29e8071dbc21976af7a23fe99b673bbee82dfd265041b9ecd015070c58b4ce14";
+  hasRunfiles = true;
+  version = "1.7";
+};
+"appendix" = {
+  stripPrefix = 0;
+  sha512.run = "ed3858af33069bf1cf5303f4fdd5ed17b1353be7202544e4e387ac9f428896bb24b9ad98ecfabda8a6fa9852c3ffe5179f1ed06a7377b4cda91e9b480d6a38be";
+  sha512.doc = "88298d222e63e3e122a60d63e1f8a8eeeaeadf0d7287ffb4a2db5dd5d6ee944b64d74d181ce5f5e2605577827cc9a64054312448b6457c26c08e67284c00447b";
+  sha512.source = "4778f0e2586b746957ae480e90f68a951c274be59588e7d22e2ebdf13514ff08e058c0793ca5c83433897c720d5371f0f6e847433405f0d880462933ad0707f7";
+  hasRunfiles = true;
+  version = "1.2b";
+};
+"appendixnumberbeamer" = {
+  stripPrefix = 0;
+  sha512.run = "d5f4573a0f6c31be7e910512d86ee0443e713abea11e71694b58f1d1d65f4249f967aa5b873941e1d8b7686d408f411aad1a76009a3bbcb528693ae14dc60e63";
+  sha512.doc = "58b32eacfbcd8e024a4cf3dcea0c1d057010dd454c1e54b6752b970a3fa1a9e10eb15d8cee9dbb9ae032aaa8b6c070079b112f5a91b1c9617df40877a4a3454b";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"apprendre-a-programmer-en-tex" = {
+  stripPrefix = 0;
+  sha512.run = "deaf9ad3580a803fd5fa7cbf8f8a11df4d350b7b90ed880317d1e67290ce8b48bf783bfdf470076b672cc5e257bd10d69d6361c7959d81f9fb759752adbf2a6e";
+  sha512.doc = "820f1ba9f635e05a25167203a1f27d13c380281640784828c27ae7366816f309c6d3a630abf3ed49ed996357064878c735c9d7c17bd6dc262a21a420fe40f77f";
+};
+"apprends-latex" = {
+  stripPrefix = 0;
+  sha512.run = "fe9c7ee4cc8cac1ed932388ff75066e4166e582f92bc23da4a4f6049f3cfd8c100d6ab6c0b3c661dd76038a9683eb3207f94f54ea338dd172027815d6945ad94";
+  sha512.doc = "d65d5f56e055ac4628e8198b718689631edca80abb3593480948ee8ba3336d7baccc091cac9f95b4dff745d84d409488d3a2032a1587f1f1a5db186af4da1413";
+  version = "4.02";
+};
+"apptools" = {
+  stripPrefix = 0;
+  sha512.run = "05d243100c9fc575b7828e0084822fdb2c655f5d2d7c51b42aa3c5ee4d127f62f714affd1fa8e94b7c0c322b57a9fe1728d1829ed7f18d75b5287a673d580cc4";
+  sha512.doc = "74ce416ef14978e0418754e3d2e2874ed07a8fbc6be90a1bf7dc492f191546407d7a967efb1306481d1b88ad296faa1194dc4da8975f7ac0c4e4053ccaa1444a";
+  sha512.source = "ffbce0419baaf512bbf8aafae3a8bdae5456f9ea1699cb48b6ce215fd8c4d84dbee84399e8799fa5ca161a1e98375acd16d196c9ca6c505c7923aa7fab49e0e0";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"apxproof" = {
+  stripPrefix = 0;
+  sha512.run = "400c95494142780c5359df48864fd5ca48409180220a9efc25c0650889fc84fdb725f7ea263c00ce7afb8099c80d4ef42b601e5b61ae0bd2fb8e68fcdbb673fc";
+  sha512.doc = "fd818e5ec077a1d479b0bbcc8470a80c396dd5e4b0fd6191c30009f709d8da6de74277e1f162df3595a4de6e10bc88db6290c9b42df37672d8a6aef7047d9164";
+  sha512.source = "08eb4f6d847ba8d7fb4d19b81f1fcbd21a4d1bad908824fc6739b16d08763f6ba1bf388d5f0dfce29916205d6751983f06f9f4562d44f9284f690fb16fe7cd80";
+  hasRunfiles = true;
+  version = "1.2.0";
+};
+"arabi" = {
+  stripPrefix = 0;
+  sha512.run = "6f59ea8c986078f388f4c8f067b12863422728cb1a56464ece4d793189bf0e6dcded476a3b86317c2bd5f9b4b3cbc475fd748c2ab9bbf60b3d8c8cd4c162ea62";
+  sha512.doc = "c851b0cca46b11d7297a03488cc72adafb6409e0406de809a1a18d4993068702f03e17cbeda1399914005c9885108d747c844719764145c746b2a0ae45d9121f";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"arabi-add" = {
+  stripPrefix = 0;
+  sha512.run = "5db89004e82030185f34c0a38e4ba55fe38fb9fa087c7a25ee7f7df9180734ffde0957eec52f0110655ea273202b6cdf63114e3520cb23db80c48c6c74acb0a0";
+  sha512.doc = "4c44de9d3b46c605a463fd1704e56c5c61806f6e0dcc130251c81d0c555534e167034b6ba2deec1370e502fd006192540ef415aa42987f69025f18642451396e";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"arabicfront" = {
+  stripPrefix = 0;
+  sha512.run = "efdd3769bedf8ececd7f71f6a918ed19f66caa78b348238b34e554698a5af6ae5616bad5cc494c970cd8e12073f1c27ccd1cfb7ab19ea263b5cf98061c42ccf6";
+  sha512.doc = "64eb067784cdb56915b45e80f1666347bcdde06e3711a18cef16ae92450377aed236cc32c8c10d467d50e77de31a3f599abe900f411a510574378e63eb923862";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"arabluatex" = {
+  stripPrefix = 0;
+  sha512.run = "53a6524c6d10975d9146acd93aec62f57175c8403dd23c4844a0ba987ddcdef7dd122132c8540733ce5c8f4f8f2f589d4ecd0c10b0ad8f2164b0886a5b8ae6b5";
+  sha512.doc = "fe2a14e2e02c125c9042715766abfbc7a634103843475b15ffa7166b18e33e5e9c8d39481722a19963b79affdc88c3283ada72abb60f05b09a17fba999d06442";
+  sha512.source = "8fbbcd24cd141d0e79232ba5e7d26cf95a554e903a1dd73e78d53c2e7d79f961a6b86bea0e880ae2ac919a5fcfaa44c72ee000d86b0a268cdeb16ffc98455c75";
+  hasRunfiles = true;
+  version = "1.17";
+};
+"arabtex" = {
+  stripPrefix = 0;
+  sha512.run = "2dedbd482c223f65e13aae104e2014d2d28bf9f4ae6b90f1a4cf0718eb245d8a94899982f15de326f2eb19e2696045ba8ca9a19a6d903ef7c3e9b575a01d6bbc";
+  sha512.doc = "f20af64239df9bdb82b7fdac6c5f6a222f1277eb877fa1907cbadd4ec6e426745b40733fd2ae726d3050e6f992b14cc91d6386ee02e2bf841d1f249d09df0c71";
+  hasRunfiles = true;
+  version = "3.17";
+};
+"arabxetex" = {
+  stripPrefix = 0;
+  sha512.run = "7c58bd94b780abc5bc17b4218229d289797a155a8e98cae8e22825dc7d9b12c5514de01b12bf2f645047dafb13b4d519d463f4ced60f7ac53a65c6aa38cbec86";
+  sha512.doc = "0dff3162a710b458b367bb4ca587d525b68ac79d2d3182e8b9d2ca90ff72f89bf69153960400c344511449c52346c329b8a34eb788e11ed9a5319bb6bca89418";
+  sha512.source = "fb29b38d69d39f4c7ed04a3ebb114e49512abbf444f36fcd02dcccfdda22aa3800521c9819696c2828c46983f8266fc00aa59cafb35e26574a3403319d364d64";
+  hasRunfiles = true;
+  version = "1.2.1";
+};
+"aramaic-serto" = {
+  stripPrefix = 0;
+  sha512.run = "6731d62d8a24c9f0d26061b8b2574a880df30df333fbe16408d0830657ea36f04f50c56b574de5eb081f490a4c5782595fe17bdb9208b6602c1a0ac81a1f10f5";
+  sha512.doc = "433018891123aebb201d6c4f2b00dd15a558344b758899f85b9bdc21556ad4fc4845ce72084863b243e42beba643c5ae4dd210b74e2588af4825e3c83d6d7997";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"arara" = {
+  sha512.run = "5ac4fbc1a03882b15611af6268453bcb2c1a476524a2913f16d78cb04414c3eb4cd9ab7426db813d95afb1e51828a6eff1683fc03fd785ffae5763d5fca89b24";
+  sha512.doc = "4f2f7312a15e572dcf4f9a2fbeef07e9c6d940401c28730afbe9cda3e3247c835771d278e1562d55c33728ab4ca92cbe26a945d96c5e50f6ad54d424ba2af47f";
+  sha512.source = "808c73a642fa3c8e74baeb86e1397c797f9dd69c56dd2ba1e98b2136a753f62d5bab354a7255c456a5837a324d586e36e36468a43658e74562d7e96fd0015fcc";
+  hasRunfiles = true;
+  version = "4.0.6";
+};
+"archaeologie" = {
+  stripPrefix = 0;
+  sha512.run = "4998ea296e2a3e6c94ffb23b8ef981ff88f49f886063fb6f7ad6a549dff1624bd23f0615ad7ce44358de7f79b87b02b5d90800c48b8de607399403c045750d82";
+  sha512.doc = "4d8e3d71d6516654dc96602dd1bcf7eeb0bcbb26fb87efc4cc8c78655140ba28d1d68b1fa42bf6a653e6058e7c648a190e18abb7a9ec1b467acf885d71db38d2";
+  sha512.source = "55e8e5bfb8f0845750a3b13545c979367f34a6de44e8714089c95c3df34b4b07bbcc058a30ef941d9e835b8a3e2070b92822a575f472410f388fe19780e08618";
+  hasRunfiles = true;
+  version = "2.4.2";
+};
+"archaic" = {
+  stripPrefix = 0;
+  sha512.run = "5e841f4a8e5df375fd660c998d3d54221e6c8e383fe4a69fb082c98d62b44a1fab2e9ec88db37964e015abbc20cd0f2af5aa26cffd4fd92fece5e24661c0efa5";
+  sha512.doc = "457eedb06a3a09a73a2ce0b20c18b643530aa2659d7b1b98be14238b9d40e8a6bdc39085654e8589fb134921f40d211d93f553cab25d7901e40286b3075f268a";
+  sha512.source = "5a39568546651ef10937849550c3305bde9379737b21e24b2adbec532dee8192ddbdaaa77f2e6bc135d518f354c1b20d7c43bc03f65ccf47d423f4af1e75d620";
+  hasRunfiles = true;
+};
+"arcs" = {
+  stripPrefix = 0;
+  sha512.run = "65737905ba0a6ede74d8cb211b46a2e62b640d1b655f895095ad4bdecefde496368707142143e2f2e48849faa89d86a9e90a0bde64fe84b3c828e14462f30406";
+  sha512.doc = "2cf72d4ec304cfa08c1b3cc8df3bd9a6cb92a633a2ab783ac4efbb5edd6290ba256c86bc4a3bbc09d923a58a10e5f21f5d8e3e2b41b0ddce14406d29405523e0";
+  sha512.source = "ce6599f074d59530d85960b2a313421400f1cbc26b488e900a5b49d75f6b715a859b36de2d2e25c880407950f1170512cc3573b0256d69ceafab40e29566de78";
+  hasRunfiles = true;
+  version = "1";
+};
+"arev" = {
+  stripPrefix = 0;
+  sha512.run = "8b6e88a41052740831fdfa03299f665fad9eaa0e45d1d235392aa0b849bd6ca03f1e18892c879d3a5289430a5d236b9544d617ea2c3af62a59b38b4d7ff8ce90";
+  sha512.doc = "a8dcb8bf0fff3be9c99550623f12651df09b151d6e28bee03d7aa80c7b0eb8c86603b4d8037232e4998bc5603ab3dd368ff7a262b7c7f62f2903338774a9b8aa";
+  sha512.source = "6c92c2f3ef59dcb93207ea90643d11aa8cf81850e2696414f489c40cef97737d00ee4444893669f12d4592c6573a71cb229c232b62f10db38195aabbe83fe523";
+  hasRunfiles = true;
+};
+"arimo" = {
+  stripPrefix = 0;
+  sha512.run = "9dfd102a7a58778bdbea8fc9aa8688dce24bc0a8106121da5f5d57246bc72b4c6c5ac11089a496399dab273680da2b4d2735d40bcd2277b555eca67ff936d991";
+  sha512.doc = "481649673936e5a05195b2fbaa7c7a3a702e23ac6998537a7c2b3c53b3a87ef1e1b0234c4254f737ee10bf8809ec03b524ae8e06d3e1ca3bca641d58746afcad";
+  hasRunfiles = true;
+};
+"armtex" = {
+  stripPrefix = 0;
+  sha512.run = "9e76f19f3b1bdcc771039d0be62c5745e5605b1838c4d7b2df67b14b1babcecf49fa5abb667b0d106a432919dd08e23e82201a62bb4adfde3c2016aeace79bb1";
+  sha512.doc = "8df4b5c1aa4b653869383336594ea3bb960ed8bdc2c413464df1aba607c9c310bcb5e8e63a911fc28113a8770573e510d81c6fcdf84242dcf08dd2da33f7dbf9";
+  hasRunfiles = true;
+  version = "3.0-beta3";
+};
+"around-the-bend" = {
+  stripPrefix = 0;
+  sha512.run = "8fdfb83017cafe87778ea8a9e7147d6b73ead7019dfc9dc8b620858a67a2a02991e291d622aefc77723f6faa8a66b132313a100d298a2f6327473df4e0fb17f1";
+  sha512.doc = "acec7325203a96ab3937cb687e3265b5cdf6d77af5740e1e187f993fcdcbb9db743835e9ab579b6c8b0534311ba94f3d1591330bedf1c2f9eb9e6955ad070f9c";
+};
+"arphic" = {
+  stripPrefix = 0;
+  sha512.run = "2d4c0f91dd483df95bf91056e4d7cbc28b681fc9f42704cdbff297ceb4f8110affbed879cc8b15061c309764e1fdcce01fd47c2d742df441ed191f83a065538b";
+  sha512.doc = "327dbc2cc7b4bad5e410dbb07dd2a2d5052dcb54c98310ffc3596c1e5b4121c1a12e3067b7074f209a3972cb51280f057cfe718eb963869bf05a76e17c528dee";
+  hasRunfiles = true;
+};
+"arphic-ttf" = {
+  stripPrefix = 0;
+  sha512.run = "f0559968e2659a4e899bb0ee1e6236f4bf7f4133c96c146a189b42fe0ce7f375ffc5c62efd8acffa68b36c92159c28eb54167a7625b606cf7644c0a072d7f8e9";
+  sha512.doc = "000030c21bf1ccd74ebc1c6bf8e46dc5d9f884480b2c31407353a3ff45a4d1072f759e9e31abbe5c9de7dfc68820fa359d42c5e980bfb7e9d408f015f8944aab";
+  hasRunfiles = true;
+};
+"arraycols" = {
+  stripPrefix = 0;
+  sha512.run = "818971d673180323d20534faf9bcc41afb7da93f41df689b37237af19471ebba1942d0cef900bfd5dadfa5730295bca2e9c9e873ba2b25a1fc885f0d5aa3c4fb";
+  sha512.doc = "10d1132c5f964915c88eed1c00edf982da80fb1dea3dec028e372eeacc91023b06a0b49a1b63e4442d23c0ef550f2651dc0f12246e3d58d0ae320006e9b49b37";
+  sha512.source = "1dc2055ab0a511896909ee526b9f5b1adeb079dd9a1a6d64c0fe9ef326e29392d69088b47a7e26dbca2d32e5527549c7bcd9d8f3b28cf8c1ca7d442819488638";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"arrayjobx" = {
+  stripPrefix = 0;
+  sha512.run = "5cf6573de2bf55c1b75c2a0f38515ecde848dafcc0e5f0e77185ac039d0bcc4049bf6fdef62134ea5e4839570fc20cc6928bc9357bee0c4396f08d714eca8d13";
+  sha512.doc = "495f7f8f3265e349e16ad170eeda10296926864084ace743df54f5a4b304da6bc344bce901edc0fca8d835bd0f90943b192b0e16e3a8f5bc81e0f269f2b480a7";
+  hasRunfiles = true;
+  version = "1.04";
+};
+"arraysort" = {
+  stripPrefix = 0;
+  sha512.run = "6dd3c6a79c7b7e1f9a0fa29f2d7f4fda8c3aceb0b900c4e42773c81f8a49e84dd62ae24027065cf19cdff93d4addff11d0b25cde62f2d4854b84fec26eb98c61";
+  sha512.doc = "1070b880c7bfb6101fa9294ee8d1ab4c61b21af41316ab711c3226173b73249944533cf0594571f90215a46322b1ef07322daf7230d95e7c23bf21650e1d6047";
+  sha512.source = "a8a5d1506a5cc9a33f5393ad6dcfa7ee84af9de69d0760d90fc633391cd21f6d274995e372d91f47929b098d64ab5464d7d7cc2454266bc52972b8708e3bec98";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"arsclassica" = {
+  stripPrefix = 0;
+  sha512.run = "9c6b32e43ff86bd6f28d23b9aab5dd90a423610b2f3c842462e88985c2ee88eec2e78e05cf3e0b91397009bdd370880df6db642816d7de3bb10a96faf4fa34b2";
+  sha512.doc = "84cd0583c074af45837f38c21815019613753890e056109abab3c79c774a7ebe966c35875264998398b18d7a7fc92ac6762dd72726e708193f699e321f296535";
+  hasRunfiles = true;
+};
+"articleingud" = {
+  stripPrefix = 0;
+  sha512.run = "30a34052cd9586d4b49d687035ae8bed040cc5bc2d9ebc0d96a035c4c7cc06625877a501e02eda9be5eb79643f009ffa9e8d2bf9d7affecca016ef3c6310a6de";
+  sha512.doc = "a7961a7ce16613d26d714d39bc441400cb37d7013d03684146ee9113d05dd821a23a1eda9f7e89601680959f3b473e31155f24003b5deaf60e069385c0681646";
+  sha512.source = "1217fbf4951d4e6a11378154cc030b4fa18e7ca6384bd1593e9a8adfb4a4d2a3161bace28c22bd4aa4ba81ff56d1e2d1252d9678ded0c53f8dee6294e8dc1032";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"arydshln" = {
+  stripPrefix = 0;
+  sha512.run = "fd676917ccedc39b90b48b531ea4ec5098b70ca854583a3266d4080dc78f59e37a743e63b738be370cb0ca650594d0878ab1f807eb6f55daec17ecead73aa4dd";
+  sha512.doc = "a809e2abfd26b11edaf8a5b23ddf01901f84bbd63b8fed7b6050a4947654ffada95bb697e13250038c6fb93db80dee4faad6d4493f05bb7f4ebb86dc7e9b9698";
+  sha512.source = "0be560bb0dac65951b177a34ba45c8199cbe75b64958b71649f09e5e7be73fe091bef6097a9502be80e26bd415f193e00579925b0be0d12bf43adfc0e3963578";
+  hasRunfiles = true;
+  version = "1.76";
+};
+"asaetr" = {
+  stripPrefix = 0;
+  sha512.run = "b44fbf1bb916eb9fb01c70a7302ef4028d04c84dc6a89a51c0feaca762da9cc95cc03cce6497e96dd64ad73e812fe59a12adb515ff4f561401131476e7df6214";
+  sha512.doc = "be0cd70f1b3035477a9b455328a8e167a5042e07634913c0d9efb995286165a1f41c1b86a505b3f23d19ec2f43712328f70085747d692bb97ea968c40ed109b6";
+  hasRunfiles = true;
+  version = "1.0a";
+};
+"asapsym" = {
+  stripPrefix = 0;
+  sha512.run = "9a683044f23fdec0547199afbc0f0c6c9de8faf01f09df38de324f53e91f446de867e951e187ec77bd63cc65bb92ba2fd7bc290d54650ce24e02b682cd10a941";
+  sha512.doc = "4462b37c6575ba0f3e95c29e1d84eafaadc562da19ec58a604bb6ef677fb9b9d35fa68a6f2c81d8dafc35dec9f904cee9d3fdfe0c2031de928862324e83d8663";
+  sha512.source = "54325810653a14ba0ebe67b92341fa151e5bade3ba23e97c67c2bada6bf43ab16d5e0d11eb4c59075c48bddd9eebe44ddbca5accc331e6b26081abbdb95e3e86";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"ascelike" = {
+  stripPrefix = 0;
+  sha512.run = "d8c9d69ac49e632b7b303c0fcff53762f6d40a490aa1655f58525e192481b65b50912867b1cb16c9aba1d93483a6a2bd31e586683819a7f2b3db7439d46deadc";
+  sha512.doc = "0283fa497b53dc3a0d60960bd45945dd9b363c53a563139e911b8bb017a6f0ea7f46a95811812a679fe1ac5327c52e73f4aba35d26160041c61a1cb5597c880d";
+  hasRunfiles = true;
+  version = "2.3";
+};
+"ascii-chart" = {
+  stripPrefix = 0;
+  sha512.run = "ffc1634e3e5313eb0cf04caaa227d6477cf81ba9b6eb887b2897b6740999f1f338b2dc53e6da735876f9c3b130394be59b0a285309d61909a73fdb0d6f28a8cc";
+  sha512.doc = "51b11a22dd963336fd93a87e2948d05f291b4191253a474b9d6f70ec31a2645801fb5f6fb6238f6a9b2979dbaba4a6ec8ac15a41c4e8867645dfa54408f18373";
+};
+"ascii-font" = {
+  stripPrefix = 0;
+  sha512.run = "e92e312e38432a7294c71a76604e5a3c2aa6b65937d39933fcbc9fc9b61e00a1e2f35ba739f64c29a3ebf6d2e388cd29da384a2a6456f71576101a1f12e36f0d";
+  sha512.doc = "2d681a41d213fe260e3491a3b410239fa2e025ba19894d133a27e47b417ccf27648aa13ae431b4c42549c1692cbe517f2595c2de675b14d9ea0460d469e4f036";
+  sha512.source = "1bbadf44599ad29f843ef17d1b437f951f5b167e9bf84a73600a0a9dc5633d94d76c91ec23493250ac894d9114c1b2d1d1f182690aef5dea92c9ec51c96e69a9";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"asciilist" = {
+  stripPrefix = 0;
+  sha512.run = "5c2e7938a9d2df31477cc976cfb549103c8f378a8d38a3624d3449229861fd834d462163df6e2e1f1fec686f513c6a194ccae9fcd0991820b357e12a1c32af28";
+  sha512.doc = "8602a9f8e5dc04a6d4a914f603e04ced8f5cef55c5a335087b8f0953d19d4641d43ef732ce299ea18590de89e2360a8dddb44f8ae76be6498ccfd29e4a680746";
+  sha512.source = "562efdf7665916bc124f8d2ada2d7087ffebb23885df6c3baa652ef24b8fb7ba7e2f4a5880922066b9f5c44bdb9c70ea67537c79676c9fb7004d2ce1f6c0d6b9";
+  hasRunfiles = true;
+  version = "2.2b";
+};
+"ascmac" = {
+  stripPrefix = 0;
+  sha512.run = "e2ce69f4352eb45549488c4fdd26f9acb1b0dea0db86864de95fd72fc0f7f7b5105748bd54449578e6d13a33fc28503e3bba73a4bdd88466b7de3925c4e47a45";
+  sha512.doc = "64597bc037ac6760a14164ea55a32513f0e3b3026bf2e371247e528bc6acf071e81fe8b5dc724ed17ebe75cbacc3ff005c19539804a8f1984bdd825a1ad39513";
+  sha512.source = "026990d150f593a23381862b25adc6b93784edf02951089f3417492250fa9bf4873162b7869ad9f182b4ff62504dd4a24dc8a259f83e07e43499e01e40068108";
+  hasRunfiles = true;
+  version = "2.0h";
+};
+"askmaps" = {
+  stripPrefix = 0;
+  sha512.run = "d07dc2e9b3cd0dc7d46576fcf9f08c5a628bcc701a95d8d934e322666c93f649054b9dbfe38f7d9577ce3d27344e9e5a99ec8b1e710c45f4a609a5a2dfadd126";
+  sha512.doc = "a170144d18c4a90b166c8a315e9d1f0d86cc5f2a53ef69381652c3f8307b85d8b70dc610bcb98be6eee1bdbedc02b7cbf097a13133da78d492c71db33d94b04d";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"asmeconf" = {
+  stripPrefix = 0;
+  sha512.run = "6e834fd16bace20d505d13af26bca1347cdb8f5035172dc16f3fb43ad836986ed70409ac73fe2c410b191fd4838d9d8be8802687a81d883036118708600b08c7";
+  sha512.doc = "702fede94fc147e98e5b09bfbbb585c90430f90be5de9f82014909993b4aa2d8808832613bebf605ac742535ccdd5f403bee5e0630af9019c07d1dc867042497";
+  hasRunfiles = true;
+  version = "1.12";
+};
+"asmejour" = {
+  stripPrefix = 0;
+  sha512.run = "3c3536f41691c251fb9d94a603981cd184c8cfa92776ddcac7a67d166f918fae1f20625870bbb3bd963c6448695dd4e575c75ef5aadec0c1dd1d412a2fef3be8";
+  sha512.doc = "70b3ee220e37957e992a6570b1b4668e8d7cb730a0e0d910228f0f2bf0ea1f2e9509b12571d01f7aad628114e52754305eec4389af1d6afe7dcdb2a697f0e542";
+  hasRunfiles = true;
+  version = "1.06";
+};
+"aspectratio" = {
+  stripPrefix = 0;
+  sha512.run = "1447c3037f5477aeadfe3e5fe18a004ffa1b8c5c18b7c68295b8065e32c5a3e6a044e7f9868bafe3d8b81e391b2c614e2153302ef34e1e4aabe84c92ada2f129";
+  sha512.doc = "5ee4918a3d90e9e4b51a2985352133331b77a8a87bdd8d41fab9348e5c548670ab56b5f0afc63756b65fdb6e45aa7594335995ac0d146d542b571eefbaa84d78";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"assignment" = {
+  stripPrefix = 0;
+  sha512.run = "5b8ceaa313eccffff8930b4e1896c7aa069664244623baae2aa1eb3555786dfeb8af8245e56ca149754093f6d74d6b86c891cb9e52e67c7b76e2501ac206658e";
+  sha512.doc = "49198297494adbb538385029d41681e55bf64c89fc9cee7d923b7ba9849c039a7e5aa2c1fbfc15f06c1a93a3b694899ffd8988d1833fd88c6f5dd51379289a14";
+  hasRunfiles = true;
+};
+"assoccnt" = {
+  stripPrefix = 0;
+  sha512.run = "24dd03f444ff4dd627a97840837cb14288e9021117f93fbbdc4f79cbac9cab46d43fb93769d2f05970eeef3fafd39692eefe5d1b7bec8ae04f6078d7a4b48824";
+  sha512.doc = "195f1f017fe187a224bde969f45b6494007e4d05ab2e8618b62e8d40055b4ef401f5ef069c3bd1af25f8a9f5e1ad1cba22923e4d615d4f075e13a78a06752e9c";
+  hasRunfiles = true;
+  version = "0.8";
+};
+"astro" = {
+  stripPrefix = 0;
+  sha512.run = "8cf59f7de3ea5add30166fcd4284279582cbe6199bcb1ebd540688d03c03ccf03aa740602cfad11af9380d970ed7009e6bfb4e96c56d26036f872e82c02739b6";
+  sha512.doc = "df4a06e10e9a438393c7e22f746618c5d760a6095e285acd0b2918f58e234a1eeca9b49597d381a113cdcbff0f13e4c7108b9b400afc81e81757f4400ea484f9";
+  hasRunfiles = true;
+  version = "2.20";
+};
+"asyfig" = {
+  stripPrefix = 0;
+  sha512.run = "f067e6aa1f3cb481e07f59781fb7d4c671a0b21a392ca7830d7fa19ed7a198fefd5ad5104ed3644eed484100871f9a8d36d1ae6e31d55487e4ff2846df618e9b";
+  sha512.doc = "d798066b8c545ef385a75c81d431c169668bd10ad072bc3e0ef1db7c0df903d51e9dd9ac2d482d109b421a868e9cbff577c18f52a7b4520b32985fafcddb66ec";
+  sha512.source = "0a62a885334ec00b04e47ce4df391d170f286cd90e7d68d940d0f3ec09018ef87f49ca793508592cc92268c1346ae48a54be65ee601f2dad7dca82778c9f7e39";
+  hasRunfiles = true;
+  version = "0.1c";
+};
+"asymptote" = {
+  sha512.run = "e314e473c14c2fd8980d3d0256c6cf6fc7c757a5b4b4dcf90c93cbd15fa70a5e7a0ce453c8382df3f9cfa4aba9c9047b3ee44084e398d9c767bb88ccf3bb47ad";
+  sha512.doc = "7969d7001bf3662ed28f92b07defe67a9262aaf62d8dd2f137a4f36d90fb4ffac034052a6c037882c3bcfbc0fd2b9836fc8815c90c741a26dbc68b59a8879782";
+  hasRunfiles = true;
+  version = "2.49";
+};
+"asymptote-by-example-zh-cn" = {
+  stripPrefix = 0;
+  sha512.run = "34608d6412d7936a15bf649555683ff03c5021e1688c99285a6b7ecdfc3a43eac4ed32108626243d6e9b07c23c557f07762897a96501a27412c7c5d039747553";
+  sha512.doc = "a0087e5be69962c671e1972d9e7be12f76be64582182afe042693cbad92cf3fd027422c605dcf7860cd2e61f0b925860a50e94523b9ae2d1af7a8aa6d356c3a7";
+};
+"asymptote-faq-zh-cn" = {
+  stripPrefix = 0;
+  sha512.run = "1efc7098392ac5cad5eeaa0dcf527bd158e3f7497ff1992603b833ff63d5cfa61fe5e7bc33c5cc0c441c13fc03dfe1e18a334411be6ad2f5acc94c902e9ccf2c";
+  sha512.doc = "b7dbcf256cffae9cc8f5027934946929b4be7a8794fb8364892802eeff4e7cf970ca8549ef442a35f173ada61533b51c2da301bf2ce931107a7ce0c564ce0c60";
+};
+"asymptote-manual-zh-cn" = {
+  stripPrefix = 0;
+  sha512.run = "c04fc953a0a9035c238b9f80873d9fc605b23b322e898ae55b8eda7537f0172076e512022b163e3cd397ce2e4e721afa2e981454db53511c1a7347a017185df5";
+  sha512.doc = "0f82e25773a14b0f81b34354f16931834d0496b2c6636c498c6af686f46e7ff93a274739a1a4c189433c9df1ae91ca010f0887081c81f2ac9006a105c7fd4ac9";
+};
+"asypictureb" = {
+  stripPrefix = 0;
+  sha512.run = "a1ab37814223b13bf49d23c527543cb537e2224335e727e07e1f645a7f76a2f3ba1a275073c775463880b0e258e716b6b00d0df29ca944f1f22b3ac70aef4378";
+  sha512.doc = "68b060950fdad080061b8d2c1a91726d0eabee9aaebe322e983e0dab81df30c65d9d7d0cf32fb2847f504ede155f2c43f3ba8c00073fa425bddcfe7d47a6f000";
+  sha512.source = "883968dc538186507f4e81a466dd980b8a8a3ec088e25e7973c62e949871c79baeb909ef64815720004d503cad33d7f9de6c7ca0950cc0618ad2111e92870b73";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"attachfile" = {
+  stripPrefix = 0;
+  sha512.run = "526a279f3fcb309cb117327f4206e7dce8c49d39b85a846799bdfea5bf453d2f00e14e854a74d544e49fa92ce056cd8ccc7e03f56856a8e8562b7105d5fd19fa";
+  sha512.doc = "9f9e6572e70d348e1db71254a0c6a80cfe76b767801a3c18ad4517577b793b5388367b24f311f491f0dde8df38684b3de4a2ec7e6db67f1fc1ca7b4a9ce5ce78";
+  sha512.source = "a4bf69ed370f495f190abaaed8616b4a3ca14184987c6c4882451ec4dd6961b827d3c38d8c049ebe73954f5fe205f727124e447d2e3cf17abe1d95336371b9a1";
+  hasRunfiles = true;
+  version = "1.9";
+};
+"aucklandthesis" = {
+  stripPrefix = 0;
+  sha512.run = "54c6708b343c2605d7779561fb086b914f1a7a825f5556b4a36faee0c8ad29b1c8ed67eaffae223c5e5d47bb6e6a9aaae4c0c658debb7bfd196d9362ae7b8796";
+  sha512.doc = "ae73abe45b0aecd033df666f3095486fb29252449e840e9a978cf916a2eeec4a126be8c3ec60379408bd6f7322c8794ba1fa3bd77e45f1723affa18ec109d93e";
+  hasRunfiles = true;
+};
+"augie" = {
+  stripPrefix = 0;
+  sha512.run = "e8e40eb1e59b7bbd3e6b042e8c8ed40f604066fff6bffa3b46e0e7b7e5984fb25e880422d392209f6dcae6771339bb49a27bfcc7e9e33bd0b638b0794a5e5098";
+  sha512.doc = "40db247d40e98bba2c79e5adbd564b77e09b52c34e75a41bb1447e586f605478e4e7399a8d294b078fbbe508eafe5d0c6a68b7e3b7c875af85016f72c74376f0";
+  hasRunfiles = true;
+};
+"auncial-new" = {
+  stripPrefix = 0;
+  sha512.run = "e6132432d4398f3a9b8b04f331bf0852b662da84a96882758a8ce07e7f50a0ad5317b0d6a51cfa389f55fcb3b105e5aa748d249dc3e6c8b2d52647f6c900bb24";
+  sha512.doc = "2ab25dee888444432a2bd1eedeccbbcbeb5fa8008b15b0072e1537116d5c1f5f082818eddf31dc604f73ca1d4fb3bc6d3eb76c1ac712666ef1f86dd06bd19516";
+  sha512.source = "c5fc0ed2cbf1f4813925dcd2206d479ba4a0699d33872fa36e63b21616c595dbe289a005e1de8db2a7cad30d760161932b4fd0b75c477fc915fc1572f86b7b6f";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"aurical" = {
+  stripPrefix = 0;
+  sha512.run = "1c48c36d6121005c123018cfe1266783288572c0ce8a9ea4b9b47ac28f46206de61b7a73804121f9a57c056c871c547c97ff10a529fedaca57bcb3ab78f3bea0";
+  sha512.doc = "89de4991373a50d673f569e72f4727bd66a2b40b385006c3c7e4605812e7f8d3d346e3b08be55241f9926a58b40126d123d6ecea912d09db3973985d0cf9e90c";
+  hasRunfiles = true;
+  version = "1.5";
+};
+"aurl" = {
+  stripPrefix = 0;
+  sha512.run = "4688987b83ae65e15a74cb7960dc990710930186ec94e376cc3a74dfec9f6d75a51babd99438ff87a5f6f8e05cee483b569fabe627ef00fb892126f74749649d";
+  sha512.doc = "a58f7cbbae262c7650bc5147b400f25f0c666effdcf37e565f665092d1cff820d2d98652947d36f6940b8d16027336b970ff88ecd9f3500d9a39a45eb4a19acf";
+  hasRunfiles = true;
+};
+"authoraftertitle" = {
+  stripPrefix = 0;
+  sha512.run = "ad07262ef312a8807e4419101fd7cd10663926000f7f3c63d9d2a306c02f718982a8c525ffc2c34f04bdc12c5501976236079d2840e16acb9e8b1bcf9598a489";
+  sha512.doc = "54e7c6b96ecc37948e32ab1d057c6b3b242b68889fa07a049448d790b8310026014917977dfee6365bf6196dc661ca79bf963ae9891edd22c22c9f89a7d8d756";
+  hasRunfiles = true;
+  version = "0.9";
+};
+"authorarchive" = {
+  stripPrefix = 0;
+  sha512.run = "9d5dca20f1293b3805c628e051067838c9b7f14d1faf34f39bca031c0be1641424ee8d2466401733bfafb56c4ca1a668e4b3630d991d9911f6acfcde4dd22a61";
+  sha512.doc = "070bbe6a8fae5ddcd6ad7743170fecbd9e1f0db1052fe05458689dd3c0f48c04b2afc579a22510b3ad0f26efe85c3b665386881eb0e2ad499a74ef422d6dcd45";
+  hasRunfiles = true;
+  version = "1.1.1";
+};
+"authorindex" = {
+  sha512.run = "75e35298e4839f3975824624c7367504a26dafdf4b8e1d5238e2575c821f652282cd9a6e58fb4296b2c0345ff104dbd2281135776718fe4d2ecb76110946ab9f";
+  sha512.doc = "a6c48d89cfd854d8acae47e318bc3951f8e81434d9a81901c8a7b7f1c25188afb013b94780ceb201e81b5d10efb7f5c24f5b5e4c8d8379aba390431707bc4d55";
+  hasRunfiles = true;
+};
+"auto-pst-pdf" = {
+  stripPrefix = 0;
+  sha512.run = "383de50023906861e45b9d6330962e89513aac0448a06af36057d4266ac1657fc49f650dfc9d3709f5f50879e6912ea93246225651412e8c919fe3ce0eb77f58";
+  sha512.doc = "bb0682378d96bef60480b8155d1725b21c89c5be04ad1a6dc108da871d8e25001be0d696cbe806cd7e4d69a9005a54f71d601fd67e322f22dcb17d0dc6addfea";
+  sha512.source = "fa24b5a7daf996b05384537fe90a17204b299d5fd837cdafef3bb338e9a9c06b3eae369271ffe3d090cadfcbf4d4b3979ad17aef908aab374b5d1c0465952c1e";
+  hasRunfiles = true;
+  version = "0.6";
+};
+"auto-pst-pdf-lua" = {
+  stripPrefix = 0;
+  sha512.run = "db12bf66e8c4c16de2ecf3caff64deb38eb1c163baac66d0dded1f540d817da4bbb9309620b4ad60000f48319c2b8236ae8ac7a0774bf297d731a0258d4be3d3";
+  sha512.doc = "b21755948a9a272611d91622fe8e641f485e1ff4ebab4053331431e229b04796895ca9329e2b69921a9fe1f8624f7a635bbed7ab4699fc6aff819d351bce95b9";
+  hasRunfiles = true;
+  version = "0.03";
+};
+"autoaligne" = {
+  stripPrefix = 0;
+  sha512.run = "10c1b6b8973bc451d38f1051715d7f6efe8acc7420b954aae657bae10254d6919fc7e3d605ebc90e525a7cfa56f082a966bad600c54e50070f1c3fae2bec38fd";
+  sha512.doc = "c0a1f2514d80e153b74efa94918c70cc16638d68c6b6e1ae4df8f765e13bc55218a1b7eed289f6dafba440ab7c5ef6cf1b6a728f8df161b21c9951894e83b949";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"autoarea" = {
+  stripPrefix = 0;
+  sha512.run = "81a6e2d2c241056cdb5ca7e54b33b523aa3bebe08d83e3418080659d316720a6bdcbb63d82c337175e6f0591a81ea322289333c5b8f125360c5ed4ae99843c4d";
+  sha512.doc = "8b3cb3def1945ae63b7d29614b868d07c64fba6ef50e266f92e3f1de1aa536084f5af5ff095bd467ef83d33701f780dcaed8a7d1c60dc68dcb5323444158b3b3";
+  hasRunfiles = true;
+  version = "0.3a";
+};
+"autobreak" = {
+  stripPrefix = 0;
+  sha512.run = "91cc17692654270bba9536ea9186ffea2e7e9a6e9dbf0ffcd9821c8b3ec470ea3222af2a1df05d85e47d65fc1737cf2dbeba150641355bf826e5ad2da90db059";
+  sha512.doc = "0d06f75e6f4fb254463ee2a075d106c14a06c5f7fc25b5047fbeec0e48ca9faf6e136f098312811329db1da5f9fffb6dfd45abe6eea9ecf682f4fe99f0384178";
+  sha512.source = "7120382c7974acccf1a49548ad8e654b945ae2ecfb858b37ca871fb7b5b054d8554c971a86c511d03e2ffa91e5cbc6d61cc743da51b0a9de705f74c0b9c2c7c1";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"automata" = {
+  stripPrefix = 0;
+  sha512.run = "09026f967084d5f1804a32166e854ac410a768f6b4654d9ea9bb69dd29acb8a3199919daa1fd6dd48963ea5d6454b9b9d8263939e5af81a8f07f66f08b5f4835";
+  sha512.doc = "49c6515e979a87ce270d32b367c5800acffa4b638a8bed3e20f3e74387c2e7ee4ae0c2ea8b232e2ae57d0d0a730424d18911835581c0c274732f3d36f650693b";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"autonum" = {
+  stripPrefix = 0;
+  sha512.run = "3a663a53b4b4b53515978460dae1ac275cc4e3e6981b008c78b875e3e47af8abd950cb35f6e416ab02507e498bd75d6f4a775e2b429d668d02ebaa4bfdd03f25";
+  sha512.doc = "2d0c515fac8afb219aaa1ee270b30bac09bcc310afcad71ff6ad2a3448187733718c03c304c09a0d631595d36043dc3eb0b6849fce0e4c3bf7f5d249b15c99c2";
+  sha512.source = "5c20017e3008ea726979ca70272923d9c62a5c36367fdcdf9d62e141f4822201e2cd36a9b4c58a6591568669daca65d17cbb78e5382c01ad4d624da7074f4010";
+  hasRunfiles = true;
+  version = "0.3.11";
+};
+"autopdf" = {
+  stripPrefix = 0;
+  sha512.run = "f855fbe477986356d34360876a4a6613638255e234ad0210cb035a1f3a9b9b827ea140654e2001aa29ac09d7b8addf8f872d34bdb4d1700ead2f6e6f083cb2a6";
+  sha512.doc = "d2c2ecf193f03f4f568d2304128e50f5cb5964a6c0a2ca8b739c59b9d3e80637134b5ca91e1b5c1971db11eb54a086b3eb888b6984050dbffa22a166c6757e39";
+  sha512.source = "fdec2bf2079746f67f3ffb790eb2e10a7dc884fbf68b2c1a6ec9c67ad0ed411d9ff87baa89fc11dfbf9172bfcd81b411d8aa223c209def4fda6c91a4a9d32ed6";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"autosp" = {
+  sha512.run = "dbf678612287af08bf9262467033c6aa69f6114886b3e681715f91abe232466a87d32a571b3d5261c31a4f07c9999a63ad08649691a7620702b9994845f2a386";
+  sha512.doc = "354d5a8d1cc6ef32b821e84957c9e19b4567495cf5cec72bfd25df2bf6bbbde0c6abadb3034edb356ccc758f28beef0198e112f5dc48ab731c5f26fec3f4e671";
+};
+"avantgar" = {
+  stripPrefix = 0;
+  sha512.run = "cf5f4701305bcfe2dcb2c92d43fbf2d0ab3b027b2c9b772926216094532e935cec234866f43135e7e050068679d0b1de5a11833696fd103ddae949458cd03044";
+  hasRunfiles = true;
+};
+"avremu" = {
+  stripPrefix = 0;
+  sha512.run = "2541e80c0dd798675164cace381730c75268d5385883163b67230d49022f16c9ec72a77d602e8b5094db31b1d3aef2f0f71da91ed2f7eb7fe1039117f7488cf3";
+  sha512.doc = "12c97e23dc853a971b27258a7666753d019620e832a06b10a49a26f0f30d7c6fde83c0e328e1579b62376f2e9cd10b0b3950fd6c4ca89041a988fedd4c604acb";
+  sha512.source = "1d6a7f16cacd937490ae5e7416f43f4f9eafbf053f6e35d498a26b8d4092ffe79740a12d96503ee5636c4d1d8b3bd02653b4839b957cb91cca672914bbe98899";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"awesomebox" = {
+  stripPrefix = 0;
+  sha512.run = "f8b841701beb248ecdc636756d954420b879028db1754319cf13a975313e7832e5393afc76f2edea579c6f38ba4a8fe779edcbf7f1442d7f179dbef9b1feb1ab";
+  sha512.doc = "cb0a6e98faf307cd718b4c7409f3aa75d30a781b1a299d32c781b3b6906d6a74399c7a04d41ea421a5cb3def06d963d8fc87d841ae199e7e86dc2f1360e4e48f";
+  hasRunfiles = true;
+  version = "0.6";
+};
+"axodraw2" = {
+  sha512.run = "085aa45989c7a452f64d3999e94806fa01120aef36e5a97d133f65e56eb0348aee3b75a871bd5ac460df47e4d77de3db930512a833da4ffda6722a314ff51f86";
+  sha512.doc = "b30b2fa595920e28c0b25ac69f4d91b724bc12059bc10450cb8f5d87cfedc19ac6d0f0177d5c97d42509c5db016202910a34de5c0c30cc9f148b5407ca9ad23c";
+  sha512.source = "0680c1e0bf7818b59c9ee9ad0eb25c41abbe82ecce334486dd2f960f1dd1f5edae2e509ffe0a29d66aba961c062ebd257ac9fd03fbc37289540c1bbc809e343e";
+  hasRunfiles = true;
+  version = "2.1.1b";
+};
+"b1encoding" = {
+  stripPrefix = 0;
+  sha512.run = "b33280f64e37f300c92f9bad4372c13dd34e3dbe5fe47f2dc9fe0e270f33eaf5bedf9485293a74a6e0eb87b65f44fb66a286fb279a3d2c390c463e6aecfacb57";
+  sha512.doc = "4bfac8bf2a00dc61a007c10654cb7fe539c111170127934cd3a64ecea9ceed3fd04ac249cbd645d89400bef6f4a3527d1db04baa88eab88eceee2edd48e64393";
+  sha512.source = "7368dec012e7dd9fd948856aa0b901be48a5800dec417a1511510e184e7543ae9d76acf46a12ea956b1b27367b41309923ce5ed3bdb320399572f5dde737543c";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"babel" = {
+  stripPrefix = 0;
+  sha512.run = "39ddba69866680f14de203c60d16809efe3900a9318d61a8b77ff75ddd20ea0ef3e058077a6e24edd72688bc92d8844ec681ffeed025ffd6d3815932e3c04709";
+  sha512.doc = "a5bc5e6f8fb3edd0e54ae0cd64223a06f9b5be7870c60b19851ba330e8066dc244560e95db509bc26a79f61a79355e4f89e635a98507f6ca47515ac718afbcc2";
+  sha512.source = "6bc89db2e3382b8a5e79936c7ea2fe5380db8442066afea4541e250ec2ddb0ca46283257652c1f6fac4eb0ad2e6c37ecae9236374c5d01c68cc0c2dd31809336";
+  hasRunfiles = true;
+  version = "3.34";
+};
+"babel-albanian" = {
+  stripPrefix = 0;
+  sha512.run = "55231eb303d7a2549d21e2d3bba9cb784e95cb99edc29a84212539ce04eb27261078437b8902419e85c69e2a8d7e6fba7abcb86e7b6448b4ab139de60cb77d87";
+  sha512.doc = "12afde1de6174c7aee0dcafa4c6df472c0096373a09726c5d4223d082b53b558185b3b48d1ab3204d03c4a89c5f5f2293136fae671c2f2913ea72109c3f58e19";
+  sha512.source = "95c1550b76ca8ecf4dea6495b644b550dc2feb45cc3d3c597c94236e6d3f86a3a42da7bcc7b77b4ee6597d167da33a571da16f5f7e35fd4666ea708a86c490ea";
+  hasRunfiles = true;
+  version = "1.0c";
+};
+"babel-azerbaijani" = {
+  stripPrefix = 0;
+  sha512.run = "3f20954607195d4804b4bd90d7fe5baa209d5ffac6dfbe5f758306bb7c8aedd1c4c92675f5dce7f634e7ceb2b65e9c3ead0ebfef730bfe2dbd8c0ba17d3079b0";
+  sha512.doc = "bfd4434720b9676e253f69144aac9a07d6bd19e3a4418ae74269df70085391444ac46556928f131a14e85b87211fd76521b67a457e7319eedd3781a215efd962";
+  sha512.source = "b3eb9fdbc08643706a2dfa50daaf27a687c593900a972f89029aeebe08e2a1c4fbea08a848224b198ba447d3ad3a62459aeb9db2c00a0f3f039a16c863ebaf0d";
+  hasRunfiles = true;
+  version = "1.0a";
+};
+"babel-basque" = {
+  stripPrefix = 0;
+  sha512.run = "40079f02225f81c8838aee6179548f3fcb773fa8e031e07f30df761f298b9980e3a4357a8013bd7802c688a192cd9ef2102be1b6e8e1f3efcd68769a9e5a5a2a";
+  sha512.doc = "e6342328d62cb0232d38e10b3b38cd4d75c55a5d31d702c167099a2bd4122e40c5e3cac8a9c2940a9f9893d7aa2594b8322cf469924b97e903cab970dee81c6c";
+  sha512.source = "1c924232920a969fa48e6d61bcdfc5150cd1afcef6d98cdd27fbe2e0acb5b7749d2b2dea77db88125128b380f2b4ccca4d49d1d140f2e96880e0daf2d09c2d50";
+  hasRunfiles = true;
+  version = "1.0f";
+};
+"babel-belarusian" = {
+  stripPrefix = 0;
+  sha512.run = "5856582f8bf6a98a4fbd560bfca82ccb226267e249f0caf8afc775875d50ec204ea613320534a63062dffd0e050905adb24763a95fec2ef4e8faed70a400d976";
+  sha512.doc = "247d5a3b99cd5a377534a94fedf47f6710d32d875d3208b1516fdc9acafee70a14ef1dc37600f9da53f806323d0519ebb2c4e288e471363756b7b819751373c8";
+  sha512.source = "82262f7775c22a908161a7a2d65caa8662c62ad759db792a6718dba043804b7aac523a8f3eab2dbdc3882a88c55bb641b862f3f19e9c4d3ba1a0f4298db9833e";
+  hasRunfiles = true;
+  version = "1.5";
+};
+"babel-bosnian" = {
+  stripPrefix = 0;
+  sha512.run = "bef1defaacf5232bf9cce6c1a9956c9a42d35a2c2b6ddccbcca3938386f4f4a61a0cbcba74b930dfad18ed211374c3667120c6706ebf097c56ec3c5915ccdff2";
+  sha512.doc = "84238e6b38021582de93e9fe934bf608e647c9b4cc0a066b4fbdd2ba98c8e6531b653907f9bcfb79e6afc9074b4a079b5e419db25625d40a76a8ca8e55e81ab1";
+  sha512.source = "dfc18e55b30620e27cb8809259a6b4790b94cb98b334a69cd48f66c25696e2df8d38dc5a1d402ae8464ced727752d96d8b5abf18522c8bbde4ce1f6f8ad73c92";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"babel-breton" = {
+  stripPrefix = 0;
+  sha512.run = "bbcfa22674ca1d4a8e23f179480f9e94a50d5b460b8b0d27365c9166adc02a191253ef2d61d6f5eaf5bc61e73faf5d307378898f1d6b1b748448bbd8a36ea141";
+  sha512.doc = "3b47653b26901dd4aba1395c61c9dc01d43ed490c70ca04ba7d1cc67ba7b23b658db32b7a5fef085b236a68bcd009dc5cc5687e3dc2dc8d246ab2ccb8d391b42";
+  sha512.source = "8f381a3955780617f9738b008e6f4490632a67c70f16d4855f15ca59981dadaf72f7f15cebe10a121bcbb894006c738ca1872fbe33bb256c8145b22254236b67";
+  hasRunfiles = true;
+  version = "1.0h";
+};
+"babel-bulgarian" = {
+  stripPrefix = 0;
+  sha512.run = "0c838e5c5cd010fddaec385376f9eb5fb10730e918dd28f58987f855a444d91ed2e66c0de46c74637d134d72f7e348e538836df33f6255a14ed51d0e8d5e8a3e";
+  sha512.doc = "4dcd92a2088e737972f0663fe5161883cae901dc82aafd1bd33f2d80a852fb51d6229c95cc655826bd17599a7152b8a7bf0031eb046530a135e8bc5c9c74b2dd";
+  sha512.source = "047f69cbdedea9070a002782e8d1b893aae71adaa2e637df560ab8a176308faf8d1b8b52afda8f38f264783077a227176eacace9484ccc0af2a4a7615460c7a2";
+  hasRunfiles = true;
+  version = "1.2g";
+};
+"babel-catalan" = {
+  stripPrefix = 0;
+  sha512.run = "728d847331f1a00766cfc2818691516234b153182f31ad2da024ec3194cc384a41ca89cc67ce66447191188dfe088d1dc4c8af3b2e6952931ec7eb58737c4bca";
+  sha512.doc = "3184373d85b1e9bd76588318372ced328d2ce7f6d4f45bc5634671a88314d1ed18cedd968e59dd5203b4d77e6d3576f36a654b1a8bbdaa106d47cbdfb825e452";
+  sha512.source = "ef15d0aca46af936141fa2d47c6b794ce85f2c3fc9adf18b5ca4b0267292f24d1c02121d5189f7cc9db98e0ab22a5d4ec2febc32b2bec5c3c5923598e869878c";
+  hasRunfiles = true;
+  version = "2.2p";
+};
+"babel-croatian" = {
+  stripPrefix = 0;
+  sha512.run = "b5724a84cd180e9de79136ced8bd38717dcb4e932dbba4e20fc071ba9f50fb35cebe83d4a95ec6e8ef0e09a02732cbdc8b1a71715c8a5967393f54087ba4a807";
+  sha512.doc = "d5e40e95037c3035589b093037c563b3737e061369f27ff5c51d620e0655dd075f413b91434591e2130849d641c1ac59469db46be1d8b0761075424c468668d2";
+  sha512.source = "fdd4efb6d24bc9560e14f9e02d231ac636f2f69249d7dea9c07b337f0d5617c754bbc9087bda5cf1f2da6178807e46f015658b3fc2d04ddd5749dc2643ef4ed0";
+  hasRunfiles = true;
+  version = "1.3l";
+};
+"babel-czech" = {
+  stripPrefix = 0;
+  sha512.run = "0cc0f07fafefa6d7ea1ae1b2ce143dbec124fe96b36221f1b5a847fd0b789d1974b5990ebd93b8ac0607f63956948bede25c7e690784ca7e9638f48139585a32";
+  sha512.doc = "1575fbe0d70725e975cdb0c1c5ca685985d91f23e4a997af4a0db21905ac34962f69653ffe4084065bda70cfbba0f0a1f0885d3afc19e98d0045ebb68cb545c3";
+  sha512.source = "1cbc5de700e32ac2600a50a85f6437b7bada601734753a8ea62b845f7500880195625e827be41e277d76137ca3dac05b230e64e0edcf1807cae2079feceff8a0";
+  hasRunfiles = true;
+  version = "3.1a";
+};
+"babel-danish" = {
+  stripPrefix = 0;
+  sha512.run = "03bc05d7e6d59ffbb6191cc392294007bf4f1b6f758aceeedb8dddfe9aefadde3e7904d7aa0834ecdf6dbae732057ed0523b24ca20dfa594e02ee8857c94cd3a";
+  sha512.doc = "b85445b348bd65abb4c7df530e20b93c5cc86f2ce25f0306aef3d32b585ce8ad8d5b16007bede46be535ac0737546f453c1241a225b31a9216ae25482360b2cf";
+  sha512.source = "0556cb121d06313ea2c1f84a98ea89e75d8bc0fe2a8dcbee98deff446ddf187833af6ee2634483f25a721142078ea889bf065996171617cc95ce28a8a5083b81";
+  hasRunfiles = true;
+  version = "1.3r";
+};
+"babel-dutch" = {
+  stripPrefix = 0;
+  sha512.run = "3f967688c9124502243589b666e1e3af500329782cdad8da5225eb3fe6a50262c2287be02d6d6ec04f3ce81a6767b4d2821179cbf04dcea4c20001e8ea1a9f5c";
+  sha512.doc = "5591a30a32ac2900266d4dd642481a5c9e7bac1062fcf5557ad4acf93cad0e36020c75e081b63680c0c96ff580a2156fded920e394a9c5c685cbb152e8d4142f";
+  sha512.source = "98c412d7a2a776286fb3f78faa49da6dedab2d3ec80b5f722a20eb34fec53768ba4000debc952df3241661f1f86b7035d7e71f712be3fff91f13608dd0fcf87c";
+  hasRunfiles = true;
+  version = "3.8i";
+};
+"babel-english" = {
+  stripPrefix = 0;
+  sha512.run = "f570d2aae8a97ba0762fc1eab75dad1f17c4ac582a351ffeb8e56a136b789a38b7a6519247ba5981385f1a093101542942b3bd073a5097336392929ed40c9e39";
+  sha512.doc = "77d6b482407ff24095b1076673316744374e66bdbdd7ebb767ec66ccdccd6ed5bb27ecfd0796eee210f1a888c82ad2eb4b9d2142c427bff137bd139c4cc53ec3";
+  sha512.source = "ce636f5cca9aa33ad7414432fcc46fbf1873c4b1576cae8c04b8cf15381f4b6ea54e0621f297114f302ae172752282daedc0b59c15393e1071f8542ad3baf628";
+  hasRunfiles = true;
+  version = "3.3r";
+};
+"babel-esperanto" = {
+  stripPrefix = 0;
+  sha512.run = "0c3be27d02d4c3157f2b0df0950e0814db3ffbdb2553d2c0f176893f3669123a9130874e93edcfd86480b785bbbfda35f9246dac3b4a0779da51387b0bf12ee8";
+  sha512.doc = "166c1b59511b5a01cac11b5cd76c84cfa485c2674b390a167ff165bec1326709437ee843f664fd4ac9e61338481df9e7f3026189f7c29c71778dbd1df98cd35f";
+  sha512.source = "f2fcef5841400c521415c870ae1641549eb702944ebd404b96ff9d5b52ee9c2d484662a50d9b410f62e74580f37fdbd269b3650cee0572b3096e4b0365787d4b";
+  hasRunfiles = true;
+  version = "1.4t";
+};
+"babel-estonian" = {
+  stripPrefix = 0;
+  sha512.run = "03357f8b0c101e5e186fa4211a971e625f6970a3129a2594a611c74b77b36a27a288d2da518d21e6e2e5d98bb82802b2115d47e31e6258f01c003be854090baf";
+  sha512.doc = "ca732f4b6ccb9ae27f99aaabc99037d9f3d04bc170b9a8bb189a81b6bc9f55fd757c5755bf51ff423850f6b45c88a5645f75a462fc9d9e9b989fa04c1a2cc7c1";
+  sha512.source = "47e8d53d379ec383400e618873d800bbb6dcd8eea7807e31173110d5d7492f52cd4808a288e53534a2de578c43a5ee4eceef690bfcd56cc11e863919f86ee8af";
+  hasRunfiles = true;
+  version = "1.1a";
+};
+"babel-finnish" = {
+  stripPrefix = 0;
+  sha512.run = "b39de5e94debff30a9f3a0b0b1d27cdc75e7479ad3f37ba73769226e9e2b1883bf272c3dc87044f6c2b97c80a7c049aee64458a78c289f01470ee4a6ecec0d59";
+  sha512.doc = "52fca9282d4070cc451eff247b0743b576dc7ef2553952863aeaf04c01f876d72e0062857690b1d62f1e3ed17918b64b125b96df82f2fc05ae695dcb4788146a";
+  sha512.source = "c8b07de49127f766659f5842d211cef3830ea3f92d8703fd482c713993f924ed0171864f055ae526bed407059733295fe9741646228cece4516bdf49ad4622d7";
+  hasRunfiles = true;
+  version = "1.3q";
+};
+"babel-french" = {
+  stripPrefix = 0;
+  sha512.run = "f8fbcf377cc0e66b0fad4f5b2123a8d3931ee3c0d46ed1d23435c00508fa26f4e24b29eeacacdee2c4468b412346a48fd5684fb2e9a8d1b90cd451f2ec6cc8be";
+  sha512.doc = "69f19350e4929d5acf87be0241776612ed784f5493ece6dbd701ff1ebadc2208c11353ee773c38592e084b6f1e709b3b39c3c53fbaed737581eb27d553e174d9";
+  sha512.source = "544cc799881b56a6623eb64e0856d6f5b9d1a005fe6add8ce7752924616539b1045595c079b80e3b3b3f19bbdef726420f765f51511354fc61098d2c3fc8d63d";
+  hasRunfiles = true;
+  version = "3.5f";
+};
+"babel-friulan" = {
+  stripPrefix = 0;
+  sha512.run = "e6210dc473c3d71759f2faf1558df2d6a7c646485d85cf0113074fb68eaef23b2e44eb88c9fd35a7a7929b408d6574f7230852643366bccd29afee744e0b2d07";
+  sha512.doc = "0ce539cb0b6cc7af830c7413545f411e1291491fb26ad0451e7caf1346da9ab188a457e3292efe9724070e77f67e46e06293dbfb40b78a1328112b04d4a1fd77";
+  sha512.source = "1e7e241350d499bd0bf28b1c190b3c73e20d02be12612905305ad53cead422e8ea1b6b0dd633190170d7ab2ac2802559693597a8c6ae8527a7fe83af7cc61463";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"babel-galician" = {
+  stripPrefix = 0;
+  sha512.run = "1c8aef52e0eaba8a55e6c0bdaca4ef47012012a85d38ed268207227063d042f2f0b2cbafa3d1e4d71432e3ea6effd2a781ab0aefc536276de36a95d0dc834b68";
+  sha512.doc = "a60ed8ffc43cb56aeafab8d09e8235eea9482ff8cdabc00da68938d980b20a7067da3286fa8ce19eddf9276b51e78dd944545cb8bb891bc13c31cffbab39544e";
+  sha512.source = "aef01bd2587b5a452874e67c52bb4adbd89c5203bbe9a338e85449831434cbcd58415afd3d31d6e315eb91dff955750753bdc9cd38e87e3aded5350a350df547";
+  hasRunfiles = true;
+  version = "4.3c";
+};
+"babel-georgian" = {
+  stripPrefix = 0;
+  sha512.run = "07adf0a76fb15951db5dd01a0a1595aa9c8119d6e39e94eb36ac340932f763975abe284d738a52a1fa2a938a14f87fe7ede10758529c3f68c6d573dbccbcbc82";
+  sha512.doc = "b2f45e828e32fef5e4ac130230050f035ec69607c97562a835ef2157ccc6673d4ae452624d2d1aded3552eb71d85d971a7e35d9774ad7b6e4ca7a8e0a71e48c1";
+  hasRunfiles = true;
+  version = "2.2";
+};
+"babel-german" = {
+  stripPrefix = 0;
+  sha512.run = "2aa32e3cd0deb815a559e1722cb2ee423d605449af766a8b7c36c67a0e9081fa0402b88ef5c171186d353a8a57d0ae630fd7eedca1d795bd8130189bf05ab2f3";
+  sha512.doc = "fcee15f9b0123fd6c5cac11143f6ade9e770f4a3dab07e45bd5cebb30e020be58bb9e43cafee6b4dbc96f8037a84012f900eb33836f7e48607c5424ebfa61947";
+  sha512.source = "a1fc8b8134042079b7cf5d2497b7802397ab7fd43dc354a7bd9ef3c9a9cc3e2e6f84cdb193653d0147fcbe9a6859e9ddb2aff7f5e25093771c7ce76024eb0b7a";
+  hasRunfiles = true;
+  version = "2.11";
+};
+"babel-greek" = {
+  stripPrefix = 0;
+  sha512.run = "4b4cb6cc75cd7ff896a2881402809b253e8720140ff80b0cfdb85f6cebd3cbe9b095d7fc277574525d3601f9aa3c1546940ecab65bb85ef216667b4e42e1aa46";
+  sha512.doc = "cae49d0afd7db0191581189d0613ca0fd1bf906e81232ea4b0ec1db9b90bdd7c724833ad4ba72ed193b62817dad41dc62e50d4873c60f5642e97ebfb20706be2";
+  sha512.source = "80f955015d5cd62ec84c694f61525ae3eda442a00fb9d41997c465c9c8df70ef50a103aa94ea3aba51f01f35f70b4ed15e1e02a3791386d1cf506dba390ea9a0";
+  hasRunfiles = true;
+  version = "1.9h";
+};
+"babel-hebrew" = {
+  stripPrefix = 0;
+  sha512.run = "4690fc4288ba1d2142fcda24153e741a539ddc4a52d3e502c1c349feb19609c7cef1427751af24b93df191f12d2b7cf2d11423052193df01d848987e66744dab";
+  sha512.doc = "cd4b52bb2d207cb2bcd327e2351bf30d18921c7c4f8a8fa79ce0bf8864d6f6a34e2272fd416828c772abb2df5612b4a78f73f54157b6d69b011c008495b93cd5";
+  sha512.source = "6d380ba803ecb1f6f268ebd2f80da0eca87c7f25d3374ba0a0432f9de6d39632613fb49e108ac9b7d97438b589dc71c37b47927b7387bad8809175355aeabbc6";
+  hasRunfiles = true;
+  version = "2.3h";
+};
+"babel-hungarian" = {
+  stripPrefix = 0;
+  sha512.run = "5b05fe625155df3a958eaf44dc55190fff60ef356d40e681870ff27adbeaef1dd2b27402d9058d27dec665dbe9127d43a2e07ad02ef5a546c2e77479453678b2";
+  sha512.doc = "696cff23cc5e2c32034729385c251c8dbeb5f78d11c0f8a0515af480f7a9b5fc5fa6c07d216c5078d5f1c4e71cabe093f023f294dbebb6b203337da9423a438c";
+  hasRunfiles = true;
+  version = "1.5c";
+};
+"babel-icelandic" = {
+  stripPrefix = 0;
+  sha512.run = "46aca093e061948272d2a54ff9f95b94b101582f0ec9d795668983c37b518be3c3d76d2c8e6901126d3dd7342db003589bacce9a40cfd573263a953bbedbfc48";
+  sha512.doc = "bc859f01f52ad51da7df9d458e507b62eb69e40e1dc39362ff32ea8ee8890acce8ce49120fce967f321c9d674f4334c62c9bf2b3f8017288b724ecfe3943d667";
+  sha512.source = "cff6e1ef260bd61b6b098b449fc5dcfe5c708a36d9e5df679d21e5d84a62fbe298fd6581d9c6a79829df55809b2b12f6bdefe4367df05ac50830fa01d8c73dff";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"babel-indonesian" = {
+  stripPrefix = 0;
+  sha512.run = "9e42cb144d53dc0a076afffdbcd2adb7bb55cbc58feb77916e02beebfd1833fa308a0c78d0c26e1d187386b60572381c881da083c73ac8fcc651e77af17e2093";
+  sha512.doc = "c4f86b646d67ce4b29e96771ea5657e352ee7633c344f24552a2fde4c387aea41f9694d77114a1454b106646d12d30b277fc9de589d3d4b666b00208978f5bb9";
+  sha512.source = "30a1b987fee18a002316bb51e3497d22696e83ed48cb4a6e40da2f82876cd2ffc5b4ab95a0c1cef8a62f3d0a610401bf6552d5080dad3a9d0c45d4fca53dfe7b";
+  hasRunfiles = true;
+  version = "1.0m";
+};
+"babel-interlingua" = {
+  stripPrefix = 0;
+  sha512.run = "e562cdb5b7cc35d14f4696cd3b85c6578a4daaf7899bf684026e50ade2113ee2314405756dd5f6ab91b6faea4da59a3546e30a18ba77037eab581ae3c98b044d";
+  sha512.doc = "f2f86fcb4a132a9c1f5c65007c8f1662a8498a53f265cc778ad3ba33120a97317aac890c1ff72cc6b94727d215937352ae268cf51344053bec6e0ee5687d0f69";
+  sha512.source = "260b2b01ec451d2a37e00e83c79a09f359a3e4a7c34b1396892259442a3f9d2df683e74e6f14a5cbb9b797f8cdc24d0bfdc7f9c3dbe124eb901f43d393f5e1bf";
+  hasRunfiles = true;
+  version = "1.6";
+};
+"babel-irish" = {
+  stripPrefix = 0;
+  sha512.run = "d9b1486da57f9685e136e14adc61773ec0b3a58ade370da8383476862ad798f26609329d445ee6dd0c6419c98342b720a6880939324d19f67e1528fe99ea3692";
+  sha512.doc = "f5dd55c6a527cf19eebe492271d1404be3c995cac004d41160522c6c71e4a4636c32547fd64b93beae41b60d8a48184ff9b498f82ca0453bc72b601de3d66cee";
+  sha512.source = "df023dd1a4b04e022f46f7202b616e6329b4673084876c1afaadd41faf4414e908411deda1ab909246ea7e1922c46b0a70b5e3e3fbc6c4855e060d47e45ca21e";
+  hasRunfiles = true;
+  version = "1.0h";
+};
+"babel-italian" = {
+  stripPrefix = 0;
+  sha512.run = "5950227b917860a1954b8050ce2949cf5decb0340abd1bad36464a73f84f0a0f86ca7f81c2c412b90a3d7b12a9355d383391bc2eae6ceaaee9328dc4b46252c3";
+  sha512.doc = "5be388f15aa9a2a84e9770f1be49c6b2cc1e0539d5ad9149ce02eb7154253292105d10f83ef291b30c079b0fd29aed53394ebb9270cb7326a0e94014aa0e9403";
+  sha512.source = "5256bf88ae2bd3160cc1b11a757e0541e0dc5be05e6a0033ab5b4471d75845265921a2771320f397f957ec4f77882577bb23bafa1b91eeca74af7ff9570b3857";
+  hasRunfiles = true;
+  version = "1.4.01";
+};
+"babel-japanese" = {
+  stripPrefix = 0;
+  sha512.run = "eeab94dee49061fabb116702c1cdd0c6ff11eb61994c4bc20bc2147329411c42f5db7faae78141ca53380c308f8b310f592abbbc77d67654270b6b1d72ca5cca";
+  sha512.doc = "152a3c6d723dc8bcbc046275993b207103e12ab551216e87aa999c2c912acf2ba7e1bd54b0a1c8099940c62f564a268da04372ee559da7a7c56b6e0a32e29b4f";
+  sha512.source = "04bec4bd09f46c0c6e25a0f59ce2435a5d5fe222268616b02314ef091315e3bdb882381890fd304c07d5398e95e217aac46b47734fc9e6efbb32649c9f974cf2";
+  hasRunfiles = true;
+  version = "2.2";
+};
+"babel-kurmanji" = {
+  stripPrefix = 0;
+  sha512.run = "bbdd05e7106494f23892f3455ad224d3deb1881f5a73720e2c73e7401514fed324484416def64e2e8fd7c2416b521fb2d4527585d2302a220330925c296afecb";
+  sha512.doc = "c31f7efd7415f3439635b293c9aad2cfc2632352534e579c0f8d3e74443fb7aa88a95e19735a7b65137d81899ad9d2ad8bbdb28c5da2ff05a2be9dbad552b0f8";
+  sha512.source = "88f600cac9509695c36969ee2bb2041142dee729381a1ffa49489f32454e4c53b4d1795407436df9c31da040cc1d0c7e38077fc786e5cd6832ab9ccd14453d2c";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"babel-latin" = {
+  stripPrefix = 0;
+  sha512.run = "56ede1f441e96e3f17c165de65a7703c8e8897c17ef775fef1e30e1d2382eee0738ba91c97717694edc7e932ee0dbbfd1600d16ff86d6bbea1ccd5cfcec82ed2";
+  sha512.doc = "6dc352b57346f0caaebc0832d12a9c1f13743e5cc39285b4d81edc23cd5f21692165040becf4ec12ca6d1acf6c19f1b2ab1da8d79e3e82ccc2dc865322bfaacb";
+  sha512.source = "9f04205ee8e5c18a0ec6e20fdd7ab0d89d4e1ea28d5c3ad819ca9d09358466215b4d0c2b18d77ba5cca604b3997814ce39b33fe7f438b5b554500b5f4edd783a";
+  hasRunfiles = true;
+  version = "3.5";
+};
+"babel-latvian" = {
+  stripPrefix = 0;
+  sha512.run = "0e19f04d81195b77ae200946e5502fccfaedca5a6da8080a0e7351b684c7d1802a1d9d05794006561109dc8f9a0c04f45266e74068157caa9c470899cbec5230";
+  sha512.doc = "e7c4f93db73431708eb902af924672727a6dc6d1cc9d17ca92436cea51310a10538f32825c13144ac35ec8633fc146d1788492f9c6ecf7b11ed72893ab6393fb";
+  sha512.source = "ce0c59467b4cf94857bd0713283f46aa5c64987f5a4c68536566b98693b93e61ead42049a2ca323eab3b2b9842623f1318f2c27ab4a28d3e4660b8edffd988c0";
+  hasRunfiles = true;
+  version = "2.0b";
+};
+"babel-macedonian" = {
+  stripPrefix = 0;
+  sha512.run = "c061ca1ec358e4d8df05e0adadd5d87695cf3b9f86cab52eaa0e08b1f5b1fedb66febe32107e74c1926fa4d697b056d7d3f119db525b90ff7e7bde30fd015508";
+  sha512.doc = "7284141fbecedad06cfef78f50b4c13ebb3af76ced474c456a364c97943b51b9a233ecf6797e561ab0936ef7d082adc80daea0de4e961baab60e494bd72f7061";
+  sha512.source = "c5866f925540742391981848fb5a76908863fba8a7c77da97b6e6bc634a8425c2d39459f789749cd1ccc4e7888e6d0f5b40d3d9a0a76611f4b1ff2db80866c72";
+  hasRunfiles = true;
+};
+"babel-malay" = {
+  stripPrefix = 0;
+  sha512.run = "6e2f95eb95a7ffe0b21789a65e74936139d92381867e507ce56bd8eb39b4061b177c10fed0a0226e9091b963370d3c001115473625910f03b699d5517350f2da";
+  sha512.doc = "b06395639e743571870dee10e029e4622c55683d7a9d728fff381bcabe4bf694511230795c79da4080299938acf66d03cc55fd45cb8426b484e19e0fb0f73b10";
+  sha512.source = "4e7e47a29802a7369f7bdcf29ac0fec13afd69f42c9b01060ffadb2cd8d1f1656f7f6ae8fe5ced67d9ce6438c26a07743a18bd38c561fbe8357e8ea3c685a5dc";
+  hasRunfiles = true;
+  version = "1.0m";
+};
+"babel-norsk" = {
+  stripPrefix = 0;
+  sha512.run = "a57f44910dea4a1b9fc94d2705e1627fd42ef21a35737067bbebf6c56f6e4e87031b40b41d68a4f90329aa38a468a87c8c91ca60e10af2d064f502ef9e60d3a0";
+  sha512.doc = "646d8bcb3bb4b864fc9cab92a1ae264801222cc70eeae8db63be8ace926cc62918031726da9e758ebb4bc19797eea498af10437066612ff7dc3ca3c99bab4749";
+  sha512.source = "4643e3a1f3612c9966da916949e51346c7cb595ee8a2b98d585ae12e51fbf2cf23e2817b5c21575d80feaeaf399d3e1f0db6fad4d228b2b5f9a25d51ac3a7941";
+  hasRunfiles = true;
+  version = "2.0i";
+};
+"babel-occitan" = {
+  stripPrefix = 0;
+  sha512.run = "f1f2f26b5466d10e995d76f7003c202650e3976b82b431d2bae768a582bc0c5662fc120739c49fcfd1226da3595c8a6b2e8c952a491718c45e69770c09d542a9";
+  sha512.doc = "86433fa646eb6b2f7ee0ba54f1dafa73b81bd98012859c59408883cc76ec876720ef526cb2f526bd4a8385c0371f9bb01ae6d604661deabb4ec920172986adf0";
+  sha512.source = "95bd15481ed6d20f1b9b71fad9661e5a12e4f29cda61dc8910a1601fb0f97cb4797d5ecf8137c9465a623288dc05e58c84740ee5b663b1f30f1c984d4dde9b03";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"babel-piedmontese" = {
+  stripPrefix = 0;
+  sha512.run = "72fe6338ef6f172a23790402a632881906689117e7227b6f2f2fb6129fca9a7d44c42ddd48e8286252f3b5fce9dc34439594882c1f80f33557ef5ef70afe4993";
+  sha512.doc = "a2fa0cc72a205fcc25c2baeb7717a573bf8f2db5438e49c9de8a90e8da37d4f267ff30f08f8bb79f08756f5d227acddba8c069c8a5c257adf95c3afac271927f";
+  sha512.source = "6020ade081108365e4b23d9b3c9ef789e95764748d06a647a071e8ad77c945593a680c7669c57e989e71104a8bdfbf857eec9599327560e4453e0a81b9d309e8";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"babel-polish" = {
+  stripPrefix = 0;
+  sha512.run = "cfd5f27f92e75883572adce926cbcfa9d9248367979c3b3411e6ca1c2d4bf441d2fa790dfff94f0f6001c68f354628334aa0a920ee68900398879c978cf962e4";
+  sha512.doc = "6f12e4c792eda6ec33db820bf3e0c9a0fbec8f07adf413c4c98d40624cbf8d46588e16271e459eedcb37ceb2f89f13c3a9dab89122172fe2b8ee9330ab6109fe";
+  sha512.source = "19d6cd158e48666b843628d0325d0e52ebbe137d28686d8b31199e9bad1c4d3393487aa300179688af5b9f7307eea8376f8ba82ed2209efcf39abef094787d82";
+  hasRunfiles = true;
+  version = "1.2l";
+};
+"babel-portuges" = {
+  stripPrefix = 0;
+  sha512.run = "5762aed39d183575921e0a6d4210d37b5cc25e66288c3c5eba18ce5b2854de8fd440a738faec95a4ec537a3d5c9667f8f2f7d7cd30eff96531062059d90ba97d";
+  sha512.doc = "34c0d961f0cf2eba8c71a0e770d1539eb4825c50f8fd91046697d9b55fb4b45c54b98d69e82b3567faeddc1b59535d32d3d99e6ba9b10d6bb8ecd01c85ee6334";
+  sha512.source = "524f94da19dd272d73cf4ded57f7e7d450d155ea0c7dd004e572811837e4ce25e6d0d02739c11db2647956cd3df99dd26eb648a7556fcc55b70eaedc975a3dbc";
+  hasRunfiles = true;
+  version = "1.2q";
+};
+"babel-romanian" = {
+  stripPrefix = 0;
+  sha512.run = "d2aca8f17ae173c36185d6d3514b0b09f76233e44f30177a50240ef0cf0f25f85767a6fc5ee0f94e2eff0df0b94fbca08eb048e95b35a631b7d30a1fbf6c23e6";
+  sha512.doc = "876a8cd9e515ecad570ce23686b71e896fa377ce8fb4840e511430aabb05e9cb03f614167fa2abd13328d0ea7f4eebf7044a65db584b95ce4c64bd37d2602b2e";
+  sha512.source = "493834afa2339a8a63c017ca880ec07626a62b88f76688192253985bb5b254412409c1128714a2ce8a7f7a296cef6ad9ae67b32a276372c811933df8d2929e2b";
+  hasRunfiles = true;
+  version = "1.2l";
+};
+"babel-romansh" = {
+  stripPrefix = 0;
+  sha512.run = "db28e78ce4e028ead2f31fc84d0e7d8997a18dff3bf6aed0301b79bfc7bdc52a8741f9975766d36ca9ca2af9908e7e0bda9e454abf268a1eebf4693c30f5a5e8";
+  sha512.doc = "42f9b63d92e522b596839d10c1b90ee9052cac86cdd54ac408063c24456b2a7b5adbfc8208a0a388fcffbb19b98ae0810f7da9d6bc517ddeeab78c8389bdd5a7";
+  sha512.source = "e26e9ec260d7f01550799f90c6bb76c0c29cd200896c4634085627599f5c3d7438159ea9f72df416e334200a7e1aa3f063dfe9bac5817f55c8f6cc83fe906a63";
+  hasRunfiles = true;
+};
+"babel-russian" = {
+  stripPrefix = 0;
+  sha512.run = "6072d24abd098a037a97c9bc139db9454e363b35ab1b84f2641684aa0e95ab3747068a715522e2716cc1dfcd129404f038aa5829054abc29102306e84cb27070";
+  sha512.doc = "702b72058f3142b8e5c2d1e752ef46622f688bbe42a7afc3e93251dd42bced6543aadc4d9ed70865d8fc7868b2c560231489e521eb63ec897068b7d712d732cf";
+  sha512.source = "307e7b28b91c02dc8287d2567eaf057597739d04a5db1ad3ccee3b190c01d5161426ab50e1849294f1222add41b322047d372115e31200588f59317b33d49c11";
+  hasRunfiles = true;
+  version = "1.3j";
+};
+"babel-samin" = {
+  stripPrefix = 0;
+  sha512.run = "8a9e832e988da76ca26d87ab54438048d3d76cf02027ac9120d1277096d2495ece671607d32182cc5f9a61032b1ec33695f6592796680aaba0b65c142aa8a43a";
+  sha512.doc = "a8d43e73b4ab86378c5e3d2b402298580dfaf19afcce509ffa8ac747d68627c21b58020dd823528073240e1a28a2178157f9752d587286a0168fc3047cacd0cd";
+  sha512.source = "2e0fe9724a55daefdc3196fc2934d3551b4e738be4d6940a25a091c173f220f2853b077e5534ac20f868954e360e547fbc7d622507d227b8cb0bf7e074e57f48";
+  hasRunfiles = true;
+  version = "1.0c";
+};
+"babel-scottish" = {
+  stripPrefix = 0;
+  sha512.run = "a2c708d9e116933fd00619fa8d89e30aecccbfe162c96eac22055bc442276863e8957481787d94a75507c2662ff4fcd13760b454d12b811dc4659205cdf5825b";
+  sha512.doc = "b32687935329933a733d239a58d7cbb7c4721c4fe37c703891547c2e6e82503235a0420890a9f025cb81a5c86148bd5ac2301da20d538781fa6f2831939c8009";
+  sha512.source = "8ec0b8a65d433f978db671a344ff22263929c96b742ab7c11c0b47eb2e2f2d652064fefb4a19cc3f91a95cf0abe3450574a3381917fbd239be1bc89d002f99e2";
+  hasRunfiles = true;
+  version = "1.0g";
+};
+"babel-serbian" = {
+  stripPrefix = 0;
+  sha512.run = "5c048c0d2e04820ebd3cd22808f3c960e43dc715d9425ad0369a47cf38086f3995b4dbca491f05a4cc1e952a1c237bc6f0af9d4758ab970de31494cd45ab264f";
+  sha512.doc = "47bacc3ece71805524b057ff53b1acfb99a84920aa0ee0a7ac2c059f2cbcbeaa1b40c99d93fd3177dcb3a5910b71679da5c0a25618d3c7222ad2718d839bc5d7";
+  sha512.source = "33aca6ddf3454dce1978348f68e64492aa5993c60ab0d8e7fc8b448c121aebf5d8b0b0038e56aa7d370e8b7d18d5c40a3043950b73a2a7fbcb989de77f9dc853";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"babel-serbianc" = {
+  stripPrefix = 0;
+  sha512.run = "bcf0ff70ccdcd6f3e74ac54ab0acd0f5d804b7d7e91c86524242fd75423be3648b09d878f001c91417b3182fdaa6ac4d4836e71668e97c1eb124df9f13b82e45";
+  sha512.doc = "a43cbfd660bf909b90cd135589285ac66bae3655d00869571fbe76cc7016b45eb9899ab76606bcaf25b065074f78baa5d698dc196d1b302d2103103bc35ed0d9";
+  sha512.source = "0eb121cc4eb9527884a39f0c8ab2977f39889f4d41439039f914a7faf7d2cee85b8b001592df2945b41c3cd2b5f2e03a1feae78db1b06c0cebdbb27f83f5a8fe";
+  hasRunfiles = true;
+  version = "3.0";
+};
+"babel-slovak" = {
+  stripPrefix = 0;
+  sha512.run = "b14b98d2cb66a3f8f5d8a313d9208a700d1c3664a5bd23f5baf0d9aa2e3acf3891a0536871988e7579020570999ea05a9dcd60a404cd6670e3c1cf8110d9094e";
+  sha512.doc = "da1d663125b913e3480ad147ac1f5c1befa00110e71bbd2d42384db03fe0f0db3133b49e26d1a336b49c10018990763d42ef49b64440c9138d9d938057ac90e0";
+  sha512.source = "1668ed3f373e58ee9a507637ed4c17638fc429a30ad6087c7f153f8fa23103c0a93c0c0beec73380d41925ef1ebf25ac214f1afc95793edad65545256e6ce5d8";
+  hasRunfiles = true;
+  version = "3.1a";
+};
+"babel-slovenian" = {
+  stripPrefix = 0;
+  sha512.run = "0293242dac7cfa3aafca92ade6b065522872ee7561d9b465d42a846121c3387e710f06e330461d9d4347c9dccb2be3885050847f8fd721a3c3dcad3ec2715ad8";
+  sha512.doc = "5e5bcc2a71e4258ccbe3f094f19c782512c70796886c94abe2254e3fc376cfbd1c13115f42da1828f16dcae4e0b95075e9510fe42879f6a116105190fcab70c1";
+  sha512.source = "5c4cc055c76d898c8bd11e061658e8f8ecf165f9571efb0340ae1a828d65eea6e071210bbbab1a15c6825e10e1a8b187ce8717e7c32a328bccb4f427cb03a493";
+  hasRunfiles = true;
+  version = "1.2i";
+};
+"babel-sorbian" = {
+  stripPrefix = 0;
+  sha512.run = "1c76a622852d0354112805a1db3b2ed6ac23656a754e2909c4bfceb0ab84db201f18d37d8c9fce527ea52fc4c2b302ff943353ec4cd5ab45da76dd4755a09be3";
+  sha512.doc = "f79448d484de1fb95394dd28c833661d6c9a686148b544fe28a60af17ffb50d36902d4b7b8b62772466d7588dfedf31e772d0ce5b32270732d0d2453dc7d0fd8";
+  sha512.source = "736c15e75d097f9475da38d80c495b28af4457736534092759750cffd2fed2ea54fbb4bcec656666f13cc2d61e82af59ea0ae665e30f73b251eb4fb35d44a8e3";
+  hasRunfiles = true;
+  version = "lower_sorbian1.0g_upper1.0k";
+};
+"babel-spanglish" = {
+  stripPrefix = 0;
+  sha512.run = "17fa7078d6bd54fff6c73677536dec46960703e14536c4a4476dc46a8586678b117e71058f665cbbf850a269cae841511807c6647251e088111262d9f2c4bef1";
+  sha512.doc = "43cf66e656d965bb80e294a5e2786b412e79eb1ac6542a4a3788fde7cc6874e168cff30676c3bfe90c5bb67dc4452769dece84508fe999529d54bde40be5a5c1";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"babel-spanish" = {
+  stripPrefix = 0;
+  sha512.run = "3a80652d28b1a80ab83c49b0694cd88a236b6420f51c084e4eb24c5ea57a3359f15a05c7cc99118b303f199703749dd724cd5ad30035b9bde7b9f95f2bd34d46";
+  sha512.doc = "8e6a424ec3caa8ff9b6d6f0695e54340dfa4fe61c4bdb46e5579ac768894f906458d594869e8d02bff9c7aeb47e75a7233367fcd6525f2a4815d211528552ebb";
+  sha512.source = "1eb97589d5495a46ca98774adc0d1e58da3a103e43ee3a38abb46708529af9a9d2414b7f81882c45b0a20bfa53114e39368c6142d2f6bbc19306d4c2249cddc8";
+  hasRunfiles = true;
+  version = "5.0p";
+};
+"babel-swedish" = {
+  stripPrefix = 0;
+  sha512.run = "46dbacd9ed25d6eba7a8f5a26a28c40f5c77cbdf4140e3a6ceac1b34a8afdc95626200ea0a6775c3f00b8aa7ae5b7772144e7ef8d0e409531b5bb74e01a90278";
+  sha512.doc = "2c3f738b347fb8a4c6dc3917c840de294f21e544ef995770099eb6d779995ba32ea1a1adc8def7a883bc983a4cf85268628e623aaff44c9be653fe55d901d452";
+  sha512.source = "44c4ae33b5d6824fddaa77142c55016473ac2b4520ba17e504854d7893c3b9fd317dd67149b4cb005311b7fd0daa86630e5ef83c903f69facbf667c993f6a59d";
+  hasRunfiles = true;
+  version = "2.3d";
+};
+"babel-thai" = {
+  stripPrefix = 0;
+  sha512.run = "4e3e5c6d8944040177a21f04e63bd40e85c24e9327eeddfe98072da38590c58523f676fd7532e4e00d0e3cc88121a2885788d606d2dc9ca02fd91c7f04a6ef57";
+  sha512.doc = "791539a57534c4870a81ec2318298b29e9e9ad925161b0a4cf52c49086a865d5b58b60da10829a5fb37e66f0d161b396beb127e586457c556875f1205fac9360";
+  sha512.source = "db43b9422d95579f9bec645671e5c0ba654ce2d7ca89c3e98b6d910f6546a30b29656aa7061d03b767aca6eb2a01b001613a8b619d597bb9053a8a0df3376b6f";
+  hasRunfiles = true;
+  version = "1.0.0";
+};
+"babel-turkish" = {
+  stripPrefix = 0;
+  sha512.run = "02916936992e00e7aa884b46b6f786dd0fe5a0aaa6e2c6c4e28fe72de7fe5260fca7cdd37efc4a775a8d172e3993c98df7cec3d1ad08f01487f7cb0c8f2d179a";
+  sha512.doc = "06931a6b9987a7affd4632ea5cc79028a2a88c584523c03ce79c2a15268947fb1103137da158886c7957e0a7c938ca69c1c5c7d88104c892cae611c914f6fb93";
+  sha512.source = "54f3c4bf5063c571be3ae2ecd7c86882cfac940ab942e66fbb18346a4ab1e266b716d276294dc6c622b3ffb0b86cdecd70411314b334be491d0ff56604d0ead0";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"babel-ukrainian" = {
+  stripPrefix = 0;
+  sha512.run = "6729384e1029580ee8ff2337508cb5998e8a385de25da4d5969341869f22f17180b03a98a403b583ac5b7a965c2a07d5c96b0aff1b93b82cdcb549b4915ceb4e";
+  sha512.doc = "f36acbe23a159e2a9547d7cd5b64d529c49a35353f5a84082a303204f8a55f088f1beb0aa75d852595768a3ad10de34763329a22e2c87c5081ce2d6fa4076309";
+  sha512.source = "110d08aa4e84718e04223e4e4745a968c2bbf3d7f453430ee02eec57a96fe952046dc9101b95f90a7de84bf6a4dbd65e8697e1980f0d85eee84233554de31370";
+  hasRunfiles = true;
+  version = "1.4c";
+};
+"babel-vietnamese" = {
+  stripPrefix = 0;
+  sha512.run = "ddb75c37017c1b0b6af2cfbdf574526cdfdce2099d599a23cc8ac819f6ebe5ea7a2eda4bd743af93d78835ca5dccb3d7fa55db22b3154862aa4affe83c28185f";
+  sha512.doc = "b078464ce848b24d692d4dded7c9827f37fdb4141b719c71e28b5ef0a827f9ea5c2137745f9689fcb89a486d4a88a94a043a62348e86b5736a68ea48c7f33e16";
+  sha512.source = "ffdf9a552fd79b1b51c0064ffef8f9dca1e618b41b0abebd2a22152e8f2bde04a9e35964250e8bd42912929d3e6d8dab6fa430ce302a1f28f27676015667d489";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"babel-welsh" = {
+  stripPrefix = 0;
+  sha512.run = "89526156517773131b5452f2cf5bf773f34b97b2e35e786f2bcd4dad512519766eded269539ada9d5c34d4b1f02d65bf55a0da0053e6bd7b7a3c66c606cfb60b";
+  sha512.doc = "cb0ff59d9c02bce3028f0025c07963d42856eb4e68f322b839ed1ea5f51abf372ea17fc695e7be4bf87f75b3d2b163f801102f469773a4474bd0d0a72a47376d";
+  sha512.source = "42c52ecdbb0b1de295800bece99804a481afffa2848a2146429b318f964e3a88dadfca9c020e9dec6bb3db1548ccfa79db3e66edf366a32fa83a1b6ba91e7fc1";
+  hasRunfiles = true;
+  version = "1.1a";
+};
+"babelbib" = {
+  stripPrefix = 0;
+  sha512.run = "70214f7a3e16c1fe4b3bfae479df63c10f9b654b34bd29abe3b4837b1a375b1a13077d0ba98e46a78ed702616bccac6aac3c70d422c85e37f462a376b2ee2589";
+  sha512.doc = "729fdb0bcc60929dffce6883db377e487a31610979d92f7be48e017a6f982298a9d113f06376bacbf2406a89fc1ce10cab86a43de3d92be8aeea7e3cb7cb9f98";
+  hasRunfiles = true;
+  version = "1.32";
+};
+"background" = {
+  stripPrefix = 0;
+  sha512.run = "e9fd9b5e680082aa3e9f0482ebe41a753088a1e61b85876a9685942172cb9d5b6c9819ac2d61e0274f988b46d4f962222ce0afeac2827630edc728125761f214";
+  sha512.doc = "518b0785e562fc6f01d6bba6cf7157c847faab151bcfe7840d5f2c9d8fc3ca54689beaa8698c92f24c196393fdbf90b027165be80e6cf07e9ee79ad8073d8533";
+  sha512.source = "36bddbbaf17dc15e72773400e75dac754a2eb60c106c7a6861226b6dd2a1955fc016810a10d5c90ff56b690be922affc0427c1cf3b5e5c1f334231bc8df69872";
+  hasRunfiles = true;
+  version = "2.1";
+};
+"backnaur" = {
+  stripPrefix = 0;
+  sha512.run = "82fe2e845a29562218dff5d685e9458f2230395fb66e73f658f137cbbcf0e423c9f91bb0ca78ee36a8e0eb4db157ebe13ac3f134dc819b1ded918ff0d1a7ee4d";
+  sha512.doc = "4d130cea9a46abbcd092d1e9fbe5d943847b207258119722d5f5ff36534cee77a1dc213938e48ad629977bb72c68de6eee2b4bf9c7afae14c10659cf1ca3f13c";
+  sha512.source = "2d4d7e0a3fc9e5a9e1dd105267b8cf1a5dd4e094413ae0dadef5fb65d9411c66f6c523c536af94888d49177d795f24b839f49238a25c2d863ef4b37e84de5135";
+  hasRunfiles = true;
+  version = "3.1";
+};
+"baekmuk" = {
+  stripPrefix = 0;
+  sha512.run = "e10fef8fcee389514d759d7b985df3e84d3459a357fc3b4b6bec5c3814aea175aa8f313ab63e6048e60cfa5fe1cb1ddc0ae0410801893ec0e7ff5eabd7283c9f";
+  sha512.doc = "0a69ee489e8ee9fea0fedd80bdbcc7a13505b5e3cc12fae3d56e09a852bc54eb0e64ba73f4c085e5286fb048114eb81aacc2aa34b27d72b4a72b966e188d78c5";
+  hasRunfiles = true;
+  version = "2.2";
+};
+"bagpipe" = {
+  stripPrefix = 0;
+  sha512.run = "7d815e23e9b5d686e0df54c4a0ad51c85360c7b3879695977fb9be2b69cb343e1c9043c2595ac5554e87e0a568b2441bd16a43b334af4b43e5302eba19bc33d8";
+  sha512.doc = "696047cc4965a06388a61232af9336f2010fdb0b869914cf66ac9b052d1efd85ff05119a277aa127cf05f56e03b63060956c7c284df78e93b0f0beabd691d33a";
+  hasRunfiles = true;
+  version = "3.02";
+};
+"bangorcsthesis" = {
+  stripPrefix = 0;
+  sha512.run = "3d8dd2648361f74ec6af8727f0895ad1e1008ce0e8612d879634b196d5e4cdadff20e33e60e27d9812d7b6fe3762026ee46139f3ade3a3a3cd5d27a941355a62";
+  sha512.doc = "97c98bb791018631b7c5bb282aa3585ae68ab1d2d81f56e1be91ad92d6dead30885c478856f59651b533590eca2f80e3596d09f0277ea6dbd6ec44b97ed64fb9";
+  sha512.source = "b48f9e854297a3effe72c3e4f5b26d1a48b5023b25691727ab6c735379a092f8a6ce1b7dee1eb87b5cdc10866591b35c83df579147d3ecf36e6a27356d50381c";
+  hasRunfiles = true;
+  version = "1.5.3";
+};
+"bangorexam" = {
+  stripPrefix = 0;
+  sha512.run = "9da594fb6d8dec3727dc5e437923c225aff392250c42566972a6998a4709e1853e6b7399ce64e8cbb7408a422631ee61229cc97001343ac8acee7d5c0fd20847";
+  sha512.doc = "576b991d414d9a8b481dd2d76a4ba74af9db70ae720d9b81f16cb2cfd887d8a09c2bd601bf7711ec77073909aa61470f2cdd7573457ea2ed25f9e316417da9ac";
+  sha512.source = "22732c47f60e2145ba850a60afc15cc926e57ff27a9234d84cf647ae83c8b783cd8023bb419f576dbba1f5e49de95416f98639440d6001525eac3cbd4fe8ab41";
+  hasRunfiles = true;
+  version = "1.4.0";
+};
+"bangtex" = {
+  stripPrefix = 0;
+  sha512.run = "e64473076f23f537a3d543aa325b159b6f7c050b626e880628bfa76a705dbbc57dd6dbc1418b4fe0124e90ec4922e90800b42d5f636ed910590fb060e119d962";
+  sha512.doc = "ccbcc6e4739001b6306dc6559f76f577310e73e515aef27ad39c08e770a9eef54a6cd162343aac83ef3530758b3d7dd4c19b1bf5718a86fd321189ea58a786f4";
+  hasRunfiles = true;
+};
+"bankstatement" = {
+  stripPrefix = 0;
+  sha512.run = "c388a06b1527fe131dd56813303ca727c035f2023b25426e8aae7387867afa0425e4f739c2698b30af97737557c068b94741dce51f8df573c29c14e4cc4f02c0";
+  sha512.doc = "5290904ce0aab9e4e098fb4625c8a0cb5c728769faef312267131eedbee937e1d964a561b2c001c38131ff93c9083db46275d693431b2447267edaae19c296f9";
+  hasRunfiles = true;
+  version = "0.9.2";
+};
+"barcodes" = {
+  stripPrefix = 0;
+  sha512.run = "e4b9f432d4464da19d279d8e7a5c2ccbd6dbba27fd175bbe7385c0f34199955c16427fc7bf6b487cad1da0b2e28b94d44267a0042e811fc73a88661f3d312b91";
+  sha512.doc = "2054d8b87084bbdccdea4a2c05c43b427249d597880b3870fffb98bcf0bf88adf64c9110e3ff98d1755596d559ab548a464a2d681eb1adbaf57cc748424e0d98";
+  sha512.source = "9b72c54e083622b95df17e643a6466125a22fb62e3ebc64c3b0f5304253ba5625f0ce2e0071dfc4e06643259b4d7b575a1bae5bc6beb213e5bdd3e83074ba9d9";
+  hasRunfiles = true;
+};
+"bardiag" = {
+  stripPrefix = 0;
+  sha512.run = "dad9b5a50e5a82ed0285fb36c609c4302f7b22daf71c159848788d8c7c91c19dd44398e98357dd58366cd97140e943540d05b6e1c9937124a40c4b4070065a1a";
+  sha512.doc = "54fcfb2473c6ece46ec2b01853c89046c7f5396e97f62b9175cedaf4b1e783285c7c417700c827a7b9fefe5055b10723ce278e5fff0e864434f84020472c1cd8";
+  hasRunfiles = true;
+  version = "0.4a";
+};
+"barr" = {
+  stripPrefix = 0;
+  sha512.run = "6bd398efda5027e3b762b817ce777adb9bb1c8e593ca04386adedeab7dc26ba382058ccfa3c281ef8612fcc50c9b719e7f881dcde0cfec041cf4b2cd05f238f8";
+  sha512.doc = "6600ecadc60fdd00e4d894969a84118265b5c5d07e9a411d3f01887fd1e94c481b117cbda80451774294dbb989a61379b16fe3ba5c3b8363a9a2485b76752aed";
+  hasRunfiles = true;
+};
+"bartel-chess-fonts" = {
+  stripPrefix = 0;
+  sha512.run = "33c52620d32f5e79a702bb664cfcb47409faa049dbf7f34cc5816005b4667267810fab130e3aee1ff7a7e3292af37c2d376c01dd2bbf17be199a22cc36ba751f";
+  sha512.doc = "e61232eed7f345e28796192d836af9de29bda257fb85460f67a89bbdfd7dce01b8361962b7cccf314311c0e772e69367f2921ad898c106389195164b6c925ffc";
+  hasRunfiles = true;
+};
+"bashful" = {
+  stripPrefix = 0;
+  sha512.run = "b46abbc1622fcc15d65981368d5c8a7528f2142d722604eb028e0cc364d6e908587cb58a340283e7afa43581ce365ac7a545bef65d1cb5e273e777467231c40d";
+  sha512.doc = "5017fef7ad1c67f33cc881a94f75cce97d422b047d8944dbff377b1f3f3d36025b7b73c76ba2ed96bf06b0c6e9c3e99b97ecf36e2ec8ab8b7e1893dc11f201f2";
+  hasRunfiles = true;
+  version = "0.93";
+};
+"basicarith" = {
+  stripPrefix = 0;
+  sha512.run = "346edf1704ed621a326e4f945b8f5341dfbd2d46af095691c7b853a9683dfb2254d443ae04bf235f192a57dd55336dd50249b0963bde041120468499e61012b7";
+  sha512.doc = "bf454539b0202321121437d2448c3b49a2d6122459af4788a573cc2525f0301d1267b12f3df8636a36fe807c474cb23347a41a2c412eb12b674c58541516ade2";
+  sha512.source = "6c8b449cd8f356be6403a48943d6b91cf2c2dcff90020041a8dde0fb8ad1fa598727137dfda0b091ee776c968d4dffdad1215716111a36be16cc5c5e5b2cc5e6";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"baskervald" = {
+  stripPrefix = 0;
+  sha512.run = "3c0451c43f81396038c3ccff2b4a9b07bf31023fa7afafd2884506928dffc8a9345ff0b8c8114f20b3016026f4532ab138a8b4787a37811501659a0f53c98941";
+  sha512.doc = "e9e2c8749e29351b59690027b019da441de5c74068aa5a8457e3014c751fb23dddb0e8b94bf56529879086ea8c58e023a23b85ed9bbaece10f6dcc65ddcf3ff6";
+  sha512.source = "60122d6a04e88fecd4c6baae3a657f40bbfd48895cc674e95ee9e2b3f9172e01d009064a616f2d7b3f48c41d43f75efda19c3ca54feee612f1866fe64eef366e";
+  hasRunfiles = true;
+  version = "1.016";
+};
+"baskervaldx" = {
+  stripPrefix = 0;
+  sha512.run = "e3d0d7c0329c170f2b88a9696b96bb7e19b51470030a039eba34f6bf90f033ef6805bca13227415dd69a636ccf0eb5b45527597128bc412ac9ae9415deea1e78";
+  sha512.doc = "442a8f29795b3af8022e0a4753807e1f2060f53e06257d5198e8e23cd7615a20869a90eb7f50649c4773fa2d72faaa038c579738b3c5f3ba47c796b00afe1720";
+  hasRunfiles = true;
+  version = "1.072";
+};
+"baskervillef" = {
+  stripPrefix = 0;
+  sha512.run = "ee8de6accb53b62908a025fea331a07570bbb016c7904fd700ba9ed584e482dd993ab04b7fbf8e6517d3a573cea1b6a055d3b3ea7ad03eedad2fe14aa8893191";
+  sha512.doc = "942d3d68e79cf65cffbc73ac225a6020655bce8af27d616de784747225cd6de51ca606963daa55fc698c6dd989ce12ff1a0103ba3b9391ed6aa2edadadead829";
+  hasRunfiles = true;
+  version = "1.047";
+};
+"basque-book" = {
+  stripPrefix = 0;
+  sha512.run = "645d55362506a1bcf563a12ddb7616f085d5cc75a45cb2f0dcdf551158b48f595cd71278caf9a0c35f1d85ca66b880e6f59f9ee416fb9bf15cd7c18bf6fda2b9";
+  sha512.doc = "7954b1c86ddac3a1409bf16cc7db5470332fb86459257756200dc794a3443b137e6013a7e904bbf63e8fceae64850418e56ad08af12a448c1fe507e29221c7be";
+  sha512.source = "4b8a2ac7320d04d5e35a0c789e5b548582ef4e0723ca45231250b44ab08fb52a73e88f5425218ecdc3e3d35e01042b64c711ad78aaef0c4f119ebd1abc4dc36f";
+  hasRunfiles = true;
+  version = "1.20";
+};
+"basque-date" = {
+  stripPrefix = 0;
+  sha512.run = "2f0cdfa78c3b75dddc5ab9ed15f651308dad4e598f9623eea50929c48d6f15318f768b95d55ba124eb048129447ce1e629febbb3fa6925677b2a46ac94d82654";
+  sha512.doc = "249bfaabe93c4306c32c698eede8835cac334a27802253dc6ce1f380eaafa5c79fc3b86ee34ddd7b98df043cc0ccec137ae3d342cd3904f39203b0ffba2fc9b7";
+  sha512.source = "f38091d9c38f86efa401f11759c536dc3ec041688ef9b1909dbdb5661ea096b7e4d69ee78a5beb194e1cdb24afc8ea07e26f2c9c45777aae517351fd4f3a2b86";
+  hasRunfiles = true;
+  version = "1.05";
+};
+"bath-bst" = {
+  stripPrefix = 0;
+  sha512.run = "af48f1407a950028fe68ebda82db1091c511ad5763416d60dc7df4ce6ddc080a4a0eaa9cf3385a27ecd9586fece07ee02f78e1f8df9446697bcb9c88aa9b974a";
+  sha512.doc = "4738ae6f96c75f9cfa222ccfc8acf300c5844d19a1888ff23c52f6f7dd4d85bb0065728734fc6a43ed7fae507e34cd40c4a2b7240b4644adff9eeb05e6118e4e";
+  sha512.source = "50ace871f9adb958618d128d48fc204a188a6c94cf4bc986b3605518050df19c990fb818f6cfcafedda868c7254d1bf1e05f51e075754e4e2dfb8528fcf45f20";
+  hasRunfiles = true;
+  version = "3.0";
+};
+"bbcard" = {
+  stripPrefix = 0;
+  sha512.run = "ac7fff708b3e25312460a740241ed003ee471f84dd4d30388d9cde8380ec9a6b6fa6fd6aba69b170c464a25bec44f1669fabc4ac2d7d3e216885b7e683f88af6";
+  sha512.doc = "9e4561e97ea77c84e3c1cc8f75ca61318937c45b7b50dab66d6745f61725b6397458a05e50a267937bf6db4b28558ff0e9f2225078b9516fe574620982ab2cb4";
+  hasRunfiles = true;
+};
+"bbding" = {
+  stripPrefix = 0;
+  sha512.run = "d5505fd7aaffead426a873844112e11fba47694ab07d0f5c88be31188fbf4a09ed4b8f8bce75221b2b2efb3ff81fc132fe54c2634f32679e2e2041944ec92f7d";
+  sha512.doc = "a1425b521b1c8178bd6c9b059acf034080be6f3f312decb575b7541d34a6e1de926965cde8701061ffcb57147052b1495b21142f0eac645596a783820eb6200a";
+  sha512.source = "be0e2b1332835920a3c93ec69ae53fe83df4918db9d3080716d7b77edf999a87f54a4c87ccbe4d48b008403539a514810f35c6b2a59d8be0ed6968f6a91ba129";
+  hasRunfiles = true;
+  version = "1.01";
+};
+"bbm" = {
+  stripPrefix = 0;
+  sha512.run = "d795fb56f2ba57dea55a546244c5d07bb20c104cb9d1e6f9b6c229df9e5fa4244f8bb883bcddc150e1072453cb518d31c110bb85d157b4fbfeb47195da939619";
+  sha512.doc = "034d880588fa88d97045d73dd651a0b3573c624dbbf1d2f9fee046c59f007b9e3e2121d5d773b34aa7b0bc8c72daa540447981bf60731e64d99cde49b5f6e911";
+  hasRunfiles = true;
+};
+"bbm-macros" = {
+  stripPrefix = 0;
+  sha512.run = "06f59837d585c721da77f289119bd4b45a91e3d72543ed3e4de76f84a2916431a733baa379b83a3e299d166e27bc0350df6f053d1ec744c52dcd0297d416fdf1";
+  sha512.doc = "20a29809dffe8090e5c067dd2df9dd5a5f7de6ec7abbc01eb14b5a500f37cd62b50914733edf7403af89a1db86ebe10b3d7262f519dc01dc35b29ba0c70c3478";
+  sha512.source = "11d1d83d558a7943e35e8146b7f44df6a553a513f8e0478e1a9c773d66d004a4110288f91896b283dc4153372bb638a444c53b9184745858976a7e6aac69b121";
+  hasRunfiles = true;
+};
+"bbold" = {
+  stripPrefix = 0;
+  sha512.run = "1b123e9135179244050ed6f97f17efa2a43c42018b2fa3b01c956a99886ae6696c83df2a0d61ce95cba925c2bb4c734d77253aab165fe9f622695f557fcb0abe";
+  sha512.doc = "c754e81f83a53c4a1cacbd2638d550ad178e0e26d7feb592585579a27b780e11733a7dc68fd374ac575cc7866a1e5417d3df0d2b973e7278d1012657bf340390";
+  sha512.source = "a7a61bb796d3ee618ddc39d471bb29d1b7350a40bd7a97d44d4a1c7cd5e4eb5d5783d2ea46313344468406d1d25c71ac322ac4bbbf7b06aac35bc03651e7ccbb";
+  hasRunfiles = true;
+  version = "1.01";
+};
+"bbold-type1" = {
+  stripPrefix = 0;
+  sha512.run = "86631e16388a447db7c521087eccbb666612933f6fee8eace091e00b20b5070d38ebc2d4d0a754536eacef9e9e6470f237d184e00cc4419bff85087f54b81566";
+  sha512.doc = "ad841ac652a7985ab907572f66462091b1c40f7cdab2b00086209a2d96056e0a9e32842dfbc22c829b27799882252da95e3d10d4a9dd174f487327d5f3ac3899";
+  hasRunfiles = true;
+};
+"bchart" = {
+  stripPrefix = 0;
+  sha512.run = "b78e4017d0355107e1e73670c20457c2dc314dd0537bb3e699df3118231b5b3c0b2acbf50ca07f71216d56c81acbb031d38dea7b42099165a03a8049f62021a0";
+  sha512.doc = "762b75974de179360fcfe6057102919644a564ad2c3431ef25e2c373267ec063ac8350caf0038a5964345491355ddda4f5190eff6de93f2c2da7ab168c829fcd";
+  hasRunfiles = true;
+  version = "0.1.3";
+};
+"bclogo" = {
+  stripPrefix = 0;
+  sha512.run = "9afc02338b4141607cfd50d7678832304339d0b532464ada6fbc22c58d06dbc5a0793098c9e24617ba5296c3f7b22bccf16062017701608a758e4a26c05f12a2";
+  sha512.doc = "8671f8095005a0abec84a316da59f914d19d8fe0f4d33b13e73d6ddabcefd3ec7fedcfc8ce9dcf2ed3380a129f58bec16f73694a5d2769a18618142de93be38b";
+  hasRunfiles = true;
+  version = "3.1";
+};
+"beamer" = {
+  stripPrefix = 0;
+  deps."pgf" = tl."pgf";
+  deps."xcolor" = tl."xcolor";
+  sha512.run = "42f934e74e50d48a5e9091b0b8a2ba1fcd42da22bea3e35a4e62033444e46841da16982ae66552396e7c1a8d7d3136dfd7cd1c0396828079df2615113692e836";
+  sha512.doc = "fc387ee6a0630df8100ea7d6b3357f7cba50d1022b48be2d6442606d700761066458359a8cb4e8c9751f53c3c0cd6c36382dd7d781cb97792e493bb5652c54c3";
+  hasRunfiles = true;
+  version = "3.57";
+};
+"beamer-FUBerlin" = {
+  stripPrefix = 0;
+  sha512.run = "10d5ac201b18b2d7de8e8e4ce2d08255ced89567f311d449002711235e0e0d052b6001acf5aac198397e295e7970863d42a57ecedb8464c8d49a3eba43b6d90d";
+  sha512.doc = "451a4ff305191947bb594394f863c447a96b5ca8327a08a5897ed7486e1a3ddcfb7e415d4da613050e38c8a76388cfbd7a3631be8a84d82e31f25081e71e913f";
+  version = "0.02b";
+};
+"beamer-rl" = {
+  stripPrefix = 0;
+  sha512.run = "4e7e9cae6b48521baab4d92965d5b4e14d9b09a51e95b45c4953a7c6199c29691e5a8e69a68c0b29d27d51ddbd1fe57ed21cc6dc6744fb0de2f7544848aacf06";
+  sha512.doc = "bfa9d52b34ad4edef40166e6a0355e5efd4508499a87c1cf4f643fe30f873366158e21706c06f43822e244c69b85c40d254c68d60a82b91e3a4381d27866b807";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"beamer-tut-pt" = {
+  stripPrefix = 0;
+  sha512.run = "6074f5933b945f02b24c31353bd7d683b35a54f53aacfa2ac19de382f56fbb9f6284316ee70c0eacea3760101d98d4a6b7d78412a0d41b13c9e1c907d181ee16";
+  sha512.doc = "ef6e80c3417cfad3e2f3e0ecd3ce249aa0b4cf0a6b5dced09c27138e34a8c86a74d0d03c6888d0944fe2b03bb5b8180872306263c58f54281f4ed2fe3424d4bc";
+};
+"beamer-verona" = {
+  stripPrefix = 0;
+  sha512.run = "71b241e603688bd22e10f171d32ea3dcca1f25c136a7c0d0cea3e72e936b068ea7ced6a40c03d2e2fb21e533506bcbfaf10f450493cb4e2c3df2981b714048d5";
+  sha512.doc = "ab68e6accfbfea7651dd43b55c4ddd86a66a827ecc6f6353dc58e3aad47ba89e051fb4f9dcc76e0e8081784385cc696fda9d95c0e82c71b0645d358afaf42c4c";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"beamer2thesis" = {
+  stripPrefix = 0;
+  sha512.run = "793ec95902fbecc2de84616b74494d7e34a1a1c88277277ee82bb172c1ef0cc42cf175f62fa2b4926abb73817b7eb258d85be6689b60a56e0faee941276471a9";
+  sha512.doc = "ea71d35ac3e02d3016b8d19d38132ee16960757c9846192cf2213061c9899a9788e98f50dac074b0cf83f6029f883eb1f7784779d0256c719d55490284cfc8f0";
+  hasRunfiles = true;
+  version = "2.2";
+};
+"beameraudience" = {
+  stripPrefix = 0;
+  sha512.run = "f1fa8d1d30b00ea59b3fd83347fc1ea1e90135e51e8f4393eacdf32ae983a80e865d4364c924c74bb1d409ebf22ebb5e290707b945898db9e6234dd297553b49";
+  sha512.doc = "25fbfbf71ff66a80597b368882de63aee2e090e5604a67d66d52e99dd606ce54079e4a7350c4acee5966555dfa5dc8de0e650c7cb4c136bdc40cbe5739c0dfe1";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"beamerauxtheme" = {
+  stripPrefix = 0;
+  sha512.run = "3f5585ec5b379f32d6051d604526ebb00673fab5236190226fce4bc2a4da3ed4c6a79431edd0c011bd34298d8bc2f5eb7a9dd9aa9b0bb15bfca0195222e1a37b";
+  sha512.doc = "faaf5267dea60efacd78f6ed055e1a8691729d96e3959d98ec315ef9802aa01a7193823973c488d44d21ecd845ae21bf51433acf007a34f806656fa6b3a8ecbb";
+  hasRunfiles = true;
+  version = "1.01";
+};
+"beamercolorthemeowl" = {
+  stripPrefix = 0;
+  sha512.run = "bf9874f0d7bbbe3f95c352d1c5e93c5e7fa3af18dd02eedee553c312ef01783420b035ac74f93eb150a99a597ff9948d978ea575963f4117d0965137446ee5fc";
+  sha512.doc = "258016683c605b4961ee25f30077cec69c486cf3ed0cccce2482db01b39141e122dcb46e02e960a83138d124aa269ec903379c3c6b65f3366e96565e90c2337a";
+  sha512.source = "940218da36cd17d38e2b8c6d79eb1570d6c779b5f694e9b43abf6614db93a8227939e1ef86678f72461752ca0acdcaf2fd5e52a45a35b6d98811511af5090a2f";
+  hasRunfiles = true;
+  version = "0.1.1";
+};
+"beamerdarkthemes" = {
+  stripPrefix = 0;
+  sha512.run = "ca30d15a7bc198e67cca5cc43dcdb8e644e03d1c8ed71f0b40c1dd0219ce81688067a82a0ab002b2d72e990e227f4628319cc72d5687881a3b886e213d7eee93";
+  sha512.doc = "6a1fcfc34793b93005b683eb0f0f4aae794c56e85fd5e14ac6e1c4eeed763f7c6203bd05c92755a2db91aea10f4c16117e702c291388153415dfbacb4b39d00d";
+  hasRunfiles = true;
+  version = "0.4.1";
+};
+"beamerposter" = {
+  stripPrefix = 0;
+  sha512.run = "e4ade5948c1eb8e18cba3d3b7699686d55d57361e0b26b923336d295b8fb6c7cdec39832dbe4f9358c94302d412000f19b4706295af5856e12482bb3c9951a98";
+  sha512.doc = "88ec2b723a551711c33972cb72b7ab9ac13508f583e4e26eaa1c9e6d57d537667259b4f93e7e33fd2a5db8086998f6ddef05c363613be645eb293606d72cd52f";
+  hasRunfiles = true;
+  version = "1.13";
+};
+"beamersubframe" = {
+  stripPrefix = 0;
+  sha512.run = "d3ab81c5eb90d8566eb850c25d7751f5a341107fdb756b46bb50b392741746eea356ff54ef1ceb6ca6f0a2c0dfb7940aa7cd6e3d0cd27e4328e817d1be454964";
+  sha512.doc = "85878ad48e6ba191174140517ac03039320620f246efb51c65e57541d9cf569d59bdd6cef17f10f6f6d85bff9532f6ea70175cb09b68ea6e59312a407d89f557";
+  sha512.source = "f4c9d5b2f9a868e1cf3dead5636025698137d63f64c0c528abafa0e5719987e6df9be31a6ecb9597824e5c9793172208908616f42f8980b49796368e217be24a";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"beamerswitch" = {
+  stripPrefix = 0;
+  sha512.run = "9fbf8189382ecee21db66a792beb737a89fcc690af35c4d604eadf0aef61669df5c5a629abcd86a8fea3d53a424c86bb233aec0ef3ffda0d2bbe156bf227402d";
+  sha512.doc = "3bbd226e69390e7a9add9d076e9b60d910a5c63669d679f171cf88d159ebb5f9fe48cc93e334baf27078d03c140a7607f5cdf927a17b6319fbdd7d92b54cc10b";
+  sha512.source = "31ca49fd909e406d2d679cbaac8cf2e1fa0aeb0feed61bd6600f83e5d58c970df0e2072671ffc73944abbccbb42b7e83384aee94ad8e5e68e60f456dfd537274";
+  hasRunfiles = true;
+  version = "1.6";
+};
+"beamertheme-cuerna" = {
+  stripPrefix = 0;
+  sha512.run = "f0433d4a4582958ad057fddcddf1f1f992ec98a199943bcf80a7834e37eb7fa5660258edb08e2bd9205628dc1b8a69419c907b6c007a1c63cd1fb335e439125d";
+  sha512.doc = "96f4e9c3afbb81a7841130ea076b2cd35477e93eb105c03add6077fd76981cbd14b609c3b9e573f143572764ac87b1ff76ce18c377f3bbd9b02a1ed45a02eaab";
+  sha512.source = "a4381e52d7e46336d8d8989be45c185156e67df776d5ad159f2db6c62c751dae59e0c19fa0c5ec3de4b0385047d5f6fdf166b6c12707c889cffeabe11802a10f";
+  hasRunfiles = true;
+};
+"beamertheme-detlevcm" = {
+  stripPrefix = 0;
+  sha512.run = "cab4d390d7469056f2235c493b9383a4374c4a686810db428cfe622a4c2513f7176df489d22f7e37ae1f8a2d3303443b60c12c577764be2258b345fe9c3dc543";
+  sha512.doc = "2c637af44b258c688449ad2bbd81664e3086efe874d03352ab393487d7eae1148773ba39a498611a848c43824415cb5b860259111f6d287fd9e6d7f1c01eb530";
+  hasRunfiles = true;
+  version = "1.02";
+};
+"beamertheme-epyt" = {
+  stripPrefix = 0;
+  sha512.run = "2bf451ccfe095384aeec149e97d7022cefaf997cd19dedffcad5606fc149739cf21b6128ef08e609aaffd6afbaa59b1cdc401cbd3ee4fbe0e997d724b713a620";
+  sha512.doc = "a615bddd7955869d7e175f734a06308b166057dce0b479a4b11d2bd1d06fda7e0a4fdf8185d0a3db2d2302cea2890184616b92d0b7abd5321fe9edaca6dbbd2e";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"beamertheme-focus" = {
+  stripPrefix = 0;
+  sha512.run = "52ee3fce7ed3757003ed22aedc66e7fcf54786cddd937920562fb9e84075e682a4fa9ac6af8c35e10b7995c92b5fe1ade1804194cb7ad7acb6e85dbc4e59ac85";
+  sha512.doc = "cdf902c6b053ac56dfd450ca4e6aa0e3eb2b12eadeaa39618f5603f409e6ce8ca69e617c6eec574b4991a70264579f3c9f533bd196c18579755d82a6c869ceec";
+  hasRunfiles = true;
+  version = "2.4";
+};
+"beamertheme-light" = {
+  stripPrefix = 0;
+  sha512.run = "5cc15c3ee0222678c1c97b31805421caac8b20fca03b1d748fd2a71756d5d764b8fbfb32ab70937e890f7755966b520362db98a9ae65be3f83509cfa287d600a";
+  sha512.doc = "e2d0cdb7fdabe582f2b6f1a656a5b9b61ee3680fd4944c06f108cf69eced96bed7b25e56563b1cb9879e8da42fdbbeaa41d769158c5e256bc70b5d695571a5af";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"beamertheme-metropolis" = {
+  stripPrefix = 0;
+  sha512.run = "dae8058ae5c2883b383a2bcb85bbdc45d0b0a3fab46a4498ea1f3b8568f04d049598fa78b72429adc7e36773905c67801e129378e233582f0fd8eb5ca4327745";
+  sha512.doc = "c4661061ea3ce52a20fb8c704042cf755b8b54549dd62467b1e78f85a4067c11a02c89422384e96323ef277ce44a3f648b1778b54e0b5c79b721f67451fabfc1";
+  sha512.source = "af3cec1b7544ecd51c875a704605500ee1ab4374df9cf1a7db6c6b9102c4800651485a64dd865c1158d729c06f2499021408230c50278da3de40f7f0cac7bf6b";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"beamertheme-npbt" = {
+  stripPrefix = 0;
+  sha512.run = "bbc620fbe30505183c4678e0dc9c7574ba93a4c410647b54609c310918e32a638265b07633932e2f5f63fd2ecf8504869e4f3f138073e666e1341a4d0aff327c";
+  sha512.doc = "0c1f5df1c664a31e400f4d05a9f2b57c4c9fbf881295fa8165796944a06ace35641487df93db33276924d4e7c5b9d6c621aba70e5ed9ee61dc269af3b51f7a2a";
+  hasRunfiles = true;
+  version = "4.1";
+};
+"beamertheme-phnompenh" = {
+  stripPrefix = 0;
+  sha512.run = "30745bb1f92c230bedd953d32eaa6f2085ad2aa7f147bd3368fe8ebe4f6092ecc615acce55b9573da4dc04c8e89877ba2705a6712cd4c4f67f34dc59eae97880";
+  sha512.doc = "626d124c6ac02271cc3bc137e60b8a66a861b7f692910e9fad283d8836599e3adbdd1ac472fe66955a392d1b563e955da852cfd5a0d712d284fdb2dc4d709a63";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"beamertheme-saintpetersburg" = {
+  stripPrefix = 0;
+  sha512.run = "c258a4eee25ccdb2437625982e54def90aec87be003f697a47334be52b85ef223b377c7fc57d49c889121caea664fcd6353015ad2e62f5bee5379bc222958f53";
+  sha512.doc = "bf51e2bc33f32ba3dda6c140040a7499a60c26082569729743228a6c7abc97fb20076d1d0c7d0b64a25a54cbba1d9a8b59a9059d160a5a488ef6641999e8611f";
+  sha512.source = "6cd3ed424b3a724e397de3fb7b47de33a5c9f0c5ac0e0f8b26bde55ef69b66015874dbd438912c682c9aa1c33e4e916fb895458964dea11fe228e29c1afc40e8";
+  hasRunfiles = true;
+};
+"beamertheme-upenn-bc" = {
+  stripPrefix = 0;
+  sha512.run = "0c483991348107a2b9102e514ec05838a9ae3e97dceddcbf3b8cc21ae635a272c7d70d97b2e1a0929b7545e50560f16a71f7b290ca16cdfd63177782b993b714";
+  sha512.doc = "5feb0a4401d9ebbc4672b7f9668f850fb65002c7d7124c607009775149c4c428642cd17df133ae80d564ab091fdff039d34c1704360033f2374b55466fe1b618";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"beamerthemejltree" = {
+  stripPrefix = 0;
+  sha512.run = "b079ceab30460a7b92a616fa6d7216ddddecfa02adfd66bf38aea83eccdf6e63cc52d8b2ae88db0b21962af223b364424227806beabbfb2e344af98474af2528";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"beamerthemenirma" = {
+  stripPrefix = 0;
+  sha512.run = "6fe83e0805fde96d585dc027ecadd23862815171f56f6a05db0a6788018a096c193c995895f7ca18af6d322877e24d570743d84a922a2c7e4baef35d3f6dfca1";
+  sha512.doc = "13f1dfbc8f09662b627dd4ed6c7ff297612c5d05a140a446ccdcb6f0ad3a9995b434d418994cccc2323ead666eaeb10b32e1a9d410a38c632df9873717397231";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"beebe" = {
+  stripPrefix = 0;
+  sha512.run = "12e064422d57b50d7c5600faee4f95ccfd14503da70e8540f72bc8d5de46fdffb62307a76c569934210c84de55b0eb5e625fef5df900a9848646956b0dbdb60c";
+  hasRunfiles = true;
+};
+"begingreek" = {
+  stripPrefix = 0;
+  sha512.run = "88b3bd66f458eacdb1c4da1cf4a44de333ab45f3d498eecc1a1d4b688c955b3a759a620642e3cf94268136989817f97d783475740a0c16d3b5578b670d967719";
+  sha512.doc = "3792be7b825db6ffa7194a0cad8d8ba0c2ab3ef64f87abeb607870702612a22c798a61e8b07d61f21e1a0db30c4645c3ebe03bc0ac7c297fbec163d9cb91f22b";
+  sha512.source = "605588a60e9cb2d6a3be3d8dfada6468dfee100eb7739c7ce3d264af38d305be103a62b267b8f05d8a57d9bae273f930b2e4dcc5f3352ddfb8c1e50ac81ae7d4";
+  hasRunfiles = true;
+  version = "1.5";
+};
+"begriff" = {
+  stripPrefix = 0;
+  sha512.run = "ed1060e0ce9bad28f98481eed44f8bd98f6b8be91dd5dc87d5c34a6cc57e724d175fa909fd6ff514399eb81bd8f28450f7c9a6c6a9bc991f35d617a8a25de8ed";
+  sha512.doc = "af28c20897e297af4ca1fb13bb286ff0eece9e2f06f5b734062716c0c5f5b7dd673d046a5a47c907f9a845a7257393f3328d46c4ea2ac0ae6b0eff1244e97256";
+  hasRunfiles = true;
+  version = "1.6";
+};
+"beilstein" = {
+  stripPrefix = 0;
+  sha512.run = "b581df03b91834de1382b50dbcd1c4df25d8d3c1788889bb7057cebf3193fb664ef94f63b5c137f7ec5e3ce7a8d2d40fa3acf3a2640ba1e2b7b94daaf870841d";
+  sha512.doc = "00d281b248088fc0e31004bd4eced9a9eacba7f4260676318e13452e467d8e4587a8493a6444e709b76c18902ce766e35cda7ebf14595c277b59232a66e76e4b";
+  sha512.source = "fbaa3aeb41641adb0dcb559347b8eaf30adc79719d305d26f62bdbc2a80a913e4dcbb6507f7c2353687011a02fbf43f0fa49a67445844e4d37294b7ea4c3726f";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"belleek" = {
+  stripPrefix = 0;
+  sha512.run = "cdc7499ec32c26ac524caecc6b5c1f30f3ded83d78756b198b918d321696f378e6487f528cb3781a44f3485110dfff14a14c9b3306e22ae79a8d262c1f1baea4";
+  sha512.doc = "e974e00c2e43d01d598c18f664e8ca3ca9259ca55089598c77468d6f50d0cc9a64d4fc23154bf9ba7acf3b9b9ca406beff24623eae5b6c3ce4c167904e5fb720";
+  sha512.source = "27ea3f4dd1ba7919bf06dfcdcf7b1ca4fa609759a58dffd91fdb2a55662e58e14e19d855d93ec932d176060ee332d89e02c9d2965ec545adfb10f3f486f8875d";
+  hasRunfiles = true;
+};
+"bengali" = {
+  stripPrefix = 0;
+  sha512.run = "384c07640acd5d4ef2fb661d661f1f3550fd84ed08e5345ec71cd7b3189560cff18c4992a91c13812e5bacd06364e3cc52faf6fd32d01a4fac1b2928490f97b8";
+  sha512.doc = "cde57bbf0c8eb52b92973f80c7a780d30967fc2dc0624f1626856054bc0005a5f0e318474f145b9abd60a59cdb6e87e8b4a3b03b4b18282db758b5f110b46371";
+  sha512.source = "f6f8641cd631870077a73c702da0d7718b2a06236da608b3ad6cb81e60530f93328772e97870c3da8d6e3ff9106729db5d3137c56329f6271a9b1810a565c189";
+  hasRunfiles = true;
+};
+"bera" = {
+  stripPrefix = 0;
+  sha512.run = "103b2db8f7bccf6a9729faae793246d2933667295ba404fdaa7b61cfbce0f1209ea27e7a2a63846c6550b41214ff496a62598bbb9b731c087b8bba9e0abade80";
+  sha512.doc = "2606c87871d6f6ed27b2a5e49117c50f00573bc6b9ce249d1433da214764b220eb00c73e59be43e32e8a4827c397c53504103e00b7e5602de5df5bb817e2145d";
+  hasRunfiles = true;
+};
+"berenisadf" = {
+  stripPrefix = 0;
+  sha512.run = "70dd547d0c5138f2a61e20b4585160e5fef281bbba72ba8dcc7032efa957d80c158ba88fdc0dda9982dbcd69a48d5d54286f52d1425a5819e54e05d79eb9dd49";
+  sha512.doc = "f076717ff948247589225fbe4fcd92114d719526e535d645d767a3f7fdaafd3a6ca84c3a60997074186974ebf045e31a51d16d53c8a5fdc78a2461733cc66372";
+  hasRunfiles = true;
+  version = "1.004";
+};
+"besjournals" = {
+  stripPrefix = 0;
+  sha512.run = "e797bce36fa6529d6b57be352ed81b7413c2ca818fa904a8cc4c7c8f0801369543482aa5c286b40f6f7c5e0b73d53b6aa6b9aaeab3e6229da7dd954a3dedb1ca";
+  sha512.doc = "c790eb0ced559adc6696f0f228c88a2314214ff6a4ab71ae03dc46b3974cdaae53fc685c05f0bbb7646a5b31d332f763fce4a71919319aa520965f56979eee54";
+  hasRunfiles = true;
+};
+"bestpapers" = {
+  stripPrefix = 0;
+  sha512.run = "d015369a268cff98571985f319f95df9ffe0255ad222e8c8133252c3ab5537cfc4c3ea11aab13a565c096e92472d7724c0ef23ce6a71f62c7a5fc2b30382a054";
+  sha512.doc = "cb5e9bbcc83b6081dd0207001d1b39c6e089e2ae168f20d1cc87482560a483e4ea195fbf208c342ba691d3c85ea9f4674b2eb6cf68db9f9d83d3b98bbab60dc3";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"betababel" = {
+  stripPrefix = 0;
+  sha512.run = "db2a590e8ed5e946652cc54d5c01bd540b87f77253278f9211c8720229992275f80edc26d0c94b4f68237d84a5bf7b56bd93a40e2a0ce8df5ffdeb124c81d219";
+  sha512.doc = "209f8fc6123f8403bf6a30731773aeea82c5c6de123e24755e9a22ca6f3ea170015feeb541242a772c3244e7b74f1a766e95886e4f773f21c48b353f22d6adce";
+  hasRunfiles = true;
+  version = "0.5";
+};
+"beton" = {
+  stripPrefix = 0;
+  sha512.run = "23d243f15a79246aa590a7ec65249724a4460ac6e3ac01dba2aeddfc169875dd8392c1374cb8459ff84210d51822430fab9d75a87f0ece20323cd20709de0c14";
+  sha512.doc = "fa579427c97f930455bc548d5b438f32aa291d98f9d8b391dae686b270e135605cb3ddd6cfb9076cb248a17eabb4e62bcf4f720b2daf829b3d12d6ebc294f832";
+  sha512.source = "79e129919c06ef083e4f8fdcd88a60339591b3f95776feb9cc076e46fb379b5ab10f9b48f3b8a948e9a120412f818dd3d99cc24957d3eaa812bbefb388d91049";
+  hasRunfiles = true;
+};
+"beuron" = {
+  stripPrefix = 0;
+  sha512.run = "623d3b7d8747ce1776de9d0ee6eec013c2050f9cb4a521167bcf23435d5e30c1233ee869ccb299360cfb6f8f4b4034a77d4fe601f789211b290684c0858462a2";
+  sha512.doc = "812dd30a9b49d7ab5e529f3c7ef934be5d72b75adeec1a38cba77c867525243ffd0d4f4901c9100e6518eb0a8c35e208157b8e3669d3700203ab7fe95aa29845";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"bewerbung" = {
+  stripPrefix = 0;
+  sha512.run = "a82ffeb4fc7fa5bc42f06476df0c985d59d70c81b34ab50f10cf2117f8861a09b90ef3f53bee78291842a46fbc15bc40663d65b88c7c682c72b25fc86ccff2bd";
+  sha512.doc = "d9fb4f9da944e132187fce6e987be8eb0ef08cce80ce63e8813c1af8738dad61a93aa7c2e214b3ac0b77c980f8a000251ab9536c8a7557b9c7cdf66ae42fcbcd";
+  sha512.source = "260f6f1b5484358c7b558f8b78ca68ec5ac691fa367e634e5fe6f29b06ea9eeee868bce9e10717971d85c5ac23b71d853ed746842ad7674f7e913cf16b9def47";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"bez123" = {
+  stripPrefix = 0;
+  sha512.run = "e70a0889ceab74fcff4994568a97f31ac93165353ac207ee683b28aee2ad3cb8f770d8e3b450e3237537e97312a0995fa8c17196ead0fce55fd76a49c77de72b";
+  sha512.doc = "91ae5e35394e5bf3a6bbcc6aa7d7180ba546b58e84683c569bc34f5b0f9dcc6ea30153305fd83fe28e3bcd8eccb6179d277d28e1ff56538fc6980a7c3ec8f444";
+  sha512.source = "fc329c0c99ecd10c42bdffde10918239874367e7b54a75c4de4882e520ea82e87188070775174a11621dca9bc5949a850207f02af7c08d1b6768ea87fba7e10c";
+  hasRunfiles = true;
+  version = "1.1b";
+};
+"bezierplot" = {
+  stripPrefix = 0;
+  sha512.run = "0cfc80b93b76053591f4d76e3cd2f5518dec2dabc397b0d18f0d9edb40a0eabfd1ed608b0cbd6f4b7b28b9a10a9668b21f9ee798514bfd3ab4cc125392512d6c";
+  sha512.doc = "284cce26134afe943c4b5c0b3d968f2512fa1c47ed1f2b19e70f48d618829b76ffc200933933f27b407e1086d95f38a4e9ecfe85506ccc2336cd5fe7eb40bf37";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"bgreek" = {
+  stripPrefix = 0;
+  sha512.run = "64a0a2a8e19d7fbc2953b8f1e9fee90d0367e5f943cbf146489e930d6a946f9977c32b5ea3fcb334c2c297050b36292f813e073e35866a167ddddb72f123a2d6";
+  sha512.doc = "b5af046a386422400434b1c5ef441cf1c2ddc29f5d4b089aab0ece392e7ea81d9ba224145d612d721d13f05eab3e4b0f2cd6283f95e096d831e6e68074d6fbf6";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"bgteubner" = {
+  stripPrefix = 0;
+  sha512.run = "0bf19f7ecb12194c2d112ab15226aaaed3737f99cb2841ab9c755e78e3fe92d43f8c1e3abca566426f1c16bb4a200790d77397129da594239aa9d2f9a6ff0a0a";
+  sha512.doc = "a4277960129fff04ba3ef6e24463866ae75ae0b690d8e95f618a7c95a442dd02e84d16793a4f5ac12a945ef3b4bc7af05fdc27e551c0e8c92c141081d6a71cd3";
+  sha512.source = "5d20396e63bdedcf2b94222b8e060c498539f92bd99c9b78fc0e0fa44eb95734dfcad7c16e503f33dbfa8032f49d7a6c1020a8a940077bba36ff73f5ecd45ef3";
+  hasRunfiles = true;
+  version = "2.11";
+};
+"bguq" = {
+  stripPrefix = 0;
+  sha512.run = "8a795ba517941a07ec1445a16947ce5028cfd61ba2b5c818bc894ffa73d439162271d6269c67c8ee7afd6d13551d4a9bf73763c00b719bf3a9019a8e7d368256";
+  sha512.doc = "1bfe38f2d904af63a5a0fd2ab4accd04fbd294083cc462f7d53f79819f40dccf1c3c729ad591d15327eb120bce847ae62c2bc9b9554ea278c1974e3b37296dc5";
+  sha512.source = "108ecf4268a4491904d46f5aebdace10f8aab84a4333fddf94788b677088a584da284fd763a8f0ab19cbc335a3a143489a49836ba059971483faeaf40ecbb0de";
+  hasRunfiles = true;
+  version = "0.4";
+};
+"bhcexam" = {
+  stripPrefix = 0;
+  sha512.run = "83841b8ee51766a9fd7acaef2f2c2662a969e5e6460a54db66e1b70138041eb799eda2e4881b0a2102a00019464a26253ca7d36d7858d2d56684f104bc570be3";
+  sha512.doc = "167f5a65edce24e367d6cfb7ebea877b13b1d9cb6f406689c9bdcf364aca0ed04d86c0c1cd3694986dab2ac10230818cbf58f8039568c3e5d9b6b4b98bb93ec6";
+  sha512.source = "ff1583e92e3cc10efe9baaacb523e87ca1884db4203eac09d23c246c1dfa01c5f828d595d03f88241ba4bf80b9cd7b5c62ebffc43e497bebd04144f80d5aefed";
+  hasRunfiles = true;
+  version = "0.4";
+};
+"bib-fr" = {
+  stripPrefix = 0;
+  sha512.run = "24e5ada94266ba8786470453bf8a076891e9b7efac1ff64fcb559bfe2c95875d3120634f94f464c9e40da0f45b18a78af1bc428106b31e85851a2998b58f0834";
+  sha512.doc = "a19ffa9b3ce51d372a7467bdf7e360ac4a0faf45fc2205eadfaff16fb640ffb0cccac7fd0849a74955dcf612e353f0e25f94c0af9e3b5bf617f067606c1da120";
+  hasRunfiles = true;
+  version = "1.5";
+};
+"bib2gls" = {
+  sha512.run = "d96ac64723c13e4d17780ddddcf526840796cc329358cc1672ad12aed53d64fb09a828d5c0501e398fed365193784ddcc74bb944df8a924385e63a1bdca938da";
+  sha512.doc = "892a57451f2a9f0083388a22951f04ff2610c2754e66d2e9f1e48470023e4d5e2c3c74c51dccb8a32ba80bf3398be7707a7de74102d63737d94dfe11dc0f1306";
+  sha512.source = "ebd165839e3312d13240818185a0ee9234b49d0d7ecec1714536086a9a68e8f5e92e9f35c21ca4fe633af9bae79f6f1360a349a3ec85a27e190888aa1657f631";
+  hasRunfiles = true;
+  version = "1.9";
+};
+"bibarts" = {
+  stripPrefix = 0;
+  sha512.run = "04ac23199e53049f54b670a2c6de94546a01d987e96aed23617692aef156e487dbf631309b81aaa0a95885f9b989e4e9fd9409d444d319cd58169e930b842ae6";
+  sha512.doc = "4e6282217b655fe87dea8e5cd68ed0db14990756bf997e90d3a5def53da50fed63687bf33e00ed741ed437572bb554fe68ce34b146bd31f3fd16e9f66e5879f8";
+  sha512.source = "59a2a25aab81c196e50be807e43a2db0a8eb72b0990b7b5cd8dba971ea995f863986fe759534bcd306b64aaae155cc99a5c6432bda65346cf0899de2c62caa97";
+  hasRunfiles = true;
+  version = "2.2";
+};
+"biber" = {
+  sha512.run = "38906d5a99cbe59e2e078c936f6f4d0809b5561b4f218edb3bef0a8125158781d3e511caa2dfb14fef6a426f00e4a5418fa33d6d890371f4bc36425ff9531145";
+  sha512.doc = "b33190ae07d73e7cf8eba7a23ebc8854ff904d7b8aecd92ab302f011277ab9055252aee31d69f2777d6d312605786417d942d8ea9d0520b0291b360cd6c706a5";
+  sha512.source = "a630725fee902e8e36d6da5b7e0402fb480f41acc1c7fb0b4a25db1a2118d64bb25e63628c8920a6eb5c881154d553a6217923b1358ec1ae05cc7fec03b1f0e1";
+  version = "2.13";
+};
+"bibexport" = {
+  sha512.run = "75f9cb374e0aee1b049e977e3ee1a855ae8f908a6c6191589ce9d9fc28a8358fedf93faa416b1020e157a8ec7a3980673d00e052a100c88724e86050ea5eb487";
+  sha512.doc = "ec96364b4a9f7ab446c6b0104646e82cab1c9015e0d3dfac6a795e58e02dd3920737207d16089c5470ac32f76a61be949efa6899ca935322c0062f71f3477b16";
+  sha512.source = "6c18b4e12e8eecdd03f6afae80766cebe3f826a1146c38b6387c6793abf284d3c44e7d4d6050675f01676128f1d073d8ee8f38f31a6081049b8c390b5a7813a1";
+  hasRunfiles = true;
+  version = "3.03";
+};
+"bibhtml" = {
+  stripPrefix = 0;
+  sha512.run = "c7245cce245740f0d930518cfee66dc513bd4b43c8b5804e1012fb95f401dbca2321be44ba6251de573723ec2e6da85fc77b9a9192004ac2144bfbeb3225d27c";
+  sha512.doc = "cf01a0853d87180205651768b639ee4cf7ed1b6bb4869880489f57e37ed8fbff3e8406fbcae1d0c652b3d410f77af9b4d1932ee154c60cc79e2876014abf7b80";
+  hasRunfiles = true;
+  version = "2.0.2";
+};
+"biblatex" = {
+  stripPrefix = 0;
+  sha512.run = "4858e37ba14539bee844d887df8339667a6fa9b4f763235d3bdb468897806ffec4718c3f47eefa0fd74b9fc6b658e17eb0229d739a785df0cc510257ee2a9b03";
+  sha512.doc = "95c6c9d4e7a5a392278c328ca2098008fb68c296067c4e4bc8cb7e283b584b4ce28aa17899f1ba502e0ffefc5101de0cc92fd915161d04896e78585ae256d106";
+  hasRunfiles = true;
+  version = "3.13a";
+};
+"biblatex-abnt" = {
+  stripPrefix = 0;
+  sha512.run = "f2c239aed726d57eb98cef8892c4b4295205d5a8d55a14b16db8bd6b42bf3f51aadb0dc767f97dfbcd8e57a1f867c5e344c604d726453113a007169edee0ff58";
+  sha512.doc = "04158e1b92a2976d2a5cc107e00b5e4ab90a85799f9e55b25936fdd0e141fc2196f0f64577bf2eb8997b7ba5b7e8c575bb725febfc397940d271ecd5f56138a8";
+  hasRunfiles = true;
+  version = "3.4";
+};
+"biblatex-anonymous" = {
+  stripPrefix = 0;
+  sha512.run = "3a3cc037e3ce718c219e4bd4e380075d4a92d85cd1f490b8ffee10c5b80bb9e515f1f170b53eae033ea064cac2ddb3bb285655482e5cd65801403584fb9e215e";
+  sha512.doc = "11b4a4f281068004c2bb11028200bf7f8b1461b4b40d0b52b60d60f145b3e9ea38fb672ae532d8430b0ed889df631b1dbeabcef5e9373b720d4a3c3354254789";
+  hasRunfiles = true;
+  version = "2.6.2";
+};
+"biblatex-apa" = {
+  stripPrefix = 0;
+  sha512.run = "5cfb52e454b1a0ba7d96cd831f752dbd977c575bcd4a280b21ec9bbfd3c13c6e7cf2d255c7204df9ea963465dfed0c6077fe8ceaf85528dd15b987546323fdf5";
+  sha512.doc = "44fc683945c8ea04b72741a433ff30fdfac239b7797dbf0f2f89f38425ee7a70456c874ea642bec2a8e28243c3ae4064b247378d572813aec72bdc55266ee890";
+  hasRunfiles = true;
+  version = "8.0";
+};
+"biblatex-archaeology" = {
+  stripPrefix = 0;
+  sha512.run = "16e26c3a96789ac75333fb474e12acfd4e8bbdfe9dc19c5b44194842870238de100603befb0d1bc468ac24f5ceb9b1bae54ae6fe955f215a67d86046fc9ab287";
+  sha512.doc = "8929d568b2d6d9e7e2a1e6eb335490f9b9ac246bf1dff5553fa564675dbd9922ef1125b0f648b638951ba7ac1eda0942f22ea75eeac0ef20ff9b6533ffe96f22";
+  sha512.source = "f057e96faeb6c5d355b6bf6d809b64dc395d42781ddcd0d29b7b42b057f0313a1fd46e9aa34634c9de51dc2055b63106b289c441c35823f812c01db5eb431ba6";
+  hasRunfiles = true;
+  version = "2.1";
+};
+"biblatex-arthistory-bonn" = {
+  stripPrefix = 0;
+  sha512.run = "93b48bb950e9a4bb81efabe4a3c8ee85d7056daeca88c1c1a070c5321b8caa0045c4005467cdc029f8a26b94a425235e36a36bdee163242194a5301ddd6fcc98";
+  sha512.doc = "e31b7912ca34e6ec27c365c2b3e549cdfb60bd94c19b9f1cd54d35d2a1b99ef2702c3f818f7354ef4f5d3157c0e29538a94315ae7af8177de23893e598c7d439";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"biblatex-bath" = {
+  stripPrefix = 0;
+  sha512.run = "a7c2e6d1131fe80bef091d7da888c9c119d70af480b22010858a61420c2819abcbc3ddcf29e7616df000cc8e23d3881c3c23f8c3f61b2fb83cf3cf381b699921";
+  sha512.doc = "2b051aca6922ea10e97b6b9759c4de31ce9aa7d9bd47d1bd53117dbe9560d216c944c0d1c7738f6fc5200a069ef1688fa3c70d86d6e04a9ddf0083c0e86e61a3";
+  sha512.source = "993b4e88723f9ea0593de57994a37a4ef8fd408f3c5aa932ecde3fb18ec35fe7fb2eaa5df61e5e26f0debc016b66045f257ce9fcfb25fc447c7eb0231be0994e";
+  hasRunfiles = true;
+  version = "3.1";
+};
+"biblatex-bookinarticle" = {
+  stripPrefix = 0;
+  sha512.run = "8a7bfae09d95434d6db671e4037a2f1d5c1ba9cae5982e286389364ee2ff24f9a2daee78c69e529efd06be37d2e6a6f860820361feb42f5b84157dda2ef0988f";
+  sha512.doc = "727228b915e6b370a74b4d38dffde3bbb7ae47973c33263bafab2aa6b640102775dbeeea7f09c046903dbfe86dbdfcdd8e0418d125a51678e603425328cd2da1";
+  hasRunfiles = true;
+  version = "1.3.1a";
+};
+"biblatex-bookinother" = {
+  stripPrefix = 0;
+  sha512.run = "2e6f21726ee4289801546508a26a9416b6725059c63f214d7cc8a6a8b3cf7d3b60fcb87fb7451f4ccfe6d1a27b986e9e0ddbd5a8f0b1070d7e37b775d07ec7d4";
+  sha512.doc = "5c6a1c0b44533b518d95f0dab2aed58e41253c97eee9d04b9b734bcfc7eb2f8437f835a3b7120b37fb5ec3b58d8929b93185fe9bc43c78e15f30fe1f8e7adfb4";
+  hasRunfiles = true;
+  version = "2.3.1";
+};
+"biblatex-bwl" = {
+  stripPrefix = 0;
+  sha512.run = "ca5e20736a70ed02fbdada150433162b64b39b0d95bca623cebda8da821bfe8554f9409cdd49af7559737dbc6d6033bbf6868f5ed809b1004cbeba4bbabbc38f";
+  sha512.doc = "32acf8bc10c07532e8d6174f3dd9a1f850acaeaaa5a91d14a1c299f2f5f22e34c619a41fd9ae7a90e097fd5ec30fdbce581f65560e2891f697ddb0106469f50b";
+  hasRunfiles = true;
+  version = "0.02";
+};
+"biblatex-caspervector" = {
+  stripPrefix = 0;
+  sha512.run = "f309df056d2fa0d58f46568e64b188d21414d4640106ca11ac51cc1de779b3e7a76d2633b1adb38412131c682808dfb2397093969e69b765c3d79099f421b9e7";
+  sha512.doc = "78de4d815a69d965c08cd789c4c42aa16342f43dd9e485dd4af2ed10f688c32d69bad9fc9678947e8c3cffb4c6baa4cf84e4d6f90d21f1f99acbd9c3e5b11153";
+  hasRunfiles = true;
+  version = "0.3.3";
+};
+"biblatex-cheatsheet" = {
+  stripPrefix = 0;
+  sha512.run = "a974a8eeb4282f66ebdc7a57d40c76b0f2bc957249c130d4f97aa9f9749f5091745a87db277c3bef43d0f4e37790a9663949ca3bba3b28a16d37c13bd6029181";
+  sha512.doc = "a2b9a82afe127d0bfb71f3a481eed3198e27ef35caa5cd08557ed35645f6209e9187f1e0c21d6fa51e6c32d0cf044c0d85373195a5f034c856fb4beec360af13";
+};
+"biblatex-chem" = {
+  stripPrefix = 0;
+  sha512.run = "6a7494fe396febf23e6d6afe7f7800e7117c722aa45e28373acae3590bca898da8867269d6e148b36c4da301b60c8c342f4ae24dfeb56d0100528dcc4305fbe8";
+  sha512.doc = "90bcd8c128dd7d601a29c828302ef3cc4dc345a77d6dfda9962061ebdcfbdc8ac4a2525c727985a14467bbfae651347226fcabc395318ed490bf4d324476ed28";
+  hasRunfiles = true;
+  version = "1.1x";
+};
+"biblatex-chicago" = {
+  stripPrefix = 0;
+  sha512.run = "85f50368da0e9497b92c09548c60c7160779fe583a8817a114d625846349dbdb0f9be6813476bd74246016b85badf90733557770094207107fa3d23bdb436783";
+  sha512.doc = "aa511c96eed89d10629bf6f47aad832530f1c108a6f5eea64bfdb9c47f377e7b64b69cd55eed2022ab79fb0d93a31574adb9182919b2113976d1ff084898e920";
+  hasRunfiles = true;
+  version = "1.0rc5";
+};
+"biblatex-claves" = {
+  stripPrefix = 0;
+  sha512.run = "008cb8403f1b35a7fd077f8ac2f33f73ced090ce3d65ce678ecfe90af8ab6fb2b4349342aa838d2d4f1e78d0d87267c7b8206a3377c6490499ee9196498c130f";
+  sha512.doc = "a11a4df38dbeb4c27f30b824c9f1ba230d273e227b8cdbfe5f61268a1a2b7ff3193e79d8e8bedb6f9334df39001b71a3ec78116637745679bf3d67582727371d";
+  hasRunfiles = true;
+  version = "1.2.1";
+};
+"biblatex-dw" = {
+  stripPrefix = 0;
+  sha512.run = "faa43e5f4de281747e5cbc22fdcbfb7d03c5c04d68245340e084c4e34f1ff9917c6ccf22a06ae4eefc41f7a5315db15aa8b51f2a8c3ed7c68cd033308fbe99be";
+  sha512.doc = "d29c64dac41255066a844639e4330193811c62049e4b38600951346d4c126a495fab78458bd322fb3defc4352b765c1a7e7a73b7c64bdfde3a90f3e5a74e4e4c";
+  hasRunfiles = true;
+  version = "1.7";
+};
+"biblatex-enc" = {
+  stripPrefix = 0;
+  sha512.run = "6aab8a819ce9a3ec2d6676ab8850c3fc6bb81e5af5c9414555581cc9d164184d18ec550fb0ca67d28d800826356f1c709144ee7d38c0cfbc274179fa813a3a0c";
+  sha512.doc = "ae50544ebdf7bbf9ee708f193493ffa241ba91f0925a2bf03b6bf1ec486586fde3c630fe717f4f2904373c08a2f9a90afca86b50870f87aa0d04430554650223";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"biblatex-ext" = {
+  stripPrefix = 0;
+  sha512.run = "2cc2dd7ccfe5e664471bc67992fdc655d66fbda0f60dfdc62853067206c467cbbf85595983df25a71e317b3193653996ba76147b96419f32a4c0df0f9628083d";
+  sha512.doc = "7ee2a44ea93c1e7f85f046ac36084a4a7d521e4fd48844e75b68b61551f35d6be75cdeb7c458c83e93eaa7340acf9bb2f99c10c242ec129cb0da38e1d5a3a247";
+  hasRunfiles = true;
+  version = "0.8";
+};
+"biblatex-fiwi" = {
+  stripPrefix = 0;
+  sha512.run = "72b1e41ac55403f144529fd5cbd88f51dfd61cd637bd8e6427a2714d3684ffa37774c698475994f1481442cc8eb336d8de398d55b3df28e5e1615b9cd74cef27";
+  sha512.doc = "37fd37d39fee963af8567cf27cd266597175ccebe20f016c7dda699d95e6f7fd0408a57f9061b98996a6ce8eab04a8ed376e6e29b5cb41635d004d24082e91be";
+  hasRunfiles = true;
+  version = "1.7";
+};
+"biblatex-gb7714-2015" = {
+  stripPrefix = 0;
+  sha512.run = "b81acf7825f546d76a55e617c5d78a85aa6b8ad1c35fa63543f49180b78c59629c97a9c11db1291990a001bccccdcd725cf2550e5df46e87528eccd96fd6f045";
+  sha512.doc = "b6f51fa52262b40b847c62e1f8310f7a1d2d2de73608b022286ec5686677fdb7861d2b819c291ba7bbac33dc8be720ab05900ba4e036b37552a7f8e086a929c0";
+  hasRunfiles = true;
+  version = "1.0s";
+};
+"biblatex-gost" = {
+  stripPrefix = 0;
+  sha512.run = "bba80e3d8452ff64b54f2f71ba7440f67c823583937b1ac82c6f63e61fb72e69d08ffd01ecb76753ba9ccd9defeb2233d426afe474605134d04659b3f1b39a19";
+  sha512.doc = "e6187b9afacf87fed1877057532a0fadd6dab04cd5de084931cb66a2ae2bf8ff4100eaa1d7aa43dd89c208c6cd512b36173b83b82e37829cbf455362be683f42";
+  hasRunfiles = true;
+  version = "1.17";
+};
+"biblatex-historian" = {
+  stripPrefix = 0;
+  sha512.run = "bba5cedd64fcf0c0cfbf9b56c66838141917ba1e7c2f27aea5bda44261ba28366b465415e3674a2ce398812d5cefbb2727c7e5e1adf53a2d9779754849664502";
+  sha512.doc = "ed87ab74fd06ccdfa0923289dcd7a37df695fdf76003aa7ab142c9d924fb69a81430ab7651314a9a391b9114dc2c2d63ffe94461bb00fd33d97ac9e8c5b2a8cf";
+  hasRunfiles = true;
+  version = "0.4";
+};
+"biblatex-ieee" = {
+  stripPrefix = 0;
+  sha512.run = "57cfe53365c131afc5a4778166e52bd5bd4d2bba666a536f03e6ab5ff74ef757e9578910da0e3d69ded2f85be509992860e0f1081d2814f293ef3fbb6531d64e";
+  sha512.doc = "d2e22835c9c28134039ba0ceb808ffc76d0be0e6c367e76eaa078c332fc69a4bde00549c9499d3451f468bded8a5345114488029c8efe142da8c04f86a60fd8a";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"biblatex-ijsra" = {
+  stripPrefix = 0;
+  sha512.run = "040efc5b43e2642251921bcc49db1ae2e00342100d302bca24e2b7b11d1724797f1fe7aa254d01b35d1dfa316f2b0f739664f275031c498b157bb652c6aaef44";
+  sha512.doc = "36cef635b4603606d36f13b489320e10fad48869b8cdbe78d6f81ca9f3caee0f3e14e408236b1f18e6c7cbf3cd414ed8eb2863058b31e761b4355c6ff1230dd3";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"biblatex-iso690" = {
+  stripPrefix = 0;
+  sha512.run = "f9fdbc47e9d655a525d5f02a82d45ddc89cbd2a7ab8f3827996bec5c28c3e6f3f8ad5524ab129a86b235bebd2c3005dd2abdf121bfa419292a09d0915ec0badf";
+  sha512.doc = "ff6a45de0d40f99dbd55402cd4aa19fe4eac71a1e65376241ea3a4fead3370208acefc8bb37595c8bf380aa00d2acdc7657d195df8e62fef49c389d0e698bfee";
+  hasRunfiles = true;
+  version = "0.3.2";
+};
+"biblatex-juradiss" = {
+  stripPrefix = 0;
+  sha512.run = "48e5d926b24752a8138b1094ba47955e9f8d479d3572c2c81d727824e0e5a6243cad37d3a61f1d28163b5bddec6ceb2b35a5f19aff722980eae350ac9382cdd9";
+  sha512.doc = "573378ed40ce0a3efd0c47bf0a32d146543e16b80dbff7935ab980e82de61a1d8023688d59fc2df001a3415b9c73bfbbeae3ce4c240c2ea958a65d6d2003274d";
+  hasRunfiles = true;
+  version = "0.1g";
+};
+"biblatex-lni" = {
+  stripPrefix = 0;
+  sha512.run = "9089117cc653cb9251622299b20d79525ae9623661de402732c9b9f47b2b296cc0b756bda279487f5d042316693ac624b18352dcfd04e6cec436a402b9bbba57";
+  sha512.doc = "23435bb5cdcc7cfaa58d732582e23d3a23589ee064122b231794f17ecd0137e7a4a0e21057835d3925c149d637a7bd12270b4dd05cff6259f103498e0989ac66";
+  hasRunfiles = true;
+  version = "0.5";
+};
+"biblatex-luh-ipw" = {
+  stripPrefix = 0;
+  sha512.run = "e58e2522d9a4711454166c816b971bbf6bab1f8d1c7eea122933c8b7955a49ad294df410fe0a75375134b77d442bd5214ee25d56d766be7e5843e4ac14d7ef5a";
+  sha512.doc = "bbfa55884d3dd3167618f6f9595c301e5faeab0a35cd058cc68922a2aa8362cb3a9d035eaea06ee43c428dd89d23538b15bd4c79c1e095ad10aa4d1d7184f92d";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"biblatex-manuscripts-philology" = {
+  stripPrefix = 0;
+  sha512.run = "47fe3d91435d47fb5a5b0c0fb1a7c98cecaca3a44f03446e17f9be3ab4239bee5b2f2413ae8aef1beaa879256bb84db965b38f5cf2c6f2619b0efe2975506bdb";
+  sha512.doc = "da2356f81c1f02ac33bf7d34c01e0d68d0567766ec562298761edf949d8e0dd0b6c486ad99924811242af09616a4d055385546734023f80a164830ac605dd96c";
+  hasRunfiles = true;
+  version = "2.1.1";
+};
+"biblatex-mla" = {
+  stripPrefix = 0;
+  sha512.run = "b6e3f7b5323e0246c1b2e1ee1c767b624e59d4d1ab9aac4bc24d59c15d1f8228695ccc072b30bbe1f4a2de24fb6eeee3c81095fa572f3e27a09f0de7c5b3994e";
+  sha512.doc = "87e9b73615b404f8b676b8a4158edac551f8dd3712e1f6ecaec473789df884c85d6ba48eafad428eebce10ff6f0c13b382fb4e4c79cc960b860565bedf7f935f";
+  hasRunfiles = true;
+  version = "1.9";
+};
+"biblatex-morenames" = {
+  stripPrefix = 0;
+  sha512.run = "7e847faa586655aa7b3c92d9379540b2f5e78fb50843e36416e21552c6a9e810945f5b60a96a14c35570bd0403ac29a43af29bd46e2ecb0d87e3c6ac90345826";
+  sha512.doc = "c30953fabfd4717c56cc818e55f83995ceb203bfd67775aced3fe8f1f4f4a92b118ed9c40665ea28944806cb2d409a541f59df530e37274e3bc3babfbe55713a";
+  hasRunfiles = true;
+  version = "1.3.1";
+};
+"biblatex-multiple-dm" = {
+  stripPrefix = 0;
+  sha512.run = "9f83220ae7f2576b4f58394634dea831e5759bf6560ede3244ffb9d18fbf522e9c728c47a4184a43c2dcf6807481a964d7e468e4e6cb921129440bf917925a8f";
+  sha512.doc = "f33e650b2faac0c7b9d078f0f4fd9da8a58562c6a9a8b13acbb4b23001d2ecdde105c08b6b6e62f138783d61f3e071f8780afee2f170c134c275ae62ca5a597a";
+  hasRunfiles = true;
+  version = "1.0.1";
+};
+"biblatex-musuos" = {
+  stripPrefix = 0;
+  sha512.run = "129d1c12bc0e4e8fd339f7bc37442947dc492700a721933c9dda0b18edf78a9b402884376cb7d80893a06834f70a5d377fd264813cdf869ce5e40667f296d618";
+  sha512.doc = "d2fc62bb25394195a161e47ba116f2e795e6009b5f547d09cae2e21cc0f8171c610013622c2a019438e04b6c089d17c21333e3c70b8faeb09f90113cca9536c4";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"biblatex-nature" = {
+  stripPrefix = 0;
+  sha512.run = "265427460a57fa3cba846b3e7dd4fddf9639c11e223cba5e7f47da5b18ed1d348a70c29204378ab560f2eeacfdb12257c25482a1c3d9836f9025d0ddf987b511";
+  sha512.doc = "9053472af9e07e4c297ce0650c7d9d20b85dfe22645652a9be49e950bc9718160433e6ffa01e5d0dec04a036425e31d4b7e6c31de9fc7553a730720fe54eb36a";
+  hasRunfiles = true;
+  version = "1.3c";
+};
+"biblatex-nejm" = {
+  stripPrefix = 0;
+  sha512.run = "97443b036769ffe3487cefa6cb5647eadfb8cdb20db0f6607028298b196a0df1ddf1fdee85e3f163a138da47f28019ab32147f65a5f7cb23b46596c96a772799";
+  sha512.doc = "bfcf854e7545237dab17bfe3cd2045a1914397a02e5fa31bde2bce8c0e44c474fe0389e2cb8cd59516f4db9a3b538524f8321723a49c41233de637075bb41720";
+  sha512.source = "7a2cd3e8205c9b081e9a9601240dffd3943eef31cab5339de92be61fd023f3889958292ba8698760e8d8e6cf196f306b76e34c677d6aa2074271d11cbd78f799";
+  hasRunfiles = true;
+  version = "0.5.0";
+};
+"biblatex-nottsclassic" = {
+  stripPrefix = 0;
+  sha512.run = "a0da4bac443dcbc2c0d8b97d4eed21c171e876cdaee3699a0652c905088056802bc12e1f16965b6b2063e1ca0dee808f5f5e9fd9e5f6da7f956548fd5bf0b222";
+  sha512.doc = "d0b6de2439ff0698b14781deecd260d5851b44da80a10827e0b0bf5ff21ddbe46b979dae9afe988ec1520387668a802a777fba28a830b0e0a7ce60988bfe375a";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"biblatex-opcit-booktitle" = {
+  stripPrefix = 0;
+  sha512.run = "4779618979e358380b2d9d2163a8e62274093bc4e7d7a959364b1980d86110233f3927a80e2dac7390ec43d0626f92311d5923657872d25bdcab5d93dd84956a";
+  sha512.doc = "81990177b6cb92dde0e2d1371fa6e5ad6685c9750eac87063e336fd3412b46eca40e091bf2222631f6abcef995fd04c82a3cfd3f87baa2b069c74457edf7f13a";
+  hasRunfiles = true;
+  version = "1.9.0";
+};
+"biblatex-oxref" = {
+  stripPrefix = 0;
+  sha512.run = "06ae3e10be6563c96570ec00ddb9946ad57f51865429e162603d77e56a9a0c357bd891cca134c1a35a965755eab6f33fe974255ff8634d21c090b935822ff714";
+  sha512.doc = "d7c9f617575fa74dd38214f91e4896fa8b7ad712dc601268f86a3467d88e03abddb9242ee235e23d18b1ce3b2929d49f23758d4d4b5bcbad79a9562acc4e808a";
+  sha512.source = "d736c1cfa5471adafdc5203dae07c3e17091511fed18538c049433f3c0f2a2a364c5bb424ac68fa4809fd566e0acd44f8820f2c0621ef57366708fde8b321a4d";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"biblatex-philosophy" = {
+  stripPrefix = 0;
+  sha512.run = "faf78d9a7a551c2a161bf69c1a9146dd7846cb4ff1c3f6332806f955357a8f3af66b9ddc7d9732246982b9bba60730071390a0cf240a241d50db03655414174d";
+  sha512.doc = "1e68948403c72e93f94b758786a0c632827d5e5bdf0a8db2066e52868b2ee339bbf0948ed381d78db733482cfca075d9d5c26624df9f2f85d4ded232ece45ed8";
+  sha512.source = "e170fb71a9c429204fab059f266e90c4b67a2ecc24f504ef68f70c5ffdb8cc619a2a1963febc0ae308b27f75aa19f0d2e90445ef9e6f3bc81b2fc212c9cf4835";
+  hasRunfiles = true;
+  version = "1.9.8a";
+};
+"biblatex-phys" = {
+  stripPrefix = 0;
+  sha512.run = "8eb90dd0bf30a8eb3a6dae780d9b89724dbd124bdbae112c0d87f865b1e1ba106f13ccdc2d9299735899ef7b8e6aedce3dfa24264123bee1a14249fbf979c716";
+  sha512.doc = "87bf23273c9e981175fc36a2f3d8238fac13ae3115473f755e5151811d3a3903d31d4571f96dfae1a2f257da628e1c13dfc5fb17a49022f2995eacb4f8abbe36";
+  hasRunfiles = true;
+  version = "1.1a";
+};
+"biblatex-publist" = {
+  stripPrefix = 0;
+  sha512.run = "9f73dd60d22adc1af2cc87c7fe3cf38b50fcc173a66cd1511a08a37938a0bcacef20ab27995ccc2cf4912d2b74948e417d0209bef93be8bcf49f51a6883778a4";
+  sha512.doc = "1899ddf6edeb2ed11417cd90957bd9567041d6c06b43a56d08d618a734d7700e5092dc1e350ed03a08e82f3b2e8759ef8fed8f8933996d1d8a5b7ed5c8becb17";
+  hasRunfiles = true;
+  version = "1.16";
+};
+"biblatex-realauthor" = {
+  stripPrefix = 0;
+  sha512.run = "dec592d3f16a431286f7887af863664d777e09e5784a53e9b99247e3bae86c7928907135980d27614e52ab6bd1f1f59a3e8633ecde05d3f9b84b97c84ccefa23";
+  sha512.doc = "bf0ed482905bfcf9bf5a8eda61f609037316012aa2992796c57d48b5f5ccac496dd372ef5e8c88262c8bc5b2d543cbf5f6aba8ff1833a99db6929dfbf379d2cc";
+  hasRunfiles = true;
+  version = "2.7.1a";
+};
+"biblatex-sbl" = {
+  stripPrefix = 0;
+  sha512.run = "dfbe4de870b93fd1bd77aacf003ea56926adc6d52d0b5f47125d411738a66822f8c99bf3d58d0fe955105a30e5f2629a0c37ef5bc3cf00d3ebe895cadf621063";
+  sha512.doc = "c7ccc14015397b816ca508bed2533fbc2ff183dbdb035d13100e8ec8faee18ea7ce10f7d8140b2ebbc6d58831db59ed6a9d7a4b75b0ef346081deebc7c323b72";
+  hasRunfiles = true;
+  version = "0.11";
+};
+"biblatex-science" = {
+  stripPrefix = 0;
+  sha512.run = "e75dccc1a01975776cf94c17aad531823844085e4fa2ba54ba4f74d77ad193c26238eed602f309760f3057b6fc405fd01ec2a7a20647cd8570889832b1ee6bdb";
+  sha512.doc = "ad7d8fd4e54830d77f0a155a04cd523c5c789745b5da34b8ea1efe59ffd4ee1673045dec58d28b8234993a70061337178cddda2267506366549c2639f6c917b7";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"biblatex-shortfields" = {
+  stripPrefix = 0;
+  sha512.run = "be9562c2b79e1f01a110708eb6c0de165a9f596bd18ee72dd6c8add0bf380222a31ae12d86ab843083ae3e7f47a608826b985455f4c8501bbe21d4f0a0e15b80";
+  sha512.doc = "e6e5e6c113ef43a9784f9000637d526f0bc989358d690d4f41be01e1e22abcb33f347421c727c411c2c02f0c11b1c60d54e7fc23180bd6f66c5c46bf29fc1202";
+  hasRunfiles = true;
+  version = "1.0.1";
+};
+"biblatex-socialscienceshuberlin" = {
+  stripPrefix = 0;
+  sha512.run = "f927cccda37e1ab37bd01b49f3247b688ba0186db5b162ab9b73db7be5f83d1b261bcfbf355d575a3905cdfca2421b6b592ae0763d7575957ea382b451fb6099";
+  sha512.doc = "30c411b27e50e0f4ac46385a07606846ae3dd744879de257e2f2abec829e5920957d55e970255cc51cb768f3ca0aab629f30d2860e5745c4addf5aac10ecaca3";
+  hasRunfiles = true;
+  version = "0.0.1";
+};
+"biblatex-source-division" = {
+  stripPrefix = 0;
+  sha512.run = "f7a9b6a9f8fb21a5b9f06e3904ec2147ccd21383c3ced8852b22d0cf62088be103b674466ae571ace6bea52904f6cfb79ef2982bdb16679d02ff1d260d5b3517";
+  sha512.doc = "1ae3883454e6aafc91b996de520a4669a06a67cd74b9df7e7cb7d096291d5f1dbe728a2a0fbd3b5968fdebf64946e829c4722bff33ff52ccbf32d8055f042144";
+  hasRunfiles = true;
+  version = "2.4.2";
+};
+"biblatex-subseries" = {
+  stripPrefix = 0;
+  sha512.run = "37955d7e547fceb3e3856f5e367d39a4952ee0d604652963db2a54466e9d6c1effb6b2c195ffd1dd15eec5552df97419a09763bc51af06c6726dbe40a6e3bbae";
+  sha512.doc = "94bf4807e0623c35690ef7b1fd879710a762630224c0a52ee4e7b4a96c27001a9653de2c7d2ecd2a12cda448bfbdc336c54bcc8fb6674782af017cddfdc8e5fb";
+  hasRunfiles = true;
+  version = "1.2.0";
+};
+"biblatex-swiss-legal" = {
+  stripPrefix = 0;
+  sha512.run = "fd21319f30eb2187333db187c7ad171cb61a75ad4d62ddf3414a04021a7ad4fce57836aa0d2a9ef00488256d5126c18a976f664cff8978f8aa1e80a161dce979";
+  sha512.doc = "beba2cd9e8a78076148f7aedb6b5cf950ed865de9432633f225c160e1a46c98098a8bc94c783ec35cd982e020736c85ec94bc66ad68ead05d7187238ceb0a07c";
+  hasRunfiles = true;
+  version = "1.1.2a";
+};
+"biblatex-trad" = {
+  stripPrefix = 0;
+  sha512.run = "3a21ed76cdfd4c327562aed15a56fda824b33fdbab993accc8e944a662e157ca8ce30c4ac6413b4365c27ce787625e03d206a5574116c205daa55a5211779f7d";
+  sha512.doc = "cabf53ca2febe8bdc26c56f58f99e811ab8695134f3b10c01f946c7c13a63b723ebd598013fdad3eff8aec9d4f629b16bd3915d9087b1dca365cf208a7f72ea5";
+  hasRunfiles = true;
+  version = "0.4a";
+};
+"biblatex-true-citepages-omit" = {
+  stripPrefix = 0;
+  sha512.run = "908f6544890f69b4ca405c94e68c4814c52956bb77108f8e29bb4b6b63ad7de3bc0b1f1213a612f9e0ebd94ddc054907092451a9f326476f39e18a1f81ed0c63";
+  sha512.doc = "bb53e66c1aec87669be8bb608f82cd7683692cf87aeed792d1e9d49045039c15fc7113fe116e04332e8aa6331101a6e97e97f655e26cecee9636409d810f77e7";
+  hasRunfiles = true;
+  version = "2.0.0";
+};
+"bibleref" = {
+  stripPrefix = 0;
+  sha512.run = "0a25a0c4577815d27c02a0af30d1b70eddbb9de696c83333858d698aff9e8ed5e76d6b3278504cb153f284ce8fa23e0748140d7f9cc7fe1e04607825458941e2";
+  sha512.doc = "5479f8c951c37d27f6a4115030fc1065b1da5d9ddfc81be2ef6da561adde77f71fc86b49f08958a7b3310256c38b760aaa556b0a275be920f79b5c6e98e97471";
+  sha512.source = "b21f2e9e48dc4c1bb690a5ac6faec0664ea691bfab8c347df540f3172aff14cd2aac12fe38aee3a9339c874af158c2f440733bdadd9a0ebe45c5a28a642fe08b";
+  hasRunfiles = true;
+  version = "1.23";
+};
+"bibleref-french" = {
+  stripPrefix = 0;
+  sha512.run = "0e7d9a9a6db26612cc2a78c526980aee6b1f47312e02317b5d9791a9386c1799622df36283337c57d33bf4935cf24b1cf65999875479973b8f1309392d97b3a6";
+  sha512.doc = "133644d3298435d9ceaa1443cea19dbf7465ef82a4fdde4c7f2e1f950735fe220e6dafb0512505f8762725bbbc0062413b646204ca728fcf9481dfcb51a9ef35";
+  sha512.source = "d17db1b6a96b8a4c69217e1685e653a03ed2536e146fc10788521a9fa95b44cced0abaff6ba965e654f4d69cc68d03f75956f619cfd8d2735c8ab605876cda09";
+  hasRunfiles = true;
+  version = "2.3.2";
+};
+"bibleref-german" = {
+  stripPrefix = 0;
+  sha512.run = "094177e505025eef5262b876fc49cfb09435b653c87fb1ee7453650e94f098bfbc7f5c78684849b3ce0cec2019d85a0413728397b5ffaf32bde542d8fa86222f";
+  sha512.doc = "c3c610fd8a80ca5a0b8de6ce4aac887a7d16f01e21d845fad595e1d5d6069d8e89459dfd187cc458d21bf2247f4f2c7fe72233a12c8e532b9466f2ceea283360";
+  hasRunfiles = true;
+  version = "1.0a";
+};
+"bibleref-lds" = {
+  stripPrefix = 0;
+  sha512.run = "ba3c4e41b566d0a26bd9f0d11d8e776fe04a18aac451435ff0283ff273971138407753bd6806f34708c5a2f0c1b2581c71de46bbc2e0c8063c9838b3d946f2ca";
+  sha512.doc = "6fd81f90d0c94644231e911ab44827b77864842a3fa91127fb53114179488e5ffd66a404a1b5afee513e0cd3f4c83f38cae547e6dd6484403926c4c46b5cdec7";
+  sha512.source = "0494b05fd3881cc273e8232c398e80ddca4c1286b10aef5d341c6c3573ee40cd5ad1b7a2ae0aab9fd505f94a4bf98643453648b7cc52fda09f5e705a8b4da863";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"bibleref-mouth" = {
+  stripPrefix = 0;
+  sha512.run = "5ae9356781549cb5ecbdfa33085ede0fdbcb7f131d55484153484c777f88e23cf965507afde803e7bc5b775aeb416b9ee767815b5dbec444a3d21be18c7445f4";
+  sha512.doc = "a904b4c9c0c8f3ff1feaaad8d1650b383ff0110bcf463f004938c51bce84ffc860082bf3e598922eedf0aeaa664ef0379ea3304f6dc5b681679d9545026c6bf4";
+  sha512.source = "5ad805eb19d6ce8fef804117b462eb1f1dff887c3b6326fd42eba88c7a218ada84992bc419d889f04363ae9b7073b13ebb5f7a002225191fc22c2a2cb5824514";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"bibleref-parse" = {
+  stripPrefix = 0;
+  sha512.run = "3af7da247ff7f9708ef076a3fe110979e7ff07be0afb08597feeda9ae31e60a66eb2bbbb5da015e10566e83a116cc9f2efa56fe91a57717230fb35bd004c209d";
+  sha512.doc = "08393d76bca59dcbd715cc443ffbf7a1e15894ac6a2963d0ce770c96974c14d42283fd9237c215fe454ec4403a21387ba9dee52ea1bd93b83ab4a13fbc65157c";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"bibletext" = {
+  stripPrefix = 0;
+  sha512.run = "3c5170b747c6426099c021390f7ac226ebf9dbe42ff586c698b3489d47639fcd4198a4cf49261bba9335caebf8f39488d65fe851d60d9f3c2cc2127539ef080a";
+  sha512.doc = "ea38659b5b2bc252760937ecf21d4ac3e8986ac8be6afdc1f2205d84696b8da55e02037bcddb24de389d54a692240ae946ab3e41a0a7913015da4d7b5e12da7f";
+  hasRunfiles = true;
+  version = "0.1.2";
+};
+"biblist" = {
+  stripPrefix = 0;
+  sha512.run = "02f006139b475cb5d4ec2bf85ec098de78f5bed7242ec693317ad4e01acb62a8c5479f295a8a1409fccd41b327daa75a2639b67d9838777b8355e6bd40af478c";
+  sha512.doc = "b5bdd51d7acb738569671f13dbd25fc7b98a8e2e03e324e9501a20ac34cf1ae3578fcd622be73a80467e47a64a81f4d897c4e167b07a5ff5d06635b09dbec51d";
+  hasRunfiles = true;
+};
+"bibtex" = {
+  deps."kpathsea" = tl."kpathsea";
+  sha512.run = "2657225efc1d8f9954d1be9d9b866a626cb252cf596a78a7573ab5b43272e8646a4dd5c59f87275bd6280a2e614bb450c000da6cd9db6b2666f551943ccba8ef";
+  sha512.doc = "4974d5cc9b6702558a9df37d48ed1c00cf12b1ac54c38954c2ff000dcf11a832b2f1267ca1bc009768cc18adccc0fd7bc7bf0e8ebd351f11caaa5f58b63f6585";
+  hasRunfiles = true;
+  version = "0.99d";
+};
+"bibtex8" = {
+  sha512.run = "9d8ebea38bad048488251baf4ec7f939eec9c75df17dba576e510c09da6288a9cd2967c6c1dd5f7a472de51e38030801ff192874fd7d038a1f81e063614675d7";
+  sha512.doc = "bf6b13a5ca1e467c5435b51e6c5c6c4549eb456ae91fcac1c756ca09c165fafd488de6a4d2462057ef6ec7b3ea0b0518bd732556159ced0936494c5ebd4aad22";
+  hasRunfiles = true;
+  version = "3.71";
+};
+"bibtexperllibs" = {
+  stripPrefix = 0;
+  sha512.run = "157db9c0bd7d44fea67844046996b5323f2d26828a8a4031712fe006ef0cdbb0992348d4a8e53c2a52ef0f8a1bd8cd108946baba46783d83d27e05b370bbc6c6";
+  sha512.doc = "59f0d671efc182550ca926b1a208c31569e76bacd96e6444437d8ddfae3ad7fcfba60fcb292fcebacfeed1dc225a3e973b41e852ed77eab11308848e532a2c31";
+  sha512.source = "59b5717b5762643e135ac5540d86e841ab6694539723f808e64c1533aa93c62dbcb1a4fe86e0b649abcf60c86efc94b696834614dc0e3c8b9418dfcc86cd36b0";
+  hasRunfiles = true;
+  version = "1.5";
+};
+"bibtexu" = {
+  sha512.run = "ad6c9702b9b1a41f45e493d27a75f703a06aab99f30ed920f8e3fa8a00d9fdb37009afc7dc5c27ac557e5fb5b3214cb0473ea5099e1fbdc596c5d8f86865a71f";
+  sha512.doc = "317a7806774db23017870f67b66730a77ff3944467bd9575bc6fb9f6a64c8e273bd3e337af218e1b4a156cd4e040bf6c152711d2e8bcd4bcfcb94c4746cd6b06";
+};
+"bibtopic" = {
+  stripPrefix = 0;
+  sha512.run = "34e2a644cc4472f415522e6e798bcb1e2d623afd4783b07f4904405c63296ec912fb6c1d03f80d51c37ab81944cddb5b4f3678a22a7151d89376ed9aa343e9d7";
+  sha512.doc = "5849fd57abb9bd847833993e660e342a537562bea9fba76376f3885d3bd09360c5783e4f04828137b43c076b635a2d566d908be48287c3fe6645c2abcba06652";
+  sha512.source = "2b6d11221e625b6d568874d12cbc7b45d074ebe2bb973d63fcbb9d85689a4c27824f3eec68fcaa46f0de707767baa516c3925ff0fc4d6a90518584847844ede9";
+  hasRunfiles = true;
+  version = "1.1a";
+};
+"bibtopicprefix" = {
+  stripPrefix = 0;
+  sha512.run = "1df7d78498b6de233aea92cb1b18f73893b8cab723fb614a9fe895e5131639c1b4f4318cbe103ea4d9308e383627873576664f0af3ac6fd26aebd5b8b0036379";
+  sha512.doc = "473a7db7638f471fd87b1cb242a3a593e3ff0aa4586c1fbe906cf12f2dd866a27ab50176b01d3f4158cdf0fc263fa54ce16eb63c797392349fbc90a8422c3b2f";
+  sha512.source = "ebb06f55dd58c5948e5586ba29fe3aff33533eb3b044e07be71da0f20512af21d9808ae7d970f168189bc84ccb9bde6a19e935d7d6280e929d169250d3781a3e";
+  hasRunfiles = true;
+  version = "1.10";
+};
+"bibunits" = {
+  stripPrefix = 0;
+  sha512.run = "5658d508b876a88f3916a190a9090d66f2dbee98260af8d23c8358d0708f27fc80d4cf6c348b1f6e1ff196e7de6d5567e371ada640a9a602185611fb09e64ddd";
+  sha512.doc = "888e5a4c1863c15112ece5763b01525a1a74f97ae1270495a41d598e73c4583ce2b9e28030b3054dcfebd60b038fb2d32938d6be947477fca93014fac70676af";
+  sha512.source = "37cbb8ff6443757982a97bf6efa90881807712ebd7f0ce2975ef4960ef74e0541cea9fbffd64f765b6631378f3d21e2ac308ea1554709b6c2582b7cf7485398e";
+  hasRunfiles = true;
+  version = "2.2";
+};
+"bidi" = {
+  stripPrefix = 0;
+  sha512.run = "a65ad641869648ecee494a6d3e18bcecf89ada7f0a340246e0277e13f0b119c1c643b8323238986e0ffae8564ee6e44b84a802c661a7df7da33acd3bb821dc7b";
+  sha512.doc = "17fd648a19f68f7ba3c6155eb01b17ca00f4f64cbfa2809d22f18a073bc6726df5bac69bc8adcfe7291f2846e144c311de9eb48d6ff5860a90289494d943b11f";
+  sha512.source = "3da2a95d2cbb599b2be51e047a9a03e2952ba2e51aa41472913246d18747d3b7ca34b36409033a5c9fb242938e8ad83c5acf9f05a2a7a8a14fb36f0705b0ddb8";
+  hasRunfiles = true;
+  version = "35.9";
+};
+"bidi-atbegshi" = {
+  stripPrefix = 0;
+  sha512.run = "1295c87c038683212deaf52a4436bb6adc2a0cc0220b6767e770aa909d88eaeda4a0bd2dec739a2415745609aaec78cdd91d4949f90663323aeec63cefd45d01";
+  sha512.doc = "6199c4d5b6064244c2fd38d8a0d6c4eac3c790cc786625502d89a5a8a2426f7182cc0e7c4b70513971a0cb4b1230bdbd1382c05762f6537a63a34fa4e79c020d";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"bidicontour" = {
+  stripPrefix = 0;
+  sha512.run = "10364edc592375f69912888945e6d555df30627498aaae409b727392c64cd4aac386433119578a7a01a48bd0cff84aae33079593219b282feb9d96a68bdde78f";
+  sha512.doc = "a1a3f9692ea2e462305f8c6db432586eb76d78cef5fa0e9057cbe5766ad99e25c560ad658569a92d1885e373fb6215fe2f9bcbc1c69b46c3088d36eb92e1aae9";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"bidihl" = {
+  stripPrefix = 0;
+  sha512.run = "fd82ad18b96cdd782fddab8739e09978d08fc37e8c65a177bde930671e102c9ffefe7465fc766860068188f6b9f8222119ac791f07223f79e9840f25659ea3ea";
+  sha512.doc = "c9d0503857f2cfa960e36872757afcab17b2631caa8a33112ff2361694939774052a5249db62d21831e19c17826f422853a78c5522094706bd4208d4c5223019";
+  hasRunfiles = true;
+  version = "0.1c";
+};
+"bidipagegrid" = {
+  stripPrefix = 0;
+  sha512.run = "b823a646d97c15ad9beb3aebeb7b2156aefc3ffd7bdec813e9cb2481e137cd661936c57bacc3b8c42509151205dbd4096329b5cbec25bd06698b698c59739551";
+  sha512.doc = "615d87ca4c29e0a30cf1eee08819b10419a2f399a88f2bfed5bfb6eaf7b1adc8b64a2ccac5da7bedab4e4b951e80488b97203b9960980ca5919f653cc4218996";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"bidipresentation" = {
+  stripPrefix = 0;
+  sha512.run = "a41f98c3f009f7f8de8a41e386cc829c55650e603ccaa8e7e381fae45be2872e0b20e66b68e4d7ef8110abf7c9f6661865d49f7c0cf3ca4ae6f781c3ef5bc0ac";
+  sha512.doc = "56993d41b237d25e00536926b3b23f1b1a6940aabe4f636df73cabd5ec27252de9fb8ff17d872cec3cda7a0a3b8b13013ec77477dd89ebba83a8406da3ee144d";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"bidishadowtext" = {
+  stripPrefix = 0;
+  sha512.run = "bf9a75be6d1f37055c793a16b0a4d019579adcbe14a93b64cec5495e4d7c8bcd8b8c6d86906714f8aa47be5789209a1ce78d19e8023b44b9d52409b281797310";
+  sha512.doc = "ac2f47ed1a5535ff1f0030c38bc210b2e3905bd46ce7024d5237387faf87be6a408ea35648f83a2ad7697ec09a91a4cce1aebd32c3446756adf1955bfa97f7c3";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"bigfoot" = {
+  stripPrefix = 0;
+  sha512.run = "f56fb1545e0a044a143d1a257b9784b5f5dcc56d68bbeb52f909eb928e9d749729135f0c76b3af6dd0306add550b440d32aee21c33e70b9b48a5a82220623702";
+  sha512.doc = "f5935a5ede836798f3eab1ff61d528870a07be712047a64aa5af5576a1c6032e9d88fb5c42cf216e0f9812266f9a8562b5290301446c654dcb46146d7b60a16e";
+  sha512.source = "75316aff3c594fd904adec7cadd0b24aff9d527479d0c59f3fc654772e29cdb4cca938fe5fef6e14b9928fb25f37fdd3f7a894a81f95810813875c4fd419dff6";
+  hasRunfiles = true;
+  version = "2.1";
+};
+"bigints" = {
+  stripPrefix = 0;
+  sha512.run = "23f9a529af214771f74c6921baf8582b6a3c5e170d0fa511c260f5dd3fb6cb6194ef4082ed299dc0a3ff8e413981a36b594b440e7bc5512c7d2732fed9eb7a8e";
+  sha512.doc = "46799d5c6758657eadca7fb30d214baf47c237b63655a71ad19e188fd54b664397babbbc5cf6d9897e81decd027dea1e0d1a6fea97384461ec8976fc19c7fd8d";
+  hasRunfiles = true;
+};
+"binarytree" = {
+  stripPrefix = 0;
+  sha512.run = "b2204194393811994915604d428e0b537bf871681ea42a93d1e26a74d01cdee3ccd7817e7705cb6a3b9a1f2a97381e23226db9d671ddc36beb5c478271099cc0";
+  sha512.doc = "4ef9f7db1d9cf124112e3f3e5c6db7e0b53bd72a5d7674a9f0ac7c471b88ff72309705b8d3942277a93883ef821907f0119d4dd3f645c8caa098f363612df68a";
+  sha512.source = "ff1e8ce1d07c2011624086ae5810220af3e28f19eba4dff9e090e757787797afded50d937a7c1f503eb32bdc91cee2b0b1b42486381b725e57a127e5751ae5d7";
+  hasRunfiles = true;
+  version = "1.01";
+};
+"binomexp" = {
+  stripPrefix = 0;
+  sha512.run = "61cd0072f766bc4abb1e3ed828d06c0e0ae6fb74902ad86e6c4ff3279ddd84386bbb0b1d669d9e71eef362c8d50577047e6076b174ca5b54da8680a43c5e1715";
+  sha512.doc = "9f8e24377ef858e0b3ecc94dc87eeeae08931084316034ea5e3de822ed8b6a65c4744b744a547aea19d3486bb6f2b04f46f1e7ec81cac2470d16b7134885d355";
+  sha512.source = "96ac7f02535a36555dc773b096324e821fa554423dc1d3fbb3436042a2ffa63e7d28b8d872b03b961143178aad40b6d14ef0be7378be99782e94f957889489d9";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"biochemistry-colors" = {
+  stripPrefix = 0;
+  sha512.run = "204e04776677a70f40ac602977cb4e4f53a8d15873808b98653981b2e8198e7cd234189bc0903467569bc95a1f4aa2070343f27042bcbcf2d43720a44dc53b5e";
+  sha512.doc = "e1ce9b0e9afc7b6fad2b22b9a30b8785dca1a8a5e132c23a1ed688fcf6df06245a6914a5123f937fc37b597fa3a2f412e0a4afc5f8aae85cefc32dbf70a14405";
+  hasRunfiles = true;
+  version = "1.00";
+};
+"biocon" = {
+  stripPrefix = 0;
+  sha512.run = "54676e4acaee07609c379d387af4f06b45a4bc0051a3333c250555536114b3862da73d70305b1f62adf7afca2b4a2157cce8afd9e20f10e49b01d4c2ad351cdb";
+  sha512.doc = "c296c8402129338295a3043a66bab91a499b29703f7ecead0a045e0820ced683a4c25168ecdfc184c07282904afed3703b31f8ca707492a913de7c49a351c322";
+  hasRunfiles = true;
+};
+"biolett-bst" = {
+  stripPrefix = 0;
+  sha512.run = "e593f073daea4a8326d0a472999c128f511becde100c5dbedd540fd6ea116c5585b2d3673165ed39abf1942fb66c8372ca1961cef90501244f5320119117af05";
+  sha512.doc = "7b3f9666225849463683a38a3ccb4e5bc9c0869312d31173f48776c2b209eb269309699b2173c2eb5fc9163baabefd1bf6cf288ca683142285dda6f0c6d95b61";
+  hasRunfiles = true;
+};
+"bitelist" = {
+  stripPrefix = 0;
+  sha512.run = "a2022ccc4f45f7a911eea4e99557764770b4e6f2ba0333e043fda2419e29d93bac40462fd36568354a415a9b27204a38620e6191fddcdb053f8956aac5747cbf";
+  sha512.doc = "5c3186464aaadbf269b26321ed9447e8a1633ca9b4a7b323da692277ab074f15b6c39df866eb41955dbd6ca8b0ff76a115786f3273fdb293bfb79893dfe0de99";
+  sha512.source = "0dfbf3dc2ad3b11ce91f1f5f6949f3d8559e0f90044abff431af556560382b5063a96e661c7e95667f3079a7386df85938e937743e2f185a13f4d8a2259fc4eb";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"bitpattern" = {
+  stripPrefix = 0;
+  sha512.run = "34a0ade2d1110a15618b2ecc7f46a413519a0864a2e5cd1e25eacb9dd76cc66b35565b4b8c015780fa1d3dc88e2237ae7de33c77e29fd5428758a526959625af";
+  sha512.doc = "d1fd1b2b46d7846804c9163889bf3a96cda2e11e35de2328c9043f99ccd9d0778710219593565ec9231775e1404d713edd7998e3fa909ada7dee35333137b56f";
+  sha512.source = "8c5860792394f85ab87d2a3ab234496a1f550a24f98a5e2f8f4d815b24e4fd3e7d0a1ffefac3912536d22cd39fdbd91db013b1c8e05d4de92aca47db679fa7e3";
+  hasRunfiles = true;
+};
+"bitter" = {
+  stripPrefix = 0;
+  sha512.run = "edb101df2026b97585f8f5ca712a4bf41f5a2a15122a0e51448fcf1bdfe532bd7f70315644935a942bacdd431db4ff48ebc8b119cbf5d758909560eb2c942633";
+  sha512.doc = "926e4a3e7e19ed8571e23afc779be014c3b451d9696ef8d552d6c7f9072c9ccac2eb3ebd68adbb247d7238b0e4786594f85aaecd65b91ddf883e81f20222f29c";
+  hasRunfiles = true;
+};
+"bizcard" = {
+  stripPrefix = 0;
+  sha512.run = "1575499c7118a96f3273c5b8d68e25a20410daeecbce48d1e6355039b97867b34a06c40785052d378dffbc80b862beafc06b9fedf62254d8b31445d8f95cdd29";
+  sha512.doc = "f529ec77b370def29ad77927170874dc02af37bfb9f57a4e1383b5adaa93f6e59aa33df06d40a80e2374db514f55e2f115e7c8f22e4c92cbd3cb621d8a735bdd";
+  sha512.source = "ea5567a5b3f2a8f70954ca9b5939cb4f9cda05dd128da4d6592dcab25babf284d5fdb2c6af7a31e181f871802ab267fe012d9da3df963be19d789c6984c88cd5";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"blacklettert1" = {
+  stripPrefix = 0;
+  sha512.run = "eb7d531fd91c6d46145c76a08678033e20097805b3a911fa85194217104e071c56d3842cee83c275a11cd4cdee162aee4630d86025cab76806f20e19c975076d";
+  sha512.doc = "a1f18f4adc7f26b9e71db6f171ddb4a8eb15912cf57445110a9da52eb4e0b017a0ace85ddc46ec2df36e73ee3d9bf8dee087fe4467f46bb2bd7f708108585412";
+  sha512.source = "0951e374a22fda09a3fe51e3a7743874c774a756560fb63a68aa199ad2cca674ee87d1dd30b98709b0e74e018e0eec878316ff303575eabb014158311f22a273";
+  hasRunfiles = true;
+};
+"blindtext" = {
+  stripPrefix = 0;
+  sha512.run = "3baf7b9db502824ebf1cf8892cafb189654ad0a91a8cfba399e103b417a91e4f137918b73201fb5988c8dcecabc557865e190cdf77af35e634d0519d52715795";
+  sha512.doc = "290a4c76fbeb8003c6972933baaa95e62b37310594e459e27083326977d370c1408de95eae44d05d848c61eb22b555792e5e38f4a0b70267d6a87c0314268501";
+  sha512.source = "2ca8cbd44a56c36ea66fbad415524697009af4c7e39164bb43d9c689743666c05aded6042393bba6d658a0be1df3ca5ac64a6e8da2e9c726fbcd1500239c4532";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"blkarray" = {
+  stripPrefix = 0;
+  sha512.run = "5ed66db84619cd9130e68e05acf617ed0007db9ea35895e31ad96b543f7d6a01fddf00304f05b0fb71ec9484556326ebad1d895b81b821b9f19fe6ae9f3ee12e";
+  sha512.doc = "81f1d5b5609531deda3475eb906b841d33a6e01ee49c54102474d852856172954d943ee02648fd1ce74d5bf4030db8d36c7b6786c9fe3105f3be08fea36fe207";
+  hasRunfiles = true;
+  version = "0.07";
+};
+"blochsphere" = {
+  stripPrefix = 0;
+  sha512.run = "cf7a7865e3e994f2b951a24018b1b1b71ce2b61542751f495dc14ebc4964a1f4a2833d95bde9b8920d4a4fd60ccc03760e66b8ab64f6b14ff77b9206c98e19a2";
+  sha512.doc = "3a9706ba73e8da7280495f9d32d32a38c9119bac9b8497e7e1bc69a704fde2552848d60ab0ec175544046fdc06b3e8887b4eaeb1c50a5796144cd56e4a44d9e3";
+  sha512.source = "d5c54403afb2cc4db7c5340fe6aaec54da4066f6e9898cbf1f1d2ee3d4ba9a001699e8e32cf38fd87b355c1adbbbcb649635f9abc07976c2139fa6e851a987ac";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"block" = {
+  stripPrefix = 0;
+  sha512.run = "0dedf4b50238e3f12c3d17eca19e4640f2a36511fd65fe4d0baf4f221df279a5d9f28024cb0e20f528e32921e1d6b4c785071210e5ff6471c73e42e58faf89a5";
+  sha512.doc = "77b8c5b6949fb7eade5eee082be1c28433136b8374d45f255a80daa0c7a0340a3154a9f6f174fc52b25c252f1b5a2304b32e26c6d6a2f9af033569d7ba602952";
+  hasRunfiles = true;
+};
+"blockdraw_mp" = {
+  stripPrefix = 0;
+  sha512.run = "86bd39051095fde2a99b232b1139c4c196467d0e1825b3c1c73bd25551a55edb6417a0810b20c4ac3d53ff82519364f2ac72fde3845a750396a4f6a8966c73ef";
+  sha512.doc = "01fc4226a952c76b52726d1217649d9d98ec708163e4a9b997e36f505b385ed145182bca747a2b5334cfe8b4663d010a699664728c5be05cc4daba63ff1f3c00";
+  hasRunfiles = true;
+};
+"bloques" = {
+  stripPrefix = 0;
+  sha512.run = "06b18467956f6782de7e0dad41f66a79e1c7dc5c3ff007a8970f24740dd5edfae0e375288c3510a8acfcdfda7b568f2316827cad1b6a006789afe8a31f829f4f";
+  sha512.doc = "fe37018f08820f21bf188301d0145e42b50563d8dbd8f9b232e6fa1b7eecda931e8a42d40f47ed7cbae24235833eebab874e30dd24d8393dc728d6fcb10057e1";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"blowup" = {
+  stripPrefix = 0;
+  sha512.run = "6ccf18bd12423d3a561e59a2ed9c8e2c7586fa65e47ab784c71111318fe370615acec672ca0e89bde159ec946abc1d4233f8367cc2e6f6f28f3f52dae6bc93e1";
+  sha512.doc = "962ab6dbac803f5043df96d178452da2e4ec2db96a7fe9a8400eff658e61169faff501cab3e7e078a18738d683c3bf1ec09a14f70fecbe5c8190b35101196ce2";
+  sha512.source = "6dad611292dae9ea8fe308beb3796e350a3beeaafc16f53b19d49863d5ab4321a94dfe41b6c0ecce236c922a4e0ef766082656bc41583bcbec42d7ccaa35d544";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"blox" = {
+  stripPrefix = 0;
+  sha512.run = "66a326bc8bf228db3bb7ee061958f0daa7ff8645a7ed89748d60c5193b63b494a94248bd3a9c4734f810b9cbb76cfcedc88201728dec86f1e4d2d33101f741cc";
+  sha512.doc = "5a78aeb59f517d74def3dbb0353545e1efca8bc7627e4c095743a6c2bbe4f9ddc78a0e293f9689089f1f253150404706622745c7a823de9e6b316f2950d98c02";
+  sha512.source = "68dfe55be37e38390310f95f303add7883d416f64a0827f75809153b51764533609ee69278a57c7555b34d9413df884b5a29c65a2f3db291b7382c8fe5ded09e";
+  hasRunfiles = true;
+  version = "2.5";
+};
+"bnumexpr" = {
+  stripPrefix = 0;
+  sha512.run = "c4bf69cf261c8545aeffe69c22e0a018afab5f919aa186efbdae0d0eff6728f36f0ca94831cbef7828e9df349bc2e7eed22c284cb41924b83464efa51418b22e";
+  sha512.doc = "2e1430651869f89d3b1ecd146858b004ea04e6506cad29bcc131761b975a89671504b22e7bbe8bdd9e6be1d513f28f85e073a0f123e21e12584782db5242a50c";
+  sha512.source = "25488522b3ad578b8c2fe5e418c5a6d1bf6295de7f16e743dbe90417ca36a8888309a8b6e56bcd93f72c89b02841f0b1326351f6d47840a1fc59042d11641186";
+  hasRunfiles = true;
+  version = "1.2d";
+};
+"bodegraph" = {
+  stripPrefix = 0;
+  sha512.run = "eb4be1d54f84a372bda79a35aa928be028aa3fdd13c589143e3bfbdd111f4819ac7927bc9eb7473c64fb9035b5bbab789b55a5967e4569e916a7fe516933612d";
+  sha512.doc = "479d5d95643a0b5a673df4d48049f6a7d89b4dc8d1511676d6ff53e039f65fb27994e35d3db3adeef0cdb30658d3eaa454d997ab4649567148fe90938602024c";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"bohr" = {
+  stripPrefix = 0;
+  sha512.run = "cb85d1a70ea2ba3bca7a21996319df8c29f1c28b5a62d08f0f145f5c157d4eda65b66f8fa5b833c40b1a4bb7c91d6f42eecb8d97a3c3d906207558110eee1880";
+  sha512.doc = "5e3dffb0e2d1ac0a5aa3021ade89416e330f7b71600bb1a524920eafbda148bda2f55d5d355efbced93528cad1c918fedbf50f43089f4948d0211e0e13386591";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"boisik" = {
+  stripPrefix = 0;
+  sha512.run = "48403f4b18cb23e7e16e3cbf19d066dc7e1576f4d9ae42b94a4a34508905f5e6e2f8f60f2de7881a29b8525c86a8120a76f1f66f8b9ea047da0a884637b1bb9e";
+  sha512.doc = "c68e8434fe456c5e58a6ebb9e744c81dfba5098c0fb12024de750f73022e300016a424bd1ad9cc85c3122c9a0c863737b2e27f2b151667955f92ebbdc060c6bd";
+  hasRunfiles = true;
+  version = "0.5";
+};
+"boites" = {
+  stripPrefix = 0;
+  sha512.run = "894f6d2484e9b72a24816c34e1254ae8a6d011610770e40590fdc3ed22a24b6f655418694de256a6522e4024f4df033c017f294743113256583ffb8445a63bec";
+  sha512.doc = "22ef96e0f64b4d42b978abbba806f497fecf686d76b159bf3d06aedefe1097569053a11ced6c3ff2c7d05f975345957af0790f2035fa3af396b123da7d41cd7c";
+  sha512.source = "682b3e64f47f71849853bb8752e342ca74a8937e5f1f0f75ba3428ec3e32593339e5f0c90695aa112edd2f607dc4e1c80985558f354b6181f73e5da6cffee8ad";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"bold-extra" = {
+  stripPrefix = 0;
+  sha512.run = "cc12de98493fc01b9a59993ad32e646102751c3023e64f66255a1b66505d3cc2f82d71ac53b4f6691e083bcce3037e521a35feb09cd5019d662a6ce56cc55032";
+  sha512.doc = "4bb27a63f711421437385c2a76f26d74cbfcf6ac5bd8811bf4ca5a0da354608dbc6ff295c3943edae1701fefece397ec356361176a9713f607c9677b8222b7af";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"boldtensors" = {
+  stripPrefix = 0;
+  sha512.run = "3c2d17f2bf8ff48638540ec5a3ea57bc835227291fdf6580747a87dafeed6afa4f49b91a67154da35dfac9a405aab2aaed5bbef1ac188291319a972b4e50ebeb";
+  sha512.doc = "657bdc4960e2d40621520240840ab4252e927baca704da0388e3124938c55de834e59cf8ff3d900aa294ac366ae7b1367909cbe885de08790d51380726960146";
+  hasRunfiles = true;
+};
+"bondgraph" = {
+  stripPrefix = 0;
+  sha512.run = "171233d7850335c1819bf1f74e0bcd1c221e5db73d092b0efea71ad35f71b16e4f240c3c791f9022a9e21ab7a2bb62f20ad06609051ecb54fd0640add0ef8381";
+  sha512.doc = "0697b880e1bcd51c3b5c2e035a15f852f943ffb86ea2952b460f01e42ced2e4fad8f8b15f32f58cc7771c28ca9bf66f2302914bf08d6696b6d952d347199134c";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"bondgraphs" = {
+  stripPrefix = 0;
+  sha512.run = "61ed449d8fcee24f383762eeac54949d709fe3fbcf06598acb8849613c68ce2f445dfb4cfc7871bb6c61bec65ed45e8888dadf036f299a4d5c0bad13db0e16ba";
+  sha512.doc = "223448f91f0cb9f7b032439aeddc85c132f39bf5ffacd058b76c85db825df15bb47bafe333a0ae8afb089864fe966973fbde6da0e02e1fa46b8077e3f84eb6f3";
+  sha512.source = "564af88ac0098d102bfc84932159dcb3df8e06ab30e849d7e039b13ae8855dc6093230e743bef13750a464eadfad54edea4f1a548c14e2df79e03b1f79754254";
+  hasRunfiles = true;
+  version = "1.0.1";
+};
+"bookcover" = {
+  stripPrefix = 0;
+  sha512.run = "1a96e15ab73c11f36b58dfbc0109529fb9bbe322d4c589222e122f774dbcff5337e88a5350a3fac05652aaf0010cf97ea1842693102acf00e9a22db7b6bf77f4";
+  sha512.doc = "1f017e0071060f82e5f530d3726d1d91c5fd742c6a29613a2009756d96a2afcbda1e647cc588c350e90cd65be67207c811ef6466cd863c1b80b39f6afcbbd7e1";
+  sha512.source = "e018f3a388f3c5d0a4ff9f35a952ec96e7af45b2469122d6dc225ae6768704ae9884933200b8a7cb62c1e182602ec697daca530cc966d764ed2d7fe807b09328";
+  hasRunfiles = true;
+  version = "2.3";
+};
+"bookdb" = {
+  stripPrefix = 0;
+  sha512.run = "3e44184427ce346930b35fc2ea3b508d9f32c1e89cc01d66046e271d61e0bbfde54b5d18917b09acc159f1d657f9d32c29f3086b04e4f1dc6da0cd21a0df3da2";
+  sha512.doc = "2449b7d32558665b297e57eaff6529932289e957e0a77d8a8ff84e9614b53844a2684a7b23a62ce6684b6e813223c2c1293bf25e678a1271e3e3cc27383d12b4";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"bookest" = {
+  stripPrefix = 0;
+  sha512.run = "e49d8f0959276202dea2079df1a509dd296858841f4fa2df235743033ba852b856e5f2a9a14176fd986ad1e431ebd3581469e7ea30093b5a01b7d23b791a028e";
+  sha512.doc = "ad51d3cfff90ce83c7f6479f9f0eb49a54613c585561def33529b301e00915d7a8f94fb62660b3bf5bd87104651e7333c3a9b620bbfc1ab7fa9fa510e16dc15b";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"bookhands" = {
+  stripPrefix = 0;
+  sha512.run = "8a341131397637618acdb9bedc835a4ea98f40d55a8a2b312ac820821b00a1f059f37cde2aeb3f5b715eff9928b579a531c4c12d3bdbb3a7629a50d363f1a4cb";
+  sha512.doc = "b5901beafa849a52afaaa7cf09ebab327640eb5ad1c627bea5f8dde2c98aaf176f23f0c9460e7fb2212ce9b4038800c3a3c572830d08d059a04d3574d1015a75";
+  sha512.source = "4df12247bff50722ae11636ecc0071e03d8d296ea958d2a1b84b5b2952f35d890be66af4b85dcf1fe2599e787e71c1b9e7f727a8be9b4ec79eb1bd6aec21925d";
+  hasRunfiles = true;
+};
+"booklet" = {
+  stripPrefix = 0;
+  sha512.run = "be6bc46fa76c0a1ecbfe199b1a1a6f0cedf14a8d583e9ab8ffd75d4cf8ae22e404b289224ed8fa6cd9e143119760d50131e97228cfe75ea56d5ab2f540e8ea8b";
+  sha512.doc = "fb6d74ee03f303433e61fe1afe297cf5e343f95e3834fbdee483522a183d403fb6bac8bfd1d0ca687c448d522d370f5216caba2b52b066ac1657b8dc2fc3df1a";
+  sha512.source = "7b63195d047c6d05cec02af6d44c77e9fbc0a198717a5ed3383f6d662946cb8de9b7659916ab6d7951eeeedfe00abcd68eb006012de3e083d767acffdc0f3cbe";
+  hasRunfiles = true;
+  version = "0.7b";
+};
+"bookman" = {
+  stripPrefix = 0;
+  sha512.run = "bcc6a2ca260350a22927d806b29dec9b7a6c7d9bfff2517d3c64072c9bcb3b73ec72937c004d36c2570a2c78f073548db6897195591e36bae7b6eaaecf6b6023";
+  hasRunfiles = true;
+};
+"booktabs" = {
+  stripPrefix = 0;
+  sha512.run = "54647cc2c7807baefe85a94f0be70a44923183d219e0ebefecad5df0c44080014e9b3ed8296dd9c1d1810deb148168c34e90625c58181af07b561a96c1fbcd46";
+  sha512.doc = "0be929de9e5b20be5df76696a78c57a5282bf0875f9da27fc13b188dabc0bb699e10e66d8660617604299f0367b19edeb40cf7891dc8421d367a18b3c7b3d112";
+  sha512.source = "58e7fbb298b931b0666b3a91c18dc596404912786418f360c059e7c3d49f262af612371b97c5bdb140c5c9d11b8dfc8caa52305cf187ebece6aa71f73d72dd98";
+  hasRunfiles = true;
+  version = "1.6180339";
+};
+"booktabs-de" = {
+  stripPrefix = 0;
+  sha512.run = "25a46153cea4a6e94c77cabf3afac74e642c7362f7c852725e8443de8ef8873c5a9d2dab3fc3b083dd7382e10d74e71b40b40b1143afce1646e853899c0ea2c6";
+  sha512.doc = "1016522eb74332542a9497f47fb0ea884c7d8b3d0a0630b8a6604bdc41ee08d29d963fcee0d643a8260d2e667c0b39edc74f4998ecbe66bc7a45ef23ac78371c";
+  version = "1.61803";
+};
+"booktabs-fr" = {
+  stripPrefix = 0;
+  sha512.run = "62d4aefc19ff86a60b8fc68a5203bbc2dd2c86ef2f74d5dc0d2a664ff342c13077f5f71a4991704e1d9c69587e4ecde629e5432ade3695efbbc388714fa3c268";
+  sha512.doc = "eab2c83e6d81a601ec98ffe43ed4b5ec71e17c6ec42c26c519fdbbb3c3e82154b01bb569adca65dbf540ccbd7263cc20806dbe901ba44204b84d07d235b07bc7";
+  version = "1.00";
+};
+"boolexpr" = {
+  stripPrefix = 0;
+  sha512.run = "677a397363b80126e45609d125ec2cf22b3ef144216e19183bcd48c1f0ccd6e2e079fbb0a2e7ac03f094470c8c0bc64ae652863aed970ee9fc75a9a69b60c618";
+  sha512.doc = "6351bf2d3382c5a3b9a07a8458d7f158ee3bd0e72c96af5f2f985d28a40859f95ae7ae956e5dbaa1ed93b1331322ae1e8901ad3110f5e74024efd831e29b6b44";
+  sha512.source = "561daf8eb74f10987be27e884023ad443f24e8d48b573dbe8eab5e958c2ac9f2319b293874050c7d7f56ea3c22f31eaa57f3101c8878b466ad8938018427e765";
+  hasRunfiles = true;
+  version = "3.14";
+};
+"boondox" = {
+  stripPrefix = 0;
+  sha512.run = "348b48abd7a8b95f37d211612ccc1e4931c0a768af82b695c263b7e8931eded562049ae5a1198361363b08cc269cfb8eafae93c074fe1ada7e9881dfc88d7a41";
+  sha512.doc = "24ee6699a84da5931e5223f27bf74518544ebe1a11b303bbcb27c4afc203267159fd4b6d8d9e5828e92c96abd8fa3bb395528868bba0cc26db93fa6748643eca";
+  hasRunfiles = true;
+  version = "1.02d";
+};
+"bophook" = {
+  stripPrefix = 0;
+  sha512.run = "8ce41fecd2befaf448ed238d8bf643362f5a945b7391d18b2698c006421b7b60ce4d886e09dc579eef12cfb459f49247f7f3afebdf8b590e9285c608d654ed60";
+  sha512.doc = "7d8ce0b7caffa4e16539154ade5a3df6d6b42b75bc521643473ff568ef5c65c3014fb22053b353a917d2c4782f378bc765475dca5d20b3dc06ff02c0dd2a63ec";
+  sha512.source = "ca7e5fc30d23c022e4fec8414c9ef11d2acd5707ad781428021f8a828c6c8b891674fc6eb372a0dc33944e2a54adb9b86645529ff28b4438c31d8477cb2b3a6d";
+  hasRunfiles = true;
+  version = "0.02";
+};
+"borceux" = {
+  stripPrefix = 0;
+  sha512.run = "e4658e7a672caccd24832b31b0635dc61ae5ace5297569a84d9da981eb37f6b9b944bc33c1e964c09c7042e3e74f9b3067795fdad508e52e624f2bfaf439559e";
+  sha512.doc = "202e6b476c5c6f48ea2e6bdf2710d01afcdd9a02669d220bb11bab8fa920f41fddb8aa152a815045ce9d0c92b761f90ab34cd426ba62cf26282d71696f00f03f";
+  hasRunfiles = true;
+};
+"bosisio" = {
+  stripPrefix = 0;
+  sha512.run = "659cd163c28a52fc12651b35b8018d0df7e4fb706739b090167689a7199a8f9ca3bc3376ed3a5b6c076e9242f4f8132dbec6cbeead499453fa5c9cbd2aecce38";
+  sha512.doc = "7fc9a651f6845643fecbb9f0fff150fec2a22273accc420451c2c5dbeab6e40cbeb9b51a32589787c005fe479f626111214bebadb217a238baab07fa18d8c92b";
+  sha512.source = "494ff83253abdc9f0d81b3ee36f1d860938b1eb8a7691ecda596d31126624f3272ba65685a9436a5817b93a786da97e6bc6702249630d71f697ef394f801584e";
+  hasRunfiles = true;
+};
+"boxedminipage" = {
+  stripPrefix = 0;
+  sha512.run = "374033f9b8b88c55db6de9247d065f7841d49c8b7d42386694752e78b4bb2f4a311e42d5ca3c1e0dd5e694fddb0c18bf9ae6ccb39dc80bf075086e18fe39bf59";
+  sha512.doc = "6fe8b0c04117d6b70972ca973e9a71cb33f2ea3f2789460aecb1f0702b896a3cf1d2e6d31533a13819caf1636c5e33ca40f60156992770e243be509dff765644";
+  hasRunfiles = true;
+  version = "2";
+};
+"boxedminipage2e" = {
+  stripPrefix = 0;
+  sha512.run = "418fbe838e907f3f545522922cf20548abcde20320dc63396434f7b68f578abaffa9f7b76a18373318ce5ed7cef699c64ad8e10e01cedf0b568e65f33ab609b9";
+  sha512.doc = "1366f37d45e3df28d3b370b3a6d9618aad06dc68127d1c22cccb0a64d3f82195d5ca93adae86158a830cca26e7f3da051bd36ab1f80cd4bf3609676c0b790dd8";
+  sha512.source = "2bf7a086348da5cc606d5b5fa0b4b0c4c5f17e77aecb54fd94bd306d43ebddef8af5e143246a8695f18a447271508576c4a4bb051d4ad8b9e0cdb08f7212431c";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"boxhandler" = {
+  stripPrefix = 0;
+  sha512.run = "8aa988155d5115e2fbfbee113013cbb4d32cebc670229104cf96c2920c81bb23245e2365cf31705b67cf72345387a275c83f170a777129ddafdf6cb7558bb077";
+  sha512.doc = "15b69a4d434be9561cbcf45a5c3c68ae9560fae35ed2256cfcb4c2bca8ac172a8bd0d6f7335644f586a9b3da65948b9372ae9f7ec9bf2c0d43b572cce5af20bc";
+  sha512.source = "20e1dd79907029b015d9c6d85c80fa907efc490a80db7f0e871b6b379c1370982fced3e3865a9fc0c7492a9d3631d163b98177dca99deff4a78d7f2ee354f2cd";
+  hasRunfiles = true;
+  version = "1.30";
+};
+"bpchem" = {
+  stripPrefix = 0;
+  sha512.run = "3359bc429ec00bdf3b26810e373fd9bba8f562d4782d16adf2706b59ec1cd153f0fd565c26319bac0cf5065b6a2ea99ad5cf6461fba62a7bae8355fad7d8279b";
+  sha512.doc = "c8edfa3e5fd901ef705b6b55dd2278eabd996e2b3aa76ec5da9c34c07db95909b67f31990684883edd256f7a5eb7c29450886472fafbd0ff91f8e81abc4dc93e";
+  sha512.source = "0f2629325312dc8e7d05d593bf97ddba9b18d0709d0c29fd5df2b7e5077a15624d98edbca24e20c039e7e72bfc21e676c7bfdb6d29f7c84efd4c40f41d3d930c";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"bpolynomial" = {
+  stripPrefix = 0;
+  sha512.run = "370b9ee803390f51da2cf7da4832ce9a51d923420908ffbf5dba21a2380e13cf345413eb81465e0acf86bc4011ec0bdf8cfcf5ac0cdf62cb3e88b2f2b6a6edb1";
+  sha512.doc = "2778eccb795d4543baa16966d55ab68a8c2c6f547d7a544aafec365036d9805a5cbfce97efbd25d0b39329814e95f6a2e18610f5e83a4d755a31dafbd651ce0b";
+  hasRunfiles = true;
+  version = "0.5";
+};
+"br-lex" = {
+  stripPrefix = 0;
+  sha512.run = "e4eede34a086ab025a9918798feea2c6b8b19d86782a6d93745aa82d40258e1619433eb445d0b3c1335dcb195689bb76ac8142e6c65618cea6392e243dadd915";
+  sha512.doc = "3d277aeef55721a833cd613c98852c33f7ce22a8034e2fe62952409cffe1ea49ebe1f3b80f91018ea51fadef226939a14e103884dca19227193a32d1e3ba3110";
+  hasRunfiles = true;
+};
+"bracketkey" = {
+  stripPrefix = 0;
+  sha512.run = "ecdf6f5c6cfa46a3a0eedc9eeef5bbc59cc05a2a831249787ff70fda7d69466862c18dd7ed7a440b8b2bb93c6a08225c7a97bb2f5588d94548d9f6b626ec36aa";
+  sha512.doc = "db067a4ab9ac087f565d184c48a90800e68ddb25f5f78146ef1f65bcd3cfb1d0adea78483ca8e27fb9f82bbf26d23c5c16ce735aae194f4816ea73eb993ef099";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"braids" = {
+  stripPrefix = 0;
+  sha512.run = "bf0c0ff2b6e81b0dbbbb317a1be711e8dc9812214740048a0dea40d8d3045c3fbb996fe1369783ed906571587a5fd241e6a7ce5023c3278ee1bdda19a7411787";
+  sha512.doc = "2a96dfb2c18a89d34e4116e1fa81f48532605b625b227fb24f7a949a9e3707f1ffc02f4a20b254e963801a8f97d7f093db7b568adc3b8f4a1fce4bbb7ffb51b5";
+  sha512.source = "0a0760d9d88ba7c96d2691b0e180ed09ea9932f8170c4c112eef5eb58e112bd69e1d2362bd5ba46b852eb0d7678bf9049c9ae8e69e0b47772f8edfd2c23c5285";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"braille" = {
+  stripPrefix = 0;
+  sha512.run = "04893a3664b10fa1d5b912751e51b6d4a596821535da87aa1f2c2c5632e1fc60278435fe9deae4b0fba8296f2e46015b27b592721dde26dcc4acf7e3bd672a4c";
+  sha512.doc = "1cf6922ffa0785adb8e7e7fa5cfe134b206d70d012eb2ec1bd40bedb72ace43c8a17b3e94b16635473d425420f362c49f1b509796d43ca0d2aff0bd9be9f25cf";
+  hasRunfiles = true;
+};
+"braket" = {
+  stripPrefix = 0;
+  sha512.run = "dc5f931ce9adbb3e8398cfab83402776d92018945172c7c17f04772f3253942c6ebecd5ca0f3d23f0befa87327dea4a3a9b90528bb7409963f04d9b856186562";
+  sha512.doc = "9bdd3cec0da91ffd13d556b9620e9c502a658374657e2821141191000a2321bf030edc9c32641b5ae6c52acfc7266c377a8f4dfe4891cb616f8d4f6a377d9ee0";
+  hasRunfiles = true;
+};
+"brandeis-dissertation" = {
+  stripPrefix = 0;
+  sha512.run = "fa3e2f0c3cc3f1fa1607095dfd52e0d518e5710488a0d86bf9c46de444efbb5b1b253284cf8e996869ef4ff2c051ff1a6331296a7b8517ae93ebb91e7dff2826";
+  sha512.doc = "fb7fee200d7547615f5671743f89d571e9ebb7a0d52f5e8d835568230bdf16c9b4c8279d65dd93fec929e9337af666d2b9dae3dce744e4b71ad98b578a262099";
+  sha512.source = "b4aafd8e9afb0d8cfc9e184181e0e911214d1420114cb32ae41a184f4c7b5ce2a262c5bdb1ffd0144d9e566937a8c662d25316ef82c0d74ed5d5142a3b01a7b5";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"brandeis-problemset" = {
+  stripPrefix = 0;
+  sha512.run = "fc5026cefa87e1ab248d9d26466a05e11b112c75bc3908c7e6f123a1436d5f813038176e97e1ed290cc99f93dfc8d024c88c1242b9bb41689bfa0a29153db9da";
+  sha512.doc = "0f6857c1ff226d797d6e0dc96bf040e2393564121b54d5d9b1e9e35acb01b7663441e0460cd117a0b015cb768bfdf3f40df142ae93d5a0d77f9a84f31c3e45b1";
+  hasRunfiles = true;
+  version = "0.5.5";
+};
+"breakcites" = {
+  stripPrefix = 0;
+  sha512.run = "13fdad42586a361b4e01999476f4d92ccc0fbcca4ee2663153b9eabbb08ad571dae6631306e9fc590d94f3f02af79519de30a78ed35f737004d86bd62b76786a";
+  sha512.doc = "2184e40db7f4a01113ba1040a62f8213f43bf34202a57a33abfc6291e84b01cf27298442f0f636289892d02764f1000ff3542f2ca6e490e0eaf6d5bab247b3f4";
+  hasRunfiles = true;
+};
+"breakurl" = {
+  stripPrefix = 0;
+  sha512.run = "fa1fa9e3ac50f305ae5b82eb63997d1674b3f640f36d502a1000b439dd52dcaf6b539d153a2c7022f3a00fc0042bcfe341e850ed6b01f7058b1f8f6fd92b4d9b";
+  sha512.doc = "38f7847274cbee0a6e7c536a982d0110670cf6af54bfa99718a862e1974fdd839f6ef6871cbe2c40bcd0b2a9036c806eb2b57c8adaee583ef316da367ed854f5";
+  sha512.source = "9ecbae9c483331d636a522f67e5da197e4f647daff0a0fe81f4542c7248934c662046c8e61bd10fadb44144918cd508f09c57880b9c1e0c6515cb2dfd35e52cc";
+  hasRunfiles = true;
+  version = "1.40";
+};
+"bredzenie" = {
+  stripPrefix = 0;
+  sha512.run = "1e5629a2e6e6099a319d8b8a1efec83262780c70a57c482f66a33a48722bcdb18fb891a96b6b6f29c54d71ce581dd1c82decdd22ad74d6ef61765fec3f8c3614";
+  sha512.doc = "29fba5bb48aeb2353616cfe9a8dd4fff90c164c10779b8115958733470fd47dc40a567212c62315110a5a7a51363c9f917c4984583d40177037d6b0803ce66fe";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"breqn" = {
+  stripPrefix = 0;
+  sha512.run = "0b0c40a54bebca784f8057c4f3b0595777bff39c016d6c3c97ea8b4e3d2b357045eb65ae8e24a98fc1777ea523bc372ec164ebe3b92e749704f156af0733148f";
+  sha512.doc = "fd38471bc060a853d853326870aaed0770ad8d7826168a9539ffbc074debe7d054f351f9ee34380ffd78aaefd55f1fa5aa16fa7da823d4d7b981296c67d435a3";
+  sha512.source = "16c62790776452a5aba32f48389299fa9b6c9193bc12168f75057ade14761e09902adb95436e064e0d84729e6421781f05943cea9ea914d2b23b7f179bc7fba3";
+  hasRunfiles = true;
+  version = "0.98f";
+};
+"bropd" = {
+  stripPrefix = 0;
+  sha512.run = "d6bcf207cddeb6115cab45eab12d48326f067df2fec21386ca29282ccd484e572ee4b5420473079b033bf2b085e134fb42b76b3f18d5b56b47ad765c62b07023";
+  sha512.doc = "b9ed0de353b0b0e6d7c8e48f3a20c5ee88a0ee9fb1873ced88e89b9c4d73b20701add802442e69aecc419a2c6f433ca12ccea9130abcf895a5568f7b2d66d6a2";
+  sha512.source = "b33ad62f68eb425381db0c6724fbcea32b1e37f8dace6737af6e996b7103d19eadabf60873ff367feb9c3a69743d219ce41d5274b8c533d5b5323a971d01a06f";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"brushscr" = {
+  stripPrefix = 0;
+  sha512.run = "f8c7107b0e98cc6e402ec8ee6f5e6f9a1b8e0d046dddae9486e4ca68327f370a75a0f90000939828605334b3ad3c5caaf5e541c7933c5545fe3e531066fa650f";
+  sha512.doc = "41ad7b1afc7cb0f4bfdf0bcff4c1d85f3d9603c3d48ccb62f94a6fa2258cf3f60f03ee1b4b5756d85a77ba4ff9afddbccaba1c4bd5b69d85ce4fed206aa16b1c";
+  hasRunfiles = true;
+};
+"bullcntr" = {
+  stripPrefix = 0;
+  sha512.run = "886109fdce6a936d22b829ff769b130a445876073c73b2bc1767610302ba8a40112938311a138e1c93a0495a6e7d5cafa8d3606ca3b2fe48af442e023195ab93";
+  sha512.doc = "ab01cfba0570bc565d8b40945aec5d87739a0826d5c323c5ee960c0d3c7c3135ef2c8b7878268b415ffae3beb06fbc6af48656e7c4a6a45ee423254ce23cad1e";
+  sha512.source = "cd05d28c2e5c759863403e3ea9e8700002a4ef4f9021decec9a681b92d944ecc4c6765bae332f8645d06d12ab6adc096f4a560a195c981d5e6cbc72acb56e812";
+  hasRunfiles = true;
+  version = "0.04";
+};
+"bundledoc" = {
+  sha512.run = "5b3b4e343e8ce0103a7f0cc736331995fde330b473c21d97df761bffab8e0b82f00238187801978611e32b2190b0a0d51c87c4249135228c8bd53ae8fcb6bfc8";
+  sha512.doc = "acd848c58261520c2ea9038d0229b75e7c12e72c087ea1aacc3bd0dc4f8f99d50cf243d282abe44d72c99a75618cf284de400e342a9128f9f1ff87b54ebcdd9a";
+  hasRunfiles = true;
+  version = "3.4";
+};
+"burmese" = {
+  stripPrefix = 0;
+  sha512.run = "7bce3a31febfc6a959ba4779d975cf93276a0bd1115e06a50a3c8d705e49e8d6747ecebc7eac2147f021a538dda1bb241d8f320ef1486229c930141e06d6ae26";
+  sha512.doc = "4a7f3628efd913a362786564dd260dc1a63e51a397af3d92222db6f758b7a7792b13e58422d2604ae98f615fb5fc42e77f265e505236db9bc981d7951e0ee1ed";
+  sha512.source = "066d164d97f4fa9e1050d75c3c20997be859718a2be37c465010040f969b2d3aa17edc3c241f5aca45d91dd12517d72a731d02954088ee83ff5aeec3be0b0fcd";
+  hasRunfiles = true;
+};
+"businesscard-qrcode" = {
+  stripPrefix = 0;
+  sha512.run = "c0cccd1959a358d06db838ab035dfe2c4c2b960ffbea5241057871e4131ab06bdefd369fbc0179e74777fd83720692eb190322c797bc8da2ea84f1943684faf7";
+  sha512.doc = "bc2db833044104ec82b3c8913067e7687ab18944e7b12ac003391a207fe287b92426de1fce32088eb4293eb2a1bf955a21a82a42ed673938113d9d8a01ec9d10";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"bussproofs" = {
+  stripPrefix = 0;
+  sha512.run = "a23aa5580e6c3d691c7b14a58b20af1e135681000c50a84be01040df7e1a844b8abeebe11a9dc456cee37e9e34ec020139c9f8de4de51833a88f90e495a65fcc";
+  sha512.doc = "b9af525a6a6204c07095864d257c65feda61214c557b0801c9a0c4357578755e1d01e278fe875c0b290f250e3adb03d260a5816a4ccd9f6f51ba67cd8af8269e";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"bussproofs-extra" = {
+  stripPrefix = 0;
+  sha512.run = "8410e4a795b79e7ea06bfd72c713f39950da8d1c418002bc497eb802ae71dce5d5372f7692267ca62891cbb2a58719b76c2bce3f10ec11cff63c40bae9122a2e";
+  sha512.doc = "87ed5af043bcb4d41f301d4b09dae511fa509fc9c50ac70cef29d0df4bc023f97856504c0650b6139ff8bcd9c25a046411b58f72db016d7429788db757a4e87a";
+  sha512.source = "de1b272c20c7aa3d1c6f06fef7226083890a8b43ac3ad9ec54d6ff0649ee268b9c9acdf5d3e335f1fbf7f2b9aec3ff91517f126fe8d354e32662e3d6938b197e";
+  hasRunfiles = true;
+  version = "0.4";
+};
+"bxbase" = {
+  stripPrefix = 0;
+  sha512.run = "18b281f5147a179d2908944dc35e5b9547bb094b15adb559f8154c432710e531ada4c7ab6f755cb631ab882d005e55dd5aecf8602b61fa07bc54fa91506aac89";
+  sha512.doc = "da2a4dbce775b37d143b112159e132568b3c48bfa56599ab5f04db0b0b51d1b901775036b76cb4bc049f8193117a01a4d2b6054744a49a8d57f986a2193fc6d8";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"bxcalc" = {
+  stripPrefix = 0;
+  sha512.run = "6669cb896306c352a7320eb957fe5751e7d0c4916fe7504cf9b385a16e9b1280267f2e7a2a5430d052369841f713e86e58e5c03fb995b0d7dd16123dd316c368";
+  sha512.doc = "d7606ce81855c390bef558df8af083cd2576700d2d26c5d892a938ca6f9720d685d2e78e6fb6a3b15d9c672db9b795ce169a617a93f2baf5240ffe3b73ab7df4";
+  hasRunfiles = true;
+  version = "1.0a";
+};
+"bxcjkjatype" = {
+  stripPrefix = 0;
+  sha512.run = "ea75072ca87925cbac9c69335fd77b509396516b11cd74b4f29976566613a3f0fe091b8d77f00803932c55f87fd1af964243a02271ef3ba64f08da5a065fb7f3";
+  sha512.doc = "4cf0962455982064956fed4080ccb8a4e4e386bdde5952880e05246bb655f064c22b4c1e2af32d3a8850304c1dd46c817ef16f0cb8a0e8cb764fcf788bb4ce6a";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"bxdpx-beamer" = {
+  stripPrefix = 0;
+  sha512.run = "48009e69d2bb6c316c5d33dcc9d17fcf9f762b68688130ee8407648039b7c3effbbdeaf991bda7842738da59213cc855b50f48cf179ec77e0682729d6e5d3709";
+  sha512.doc = "2692918a0fb1ac7bccc6e905350c6cd716b72b33d8f00bad73ed0146238965d0c1a1d9de07c22fbef1ba7211a919c1152342a9f4bb48185099aa470f76374bc8";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"bxdvidriver" = {
+  stripPrefix = 0;
+  sha512.run = "dc37ee5237e6eb02fca173b8b0501795604930b56c3e9101c6b653ad6df12cb5ae82ad81e66aac5c1ce4ff0aa8d7f05658f4b41057ede286715c25d290682182";
+  sha512.doc = "83e18920fb6f2f54f54c401fe83ff131dcbe64ca712ded59f0690d90f1d8b2623ec135692a3fa437b77fe82336553a529d36b5bdcec96a96cd57523f11cc0e0b";
+  hasRunfiles = true;
+  version = "0.2a";
+};
+"bxeepic" = {
+  stripPrefix = 0;
+  sha512.run = "a0436e9dc7dffa9c7a7b2a41662a41db934aa4242c953f480400b7a2c8a71bb526ebe8eefa46b02db03364efdf14fd88c1dcd267ebd59f594d72540ddd3048c2";
+  sha512.doc = "25789b297ba2fcfb81e74637cb2270d41eff858e747b841cfbf5d29791fe6697d3a9cfd4abbbbc4ed0a5c5b274f8b5a7cdeaccc995f6ae623d2a6e2d831b7e55";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"bxenclose" = {
+  stripPrefix = 0;
+  sha512.run = "f3d0f39e9c21f3bff75d118bb1a9408e7fb2c84beb9301873cd37a678de4b7680d1e8f13693839ce32e1e816e756d8f0af14cc620952afc8fb02885debf478a8";
+  sha512.doc = "ea7e0f17ee70d3d4798e85e3788af1110fb2adb436106ad08f601655453af2c5d192d5e3854fee1b29f6ac21f2f6b02e239ff4ec6ae9181818b23bdbac45583e";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"bxghost" = {
+  stripPrefix = 0;
+  sha512.run = "a3818f3a4e804a402f8a54288d135bd4e9ffd5cb8a061923548ae4534dbc46490f32c1b5db24bd8cdc32709ad7326145abd7f99592e0d22a14bb60938bbba841";
+  sha512.doc = "bed6d2e8e579b904941ae095ce879eabfa501374542d4716b890f3071d199723f2875ef47f0fa72adf1f8c542c763f4b49fab09d192db10400f17d9c2e0852cc";
+  hasRunfiles = true;
+  version = "0.2.0";
+};
+"bxjaholiday" = {
+  stripPrefix = 0;
+  sha512.run = "d028523087abe4587c8eaf877eb2dd0f4c12fc12055c29bc1bbf615e855155a77266df8cdf50bb458600bab0264836346a6d98fc183aafc92b546cfc7bcc1bdf";
+  sha512.doc = "398bc4686c7c3b121260cbaf379ca66f7f64911b18d771c04507287d3cce834256662dd8f72f1f55601648cc364703f88a0713d9dab19c53cf19c252e2919fd1";
+  hasRunfiles = true;
+  version = "1.0.0";
+};
+"bxjalipsum" = {
+  stripPrefix = 0;
+  sha512.run = "fa8f096023f86fe53d09ef1e719d1930248981f4a9c4f762ceb00eb7e42ae87a876857f03b8210ded78798c4ea18bc44486a87876bd5f2509a9270f09d56a53f";
+  sha512.doc = "551385ef1ec3aed5d21cef7f1f66254f937c1a7f979db2ad083411580a64cd152b16b9629bdeaa8c2a14ebdc8566278e7a9533ea178b953b033b2637a5f29df4";
+  hasRunfiles = true;
+  version = "0.3a";
+};
+"bxjaprnind" = {
+  stripPrefix = 0;
+  sha512.run = "77f754e9d9cfc643286df17c7102685ee4c893b5b99308da7a8a9033fc043a7ac95a34dc4a253da4f5e6ed29b35a04376eba1635abbbbe6a6e2670d0d47f50b8";
+  sha512.doc = "0010c6e9d1041013401f59820795e338d9e0f852b2d29212fda0c66cda3e2dbdf59593547a8d83d9c6d78d48fb0372a4335976ad1fcc190c3c71a3b5607a47a4";
+  hasRunfiles = true;
+  version = "0.3b";
+};
+"bxjscls" = {
+  stripPrefix = 0;
+  sha512.run = "a109996608f1ab1b12274726e8522b6e3f07cf6c07774800168a8ed171948684a8821260f4917838f5ee7509858f6a668cd881ec6d5be2aa29ccecbcb51bb200";
+  sha512.doc = "f76a6fd1b5656be0a3a486e3dbe9dfde5e39d40310e3912158a6bee3981dfd615beb89675a5875cb5d31cc73f556a61842ddb427662e0e3ef40ca85415811014";
+  sha512.source = "97cd18d0e977d341e9ae04899c29541b24946ea87905b51477c59cc3231ee2cb650b7876e8a7c9acca2a712ab7d02c30d2d7cff52c080d87fefed8974ed91be4";
+  hasRunfiles = true;
+  version = "1.9h";
+};
+"bxnewfont" = {
+  stripPrefix = 0;
+  sha512.run = "83775ee72fceb4de0037327561ea2f1723db89dc23ccc42245390212ae1fb849c92c75b2e7b4b23440c62086116b8f0a14b12b27f97c9277c55a7454b231826f";
+  sha512.doc = "f09fde7abd39a4df52175eff90363a469270ab1385f3600e654535cc90d7b4b5ba704be734323dffca512f5942c45a9ffb5cd19a73026c224cee3be33eaa5b65";
+  hasRunfiles = true;
+  version = "0.2b";
+};
+"bxorigcapt" = {
+  stripPrefix = 0;
+  sha512.run = "de76176e7448732d3d429c11b605f24a01779651dc5bb3969a6cdd45ac1801a9d2472dcb4bda9751aae09428d7962981a4c9c581244f15b68b6a4aea43d54972";
+  sha512.doc = "0ec8b913862e51f89f661de3f628bb51a306d09d04adce4ff46183d8bb24c351f73c877b08b699f704661ae2c31131b7a959ad863a3a6613235318f8825136a2";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"bxpapersize" = {
+  stripPrefix = 0;
+  sha512.run = "09b679f14ae4c851b0f4df35ca44653960ba0ca6de03b923602721c25a68e17c6ac3818bc91e189606fe64e3d0585ebf5e5ec5ace60f52435ff79cf6c7a8a12b";
+  sha512.doc = "519c4ab5c8eff946e075a84834209adfad9d1262ddcb30fe51b66bdfab5a15d7abe50549073f8d0aba1b661cc262c11f179a0c71edf1e3eceddef020e3fe107f";
+  hasRunfiles = true;
+  version = "0.4";
+};
+"bxpdfver" = {
+  stripPrefix = 0;
+  sha512.run = "06795ad6cf70da674064e9712584761e9ed7fc295585d66439c5501532fb5ed3da03d05c8b22b6022d3491079b7ae40af1edae12dd3c959c2adc0f05732be723";
+  sha512.doc = "326cf6f244660a7d94a4c847ee9c7a43cf3d2fc199ae94035a76464691b48355432e71fff82f9c6bd3642e10b2011ba4d8d0f318304818ad9a8c27c579d3ca37";
+  hasRunfiles = true;
+  version = "0.4";
+};
+"bxtexlogo" = {
+  stripPrefix = 0;
+  sha512.run = "d3144e28a695f0e9939ac3074679558757f2272f0a2f2ad958481981389fae44a663c07fb914b13a890a736989bbb9946d22e1c9bd5d3ffba1db010fa451ee58";
+  sha512.doc = "59ee17c9147587d1eb1052dcf4624517cb575c49163a24f3dcbf27785f75b325c0de1c079c0b214cc6a63dd9d5862578303170eea91b0903d3b803c044078ee5";
+  hasRunfiles = true;
+  version = "0.4";
+};
+"bxwareki" = {
+  stripPrefix = 0;
+  sha512.run = "73f44924ed35cf95af7d2eae057a48fcdd307741ef9a0a0943638681f9008eac56e8f2b1f57afdf0c3dc789a079e65ab1142cc5e993ecf6b382e8bb127f6ea1e";
+  sha512.doc = "d861ef91292b76b4f248b51d99d062116f49be1f942629d049fff00e20a6e383bed050799a576e14f7daef52dd4f7f1fdd2ce898374191b9c719421ea755d7f0";
+  hasRunfiles = true;
+  version = "0.6";
+};
+"bytefield" = {
+  stripPrefix = 0;
+  sha512.run = "ae5c3c97ded2cc83be2dad6d67132b75eb55b22ffd8d4c0bd49dc842344a310c4ac80571165e43d2b446148dee1ae3927fc2193a92e85e75ad457b4732bca7ed";
+  sha512.doc = "6657581a9b97383c2dc3f8972ff77461a73ea33ecc0ba4dacbf0188e1db0dbe21e2d324dbb8fac7f05fafa585d3672d6de7d7db267a8e9f5e623838d0c46df5d";
+  sha512.source = "1fab74d218ade9454924cff4345c55d6dde25d4350cd238834677d24be89ddc58ce7a610e089158281a472b102db3809979f25a57c0c31ce50dbfcef398a662a";
+  hasRunfiles = true;
+  version = "2.4";
+};
+"c-pascal" = {
+  stripPrefix = 0;
+  sha512.run = "59aa375b3b953f2fab04547b3234b36fd08af39392cfdf05f6992a90ef3a52503b2e11296787763abb9ce6251f9cc2fd062d78133038ca4a92e1b06ae65118e9";
+  sha512.doc = "52252a2265d9bd48f09ddaf5f1517a6a74980897f0e8e0ad7ea71bafb194ca5bb98386af537ef2a4fb955e62ccba3d16cc1ebbae094502f16ae3bea0c5073c79";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"c90" = {
+  stripPrefix = 0;
+  sha512.run = "f7e7aeb931bd215d38b41e1ded6d8fd046f90e54946a1bd1d4dc04b7ede4f6c20a3501d57397601f8a423fed9518672fffa9d45f17515f56b05217ebd59efe81";
+  sha512.doc = "dbf3f9d28bfad1d52dae43f9e9804d082525ea6deef94ba4ebbef6d06b06ad6010f5944c52ce992b1ba4cb5f3877a8eb3b694f106f0eaaef48ef350f62c76e8e";
+  sha512.source = "fac23323734b4cf9357067cf6d5304d36e669798494636d6b3283a074cbf3ec74168138f6d9bac3d6cb7e3ce3c7d5e35f7d98672865fa9dc87ea59d4227e337e";
+  hasRunfiles = true;
+};
+"cabin" = {
+  stripPrefix = 0;
+  sha512.run = "f27414422184524fb0128f96865e3dc2de91efa6c71701b1829f87880ea95819a33233b7bfe82dcd396d6cdbd04c1d886f294323cdbd27b2729f23a34f0bf25e";
+  sha512.doc = "e63cdda53ef967030c13d31047bfa3ea25e45585e508a213f12c6cd1e8af7ab71387bb7ccb460654986254f8ff46462ce9a4b0c90ca01456983df74b942354fe";
+  hasRunfiles = true;
+};
+"cachepic" = {
+  sha512.run = "a0405befc4ed9217cedc4abc78c355b869bb803fa4be32245198ba4aa8151884ace023b3465db3b4757c923d0425fd1d186e25facd7c29d05d5072668a9f0e3d";
+  sha512.doc = "93108475f74b2356cea79a8403729df7c24e95871680b0b53f9316a7b158aa973ce108632a121198459352968bfdfd79f265d4aa301ecd00ce55cf56db5f976c";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"caladea" = {
+  stripPrefix = 0;
+  sha512.run = "3e1d6bbb049ee4ac637fe051ac39d2e590d0e5ef4f2801ed9c1dac96b9ec8724e7643fcffe8a72de905572a75525fc6954871d8d953ae120af7e9f336da51442";
+  sha512.doc = "f6b47af3681349536a80bf5b6ea0db2113e35384dd7ce99da3704bdad3a3c5dc8f6dc0e4b1402c89ac97ece9907af5e0f2263edc4c0bb0a1e46ee89cac2f6639";
+  hasRunfiles = true;
+};
+"calcage" = {
+  stripPrefix = 0;
+  sha512.run = "d3f6d46166f2b37e6ee8ff9185c6ddf5ed99ca2b32c7520966fa9a3db95d3a9517e39f5e8f928332a8dba490274c4fe48e62b6ce83ca10d0fbdb9a4218e0d92b";
+  sha512.doc = "4c3f1ed751005a5fc19e0ae40dfeb010ca211dbbdb7ac11c01525c7643f1e993346f1af21d411705ebcb119f8b1c20e4ad35384d2be9618fbe6db2de99e6eb45";
+  sha512.source = "aa49d205c8366ad92a46195c113e69fe123979560ae92a51589718136bc8df8b3b00e0aad4d6643ca36d217be02fa61529c4a1779d6826a52f80d29649fc50ac";
+  hasRunfiles = true;
+  version = "0.90";
+};
+"calctab" = {
+  stripPrefix = 0;
+  sha512.run = "20ccd46a047987004eef78f75b18f49b1e3001e240604e2657e23e30c4e6f286ba700cb828eeffbd608880ac4994d4a3cd2d67aa336957fecd1d3ea8a48058b1";
+  sha512.doc = "555a9d966fe556e8aa1dd39ec1ec327995f62fa447bfd2bbb8efe47ad667427eef249c749f9d2c0436c16e31e6fe7b0dced9b449da307411ac186d30c2407270";
+  hasRunfiles = true;
+  version = "0.6.1";
+};
+"calculation" = {
+  stripPrefix = 0;
+  sha512.run = "d60f9face95cdf6944363ce66b842b2a695b468e77193785564d1697244e193cc0dcf462e7a13c8a22eee173d5d4cd192ae59bbc68e086ac27c92d2dbaf6f156";
+  sha512.doc = "741f4600986798bb191352ef98ac1a398014f92956267c36ca1834d95996008204107dcd8575077d7eb2dc1ddc627f03ffdf071ce0d8b2646809063eba59625a";
+  sha512.source = "010291ac9b9d4529283ae9ed9054a2d797109a5eba2e999d26c4e847bba6c0bbb3a357a76526c77549636d2446d38fca2b6063ca238f5912c1aced9e2b63bb8a";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"calculator" = {
+  stripPrefix = 0;
+  sha512.run = "d381e15db10c289b3de79bc6464c714391949f149cf5e6ff7af04e3f195308cd9d71627dc04c6138b17d4d2c1e5caeb44149e327df78d20e54344d95cfc4d8ac";
+  sha512.doc = "107055cab430fa0867f48b3e4c9215052926ea328d29d920dd0345bc48cc956a0673f6ba3b72c954acd98fb65678acde00b4d18def40225e1b8ff656a7938754";
+  sha512.source = "3121da3beab24f10d9898b88fb971613050078d2d09deedb03f3c5e6b9b1dd9f0a9e8a2c7c8ae092e8cee7058abca6366ff09dd15aab4f386adab0206e11303b";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"calligra" = {
+  stripPrefix = 0;
+  sha512.run = "9479d6b5ab33b12acae5cb3858c218dc4a1e1901c4006dca5160778798813d333b2e9e615eeb29e01007084d8479c58573f88ad5e282dfc06f3f5a9820df482c";
+  sha512.doc = "05e7b61864f483f0fc50d4680d80a395282a5c7f36b7ccaebb70e1c24cb5a101c4ee5accfec8d12c7fac0e7a32851dc15906267b93e6d75094b7ac646826dead";
+  hasRunfiles = true;
+};
+"calligra-type1" = {
+  stripPrefix = 0;
+  sha512.run = "325764734735203d4e355d33b30a289d699fa10377212e39bf33d3195f2dfdebd4397785d69d6ca392e040cd2fd5bad20b0055b5f92620149fc96ed0d6d337a7";
+  sha512.doc = "c1acbd3ae35c423b9414b5e132e1a164d4b102ecf9d7305548bb5d203a8d3a25309e2aa5a5d09277d310b9446013ca2db65f9ce6d5783432ed325838bfc9a48f";
+  hasRunfiles = true;
+  version = "001.000";
+};
+"callouts" = {
+  stripPrefix = 0;
+  sha512.run = "a440d3815f5c5a6d291ce4d7a20bc8483bebe190a0e6944de9f5be78a23eef119f41740ca0fbae4515b6ea7f2aefff90a62005883c44e8d70c6aec0a58c777ee";
+  sha512.doc = "0801298bd110f2e484b45c66626c790217666f3351aeeab87881d7f32ada1868222a21f2a7861afaacdea302ad269d2062aaf5fa9d13fdf8efb93efaeb499bb6";
+  hasRunfiles = true;
+};
+"calrsfs" = {
+  stripPrefix = 0;
+  sha512.run = "34b5315e9e5e0ca532733f7b7ebe66e77d935fedf0e042aec63fb7cae257a423db5e93e288b9e1dacb26b0b75784eddffa8b565acfa537a7d970297f71e63a2e";
+  sha512.doc = "2378c004fe888bd2d60d0830ec98e805a2bdea3a5a6f4161dd3d4cb56c437dabdb579f3293845a10e316cd868725abd304ecb8eab55fb4c728ed5bc0d2073673";
+  hasRunfiles = true;
+};
+"cals" = {
+  stripPrefix = 0;
+  sha512.run = "75321e774560d7a205a7bf6b7d2d512c6aa9b5f38f6116813ff43ebd4d1fed23ebe26c235b278ee5723062e49630fc5f9480dccbe5bdfa44f5168f18657ddadc";
+  sha512.doc = "15accc06e3de07dc535078300efbffe305d8e26a3aa0e81304de37090500210932f08c24454d0bcb5d93ced903832891b6f987525eb64d04b1a7bfe577071153";
+  sha512.source = "59a99cfdb7923d0e9edfa656f53825194b3c1ad0cc554e28ce792783d3196b525a9e7dc0e5ef8dd824e4d35b39a71946c579978520c7fb87de24f1e8b91c1253";
+  hasRunfiles = true;
+  version = "2.4.2";
+};
+"calxxxx-yyyy" = {
+  stripPrefix = 0;
+  sha512.run = "d66d7c31c9e16d79d28b99a395b8d2206bf64ca1f036d94a34d9a60c67f87c5ee0e9295a9d01a8fe16590b42e570ee2d49e7ffb07cd831588ae9d8bab40746f2";
+  sha512.doc = "53e3cc3a8152d7bcad1e00f2ab7163b0c6630c0a9a065f0bbe79ac9caf871bc50c985ba22eef2a69f745296ec22353e6d2780e92711d4c0453033ed436b414da";
+  hasRunfiles = true;
+  version = "20.19a";
+};
+"cancel" = {
+  stripPrefix = 0;
+  sha512.run = "ac6e6b642dde29e32e45d7a0e967370c1f7a6ce604075cd43c57b1ee002e75adbe4fbc81de30e8d252cd58f2ac091503595a433c5de898deb3bfbdbb6f2d2e62";
+  sha512.doc = "5af252a521c1976166db248c4c19d4fcadd32ec9801e0cd42b73e0a3a0adc461b88d765b90dec1af859474fc64bc00cbc8be44450cb4da6b43944c8fc46ba670";
+  hasRunfiles = true;
+  version = "2.2";
+};
+"canoniclayout" = {
+  stripPrefix = 0;
+  sha512.run = "19858946010eaac99d0a0b0808f31c57949b7488dea007e7a5a2d8820b0ae16518ff8aa48bfa5e067d90c8662937de7af7f325aa9a80dba382a03a66d89e46b6";
+  sha512.doc = "221b7eb51a3e5e9da2e354646cf1c09a78811ff1804805171bedc1e72e5c1ebc3a2e974f3b5ce3eb6322e17111ce2486e9c9452367e4e753be029d096ae9033d";
+  sha512.source = "27864e2f85680ac3fc8103bf14a420cd3b636124482ac2d0a382061825e70cf3674c8da8eb91fd8db5f2a7a15c173d2e16cc7f576cee28ac2a1d82417d662c8f";
+  hasRunfiles = true;
+  version = "0.4";
+};
+"cantarell" = {
+  stripPrefix = 0;
+  sha512.run = "4565c3ff88cb4449fc2feab5f87de79eee7f38d0bdf61866d8fff421bc92e0382653b9956a724b1540c64ac78dbb529f34421e5dd0a3b76a2669da3a0d667c89";
+  sha512.doc = "2c696061a46a3b83951869ebb36b31da87e61d9489441d14b8f8ca2eaf4616802ac917e9e68d56d6e81fc03a534175b592d74ac42f8079340f476725f869f0b7";
+  hasRunfiles = true;
+  version = "3.2";
+};
+"capt-of" = {
+  stripPrefix = 0;
+  sha512.run = "f3b1b81aa5a8c2ed9d5ab94e2e242442674af957d3f987b0db459ff8ca920abaab43d46db234b92ab588bb5f7d4c587eccf586a87fd492659f5b088760859c62";
+  sha512.doc = "a8fa6b2a0787a3e52f3a9a22482ba9f9217ae97b985b4975c690d240ae040f4f1e17c3ea7439d53337e5a0815a66754d0e6c528417c04d7c6684d28e869f71d0";
+  sha512.source = "87d4bb47226cef478ada2482605b925a3ebb3c1ee1fc624f39e724a857101b113856d99bf659ec5e01ce6773e0f695e424c41ba0640f23a76e9721d06a1d4f56";
+  hasRunfiles = true;
+};
+"captcont" = {
+  stripPrefix = 0;
+  sha512.run = "b5002e8ea4fc8ca1840190e8a2d40540576dc5e17110da473a8981198e3f24c858644b181545be3bed6275cd0e0bb9848a6058adfc8dbef26956e0754c4e4699";
+  sha512.doc = "91bdb436163ff745f3aecc67eec747ef5a1853035d86258bbe23a080a92b3393f72b4029bad719765663c94e79217df4edf753be930a3e4b62f0b999c296ea86";
+  sha512.source = "9c9f8b2785ce2620db8e5c373cd2eee4d9aa3cd8eb47c648625ca7250e7ace861d9dbc31432a7dd7d0f6c7ccd48b43aba74df519d72e3fa1a3c9546de946e591";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"captdef" = {
+  stripPrefix = 0;
+  sha512.run = "c24a7d66c1daa3a9c336a8555286876aea9e969a4107c42c258f0f4c9a88070316df70e0f2a860adb6335a33e49cdd7a9ba8391255f1e1fb283bd2f6a7e7b343";
+  sha512.doc = "c0a1a4584d0802eda39812d2c293fabed2487b0cedb57df622519d5857c2ef10e54e66032e9e9ee9ab81c757fb827eabf422b1bf2ab0ae6f7c22ab3aecb49a8f";
+  hasRunfiles = true;
+};
+"caption" = {
+  stripPrefix = 0;
+  sha512.run = "047ef9f5bb8b5885ebd656e961360135cb531a9b8b4e582a5d92b8b813b593e4b588e969c75d83c52e65656701855fb16335f9f5fe3ebf0145a3a08bd59b28af";
+  sha512.doc = "cf45afa493d9365446cce41ac6c4e7cecb08495dbf1c6f7ad5cb17a57a85dbc1237a595406beeea259ccedd0737776da6c393441010c2f7995b2675f7ce30170";
+  sha512.source = "377db41ee95d07c1c13c54b291d88d11c6c31ecaa982f59953d6b69c33f59f9a91f3df323e0a9bf975feefc4b8ce788d6f1485cb0e052b5d78315fb7e9bdab04";
+  hasRunfiles = true;
+};
+"carbohydrates" = {
+  stripPrefix = 0;
+  sha512.run = "dfccca523ef4ea2c9bba9ebdbed7f6bbce1ab0739be02118231d1eb449bc826dd5e96406d5e009239a1bf25088e8df289e2e66423a536d76cf592af1a50f276a";
+  sha512.doc = "67de0675fbe00573058f428d34779b3423d1c9a7d47be5f8f1c3ba6b3cfb6783f5f1a945c1f201bb719bfe835ef035dfb56864a13ba0f12e0e83ef1ca0ce059d";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"carlisle" = {
+  stripPrefix = 0;
+  sha512.run = "d3e743a5e614479167ead02eabfefeffc8006e27c486fb5c57f1cb94278418f86db0431c752310bc1f7cda6dad22b1610edf4d24742391f6b743cad4ea050344";
+  sha512.doc = "8d49c9d72669bffa042defaa53b4bdacf2e107753608747162947f05ad8438b9463afd905a376e462e6491293cf0c4a202e0b76db965854c19b97641d0a7d295";
+  sha512.source = "83417675f97cd8235ad3a38f3e333596188e717573a8739e41c1041d1641e1e53d48f189f6c01a58509ea8ca1c5d755c56aeeb9842e205c9aa8a01cfc7f688e9";
+  hasRunfiles = true;
+};
+"carlito" = {
+  stripPrefix = 0;
+  sha512.run = "57575185b89cf337f612f3e5b8458502e0d86a49c992d40f8cdb390417b0387fb0039ec316fa807fcddad7795e9f6617f62cf0bd6827bb654ac28231f65bc0a8";
+  sha512.doc = "b656565ef24d9939545e52af7bafcfc8a3613d0f206e1aab455e339c1d2590e930207db24033c8585a1e7950ec9f550d3b37a0c1adf456800b85ef63b68f875d";
+  hasRunfiles = true;
+};
+"carolmin-ps" = {
+  stripPrefix = 0;
+  sha512.run = "61ae809b5e4e7ff493de30ebb825870ab9caa8dc64d6d3c82d4654fece82dece4937c798e3c1e5086a84411edbcaf8c2ea777a9534865b38d4bc5457ae59aa25";
+  sha512.doc = "284d9f740d1e4b1a4c989b527bac80e54afa74013d1234bf9e1c2d42ac2ca4387c3b0d24004818e1fb92b001582114a4432480804c721cc7df0bd3b85835f111";
+  hasRunfiles = true;
+};
+"cascade" = {
+  stripPrefix = 0;
+  sha512.run = "d72e9c46f4228af10abc33e96818ee488d09389d21575b40cec183c03664c63cf7dc7b9dc319b0fb775c41b5c9df8f767d06d131ada730f9b8dfb655111fd7fe";
+  sha512.doc = "d74ad316352672ad753f48e1b1c317dbdf402927d75d583d85d85367ceac69228e81b726b575e84d2746a709457e18d25817ebe7850dd17ca07515192749b713";
+  sha512.source = "53ef700bc723b28b36ffde548b030639e467fa1fd41570179b7ae9661c3d4a9911d9dc765362ce46178d06d3a67dfa1fb408e8f074141c80d32de437554a3b9f";
+  hasRunfiles = true;
+  version = "1.01";
+};
+"cascadilla" = {
+  stripPrefix = 0;
+  sha512.run = "df66bd91562f3678e2ef42f16a4a0c4af95209fb28b1176b5b63968632b3235391180b06431a42afdc73a9e4f97f47c8c954ed1ef2ccb746cdbf1d65058ad919";
+  sha512.doc = "2c15b786f550642c26cc8f5e0151dd5b31e964b46d59837b3f1ccbe118fba6ad8f06f86c6a5bdc6a791615929bf4c9b7c2287f930d1ca3c8bd6c2d0d7ddf64b2";
+  hasRunfiles = true;
+  version = "1.8.2";
+};
+"cases" = {
+  stripPrefix = 0;
+  sha512.run = "43d512d0a408c82b80cd3cc93ad858ded8a0af5634557e1a67fd41cdbef6f3df5d42d9f3e910d05fc203b741f9fb374271d22b2a22c4704010b934237e055c82";
+  sha512.doc = "1d09e32e370635db9c9d3bb618b51da7c16f178b6d6639eb7e4247b67e12036ddea3095a41dee4ea4746eee8ea7ec33ceed5e3f84473dc5c08ef078734a02589";
+  hasRunfiles = true;
+  version = "2.5";
+};
+"casyl" = {
+  stripPrefix = 0;
+  sha512.run = "1536d4fe6c0cc647def47d3686ac73757da8b4ebbb99a5188e78944d59350c0da731f2e51a40c94a1e05b225a793f292766de4221792804887b4350631c8a24b";
+  sha512.doc = "74adbaee46656ad57512a11986f834239d60259eb45014e2c738f7f5b5bb47897185528c0feeb96c45ab7d6c04e679e1858417a93db791b72b5eea1cf828c0ce";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"catchfilebetweentags" = {
+  stripPrefix = 0;
+  sha512.run = "71656fb162aae4fccf15767911b8524c4f3a72f4c6fbeaea45a3dd9593489ec7644e7c10ab61a49cdd125ffe56e61331c30e35a10517720948d4f03b97b20056";
+  sha512.doc = "4071d6d6ada488b5bbbac0df3b7604939fafbebc17808430d8bd389b86a8aeca0df90da77fb00f8be14af9e9a79c45bf5a2dc0b9ea45af34f60cbce83810e1a5";
+  sha512.source = "0d0e6436d1e065fd518a743fd39062f1ef9a86f450130a2339ae59e5af0a9fd0ebeaf72a66301c8ad42c6e218a01bef48c977044cf284c98cbf25e6c8f1773b9";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"catcodes" = {
+  stripPrefix = 0;
+  sha512.run = "6eeba6d0c7435050e5ca07a6b0a24bca1714a9ba3d3a20168547502c2ec954b9d74918767c9728c1595355fdb84eb74ef258fee86cae1907fc5b186ccac0a939";
+  sha512.doc = "4dbf09f34abc39d9aa5003ce3defe4f5a04b0cade5d6a848bbde4ff3f35ff6bd511b8dd8dade14f92b1ba38bda2595da65da589b0236920c7aa340d245e0cb7c";
+  sha512.source = "157520a8e968f5236add71d55aab0ddec48eeac801349ae1900cf70bcaf1faa4cfe98632ac5fa41cabee6dfb6fa46655a609023329d161cad06ece33f10d03d7";
+  hasRunfiles = true;
+  version = "r0.2";
+};
+"catechis" = {
+  stripPrefix = 0;
+  sha512.run = "2fb8f8ae6f9e597740edbdd0e686f9715dbd4ad2df2cf9d3737b09d1ef496582e243b8e21414fab8cb89d3d5a8ad30a4d82276551ad6fa548895c6cbc7612cb9";
+  sha512.doc = "2273842b6b0222c98736fe6338eec505e5a75ca45d180c259bb3073ed47a5d0bab65fbb95630076f764db64d978ad8b3dbdb6a12775d2af3ea730c9d1b938bf6";
+  sha512.source = "bd78292392877d0694fc085ab92e64ea47df555103ac745c8a0751ac445d0c74a034bfa9be1b39a3e16c0578da7bb68c7635a359f3caf69a2dd3d03ad21b51fb";
+  hasRunfiles = true;
+  version = "2.5";
+};
+"catoptions" = {
+  stripPrefix = 0;
+  sha512.run = "1169ec654a56230c615f561649ca1fc22716eaee05e5229d1d2320ff73717b708abb98789d7457093e5ab5f2dc67f3e818e58c7e8f32c8f29014e19548f02de1";
+  sha512.doc = "4c35a3fc5829e3492fad27f2635bb4ae62b17b5d012db40fcdc5929ffe0f3917ec76c12a940d5fc6dad2b8d7d9d12042c7f5c2350467ba0777a23c97372cca5c";
+  hasRunfiles = true;
+  version = "0.2.7h";
+};
+"cbcoptic" = {
+  stripPrefix = 0;
+  sha512.run = "7d48e324b5c5ff5b0755903973e0b439025e98277269f21cae33709a6c39eb6df7cd8f054b22fb8b1c072cabf9e92d0f1456cb41fbdd5a6e99bc0d63952e6c3c";
+  sha512.doc = "e7e33c5af518e7fc4f8fb15af79a9aefc1ab8cb4401d0eecbd6b418acfb01c2fa790d4d7f55206ec9d6d865aa177b2872f4d742bec2991e7118df4b834341af2";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"cbfonts" = {
+  stripPrefix = 0;
+  deps."cbfonts-fd" = tl."cbfonts-fd";
+  sha512.run = "652472d9251cc9090906627a823fbaef3015ce0a5db5d08a347f6bb496303adb65339ccc2cd55c19df489512ba06c605342ba2871f99175685259415f6d3bc0a";
+  sha512.doc = "5168d8ae6380b6d7521e99037bc2b28c13f135aac9a3cda160c103d3fdd17555e1b6ffd371e8aba968d74cf50ac1d01a7415977f8efbfd1a8841ca4ce730e66e";
+  hasRunfiles = true;
+};
+"cbfonts-fd" = {
+  stripPrefix = 0;
+  sha512.run = "f892af7e63b4376f2d82d886516f6b25d362f8dc627435b4f353a72926f25c3867af1fb42a4083ebd16bddd05ea797d643b94f556cea37495fa0fb7786e33b3e";
+  sha512.doc = "dc2b0570e042ed2e676c55df43b9254a277d1258861cd3c4c45ef65012dc8182c0e374ddf71f3d3ec6a667b5ef99bb449c43ada155367e1ef26a6ca8c8dd058d";
+  sha512.source = "5a66545f0bdb71b951edde9debe8262a2bdd5e644da1fd3ee966cbae883ac62c6f121add0a5e9a39096081b1a810a602a45eddf5f2933c21bced260fa59f6a5e";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"cc-pl" = {
+  stripPrefix = 0;
+  sha512.run = "768977678d3948fa5f479bba6248ffaed6b176a4b3d0c90d691b02e91108b7567420ec600fac235a7d8351ed00803f760d4432015f518c1c62c93af95b0a8394";
+  sha512.doc = "cb004afd1b835f5d75389f3470e1cf46506e8db46f56f562e5376b5f1a8a9d45d59ec99d7df2d791df0462cbc760aa8a278c6a73a582afa8c4e7d8c73149febf";
+  hasRunfiles = true;
+  version = "1.02.2";
+};
+"ccaption" = {
+  stripPrefix = 0;
+  sha512.run = "f002efbd7af71c108e041daaa182a4432d1886a058cbfda2da7fcf6c0f75a217d04bbb8498deed29c7f03a8d22d4d2e24327e6a3b284d38c7b37200431f17918";
+  sha512.doc = "a3d2f92700e3421c37a666093944ae297ed39a35d99d6971978f5707619046603fad06b84aad55f41d3af08725535470ccec6d6bde3ab8f1ce4f0a53038e9ca8";
+  sha512.source = "83a8ab7b7b72c156ea07bf7d19c759d342187440574dc82dc0f5e683abe490c3b408d672464d142922229593a1f8363881a48475da0884920484c6057a40358a";
+  hasRunfiles = true;
+  version = "3.2c";
+};
+"ccfonts" = {
+  stripPrefix = 0;
+  sha512.run = "0affcca65346d83ddfdd9f2d6a9bd9baf41113b396a99c76c88801b1d509f3e9d6168f0a4659a5cd440bb46fff996d5f3361ba342e11c902d0866f616e0d41c9";
+  sha512.doc = "6a08c3f13c5ece4ebd67ff1463a4c27c1b5b114fa777e916c034a66dca5c8c85bfc138394ae9c2955182f68f34a91ad57eb4834f749e7107b0a311e0eb61848e";
+  sha512.source = "2d560016ccd3e2c6593e5d06b4cbcf1ac238d3bb0b0d9632bff8f69720bc0cd1b20d2f7e3bc33f3204820abba18995467758db492b9f91fe1850f1eae55487b9";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"ccicons" = {
+  stripPrefix = 0;
+  sha512.run = "45df39a60891940e4ab24c489d7ff76971a7d378156ab4c533eb739fcc8723bc7ff6ef81322ef157b2498e24b5df97e6807796330f5852301e1e88d950f90d40";
+  sha512.doc = "3e988fa5a9c4f3a07f0557d5ef787ff9f6ee2630be5ecbcab1e892086430f39a8f8e23deaeb624c1bc4b3f2f00b708edef4b3ed645c56400c13c0f9351b5d8dc";
+  sha512.source = "c071924713a6b3e3a45a5e83a116c535ac3fed4958d9d395151c6592c854e8e493b51d2409dbdd07f2e53a6d3b51657b6578888f6dc6197584e5cee2e629610b";
+  hasRunfiles = true;
+  version = "1.6";
+};
+"cclicenses" = {
+  stripPrefix = 0;
+  sha512.run = "dca388e065610abad24a76f7dc600d9ae659973fbc47f4fc2157958aa2850d9c3bae7811418bf76effaf696386a62584c8a2ff158e98ec7a971bd1dc800424ea";
+  sha512.doc = "eb710fbac41527da39c26d5d27aaa84faf05e380356e9c3bc1a0c0fcb4d2dd5412f304d323ccf13084dfe8d31243698350fbdbefac07fff6cfabceed9f4d842c";
+  sha512.source = "d20b1cce1635b415d7368e49a9a32ee3a61efca8d0807b67c7e92ed59604fda1fd9b9d168ac23d54b90e396d971fd421463eb1ec77009d3e077e474166afed55";
+  hasRunfiles = true;
+};
+"cd" = {
+  stripPrefix = 0;
+  sha512.run = "8b47a219e4d40364e1a4ed4d13245c0c9334508ffca0cff565a8d8856aef32184bdf0a19966027fc4e958a06b4f5a53bfb66188c6fd065a1b3b230cf1da2f484";
+  sha512.doc = "5ab78083715332130aacf3a97f6280f2533e7f9383c38ddf431d3486c6e88589cc69b7cd760088fbd2928c9b349ff583bc275ce8d80590234deeaf1e1a23b4ca";
+  sha512.source = "094b4b41d99fcc81c4c02ec7aeeaa999b3e5ec7dd4984976021a1d75c5bf9c5a3e3f13b0acb939c14f80ec05b3843fda7558aaf7c324315434b69954084c57ed";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"cd-cover" = {
+  stripPrefix = 0;
+  sha512.run = "345b001cd40137d9739a97c3c06549c3c7b761f56f61109dd4908c767151515081defd6c432232ec7a9fdeb8e85e95258ded345facdef0cf6bffa82bb5c39fbe";
+  sha512.doc = "f22c8eccbecb35d4c3c01788c0eb8ca793fbaf7b97e2bd54ec79e78ba10c13a4eef46c5eee70f1550cc7c378bb01926e8eecc6d41916df22a6e615aacd2b1e75";
+  sha512.source = "d8ecc73c18376678b2ee97b8bc81aebae7860e40451427e03f382aedbacdbc17a7761e8a78e275470c36927b3461c422bc62462163c6d92c509eb50cfa75598c";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"cdpbundl" = {
+  stripPrefix = 0;
+  sha512.run = "142dc5657e1482cdf7392ee7df6967557cf09e5b733b12e8c7559863c2edc66a3439b29c7cf16c2461cc1090090117337f63db899bf7bba0cc23d04bb573c633";
+  sha512.doc = "3fbfe5b5a8771bf3a74c6adc7a90e04f6085179c11a6db4ed8ebe644e00e334f447f3d32214d72ac341d18e3c79d3bfcfd788053d2065eeced76ad7c7ce6a9aa";
+  sha512.source = "579575c916a417be5d097d7e766c0cc599856d0b2aa3d4eae5880748c57c7735457aed493d3818974f25f07990b7496b6c5a92ceee39e0116510c420ae69d81f";
+  hasRunfiles = true;
+  version = "0.36d";
+};
+"cell" = {
+  stripPrefix = 0;
+  sha512.run = "917431174b203fd839d3cf81ed965cc654d66597246ef7a4f9f3c3a945397b546eef1e7bfc4f9fb52889e149ee2fd195dd559c317472831e66e0fc3253a6c22b";
+  sha512.doc = "3cbf1ffa3902f49c155f2ee6b13e24b9abcbdf50da4668042dbc720ef20f483e230fd2ffdc8448007df7ced1ed34077811199cda4fbb35c104dce73084215bf4";
+  hasRunfiles = true;
+};
+"cellprops" = {
+  stripPrefix = 0;
+  sha512.run = "0dd543116fdf89a6d83c5e7a4a96b6dd627f156b13bc56db5905bdb32f2e880d9292913d6e3423e1eb248c0340fa2e9cfb73d0c7795fb4bd363f90c9d150ebc9";
+  sha512.doc = "3f44b803ca78fc08732ca9971da4bfc7755cc73e0b8cae8d88ab3b4e4906271bffe9762b75b2281776f36f3813f3cf0d58c0b38bf2fbb14b25156e00c711e14b";
+  sha512.source = "aa342fe74a9e73f880db8aebcd3cccde038ce56b279d359c82d5f00bcd92bc5bde2a3bcaffed3768f3835c524c5706e695a3a46a938f4d92d352b4176606e31e";
+  hasRunfiles = true;
+  version = "1.6";
+};
+"cellspace" = {
+  stripPrefix = 0;
+  sha512.run = "d2de1e55913a434eb5b0ab19f615ee325dca750eaa8d61222045220153d521eb8149bf025aa03b1e6a7c625cd994b8bdaea241b227b28d1622c1a75ec72d76fd";
+  sha512.doc = "a1cdfb273e8c32374b03dfcd1d2ccbf12a19918fdeada025cf948fefa624decda07f8c3384a4dd859efdaa9048adcf0c513f59f28e48f31062819c1f9acdcd0d";
+  hasRunfiles = true;
+  version = "1.8.1";
+};
+"celtic" = {
+  stripPrefix = 0;
+  sha512.run = "df78495c7a42a60bf40be46bf14c30d97dcd7c7d1b283f487026f7c3b6a680c750d09527cdd578f69234500eca05764792ddc90ae4dc8005126510ae33fcab4a";
+  sha512.doc = "ed29c2882619bc7f076578c91cfb7e1e83af9e6960ee58af78486c1af6aeeb2b2b6eabdf916fa30ab865991c677955c0fd15a43f128aecb635ee30b3ba514bb3";
+  sha512.source = "d60ef14ae649288b8b9484844fc9fbf15ce564209c04249b47c3cb0beb96c209c0401cf3f9200ca3be27ba0417c60a2a7a9780341ea311e1bc836753a2df7882";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"censor" = {
+  stripPrefix = 0;
+  sha512.run = "03b94dea9f5f69f0fde8dbd198e73a1ccc1e7b118b26c8272b217bfe76b7cec7eb0c8706dfbca7dd2a9438ea7337482cb55d631d3cabfaff3dab19d1cc565780";
+  sha512.doc = "131b995300b302f482359820bb9dab62188be11f46470e2c9d25753a22d6b81def5e272cdca4f2057adbacb3bb9aa777e758ebfe8a95205db7de36b378369bdb";
+  hasRunfiles = true;
+  version = "3.22";
+};
+"centeredline" = {
+  stripPrefix = 0;
+  sha512.run = "7b1359bd93853830d85fd84c9132d997c1384211c504999f4bc819cd6fe85effbe9f0fba64cc502419484cea3cacedf02beae22052bd10a7a7dbad3f97583731";
+  sha512.doc = "237af456a51f539d02d96bc1c2bfd1fde1328cb270985b50a0ee9760f4b6f3675610ca088af135a86f07c02a0cd84c651118726915a0a01546468030acd596f3";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"cesenaexam" = {
+  stripPrefix = 0;
+  sha512.run = "780962e24e1dc4c6c385c18a6c95b8864b1930b2bc684d9a556a1d6579a2a8d06ec0df3fdb085c3ae8115dc72d06e376ed8ea6f6d801af07dfcbf133c9cb9c67";
+  sha512.doc = "72d53ea8ffc1827f3965c6f0728aa5f2cae36f645ab10d78ff8c16a3537f79c6f53fd34f388f2991e5cd2261b366e7746a140285df95d17475adde9cee3fcaed";
+  sha512.source = "e1668fb9f07baea5ccb79e2f61d672f838a83c8d5d01b3da2b3080473865b9bc8acb0165dad58aa46d1ca296e2ef8dc545db3e856d95f6749310a4c90591b4e6";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"cfr-initials" = {
+  stripPrefix = 0;
+  sha512.run = "d67830168afffe72ef37784db45176528065210d4956b4aef2a166d41c886f5b3874e0878da9c56302412cf5939291451e1e20ba3e676429c598342982b64083";
+  sha512.doc = "0d628f9134254a92c7b88d0744b588bb197c6850d7d5e44a90e91c1ed128625c7add731916b727c2d3b532ade017daaf17f45e446e4bc6f0e447bb5fdb770066";
+  hasRunfiles = true;
+  version = "1.01";
+};
+"cfr-lm" = {
+  stripPrefix = 0;
+  sha512.run = "02e30f6d6d19bede2121ee0a8db20c3d96c26ef000ffeab08e800bb1da994dfa2cb356a6d67c815e8579566cf97b33b956c79940de61725524c4a239f7c1a251";
+  sha512.doc = "32488ecec8a781f5548419a782775725e6b32276bab5e1d7f660b99468d47e71087fb35b8f4534f874b1dcf236d04eae9d7920fcf0bb46e139a4e7fedc415ef1";
+  sha512.source = "643e7f1b48e3947506e97e1596972b686fab538511c2a0749ad936285c1e097ca8677730ea0748d1def6d6318030e7bb289e55d0c8f0ae9fc01fb308e974c24d";
+  hasRunfiles = true;
+  version = "1.5";
+};
+"changebar" = {
+  stripPrefix = 0;
+  sha512.run = "fa75f75aead49adb949e0bb5b5c116387e14b5fcf804502e12b7214a2638ec2032699125adc6ba8c528445c9f5c552ec744007530d1e5a69159f1041d2b7bceb";
+  sha512.doc = "f25c8bd3cb493bfe8446d98f3c599ec002f818daecac76ec4f08d19bfd15581bf8bf8970fd145886a42c51cd40a53df7bfc2e10641df2f4c2cdcd8aa02bf6c30";
+  sha512.source = "a7e2519d4dfd4b0b12a9cd8ea59ce32a37e4d0cb6e637b659e93ea5b296bed21298f8dfa13a13798eb87ce0ea0719546f721875a4115c62cf0ea6110d9ac8f76";
+  hasRunfiles = true;
+  version = "3.6c";
+};
+"changelayout" = {
+  stripPrefix = 0;
+  sha512.run = "c6852a40bc8415656b8137cfb90a79cff8f8e9938979eba4e02dadb3c5d1ffef60966f9e5779696402f2b9344026ebc1e22ddeb9dba856d779317ca801f26e7e";
+  sha512.doc = "bb81e02317d12b4dae8b0886ac3222849a457563ee8c43e09495596c56482202bb702352a8551f5d760ee41a82dde6b3f3c2bf57b4671831a25805d44e8705de";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"changelog" = {
+  stripPrefix = 0;
+  sha512.run = "ba47ffdfdbc0c43a25ac4ff4379463d9a4d63edd0e2b477650731609685aa1ceaab71216f092ab7bb94e9d2b090601f0a2968f0fade479697f1d4b6b13d80aa9";
+  sha512.doc = "540814f3a757f145087f6d625cef48257303ebb0560e07c49102e086f747678032e4f2a8208060997e8ecbd54c0780483722675c6edd9913d020f70e2bc01396";
+  hasRunfiles = true;
+  version = "2.1.0";
+};
+"changepage" = {
+  stripPrefix = 0;
+  sha512.run = "0ef1d3370affd4ffc2ef77031a8713b5c663263802d67142b10fa7fc025569b3914dbbaa5e71e2c643718940a0cb89194d79ec83a83b93fcf5d57e0bfbbdbb46";
+  sha512.doc = "e3894d3a475f132e2242a6402899e8b9b6045681ce1fdb05fc5b0570e4d6b8b6980c2b5f5953602690250826db0e7dc9bab2f235d39fa5bda0e1161fd781478f";
+  sha512.source = "45ba09248231ad1bf14dfa553b11172e610ae8f46948451437ce3a88521f84791ae149a83c1ff104dd0f00ea6a1a029e816ab7dbe1e38b9eb97902c4a9b9b312";
+  hasRunfiles = true;
+  version = "1.0c";
+};
+"changes" = {
+  stripPrefix = 0;
+  sha512.run = "8e5cebc3a86ca8152c36c6e0947a05e0033f817c7c49581d607ee6b4c6d18535eff31762bac071f679fabccc23e3c0fabe8eb142a7a8fb7755110a495a5503c3";
+  sha512.doc = "d25b8fc5fbe8b88a6c2c7dffd9180e6c40ccf659ea8c2bc6e6fe7bebfc695aa61a5d18919374894dde82c49d7dffce26c07b552ddb73d89b590336c817ff0a7f";
+  sha512.source = "934f9e2eca8541fc139cd90e9dec08f37473aac5ff8e465619ac37ed41bb27a59971a5cbb32829dd555da4db77e01f9d658312c2344b18ee5ae462919ba78d1f";
+  hasRunfiles = true;
+  version = "3.1.3";
+};
+"chappg" = {
+  stripPrefix = 0;
+  sha512.run = "8286a7b7664f7634bc5dd16ae1888cc4b70e2880c8749fe2e894d209384da7a8513b2daa318a4154f9b443f89b7eb2e3c6d620b81e1bbfa1ed64c243ad57e47d";
+  sha512.doc = "c0d42e7a9cbae3fc7386e9734492cd3f879ecf69551d17483c4f4516c2ea09d0b9b76914decb987f850af362e54c638af190de6d0d6414d09c49cf48c0635f59";
+  sha512.source = "371b6630fc12563694db35e8e086f7659e60f49a6b881281bd3bf2c081c6ccc2af74b630b6a53ac9d8b447635f2700f3d15643a02f7d873b5451c9b43a331b5d";
+  hasRunfiles = true;
+  version = "2.1b";
+};
+"chapterfolder" = {
+  stripPrefix = 0;
+  sha512.run = "b5f68c160249e9cd94efc4c664a18c04e627d416b304697859144d6bbc5ef787c0f8721d19cd6aab6c60864dedc65e84b3ea9114b7c823a8131b4bfdfad0c2b8";
+  sha512.doc = "43a28dd7182e02ebe0541c7b236046a6c23d55c73e36aa1a0e85954c5efd917667e1916ed0bb7000cbc5285230d162d5e844726282f0bb93ff85dfbde5fe8c57";
+  sha512.source = "179e4fd7966f1bc12fa89fa36a5e292f0d9937bd5ae74dbc9ef5846b0d55fdfd53e998fdb9ea40311dd34c7a99646d2dfb309fc942c6cfa3ada312297975f1e9";
+  hasRunfiles = true;
+  version = "2.0.1";
+};
+"charter" = {
+  stripPrefix = 0;
+  sha512.run = "706efb4e3daf7c304f5047b99d1f68051aedafc110cdd51b2e3cc520ebe628a87c41579cf476978e70aa0ae920e7a3aca1082013b41be8902174975e164a8f9b";
+  sha512.doc = "846ccf6ea679e3fc70192e340ce79982cd916d1383579a8549dba7125de645e4fcd4c276800bd5815fcb67d7227081a66b51f42dabebe8cf112585ce9685fb8e";
+  hasRunfiles = true;
+};
+"chbibref" = {
+  stripPrefix = 0;
+  sha512.run = "c87fc723f7d78aaf6f47f0eb34760d20c22a46983e802f1383ca4d952b354e199fe17dcb0e8b42e66522826f71f1031c59457ad4c5f5751c6ffeba66adeb4c30";
+  sha512.doc = "58c43dbb1274e99ab60ae8c2911dff6d73099c02f3c6b4b97eeccaa336f56e677ad3a1897a4fd782cf97e59b9938c83f13c0741697630d2dcaa4a7daa0b852e0";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"cheatsheet" = {
+  stripPrefix = 0;
+  sha512.run = "5d50e5bc579821cc9296209983af68f5c12f6aaea90dffe386efb85d72683c10dd518fc2abefd51687402125bdd4f108ea6325c546ed6b2216cff130abdd1a51";
+  sha512.doc = "0c798c7057e6e9d8b3aabaf745b374823f0a186e95a01d6208ec22df8f733f02a86c01b35bf4dfab88837574fc63f159ffe177f6c155e52f85bc0d062966acd3";
+  sha512.source = "66f00ad307295e106dbc45827a78041329bc8f4eb7fb3eff6b2c34ea6614b84496e4cec43e81213304022121268cef3e844f2f55e95c850f56ad261068448127";
+  hasRunfiles = true;
+  version = "0.8";
+};
+"checkcites" = {
+  sha512.run = "65af6aa0b8a8f0d6f4e3a1dbaeabea845bdec985beffe8589bef06784fde37a02baf41c3ea65055b3ff2b21dd003b51749b20a84ef0e1d0337bdb8ea416a0751";
+  sha512.doc = "35b79a866235727c65053f0fa2dae53372230395a61e8ed4b530b02c4760d9cb3a89f81e4ac905ed4966ed4137c8047dd80655f6d94ebb260bfd96e441e45781";
+  hasRunfiles = true;
+  version = "2.4";
+};
+"checkend" = {
+  stripPrefix = 0;
+  sha512.run = "40af84a5510dc3038c536c4b0aae0176651f01953650c1e6ec8b5d76459e7000246205d55f2b13ef566930649daf1eafc38e6d2d822787d1fa462e99837b6ba7";
+  sha512.doc = "0527c3c080f502baaaaa14a398ecbdfa714cec872f6cf8391ef8a766aa24b497a0fc00012433409904ea11d7fec425dd7c7116a52e8d983bddb2633248d2b090";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"checklistings" = {
+  sha512.run = "599ed476321a825bea61fbdd468670cadcdb11249a4a9324fc88339a9445ceeced3680459dc2d27c2e6263cd207ffc0ce3b60b325d31072922bf4644478cf544";
+  sha512.doc = "3f8d6eb67f305fa5e03bb625a4034ffe616a6c0223774688463884df99c337c1e5bdd76bbfa3b9428ec4812ec72388979c4252ba7407ae8b79e3de7cfacbeb01";
+  sha512.source = "a7435841305ce368f1bedac9cb531d8f0fce3fac27484547821a2e82998e977968e578601382f4cddf6c089b42e8e175c56d2e466faa5c4c0e5b49edaf6baf1d";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"chem-journal" = {
+  stripPrefix = 0;
+  sha512.run = "afe7c82f6e139c1321759ef9125f262d504bf602c1c5e16a11d41cc00ea47dac3f2befd602a863a12c46beaac4c50fe6fcdb145c5c6582c9d44c2740aa1b7743";
+  hasRunfiles = true;
+};
+"chemarrow" = {
+  stripPrefix = 0;
+  sha512.run = "4a95a6b81bd649764dea052984eb21c7f9e89c612ff96d23907eefce29e2d33fe92bd7944d94a6b108213d1820b3340feab35e3646f727288cb1df9b78302990";
+  sha512.doc = "882e6c6fbeb5223fc1d2404e8b9ef9bce2c3b2ed1279d2bdc45616476a856c63fe07cdeb42e27f3bc459199f3537fc620ef08c00f4eea83df77502463fc30ca6";
+  sha512.source = "19903052aaa97902f721892bf4a9df8d685db46ffddb4cdeb4df280c24a72d2166bc13408a32d5c760272aee45ad5516b899c0024ff3f077fec6825f94e36736";
+  hasRunfiles = true;
+  version = "0.9";
+};
+"chembst" = {
+  stripPrefix = 0;
+  sha512.run = "f6bc14345c841db93207745de1d6ce189e08a30d17110d8efe04af0c5aa98cf7e3a1208e1969afeca0c69f747fb5db39437645e2437f9596ba5a70610747b6d4";
+  sha512.doc = "3263dbeee44d46b6661e2e755ba10e22475432d03de6b3286d1191acf2fc8df1541d9a9684d5e00143dbebf65bee468e9244ffe73d7ff43889153925b6edb379";
+  sha512.source = "c0c6658210450aa13a17e04eaee082f4d08b71a50a1552b571a49557ce8422d709da325c8bc91e742eeae04de388a777134a4d626d72409da3662c2d152cfc12";
+  hasRunfiles = true;
+  version = "0.2.5";
+};
+"chemcompounds" = {
+  stripPrefix = 0;
+  sha512.run = "d8cafe15f21045522812279337f9680a975a3f9b9930231b7992435bf694f8f180b061623bdf5fbe7dc9cfdf7d6342e0d6c2dae1cbe0d8e855699064a97a95fd";
+  sha512.doc = "26d9568f73f6b0c557cc55b48a99826b70d87724f7f5776f7c58691e8374b3b6ed400206b338bb0397ae5e0c1df5d1bdbb638e80d0dbfea228138b96863587ad";
+  sha512.source = "d1a0c821c6624efcb31ca21ab658a64919dd6eca51add909bea4467dbf47b20dfb60f10ee979a7525a04bae0f7440ddfae2c244da25444ccf0486708b4d1a1a6";
+  hasRunfiles = true;
+};
+"chemcono" = {
+  stripPrefix = 0;
+  sha512.run = "29b6e78d47cdcb21c634540ed6a935cd5c6eea5fb6a28ee85cfe681ff00c8bd24d7175ee5adbbeab03e11db2f56a38d3359235ed44771976917f35c673fd21c5";
+  sha512.doc = "9936d1f0ce1e6ab9498aec9d68c176ddd803de3ed1e5a698ca7b548203cac66492ce319af3e5951144ad11878065c8b349f57668498d245413d7db62d1b6a8ae";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"chemexec" = {
+  stripPrefix = 0;
+  sha512.run = "62f374a57c799873aa4d1db52c56fcaf2f15dd813e3bd9295044499defa29a88567034e39b20af1e8a7e4208dcc35aa422c0ea8e1e0925fb1ae3e02a1a8cb482";
+  sha512.doc = "83b622fe694111fefb9c7863d5322f7a717778727c99db3fe5eedec0b6575d4fe50e6b5076413cbbf36a222ee7765bbb847c44783d6ce45cb07f55bab16955da";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"chemfig" = {
+  stripPrefix = 0;
+  sha512.run = "bf8b9f313bdc239eac7c11c8b887755fc5106c389b3d62f013c764a8392298f4e0074796ec128edaa0d4126b52b055b3787454885dd2cd214e2603b7896b28dd";
+  sha512.doc = "61027d844de25043317e4eba23fd3003296fd0fad7ea9495f6b809c0a8b5cc055deb0798259bc6de09ed2a1e462b8aa9c226d5482c9642e87ae6c0de3787db47";
+  hasRunfiles = true;
+  version = "1.41";
+};
+"chemformula" = {
+  stripPrefix = 0;
+  sha512.run = "4ab3d7f4b86899a2088ef210b4ec03f6a511d17140c0b0ccb8fbe61057107e018415c5ed591096e27eec701775ded1d2e3c6cf90e76a25ba58a47a6cf79e5ab5";
+  sha512.doc = "1b2edd7ba989074cc19eb5789a5f87baab32d7ef0ec96991e76c8c864293dad38bee3ea2f1def3b7fcafec01afbe4de4b3e34aceb8ac5e4140058245cd02e2e1";
+  hasRunfiles = true;
+  version = "4.15h";
+};
+"chemgreek" = {
+  stripPrefix = 0;
+  sha512.run = "5ad82bd7e1973ec3cc79277ab653e926bece0b9e8feffffbb798545ab1fe667c15a6ca08de7c6115c1436d552ec4ded0a9e489315f3e9325ea9dc0f82972a874";
+  sha512.doc = "015c8e3357c7d53745516a4c6d6282bde49c9462d516e9bebe9316769684c310195c23fee9e7e24a14d8084bf0d5875b158b60488b7fbdd03a83b590abb1cf45";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"chemmacros" = {
+  stripPrefix = 0;
+  sha512.run = "fe9bf2371b862873e7c1ae2a0b72ce622a4ab98b00846397b2b108bdd56051caaccaaae556b815c2c4e077c6c785b58bf79c66c3c764e86a8edc97faf7443fdd";
+  sha512.doc = "d5494677c903fb5e7c5376fb0a684ab5169d10aa145cf021a1cb9b87be03f1470e4b74a7c721319aa598779893fdd5a9144519207658c077a78998762a22d937";
+  hasRunfiles = true;
+  version = "5.8f";
+};
+"chemnum" = {
+  stripPrefix = 0;
+  sha512.run = "f16b41aec7baa6cb088c008b373ff648b8e801951528b24cbdfbe4ad4d54eab12c64a76e23521396bfcc8ff8cc3089f0da9cf9fad37526d1639547412038f5cf";
+  sha512.doc = "b9dfe8de349ebcfbafa967668895dbe5bb14cc6f065711f56dbfa5ef771eefda79114cc994f6de2d5d45143740aa9e93543035dfbe6cf1c2628088927e06ab06";
+  hasRunfiles = true;
+  version = "1.2c";
+};
+"chemschemex" = {
+  stripPrefix = 0;
+  sha512.run = "c7375af2dbf1a7b55d41b0ab617111cc198f1aeac98c354813cb2886e0707ce5648d3e4fd9eefdd23bffddc08b96c35a050c1f440f21d5a2d7d5c6b5e0b6aaac";
+  sha512.doc = "b5e864a02ed664e7d7596b56e2583f9a4aff2b8117f79415156df0cab9be084bb96eb6c70c4fca9dd4bd03b30e8b145e4cd809b165d17325625ae625c33f1dc3";
+  sha512.source = "56174f5943b8dc3aa0cccaefaf9d3f24903626d3c4eb48bc79f01f2a7be603921f7b1ee300e4009038e3a92cd550c08c37aff239a9426ef3277e47f645964488";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"chemsec" = {
+  stripPrefix = 0;
+  sha512.run = "7a69ed2535d477063e55541d53f73f5d1972905f63d2298629522dfbfbbc97dba0e9ea4a48ed1667ad7b50e24c4a0f7b6d5dbbf79863c9e79a0b3de522be54c4";
+  sha512.doc = "5e132354e874b3ad5a4363cfbcad49e3601380dea8f53e106bb0b5d92fb1aff6facfedbad69444ea362c76473dcc7bd8703beeeda9b69f2501d995da98ef71a2";
+  sha512.source = "b81e9807d8a082b1223d4747a3f0ad3eb3dd21d1d145de5c25b8c44a384dcd941eedf7117c794efc6e4af2397997d060d0b80bad1c7f487ae98b0679f5412b2a";
+  hasRunfiles = true;
+  version = "1.12a";
+};
+"chemstyle" = {
+  stripPrefix = 0;
+  sha512.run = "299e15460a64019177530a4d28154453a813c6987e6e89b6f60466ae9e59372c1a5e0fc418c49b85364ba3185d4fe4e4b7f98caad9add7dce9bbe1792d4e314d";
+  sha512.doc = "f8d6c51cd7e3df7ea8366ade62d0cf8ec3825b0ca54be600107a6be8853d1c58e1989f5c13bddcacd97673260890fd0f63e9a0282203dbdbc6a01653d86f0537";
+  sha512.source = "0ee97edc8ecf8f08ed39ed9fffe18b89249c513f33ff415e4205619395baa6e8b7c77832d5110d113d78d94c1d79ba84f79a5ff23a43fd0bb23d19db96badf52";
+  hasRunfiles = true;
+  version = "2.0m";
+};
+"cherokee" = {
+  stripPrefix = 0;
+  sha512.run = "731fb10454a9d359d91abf927a27215e72283a9635cbd853a6738ddbd5047d81fdb8d547b891f29836d0b604d97749074e9f2676c5ad122522d987ac9bb46105";
+  sha512.doc = "34b258b5b699f644cc0f7f9b673f3dbe48357bbd338726af2b404da4888a9e742f04e397cc3b6a3221d218a96ac7180ce1e6ba80a19c688de0960ce59cb14bb8";
+  hasRunfiles = true;
+};
+"chess" = {
+  stripPrefix = 0;
+  sha512.run = "236e195febc213825fbb5569d8eddd1967fbce1c6e9d550a1c52729be43674e063161adcd5dcb1f6293d9ecf8809518d40064fee08ab64ffe444affe3282224b";
+  sha512.doc = "95d3b598f63231abb6cdccddc970d6ccb29bec7e9fa29efcf1391bca70b610e9c0bc65754061a4b955548a854bcbbdd8cdf05f8f93fe52bea400b7c281ccc0da";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"chess-problem-diagrams" = {
+  stripPrefix = 0;
+  sha512.run = "9216d5a545da3a9bf845d0fb91e345117a5917fbb992c93049a05baef3ea6517870572cd0c4f6f725045cb094f64ee3067a2d2eb461515c937d061a611619b11";
+  sha512.doc = "2d9268dd31ad4b9961824c7f9e73ea13c140a4d6fc6ab9c741ace4ec32de76ca2d0986b2caa5d2efa45c87968551dd3ba88d4d58b7c439300c9e748f551b2964";
+  sha512.source = "52ecd3daa5e1de9feb486c256cb0acd1dc262d12d574fec5cee8fa81cccd927d2636a6309a2aa6a8a57e27648c89dfbe4c3c5d380ecfc44e816e1a428c00831a";
+  hasRunfiles = true;
+  version = "1.12";
+};
+"chessboard" = {
+  stripPrefix = 0;
+  sha512.run = "ed7a1d973992897fdb174ef4e250d78a6747e40a822e026b787fd0899f6465a6e845175028279b57f5e16c50162feeb8b1c833248ae3b073e32a8d63051ac0b0";
+  sha512.doc = "586202bf2d2b8bade26af19170e5129da6a2f66f78e79880929d2df2b6a7971b8d3683fb79a3ea6863eeedddfee170c06bccce88ad96ca6c7d982aed43378084";
+  sha512.source = "2dd479a4ab573894437ab551bd78a1b24cff7b2ed53d2a8ab444930afcc228844bb5932302e4975bab617ad24a824810851a979eafb2433bca9dc1289860d6cb";
+  hasRunfiles = true;
+  version = "1.8";
+};
+"chessfss" = {
+  stripPrefix = 0;
+  sha512.run = "8250d4b470a74877c44093888657b0a3c6ce71abc2a23780e71590d0398fc08943ef77ffafcfdabdc6bfd739f7d5b4ca15f2436df103271de029e5ff6102f579";
+  sha512.doc = "1f9e625cb7765450fde23f5666af3b43ddb9ba2e67e7d04b98ef19446117cf26eaec3c2586be7c683286dedc37f8d628e4142bae834af716f2c068ac28beef58";
+  sha512.source = "8745f5c712df2da39a61aa3d7ec3b6b4917c4905e3a0c4ac25ea6484555f25db6fd31b49a9c86566f69a660108683b4749abeb17f512ece9af54ffd7806c1d79";
+  hasRunfiles = true;
+  version = "1.2a";
+};
+"chet" = {
+  stripPrefix = 0;
+  sha512.run = "d4a43d5ed1f8e74f0b4681abeb2b1134e9ad770cbde69679d53ea77e09a1a23412f03705691cd31110d145a96dd97e078d675274342c9323b849c770828db5fd";
+  sha512.doc = "143b224d3ad957def3ec22a6e55c1b9eebd5db582065d422e1cf972580eb321ffc768c51cd687add62c01ab1cf3dec170422e6d9bbbab01846bf3e4cf84ec936";
+  hasRunfiles = true;
+  version = "2.2";
+};
+"chextras" = {
+  stripPrefix = 0;
+  sha512.run = "6fa92c9cf1da7cbe2ba74dd10f1f71274e25b228156f01efe5c67e54a2ba258500f7b2cc39fe935d4e92c641b760eacb7f39ea70643557ade4816e92e92a0b17";
+  sha512.doc = "8bcc8a6c99be02d8e0babc82ec016fd6e91823a31338701e3d741af895a1d87d224a849598c2784f5de9cfefaf9cd7a09ee5b102636114d528b1e17b830ffecf";
+  sha512.source = "1b82f258f1420b07699a0ee75f99e330acb4b9ad1fadc9ffb0f42a1a4321cbad9c08718f9bbb94185eea9bef8d707f729d610b5f671db7014fd237dca5fb0d6a";
+  hasRunfiles = true;
+  version = "1.01";
+};
+"chicago" = {
+  stripPrefix = 0;
+  sha512.run = "2313d7911a8c6bbcfbfb25405e3fd2ea8c0721045f77b9ecf27e4daaee5cfc1a5c010c72d192583e6025aecc6f69421fbd7921d63daa9f29145eb6f9c96c3abb";
+  hasRunfiles = true;
+};
+"chicago-annote" = {
+  stripPrefix = 0;
+  sha512.run = "be2bc8e7e8eaa881ed7a8225b211ef464dd5635b93b867333458521e405fa42375d4804fbdebe1b913fa694aaaa839703494a155b0ea5d4a99162f6335ccef0b";
+  sha512.doc = "893ba3ff20355e0c395b2092fc01689bd956eb177434ab7152aea686210a7167a04b64ed8ec21030e4f4cbc7e1367a90976168b174fd068d6aecbd0304f380db";
+  hasRunfiles = true;
+};
+"chickenize" = {
+  stripPrefix = 0;
+  sha512.run = "82df32cba5f14ea8de96020b2412d7c2b3939b0afc4f42bd91e957694404a12a8ea38c9260cf472d81e9aa776556e9b5cf97a674d23ad32633f4fdefe3b3bf83";
+  sha512.doc = "6d29cddc0030de2ac6b82dde660e405916bb79bb1e18fd0579a66555d49062fde5d0fa327b906baa1556efd080c55b7ee181ed7569e96dab256ab2be27620935";
+  sha512.source = "bd53aa09a1a136d36f92ea0e8625684361b31ab9315a9f987560f171e893c022122b64a086aa2952a9f1fb96b7931f4e248c016cce8f0ef488c94fcd33c5e8f4";
+  hasRunfiles = true;
+  version = "0.2.5";
+};
+"childdoc" = {
+  stripPrefix = 0;
+  sha512.run = "b268695b1d91b49ba6a0179124cafa5e5cfed56672424ab40cc31924c07879b4f50be47f9fe9d574f2adb3f183c71d799cde8854a2942b530c40a1e101d399ef";
+  sha512.doc = "1a74059d946b82da211f5fed7cb120453049ceaf5f10841a78ff8864b41444064b223939bd2296142bde9c7bececc0ca8bed141be02431fd60f069ecab998d87";
+  sha512.source = "d74e34799e3cce5093f59d66d2680350ccf559b0a06045882dad98a60626c59f8e0ed8a6e03d09cb4ff443d3f68a33208af996e2b870047fb381f97bf92dbea8";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"chivo" = {
+  stripPrefix = 0;
+  sha512.run = "c50965da981e688530e115352f0d1baae7c9fa2b286856fc1c3d7a9dba1b463b299c129cda72514792a2faf77f512b8720f02494bb178cd619ccac6a37e5f606";
+  sha512.doc = "b7ec648495dc0be4201f01b162ef995eb2168bdaaa43c84144a7518e9b1e0d471e08a1282d301162cc9cabfd23c86249fc57cf0136dd37c0689a33893917f12b";
+  sha512.source = "5b92272061540ec7e08797782af358ab0e50c6a2658a3faf7fa783e2b4e105a9e7d3dedf6e4ec1df82410254686d5adfac205835c68cd88394a85abb39d1f3e3";
+  hasRunfiles = true;
+  version = "2.1";
+};
+"chkfloat" = {
+  stripPrefix = 0;
+  sha512.run = "2a08b71c204709846bbf26ec3883e9037af6ff22e9bdf13b27319ceda55381eb9e3816ead4e444eba4b8a050a188e58d14f0d9153a813953f587c6cabb3932b8";
+  sha512.doc = "b79b6bd6943dcd07656bb46d44bf50ca2c0148bdb6ae711d17a49e78f3bbf2b95781cd6f3d0b2f7625b131f7485d3db608c963367dd91dc91070501b367471b3";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"chktex" = {
+  sha512.run = "528392dde236fd4dc9cca54239e7b1d19103fa5789a1c0f541a74472ccea52548fceb13e10a629e389f94ac5c16006246edb3ca584b1681b9e22346edc720715";
+  sha512.doc = "6c879a78bc9aef8b851c07f54e3e1974628b0533a843046fad4e82013c32da6f1bcf585547816ac3f3b97fb4425af61e8b7b2b6e3ac1ca177e667a9b26ec17ae";
+  hasRunfiles = true;
+  version = "1.7.6";
+};
+"chletter" = {
+  stripPrefix = 0;
+  sha512.run = "a32f71d89ee69ad60de6173f415d0a3aca7563107cfed71aab0ae99972a2ead442bc75f848ddf07c26c5d464b2224afed5ce976bf037049764f722396e9666d9";
+  sha512.doc = "05cf8a4f37eb51cc00d9c254dcb817c41167eeb7643f7a793d1a841bd2c8a3715ced2036b974533521f48be48ae493e52ef0809789d36155d1ffc9624db538d5";
+  sha512.source = "6e4c5063d7710fe5842ba684705d4b94478a9d468e68d60fe0b2ad23fdf717841421bb034317cf240269b77e4351eadce854145fe7e4300b2f9b698a6617679c";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"chngcntr" = {
+  stripPrefix = 0;
+  sha512.run = "0fc94f91911c623578912ed43526d18f85a003f797e94ef5610aab8477154078efae7000256892cc3d3103843ac8065c27d56a10c6f57c16d9ff13693930b0b0";
+  sha512.doc = "3b63e4676232c05516bb12c189873e4af39b8b34df2690c897c4733203c9f19a30759850979c47b05e5fea0bd1c277a5c1ea0624709cda6a3a4ab0196231afb9";
+  hasRunfiles = true;
+  version = "1.1a";
+};
+"chordbars" = {
+  stripPrefix = 0;
+  sha512.run = "1349aef2649fdd9b54751425d54cc9b0746dbcec9eebd1264c36867517c4f422d74d390a0e43d22fe81c5a36ff00e6cedc5e652183422e9408a2165486e79052";
+  sha512.doc = "ba8aae66430e2df58f01bb9860bfab9cdb3aa0636f77f657a1fe4405ec9397773b51b01d94201bb8dfc8660d05f2aa4ce9233ef985d3e4e35faf005c81759404";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"chordbox" = {
+  stripPrefix = 0;
+  sha512.run = "0e07cae95a8ee5f040b4df4d94f996f772f0780bbe47c77db891fbf44b08f20e28ba8442dee3e981a052b0ccebb0d630e0f0917eb7c65a490c844a65f3b2e3f4";
+  sha512.doc = "0826513579953ea80047d596b6c577e4b6f00fcdddb7a06bdc953bccd72e09ec2fd9123995c1e04260ad880bc860454abd283885817a9eb359ec7cb5beba3cc5";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"chronology" = {
+  stripPrefix = 0;
+  sha512.run = "6fca0b31511366c1e39f6518bf5c6e10bfb503a8a901d9e1167866a40e2fbb9d2a6e109f48e146bbaaa2c017ac96e82196a5f49a91c6c9f52eee2633fd5c0737";
+  sha512.doc = "ce0417e339724dfd97c227f104d9cd0b697c1cb7a5c586c890c3e938bbdaf5db2984fa83a09d983970c1105751cd012e544807a74bf0a35ecd2074a97d0520a4";
+  hasRunfiles = true;
+  version = "1.1.1";
+};
+"chronosys" = {
+  stripPrefix = 0;
+  sha512.run = "a9503f9440dfa9a42a3f2d345c5e74faa9f40b03264bdf8482ffa58c34318467a7863033acaf089acff6056f91e9d85969676c1b0b080b363c1274ab96f022ed";
+  sha512.doc = "1f2078bc645e1a9af4220bf4041391353495f76f530ab5f1a35ebf2c2a534d60a910a9ec079ec2222ced7fc3d9c146bce3d6d4d703acd2bfb9ccf357f6fd812c";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"chs-physics-report" = {
+  stripPrefix = 0;
+  sha512.run = "e1af3e29e5b59545804d7ac7f3cfd0c7463fa9487c458ff3790a2b434151cfec925863bc2d107e5eb6e43c988d85136eaabe28065bf95b04836a8342d5626d23";
+  sha512.doc = "3f87d4b32e3257a22e0e7146a89ab2fc90f796d524b0641ea0ec51ff7328518854d226f5405220d7f5466a138bdfecb6d1c6f8b056781e985cc1cc757d0f26e0";
+  hasRunfiles = true;
+};
+"chscite" = {
+  stripPrefix = 0;
+  sha512.run = "809c76b1bb47e194c43c869b27352578fb5490f6a9a8bbc2fae662b357bd36a099f5114765611d73fae87a846526781ceb7b45aa8968836c543e15f13e7ad7a8";
+  sha512.doc = "215085d808b75d0d7f3e7e95830c63172606fd43e1e30a20e376f43d12959da71e8e77a6f06a6058d8ab9f9406f1260262af3e904ff65254e5d2635ca6d15975";
+  sha512.source = "cf81a7ceda538e9a3a8bb0a78927c493d42993bb295680792ba643d6f771722e0fbe342bf59cd3104cccb63b1ece7905418b998c1af1dbd7c879cce024681f9f";
+  hasRunfiles = true;
+  version = "2.9999";
+};
+"churchslavonic" = {
+  stripPrefix = 0;
+  deps."fonts-churchslavonic" = tl."fonts-churchslavonic";
+  deps."hyphen-churchslavonic" = tl."hyphen-churchslavonic";
+  deps."etoolbox" = tl."etoolbox";
+  deps."oberdiek" = tl."oberdiek";
+  deps."xcolor" = tl."xcolor";
+  sha512.run = "6c572235b95bb1f8407addefdefa1d7d3facc09b963f4d65d2be317986eb6523db9a8ff7104f15c526962ea8fbd0e1430b68867bf619cebc9b494f5cc04bfb07";
+  sha512.doc = "90d563afc8248ded0ea4f30ff685e2fd9da8dec7ea92a3d4313040905be883af3f11393a031ec85ad39e9e51d374557e0f1f373a78caf855d2048fc4e0393e37";
+  hasRunfiles = true;
+  version = "0.2.1";
+};
+"cinzel" = {
+  stripPrefix = 0;
+  sha512.run = "5325c8ebd42cb7311d16ac20b4b0bad6832cea05dd685b17975eef92363dd0ef99a06ac4e5e269c932e30df2dc9b0ec3b5dbe54adc70e93718c08a92a140d866";
+  sha512.doc = "939dbd310bb861bfef206584d8011b0a296f4b70673b7f334b85999a40d352ff74f07078c9215e6510e431b95e6fd12778e468ab53f401f3b952324c3162f792";
+  hasRunfiles = true;
+};
+"circ" = {
+  stripPrefix = 0;
+  sha512.run = "638a89cd3ef49ba7f21f42944d1452c2866265f326e33e07b47d9607723de7f477766e8c240df7a91081f864f12346aa358b48f66cb67017fc11ace129c9c694";
+  sha512.doc = "389d98b3b5cce6c93d84bb3022f4aaaad1927bf78b323c106f7e89612835b92a2ff878fbe8d120406018549dba6cb370d88f098df523ff69a8810ff6e2b80241";
+  sha512.source = "b6127892465f3bbba51b3fa0f1d35e667cb4286adf0280691656a8b62c52ee57aa01578e716c495612b00a5725ed30c17b1a81b6346f184fd6d60611ea2663be";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"circuit-macros" = {
+  stripPrefix = 0;
+  sha512.run = "a4b36693356178d6c3c15b9e1829d8d980ba5965ba4ffdd8dbe62ea44a5cb962cd326ddfa34e767b489d879e6ae39a9dcbfa607d3a769b370977d6e4dcf1e54a";
+  sha512.doc = "277dc7140b6fe176d27cc62afb018ad266bc946259b38f02f3166e0bc8ba9a5e3fa0b56134d48000545f41e59f1f0343985552bd075cd2d1fe98750c890862ab";
+  hasRunfiles = true;
+  version = "9.1";
+};
+"circuitikz" = {
+  stripPrefix = 0;
+  sha512.run = "00474a4568fc629f57a76b963bc0445e582fecc3c6d7a714120998adb0f9bab94cf87b834938eb91575e22a5ad61896bc252f995cad439cda5f0b471bf2f9a49";
+  sha512.doc = "4e628fc482a6488ee6e4c78dab70645d42e19c2d34456ba4f12a2730487df5bbc09f582f9a72092edbd4bea019c80d9ffa65fd3ce0b70df955a4602ed73e115c";
+  hasRunfiles = true;
+  version = "0.9.5";
+};
+"cite" = {
+  stripPrefix = 0;
+  sha512.run = "39196b799273a2da29591b1b59c0a504f0e0971a6fb12a21bed5ac45d94eb017f1e7c64691fcd46f5c151d867c1ffac706f050fe2e08bf3c58aec8867fa185d3";
+  sha512.doc = "f9ccc0e1975064ec792c6138907cd3dc8080ff2fd02a2925d1a1334cebbb2289797b234b46d92be0ba45d460c31359b5c143f20e28cd1aa1827489d04b88d300";
+  hasRunfiles = true;
+  version = "5.5";
+};
+"citeall" = {
+  stripPrefix = 0;
+  sha512.run = "2549b398c98f82833849a45716d55a776ab3b7927fdc400c2e6d43c45fb0cf628bd66bdade7ca63bcaa2e98807914f7adb958c6a06c27762fb0ee70452d4d280";
+  sha512.doc = "f1eaf5ed48bf3fd2bc336b7d91dde09b5cfa9a1901bd6315d4abf032439571a89f1d7c4794ed0256ef1aff0456d275e68326e81627f164652c84de2900165a98";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"citeref" = {
+  stripPrefix = 0;
+  sha512.run = "5f56fb1d813962358c737023e06bc2fa249712d8ef984f835073e11b075b676e845596a61ac312991e646d72068670b60eb002f78ac322f66d8e5a9bce185063";
+  sha512.doc = "21d1a8063586b09ba953ac5df96a3b1552c586d66c5f2af517b1b1ceb75b40f173bd411654dd313c6aeebabc35db7543ea8edcbc8705ae104c7f63e5a5b3cf57";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"cje" = {
+  stripPrefix = 0;
+  sha512.run = "cab80d266c2b5f9d4ba9d37cc5490e831e3f773d86c92fcbfab9474864aebbb6123e1ed44877127e84b6e1fe8037f2425259789b9b9597de49e1b24b123992a4";
+  sha512.doc = "47a2d96b6b530be732385617af832ad48c3d6c7a34a7e9e0523c38a03b5116b94588c995afd153c25be6ceea9bc199685fab9eb83636b5fe27525b19a4bc7cec";
+  hasRunfiles = true;
+  version = "1.06";
+};
+"cjhebrew" = {
+  stripPrefix = 0;
+  sha512.run = "65a73380bcfd8892ab2eb93d088076e2d5371019244bc8a65a4695e69a45f743248fce59557533add032a02a0b7ea4f02d6ea4634265d2d9718a5b100f5a18c6";
+  sha512.doc = "591d932ae099aa168d55f9479842d25c5212dd7aed27eac1a5d05a111a8a396baae7c73ddafe1087a7b8008528c50b1a85825851643d8107133d41470ce1e397";
+  hasRunfiles = true;
+  version = "0.2a";
+};
+"cjk" = {
+  stripPrefix = 0;
+  deps."arphic" = tl."arphic";
+  deps."cns" = tl."cns";
+  deps."garuda-c90" = tl."garuda-c90";
+  deps."norasi-c90" = tl."norasi-c90";
+  deps."uhc" = tl."uhc";
+  deps."wadalab" = tl."wadalab";
+  sha512.run = "c35be1fc1d9f9d44e78effd6e7e539591020d785ae255a1cfa0d7e2508fcdd496d94e4bb0096bc7a281ee93b0b8e461efc6724c82f49d589dbcbdda35143c811";
+  sha512.doc = "d598d599d02ca95b1375b8e989649b441980ae6467348270c366a670d79d606b1ca79801febdf5c8c636f2d1c7fa30eb87bd87f90f75b5b4436443ecdab53b73";
+  sha512.source = "bebcc4f77716c92fdff317d926b0ab47ff32efc8b235f721d7d3d1808dff5672127b4c80bb729aa1023f25949cee2c4d508adb40574a3d606f3d5840642eb604";
+  hasRunfiles = true;
+  version = "4.8.4";
+};
+"cjk-gs-integrate" = {
+  sha512.run = "f4b6cad8406972b57a540a29897962cd01a481932e7a1efad6000f336040517a1b5af19a8f422a74d4c32fea02d95aec30085e26cccaae3e8e634e8233fff071";
+  sha512.doc = "c74b94b3de893c2a93bd14c059f85b786684fd548e568c058e182935ccdef5e1ffa16788d7b4ed9af1544152e39e3e16ede95431ede8cc9474d2e72161fe2c12";
+  sha512.source = "0ac430f7b0f56c244b57d704383af91e74d0eff5262839c375769b170d84380b92a9e17ec46d2c894fc35a27a527b93b5338b8ef3440386c2ca17e2884b4c3d4";
+  hasRunfiles = true;
+  version = "20190816.0";
+};
+"cjk-ko" = {
+  stripPrefix = 0;
+  sha512.run = "52ed45e1e67b50a09ce4b1fc333222d93adba691265e13d0523aa2d1a2a82b78dacae5ec2ee1ec0e78dfdde740a15a3d48fe45750db17e5270480807521c59fa";
+  sha512.doc = "15b96571e56e9e08656f28fe8f8875e22de4a4c513a76b21206b66b8ffe2c986acc87c6f0bb1f693a2ac05ad07948ba89fbdf5f63259d08ef3b41726190e089d";
+  hasRunfiles = true;
+  version = "1.8";
+};
+"cjkpunct" = {
+  stripPrefix = 0;
+  sha512.run = "cb44aa3386cd79f05980e5402adcbbf9f8b67fa76bdd5b293063fe9810520edbdf243656cfb54fe17d6ca43d405e6b16e8012eda63bae3cb3d8fc0f7755e2551";
+  sha512.doc = "cb9383b6d3fe9ffd5926d10dddcb1ea758aabda232f015b22f61dc8a9b316193b30ca2d8e2b849b1c03d92e0073bba6d90cc5b3b50f47b28a745dff2f7229486";
+  sha512.source = "0155261e5a1a22634a4c6c779054198534bc2b6ef1f1d85d471a25bde59b7e872db01627f08db6dc76c7fe6fd08d9a2363c47e79425c80ec5319648c994cbf48";
+  hasRunfiles = true;
+  version = "4.8.4";
+};
+"cjkutils" = {
+  sha512.run = "0c6e2eef5022fcdedee3d3eeadd87a885e663f92274a4f671c039197b6fd886605c4d71b052669dc8665737f38f2ba02d070f75610384ed53d4e96d66d696457";
+  sha512.doc = "50437984ba42ea9f4d0a23ce78110d5899cbe205a46150998a2e44b2710196a0b5cefc44fe3ff78567e4372f57bf9f9d7177dc29ca7c37785b56f4bbe49cf11e";
+  hasRunfiles = true;
+  version = "4.8.4";
+};
+"classics" = {
+  stripPrefix = 0;
+  sha512.run = "e92314a21577423aa48e718d044de1e2abd1c052f6f85139a5d20f99f670867bf448a52592ab267fa8fc88a96ef0edc23637573f16859843dd1e4b9a5dce489d";
+  sha512.doc = "353b486d22807305031d5b25e2a9d403da220f217d4dc7ee5b2d6c42e5127d004ad8eabf37d53f4933121961120ac476afa8ec3535498d1b5e4bee8c889fa53a";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"classicthesis" = {
+  stripPrefix = 0;
+  sha512.run = "9a8c0c9ad0d97f187cf66679613514000324a72d2745c1026889b73e5981e0dcf36f388a0bf630f5ab35d28a39ae50ac842db28c214442ccfd987ff2c132ce7b";
+  sha512.doc = "3eb82d6c0f951a060e56c763e90ec842d1692326501f538d71780f4a0981edfda33b0ac0b5d00ccded7d3273fa69d4dd5d4a9c3557d9a69e1c3bc17375fbf43b";
+  hasRunfiles = true;
+  version = "4.6";
+};
+"classpack" = {
+  stripPrefix = 0;
+  sha512.run = "ac5e26d91107bb0166040c990e586b6504eccad7da3ec084a49b141a1e0fee2725939f10deef5af1c4fe89396bc8fdef86f3bd2e8de9099cbed9700867700e8a";
+  sha512.doc = "6a22b10f5630a52ba85d113ddab8dacae0ab8148f62d4f9958bf3619c2d88f9a1f3c9778e41773d7b9d392ddc4d6a30dc3cb995a24072cc60b446896ca48707c";
+  sha512.source = "48762603b928b53cd9391908f2b0497e766ab516033a246aeeed014a99cd09a6e18f1feecd107067f58e3ecdad5ca37b4004890c4ec2e4bcce7e5f67e6d03724";
+  hasRunfiles = true;
+  version = "0.77";
+};
+"cleanthesis" = {
+  stripPrefix = 0;
+  sha512.run = "0f12e2eb830014bd08e742ed6dbbc83f9b6d17141a4c0a6c00934ff1d831ab7a9e9dfca6931f5842284845435593449b11b8ed9cc29c7c607fe4df14c2b11d7a";
+  sha512.doc = "6042357f473bf4bce302b6f43d67fadcf0f449a3f1b1183a26d4b04375d60013eedc7389b002c1f0ed62ab1a8672735774d5aff0d7301e9a5e435080a4181c65";
+  hasRunfiles = true;
+  version = "0.4.0";
+};
+"clearsans" = {
+  stripPrefix = 0;
+  sha512.run = "af8b236f99abe2d0da1c0beb3237918649b7fe1d76eedcf1a5c409d5bd9fa3c89c6dc59daffb787f3e41aa3d45aaf3e78fdc2f7e67b376d958b00cdd111a57f7";
+  sha512.doc = "cdf49149657826202661563a01ae28a290b8fd9c7fd2395c1822bdf9284eaacff61781f5eeb0561c76149559614a59dcf0d03b765c4ab60151739f92031dc2e9";
+  hasRunfiles = true;
+};
+"clefval" = {
+  stripPrefix = 0;
+  sha512.run = "8bd7457b6f8144982781b029500db910fff387f3872d09039a2929c5e62dd7dea56e22cbc40036519cbb2060ba62bcc7d621dfd383493420a88699660a796e03";
+  sha512.doc = "5789c53aed9c4bbe92e8c36f115cf63e07c7e7c35c26d62ba2be41eff8408c8e60f619f565cec1fc0e1ed55f2c571ee6f8115ffc2e88d9917fff085d19731694";
+  sha512.source = "119c560be9538b97bdd4366e8ef59b394aac864e54554388c98b7e5ef62fbbc0f13c4263f012fa6842081a97433caa318bc2eac6aa10c4b8a8f433ddb3f02090";
+  hasRunfiles = true;
+  version = "0";
+};
+"cleveref" = {
+  stripPrefix = 0;
+  sha512.run = "669e122c22c55c1fe95353533a2c35adcd161080ab2e4f3120dab2286b60df316f4de792e9a6fe5b971d622bc2b087061836a3c0aebaf0bc5df17c854f64990b";
+  sha512.doc = "3885fe13cd51967620f1e48a25a82c2a4916b07ee45c963dfe9ea933a920f347512cf5c30f29ccef9c49c3862df4c9176fe0fa57b1043d3ac230b7cd8b3f8d78";
+  sha512.source = "71a49c96a943dc152cc1621e9e0ce1d0fe62762fa51f670ecd4a0e5a3613ccc52d41db355cfb0c31fc81867bdc07c26acd3e9ad74e0209459a099be823df2308";
+  hasRunfiles = true;
+  version = "0.21.4";
+};
+"clipboard" = {
+  stripPrefix = 0;
+  sha512.run = "19aed32c2dc229852133a44fe5ed692a0d3194d374cc77e2301314b3fff929b834fd4df82e811095049e64ba127180eddb77fcc4211aecd2db40e8124a38d55c";
+  sha512.doc = "50e7447b35c1d73c1d36bab165a8bb476764ffcc4ed7994e1bc63c6759baad0dd6c2c1f6a95334c7bf649dd13c8e79d17ec536120f1112d621e833b6f9f80578";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"clock" = {
+  stripPrefix = 0;
+  sha512.run = "ba378fe241cd2e51b641f0edc4bdd1403477b392e0a22363bcf540b513c1c15b1c0e3ab37020aa77ec147ce59cc7ad6f09c86cadcc0a77892a1a798c36c411aa";
+  sha512.doc = "d06e263266ab91b48ae3238af6ce283c7f720c2113d95d10c7de6026b4557b0fcb22aaec44caba2f7ad743e578e9840da1b116fd3372558d545c424159d8f2e5";
+  hasRunfiles = true;
+};
+"clojure-pamphlet" = {
+  sha512.run = "a420e5548af550ef91103a82c5bf8e43345abfce69bb438d488ed9a3a62db1e6763ea1c17b246ef307cc62d28b5c575b5da07d5857241e21ce7d789e9a2a055d";
+  sha512.doc = "23f6cd97dc5d521689555ec95a695db0f9cae8873d28e2bac2969f07e9e8d2f7ca9a6c8105ca127da202d811717b3c1f4219fe15f9af01036800a083f065cd09";
+  sha512.source = "32f90dabd0e73206930f589a97e8630c25ce2f95f1657d08ce71cd36241bafd6c2a79c483805f7574ccab29deb478d1ef8837fdf2e922592e6d8f18f43121a14";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"cloze" = {
+  stripPrefix = 0;
+  sha512.run = "e66b5d9086d3d6ac39c0664cc4906b467413b919a64538371077bbd9088d80ea81276ce66a64ba29040068b9b73ec5990a7d4422608ce85b0d94e8b2ee3bdce2";
+  sha512.doc = "c21e8561c296efaa8b4c30044f6121736d58a98d910bf671d11f1931d29ddd0d626bca69ab6f50225a3cb588346877b76ec43426822a869e72e266ee5d65cd5e";
+  sha512.source = "fe68d18164ef34259dcc42c4ec395b929c92d3758a8c9e911c2f20a136c2807ed229612db1efa6cb02704eac6924b9ac8b98742a546e271241013245d855e50a";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"clrdblpg" = {
+  stripPrefix = 0;
+  sha512.run = "bdd3de3ea16cb5d24879bcf2255bbe01612f8af70f663b9ac578a4ac98910119ea96b8a5b4a59d25c0406c1b33786997ee2940da0273b025455e334b48f17b7d";
+  sha512.doc = "53ba8c83224ee6573cd1549e7e425fd524b5caf65ab139b67e7de9b32bdd5c3c87f5af63c2c43696554fcc33c8bff4690373ad25582b23bf51134b9cb6301409";
+  sha512.source = "8663b5fa032e10cd77f4f526d30fd16302fd31c1e5ee268d815de3d4b9aee9fe6688e5c94ba50f5d0cb2bb11c03198401bb1a3bd03c431dece50dab65ae3d638";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"clrscode" = {
+  stripPrefix = 0;
+  sha512.run = "c26ac99b2f097b3b9df8bcb3ae040da959c0bd238be75a50b3711cdf0b7b0024ef40749169c0fe0437aa8c845b3ee9c9ec4ab46fe31fe6b1e28019fcd4779076";
+  sha512.doc = "b74c858703577f79c89b4e95a0fef2012a756defda525c25f2945952b6637fba7ae4c30791a5d566267a16627bf7ce991c4edf726f7106b27b2df3c2b81eb765";
+  hasRunfiles = true;
+  version = "1.7";
+};
+"clrscode3e" = {
+  stripPrefix = 0;
+  sha512.run = "eb609d4204f9292b387fb8ecac13eaaad77e1d32870cd29f4996771acc5f8e82560e3fb9dcd2c8284888ed55d2b7bfbf931b50e01b0e4b8790c2ce5ce4445588";
+  sha512.doc = "0792d458ee46b44d37c31a5bbeaad2257ae1aca818ce33d0b1c8ae96b7e90ea6e06e9036ce61063f232c3829ec36bcef58f111b5df0b25d209e867ac53d322d1";
+  hasRunfiles = true;
+};
+"clrstrip" = {
+  stripPrefix = 0;
+  sha512.run = "bfa316a11232b3d1ce78641dda962918788186a7e164cb49829aebd187c72305adba6cd51285cb9b36f9c31d7d0b4454eabd488038970d79132e0c941e989c75";
+  sha512.doc = "a9d7648048eced494766636395fe99177a47456d61fd3d88a70006c718b259f7cf13e39696869230c098d696f0c12e505a4eea33201e2414f6e1833468eb1648";
+  sha512.source = "f63197e26dd88365a5c9af83f37ecc04281fda2362bfc79e29d35d37ddb4d25892a89c7a721cd04ab9286ca19f382d16c2f2df89a5242f12862890f177b8f6c6";
+  hasRunfiles = true;
+};
+"cluttex" = {
+  sha512.run = "e6b721b8220a7196d0baa93878526f76f8ce986ee586ae8a31344b674061012a644b2d492ae7ca4f896bd90648a3786cbdb8965b8e25695eb751fbfbc6692ce9";
+  sha512.doc = "904b3594c4c90d906e7ab801a5d2bf5c3297cdc5a05ed4a9fe3c97ef1330b45e357356a27ccb15d3deb76d98764550da6e84d0f2f9a845452ed382f1a606a50c";
+  hasRunfiles = true;
+  version = "0.4";
+};
+"cm" = {
+  stripPrefix = 0;
+  sha512.run = "e939416545071f5c445d866255050cd4302c3ede6af1e080909a68b6e4327ace1f90af4677c68c18d1a85aecd4d2ff346e13670b0be59c76e11ef6334991aaad";
+  sha512.doc = "d27b43854fa022de53379a84087657bf97ce5475d70f98c783f790e320d78daab2f002f49f3dd917224d30e308d78dcf0855325b39014fb0fe5b50d645c9b9a4";
+  hasRunfiles = true;
+};
+"cm-lgc" = {
+  stripPrefix = 0;
+  sha512.run = "5fcf591d132314d8ce160e3070036f6fba56962ed40d8fee7b58b0e8219a8124bcf380b1be4e943209ba230f05cfcd374c96e3e799695a018356d12be3215760";
+  sha512.doc = "eda2082e865dec858a010b757a2d60e0be9526d2e5f2c276d1c5e8d386a71f4d7631d1af8dee009f9d61e0682904697bfdc89222863499c8e1aca2b11d0f3ed9";
+  hasRunfiles = true;
+  version = "0.5";
+};
+"cm-mf-extra-bold" = {
+  stripPrefix = 0;
+  sha512.run = "c9a9c5631ce016112ccd37ac3325c753e608bdc55e1de524742ce81f1ffa6c53ad6d113346d9d90cbe5466fe301d27050d40bff258678df840c693987afaf6ad";
+  hasRunfiles = true;
+};
+"cm-super" = {
+  stripPrefix = 0;
+  sha512.run = "45638ebf4ef2ffb7c4b74669ea089a9f8d3ab4b98e555b3f9b2e9bd9732b48fdba61dc91188e2c8962b8bfa3caaab31c10d1ccd3e0aa9e26197b148e59576f8f";
+  sha512.doc = "5b524c55dbcfa1db87484d3437156ca9987fcca66e2c2e6d69e562c48ae708e51f089051524f324cbafb72a29e08f90e70c408d7fea7341e9ef0b5d53288b7d3";
+  hasRunfiles = true;
+};
+"cm-unicode" = {
+  stripPrefix = 0;
+  sha512.run = "b50e647db3be42cb8bc7f1df849590b4f3f8856523c57d16aa5b42237a3f7fbd381ea5f05c1337091a66fe667841704133828141eb8c40e50f595498949acd65";
+  sha512.doc = "162e407cb299b1a4ee353fcd0cee7eee048f8356def550d591630f12924b4a5ff0e9d6f9a0652c3dee7a88e5c2521b0c23ba4549bdfcb21a90c1949ef566183f";
+  hasRunfiles = true;
+  version = "0.7.0";
+};
+"cmap" = {
+  stripPrefix = 0;
+  sha512.run = "d907b1483bcd8de1b2b3158ad1a90493e86a27bd60f3ea901011866e81d57b22a555da0e54340f77ae9584aba3960959e89071330d035671c549e887fbedbdef";
+  sha512.doc = "c3ca940f836f5c5e433adedb404d3f1033d8efde61bbd9a043356889377e0914fe9dcb8cce8c2b9252502de6af3cc1a8bd71dbfc61e12446cc07bc9d5d2c2668";
+  hasRunfiles = true;
+  version = "1.0h";
+};
+"cmarrows" = {
+  stripPrefix = 0;
+  sha512.run = "5f56f9ab77b2f250aff664b0007aa17eccad96d6f674ae7417f610b62d84123fc85bc80cf83948e0df2a7bfb721300e149fc764b03638e5005cc4832f2fa5544";
+  sha512.doc = "0bc738eb48fc34b7cb35240622925d43e5ff5fce21b1c560158b2ceee2790a284b33816fd192a5b0161544ee5add98f4e3ebe7dd0165273d53e5ea2de7d994ac";
+  hasRunfiles = true;
+  version = "0.9";
+};
+"cmbright" = {
+  stripPrefix = 0;
+  sha512.run = "3251c7ce9f139a9e553e3cf343339367e98e6982850ca3d2a2087efe5e26f4828597e6f5c1ac85567e81897a09239f5be717a6a85d04b164442c9c5c53ea4fac";
+  sha512.doc = "7add06e9502ab0bf912e811afbb66caf7ac83d60b6e2575dbc75709438ce6252239a43106632633e2d90b2badd46bb800533c496c811de7316cd1766456058c9";
+  sha512.source = "5824d33c26e94cf0ec8d2b69d0c80c715a68ef98ab5e2025c84fc20dcda2be4b89125dfe69400f2f27d46b773c5a3918af533cc2c25fad01694776bf5a546879";
+  hasRunfiles = true;
+  version = "8.1";
+};
+"cmcyr" = {
+  stripPrefix = 0;
+  sha512.run = "452551d8563b53408a058f847a4a8d3738ac7f0de1da15aea05208c030c67f904b848d71bacca2f6f5ec3e882cdf0be58a4037ed7dea7c7bbd2aeb08776427b9";
+  sha512.doc = "748c60e2e54f49bc6afd2867574919003ad6412d721613dacf6f8dc48cb187ca915b1a5e7286a47db7087fe1133c8ceabd998a8c60b91e4d60264b6fc6253190";
+  hasRunfiles = true;
+};
+"cmdstring" = {
+  stripPrefix = 0;
+  sha512.run = "b05a8f8d326a6546b7c865e4cbc1afdfb0fa50993f4ad5e3b3a1e1781be9ed7590e1dd17b18d58f8a96c83aa2fe6218328b2df3e193e2dc7923d051374ebc9ba";
+  sha512.doc = "c102fcd054597d84d98a4f74656f36a9e1aa53623bebaa4ef39f341ddb889062a0e0c705074a4909bf50ae3cdc9a0e0da06fc6b12fde10bcaf5391fe6c792818";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"cmdtrack" = {
+  stripPrefix = 0;
+  sha512.run = "22de643d5b45f3898a1aeee44ae88594b545af34bb5bdac937753c13d31071872a78935dc2c73fb22c0e591d164f618549a2bd67a00550f3fb70753a951ad4cc";
+  sha512.doc = "2a69b054e1de07b31426e653af45125824bd037cf5a24fcde1f0fe1b6aa3eb925688959aa84094ecc65954b92030e1b78545db18f08a39990c4412d487ce2284";
+  sha512.source = "c6b02dd165bfb3ab40ee05aa3ac9df74faff8167de021495fb08e0d173b83f75453915a634d81d260d4739166b2e5a519b8cecfc7807d25f396c27c5b65f58f3";
+  hasRunfiles = true;
+};
+"cmexb" = {
+  stripPrefix = 0;
+  sha512.run = "1d5a3b2ee73dc85c2e19e7bd8bdf0eee0283ca161ecd42dbeffe0443849e73e09113220ca6e09039c0daa684b2f372e0f8b13bdd711a937a09cb8a8fb63b4593";
+  sha512.doc = "f833bc57edead21d4fcb27c5822849f26cbd4b434bcd230bfccb190c94c47d2eaaec4dbc9264c6a55ba24b2571d2607197abfd792423e03b7013c478e261ee6d";
+  hasRunfiles = true;
+};
+"cmextra" = {
+  stripPrefix = 0;
+  sha512.run = "a9cf3d6157c6341de13f400bc496211912679702606d4e6c488231c41c4a70053791d031c7b6973ecfd68ab8e28c7d56d41a10492af7d8e4ae66b6eb923db370";
+  hasRunfiles = true;
+};
+"cmll" = {
+  stripPrefix = 0;
+  sha512.run = "8470819c5a37b3d8d1d44aae53b62ff020087e1125f381e51ef4a639fd6b2394c3d6f15a3a86fe70e61a4545213059bde6fc3e9d06cd054e46218e90e64c0543";
+  sha512.doc = "71a7cd27a2744e8e3ab09b8fbbc514eb2e38d9740349139212f0861c67948fa1a98728acb1d22a4397fe95d8efd5c6fcb87a1843a1f9dbd0d161e2e835e1ac11";
+  sha512.source = "de17c8e0627408358ae3de41a5bf557d99abf76bb480ab28ef9df424d8b7ae1f73ca2e30f4eeb26ac9eb2dd36ddafa143cd49ce6618b2ca36fcfc6e22e83d217";
+  hasRunfiles = true;
+};
+"cmpica" = {
+  stripPrefix = 0;
+  sha512.run = "2aac63861c3c1099054286647917f4ab594fd535de9d513f790cb70e8a38278ffda0be29656e1da57206c7bac21928cf5179bd1cc22f50e0f10d1ca8083f4b86";
+  sha512.doc = "7c6251f1c5090328c93f6ec224bbb6d05433b5471c6cb8b4d7f3b9ff05f9be8ad49587d24a34702fb23b9f1803ca3df3a638b16335944a9b2dc35422ca8bf9fe";
+  hasRunfiles = true;
+};
+"cmpj" = {
+  stripPrefix = 0;
+  sha512.run = "31e9fb352cf03797436bcc1cd0f3d16b2ff6234d6306770e940f59eb77392fe7f616530febc4b299cc52c71036358b203e7cc99256099093fbbd4eceb71af4bf";
+  sha512.doc = "3e2b162c6c04f409e1dd32ac4be59431d65e6b39e813e091bff0cbdbb9fe101c751664df8f83704d38daaf4c7c04db24b22e32a36d3cdf07411b73a1d21c076f";
+  hasRunfiles = true;
+  version = "3.02";
+};
+"cmsd" = {
+  stripPrefix = 0;
+  sha512.run = "97e1830bdbab04e321433f43e14d65fd2e9820d46a6fb3616f2cea38a54208e80e1238eba7b5cfd20137f6e3a3da3a1586a7caa3e0a495ed91235a05120d444c";
+  sha512.doc = "f9994a39f6e14f40398abacfe0f4c1a9cbd71d7b55c29787105fdbf8212953fb761f1696cf35196d446b9905a967d2908d7e41e7742e5cd7dd538ac0e7d3f5d0";
+  hasRunfiles = true;
+};
+"cmsrb" = {
+  stripPrefix = 0;
+  sha512.run = "71114f560befd3f1c7586dbdde38c12b682bf1eb73019d874b1a55e89ef9829786623ad9f53d2dad99361dfac09c9ec011dd7018d07f48d483463219df18baba";
+  sha512.doc = "81803d7ab7c220b64684ac2c7bf3b56ced62fafec33e5ba2ed2ab2bfcc4c8abccfacb5614a853fbc1ad0993bd6f221b41ddbad1c494558fa3d4af2c27a51eafb";
+  hasRunfiles = true;
+  version = "3.1";
+};
+"cmtiup" = {
+  stripPrefix = 0;
+  sha512.run = "9412576d07ec490fda4dd01445f28e4b966d2664a81e5f44a574019df1eb4de4189b8d06edf7a1a3b57e8ade129b57c0147a96fa9b77337d9a906134e33f2067";
+  sha512.doc = "aae6105fc9e828715193bc4d251210f23ce6f4c4d703c79c244ff765a377f90055188f8af83e705da062cea8db8bf6b89beecc488cce32d7903fb7fb8c4bcad9";
+  hasRunfiles = true;
+  version = "2.1";
+};
+"cnbwp" = {
+  stripPrefix = 0;
+  sha512.run = "31c83774160e64dadc95afebe830ea1aa7c929e48f611cf5c9742cb66e12a3dd459928c85ed1378460247241fd4f007145b002ae7aabb88e773779124510c86f";
+  sha512.doc = "d41f72a3c5482b1ec50f1bacbaf8bed5f926c5d522ab5e3574d71d68b2d7c63e20fa1df65962f94e53b70f75aa7dee5337d064c212990c0f3351c30b05b567ac";
+  hasRunfiles = true;
+};
+"cnltx" = {
+  stripPrefix = 0;
+  sha512.run = "cbe777c4dc81f0798ba3d64844e65c84a7623611feb93a14e949375f0cda982d7a973fd662975edc51e508c0cd0d19f24e92bff112f56b765ad4378ae95b8bd4";
+  sha512.doc = "1af4a294f758889b8cec97cdc53519fa9eb360e590e5db96cfb25ad2d0d0f89b7b3efa6b6ea986e29819b3023d04f3cf50a0a2e583bcd6fd80a61dfcdbc5dcc1";
+  hasRunfiles = true;
+  version = "0.13";
+};
+"cns" = {
+  stripPrefix = 0;
+  sha512.run = "0b3645da07e0fc9482cfeddd93f949e18dc12b6aa02e5a6c45669f3d5f7f25d5fa7ff4992f40b9b71894e21b5b1855999ba8e1b130be27e8b7001444ed30db0f";
+  sha512.doc = "264c64f2ae29bff96b428500af07a81402434d9422792a36ee0da74e9821f161cf8281d38317787c0db78109d2eeaaff4e62730855ae1f1e1f250f4173740d35";
+  hasRunfiles = true;
+  version = "4.2.0";
+};
+"cntformats" = {
+  stripPrefix = 0;
+  sha512.run = "f829d6452faa20a514bfe43a8b002d4d728b57e0d6c44de7ba8aebaa96d9a40fc0ac26ca6ef637ab9efd3f133c70cd4d5b9c81dd382ed8adcd5abd1b2fb5d6cd";
+  sha512.doc = "4d6c9b8ad41dea1e14eec71570afdeb28fb834191587ba964642628674526a5ac82d6ceb972d5d89e0faeb3fb46da26361dea45f8757523f58765dfbdb773a3d";
+  hasRunfiles = true;
+  version = "0.7";
+};
+"cntperchap" = {
+  stripPrefix = 0;
+  sha512.run = "ade4e6bbb00d619d52cb65549cb50f4ff9275d20a9e871ddee99064fb2ae0e02ba7d403bd6c7d658fdc6d542d7a32244ce8ff7fbe023b4fe292697584aed966a";
+  sha512.doc = "354ea40ce2fe4e543016970fe81745c151a53c182800e8b861006d7e1c6fff84628a0baa4bfad29a0b81c8d0eede9f31145e7d3f380953921a48f31c5b8d0a8a";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"cochineal" = {
+  stripPrefix = 0;
+  sha512.run = "8f59083fe0f335b08c61e68bc5f4e747409e9514e5ae9361acfa001b698e14effc830ad993eb2e0b4d026edcdf918868959766a998eb35310cc51e03a5894ea8";
+  sha512.doc = "84cfa9d369a1a342becda4837617b14436e9ec9bbefe5fd446acde3f73292a306e705e88c29b65621f39590c1507f7619accdb505829b8441ba58110c6a47ba6";
+  hasRunfiles = true;
+  version = "1.055";
+};
+"codeanatomy" = {
+  stripPrefix = 0;
+  sha512.run = "0f7613af5e91d364d0c8cc3978ce5251cff4650bf5e187ef03606b9cf5294eed82751b8f7604583af5187b62f40688733a39aaaca6a022ddd0087ab610f8c978";
+  sha512.doc = "877a827dfd0bb9e79f80fa0a9cd7275a647fc4f0451af5c5a5253caee306f202a419f0164b2878c7a780176e018a2f1a3f8e9ec37fd8245997da537eefcd4e7b";
+  sha512.source = "9cbe9969e777ccbe711f68936798bdd28e570e6ed772ba3aa8ad54f083792cd725c97055859cecc115bab420f3a929d707eb49584c483a9f223d7ea7bb5fe388";
+  hasRunfiles = true;
+  version = "0.4-Alpha";
+};
+"codedoc" = {
+  stripPrefix = 0;
+  sha512.run = "8dc006776f2a3f0f28aeed0450e2d7b714402de1939a92d1e7f1e0174a8de7e9f7099e7ae9a5de34df03613ff16800bde17f7cc90fa82798f30c775c10c655ff";
+  sha512.doc = "fa23f45c539ec134cff114d7252a4d96585168729dc33d0865f4976f94620a8d3c02fa21572953161977d893c7f311b0d15a431f74b8526d1de0680dfdad7341";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"codepage" = {
+  stripPrefix = 0;
+  sha512.run = "2531186744ce4915b8d903e0ea49e1d3e0a6be5ab2db7bc2a5cbc70e675c2dd00104a677c08b7b7d12eca56dfc4b283c49ee599fff6d3460c6238f414ba3cb76";
+  sha512.doc = "b49ffff68cc599835acf436de3117c7f9511b362d821bdd8c18f0af930c5b717dc0bcd00477e6f0f367229b9d1f6dd150a8166dd74bbfbc2cfcb77ccf28cd8d5";
+  sha512.source = "2c12bf42c1aa818d5718f2bbbb07460364ad40f7bc4cf0676cb064a03751e1bd88be16fffaae097f5ed9c0793f60ffb93374b43f7b90acf8ad3cbc8f5d7b8b70";
+  hasRunfiles = true;
+};
+"codesection" = {
+  stripPrefix = 0;
+  sha512.run = "95318ae4933d0cb43226c714c8ff931aaa8e06cfb2c44c3929db59ae8336882c588e26268445b62f8da32145a962bae0030daff3d5cfa22007919fb7b13fd69d";
+  sha512.doc = "881e62381793f548d0c291141944d81e19cf4340f2c1f63916857f5702756e18d107337c340568d62de48fe2190cf4c74a8d6604f8d4843c47ceb7c59608c0b0";
+  sha512.source = "e2ca6d6cb96977d494bfa9818d90aef30a915dd4c284fb7e555e79c09db022819a6e1f825ab895108594b90b488e70780f268022a896feef7dcc1ab590fabce9";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"codicefiscaleitaliano" = {
+  stripPrefix = 0;
+  sha512.run = "7c93841ceadbb7bbfc9846d281fdbd84b7f284117344e1c4fd984e746186403e9be3e2048cfca53f6690a1e20b7471224b8d30ed1358959053111c22d3f15191";
+  sha512.doc = "7b0c13252796be7d584d3e5dad65711229cf916ce7c8e89e423805183629f161b3d4e4f47d6c9488ab32ff8b52723b0fbc4252f2ca99e965f4d7c4409881b67d";
+  sha512.source = "8602ad1eee729a5d21d760da54f31d67746bc336c9e18d43b9cf3a5443afaf8099d27a908cc1cd9cc028e94b2173e97179cf293d5739244834817f0bc50bbaa3";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"coelacanth" = {
+  stripPrefix = 0;
+  sha512.run = "12c3567797664581309fd1507003838dd14c217b26d5cbf7ec149ebd60f77eb0b126fafe41b612037afbf6a79ecbcc5b1047516199c9a1dd677d0b81e1a40046";
+  sha512.doc = "47da656f6952b769049f0a3a267ce5245c08ffe2dc3c7902bebf51cfbbf0fa37bcf6522cae8b6d4040ad112a1aae5eeab997c2d5d975c1b64d91aad21ff1d025";
+  hasRunfiles = true;
+  version = "0.005";
+};
+"collcell" = {
+  stripPrefix = 0;
+  sha512.run = "34a2fb5a5dc309e625e4c7d89b9e5aa9806d15d93cf0fec124a0505b20c6711bfa96b3f99986c23393632a9db1c773842c9bf6f10c01d1c4da8dcef2960df289";
+  sha512.doc = "1bbb4e70a5f5163a62f1b0b135f5601b4d9378cf2a5d27fddfabf9ee5e65dae7a94cb4cf63ed5e98dbf35cee550bd0a7b425f505d462eeb7f1e7035fe3c7664d";
+  sha512.source = "8d567bc14b9e6a8467da4893245efd56f7537f5b721b8b9c4300f9ffda5ab30649f7c0ca51f3673f786676fe20af948de63d1fd36ce2c3d0f9d217ad4e6bbad1";
+  hasRunfiles = true;
+  version = "0.5";
+};
+"collectbox" = {
+  stripPrefix = 0;
+  sha512.run = "e530c630a905084a3f9c43fd54c45fc5d4af437aab887f15f5d37c40d3ba2a86c576ef032e723cf95f4f5dc46256d3e7bf6440545f68133217fb620aa2db8a65";
+  sha512.doc = "e2248e9825490474e545c1674d1256ad586332045e2fd5ee5dc84d9965d4df263522277a14676010085a73dcf00d822ffb29117338b3fd3f854b7b0d0ddb5c9f";
+  sha512.source = "d29bd5252e632573797eba99f70172659303d7342ea345228d2ed448fb1c1b6a48aa2448a3cae1bec26849241a5d3e19cbc0c00e777a339dad23ad2864dc5da7";
+  hasRunfiles = true;
+  version = "0.4b";
+};
+"collection-basic" = {
+  stripPrefix = 0;
+  deps."amsfonts" = tl."amsfonts";
+  deps."bibtex" = tl."bibtex";
+  deps."cm" = tl."cm";
+  deps."colorprofiles" = tl."colorprofiles";
+  deps."dvipdfmx" = tl."dvipdfmx";
+  deps."dvips" = tl."dvips";
+  deps."enctex" = tl."enctex";
+  deps."etex" = tl."etex";
+  deps."etex-pkg" = tl."etex-pkg";
+  deps."glyphlist" = tl."glyphlist";
+  deps."graphics-def" = tl."graphics-def";
+  deps."gsftopk" = tl."gsftopk";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyphenex" = tl."hyphenex";
+  deps."ifluatex" = tl."ifluatex";
+  deps."ifplatform" = tl."ifplatform";
+  deps."ifxetex" = tl."ifxetex";
+  deps."knuth-lib" = tl."knuth-lib";
+  deps."knuth-local" = tl."knuth-local";
+  deps."kpathsea" = tl."kpathsea";
+  deps."lua-alt-getopt" = tl."lua-alt-getopt";
+  deps."luatex" = tl."luatex";
+  deps."makeindex" = tl."makeindex";
+  deps."metafont" = tl."metafont";
+  deps."mflogo" = tl."mflogo";
+  deps."mfware" = tl."mfware";
+  deps."pdftex" = tl."pdftex";
+  deps."plain" = tl."plain";
+  deps."tetex" = tl."tetex";
+  deps."tex" = tl."tex";
+  deps."tex-ini-files" = tl."tex-ini-files";
+  deps."texlive-common" = tl."texlive-common";
+  deps."texlive-docindex" = tl."texlive-docindex";
+  deps."texlive-en" = tl."texlive-en";
+  deps."texlive-msg-translations" = tl."texlive-msg-translations";
+  deps."texlive-scripts" = tl."texlive-scripts";
+  deps."tlshell" = tl."tlshell";
+  deps."unicode-data" = tl."unicode-data";
+  deps."updmap-map" = tl."updmap-map";
+  deps."xdvi" = tl."xdvi";
+  sha512.run = "cfe97f315159b9f5732cdc417b16c18d37443d13389abee846d690c13bf5ea0cadbce78b77e78154e6adc3bfbce1d049a8302147c5a9defa9795ba98637c04b0";
+};
+"collection-bibtexextra" = {
+  stripPrefix = 0;
+  deps."collection-latex" = tl."collection-latex";
+  deps."aichej" = tl."aichej";
+  deps."ajl" = tl."ajl";
+  deps."amsrefs" = tl."amsrefs";
+  deps."apacite" = tl."apacite";
+  deps."apalike2" = tl."apalike2";
+  deps."archaeologie" = tl."archaeologie";
+  deps."beebe" = tl."beebe";
+  deps."besjournals" = tl."besjournals";
+  deps."bestpapers" = tl."bestpapers";
+  deps."bib2gls" = tl."bib2gls";
+  deps."bibarts" = tl."bibarts";
+  deps."biber" = tl."biber";
+  deps."bibexport" = tl."bibexport";
+  deps."bibhtml" = tl."bibhtml";
+  deps."biblatex" = tl."biblatex";
+  deps."biblatex-abnt" = tl."biblatex-abnt";
+  deps."biblatex-anonymous" = tl."biblatex-anonymous";
+  deps."biblatex-apa" = tl."biblatex-apa";
+  deps."biblatex-archaeology" = tl."biblatex-archaeology";
+  deps."biblatex-arthistory-bonn" = tl."biblatex-arthistory-bonn";
+  deps."biblatex-bath" = tl."biblatex-bath";
+  deps."biblatex-bookinarticle" = tl."biblatex-bookinarticle";
+  deps."biblatex-bookinother" = tl."biblatex-bookinother";
+  deps."biblatex-bwl" = tl."biblatex-bwl";
+  deps."biblatex-caspervector" = tl."biblatex-caspervector";
+  deps."biblatex-chem" = tl."biblatex-chem";
+  deps."biblatex-chicago" = tl."biblatex-chicago";
+  deps."biblatex-claves" = tl."biblatex-claves";
+  deps."biblatex-dw" = tl."biblatex-dw";
+  deps."biblatex-enc" = tl."biblatex-enc";
+  deps."biblatex-ext" = tl."biblatex-ext";
+  deps."biblatex-fiwi" = tl."biblatex-fiwi";
+  deps."biblatex-gb7714-2015" = tl."biblatex-gb7714-2015";
+  deps."biblatex-gost" = tl."biblatex-gost";
+  deps."biblatex-historian" = tl."biblatex-historian";
+  deps."biblatex-ieee" = tl."biblatex-ieee";
+  deps."biblatex-ijsra" = tl."biblatex-ijsra";
+  deps."biblatex-iso690" = tl."biblatex-iso690";
+  deps."biblatex-juradiss" = tl."biblatex-juradiss";
+  deps."biblatex-lni" = tl."biblatex-lni";
+  deps."biblatex-luh-ipw" = tl."biblatex-luh-ipw";
+  deps."biblatex-manuscripts-philology" = tl."biblatex-manuscripts-philology";
+  deps."biblatex-mla" = tl."biblatex-mla";
+  deps."biblatex-morenames" = tl."biblatex-morenames";
+  deps."biblatex-multiple-dm" = tl."biblatex-multiple-dm";
+  deps."biblatex-musuos" = tl."biblatex-musuos";
+  deps."biblatex-nature" = tl."biblatex-nature";
+  deps."biblatex-nejm" = tl."biblatex-nejm";
+  deps."biblatex-nottsclassic" = tl."biblatex-nottsclassic";
+  deps."biblatex-opcit-booktitle" = tl."biblatex-opcit-booktitle";
+  deps."biblatex-oxref" = tl."biblatex-oxref";
+  deps."biblatex-philosophy" = tl."biblatex-philosophy";
+  deps."biblatex-phys" = tl."biblatex-phys";
+  deps."biblatex-publist" = tl."biblatex-publist";
+  deps."biblatex-realauthor" = tl."biblatex-realauthor";
+  deps."biblatex-sbl" = tl."biblatex-sbl";
+  deps."biblatex-science" = tl."biblatex-science";
+  deps."biblatex-shortfields" = tl."biblatex-shortfields";
+  deps."biblatex-socialscienceshuberlin" = tl."biblatex-socialscienceshuberlin";
+  deps."biblatex-source-division" = tl."biblatex-source-division";
+  deps."biblatex-subseries" = tl."biblatex-subseries";
+  deps."biblatex-swiss-legal" = tl."biblatex-swiss-legal";
+  deps."biblatex-trad" = tl."biblatex-trad";
+  deps."biblatex-true-citepages-omit" = tl."biblatex-true-citepages-omit";
+  deps."biblist" = tl."biblist";
+  deps."bibtexperllibs" = tl."bibtexperllibs";
+  deps."bibtopic" = tl."bibtopic";
+  deps."bibtopicprefix" = tl."bibtopicprefix";
+  deps."bibunits" = tl."bibunits";
+  deps."biolett-bst" = tl."biolett-bst";
+  deps."bookdb" = tl."bookdb";
+  deps."breakcites" = tl."breakcites";
+  deps."cell" = tl."cell";
+  deps."chbibref" = tl."chbibref";
+  deps."chicago" = tl."chicago";
+  deps."chicago-annote" = tl."chicago-annote";
+  deps."chembst" = tl."chembst";
+  deps."chscite" = tl."chscite";
+  deps."citeall" = tl."citeall";
+  deps."citeref" = tl."citeref";
+  deps."collref" = tl."collref";
+  deps."compactbib" = tl."compactbib";
+  deps."crossrefware" = tl."crossrefware";
+  deps."custom-bib" = tl."custom-bib";
+  deps."din1505" = tl."din1505";
+  deps."dk-bib" = tl."dk-bib";
+  deps."doipubmed" = tl."doipubmed";
+  deps."ecobiblatex" = tl."ecobiblatex";
+  deps."econ-bst" = tl."econ-bst";
+  deps."economic" = tl."economic";
+  deps."fbs" = tl."fbs";
+  deps."figbib" = tl."figbib";
+  deps."footbib" = tl."footbib";
+  deps."francais-bst" = tl."francais-bst";
+  deps."gbt7714" = tl."gbt7714";
+  deps."geschichtsfrkl" = tl."geschichtsfrkl";
+  deps."harvard" = tl."harvard";
+  deps."harvmac" = tl."harvmac";
+  deps."historische-zeitschrift" = tl."historische-zeitschrift";
+  deps."icite" = tl."icite";
+  deps."ietfbibs" = tl."ietfbibs";
+  deps."ijqc" = tl."ijqc";
+  deps."inlinebib" = tl."inlinebib";
+  deps."iopart-num" = tl."iopart-num";
+  deps."jneurosci" = tl."jneurosci";
+  deps."jurabib" = tl."jurabib";
+  deps."ksfh_nat" = tl."ksfh_nat";
+  deps."ltb2bib" = tl."ltb2bib";
+  deps."listbib" = tl."listbib";
+  deps."logreq" = tl."logreq";
+  deps."luabibentry" = tl."luabibentry";
+  deps."margbib" = tl."margbib";
+  deps."multibib" = tl."multibib";
+  deps."multibibliography" = tl."multibibliography";
+  deps."munich" = tl."munich";
+  deps."nar" = tl."nar";
+  deps."nmbib" = tl."nmbib";
+  deps."notes2bib" = tl."notes2bib";
+  deps."notex-bst" = tl."notex-bst";
+  deps."oscola" = tl."oscola";
+  deps."perception" = tl."perception";
+  deps."pnas2009" = tl."pnas2009";
+  deps."rsc" = tl."rsc";
+  deps."showtags" = tl."showtags";
+  deps."sort-by-letters" = tl."sort-by-letters";
+  deps."splitbib" = tl."splitbib";
+  deps."turabian-formatting" = tl."turabian-formatting";
+  deps."uni-wtal-ger" = tl."uni-wtal-ger";
+  deps."uni-wtal-lin" = tl."uni-wtal-lin";
+  deps."urlbst" = tl."urlbst";
+  deps."usebib" = tl."usebib";
+  deps."vak" = tl."vak";
+  deps."windycity" = tl."windycity";
+  deps."xcite" = tl."xcite";
+  deps."zootaxa-bst" = tl."zootaxa-bst";
+  sha512.run = "b1582ade8d050be6c53fcdec2a03f2c8c5d9aa661bfc5fba874221fb2fdefa8382eba0b6d54aa43eed6916349eb1b33a94c7f9235d49951438e206625d5c6ee3";
+};
+"collection-binextra" = {
+  stripPrefix = 0;
+  deps."collection-basic" = tl."collection-basic";
+  deps."a2ping" = tl."a2ping";
+  deps."adhocfilelist" = tl."adhocfilelist";
+  deps."arara" = tl."arara";
+  deps."asymptote" = tl."asymptote";
+  deps."bibtex8" = tl."bibtex8";
+  deps."bibtexu" = tl."bibtexu";
+  deps."bundledoc" = tl."bundledoc";
+  deps."checklistings" = tl."checklistings";
+  deps."chktex" = tl."chktex";
+  deps."clojure-pamphlet" = tl."clojure-pamphlet";
+  deps."cluttex" = tl."cluttex";
+  deps."ctan-o-mat" = tl."ctan-o-mat";
+  deps."ctan_chk" = tl."ctan_chk";
+  deps."ctanbib" = tl."ctanbib";
+  deps."ctanify" = tl."ctanify";
+  deps."ctanupload" = tl."ctanupload";
+  deps."ctie" = tl."ctie";
+  deps."cweb" = tl."cweb";
+  deps."de-macro" = tl."de-macro";
+  deps."detex" = tl."detex";
+  deps."dtl" = tl."dtl";
+  deps."dtxgen" = tl."dtxgen";
+  deps."dvi2tty" = tl."dvi2tty";
+  deps."dviasm" = tl."dviasm";
+  deps."dvicopy" = tl."dvicopy";
+  deps."dvidvi" = tl."dvidvi";
+  deps."dviinfox" = tl."dviinfox";
+  deps."dviljk" = tl."dviljk";
+  deps."dviout-util" = tl."dviout-util";
+  deps."dvipng" = tl."dvipng";
+  deps."dvipos" = tl."dvipos";
+  deps."dvisvgm" = tl."dvisvgm";
+  deps."findhyph" = tl."findhyph";
+  deps."fragmaster" = tl."fragmaster";
+  deps."hook-pre-commit-pkg" = tl."hook-pre-commit-pkg";
+  deps."installfont" = tl."installfont";
+  deps."ketcindy" = tl."ketcindy";
+  deps."lacheck" = tl."lacheck";
+  deps."latex-git-log" = tl."latex-git-log";
+  deps."latex-papersize" = tl."latex-papersize";
+  deps."latex2man" = tl."latex2man";
+  deps."latex2nemeth" = tl."latex2nemeth";
+  deps."latexdiff" = tl."latexdiff";
+  deps."latexfileversion" = tl."latexfileversion";
+  deps."latexmk" = tl."latexmk";
+  deps."latexpand" = tl."latexpand";
+  deps."latexindent" = tl."latexindent";
+  deps."ltxfileinfo" = tl."ltxfileinfo";
+  deps."ltximg" = tl."ltximg";
+  deps."listings-ext" = tl."listings-ext";
+  deps."make4ht" = tl."make4ht";
+  deps."match_parens" = tl."match_parens";
+  deps."mflua" = tl."mflua";
+  deps."mkjobtexmf" = tl."mkjobtexmf";
+  deps."patgen" = tl."patgen";
+  deps."pdfbook2" = tl."pdfbook2";
+  deps."pdfcrop" = tl."pdfcrop";
+  deps."pdfjam" = tl."pdfjam";
+  deps."pdflatexpicscale" = tl."pdflatexpicscale";
+  deps."pdftex-quiet" = tl."pdftex-quiet";
+  deps."pdftools" = tl."pdftools";
+  deps."pdfxup" = tl."pdfxup";
+  deps."pfarrei" = tl."pfarrei";
+  deps."pkfix" = tl."pkfix";
+  deps."pkfix-helper" = tl."pkfix-helper";
+  deps."purifyeps" = tl."purifyeps";
+  deps."pythontex" = tl."pythontex";
+  deps."seetexk" = tl."seetexk";
+  deps."srcredact" = tl."srcredact";
+  deps."sty2dtx" = tl."sty2dtx";
+  deps."synctex" = tl."synctex";
+  deps."tex4ebook" = tl."tex4ebook";
+  deps."texcount" = tl."texcount";
+  deps."texdef" = tl."texdef";
+  deps."texdiff" = tl."texdiff";
+  deps."texdirflatten" = tl."texdirflatten";
+  deps."texdoc" = tl."texdoc";
+  deps."texdoctk" = tl."texdoctk";
+  deps."texfot" = tl."texfot";
+  deps."texliveonfly" = tl."texliveonfly";
+  deps."texloganalyser" = tl."texloganalyser";
+  deps."texosquery" = tl."texosquery";
+  deps."texware" = tl."texware";
+  deps."tie" = tl."tie";
+  deps."tlcockpit" = tl."tlcockpit";
+  deps."tpic2pdftex" = tl."tpic2pdftex";
+  deps."typeoutfileinfo" = tl."typeoutfileinfo";
+  deps."web" = tl."web";
+  deps."xindex" = tl."xindex";
+  deps."xindy" = tl."xindy";
+  sha512.run = "ef80a1b88f05deb69f19d0a918aaea7bc761ce76744c161229cad06904168eacd53eb0f67de9beec245b417692e587b78ed4ce7ad36c7eafc6a38ccb30becdfe";
+};
+"collection-context" = {
+  stripPrefix = 0;
+  deps."collection-basic" = tl."collection-basic";
+  deps."context" = tl."context";
+  deps."jmn" = tl."jmn";
+  deps."context-notes-zh-cn" = tl."context-notes-zh-cn";
+  deps."npp-for-context" = tl."npp-for-context";
+  deps."context-account" = tl."context-account";
+  deps."context-algorithmic" = tl."context-algorithmic";
+  deps."context-animation" = tl."context-animation";
+  deps."context-annotation" = tl."context-annotation";
+  deps."context-bnf" = tl."context-bnf";
+  deps."context-chromato" = tl."context-chromato";
+  deps."context-cmscbf" = tl."context-cmscbf";
+  deps."context-cmttbf" = tl."context-cmttbf";
+  deps."context-construction-plan" = tl."context-construction-plan";
+  deps."context-cyrillicnumbers" = tl."context-cyrillicnumbers";
+  deps."context-degrade" = tl."context-degrade";
+  deps."context-fancybreak" = tl."context-fancybreak";
+  deps."context-filter" = tl."context-filter";
+  deps."context-french" = tl."context-french";
+  deps."context-fullpage" = tl."context-fullpage";
+  deps."context-gantt" = tl."context-gantt";
+  deps."context-gnuplot" = tl."context-gnuplot";
+  deps."context-handlecsv" = tl."context-handlecsv";
+  deps."context-inifile" = tl."context-inifile";
+  deps."context-layout" = tl."context-layout";
+  deps."context-letter" = tl."context-letter";
+  deps."context-lettrine" = tl."context-lettrine";
+  deps."context-mathsets" = tl."context-mathsets";
+  deps."context-rst" = tl."context-rst";
+  deps."context-ruby" = tl."context-ruby";
+  deps."context-simplefonts" = tl."context-simplefonts";
+  deps."context-simpleslides" = tl."context-simpleslides";
+  deps."context-title" = tl."context-title";
+  deps."context-transliterator" = tl."context-transliterator";
+  deps."context-typearea" = tl."context-typearea";
+  deps."context-typescripts" = tl."context-typescripts";
+  deps."context-vim" = tl."context-vim";
+  deps."context-visualcounter" = tl."context-visualcounter";
+  sha512.run = "21aa181d7a3e8c16dbb30e12e30822d18db1386e088103a0987dc2a0a4d611172079ac12d7edd7f9d8923598c1532f7162905940846d6e13e143883bd735996f";
+};
+"collection-fontsextra" = {
+  stripPrefix = 0;
+  deps."collection-basic" = tl."collection-basic";
+  deps."Asana-Math" = tl."Asana-Math";
+  deps."academicons" = tl."academicons";
+  deps."accanthis" = tl."accanthis";
+  deps."adforn" = tl."adforn";
+  deps."adfsymbols" = tl."adfsymbols";
+  deps."aecc" = tl."aecc";
+  deps."alegreya" = tl."alegreya";
+  deps."algolrevived" = tl."algolrevived";
+  deps."allrunes" = tl."allrunes";
+  deps."almendra" = tl."almendra";
+  deps."almfixed" = tl."almfixed";
+  deps."anonymouspro" = tl."anonymouspro";
+  deps."antiqua" = tl."antiqua";
+  deps."antt" = tl."antt";
+  deps."archaic" = tl."archaic";
+  deps."arev" = tl."arev";
+  deps."arimo" = tl."arimo";
+  deps."asapsym" = tl."asapsym";
+  deps."ascii-font" = tl."ascii-font";
+  deps."aspectratio" = tl."aspectratio";
+  deps."astro" = tl."astro";
+  deps."augie" = tl."augie";
+  deps."auncial-new" = tl."auncial-new";
+  deps."aurical" = tl."aurical";
+  deps."b1encoding" = tl."b1encoding";
+  deps."barcodes" = tl."barcodes";
+  deps."baskervald" = tl."baskervald";
+  deps."baskervaldx" = tl."baskervaldx";
+  deps."baskervillef" = tl."baskervillef";
+  deps."bbding" = tl."bbding";
+  deps."bbm" = tl."bbm";
+  deps."bbm-macros" = tl."bbm-macros";
+  deps."bbold" = tl."bbold";
+  deps."bbold-type1" = tl."bbold-type1";
+  deps."belleek" = tl."belleek";
+  deps."bera" = tl."bera";
+  deps."berenisadf" = tl."berenisadf";
+  deps."beuron" = tl."beuron";
+  deps."bguq" = tl."bguq";
+  deps."bitter" = tl."bitter";
+  deps."blacklettert1" = tl."blacklettert1";
+  deps."boisik" = tl."boisik";
+  deps."bookhands" = tl."bookhands";
+  deps."boondox" = tl."boondox";
+  deps."braille" = tl."braille";
+  deps."brushscr" = tl."brushscr";
+  deps."cabin" = tl."cabin";
+  deps."caladea" = tl."caladea";
+  deps."calligra" = tl."calligra";
+  deps."calligra-type1" = tl."calligra-type1";
+  deps."cantarell" = tl."cantarell";
+  deps."carlito" = tl."carlito";
+  deps."carolmin-ps" = tl."carolmin-ps";
+  deps."ccicons" = tl."ccicons";
+  deps."cfr-initials" = tl."cfr-initials";
+  deps."cfr-lm" = tl."cfr-lm";
+  deps."cherokee" = tl."cherokee";
+  deps."chivo" = tl."chivo";
+  deps."cinzel" = tl."cinzel";
+  deps."clearsans" = tl."clearsans";
+  deps."cm-lgc" = tl."cm-lgc";
+  deps."cm-mf-extra-bold" = tl."cm-mf-extra-bold";
+  deps."cm-unicode" = tl."cm-unicode";
+  deps."cmbright" = tl."cmbright";
+  deps."cmexb" = tl."cmexb";
+  deps."cmll" = tl."cmll";
+  deps."cmpica" = tl."cmpica";
+  deps."cmsrb" = tl."cmsrb";
+  deps."cmtiup" = tl."cmtiup";
+  deps."cochineal" = tl."cochineal";
+  deps."coelacanth" = tl."coelacanth";
+  deps."comfortaa" = tl."comfortaa";
+  deps."comicneue" = tl."comicneue";
+  deps."concmath-fonts" = tl."concmath-fonts";
+  deps."cookingsymbols" = tl."cookingsymbols";
+  deps."cormorantgaramond" = tl."cormorantgaramond";
+  deps."countriesofeurope" = tl."countriesofeurope";
+  deps."courier-scaled" = tl."courier-scaled";
+  deps."crimson" = tl."crimson";
+  deps."crimsonpro" = tl."crimsonpro";
+  deps."cryst" = tl."cryst";
+  deps."cuprum" = tl."cuprum";
+  deps."cyklop" = tl."cyklop";
+  deps."dancers" = tl."dancers";
+  deps."dantelogo" = tl."dantelogo";
+  deps."dejavu" = tl."dejavu";
+  deps."dejavu-otf" = tl."dejavu-otf";
+  deps."dice" = tl."dice";
+  deps."dictsym" = tl."dictsym";
+  deps."dingbat" = tl."dingbat";
+  deps."doublestroke" = tl."doublestroke";
+  deps."dozenal" = tl."dozenal";
+  deps."drm" = tl."drm";
+  deps."droid" = tl."droid";
+  deps."dsserif" = tl."dsserif";
+  deps."duerer" = tl."duerer";
+  deps."duerer-latex" = tl."duerer-latex";
+  deps."dutchcal" = tl."dutchcal";
+  deps."ean" = tl."ean";
+  deps."ebgaramond" = tl."ebgaramond";
+  deps."ebgaramond-maths" = tl."ebgaramond-maths";
+  deps."ecc" = tl."ecc";
+  deps."eco" = tl."eco";
+  deps."eiad" = tl."eiad";
+  deps."eiad-ltx" = tl."eiad-ltx";
+  deps."electrum" = tl."electrum";
+  deps."elvish" = tl."elvish";
+  deps."epigrafica" = tl."epigrafica";
+  deps."epsdice" = tl."epsdice";
+  deps."erewhon" = tl."erewhon";
+  deps."esrelation" = tl."esrelation";
+  deps."esstix" = tl."esstix";
+  deps."esvect" = tl."esvect";
+  deps."eulervm" = tl."eulervm";
+  deps."euxm" = tl."euxm";
+  deps."fbb" = tl."fbb";
+  deps."fdsymbol" = tl."fdsymbol";
+  deps."fetamont" = tl."fetamont";
+  deps."feyn" = tl."feyn";
+  deps."fge" = tl."fge";
+  deps."fira" = tl."fira";
+  deps."firamath" = tl."firamath";
+  deps."firamath-otf" = tl."firamath-otf";
+  deps."foekfont" = tl."foekfont";
+  deps."fonetika" = tl."fonetika";
+  deps."fontawesome" = tl."fontawesome";
+  deps."fontawesome5" = tl."fontawesome5";
+  deps."fontmfizz" = tl."fontmfizz";
+  deps."fonts-churchslavonic" = tl."fonts-churchslavonic";
+  deps."forum" = tl."forum";
+  deps."fourier" = tl."fourier";
+  deps."fouriernc" = tl."fouriernc";
+  deps."frcursive" = tl."frcursive";
+  deps."frederika2016" = tl."frederika2016";
+  deps."garamond-libre" = tl."garamond-libre";
+  deps."garamond-math" = tl."garamond-math";
+  deps."genealogy" = tl."genealogy";
+  deps."gentium-tug" = tl."gentium-tug";
+  deps."gfsartemisia" = tl."gfsartemisia";
+  deps."gfsbodoni" = tl."gfsbodoni";
+  deps."gfscomplutum" = tl."gfscomplutum";
+  deps."gfsdidot" = tl."gfsdidot";
+  deps."gfsneohellenic" = tl."gfsneohellenic";
+  deps."gfsneohellenicmath" = tl."gfsneohellenicmath";
+  deps."gfssolomos" = tl."gfssolomos";
+  deps."gillcm" = tl."gillcm";
+  deps."gillius" = tl."gillius";
+  deps."gnu-freefont" = tl."gnu-freefont";
+  deps."gofonts" = tl."gofonts";
+  deps."gothic" = tl."gothic";
+  deps."greenpoint" = tl."greenpoint";
+  deps."grotesq" = tl."grotesq";
+  deps."hacm" = tl."hacm";
+  deps."hands" = tl."hands";
+  deps."heuristica" = tl."heuristica";
+  deps."hfbright" = tl."hfbright";
+  deps."hfoldsty" = tl."hfoldsty";
+  deps."ifsym" = tl."ifsym";
+  deps."imfellenglish" = tl."imfellenglish";
+  deps."inconsolata" = tl."inconsolata";
+  deps."initials" = tl."initials";
+  deps."inriafonts" = tl."inriafonts";
+  deps."ipaex-type1" = tl."ipaex-type1";
+  deps."iwona" = tl."iwona";
+  deps."jablantile" = tl."jablantile";
+  deps."jamtimes" = tl."jamtimes";
+  deps."junicode" = tl."junicode";
+  deps."kixfont" = tl."kixfont";
+  deps."kpfonts" = tl."kpfonts";
+  deps."kurier" = tl."kurier";
+  deps."lato" = tl."lato";
+  deps."lfb" = tl."lfb";
+  deps."libertine" = tl."libertine";
+  deps."libertinegc" = tl."libertinegc";
+  deps."libertinus" = tl."libertinus";
+  deps."libertinus-fonts" = tl."libertinus-fonts";
+  deps."libertinus-otf" = tl."libertinus-otf";
+  deps."libertinus-type1" = tl."libertinus-type1";
+  deps."libertinust1math" = tl."libertinust1math";
+  deps."librebaskerville" = tl."librebaskerville";
+  deps."librebodoni" = tl."librebodoni";
+  deps."librecaslon" = tl."librecaslon";
+  deps."librefranklin" = tl."librefranklin";
+  deps."libris" = tl."libris";
+  deps."linearA" = tl."linearA";
+  deps."linguisticspro" = tl."linguisticspro";
+  deps."lobster2" = tl."lobster2";
+  deps."logix" = tl."logix";
+  deps."lxfonts" = tl."lxfonts";
+  deps."ly1" = tl."ly1";
+  deps."marcellus" = tl."marcellus";
+  deps."mathabx" = tl."mathabx";
+  deps."mathabx-type1" = tl."mathabx-type1";
+  deps."mathdesign" = tl."mathdesign";
+  deps."mdputu" = tl."mdputu";
+  deps."mdsymbol" = tl."mdsymbol";
+  deps."merriweather" = tl."merriweather";
+  deps."miama" = tl."miama";
+  deps."mintspirit" = tl."mintspirit";
+  deps."missaali" = tl."missaali";
+  deps."mnsymbol" = tl."mnsymbol";
+  deps."montserrat" = tl."montserrat";
+  deps."mweights" = tl."mweights";
+  deps."newpx" = tl."newpx";
+  deps."newtx" = tl."newtx";
+  deps."newtxsf" = tl."newtxsf";
+  deps."newtxtt" = tl."newtxtt";
+  deps."niceframe-type1" = tl."niceframe-type1";
+  deps."nimbus15" = tl."nimbus15";
+  deps."nkarta" = tl."nkarta";
+  deps."noto" = tl."noto";
+  deps."obnov" = tl."obnov";
+  deps."ocherokee" = tl."ocherokee";
+  deps."ocr-b" = tl."ocr-b";
+  deps."ocr-b-outline" = tl."ocr-b-outline";
+  deps."ogham" = tl."ogham";
+  deps."oinuit" = tl."oinuit";
+  deps."old-arrows" = tl."old-arrows";
+  deps."oldlatin" = tl."oldlatin";
+  deps."oldstandard" = tl."oldstandard";
+  deps."opensans" = tl."opensans";
+  deps."orkhun" = tl."orkhun";
+  deps."overlock" = tl."overlock";
+  deps."pacioli" = tl."pacioli";
+  deps."paratype" = tl."paratype";
+  deps."phaistos" = tl."phaistos";
+  deps."phonetic" = tl."phonetic";
+  deps."pigpen" = tl."pigpen";
+  deps."playfair" = tl."playfair";
+  deps."plex" = tl."plex";
+  deps."plex-otf" = tl."plex-otf";
+  deps."poiretone" = tl."poiretone";
+  deps."poltawski" = tl."poltawski";
+  deps."prodint" = tl."prodint";
+  deps."punk" = tl."punk";
+  deps."punk-latex" = tl."punk-latex";
+  deps."punknova" = tl."punknova";
+  deps."pxtxalfa" = tl."pxtxalfa";
+  deps."quattrocento" = tl."quattrocento";
+  deps."raleway" = tl."raleway";
+  deps."recycle" = tl."recycle";
+  deps."roboto" = tl."roboto";
+  deps."romande" = tl."romande";
+  deps."rosario" = tl."rosario";
+  deps."rsfso" = tl."rsfso";
+  deps."sansmathaccent" = tl."sansmathaccent";
+  deps."sansmathfonts" = tl."sansmathfonts";
+  deps."sauter" = tl."sauter";
+  deps."sauterfonts" = tl."sauterfonts";
+  deps."schulschriften" = tl."schulschriften";
+  deps."semaphor" = tl."semaphor";
+  deps."shobhika" = tl."shobhika";
+  deps."skull" = tl."skull";
+  deps."sourcecodepro" = tl."sourcecodepro";
+  deps."sourcesanspro" = tl."sourcesanspro";
+  deps."sourceserifpro" = tl."sourceserifpro";
+  deps."starfont" = tl."starfont";
+  deps."staves" = tl."staves";
+  deps."step" = tl."step";
+  deps."stickstoo" = tl."stickstoo";
+  deps."stix" = tl."stix";
+  deps."stix2-otf" = tl."stix2-otf";
+  deps."stix2-type1" = tl."stix2-type1";
+  deps."superiors" = tl."superiors";
+  deps."svrsymbols" = tl."svrsymbols";
+  deps."tapir" = tl."tapir";
+  deps."tempora" = tl."tempora";
+  deps."tengwarscript" = tl."tengwarscript";
+  deps."tfrupee" = tl."tfrupee";
+  deps."theanodidot" = tl."theanodidot";
+  deps."theanomodern" = tl."theanomodern";
+  deps."theanooldstyle" = tl."theanooldstyle";
+  deps."tinos" = tl."tinos";
+  deps."tpslifonts" = tl."tpslifonts";
+  deps."trajan" = tl."trajan";
+  deps."txfontsb" = tl."txfontsb";
+  deps."txuprcal" = tl."txuprcal";
+  deps."typicons" = tl."typicons";
+  deps."umtypewriter" = tl."umtypewriter";
+  deps."universa" = tl."universa";
+  deps."universalis" = tl."universalis";
+  deps."uppunctlm" = tl."uppunctlm";
+  deps."urwchancal" = tl."urwchancal";
+  deps."venturisadf" = tl."venturisadf";
+  deps."wsuipa" = tl."wsuipa";
+  deps."xcharter" = tl."xcharter";
+  deps."xits" = tl."xits";
+  deps."yfonts" = tl."yfonts";
+  deps."yfonts-t1" = tl."yfonts-t1";
+  deps."yinit-otf" = tl."yinit-otf";
+  deps."zlmtt" = tl."zlmtt";
+  sha512.run = "76ac1206ba9618472b23d739823635d9a3832917adf5c94f1e3a8aad663a01a5594f6f2d3b170013fc5dc30ae120b00f87482fa6034dceefed0749eef3c4977f";
+};
+"collection-fontsrecommended" = {
+  stripPrefix = 0;
+  deps."collection-basic" = tl."collection-basic";
+  deps."avantgar" = tl."avantgar";
+  deps."bookman" = tl."bookman";
+  deps."charter" = tl."charter";
+  deps."cm-super" = tl."cm-super";
+  deps."cmextra" = tl."cmextra";
+  deps."courier" = tl."courier";
+  deps."ec" = tl."ec";
+  deps."euro" = tl."euro";
+  deps."euro-ce" = tl."euro-ce";
+  deps."eurosym" = tl."eurosym";
+  deps."fpl" = tl."fpl";
+  deps."helvetic" = tl."helvetic";
+  deps."lm" = tl."lm";
+  deps."lm-math" = tl."lm-math";
+  deps."marvosym" = tl."marvosym";
+  deps."mathpazo" = tl."mathpazo";
+  deps."manfnt-font" = tl."manfnt-font";
+  deps."mflogo-font" = tl."mflogo-font";
+  deps."ncntrsbk" = tl."ncntrsbk";
+  deps."palatino" = tl."palatino";
+  deps."pxfonts" = tl."pxfonts";
+  deps."rsfs" = tl."rsfs";
+  deps."symbol" = tl."symbol";
+  deps."tex-gyre" = tl."tex-gyre";
+  deps."tex-gyre-math" = tl."tex-gyre-math";
+  deps."times" = tl."times";
+  deps."tipa" = tl."tipa";
+  deps."txfonts" = tl."txfonts";
+  deps."utopia" = tl."utopia";
+  deps."wasy" = tl."wasy";
+  deps."wasy2-ps" = tl."wasy2-ps";
+  deps."wasysym" = tl."wasysym";
+  deps."zapfchan" = tl."zapfchan";
+  deps."zapfding" = tl."zapfding";
+  sha512.run = "9ce869ce9e21838cb467b7fb6e6087b2afa005c398075c5da77e07fcc57a3c153663ddf8c53f914638b3e1e44e8957b59459b689d17668fdf42a050b19d079f5";
+};
+"collection-fontutils" = {
+  stripPrefix = 0;
+  deps."collection-basic" = tl."collection-basic";
+  deps."accfonts" = tl."accfonts";
+  deps."afm2pl" = tl."afm2pl";
+  deps."dosepsbin" = tl."dosepsbin";
+  deps."epstopdf" = tl."epstopdf";
+  deps."fontware" = tl."fontware";
+  deps."lcdftypetools" = tl."lcdftypetools";
+  deps."metatype1" = tl."metatype1";
+  deps."ps2pk" = tl."ps2pk";
+  deps."pstools" = tl."pstools";
+  deps."psutils" = tl."psutils";
+  deps."dvipsconfig" = tl."dvipsconfig";
+  deps."fontinst" = tl."fontinst";
+  deps."fontools" = tl."fontools";
+  deps."mf2pt1" = tl."mf2pt1";
+  deps."t1utils" = tl."t1utils";
+  deps."ttfutils" = tl."ttfutils";
+  sha512.run = "39ede1185914e6df2bd1a535d2ca955720dfd51fba425f0ee6ac75c9e8e7480e779c8eb41df0cd57d1f23595db0f247f5e8fb2988dcc1845dd5d51b3f8918533";
+};
+"collection-formatsextra" = {
+  stripPrefix = 0;
+  deps."collection-basic" = tl."collection-basic";
+  deps."collection-latex" = tl."collection-latex";
+  deps."edmac" = tl."edmac";
+  deps."eplain" = tl."eplain";
+  deps."jadetex" = tl."jadetex";
+  deps."lollipop" = tl."lollipop";
+  deps."mltex" = tl."mltex";
+  deps."passivetex" = tl."passivetex";
+  deps."psizzl" = tl."psizzl";
+  deps."startex" = tl."startex";
+  deps."texsis" = tl."texsis";
+  deps."xmltex" = tl."xmltex";
+  deps."xmltexconfig" = tl."xmltexconfig";
+  deps."aleph" = tl."aleph";
+  deps."antomega" = tl."antomega";
+  deps."lambda" = tl."lambda";
+  deps."mxedruli" = tl."mxedruli";
+  deps."omega" = tl."omega";
+  deps."omegaware" = tl."omegaware";
+  deps."otibet" = tl."otibet";
+  sha512.run = "73b00a08738778902d35e934e296552c76db6a202c197432e57c3fe03d300dd5b3ba41a618151ffcd9642275db6899d8030329f3ec424b55da0a743ecbc84d0e";
+};
+"collection-games" = {
+  stripPrefix = 0;
+  deps."collection-latex" = tl."collection-latex";
+  deps."bartel-chess-fonts" = tl."bartel-chess-fonts";
+  deps."chess" = tl."chess";
+  deps."chess-problem-diagrams" = tl."chess-problem-diagrams";
+  deps."chessboard" = tl."chessboard";
+  deps."chessfss" = tl."chessfss";
+  deps."crossword" = tl."crossword";
+  deps."crosswrd" = tl."crosswrd";
+  deps."egameps" = tl."egameps";
+  deps."gamebook" = tl."gamebook";
+  deps."go" = tl."go";
+  deps."hanoi" = tl."hanoi";
+  deps."havannah" = tl."havannah";
+  deps."hexgame" = tl."hexgame";
+  deps."hmtrump" = tl."hmtrump";
+  deps."horoscop" = tl."horoscop";
+  deps."jigsaw" = tl."jigsaw";
+  deps."labyrinth" = tl."labyrinth";
+  deps."logicpuzzle" = tl."logicpuzzle";
+  deps."musikui" = tl."musikui";
+  deps."onedown" = tl."onedown";
+  deps."othello" = tl."othello";
+  deps."othelloboard" = tl."othelloboard";
+  deps."pas-crosswords" = tl."pas-crosswords";
+  deps."psgo" = tl."psgo";
+  deps."reverxii" = tl."reverxii";
+  deps."rubik" = tl."rubik";
+  deps."schwalbe-chess" = tl."schwalbe-chess";
+  deps."sgame" = tl."sgame";
+  deps."skak" = tl."skak";
+  deps."skaknew" = tl."skaknew";
+  deps."soup" = tl."soup";
+  deps."sudoku" = tl."sudoku";
+  deps."sudokubundle" = tl."sudokubundle";
+  deps."xq" = tl."xq";
+  deps."xskak" = tl."xskak";
+  sha512.run = "bfa055b06a2a56cdac916627c79ad94242fee0b1ae747f721e0932452eedbff05566211a9e41aa8e66607b27d753db5edf5d0ed04cbf1ebb2944d3c4cebbf108";
+};
+"collection-humanities" = {
+  stripPrefix = 0;
+  deps."collection-latex" = tl."collection-latex";
+  deps."adtrees" = tl."adtrees";
+  deps."bibleref" = tl."bibleref";
+  deps."bibleref-lds" = tl."bibleref-lds";
+  deps."bibleref-mouth" = tl."bibleref-mouth";
+  deps."bibleref-parse" = tl."bibleref-parse";
+  deps."covington" = tl."covington";
+  deps."diadia" = tl."diadia";
+  deps."dramatist" = tl."dramatist";
+  deps."dvgloss" = tl."dvgloss";
+  deps."ecltree" = tl."ecltree";
+  deps."edfnotes" = tl."edfnotes";
+  deps."ednotes" = tl."ednotes";
+  deps."eledform" = tl."eledform";
+  deps."eledmac" = tl."eledmac";
+  deps."expex" = tl."expex";
+  deps."gb4e" = tl."gb4e";
+  deps."gmverse" = tl."gmverse";
+  deps."jura" = tl."jura";
+  deps."juraabbrev" = tl."juraabbrev";
+  deps."juramisc" = tl."juramisc";
+  deps."jurarsp" = tl."jurarsp";
+  deps."ledmac" = tl."ledmac";
+  deps."lexikon" = tl."lexikon";
+  deps."lexref" = tl."lexref";
+  deps."ling-macros" = tl."ling-macros";
+  deps."linguex" = tl."linguex";
+  deps."liturg" = tl."liturg";
+  deps."metrix" = tl."metrix";
+  deps."parallel" = tl."parallel";
+  deps."parrun" = tl."parrun";
+  deps."phonrule" = tl."phonrule";
+  deps."plari" = tl."plari";
+  deps."play" = tl."play";
+  deps."poemscol" = tl."poemscol";
+  deps."poetry" = tl."poetry";
+  deps."poetrytex" = tl."poetrytex";
+  deps."qobitree" = tl."qobitree";
+  deps."qtree" = tl."qtree";
+  deps."reledmac" = tl."reledmac";
+  deps."rrgtrees" = tl."rrgtrees";
+  deps."rtklage" = tl."rtklage";
+  deps."screenplay" = tl."screenplay";
+  deps."screenplay-pkg" = tl."screenplay-pkg";
+  deps."sides" = tl."sides";
+  deps."stage" = tl."stage";
+  deps."textglos" = tl."textglos";
+  deps."theatre" = tl."theatre";
+  deps."thalie" = tl."thalie";
+  deps."tree-dvips" = tl."tree-dvips";
+  deps."verse" = tl."verse";
+  deps."xyling" = tl."xyling";
+  sha512.run = "94e1a021c967f623d24a3720199293f564ccc3e7339c2e58a456163d617740d3a6bfc8b5fd54fc288f269ebe7a4eafddaba0c6c78c66ea565bb2e0d753b7ebad";
+};
+"collection-langarabic" = {
+  stripPrefix = 0;
+  deps."collection-basic" = tl."collection-basic";
+  deps."alkalami" = tl."alkalami";
+  deps."alpha-persian" = tl."alpha-persian";
+  deps."amiri" = tl."amiri";
+  deps."arabi" = tl."arabi";
+  deps."arabi-add" = tl."arabi-add";
+  deps."arabluatex" = tl."arabluatex";
+  deps."arabtex" = tl."arabtex";
+  deps."bidi" = tl."bidi";
+  deps."bidihl" = tl."bidihl";
+  deps."dad" = tl."dad";
+  deps."ghab" = tl."ghab";
+  deps."hyphen-arabic" = tl."hyphen-arabic";
+  deps."hyphen-farsi" = tl."hyphen-farsi";
+  deps."imsproc" = tl."imsproc";
+  deps."kurdishlipsum" = tl."kurdishlipsum";
+  deps."lshort-persian" = tl."lshort-persian";
+  deps."luabidi" = tl."luabidi";
+  deps."na-box" = tl."na-box";
+  deps."persian-bib" = tl."persian-bib";
+  deps."sexam" = tl."sexam";
+  deps."simurgh" = tl."simurgh";
+  deps."tram" = tl."tram";
+  deps."xepersian" = tl."xepersian";
+  sha512.run = "4c0f4860c69b0be0e3bc909c577e2795fcb3c15b65961d7ada1624cc3c9f77b104f8a58a6d390c1085c464ae043c65b4912da9faa0e8334964d0c302952792fe";
+};
+"collection-langchinese" = {
+  stripPrefix = 0;
+  deps."collection-langcjk" = tl."collection-langcjk";
+  deps."arphic" = tl."arphic";
+  deps."arphic-ttf" = tl."arphic-ttf";
+  deps."asymptote-by-example-zh-cn" = tl."asymptote-by-example-zh-cn";
+  deps."asymptote-faq-zh-cn" = tl."asymptote-faq-zh-cn";
+  deps."asymptote-manual-zh-cn" = tl."asymptote-manual-zh-cn";
+  deps."cns" = tl."cns";
+  deps."ctex" = tl."ctex";
+  deps."ctex-faq" = tl."ctex-faq";
+  deps."fandol" = tl."fandol";
+  deps."fduthesis" = tl."fduthesis";
+  deps."hyphen-chinese" = tl."hyphen-chinese";
+  deps."impatient-cn" = tl."impatient-cn";
+  deps."latex-notes-zh-cn" = tl."latex-notes-zh-cn";
+  deps."lshort-chinese" = tl."lshort-chinese";
+  deps."nanicolle" = tl."nanicolle";
+  deps."njurepo" = tl."njurepo";
+  deps."pgfornament-han" = tl."pgfornament-han";
+  deps."texlive-zh-cn" = tl."texlive-zh-cn";
+  deps."texproposal" = tl."texproposal";
+  deps."xtuthesis" = tl."xtuthesis";
+  deps."upzhkinsoku" = tl."upzhkinsoku";
+  deps."xpinyin" = tl."xpinyin";
+  deps."zhlineskip" = tl."zhlineskip";
+  deps."zhlipsum" = tl."zhlipsum";
+  deps."zhmetrics" = tl."zhmetrics";
+  deps."zhmetrics-uptex" = tl."zhmetrics-uptex";
+  deps."zhnumber" = tl."zhnumber";
+  deps."zhspacing" = tl."zhspacing";
+  sha512.run = "fa19508a88844191ac410af63bdfbf95ac75231c3e7564aa0c2d54bb1b474b1d769a61c96abf01a11757ce002ae4cdc4c757cbd28414f6a182ffedcb13afb6bf";
+};
+"collection-langcjk" = {
+  stripPrefix = 0;
+  deps."collection-basic" = tl."collection-basic";
+  deps."adobemapping" = tl."adobemapping";
+  deps."c90" = tl."c90";
+  deps."cjk-gs-integrate" = tl."cjk-gs-integrate";
+  deps."cjk" = tl."cjk";
+  deps."cjkpunct" = tl."cjkpunct";
+  deps."cjkutils" = tl."cjkutils";
+  deps."dnp" = tl."dnp";
+  deps."garuda-c90" = tl."garuda-c90";
+  deps."fixjfm" = tl."fixjfm";
+  deps."jfmutil" = tl."jfmutil";
+  deps."norasi-c90" = tl."norasi-c90";
+  deps."pxtatescale" = tl."pxtatescale";
+  deps."xcjk2uni" = tl."xcjk2uni";
+  deps."zxjafont" = tl."zxjafont";
+  sha512.run = "959ee256fdf82076f8fa0d5a35f876b3c030e69feaf94cecc68e6e1061d968a72b9389e62b5c18c4d7fd4e98e707a1dfffecca7b7149d0c30388cb0c73870059";
+};
+"collection-langcyrillic" = {
+  stripPrefix = 0;
+  deps."collection-basic" = tl."collection-basic";
+  deps."collection-latex" = tl."collection-latex";
+  deps."babel-belarusian" = tl."babel-belarusian";
+  deps."babel-bulgarian" = tl."babel-bulgarian";
+  deps."babel-russian" = tl."babel-russian";
+  deps."babel-serbian" = tl."babel-serbian";
+  deps."babel-serbianc" = tl."babel-serbianc";
+  deps."babel-ukrainian" = tl."babel-ukrainian";
+  deps."churchslavonic" = tl."churchslavonic";
+  deps."cmcyr" = tl."cmcyr";
+  deps."cyrillic" = tl."cyrillic";
+  deps."cyrillic-bin" = tl."cyrillic-bin";
+  deps."cyrplain" = tl."cyrplain";
+  deps."disser" = tl."disser";
+  deps."eskd" = tl."eskd";
+  deps."eskdx" = tl."eskdx";
+  deps."gost" = tl."gost";
+  deps."hyphen-belarusian" = tl."hyphen-belarusian";
+  deps."hyphen-bulgarian" = tl."hyphen-bulgarian";
+  deps."hyphen-churchslavonic" = tl."hyphen-churchslavonic";
+  deps."hyphen-mongolian" = tl."hyphen-mongolian";
+  deps."hyphen-russian" = tl."hyphen-russian";
+  deps."hyphen-serbian" = tl."hyphen-serbian";
+  deps."hyphen-ukrainian" = tl."hyphen-ukrainian";
+  deps."lcyw" = tl."lcyw";
+  deps."lh" = tl."lh";
+  deps."lhcyr" = tl."lhcyr";
+  deps."lshort-bulgarian" = tl."lshort-bulgarian";
+  deps."lshort-mongol" = tl."lshort-mongol";
+  deps."lshort-russian" = tl."lshort-russian";
+  deps."lshort-ukr" = tl."lshort-ukr";
+  deps."mongolian-babel" = tl."mongolian-babel";
+  deps."montex" = tl."montex";
+  deps."mpman-ru" = tl."mpman-ru";
+  deps."numnameru" = tl."numnameru";
+  deps."pst-eucl-translation-bg" = tl."pst-eucl-translation-bg";
+  deps."ruhyphen" = tl."ruhyphen";
+  deps."russ" = tl."russ";
+  deps."serbian-apostrophe" = tl."serbian-apostrophe";
+  deps."serbian-date-lat" = tl."serbian-date-lat";
+  deps."serbian-def-cyr" = tl."serbian-def-cyr";
+  deps."serbian-lig" = tl."serbian-lig";
+  deps."t2" = tl."t2";
+  deps."texlive-ru" = tl."texlive-ru";
+  deps."texlive-sr" = tl."texlive-sr";
+  deps."ukrhyph" = tl."ukrhyph";
+  sha512.run = "15c733db1104a296e0caeceab761a9e0f89c7bbae5c87d49a9539638cbcb1c2489c41fe08b0bbca5df503cb8ee54b61425e35b0e6db41947bdbcc40e4daea0bc";
+};
+"collection-langczechslovak" = {
+  stripPrefix = 0;
+  deps."collection-basic" = tl."collection-basic";
+  deps."collection-latex" = tl."collection-latex";
+  deps."babel-czech" = tl."babel-czech";
+  deps."babel-slovak" = tl."babel-slovak";
+  deps."cnbwp" = tl."cnbwp";
+  deps."cs" = tl."cs";
+  deps."csbulletin" = tl."csbulletin";
+  deps."cslatex" = tl."cslatex";
+  deps."csplain" = tl."csplain";
+  deps."cstex" = tl."cstex";
+  deps."hyphen-czech" = tl."hyphen-czech";
+  deps."hyphen-slovak" = tl."hyphen-slovak";
+  deps."vlna" = tl."vlna";
+  deps."lshort-czech" = tl."lshort-czech";
+  deps."lshort-slovak" = tl."lshort-slovak";
+  deps."texlive-cz" = tl."texlive-cz";
+  sha512.run = "daee20efa3c125fb5dcf55875eb3a7a3e94553a5f1e185c8fdf35db0ab933abbb2ac2f67da7fa578b1f915d88f3cde764dca098e76b5df73da18dece3e49dc6f";
+};
+"collection-langenglish" = {
+  stripPrefix = 0;
+  deps."collection-basic" = tl."collection-basic";
+  deps."hyphen-english" = tl."hyphen-english";
+  deps."MemoirChapStyles" = tl."MemoirChapStyles";
+  deps."Type1fonts" = tl."Type1fonts";
+  deps."amscls-doc" = tl."amscls-doc";
+  deps."amslatex-primer" = tl."amslatex-primer";
+  deps."around-the-bend" = tl."around-the-bend";
+  deps."ascii-chart" = tl."ascii-chart";
+  deps."biblatex-cheatsheet" = tl."biblatex-cheatsheet";
+  deps."components-of-TeX" = tl."components-of-TeX";
+  deps."comprehensive" = tl."comprehensive";
+  deps."dickimaw" = tl."dickimaw";
+  deps."docsurvey" = tl."docsurvey";
+  deps."dtxtut" = tl."dtxtut";
+  deps."first-latex-doc" = tl."first-latex-doc";
+  deps."forest-quickstart" = tl."forest-quickstart";
+  deps."gentle" = tl."gentle";
+  deps."guide-to-latex" = tl."guide-to-latex";
+  deps."happy4th" = tl."happy4th";
+  deps."impatient" = tl."impatient";
+  deps."intro-scientific" = tl."intro-scientific";
+  deps."knuth" = tl."knuth";
+  deps."l2tabu-english" = tl."l2tabu-english";
+  deps."latex-brochure" = tl."latex-brochure";
+  deps."latex-course" = tl."latex-course";
+  deps."latex-doc-ptr" = tl."latex-doc-ptr";
+  deps."latex-graphics-companion" = tl."latex-graphics-companion";
+  deps."latex-refsheet" = tl."latex-refsheet";
+  deps."latex-veryshortguide" = tl."latex-veryshortguide";
+  deps."latex-web-companion" = tl."latex-web-companion";
+  deps."latex2e-help-texinfo" = tl."latex2e-help-texinfo";
+  deps."latex4wp" = tl."latex4wp";
+  deps."latexcheat" = tl."latexcheat";
+  deps."latexcourse-rug" = tl."latexcourse-rug";
+  deps."latexfileinfo-pkgs" = tl."latexfileinfo-pkgs";
+  deps."lshort-english" = tl."lshort-english";
+  deps."macros2e" = tl."macros2e";
+  deps."math-e" = tl."math-e";
+  deps."math-into-latex-4" = tl."math-into-latex-4";
+  deps."maths-symbols" = tl."maths-symbols";
+  deps."memdesign" = tl."memdesign";
+  deps."metafont-beginners" = tl."metafont-beginners";
+  deps."metapost-examples" = tl."metapost-examples";
+  deps."patgen2-tutorial" = tl."patgen2-tutorial";
+  deps."pictexsum" = tl."pictexsum";
+  deps."plain-doc" = tl."plain-doc";
+  deps."presentations-en" = tl."presentations-en";
+  deps."short-math-guide" = tl."short-math-guide";
+  deps."simplified-latex" = tl."simplified-latex";
+  deps."svg-inkscape" = tl."svg-inkscape";
+  deps."tabulars-e" = tl."tabulars-e";
+  deps."tamethebeast" = tl."tamethebeast";
+  deps."tds" = tl."tds";
+  deps."tex-font-errors-cheatsheet" = tl."tex-font-errors-cheatsheet";
+  deps."tex-overview" = tl."tex-overview";
+  deps."tex-refs" = tl."tex-refs";
+  deps."texbytopic" = tl."texbytopic";
+  deps."texonly" = tl."texonly";
+  deps."titlepages" = tl."titlepages";
+  deps."tlc2" = tl."tlc2";
+  deps."undergradmath" = tl."undergradmath";
+  deps."visualfaq" = tl."visualfaq";
+  deps."webguide" = tl."webguide";
+  deps."xetexref" = tl."xetexref";
+  sha512.run = "1f003f1a719bf29ee0a0167784f48cc6aef203f714a5024c52b1e3791d47d2cae816056e78816dabb806059cb4f3be066d722f8191ca67e3d72e76b274759e89";
+};
+"collection-langeuropean" = {
+  stripPrefix = 0;
+  deps."collection-basic" = tl."collection-basic";
+  deps."armtex" = tl."armtex";
+  deps."babel-albanian" = tl."babel-albanian";
+  deps."babel-bosnian" = tl."babel-bosnian";
+  deps."babel-breton" = tl."babel-breton";
+  deps."babel-croatian" = tl."babel-croatian";
+  deps."babel-danish" = tl."babel-danish";
+  deps."babel-dutch" = tl."babel-dutch";
+  deps."babel-estonian" = tl."babel-estonian";
+  deps."babel-finnish" = tl."babel-finnish";
+  deps."babel-friulan" = tl."babel-friulan";
+  deps."babel-hungarian" = tl."babel-hungarian";
+  deps."babel-icelandic" = tl."babel-icelandic";
+  deps."babel-irish" = tl."babel-irish";
+  deps."babel-kurmanji" = tl."babel-kurmanji";
+  deps."babel-latin" = tl."babel-latin";
+  deps."babel-latvian" = tl."babel-latvian";
+  deps."babel-macedonian" = tl."babel-macedonian";
+  deps."babel-norsk" = tl."babel-norsk";
+  deps."babel-occitan" = tl."babel-occitan";
+  deps."babel-piedmontese" = tl."babel-piedmontese";
+  deps."babel-romanian" = tl."babel-romanian";
+  deps."babel-romansh" = tl."babel-romansh";
+  deps."babel-samin" = tl."babel-samin";
+  deps."babel-scottish" = tl."babel-scottish";
+  deps."babel-slovenian" = tl."babel-slovenian";
+  deps."babel-swedish" = tl."babel-swedish";
+  deps."babel-turkish" = tl."babel-turkish";
+  deps."babel-welsh" = tl."babel-welsh";
+  deps."finbib" = tl."finbib";
+  deps."gloss-occitan" = tl."gloss-occitan";
+  deps."hrlatex" = tl."hrlatex";
+  deps."hulipsum" = tl."hulipsum";
+  deps."hyphen-croatian" = tl."hyphen-croatian";
+  deps."hyphen-danish" = tl."hyphen-danish";
+  deps."hyphen-dutch" = tl."hyphen-dutch";
+  deps."hyphen-estonian" = tl."hyphen-estonian";
+  deps."hyphen-finnish" = tl."hyphen-finnish";
+  deps."hyphen-friulan" = tl."hyphen-friulan";
+  deps."hyphen-hungarian" = tl."hyphen-hungarian";
+  deps."hyphen-icelandic" = tl."hyphen-icelandic";
+  deps."hyphen-irish" = tl."hyphen-irish";
+  deps."hyphen-kurmanji" = tl."hyphen-kurmanji";
+  deps."hyphen-latin" = tl."hyphen-latin";
+  deps."hyphen-latvian" = tl."hyphen-latvian";
+  deps."hyphen-lithuanian" = tl."hyphen-lithuanian";
+  deps."hyphen-norwegian" = tl."hyphen-norwegian";
+  deps."hyphen-occitan" = tl."hyphen-occitan";
+  deps."hyphen-piedmontese" = tl."hyphen-piedmontese";
+  deps."hyphen-romanian" = tl."hyphen-romanian";
+  deps."hyphen-romansh" = tl."hyphen-romansh";
+  deps."hyphen-slovenian" = tl."hyphen-slovenian";
+  deps."hyphen-swedish" = tl."hyphen-swedish";
+  deps."hyphen-turkish" = tl."hyphen-turkish";
+  deps."hyphen-uppersorbian" = tl."hyphen-uppersorbian";
+  deps."hyphen-welsh" = tl."hyphen-welsh";
+  deps."lithuanian" = tl."lithuanian";
+  deps."lshort-dutch" = tl."lshort-dutch";
+  deps."lshort-estonian" = tl."lshort-estonian";
+  deps."lshort-finnish" = tl."lshort-finnish";
+  deps."lshort-slovenian" = tl."lshort-slovenian";
+  deps."lshort-turkish" = tl."lshort-turkish";
+  deps."nevelok" = tl."nevelok";
+  deps."swebib" = tl."swebib";
+  deps."turkmen" = tl."turkmen";
+  sha512.run = "9505445397888b80e7f92026c63d4ec053758f835d6b217902639ecef6670f85a49e308891381be0340b43e7a793885dac79f88e75c376226d474682cedc3b12";
+};
+"collection-langfrench" = {
+  stripPrefix = 0;
+  deps."collection-basic" = tl."collection-basic";
+  deps."aeguill" = tl."aeguill";
+  deps."apprendre-a-programmer-en-tex" = tl."apprendre-a-programmer-en-tex";
+  deps."apprends-latex" = tl."apprends-latex";
+  deps."babel-basque" = tl."babel-basque";
+  deps."babel-french" = tl."babel-french";
+  deps."basque-book" = tl."basque-book";
+  deps."basque-date" = tl."basque-date";
+  deps."bib-fr" = tl."bib-fr";
+  deps."bibleref-french" = tl."bibleref-french";
+  deps."booktabs-fr" = tl."booktabs-fr";
+  deps."droit-fr" = tl."droit-fr";
+  deps."e-french" = tl."e-french";
+  deps."epslatex-fr" = tl."epslatex-fr";
+  deps."facture" = tl."facture";
+  deps."formation-latex-ul" = tl."formation-latex-ul";
+  deps."frenchmath" = tl."frenchmath";
+  deps."frletter" = tl."frletter";
+  deps."hyphen-basque" = tl."hyphen-basque";
+  deps."hyphen-french" = tl."hyphen-french";
+  deps."impatient-fr" = tl."impatient-fr";
+  deps."impnattypo" = tl."impnattypo";
+  deps."l2tabu-french" = tl."l2tabu-french";
+  deps."latex2e-help-texinfo-fr" = tl."latex2e-help-texinfo-fr";
+  deps."lshort-french" = tl."lshort-french";
+  deps."mafr" = tl."mafr";
+  deps."tabvar" = tl."tabvar";
+  deps."tdsfrmath" = tl."tdsfrmath";
+  deps."texlive-fr" = tl."texlive-fr";
+  deps."translation-array-fr" = tl."translation-array-fr";
+  deps."translation-dcolumn-fr" = tl."translation-dcolumn-fr";
+  deps."translation-natbib-fr" = tl."translation-natbib-fr";
+  deps."translation-tabbing-fr" = tl."translation-tabbing-fr";
+  deps."variations" = tl."variations";
+  deps."visualtikz" = tl."visualtikz";
+  sha512.run = "be5230f2fec255b9bf7220a9ad33930032ef617de8665d2c35c4360852f77d2764dbe1d7917bab3552f6098e0749cc5e0a9e001bac87abbb5b0de6af24ee1eed";
+};
+"collection-langgerman" = {
+  stripPrefix = 0;
+  deps."collection-basic" = tl."collection-basic";
+  deps."apalike-german" = tl."apalike-german";
+  deps."babel-german" = tl."babel-german";
+  deps."bibleref-german" = tl."bibleref-german";
+  deps."booktabs-de" = tl."booktabs-de";
+  deps."csquotes-de" = tl."csquotes-de";
+  deps."dehyph" = tl."dehyph";
+  deps."dehyph-exptl" = tl."dehyph-exptl";
+  deps."dhua" = tl."dhua";
+  deps."einfuehrung" = tl."einfuehrung";
+  deps."einfuehrung2" = tl."einfuehrung2";
+  deps."etdipa" = tl."etdipa";
+  deps."etoolbox-de" = tl."etoolbox-de";
+  deps."fifinddo-info" = tl."fifinddo-info";
+  deps."geometry-de" = tl."geometry-de";
+  deps."german" = tl."german";
+  deps."germbib" = tl."germbib";
+  deps."germkorr" = tl."germkorr";
+  deps."hausarbeit-jura" = tl."hausarbeit-jura";
+  deps."hyphen-german" = tl."hyphen-german";
+  deps."koma-script-examples" = tl."koma-script-examples";
+  deps."l2picfaq" = tl."l2picfaq";
+  deps."l2tabu" = tl."l2tabu";
+  deps."latex-bib-ex" = tl."latex-bib-ex";
+  deps."latex-bib2-ex" = tl."latex-bib2-ex";
+  deps."latex-referenz" = tl."latex-referenz";
+  deps."latex-tabellen" = tl."latex-tabellen";
+  deps."latexcheat-de" = tl."latexcheat-de";
+  deps."lshort-german" = tl."lshort-german";
+  deps."lualatex-doc-de" = tl."lualatex-doc-de";
+  deps."microtype-de" = tl."microtype-de";
+  deps."milog" = tl."milog";
+  deps."presentations" = tl."presentations";
+  deps."r_und_s" = tl."r_und_s";
+  deps."templates-fenn" = tl."templates-fenn";
+  deps."templates-sommer" = tl."templates-sommer";
+  deps."termcal-de" = tl."termcal-de";
+  deps."texlive-de" = tl."texlive-de";
+  deps."tipa-de" = tl."tipa-de";
+  deps."translation-arsclassica-de" = tl."translation-arsclassica-de";
+  deps."translation-biblatex-de" = tl."translation-biblatex-de";
+  deps."translation-chemsym-de" = tl."translation-chemsym-de";
+  deps."translation-ecv-de" = tl."translation-ecv-de";
+  deps."translation-enumitem-de" = tl."translation-enumitem-de";
+  deps."translation-europecv-de" = tl."translation-europecv-de";
+  deps."translation-filecontents-de" = tl."translation-filecontents-de";
+  deps."translation-moreverb-de" = tl."translation-moreverb-de";
+  deps."udesoftec" = tl."udesoftec";
+  deps."uhrzeit" = tl."uhrzeit";
+  deps."umlaute" = tl."umlaute";
+  deps."voss-mathcol" = tl."voss-mathcol";
+  sha512.run = "efa8741b737f9331fed483fd4d0f8b286099f65503b3ea4874a272ea4c53f52e8d23cb9d76c1a4b19853d938a093e49b583a87003b7cdba41e9d6287598b396a";
+};
+"collection-langgreek" = {
+  stripPrefix = 0;
+  deps."collection-basic" = tl."collection-basic";
+  deps."babel-greek" = tl."babel-greek";
+  deps."begingreek" = tl."begingreek";
+  deps."betababel" = tl."betababel";
+  deps."bgreek" = tl."bgreek";
+  deps."cbfonts" = tl."cbfonts";
+  deps."cbfonts-fd" = tl."cbfonts-fd";
+  deps."gfsbaskerville" = tl."gfsbaskerville";
+  deps."gfsporson" = tl."gfsporson";
+  deps."greek-fontenc" = tl."greek-fontenc";
+  deps."greek-inputenc" = tl."greek-inputenc";
+  deps."greekdates" = tl."greekdates";
+  deps."greektex" = tl."greektex";
+  deps."greektonoi" = tl."greektonoi";
+  deps."hyphen-greek" = tl."hyphen-greek";
+  deps."hyphen-ancientgreek" = tl."hyphen-ancientgreek";
+  deps."ibycus-babel" = tl."ibycus-babel";
+  deps."ibygrk" = tl."ibygrk";
+  deps."kerkis" = tl."kerkis";
+  deps."levy" = tl."levy";
+  deps."lgreek" = tl."lgreek";
+  deps."mkgrkindex" = tl."mkgrkindex";
+  deps."teubner" = tl."teubner";
+  deps."xgreek" = tl."xgreek";
+  deps."yannisgr" = tl."yannisgr";
+  sha512.run = "9633d376e164895cc7ea0d1a18759c1f06c71b83e612c10069dfd18237d61afab99170c03a9a1ba461d43d4273c7228f41f899dd77dc9308a8d329da6b336cba";
+};
+"collection-langitalian" = {
+  stripPrefix = 0;
+  deps."collection-basic" = tl."collection-basic";
+  deps."amsldoc-it" = tl."amsldoc-it";
+  deps."amsmath-it" = tl."amsmath-it";
+  deps."amsthdoc-it" = tl."amsthdoc-it";
+  deps."babel-italian" = tl."babel-italian";
+  deps."codicefiscaleitaliano" = tl."codicefiscaleitaliano";
+  deps."fancyhdr-it" = tl."fancyhdr-it";
+  deps."fixltxhyph" = tl."fixltxhyph";
+  deps."frontespizio" = tl."frontespizio";
+  deps."hyphen-italian" = tl."hyphen-italian";
+  deps."itnumpar" = tl."itnumpar";
+  deps."l2tabu-italian" = tl."l2tabu-italian";
+  deps."latex4wp-it" = tl."latex4wp-it";
+  deps."layaureo" = tl."layaureo";
+  deps."lshort-italian" = tl."lshort-italian";
+  deps."psfrag-italian" = tl."psfrag-italian";
+  deps."texlive-it" = tl."texlive-it";
+  sha512.run = "1cace30c8b68dc6e44e5bfe070c155bc65462b4d950506d79967f9e7472c9d7b7f9b3016fe3a34049cc7ec50c21d12f4bd6c4a03bf4f3c63172976d1b888855e";
+};
+"collection-langjapanese" = {
+  stripPrefix = 0;
+  deps."collection-langcjk" = tl."collection-langcjk";
+  deps."ascmac" = tl."ascmac";
+  deps."babel-japanese" = tl."babel-japanese";
+  deps."bxbase" = tl."bxbase";
+  deps."bxcjkjatype" = tl."bxcjkjatype";
+  deps."bxghost" = tl."bxghost";
+  deps."bxjaholiday" = tl."bxjaholiday";
+  deps."bxjalipsum" = tl."bxjalipsum";
+  deps."bxjaprnind" = tl."bxjaprnind";
+  deps."bxjscls" = tl."bxjscls";
+  deps."bxorigcapt" = tl."bxorigcapt";
+  deps."bxwareki" = tl."bxwareki";
+  deps."convbkmk" = tl."convbkmk";
+  deps."endnotesj" = tl."endnotesj";
+  deps."gentombow" = tl."gentombow";
+  deps."ifptex" = tl."ifptex";
+  deps."ifxptex" = tl."ifxptex";
+  deps."ipaex" = tl."ipaex";
+  deps."japanese-otf" = tl."japanese-otf";
+  deps."japanese-otf-uptex" = tl."japanese-otf-uptex";
+  deps."jlreq" = tl."jlreq";
+  deps."jsclasses" = tl."jsclasses";
+  deps."lshort-japanese" = tl."lshort-japanese";
+  deps."luatexja" = tl."luatexja";
+  deps."mendex-doc" = tl."mendex-doc";
+  deps."morisawa" = tl."morisawa";
+  deps."pbibtex-base" = tl."pbibtex-base";
+  deps."platex" = tl."platex";
+  deps."platex-tools" = tl."platex-tools";
+  deps."platexcheat" = tl."platexcheat";
+  deps."plautopatch" = tl."plautopatch";
+  deps."ptex" = tl."ptex";
+  deps."ptex-base" = tl."ptex-base";
+  deps."ptex-fontmaps" = tl."ptex-fontmaps";
+  deps."ptex-fonts" = tl."ptex-fonts";
+  deps."ptex-manual" = tl."ptex-manual";
+  deps."ptex2pdf" = tl."ptex2pdf";
+  deps."pxbase" = tl."pxbase";
+  deps."pxchfon" = tl."pxchfon";
+  deps."pxcjkcat" = tl."pxcjkcat";
+  deps."pxjahyper" = tl."pxjahyper";
+  deps."pxjodel" = tl."pxjodel";
+  deps."pxrubrica" = tl."pxrubrica";
+  deps."pxufont" = tl."pxufont";
+  deps."texlive-ja" = tl."texlive-ja";
+  deps."uplatex" = tl."uplatex";
+  deps."uptex" = tl."uptex";
+  deps."uptex-base" = tl."uptex-base";
+  deps."uptex-fonts" = tl."uptex-fonts";
+  deps."wadalab" = tl."wadalab";
+  deps."zxjafbfont" = tl."zxjafbfont";
+  deps."zxjatype" = tl."zxjatype";
+  sha512.run = "01f27234f79c1f468f6a5d12175c9a115f425f1d36921136825c76208cdce9abf7171f700c4d13b7ba01eab87b24ec819f29e648c1a7bbaa10ac5ce3c4053f50";
+};
+"collection-langkorean" = {
+  stripPrefix = 0;
+  deps."collection-langcjk" = tl."collection-langcjk";
+  deps."baekmuk" = tl."baekmuk";
+  deps."cjk-ko" = tl."cjk-ko";
+  deps."kotex-oblivoir" = tl."kotex-oblivoir";
+  deps."kotex-plain" = tl."kotex-plain";
+  deps."kotex-utf" = tl."kotex-utf";
+  deps."kotex-utils" = tl."kotex-utils";
+  deps."lshort-korean" = tl."lshort-korean";
+  deps."nanumtype1" = tl."nanumtype1";
+  deps."uhc" = tl."uhc";
+  deps."unfonts-core" = tl."unfonts-core";
+  deps."unfonts-extra" = tl."unfonts-extra";
+  sha512.run = "6234b292f8b36a13d1a3543fb8ba19cb3cdab2fa30df008f1e33e62f4e6f291280b9f3e85aa21e5400ddd59392e698ddbf8c9c642934242402e93d6e3661d914";
+};
+"collection-langother" = {
+  stripPrefix = 0;
+  deps."collection-basic" = tl."collection-basic";
+  deps."amsldoc-vn" = tl."amsldoc-vn";
+  deps."aramaic-serto" = tl."aramaic-serto";
+  deps."hyphen-armenian" = tl."hyphen-armenian";
+  deps."babel-azerbaijani" = tl."babel-azerbaijani";
+  deps."babel-esperanto" = tl."babel-esperanto";
+  deps."babel-georgian" = tl."babel-georgian";
+  deps."babel-hebrew" = tl."babel-hebrew";
+  deps."babel-indonesian" = tl."babel-indonesian";
+  deps."babel-interlingua" = tl."babel-interlingua";
+  deps."babel-malay" = tl."babel-malay";
+  deps."babel-sorbian" = tl."babel-sorbian";
+  deps."babel-thai" = tl."babel-thai";
+  deps."babel-vietnamese" = tl."babel-vietnamese";
+  deps."bangtex" = tl."bangtex";
+  deps."bengali" = tl."bengali";
+  deps."burmese" = tl."burmese";
+  deps."cjhebrew" = tl."cjhebrew";
+  deps."ctib" = tl."ctib";
+  deps."ebong" = tl."ebong";
+  deps."ethiop" = tl."ethiop";
+  deps."ethiop-t1" = tl."ethiop-t1";
+  deps."fc" = tl."fc";
+  deps."fonts-tlwg" = tl."fonts-tlwg";
+  deps."hyphen-afrikaans" = tl."hyphen-afrikaans";
+  deps."hyphen-coptic" = tl."hyphen-coptic";
+  deps."hyphen-esperanto" = tl."hyphen-esperanto";
+  deps."hyphen-ethiopic" = tl."hyphen-ethiopic";
+  deps."hyphen-georgian" = tl."hyphen-georgian";
+  deps."hyphen-indic" = tl."hyphen-indic";
+  deps."hyphen-indonesian" = tl."hyphen-indonesian";
+  deps."hyphen-interlingua" = tl."hyphen-interlingua";
+  deps."hyphen-sanskrit" = tl."hyphen-sanskrit";
+  deps."hyphen-thai" = tl."hyphen-thai";
+  deps."hyphen-turkmen" = tl."hyphen-turkmen";
+  deps."latex-mr" = tl."latex-mr";
+  deps."latexbangla" = tl."latexbangla";
+  deps."lshort-thai" = tl."lshort-thai";
+  deps."lshort-vietnamese" = tl."lshort-vietnamese";
+  deps."ntheorem-vn" = tl."ntheorem-vn";
+  deps."padauk" = tl."padauk";
+  deps."quran-ur" = tl."quran-ur";
+  deps."sanskrit" = tl."sanskrit";
+  deps."sanskrit-t1" = tl."sanskrit-t1";
+  deps."thaienum" = tl."thaienum";
+  deps."thaispec" = tl."thaispec";
+  deps."unicode-alphabets" = tl."unicode-alphabets";
+  deps."velthuis" = tl."velthuis";
+  deps."vntex" = tl."vntex";
+  deps."wnri" = tl."wnri";
+  deps."wnri-latex" = tl."wnri-latex";
+  deps."xetex-devanagari" = tl."xetex-devanagari";
+  sha512.run = "1a5c0d201f18eae47341d5683507602341baafcf5bc519116f7e4ae8a0c535210469ce1c9a8db0f21cbdf8277cee71b0c989ab0a97dd7f11aebdd5bb8e2f3443";
+};
+"collection-langpolish" = {
+  stripPrefix = 0;
+  deps."collection-latex" = tl."collection-latex";
+  deps."collection-basic" = tl."collection-basic";
+  deps."babel-polish" = tl."babel-polish";
+  deps."bredzenie" = tl."bredzenie";
+  deps."cc-pl" = tl."cc-pl";
+  deps."gustlib" = tl."gustlib";
+  deps."gustprog" = tl."gustprog";
+  deps."hyphen-polish" = tl."hyphen-polish";
+  deps."lshort-polish" = tl."lshort-polish";
+  deps."mex" = tl."mex";
+  deps."mwcls" = tl."mwcls";
+  deps."pl" = tl."pl";
+  deps."polski" = tl."polski";
+  deps."przechlewski-book" = tl."przechlewski-book";
+  deps."qpxqtx" = tl."qpxqtx";
+  deps."tap" = tl."tap";
+  deps."tex-virtual-academy-pl" = tl."tex-virtual-academy-pl";
+  deps."texlive-pl" = tl."texlive-pl";
+  deps."utf8mex" = tl."utf8mex";
+  sha512.run = "38799df728e830c93a50928efe5f337c91e34b97368e4cce4707e6cbca0a8ee22b9edc528084034a86c72a748367c3f46af37fbe87f5171951563d98f836de58";
+};
+"collection-langportuguese" = {
+  stripPrefix = 0;
+  deps."collection-basic" = tl."collection-basic";
+  deps."babel-portuges" = tl."babel-portuges";
+  deps."beamer-tut-pt" = tl."beamer-tut-pt";
+  deps."cursolatex" = tl."cursolatex";
+  deps."feupphdteses" = tl."feupphdteses";
+  deps."hyphen-portuguese" = tl."hyphen-portuguese";
+  deps."latex-via-exemplos" = tl."latex-via-exemplos";
+  deps."latexcheat-ptbr" = tl."latexcheat-ptbr";
+  deps."lshort-portuguese" = tl."lshort-portuguese";
+  deps."numberpt" = tl."numberpt";
+  deps."ordinalpt" = tl."ordinalpt";
+  deps."xypic-tut-pt" = tl."xypic-tut-pt";
+  sha512.run = "d805cfa253db9af2c74f9aa072b384f7cdb775258d5063ff33713a60977899ef7b833d5bc5c5b589d9b4f61737c1a48209c25481571dc3be32d5ebdf43430340";
+};
+"collection-langspanish" = {
+  stripPrefix = 0;
+  deps."collection-basic" = tl."collection-basic";
+  deps."babel-catalan" = tl."babel-catalan";
+  deps."babel-galician" = tl."babel-galician";
+  deps."babel-spanglish" = tl."babel-spanglish";
+  deps."babel-spanish" = tl."babel-spanish";
+  deps."es-tex-faq" = tl."es-tex-faq";
+  deps."hyphen-catalan" = tl."hyphen-catalan";
+  deps."hyphen-galician" = tl."hyphen-galician";
+  deps."hyphen-spanish" = tl."hyphen-spanish";
+  deps."l2tabu-spanish" = tl."l2tabu-spanish";
+  deps."latex2e-help-texinfo-spanish" = tl."latex2e-help-texinfo-spanish";
+  deps."latexcheat-esmx" = tl."latexcheat-esmx";
+  deps."lshort-spanish" = tl."lshort-spanish";
+  deps."spanish-mx" = tl."spanish-mx";
+  deps."texlive-es" = tl."texlive-es";
+  sha512.run = "ed816cee1ca88a971b621d4a91ea7e6beebf8aacb684f8f000da8c4ce58e368a347eec69676db992dd1f09f287957855b4e814336a9bec689656a3eb6c34ce8b";
+};
+"collection-latex" = {
+  stripPrefix = 0;
+  deps."collection-basic" = tl."collection-basic";
+  deps."ae" = tl."ae";
+  deps."amscls" = tl."amscls";
+  deps."amsmath" = tl."amsmath";
+  deps."babel" = tl."babel";
+  deps."babel-english" = tl."babel-english";
+  deps."babelbib" = tl."babelbib";
+  deps."carlisle" = tl."carlisle";
+  deps."colortbl" = tl."colortbl";
+  deps."fancyhdr" = tl."fancyhdr";
+  deps."fix2col" = tl."fix2col";
+  deps."geometry" = tl."geometry";
+  deps."graphics" = tl."graphics";
+  deps."graphics-cfg" = tl."graphics-cfg";
+  deps."hyperref" = tl."hyperref";
+  deps."latex" = tl."latex";
+  deps."latex-bin" = tl."latex-bin";
+  deps."latex-fonts" = tl."latex-fonts";
+  deps."latexconfig" = tl."latexconfig";
+  deps."ltxmisc" = tl."ltxmisc";
+  deps."mfnfss" = tl."mfnfss";
+  deps."mptopdf" = tl."mptopdf";
+  deps."natbib" = tl."natbib";
+  deps."oberdiek" = tl."oberdiek";
+  deps."pslatex" = tl."pslatex";
+  deps."psnfss" = tl."psnfss";
+  deps."pspicture" = tl."pspicture";
+  deps."tools" = tl."tools";
+  deps."url" = tl."url";
+  sha512.run = "b1aae6d9b6a16813d76ee4c4bff813120784f856574b83aad156bb6bd0edc8815688159f78a5fa74dc1662c02c94c675e8caa3f654e933673f0424e8f1ead80f";
+};
+"collection-latexextra" = {
+  stripPrefix = 0;
+  deps."collection-latexrecommended" = tl."collection-latexrecommended";
+  deps."collection-pictures" = tl."collection-pictures";
+  deps."2up" = tl."2up";
+  deps."ESIEEcv" = tl."ESIEEcv";
+  deps."GS1" = tl."GS1";
+  deps."HA-prosper" = tl."HA-prosper";
+  deps."Tabbing" = tl."Tabbing";
+  deps."a0poster" = tl."a0poster";
+  deps."a4wide" = tl."a4wide";
+  deps."a5comb" = tl."a5comb";
+  deps."abraces" = tl."abraces";
+  deps."abstract" = tl."abstract";
+  deps."accessibility" = tl."accessibility";
+  deps."achemso" = tl."achemso";
+  deps."acro" = tl."acro";
+  deps."acronym" = tl."acronym";
+  deps."acroterm" = tl."acroterm";
+  deps."actuarialangle" = tl."actuarialangle";
+  deps."actuarialsymbol" = tl."actuarialsymbol";
+  deps."addfont" = tl."addfont";
+  deps."addlines" = tl."addlines";
+  deps."adjmulticol" = tl."adjmulticol";
+  deps."adjustbox" = tl."adjustbox";
+  deps."adrconv" = tl."adrconv";
+  deps."advdate" = tl."advdate";
+  deps."akktex" = tl."akktex";
+  deps."akletter" = tl."akletter";
+  deps."alertmessage" = tl."alertmessage";
+  deps."alnumsec" = tl."alnumsec";
+  deps."alterqcm" = tl."alterqcm";
+  deps."altfont" = tl."altfont";
+  deps."amsaddr" = tl."amsaddr";
+  deps."animate" = tl."animate";
+  deps."anonchap" = tl."anonchap";
+  deps."answers" = tl."answers";
+  deps."anyfontsize" = tl."anyfontsize";
+  deps."appendix" = tl."appendix";
+  deps."appendixnumberbeamer" = tl."appendixnumberbeamer";
+  deps."apptools" = tl."apptools";
+  deps."arabicfront" = tl."arabicfront";
+  deps."arcs" = tl."arcs";
+  deps."arraycols" = tl."arraycols";
+  deps."arrayjobx" = tl."arrayjobx";
+  deps."arraysort" = tl."arraysort";
+  deps."arydshln" = tl."arydshln";
+  deps."asciilist" = tl."asciilist";
+  deps."assignment" = tl."assignment";
+  deps."assoccnt" = tl."assoccnt";
+  deps."attachfile" = tl."attachfile";
+  deps."aurl" = tl."aurl";
+  deps."authoraftertitle" = tl."authoraftertitle";
+  deps."authorarchive" = tl."authorarchive";
+  deps."authorindex" = tl."authorindex";
+  deps."autonum" = tl."autonum";
+  deps."autopdf" = tl."autopdf";
+  deps."avremu" = tl."avremu";
+  deps."background" = tl."background";
+  deps."bankstatement" = tl."bankstatement";
+  deps."bashful" = tl."bashful";
+  deps."basicarith" = tl."basicarith";
+  deps."bchart" = tl."bchart";
+  deps."beamer2thesis" = tl."beamer2thesis";
+  deps."beamer-rl" = tl."beamer-rl";
+  deps."beameraudience" = tl."beameraudience";
+  deps."beamerauxtheme" = tl."beamerauxtheme";
+  deps."beamercolorthemeowl" = tl."beamercolorthemeowl";
+  deps."beamerdarkthemes" = tl."beamerdarkthemes";
+  deps."beamerposter" = tl."beamerposter";
+  deps."beamersubframe" = tl."beamersubframe";
+  deps."beamertheme-cuerna" = tl."beamertheme-cuerna";
+  deps."beamertheme-detlevcm" = tl."beamertheme-detlevcm";
+  deps."beamertheme-epyt" = tl."beamertheme-epyt";
+  deps."beamertheme-focus" = tl."beamertheme-focus";
+  deps."beamertheme-light" = tl."beamertheme-light";
+  deps."beamertheme-metropolis" = tl."beamertheme-metropolis";
+  deps."beamertheme-npbt" = tl."beamertheme-npbt";
+  deps."beamertheme-phnompenh" = tl."beamertheme-phnompenh";
+  deps."beamertheme-saintpetersburg" = tl."beamertheme-saintpetersburg";
+  deps."beamertheme-upenn-bc" = tl."beamertheme-upenn-bc";
+  deps."beamerthemejltree" = tl."beamerthemejltree";
+  deps."beamerthemenirma" = tl."beamerthemenirma";
+  deps."beton" = tl."beton";
+  deps."bewerbung" = tl."bewerbung";
+  deps."bez123" = tl."bez123";
+  deps."bhcexam" = tl."bhcexam";
+  deps."bibletext" = tl."bibletext";
+  deps."bigfoot" = tl."bigfoot";
+  deps."bigints" = tl."bigints";
+  deps."biochemistry-colors" = tl."biochemistry-colors";
+  deps."bizcard" = tl."bizcard";
+  deps."blindtext" = tl."blindtext";
+  deps."blkarray" = tl."blkarray";
+  deps."block" = tl."block";
+  deps."blowup" = tl."blowup";
+  deps."bnumexpr" = tl."bnumexpr";
+  deps."boites" = tl."boites";
+  deps."bold-extra" = tl."bold-extra";
+  deps."bookcover" = tl."bookcover";
+  deps."bookest" = tl."bookest";
+  deps."booklet" = tl."booklet";
+  deps."boolexpr" = tl."boolexpr";
+  deps."bophook" = tl."bophook";
+  deps."boxedminipage" = tl."boxedminipage";
+  deps."boxedminipage2e" = tl."boxedminipage2e";
+  deps."boxhandler" = tl."boxhandler";
+  deps."bracketkey" = tl."bracketkey";
+  deps."braket" = tl."braket";
+  deps."breakurl" = tl."breakurl";
+  deps."bullcntr" = tl."bullcntr";
+  deps."bxcalc" = tl."bxcalc";
+  deps."bxdpx-beamer" = tl."bxdpx-beamer";
+  deps."bxdvidriver" = tl."bxdvidriver";
+  deps."bxenclose" = tl."bxenclose";
+  deps."bxnewfont" = tl."bxnewfont";
+  deps."bxpapersize" = tl."bxpapersize";
+  deps."bxpdfver" = tl."bxpdfver";
+  deps."bxtexlogo" = tl."bxtexlogo";
+  deps."calcage" = tl."calcage";
+  deps."calctab" = tl."calctab";
+  deps."calculator" = tl."calculator";
+  deps."calrsfs" = tl."calrsfs";
+  deps."cals" = tl."cals";
+  deps."calxxxx-yyyy" = tl."calxxxx-yyyy";
+  deps."cancel" = tl."cancel";
+  deps."canoniclayout" = tl."canoniclayout";
+  deps."capt-of" = tl."capt-of";
+  deps."captcont" = tl."captcont";
+  deps."captdef" = tl."captdef";
+  deps."carbohydrates" = tl."carbohydrates";
+  deps."cases" = tl."cases";
+  deps."casyl" = tl."casyl";
+  deps."catchfilebetweentags" = tl."catchfilebetweentags";
+  deps."catechis" = tl."catechis";
+  deps."catoptions" = tl."catoptions";
+  deps."cbcoptic" = tl."cbcoptic";
+  deps."ccaption" = tl."ccaption";
+  deps."cclicenses" = tl."cclicenses";
+  deps."cd" = tl."cd";
+  deps."cd-cover" = tl."cd-cover";
+  deps."cdpbundl" = tl."cdpbundl";
+  deps."cellprops" = tl."cellprops";
+  deps."cellspace" = tl."cellspace";
+  deps."censor" = tl."censor";
+  deps."centeredline" = tl."centeredline";
+  deps."changebar" = tl."changebar";
+  deps."changelayout" = tl."changelayout";
+  deps."changelog" = tl."changelog";
+  deps."changepage" = tl."changepage";
+  deps."changes" = tl."changes";
+  deps."chappg" = tl."chappg";
+  deps."chapterfolder" = tl."chapterfolder";
+  deps."cheatsheet" = tl."cheatsheet";
+  deps."checkend" = tl."checkend";
+  deps."chet" = tl."chet";
+  deps."chextras" = tl."chextras";
+  deps."childdoc" = tl."childdoc";
+  deps."chkfloat" = tl."chkfloat";
+  deps."chletter" = tl."chletter";
+  deps."chngcntr" = tl."chngcntr";
+  deps."chronology" = tl."chronology";
+  deps."circ" = tl."circ";
+  deps."classics" = tl."classics";
+  deps."classpack" = tl."classpack";
+  deps."clefval" = tl."clefval";
+  deps."cleveref" = tl."cleveref";
+  deps."clipboard" = tl."clipboard";
+  deps."clock" = tl."clock";
+  deps."cloze" = tl."cloze";
+  deps."clrdblpg" = tl."clrdblpg";
+  deps."clrstrip" = tl."clrstrip";
+  deps."cmdstring" = tl."cmdstring";
+  deps."cmdtrack" = tl."cmdtrack";
+  deps."cmsd" = tl."cmsd";
+  deps."cnltx" = tl."cnltx";
+  deps."cntformats" = tl."cntformats";
+  deps."cntperchap" = tl."cntperchap";
+  deps."codedoc" = tl."codedoc";
+  deps."codepage" = tl."codepage";
+  deps."codesection" = tl."codesection";
+  deps."collcell" = tl."collcell";
+  deps."collectbox" = tl."collectbox";
+  deps."colophon" = tl."colophon";
+  deps."colordoc" = tl."colordoc";
+  deps."colorinfo" = tl."colorinfo";
+  deps."coloring" = tl."coloring";
+  deps."colorspace" = tl."colorspace";
+  deps."colortab" = tl."colortab";
+  deps."colorwav" = tl."colorwav";
+  deps."colorweb" = tl."colorweb";
+  deps."colourchange" = tl."colourchange";
+  deps."combelow" = tl."combelow";
+  deps."combine" = tl."combine";
+  deps."comma" = tl."comma";
+  deps."commado" = tl."commado";
+  deps."commedit" = tl."commedit";
+  deps."comment" = tl."comment";
+  deps."competences" = tl."competences";
+  deps."concepts" = tl."concepts";
+  deps."concprog" = tl."concprog";
+  deps."constants" = tl."constants";
+  deps."continue" = tl."continue";
+  deps."contour" = tl."contour";
+  deps."contracard" = tl."contracard";
+  deps."conv-xkv" = tl."conv-xkv";
+  deps."cooking" = tl."cooking";
+  deps."cooking-units" = tl."cooking-units";
+  deps."cool" = tl."cool";
+  deps."coollist" = tl."coollist";
+  deps."coolstr" = tl."coolstr";
+  deps."coolthms" = tl."coolthms";
+  deps."cooltooltips" = tl."cooltooltips";
+  deps."coordsys" = tl."coordsys";
+  deps."copyedit" = tl."copyedit";
+  deps."copyrightbox" = tl."copyrightbox";
+  deps."coseoul" = tl."coseoul";
+  deps."counttexruns" = tl."counttexruns";
+  deps."courseoutline" = tl."courseoutline";
+  deps."coursepaper" = tl."coursepaper";
+  deps."coverpage" = tl."coverpage";
+  deps."cprotect" = tl."cprotect";
+  deps."crbox" = tl."crbox";
+  deps."crossreference" = tl."crossreference";
+  deps."crossreftools" = tl."crossreftools";
+  deps."csquotes" = tl."csquotes";
+  deps."css-colors" = tl."css-colors";
+  deps."csvmerge" = tl."csvmerge";
+  deps."csvsimple" = tl."csvsimple";
+  deps."cuisine" = tl."cuisine";
+  deps."currency" = tl."currency";
+  deps."currfile" = tl."currfile";
+  deps."currvita" = tl."currvita";
+  deps."cutwin" = tl."cutwin";
+  deps."cv" = tl."cv";
+  deps."cv4tw" = tl."cv4tw";
+  deps."cweb-latex" = tl."cweb-latex";
+  deps."cyber" = tl."cyber";
+  deps."cybercic" = tl."cybercic";
+  deps."dashbox" = tl."dashbox";
+  deps."dashrule" = tl."dashrule";
+  deps."dashundergaps" = tl."dashundergaps";
+  deps."dataref" = tl."dataref";
+  deps."datatool" = tl."datatool";
+  deps."dateiliste" = tl."dateiliste";
+  deps."datenumber" = tl."datenumber";
+  deps."datetime" = tl."datetime";
+  deps."datetime2" = tl."datetime2";
+  deps."datetime2-bahasai" = tl."datetime2-bahasai";
+  deps."datetime2-basque" = tl."datetime2-basque";
+  deps."datetime2-breton" = tl."datetime2-breton";
+  deps."datetime2-bulgarian" = tl."datetime2-bulgarian";
+  deps."datetime2-catalan" = tl."datetime2-catalan";
+  deps."datetime2-croatian" = tl."datetime2-croatian";
+  deps."datetime2-czech" = tl."datetime2-czech";
+  deps."datetime2-danish" = tl."datetime2-danish";
+  deps."datetime2-dutch" = tl."datetime2-dutch";
+  deps."datetime2-en-fulltext" = tl."datetime2-en-fulltext";
+  deps."datetime2-english" = tl."datetime2-english";
+  deps."datetime2-esperanto" = tl."datetime2-esperanto";
+  deps."datetime2-estonian" = tl."datetime2-estonian";
+  deps."datetime2-finnish" = tl."datetime2-finnish";
+  deps."datetime2-french" = tl."datetime2-french";
+  deps."datetime2-galician" = tl."datetime2-galician";
+  deps."datetime2-german" = tl."datetime2-german";
+  deps."datetime2-greek" = tl."datetime2-greek";
+  deps."datetime2-hebrew" = tl."datetime2-hebrew";
+  deps."datetime2-icelandic" = tl."datetime2-icelandic";
+  deps."datetime2-irish" = tl."datetime2-irish";
+  deps."datetime2-italian" = tl."datetime2-italian";
+  deps."datetime2-it-fulltext" = tl."datetime2-it-fulltext";
+  deps."datetime2-latin" = tl."datetime2-latin";
+  deps."datetime2-lsorbian" = tl."datetime2-lsorbian";
+  deps."datetime2-magyar" = tl."datetime2-magyar";
+  deps."datetime2-norsk" = tl."datetime2-norsk";
+  deps."datetime2-polish" = tl."datetime2-polish";
+  deps."datetime2-portuges" = tl."datetime2-portuges";
+  deps."datetime2-romanian" = tl."datetime2-romanian";
+  deps."datetime2-russian" = tl."datetime2-russian";
+  deps."datetime2-samin" = tl."datetime2-samin";
+  deps."datetime2-scottish" = tl."datetime2-scottish";
+  deps."datetime2-serbian" = tl."datetime2-serbian";
+  deps."datetime2-slovak" = tl."datetime2-slovak";
+  deps."datetime2-slovene" = tl."datetime2-slovene";
+  deps."datetime2-spanish" = tl."datetime2-spanish";
+  deps."datetime2-swedish" = tl."datetime2-swedish";
+  deps."datetime2-turkish" = tl."datetime2-turkish";
+  deps."datetime2-ukrainian" = tl."datetime2-ukrainian";
+  deps."datetime2-usorbian" = tl."datetime2-usorbian";
+  deps."datetime2-welsh" = tl."datetime2-welsh";
+  deps."dblfloatfix" = tl."dblfloatfix";
+  deps."decimal" = tl."decimal";
+  deps."decorule" = tl."decorule";
+  deps."delimtxt" = tl."delimtxt";
+  deps."denisbdoc" = tl."denisbdoc";
+  deps."diagbox" = tl."diagbox";
+  deps."diagnose" = tl."diagnose";
+  deps."dialogl" = tl."dialogl";
+  deps."dichokey" = tl."dichokey";
+  deps."dinbrief" = tl."dinbrief";
+  deps."directory" = tl."directory";
+  deps."dirtytalk" = tl."dirtytalk";
+  deps."dlfltxb" = tl."dlfltxb";
+  deps."dnaseq" = tl."dnaseq";
+  deps."doclicense" = tl."doclicense";
+  deps."docmfp" = tl."docmfp";
+  deps."docmute" = tl."docmute";
+  deps."doctools" = tl."doctools";
+  deps."documentation" = tl."documentation";
+  deps."doi" = tl."doi";
+  deps."dotarrow" = tl."dotarrow";
+  deps."dotlessi" = tl."dotlessi";
+  deps."dotseqn" = tl."dotseqn";
+  deps."download" = tl."download";
+  deps."dox" = tl."dox";
+  deps."dpfloat" = tl."dpfloat";
+  deps."dprogress" = tl."dprogress";
+  deps."drac" = tl."drac";
+  deps."draftcopy" = tl."draftcopy";
+  deps."draftfigure" = tl."draftfigure";
+  deps."draftwatermark" = tl."draftwatermark";
+  deps."dtk" = tl."dtk";
+  deps."dtxdescribe" = tl."dtxdescribe";
+  deps."dtxgallery" = tl."dtxgallery";
+  deps."duckuments" = tl."duckuments";
+  deps."ducksay" = tl."ducksay";
+  deps."dvdcoll" = tl."dvdcoll";
+  deps."dynamicnumber" = tl."dynamicnumber";
+  deps."dynblocks" = tl."dynblocks";
+  deps."ean13isbn" = tl."ean13isbn";
+  deps."easy" = tl."easy";
+  deps."easy-todo" = tl."easy-todo";
+  deps."easyfig" = tl."easyfig";
+  deps."easyformat" = tl."easyformat";
+  deps."easylist" = tl."easylist";
+  deps."easyreview" = tl."easyreview";
+  deps."ebezier" = tl."ebezier";
+  deps."ecclesiastic" = tl."ecclesiastic";
+  deps."ecv" = tl."ecv";
+  deps."ed" = tl."ed";
+  deps."edmargin" = tl."edmargin";
+  deps."eemeir" = tl."eemeir";
+  deps."efbox" = tl."efbox";
+  deps."egplot" = tl."egplot";
+  deps."ehhline" = tl."ehhline";
+  deps."elegantbook" = tl."elegantbook";
+  deps."elegantnote" = tl."elegantnote";
+  deps."elegantpaper" = tl."elegantpaper";
+  deps."elements" = tl."elements";
+  deps."ellipsis" = tl."ellipsis";
+  deps."elmath" = tl."elmath";
+  deps."elocalloc" = tl."elocalloc";
+  deps."elpres" = tl."elpres";
+  deps."elzcards" = tl."elzcards";
+  deps."emarks" = tl."emarks";
+  deps."embedall" = tl."embedall";
+  deps."embrac" = tl."embrac";
+  deps."emptypage" = tl."emptypage";
+  deps."emulateapj" = tl."emulateapj";
+  deps."endfloat" = tl."endfloat";
+  deps."endheads" = tl."endheads";
+  deps."endnotes" = tl."endnotes";
+  deps."engpron" = tl."engpron";
+  deps."engrec" = tl."engrec";
+  deps."enotez" = tl."enotez";
+  deps."enumitem" = tl."enumitem";
+  deps."enumitem-zref" = tl."enumitem-zref";
+  deps."envbig" = tl."envbig";
+  deps."environ" = tl."environ";
+  deps."envlab" = tl."envlab";
+  deps."epigraph" = tl."epigraph";
+  deps."epiolmec" = tl."epiolmec";
+  deps."eqell" = tl."eqell";
+  deps."eqlist" = tl."eqlist";
+  deps."eqnalign" = tl."eqnalign";
+  deps."eqname" = tl."eqname";
+  deps."eqparbox" = tl."eqparbox";
+  deps."errata" = tl."errata";
+  deps."erw-l3" = tl."erw-l3";
+  deps."esami" = tl."esami";
+  deps."esdiff" = tl."esdiff";
+  deps."esindex" = tl."esindex";
+  deps."esint" = tl."esint";
+  deps."esint-type1" = tl."esint-type1";
+  deps."etaremune" = tl."etaremune";
+  deps."etextools" = tl."etextools";
+  deps."etoc" = tl."etoc";
+  deps."eukdate" = tl."eukdate";
+  deps."eulerpx" = tl."eulerpx";
+  deps."europasscv" = tl."europasscv";
+  deps."europecv" = tl."europecv";
+  deps."everyhook" = tl."everyhook";
+  deps."everypage" = tl."everypage";
+  deps."exam" = tl."exam";
+  deps."exam-n" = tl."exam-n";
+  deps."exam-randomizechoices" = tl."exam-randomizechoices";
+  deps."examdesign" = tl."examdesign";
+  deps."exframe" = tl."exframe";
+  deps."example" = tl."example";
+  deps."examplep" = tl."examplep";
+  deps."exceltex" = tl."exceltex";
+  deps."excludeonly" = tl."excludeonly";
+  deps."exercise" = tl."exercise";
+  deps."exercisebank" = tl."exercisebank";
+  deps."exercisepoints" = tl."exercisepoints";
+  deps."exercises" = tl."exercises";
+  deps."exp-testopt" = tl."exp-testopt";
+  deps."expdlist" = tl."expdlist";
+  deps."export" = tl."export";
+  deps."exsheets" = tl."exsheets";
+  deps."exsol" = tl."exsol";
+  deps."extract" = tl."extract";
+  deps."facsimile" = tl."facsimile";
+  deps."factura" = tl."factura";
+  deps."fancyhandout" = tl."fancyhandout";
+  deps."fancylabel" = tl."fancylabel";
+  deps."fancynum" = tl."fancynum";
+  deps."fancypar" = tl."fancypar";
+  deps."fancyslides" = tl."fancyslides";
+  deps."fancytabs" = tl."fancytabs";
+  deps."fancytooltips" = tl."fancytooltips";
+  deps."fbox" = tl."fbox";
+  deps."fcolumn" = tl."fcolumn";
+  deps."fetchcls" = tl."fetchcls";
+  deps."ffslides" = tl."ffslides";
+  deps."fgruler" = tl."fgruler";
+  deps."fibeamer" = tl."fibeamer";
+  deps."fifo-stack" = tl."fifo-stack";
+  deps."figsize" = tl."figsize";
+  deps."filecontents" = tl."filecontents";
+  deps."filecontentsdef" = tl."filecontentsdef";
+  deps."filedate" = tl."filedate";
+  deps."fileinfo" = tl."fileinfo";
+  deps."filemod" = tl."filemod";
+  deps."fink" = tl."fink";
+  deps."finstrut" = tl."finstrut";
+  deps."fithesis" = tl."fithesis";
+  deps."fixcmex" = tl."fixcmex";
+  deps."fixfoot" = tl."fixfoot";
+  deps."fixme" = tl."fixme";
+  deps."fixmetodonotes" = tl."fixmetodonotes";
+  deps."fjodor" = tl."fjodor";
+  deps."flabels" = tl."flabels";
+  deps."flacards" = tl."flacards";
+  deps."flagderiv" = tl."flagderiv";
+  deps."flashcards" = tl."flashcards";
+  deps."flashmovie" = tl."flashmovie";
+  deps."flipbook" = tl."flipbook";
+  deps."flippdf" = tl."flippdf";
+  deps."floatflt" = tl."floatflt";
+  deps."floatrow" = tl."floatrow";
+  deps."flowfram" = tl."flowfram";
+  deps."fmp" = tl."fmp";
+  deps."fmtcount" = tl."fmtcount";
+  deps."fn2end" = tl."fn2end";
+  deps."fnbreak" = tl."fnbreak";
+  deps."fncychap" = tl."fncychap";
+  deps."fncylab" = tl."fncylab";
+  deps."fnpara" = tl."fnpara";
+  deps."fnpct" = tl."fnpct";
+  deps."fnumprint" = tl."fnumprint";
+  deps."foilhtml" = tl."foilhtml";
+  deps."fontaxes" = tl."fontaxes";
+  deps."fonttable" = tl."fonttable";
+  deps."footmisc" = tl."footmisc";
+  deps."footmisx" = tl."footmisx";
+  deps."footnotebackref" = tl."footnotebackref";
+  deps."footnoterange" = tl."footnoterange";
+  deps."footnpag" = tl."footnpag";
+  deps."forarray" = tl."forarray";
+  deps."foreign" = tl."foreign";
+  deps."forloop" = tl."forloop";
+  deps."formlett" = tl."formlett";
+  deps."forms16be" = tl."forms16be";
+  deps."formular" = tl."formular";
+  deps."fragments" = tl."fragments";
+  deps."frame" = tl."frame";
+  deps."framed" = tl."framed";
+  deps."frankenstein" = tl."frankenstein";
+  deps."frege" = tl."frege";
+  deps."ftcap" = tl."ftcap";
+  deps."ftnxtra" = tl."ftnxtra";
+  deps."fullblck" = tl."fullblck";
+  deps."fullminipage" = tl."fullminipage";
+  deps."fullwidth" = tl."fullwidth";
+  deps."fundus-calligra" = tl."fundus-calligra";
+  deps."fundus-cyr" = tl."fundus-cyr";
+  deps."fundus-sueterlin" = tl."fundus-sueterlin";
+  deps."fvextra" = tl."fvextra";
+  deps."fwlw" = tl."fwlw";
+  deps."g-brief" = tl."g-brief";
+  deps."gatherenum" = tl."gatherenum";
+  deps."gauss" = tl."gauss";
+  deps."gcard" = tl."gcard";
+  deps."gcite" = tl."gcite";
+  deps."gender" = tl."gender";
+  deps."genmpage" = tl."genmpage";
+  deps."getfiledate" = tl."getfiledate";
+  deps."getitems" = tl."getitems";
+  deps."gindex" = tl."gindex";
+  deps."ginpenc" = tl."ginpenc";
+  deps."gitfile-info" = tl."gitfile-info";
+  deps."gitinfo" = tl."gitinfo";
+  deps."gitinfo2" = tl."gitinfo2";
+  deps."gitlog" = tl."gitlog";
+  deps."gitver" = tl."gitver";
+  deps."globalvals" = tl."globalvals";
+  deps."gloss" = tl."gloss";
+  deps."glossaries" = tl."glossaries";
+  deps."glossaries-danish" = tl."glossaries-danish";
+  deps."glossaries-dutch" = tl."glossaries-dutch";
+  deps."glossaries-english" = tl."glossaries-english";
+  deps."glossaries-estonian" = tl."glossaries-estonian";
+  deps."glossaries-extra" = tl."glossaries-extra";
+  deps."glossaries-finnish" = tl."glossaries-finnish";
+  deps."glossaries-french" = tl."glossaries-french";
+  deps."glossaries-german" = tl."glossaries-german";
+  deps."glossaries-irish" = tl."glossaries-irish";
+  deps."glossaries-italian" = tl."glossaries-italian";
+  deps."glossaries-magyar" = tl."glossaries-magyar";
+  deps."glossaries-polish" = tl."glossaries-polish";
+  deps."glossaries-portuges" = tl."glossaries-portuges";
+  deps."glossaries-serbian" = tl."glossaries-serbian";
+  deps."glossaries-slovene" = tl."glossaries-slovene";
+  deps."glossaries-spanish" = tl."glossaries-spanish";
+  deps."gmdoc" = tl."gmdoc";
+  deps."gmdoc-enhance" = tl."gmdoc-enhance";
+  deps."gmiflink" = tl."gmiflink";
+  deps."gmutils" = tl."gmutils";
+  deps."gmverb" = tl."gmverb";
+  deps."grabbox" = tl."grabbox";
+  deps."graphbox" = tl."graphbox";
+  deps."graphicx-psmin" = tl."graphicx-psmin";
+  deps."graphicxbox" = tl."graphicxbox";
+  deps."grayhints" = tl."grayhints";
+  deps."grfpaste" = tl."grfpaste";
+  deps."grid" = tl."grid";
+  deps."grid-system" = tl."grid-system";
+  deps."gridset" = tl."gridset";
+  deps."gridslides" = tl."gridslides";
+  deps."guitlogo" = tl."guitlogo";
+  deps."halloweenmath" = tl."halloweenmath";
+  deps."hackthefootline" = tl."hackthefootline";
+  deps."handin" = tl."handin";
+  deps."handout" = tl."handout";
+  deps."hang" = tl."hang";
+  deps."hanging" = tl."hanging";
+  deps."hardwrap" = tl."hardwrap";
+  deps."harnon-cv" = tl."harnon-cv";
+  deps."harpoon" = tl."harpoon";
+  deps."hc" = tl."hc";
+  deps."he-she" = tl."he-she";
+  deps."hhtensor" = tl."hhtensor";
+  deps."histogr" = tl."histogr";
+  deps."hitec" = tl."hitec";
+  deps."hletter" = tl."hletter";
+  deps."hpsdiss" = tl."hpsdiss";
+  deps."hrefhide" = tl."hrefhide";
+  deps."hvindex" = tl."hvindex";
+  deps."hypdvips" = tl."hypdvips";
+  deps."hyper" = tl."hyper";
+  deps."hyperbar" = tl."hyperbar";
+  deps."hypernat" = tl."hypernat";
+  deps."hyperxmp" = tl."hyperxmp";
+  deps."hyphenat" = tl."hyphenat";
+  deps."identkey" = tl."identkey";
+  deps."idxcmds" = tl."idxcmds";
+  deps."idxlayout" = tl."idxlayout";
+  deps."iffont" = tl."iffont";
+  deps."ifmslide" = tl."ifmslide";
+  deps."ifmtarg" = tl."ifmtarg";
+  deps."ifnextok" = tl."ifnextok";
+  deps."ifoddpage" = tl."ifoddpage";
+  deps."ifthenx" = tl."ifthenx";
+  deps."iitem" = tl."iitem";
+  deps."image-gallery" = tl."image-gallery";
+  deps."imakeidx" = tl."imakeidx";
+  deps."import" = tl."import";
+  deps."incgraph" = tl."incgraph";
+  deps."indextools" = tl."indextools";
+  deps."inline-images" = tl."inline-images";
+  deps."inlinedef" = tl."inlinedef";
+  deps."inputtrc" = tl."inputtrc";
+  deps."interactiveworkbook" = tl."interactiveworkbook";
+  deps."interfaces" = tl."interfaces";
+  deps."intopdf" = tl."intopdf";
+  deps."inversepath" = tl."inversepath";
+  deps."invoice" = tl."invoice";
+  deps."invoice-class" = tl."invoice-class";
+  deps."invoice2" = tl."invoice2";
+  deps."iso" = tl."iso";
+  deps."iso10303" = tl."iso10303";
+  deps."isodate" = tl."isodate";
+  deps."isodoc" = tl."isodoc";
+  deps."isonums" = tl."isonums";
+  deps."isopt" = tl."isopt";
+  deps."isorot" = tl."isorot";
+  deps."isotope" = tl."isotope";
+  deps."issuulinks" = tl."issuulinks";
+  deps."iwhdp" = tl."iwhdp";
+  deps."jlabels" = tl."jlabels";
+  deps."jslectureplanner" = tl."jslectureplanner";
+  deps."jumplines" = tl."jumplines";
+  deps."jvlisting" = tl."jvlisting";
+  deps."kalendarium" = tl."kalendarium";
+  deps."kantlipsum" = tl."kantlipsum";
+  deps."kerntest" = tl."kerntest";
+  deps."keycommand" = tl."keycommand";
+  deps."keyfloat" = tl."keyfloat";
+  deps."keyreader" = tl."keyreader";
+  deps."keyindex" = tl."keyindex";
+  deps."keystroke" = tl."keystroke";
+  deps."keyval2e" = tl."keyval2e";
+  deps."keyvaltable" = tl."keyvaltable";
+  deps."kix" = tl."kix";
+  deps."knowledge" = tl."knowledge";
+  deps."koma-moderncvclassic" = tl."koma-moderncvclassic";
+  deps."koma-script-sfs" = tl."koma-script-sfs";
+  deps."komacv" = tl."komacv";
+  deps."komacv-rg" = tl."komacv-rg";
+  deps."ktv-texdata" = tl."ktv-texdata";
+  deps."l3build" = tl."l3build";
+  deps."labbook" = tl."labbook";
+  deps."labels" = tl."labels";
+  deps."labels4easylist" = tl."labels4easylist";
+  deps."labelschanged" = tl."labelschanged";
+  deps."lastpackage" = tl."lastpackage";
+  deps."lastpage" = tl."lastpage";
+  deps."latex-amsmath-dev" = tl."latex-amsmath-dev";
+  deps."latex-base-dev" = tl."latex-base-dev";
+  deps."latex-bin-dev" = tl."latex-bin-dev";
+  deps."latex-graphics-dev" = tl."latex-graphics-dev";
+  deps."latex-tds" = tl."latex-tds";
+  deps."latex-tools-dev" = tl."latex-tools-dev";
+  deps."latex-uni8" = tl."latex-uni8";
+  deps."latexcolors" = tl."latexcolors";
+  deps."latexdemo" = tl."latexdemo";
+  deps."latexgit" = tl."latexgit";
+  deps."layouts" = tl."layouts";
+  deps."lazylist" = tl."lazylist";
+  deps."lccaps" = tl."lccaps";
+  deps."lcd" = tl."lcd";
+  deps."lcg" = tl."lcg";
+  deps."leading" = tl."leading";
+  deps."leaflet" = tl."leaflet";
+  deps."lectures" = tl."lectures";
+  deps."leftidx" = tl."leftidx";
+  deps."leipzig" = tl."leipzig";
+  deps."lengthconvert" = tl."lengthconvert";
+  deps."lettre" = tl."lettre";
+  deps."lettrine" = tl."lettrine";
+  deps."lewis" = tl."lewis";
+  deps."lhelp" = tl."lhelp";
+  deps."libgreek" = tl."libgreek";
+  deps."limap" = tl."limap";
+  deps."linegoal" = tl."linegoal";
+  deps."linop" = tl."linop";
+  deps."lipsum" = tl."lipsum";
+  deps."lisp-on-tex" = tl."lisp-on-tex";
+  deps."listing" = tl."listing";
+  deps."listlbls" = tl."listlbls";
+  deps."listliketab" = tl."listliketab";
+  deps."listofsymbols" = tl."listofsymbols";
+  deps."lkproof" = tl."lkproof";
+  deps."lmake" = tl."lmake";
+  deps."locality" = tl."locality";
+  deps."localloc" = tl."localloc";
+  deps."logbox" = tl."logbox";
+  deps."logical-markup-utils" = tl."logical-markup-utils";
+  deps."logpap" = tl."logpap";
+  deps."longfbox" = tl."longfbox";
+  deps."longfigure" = tl."longfigure";
+  deps."longnamefilelist" = tl."longnamefilelist";
+  deps."loops" = tl."loops";
+  deps."lsc" = tl."lsc";
+  deps."lstaddons" = tl."lstaddons";
+  deps."lstfiracode" = tl."lstfiracode";
+  deps."lt3graph" = tl."lt3graph";
+  deps."ltablex" = tl."ltablex";
+  deps."ltabptch" = tl."ltabptch";
+  deps."ltxdockit" = tl."ltxdockit";
+  deps."ltxguidex" = tl."ltxguidex";
+  deps."ltxindex" = tl."ltxindex";
+  deps."ltxkeys" = tl."ltxkeys";
+  deps."ltxnew" = tl."ltxnew";
+  deps."ltxtools" = tl."ltxtools";
+  deps."lua-check-hyphen" = tl."lua-check-hyphen";
+  deps."luatodonotes" = tl."luatodonotes";
+  deps."macroswap" = tl."macroswap";
+  deps."magaz" = tl."magaz";
+  deps."makecookbook" = tl."makecookbook";
+  deps."mailing" = tl."mailing";
+  deps."mailmerge" = tl."mailmerge";
+  deps."makebarcode" = tl."makebarcode";
+  deps."makebase" = tl."makebase";
+  deps."makebox" = tl."makebox";
+  deps."makecell" = tl."makecell";
+  deps."makecirc" = tl."makecirc";
+  deps."makecmds" = tl."makecmds";
+  deps."makedtx" = tl."makedtx";
+  deps."makeglos" = tl."makeglos";
+  deps."mandi" = tl."mandi";
+  deps."manfnt" = tl."manfnt";
+  deps."manuscript" = tl."manuscript";
+  deps."manyind" = tl."manyind";
+  deps."marginfit" = tl."marginfit";
+  deps."marginfix" = tl."marginfix";
+  deps."marginnote" = tl."marginnote";
+  deps."markdown" = tl."markdown";
+  deps."mathalpha" = tl."mathalpha";
+  deps."mathastext" = tl."mathastext";
+  deps."mathexam" = tl."mathexam";
+  deps."mathfam256" = tl."mathfam256";
+  deps."mathfont" = tl."mathfont";
+  deps."maybemath" = tl."maybemath";
+  deps."mcaption" = tl."mcaption";
+  deps."mceinleger" = tl."mceinleger";
+  deps."mcexam" = tl."mcexam";
+  deps."mcite" = tl."mcite";
+  deps."mciteplus" = tl."mciteplus";
+  deps."mdframed" = tl."mdframed";
+  deps."media9" = tl."media9";
+  deps."medstarbeamer" = tl."medstarbeamer";
+  deps."meetingmins" = tl."meetingmins";
+  deps."memexsupp" = tl."memexsupp";
+  deps."memory" = tl."memory";
+  deps."mensa-tex" = tl."mensa-tex";
+  deps."menu" = tl."menu";
+  deps."menukeys" = tl."menukeys";
+  deps."metalogox" = tl."metalogox";
+  deps."method" = tl."method";
+  deps."metre" = tl."metre";
+  deps."mfirstuc" = tl."mfirstuc";
+  deps."mftinc" = tl."mftinc";
+  deps."mi-solns" = tl."mi-solns";
+  deps."midpage" = tl."midpage";
+  deps."minibox" = tl."minibox";
+  deps."minidocument" = tl."minidocument";
+  deps."minifp" = tl."minifp";
+  deps."minipage-marginpar" = tl."minipage-marginpar";
+  deps."minitoc" = tl."minitoc";
+  deps."minorrevision" = tl."minorrevision";
+  deps."minted" = tl."minted";
+  deps."minutes" = tl."minutes";
+  deps."mla-paper" = tl."mla-paper";
+  deps."mlist" = tl."mlist";
+  deps."mmap" = tl."mmap";
+  deps."mnotes" = tl."mnotes";
+  deps."moderncv" = tl."moderncv";
+  deps."modernposter" = tl."modernposter";
+  deps."moderntimeline" = tl."moderntimeline";
+  deps."modref" = tl."modref";
+  deps."modroman" = tl."modroman";
+  deps."modular" = tl."modular";
+  deps."monofill" = tl."monofill";
+  deps."moodle" = tl."moodle";
+  deps."moreenum" = tl."moreenum";
+  deps."morefloats" = tl."morefloats";
+  deps."morehype" = tl."morehype";
+  deps."moresize" = tl."moresize";
+  deps."moreverb" = tl."moreverb";
+  deps."morewrites" = tl."morewrites";
+  deps."movie15" = tl."movie15";
+  deps."mparhack" = tl."mparhack";
+  deps."mpostinl" = tl."mpostinl";
+  deps."msc" = tl."msc";
+  deps."msg" = tl."msg";
+  deps."mslapa" = tl."mslapa";
+  deps."mtgreek" = tl."mtgreek";
+  deps."multenum" = tl."multenum";
+  deps."multiaudience" = tl."multiaudience";
+  deps."multibbl" = tl."multibbl";
+  deps."multicap" = tl."multicap";
+  deps."multicolrule" = tl."multicolrule";
+  deps."multidef" = tl."multidef";
+  deps."multienv" = tl."multienv";
+  deps."multiexpand" = tl."multiexpand";
+  deps."multilang" = tl."multilang";
+  deps."multirow" = tl."multirow";
+  deps."mversion" = tl."mversion";
+  deps."mwe" = tl."mwe";
+  deps."mycv" = tl."mycv";
+  deps."mylatexformat" = tl."mylatexformat";
+  deps."nag" = tl."nag";
+  deps."nameauth" = tl."nameauth";
+  deps."namespc" = tl."namespc";
+  deps."ncclatex" = tl."ncclatex";
+  deps."ncctools" = tl."ncctools";
+  deps."needspace" = tl."needspace";
+  deps."nestquot" = tl."nestquot";
+  deps."newcommand" = tl."newcommand";
+  deps."newenviron" = tl."newenviron";
+  deps."newfile" = tl."newfile";
+  deps."newlfm" = tl."newlfm";
+  deps."newspaper" = tl."newspaper";
+  deps."newunicodechar" = tl."newunicodechar";
+  deps."newvbtm" = tl."newvbtm";
+  deps."newverbs" = tl."newverbs";
+  deps."nextpage" = tl."nextpage";
+  deps."nfssext-cfr" = tl."nfssext-cfr";
+  deps."nicefilelist" = tl."nicefilelist";
+  deps."niceframe" = tl."niceframe";
+  deps."nicetext" = tl."nicetext";
+  deps."nidanfloat" = tl."nidanfloat";
+  deps."nlctdoc" = tl."nlctdoc";
+  deps."noconflict" = tl."noconflict";
+  deps."noindentafter" = tl."noindentafter";
+  deps."noitcrul" = tl."noitcrul";
+  deps."nolbreaks" = tl."nolbreaks";
+  deps."nomencl" = tl."nomencl";
+  deps."nomentbl" = tl."nomentbl";
+  deps."nonfloat" = tl."nonfloat";
+  deps."nonumonpart" = tl."nonumonpart";
+  deps."nopageno" = tl."nopageno";
+  deps."normalcolor" = tl."normalcolor";
+  deps."notes" = tl."notes";
+  deps."notespages" = tl."notespages";
+  deps."notestex" = tl."notestex";
+  deps."notoccite" = tl."notoccite";
+  deps."nowidow" = tl."nowidow";
+  deps."nox" = tl."nox";
+  deps."ntheorem" = tl."ntheorem";
+  deps."numberedblock" = tl."numberedblock";
+  deps."numname" = tl."numname";
+  deps."numprint" = tl."numprint";
+  deps."numspell" = tl."numspell";
+  deps."ocg-p" = tl."ocg-p";
+  deps."ocgx" = tl."ocgx";
+  deps."ocgx2" = tl."ocgx2";
+  deps."ocr-latex" = tl."ocr-latex";
+  deps."octavo" = tl."octavo";
+  deps."oldstyle" = tl."oldstyle";
+  deps."onlyamsmath" = tl."onlyamsmath";
+  deps."opcit" = tl."opcit";
+  deps."optidef" = tl."optidef";
+  deps."optional" = tl."optional";
+  deps."options" = tl."options";
+  deps."outline" = tl."outline";
+  deps."outliner" = tl."outliner";
+  deps."outlines" = tl."outlines";
+  deps."outlining" = tl."outlining";
+  deps."overlays" = tl."overlays";
+  deps."overpic" = tl."overpic";
+  deps."padcount" = tl."padcount";
+  deps."pagecolor" = tl."pagecolor";
+  deps."pagecont" = tl."pagecont";
+  deps."pagenote" = tl."pagenote";
+  deps."pagerange" = tl."pagerange";
+  deps."pageslts" = tl."pageslts";
+  deps."paper" = tl."paper";
+  deps."papercdcase" = tl."papercdcase";
+  deps."papermas" = tl."papermas";
+  deps."papertex" = tl."papertex";
+  deps."paracol" = tl."paracol";
+  deps."parades" = tl."parades";
+  deps."paralist" = tl."paralist";
+  deps."paresse" = tl."paresse";
+  deps."parnotes" = tl."parnotes";
+  deps."parselines" = tl."parselines";
+  deps."pas-cours" = tl."pas-cours";
+  deps."pas-cv" = tl."pas-cv";
+  deps."pas-tableur" = tl."pas-tableur";
+  deps."patch" = tl."patch";
+  deps."patchcmd" = tl."patchcmd";
+  deps."pauldoc" = tl."pauldoc";
+  deps."pawpict" = tl."pawpict";
+  deps."pax" = tl."pax";
+  deps."pbox" = tl."pbox";
+  deps."pbsheet" = tl."pbsheet";
+  deps."pdf14" = tl."pdf14";
+  deps."pdfcomment" = tl."pdfcomment";
+  deps."pdfcprot" = tl."pdfcprot";
+  deps."pdfmarginpar" = tl."pdfmarginpar";
+  deps."pdfoverlay" = tl."pdfoverlay";
+  deps."pdfpagediff" = tl."pdfpagediff";
+  deps."pdfpc-movie" = tl."pdfpc-movie";
+  deps."pdfprivacy" = tl."pdfprivacy";
+  deps."pdfreview" = tl."pdfreview";
+  deps."pdfscreen" = tl."pdfscreen";
+  deps."pdfslide" = tl."pdfslide";
+  deps."pdfsync" = tl."pdfsync";
+  deps."pdfwin" = tl."pdfwin";
+  deps."pdfx" = tl."pdfx";
+  deps."pecha" = tl."pecha";
+  deps."perltex" = tl."perltex";
+  deps."permute" = tl."permute";
+  deps."petiteannonce" = tl."petiteannonce";
+  deps."phffullpagefigure" = tl."phffullpagefigure";
+  deps."phfnote" = tl."phfnote";
+  deps."phfparen" = tl."phfparen";
+  deps."phfqit" = tl."phfqit";
+  deps."phfquotetext" = tl."phfquotetext";
+  deps."phfsvnwatermark" = tl."phfsvnwatermark";
+  deps."phfthm" = tl."phfthm";
+  deps."philex" = tl."philex";
+  deps."phonenumbers" = tl."phonenumbers";
+  deps."photo" = tl."photo";
+  deps."piff" = tl."piff";
+  deps."pkgloader" = tl."pkgloader";
+  deps."placeins" = tl."placeins";
+  deps."plantslabels" = tl."plantslabels";
+  deps."plates" = tl."plates";
+  deps."plweb" = tl."plweb";
+  deps."polynom" = tl."polynom";
+  deps."polynomial" = tl."polynomial";
+  deps."polytable" = tl."polytable";
+  deps."postcards" = tl."postcards";
+  deps."poster-mac" = tl."poster-mac";
+  deps."powerdot" = tl."powerdot";
+  deps."ppr-prv" = tl."ppr-prv";
+  deps."practicalreports" = tl."practicalreports";
+  deps."preprint" = tl."preprint";
+  deps."pressrelease" = tl."pressrelease";
+  deps."prettyref" = tl."prettyref";
+  deps."preview" = tl."preview";
+  deps."printlen" = tl."printlen";
+  deps."probsoln" = tl."probsoln";
+  deps."program" = tl."program";
+  deps."progress" = tl."progress";
+  deps."progressbar" = tl."progressbar";
+  deps."proofread" = tl."proofread";
+  deps."properties" = tl."properties";
+  deps."prosper" = tl."prosper";
+  deps."protex" = tl."protex";
+  deps."protocol" = tl."protocol";
+  deps."psfragx" = tl."psfragx";
+  deps."pstool" = tl."pstool";
+  deps."pstring" = tl."pstring";
+  deps."pxgreeks" = tl."pxgreeks";
+  deps."pygmentex" = tl."pygmentex";
+  deps."python" = tl."python";
+  deps."qcm" = tl."qcm";
+  deps."qstest" = tl."qstest";
+  deps."qsymbols" = tl."qsymbols";
+  deps."quicktype" = tl."quicktype";
+  deps."quiz2socrative" = tl."quiz2socrative";
+  deps."quotchap" = tl."quotchap";
+  deps."quoting" = tl."quoting";
+  deps."quotmark" = tl."quotmark";
+  deps."ran_toks" = tl."ran_toks";
+  deps."randtext" = tl."randtext";
+  deps."rccol" = tl."rccol";
+  deps."rcs-multi" = tl."rcs-multi";
+  deps."rcsinfo" = tl."rcsinfo";
+  deps."readarray" = tl."readarray";
+  deps."realboxes" = tl."realboxes";
+  deps."recipe" = tl."recipe";
+  deps."recipebook" = tl."recipebook";
+  deps."recipecard" = tl."recipecard";
+  deps."rectopma" = tl."rectopma";
+  deps."refcheck" = tl."refcheck";
+  deps."refenums" = tl."refenums";
+  deps."reflectgraphics" = tl."reflectgraphics";
+  deps."refman" = tl."refman";
+  deps."refstyle" = tl."refstyle";
+  deps."regcount" = tl."regcount";
+  deps."regexpatch" = tl."regexpatch";
+  deps."register" = tl."register";
+  deps."regstats" = tl."regstats";
+  deps."relenc" = tl."relenc";
+  deps."relsize" = tl."relsize";
+  deps."repeatindex" = tl."repeatindex";
+  deps."repltext" = tl."repltext";
+  deps."returntogrid" = tl."returntogrid";
+  deps."rgltxdoc" = tl."rgltxdoc";
+  deps."rjlparshap" = tl."rjlparshap";
+  deps."rlepsf" = tl."rlepsf";
+  deps."rmpage" = tl."rmpage";
+  deps."robustcommand" = tl."robustcommand";
+  deps."robustindex" = tl."robustindex";
+  deps."romanbar" = tl."romanbar";
+  deps."romanbarpagenumber" = tl."romanbarpagenumber";
+  deps."romanneg" = tl."romanneg";
+  deps."romannum" = tl."romannum";
+  deps."rotfloat" = tl."rotfloat";
+  deps."rotpages" = tl."rotpages";
+  deps."roundbox" = tl."roundbox";
+  deps."rterface" = tl."rterface";
+  deps."rtkinenc" = tl."rtkinenc";
+  deps."rulerbox" = tl."rulerbox";
+  deps."rulercompass" = tl."rulercompass";
+  deps."rvwrite" = tl."rvwrite";
+  deps."sanitize-umlaut" = tl."sanitize-umlaut";
+  deps."sauerj" = tl."sauerj";
+  deps."savefnmark" = tl."savefnmark";
+  deps."savesym" = tl."savesym";
+  deps."savetrees" = tl."savetrees";
+  deps."scale" = tl."scale";
+  deps."scalebar" = tl."scalebar";
+  deps."scalerel" = tl."scalerel";
+  deps."scanpages" = tl."scanpages";
+  deps."schedule" = tl."schedule";
+  deps."scontents" = tl."scontents";
+  deps."scrlttr2copy" = tl."scrlttr2copy";
+  deps."sdrt" = tl."sdrt";
+  deps."secdot" = tl."secdot";
+  deps."sectionbox" = tl."sectionbox";
+  deps."sectionbreak" = tl."sectionbreak";
+  deps."sectsty" = tl."sectsty";
+  deps."seealso" = tl."seealso";
+  deps."selectp" = tl."selectp";
+  deps."semantic" = tl."semantic";
+  deps."semantic-markup" = tl."semantic-markup";
+  deps."semioneside" = tl."semioneside";
+  deps."semproc" = tl."semproc";
+  deps."sepfootnotes" = tl."sepfootnotes";
+  deps."seqsplit" = tl."seqsplit";
+  deps."sesstime" = tl."sesstime";
+  deps."sf298" = tl."sf298";
+  deps."sffms" = tl."sffms";
+  deps."sfmath" = tl."sfmath";
+  deps."shadethm" = tl."shadethm";
+  deps."shadow" = tl."shadow";
+  deps."shadowtext" = tl."shadowtext";
+  deps."shapepar" = tl."shapepar";
+  deps."shdoc" = tl."shdoc";
+  deps."shipunov" = tl."shipunov";
+  deps."shorttoc" = tl."shorttoc";
+  deps."show2e" = tl."show2e";
+  deps."showcharinbox" = tl."showcharinbox";
+  deps."showdim" = tl."showdim";
+  deps."showexpl" = tl."showexpl";
+  deps."showhyphens" = tl."showhyphens";
+  deps."showlabels" = tl."showlabels";
+  deps."sidecap" = tl."sidecap";
+  deps."sidenotes" = tl."sidenotes";
+  deps."silence" = tl."silence";
+  deps."simplecd" = tl."simplecd";
+  deps."simplecv" = tl."simplecv";
+  deps."simpleinvoice" = tl."simpleinvoice";
+  deps."sitem" = tl."sitem";
+  deps."skb" = tl."skb";
+  deps."skdoc" = tl."skdoc";
+  deps."skeycommand" = tl."skeycommand";
+  deps."skeyval" = tl."skeyval";
+  deps."skrapport" = tl."skrapport";
+  deps."slantsc" = tl."slantsc";
+  deps."smalltableof" = tl."smalltableof";
+  deps."smartunits" = tl."smartunits";
+  deps."smartref" = tl."smartref";
+  deps."snapshot" = tl."snapshot";
+  deps."snotez" = tl."snotez";
+  deps."soul" = tl."soul";
+  deps."soulpos" = tl."soulpos";
+  deps."spacingtricks" = tl."spacingtricks";
+  deps."spark-otf" = tl."spark-otf";
+  deps."sparklines" = tl."sparklines";
+  deps."sphack" = tl."sphack";
+  deps."splitindex" = tl."splitindex";
+  deps."spot" = tl."spot";
+  deps."spotcolor" = tl."spotcolor";
+  deps."spreadtab" = tl."spreadtab";
+  deps."spverbatim" = tl."spverbatim";
+  deps."srbook-mem" = tl."srbook-mem";
+  deps."srcltx" = tl."srcltx";
+  deps."sseq" = tl."sseq";
+  deps."sslides" = tl."sslides";
+  deps."stack" = tl."stack";
+  deps."stackengine" = tl."stackengine";
+  deps."standalone" = tl."standalone";
+  deps."stdclsdv" = tl."stdclsdv";
+  deps."stealcaps" = tl."stealcaps";
+  deps."stdpage" = tl."stdpage";
+  deps."stex" = tl."stex";
+  deps."storebox" = tl."storebox";
+  deps."storecmd" = tl."storecmd";
+  deps."stringstrings" = tl."stringstrings";
+  deps."sttools" = tl."sttools";
+  deps."stubs" = tl."stubs";
+  deps."studenthandouts" = tl."studenthandouts";
+  deps."subdepth" = tl."subdepth";
+  deps."subdocs" = tl."subdocs";
+  deps."subeqn" = tl."subeqn";
+  deps."subeqnarray" = tl."subeqnarray";
+  deps."subfigmat" = tl."subfigmat";
+  deps."subfigure" = tl."subfigure";
+  deps."subfiles" = tl."subfiles";
+  deps."subfloat" = tl."subfloat";
+  deps."substitutefont" = tl."substitutefont";
+  deps."substr" = tl."substr";
+  deps."supertabular" = tl."supertabular";
+  deps."svg" = tl."svg";
+  deps."svgcolor" = tl."svgcolor";
+  deps."svn" = tl."svn";
+  deps."svn-multi" = tl."svn-multi";
+  deps."svn-prov" = tl."svn-prov";
+  deps."svninfo" = tl."svninfo";
+  deps."syntax" = tl."syntax";
+  deps."syntrace" = tl."syntrace";
+  deps."synttree" = tl."synttree";
+  deps."tabfigures" = tl."tabfigures";
+  deps."tableaux" = tl."tableaux";
+  deps."tablefootnote" = tl."tablefootnote";
+  deps."tableof" = tl."tableof";
+  deps."tablestyles" = tl."tablestyles";
+  deps."tablists" = tl."tablists";
+  deps."tabls" = tl."tabls";
+  deps."tablvar" = tl."tablvar";
+  deps."tabstackengine" = tl."tabstackengine";
+  deps."tabto-ltx" = tl."tabto-ltx";
+  deps."tabu" = tl."tabu";
+  deps."tabularborder" = tl."tabularborder";
+  deps."tabularcalc" = tl."tabularcalc";
+  deps."tabularew" = tl."tabularew";
+  deps."tabulary" = tl."tabulary";
+  deps."tagging" = tl."tagging";
+  deps."tagpair" = tl."tagpair";
+  deps."tagpdf" = tl."tagpdf";
+  deps."talk" = tl."talk";
+  deps."tamefloats" = tl."tamefloats";
+  deps."tasks" = tl."tasks";
+  deps."tcldoc" = tl."tcldoc";
+  deps."tcolorbox" = tl."tcolorbox";
+  deps."tdclock" = tl."tdclock";
+  deps."technics" = tl."technics";
+  deps."ted" = tl."ted";
+  deps."templatetools" = tl."templatetools";
+  deps."termcal" = tl."termcal";
+  deps."termlist" = tl."termlist";
+  deps."testhyphens" = tl."testhyphens";
+  deps."testidx" = tl."testidx";
+  deps."tex-label" = tl."tex-label";
+  deps."tex-locale" = tl."tex-locale";
+  deps."texlogos" = tl."texlogos";
+  deps."texmate" = tl."texmate";
+  deps."texments" = tl."texments";
+  deps."texpower" = tl."texpower";
+  deps."texshade" = tl."texshade";
+  deps."texvc" = tl."texvc";
+  deps."textfit" = tl."textfit";
+  deps."textmerg" = tl."textmerg";
+  deps."textpos" = tl."textpos";
+  deps."textualicomma" = tl."textualicomma";
+  deps."theoremref" = tl."theoremref";
+  deps."thinsp" = tl."thinsp";
+  deps."thmtools" = tl."thmtools";
+  deps."threadcol" = tl."threadcol";
+  deps."threeparttable" = tl."threeparttable";
+  deps."threeparttablex" = tl."threeparttablex";
+  deps."thumb" = tl."thumb";
+  deps."thumbs" = tl."thumbs";
+  deps."thumby" = tl."thumby";
+  deps."ticket" = tl."ticket";
+  deps."titlecaps" = tl."titlecaps";
+  deps."titlefoot" = tl."titlefoot";
+  deps."titlepic" = tl."titlepic";
+  deps."titleref" = tl."titleref";
+  deps."titlesec" = tl."titlesec";
+  deps."titling" = tl."titling";
+  deps."tocbibind" = tl."tocbibind";
+  deps."tocdata" = tl."tocdata";
+  deps."tocloft" = tl."tocloft";
+  deps."tocvsec2" = tl."tocvsec2";
+  deps."todo" = tl."todo";
+  deps."todonotes" = tl."todonotes";
+  deps."tokcycle" = tl."tokcycle";
+  deps."tokenizer" = tl."tokenizer";
+  deps."toolbox" = tl."toolbox";
+  deps."topfloat" = tl."topfloat";
+  deps."topiclongtable" = tl."topiclongtable";
+  deps."totcount" = tl."totcount";
+  deps."totpages" = tl."totpages";
+  deps."translations" = tl."translations";
+  deps."trfsigns" = tl."trfsigns";
+  deps."trimspaces" = tl."trimspaces";
+  deps."trivfloat" = tl."trivfloat";
+  deps."trsym" = tl."trsym";
+  deps."truncate" = tl."truncate";
+  deps."tucv" = tl."tucv";
+  deps."turnthepage" = tl."turnthepage";
+  deps."twoinone" = tl."twoinone";
+  deps."twoup" = tl."twoup";
+  deps."txgreeks" = tl."txgreeks";
+  deps."type1cm" = tl."type1cm";
+  deps."typed-checklist" = tl."typed-checklist";
+  deps."typeface" = tl."typeface";
+  deps."typoaid" = tl."typoaid";
+  deps."typogrid" = tl."typogrid";
+  deps."uassign" = tl."uassign";
+  deps."ucs" = tl."ucs";
+  deps."uebungsblatt" = tl."uebungsblatt";
+  deps."umoline" = tl."umoline";
+  deps."underlin" = tl."underlin";
+  deps."underoverlap" = tl."underoverlap";
+  deps."undolabl" = tl."undolabl";
+  deps."units" = tl."units";
+  deps."unravel" = tl."unravel";
+  deps."upmethodology" = tl."upmethodology";
+  deps."upquote" = tl."upquote";
+  deps."uri" = tl."uri";
+  deps."ushort" = tl."ushort";
+  deps."uspace" = tl."uspace";
+  deps."uwmslide" = tl."uwmslide";
+  deps."variablelm" = tl."variablelm";
+  deps."varindex" = tl."varindex";
+  deps."varsfromjobname" = tl."varsfromjobname";
+  deps."varwidth" = tl."varwidth";
+  deps."vdmlisting" = tl."vdmlisting";
+  deps."verbasef" = tl."verbasef";
+  deps."verbatimbox" = tl."verbatimbox";
+  deps."verbatimcopy" = tl."verbatimcopy";
+  deps."verbdef" = tl."verbdef";
+  deps."verbments" = tl."verbments";
+  deps."version" = tl."version";
+  deps."versions" = tl."versions";
+  deps."versonotes" = tl."versonotes";
+  deps."vertbars" = tl."vertbars";
+  deps."vgrid" = tl."vgrid";
+  deps."vhistory" = tl."vhistory";
+  deps."vmargin" = tl."vmargin";
+  deps."volumes" = tl."volumes";
+  deps."vpe" = tl."vpe";
+  deps."vruler" = tl."vruler";
+  deps."vtable" = tl."vtable";
+  deps."vwcol" = tl."vwcol";
+  deps."wallcalendar" = tl."wallcalendar";
+  deps."wallpaper" = tl."wallpaper";
+  deps."warning" = tl."warning";
+  deps."warpcol" = tl."warpcol";
+  deps."was" = tl."was";
+  deps."webquiz" = tl."webquiz";
+  deps."widetable" = tl."widetable";
+  deps."widows-and-orphans" = tl."widows-and-orphans";
+  deps."williams" = tl."williams";
+  deps."withargs" = tl."withargs";
+  deps."wordcount" = tl."wordcount";
+  deps."wordlike" = tl."wordlike";
+  deps."worksheet" = tl."worksheet";
+  deps."wrapfig" = tl."wrapfig";
+  deps."wtref" = tl."wtref";
+  deps."xargs" = tl."xargs";
+  deps."xassoccnt" = tl."xassoccnt";
+  deps."xbmks" = tl."xbmks";
+  deps."xcntperchap" = tl."xcntperchap";
+  deps."xcolor-material" = tl."xcolor-material";
+  deps."xcolor-solarized" = tl."xcolor-solarized";
+  deps."xcomment" = tl."xcomment";
+  deps."xcookybooky" = tl."xcookybooky";
+  deps."xcpdftips" = tl."xcpdftips";
+  deps."xdoc" = tl."xdoc";
+  deps."xellipsis" = tl."xellipsis";
+  deps."xfakebold" = tl."xfakebold";
+  deps."xfor" = tl."xfor";
+  deps."xhfill" = tl."xhfill";
+  deps."xifthen" = tl."xifthen";
+  deps."xint" = tl."xint";
+  deps."xltabular" = tl."xltabular";
+  deps."xmpincl" = tl."xmpincl";
+  deps."xnewcommand" = tl."xnewcommand";
+  deps."xoptarg" = tl."xoptarg";
+  deps."xpatch" = tl."xpatch";
+  deps."xpeek" = tl."xpeek";
+  deps."xprintlen" = tl."xprintlen";
+  deps."xpunctuate" = tl."xpunctuate";
+  deps."xsavebox" = tl."xsavebox";
+  deps."xsim" = tl."xsim";
+  deps."xstring" = tl."xstring";
+  deps."xtab" = tl."xtab";
+  deps."xurl" = tl."xurl";
+  deps."xwatermark" = tl."xwatermark";
+  deps."xytree" = tl."xytree";
+  deps."yafoot" = tl."yafoot";
+  deps."yaletter" = tl."yaletter";
+  deps."yagusylo" = tl."yagusylo";
+  deps."ycbook" = tl."ycbook";
+  deps."ydoc" = tl."ydoc";
+  deps."yplan" = tl."yplan";
+  deps."zebra-goodies" = tl."zebra-goodies";
+  deps."zed-csp" = tl."zed-csp";
+  deps."ziffer" = tl."ziffer";
+  deps."zwgetfdate" = tl."zwgetfdate";
+  deps."zwpagelayout" = tl."zwpagelayout";
+  sha512.run = "278401d543e2dfa2ed93138b54c55e43d199f97ac6087421de844ff3e36507256e7eca7764f9c3df820aff2f23bdd29397dff64f800fcdca8de36a95ff3c1d05";
+};
+"collection-latexrecommended" = {
+  stripPrefix = 0;
+  deps."collection-latex" = tl."collection-latex";
+  deps."anysize" = tl."anysize";
+  deps."beamer" = tl."beamer";
+  deps."booktabs" = tl."booktabs";
+  deps."breqn" = tl."breqn";
+  deps."caption" = tl."caption";
+  deps."cite" = tl."cite";
+  deps."cmap" = tl."cmap";
+  deps."crop" = tl."crop";
+  deps."ctable" = tl."ctable";
+  deps."eso-pic" = tl."eso-pic";
+  deps."euenc" = tl."euenc";
+  deps."euler" = tl."euler";
+  deps."etoolbox" = tl."etoolbox";
+  deps."extsizes" = tl."extsizes";
+  deps."fancybox" = tl."fancybox";
+  deps."fancyref" = tl."fancyref";
+  deps."fancyvrb" = tl."fancyvrb";
+  deps."filehook" = tl."filehook";
+  deps."float" = tl."float";
+  deps."fontspec" = tl."fontspec";
+  deps."footnotehyper" = tl."footnotehyper";
+  deps."fp" = tl."fp";
+  deps."index" = tl."index";
+  deps."jknapltx" = tl."jknapltx";
+  deps."koma-script" = tl."koma-script";
+  deps."latexbug" = tl."latexbug";
+  deps."l3backend" = tl."l3backend";
+  deps."l3experimental" = tl."l3experimental";
+  deps."l3kernel" = tl."l3kernel";
+  deps."l3packages" = tl."l3packages";
+  deps."lineno" = tl."lineno";
+  deps."listings" = tl."listings";
+  deps."lwarp" = tl."lwarp";
+  deps."mathspec" = tl."mathspec";
+  deps."mathtools" = tl."mathtools";
+  deps."mdwtools" = tl."mdwtools";
+  deps."memoir" = tl."memoir";
+  deps."metalogo" = tl."metalogo";
+  deps."microtype" = tl."microtype";
+  deps."ms" = tl."ms";
+  deps."ntgclass" = tl."ntgclass";
+  deps."parskip" = tl."parskip";
+  deps."pdfpages" = tl."pdfpages";
+  deps."polyglossia" = tl."polyglossia";
+  deps."psfrag" = tl."psfrag";
+  deps."ragged2e" = tl."ragged2e";
+  deps."rcs" = tl."rcs";
+  deps."sansmath" = tl."sansmath";
+  deps."section" = tl."section";
+  deps."seminar" = tl."seminar";
+  deps."sepnum" = tl."sepnum";
+  deps."setspace" = tl."setspace";
+  deps."subfig" = tl."subfig";
+  deps."textcase" = tl."textcase";
+  deps."thumbpdf" = tl."thumbpdf";
+  deps."translator" = tl."translator";
+  deps."typehtml" = tl."typehtml";
+  deps."ucharcat" = tl."ucharcat";
+  deps."underscore" = tl."underscore";
+  deps."unicode-math" = tl."unicode-math";
+  deps."xcolor" = tl."xcolor";
+  deps."xkeyval" = tl."xkeyval";
+  deps."xltxtra" = tl."xltxtra";
+  deps."xunicode" = tl."xunicode";
+  sha512.run = "b4b677811f192eaa7a56f5208807a36c01e930ce966012bd44231b80fd39480a5103b634d2a2b349c8e6999e47e7864b1e6cdbb1052f6f5b803deeadb51cf513";
+};
+"collection-luatex" = {
+  stripPrefix = 0;
+  deps."collection-basic" = tl."collection-basic";
+  deps."addliga" = tl."addliga";
+  deps."auto-pst-pdf-lua" = tl."auto-pst-pdf-lua";
+  deps."bezierplot" = tl."bezierplot";
+  deps."checkcites" = tl."checkcites";
+  deps."chickenize" = tl."chickenize";
+  deps."combofont" = tl."combofont";
+  deps."cstypo" = tl."cstypo";
+  deps."ctablestack" = tl."ctablestack";
+  deps."enigma" = tl."enigma";
+  deps."interpreter" = tl."interpreter";
+  deps."kanaparser" = tl."kanaparser";
+  deps."lua-visual-debug" = tl."lua-visual-debug";
+  deps."lua2dox" = tl."lua2dox";
+  deps."luacode" = tl."luacode";
+  deps."luahyphenrules" = tl."luahyphenrules";
+  deps."luaimageembed" = tl."luaimageembed";
+  deps."luaindex" = tl."luaindex";
+  deps."luainputenc" = tl."luainputenc";
+  deps."luaintro" = tl."luaintro";
+  deps."lualatex-doc" = tl."lualatex-doc";
+  deps."lualatex-math" = tl."lualatex-math";
+  deps."lualatex-truncate" = tl."lualatex-truncate";
+  deps."lualibs" = tl."lualibs";
+  deps."luamplib" = tl."luamplib";
+  deps."luaotfload" = tl."luaotfload";
+  deps."luapackageloader" = tl."luapackageloader";
+  deps."luarandom" = tl."luarandom";
+  deps."luatex85" = tl."luatex85";
+  deps."luatexbase" = tl."luatexbase";
+  deps."luatexko" = tl."luatexko";
+  deps."luatextra" = tl."luatextra";
+  deps."luavlna" = tl."luavlna";
+  deps."luaxml" = tl."luaxml";
+  deps."nodetree" = tl."nodetree";
+  deps."odsfile" = tl."odsfile";
+  deps."pdfarticle" = tl."pdfarticle";
+  deps."placeat" = tl."placeat";
+  deps."plantuml" = tl."plantuml";
+  deps."selnolig" = tl."selnolig";
+  deps."spelling" = tl."spelling";
+  deps."typewriter" = tl."typewriter";
+  sha512.run = "0994c7425cc79885ec523d73d7ab2db08f32117d2bff82f4e5c0c4df6c70c012f7b90e04e8f83cc263cdf29c39b1104e09a92e86a94eda0c2e9cdfb66377fe50";
+};
+"collection-mathscience" = {
+  stripPrefix = 0;
+  deps."collection-fontsrecommended" = tl."collection-fontsrecommended";
+  deps."collection-latex" = tl."collection-latex";
+  deps."12many" = tl."12many";
+  deps."SIstyle" = tl."SIstyle";
+  deps."SIunits" = tl."SIunits";
+  deps."accents" = tl."accents";
+  deps."alg" = tl."alg";
+  deps."algobox" = tl."algobox";
+  deps."algorithm2e" = tl."algorithm2e";
+  deps."algorithmicx" = tl."algorithmicx";
+  deps."algorithms" = tl."algorithms";
+  deps."aligned-overset" = tl."aligned-overset";
+  deps."amscdx" = tl."amscdx";
+  deps."amstex" = tl."amstex";
+  deps."apxproof" = tl."apxproof";
+  deps."autobreak" = tl."autobreak";
+  deps."axodraw2" = tl."axodraw2";
+  deps."backnaur" = tl."backnaur";
+  deps."begriff" = tl."begriff";
+  deps."binomexp" = tl."binomexp";
+  deps."biocon" = tl."biocon";
+  deps."bitpattern" = tl."bitpattern";
+  deps."bohr" = tl."bohr";
+  deps."boldtensors" = tl."boldtensors";
+  deps."bosisio" = tl."bosisio";
+  deps."bpchem" = tl."bpchem";
+  deps."bropd" = tl."bropd";
+  deps."bussproofs" = tl."bussproofs";
+  deps."bussproofs-extra" = tl."bussproofs-extra";
+  deps."bytefield" = tl."bytefield";
+  deps."calculation" = tl."calculation";
+  deps."cascade" = tl."cascade";
+  deps."ccfonts" = tl."ccfonts";
+  deps."chemarrow" = tl."chemarrow";
+  deps."chemcompounds" = tl."chemcompounds";
+  deps."chemcono" = tl."chemcono";
+  deps."chemexec" = tl."chemexec";
+  deps."chemformula" = tl."chemformula";
+  deps."chemgreek" = tl."chemgreek";
+  deps."chemmacros" = tl."chemmacros";
+  deps."chemnum" = tl."chemnum";
+  deps."chemschemex" = tl."chemschemex";
+  deps."chemsec" = tl."chemsec";
+  deps."chemstyle" = tl."chemstyle";
+  deps."clrscode" = tl."clrscode";
+  deps."clrscode3e" = tl."clrscode3e";
+  deps."codeanatomy" = tl."codeanatomy";
+  deps."commath" = tl."commath";
+  deps."complexity" = tl."complexity";
+  deps."computational-complexity" = tl."computational-complexity";
+  deps."concmath" = tl."concmath";
+  deps."concrete" = tl."concrete";
+  deps."conteq" = tl."conteq";
+  deps."correctmathalign" = tl."correctmathalign";
+  deps."cryptocode" = tl."cryptocode";
+  deps."delim" = tl."delim";
+  deps."delimseasy" = tl."delimseasy";
+  deps."delimset" = tl."delimset";
+  deps."derivative" = tl."derivative";
+  deps."diffcoeff" = tl."diffcoeff";
+  deps."digiconfigs" = tl."digiconfigs";
+  deps."dijkstra" = tl."dijkstra";
+  deps."drawmatrix" = tl."drawmatrix";
+  deps."drawstack" = tl."drawstack";
+  deps."dyntree" = tl."dyntree";
+  deps."ebproof" = tl."ebproof";
+  deps."econometrics" = tl."econometrics";
+  deps."eltex" = tl."eltex";
+  deps."emf" = tl."emf";
+  deps."endiagram" = tl."endiagram";
+  deps."engtlc" = tl."engtlc";
+  deps."eqexpl" = tl."eqexpl";
+  deps."eqnarray" = tl."eqnarray";
+  deps."eqnnumwarn" = tl."eqnnumwarn";
+  deps."extarrows" = tl."extarrows";
+  deps."extpfeil" = tl."extpfeil";
+  deps."faktor" = tl."faktor";
+  deps."fascicules" = tl."fascicules";
+  deps."fnspe" = tl."fnspe";
+  deps."fouridx" = tl."fouridx";
+  deps."functan" = tl."functan";
+  deps."galois" = tl."galois";
+  deps."gastex" = tl."gastex";
+  deps."gene-logic" = tl."gene-logic";
+  deps."ghsystem" = tl."ghsystem";
+  deps."glosmathtools" = tl."glosmathtools";
+  deps."gotoh" = tl."gotoh";
+  deps."grundgesetze" = tl."grundgesetze";
+  deps."gu" = tl."gu";
+  deps."hep" = tl."hep";
+  deps."hepnames" = tl."hepnames";
+  deps."hepparticles" = tl."hepparticles";
+  deps."hepthesis" = tl."hepthesis";
+  deps."hepunits" = tl."hepunits";
+  deps."includernw" = tl."includernw";
+  deps."interval" = tl."interval";
+  deps."ionumbers" = tl."ionumbers";
+  deps."isomath" = tl."isomath";
+  deps."jkmath" = tl."jkmath";
+  deps."karnaugh" = tl."karnaugh";
+  deps."karnaugh-map" = tl."karnaugh-map";
+  deps."karnaughmap" = tl."karnaughmap";
+  deps."kvmap" = tl."kvmap";
+  deps."logicproof" = tl."logicproof";
+  deps."longdivision" = tl."longdivision";
+  deps."lpform" = tl."lpform";
+  deps."lplfitch" = tl."lplfitch";
+  deps."lstbayes" = tl."lstbayes";
+  deps."mathcommand" = tl."mathcommand";
+  deps."mathcomp" = tl."mathcomp";
+  deps."mathfixs" = tl."mathfixs";
+  deps."mathpartir" = tl."mathpartir";
+  deps."mathpunctspace" = tl."mathpunctspace";
+  deps."matrix-skeleton" = tl."matrix-skeleton";
+  deps."matlab-prettifier" = tl."matlab-prettifier";
+  deps."mattens" = tl."mattens";
+  deps."memorygraphs" = tl."memorygraphs";
+  deps."mgltex" = tl."mgltex";
+  deps."mhchem" = tl."mhchem";
+  deps."mhequ" = tl."mhequ";
+  deps."miller" = tl."miller";
+  deps."mismath" = tl."mismath";
+  deps."multiobjective" = tl."multiobjective";
+  deps."mychemistry" = tl."mychemistry";
+  deps."natded" = tl."natded";
+  deps."nath" = tl."nath";
+  deps."nicematrix" = tl."nicematrix";
+  deps."nuc" = tl."nuc";
+  deps."nucleardata" = tl."nucleardata";
+  deps."objectz" = tl."objectz";
+  deps."oplotsymbl" = tl."oplotsymbl";
+  deps."ot-tableau" = tl."ot-tableau";
+  deps."oubraces" = tl."oubraces";
+  deps."perfectcut" = tl."perfectcut";
+  deps."physics" = tl."physics";
+  deps."pm-isomath" = tl."pm-isomath";
+  deps."polexpr" = tl."polexpr";
+  deps."prftree" = tl."prftree";
+  deps."proba" = tl."proba";
+  deps."proof-at-the-end" = tl."proof-at-the-end";
+  deps."prooftrees" = tl."prooftrees";
+  deps."pseudo" = tl."pseudo";
+  deps."pseudocode" = tl."pseudocode";
+  deps."pythonhighlight" = tl."pythonhighlight";
+  deps."qsharp" = tl."qsharp";
+  deps."rank-2-roots" = tl."rank-2-roots";
+  deps."rec-thy" = tl."rec-thy";
+  deps."revquantum" = tl."revquantum";
+  deps."ribbonproofs" = tl."ribbonproofs";
+  deps."rmathbr" = tl."rmathbr";
+  deps."sasnrdisplay" = tl."sasnrdisplay";
+  deps."sciposter" = tl."sciposter";
+  deps."sclang-prettifier" = tl."sclang-prettifier";
+  deps."scratchx" = tl."scratchx";
+  deps."sesamanuel" = tl."sesamanuel";
+  deps."sfg" = tl."sfg";
+  deps."shuffle" = tl."shuffle";
+  deps."simpler-wick" = tl."simpler-wick";
+  deps."simplewick" = tl."simplewick";
+  deps."siunitx" = tl."siunitx";
+  deps."skmath" = tl."skmath";
+  deps."spalign" = tl."spalign";
+  deps."stanli" = tl."stanli";
+  deps."statex" = tl."statex";
+  deps."statex2" = tl."statex2";
+  deps."statistics" = tl."statistics";
+  deps."statistik" = tl."statistik";
+  deps."statmath" = tl."statmath";
+  deps."steinmetz" = tl."steinmetz";
+  deps."stmaryrd" = tl."stmaryrd";
+  deps."structmech" = tl."structmech";
+  deps."struktex" = tl."struktex";
+  deps."substances" = tl."substances";
+  deps."subsupscripts" = tl."subsupscripts";
+  deps."subtext" = tl."subtext";
+  deps."susy" = tl."susy";
+  deps."syllogism" = tl."syllogism";
+  deps."sympytexpackage" = tl."sympytexpackage";
+  deps."synproof" = tl."synproof";
+  deps."t-angles" = tl."t-angles";
+  deps."tablor" = tl."tablor";
+  deps."tensind" = tl."tensind";
+  deps."tensor" = tl."tensor";
+  deps."tex-ewd" = tl."tex-ewd";
+  deps."textgreek" = tl."textgreek";
+  deps."textopo" = tl."textopo";
+  deps."thmbox" = tl."thmbox";
+  deps."turnstile" = tl."turnstile";
+  deps."ulqda" = tl."ulqda";
+  deps."unitsdef" = tl."unitsdef";
+  deps."venn" = tl."venn";
+  deps."witharrows" = tl."witharrows";
+  deps."xymtex" = tl."xymtex";
+  deps."yhmath" = tl."yhmath";
+  deps."youngtab" = tl."youngtab";
+  deps."ytableau" = tl."ytableau";
+  sha512.run = "8a57a2ca065d0bbcd1c7359802cd82806cb386be6b9324c154fc3d14d2fa155c0cfffc83317c6bebff6507b644c5d30c73687363c7191ab364d17b196ed297ce";
+};
+"collection-metapost" = {
+  stripPrefix = 0;
+  deps."collection-basic" = tl."collection-basic";
+  deps."automata" = tl."automata";
+  deps."bbcard" = tl."bbcard";
+  deps."blockdraw_mp" = tl."blockdraw_mp";
+  deps."bpolynomial" = tl."bpolynomial";
+  deps."cmarrows" = tl."cmarrows";
+  deps."drv" = tl."drv";
+  deps."dviincl" = tl."dviincl";
+  deps."emp" = tl."emp";
+  deps."epsincl" = tl."epsincl";
+  deps."expressg" = tl."expressg";
+  deps."exteps" = tl."exteps";
+  deps."featpost" = tl."featpost";
+  deps."feynmf" = tl."feynmf";
+  deps."feynmp-auto" = tl."feynmp-auto";
+  deps."fiziko" = tl."fiziko";
+  deps."garrigues" = tl."garrigues";
+  deps."gmp" = tl."gmp";
+  deps."hatching" = tl."hatching";
+  deps."latexmp" = tl."latexmp";
+  deps."mcf2graph" = tl."mcf2graph";
+  deps."metago" = tl."metago";
+  deps."metaobj" = tl."metaobj";
+  deps."metaplot" = tl."metaplot";
+  deps."metapost" = tl."metapost";
+  deps."metapost-colorbrewer" = tl."metapost-colorbrewer";
+  deps."metauml" = tl."metauml";
+  deps."mfpic" = tl."mfpic";
+  deps."mfpic4ode" = tl."mfpic4ode";
+  deps."mp3d" = tl."mp3d";
+  deps."mparrows" = tl."mparrows";
+  deps."mpattern" = tl."mpattern";
+  deps."mpcolornames" = tl."mpcolornames";
+  deps."mpgraphics" = tl."mpgraphics";
+  deps."mptrees" = tl."mptrees";
+  deps."piechartmp" = tl."piechartmp";
+  deps."repere" = tl."repere";
+  deps."roex" = tl."roex";
+  deps."roundrect" = tl."roundrect";
+  deps."shapes" = tl."shapes";
+  deps."slideshow" = tl."slideshow";
+  deps."splines" = tl."splines";
+  deps."suanpan" = tl."suanpan";
+  deps."textpath" = tl."textpath";
+  deps."threeddice" = tl."threeddice";
+  sha512.run = "09dfaa35971f85134d0854c08a99c4d2b01ddf08e8ab97449460bb99d1236a38c48643501e7bb56197a844491509af301da6c4f75a33d9286601633211ec7d93";
+};
+"collection-music" = {
+  stripPrefix = 0;
+  deps."collection-latex" = tl."collection-latex";
+  deps."abc" = tl."abc";
+  deps."autosp" = tl."autosp";
+  deps."bagpipe" = tl."bagpipe";
+  deps."chordbars" = tl."chordbars";
+  deps."chordbox" = tl."chordbox";
+  deps."ddphonism" = tl."ddphonism";
+  deps."figbas" = tl."figbas";
+  deps."gchords" = tl."gchords";
+  deps."gregoriotex" = tl."gregoriotex";
+  deps."gtrcrd" = tl."gtrcrd";
+  deps."guitar" = tl."guitar";
+  deps."guitarchordschemes" = tl."guitarchordschemes";
+  deps."guitartabs" = tl."guitartabs";
+  deps."harmony" = tl."harmony";
+  deps."leadsheets" = tl."leadsheets";
+  deps."latex4musicians" = tl."latex4musicians";
+  deps."lilyglyphs" = tl."lilyglyphs";
+  deps."lyluatex" = tl."lyluatex";
+  deps."m-tx" = tl."m-tx";
+  deps."musicography" = tl."musicography";
+  deps."musixguit" = tl."musixguit";
+  deps."musixtex" = tl."musixtex";
+  deps."musixtex-fonts" = tl."musixtex-fonts";
+  deps."musixtnt" = tl."musixtnt";
+  deps."octave" = tl."octave";
+  deps."piano" = tl."piano";
+  deps."pmx" = tl."pmx";
+  deps."pmxchords" = tl."pmxchords";
+  deps."songbook" = tl."songbook";
+  deps."songs" = tl."songs";
+  deps."xpiano" = tl."xpiano";
+  sha512.run = "a4ad811435b9b6d51d59c6fa09fa20c82d8adf455fccca3121711f0814a1d73f10b3549d928555cd34ac9917accb1748f0a7ed3ebafd979833d8e6ebb146efd1";
+};
+"collection-pictures" = {
+  stripPrefix = 0;
+  deps."collection-basic" = tl."collection-basic";
+  deps."adigraph" = tl."adigraph";
+  deps."aobs-tikz" = tl."aobs-tikz";
+  deps."askmaps" = tl."askmaps";
+  deps."asyfig" = tl."asyfig";
+  deps."asypictureb" = tl."asypictureb";
+  deps."autoarea" = tl."autoarea";
+  deps."bardiag" = tl."bardiag";
+  deps."beamerswitch" = tl."beamerswitch";
+  deps."binarytree" = tl."binarytree";
+  deps."blochsphere" = tl."blochsphere";
+  deps."bloques" = tl."bloques";
+  deps."blox" = tl."blox";
+  deps."bodegraph" = tl."bodegraph";
+  deps."bondgraph" = tl."bondgraph";
+  deps."bondgraphs" = tl."bondgraphs";
+  deps."braids" = tl."braids";
+  deps."bxeepic" = tl."bxeepic";
+  deps."cachepic" = tl."cachepic";
+  deps."callouts" = tl."callouts";
+  deps."celtic" = tl."celtic";
+  deps."chemfig" = tl."chemfig";
+  deps."combinedgraphics" = tl."combinedgraphics";
+  deps."circuit-macros" = tl."circuit-macros";
+  deps."circuitikz" = tl."circuitikz";
+  deps."curve" = tl."curve";
+  deps."curve2e" = tl."curve2e";
+  deps."curves" = tl."curves";
+  deps."dcpic" = tl."dcpic";
+  deps."diagmac2" = tl."diagmac2";
+  deps."ditaa" = tl."ditaa";
+  deps."doc-pictex" = tl."doc-pictex";
+  deps."dottex" = tl."dottex";
+  deps."dot2texi" = tl."dot2texi";
+  deps."dratex" = tl."dratex";
+  deps."drs" = tl."drs";
+  deps."duotenzor" = tl."duotenzor";
+  deps."dynkin-diagrams" = tl."dynkin-diagrams";
+  deps."ecgdraw" = tl."ecgdraw";
+  deps."eepic" = tl."eepic";
+  deps."ellipse" = tl."ellipse";
+  deps."endofproofwd" = tl."endofproofwd";
+  deps."epspdf" = tl."epspdf";
+  deps."epspdfconversion" = tl."epspdfconversion";
+  deps."esk" = tl."esk";
+  deps."euflag" = tl."euflag";
+  deps."fast-diagram" = tl."fast-diagram";
+  deps."fig4latex" = tl."fig4latex";
+  deps."fitbox" = tl."fitbox";
+  deps."flowchart" = tl."flowchart";
+  deps."forest" = tl."forest";
+  deps."genealogytree" = tl."genealogytree";
+  deps."getmap" = tl."getmap";
+  deps."gincltex" = tl."gincltex";
+  deps."gnuplottex" = tl."gnuplottex";
+  deps."gradientframe" = tl."gradientframe";
+  deps."grafcet" = tl."grafcet";
+  deps."graph35" = tl."graph35";
+  deps."graphicxpsd" = tl."graphicxpsd";
+  deps."graphviz" = tl."graphviz";
+  deps."gtrlib-largetrees" = tl."gtrlib-largetrees";
+  deps."harveyballs" = tl."harveyballs";
+  deps."here" = tl."here";
+  deps."hf-tikz" = tl."hf-tikz";
+  deps."hobby" = tl."hobby";
+  deps."hvfloat" = tl."hvfloat";
+  deps."istgame" = tl."istgame";
+  deps."kblocks" = tl."kblocks";
+  deps."knitting" = tl."knitting";
+  deps."knittingpattern" = tl."knittingpattern";
+  deps."ladder" = tl."ladder";
+  deps."lapdf" = tl."lapdf";
+  deps."latex-make" = tl."latex-make";
+  deps."lpic" = tl."lpic";
+  deps."lroundrect" = tl."lroundrect";
+  deps."luamesh" = tl."luamesh";
+  deps."luasseq" = tl."luasseq";
+  deps."maker" = tl."maker";
+  deps."makeshape" = tl."makeshape";
+  deps."mathspic" = tl."mathspic";
+  deps."milsymb" = tl."milsymb";
+  deps."miniplot" = tl."miniplot";
+  deps."mkpic" = tl."mkpic";
+  deps."modiagram" = tl."modiagram";
+  deps."neuralnetwork" = tl."neuralnetwork";
+  deps."numericplots" = tl."numericplots";
+  deps."pb-diagram" = tl."pb-diagram";
+  deps."penrose" = tl."penrose";
+  deps."petri-nets" = tl."petri-nets";
+  deps."pgf" = tl."pgf";
+  deps."pgf-blur" = tl."pgf-blur";
+  deps."pgf-cmykshadings" = tl."pgf-cmykshadings";
+  deps."pgf-soroban" = tl."pgf-soroban";
+  deps."pgf-spectra" = tl."pgf-spectra";
+  deps."pgf-umlcd" = tl."pgf-umlcd";
+  deps."pgf-umlsd" = tl."pgf-umlsd";
+  deps."pgfgantt" = tl."pgfgantt";
+  deps."pgfkeyx" = tl."pgfkeyx";
+  deps."pgfmolbio" = tl."pgfmolbio";
+  deps."pgfmorepages" = tl."pgfmorepages";
+  deps."pgfopts" = tl."pgfopts";
+  deps."pgfornament" = tl."pgfornament";
+  deps."pgfplots" = tl."pgfplots";
+  deps."picinpar" = tl."picinpar";
+  deps."pict2e" = tl."pict2e";
+  deps."pictex" = tl."pictex";
+  deps."pictex2" = tl."pictex2";
+  deps."pinlabel" = tl."pinlabel";
+  deps."pixelart" = tl."pixelart";
+  deps."pmgraph" = tl."pmgraph";
+  deps."postage" = tl."postage";
+  deps."prerex" = tl."prerex";
+  deps."productbox" = tl."productbox";
+  deps."ptolemaicastronomy" = tl."ptolemaicastronomy";
+  deps."pxpgfmark" = tl."pxpgfmark";
+  deps."qcircuit" = tl."qcircuit";
+  deps."quantikz" = tl."quantikz";
+  deps."qrcode" = tl."qrcode";
+  deps."randbild" = tl."randbild";
+  deps."randomwalk" = tl."randomwalk";
+  deps."realhats" = tl."realhats";
+  deps."reotex" = tl."reotex";
+  deps."rviewport" = tl."rviewport";
+  deps."sa-tikz" = tl."sa-tikz";
+  deps."schemabloc" = tl."schemabloc";
+  deps."scsnowman" = tl."scsnowman";
+  deps."scratch" = tl."scratch";
+  deps."scratch3" = tl."scratch3";
+  deps."setdeck" = tl."setdeck";
+  deps."simpleoptics" = tl."simpleoptics";
+  deps."signchart" = tl."signchart";
+  deps."smartdiagram" = tl."smartdiagram";
+  deps."spath3" = tl."spath3";
+  deps."spectralsequences" = tl."spectralsequences";
+  deps."swimgraf" = tl."swimgraf";
+  deps."table-fct" = tl."table-fct";
+  deps."texdraw" = tl."texdraw";
+  deps."ticollege" = tl."ticollege";
+  deps."tipfr" = tl."tipfr";
+  deps."tikz-3dplot" = tl."tikz-3dplot";
+  deps."tikz-bayesnet" = tl."tikz-bayesnet";
+  deps."tikz-cd" = tl."tikz-cd";
+  deps."tikz-dependency" = tl."tikz-dependency";
+  deps."tikz-dimline" = tl."tikz-dimline";
+  deps."tikz-feynhand" = tl."tikz-feynhand";
+  deps."tikz-feynman" = tl."tikz-feynman";
+  deps."tikz-imagelabels" = tl."tikz-imagelabels";
+  deps."tikz-inet" = tl."tikz-inet";
+  deps."tikz-kalender" = tl."tikz-kalender";
+  deps."tikz-karnaugh" = tl."tikz-karnaugh";
+  deps."tikz-ladder" = tl."tikz-ladder";
+  deps."tikz-layers" = tl."tikz-layers";
+  deps."tikz-nef" = tl."tikz-nef";
+  deps."tikz-network" = tl."tikz-network";
+  deps."tikz-opm" = tl."tikz-opm";
+  deps."tikz-optics" = tl."tikz-optics";
+  deps."tikz-page" = tl."tikz-page";
+  deps."tikz-palattice" = tl."tikz-palattice";
+  deps."tikz-qtree" = tl."tikz-qtree";
+  deps."tikz-relay" = tl."tikz-relay";
+  deps."tikz-sfc" = tl."tikz-sfc";
+  deps."tikz-timing" = tl."tikz-timing";
+  deps."tikz-truchet" = tl."tikz-truchet";
+  deps."tikzcodeblocks" = tl."tikzcodeblocks";
+  deps."tikzducks" = tl."tikzducks";
+  deps."tikzinclude" = tl."tikzinclude";
+  deps."tikzlings" = tl."tikzlings";
+  deps."tikzmark" = tl."tikzmark";
+  deps."tikzmarmots" = tl."tikzmarmots";
+  deps."tikzorbital" = tl."tikzorbital";
+  deps."tikzpagenodes" = tl."tikzpagenodes";
+  deps."tikzpfeile" = tl."tikzpfeile";
+  deps."tikzpeople" = tl."tikzpeople";
+  deps."tikzposter" = tl."tikzposter";
+  deps."tikzscale" = tl."tikzscale";
+  deps."tikzsymbols" = tl."tikzsymbols";
+  deps."timing-diagrams" = tl."timing-diagrams";
+  deps."tqft" = tl."tqft";
+  deps."tkz-base" = tl."tkz-base";
+  deps."tkz-berge" = tl."tkz-berge";
+  deps."tkz-doc" = tl."tkz-doc";
+  deps."tkz-euclide" = tl."tkz-euclide";
+  deps."tkz-fct" = tl."tkz-fct";
+  deps."tkz-graph" = tl."tkz-graph";
+  deps."tkz-kiviat" = tl."tkz-kiviat";
+  deps."tkz-linknodes" = tl."tkz-linknodes";
+  deps."tkz-orm" = tl."tkz-orm";
+  deps."tkz-tab" = tl."tkz-tab";
+  deps."tsemlines" = tl."tsemlines";
+  deps."tufte-latex" = tl."tufte-latex";
+  deps."venndiagram" = tl."venndiagram";
+  deps."visualpstricks" = tl."visualpstricks";
+  deps."xpicture" = tl."xpicture";
+  deps."xypic" = tl."xypic";
+  sha512.run = "08879ddc094db933adadc42a75a54aab493c5d9552b84d355f71b54572cd01e67a97baa1a48fc13fcea90da88893a5e0c8db8b90c7f96bd4861621de06ff3e84";
+};
+"collection-plaingeneric" = {
+  stripPrefix = 0;
+  deps."collection-basic" = tl."collection-basic";
+  deps."abbr" = tl."abbr";
+  deps."abstyles" = tl."abstyles";
+  deps."apnum" = tl."apnum";
+  deps."autoaligne" = tl."autoaligne";
+  deps."barr" = tl."barr";
+  deps."bitelist" = tl."bitelist";
+  deps."borceux" = tl."borceux";
+  deps."c-pascal" = tl."c-pascal";
+  deps."catcodes" = tl."catcodes";
+  deps."chronosys" = tl."chronosys";
+  deps."colorsep" = tl."colorsep";
+  deps."cweb-old" = tl."cweb-old";
+  deps."dinat" = tl."dinat";
+  deps."dirtree" = tl."dirtree";
+  deps."docbytex" = tl."docbytex";
+  deps."dowith" = tl."dowith";
+  deps."eijkhout" = tl."eijkhout";
+  deps."encxvlna" = tl."encxvlna";
+  deps."epigram" = tl."epigram";
+  deps."epsf" = tl."epsf";
+  deps."epsf-dvipdfmx" = tl."epsf-dvipdfmx";
+  deps."fenixpar" = tl."fenixpar";
+  deps."figflow" = tl."figflow";
+  deps."fixpdfmag" = tl."fixpdfmag";
+  deps."fltpoint" = tl."fltpoint";
+  deps."fntproof" = tl."fntproof";
+  deps."font-change" = tl."font-change";
+  deps."fontch" = tl."fontch";
+  deps."fontname" = tl."fontname";
+  deps."gates" = tl."gates";
+  deps."genmisc" = tl."genmisc";
+  deps."getoptk" = tl."getoptk";
+  deps."gfnotation" = tl."gfnotation";
+  deps."gobble" = tl."gobble";
+  deps."graphics-pln" = tl."graphics-pln";
+  deps."gtl" = tl."gtl";
+  deps."hlist" = tl."hlist";
+  deps."hyplain" = tl."hyplain";
+  deps."ifetex" = tl."ifetex";
+  deps."iftex" = tl."iftex";
+  deps."insbox" = tl."insbox";
+  deps."js-misc" = tl."js-misc";
+  deps."kastrup" = tl."kastrup";
+  deps."lambda-lists" = tl."lambda-lists";
+  deps."langcode" = tl."langcode";
+  deps."lecturer" = tl."lecturer";
+  deps."librarian" = tl."librarian";
+  deps."listofitems" = tl."listofitems";
+  deps."mathdots" = tl."mathdots";
+  deps."metatex" = tl."metatex";
+  deps."midnight" = tl."midnight";
+  deps."mkpattern" = tl."mkpattern";
+  deps."modulus" = tl."modulus";
+  deps."multido" = tl."multido";
+  deps."navigator" = tl."navigator";
+  deps."newsletr" = tl."newsletr";
+  deps."ofs" = tl."ofs";
+  deps."olsak-misc" = tl."olsak-misc";
+  deps."path" = tl."path";
+  deps."pdf-trans" = tl."pdf-trans";
+  deps."pitex" = tl."pitex";
+  deps."placeins-plain" = tl."placeins-plain";
+  deps."plainpkg" = tl."plainpkg";
+  deps."plipsum" = tl."plipsum";
+  deps."plnfss" = tl."plnfss";
+  deps."plstmary" = tl."plstmary";
+  deps."poormanlog" = tl."poormanlog";
+  deps."present" = tl."present";
+  deps."randomlist" = tl."randomlist";
+  deps."resumemac" = tl."resumemac";
+  deps."schemata" = tl."schemata";
+  deps."shade" = tl."shade";
+  deps."simplekv" = tl."simplekv";
+  deps."systeme" = tl."systeme";
+  deps."tabto-generic" = tl."tabto-generic";
+  deps."termmenu" = tl."termmenu";
+  deps."tex-ps" = tl."tex-ps";
+  deps."tex4ht" = tl."tex4ht";
+  deps."texapi" = tl."texapi";
+  deps."texdate" = tl."texdate";
+  deps."texinfo" = tl."texinfo";
+  deps."timetable" = tl."timetable";
+  deps."tracklang" = tl."tracklang";
+  deps."treetex" = tl."treetex";
+  deps."trigonometry" = tl."trigonometry";
+  deps."ulem" = tl."ulem";
+  deps."upca" = tl."upca";
+  deps."varisize" = tl."varisize";
+  deps."xii" = tl."xii";
+  deps."xii-lat" = tl."xii-lat";
+  deps."xlop" = tl."xlop";
+  deps."yax" = tl."yax";
+  sha512.run = "9ef13861626d3431dae68447b371f05ddbd0eaa3f81a41eaa830825df7775a12a824a36e9be8c14a1b3bcf25f7acafda0b010d3c6021e6cf2b2eb17b3f91c8ef";
+};
+"collection-pstricks" = {
+  stripPrefix = 0;
+  deps."collection-basic" = tl."collection-basic";
+  deps."collection-plaingeneric" = tl."collection-plaingeneric";
+  deps."auto-pst-pdf" = tl."auto-pst-pdf";
+  deps."bclogo" = tl."bclogo";
+  deps."dsptricks" = tl."dsptricks";
+  deps."makeplot" = tl."makeplot";
+  deps."pdftricks" = tl."pdftricks";
+  deps."pdftricks2" = tl."pdftricks2";
+  deps."pedigree-perl" = tl."pedigree-perl";
+  deps."psbao" = tl."psbao";
+  deps."pst-2dplot" = tl."pst-2dplot";
+  deps."pst-3d" = tl."pst-3d";
+  deps."pst-3dplot" = tl."pst-3dplot";
+  deps."pst-abspos" = tl."pst-abspos";
+  deps."pst-arrow" = tl."pst-arrow";
+  deps."pst-am" = tl."pst-am";
+  deps."pst-antiprism" = tl."pst-antiprism";
+  deps."pst-asr" = tl."pst-asr";
+  deps."pst-bar" = tl."pst-bar";
+  deps."pst-barcode" = tl."pst-barcode";
+  deps."pst-bezier" = tl."pst-bezier";
+  deps."pst-blur" = tl."pst-blur";
+  deps."pst-bspline" = tl."pst-bspline";
+  deps."pst-calculate" = tl."pst-calculate";
+  deps."pst-calendar" = tl."pst-calendar";
+  deps."pst-cie" = tl."pst-cie";
+  deps."pst-circ" = tl."pst-circ";
+  deps."pst-coil" = tl."pst-coil";
+  deps."pst-contourplot" = tl."pst-contourplot";
+  deps."pst-cox" = tl."pst-cox";
+  deps."pst-dart" = tl."pst-dart";
+  deps."pst-dbicons" = tl."pst-dbicons";
+  deps."pst-diffraction" = tl."pst-diffraction";
+  deps."pst-electricfield" = tl."pst-electricfield";
+  deps."pst-eps" = tl."pst-eps";
+  deps."pst-eucl" = tl."pst-eucl";
+  deps."pst-exa" = tl."pst-exa";
+  deps."pst-feyn" = tl."pst-feyn";
+  deps."pst-fill" = tl."pst-fill";
+  deps."pst-fit" = tl."pst-fit";
+  deps."pst-fr3d" = tl."pst-fr3d";
+  deps."pst-fractal" = tl."pst-fractal";
+  deps."pst-fun" = tl."pst-fun";
+  deps."pst-func" = tl."pst-func";
+  deps."pst-gantt" = tl."pst-gantt";
+  deps."pst-geo" = tl."pst-geo";
+  deps."pst-geometrictools" = tl."pst-geometrictools";
+  deps."pst-ghsb" = tl."pst-ghsb";
+  deps."pst-gr3d" = tl."pst-gr3d";
+  deps."pst-grad" = tl."pst-grad";
+  deps."pst-graphicx" = tl."pst-graphicx";
+  deps."pst-infixplot" = tl."pst-infixplot";
+  deps."pst-intersect" = tl."pst-intersect";
+  deps."pst-jtree" = tl."pst-jtree";
+  deps."pst-knot" = tl."pst-knot";
+  deps."pst-labo" = tl."pst-labo";
+  deps."pst-layout" = tl."pst-layout";
+  deps."pst-lens" = tl."pst-lens";
+  deps."pst-light3d" = tl."pst-light3d";
+  deps."pst-lsystem" = tl."pst-lsystem";
+  deps."pst-magneticfield" = tl."pst-magneticfield";
+  deps."pst-marble" = tl."pst-marble";
+  deps."pst-math" = tl."pst-math";
+  deps."pst-mirror" = tl."pst-mirror";
+  deps."pst-moire" = tl."pst-moire";
+  deps."pst-node" = tl."pst-node";
+  deps."pst-ob3d" = tl."pst-ob3d";
+  deps."pst-ode" = tl."pst-ode";
+  deps."pst-optexp" = tl."pst-optexp";
+  deps."pst-optic" = tl."pst-optic";
+  deps."pst-osci" = tl."pst-osci";
+  deps."pst-ovl" = tl."pst-ovl";
+  deps."pst-pad" = tl."pst-pad";
+  deps."pst-pdgr" = tl."pst-pdgr";
+  deps."pst-pdf" = tl."pst-pdf";
+  deps."pst-perspective" = tl."pst-perspective";
+  deps."pst-platon" = tl."pst-platon";
+  deps."pst-plot" = tl."pst-plot";
+  deps."pst-poker" = tl."pst-poker";
+  deps."pst-poly" = tl."pst-poly";
+  deps."pst-pulley" = tl."pst-pulley";
+  deps."pst-qtree" = tl."pst-qtree";
+  deps."pst-rputover" = tl."pst-rputover";
+  deps."pst-rubans" = tl."pst-rubans";
+  deps."pst-shell" = tl."pst-shell";
+  deps."pst-sigsys" = tl."pst-sigsys";
+  deps."pst-slpe" = tl."pst-slpe";
+  deps."pst-solarsystem" = tl."pst-solarsystem";
+  deps."pst-solides3d" = tl."pst-solides3d";
+  deps."pst-soroban" = tl."pst-soroban";
+  deps."pst-spectra" = tl."pst-spectra";
+  deps."pst-spinner" = tl."pst-spinner";
+  deps."pst-spirograph" = tl."pst-spirograph";
+  deps."pst-stru" = tl."pst-stru";
+  deps."pst-support" = tl."pst-support";
+  deps."pst-text" = tl."pst-text";
+  deps."pst-thick" = tl."pst-thick";
+  deps."pst-tools" = tl."pst-tools";
+  deps."pst-tree" = tl."pst-tree";
+  deps."pst-turtle" = tl."pst-turtle";
+  deps."pst-tvz" = tl."pst-tvz";
+  deps."pst-uml" = tl."pst-uml";
+  deps."pst-vectorian" = tl."pst-vectorian";
+  deps."pst-vehicle" = tl."pst-vehicle";
+  deps."pst-venn" = tl."pst-venn";
+  deps."pst-vowel" = tl."pst-vowel";
+  deps."pst-vue3d" = tl."pst-vue3d";
+  deps."pst2pdf" = tl."pst2pdf";
+  deps."pstricks" = tl."pstricks";
+  deps."pstricks-add" = tl."pstricks-add";
+  deps."pstricks_calcnotes" = tl."pstricks_calcnotes";
+  deps."uml" = tl."uml";
+  deps."vaucanson-g" = tl."vaucanson-g";
+  deps."vocaltract" = tl."vocaltract";
+  sha512.run = "336ecc5633674197d366aa52ad2ce650378868110ccc8203c64b9a2ebb69cfa2172230bd46f40acf38b1f984b4fb2d831a7747cca26b16a7d3b2c2ceef435020";
+};
+"collection-publishers" = {
+  stripPrefix = 0;
+  deps."collection-latex" = tl."collection-latex";
+  deps."IEEEconf" = tl."IEEEconf";
+  deps."IEEEtran" = tl."IEEEtran";
+  deps."aastex" = tl."aastex";
+  deps."abnt" = tl."abnt";
+  deps."abntex2" = tl."abntex2";
+  deps."acmart" = tl."acmart";
+  deps."acmconf" = tl."acmconf";
+  deps."active-conf" = tl."active-conf";
+  deps."adfathesis" = tl."adfathesis";
+  deps."afparticle" = tl."afparticle";
+  deps."afthesis" = tl."afthesis";
+  deps."aguplus" = tl."aguplus";
+  deps."aiaa" = tl."aiaa";
+  deps."ametsoc" = tl."ametsoc";
+  deps."anufinalexam" = tl."anufinalexam";
+  deps."aomart" = tl."aomart";
+  deps."apa" = tl."apa";
+  deps."apa6" = tl."apa6";
+  deps."apa6e" = tl."apa6e";
+  deps."arsclassica" = tl."arsclassica";
+  deps."articleingud" = tl."articleingud";
+  deps."asaetr" = tl."asaetr";
+  deps."ascelike" = tl."ascelike";
+  deps."asmeconf" = tl."asmeconf";
+  deps."asmejour" = tl."asmejour";
+  deps."aucklandthesis" = tl."aucklandthesis";
+  deps."bangorcsthesis" = tl."bangorcsthesis";
+  deps."bangorexam" = tl."bangorexam";
+  deps."bath-bst" = tl."bath-bst";
+  deps."beamer-FUBerlin" = tl."beamer-FUBerlin";
+  deps."beamer-verona" = tl."beamer-verona";
+  deps."beilstein" = tl."beilstein";
+  deps."bgteubner" = tl."bgteubner";
+  deps."br-lex" = tl."br-lex";
+  deps."brandeis-dissertation" = tl."brandeis-dissertation";
+  deps."brandeis-problemset" = tl."brandeis-problemset";
+  deps."cascadilla" = tl."cascadilla";
+  deps."cesenaexam" = tl."cesenaexam";
+  deps."chem-journal" = tl."chem-journal";
+  deps."chs-physics-report" = tl."chs-physics-report";
+  deps."cje" = tl."cje";
+  deps."classicthesis" = tl."classicthesis";
+  deps."cleanthesis" = tl."cleanthesis";
+  deps."cmpj" = tl."cmpj";
+  deps."confproc" = tl."confproc";
+  deps."cquthesis" = tl."cquthesis";
+  deps."dccpaper" = tl."dccpaper";
+  deps."dithesis" = tl."dithesis";
+  deps."ebook" = tl."ebook";
+  deps."ebsthesis" = tl."ebsthesis";
+  deps."ecothesis" = tl."ecothesis";
+  deps."ejpecp" = tl."ejpecp";
+  deps."ekaia" = tl."ekaia";
+  deps."elbioimp" = tl."elbioimp";
+  deps."els-cas-templates" = tl."els-cas-templates";
+  deps."elsarticle" = tl."elsarticle";
+  deps."elteikthesis" = tl."elteikthesis";
+  deps."emisa" = tl."emisa";
+  deps."erdc" = tl."erdc";
+  deps."estcpmm" = tl."estcpmm";
+  deps."etsvthor" = tl."etsvthor";
+  deps."facture-belge-simple-sans-tva" = tl."facture-belge-simple-sans-tva";
+  deps."fbithesis" = tl."fbithesis";
+  deps."fcavtex" = tl."fcavtex";
+  deps."fcltxdoc" = tl."fcltxdoc";
+  deps."fei" = tl."fei";
+  deps."ftc-notebook" = tl."ftc-notebook";
+  deps."gaceta" = tl."gaceta";
+  deps."gammas" = tl."gammas";
+  deps."gatech-thesis" = tl."gatech-thesis";
+  deps."gradstudentresume" = tl."gradstudentresume";
+  deps."grant" = tl."grant";
+  deps."gsemthesis" = tl."gsemthesis";
+  deps."gzt" = tl."gzt";
+  deps."h2020proposal" = tl."h2020proposal";
+  deps."hagenberg-thesis" = tl."hagenberg-thesis";
+  deps."har2nat" = tl."har2nat";
+  deps."hecthese" = tl."hecthese";
+  deps."hithesis" = tl."hithesis";
+  deps."hobete" = tl."hobete";
+  deps."hu-berlin-bundle" = tl."hu-berlin-bundle";
+  deps."hustthesis" = tl."hustthesis";
+  deps."icsv" = tl."icsv";
+  deps."ieeepes" = tl."ieeepes";
+  deps."ijmart" = tl."ijmart";
+  deps."ijsra" = tl."ijsra";
+  deps."imac" = tl."imac";
+  deps."imtekda" = tl."imtekda";
+  deps."inkpaper" = tl."inkpaper";
+  deps."iodhbwm" = tl."iodhbwm";
+  deps."iscram" = tl."iscram";
+  deps."jacow" = tl."jacow";
+  deps."jmlr" = tl."jmlr";
+  deps."jnuexam" = tl."jnuexam";
+  deps."jpsj" = tl."jpsj";
+  deps."kdgdocs" = tl."kdgdocs";
+  deps."kluwer" = tl."kluwer";
+  deps."ksp-thesis" = tl."ksp-thesis";
+  deps."ku-template" = tl."ku-template";
+  deps."langsci" = tl."langsci";
+  deps."limecv" = tl."limecv";
+  deps."lion-msc" = tl."lion-msc";
+  deps."llncsconf" = tl."llncsconf";
+  deps."lni" = tl."lni";
+  deps."lps" = tl."lps";
+  deps."matc3" = tl."matc3";
+  deps."matc3mem" = tl."matc3mem";
+  deps."mcmthesis" = tl."mcmthesis";
+  deps."mentis" = tl."mentis";
+  deps."mlacls" = tl."mlacls";
+  deps."mnras" = tl."mnras";
+  deps."modeles-factures-belges-assocs" = tl."modeles-factures-belges-assocs";
+  deps."msu-thesis" = tl."msu-thesis";
+  deps."mucproc" = tl."mucproc";
+  deps."mugsthesis" = tl."mugsthesis";
+  deps."musuos" = tl."musuos";
+  deps."muthesis" = tl."muthesis";
+  deps."mynsfc" = tl."mynsfc";
+  deps."nature" = tl."nature";
+  deps."navydocs" = tl."navydocs";
+  deps."nddiss" = tl."nddiss";
+  deps."ndsu-thesis" = tl."ndsu-thesis";
+  deps."novel" = tl."novel";
+  deps."nwejm" = tl."nwejm";
+  deps."nih" = tl."nih";
+  deps."nihbiosketch" = tl."nihbiosketch";
+  deps."nostarch" = tl."nostarch";
+  deps."nrc" = tl."nrc";
+  deps."onrannual" = tl."onrannual";
+  deps."opteng" = tl."opteng";
+  deps."philosophersimprint" = tl."philosophersimprint";
+  deps."pittetd" = tl."pittetd";
+  deps."pkuthss" = tl."pkuthss";
+  deps."powerdot-FUBerlin" = tl."powerdot-FUBerlin";
+  deps."powerdot-tuliplab" = tl."powerdot-tuliplab";
+  deps."pracjourn" = tl."pracjourn";
+  deps."procIAGssymp" = tl."procIAGssymp";
+  deps."proposal" = tl."proposal";
+  deps."prtec" = tl."prtec";
+  deps."ptptex" = tl."ptptex";
+  deps."quantumarticle" = tl."quantumarticle";
+  deps."resphilosophica" = tl."resphilosophica";
+  deps."resumecls" = tl."resumecls";
+  deps."revtex" = tl."revtex";
+  deps."revtex4" = tl."revtex4";
+  deps."rutitlepage" = tl."rutitlepage";
+  deps."ryersonsgsthesis" = tl."ryersonsgsthesis";
+  deps."ryethesis" = tl."ryethesis";
+  deps."sageep" = tl."sageep";
+  deps."sapthesis" = tl."sapthesis";
+  deps."schule" = tl."schule";
+  deps."scrjrnl" = tl."scrjrnl";
+  deps."scientific-thesis-cover" = tl."scientific-thesis-cover";
+  deps."sduthesis" = tl."sduthesis";
+  deps."seuthesis" = tl."seuthesis";
+  deps."seuthesix" = tl."seuthesix";
+  deps."soton" = tl."soton";
+  deps."sphdthesis" = tl."sphdthesis";
+  deps."spie" = tl."spie";
+  deps."sr-vorl" = tl."sr-vorl";
+  deps."srdp-mathematik" = tl."srdp-mathematik";
+  deps."stellenbosch" = tl."stellenbosch";
+  deps."suftesi" = tl."suftesi";
+  deps."sugconf" = tl."sugconf";
+  deps."tabriz-thesis" = tl."tabriz-thesis";
+  deps."technion-thesis-template" = tl."technion-thesis-template";
+  deps."texilikechaps" = tl."texilikechaps";
+  deps."texilikecover" = tl."texilikecover";
+  deps."thesis-ekf" = tl."thesis-ekf";
+  deps."thesis-gwu" = tl."thesis-gwu";
+  deps."thesis-qom" = tl."thesis-qom";
+  deps."thesis-titlepage-fhac" = tl."thesis-titlepage-fhac";
+  deps."thuaslogos" = tl."thuaslogos";
+  deps."thucoursework" = tl."thucoursework";
+  deps."thuthesis" = tl."thuthesis";
+  deps."timbreicmc" = tl."timbreicmc";
+  deps."tlc-article" = tl."tlc-article";
+  deps."topletter" = tl."topletter";
+  deps."toptesi" = tl."toptesi";
+  deps."tuda-ci" = tl."tuda-ci";
+  deps."tudscr" = tl."tudscr";
+  deps."tugboat" = tl."tugboat";
+  deps."tugboat-plain" = tl."tugboat-plain";
+  deps."turabian" = tl."turabian";
+  deps."tui" = tl."tui";
+  deps."uaclasses" = tl."uaclasses";
+  deps."uafthesis" = tl."uafthesis";
+  deps."uantwerpendocs" = tl."uantwerpendocs";
+  deps."ucalgmthesis" = tl."ucalgmthesis";
+  deps."ucbthesis" = tl."ucbthesis";
+  deps."ucdavisthesis" = tl."ucdavisthesis";
+  deps."ucsmonograph" = tl."ucsmonograph";
+  deps."ucthesis" = tl."ucthesis";
+  deps."uestcthesis" = tl."uestcthesis";
+  deps."uhhassignment" = tl."uhhassignment";
+  deps."uiucredborder" = tl."uiucredborder";
+  deps."uiucthesis" = tl."uiucthesis";
+  deps."ulthese" = tl."ulthese";
+  deps."umbclegislation" = tl."umbclegislation";
+  deps."umthesis" = tl."umthesis";
+  deps."umich-thesis" = tl."umich-thesis";
+  deps."unam-thesis" = tl."unam-thesis";
+  deps."unamth-template" = tl."unamth-template";
+  deps."unamthesis" = tl."unamthesis";
+  deps."unifith" = tl."unifith";
+  deps."unitn-bimrep" = tl."unitn-bimrep";
+  deps."univie-ling" = tl."univie-ling";
+  deps."unizgklasa" = tl."unizgklasa";
+  deps."unswcover" = tl."unswcover";
+  deps."uothesis" = tl."uothesis";
+  deps."urcls" = tl."urcls";
+  deps."uowthesis" = tl."uowthesis";
+  deps."uowthesistitlepage" = tl."uowthesistitlepage";
+  deps."uspatent" = tl."uspatent";
+  deps."ut-thesis" = tl."ut-thesis";
+  deps."utexasthesis" = tl."utexasthesis";
+  deps."uwthesis" = tl."uwthesis";
+  deps."vancouver" = tl."vancouver";
+  deps."xduthesis" = tl."xduthesis";
+  deps."wsemclassic" = tl."wsemclassic";
+  deps."yathesis" = tl."yathesis";
+  deps."yazd-thesis" = tl."yazd-thesis";
+  deps."york-thesis" = tl."york-thesis";
+  sha512.run = "3ff65b8b007456d71ce63e06569023b37fc06e05b777fc89aab3bbebfe3ed9e8e7d33801d1f32b7fd6ce350f88f0b8710e50f5c398024c064eadfc315c9a1ed1";
+};
+"collection-texworks" = {
+  stripPrefix = 0;
+  deps."collection-basic" = tl."collection-basic";
+  deps."texworks" = tl."texworks";
+  sha512.run = "76e9ad96aa649c70442533135cb3e198278a8df631f91f23b55bd2977eccacd81a2bafa6cf4f0fd1e83f86dd591a85eb8aaa93c5928b2cb9766683d089994199";
+};
+"collection-wintools" = {
+  stripPrefix = 0;
+  sha512.run = "648617c8a047b9833429a38e77f1b605b060fc3ab4a356ab8a19e0c1b3650bb56eef7e7b9e8727e95d1e48b0fcac40d8994303527afc7511c5d1a34adab8df30";
+};
+"collection-xetex" = {
+  stripPrefix = 0;
+  deps."collection-basic" = tl."collection-basic";
+  deps."arabxetex" = tl."arabxetex";
+  deps."awesomebox" = tl."awesomebox";
+  deps."bidi-atbegshi" = tl."bidi-atbegshi";
+  deps."bidicontour" = tl."bidicontour";
+  deps."bidipagegrid" = tl."bidipagegrid";
+  deps."bidishadowtext" = tl."bidishadowtext";
+  deps."bidipresentation" = tl."bidipresentation";
+  deps."businesscard-qrcode" = tl."businesscard-qrcode";
+  deps."cqubeamer" = tl."cqubeamer";
+  deps."fixlatvian" = tl."fixlatvian";
+  deps."font-change-xetex" = tl."font-change-xetex";
+  deps."fontbook" = tl."fontbook";
+  deps."fontwrap" = tl."fontwrap";
+  deps."interchar" = tl."interchar";
+  deps."na-position" = tl."na-position";
+  deps."philokalia" = tl."philokalia";
+  deps."ptext" = tl."ptext";
+  deps."quran" = tl."quran";
+  deps."quran-de" = tl."quran-de";
+  deps."realscripts" = tl."realscripts";
+  deps."simple-resume-cv" = tl."simple-resume-cv";
+  deps."simple-thesis-dissertation" = tl."simple-thesis-dissertation";
+  deps."tetragonos" = tl."tetragonos";
+  deps."ucharclasses" = tl."ucharclasses";
+  deps."unicode-bidi" = tl."unicode-bidi";
+  deps."unisugar" = tl."unisugar";
+  deps."xebaposter" = tl."xebaposter";
+  deps."xechangebar" = tl."xechangebar";
+  deps."xecjk" = tl."xecjk";
+  deps."xecolor" = tl."xecolor";
+  deps."xecyr" = tl."xecyr";
+  deps."xeindex" = tl."xeindex";
+  deps."xesearch" = tl."xesearch";
+  deps."xespotcolor" = tl."xespotcolor";
+  deps."xetex" = tl."xetex";
+  deps."xetex-itrans" = tl."xetex-itrans";
+  deps."xetex-pstricks" = tl."xetex-pstricks";
+  deps."xetex-tibetan" = tl."xetex-tibetan";
+  deps."xetexconfig" = tl."xetexconfig";
+  deps."xetexfontinfo" = tl."xetexfontinfo";
+  deps."xetexko" = tl."xetexko";
+  deps."xevlna" = tl."xevlna";
+  sha512.run = "1dbbe2fba18718b2f7488bd078ce0ad2f46e66308a383ffe2a17e28f660ce56762da83df52e884867bdcce128267a2d608768a0df2fd9b29eeacf43285c78a6e";
+};
+"collref" = {
+  stripPrefix = 0;
+  sha512.run = "56c2fda36523ae348bea381d90493238c7cbf5ab59f074437c7b694b441f913e6b58795ca81d2c549fbba01505a8895e9e139a9d143050761bceced2717fdb97";
+  sha512.doc = "2d75180ab389632ec320795d6e6b989d902b82d1cfc97ea3c5113647e605c1eead0d0f5a6733cb692b624f4caa7120959c0b15018e35be4d4894183ad3e4c37d";
+  sha512.source = "5a89f6703ab1818375ff33840b1295aee99e6a36338790014b7ac4b54bd49850adcf73ca793c57fb8159be87417741dcdd6ad3934af8bfde74595367f5e3a9fd";
+  hasRunfiles = true;
+  version = "2.0c";
+};
+"colophon" = {
+  stripPrefix = 0;
+  sha512.run = "e85dfdef7eefa2fedd6af7c0b6eb71200485b5190268de3a89cbec8dd15f8e66b3260430660f6cb860e2712d3e20e5a8d0b874592a71b116dc07de6e28161474";
+  sha512.doc = "aba1badf34551d8340f733bb9e365a99c56c473f96ed69deadda917232ea8313df800579cb347e074ff0836553bdeb49f60330883581fb3cc7a3eeedc736d1ba";
+  sha512.source = "8764595f95806d0aa8cd956bdfbec118f16376c936ae457d3d28c072eb8e2d6f0e7028fdb91ab301dfb587a721cc40fae13f56f5245b418413187f8776624855";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"colordoc" = {
+  stripPrefix = 0;
+  sha512.run = "a4d87deccae89f844a6251887e4d20817837fff4eef9cbd2874bef8890d41e0ab930a3ee55fae9ee46685c6b3b2b3324b54ce8507f1cb10eef332b7a480b94a8";
+  sha512.doc = "a2e5c6699a615651dd31a570ba6524cc7cb3d2f3c8d4b1fe49092dd4c01b40714c1c534f3554fca20fad7c17fdfb7104b699a10677519f57538e239820b6f1e7";
+  sha512.source = "2c42638129705d6e08375298684ff96c867a4deeb1d836ea12f8d6b0ad9f61f6840159ed04b92f2cac4c8d126da3a8e657589635ebd3388b9d457994bbc53a36";
+  hasRunfiles = true;
+};
+"colorinfo" = {
+  stripPrefix = 0;
+  sha512.run = "63bfe1dcdfd85dd1d7d3c7c8d3d345f221bc90bd34bd75888c361d4de97633b9c14d96930b41adf63370403c858f754e740c53d8100b9eb3c5557dd66e6876b3";
+  sha512.doc = "d871a76648cd57af0bd6bd800ee8673ff07b2572ea514a3806731713d9ec4ab368fba2cf540ba71005300d4e02beb180f8eba82c0b060bcaa7a60e54ae601df1";
+  hasRunfiles = true;
+  version = "0.3c";
+};
+"coloring" = {
+  stripPrefix = 0;
+  sha512.run = "7c89a6c53212beaa06d54dc091021c5fd57cc30fccc917ea413d23b0790ec637b6b8e69a3bf1b44d0a9ed24fa1c0dd21608b174c0230a0a94a2e5aed221be033";
+  sha512.doc = "cfe600ff32f680f7b7d3916e5a2e767732a9ab9f1e6d06133afbadc87dc1b8ac420284c75c221ed5b5a81b76f6b01302c5595b69439566775adc18ab11185961";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"colorprofiles" = {
+  stripPrefix = 0;
+  sha512.run = "49be492e62fcd615b08bb6a32767cac54a9535ab859d2a27d1c84788d4e168df2a10133e5408ab1bd3a802ffa8465a61c4144cd9cbafc6fa98f995cb7af89381";
+  sha512.doc = "ab7cabd369cdde5c2e5108b4d75d71bfa5e6b44d7ecc2eda25509078f26bfbc8515dd10a6dd82adab979170e12552fbecffca1f5bd3a1105db21b31097ec5f12";
+  hasRunfiles = true;
+  version = "20181105";
+};
+"colorsep" = {
+  stripPrefix = 0;
+  sha512.run = "3c6387a4c538235181dcaf7b6c3ac51d2893d35fa2c18d95d85810b778fecaed7ae2337d2b284ee3439f44d3570ee86884d42616539bf61a15526aa711da70e9";
+  hasRunfiles = true;
+};
+"colorspace" = {
+  stripPrefix = 0;
+  sha512.run = "677f462e9ec347467ab39f3c4e776b870861ed0a38447d61a50abfc3172936c99b468320ad40a5b43713df070434c0b280e2d9d13609e141603453fa7d6c37f8";
+  sha512.doc = "702060f3a2805be7dc472bab428fad866e947d8f700f8357e897443909d555dee399ac857feb1e341875bbd4017e7e456c46c4282def6daabc092417859bc634";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"colortab" = {
+  stripPrefix = 0;
+  sha512.run = "460225705cfa914efc689df2d3f0c0ef7f5883082195e3d8e29e124726589fb5e9b7fc4679541b685439de097b6b297b803cf08e104ec13b849dbb26cffeaa04";
+  sha512.doc = "947e46ffe5c83c3803e40f0da9a1a926e830e2b24f1d486d158da24bceade870cb1fe580aded3838f895deb238d1615cc0e3f95a05e99800fb1bad87ddf0b134";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"colortbl" = {
+  stripPrefix = 0;
+  sha512.run = "fcfad0e46aa26afb44ad18f0dce4301c41f2db3168a5f8914eb58b2e91a53eb3fc2533249bd330152e3632b8d5ffb591b70c37b3700f6597eb6cae29804168aa";
+  sha512.doc = "e550a2e3d3d0265a8d49db856a52899eafec47db8534297bae6c85f50f9858dce8e9f989d99e7cbdff0ecc61442827e79cadb4b8dc005f6cf60c9574996a661b";
+  sha512.source = "2e5af0c9831e0aabea6079b67ea53df24953c05c1bd0ef2fc96190077a898840d530a061d585ba6a37d37686f9acc6192c1220793e373a52588009b1a134acb8";
+  hasRunfiles = true;
+  version = "1.0d";
+};
+"colorwav" = {
+  stripPrefix = 0;
+  sha512.run = "618f813c9e009a671069a151bc6d438a42b2c589b255685d91dbbbd162e6a106164d626cd772bdb3e6538a1b010ae178dd7e1519195b6b1fee10ce6e46253b6c";
+  sha512.doc = "e042c10fcd4d2760383352ace13b2d3600682a01c900220913c79a950fb1597a59a82483429557aa7598e1cd1eea52b73dd23367139fb741ea48ee9c84c4c572";
+  sha512.source = "96ff1933d48bbe938de3635588d9a9c682ac387415d5a7c316e310ed0931e7fa0adf44185d8232d753a1532653b6bb5c0f6c402903bdab654333694f7c293215";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"colorweb" = {
+  stripPrefix = 0;
+  sha512.run = "dd8e53aa707f1e73276cca9a9c5732b012ca7dcb0926d101c71aa5fe3829f07251a7f606accc95266f6c9aa4b867a38cc654ca97cc32857edc3d196b2c5a7fd4";
+  sha512.doc = "b1ae7c14f2f07405b7a957831b60829046b058f6d1640051cbee877100c98a8f47d2c1d40f60599c42ff90eed246248b4f48dd8c1d31f9d45082f9ec5c341626";
+  sha512.source = "4016805ddde5974257fc9f20a0f4a8e40b12d059ba74ed6425f206c4b10127596d579dd8c057e85289e32dc1652b2258f6d2590ec6d4cb10c72aa4a874158275";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"colourchange" = {
+  stripPrefix = 0;
+  sha512.run = "dba4ef8d97324c3da71de1c6a37e268618bab0a876e1da37226ec9fb187087d39f32507e97f4ab4fa801fd4bbb98c51a322c6f2493b719133154b24223bfba46";
+  sha512.doc = "628bc515058108ba97312c15ee5af00e086ea3dc124b4e7b038b176d4175e2146afc6f571593c006d749634896fa286d16c923c17d4dc9e55e81ac3a8aa95442";
+  hasRunfiles = true;
+  version = "1.22";
+};
+"combelow" = {
+  stripPrefix = 0;
+  sha512.run = "17f1beb58a11f3c754c57331d1b2d9338fee359b6c27cdc0a855671397e78c0b2d29ba60247f3104d3eece22619671f56d2aac862ac404502faaea08f40d7be4";
+  sha512.doc = "82d8e60a5cd8d46b952aa27dff03398cb6e65a1c5a76c1eb260d3e30172af89206a7a8ec7ab3871d5e33e87ccc2c99e2f54740facfd71d43ea6f88821c9ceb2a";
+  hasRunfiles = true;
+  version = "0.99f";
+};
+"combine" = {
+  stripPrefix = 0;
+  sha512.run = "9e57b01fa0a14556473764144dc3b5e4e3d40a7f913932b02826a68efdd952adc69e990ba75f6b5057d69850d3e693e1c5b5c40d2c3443aab2741ce9646d522e";
+  sha512.doc = "4e09fd0a9b587d61da2c6a15579675b9a839c83f0b38b0f958b2f4aa2c0a49adf93730ebafa235043cf645d6b8689cbcc5916e4bba92b5e30ac87a8282402859";
+  sha512.source = "25df0ae6e799710f575de4aab975f774f53abb28e627547cf61fe68a4de18cd1f9fa3a8cfd242ecede15e6363734844a8ca37b49da7bb4efda6bc90f4f1da168";
+  hasRunfiles = true;
+  version = "0.7a";
+};
+"combinedgraphics" = {
+  stripPrefix = 0;
+  sha512.run = "22d36d3a44fbbe5f11522f28e716be862d354998750492d014d86037a24407a748248571e50dc99a6fe5518d8ecbf61ca657407194a43b75510b613438fa4b65";
+  sha512.doc = "4802871f57bbc131c850f89eef43778ed25a9abb0a850dac0e91e762b7a321567348f147ae02847cad4c226f9acf2bce921f9745832d1dc298d751b8123741b4";
+  sha512.source = "248524984e09cfe3a2a6bafdb0011d3470035243807635dff3ee6e6bd5c7d2ecb0483e7ce069a76f1589dc5bc2da4aab2ef94ce9ef587915a03d285bd95965ad";
+  hasRunfiles = true;
+  version = "0.2.2";
+};
+"combofont" = {
+  stripPrefix = 0;
+  sha512.run = "838f10474c2e89f317df4592443deaec3d1a3310f7bb2b458c2a1b29a03013c4274912020ddd9b5807bb6018b6564c11df7b14b8a6db556e8db58dd98049c002";
+  sha512.doc = "ab322618efb3cd8089e9142a28800d34724e499bacbd0cc4a0db14a409bea3cb355f50d412f92862f53c0a5f91fef8af7b652b21be0596cc9687e4919f5122b4";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"comfortaa" = {
+  stripPrefix = 0;
+  sha512.run = "83398c18c37a1e2d2e780133910e5ccd59daffb548f689e22bb642d7a2776e425a80df8ded3982f9b343b83d3421d3d5a9f363840b5f4d9e5ab470439183aa70";
+  sha512.doc = "e7c554f3d8ddccf5660e7dd21ba4aec1412433fb594398d9e3b57f9ecd7943c34529b4ac747d9678dd30374eb8fdfbfcacac0545f12769bf419644cf79123a05";
+  hasRunfiles = true;
+  version = "3.2";
+};
+"comicneue" = {
+  stripPrefix = 0;
+  sha512.run = "c72d19a0f5219d96da92916ec13fe333703c911b4222b60f825aa5ea2d412df261fbae2227c56844e70fcc057ed8367a4c42f17799c4b8418b02c3171b8d4864";
+  sha512.doc = "e3d1630dbecc93365e18b496565a5430e0867f3d3a82c0bedcfec8a02168bddf71d9e65b996e4682294c086d1049cf88182a36c5619d8fe6762aa1050fd923a4";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"comma" = {
+  stripPrefix = 0;
+  sha512.run = "65c21bca8e6a707697847ff96d1cd909cbe0c7d33140b4b175a2e3464c1c67827cea9c9f65e45dfcd31fcf2fd94262daa907358341fddf351241753ab47ac99c";
+  sha512.doc = "b25433b52a32cee71043c1f13d2ca45beff32733ac24259f767b6093f5b5f38e0da3c88569bcd637267397c49d26e546c26454381cf916040c52a2833b02df65";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"commado" = {
+  stripPrefix = 0;
+  sha512.run = "c5e48910b5e685c792b9dfe191cd8666472e24e7ef6d6c2fdb3bfb05b2f39f4d4ca68cc7b859d07f50e5d596250e36e1664e1ca48666b0e3126eb8c91d27c384";
+  sha512.doc = "457d03b34ba53988ff287060d18f993f8e01ca99991505c5373abc05cfdde4cfcdda8fbb6dc3737e91c66ef0b30c083c31e64e326c08d4959ff8ed1a66cd4d33";
+  sha512.source = "e0f280bd901ae306f17ef58686345ca38546fd635dde274456af67f41fc05523a91c1f0c0a2b7f433c992193a6442f870031459071a5d7fd6c12f68728f24809";
+  hasRunfiles = true;
+  version = "r0.11a";
+};
+"commath" = {
+  stripPrefix = 0;
+  sha512.run = "68c25e035e211107c65eece91bf84d65f2328ebaa3dc81d70186707c081f865abcb1be383cecec7d780bbebf3f565647406d6bcfc2c6bb3e846058d50882a6b0";
+  sha512.doc = "5d1d162cf8fd6692788bd15e2d3c2021fa6ed96f289f2c17e9d7e9d2afb428030f0d016f4b4aac62aebec1c8988aa1a978f71bdc7f4873e181f1b2ec7e0f6d0d";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"commedit" = {
+  stripPrefix = 0;
+  sha512.run = "7a2248fc7c3de4755a68dfb769c0862332f41945a5efdac8f0b9911c3479bc45cf72ef0176d8d2ed2abe127aaf388c17c90d1f58cfea4aec8bd9e488f2d96c5f";
+  sha512.doc = "b8c6fbb8c67aeb878fef32bb6e61dacdb3ebf9bb7ac92bcdb685bccfac8129ee3145d40ae579ff77b097fc81ebe0438ee5c50c6bc3df156910a287b368728c6e";
+  sha512.source = "19db6434ff564e454ca44fee29d22bb6a930b9f51f54265955565fffd8a7a4a1be89e3475c727a47c3723da99160f4d9ad9899321913d8739821c6491117c843";
+  hasRunfiles = true;
+  version = "1.02";
+};
+"comment" = {
+  stripPrefix = 0;
+  sha512.run = "36b5b4c4d4345a4fcf706f5040c02c2de52567fae76146a06b7f084d59b12d151e65faba1ee4aeeaebee018d81200c2902feb81ae575de35a68c00fa14ed6ba3";
+  sha512.doc = "d5a360c6a0c549fee1d46fa0e9c3f9aaaa4b19b30ac48046e736008ddb42393062824950684185175f8ab569cec221bc8f9a798a07623dbe26cc92a3fd6bc72b";
+  hasRunfiles = true;
+  version = "3.8";
+};
+"compactbib" = {
+  stripPrefix = 0;
+  sha512.run = "dbc3bb28178a656b400a2a72e48ec813d6e282ddba7c70bb4dd0b5ed7f76e9e0be1dffb0ecf43e4893210453ef420c1b1d859c287663cad6bfe8c7f46dc8d86b";
+  hasRunfiles = true;
+};
+"competences" = {
+  stripPrefix = 0;
+  sha512.run = "e5b2b3a77418d5bc55e8fbbc68c39b1852ce6081b00bf6115573ac29cb7c2b8fd70392fda9b04edca5c3aa1617424541fef2da4d2f777c433b8ee168e850ad99";
+  sha512.doc = "8a0078f2a3c32f03aef58a5d1ba4167ac4c738103d65cad9a5f4bae67aebcce3cb7a16d6aa27fa7b83955c95b28c1f70a0404f5633e3231c3b6d4232265e6c53";
+  sha512.source = "2fb4c80d75808aca093a664bb2ef152cb4ca6bbf1ba0253c2eeb6ece3cdd2299cf7f183423b65f47655128c3b374eb756cd870cc24034da7aaae206216e79fef";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"complexity" = {
+  stripPrefix = 0;
+  sha512.run = "352e1a308e159e432c3123afeba8b173b28e164c81b4874273ddd3f8bb8c8866ef33ba7c06e061d52a3845eafb3307b045b82c9da5ea6a812f3808417fa074d6";
+  sha512.doc = "2ffc63af2d86b7dc121c6e122ee1d23387c4c73a6ba65b226413671b86644d0cd9e9ec646b3eef49d9c4b2d64575d83ff45f3691337ba1dea6835945ca80de13";
+  hasRunfiles = true;
+  version = "0.81a";
+};
+"components-of-TeX" = {
+  stripPrefix = 0;
+  sha512.run = "364836128154056aa5d1e005144a64aa64ee105c78d34127958599c8c0eb82aa70e856017be3d7166d723a0fd7c9656d72cb24e46bd61d8768c1dc82991c5f77";
+  sha512.doc = "5da762a898a6cb95d5da95f444e862c8d0ac351ca63eca776fc1a9e35e2fb00389d414a85fa1bef357abc3d68b691a36ddac8c6aba20b7ea6f398c9017ac13fb";
+};
+"comprehensive" = {
+  stripPrefix = 0;
+  sha512.run = "8c34a44188cb3dd286f0f841cbfd2d4760bee9be75c814041ea7d2f9ffef39991f018fce276a440f88ca8771eca0c1baa9884d2a7f60afbb788f63220b51c3e7";
+  sha512.doc = "e262b3996a745024d2cca39d62ba35e00e9b6a8ead58ae1c89c5d8949744cf8a084021beba8c611ef6b2726447919241e0f2f6cbbb21e6de4d6c15af7c7b5ea4";
+  version = "12.3";
+};
+"computational-complexity" = {
+  stripPrefix = 0;
+  sha512.run = "639ae984ee1b581260434ace517d8209843127795e674af045ddafe16838946bebbd2dbeded45fddf62ec0a49b1a30492db0cba4ad1e5bf65530d1d5a5df9198";
+  sha512.doc = "9daf1691d33bbf00b67b82cc29de0002e1aef968cb1f182bc3d722082582ed7e60945f74675b48a87baf67aa9f5fee4a167bf1548d3312492a8f570feda93ac8";
+  sha512.source = "37d9b700194fb1ad6cd11fd9008aa1634a6b425133365819b5f76ec349a962e44ef43e8c18572fec16bb4f7b44fea29bcb4f01936016486c3eee4d44ddfc5ba2";
+  hasRunfiles = true;
+  version = "2.25f";
+};
+"concepts" = {
+  stripPrefix = 0;
+  sha512.run = "2fe917ad25df3b14bd3a20566b97a7ece0f87f79ec7ef10bcafdffde1834f6fc4bfa6775a7ec8d044e5f3ad241913b2664a7a5c25893e9406de26c0a1008d25c";
+  sha512.doc = "5519f645d55e2a3e4e5f9156bdac2ea9e4ad4735ec9104255e75ea254f45b135f0d635322cf46a5536e8600eee1447ab48753763a4c89310e92d51c94c4fde80";
+  hasRunfiles = true;
+  version = "0.0.5-r1";
+};
+"concmath" = {
+  stripPrefix = 0;
+  sha512.run = "1e2fd3339fd2bf2a48967102ca42c930ff41a5b4a9fa850cbce6aa2ed701ab351a5dfb931ed80de34aa13e18ab2b01fa2893f981fc671d6399f4d55aa9f8ea40";
+  sha512.doc = "05dbb0a6d89d3f72f3d77824670afb29e6ea8dbba6d37255f6a36006a6a6b630fb56b12815ae3075c41dd698d6a85c6be7ce1dc2da9b3b69b636fcd8c4855a84";
+  sha512.source = "6c4a5a4af907174df5fdeb77f0c4d0f554c2b8ac0d95031fe98f4a748bc4a96c7a526e44229174ffaccdec5bcf086722b355b3c4dcbc4441e1a67c91a71376db";
+  hasRunfiles = true;
+};
+"concmath-fonts" = {
+  stripPrefix = 0;
+  sha512.run = "65b3f7003b8aaaf6565bea6a65da11f42dca2283f1d53710f4b476a48ab39ae6fffc1d0f9206e23b66047b572c28e793e1a75d047f1c1a892fb4e7c17c854741";
+  sha512.doc = "7b2db9b8f2f23816cf413676dfbf6ca3413a39bb20cbc12070b9202bd2e98714a86dcb5f27a746ae197efd2284eb794f06af1b2941667abfddb72773ceb61378";
+  hasRunfiles = true;
+};
+"concprog" = {
+  stripPrefix = 0;
+  sha512.run = "f650acafa4ffa424451f338d6432d665ff679396ed367650d360adf699d3b1e7d8d23f5b3fd070440cb4d6578d07978bfd02960c1219eed6c8594f110708e5cc";
+  sha512.doc = "bf4d76362f7a764ae4c7937edf05a575b3faa8d6919c6c857ae350b742f53d6390546263d14958dbdfd423c9b45a7f9eebe862a00378f51c754b5fee65f60bc0";
+  hasRunfiles = true;
+};
+"concrete" = {
+  stripPrefix = 0;
+  sha512.run = "465b6d7e427e8bd7b8cfb44551d4f8999ed0e8482f905416ec4ea7db6ea4293e6124f0b69e84a84655d5230cee1555f15030c8dfeac8c7da99c1c8ba20a3d640";
+  sha512.doc = "5fb4fd77468dd4d5ba19d43d176588f05345038d58c9b0b2630e6795ed33bdb3db0053d5bb249030a118bf19cddf7c7e4d8f1ae96173b1e1368e468ea2c00727";
+  hasRunfiles = true;
+};
+"confproc" = {
+  stripPrefix = 0;
+  sha512.run = "b6e054332f7f6a239a6eb102ae4b022f90d9523628a293517b1d070602290bea8e623379b5c246fcd5b8daae29c9d32d02a8a7637cd704ede5b1b928de4536fd";
+  sha512.doc = "0bd697d12f1740257e89cd5853aac7340659350a6374c32c5fc22da4249ea08b7e176dc499712f4c2cac6641c0161394ff0433513f7ce1942d50ac69021c14aa";
+  sha512.source = "f8530a8106931edceb4c5f0b87022092fc85368966e5029ab25e9f2f19cf95a3c97694dcedd5a78d707b4d9e4a9f358a6bc4f92084a49dde7d6100b50e77fd1a";
+  hasRunfiles = true;
+  version = "0.8";
+};
+"constants" = {
+  stripPrefix = 0;
+  sha512.run = "c4f807315c7f95fe7945e937e750ea18c346a8ecabb80a39922a9b861e3cce3956db31c55e68a0d3417406284d7187fd3b1d1c336c0a130eabb07e4bb60503ca";
+  sha512.doc = "2712e46552a8391b0f2a95991368882a393007788cebabe7ed6c5a604eb2085b4bf00749c6fde3c88028904b7117cd4865b964d11eb443c6939e734495d4df2b";
+  sha512.source = "6ea97687aa1f8f1772ba82a09b251c557b3cbacd056a27fc45412c9d72161d04814c9478bc495ca78ba2f8796ba44b3c29ff70f94382cf173b3e6ea2eb7dead3";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"conteq" = {
+  stripPrefix = 0;
+  sha512.run = "ee0f344ed0eab872aca3c54422f83a6f8bbed2462a22cbd54dde075ceae79dc5a01ef13947327ec726d5eeb64eee5519e4074c138f4d172bbf2b4024eb88ceff";
+  sha512.doc = "edf52893cef8c5f8538a64d626a12725b043c5f0106a63f02cad91df9ad632009cfe3da51149750d4c23c12742c00052b951ada957b89641d9a0da59e93396c8";
+  sha512.source = "d3796e7bd679bd64c59a8d16e50ee7e190f9fe3c0774ece399486f8d5df7f6f63ec8a0c595572be305532c66b94011a92bde3bb5850f2feb4ec162e3415b5102";
+  hasRunfiles = true;
+  version = "0.1.1";
+};
+"context" = {
+  deps."metapost" = tl."metapost";
+  deps."pdftex" = tl."pdftex";
+  deps."xetex" = tl."xetex";
+  deps."luatex" = tl."luatex";
+  deps."lm" = tl."lm";
+  deps."lm-math" = tl."lm-math";
+  deps."amsfonts" = tl."amsfonts";
+  deps."manfnt-font" = tl."manfnt-font";
+  deps."mflogo-font" = tl."mflogo-font";
+  deps."stmaryrd" = tl."stmaryrd";
+  deps."mptopdf" = tl."mptopdf";
+  sha512.run = "1c525a6a7fe325dddb9588d3720e806ac762eefc90848e4457fc4d3cd60c64cf7b6e5c9388a1f22b22c526e84cca512140511bec9ca5ddad99bf7b968ac49c03";
+  sha512.doc = "b172eed71f2917ca16b4ce18b24d28e51ea48a1281fa8e34a5e104363656c1492c7a79339f3d0f7475ffc1f7ea13b647513f3af519afa684231dd7df3ea3b488";
+  hasRunfiles = true;
+};
+"context-account" = {
+  stripPrefix = 0;
+  deps."context" = tl."context";
+  sha512.run = "755ddb4c62a496873d5362df01307163c79d2a6c3fabce6ea01b442c16dad2f23d72909df71dd44eb4fbbf5c57366e20eb49bfce240807c2e2a9a52cbd76680a";
+  sha512.doc = "b19f6d0330e5da99a961304f8c022609dedb2dc3a8cc4607cb9b2ca7eda38f9c8b972316bb9fac92cc36166e1c0822afaebda2c5e2d87db1e1efd2781f51956e";
+  hasRunfiles = true;
+};
+"context-algorithmic" = {
+  stripPrefix = 0;
+  deps."context" = tl."context";
+  sha512.run = "72d4bbfe723b4012f8701c2786f96009bbed3c6b4bd2129f7153306f172e72218920e222f97ee6d5ee4b863e9e915fc38dd92b0c42066385fde35c5c3d0cc42a";
+  sha512.doc = "19ba676dc7822bc0a6583d6e9e031f3780977835c10d901e1ae02fca781719a0e015ac79cfc35c908a8de40a19614fcd17a35c604c9311b50972d0706d6f07e1";
+  hasRunfiles = true;
+};
+"context-animation" = {
+  stripPrefix = 0;
+  deps."context" = tl."context";
+  sha512.run = "19691ca3325b3f72154ac8439e616a128b5f3ba8c9447bb1e92979e175daa902cd756853a2b6e6a34a84fbe96e02771a0c6ef27ed5bbb7eac94f62dd72d571f1";
+  sha512.doc = "a06227508c2dc343598fc6878e2b17b56341f5dd86a473957318eb94ecc6e150adaedf7346ffb931eda184651efd00d8f60e36ec6ea50e9ac94e2ed096058293";
+  hasRunfiles = true;
+};
+"context-annotation" = {
+  stripPrefix = 0;
+  deps."context" = tl."context";
+  sha512.run = "bb66132ed1e4f146c407bb3b2852c451b82d3d06de1dc25ddec6e692d17f4d994d1a67cfd7ff711dc2de7a4ce7259b1768d6efcfb58856321d5ea5b15271cd34";
+  sha512.doc = "4491012c8172beb64478b2de5557ed8f97701cfcb3996a8a5ff9990048d79ddce8cc2796dbf4c08812bc8963c0d318f9d79d2d4c2d14bc372f06dbc28e012c3d";
+  hasRunfiles = true;
+};
+"context-bnf" = {
+  stripPrefix = 0;
+  deps."context" = tl."context";
+  sha512.run = "53e5d3d7c977aab648bb024942263a8aed5da6314506825ace02556db890ea23400c6de714ddf6380235c942dfc02e127736579b6be1c5b0b0ecc65d25fb0d6b";
+  sha512.doc = "d7ab60c2f8571ce2e2e96b82c1f97b140c5750324efb73275062a8d301d530279a3f9c19f6a6feebd6d7c72727d94f469d9aad05ad67cde5dbd3de9f695dad31";
+  hasRunfiles = true;
+};
+"context-chromato" = {
+  stripPrefix = 0;
+  deps."context" = tl."context";
+  sha512.run = "52e11c6953e7c2e2f9a3a20b8885fd12f5abef32d32da5ae5415b0321d37ac5ff8ff5bece3d522e1f785470cef542568cd56abd509d26671da9298c3d0ba27cc";
+  sha512.doc = "5c7c7f03050b0a17dadf23a09dced356a036c6b95ca76aeb0fda583dbc490d82222de64299c121224efaccc78b62364a1bc56daf020c177865c29e343529f040";
+  hasRunfiles = true;
+};
+"context-cmscbf" = {
+  stripPrefix = 0;
+  deps."context" = tl."context";
+  sha512.run = "cb0e5849ac3168a4ecdd1545edd029a1622ecf1c46d29eec97b28a66f65305e6b4d3a9c83e24d78e1596c8009ad5c9a0e25fa7e09448c3e0ea492e62bc933ea8";
+  sha512.doc = "8f45989c08f09381ccbf2942a08c0b13792917a18d5b2e92fb45c7ac2f4b4538f5ffd633da0348e12835c03a6f79b0ea7044f1ebea5770365a83d2d097a56df4";
+  hasRunfiles = true;
+};
+"context-cmttbf" = {
+  stripPrefix = 0;
+  deps."context" = tl."context";
+  sha512.run = "e3bc048c09bfdf114efa25077fa4e6a6c20b4d0e2ba337cefa0a8a82348fd3376f82cae0c85b029b863b7a5db9d9552b4fc5f5487d5ed5f6d88484181ea98ced";
+  sha512.doc = "2b55367f236330a07120229902405213a495de2ba455f333bc23e1c1abbe0f0a4be16ee95415f613d41572916722e3d023a71698f74e5e37f34a8de4fdca6e47";
+  hasRunfiles = true;
+};
+"context-construction-plan" = {
+  stripPrefix = 0;
+  deps."context" = tl."context";
+  sha512.run = "b292f8e271fcac88eaedc376257ae16a401a6c31009eaa3d4faeefba25c33d034f57d30ba4638e85b76ffd0d24ef4d541dfbceb1bc0b5c806a8412d239a32146";
+  sha512.doc = "605e09bedb9e2ad1e98a621c0a4842f28592c93507c3da31f8c6437e95e63a47e795b38fa0263d7fa81fa3b8838f21d2426c8705f8e17ac1d827923cf5e88784";
+  hasRunfiles = true;
+};
+"context-cyrillicnumbers" = {
+  stripPrefix = 0;
+  deps."context" = tl."context";
+  sha512.run = "14a90656d706d68ce441301aa6bccf2033c36f9c8d8605ec9dedeeedb71a5670dae325a5a198b2ca25373eb2b495e57fff31b85089c6c0fb987738c76ac636b2";
+  sha512.doc = "d95b1df26033aaff0a9f6759268ac3e68bff02556001e3f9b2bae1db68aa13c839a87047a6ae0a296f8e5817398ba35b7cbacc4f194dd93cf72684904190e7e3";
+  hasRunfiles = true;
+};
+"context-degrade" = {
+  stripPrefix = 0;
+  deps."context" = tl."context";
+  sha512.run = "b2df5bbee492b7137180bfe7b0b826f4149b8231b78cb839ac9716f02b622e5b3a0eb5964e12625650a224ae463714bb7cafbecae6061a6e3120022d2f545d52";
+  sha512.doc = "8f24fd70547ecfcbb163df2e3e4450525f0e56583b6984f61fb04559142bd838287e79c9b9d8cdef2c26a882688074b5010615e6d818a11f2f5812d88e31cd82";
+  hasRunfiles = true;
+};
+"context-fancybreak" = {
+  stripPrefix = 0;
+  deps."context" = tl."context";
+  sha512.run = "1e8e51de47c67a3287dfa4386f9c09b4dfaa494d9b59fe8d117a3a1b65a5041add24c36227f2d2d7fb3bf2ec34d6a5a8b6658d275b63f55793d05dea08722b10";
+  sha512.doc = "6082670766d63da902d2a53f2a6ee89fcdce942fd73439fea8326ef3117e6a5483b86d9d4271d2f3d9546a5fe44277721cd15510a9da392db36356b44ae2f36d";
+  hasRunfiles = true;
+};
+"context-filter" = {
+  stripPrefix = 0;
+  deps."context" = tl."context";
+  sha512.run = "330e7085ce8d3e284c9e4cff349b351b862cf7e6544f736268b01d623370658de507176d3bf957f5b2bb2da28523a9b5543b091cf1dad0711f0cd38b2da30fb6";
+  sha512.doc = "f27471636d5fdfeec2d47fe901b87fb56613bed3fbf95c5580c531c5643c919b890c38aa4f33d12252d06c9c3a681c112b052de6dbaf279374c7a87b7b9ce957";
+  hasRunfiles = true;
+};
+"context-french" = {
+  stripPrefix = 0;
+  deps."context" = tl."context";
+  sha512.run = "0131af9d1c23f612450333c2cca116d2369cb8ecd402bfb9c9abc7e473b4eab44c9962d343d7391d9d9a29bd376012c82bf9e6378a280d41e37d41736b1853a2";
+  sha512.doc = "96874c7039d9f252a9322cf84c4f77e8ca6bfbb9740e2b9fc8793dea79bf0d5f002ed1a69eff590c8aad6e43c315cda5af2aab0f9011bafb47a53da63101a9e7";
+  hasRunfiles = true;
+};
+"context-fullpage" = {
+  stripPrefix = 0;
+  deps."context" = tl."context";
+  sha512.run = "280a16b47e04f3099a2f960435bf1c22ec623553303e339df4d06135b768cee6565e20a0c4e0c080d8c6f621a32d862ba6203daacdbf9ecd03b62829dd0014fd";
+  sha512.doc = "1d4ff98bae26e0d6ec1ce1ca58fac82f8592158f8635eeac737546873f1f468b2ad7a82b9f8956b770fdc0c01443a9327c509265cdecb90d83dca15462cfa23b";
+  hasRunfiles = true;
+};
+"context-gantt" = {
+  stripPrefix = 0;
+  deps."context" = tl."context";
+  deps."hatching" = tl."hatching";
+  sha512.run = "e0c61179f4ecdf93c13dbfe19f59487fbce55e1a0dece76ac025a88a452e7168c5e3b84e53c01bcae4cc412993be36eb554dc5f7299fc1205f4070aa07a834cf";
+  sha512.doc = "a5cc76238f8377dc8d06869bf23a1367c880b57ba62ab8c8331886cbed145427e2819ba92965924fc7a78579d28b7c1cf331acf7f199cf72672ccb64962c9367";
+  hasRunfiles = true;
+};
+"context-gnuplot" = {
+  stripPrefix = 0;
+  deps."context" = tl."context";
+  sha512.run = "d3d7dce105707bd8fd903038e458cae614ec63da7932231e1f659570ec3a7960ea0fab338a8405f2ca8ce8b03946b58db8255333d2a4ab5a659566f4d272b0b0";
+  sha512.doc = "40e471b27d53ced33590792ac62992a220357c6db1c78cba901197362a36817bc14b049f2573ee2e5b5adad5182c5bea2880c4f7a2477bcd1a06ee7ccf88b0b9";
+  hasRunfiles = true;
+};
+"context-handlecsv" = {
+  stripPrefix = 0;
+  deps."context" = tl."context";
+  sha512.run = "10f862b7152e0efe2a8444fcf847ade2aad2c1499e146b94643a7e08a438359c2f7d1927e7e9773f3dd14475fb4535d17fb4f29ff053e7a29c9463f40c6e5598";
+  sha512.doc = "39330dfaf22a83181086343ac9ea7d64025fbe779e55161b33e5a9a9802e0928bb1c16941aeb307da641835aefdfe2e431becbc0cfe40ad8bb33a3816b9b177b";
+  hasRunfiles = true;
+};
+"context-inifile" = {
+  stripPrefix = 0;
+  deps."context" = tl."context";
+  sha512.run = "9dd9b61cd2b5700b0e2b6e59bf4040de9431820c659f121c2681e454ddb4b34454270eac6c442836c90f8a1819761ce0d7659684a1f0c8876fec1f947a0b16f7";
+  sha512.doc = "9635bc80ae7222c6a38004ad5f985004634b7db9596e03a23123ad71bbf177639bb1b028bdfe79d51b75c1c429c327f65c2b5e0720723d8bcdf63f4939312850";
+  hasRunfiles = true;
+};
+"context-layout" = {
+  stripPrefix = 0;
+  deps."context" = tl."context";
+  sha512.run = "6cad00783d0bc91000ca0e0c8350fe2a2e99f7fefccd375d5bb2f1a144fc04a59f83122dcd490fc0596b1dc9fd0c0a779bfa35932362927ed50ed8df39ec359e";
+  sha512.doc = "4ecf7bfe5fbc78453cc116cf7a657f4b6ac7fc21ca7dd6da5beb0ea1af0c1fd48d6a74ab516213f49d1e29cb8bd47fbcc94145157472e3ea22b291f494fc3d1f";
+  hasRunfiles = true;
+};
+"context-letter" = {
+  stripPrefix = 0;
+  deps."context" = tl."context";
+  sha512.run = "52caf1eaef275b90c883992562b66f837d439f176c0b061836e1fba412b3957502ae9c5b9dd893e89e7ff1274d70e2ed162b75709563874e4ff6a9844044035f";
+  sha512.doc = "ef7e344e25095ebfa7376af1fcfd5f4e617e91b5841ed8f8fbd2109bdc645d71174ce7b571f2f3dbce46ea08ccf7c3c73b0075b2cabd3847c239171a7275ef87";
+  hasRunfiles = true;
+};
+"context-lettrine" = {
+  stripPrefix = 0;
+  deps."context" = tl."context";
+  sha512.run = "79e4e246a7bb0a300db53425e2769a3ef61bc0249ce57840c0b9037805e86eadbd1ef4ab8a110fd806584393feef00f498418732cfd53922aed6df67c561e535";
+  sha512.doc = "ab32697b6c309b1099b809c33182ffc48bb3019c8d520269cbb616b61e8f20678cc2cf4e7e971e06cadb22ffcee0d502deedf21aa95d8d372d1840e4fb4a6591";
+  hasRunfiles = true;
+};
+"context-mathsets" = {
+  stripPrefix = 0;
+  deps."context" = tl."context";
+  sha512.run = "e4c689c745d06c61d6f693a9832001aa8c79d51664c2a5d6d0c6148a95b30870063f50eecca31ac0924193c6dab8c12cd5ccaca16eeaf5f83a99cef1a8889ec3";
+  sha512.doc = "f2c33244814da8e8838483038f507fe6b3e146f37691e55a37bb5355985d2af4c5fc423318133c4f13837a3e66a4fe72d5c14f6721bb5ee0417a59691b86d3f1";
+  hasRunfiles = true;
+};
+"context-notes-zh-cn" = {
+  stripPrefix = 0;
+  deps."context" = tl."context";
+  sha512.run = "a05cd68d609fb9427ca07f64ba1b9ad85762464a3294653c8a790c0a6a41d6af43aab72a1eb7ef0d56a299db2f54af5666dbe974f9fdac014f624350c8bfe50a";
+  sha512.doc = "4261b8aeb5b3cbebde2890af1b7039c6f557ce36f4979228f40f9e5e99b19aa5c457ed6842f4501f4dc32f51f58d9fcd0764028b9d5c74fd07d41c8c866220a1";
+};
+"context-rst" = {
+  stripPrefix = 0;
+  deps."context" = tl."context";
+  sha512.run = "f93173c1b27afe538d670c791048f495fa3f236cf75511d43b33172d140ac47fa3b5f11c674db5d515733b8ef9cfa7ac2d3c46b78b624768ee95a21884dae904";
+  sha512.doc = "536f63f9fa02e37c38f445974dab1f75b38abf0769379ee1735001972db71be10d51a1782e850ddd75d73f2a6f1375cf043684c0fae1a88b20a1650248870f9a";
+  hasRunfiles = true;
+};
+"context-ruby" = {
+  stripPrefix = 0;
+  deps."context" = tl."context";
+  sha512.run = "e219c6da61585d88f8e899278d1c85f0903ed32b6c7368cdb6076697230a0e79f5f88f53dd98514394fa09e7580c1c6b7c167d81c010107f3399dffb18b13d95";
+  sha512.doc = "179e501b428bd87a49830a68236008ea6e962b80e79ab45a0e75a7b86a7fc11025ac38ad463c459c6d290aa5ac8627da5849d1fd8f7502ea7d97696b53ed2647";
+  hasRunfiles = true;
+};
+"context-simplefonts" = {
+  stripPrefix = 0;
+  deps."context" = tl."context";
+  sha512.run = "7c817f4a25a8883ce052c9657a3d6117042e8538fadc8d67b4b0194abd69238045c09d365e90e555d5b04d83a1ef82039ca9631aec00eb1f80b56fbefa729cd3";
+  sha512.doc = "238babc7694bf85c81e3079b5d72feabc9c9eeea4f3b625a57ecb133d70ac745334ca0426097dccfe53e3ffe108ac0859be4da7625bb6b683abec1101367ac06";
+  hasRunfiles = true;
+};
+"context-simpleslides" = {
+  stripPrefix = 0;
+  deps."context" = tl."context";
+  sha512.run = "8bc6a0ee37116c200cffdc6595fa4d6b3383dd92da869f2e142d475a5693cc2ff4745144e3b2fd5a3ad0876a5182f1824a2a402aa48b0b02e288990e16056083";
+  sha512.doc = "06b57a4d89ad4aebdc08fb002229b822073b36da4096db390ffa3dfc92c32b6a0b138fb31a09406a011d647d260fba9274144f5463a1df3c50ec816d31d2662a";
+  hasRunfiles = true;
+};
+"context-title" = {
+  stripPrefix = 0;
+  deps."context" = tl."context";
+  sha512.run = "bc7d6cbd373cb6d6214489ed97117929ba381626c854a0a5a950bfa44c06214991d7a90290793c825c96e6d22ba1f6807054d4553d1d3980d9d9bc0e6dabafda";
+  sha512.doc = "3b910eeca8c8a442939873e082a4025523472b267ed3268e63cbf5fbe0821c9db8d8d183058d139aa02233dfdb6be7e23fb9df360a490f7d551875c59753c7c0";
+  hasRunfiles = true;
+};
+"context-transliterator" = {
+  stripPrefix = 0;
+  deps."context" = tl."context";
+  sha512.run = "d41cd0ebcb99670bd48f8becde633c21401dd9044bbf93618a031da10c59bb8f6d4d6bbc68eecac75965b26f5052f797609d67d791cd7a281f72cd062d3d7388";
+  sha512.doc = "4dd501af23511dc81853ddd48ace2aa572c553aea0ba09cf2895b8bd05c4bdf08a6f5e254eab88d4098d441f1d410c0161b1e8b24e3ebf88a38bf364e90b8539";
+  hasRunfiles = true;
+};
+"context-typearea" = {
+  stripPrefix = 0;
+  deps."context" = tl."context";
+  sha512.run = "c4a2f2317b146b31102273e9b616d403d4ee836a61fae96bd9315670b0bdd5f9d94ecde00b53d2ea5f7073773bd8af5c322b07c3b05bf7ad5262a9f0e0b623a1";
+  sha512.doc = "7171bc5c5e82b3897f75421e745e876c2aea84e9e9cb74badd6dedc75666b8f9ddb8b6d11c523ea64be6b57dca4f84555827afa32a0c90f6df1c31b68b1f6395";
+  hasRunfiles = true;
+};
+"context-typescripts" = {
+  stripPrefix = 0;
+  deps."context" = tl."context";
+  sha512.run = "f2d43256997cfba2ab2fe0fc8ebe90a3798bb42e6d455fbe84540654a95fb06a170aa19cf11e4f3477517473b21fc05426247b1f1d39c9132e703c0f1a9a5d0c";
+  sha512.doc = "de15432472678cd9c7bdc0e2597f1fe02275fa986767f269fb4237e8d0095a1100908e0b46429741c8ffebfa84fcc27272045314cfc185ccaadf5ffbbe030f69";
+  hasRunfiles = true;
+};
+"context-vim" = {
+  stripPrefix = 0;
+  deps."context-filter" = tl."context-filter";
+  deps."context" = tl."context";
+  sha512.run = "3e32d0132997f21c6cb5d4c5740cd2ef4db3894343196f3cfaa8e046a289082b0b16e811582124e974a93df1606ed4a5b6a1284663eff7524048eef098227593";
+  sha512.doc = "01cce32879386b537a83c203c3327dfd0798f75e781c631e24357d290534a657280b009549adac29ebc237ab1bf228a7cc6f513197c5fe8a2f6867c798f44949";
+  hasRunfiles = true;
+};
+"context-visualcounter" = {
+  stripPrefix = 0;
+  deps."context" = tl."context";
+  sha512.run = "da7799ee31a4298f8e8cb02cb4e480fa49fb4188b776df877648c663c93523636bdd7fa6ca5eb403fc8f3483064bf223fed042c1d27eb0817c224ddf8e21c673";
+  sha512.doc = "1788355ea4109e7e2bbaa9bbc3798f60a814d549d082638a59a453cc5fb39b54ff8a00471a28a96a5501e91899874ae19981ae0f8a09b6353d19275b851b9f80";
+  sha512.source = "39bba551e9f0bb8d70c0b60a2b0fba3d7cad30555d4052fc6ae722bfd9cb79d5cca784474a9f1847faccccb1618662bc4dd2fadd1fdacaf2f4cc9c035b5501ec";
+  hasRunfiles = true;
+};
+"continue" = {
+  stripPrefix = 0;
+  sha512.run = "42cda9a2796e9006263320163777df7046a79e38cb2c0ffb53f23c27cc03c686e00e39b066228b09ca99a6e5c2bf4a6cb32d5d7c49b40cf614c542e258968ab9";
+  sha512.doc = "0b6bbf7c3123b7e741255bd3ff9e020ec61bcb81a236ddec41e709f14de514057d9b902ad783f48e5c04ba1ca6daee31a38f130649cb0e5b2d548ca9689d5dca";
+  sha512.source = "790671ec666983e4ff5ff594b7df54cdf7c9d136d57f9004f5400857c3001ffbd3a13a5fc559f3ab75a168c66fc5aa2ee3b5702e5ec417c9a31a1e65d18b801f";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"contour" = {
+  stripPrefix = 0;
+  sha512.run = "0dd4a28f97efcfd0459595776cbab019168fca48984d78f9ec17e0f3af9dbebd378adc6649bce6a9a999651c75316f3ff44e0f10e208465dda2d904d080c41d3";
+  sha512.doc = "af1c649d2e5666ee3973395babce4802da2154ba95fa7fc08e378c261a8ea1c5be44053c40c5cc1bd0c74e2c54b659470c3d45063fbbd4330cdc5e664f19bff0";
+  sha512.source = "377b4a92031cd957b15d232cda9e4c2e7488a4c71624eed06dc2edf9dca37afc11e18691650ea377da2dd78b5f636272eeb6d94bebd99ad5ec1ec477f7b65784";
+  hasRunfiles = true;
+  version = "2.14";
+};
+"contracard" = {
+  stripPrefix = 0;
+  sha512.run = "07c77a1e864c012a88be95a98ef662f5642fd63e84801a994be702f5ae2d62100b02e109ba6c775f2c8d11d75627fdef48acdbd55bdb4735896fd945edc4fdc6";
+  sha512.doc = "984acf51897209c3bc3fe4760088a6b9cbae613acf51c5f8c848dae3a3d13e5e8171fc62db25dcea267cadaf9f2ba81d221085ae90a7da1fb5e6d0dd8e243f10";
+  sha512.source = "6a0f0536861da9f012b5600fc1c635a9f9124c25b4a5d9544ca00fbc3770760c0d1de77587452d33c254abec3bee6fd923e31f2bd34581c467f15d1d658a9cae";
+  hasRunfiles = true;
+  version = "2.0.0";
+};
+"conv-xkv" = {
+  stripPrefix = 0;
+  sha512.run = "7bbbcfd71a32704f2383289d91fcc1b5993aa9e184f5d974f6dd5592312e85848a926ad9e6f412bef801daa20cc2b9c999ba137b9b24e31facfd6931309630df";
+  sha512.doc = "c1c923008185db09b3e7cfd90bfd9b33ca2a61ccc706b0f9cefb238e0860120da517fdc7166e4fe476a1cc02cb4a7a3fe4c9b81c87c8de25ddd1c0c417dcfca3";
+  sha512.source = "edd5feac4453010dd996edbb3741339904b0380c021f9429933f6b27df6d9c002d593d617467043ae6087de3c5842fb7a4e8ccfcc95c7763e124ab5f5c9dc024";
+  hasRunfiles = true;
+};
+"convbkmk" = {
+  sha512.run = "01bb9621459bac7eecc99b1d9aa59de420ba805b2e0ecdb2a89f5c86fa4a3021d957b4ddc69617ea406e77865d68e40c657979c488fc51f4676d084cfe6181cd";
+  sha512.doc = "937d436cb9387eac601883ced516fa40f60e606bb4bae0be62e1ded2a31754a1d00461a34ad533cce1cc48f4d11e880233eaac128d80841e0b22f18801e86506";
+  hasRunfiles = true;
+  version = "0.30";
+};
+"cooking" = {
+  stripPrefix = 0;
+  sha512.run = "6c2fb1adf244dafa9689844e1283dce19786e2c1df170d4172d3567514555d90adcb82414f79b5d9dcd59cfdd3af5d6893fff57972d6e4fb32196add0ed5b1eb";
+  sha512.doc = "30cc2a5b4679126cad1b13785081d924f9d455a5f392e5047c14c8ce1dd3efca102bafb74e1a339dd938680f3a95111a7025a31508ea63108eb33cf32b03c9c5";
+  sha512.source = "7b935bbf1a7e7dfeed2db1c4725e38a3bf847822dee7da8d6098e7df82b5b5035b47ce3f0b9403dcf35028b319c2661b0bd8288b8a1e80395944532777451bd9";
+  hasRunfiles = true;
+  version = "0.9b";
+};
+"cooking-units" = {
+  stripPrefix = 0;
+  sha512.run = "d37a80797b11767dca8494626e7c7fb7b6a64ef216f2f278935d5d1078547239e05b1d5945d03c1d91e902cf979d492d5586a6d1419df1a17192ce77d4c20d22";
+  sha512.doc = "06cfb266d9676148b305bb4e2a6b49c802752195abb4ef7510aa226e10b6d9f804b7e9bf45e8c0ecff19071c1aacd6dbafc9ff89adc55830609ec158a3ef2468";
+  sha512.source = "2a3ee2c632a544708b192b260809403bf6a9124c2207babf9dcce20d6b8869d01adb5a37a2644f6263c59d4c67eab11461484d454be67744a8243f6a08f9a4ea";
+  hasRunfiles = true;
+  version = "1.45";
+};
+"cookingsymbols" = {
+  stripPrefix = 0;
+  sha512.run = "9b43ffdce038ebb001c0ab6198fa2d92ad6f1ec6040f1c315a53fbfd29367e5c851f4015c36b0cdb2eea84f4a8dc90aa3d5126a09f93766d614931bbf555f982";
+  sha512.doc = "fb6794942d016d12f527b86947c7fae9947a7cf9122a7b26d39bfeb6d5f55a7cccc11b666101b0c80a92c7385ae8305bcb4d792baa0974b738af80697ad12891";
+  sha512.source = "b2e8ff3274ffaff3a3f5b3de1ab95a534247878f163cba8cac9af0cb49c59c54f9ac7b362c75dbc394a3c942864b3255ed28310ac5ba842b5b63ea0d0d80f7d5";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"cool" = {
+  stripPrefix = 0;
+  sha512.run = "ec5b1612484852897856b58bde90aabc3e8c051f6a14674f2bf3a121993ce074214c3d61c7d074dae54e227c759630cff71793ac1ff433b048f3a15f90038c0f";
+  sha512.doc = "bf27e08a04f02f58ffb04ae0fa7b26860ab4129d3de3e2ab20d244a99c96b112a7a3dc10d064a364e38a80c1087ea8c693e7e7538a36975b6914f75418a82547";
+  sha512.source = "1f5b16c0e1d4598ec4f4c5981e079537b0142f92b514d1f3dad567b2a71b02f9be0b3441087d7a973750f308f691270e750d75f669784fa3c787e6bc919d7e68";
+  hasRunfiles = true;
+  version = "1.35";
+};
+"coollist" = {
+  stripPrefix = 0;
+  sha512.run = "e7568164dc7d7aa9395cd79e52e4f58b1087d1203d7ad73dca6aefab9222af6875cbacd3270d3ef193416c1b2d893877118c74a206fdc813b3fbd52935ac9d7c";
+  sha512.doc = "6e183739d0dea5e0da341381c06a671879caf6fc666a74c87b8c3e9df425d3a99cc4ca2f2acb32969cce869a496f0a50bbfbf1351bd71e177b63829bd11aa6ec";
+  sha512.source = "5c49e978c7d2ecb73de8a1b5284bbc81c10ed311f67fc2c435d27ebcf048562e2329be02d92cb829ebd497e5cdd11660ec1372bd3256bbce0037766ee8fb647a";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"coolstr" = {
+  stripPrefix = 0;
+  sha512.run = "d4fe8de308d6dd9711f1d877fd1d5ad32f36a4d6cb17480571d88f4b63f9441fb1db217629ddafb25e774bb6d43d148742f9e823e1d43f497a9799b869f90b62";
+  sha512.doc = "63c833be3ab646ce509e5082af3d135d81224c7b586f6998e5fc7410f2ed0e52abb05adfb49d78bae721889fc522395b53810e3ee627184de83dddb198cd3083";
+  sha512.source = "69ba696387583767b4c4d0b196c2b37000da16198242ea1ba4e2208fce6dab8eddb2bd40093eb092fe62b3be82aacab4b11ee35e2f94422eb07e0ad489709930";
+  hasRunfiles = true;
+  version = "2.2";
+};
+"coolthms" = {
+  stripPrefix = 0;
+  sha512.run = "7a9d8f4605a0ff108ef5cb32ef4b6f455d16898248fee534e6557d8323c4378c8299fc1a6d58dd491020090ed4fdd3e41a90de99d18a9d114b72bd57b27b5e7d";
+  sha512.doc = "2f5ff3ead76bc83138e41ee881713829de7b8b0ecdda353fcbdd9ebdb7851139eb9022fb4eec1a1c03d125f4106ce748123a9d9fcd76859e82158a541aa20aba";
+  sha512.source = "088f76522c4576925af08d387ecfd18b4906aa91fa741c4848eed49addb9a9334b3f27de30c516e7a85583a450fcfd0c7054b071bb926eb8f1f9ab54b5791ed0";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"cooltooltips" = {
+  stripPrefix = 0;
+  sha512.run = "c17cb15979b575ece2c16dac8d56991c7cb32d99e165205c099b5058b658c60b393696fee5f7178611d5ccdf1d812522640dee56c1c4c881a73a11edc2ec8799";
+  sha512.doc = "6a091ed9c41f4cf31d9db7cb2c1c76a342583f9d568ed89380bb624fba35cb3b788abde47f746b0e8a0402da19171fce72c7f356da2a2e4cb8264452f727eff7";
+  sha512.source = "8aad4d9623d41caee76932db0a9436760ee5aef346c68e393e39fbc1ebdebb643b7b5215c232ef04f7968c34e3d0b73e0f4a23d2e060930d97b3a047d1bce149";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"coordsys" = {
+  stripPrefix = 0;
+  sha512.run = "83a57df64b3386b7e927ca30b4b2ea031bd656121dda79dba0f96779e77d733d2293b80a3b08081678bea9b31a31a586123e9866c6aa595561843af3de0cc4f6";
+  sha512.doc = "bb89a04e5889c39c23ee65c38232cc0be931dff383d52614e290b6bd8ab23e7c9063fd7ea656dde896c08830b8c7c85e1da7f56728fd43a1bedf31bef6ca2e83";
+  sha512.source = "dd03bf08143a43b3486524d4aadac592e3e2264d23aa45fbb499ec7e709edcabd87f66fa38349edd856a09fb6d55ef466d565714045559b9b7f418a7d3eb5acf";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"copyedit" = {
+  stripPrefix = 0;
+  sha512.run = "27f48ff201c66d61ed7702b4d11f0d39b0c74974ea3a90506dace0f3cb4ac3c4ee5cac28f9669574184620b3e64a4b9ef3fa5564213e3d200754bbab791e52ea";
+  sha512.doc = "60fde840ac3c6876f031daf09e852ddf79276d2f841dea2ee5299678bd116df31b2ec2dfa6d6175e45a42fd781be6935cbfa2aab8621af641985e3df2c665fc1";
+  sha512.source = "7d2bb6e2e8c036345e301d45c03665b6c8ae9dfe91668f354e77e30e2d8a47d1b6db2e7032717c4b04e8e122952b916459b991fc5b566a020262835bcdf6a6fe";
+  hasRunfiles = true;
+  version = "1.6";
+};
+"copyrightbox" = {
+  stripPrefix = 0;
+  sha512.run = "2ae2afc738cc906d24fca0a6319c98dc1e9382bbde6db3d0c3a371d3de8b92c30b3bf05be04797bc0ed6d905933a50e74809eed52f06cdba5fc5088be033d4a9";
+  sha512.doc = "9b817f2874a35f3e023774d3be32e0f8bf53a26f9daf553525c95ce0c21a64a22c3a716fb20cdc76921ec90b7b5305f305bf44853cf87d13ac38ce853ca00ea4";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"cormorantgaramond" = {
+  stripPrefix = 0;
+  sha512.run = "ebd296acc2bbff8ebcf0142f4e3053d3989257bab98366c80bf81390fa711d95b84f537f394cddeb9c034b079572c515ebb8eabce531329ea3863601cc564617";
+  sha512.doc = "ce82ad39ca86a383bb28b2c766f3d48c7234fc8c65418a8cf90c63b580a2aa92ca0999d90c44cb0c35e119a8f34a601b02ff921433f373d8c8dafdbe04568228";
+  hasRunfiles = true;
+  version = "3.00";
+};
+"correctmathalign" = {
+  stripPrefix = 0;
+  sha512.run = "5a7e9b3b51ae82980cc1ab9d4ae74aa0b65afa533d21230b1f5e6867bb6464f910a07bb1c38621eb18d8bccd8bc50260b8741752936c310012590706726ed6f2";
+  sha512.doc = "bc6c9f24a4107d28120e6934f6966b2560ca4c34169b0074023e941746240879bc0572840d3967effd3a1358ef288ac412946f79fd3b40151c1507cba8828be0";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"coseoul" = {
+  stripPrefix = 0;
+  sha512.run = "21524a0721fa26d85b383879cc75600bcd55ee05220eac245171eadc30dea7296731e4d6d2d3d82d10b32f1d674d444bf1df41dd82b92d5cfa7ea06d53f56147";
+  sha512.doc = "6e950d1f5129b39de2cfdbf7cc46b101f81336f29325a5e74f58dbb4378dd79189d1e29dd88a9e828fe4e758b6de93e76f70884c9fc582cc8a69f6db1e1f2617";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"countriesofeurope" = {
+  stripPrefix = 0;
+  sha512.run = "77d075fe233359be6d50003d9577ce84965c409ae89da18ae91ab214a80200b83843ee25a1caaf1d0ac1e6fc076efbe560f3dacc1770120a89c6d8612915418b";
+  sha512.doc = "03071f1cc0c00f1930307395126f035080c2efae21ec99ae81a03abdbc572d1219dcd3a63b8d988036a1c2b9c4f1a4a564df7017a886965068d1ae314a995306";
+  hasRunfiles = true;
+  version = "0.23";
+};
+"counttexruns" = {
+  stripPrefix = 0;
+  sha512.run = "569393d76512308751bff3c5cb22bc11ecee420bb16b5f7d35d6b10beaa02f9c99a4d440e7f3a35bda4e6821405e5f8d621af5af176821549a0e0f0660f998bd";
+  sha512.doc = "4a67cac01589ae5d3eb61c5c6c66bb38ede138c9c2b56fcb6359c8f851bf55ce3cf2e5662cd7751d6708c86644cb5f607318612b01b60f769858d594c2b24218";
+  sha512.source = "ed482becf766081e5cb05affc10c64979e43f9f655074366063b95943229dc9043943422e1063ecf69e5d44659566fb1d0ffddcc27d33eebff9de69f4aa8c7f5";
+  hasRunfiles = true;
+  version = "1.00a";
+};
+"courier" = {
+  stripPrefix = 0;
+  sha512.run = "a7a7350f23921254b9a37e498c2360aeb67d4aa8161072dafa38c941eca35388eaa5d8a341e8b490e783f346ed6b0f4a4d356dd914f70a858c92c76ff1808440";
+  hasRunfiles = true;
+};
+"courier-scaled" = {
+  stripPrefix = 0;
+  sha512.run = "570256a4353163cba169ac5d649458d363edc5c2836efccff1e7df83c12d9b552978b3531f2ab026430b3222b3dfc00be0e4700031e6bc50bdb60a739a68c9aa";
+  sha512.doc = "59c5cec8491e678b084afb4c6e63ed07ca179b5f17be8fe581ff341c80b3cee8016601799ada090e1fcde9eeb72197986f3d4aeffa7c7a9d10a014e34282f52a";
+  hasRunfiles = true;
+};
+"courseoutline" = {
+  stripPrefix = 0;
+  sha512.run = "fd3bbcd90570aa1cbfae49fca247d761ac0b886d795fd8097754706b21ab1d6954eb8d8a6c1fb4e69d550e7ec89294fa006f50bab0c7b806c545666eac4915f1";
+  sha512.doc = "5a52cabfbc28fe27aa6f85b3653de3ace51b65011ca2e33b56be59854b364319ed8adf95576f8211d9494a367fb637b47fd2805a2663df87103b2d67a168dc13";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"coursepaper" = {
+  stripPrefix = 0;
+  sha512.run = "bae9e3188a3312f970434b21f23436251dcf8d7b5b2049decf1f95903f5e58ddf9dd328ffc6908c70bec436c9edc3ae62b05d110f42a8ab322eb3f464733ba96";
+  sha512.doc = "359ee3956a6da4eb41947db9b5f8dbaac7c13c18ea91afd6d63f738ab43af4c77fd93e9123ecda28b4e2211387c910b7a46b2ccd97edeba70fd6d2852b228094";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"coverpage" = {
+  stripPrefix = 0;
+  sha512.run = "6ba22fe89f292ef65ec41a958a93a8ab729954fab33f10677954791bb2be8bcbca71ba4953b6ec47066d3b92e444ebbef9b5f465952076ff0c679706f0ba406a";
+  sha512.doc = "01346bc57d5742be2196c8768106fc06534ce03571dc1e3e9d48957ba6d0e1a3aab1a4ac070d4e545f058d1b3833e908398fff62d3ce6bd462b927646ff1e60e";
+  sha512.source = "cd47f6d17ab585e84244164bed3b905163157e911dec81ddcd630f23f0b520763b9972b3430f25ff4039e27310eac21e6257727aa4544b7a0e40e7020fc72b42";
+  hasRunfiles = true;
+  version = "1.01";
+};
+"covington" = {
+  stripPrefix = 0;
+  sha512.run = "d317d23948d7308e99ce1e2b0d8371ec165012ac199ba271b8d43a869106ba13d416744d8f78fc8e91a14e4c33456675d6c277ee6841c07084aa8203b0a99b84";
+  sha512.doc = "819f2c75cfc0bb571df7736d630668ace9ecca49bdeca6ed760b7575d028ca2acf0e0977a19609baec02c4e409f52d1b35176492eb3e6d392e591ca3d7fdcb6a";
+  hasRunfiles = true;
+  version = "2.3";
+};
+"cprotect" = {
+  stripPrefix = 0;
+  sha512.run = "f4795674aa97744b0d6ed70bcae83a1ce3b41670a1bff2e67d12825154bcfd7eac2a740996bcb4aa0445697a3e4c17ef3d8606b308b7db3aea263269a7e2eb51";
+  sha512.doc = "e8a5000eb9a538f95bf6df4e2d68ecd8769974192e8181b6eb40e5f48b2cc3a9b9d405d1c7b611e35c41dac5ca5165a503efb7584ee94289ed3255a9482b2b2e";
+  sha512.source = "a9c10d5437f4a9f55680fc3a9841e9dc665b7b642e2831c0bb6239d73ea08312eeae372cf95591d002fa7dd51ae45e7413d9651ea5d60e5837903adf565364e0";
+  hasRunfiles = true;
+  version = "1.0e";
+};
+"cqubeamer" = {
+  stripPrefix = 0;
+  sha512.run = "6dd13c29855533c100146e712431d64e4d55bfe9c49b2199a63f292933e6666c0fcd15e17e56b534e648a64b5117b8bf211a1f0f595d83db54e587977590a2ce";
+  sha512.doc = "38cbdd297bf4ff67d0404b75c497416eddaf18d4430ea49af8413ef504e8463a3127e3d42aa12f2920a12d13c03935d6aab5b036d398322428659918b5058444";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"cquthesis" = {
+  stripPrefix = 0;
+  sha512.run = "08c18f72346fcb3bda3f0bacdcdaca72d68e89675b98f1aba46c3181a334fb4e21de82b219637d05bce0de4259b3b4ef4790ebdea3ac538f4a121311e5fcab5b";
+  sha512.doc = "88daa7155ffbf06bc393c991c9e043015bfa25122737f64203f6c0352eb2e9b386ce7398736ca62d33e0708db4f60741f5ac76ab48eaabb10b5c1ce7c4a40b71";
+  sha512.source = "06b48932193614c71e20f5e8cf0eb4905f798694eddae90f42e03c67d48c1b4dc0cea9d8e9a2cb0b9d8ca31c5b3b4f075813fd9755ceda7a09029e9817d95c5b";
+  hasRunfiles = true;
+  version = "1.40";
+};
+"crbox" = {
+  stripPrefix = 0;
+  sha512.run = "087ae9406fd8f6916e355b51d2f4dc7383228813716ab9f6c37714794c931a9b5defa4678a4471523c5fda2c6b0b7784d11dfb488a8d9c60f0244d9d2d64ab2b";
+  sha512.doc = "8927d6f60a3a895685c679e565632ee2ca68c1f2e8dfd795a481767463d88ec37579bfbd55858ce1e6e433a981de4b5140cf75489221243716cd8035a2967a90";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"crimson" = {
+  stripPrefix = 0;
+  sha512.run = "58708970173456998d07a7953d86b3124a0b97a918910229c0d20a300de688283bdb85b63a7596d2bbf2a6cf5f1069a596e43b29d6fa0c5866ef9b0cc1d01b3e";
+  sha512.doc = "2fac264b2986a52a739496c907930b6182e56dc24c8b13356d4d564113d6aa019734fb450168122aff2b0f14ecea3d962b4097638277b805d3a13cff5493fa9b";
+  hasRunfiles = true;
+};
+"crimsonpro" = {
+  stripPrefix = 0;
+  sha512.run = "f7b01c39e7fc5d170896f1649c1230ad9cf6ed79f4ef5703fa5166bfd3b3bf2fe9c28485a56a70655ba0083ddaa2e444860be1ae421dfe06d63e8d81091f39e9";
+  sha512.doc = "d87ef7bf936a235be18527798ea657d8f963edc0e0be08689bf7551b378d80eba605d55ce6936b997277534069fc9065871e532107986dd9d987cb90bef1edaa";
+  hasRunfiles = true;
+};
+"crop" = {
+  stripPrefix = 0;
+  sha512.run = "6909ec6d94362aca7b0c0a00accba6015f5b30c06bce01acd22b87b2d1550ebb7747013d008b7cc82c4cf0b3f5fe6a6575fcca4ee50707214fcb0e19ed796989";
+  sha512.doc = "b68db452aca35a90dc77e500df8db574c321c693490abdf9c7135c7457b34b5a42dc32213c5917a2e4ee37252d909315c4e68ff76f3185a9c321eee3bee10a04";
+  sha512.source = "dde8987ead8158440334e35ce04b10051a3ff2c12ab61f9a3522c0c6d6bf93351e2b9ddfd17d03b8c2c42c0b7204dc3a54b46ad2f486a32374fb6d7a50e60ebc";
+  hasRunfiles = true;
+  version = "1.5";
+};
+"crossreference" = {
+  stripPrefix = 0;
+  sha512.run = "e34b4d383b8398880b962cdddf248c95f2bc7187b5ed4f0caf84655a94f92b915906b150ef904c696f49f22ef23c039ee66427a03b1430f7a3d5f619f2a80d01";
+  sha512.doc = "e21b294ac2b3489cc81ccc99c54bc60985d8769e297f137180a9373ad289248b5d90acf3dd9800d0690907543cf52f0532f6317ef55a43a5b55541805e2be68b";
+  sha512.source = "ebf66eeddeccc32574b0f6285d655d5e9a00e4c4c6a50c232ecbc438b51e4ac45876e925b41b71717b23004a24680b3302b8a0afb9ba124e279094d705676b2c";
+  hasRunfiles = true;
+};
+"crossreftools" = {
+  stripPrefix = 0;
+  sha512.run = "9f5426951f7062ac3a850d141aff2031ea2197a97d5e4bf2c2b93fcd2719d5b1d6587b66d51fb258f514423bcb43cc8699b58a74c411824ffe7057cc27d03702";
+  sha512.doc = "66597598d04218394abe1762aca2e9ecb25ab25328e9b203bb789459d053ec575f2a7adcc9460b1356d5488b32f2fb8335e8a7554074fb5ab2df810fde2be586";
+  hasRunfiles = true;
+  version = "0.9";
+};
+"crossrefware" = {
+  sha512.run = "351f123bab2b83614b660959e86573845e32b6ac894ddabf24484cc3bbb68d71fef1e543b4d14a3684804f8b4b8e4a5123c8acc46fd813048320ab50f245475a";
+  sha512.doc = "cef9694f4e984ee077902852143e2c88bb533739c6b53c010eae74c32b486faf7806010beecee49bfce07d5f35270bd312852f6d5701860073854a5fec949125";
+  hasRunfiles = true;
+};
+"crossword" = {
+  stripPrefix = 0;
+  sha512.run = "e55390ea7eb83686bc49e1f33fd4df2e7b977e031fa6d42e3d18d2cb5b9f34905aa4c43f173ad6745e98683376eb5ad4fae1a8344355b272f0b4b8096b1521ce";
+  sha512.doc = "121e26265895e99dd00dc84ef8b1ba9f4b6917ccbfafa6a35d1f6b81b42c70153bed17790eb6e2d4a5a4fcd8c5cf2e03f5b6e458a2b125a2b7a0f0292bb24947";
+  sha512.source = "91f7fc2a78a83eb404aa11a95f941f81f10da9a908a8ca4f554b5ed496435cca615ce69d9e608c59a025b51243e6c1bf14ea69c896d944a757e1c1cb470e831e";
+  hasRunfiles = true;
+  version = "1.9";
+};
+"crosswrd" = {
+  stripPrefix = 0;
+  sha512.run = "889334e046aa6371df566c814faa98fdf4931c85be3d49e04d932f02bb71bffaa929614398469be04bf6426ec05ccbfcdbe0ad9798017f9504fba5f3781521e6";
+  sha512.doc = "0d4d1e8c1577ee23f7fc60ab8c106121978e986945b8dd399faef4ca55e60a7ed3ba65220ef56ad11b7a100690f89692f0c1ad80c845e2aa04d81c8664a6cd27";
+  sha512.source = "edb2825137c510f1ed32b9380b3e59ac492a76ed35d2a1b16ef486a8287338c1afd8b26cee9d1ae447eff3dd12de14cd7f75d97db74ef5f084286c7f5cd8478c";
+  hasRunfiles = true;
+  version = "3.0";
+};
+"cryptocode" = {
+  stripPrefix = 0;
+  sha512.run = "b15b76169656d91a366e17fc832f0b661e0bd31e2d8f61e2431d3e7adab66b24c145c2e84e4c9f9aa8dfbe27655b37c657765e549e04f9de447c5c6cefe38480";
+  sha512.doc = "0245804ad3761368a634d7b062a02e5a073ed91499c3792f82670ea6ed18f6790f74d23e5ff4770c1c3af64b3a90d9f3d59ebe88828496ae19fb517dfca1e0f4";
+  hasRunfiles = true;
+  version = "0.3.0";
+};
+"cryst" = {
+  stripPrefix = 0;
+  sha512.run = "49e1c9d0cb6909e421446230bf71123fa71b4aad1d90b1c7614fc465651f701d91f576c2edd8b6840d1c78dfa5557cd604e61a5e745e1ccb2f60bde9e66117ed";
+  sha512.doc = "55c765a9a4799f719383473700a0ef5627ec8873fc9fbd4ffd191d205d24b29d57255d90687176789240a3c4a547a3a57ed341a0558d99aa01dbcff0fc7dffc1";
+  hasRunfiles = true;
+};
+"cs" = {
+  stripPrefix = 0;
+  deps."cmexb" = tl."cmexb";
+  sha512.run = "bc956c595d4460f35c64c92e7730a7cc9cd3af95301afba56c49bcf8415666863de926733409ce1afd99ba767fe3a3fa45c68f2dcc912b69c6f72b618289fb30";
+  hasRunfiles = true;
+};
+"csbulletin" = {
+  stripPrefix = 0;
+  sha512.run = "730ca61f0678ab2dfe4aca6be57b64cf6944ec018a7154f25c565687c29cc746b9cbd508ea01600a1d17f31850dd2bd047ebd47788997cd244e8f74199a96d68";
+  sha512.doc = "b9581a3d257647ddbdb583c5327e1e6dbbb52c8bc3153e115dcbcc6047fc2146ee0b62271727826f608d70f9d1a1b25e844c6f772c12ce6b8c38e1cf32015303";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"cslatex" = {
+  deps."latex" = tl."latex";
+  deps."cm" = tl."cm";
+  deps."csplain" = tl."csplain";
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."latex-fonts" = tl."latex-fonts";
+  deps."tex-ini-files" = tl."tex-ini-files";
+  sha512.run = "d0a3ebaea7659e4f1b53aef42b9a8361e215083fd7d669b0a119ba744ddfb1afc79d5b25d7fa94082085dadf1d7d7da5981e485246c28c4708b82c40e0ad00dd";
+  sha512.doc = "9a8bab74f51651b732bd155b386f69ea8b0aededb0ac29226d6aee2bc3547c5157d0150a854987dd5f9f8a001a7191509340c9dbffdc02bd7c01de47fa80f7c1";
+  sha512.source = "c982e771c3db5b91806faf9976dde51499af9ab6c7afa81cbbaad04dd8808ba07e8c1dd683af77fe112237fe2868f73520a464bbe72fa1762ab6ccc0e8e4cdb5";
+  hasRunfiles = true;
+};
+"csplain" = {
+  deps."tex" = tl."tex";
+  deps."cm" = tl."cm";
+  deps."cs" = tl."cs";
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."plain" = tl."plain";
+  deps."enctex" = tl."enctex";
+  deps."tex-ini-files" = tl."tex-ini-files";
+  deps."luatex" = tl."luatex";
+  deps."luatex85" = tl."luatex85";
+  sha512.run = "d0e6ea08d7f8266de7b17dc5ac3290800ff39e1dd77708b3025034983347791ab2dd732e3586ed84e8a572429b92ebc312398587eb10b62ce99dab336c84b19b";
+  hasRunfiles = true;
+};
+"csquotes" = {
+  stripPrefix = 0;
+  sha512.run = "c3c8bb734145ab42ff388c08263af3b16e21dcb1995f05f91ea6fc6028d9c3c5f4c268aa9c2902e95dbe15e3bb5e01defe2d2360a8aedcf0c8ef5163ea400067";
+  sha512.doc = "0110c7d89008ff857076cc7a3c41870329d3421f10e6cd5d8ab0237562b01ddc238850e677cd0e4f3d1be4b4b3948c08f831807e37564c7075503969f993310c";
+  hasRunfiles = true;
+  version = "5.2e";
+};
+"csquotes-de" = {
+  stripPrefix = 0;
+  sha512.run = "7d4667b77f1e27acb1d3c8becaad4889910edaab4b9da6b0fe821db262f3a31672050f5985a56533003178fbf1d579d170be3fcd22c31bbf41af9bcb68fb7c40";
+  sha512.doc = "1e8829faf2cb23b2e565a4b5daa5a09ef01d590d920444ee4659964bee042148ea19e9fbcb63e4c4ea1e2698697554e0bc532fa0fb7610bbf9bb4bca234d33d5";
+  version = "1.01";
+};
+"css-colors" = {
+  stripPrefix = 0;
+  sha512.run = "b5e000180b583470bc6721601321f81a2f11e70388f05fd85a482b491e1d3ea536db0fbb96a6715fcca81e5bcbaf289af9540c82a2201befac1d2254fbc4cfb0";
+  sha512.doc = "d08c0212f4c36eb114b25128ac8516cb7181ac73a2ea61ee4ed1eafdfa7fed15a2b928d6d0f63bdbf2b4beb93a843fc8dd16b959297a4fccff89c428647f4ddd";
+  hasRunfiles = true;
+  version = "1.02";
+};
+"cstex" = {
+  stripPrefix = 0;
+  sha512.run = "644dc718fe3f6a941304f8d2324db36954edee5c53d4af3ecb4d27088ca1ebaa667576414aedaebb07a17b499864ec0e48f7afca38d26a593d68e274936ac9e0";
+  sha512.doc = "4b041c36fdfde6f2eb5c05d0d130286d18fb22ebc92bb6f823edd5412f146f46eb89285e788291bf23496d679280e6057b929f499753edd39cd35e62395e486e";
+};
+"cstypo" = {
+  stripPrefix = 0;
+  sha512.run = "ecc9054a0866e4926277bf5f52faf97b0b07f0ea660b7c4d089a552ab57d3a900cd1d688981770df9b3a4285c3d451fb23f1b69757381f3cbdf88cf0c88cf61c";
+  sha512.doc = "1ac42bcd1cadde9165f8edceadb438c4c2e91d6a89486e56e31623cf1ffdd5f38ec800d836dc90a5a6a0bc48dfac4a8ec90192319f8f046665c77e91fc51b91d";
+  hasRunfiles = true;
+  version = "0.03";
+};
+"csvmerge" = {
+  stripPrefix = 0;
+  sha512.run = "f3f679127d912a8df32893f0afec13b21a272b6e5ed2d2c147e1bcbea5698e043d88d5dcadc0c772f5640945fdbbf4ff43655d6d4450b48966740cd3cb936829";
+  sha512.doc = "b090bd51f547f16270534c2305ba68af9f86800f55809b050eea25d5566be3a3ce245ad0f79a76ed21ac64b68b6650800fba5a5ad942cc1f3f8e982f56ba5286";
+  sha512.source = "b189b456daf9a54cf8fa09706f93de7e8365d75b792336a8328414d589ffa178ff0c39c17064b532316fc778b73b000610b3f966f9eb0d8e526cf1fd5b4bdd58";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"csvsimple" = {
+  stripPrefix = 0;
+  sha512.run = "c071fb93d269e27c7059919213a858d82bb5fc381d8a9a0faf82ad0b05eaac808dbfc19c30c8530a98582f3179a01774de78b0f290a15d4ef79e06eef0a9aba8";
+  sha512.doc = "da691d9d44e1624ccab48e5979ae9ecb8697387a19280602c28467c8f2aefbafc494067217836a09a6ba1a653c8fd3a7903e3607ca56922ebf47870bea49c583";
+  hasRunfiles = true;
+  version = "1.21";
+};
+"ctable" = {
+  stripPrefix = 0;
+  sha512.run = "3192df463eb4d307ba886b82d586580a741da8d901dc560c06d293e04c5d5af9efff56a1482bc41b03aeaade2cc25cdf6f4dda3e1baa26da1f7d4d138f44bebc";
+  sha512.doc = "a32bc9c82a87f1f9327d5cbf4c15052124608f970ecda1909aa67abcc2fb4f10bdfcbb5568d8af9332687817f6f5bd6aaa0ce4843490e8ffac22526bbe123fdd";
+  sha512.source = "9886347fdf0a1a7105ab33bba00877ce22df66b1d82a60b8818af063da371d8c0c6d8f60252342dfe44bbaa65ba9a93ac8f972c64439bea7296b9e98e1be4b41";
+  hasRunfiles = true;
+  version = "1.31";
+};
+"ctablestack" = {
+  stripPrefix = 0;
+  sha512.run = "3485fbd1bebf80814645c1be3e7358a959637439fa17cbbf7c2478ca73c4312cab82eed2aedb5403dfe94b0cfc09ee3e9c8182c08d3708608a267da235ab30a0";
+  sha512.doc = "2c74b9d2aa44b25952307e4593b4a792cb5d98b78619efef82ddfb134ee3da64de87973db30f3e5d5788ce5e6ef138fca2cabc4ed412c97cfa7b3dc6c3ed1060";
+  sha512.source = "c39356d4d78cc8121b20e572fe59879541ab533ceab64e68f17a346723aad4f73103df79b1711feb12337e5e2dcb56222b00a9b36ddcbc04fb5e946831340d6d";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"ctan-o-mat" = {
+  sha512.run = "a995dfc6d79ba77fe673aa501f28eaf9f057c34501fa032423569317e5a4eed048c3375d806eafacedefec02e91bcb587fa6bfb8c0ff980395bb877b2ce88c4c";
+  sha512.doc = "423efc3f2f850c5a9bcbe787edb8155ef76e56ce5e3a1ba3332bb465b8239616bd1fcff2e8a58db6f5ce9d5191ae3209a5451f746250a3b081fe9b35d024eebd";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"ctan_chk" = {
+  stripPrefix = 0;
+  sha512.run = "6eabd7281d79ff0ad19080350dfcca8ee3a33ddfa6d17827a7851cc53f09f627729c8d715a1dfe50e0c079add44331a07d543cb8b6a57000efa6d73c30f2ffe0";
+  sha512.doc = "c61bc0d70cadcc4382dae55cdc1af076882801321a2de16f164223267732e476e41f949f566808c928f446d69aa22bd9965adb155c97905e32b93808810c76c0";
+  version = "1.0";
+};
+"ctanbib" = {
+  sha512.run = "af03e3079304d24b7cf996158ce7344a15aa2f17efc46378132bedc5e9bb4488f89210c24a8a5ef0c21a293600589aef78b7a8c7a7673ad09ceab2077b0a351d";
+  sha512.doc = "1a971e49827476b5ae419189f7acff4c17ab41159d60c5627663d435368b28aa7dc4aeeb5fcc2c4a9f34f648ac9f2de229b250660333ca2f32bfd0808f24e732";
+  hasRunfiles = true;
+  version = "0.1d";
+};
+"ctanify" = {
+  sha512.run = "6774b151bb0fb052d41d8447c7e8d378d7f31b0a5aea5f2f00b93669b8c2f629f479ae21d40480fd62f468d866cbe0c6f0dedd8a0248f8d83cd1039131849439";
+  sha512.doc = "f9b636cb41b126809d808c167410a37052b1c6c385fe4eb8df3b819c0cf2cac2c7c1c74d7ea15d2916c1cbc563e078845e451000e3a08cd9a8e0696a342b22ac";
+  hasRunfiles = true;
+  version = "1.9.1";
+};
+"ctanupload" = {
+  sha512.run = "4464bdfbf72318b24abcd88e1c25dae5925a96e867c694f3f02a594ed7b8b24cffdcdb345f0054e200a6af63f88b591ff84058af0adfb4a1b3feff2a057d9d72";
+  sha512.doc = "9e027f7ce08041be7668a7a404fad6b6c7cfc71e581ad1216956d0b53c379d204bd84d2d55d186c74f784df8911770b96f934775f44f7141a5f1b9b5e773cb7a";
+  hasRunfiles = true;
+  version = "1.2c";
+};
+"ctex" = {
+  stripPrefix = 0;
+  deps."ttfutils" = tl."ttfutils";
+  sha512.run = "af7b2de3742d21021a71eb7659a04f78d8f69cd41a0ee66d2bffd61413d1abf5a9bc1bddcfea667f3bb0cce64de2d69433c845a8f0443c0df92a0a3131c7336c";
+  sha512.doc = "e899f98031757f690cadb37c457b1acc1f0287df5ba5c90417c6175ff6bb0f9b411356272f33552f47999f5c1869cdd9a6a122b340448077b7a1ce68e110c831";
+  sha512.source = "c1a9f995510318bb0fc71936c39958e65b696fae31fb218b6b9e39b875eed8054868886e1d0125949a654e233a77d21d3e1ed41b533687332e66865eac5fe55a";
+  hasRunfiles = true;
+  version = "2.4.16";
+};
+"ctex-faq" = {
+  stripPrefix = 0;
+  sha512.run = "39ff8931e0007a78e4fa0788d7c7fcd8f25dd4cf4fa3f34b694e681e10dfb3d804842daf45a6e56b5ff450bb965bc322dcf593bdce176ffec27f4696c1c99fc0";
+  sha512.doc = "0942a249a30f97d56bf5cbac2eb4de285a63406620b825a36d9ff8d46fbccd614af488f89e2af7472f1a9075a0e2b7228bb65a5804451df6945ce6bf4287b0a2";
+};
+"ctib" = {
+  stripPrefix = 0;
+  sha512.run = "8999ea42b82e56cbb06e2485060b829a0781550834ea421607b4621199692976488f4031266eee1a6b1443b12828e2fb5148ff43eff137c01ee9db8770bb1565";
+  sha512.doc = "65d8f613ddb651cef4c345791a4a849e3f672930fb94d1ba789e827b466c459bc321762c71675cb4c5fdec8fc456520bb7013d5b737b4ff2bd049bb5917a98ef";
+  sha512.source = "b387b2cc636f98bf7bf43fc3be04cbb62dfd6597c419b7791605011f59981cd9e90737f9d2f0f668f63bf9abff854219a75a7527d881c991190188f307f3642d";
+  hasRunfiles = true;
+};
+"ctie" = {
+  deps."kpathsea" = tl."kpathsea";
+  sha512.run = "05fd794d4437c662b77b0662dd0c9169aef35a10140abad2519702577c087177d0a02ee5b6163873fe5b3c83c3f77c342c4774af168ebca2ed875717c7d0c5b0";
+  sha512.doc = "83bb53248ce262bc8310faa8c0e057dac72c7c682e295fb9888acff237249a66a69d66b99d79033f5a1d8611ef582dd2121f8c28be9800ebcce775bf3adecf63";
+  version = "1.1";
+};
+"cuisine" = {
+  stripPrefix = 0;
+  sha512.run = "cb594c2ef79a1d1614ad2b7bedff3b5bd9853bf36947751c880c36c73a458152eb7036861d0292614992623192841c28a3f4010bc0c4107fd8a4277154a1baf5";
+  sha512.doc = "9e4f55bf8199b4bd06847dd39e67e91a8a6885b3903c9ea772199d9b9fd9d7cade173dff6f785d143b4e7c3b154477622a4c2cad14576b22068a6729693a8227";
+  sha512.source = "1df5e248af42513b212d4c18cd95c8c9f2155598604624cf3b5e5e5b020643bdbb9c3addf03d8ff111c14185234d42f0db8a06a9de040fa0b58cec3895f32731";
+  hasRunfiles = true;
+  version = "0.7";
+};
+"cuprum" = {
+  stripPrefix = 0;
+  sha512.run = "578ce2e5af01e81ba80c0cfcc0225985722c1515e8f98460a1cb5d71d8ee4630d400f28dee04bb505c429b13f5cb604364d26503af0b5d9bf98164b218b09413";
+  sha512.doc = "b9a9bda8eab6087a134b3b0660282998c7c3fa7fda8890e61ba107b9f7576d85ca01b59664c1c198679151e01cef6ebce5b8de29644a2e249a6ca2100f526fe2";
+  hasRunfiles = true;
+};
+"currency" = {
+  stripPrefix = 0;
+  sha512.run = "d975cbe846ad5708a3558252094f4568c3ea4c5bc840dea7ade74eb8f6d90f4527b417a875a7bc286010473078d895cf510560f1287013e70498c983c896750b";
+  sha512.doc = "1f32fed0bf778b3460e094239afd76b4be9915be8a3e8ea20b7e48b02f1ffdcffdd1e588a507b8145ed232a38cee43db1bac0e232c472d5b5dd85f1cf3954c8c";
+  sha512.source = "c7a99bf685283b415c7cf71a6700bcf2928d2342f5db8a3b78e96148fc01ad028b0921a7c048f345dd5d5fbcb3f47618390fd580b02fb4ab1594e7bf5def9904";
+  hasRunfiles = true;
+  version = "0.4";
+};
+"currfile" = {
+  stripPrefix = 0;
+  sha512.run = "5e67b659df7048a2f3e0d99f7e7da753fcabc4cc94d284d88b6b6922dffe2823eff3c07e96d0d4689d2c430a1cd66ef4693d0ceb344609c6aeeb919aa378a297";
+  sha512.doc = "d45abaaab826dd9dc8a7d5cccdeece29b26d8f56c0c74c2047f5ae7d43ffc3c0596f009536fca744fa9bede2e8d87a13b68b8ebf4a0ced31afc6bbab5b76ad72";
+  sha512.source = "0374496112e380b2c8cce8b00e3dd97d992dbe194f660118c3441fd9b0ba536f476b5e330bd363a624f71d5b3004f50d2ee315534929093ebf9f63f47e91c1fc";
+  hasRunfiles = true;
+  version = "0.7c";
+};
+"currvita" = {
+  stripPrefix = 0;
+  sha512.run = "c555b0e9c7a500e086f0435a2dc6cde8da8b02df4d27be14534d28c77c1f546aafecb863bc652922e07191d0441a77db647f8d1d11e33ec9bc6014f73a5822c2";
+  sha512.doc = "b3de1ad371cead2829225015d60a4defe604e63890ef06da65fa9223cce4e748707f0b6f4f0b0dcdf22c3096e381adc3432a7b21b36f834c18ae4eb32bfba024";
+  sha512.source = "a1dc7d983ac6badf9ced1492c712373205d5b0a91934f0a76eb1ac546470292e6c9dda4cd5f5d721e06c90d6237eb39236f1417d1c6992a774f7a9f7df9213bb";
+  hasRunfiles = true;
+};
+"cursolatex" = {
+  stripPrefix = 0;
+  sha512.run = "6c58f5a0f6fb8f129e202b786c258ba088efa44639f162b9e0109182072c16bfc6ba928953d6e9b31b2b1c2f693fe064476095c232dcb9e0c6bfcf18bfb7994e";
+  sha512.doc = "a0f726330a5b2d8da94cbf25fb1b1a2b22e5e9010e0cafdfdee3781bf518f0cb48adb27dce0fe2e46572460f8c1749c0db1c16e06343cabb8cb94227e3da58b6";
+};
+"curve" = {
+  stripPrefix = 0;
+  sha512.run = "9d318d35ef04d171da1c36ab4646465d4aa0feebd90fd3e97db5f1cf09c28c174d0c3be288c369215812f51ca83b341abbfdf3fa44458d1994cf68dfaeef0615";
+  sha512.doc = "7a56d7c3bd8b9b13ee675b99a2f5a8a27fb3dfd81dc5225f3a880f338d5390c893ca887cbbcd9ad8deae2a1d6b6620ef664ea64384f93fd93a75a5c886641a2d";
+  sha512.source = "8e5026da24dddda0f266b8431fb28c27037ad920e37010fd97fdbfb5dae8024cb687b681356a6e27244dd4812bbd043e12c91508978dbe796a119e3e8633566e";
+  hasRunfiles = true;
+  version = "1.16";
+};
+"curve2e" = {
+  stripPrefix = 0;
+  sha512.run = "3a3338e1fc29c7526291a5f6814ed8ba5bda7f96162bd96945cbb8e81c60a51071c178a7a0158f12cab162fcce37bbd9abc33cb2bd9b1a4ba64996b085800505";
+  sha512.doc = "677ec58576b1c5559127b3effd921461eef24be62053d4f74f2f86950a9f7ead20686ff1e15157c989d84df3eca138855c4cef91bd0f592641503068c1de458e";
+  sha512.source = "854aa083e353e53407fd456bcf5175a3ef691035a5c47e3704becaa839b7a13576d1b5cb59157111e26bf6dfb6f5c730c82a6a45be73d77a2656bf32e31649bc";
+  hasRunfiles = true;
+  version = "2.0.1";
+};
+"curves" = {
+  stripPrefix = 0;
+  sha512.run = "b2ac96620bdcae2263e0ff37ef0975fc705efd2ec30fa53a5cc50d54378cb29c6ef44543cc321e6cb37dfca0ea9a6cdf85777825703b866bcbad9729235c9722";
+  sha512.doc = "afd68373952dbf2a97944bcd7b36dcb62d5b65727c660af56dd8da97137ef4845037988e211996289fb54efa435833fa4a503ae4bba70ab38cd6e55f1966db1e";
+  sha512.source = "cdef0242776f9976f72d953ac743a4771ac5d5aaaabf6988ef37d695c78e206f43d546bf21621c5a9f91e191c95c02ecbe9fc9d7e3f1eb23372a755856d61d2b";
+  hasRunfiles = true;
+  version = "1.55";
+};
+"custom-bib" = {
+  stripPrefix = 0;
+  sha512.run = "95b485e330c97242bbea4b989ea9e70882d796f7ff8fdbb10b0627d102ef6177c8cdfca976a89853170a9171a69499c58711d1deeb0e420f9cb268e336d4f663";
+  sha512.doc = "3d5fe696f095ef5661418e3066f2f98768968eddbeb24ce9ec84647b78452f97482ae1dd17cd9c84cfb81fc4a43052b05ef6aa4080e32a464d2ba4e8ce33869b";
+  sha512.source = "e17d437ae7fb0c1328c2fa333f1f7d286a517bb536f7cf2d66ced327d1ddc78b97791852cac8fc9de4994b41f1433da17fa1e41838ddf90f1fe387eaa9e477c6";
+  hasRunfiles = true;
+  version = "4.33";
+};
+"cutwin" = {
+  stripPrefix = 0;
+  sha512.run = "484c995cd3b18f723899fc04e3af7b49bc7ac90a02448c4b49643b8ebe09c445bab122bc2ca0f2cab872323438fb02af3e5a053977ae8ff6146cb4af96f08ba1";
+  sha512.doc = "89b4fb68d949b86eb3b5d90f7d8c828e10df591cf734f5e6908a221aa9e2d50820841e6095dc912619d4461c37b735907504e63fffbfd95c3371602144f87429";
+  sha512.source = "0e6fbb5bdf3cc9b1d270979f379e2f50b356353533278495526275bab3211b1e6ef670a5269e412ae87c3fe4ca0ee8411dadfb42e4e2cce6dc200c863532b997";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"cv" = {
+  stripPrefix = 0;
+  sha512.run = "624d9bd1578e0d2e40e2ca76cd97d7f44d9da5c71daf737e06e6b6b15c64911af17f0da197afa17b5ff3b145461cf7efb058a5cbcd02e7c21642e660cfa3ca4d";
+  sha512.doc = "c04b207a635f1b6f76e316284da987b45fd4387961c59b7b1f1b947284937f91f4d95ade824195d1f0db00766fec870e6859a6dd27cf3b6b426d095866f17d6a";
+  hasRunfiles = true;
+};
+"cv4tw" = {
+  stripPrefix = 0;
+  sha512.run = "607745abedd1325c59bc8ae360a1c5d00834ec7bd050b057ba5427c135f17046027da3fb6130a0718e8d33bcab74eaf235f2de7a1ace483da1af87be5e559867";
+  sha512.doc = "d9166421ab15d7569a4db66970486c78af43ddbda9d7f9c9488dbc46eed91ab5079c0f9b7851835afeed6045ee4c65c888e1be93a95cda14623405847267880b";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"cweb" = {
+  sha512.run = "274b81a9a12de63e62c72878971c517427fe3dbd9a5ab10d89676326ecf23caefaa961504cb0e9a609224c519a3a6983346212fa67e759dbbf18c2c74de4c61e";
+  sha512.doc = "1acb8eb3dfa5d563369baccf3615c06c61f03ae70e18988fe4d4637bc97290f04288a9d15c548d48c65aba0dd3b0b23faa9c1a7f7aa093ed37035fab569c8d4f";
+  hasRunfiles = true;
+  version = "3.64b";
+};
+"cweb-latex" = {
+  stripPrefix = 0;
+  sha512.run = "5d94dd53bf3212967ae38c094115c4ae581ec15a49e3d0f64be311cd1aa190eb9efdfec2cd83bbc3bd89250efef9470a6a6af342247fb9670992546a976a5886";
+  sha512.doc = "16c8cd2681e216084564cec718401b9e8d98228e6597d38c42f8ef4cc4775e8e606fa11c84d21f0450d85ee18c7ed1e5fd9e1f54bcd0e8c2927b1147ecd4591b";
+  hasRunfiles = true;
+};
+"cweb-old" = {
+  stripPrefix = 0;
+  sha512.run = "efb1c9b65f7c628905d2dac1373da96346b6b6c78f15e8c0c8055e86c1a52b09bdb5f78fb06106e350d10a8daa378eb45f5fe788c6c3d8b23f0b47c3db6f256a";
+  hasRunfiles = true;
+};
+"cyber" = {
+  stripPrefix = 0;
+  sha512.run = "f79e9ce92036c8a106de0a5da06f5c2b833683527f1225f5b69298b6d886cb967f9d1eb459b7a0543d89b0943a8425dc802619fadb9d69aa4f57a5ccc71a593b";
+  sha512.doc = "4dfc2289e92552dde5cd1703e5644e6a19f4281dd16cb80d86caa35cfbc07eaf0f5cd57686e185adafce3883433fc87b1fcb590cd65087571115dd4b98023d02";
+  sha512.source = "cf9beb92528c860a3ec39041c0436d40d113bb0cfaf89ae9c5b76dd44ca18b846b14739c1a2b447ea1ff84042dbecd48ac2cc118615ebd30013da305e822c81d";
+  hasRunfiles = true;
+  version = "2.2";
+};
+"cybercic" = {
+  stripPrefix = 0;
+  sha512.run = "f3bfbece973cb3b9a3077c160b0212561056cbf7733e1c011b39fa1dbf94395937f4858964acd0874f1cd3ba283df9797cdf19e8e71e7363a7619c5ae653881c";
+  sha512.doc = "dc72453f55c6a72913865f584b026baf287a35885548ee5c2c8d29cefd60595f4aa9f7c456f59ebf3ed3e3b72711beaf90cf85f24c2ce6773146fd2a4724767f";
+  sha512.source = "55223353fadf2986f777b4a61b2f34662f493d2c70e29cba8712625c16dfa49ba50644d406f49a908afb0e4b6816666c1cf5f060685d5428eb2787b6b4ef233b";
+  hasRunfiles = true;
+  version = "2.1";
+};
+"cyklop" = {
+  stripPrefix = 0;
+  sha512.run = "dd6584831fae3eb388f66e42f289f9bdeff401412c7df471752c4aa56bc67c16c56f6f271d11c289a1389faae138ac15abc41bb716bf344bc2f49fa087ecd380";
+  sha512.doc = "4d81a01eea30a4f86b2f0a7c9c21923196dbd28c7d5ba5c1639068318ef227720550b3052cf0ead6f3194450d50dce9acaa325a0dace0e6fd230e0ed11d9b106";
+  hasRunfiles = true;
+  version = "0.915";
+};
+"cyrillic" = {
+  stripPrefix = 0;
+  deps."cyrillic-bin" = tl."cyrillic-bin";
+  sha512.run = "447f8628641df193b258559435567e5e7f912de6a87688e68676ab683512f09661b2098707fa6ff9544972bdf3a58d81caf946811d3ff8516782062b1a10545c";
+  sha512.doc = "fa2a5ca9c0952b80150e0d2b37f9472981ba3ce45e8ea5cba399551c6cf5a309d8329702494eefa759ca6423fc7df523cdce47eb9e9ecd12a5b15c1ba322ac48";
+  sha512.source = "5f19310aa96200cd97eede4308ee7e0de75c06905880879b8fe83c614b63588717e2cff476e4dfa6e32a1a83c5925eeda0bc915d3b1bdf42250ac8523f61c215";
+  hasRunfiles = true;
+};
+"cyrillic-bin" = {
+  sha512.run = "f218abc7a05b5247ac3e7c6488c94ad775f7d238d4caa96d7537156052acf8c51cdd2131f55411050f7f8d725e163aa37e16a6af7147e0522be3db7115dcd207";
+  sha512.doc = "bfd4da4e4ba7c0d47e929a31b0fb52f5690b54fda797dd0df71864d411baffee9eb8c99b83942129802799ad95fbaf710b0f4da6be2e8fe003fc24fe97d9322d";
+  hasRunfiles = true;
+};
+"cyrplain" = {
+  stripPrefix = 0;
+  sha512.run = "84651aeb63d3e47f208732f3c0d54ba86862d0ff7da7c56b3d8b8d1b49b6b88ed4c5f9abfb4c1c9d8a1ef8a455632aaa69408651e238bdc4aeb4eb7709f62096";
+  hasRunfiles = true;
+};
+"dad" = {
+  stripPrefix = 0;
+  sha512.run = "3a4a039e8407ea7b8ebb9b2fa500a634930161f6e824e0d090fb00c233cc29bc110e5fd802ee11768569612df1c18cd03137ea086dab86e19bd3cb54dc806045";
+  sha512.doc = "5715bb8219f9800a89c660b2dc581b5be7fd86d9dc085417f3d8e3342dba2f27c16952d9427af64212d6e60359be551b8ddf4eb01f89be93a9c714024c82eeb8";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"dancers" = {
+  stripPrefix = 0;
+  sha512.run = "f570e4c775a7e4cdbeaf2ad764ee147a685b5332369aea29175a76fdc9fb37f052da295d20a177eda8e4b8352d733034eba36882c2507fe804d7b996c0e0537a";
+  hasRunfiles = true;
+};
+"dantelogo" = {
+  stripPrefix = 0;
+  sha512.run = "883c5d6f8368bed41002eae123329954fe38cc23a5e6db7feecd57c16540b6b9277cf7d13af6ce8f63994c11148708e1d3dd10ddd9d17457b015d40477f91eac";
+  sha512.doc = "4612de774c6a39c7f09dfc99aa182fd37d9f3e32dece37726f1e87e48e5faae246f2959992267f5b2cb685c26177e47c5112fbe42b8f1ac3a60da92e6276a681";
+  hasRunfiles = true;
+  version = "0.03";
+};
+"dashbox" = {
+  stripPrefix = 0;
+  sha512.run = "a52bac248fa26031db34686e57cd3c9be90bc18b41339d7e2dc85a68de1de23a627648599e5fdb207d3364b2b4e3651aaf9c2d90e6c3bd0f0fdcaa30fbc8932d";
+  sha512.doc = "26672278ffdbdaee64b82f4e7554b5664ca3410ce8009454cfc229e3590439b4a4e212b77568605adda885761f5ad456bca022f198e259ff9a33b8e0abc1ea6d";
+  sha512.source = "833bcc8f98e6fbf3e205b54311dddb9377026234132e5f988abd25e3ace36b9f3b54a95e98a5c4cc40ef1f049536093b0f779517c6f5a63a08459bf0a7ace741";
+  hasRunfiles = true;
+  version = "1.14";
+};
+"dashrule" = {
+  stripPrefix = 0;
+  sha512.run = "4b1b993e9044eb2ed4bf6bde0c114b0cd1fe7daed38f8bc5d3e25a2705d55cb41b8a372cce84b0d61093044d970003a4317de98cb468978c8cb1a8315f980940";
+  sha512.doc = "f45e0785d7c6522683e724ca27f7505e3da6bf5923d5a8c71a75ef8c67ffba8a4e4711b91b64f25dca95566448cbf74b5937dcecc73f5ec0aeff7ace8d0e4c1f";
+  sha512.source = "0cf95a6d5fe3e80e9f77266033d64186300676d74a7cc39dd6f907784d1a6f7c9f83ff5a50198eec8bfc075ef5adecf58d226063f3f0e02f55dd7cc0daf691a4";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"dashundergaps" = {
+  stripPrefix = 0;
+  sha512.run = "190b4559e568ac1b5281314dc17d8e2b143af0b1f3e0812c02b70eaddb6ece2a33843585dfbf21f10af0112e2f6611338df3708d396997bc63f8f1ca5e9884d7";
+  sha512.doc = "262ac83918e07be8fc0d57c416a6d3fc342c75160cc603186147b81c00af2edec662c1822b01d486bc4dc871733dcb235f3f7edcf9f4cfac6688d412cef54744";
+  sha512.source = "22b6d3821c2b9ee3d8fb1ec40a0d5825e98c957028935706d2ec52e8608d413af6a14ebddf02d140882a79b480193b940197afb12d94f4af3daf6c8e67b69c82";
+  hasRunfiles = true;
+  version = "2.0d";
+};
+"dataref" = {
+  stripPrefix = 0;
+  sha512.run = "8b76861673fe05785582abbfb50d46ee6beea2cd63bd7f622e2640acce9c88a39e4fbf57b6db7872dc3f3b473d3e33581bb6c93f305e036148efb1c3ad4b6d8f";
+  sha512.doc = "2d1bb12245c071b8282db3d0aaf198206fe2b8509527ef6e56950464b6f13d20be8381015fa62a1b0c7469e004664182170ba400c7650b38bc597e269f1d173d";
+  hasRunfiles = true;
+  version = "0.6";
+};
+"datatool" = {
+  stripPrefix = 0;
+  sha512.run = "e399e70d6d5a1af9a19e47eb6beb7bcfaa2200d96151ffe5e068cac279ce88a3c9ad5e3b55bd93bc4eaa7ca26e3ba1dfe906fd979275b04d57e86b1546b7440d";
+  sha512.doc = "ee42a5da7ed08e6938881f991addc26f3cfcda8e5dc03ff3aab7fe268d749ac38793efd9dbec2b195f88a76718d7a02a0c9c2ae11a901b89af0cd7c1081a1400";
+  sha512.source = "287d96d2b74cd34909917f59154010bf167e43051b5b0d992813392b826641d01df84e03256988b46ed843a7d53e3f6f9c29754ad3cd5c2f6c33c4998a17fb27";
+  hasRunfiles = true;
+  version = "2.32";
+};
+"dateiliste" = {
+  stripPrefix = 0;
+  sha512.run = "6da6a802994a06e040d43ac7fc9db0515d9273ba9d4cac061e04b05922f9eb9fecaf138eb641b3149be7b98f9139c428084b6470bc177a020386e0dc053427b6";
+  sha512.doc = "53ca32cabd7e3a32d02c77beb076b08ccaa782b6a2ae249b932242987741f0e255bdc83a2b6ccc7ed2e0efbec66923798026040745152f7244984a0843c8c23d";
+  sha512.source = "563840e069cd1e1c1e9b1774c5c3ee8b1703305fac3fd5f58a0afe76f154210150be05f779a94717c227978d2a1317a10f5b6232f51dc7b3e422638b84b2ce95";
+  hasRunfiles = true;
+  version = "0.6";
+};
+"datenumber" = {
+  stripPrefix = 0;
+  sha512.run = "f87518683c9820e816f33e535bc8e5d7e31fcda124178593f9635b040151d1f43f6eeb4d69ca974b847c97efcf19fa94f571d5534dfdc8ac0e40d711d26190b3";
+  sha512.doc = "b9c156b19bd6abbb3f996495dcda633172f8e559add744ebe25bb58070ba06bc233c2dda54c93415da14aecc30d2888241bf9b80c0dc5922b46cd3ee05865701";
+  sha512.source = "ffeea9042501496e815db5c90cf8a99931fe96bb8dbae6e2551994242336892567c140ed352ddf962d1f144844960eaf03187aec6869780a2c3e218446940174";
+  hasRunfiles = true;
+  version = "0.02";
+};
+"datetime" = {
+  stripPrefix = 0;
+  sha512.run = "3d033ee164d52f7085bffdc12f2062be7e94a644d9ed731b4d1b97a3a46838dabadcf6687063e165c65fc938a51a4adf8078339b720a305175d6cd6a3b889f07";
+  sha512.doc = "510449d17b09d9207b76e732b5d426121888cf653f29bb3be8872b74a243596ac339f09d11a14a4a3007f8818171aab28727cd1713ee35c8908d2d168a57d9b0";
+  sha512.source = "3e03ba12952ad5dafa701c7ddd5d79097890d13d3510d420cc399b30b1c60c2b6f72bc5caa2a6d2f53ec50430d13582c5c6fb549dcb3566f827af0d4abeaa011";
+  hasRunfiles = true;
+  version = "2.60";
+};
+"datetime2" = {
+  stripPrefix = 0;
+  sha512.run = "876b16d0fe08584c02804e93bdce6029376e1c37b3c8a3a0a5ae4ce93cebed615b077d042cff0a658f0f2c65745fd22b40f18c4db87ae73ecf3844a699f09e81";
+  sha512.doc = "37fb08d1d23645a53a6d0c76aaeaf8df34de9ee148aac23723adc892e026a5daf74c446f1ef747a62175984dd601560a1338fc37ec6600d9d0772237e60b1d21";
+  sha512.source = "42f6ef0eb78480c10ea1dfa1ba3733f48fb5f4a639ffc11c11d264ebb46845823224604b7c43b4120da6ec0534c2d8eb63c327825c074c7ffe01ee1bad3137c2";
+  hasRunfiles = true;
+  version = "1.5.3";
+};
+"datetime2-bahasai" = {
+  stripPrefix = 0;
+  sha512.run = "6bc05fa0f1cfbf05008de715f9b278948272cf7894e8c29b52b6ee4ba436e01e5588356fa020fd5453ed2e9bee185cb46c54ee3e808417782587c9509bab17fc";
+  sha512.doc = "d9542fe7057b9972c6e0b9ebc1360c2fde8f9b3538e70efd7249f0bb344f2d5c2845acac9ce39fec6f9f7197b47e65496ffc662b9f3a3044829e4709d6202995";
+  sha512.source = "7edf39f7e2c5b44923e66cf3dee57e7681c549b7ae944ba2f4593e4643e9d50b686b8c1cb6905326899b6974ec5c0587ec7a5f4f880b5b1e81c94667240c601c";
+  hasRunfiles = true;
+  version = "1.01";
+};
+"datetime2-basque" = {
+  stripPrefix = 0;
+  sha512.run = "73d7dcb4a2d13d4ad4747d4d2a19b839bd9a1bd55793657315832178091357f61d9b748d5aaefd317baa7f52df2a4926dad6196d11d11cbce0df78168b2ad380";
+  sha512.doc = "ce083f982f95f5e4beb33a706144d26f6f09de8ede946ac89d28ad5e5c75f9a475e4e9bca5fbc7773ee90a91ca095f0b1a9908fc0f74fcbb4117ec7511d603b2";
+  sha512.source = "a2bab4c1956a0471571221a57f85e9f4260e349a9b775540638255d8313f5db2c9922120e045b8c769b7b7fe1698c7fcfae1e1aa101e858e84aac32673f6fb86";
+  hasRunfiles = true;
+  version = "1.2a";
+};
+"datetime2-breton" = {
+  stripPrefix = 0;
+  sha512.run = "b212e5cbae4f1b61c3455f2ed2f05b9b61f34d65079d5f9fbb0be716c9d06f14ce915efc1059cccc828b52b3c0fae3a5e08680195c4ca20bcfc8c6378798229c";
+  sha512.doc = "4b6d0592e5fa100b3a68cdefaee29a089827fc2f86d5dcc1aee79aa6348b7cf4165319433714914337239220d01e8a3d93fbad1448cd3ff4790c817215a1cbce";
+  sha512.source = "e4a7240799195b9be7a9a755c181268082076218e1e49c4a81e5ac2c32bbe1537e3965bc5e6791a62a3a502c27059292bfcd985f3fae31e961bf129ef166dbf0";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"datetime2-bulgarian" = {
+  stripPrefix = 0;
+  sha512.run = "fe0cf5eb73c5253467a8d2b972cc20825b5179ccd3964f64656ee8f4fa5d7fb7bf1660a7e79d58c491fe74e8c9421b75c177d4c8bf7309782c81ddeb69ff1203";
+  sha512.doc = "f07df79af157b8ed471f5c8021719d8ac4dea9075885cc42ed0d64405692efc5ea59b6a77448225aee477b8fb05d564ce9155b7e1efb3d9cd7b7baa794783cb7";
+  sha512.source = "9692b6932f74a7e15a625612dfefd975a948f8a2111401c44b156702fad868d7d34381191b5cf675f0c17aaa6234071e10722f6b912e80f8afc4af69353dbc6d";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"datetime2-catalan" = {
+  stripPrefix = 0;
+  sha512.run = "7a414761760e3fb61ed12c656a88b6ae4d36b8268998f10ffc85a9cd362a6ee60b73b37c0994aa47603e805d785a3a0faa7266efa46c3e017535b864f2282e5d";
+  sha512.doc = "d1613bf5d8a35f69bf3dde127a764434b8527f0e627cecbdda43490642cb8d0a10ae629bf5f1359b7a87c12b3845bd468fb2c00b508be1d2cd80b6ad98904ebe";
+  sha512.source = "35fbd618c48265f4cd6bdccca100396f54b6379111189f8fad705e93f69026fbbba21f246074a3d154855b0a04e83c4a310b99c78e2105f821d109cfdadff6a3";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"datetime2-croatian" = {
+  stripPrefix = 0;
+  sha512.run = "603052fb5cff6ea8fa5b951623efb1fc72aa6583fa1ed560b4c5266ce96cdd209423773ee0d3a592465247343f3fff966d7a9cd9698e02e339d5a1c579591f37";
+  sha512.doc = "a56060b84fc6d2917fd0cf160f0405104a3413e02456ce91cbd97aebd746b0e91c730d2e2e4bbbb46f39521b5c6cbc45558bb4327c7260719ce21e8226fe5910";
+  sha512.source = "5eca1a663801a65b79e0cc069bfa8840e04e08e589445713ea0646f104f5acba51d6f925d2d4ea1c36a83b8f4e095693767a3ca71a33af1015fff5f396c51bc4";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"datetime2-czech" = {
+  stripPrefix = 0;
+  sha512.run = "048ffe6258ce1d4bf9d098e7623d3c5e25ef8215a538e33806c4d35d6368fda81941ff9adbb394085c9b4f058fe9a3b02cbeeaae8cb1f7b2bb55aaa35c743d61";
+  sha512.doc = "976e98000a80e15a4ea5204f15a5288781ab35089bcd9427b62fb445f28a25ba0c03af4e64a3de688a51c5c94788732fa199705a68de3e9925f1db4ec7dcead7";
+  sha512.source = "9ef924462b97d29d6102cb691d1845f68ec50054a71d93222b61af91f510211016fdaa4861433a65c589263af11a62cb23d64a79f5bb26624395589dfa812515";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"datetime2-danish" = {
+  stripPrefix = 0;
+  sha512.run = "b9e5b442282fcebfc114a772af8317d8888cdf24cd5cafebd5d3c79e3ea8790a4fd082c2facc1a466e7e5b4266b0d93ea5fb6cae64f96f3d131fd4869a465a4c";
+  sha512.doc = "1d933d9d48ad6ef3dd0716fce0b2da6de6700bcd8c1d729d8216145dc5f243ea83323b0fefb6adeaf10a9fb264343e1b429044aaf86e6a77a121b0c951c2c77a";
+  sha512.source = "dbccc381f173d7204eeaeb8b8a4fcf59e6f0750213986207afbef3754554e4524e1ceb3620135a93ed43d786210583b3f931b41a1c645bfb22e33dcaa45a6c85";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"datetime2-dutch" = {
+  stripPrefix = 0;
+  sha512.run = "c14fcbb882183095c60f0e881ad1668f90855b90cce352922a562371bf2cdd556bd196ec85068775b9aec590f098c956c784b98da283ee1117bec68ee585f5fa";
+  sha512.doc = "e5f2fe126eaf87ef34dce686db6e9b9c3c322a2266293517e803435dfa67b55da6a771f6c7253203dcae0dd1237096093a6463f6bbbc096c108b73bac4a641d8";
+  sha512.source = "32036be5e4e8643da1cd0a2a291db4875328c5e8685f711e247eb7fc38b6b25b92db2f98bfa3769a02c982ea09cbedc75bb963d3f39c36860f9c335e73e331c9";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"datetime2-en-fulltext" = {
+  stripPrefix = 0;
+  sha512.run = "19f08e264921b8b12def2b20bb1d904f90dae712bcbe579a9697d1f657f148ad8311c6d7a8621f336dc82518ec64438640b49776fdab62f302b0919cc7de8e4a";
+  sha512.doc = "a6ed1e804d8229d735aaf1874458dda3206ecb5e648c35af82a1d3fe524e65aeb7669088dc4bd9fd83919263d59035fd539a8318a24b2bc2470f14670e28eced";
+  sha512.source = "9bf741dced10ac57d7c4fbc3a8a26b49b35d07a221f4d7ecf56ddfdea6500edeb39ef75ed0234d6e510ea07da5da06cf29691a36545dc4367b3682e879d92b10";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"datetime2-english" = {
+  stripPrefix = 0;
+  sha512.run = "1385ea09d797877ea45dcc37e864c5e695d8eb2e210fabe33e6c13ab221cfeb5c55bb2d95ddd9db5c07653ac882375426c7694dd8d3da6bf77ac8f3fb798e02e";
+  sha512.doc = "21fa34d1dc4fc5e082bec3c6a82a29683c0ae6515cc8ee3f07c4cdb3c01639fb05e033e40c9aa4e8489789eefeb904e5b3c2e5cbf4501db26477db34f5e39219";
+  sha512.source = "20cfbd776fc91c547fef6dddad5c87b6abd49273607fe854b6dd453602833e7bcacd138e92c3c567c80cc8a45b1176160cd1cb0334bd6dbc55ff8477156cfcc9";
+  hasRunfiles = true;
+  version = "1.04";
+};
+"datetime2-esperanto" = {
+  stripPrefix = 0;
+  sha512.run = "6406e5a6708c1c97da6e0f8460ba70d61c403875497c57008013a3d1a8a9100b344b3d7267ed869f777566aa403110e17d778e2a47b3970846324bf08e8ae046";
+  sha512.doc = "c200c3f39ed756765876ca5655b99025a898719f9723a996bd4772974643e0421edd8d36a8eeb00d29dc75ae715fb55927e31f067b1159bbb1f4dd218de780a7";
+  sha512.source = "799b2197ce9f0950889a933952dcc33dc0ad2cb97d906baa61bdcf8d32bbf341d65aa2c2f1509fa59f366cb570e9ba6b4946d4d5785c5022c55117297192a32a";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"datetime2-estonian" = {
+  stripPrefix = 0;
+  sha512.run = "93e8ebc62b48da8f5c159822f53c35aaa2cbd2fb6bc701108cf6452db7eca3df39de3c1ba9b84136683d22d65a975dc138aace0a81960d1c9382309a4cee5f3f";
+  sha512.doc = "268b873d870ff19a3151d4244b0329994e559ab61198ab3d76d830b1bdd6a05e8b5a7a7df2fd6eec8d57b9e28626f80af755b1866f4ee90eb0c7e94b85f3c087";
+  sha512.source = "2cccbea84fc47da4668a06154b97116b39e1aa51e31196c7c9a41d517aa5f24924c86474fa8f7f1252e356a85392977553b6a28ad154d246bd5192a7e7f07b4d";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"datetime2-finnish" = {
+  stripPrefix = 0;
+  sha512.run = "45f971bd3711d1424b002f32e0535465658e50cd9abd9758faa3685aad6a6e74747e7b3cc840a38968ef49ecb91b3007ec678f63f0c0ad3b77ae0c39bdab2457";
+  sha512.doc = "01470814a87a5c87bb54b17a763011872864aad8d1f78f82c2325defb7f135daf34aa2b721bb4cbe7ec80efcf839372de07c29245ecc477708fe60f3d501a258";
+  sha512.source = "56f4b99f506673c89115e37dfd9458f5e3e55b62dc9dedca98747bcbc7e6e27306dc2711c05b0c8e2844aa03a4c8f7835bf6643ff082b7d1ed246a68b2af37d3";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"datetime2-french" = {
+  stripPrefix = 0;
+  sha512.run = "90a5f2e7c7570c88cfd10ea78cab34affd0483916a867c425cee593a080dd41f85c1db9eee22f1c5d1b27899c0d8afbfae2169e0b4fbc5951f0580437f735a86";
+  sha512.doc = "d86846e741d2c4f07efee33c1bb15b1de205d0ceb2f6c2c5930c3f224e350e53d3817b7ca96b47073ea8510389d2cb36b49f853812fd98c6a3d1b2484fb3a80d";
+  sha512.source = "277586cba75c6356674f763679c2d84d46aabeea1cf95211c61e967e413a61324d2e1ecd8ebcda756d5a0406f189f239d547b9b2879ef8ea854722832401939c";
+  hasRunfiles = true;
+  version = "1.02";
+};
+"datetime2-galician" = {
+  stripPrefix = 0;
+  sha512.run = "050dd3e5db5aaae106804a315e679cdee0a4e9fc2d10481f21059c410a73492d6e41d9db070bbe5112377a4f1dbec3345bc5f87efba998130cb20e31a443bf34";
+  sha512.doc = "881250aaf53eba33ee223e5d87f0d8d4081785ea723d5f2e605d04767aed63b2fd8a592eabddd4343c489f1abd809218c600aa5df2447b24bf0465e7a31c8ff5";
+  sha512.source = "671230a9b4da0cfec5c1afd50db2ec103c1712006c70be0c9d6d1eec637461005673c73dd1c457561e54af1409072fab111e7d93e785a91ccc6dd0cbbb497127";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"datetime2-german" = {
+  stripPrefix = 0;
+  sha512.run = "596fe3086d2bf16922f0219815474eea872950b1f31bb6777f375107571e70e5756bcd8c3930aefdfbbb6e1ab931a2a9d7976b537aeebedb98c1a541c178dc6d";
+  sha512.doc = "5fccb91afde9d59f6c26ee4bc5d7a5a90cc6c727d32effc328755e292477659feeb9eaadca85ef4351a104f9811426d7324616ca639a9c0bbc061ce32f10e778";
+  sha512.source = "35d7fd9a3f164503861980ee78b16c8784bcab76d46806a64e21c400cfc24900dddfdcab7cd8538b9071f69137eb746797e9555658540605950ea4081fa515d1";
+  hasRunfiles = true;
+  version = "2.1";
+};
+"datetime2-greek" = {
+  stripPrefix = 0;
+  sha512.run = "d067dc579e739c8ebfee602d667042c4727e73595fc199197d58d0c6caad4460401bc9d08965292b36811e38be5424c22d6dc4f49c4a9682da3ef34d46e35cdd";
+  sha512.doc = "5025cf0113e24efaa2bc413da5d2c14c58ead82ceb07fedad299783c5e445a40295d54e0d5ef3a5937586c484ccaf80e40fcb95e5592266fc82e5e52966af6dd";
+  sha512.source = "b0cc23d43a600f72a13234938b2d1e26d011e416b5f979f86003b4ba4cf53f3fe76db4eb5301db23263490b59735d0226f0b27e10a8f521febe52758a3f63ade";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"datetime2-hebrew" = {
+  stripPrefix = 0;
+  sha512.run = "c9bfe10e1cda7e3890cd79fac15a8f629ece47971caa43229fe73236e80e1f476411aa4d05be61f7f03bc34324b114ccac2585b83cced2d38a28f279639523d1";
+  sha512.doc = "636dd01321842cd0ae1c3a1ed8ef41e1704d720aeb830f03a93c921c4735c1913211a1d987a1b430e312c57440a11cf8cb80f4336b4770a13fddbd9d6a5c3cbe";
+  sha512.source = "9d1cd5f81a144ebe0efed5773ccc480fa2a14fca7411ac621a489884873dc7fcc6d877c66c7e70ec6736f4e2f6a90b57c9db0516baec961230f14dc6fb55d404";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"datetime2-icelandic" = {
+  stripPrefix = 0;
+  sha512.run = "50b5b4a4dbe38b669929637c9b22517b960ac0eab3486705efbd92e57e50c7c3a7f46c0d2ab0048a1c382f052589f091724828e2139d8796408edb899cac2e50";
+  sha512.doc = "148963ad2651a79371d8f218c763c90c96d28d18d84c2f57e76ad64b456418a44d15983fd1b1622e33c6ef256f6457b6b33090b7c57fd3c37b8dbc8a0754c09b";
+  sha512.source = "83cc155aa3cba3aff874762490d6cb9f85c0218c7209ff6ce304c16f04ef28a0b30a5978d08ed2e1ff24a2a81359387185e2ba16d45d8f83fdc8c81bdf5b5df4";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"datetime2-irish" = {
+  stripPrefix = 0;
+  sha512.run = "8c1d54d5fc80b2f7dd8faabc31df20253c9ee48987c268ae685144b02acccb5c3ec6bdaaa5bc420e90ecf4ec7d421afc96d82aef1a76ec7e01fb8e5f81d0a036";
+  sha512.doc = "692acb7c50c30e6790344b37e9fe3cb07f2a0e10b9d63b47c78df1b2d1bd1f8f186107acf4d75dabc14a99db57cb32810989bf7af817bfdd16fa694bfee5f17f";
+  sha512.source = "1e829006f0182374511addef820ef08868eb1c00b5e82d0da82efadb4df377531755a4212fb0e2f4a5df0d06aaed39863094524b351c29dd88dfd5ee71c84860";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"datetime2-it-fulltext" = {
+  stripPrefix = 0;
+  sha512.run = "389840e273ea5b9e8e8c66e77578d9908349589b11a599308acfde9ab8dd972ec855011fc4d3302ad2ae16dfad05812ae75d6eece275761587242099fa907d67";
+  sha512.doc = "a5a56a912b1b618999cec4b37fccaefe6f1e00f3b84f6aff8dd6b9b3ffa1855d25e8af8b49d04112829d7cef82f21b757772876b75cfc910a4dd5c89920ce131";
+  sha512.source = "ddffefcb640de660f1f9258d7bad92c40d3ce73017c53534389ce1d3e772214bdfcdf7a4dd927201aaba096533d7000a84871000772762c2edbfda9d1d11d9bb";
+  hasRunfiles = true;
+  version = "1.6";
+};
+"datetime2-italian" = {
+  stripPrefix = 0;
+  sha512.run = "d099d05904e416d44e9a9ffb337b23e2c1f908dfddbb41cfd7629c4abaa7769c76f50ef687751224ab4ae94a0df4d1962adbad602ed3a7473566e16c5c4bea48";
+  sha512.doc = "963759f5e07e01315b827d4c67364d9367d114a09d518154524ba4496aee69f1ef08acbdeb67522d3b350a6f8abf8bf571171d4c380bc3f093d59ea3207beea1";
+  sha512.source = "4036338ded2298c97e49173758317706452c254bbf07dcbe83080e28b6d59415d0ff14657cd11b9a5981ca893a4033db338518e251d59d0c4eaddaa9498189f0";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"datetime2-latin" = {
+  stripPrefix = 0;
+  sha512.run = "25f4e92c72abe14db9340aae354e0f598aadf88ec109b6dbe6b48e12f55926f63fc80ca420ccbbbf8fcc8dac066520d69b653981ccdd41b2e8588d85d4f11a99";
+  sha512.doc = "f683c8764e99edcd9d9a449eecd3f1e4a10a2803a20bff7be22568a69ee1b06c5d054d6664a051b0eef8cdac5bc2387175cb582d005e1af31a5be8bbac4a0de4";
+  sha512.source = "9270951371b2595f59a5dd8f8214603d9a72856caeb7902488fd7e7068b16c09b7ebd8f94cf10b99d31fa95777b475d403d49429944bc79f20faf37ae9192f8a";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"datetime2-lsorbian" = {
+  stripPrefix = 0;
+  sha512.run = "04fcebad65bee525697ba96cba9d66d6acfe9bc602b6cfb207103a2bfba0d3cbbef948d614930c1a2bc785a6ae2ad6c4e0b06db58d562681225d67b7a5f2f8a6";
+  sha512.doc = "7bee606e0c48dcfa676835e3a313ec8c3b79f566fba6d6b65cb34c4f939e7a7df34d73e24f0f03d569e0f6a01cb244a90b9023e2846c597eb589e984ad9d1f18";
+  sha512.source = "9dee46b9c2290e00c1a9f9d7e63b3872ec206f7afe9ff0ca592824319b035da1295f566a8934d7d4e87f47b8061311682d2a6ace9a9ea15180433279759d847a";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"datetime2-magyar" = {
+  stripPrefix = 0;
+  sha512.run = "4d3b27b0409d26431cc06a1ac83485b6d4d63b9bba30a862ac043cc27c25a77805d5c3aeff3a329e1348a32ca4ceaea917f2f840ce1696a58f00325775ae5009";
+  sha512.doc = "1eff11bc2c7cdae101331521f08d3a9eb878e8d1695b35724475eb5b99e0a537bf16a00bd3c13760cb36306e84b72f15e5ec294ed958ab5d67e75ad8571ac9a2";
+  sha512.source = "674e795a5b3d49665bba89c7f01abdf4c366a72f9968ea008455179319f66061ef2f73e21c6ae736e6dd960aba1184b7e374eecff8429d1b533078202f294ad7";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"datetime2-norsk" = {
+  stripPrefix = 0;
+  sha512.run = "9ebcd994305b3b3aad61383b9ece13425b4c34432dae0aac2ce38c0219b2f19871f89cb30bd774a7db9be45cc8a21f7856f1f568c32941502b18f6089b787066";
+  sha512.doc = "3d834d8572cb8f1237b4b9e69bcbcf1a5eb0a1e5c001e8610a00ec377204c570218f6d97765c3efbad9130cb2ad9ced3cb80b32bcdfccfd62d7069ece93ab1da";
+  sha512.source = "7dbb4161731dceac735ce39e042713a07d3d63dabac0a4dec870a022ba79c2637d7fbde4715936908d39f3475746f243dbe2e39d88040f35822503f59c0f87d0";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"datetime2-polish" = {
+  stripPrefix = 0;
+  sha512.run = "3b63541325de4082a828af5131a639c11f2562b8e2951f50199f7281e7c59e2a2deaf8cba124cc8679a4de5da3e95d988bb3533eed6cdbc9471a95476ec59bc4";
+  sha512.doc = "6bcccc320063567e2527ca6acce6180c9d19a3ec8a1e922e640e82d3ad2a244cd455741e059e385fa26ee6479ddd5086b9dcf73a705988adec96a311cfc5e40b";
+  sha512.source = "0adc45a662620826c90aac5f0372d83462eb571b7dc0751465ea246602ffe4f7b43f6a5b3153cd04681ee8baa23703784e15b79e5ae2c15cc9e6db5808265b8e";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"datetime2-portuges" = {
+  stripPrefix = 0;
+  sha512.run = "976ad1440f05bd166659b5b950691b4d0ce988a3d71bb91525e4448b1520a6ead37bbb3ef9a899bac08c7dfe8cc7b9b7e15174c8ef143891133bc00e5c39e9fe";
+  sha512.doc = "3cd176813f3b0bb16341ddeee4d0a848b4eee9bacfb90734d97fd9ddc3e88285057dd0bf4f0f3ebb5641ebee48b15161feb3e4e75032e32368a51bfb9ca4a8f0";
+  sha512.source = "71b769e4a63cf02cf6c2794d3fb876a33d9c8b150059a2bc0960b8cd1b355e5ebde3d02b48ea47653cf781721fcec118d78301021e8b95543d32215e690a3c12";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"datetime2-romanian" = {
+  stripPrefix = 0;
+  sha512.run = "9167976dca51779669fbd91cc54ceced2f0dd6a97610faf9e55bd51a9e5c0ca3c8096c143a71180f0d572d1f1fdca5c72feccdebb58c7caed6e3e33a21c4b4a1";
+  sha512.doc = "62514ec016e7913b74e8c19624aceda5b258d1e1972da97b04bed2565f1c4ac0c694e695e6eefa528963f0375c3866ea4e475747e6141f0612dad2db8e7a1b7a";
+  sha512.source = "617a1cad46eeb6c2c0cf434fec3d436e471d4cc25224c99cb3272bfd14eaecdf3f63862ae61a83126c222f9215b244fdccf101896469e64480991187878eb71c";
+  hasRunfiles = true;
+  version = "1.01";
+};
+"datetime2-russian" = {
+  stripPrefix = 0;
+  sha512.run = "2821680ce189aacf8b0303d5698d9359f240ab4e470c0e2b052235e6aaeeffc882ea4b9c9c4f91d52b1402ef7486c7115bab8058e2223b7ebd3186fbd4c4c34f";
+  sha512.doc = "97c1b02377328ff75775194baeb2c3e15f2dafee303dbb85c47a0baf7f6edb4323f754578a9caf9db609477204c1310dade3b87d5a768a16fa940be2fe320081";
+  sha512.source = "f9055eefe76d9844e8764ec766c0e1da7d3c61db65c754115cdc47419ab68d84685688e59939f219cc5ab87f79570cd4c28011ca597ee4f89fcdc38c42e82a75";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"datetime2-samin" = {
+  stripPrefix = 0;
+  sha512.run = "fc4e6401ce02b1aa7be5fd78e5d5e74aff6ac35cbb6864cbce6d93fe0b2716510f6ccdd290c82286b8e51f37abe8460c0f8340ce0f9135838ecace7502f72784";
+  sha512.doc = "e5879faedd4d4fa5ac40575e0ccd1d0db94a80d78c3d01f8d36bb37875e2b9025537c876087b85626ccaed5c90f505a98fd3e5adee64ac1bc72f48ff66114438";
+  sha512.source = "4aa4d272188a8a2b6e40792b97df9b205857870f3787153502c12fbaaf81ed61d9d823a7966e147fbc1d94f761c40f179d4025166a48f358821134559a7bee3b";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"datetime2-scottish" = {
+  stripPrefix = 0;
+  sha512.run = "b3f8c2e2c61461c162f4b7c029ced53b5f0c61398415d17044a5189c08460550bfd0ddd15c693dc959b5cb5bacef63a1d4de8a9fe11108843edeff475964aae6";
+  sha512.doc = "87035e38cea316b776f2c61d0c1522e61c560602650bf6955fc7330536fac42dcb17bdad1c3828f2accd10cef009efcd805ed917352ff921d03b46ed3d0bea18";
+  sha512.source = "4e4c7d02ea59a5d7592660e80c996adc11968433a2d88b54179ff15ab577a487789cba6fee4131511a5c22de2025879800544689653c48c0f7560a311b264c02";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"datetime2-serbian" = {
+  stripPrefix = 0;
+  sha512.run = "d66f09a0b8cda86efcf006ded72eb90c75d6d675ea598048e7003ca8e3d5910d765d202855c3899a5467b71c1fd04e2f0605b8f9ce0aefb0e689567c06333bed";
+  sha512.doc = "75e062aaaf56b2d244c15c7f6b84eea54cc6b2eb2177c5f7dc73c2e82d17c4274dcb4df5f37f7f9ea1da3bd3389f206ced0b6024d9ca26c0d8469bb9cc2e6acf";
+  sha512.source = "2a55f815e7d93bc99d7f0c7ce775ce9e09624ef96c91605b66eb30f7b4434be5c3cad995d25ea30ec59761bd4553ec02157c1dd1ebfdc8429db1855b2becc871";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"datetime2-slovak" = {
+  stripPrefix = 0;
+  sha512.run = "c69d8eacf36fb7232a85d92e5db277b281b631c0c8f63df7fbba51876d1be782b7196efaaea0ac25140716f983ada40aedaa550102fbe0d445e5cddd41317a09";
+  sha512.doc = "c40e20b000f3fd5ac368c310d1f11519566410963cadaf4aabfb0c9cae05e0d3e8a3810c7da451a5e206e8b5b174ac0b837c1beff207597e050ec529e82acf51";
+  sha512.source = "19547ebf7016d1e416227830b81e95dd6d91c7ab7823d3fc2d6890d628a51074e4ba7b8b5f31020bf86c2fe447b60f22754bbecb3f7e65dc908ffcfa9087e12f";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"datetime2-slovene" = {
+  stripPrefix = 0;
+  sha512.run = "1d0a73d3781fcc9ea0df63e391f6b7a0a254bfa920c63ad1a0c76b56d4770822bc4e049ce18c554974bbb20478150cd7a4f545ef8983bacd31a112fc3acd5419";
+  sha512.doc = "dfb2a9808488ab0e0b225d0a397490f7e1cd2343caf0a685d8e3f48feff2ce549092771f0b4017a3c45640067ad1ede8a852e714b313d9abfc7c9642f983cb46";
+  sha512.source = "f1a60b0173e8c1f6f245459ba35014e4cca9308e2c5aea203d6123cb88f6de945a6f80ae350ecbfce6554f6d2b671f32487825c5f01093c3bd3fc7a1902231b6";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"datetime2-spanish" = {
+  stripPrefix = 0;
+  sha512.run = "07c321a300d779e39de46628b8e1b95d383e2a1a0af882cc607929d894f11b2e8329cb256014193d428182e78f2cbd5e3e277bc7821d3ad7a2740fedacf14e28";
+  sha512.doc = "629b4a2771fe68715978afcb202d984e1032d2e0f1af95d4971a980e14baf4b0705187f4a7ef9748c024eb27780f7720d8d5010ebfb23026ad8605a42730293f";
+  sha512.source = "78565125794ec1f5cf762cc27fd24c96eef5a1792941d4ce88c85bbecbec777da239db94118260feed6502e55f81b45f105a170e4b6207ec5e4201f043fa67e4";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"datetime2-swedish" = {
+  stripPrefix = 0;
+  sha512.run = "b904b21b593e529ffb714f3762ca5b8de37e87fe25df593873defa43de3995d1c72b0500217182728eaee6030cacaca969376a5623bc0baf48fe33aafafc0a66";
+  sha512.doc = "7d6f2468aaa20da4e086201c0ffa6e6ae031e2a23db7fcccbb9ee8776c59b56a51cda9a03dfcce9fbf81b618f2e7543272f4ae88871f2b5380d1b98ff89e451f";
+  sha512.source = "bcdb2b0eb40b7acad86b37e215cf4bd3c5376cad8fbd10d7f1af32a5983243aa28d950116d40abf4ae10bd28e32c10022297b77ca40daeab15b6f88ed33758d0";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"datetime2-turkish" = {
+  stripPrefix = 0;
+  sha512.run = "7d4b756ab2f102c7981376d6f87e5a7f7b47d57b1ae9f821185bd5b04e7a5d9a81aebc7835a9bb43a217dffcfceb5b2c46b838bc652dab7c2f468d9510c2ee4a";
+  sha512.doc = "6c95641444f2eb510a330c7002bba2c40cf28daeb63fd9092d74846673c03d2aeafd1e7d61d5a7470bac95117c3717cd75566907a896f5cb4b54ccbe952c6d65";
+  sha512.source = "da530162bdacda3904b07bb2d9b0ab74c56cec0341f0c0457d6bd2e27e45b2d8c1f5ca298718d96924e3dce30e83beacd0fef919d1b5bdb5dedae29c7b3edcc1";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"datetime2-ukrainian" = {
+  stripPrefix = 0;
+  sha512.run = "5e3d412b8a5b73bb6bd2ee176305806d9b41c5a67196ddd28640e958a7019b3e73f961964b7510be4cd69833c4599db1fed05c6a6f66d4d0b3bc5ad73b5d6dbc";
+  sha512.doc = "df40b4e156164a1c05a94c926d691b887a56ef8f42baee26e684383871edff05e5c6e87eba95994783cac2fcea1a5c72347c8eb86f0cca360faa8dd4829349b5";
+  sha512.source = "36c7db71bd063a87e8b9f2958217c71c7e6820b4e5536a5cc46db35ef69e83dd5e7b0ddd57038b66f8405d5a24afd21253ca34f7a8d174a26b4a67607048caf4";
+  hasRunfiles = true;
+  version = "1.2a";
+};
+"datetime2-usorbian" = {
+  stripPrefix = 0;
+  sha512.run = "bae799fc523f01f7c70c7818ced0294bbb57a849567e05768c4f1c3f9cbe241755ac2dbda0a9ce0e3bb3f70eec45bae1c0607410302b458370a4c05951d791cf";
+  sha512.doc = "bacc067e851e4b58b2978472551cf869cc9d3d4412ba930b2ab81f39c4fa9ca352188b6a6bffc5b5dc4a6bcf611146b3d1344d221732a7caaf45f95bb67d5589";
+  sha512.source = "dcc7b42ec9873ef0d23026d07165301deda63b829462ab7f4074ae7c828945bc5cff2e2dba372782e250175b596b1be536dd27271e4b2f0913f42fb1a17ff320";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"datetime2-welsh" = {
+  stripPrefix = 0;
+  sha512.run = "6590e6facec1539e60f9abf746f6359be87983f9c637cc7c571ad08c279d719bd4b820507feee1a18cfb4d97e8710d430ba4fe959e422b583b215aad9f059a8b";
+  sha512.doc = "5d61392e7563d87e5f18723aa309ccbd7c42b3ab19cccd0eda6a714c925c49b259c2202f90d3fc7e75158dfc0f2a34b5104e60300e5d736f655f98d9fe72f9a7";
+  sha512.source = "d285938163f81ae02873bcb55ce37d0ea1f416ddd42ff5dcacac3e8ec82e9d89ea53b2363dbe5b5f3ae93301af7f46b0fdf1d975a5e1179b528323eaa94fcea2";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"dblfloatfix" = {
+  stripPrefix = 0;
+  sha512.run = "05931528012077b92702926856b1e0d1aa6472188f9b1fbff74e5534a41a3260e53b82bcdd0684ff045aafaf4b427dab6d8e06fc7a5d11cb42a545949bc6bfc8";
+  sha512.doc = "5790850d01d9f3734cb89146c23077bc852d84242352718ee655f1410ee84b77366bef133d8df49fd46ad976aa007fe2c4039a08035122f93e719c5f0f7563f7";
+  hasRunfiles = true;
+  version = "1.0a";
+};
+"dccpaper" = {
+  stripPrefix = 0;
+  sha512.run = "fe202a6540c5e95f4c2b2914409081499d31f4ddff41c9d7d25630d00b3dbb3bc7fb2bac4bf9ce17b67867561d8eee8625d849da1ede2e51f706ffec21fa081a";
+  sha512.doc = "59765c9239c6ff8b263b3e819fd26c7bed841279394948fe902bdd5c5364fbce08120db366abf2b90fc8364933cedb834f982d4609e1f2d9686bbca341e3816f";
+  sha512.source = "41b0b7f978c0bf5109c976a76b593473f492090a5f392d640377c24a034c26a5829b28e317944876287b9a0a092f47f3ce85195bfad7b4d2aa41ca226abe80d3";
+  hasRunfiles = true;
+  version = "1.8.1";
+};
+"dcpic" = {
+  stripPrefix = 0;
+  sha512.run = "6cfae1fe50baa81ba778ee1b8cc76dd2d0e66e3cd4a868364857f2338b1078ac81178dbcea81d4edbe013726b7cb14700506f38e49eb528701bf784280ca7de8";
+  sha512.doc = "25f768812f31cfc3e4d00717ed8d77392272f2480efe3311ecf5e922b18e1f5b6fa36892c7eb69cc077e350d5d7e55b7201673fc653c188ec8a76205f90b681c";
+  hasRunfiles = true;
+  version = "5.0.0";
+};
+"ddphonism" = {
+  stripPrefix = 0;
+  sha512.run = "9ccd7a8715af4a808a72d4dbc96a1216663c7eddb7a0fea48b77bbcb546a12d0e9de00928189b424e9db8e612778ed53231456d087a1eb83bca827852c9691c8";
+  sha512.doc = "d75ead2518ae448eba251b3f43431751f415c9650e9ac023e1647fbfa828f700ef2fa3a19f53fdd6e28c9e8461e071fabb7c016aeaa62678ada20ed0b96017bb";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"de-macro" = {
+  sha512.run = "5ce9beff85d65654173557af668ff15af6989d9fa6d341fe9c26149d0715ed7cf57bf5b2a59b6cf99e8ec14e4ebb6816e9972268516a0b2a78ee13c6423b3599";
+  sha512.doc = "05793930357ad58a57e221696d836895f02dec82cc93b9aa7ea302978bee24410d4b382ff72407faa67f4133c75a84fb2454957de446beca05606776c6581ade";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"decimal" = {
+  stripPrefix = 0;
+  sha512.run = "9a0d0947eacd52800b3b2cbc36d6e866c1876bd5f929896825dc604d9d633cfb169d93de0f86b0e78e3274936bb47834c222ee54b3571bfcdc0fe81bb2821776";
+  sha512.doc = "977fc97627bbdbf4d65844dcb7ce267cb2291b102b718ca36ba2fee881d5fcf359d6d0dae839d4e640200d3b8a31cba301d20560f5002344b8ea256266efc9e4";
+  sha512.source = "a880091295229345290acf605feb833489976ed3b661b403c8effaabd07c48730ac958a4b48dd48d429a3f031413c1392f4006b820f04e3dde6b2035a948747e";
+  hasRunfiles = true;
+};
+"decorule" = {
+  stripPrefix = 0;
+  sha512.run = "e5a962002f66d4d3a5c48d93930ea2e14a68226a1beb9f9aee5b7936ef51a49b4d9a249b7a3038d5ade41aef8388ad78f254973e7ef3558e42848409427e5cd7";
+  sha512.doc = "533ca67eabadea3125dc359a839d5b45b5e1efee88fe74b4a2b911014b599930419a49e7e0b5967e5f89d29e1b452d223faae3d31fc3f94c64cb613907cc2255";
+  sha512.source = "1d612d121367ec69f578479001602aa2a25251edbb35c495a13b636e23831e8dca5f7a2715ad6fc5f3b5e3fbf3769d0b90c88949f5fafcd8d778e8489a80892f";
+  hasRunfiles = true;
+  version = "0.6";
+};
+"dehyph" = {
+  stripPrefix = 0;
+  sha512.run = "2dc4ee5b4389549c032f3a4d87740ab3c5e296a1ef109a6b673656a82ca4c317ca774f39f61417568b8ccbeac787c4058184fc893d53799bbf0b042ba5aca9a2";
+  hasRunfiles = true;
+};
+"dehyph-exptl" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "df64c7988e8194564716a0abef4949bad9b34b8571a579148cad5eeaa3676a6e066c9eeb183f69d49e5089ce92ef45b4c7747bb4d23334c6812c900c91069ef3";
+  sha512.doc = "0199cf3ca0a7fc36fd3b2b736be56c3baa1430422ec97a3bdf86e740c4117ca73cc0b7d057ebf40d1d48def4d5156bf51e9023604794ac3cdab19f0716d8f6a9";
+  hasRunfiles = true;
+  version = "0.6";
+};
+"dejavu" = {
+  stripPrefix = 0;
+  sha512.run = "a26a57bd02b14c6e67d328c2c00174730b819f7da37ac147ec7f34f37195b6aa17e3223ac4d03617f5239700b1dfa45ca1741eed7b4488d2e604f02ac34ef2a3";
+  sha512.doc = "7e3364a3e0863c63f2a66057780fa922cb53f4da2f81e42ce9e200d5a034854216f4d4b833756a6d4d6837385e48aa8d03f608846f2f95caa84a7ebffe3257b0";
+  hasRunfiles = true;
+  version = "2.34";
+};
+"dejavu-otf" = {
+  stripPrefix = 0;
+  sha512.run = "d0d32f3c9d53a1a61e6e717a6275f3fc934c0815fddc3b36fe2afbf7702e5128d4cf15e8cdfe8b02009a6fb7c203ea42b134eeeb080b9765ff99c4143f887744";
+  sha512.doc = "212663371f747b03694327a40de3bec0be8efd5cda15c0cc343284f3a427890e8d16c4223098fc16a260b837a9d522c9cd35876a4c1004e09ee9ee29c05ec7b3";
+  hasRunfiles = true;
+  version = "0.04";
+};
+"delim" = {
+  stripPrefix = 0;
+  sha512.run = "c18dc230c5bac8db3d66f062402392761467ad18f48a65930a960c0772be30a7ed729a50657b12f533d72086563a67a98e8f5ce7afdc9947b52146e76e22b157";
+  sha512.doc = "c343842bcc03981c1814f5cffa2ba3eacc2e6abb5673ba700859406869a2398518e9abf02e159f4d92bf91383c3a6cdaa9f5720adaec81715fa30f4b8f36ff9d";
+  sha512.source = "8ff42847f918ab8d65eca86ee8daadd14ee138f984e06e1c4d66704ab4b6c53c1271b23aeb33003f9a7489e22e29850711efce99459f10764150742854570034";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"delimseasy" = {
+  stripPrefix = 0;
+  sha512.run = "7f9b1d77e9b9bdc6e5c45ed3c38606fb0d65113f7303e03f591c1b84aa83748d72fb8ecde0cd0c7b19d1bc9fcb454834e156429fd9080660aec77ddfd7b53e42";
+  sha512.doc = "bc9c1ff757a9d98ff9b84993cedb62ee024d0f4aafee301db0d862be3d45c76d8d164d2d3099ae37d41017316282db1e7882330dd10de43a9539ba0b10e86b08";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"delimset" = {
+  stripPrefix = 0;
+  sha512.run = "5c19bda2a87de91ac1d32981198ce7718d490184d4d65dade231b66c3f46621af91dbeb89bb79ba1370fd82a0527d01d0aa7cd9dddeea818e8c4b4380a7b63ed";
+  sha512.doc = "9e671fa601b878187b5b3ae1a47feffb6c451fd42f202f948a87b02f35385b47239947a3e91260e699c64c453df161d9ae734fa3a8e241b0e47056181fefc46c";
+  sha512.source = "d5618af6db29684ddd58164c9f55fbee73417d6968550361d7277558de98e621e2d1233b593c87860ccd8f7beb66a3c2369518736e14c86472d77425d6499869";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"delimtxt" = {
+  stripPrefix = 0;
+  sha512.run = "25332ff7d2602047938630668c849829844fcbd622f911542bccd59d2eb1293e406cc79aca08ac3acaa98828b4a6fa4da98feb08fdf678ad3863c70cc2fc1817";
+  sha512.doc = "cd9363d8d44309c2ca51431bae067d87c790180eb884888144cd089cc9c14f83e1e7ea2389650d547e47d4575755a5b6b369e82b76cc19150b1dc973e99109fe";
+  sha512.source = "487557d866b99ec0fed6d9bf18c4bdaffa4ad6a8294cd2e9c681a4f65fbba051a97577b82e7170464daf4eb9f154e66478f46512331e1f4f41b48e61d65a86a3";
+  hasRunfiles = true;
+};
+"denisbdoc" = {
+  stripPrefix = 0;
+  sha512.run = "c713ac155e390d3fc75549fb7ff6e3ba13ebf3b3b1a0c001dd39f6300fe2b55ec232221d5aa07b84c87ab7daa971504c20e5f08f033ef5d36dcf9af097128b74";
+  sha512.doc = "561342a0807ca00550410463755c0a348c97e2ededdfe7e6b55c99e34b8a93928167b33e1ec0a7529de6280ee5cdc4001f051234b9c4eec9c41bc2c560bad62c";
+  sha512.source = "e6c27403b1b6603aeea35582f91348a65a5466679a51da2926be278947415f7bb16104220891c3322423115aa973f66ef820462eec7b8680d6020c8364080c52";
+  hasRunfiles = true;
+  version = "0.7";
+};
+"derivative" = {
+  stripPrefix = 0;
+  sha512.run = "b0fa98877855c265cc0f0973a0b848924f189f445403461f22998dad4bb470ecd5b117075de8e2cfc1292eea27d93b258a1fa0ac1c005463f645ee6009e08315";
+  sha512.doc = "1247f1977d624e4f00b505c4758b1463d03768c4d47e6bae368965566bb7d6d0589951d0c356dfe024245d93e8d8f0f584d3809273e7474beb8f5bd100ddbfa3";
+  hasRunfiles = true;
+  version = "0.95b";
+};
+"detex" = {
+  sha512.run = "cd2e97f09a80642c52b2ea02b8bc9f81651de23ede8c5425a6f37400191d68a6f1c25ef451d4048a2b2cb4b263fb8bab91ef5649d8102396c98a5d4761db1d7e";
+  sha512.doc = "60a69f4447b51dc7c2b8a15d2027a30dfb47fea82713617f0d4699109711fdf507ed6d2b7dd950ae8afd89b838903db4f94ea5b91755cb1f53feeb433939f5b4";
+};
+"dhua" = {
+  stripPrefix = 0;
+  sha512.run = "c6e6187bdfc80cec3ce092a4dd3605055f3ad67ff49777bf0948af128c8b48118247ed9ca6f5feb1a69d32719f81968d8259794082a28277796eb6beccf9cedb";
+  sha512.doc = "a2f9f61ed61c5476d5f70fdfe59a451e7b3cafd3412336c5767b53b0157416149ee9ae924834f8a05beaedabb9e4a8dd3e4dbcb2f17b733af113c0a8085e363c";
+  sha512.source = "ff72f267dcbd05830664f9ebc328fa1b6b80eb579627c5ae78965b47b8b8605ddf33c6b6a9b343774b2944d985afc9a9816924f23e8e7ec9fbc807f00bddb143";
+  hasRunfiles = true;
+  version = "0.11";
+};
+"diadia" = {
+  sha512.run = "55a246d4e3ab86d6300210d830ce464a935bb83c9ffd29b5387f0a56f5c82d4c5a71cf107f78ffe0cde07f17897e2f949acf1fe70da9da7c7992b330a07b1c68";
+  sha512.doc = "e7487bb47fbe8aee714304150c00866780782a9ad32bf6ccbb02799aeb251345ce1cf042e8b4d7b4011083a3be2fe3b16b78f25a4a4206d173ac1384716592ab";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"diagbox" = {
+  stripPrefix = 0;
+  sha512.run = "d1a45837a94efb7361d7f0df518170263d9ade42110c95554531e3e877e328f2918e63679220125c6803e2338c9095ace5143a1f56fa154b75fdf7e0b539dbc1";
+  sha512.doc = "e986ab45e44315739a02a48489076be1ecc4d19bce3f3f7689a58c78fa1d63b4375955f82ca4e6f9cce51b10c14a14068ef88171dcba9bcef4e962fee1a153ce";
+  sha512.source = "946f732d453692d9e16aaa8a48c862bd8f904d7ec23a1c51a419582feef30b57f3e864aae344598a9ce610ced52034a1034bc8542f35881b642a284001c330ae";
+  hasRunfiles = true;
+  version = "2.2";
+};
+"diagmac2" = {
+  stripPrefix = 0;
+  sha512.run = "553d3610ef7bba5bf669040cfe6b51b26718b9f04835413d43c3f8a018a8a37274b445bbdbaa4a512aaefc8327f6a2c7abd8d754b3d8cbd4687c9c518265ad09";
+  sha512.doc = "37952cbaa4c20180a2d09455c748b245927245c40093510a79fa0461e5836197d8bc05bdc3cf5c7bafa72c54cb503fa9722d7a8ff9a0630ad1b5e8382b4029d2";
+  hasRunfiles = true;
+  version = "2.1";
+};
+"diagnose" = {
+  stripPrefix = 0;
+  sha512.run = "91fd8eb4b7d896f27c15c2b3b2a0a9bc839bb736a1fa053d47896c6b989729c3dc3a644ad59f6b3bd4164c150034f6ede5d52b680fb1c8cea6838dc70713f654";
+  sha512.doc = "f3e7152e656ee4c5f6ac28205b1dd5e9c0cf19c3d9400e2c40c8d8e9fecbcbc01cb1f7a36534849b6ba26f222f9547e3d669114a7d8923645528b7150cd10de4";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"dialogl" = {
+  stripPrefix = 0;
+  sha512.run = "68fb25b66499e289c7615fda04fec859d2a3a6105ecb3bc69ecd0e5af8f87027e74170495fa587f21767028d9f423cf04e3d11768ea0581a7474e9a66d62882a";
+  sha512.doc = "cc1fa10345fa089cd86ea4b0a638334c55c6a57cac3a9c549469cd52cff27b8eb3d349ce14d49de14fbb65f41d1887bf98e9c69081688703d8eef06e6324f684";
+  sha512.source = "0a39faa751021dbfe7638f139e50689201f93d4490339af70b4ddd42a77cec252cffe7a18a5ddce43ce8dde7f9645dd088fbe9c6cbdc4efefa65280f70c54d23";
+  hasRunfiles = true;
+};
+"dice" = {
+  stripPrefix = 0;
+  sha512.run = "7ec762fccc174a13f2a84ee43aa49319548aa970f017cd17bca73add506ca270a6ac621f51ff96d47a4f5eadeafc89ecc44f1c99b31a2e76722e648519e1fd69";
+  sha512.doc = "9c09c47b70e28e4c8ccffd4c75f8cac7942767279d0e01e543538ddf0ee70fe60cd15d1e3ddce27b56e1a9f865d5ad9b1794a875e41d131d763c11a3e0fb96ef";
+  hasRunfiles = true;
+};
+"dichokey" = {
+  stripPrefix = 0;
+  sha512.run = "8ed4f0010546af68390f93642cab4495226387fd7461383e32fd3dfa72867050d0da05ba90cb768c6893afeac9bfe55d23b7299ef4a76432e8d11252012b47a4";
+  sha512.doc = "16a75d20463a0b0b508c2d50aa67a77999cab525e003704ab34663d1f0212c39432caab0e4df1c69b540be014bc86901031c7c8f647ff18ceda77dcef7239233";
+  hasRunfiles = true;
+};
+"dickimaw" = {
+  stripPrefix = 0;
+  sha512.run = "8e478160699ca5dd9c52ea7e6b0a7be491d0af44b3022c22797b02b9e6ba6ef67ce9dc35649d9a2ebb9b123e3fbcc02c0602271bd8049a12c4520a32a15d4ef3";
+  sha512.doc = "5ebe8605d1a4ebeb11896919c39aa736220e9ca247912b5655dbcadf03bfa45b4cdfe44ee6555bf8d5ecdaf63b0d2527d3d58ee6d7056a194a6a42f88ab0aa41";
+};
+"dictsym" = {
+  stripPrefix = 0;
+  sha512.run = "6195ea914b422d5bb1c098e3a8f103d91aaa94520bdff1f5a04d7c952f84f16b1aa96287dac4a309d8d72eabac65a5dbaca275abc211d9290266cfb8f5fcce3a";
+  sha512.doc = "935e67c0be73969b572146ccfc92ca42c15b3b5cf2cdfb596cf3ecb9368463b793d530221d2a7e90df18edd54b7938dd27d1ee00757b580c543ea59ddce5d277";
+  hasRunfiles = true;
+};
+"diffcoeff" = {
+  stripPrefix = 0;
+  sha512.run = "5677888e02bba39b32d6b2e421adf69e7777e76552bc8a4a30e157a0a2f20d040a9638a382cc1df1542e6d62e1cbbbce015c864ac54ab5b1e98a092525900a1d";
+  sha512.doc = "66bf438f6a88309c58dc22df80992afcbbba5a25a23bd6726aff777e2d628bc11c423c24cc142569ec1c713af97c8575e409af96fb85e3ed1c04748ef407dfba";
+  hasRunfiles = true;
+  version = "3.1";
+};
+"digiconfigs" = {
+  stripPrefix = 0;
+  sha512.run = "a1d5cf0e93aa2722087a491d49c87c1b6c1dc863a39807f28dca198d4c52d8add42706f992ee91b6a42fdbf379293a2aaf3a21199094526c545f41002e8992d3";
+  sha512.doc = "95e948491a51321671b15aab55dddd7c6b8bad78bc67bcc25db0970dc478d1bba898fc2efe44537a18d46f3fcc73bd2af600c4a74af4982e8de8a5fc0345a134";
+  hasRunfiles = true;
+  version = "0.5";
+};
+"dijkstra" = {
+  stripPrefix = 0;
+  sha512.run = "2b3d6d68c6e3eafd1c88eb44c8ab68f27dc77326ef43a34119679b0dc1c1c584db8568584956617354f359a52792c6a2c0104dddaa1ec389004dd673ca749136";
+  sha512.doc = "96ed892f5c910421eb5cabe54c4a7c6caf4d9cc139ae7dfe454fac9e3275d3dab4690db877bbe8fa303523f38cc563611ee5270949a6d2fa8d7d2593c1bff06a";
+  hasRunfiles = true;
+  version = "0.11";
+};
+"din1505" = {
+  stripPrefix = 0;
+  sha512.run = "cb9b819eb69ce4870dd36da844b1d24e4f678ad05f43eabbe861e9de5b53258e45e70530ca76c0aa9fcf54232e8f33dc55623f94c1d9e5fc3dfc48481093c3cc";
+  sha512.doc = "4479f5ea1e1ade4bc7951d5722e397a688e75293da55ec57dd0f3d32add2bd551844da81336be0a77cc783e4c9af958be46501c4b78adbbf8a5463770b5cbb2c";
+  hasRunfiles = true;
+};
+"dinat" = {
+  stripPrefix = 0;
+  sha512.run = "0b22f43a5088f669820674b46af72e66f3f2714a36052bc7d18c334b202d0060fd07b1a608626adf183314d2380fad672baf58307ed83aaa888231e75c63b1c8";
+  sha512.doc = "f4491ab35e2ae8003faa8220e88c0abd2d970cc6b985d2baf993effd2ebe94a964ae8ece6db70a55f922abc83c91cce5f598ac2e722b5eb7e1584aee436e4393";
+  hasRunfiles = true;
+  version = "2.5";
+};
+"dinbrief" = {
+  stripPrefix = 0;
+  sha512.run = "0c2679265417acb042f81300895be7dc7d6b8d8f0bfa2ff8853b9c1adbb6bae78598c7eb4b7c2c91a9f95959ff7a7945f846e1f262f923d741e6fc77458be9f0";
+  sha512.doc = "5182bf0761a484e89331ced44d05f82da097cb7be010333ad3eea1b987119af3f3e2a3cd8ac2c4b2b6149a09a5789325edee49205fdfe52d2960c12edacad0af";
+  sha512.source = "0f81c2cea6799ccd39039b3fc9c45ab38b2041d0eef6efad245cae9fdfc17a7f967c24509b241fd19870170b4028ebed40db25884556bdf74e0ce2fef1a6e1ec";
+  hasRunfiles = true;
+};
+"dingbat" = {
+  stripPrefix = 0;
+  sha512.run = "d6bdfc62eff8816e03eaea41ffbabf2d3af7194edbb2f9073c8d8b3d333c75f0b587a74556b916efb40afe41c88a8029f0dd764d7dc5894aa50e66e06fccb77a";
+  sha512.doc = "993ef5169759d86641e2a3185064f94df858d81d9b7ba4b0516b22abc51eab887b5d02ca487ad85b007e7ee3117563a257d80b803a361ea1d32857921e794b9f";
+  sha512.source = "01e935a99ff83496cd1e5c9e297d316f879fa8e54808c33a2daa54c78e1afc5048d3fabbf93450d15d6fed09eb59389348da266c751782cf017f383a97214d2a";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"directory" = {
+  stripPrefix = 0;
+  sha512.run = "c07947f06fb08da461391cf6101a7a2e55875179c5d19b41007b0d11ff1881623e353b813dcca1da1f09e55beb80bf412f85ea6c9f7e3dd6e52a875770a5ffdd";
+  sha512.doc = "24bf3fe447363c20e4ace4fb326c329a244aaeaafbf6f596ec91a3975e7cba86a2d711f9a5f10c2a70d72d74bc08dd2540e5139b4c4b525103e867a9d8e62bf9";
+  hasRunfiles = true;
+  version = "1.20";
+};
+"dirtree" = {
+  stripPrefix = 0;
+  sha512.run = "5faecc2a6d79ae79929481c283b01e69df482267635957c5eb11c264d924ce299021d95baaf8cf6f9cb10e57f5fe14820c6b3506021b4d0213494bdeff5746a2";
+  sha512.doc = "9edfb6fbcf4278c2b24599b58e10f64918d901bdd19dc0e9e8c8bd77756f2f3ba5dc13e31fefd2bd5f1467a0fb0dc0e765fe4e0515781103bdb1b81f687def7b";
+  sha512.source = "4939918ace772a76142674410f9a1e91c698e02c113517385814346399cc94e031384905dc2719d717ac1dc65ff04d1d5a7049408ec55e20b4c0000f4b8a7049";
+  hasRunfiles = true;
+  version = "0.32";
+};
+"dirtytalk" = {
+  stripPrefix = 0;
+  sha512.run = "d5cf28f17a68cd064a290769aff11e656debe87ff0c04e61d4dd4fe87d285daab6dab9516b80b33b03680d50c420a4f3a9858ed5d2d3d5c96fa7fbf9989d29d6";
+  sha512.doc = "8cdbdbfca4bdc58a560703b6406c98334ea0b5d9920cbc98ea0fdb7b56c9f1d48844167201829cef83fa84f0e21530baf2fcf4a3f8f8b5e44c5e792864ebf94f";
+  sha512.source = "448c9b5765cb054981e306b795f7747e6e5a9219f00a4698d6f5ee36ebc56c80a1adc857212b3baa1a065b9a8f585f9938e2d20d8f6d30f8d17aff9fc80b11c4";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"disser" = {
+  stripPrefix = 0;
+  sha512.run = "98c497bd8d422cacf639cb38ff3a489b5fcda3f92cb5a734287fc930666867eb0e9e6f6014ad42df527d3999eb5a87da28d7178b47cc53eb44a338567f952ca4";
+  sha512.doc = "ed0c04c0afccd7f9f68bb8f65a6497b9cbfb2bbcb5333852da7b790083e71ceec8348f6893f1e0f16bef7e4b5ca0b9d1a58ca46898dc58a02f0324a62971b916";
+  sha512.source = "9a9770eea5ab44b2265cb191bd113be4e98038a0ba8f3c92ffb837791cf59447c82caf63d50af6bace698a3b5b8a2bc25f427add6cefb436a6377df4816524b2";
+  hasRunfiles = true;
+  version = "1.5.0";
+};
+"ditaa" = {
+  stripPrefix = 0;
+  sha512.run = "1aa2fab8150212ae8dbda9d0138a4c396f47256f93582ed38d9449f9440daba9e07dc0be397c49981e2d1813b7e41d2002fb7ff914382606f417f2738a8d2735";
+  sha512.doc = "345d6d7d3f21d2dc728b93e2cbfeb4fc1f589797e852604809b1ff3e7bca53414d684571faf8245c740a50205e7d8787afd5304beb89efd3545a389ec4a74331";
+  hasRunfiles = true;
+  version = "0.9";
+};
+"dithesis" = {
+  stripPrefix = 0;
+  sha512.run = "b11165408ccd30427390e9f409e8f561122d1a2dbe821ce90687df9feb2faef692d8ccd75fd8372b975a06e3f11bca0ba6e873d59b30aabfa95015ca35e557a8";
+  sha512.doc = "25058b262f803fbbf3c41fa62ae8983ade351fc7bb65be7d886a4300390f836ef5d1240e59571839b407afa2ddb363e6c31e76e36c160ed3fe0c6d0e0ef71fbf";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"dk-bib" = {
+  stripPrefix = 0;
+  sha512.run = "9de9e026b9e3de53b297d7925bd0e4e9ab08562e798a8f1b9e6988ecb891067534a741aefbbb81f1c53d7ae6b6cd0e0796d8c0690c5af661e76a5c6d9ea876df";
+  sha512.doc = "258d8413d860f6a30c597c10b8c25f352166f8bc39cf23714a137e46f4748ba716dcae8eb8b6e17378f6a850ae64a68a9f331c8301c938f0a8042d967b3e62b3";
+  sha512.source = "ddb3927504b35d025c339bfd1c072e9ef770a159f046bf86220ea675df481e5b781026ed6395a776f27518ffedef83b7c5f95be30f1be49747a76bb2e2280817";
+  hasRunfiles = true;
+  version = "0.6";
+};
+"dlfltxb" = {
+  stripPrefix = 0;
+  sha512.run = "d1d7bd6a855d131324fee30bcb920e0dfa6ba733a1d52f94c59e8f328b533d63444b5ce7e5fca9dcc7f21833a9cef84460106aab0a578fd17974c0e348f1ee07";
+  sha512.doc = "171d6661ca71533fb869832be2bf6f7d26244bb5735fb884b5b1ce7c27d291b3e9518a902d6c7565d94d2c55c37b00564184bc5851824a00b5a71963a577128f";
+  hasRunfiles = true;
+};
+"dnaseq" = {
+  stripPrefix = 0;
+  sha512.run = "b4a83c42e16aa734611dd8295aa033904828ac1825ccdd41f297586c0667ebec4a43606740fde56bd01f58ffee1b1f4afa647ce196ed042a5dfdb641f0ee2d7d";
+  sha512.doc = "089352ea3210231ad158ecb0bc17d5ba0a9efe49ee4c609554f08dceff9ef534185a7f9f17526910d3b602c4c6c358f211fec4cfe27bd6df61555bce4f9d795f";
+  sha512.source = "f4357ef3a23d8b1c7ca3168441ddda57fe725c4c17022807464e61035b89a8a8334684144d86f3d6ff0f3955c1c928903b80a61e6b1792cab633d6dab51d44df";
+  hasRunfiles = true;
+  version = "0.01";
+};
+"dnp" = {
+  stripPrefix = 0;
+  sha512.run = "9cccb6befd2059b13571e083664e4c85215cc12c96b41afdd9efdeb758b444a95edd4c2586ee1b44dca70fe31f38c4eea821cf08cc1237a82d67e0e567d65d8a";
+  hasRunfiles = true;
+};
+"doc-pictex" = {
+  stripPrefix = 0;
+  sha512.run = "c866f0855f701917fa81966c16a7f1c869320ddaf38e2c1c2a71844fa7b224fe2216f267b7b700ef6e36a13f97fa6f33a1d05342d5a7a8dd47ccda761fc577f4";
+  sha512.doc = "3440fd4d0e2117594d6b350dcfed891506ce7fc0500ecdd4f156431363a38e399061469f5def9082d59c39b14b65ebc19ccb3204fef71ade300825cf35659158";
+};
+"docbytex" = {
+  stripPrefix = 0;
+  sha512.run = "0b212fe2131eb4070e08efad7f1e0745d0538b2173b274a41c113ae6dfce46d7d1fc8ebd22f16b3a956570865df9cad668866fc2038687ad6c0b7b72e76a79d8";
+  sha512.doc = "0daa32aa23ca248dce228b8029cb19c6d4509114094d46efdcc45b52d6593176c44da88040b37d83054ec286c4b79727ea4ab2cf07c4522e5f597750d85118fd";
+  hasRunfiles = true;
+};
+"doclicense" = {
+  stripPrefix = 0;
+  sha512.run = "a66bae24e43e619dfed88b039b8fd44143a1ee1c94a7764d49f7e5d7920f041deb66c8c0ebc91ddc19e7725895a5e5793196724b45945cd31675765caf06a236";
+  sha512.doc = "d0388a64e6679007965b2c1075d730f6b25a08431bf9bacfa8cab8890ea809150c334c96730d8170515b552e5743784c07424ba34d9033669d8463744b5ed5e8";
+  sha512.source = "6c40642c3bc7eba7949da51c7703aab84033596f541d0fc433d5bced75c8be4666b4fd43f6b81119a3e4c2e73a7776aa452df2be544b91ff97c827b925a3df93";
+  hasRunfiles = true;
+  version = "1.10.0";
+};
+"docmfp" = {
+  stripPrefix = 0;
+  sha512.run = "55f68d7affd8d82631eb0e67c6232330bdff97ea908259a5e14255058d88f9f745afe55bd4a15eb91bff959b7cfc31835fa22196d3d0edcafa40da521b3105b6";
+  sha512.doc = "fc3721046105ae78b19b61a45fd01570873842c6786a096575efae282e4fc884f5f5dfd5ea6888a25ddc82077340bf0ede4a36977cd33d2b555ccfc3d0ff2c02";
+  sha512.source = "90c38a698f428980635ab3a826f35adb65a1f9b2a2dd385da8ff41ffba01870c071b7ce100dea1142d85ca216a68a0170aa8fdf92feb80a8ae055899f6b05633";
+  hasRunfiles = true;
+  version = "1.2d";
+};
+"docmute" = {
+  stripPrefix = 0;
+  sha512.run = "5c01f4e6922b7a23e753edf9110ae7f1386a4d6ca719ac898b058068a754a6c3bb123f918bdb1087baf5efd1176545f543ab8b93bcb6c9529c9000ad6a3b1e97";
+  sha512.doc = "8207eade8841747201656a7e6edc789926a9dd411946a860e4d865fed618392bb9159245f7162adb4a58c88d00191d83f2daef49f610c3d8e5e231ad7f1fcb7e";
+  sha512.source = "1809026635be9610b39f5f428dfeb2c323b4588dbc6306a50e00f092910fd449921a2cd797fdbf3408442b9f24cfeaf7c69e75db9bd217dce975eee2f1a4b930";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"docsurvey" = {
+  stripPrefix = 0;
+  sha512.run = "e51d73b0dc7267b0564119b6836398a939676d8929e850201900eacb49e701e873661ec897e8c0523a094d82e736014e0ef61d07e2ffb5311924d2fdcaf1d5c4";
+  sha512.doc = "3231dbb4c28a03b754817f50f930f1a6eec33ca9ef6e29a1c4b1edd025315ee9f9e7a371b8733d6624cf9b02dbb705dfcc82d6f98a99aa1ca05b4f277e083304";
+};
+"doctools" = {
+  stripPrefix = 0;
+  sha512.run = "5c621b063d752fbcce773f2b209d358de1588e7c4edec017eb45a74c350e86932ac9c4e0662415ba7ad5bca8ca86d1255b15f4e5572ea949a5d6404b28f14025";
+  sha512.doc = "a78cec3ce74e4689c848b49af7da035cc7c684730f78acd7a7f8d8f78194492e53880e7884eb00dd22d4bbca4f370aabe8175048503959f88023a12ee4f26598";
+  sha512.source = "bf61b5c519ad73fa8187797367355c195ed2048d83cb4842862edca740f51d60bc421881da10c474d950485faf701631af6299033d2005f0d2aa8c6561625864";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"documentation" = {
+  stripPrefix = 0;
+  sha512.run = "330534f15cafffa56dc35e5b4de8caac66a87ccb0b834df5419a68a7cb136136263af14ef14ee7ecaf01fedb2803c2653dab7570ec2535ad1ca3033e1afd64e2";
+  sha512.doc = "09854b00d86dd902c26c1b4f8cda942ea09796911939a20014b6d50d01b052e04007b55fe814877cb4515a6aa1f4ca1a7ebb39a6a6ac1bfc89b98d1f910329ee";
+  sha512.source = "7e32523123407b913662fd7bbdedf5d3058e1e7e3592649b7afdd4d4df6bb704c7b1c3153fb0fdf3b8bea183259a64b8ab6ec17d74ee74ea086a56ef1dc90bc2";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"doi" = {
+  stripPrefix = 0;
+  sha512.run = "7a041a56ecc0f88d5200d39d7611c74f955e79e5f5f887d26a70c76624c334b6229f7b937426cbbabfd7de7ae0f9cd2aee70c502981c46fcc3f18fddd62261bc";
+  sha512.doc = "3dd77559fbcb32d8bee7121f62bc37ca14c14c8e62f8d2ba44978438920dcdd54605a543135a6294e2ea9742f5fde4862a2efe3eeb6bf22b6d7418b4b01a2ebd";
+  hasRunfiles = true;
+};
+"doipubmed" = {
+  stripPrefix = 0;
+  sha512.run = "3f313afd9cee76d11b5f957a3e9f7cc0d5d2d04003c285df7cd872adc0cdd26d0248c03f0642d62af53f23c4399e7e5ac3ffcde38da782f64ab265e5879a7f60";
+  sha512.doc = "0298b7f4a408f2092bb7ecd8d5b0cee745f442bdcc2bae463d922ae4511d5b0fd79b8f78d1de49f77b4fb158937fcb752d919239efc25829228c1f75185454ae";
+  sha512.source = "ce8a2d5300a2a3555cef789064047d49810f1f7d9d00429eea8122cde3e4cf75b41d5cec901a3d6cb3596e83bfb43e8ccb2558c64ac3d0574970e9980ceceacf";
+  hasRunfiles = true;
+  version = "1.01";
+};
+"dosepsbin" = {
+  sha512.run = "7f31d47d60b0bf151cd6e6516e29a8414c6344657c133e726e6e8dfe23818995b10b9a2898b1801c4bcb9219969a8af1d2725b75df514ffb119730b3e49008f1";
+  sha512.doc = "b9edce9984698db8e50f9183f89b025cfa89dca8a8725054af80f379c88ff1d2b02cef8f3d5f37ee5b8585a59d1a4d0f0ee0e541a7784f3f3f4e382d78e6a47e";
+  sha512.source = "d5739533a9d10e584ed7de4ec033b4a31be5681fd06fd9a2268f924d4434df902fc1f346ac2636f4ba7b7dcc6b5804a80b5431f7055fe8eccfeeea09915ad2e7";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"dot2texi" = {
+  stripPrefix = 0;
+  sha512.run = "20cc54f907b00e2eb14e4641d5098dd4886ce8d4627f391421bc5e819614dec97e0ec42c92794bacb8ffcb03737cb8736c308fad6984abf13c127f6d1174ee0f";
+  sha512.doc = "9e8461946582e0c99ee35437522e25769e2afe5d7051f072937a57c5d4e1a0c8e144509c751f9ddb7ef576f43ca408ffca663f81c8b5e69fb176a4233ff45ea3";
+  hasRunfiles = true;
+  version = "3.0";
+};
+"dotarrow" = {
+  stripPrefix = 0;
+  sha512.run = "43ff7e4e163764e703673312a1213c50f0a77da98f3f36b726e87042d082f3d2433e35156e1c963d1c6287aa4cea5ccc64f140f89b82569b0552f406b29813c9";
+  sha512.doc = "7b5a4d0b2b31f55e657eed5b7cc0185a8895df77895bbe40f27c4d29d1086c9fef1779f7c4c726faae25821972fac418c379e9e68ad4cd059b1c6f5b0420e9fc";
+  sha512.source = "3d756e93ba60153727d1719f3eb77d278ecae65c08f18529a6352707b655bf39f01152f13b60490ce21ba358e2021681a64de8e9fa6f46f9f4bae5b3a754f1a9";
+  hasRunfiles = true;
+  version = "0.01a";
+};
+"dotlessi" = {
+  stripPrefix = 0;
+  sha512.run = "348be296d710fe22d8122b45437d91027913b90ef36fa7aa365ad49dbdea566506c80072623ccc95170227e77ee2fc2fb3f711772afe4e7e7b83195eb3110b61";
+  sha512.doc = "c77fed1f0b8ddbd6ed141fe8c9f914cbd5592820ffe3e457ecf35952817149d1315598f449dfe0e15e0e50328e45b408d3f1ef91fe83154f5374bcc62041ba77";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"dotseqn" = {
+  stripPrefix = 0;
+  sha512.run = "794be5110d50ff9134471aedec8adaf7267f112012d962ee6e1cd7ddaa36cc37d993517cf4663686c90df891fe2e912d260cc9c9945aaee25925c2915afcc45f";
+  sha512.doc = "aeb026d83497b78725d623b52223877d4d5a0a745312511f007d69395b87ba5362904cfa26bb24f2f2c7d0e0ae14bb82699d6108533260d736c0e85bc29ceff2";
+  sha512.source = "7cd2a4a2001a38e999e0632222116f32b559d8f004c9e378493d84486028e5c1cd5268f63a0eb93f9d1402b2c2e11b2db2429547f300809cca3d9f39efd6b17e";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"dottex" = {
+  stripPrefix = 0;
+  sha512.run = "037586577425d8a38a2170bc4bb9a7fa28a7886ad852d1c85483f7c3b625321c41a204b613479382ff5fb9e8cc3f8f9d8ff6e0a07c14b71ce6fdc68280515e33";
+  sha512.doc = "3708e08c630e27d744c3a865cc02e91868a32b1648b4d390cea0f20ea6340c56ea1720348f6b82796df6cc3f4d5b7feaf59ffe7e24c32e34535a4e5763318df6";
+  sha512.source = "adf26c722ad1e2fa26d10488125267516923db87c1185068a33a082c6f51bf5ec644ace69aefa0630eab9a604bfc28032cb5d10db15ef0c80ab28fc93839a13b";
+  hasRunfiles = true;
+  version = "0.6";
+};
+"doublestroke" = {
+  stripPrefix = 0;
+  sha512.run = "ff1be47939d9a2e8ec4fe8e6852d9fa31c2776511de158611ef8b853ac73291d1aa4ffe81985bed60c75a16e3cfc963a3a8ce3fb9494dcf6664cd6d92a549e73";
+  sha512.doc = "2cf0cc8936393be2b01ed06158b250a43514098aeec4007bf493bd9232fda911f4a59f45716fba5837e475bdc39a86cf6e1180d4220e6aef26ff9e0315389200";
+  hasRunfiles = true;
+  version = "1.111";
+};
+"dowith" = {
+  stripPrefix = 0;
+  sha512.run = "7c9bc25d94364ea13326ebc010d15c92b27ffad08b68fa5c3b5034e6bbd6a96370d159727270adf76e6edca15d08de86c13ca7ede009a445b500ac22b151c05c";
+  sha512.doc = "2fb2234cdf6b42bd3f9f991b3d2d76473c45c51ffb67e7c12e7976310e0fa562cb8d1f01b347e9b8140c854e1ede865cfed17f5748ded909dc8d983d4f246961";
+  sha512.source = "44d331b8f99533a6bb3b150748245787f686a807b22dcea3dd9bef311000881fcf0870d19d6718574d56adae79451ef05aca1bddf1904a76d50dd4e74529fd47";
+  hasRunfiles = true;
+  version = "r0.32";
+};
+"download" = {
+  stripPrefix = 0;
+  sha512.run = "051fdf31160c95e88c8ed1214311b0ec8eda80b7128752c27a203c7e7dc5cee6d275dc4ed93f06308b71d199d9216b18600a2b6b219f852fc256eb2486c2bfd2";
+  sha512.doc = "388fbef93df8f76de34e7968b8a1925f294b87972e2e26cb1ae92145b252b5a88fc06254453a6bc15eab14a4532e1a18e3b719ea243142c09239e3521ff8f7d7";
+  sha512.source = "6090434f8a33e1ac95363082c0536a9990ea6c4936adbe151c1f8e5ad20e7ad9635ee656c9c29af9360b5d8bd427f78d26c9527c4a84dfefec7dd73a007e9839";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"dox" = {
+  stripPrefix = 0;
+  sha512.run = "dc37733e7253d457b2fe09b72b808c5198f222dcde12e0d36ae546a8ad0537419fe7f27945625bb3cd3efd2b5b63991e89dede1199e89c67fe7d6917370cab67";
+  sha512.doc = "4474e38d3dd35dd14b281f7d2e5ad1d6104d95579901a50b3575e846532c279111c81f813b78c4d16ca6c78ac627a30e51515ee7b178602b7338c1c799c62609";
+  sha512.source = "08cbe72a2af77f3cd34a78d0743ede6f0017e7edc275e56c66defd51b1550990cf00d9327ee9cca5c44b7c73870ead063346754c4dc1f1aafc00614a5d5c0707";
+  hasRunfiles = true;
+  version = "2.4";
+};
+"dozenal" = {
+  stripPrefix = 0;
+  sha512.run = "ca4171da87126231a791f432a6015cc069f0eb0d540f8b79b3b5028f3f3e30d9202622886b582f2e351049603d0323a458fbce3d6b2565af5391a4aa94b734c0";
+  sha512.doc = "e7c180bed185135cfba31acbf4488ff0991066be7456a7c54625df458a24819ef8b41bc19eec955967f22fc156ad6efc9e194489178e2cffb806bf066ea42520";
+  sha512.source = "4e8c3cc35fc2d429fa286fc68eb92d2d290bbbbeabcb714d849f9132ff71bf99edfc5b08a0ae596f98e900e1b49d658af2b2b9daf1fbacf57e2b3aeefa15f6ad";
+  hasRunfiles = true;
+  version = "7.2";
+};
+"dpfloat" = {
+  stripPrefix = 0;
+  sha512.run = "df136498f7ba41b1335ac109667d07dd9584e6682e1d75fc82a80839bf0f6d7a4de1f5750aa738eefb96d14d2adea20a3ec9fbc92130481d9bce0abb6c6f175e";
+  sha512.doc = "2cbdb8711556580d14a01b9daf03b1a1095387c077413b2815bfaef1af2781fc8bc56fa7a6a36abee60d6ce6928f920c9d9c3deecc2e071e8e99d51c1421508c";
+  hasRunfiles = true;
+};
+"dprogress" = {
+  stripPrefix = 0;
+  sha512.run = "4f56a2d6e345cb98eba3ffddfa977bd48661d90bd10712387141b3398c9a85e8b9d7b0f33e75635b7a98e91176f1e866ecf0b14ef0197fc488bf976dd4889673";
+  sha512.doc = "455451396b22b3d38288a5c51f6c2413c56ffd07ac1331c3727c4f382eaa07f0a128373ba033ae58e53411e69a4ec0eca67609fc3c111c91f24f2adb2536a2e1";
+  sha512.source = "de6166c9c79f62c0f3eb973b6383f2bb486a8f7673628862d54af8e00a5ddcdf78419ea819c95e750f47fa3e65cd58b598e3a3510d43ec3d4d3fa9538a846a79";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"drac" = {
+  stripPrefix = 0;
+  sha512.run = "f45c94e222a6bcae0d87ab5aebf0f594f1674a49787391dfb9cce32f9b36a0aa6a81e84ea4ca345e0918ff2166e36738ae9969e4d9e4653bbb99ac6a7f0cc63f";
+  sha512.doc = "7e6debf9580d7c145d8f95329aeadd63012bcfe3ac04fb9c4a3e815391757051ce021e4e2659c96fd7ff5066e3e324ac947cfaca16e52bf5895fd5724f81f552";
+  sha512.source = "a56b3648bc75174179ac74eda67d84226985d18863270cdf6b6c1688ff1405389ad27f20abdc6a41f68520e1d95890fe021d1896d00a5c44a6a4ec2b9c380944";
+  hasRunfiles = true;
+  version = "1";
+};
+"draftcopy" = {
+  stripPrefix = 0;
+  sha512.run = "f1f2ac803e1858ffab880c7427ed2dfeaeb435255e83ed795e0d5b4262fce1fbf7593653035af2e45d4731107c8f886938015ee1a7fd0018001c0e39e9f1018d";
+  sha512.doc = "f7a4941c26c92223a9dde51e288380efe3b701d847051c13345e97f5a082cb3cd9e5d5421dfb2b1f1cdc12214df1ce6970a8ca6fe7463faad73af1a12c3542e7";
+  sha512.source = "9320e076a200fa5d7fa297c7d3228ce77ad9a9a56f57e4ef250a21320e9f2e429004ab716747499a264108ece97ae03388df084c24e2a370f57ee22b80628cba";
+  hasRunfiles = true;
+  version = "2.16";
+};
+"draftfigure" = {
+  stripPrefix = 0;
+  sha512.run = "e8ced947e69803243543657185e8fb28e67776dc9eee5e095126ec712fa368c32903f53243aaabb7308c895cf8e0c10a6d89c33e6b6c5d109f0300dab5213e60";
+  sha512.doc = "f0a9a59ee326746802fb33412c44148ed8c836a24653df6685ecb69bc76870cae63ac8955274705639e658491566da0d0633ee8d57cf57d58fe43a971252ee05";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"draftwatermark" = {
+  stripPrefix = 0;
+  sha512.run = "10cc5a9f6ba21ce87022e0f45d4f4cb92c4aaf8e1a4edfb5e78d24f8cfa1d283745db0d04f32ba2943963677bb3fa934a1f410e9148baceeec23b70436682a1e";
+  sha512.doc = "5d7d9d4dbb18f452e917f91a5e67f46bae4f0ac2b8088279832e32d9e7a7fca1230a666ea1031c258ea3882e7a00d3a071864a20a75b523bbbfb12e7a3da0a4f";
+  sha512.source = "01de29c18e5ca16c0cadfb171c938fc444feb7e3dc558f9283cf4f9260a94c02b6ddb007eed1a296d60c9aceac3cf370ee2e9c3fb63f6c16b25397b837fe4993";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"dramatist" = {
+  stripPrefix = 0;
+  sha512.run = "d61da72538a7d83ee902081aefc23f3addf2fd6e5fa7ebb207fdac16546d13602c50419682e842df8f36a899c2c0aba0aaf615bf64202135dd9f470f5391838d";
+  sha512.doc = "fc28e1dc8614d836637350a20478a0e8a03121909cb42bfd1cf4caf8e7adc01a4ac3eba08e82c389c41a567cd00f191ecd8938ac40a0a226e2fbdac047ecb733";
+  sha512.source = "a364353dbbb9540a9f43c26fbfe6be8f814452a23e9f25c5a4c4f45a65534e0696dee993bddea4eb20eed284b892d258f6947fb0f96af63a0516f9f0fae01651";
+  hasRunfiles = true;
+  version = "1.2e";
+};
+"dratex" = {
+  stripPrefix = 0;
+  sha512.run = "1a18f8866d1cffb0ac3c277bf27e1585c7596eab60ed51756077abe3154b6d67ea95205f60b5a244e9acabb05e8dc95a792d48f0a2fc492f90d224f85895fdd8";
+  sha512.doc = "0ff34bd23dd8718f4f8b0dc3e84068ca2b38a9758849d98230f1a8d4561705d6db7be3b0fcb34621054993f27df7a9215267b3ebbd7fb3d77b8cd9cfefa0ad60";
+  hasRunfiles = true;
+};
+"drawmatrix" = {
+  stripPrefix = 0;
+  sha512.run = "6be4d4ee6970956dd2f3b31d31ca0cfbad268e2f98ae64fd87a49de9ab26765447531121aa0edc157779f3f9c0dd76ab2ec3f747912f4204aab9e2e7181368f6";
+  sha512.doc = "07eec69024d4daff597f2a937178f66413e6dc4974a2044f983e809b046f09140db7eaf3cfd68833bd95be0d56b4a564dfc9ad4d771fa124f55ea3783eafca1b";
+  sha512.source = "8125f7c3b0867df9d8f21e45d89a03e6ff0f946d946646c26b0ca825a30c62051264f45e5c2da5bbd45b35afbc2f7f7120e9ea3d2d289f6a228385860d25f523";
+  hasRunfiles = true;
+  version = "1.5.0";
+};
+"drawstack" = {
+  stripPrefix = 0;
+  sha512.run = "383eab0b77675ae418a775a413c37720d6f74d51d1a31bdb2923b45ced53afa576f10304e372171298ddbd566a8418526d291f74a1871eaba36ea3793d7d0173";
+  sha512.doc = "d435447ec29bc26262886b3dc4c41cefae81d24e0704857a9ea61f1fc08ff8e4bfb4ead7686a9f49808dff30da47fc5638e2c0dbea4c6a551800a373f68df0e6";
+  hasRunfiles = true;
+};
+"drm" = {
+  stripPrefix = 0;
+  sha512.run = "662a2593713dc02debd4702b5184586736f12200aba4079154e6890b49d581810e1a7a94f0d3b6750ecd241dc03cd5a638a3ea5bd4792f13829e7812f5620b36";
+  sha512.doc = "7821503ea6548fa200221d2c2234389a252ddc61498d66389f0afd13b6c36536b744f060f42bf26c4e2be722a7cbca8841b1b76510391da4960dcfbfb9956177";
+  sha512.source = "a505f89568d63bc36799a3802fdd4e5a4903a10226b565c58b1b6d0900f0efeb699838ef17f84d9720558c7e1959e33d97c387b371862366726c6b99e30e838c";
+  hasRunfiles = true;
+  version = "4.4";
+};
+"droid" = {
+  stripPrefix = 0;
+  sha512.run = "e2fa1b84bde04858b16b39a559478005a6585d71ddc9879d6e54130970a1f0f6e45e584f9635f457af8143093872541dda0ad98fd647ef2af309b0d0badc813f";
+  sha512.doc = "82613922360967cced68b24fd997b06ee8a082512f6567c4ae17f0046972eca84ec1e154d78ba196eecd0aeff8e9b7adae12f3b7efd780e1eb1e161f8b18ebe7";
+  hasRunfiles = true;
+  version = "3.2";
+};
+"droit-fr" = {
+  stripPrefix = 0;
+  sha512.run = "76c928be0648ae7bddc76f654b65a99ae6670cb17b0ae9a54596599ff655636d4520b31d4e802a15af65637c5bf956d41a2095762a3c4bb77052c9f74da5e7af";
+  sha512.doc = "6129658aad2fae20dd12252941ee774393e262d9322ec2163ebc964ec27c4ffb63f2ce0faf9b74a90717c137065e9af238d45c623cc58d52b1e4776da221e231";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"drs" = {
+  stripPrefix = 0;
+  sha512.run = "5054b389c79b6895e648d3d4fcd1a3f7b06b213963245702e5bc4c0e8b6e3a87c6a2d3f72509998216e25553148008e597c6dd3015ef0b94724e84f3fade5936";
+  sha512.doc = "c265c462094e50872fc2748167226319a5723aabe54ca057661b95c7cff897afd08f42ce6d520b7ab35f259b760800e79ac6deae0f1ca0c776c2c2aa7839cf80";
+  hasRunfiles = true;
+  version = "1.1b";
+};
+"drv" = {
+  stripPrefix = 0;
+  sha512.run = "b7f2b56f305d552bd857a5950fad2dadbf800857d4c8ee411fd2f5786697385404fce3956e59b5928ed5f0a688117dd740c0f56806674d08cd8cb1d52b79a9d8";
+  sha512.doc = "a79d9883615568bd6c0d5aac44cc2ce28e0bd08e96f802d500515428ffb5400beadea94347abab7752904ae01342049b8d6687f6047aa9d8b27f5fe3a647bd02";
+  hasRunfiles = true;
+  version = "0.97";
+};
+"dsptricks" = {
+  stripPrefix = 0;
+  sha512.run = "282c1c1aa51c70a77b0b63190ee875668dab9fc2303e2a84ff0d79a7c9f78a2534e4752a32c093e72eda7e98aea220923f9d1703b5c94214f9590962187de194";
+  sha512.doc = "c45da3740ed14540cada0c75a98c19f5e3cd2b32811a4f1906e11c45a40e0e8d31bd706ff4afb18073690e4e285b7b44b858f53f33f050702526dbe0fc88f8b8";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"dsserif" = {
+  stripPrefix = 0;
+  sha512.run = "346d9192803712c47d8905920b6c86244759635e7929e1a2c049a558a7e50eb36dc6574dae59f17bda21e6c95d1a661c9857514eb7f5f60d008f293beb758da8";
+  sha512.doc = "87e5ede487017ac47d7502d5983d5d158deb4d709f033ca34855f01f4b93fe7e3001c6287277f4f830b79c2ff1cf41caacccf2942769f8b2b848524ba4fa6696";
+  sha512.source = "31ad24b5b7667c1763dc36a475ce13b70bdc38c239a5c38a09acc3d4e66c95b1abf82d60ca240e7bf121f9dc93b17a17f420ab863a8f2052ed363c5adc46ec22";
+  hasRunfiles = true;
+  version = "1.00";
+};
+"dtk" = {
+  stripPrefix = 0;
+  sha512.run = "12ecc654b0bdd73c96297e7f05a2f9d031bad727b6fe83fb247cda5a1c496bd8a63e2f4927fe4f4fa9755237c7c0f85a81326732f95c7daafba7cb7eb03b265e";
+  sha512.doc = "5ada9e107e6de2efa8614075492d405aa560d2d2a0eabcbe41976f03d28064c152ec3f66ca22d6d81dcbed13eaf383c53a60c68e7b72731cd39f6e613cf0f14f";
+  hasRunfiles = true;
+  version = "2.08c";
+};
+"dtl" = {
+  sha512.run = "796f01b568969124edc40662db5d8699a815b72d9eafea640c9499b7cd907e4cd36ab42c87ade466c51fcb18a47de3363f5c6068f4c678243c7633343705f35d";
+  sha512.doc = "b0e1d2c3728b859bc010efc5d31c50b10c7f9a045530f99278228fd4a4bae5563d58852dc995e9f4430d64512f7b0ec0c868c6f86259127bdf524c6f66bbec86";
+  version = "0.6.1";
+};
+"dtxdescribe" = {
+  stripPrefix = 0;
+  sha512.run = "4f226da178f26f2e3310a86e2d884aee681f87528c0d43f942f23c68b6e335eb21bef830233524d44d2945a1d287ff9542bd69744c15c722a54ba38a5af73d96";
+  sha512.doc = "45592bc0c6836d83f1db18f7852394a0288c2557aa708ccbd1407656b7939cefba07556e924fe495da36078411b81bd00702f7998332a5fd801aac0327655f47";
+  sha512.source = "9ad27a4f1fc13deb348a3bb73dfecb634ed3f0b69565f4ab06763cafdd652b4899fa4914d64c9596534cb561ac9724c86ea713939d7d6e6c7820c869acb0289d";
+  hasRunfiles = true;
+  version = "1.02";
+};
+"dtxgallery" = {
+  stripPrefix = 0;
+  sha512.run = "c4b164fc1fe9230aa92bd38689ffa67391aea511af59e74b93c9379f1d027f07091f98734af837a1af90b35b0e2e5245f78f0198f4a09465a8c59c18077a2457";
+  sha512.doc = "ea56d62e0fb8b168461f8d01a08a9829ed00db4e2d6a460791de3018be21b4b446ad8ebf4a1c4a69e99a0989b85b55cbaa8aed171a53479df0501ea36cf03bdc";
+  version = "1";
+};
+"dtxgen" = {
+  sha512.run = "b197684c1e941a64b606b472fb9e0f1ed4f5d0b0db2df59202712c0e3f3b3993106b8d493d707c4875e90dacd9dc7d12bba784ef7c8d04984a38708073b1b92d";
+  sha512.doc = "f666a2b5d3cb32d43a23cc3edcd92bfb727d500a8c439b4b78bae89ac73c317adac9786e4702e78b5b4861b76489ff7af5cfd115a80b96cd6298c65412d56a50";
+  hasRunfiles = true;
+  version = "1.08";
+};
+"dtxtut" = {
+  stripPrefix = 0;
+  sha512.run = "cc28ede4898b583a89df3efbfed45318be9034b3c2a92bff083e79007326d4d680177f1884aa506dbc9574a924687eb463f2d69c297906fcbddaa584ef9e52bf";
+  sha512.doc = "2c8a2ec4fc38aefa720bee29f24149837f985a54cc1b9cc9325887f5b7738d89ef38d8b60acbb4b5adf0e6c13e1677003e58adaaaf50e8949c33377ca29679a7";
+  version = "2.1";
+};
+"ducksay" = {
+  stripPrefix = 0;
+  sha512.run = "57deacbacac1d79bbe0f4657fb55c05eb03c93068534f2d6703cd3785f1b056289f548edd9f01f52dfb22b5c1b402e8a3809240d323bd62fddc6b69a32e27e9b";
+  sha512.doc = "f4b49ccc5c3044a00c55fe396cea8e63b04fa5ad8d24e894b15044c189d6f3abba4e4e8d3d2200ebcbd15e9e40efeb2ac1f29996fb41d82d47b83810260408c0";
+  sha512.source = "8b027a2d0f11606d4469c490c8c4825cc68f147f99d1e708689cff2627e7df0b2583ab4bb4accbb2cbb7b0b8d803c2f0a7a13dec1d67036bb25330371345d515";
+  hasRunfiles = true;
+  version = "2.4.1";
+};
+"duckuments" = {
+  stripPrefix = 0;
+  sha512.run = "77c975ea3e42faee4db5d99d692220884b24ccce2d69a30ce484d113cd261ddf5cf5a13ee04d9e8a95572e98c8c4bedfd901db34379af6a567777f9358e4bad5";
+  sha512.doc = "0c9e24cc988b9350d188878dd8b463428133fe30c00218eed3d67917ace24412e55c396422890fc6c02030378b560b3d374970e879e3a331db7d8e34b3302421";
+  sha512.source = "528db05e9c1c0232fae271aff911f35cd55f85bfcdc931820f5a74d6f490fa3fada99c274b36fdddc6163cad6f779183b0056b1a6e003c4c2737282fed608497";
+  hasRunfiles = true;
+  version = "0.5";
+};
+"duerer" = {
+  stripPrefix = 0;
+  sha512.run = "15f39b70d6b595a1c4d6594a2908fc07e3597bf1bf88ba25b24ee545d473c709a15b52ad0bd367b0cb1a47ff9548a110c6dce6c2a2b2402f655c21f6dac5a393";
+  sha512.doc = "babbe18510ab7acc910639e2993858b2cf27c4414772d2a03fd2d3576f7dd64f4c7b1aa05d9a7913b4eb8d4eddc942137b41b87816631b34cf35e0120dd3ea40";
+  hasRunfiles = true;
+};
+"duerer-latex" = {
+  stripPrefix = 0;
+  sha512.run = "e474634e00b86878bc0c09ff247a930e102621d3606079d72e7c284a8ec61d2a2b36f1d09c171b7a4953981dea65df49da1962f01df272fa80354281a3209bc6";
+  sha512.doc = "d1ea1a023e9f2f1ea4e0fa045d8831f764dbef34d1ef2ec96090f7f7a49aa1f4ed2df63bb611ee354a1e816a204841fbd7f4059a14ed06d758a31ca9f460d50a";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"duotenzor" = {
+  stripPrefix = 0;
+  sha512.run = "33990302586baf5731976a27a8268986db6917137219248e559900fc2e64e5ef443bfd14a0472194a962f6fa59a8ed8bb1caadd46badf157fbe39f36815eacd7";
+  sha512.doc = "83a811a37004975e4b3fca67bfed83d8fc85fe97a07a20f624d321c62efddf2ce188f1748a5cea47185675e8d5226433b48327d8d7daf87465471b89b652f2fe";
+  hasRunfiles = true;
+  version = "1.00";
+};
+"dutchcal" = {
+  stripPrefix = 0;
+  sha512.run = "46b90d505661424bcc96d40bae09303193baf5c681338b5b2d526e51ba59cd56fd64a81a01710fb4911727a3cc4263e731754d82a9a2c021bdf73b6ffb15f5b6";
+  sha512.doc = "adbd2c44d3b2de4149dc647d4e88e46fdb968e6c6898c4de3395d51665bb147d0abb474ab462e75da028265d0cc6935f930f4397558d057171dd56a4999dcb25";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"dvdcoll" = {
+  stripPrefix = 0;
+  sha512.run = "e6b553b2e13e87e105ba1c64422e5269e2f285754f12db1d43f475e0f94dbd32253620c1e71ef08de106d5a050c531e058e529264478e7f4545ed83dfffdd233";
+  sha512.doc = "59b152b1922bc79ec3a132902547e8ffebce8cc05e2933b3b54292b507d1ac1810cd0aa2c974045b9b996fd14445126e3eebe6ae3d6ec45e1fdccea9a6ca35e1";
+  hasRunfiles = true;
+  version = "1.1a";
+};
+"dvgloss" = {
+  stripPrefix = 0;
+  sha512.run = "51227cd1323c6ef94f8e0c537289abd3812f39109ce178793347d6615a718109f120bf9e6a4dac1ea801effb6f2b9425c376fdcfd5db6a5409887a8b9b49dff8";
+  sha512.doc = "4e59a568e0230e5e5dab7968eb27a8bda4680ed31b23d21fe3dfc15d0e3d8b3d6599535f91a092e2f9dea69402ba8ef07291d2cadc1e1cce28aea927fbb84341";
+  sha512.source = "a4df82b4ea3e57de02e61e28cf4b9e8fa91e385534d7676fe3e287c49148849dc736003b867f1b481d56466847f9f62f020bb2e826ec81dc31be3d2b6f6a47d4";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"dvi2tty" = {
+  sha512.run = "41399ea5ec5d9e32cd032caf70009181bef98b28e29ffee84414914ca436a49bb59caa7e5523ae3c76cb8ede89d89ab74af79dd6ecc89cdf9f0d65605668e9c2";
+  sha512.doc = "31cd9e13e873269f27e7e40b681a56022e7c0d776179fedb3c9396bcd9743b9e2b5f3043d6d2858858593aac49e40c16bb27d676f77ded984f4b803dfd9b07eb";
+  version = "6.0.0";
+};
+"dviasm" = {
+  sha512.run = "f8f24627f416053ed4a53008eb6f4b83a6f7114793e361956c3a968efdfe06c11c233e24e14568ccffec612d1ef63daf8f6644333f68d202b816cafee1da98b2";
+  sha512.doc = "49d49f53bbba34659a96d587d899af7a1d4eb4841d3b5132ca8647efeb27bf6590f7bbac42bc5d5becca356f7bfcd4fb244f6ce9282539fc9aae4bc99a633ecc";
+  hasRunfiles = true;
+};
+"dvicopy" = {
+  sha512.run = "34e16ff93daa924658b433affc70fdab01bd8d6c1d537cf1787389b8de34e7348aaa91a39ba3f3671d25d216420421a5ca73cff5de254fbf25a8433e20fda322";
+  sha512.doc = "a85e3cf8ee5e500264ffaffddf8ebe6642373f29fcca42c346654f304f34b9389f2e190014eacd215ca0d78debe44859e05696789b9f703fd6eaefc9bebd4ff7";
+  version = "1.5";
+};
+"dvidvi" = {
+  sha512.run = "0b21ec8ae0741fe0b9cbe53fd97c4ef20cd4330bae769424b2fbd2998293b05419008ebcc7ab74bc17f166a30a66cad980f5692ab32aa1621ad4a771d20d720a";
+  sha512.doc = "831daec5b770f866c15440a384d1352824ead05faaacb8ae991e2d9bc1b115d599e5260cc9d7db6f0752ca7a16f21b0c52b5fff58ed1b23f30ffbfae59387c13";
+};
+"dviincl" = {
+  stripPrefix = 0;
+  sha512.run = "dc09380d453b2c83359fa1862f6d289162ed4ec12e7f1b2842789db26e780713981261369dee0d03561a6864bb8bb25e071ca73c3d85e6218667587fa78f55bd";
+  sha512.doc = "3418aa91ac8daf98f2ccbe67c2ca13bcf8fc5adb380f7c56e133f4487bc3ab701be1925d7a5878fc02ab7b8607e70991887a3d875d25b777b5489b7ae904aa7b";
+  hasRunfiles = true;
+  version = "1.00";
+};
+"dviinfox" = {
+  sha512.run = "33b37192832362c170575d1770b0e8da105ab0f9197ee52ff86a9dedfdac718fd7f3ca87d6f3f2075803fcffbc2f3739b806b1088bd7e2a21beca53292d918f0";
+  sha512.doc = "f5f84a2df36ee93ccc0a8acb687fa4fdc6441ee6b0c76fe4330cb28ff2e5106014df5f367d5f2821c10864ff16988837099114ce331afe8a303e0f9102d92193";
+  hasRunfiles = true;
+  version = "1.04";
+};
+"dviljk" = {
+  sha512.run = "9c94578a0e4a43663cf1d3e05447d51ee84b892bb78ac105321b471e21417dd636bf8746d04c0decce06293f8ae8d8f60e0127b52796310a9c9dfc512158ab4c";
+  sha512.doc = "fa77f151e69f8baccbd01f8beb29c0143283892d42f5b0213909c7d434688a4e4c5e121ef9b8b73d93ebb211ca03a454ce309efd447a7d351968cbe9066b5ae8";
+};
+"dviout-util" = {
+  sha512.run = "bc4ebab6476e9023c4c6e130082ec1ace7f068f9d0b2835f1bfb40db892baa7db4a5f0ffee0e49e4368f2b34ca044f2de31c9905c244157d9238daa8939cd56c";
+  sha512.doc = "916faf1b17e02ec011a6ace727f17807ae72b64126c3a29337b06554aeac3fb86bb5bc0ea36c5f82523843be1f051e56cf9cde9370b40170295d911cd91eb6da";
+};
+"dvipdfmx" = {
+  deps."glyphlist" = tl."glyphlist";
+  sha512.run = "eded65e852efd5caa8cad6227894b5d76b190baed17678a0a89a90ec14ad0853abe0b8bf09d2b989af05b05c47dd1167ccacfb18aacbfd70915a483152904fc0";
+  sha512.doc = "332955e7a57969de8647845f0d7a36bae6bb2fe8bc431533198c7225d5bf67ea18228a2c71bc88581fc3e72fcaef366002ea58b4ab54f3f8591ff7a3d4888f1a";
+  hasRunfiles = true;
+};
+"dvipng" = {
+  sha512.run = "3716cc269d2f869527f6f4d5cc9ea92844c6d67e8eb56d80874540f37b89d6f8a391fb5c3fe0c194088f4ee7301396605c22d2990322ff441e1d1872a58eca78";
+  sha512.doc = "752961d28935c2399badb3e31af65c76eeb5a9cddb0de44f5d9907b8800567bf9fd8019fe8c39cc335dc9a60487aacd4de196611fe1f289cd0c424fd1d6c180e";
+  version = "1.15";
+};
+"dvipos" = {
+  sha512.run = "ea771c689b519ab7167a0e363af501db771e7883c0b82fe0ded3661b57fcf31b932cb268b08b7e1f2f4ea3a7f85a7bc1efca83272f7eaf163354166a0b9a5a93";
+  sha512.doc = "0e4548fc7abe4aa8f54a1b1a17d4582e1cb6e9f0aecd9812a1e2337ab1aa9995b4f3c4e2417f3eed248a9d40a5ba2c314aab273fda3ff5dafda3d9ca23307b77";
+};
+"dvips" = {
+  sha512.run = "ee10b8c1b67997d1c781fe2c3e5ce7826c111a2b6f4078330b566bf5525ad2a1cb2b89c4efa8d877ae1557fb319941ed09db30b229a62b6d3ff6f6a784e48df5";
+  sha512.doc = "fcc91e88fd3536244d878458a90d31ad3b9ec9efbc08d09d8b23f13d3887ca575e17663b2e21451abf88de389f7fc3937ce3ab49bc9e6ea94ab77c66ba179a00";
+  hasRunfiles = true;
+};
+"dvipsconfig" = {
+  stripPrefix = 0;
+  sha512.run = "ff7ad395329dd1cc5d21d5459916d0f10a8c03399d733048bce0a8aaa4e3a955f3ad3dbb228319d4bfb96e0694069002507bc294ed81fda5a48ad93f8cd82589";
+  hasRunfiles = true;
+  version = "1.6";
+};
+"dvisvgm" = {
+  sha512.run = "9497809c9788b1bec8afe64d67828b7035545eafa92fc6e3be62e9ced5a2428db6ff169d0919fd929a30872d0c70359d679d0d32b3a741dd9070bf6bc2901556";
+  sha512.doc = "2e44abd6925358d1dc594296ac2c13f146b4c8bd9b5d7dfd3dce92f5bf00e88712cc0f3a0da915578d39a8e1243c84b936cd624aec424f7d1661e9a7fe2b5635";
+  version = "2.6.1";
+};
+"dynamicnumber" = {
+  stripPrefix = 0;
+  sha512.run = "802df3848c8ace40e1eef5c1d30c07a6a5f30fc902a9bb18581b79ff322921e7235ab05981625eb289f093f4486f0aec2e9c83bf669a9afa993a86146317b619";
+  sha512.doc = "3eeb8617b33d45c1f97756f58bb87fa1244cd3089e0ed64f363f2909480459ce17e30d54bfbf948642856984618081d0fd15c0721d0190c187b375fbdfcfcebd";
+  sha512.source = "8a4ed9566201af2835190f574c3316f5eff4258ef0e9b25b62b146b483c14e9fcf66abc2e1c4b3512f12969bcee1a8102ba020ea78874e0c7f3e68c0a64232ea";
+  hasRunfiles = true;
+  version = "0.1.3";
+};
+"dynblocks" = {
+  stripPrefix = 0;
+  sha512.run = "bda4ad43754e7d4fa87cc4ac5bdb772cd24a4e613bcf7993e3d448a9c884aad5ad484c6dd7739f4c6edb983560181717319dc26376a6025f3847afb588fa47a1";
+  sha512.doc = "4f4084cc4dd913bcff3e71286fa4e881c7d577afd8e0669396de2ab18ccbdbc8649117bb931e365fa5999c5c842a71cab18da5573e83c1d721c87256e614c321";
+  hasRunfiles = true;
+  version = "0.2b";
+};
+"dynkin-diagrams" = {
+  stripPrefix = 0;
+  sha512.run = "077268d796ca7e45df408fec24dbdeaa8d2192097f99880edefc12b7773359ef78ee243c0e479b6259c11b928908e8cbfead96b1ef0470831a65d1c58ebc4dfc";
+  sha512.doc = "c188c4e237439e6f38e062a89428413f94951c747e3c0cd122ea3ad8b0ca4d516f545dc2c6ac5fe5221d8a6d86b8754acc1981986d0eb53498f00a3b56809cf5";
+  hasRunfiles = true;
+  version = "3.141592";
+};
+"dyntree" = {
+  stripPrefix = 0;
+  sha512.run = "8f8d568cc708e62ae1217188acf3deef05d7bbacf1da04f38c1f5b08d4b2bd0ee465021c923ed314ed284dd2234dce5079b7918c12d3bab72ad5f91749bdfe4c";
+  sha512.doc = "fde82bf8b97840014737734fb57eec7c37b34ca0d5eeb1a66c27dab16d4a5f1c4a7f7c10fb9c8bb98f3ef56a15645da0ab66cdcb658f69ea32eb84625b25023a";
+  sha512.source = "57d76ba3ff2e85a18fad69126a87b02fecf6f994de63af530831d63a0405abbcfad5ff7b33ff0f13c257b85bea73788e72a4347337c7355a25b85c5e762c25dd";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"e-french" = {
+  stripPrefix = 0;
+  sha512.run = "ed14a41b05d47117fc354bb5a1782338ed91ebbd6071af96f4bb94fcefed31048ef3ed1301686dd720d7f1c9ee59c518adbf83c6c7de2c35e3d50cdd65c0b0bf";
+  sha512.doc = "d76ba6c016c8a48a06ed126d0d011e1336203cc8182f744de9d238e723019156f369574b7090cfcc943829ef058b77ec536ab6bb7c054e5e2587dc92998258d0";
+  hasRunfiles = true;
+  version = "6.11";
+};
+"ean" = {
+  stripPrefix = 0;
+  sha512.run = "8a44b134d612ad4908a3ec025b0934feb56a8a8d7c7dce91f7ff152fda91c99c0c557ecacf7b22d8e9abf8e99d28b09b21abc8658e598baf37bfbbaa885b86d4";
+  sha512.doc = "35c7d054236569b03082af07412f00dd08d760547433ec8da1876a83546c7432c4cdbffb617ff34b4e48b86873d699d41749bd838e12ffe32980b3d6e92865b0";
+  hasRunfiles = true;
+};
+"ean13isbn" = {
+  stripPrefix = 0;
+  sha512.run = "39d124c59b8c35c0ce103530d30943bd0c17060981f2be4412cad2a38bdaf0a3f4332105e07248718d835169d33fc50ccaa07d462d494e3d74ab02d7de344653";
+  sha512.doc = "b4f5f0f2e3e8316c61129a6b9662cfb0e23aacbe58bc3e111d94ab7a51d01eaee6354395bbdb91a944a261a794362ed719fc6e515285f55ea901acc5e6653d75";
+  hasRunfiles = true;
+};
+"easy" = {
+  stripPrefix = 0;
+  sha512.run = "fbc84351fe02c560ffa1c6b1713e762810123e7abee47bb31899d4baed353928350422e7d237abca758753ad306f927466919ce6b160a3820d1d5101c0b71ee9";
+  sha512.doc = "27bfb9792f0c8261cd2de9bc95dc4023c69a37e12037855e31c606f0dc18d47e45f8299d385fa1dfcabaf6df298bb529e9da41f6d9d36f38f8d7fb5ef7930886";
+  hasRunfiles = true;
+  version = "0.99";
+};
+"easy-todo" = {
+  stripPrefix = 0;
+  sha512.run = "88b496c1f4f56d26ac2fcc6d82e28d71bf11418368d82d3dcb193f8299672bf41d6c15938f3f6af5ac28141f2a52d132844fd178ebb9694de7f7a22fe8f13eaa";
+  sha512.doc = "b2c49273445084f94083ed11f43492ed8ca32582fd9ffe9d12ccb7afe316b06b1924a507c5a12ab5880cae40ef4ee196c6d3e5d05f916356fdc026acc0a9acf1";
+  hasRunfiles = true;
+};
+"easyfig" = {
+  stripPrefix = 0;
+  sha512.run = "4c84122d2989fa90533ced69f6eb9d2536e6de9fbecb096412b6459bdd45225bbf48a512ffdf4fd3f8ffa8a582b47692661b3f4197fe76f911682582b038bf06";
+  sha512.doc = "9544e9d4bb98f78915669d8ed7f314e1de92a0fc5c57b6163a1aa91afa7c97bc0a0726fe57fb1f3b03d981f9d9b320f211316e0d1babeb3d2900f7f49e9a2fdd";
+  sha512.source = "56cb02838c8ba147b56fcae623f86566f9885c67bbc43ab0ff40fae18afa8c9a23674fe4923c8cf4de2b62ab268dab0fe6845fecf2af227c8cce9891e68bd626";
+  hasRunfiles = true;
+  version = "1.2a";
+};
+"easyformat" = {
+  stripPrefix = 0;
+  sha512.run = "f952227a7b0e579d2bf432b3a72e80a45e8adc22ddd9e7af380de54c12f04acf6c4a88dde5a8e7027d11fb820448fdbcc6a343500ae493fa20341634fc64aed5";
+  sha512.doc = "99b5f56c6004b72bfc7289905d2808b5e3c743449896e2af88a7b5c23bae3c62aaf2da9bee43192c662be28372bd856dec1b78a56626d5b1eb91b5e21a759356";
+  hasRunfiles = true;
+  version = "1.4.0";
+};
+"easylist" = {
+  stripPrefix = 0;
+  sha512.run = "b1ddb6242b9ad2e40785602f942d4381a5d72a7d35784bbc2a1732ead1fbd9d730b580226452e9f56fda873b174c56f9b433f1193e0e3424efba4821f7b714ad";
+  sha512.doc = "518258b7d24763477376657e128ef3504d2c8e0f71187edf9edd34825d567f9cdcdb09d61a37d99655959d7c76edfbe550bd08ebd7760735e46fff33bddfbf0a";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"easyreview" = {
+  stripPrefix = 0;
+  sha512.run = "4efa69b2e6280333a89022f93a95c8af4d22cc9b82c4e8692291470af83696e7ed524c77cfe9d9c397c4136c0ebd8399a8ca4ab47d42b84da35bb79189ff1b6f";
+  sha512.doc = "4f71891df0b1dfbf32be06a427f34e5c45f73543b3acb9117487d2bffa46f5b61b74f795249cf3d806705beab710c5a7934a59a8e215c87678e778db517a0832";
+  sha512.source = "8e4375d0711a1fd8ffb3c43a53b62e5e9b84ea90217c21a7155e514a4a42b8b34c36a0f0a839766d7e9b4eee05a6cb36ffd1da98f1c9f756d67fc8ba0acd4807";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"ebezier" = {
+  stripPrefix = 0;
+  sha512.run = "ccd80579b8c7e7e3500ad644f8a418bbd48ad1f2e1cb2aaa82836477553332b43092bb760c01cd7412393ee5b8bf23c055361f111467c71bd7061459781557ac";
+  sha512.doc = "b81d28abf5c8b4a3dbed9219e6519e23fa5b94428baa8aef0ff32dd4893b24524e49cbb8ae08327a7ee59eba93cb0fa2950883d22296451c1f7949225f42b1f1";
+  sha512.source = "ee742d7061a7891ad2b9cebabe827a408750f00ce2012bee8ae787bfd7b6d7ce8e968614d3d3f9eee72072560d47d871fc0022bac8ca8231643f85adf31218db";
+  hasRunfiles = true;
+  version = "4";
+};
+"ebgaramond" = {
+  stripPrefix = 0;
+  sha512.run = "36ee434fc88f4b72e0d1b5fa1cd0a912b1416bc3d74881e78494c2e9eedd1eca6c8bc5ad684969ee8b2bdd83d31c944e3f01bb4e26a6c6581d67cfc9bded6184";
+  sha512.doc = "da563ee20f8271177944ba4c891e91fe54a778bfdf2c17f5ae106357b12ed34ae9db71e4e82680b008184c6ed18a5fe645d848e450dac7b031246821fdafa925";
+  hasRunfiles = true;
+};
+"ebgaramond-maths" = {
+  stripPrefix = 0;
+  sha512.run = "5d65f676daee62f96875def0faf6d1fa217143046768985956372473b4cd3c6c00ca650cdedcdf677d6ae6a03c65743d30df6d32c36cc8366d8a1a9961bc11d3";
+  sha512.doc = "d2207e0f6535be6ed1a53fc15717a60fab0d473da4f307cfc70c7271fbd93e7f6cbd92d1c0f0738da6d1b607832cbed95e5c87edd53cc5423f35f287289b4573";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"ebong" = {
+  sha512.run = "c16699e17aec0c6b8148b8ea224a3b2a0dc4fe1982e0b8dc5105f3a07075d99a07e743b55cb3ee23451a80d84e9887ca10c810c639b36a30c8ff275a27d9dcbc";
+  sha512.doc = "82fd3ee7c02b22bd42c38349a50fc61e78050040877f28b4f9e88f89ead962732b7e20f1999133074488b26d9609a36afc563d8e6cc5958829af22d2e3e44008";
+  hasRunfiles = true;
+};
+"ebook" = {
+  stripPrefix = 0;
+  sha512.run = "3345ec303d77965800fb78a1a6b0645c206534bdf84e5b5287d23fb273a720025ec770527d662a5a535e98fb6cb9a6d37d50569963ca24225af8d626ea7d4dfd";
+  sha512.doc = "0aba8d5010ece8e6e3c155d05a87eea960d8ec1b4deb1cd7ba948b4106eb8e20d752d3032696bb98c1d23b1927317d3d53a79fdf0b62e9053245aa86ef6e79e5";
+  hasRunfiles = true;
+};
+"ebproof" = {
+  stripPrefix = 0;
+  sha512.run = "1b8ba3dc47ba03fdb14af5e98ffddab51ba4ea2c423b959ea6b88f00e7b3c837daad5f43d4963de1f6a4b2f55527a45645783b0edf62dc30118f51ed71379a9d";
+  sha512.doc = "33eb4e25b0083b9c3844d4786c1f483d37e7a00f716ceec92c4e5a5e57cf1c8f1a5eb474d7f3c9e98a688174a16caab170a1853a6757ebc5ce0be837811a32f6";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"ebsthesis" = {
+  stripPrefix = 0;
+  sha512.run = "37df2bd7749bf91c2e2a6e27e92a9222ed9b9d499b3a9bdb63f7751008bf7a4bea20d62bd59e8672b7fbc7bf0caa1ca77ef797c42224fc4167e5212f21cafbd3";
+  sha512.doc = "5c508fdf7304668a371966d1be0198d71cce4ec762aa1b5b480dc495f47dd13d88f678d8613ed266e1d8e1353811e3058c31aaa5ae9f181c34c6bcf40adf5ae9";
+  sha512.source = "0e35721d759fac3af82d3c627c5520ed60c36a83e50f10a717db990f2bcf5a3b22a0b28cce5f3926ec0a9859d5b08124efbe24ffe9a64f9ddd15f45f3246f596";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"ec" = {
+  stripPrefix = 0;
+  sha512.run = "a967804b42bcc11e766d5b74de28c54d167625d2b108a34bc5e49351533ddcfe3334e4a7a34966f8d159bbde6a80f84b4d216553ce03fbcfb7a4b6267574538f";
+  sha512.doc = "bcf6617cf66af91312aea98f6c4a034f3af4ada14687414e7c3572e319fa4bd957dd25ebf557078297950d8ba8fd02229c5ad53464077feda462263b52536f29";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"ecc" = {
+  stripPrefix = 0;
+  sha512.run = "0f91383595d8606d0a118f8111af0531e0c53fe383511b6424f7cbbf70ace9c4d94dd379813bfceafcea11f6be361bf7d8df2088fad98a42a5e5d31476581f11";
+  sha512.doc = "e3263aab5c8ac9985c579d4fba121085419d5c28e4813798402ad67213f96575dac0776d18918edaa18d42d458937a1e60ad666b2a01dea445675eea7e32b2c2";
+  hasRunfiles = true;
+};
+"ecclesiastic" = {
+  stripPrefix = 0;
+  sha512.run = "f2518f8f25bf4b7c7fd34ee5fc271d08c3262ca2d90e271e02db96ef4826bdee53565f004fddd89e886258716874b101e7fb63b46a6124ed13b67facded6ddcc";
+  sha512.doc = "35902f78af7c9acc42e23ae1d5c39ead5d92f0cf73f9c27b3f15d025555ed08502709638dec3788305fa776bb2924eb43e691c6e69424b23c21110de3160b60d";
+  sha512.source = "9661b16b8d3af5e205e99a7b8da8ce1913ac1ef495f3e02202ce7cbe1fe786692c64b4a82913190db42f922f33d939069cf423b55af53792808900ebbe728b8a";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"ecgdraw" = {
+  stripPrefix = 0;
+  sha512.run = "419650d8ad24b9e08523953596a79c318740b2dcb7fd18a7c7a17019fe17cc66439c0acf56a7a7f8176349df0d80b44640511269d498cfa19aba6fb1f353923f";
+  sha512.doc = "24968ada8568861eb973967b33827642e1201d002f73d40de5183a38d5f447a2fb93feb1db32807829c071d1a1147039e34ed4c287886260453b9c9737693986";
+  sha512.source = "27ea4e0f4d184883eb0515cc95b7b797ea215626fb5c4003fc02bb490b6f3edf1d9422a7f764df28372d9ded429dbe47645bdaa8fa57c4517ef438096ac68801";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"ecltree" = {
+  stripPrefix = 0;
+  sha512.run = "7461fe472dbd2ecb4e692cdbd58d5b801960d160bd7e18fa7d5ebe3e42defd11faba318d5d9134fd17275a4271f4c7761fa2d65fc1f202b4eb7b0fe3968a9fbc";
+  sha512.doc = "3dc607ff60f9e738476b1f5c801801e3dc10713d7f5dc4b790b92f454fec1e68e9abe8efa7e4b0464ed6ad854d7971e241987fd63d406ba9deec9c99f8bf229a";
+  hasRunfiles = true;
+  version = "1.1a";
+};
+"eco" = {
+  stripPrefix = 0;
+  sha512.run = "7bed893bb3f379d61dc874280ccc26db037511ea69faf37076f3cfbf01cf3d747706d40086eb99c502f215f026b2e357e44e8940a859559c3a5d9876bfd70c00";
+  sha512.doc = "3c2042779dd30c8ff0e8f09580b3173f3dd43659ff2ca94c52500f989a338a29799c22eb08c493dfa82496117d7fd7548f903f71fe488727acf4e517dc6c0377";
+  sha512.source = "355f1a47eddba5eedf9933d0a137045d9cb06e3918814754079e7dca0852d2fb10969f0c48a030ef9dad923e7131b6e77af8e1e8b2954b3d70409fad400ebe05";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"ecobiblatex" = {
+  stripPrefix = 0;
+  sha512.run = "bfa49fbd340223db68ae6d0906b617c06605a41aa141ce7863d5ab85b4da44eaba554b93bf163f7e4b7cd2c5131e22ba30161082663588ce85240fe2147433a5";
+  sha512.doc = "e12bf5be5028e848baf10fed969a5ea94e2246153b481fc1b8ab55a6fbb5c356391ec4ccdb37ae7c71d76885000d9d74e46271402ed83ed08d1d67a94cf372d9";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"econ-bst" = {
+  stripPrefix = 0;
+  sha512.run = "8d54d44602d10d09ffa23b289763e439e0613a753039acfce5c6b2ddb3801886bc4c621a3749730488b2ae22cf41f5d0b887dbaf2fb0050afcddee2b32d02eec";
+  sha512.doc = "fbbb25b129e477d89263e5bdfd9e998378496ed0be0b77ae580cdd3a6bd539827321fc966d08ee7f71babd3911ec4e3aa1eba9f0e0b7b41dbbbd87c61187a891";
+  hasRunfiles = true;
+  version = "2.5";
+};
+"econometrics" = {
+  stripPrefix = 0;
+  sha512.run = "40c205421ca11111d2aeae9f84b4e418e6b4f260858805c03029753af03def61221b81eabc18dea5fd4cf5722e3dca1ff9f575264257db3a8431b061177530dd";
+  sha512.doc = "b5992f38536f0e4ec1c570d78523530b53e428d922517d0ad380ec76dcd2ee21243b9979e876a7f809b1581f4c4b6907bcd3f581dff97c13a0fea2a0fca1d790";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"economic" = {
+  stripPrefix = 0;
+  sha512.run = "d8bad4a76eefc8729ea06e93a63adadfeed57de5694775bc44f1dfe03217101609ada6d12b7a2382b9d80d068f0c51fb2ef45c2cf289fe294efe23fcf0bd028a";
+  sha512.doc = "39c319f14ee3d6fb10fa3c4f5d3a873322d332bc181a33a70020a9fa787383b72809b3b9aea5fcf4a3cff9930543e0d0269f74146c12f2b0d77a4f77c159eeb7";
+  hasRunfiles = true;
+};
+"ecothesis" = {
+  stripPrefix = 0;
+  sha512.run = "bed57bb0ea79c74517b26e51d88966f9a05943c4df6464200ffe36f486e9cabccaef2fced0a231b40b40410ef32c44a3ebaa984e6def30bde5d426dc68e42309";
+  sha512.doc = "7e1e3716de1eb964142a85ab31e28fc807ca1433f964e44cc8a7103b9ed023457bcdb01af2797a5e22fcf75a2e851d9c534f17937fdc44e4ebb6b5a670c6c115";
+  version = "1.2";
+};
+"ecv" = {
+  stripPrefix = 0;
+  sha512.run = "0ff0a352516aa90a19eb1a0a9bdc651601edc63f03c5cce9face4bd45b359734d954e2b7859a0244015e3933eaa2d3803d5579ab9260dde51a0ec89db8034910";
+  sha512.doc = "1cb8871b552a3d91fb59c644ea98373742ba9bfea64a92911f67f2795afaf01babe82a691fb3344f236e42b92860b754d7e92132b266713948cd1a6af13c58d7";
+  sha512.source = "e17e9d577cb3a562a381c8ee8a09e7b3bbdd236812fd9e647b72fa18d6f7b11c9a44f70376d5dfdf2a3b81d1480b055d23e8889661b557e88c03f02eed033946";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"ed" = {
+  stripPrefix = 0;
+  sha512.run = "a6999fbe2a9a44f961ef60d3da65ea306809d1ee5c39d2fc605982083d69c3c723a0e18f4042cbd441103421cb569008925279871ea8ceeb0af4c4a21b746943";
+  sha512.doc = "cd7bac245c14e969b5162b86cfc76e0673da357fb1492ba311930ea7e20a6db61e3a13be2069f4f589ab57cba9fdfb0fcc8779ec8607a624437d1b2bd746825b";
+  sha512.source = "7736dd9bef8c265437675d87a6b70bf0bb67ad736b668210b7187ddfde899b145050e18a9d54629b966cabc8b46028dc982b107c0f869e581669b663d3267ba7";
+  hasRunfiles = true;
+  version = "1.8";
+};
+"edfnotes" = {
+  stripPrefix = 0;
+  sha512.run = "3ffca21a97b1e54045129a8894db25d677a54c791e3453f53285741bceff0eb4c7cc00e81706ef77ac475a0f54a7868f2e9b444df0c4e4ba6b161fdfa954dc07";
+  sha512.doc = "144e2e22c4ceb6ea46235ed51b9a1ad4b20aa524af7b6eff617194aaec4f1606d857a8575e95816b4ef089e5c7d3fc1e2fc8e622486bafe9e5a9ace22bb44105";
+  sha512.source = "9fb306c9b77f0988fcc2dde74336687e8678364e2d53167bff8053a5888de1cf51240778281a7c864a7b8a66738d2c894e7e4b7a88871f0f7ce0e40c61b706be";
+  hasRunfiles = true;
+  version = "0.6b";
+};
+"edmac" = {
+  stripPrefix = 0;
+  sha512.run = "a9f12f0745305ce261b142f96ed496341997098461df749715723fb09d978ebb037976c7fd7176eae2475d24c71df201a0123b1651749b2b96c9ed9429746f6e";
+  sha512.doc = "a54f4b1171f8f6edd6e655f49adec69f21a8293af03a02228056ca700feb7b656cbf715047a20f45127695fa851af45fb5e4852ccbf7d28374a02d14f6e55acc";
+  sha512.source = "b32626fb4acd41e9d853131d1c32e43d2cf10ee021ada41b06b8cee5c88b1f8ec8511057f83865c9237d8a96a9648edf8696d9fb6166e4c9f072e8dfc10808a2";
+  hasRunfiles = true;
+  version = "3.17";
+};
+"edmargin" = {
+  stripPrefix = 0;
+  sha512.run = "242e7eff25ffb539353b73c18d31a268efaebe4fb51d9ba1cf376346e559ea2fb380743b29056aeb8e4db2065a660bf59e7c8dcf5469f91c39135be2b8c9527c";
+  sha512.doc = "da77df03b3eb89daa0a544d61c88956a7105073110dd9e1f4d1a753805bdf722a63f5a9674897f4f09a92f689d6bbafc190c870cf5784e02df7efed781dbbcee";
+  sha512.source = "6f3b848e12b92f773ed23f51bcfcd52fbb8209906b937486c87ee34cbe29d40739cb6c20799ce64bfbe7b0e3dfb96d604aaccd005ecc1dbb7126bf5302d3c814";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"ednotes" = {
+  stripPrefix = 0;
+  deps."ncctools" = tl."ncctools";
+  sha512.run = "be181a2665a8dbd44d98f75a0bc718b460d85c4fb66e412e18f12b542d65a870660597ece71588e9410214a61d6e2d9883089ab1439eeefd63a5cea95fca5d6b";
+  sha512.doc = "242ee2a951a61be7dc0133b0a156611bc574c4c54b879701960f312c58613221acad1c83132658d622962ac24b13b4cb5c91e46c77f774dc3865db57e126e0b7";
+  hasRunfiles = true;
+  version = "1.3a";
+};
+"eemeir" = {
+  stripPrefix = 0;
+  sha512.run = "81679a08a320275221058cf0a73d71489621bfa4322a4b90759f67253df06e5c98c1325846966924c145092d9f63d9ba51544d0640c7f0827c7ebc42fddf9f3a";
+  sha512.doc = "4f7a67d76504c4fa8de1f7f4e5db19c1ed1509a3ee68d93811c84e3ca523b8ff040d61e14881ccf75d20edc7c6b52550b3b3fdfa58a9a73bf21ec7f8b0b719aa";
+  sha512.source = "a75e1bc385293e5e418af04a1c03ab606c5c77fa95bc6830a029e53e4298edd853c0bdb92ec0b97994fb8d2b7af293c3ef60f3d14974b87e079f15f904436d4b";
+  hasRunfiles = true;
+  version = "1.1b";
+};
+"eepic" = {
+  stripPrefix = 0;
+  sha512.run = "37930ecdebd43ac8ac1dcb42da4d4eb4b5ff371605b9bfe4675ea861f4edff7cb19703669c8356c3d69e7ccc09789bc536714114397c3bca74fcb4a22b6f4d9b";
+  sha512.doc = "02efd8775f6d0db35fa4682c6bc715fe619037a6531de60a2955fbd7fca01d97a8e6dee0109a8cd7cc8237bd694c64797392991e5c203baab49dd9857b0ccb4c";
+  hasRunfiles = true;
+  version = "1.1e";
+};
+"efbox" = {
+  stripPrefix = 0;
+  sha512.run = "5091324e7f5c05385296d570027a8546db4220a24da330ab85ef5d1185772f51b4f200f63eaad0cfa3eaeafd3d055509f4ffbdf798c1139a60c5e572ea46926e";
+  sha512.doc = "394387e09ecb0d497014a62fc1caedcb3e00148f6e0a9a16ae1b53efbb4d5cf749e154e4c905d197280e4ecd9bc88ea07ab7e0c004b8c30eadbe7f9f414c1345";
+  sha512.source = "4739cf6bbe23b69605079bdd8c39eddd6b44e192c5c335001c9612598f2a005e98b853bc02ff67996b63a971b200996f35de2331f230d9c43ed73ad9a8a98a7a";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"egameps" = {
+  stripPrefix = 0;
+  sha512.run = "b8d1c056783c4a71484a00f0d80de4eb9de3beaa54cc4dc71e5a7c171871b5dacba753ad03ab196661b1bd73cf9d2eaf202a813b73bea405f807319a143644cb";
+  sha512.doc = "0216a85d539ab19aef8c2c4f313f5095aa39e4955ae9610c14d0243081b7af98f50a74a2f7720b376493e660a5486f83e69b41f8cb8017ff66a8e706eb9ca71b";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"egplot" = {
+  stripPrefix = 0;
+  sha512.run = "c96cc3185c09f66fc6a4c19958b88d178cf0b6ea9d889938df5a07d4fb7b19962a9c17ebe0a906ab19a8725808aa09ee41b39a0379fefbf8816a5e78abf9201f";
+  sha512.doc = "e6e55708004cdf3dfd753071e2fc242428a6636944f3ea65510d2e9f8e2921b869ff4a22d100b43d70ba0708a5b19f002bbe21f57c858ec72b11ffe82e161e50";
+  sha512.source = "45c810de39612dcd60d71b4acc8aa9a7c2c22c1eab8e1ca1628ced9873c86b0ff31035ec5f72d89decf91ba552c4e3473249138f557bd650b9863c5385502436";
+  hasRunfiles = true;
+  version = "1.02a";
+};
+"ehhline" = {
+  stripPrefix = 0;
+  sha512.run = "d0549e354c34d1ad76502ccfd565292074a8e1aa72f021c9efd8dcb39ce9465ccfb0add899226775e82e9e90ad27a7980d5f79fc8a5a71a449a8a17845384918";
+  sha512.doc = "a3c436900a964fecb613469c5beca557a0f923d1c651591d9b884f88f127c435081a5fbd2f4129041f5438536901feaa4697b59a011064a4b4822ef6ecea5068";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"eiad" = {
+  stripPrefix = 0;
+  sha512.run = "3123d601a5f5c34c45bff20eb052a0934a2bba9d693e460fdb84908ed327eff8b3a022a5c617c8818bd48b1fe72b9b0c48443e0cb290f15e94334152f1f5e5cc";
+  sha512.doc = "546bbad79f9f13e420b05b318010f078ea8844a02cedf11faa506d41073e2e0668356291a4e12758e5a37586e4aa9c79c17c8135f244756c39b61076038fb8e6";
+  hasRunfiles = true;
+};
+"eiad-ltx" = {
+  stripPrefix = 0;
+  sha512.run = "e052333d39e72562e8e84d0e7f6af7066c2068a782422f612a26bd2903d8143874cd4dcc556d7406f3601a6b3a28506a3c0edc92e4029d124f02fe91edf0163c";
+  sha512.doc = "907a20283eb78965dc4d8fdb46c542937c70c7a3f2849984034f9f37872d4d3042064fad0ee232132aadcb7daa4d4ec4b9745f8a6d0406dfa7b929ea68be0d96";
+  sha512.source = "dcdb63542954048aa74a1a412cef02c16706bb7f66870e72ab4c772e2e41048c255bd02877fc60ffdef15b09e229ba721054cfbcbea5ce16fdaa181ca0bc8283";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"eijkhout" = {
+  stripPrefix = 0;
+  sha512.run = "448f3b51c984a1ec81428c1840ba01d072cef4d1110b85f8d4f4d786d02e8d08e702e0b33e757035aecef1f43b604746c7b6f492905fbb201fc1a34ca6fb859e";
+  hasRunfiles = true;
+};
+"einfuehrung" = {
+  stripPrefix = 0;
+  sha512.run = "e346283ecfc6ca35684267e8b11f2800c6715378d84c4896e4d29557fbd97e57665a45503e7cab7cb7def679914b7d737a222e05eaccf543d8d2f7370ed49792";
+  sha512.doc = "1c012e15159a2c4940cb7bbcb17bf3675c2b2028e939acd3b1c98ff2cc377b55a602f404900cd4eae3f03de74a98d61f6db0de9ad90e8598d9f49b398b5a6a83";
+};
+"einfuehrung2" = {
+  stripPrefix = 0;
+  sha512.run = "affafa673dbb2bb3bd935a977a809bab30d01c92f8c9162eff337b635b57993e884c9d96398d39acc16e470a362276579120f4ab27e8cf8111928b12e75cc72b";
+  sha512.doc = "4a4c9549a7957688071226e4383dc9ad3c0580c9e321ab5a71c75806477a2156ce74aefa6dff95a329c65ae8ae6eeec9fab6f6e1f689a827b7050e457b248093";
+};
+"ejpecp" = {
+  stripPrefix = 0;
+  sha512.run = "eddfab8de433480327dac32762640d610fce78903630bf0b8b26548024764d5ecf1b6356d6a8d725eda75f075a0b8627be6b90117a11a6dc39f0fb0e60eeb155";
+  sha512.doc = "4131b375690a452fddfd5124611bd37017913cac6ade1bbf35ba01d2656f098141e2bfa83da2af7a25dd814312394c127fa1dbb0fd61a3e0f511e8d8c9e6d608";
+  sha512.source = "0d7ca22abaf589a795717bc09b06b9d4b91b030880510a7696dd93f8d4dfea1320a417da18659dc4e1019e5f66e178c943cccf65842da611684a1ab543ce2097";
+  hasRunfiles = true;
+  version = "1.7";
+};
+"ekaia" = {
+  stripPrefix = 0;
+  sha512.run = "97479cb146f37e0fd80fbcf67db44a474d96da9897fb058073b75bbd9a109f16dfa36bdd97c5fed5397255cf0320028ca687955fb40e069bdfa262af50773c99";
+  sha512.doc = "f95512969ca475b87f09fa3b61e2be1ebf949161b7209721579f7ec1399e6873186535ec30dbee092fd69dc427a199daa4f94ee47cc08a0fc37fbac6213429de";
+  sha512.source = "f39b1a8a90bfe899fe914b6a4e99e08334ecf01ca54bbd6275ab9edfefc12f7f165eeca09b6195532ff92d72e4aeba63e94be7afe00d8215a86dca3695d523c7";
+  hasRunfiles = true;
+  version = "1.06";
+};
+"elbioimp" = {
+  stripPrefix = 0;
+  sha512.run = "4db2b191fdb73854bfe605efed30c4835a77180fc865eaf201f8405fccaf880e02ac9ef7802c2d215df8ad77d01fff611114c391a6c43190f95dc2b40cabd596";
+  sha512.doc = "5097310e0e400c269a30ef8ea26f400ac7768f4a790ca5b79222c0480553434343de7b0976b18bb6d67bc89dc2b2ad2251c24e94e4747450275fd52a8c9d3285";
+  sha512.source = "00fb96c43b0639f88b582bb26b6306d1ff112e9277c34f6a623d7643ac7a003b31a14b5a82b3b03680298e5c054c137f44a186804a90127ebba14442d5c71d6b";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"electrum" = {
+  stripPrefix = 0;
+  sha512.run = "c12af3a1e6a76d4a94f0d02fa5802179fd1f47e31be29e2151e7be3f569f027137c9d0268c86696d822b8d7a4c88ae2ef264341345c6a7421a8ec1026c104213";
+  sha512.doc = "b840b153a134fd9cd923aa9f70576b7e586bca87d7f1b9cfbf7a1f25ac4972905989876545a914ce845096dd32579901ece93851012d057114c0c61b1eceffa4";
+  sha512.source = "caec0c43c2870a6640863bc060e02c764b235336123777181ae1fab42e32053af0e2c09c226dccbf8bc31b450c720b69ae67f01b66b36d0ba308282637afb414";
+  hasRunfiles = true;
+  version = "1.005-b";
+};
+"eledform" = {
+  stripPrefix = 0;
+  sha512.run = "4103aa370bc8314433b5cc9242390340467591bc38e2f5b820f9d35a1951bb9fe9e384b1d3c64a0434b3c3dc87c42463a0af5d9ff872180bc2b7a08d4b40c080";
+  sha512.doc = "c59cfa6957a21c5e74d9a15b7621536170137447111f9a88295e79aa7a29dcbb3d1f1f1367afd7243d2506b864a53df41b0e10419592a5e4e12af8e1e90216d4";
+  sha512.source = "3bf4fe6df4cb16c8ab7a3fc366754321c5a1056cbdd51a787da33d212c39ffa0bc73d394944b7b2cfe52b4f41abe0e3df7156571d3acc1d1c3ccd4d467798430";
+  hasRunfiles = true;
+  version = "1.1a";
+};
+"eledmac" = {
+  stripPrefix = 0;
+  sha512.run = "644df002adf2f39acd9a6704a5c2e18e02f30d17c8e04173fb0f68e9daf5469bb6290c7e98ca181ebd45b40d54dbdf4a14fbbbe7dbe8f945b226ee086efc3972";
+  sha512.doc = "14c8b024b6cc817a025b6a4870d3edcf956ac9e358107c80d29fcab41f343efba5b5832dc22cd11fe2e92bc74b58fc5d67982ab26a60230a5b92af4223543e04";
+  sha512.source = "8d3436d3e3cf377148a52ea77ac93491abc66bfb1271538aa85f6cebc559ca225221b4b7dfaaf33426505b792ca57697d6edf5903b5d0e306434a4c32e06e8bb";
+  hasRunfiles = true;
+  version = "1.24.12";
+};
+"elegantbook" = {
+  stripPrefix = 0;
+  sha512.run = "8903163ce14195549cdca1ada3473c379630e273d1889f99b86eaad85f07913cc3ce54ed6c14650376729ca0d470d639b8b10ed915fd11f5639d5c62845c7118";
+  sha512.doc = "bcdda56507c66123acfc3489dd055d2fe3064875969d8b31c535f8f9cf6e06555f701134c1075683a392ba0ec2933c1a916b0a05eb70d761ff45b29a52df8648";
+  hasRunfiles = true;
+  version = "3.09";
+};
+"elegantnote" = {
+  stripPrefix = 0;
+  sha512.run = "fa01c305f478e100ab30b187ee053ec82c0d067ea2a463584a60d68b8358f9e8f65027b87d2e59f9c6c6df2dedb3885f151bcd9db8df5bd9e451c035d21bfb51";
+  sha512.doc = "a1c24f6637ece128a313f24e8ef1ba2b587490c876706f0d2fff2734ff0a5e799b6ae981d073bd2577a60040e121e59d1b3aac81e7ec0e844a0a270a52862020";
+  hasRunfiles = true;
+  version = "2.10";
+};
+"elegantpaper" = {
+  stripPrefix = 0;
+  sha512.run = "b7fe545c2c9d2e55e0cc9983bc2158d41cf550b228bf3357b8a4a051a32d6692aa7ff2b1fcba33e17cac2fb2852e2bf14467675aabd6b8ff6f1d40f89ff2ebc2";
+  sha512.doc = "bb99b00f8d826290757907db4179d74222cf4cd992c2bc7c3342a4ad97c2ca83d018ded548571b9acaf9b46d444909be60603710e56638781edf3c036817d470";
+  hasRunfiles = true;
+  version = "0.08";
+};
+"elements" = {
+  stripPrefix = 0;
+  sha512.run = "777546b1aa3ab2c4a951d618f73b0a37f15de10afa72f710786ae5c9b29daed45ac61db978e07a010f72531203d6fb066853657c6cd728a6dd8850736756a063";
+  sha512.doc = "d72b74d189689b77134347ab0e76e7219fa2b4cafbf33cf7f9504a9293635487488b652a0cb293be2f28291481b2eb990baf92739146ac7a554d710b01b6df57";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"ellipse" = {
+  stripPrefix = 0;
+  sha512.run = "edcbca8843239eae7bd927d9bc6b5095d1b9a4d8db213e22c77ab4a7c5bf7a09781aa225af26f1e4127f263d5322c8138cf38ad1a7b19688468ba2ba56f840f9";
+  sha512.doc = "722d50daf9863145c81ad2b97d6acf6b6229d65f868985878651b506b00f52c4a556b888ed848ac1194c4a68e793bc498b2b6b09132c8070b61b103e6ca9137a";
+  sha512.source = "29736aeb1a6d64d0e94124e6c67246650f517fefc9761f58e70e1438c8380a25ce48d2deb180683da02f77ebb508302b3e446b534b7e56ba257e61ac6f5fd62f";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"ellipsis" = {
+  stripPrefix = 0;
+  sha512.run = "1a60250e0db34f3dca834a1cf276b2f0a5975709bec3ae3c7486f92fb3a5c49ac9b07bb3cfa18724f27504c8e12bc7ca933edc453dd0ecb65d63dc5f7fbf75e9";
+  sha512.doc = "35441d8562d2be79787f2d3326352dee2fa7a9a3bde500f4d61dc5d8d3eb4f4f782548d464fff74e0156664616342e4afa3a03bc91a2b6f8a028382c12c19e9c";
+  sha512.source = "68e34b002ba2e9763d6f5e84368fc1135d864a46288d16e6d7ade872e5205a09527b3afad4c0b3bc78509a4f8d91460cd22a40b8e031e37e9ecdece8b184d3e4";
+  hasRunfiles = true;
+};
+"elmath" = {
+  stripPrefix = 0;
+  sha512.run = "66e11b5d5166fc6399337183dea142ecd045050176384e71993c76aeacf57c693495b5153887a95051a902167a8444c24ba6fe2ab2fcfc699abfd41ffaa96b18";
+  sha512.doc = "3454096f8ddd220820709a83f4b5b741e80213bada631f5fd78292ff77f3a1963a487b07bb6c227451568c594c5bcaec9c1fe9724345a35478a68191305d5a97";
+  sha512.source = "0ff2b6fd17db3dbae757d4e015007ac99628f0d1940e584643f9df2247279cbfe3ebb81e057884a38ab167aa18b60a8db5eb7b88e777653ec68675205ca0fcc6";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"elocalloc" = {
+  stripPrefix = 0;
+  sha512.run = "7bd72984c7bc1530e2659364b5e93b643db1accc8a034f6fe8333e26ecc12b8dca9cf40ada0b5986576e266e0eb7c801f9a3e4c2cb7dbe4d8c373ba0f0486ba9";
+  sha512.doc = "6b2d6f65683912405cc97b81a7cef07b4eb21be4304a12b5e0e11087d809d32023ea8067a81c01d45851943af2efc4eb4018f3a0e7a39e08bdc821f87264d9cc";
+  sha512.source = "c1dfe4848af6e1cdb57496b8f42f5f1744494857648ca1db92a770f9983d0ec7a4c3398a3a7b7d473204da475ffd0e33ea10606201edcd86f9cda3bf5bdf24f4";
+  hasRunfiles = true;
+  version = "0.03";
+};
+"elpres" = {
+  stripPrefix = 0;
+  sha512.run = "e3b0dfc5c2da908b95a882acf37ccf56abbad0e37c53c4e8ece14b98401be3a84ebc4546b739ed8a3f5c30977522b5650c56f12028fbfff467b4cf0a53877475";
+  sha512.doc = "bd4b73534eecdc0e02184d0736684e09c688bef1658ddad28b0c1a952a63ebc87546c426e7bf3a9733bd62192d87d500ba3f99463830d3e14f30c0726d80cb6d";
+  hasRunfiles = true;
+  version = "0.4a";
+};
+"els-cas-templates" = {
+  stripPrefix = 0;
+  sha512.run = "23197c9c87b21b92dde909aac95128b0e92d1510a98479d739ee38cf05f5873538bc5d558181bbe62ddf24f5ec1e62a06bd42fd4b7abf73d99bd27bb70a566ea";
+  sha512.doc = "d32781a8dc8b9182f2e1ecaecc3a952bb4b05d596dacc6346a45730f0d43a1b786b175dc45d4acf15279f6b0795f4d7227ddcd350f32b0464f3debb1ddddd7ba";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"elsarticle" = {
+  stripPrefix = 0;
+  sha512.run = "17770bd130aa601a8208e996c1bcf192459d6c6ffd4ca170a303c3a548c7481e7e3a136c64865999ab7ab38ab56b09fc2021555fab60e344a7fa23d8cd62943f";
+  sha512.doc = "28c78ca516aee82dfe3be32683ae404cdb7be9d2d248fb747079e2d9cca9da44aec40145d095d2e3f0bb2f3d600712fb75a987c8d1aa1ded3f738e58350c44f6";
+  sha512.source = "55755e1a228bb834820f74580935b7e8a5bb162a675ffeb617bb1c0f7a1b5d99422c53ed7ae6b0302fc51112d5dc3cf63bfa9268c49aeb66cc194529c9d36b85";
+  hasRunfiles = true;
+  version = "3.2";
+};
+"elteikthesis" = {
+  stripPrefix = 0;
+  sha512.run = "e4e4eb999e46b47e2cfdac34e1f36d49354104cd3bd0e13a78ccd63acc8a36997e3f075f40785e1eef059b79c0ff154b156bbc2e7ad039d79db778819de6ecce";
+  sha512.doc = "3d409ba033132d5c4ccb14e4e987cabda0f62e01d79f3c45b8fcf3ebc571fc9a5f94bdb0f2d66daa8d746de573069d9c3e7af0c998925a1176580bac3eaaafb1";
+  sha512.source = "a37110177743fedfae82f6b84c081661b29d29dacd4e54f810f2c69ee6e288836ccd6c5428a53350d422eb2f1d1c503e50ea1ee0861d33fc80e93f63eba89586";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"eltex" = {
+  stripPrefix = 0;
+  sha512.run = "6de1507df2fe408081aad0f75b69d7c21807f238d37e3c6d9cd243b741ae1761aced90e948a0c570f28db5a39616954412fc77a87482c890183f039923915c05";
+  sha512.doc = "1bdd0f64c524def46dd0a20482b9ad6925b0d06ea272b05d6163a23f61ad1727b099a893f5af7a7de4140bd264b1d3503794a4c9c11cf8137c5c6070d08fe0e3";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"elvish" = {
+  stripPrefix = 0;
+  sha512.run = "ca1496b488a85a32364b264706c9b4e4edde5c92681493b150942a3a8a2a32158b314a163ff4be8afbea489a75feb5dbb1c96e8e70f730530cce6472f9e46912";
+  sha512.doc = "e296ece5bb11d273b33e801ecddb1b9bb93e5f8cfc4a7d62b1555ddca89661557149935b7c5a71880efb888364989715b4e39585b2de1bcd8ecc24203afef199";
+  hasRunfiles = true;
+};
+"elzcards" = {
+  stripPrefix = 0;
+  sha512.run = "436449b4e8d6368fee200dd810b05db570d27846a56a5159422e7af74348f08e6f2f4c45cdc1aaf21d31cf0ac6e8552cc7f0968c2178ad4e65163294d771e027";
+  sha512.doc = "c24119acc3aebfc676641b17a0db75edc30dab7eb3aa766e35291463ee6049c9570ebe05d456e0bc0fff3765bee514332cde7b80e7d1479ed440c621143b7457";
+  sha512.source = "59f09337eeafa9b2ec6ff7bbfcd1d04535fe7d3defb942f858ef57a8007422358a68a72894ed120c3792da7c0f397d1a50dc093cc1dd2058d598649ab905d354";
+  hasRunfiles = true;
+  version = "1.60";
+};
+"emarks" = {
+  stripPrefix = 0;
+  sha512.run = "8e5f2d559958083abbde5efe9e70b3cb3dc71cdddd3066ac305c310fd5a8b2652bc6b5ce66531963c5a5f9426ccfed7eee0700938ed6a515865ac8e1718de5aa";
+  sha512.doc = "4deafa2295612c7428b82a4c8c2c19811f91c2d456b430b6ab59014b3cdb42a86a84e67319745dea469ae40f89b36d104d30db28228c825ba0d86436a37cc7df";
+  sha512.source = "d7ded6022917a50689905c953808e9f4a43d03811bda490721480f823c4ffd36d15948e5693d73cb061a97f775e6590cd376ec20e0093af3af5b792d7d67e2c5";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"embedall" = {
+  stripPrefix = 0;
+  sha512.run = "c531feeb7557cfca45127d9c37c93bf5835e35efa7c8aab65d58594c30d6864deaa22b64ba90cebcb1e9dcb139b00ad64ff96238835b8e059169278fb602ff2a";
+  sha512.doc = "be228eb577bb2a59b93c7684bc1fd47e9a4a505f6c66eabf434ad29523f978c877608fe76cd6ee24c8942889710270b8f304170f445e2a1408303d7c5a8a52b7";
+  sha512.source = "f1d3527809502aafa0a0b9aafd02d25fdbb97ab795cf4306a4ac84dccb873111e580390eb0499dfe13ef3f0bd7ea1a61e90220688dc814de7ff21ab4ccdbb1c2";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"embrac" = {
+  stripPrefix = 0;
+  sha512.run = "fee6203fc9017cc9471657ec8283342a3ee7dffd84d6e1debe3ee908986da80732dfdd916d7290bee51638dc624fe4d1920b7b561d19de5649938b6cc7324286";
+  sha512.doc = "f60e2dec5ef1d1a1cd370f98a94fa7ac963bccc97a47bc29966e26748b9616f4d1b8bea9d180bd7a1185d82a5c0ddc9e5cf0da3f019c2bc8b32ad07dabcd8b67";
+  hasRunfiles = true;
+  version = "0.8";
+};
+"emf" = {
+  stripPrefix = 0;
+  sha512.run = "bc1b601aa523b30a54493ac92e15bcdb918775e9f57514b62357b85b5919fb05cc945b3120cea474fab714585fe2a81603f43eae51bb266e8989af6105ebc65c";
+  sha512.doc = "f2e37967476ed678dce7c01f195ec03f77327d59beb2b15cc6a64ef92cc377700a2b7b528ae6c42497cde0ac127cd10c51e3ecf5fda0cf7954d598a0dc92b5df";
+  hasRunfiles = true;
+  version = "1";
+};
+"emisa" = {
+  stripPrefix = 0;
+  sha512.run = "9f62531d3cc26b428a628d2cab0e9d3fa95b1f67e91f5ffecaa432432b02acc6076acd32ac2650eabb54d9e14b6081d70fcc09299b45a0b5bd27905f1dcc8506";
+  sha512.doc = "092818afd707380679c4d3d44ad50954c48562ecb5b988d3bb94701991bc30cfa356f975a8fe8a381fe99171efea2b790115cd0a4f12b17430cecf2efc3d7d78";
+  sha512.source = "cf43591889d823125ce7d49dece358563c5dc4ca5df89bddc8cb6b73550e34e5e02b5aa5c67c96c747aeafc6070fc91f899d2142ad23424b11637a7a52feb55c";
+  hasRunfiles = true;
+  version = "2.2.0";
+};
+"emp" = {
+  stripPrefix = 0;
+  sha512.run = "5028360a2b412232b06b0bc53352c7a0a379943c14781b49b45cb75aef044df5bda24449dbf13601d1a574e5349bd0f2d2f7b7969f10bf72b3aeebe9e81b6ecb";
+  sha512.doc = "480edb224fcb42457c6252d4b6fd8cf42796e9b2ac72aa8d4bb22b3840cb10a55a509a47b8c504efbdba3e28192acee367e99638dfdbf9cab4fc5628496cd5db";
+  sha512.source = "e80aeb8566f31c3582423abc2794cd468b2a7b3505d4d01cbcf261201e4e8a95ca6ed87c6deffa03c9f868762fbe8b2078bf8327172ee9a172605fa0e6e72c40";
+  hasRunfiles = true;
+};
+"emptypage" = {
+  stripPrefix = 0;
+  sha512.run = "6379cbd0983ca7b58d2c94ce02a76e054faab1afb2942227469dcf2c4d572d9946921b6d24e9c7d2b5a82cc45e7e380a8ffae671f165ad0e2a3a611b95841352";
+  sha512.doc = "11681a155df95f913c3d25cceb32b54ace35bfa5aa7541916c15473b951b02a7417380dfa5c30f5dc3de1259d6cad99859c31bad4c2f2056ffb4608c614a2e14";
+  sha512.source = "1bdfdd32ed844651a109b54c65e7297222cb065a122269bd5c10cf77c6ae0e38b717fe182dad6bd0432b5eafb38b3d8631218599a46bb61a598eef4093a8ce1c";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"emulateapj" = {
+  stripPrefix = 0;
+  sha512.run = "12b73ef4234af72358c1f120d860b7ba823bb4d65f91cba348a4a136b57f8edccf3849eb36e95c50cc40445a5fe3908652c221b938ee34a17aed6b4cb265744e";
+  sha512.doc = "2d226b60313de3387d87c373a23e490a66c2fe1a94e97ef2364e65fafb037a148db7f5162ab9d3f1d788a037fdebe02ddedaa772eb715dc1ec8fea941b0e6708";
+  hasRunfiles = true;
+};
+"enctex" = {
+  stripPrefix = 0;
+  sha512.run = "e6dc0988bd10dcefd63db2a57999637b63187d8a234c46dcb148e9dfe8388800e61237d7b58d271b735d2658d40c1f81016b5018e239d556fb9615d35b4129a0";
+  sha512.doc = "2bf47c879c6ed0fc539763c899d8db261135f1a0ef0052904d03a72663cff38d40d2fe7b0daacaf2d54771c7b9eb5e98b73ef71d2a733899d458803f8caee723";
+  hasRunfiles = true;
+};
+"encxvlna" = {
+  stripPrefix = 0;
+  sha512.run = "f6aa0a954affda9152f5b15958ea453e3c2979205f25a5d9f15e3fb189b2352a87256a345d382a3c7dc401eeb55360afa9cf942cc4779406b97cc8f8c47eba81";
+  sha512.doc = "01f44c8205daf33006eaa73061d27c9e17ce5b456e73f427f797023cf94d7380e44180c347021cc5c17870550fc7e626bab8de6219d6b56000526aa54ba34efe";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"endfloat" = {
+  stripPrefix = 0;
+  sha512.run = "2bc564cb0ad7b9bd53af9304f378b6d0cdd9aa32564f2bbb39abcf0d942c4e18015b7181d4be5e873bcdf4e8f971d65678fdbcfb544c005ad012b378eb6e1351";
+  sha512.doc = "39a1cfa84a2cbe5ff1b59fd9c5fa6a19cb1d3aafac6d1fbb111f117892e34142f6a21ce7808238608ac0602d905cfff6235a78762a0d510dbc436c881baf59f9";
+  sha512.source = "551afda371c0d4a6e71299cac919857eaaed3ee8891f96083cd76fb33ededfaa3daa814593efbc9e7e8dbd4e7d257945972df547d7c24665e760960eccea07c9";
+  hasRunfiles = true;
+  version = "2.7";
+};
+"endheads" = {
+  stripPrefix = 0;
+  sha512.run = "55f01774d62616b81fc846af275067445c8979d50cbb67c8f6cdc362a26999c83c9ce5428af28170ab9e4c6262fc4ed8bd0431c5aee8aafa89e38bf4cdc30989";
+  sha512.doc = "bbed9408161f827ebe39ae2161e89f1f15d8327f29f7eb18bf58f3cac7c58492529caf05ebe3111891520c406c547b2f1aa57d2927c5f857ea6e02ecfa9cf84b";
+  sha512.source = "c58d68a17da865391ce4480dc02f3375ee6d311a2590f8505885c3ce7fed65b2e7d6c6dd5838f55f4fe3d7192b56217b7146646269938a3a10cdefd3c55bd0c2";
+  hasRunfiles = true;
+  version = "1.6";
+};
+"endiagram" = {
+  stripPrefix = 0;
+  sha512.run = "50cda29c5f045e45e0421efe11128b11be1206b4ea3b183d401562a9c8afe214031c993f885bfca67f81e8b4827e024a0aeb1d95e5a8a03426f72f414cfd17fe";
+  sha512.doc = "0807629080916e9ca7451fd1975da985ac786326914521c21155c337acbf48888620e3bac03b00fbbf45bbb47740faaa40d1db768a296e4a6b1cf6c6671357ca";
+  hasRunfiles = true;
+  version = "0.1d";
+};
+"endnotes" = {
+  stripPrefix = 0;
+  sha512.run = "927d0883e4453e96dbdc9739fd2db471e63d3ebe2ced9f0cf55be74f2bc26804ddd1151b82d04a6d977427e0396bde01f4332083dab7a413049d9d639295c196";
+  sha512.doc = "44aa9b7d48d7f363c35c61c1945161650cd030ca23d443931236bd1739f6b1d084998fbfab27fd48fd17ade00d1fa494a3595a8101963c311b7fb41a9307a40d";
+  hasRunfiles = true;
+};
+"endnotesj" = {
+  stripPrefix = 0;
+  sha512.run = "acc3ecb055add319d5cbfc4e542c1be490c00187153990dd42d5b9a23adfd19795bebe4648129bc1cd8aa8cc243111602b287183803db8b5962b23b6c60487e3";
+  sha512.doc = "71e52552f4a432b8743e448142fdc8e49b9e1ff1d290b6d20731c083f62bb5be823db76720fcfa40cbb8bf75968b80875926aea8a7f67808555fdec160de1911";
+  hasRunfiles = true;
+  version = "3.0";
+};
+"endofproofwd" = {
+  stripPrefix = 0;
+  sha512.run = "900fc2d9a2673cd75bb25a3c1d5d13a66a91dcf21a105ed22ab52b7e61db4753f3419e6e7f5d09b64b27efd6d4c52b6fc6d1ffd06d6cac37bba9017aa96712f6";
+  sha512.doc = "1b99e26313b9a0572c41900d6e0b10621032957e7569a436d0a84a4d2451b857993b8bcf3554da5ddad00ebb3d83347d5f81e7df858b7b15f2ce3ca92d5ce511";
+  hasRunfiles = true;
+};
+"engpron" = {
+  stripPrefix = 0;
+  sha512.run = "e525f8d2ad25b93566c101edd29a70d49d9f65f591e15bf3457671aaf748da1afac5d483389eada870cefc9e144010e16c561d0561d97ecb3ae240e21b5c5b39";
+  sha512.doc = "dfa3ba98bddd11db47f308c988735967d1ec92c688081bad0deba88c29bd01c976bd1180342b890489f3026c964520ec1fa399fdb52f484c24285e3540a12859";
+  sha512.source = "b47f186eb08ee68b769d61954b705fb5e0575f9af90968569a1928a6b97bbe5bbbd8b65dbd2f946a40ebc7dc1fc676a03effd7cc51924356531ce18fcc3c8dee";
+  hasRunfiles = true;
+  version = "2";
+};
+"engrec" = {
+  stripPrefix = 0;
+  sha512.run = "3856199a11043eb42062122d99f11a64791113ebee137b588b69eab7ba79d721349c2268440a4b801b0e7bc293fc99011fb9a70a732a03a5656cc6302cbd0054";
+  sha512.doc = "f5402766dee90ec0cd2aad59db562a7314805072d4247e5930e59f5aebda9c1b87c4b6935028ec960bca4eb27a1bb1c7ff31b2a671ae0338e1058e24323d4cec";
+  sha512.source = "ff2e4447135db1164447ed8502f45e9dc647cc3b8c9329fe21d3a279b40c2da0923fa78be44ef52d4d9a4781945976714140bd2837268d0537cd6bd6c430501f";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"engtlc" = {
+  stripPrefix = 0;
+  sha512.run = "c1ad2ed5337168c70bcfddd35c72b83b19a1596bc7d9c71298eb82ad8637c984253c79216606060753d1cc5ad4f961095eed8be2381b786b12202f5b0bc748f1";
+  sha512.doc = "4c6cbcf337eca115a856eda24924588208ed9e7491936640c8875d49d649d6012279e4eadfa7cdb6544e08fa283c341754d896c921402a2b1180764e8a8ff233";
+  hasRunfiles = true;
+  version = "3.2";
+};
+"enigma" = {
+  stripPrefix = 0;
+  sha512.run = "70cf80101d3fe9a75e750f5b3df4db79f30f5ef76ed65f4bfb40f36e5c8c5f0d22468396fe3a531508dd484ed5929cd14d4e22734a92814a4eae9ae2ec3e2b07";
+  sha512.doc = "b0509d252a2dd7b61339ed084dcb8dd4c3ec0e63aa6fcb7fd81302b82bbd3ddb0b68d0460e5970798a12b2b66e1f560b80c7bf36187553abf6531e0916ddb71a";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"enotez" = {
+  stripPrefix = 0;
+  sha512.run = "98c83d1a6f738ad708568e620574a14ccf75325838a80f9beb1e2f345e236b4f5bed156bfdc9c280f20e5371007dbb59a8e7081eed07f65c739c3105c794b829";
+  sha512.doc = "c77e63d310940d35be4c7bc9cae0c9894b815ffbf27b41092f6aad32389dd866de08a5b15b3283059a08c88510fd6d1ab60ff33cf9f483a586016dcb8604cb91";
+  hasRunfiles = true;
+  version = "0.10a";
+};
+"enumitem" = {
+  stripPrefix = 0;
+  sha512.run = "d49701368b0ce611f5cfb52ec06616edc27b2dedb99230983ffc59c4c1eadc265a8afd3c94f1e57920de875c4ec684fec007dceca59fd4f4008bb5572c13880c";
+  sha512.doc = "b61f62bb0da61c7124f661739ebfaff6147d73899511d8b1a1d4b98b31bc596c3994acfd73c3c1922f5cc8a05c6a98572254067718be394c48976a10b2351503";
+  hasRunfiles = true;
+  version = "3.9";
+};
+"enumitem-zref" = {
+  stripPrefix = 0;
+  sha512.run = "5cd16cd19d63d4825dd1f726ad7617bc892a0d80e41f559234b3f82950f589f044a9816005a089f6837805ab08f07b507e47c5d2d389728adaa5350a76d1c1ea";
+  sha512.doc = "af4404c0f76f6f693d1fc0a82e0673c461a1acd6a0d7e9cbac10719790e54199deed1b87fae59db4826c2d1874ce59c7c2a1e5ae33286369a4f7e495223fe2e3";
+  sha512.source = "7f5642d0d3f3779b0d66832f509265a17e66c6e3ab4a74e7fdeb0bf4af9c66257eb78a9bb3a1a7dc1747a07ace12607031f861a14664addcc9d707d3f8c5d5ce";
+  hasRunfiles = true;
+  version = "1.8";
+};
+"envbig" = {
+  stripPrefix = 0;
+  sha512.run = "e39ce40decbb52360cfe465d8a5147f9eb5bfae8dd42b86a868a46f1d3c2544d14035d6c307e116c0d08e6ecb62ba5943de803ee9d40a0a8cdf94a88aec8f808";
+  sha512.doc = "cd8c32d4694252449e78736be1697f9a8da01079a8aeafb774d92ded858de9ee7ae163b3758710df466dd0f75fb8b325e86e575457b66c8107f3c580fe0fc737";
+  hasRunfiles = true;
+};
+"environ" = {
+  stripPrefix = 0;
+  sha512.run = "4e5bb20e2a69875006e8d9ebc3a8744dcfff3240cc28ea44f7acfa3775914dc9ee108a89368b6a510eb0a7aed19d2d13b001f0270ef9ad011b881c3cbc6aab9f";
+  sha512.doc = "443362ac9bd70d88bfa92c26e66871ebfc9ec1bdc226ec49b8a41c7bb76f3afa8a424d7ae2e16a7d06f77f4da4208c10f8dad014d918ed7ed239d645781b8815";
+  sha512.source = "5f539dfec035e337aa659aa29815b9293e714efe27d55286a96afc1d52082577eb42bcf02cf19388a2ec92bc880bccc73935a7f5a55ad7f6ed5bfb2862476aaf";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"envlab" = {
+  stripPrefix = 0;
+  sha512.run = "ba20028efa3c286132133d8c292fbc02d77881e64923ca98cece98fbe1e60acf4033b8308a3f9f31f144de071938698a75add803436e1205f7baa820a308a4f1";
+  sha512.doc = "4dedc851e00f82ff3bb912e99bf112f4e464b129b89ed75ac41cab9e9ec8c54a32ace3901a3bdc11c90597cfc0481fc7cfc89b4b95bc9aa0c8850a1e8ec88cc9";
+  sha512.source = "9181b7083e3b57329effd0c9ef462a626f8de6db5eb6dbf6800237348a010b74eaeaf11ffa2b491ddf324f0d9bb2c792b9fdda238b887df057b82dfa4fbf04cf";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"epigrafica" = {
+  stripPrefix = 0;
+  sha512.run = "82e5dd9f781b6c3ad0bef743b117d9658ae9e0162fec524fbb59f35f13008d3ce9b37daef8d6b977a5ec4834a1ecdc06346627857445c5f19c89f4b202706beb";
+  sha512.doc = "c90061813a408ea74da7c0a9a53c1dc0f4ef65a9ec1d96e92002127ef401abb5211b7f029630fa445725497018a6e5ed3415e31c40001674405b13a4b4ebf6de";
+  hasRunfiles = true;
+  version = "1.01";
+};
+"epigram" = {
+  stripPrefix = 0;
+  sha512.run = "8952dbb6f7c573028b1f9621cd9c947a264847e59e1ead9547d386d71c2c15ab5f9c26088568b023030645b02191c9b72d827a80706ca1570785876c6acac6f0";
+  hasRunfiles = true;
+};
+"epigraph" = {
+  stripPrefix = 0;
+  sha512.run = "a6d4ffda943916b41743ad9c924351279e469c4fa2fa419e6e54d566d68faf6f381db54c9c5ffc2627ec2d7c699efbab47794682d8eb6633ec5a81a9029a9fda";
+  sha512.doc = "bc9f14e7f1a6897720c6ba2f2faa5e35f739a2d581f3f865ab4b46696656ad996637ffc436bc20b91eb0f09632ed89dd79c42c11905d3ad419a580a5f87fca68";
+  sha512.source = "1736ff1760772cbe5c806a489b3bfd578300405362a4759e0701915cc2ef8e4ceba58f07d53419d0136db549323b57d0bcda7aa35d2ecaa021e1768d6a8024ee";
+  hasRunfiles = true;
+  version = "1.5c";
+};
+"epiolmec" = {
+  stripPrefix = 0;
+  sha512.run = "5cbe40240b14ed494500c3831a02659be437ad9710708929a69670d00b788ffc99d4d35e66fba04f170c9844faf2432c116d75e6b01988736ab483e7d0255a8c";
+  sha512.doc = "d2c54da2821e850f17ea0a21d0bc67385e2d986948503fbc23ce6df5229708f0700cdd30a94d09cb310cbd911c183c40935e944341b6ee7ec56cdd9c2602011e";
+  sha512.source = "a52ef99c57524444151175f8e345cc59ae99c962e31420363c01e3121e1b4ecfbaeed28a01c3185d9d57beae90aaa8fe55dec15fd0790088f72fc4ee8860ea12";
+  hasRunfiles = true;
+};
+"eplain" = {
+  deps."pdftex" = tl."pdftex";
+  deps."babel" = tl."babel";
+  deps."cm" = tl."cm";
+  deps."dehyph" = tl."dehyph";
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."knuth-lib" = tl."knuth-lib";
+  deps."latex-fonts" = tl."latex-fonts";
+  deps."plain" = tl."plain";
+  sha512.run = "66095056f095bb8d716382af1cc0c269bd61a6931dfd4a0d5edada684f4e2e794583417e6ffe09e64a3276ae3330844bbaa3d668697db163de89038e1d020758";
+  sha512.doc = "93086e5846ddbd57c799446be06afd6489a788427202ecb41bc60c283953af07513f3cc7e67964929a9944515dd3582f54ee2bc81a99e9770f15cbec51a86534";
+  sha512.source = "41ea85290fc3abc63f0e3b879e0210f204bb9e5dbf99ea44c0d506e9e68533313f19837ddc1ca1c45616d709cd0402396ac4729908f3acf38491e80ed4cb24f5";
+  hasRunfiles = true;
+  version = "3.9";
+};
+"epsdice" = {
+  stripPrefix = 0;
+  sha512.run = "acc0ceb408f320570a93a52132d3e37d43d4be65a31a038187edd6de9899427f08d7859dbc383b7b27e9d9b5a635ae94ea97f0be4ab8386b5991089a1435c350";
+  sha512.doc = "6d9db45832d3e26e79a518f06d00db992ddfb2999099d32b415891e8d05b51803dc4f03d097cdcb04e5ccd6073606d4c7a87a07b9dd20d8d257456f927ee7427";
+  sha512.source = "9bc8b64a815e9aa14b6ef09e9ea6328e338e9539ebefbe3df805d3fe05ba3aff61750fd98033be72ed7a7cb4c3d5aa6152b557c9a1dfb0272dec856968171d29";
+  hasRunfiles = true;
+  version = "2.1";
+};
+"epsf" = {
+  stripPrefix = 0;
+  sha512.run = "4c3698edc9ef386b08a2ed7c360d926be6ca5a8284e3e53e0dcf5f222eeb27d4d33b4547b42dd2e5544ab381397aafcd58899376d26a4d9d47beee00ad1e9bda";
+  sha512.doc = "52be704eec6159e70d99ae2a4823c1da0790f41da9e6de130c84cc77e0d8d29aae145ccb9b416ddc5c9641100821f5099b5c597a350438652381be903e7681bb";
+  hasRunfiles = true;
+  version = "2.7.4";
+};
+"epsf-dvipdfmx" = {
+  stripPrefix = 0;
+  sha512.run = "0f210b940d55bc2e85b3c86318be82fde1bf2b6fa2e5d498101036a01cec3b09cd8081079476f128f21881b14a13c7fa248c758a7a33ab0770f261505260992d";
+  sha512.doc = "e7b770f6880bfa8001851cfdcf2f2d03117fba3a2d38514bd7e23683aae08d57774bd1bfa4d0f75df443d9111a5472ba96bf8129e45b618b39f1798b27fb533c";
+  hasRunfiles = true;
+  version = "2014";
+};
+"epsincl" = {
+  stripPrefix = 0;
+  sha512.run = "f9251142a990038acde2f1e7b61b94eba39b2c4f5c43a1151af29a17d5f0efb0cddc0af1ac8d056d8617b5ab4eef29bba14a4731ef933480a9bdb95fcc15d023";
+  sha512.doc = "2cac5738a39157563707879656b473e7ac7edac2f304c209c8164c7878b10f0d5dcba1d38232ed6ba8e20fe21b3a0cf78dfd51733b993ccd5fcb2c0a05ea31c6";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"epslatex-fr" = {
+  stripPrefix = 0;
+  sha512.run = "f3e90ecb487259301c20ab4c4c28702b9cadfa844a49361fee0881a26f827ae602f954e4a3e824e910d2e098097c387aa5311c5f32cb58df5a0a1e2fcd9d2364";
+  sha512.doc = "7965e6094535d22b04193619842bc0bd090c2b47139e65498dcdf428f4ce2ec54e7da5edbdf9015c9d8f2013642d11347373e625a3884c629d9d807af2a9880a";
+};
+"epspdf" = {
+  sha512.run = "a8d2e4cdf1b3e4439ce8c96b18cc7182bf29f745b8a35942623575951ddf179964536f72ec58a357e7544d861bcf624d7b35ed3a0932d758e011e56633aba078";
+  sha512.doc = "f2c5ed08890388bc064af0bfe31f540c126b9bab4a5b262a5e44f6cbb4e4511ed43ef0fdd2945b01bfb1ff4aba15aaa7e7fa373f7cf93827fa352226a423d8dd";
+  hasRunfiles = true;
+  version = "0.6.4";
+};
+"epspdfconversion" = {
+  stripPrefix = 0;
+  sha512.run = "a1f328125f82f33bcc881adacec981f4ce8aefd4cbbe160de66397ed3b1d4c2ed980f5e1c17c63b75973e3c253d76afc2f1227272ab7f0236e47e8e48f0f015c";
+  sha512.doc = "dc09e2ef835a85bbfc7c399b7c7323d64c312b04143e8070fc403fbd484bd893be1e4b532580efea93baffe64625c33004405eb0ed9bf6295646cfc260d72c40";
+  hasRunfiles = true;
+  version = "0.61";
+};
+"epstopdf" = {
+  sha512.run = "6412bb97554b271cf5412dbccd316f3d69d7bcf2f524a5d6d1a75f69cfa11a981fc4ab063b6ea8302c2a0236ff93c59f1ee2f8f2b7f33dc466324080fc5016f4";
+  sha512.doc = "7fef59ad3bc72b2e3fc10021216b88b8d5465f42503d9938031c3d40d93fbaf637094fdfc87b19ccc1da4d9a28c9890beccee7c30b915a513a909edbac6e0a25";
+  hasRunfiles = true;
+  version = "2.28";
+};
+"eqell" = {
+  stripPrefix = 0;
+  sha512.run = "b3544579e03c33b7a5a10f1fbcb22735d1bbcdb9fb5ac94330ec1eeb6f6ae646935a46f4c7c3bdb4305368b2e9aa9eba244c80f08f3127fad2080b610f1041a1";
+  sha512.doc = "9210b85937d0bae3eab982f45b1f38f7020327c9b4cfc6604de5b171ecc84f54f5bfd088a3f06ba7123a7fc01a6fb09953015b1813db9ab2fbabf2a15bca955c";
+  hasRunfiles = true;
+};
+"eqexpl" = {
+  stripPrefix = 0;
+  sha512.run = "c3412287917852e6c8c1ae224616a3cc1cc15156d66bfccbdd3fab70b02e5d4ed0b3b097e7bbfc89f71ceeec6389d4e66c0c1abff2e160d813d2f3b29325d7e9";
+  sha512.doc = "c94dd14530cf7b93ade41c7f4084988ed480dc4259b90886278dd5665e5b6e705e79a5c4d1db428b9d43e9ed9fa63a06a6e10569354d848dca3c76fc28c847d6";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"eqlist" = {
+  stripPrefix = 0;
+  sha512.run = "1af830f51ce25946ac8bc6a4cca323dffeff20389ec998b74afd49a8edab5ad7a453818d4799e55ca564153a87b85e2a6b03ed67e53cc5ae6fa74c45edf3aeae";
+  sha512.doc = "a5b22b8e9300064d77d02ca6f5652659293c6fedb792be2f0664a2383b3167ed7bf8796af26edfabfdcab8d75ddf30f3815be36e8f38fda30f1609b56c16ac61";
+  sha512.source = "15817915c95c5f609c3def3bce324e6ca362408aa862e7b3548a67225bc1c33bf8a5c8f924dcbb1951958beaccbf86071b4e866f0e7a4d55a09456412fe70223";
+  hasRunfiles = true;
+  version = "2.1";
+};
+"eqnalign" = {
+  stripPrefix = 0;
+  sha512.run = "6793d24d272ff5f95b4e37fa3f4206e7358e0f5b51c51bcf4c61908e3fa554d8c8a53d888c7d7b1adde09f5d308c19944e93abccdb7846c88544abc90bbe4924";
+  sha512.doc = "65847f34d7d1c76dd4d87ebd7e46aa1bb9e9a34ecf04cac6e58c18f9f4949d3e82325dac982f6d704fe6013e2acf718f0372873e547434c15a4a07c07ace27c9";
+  sha512.source = "124449d3ce1f3b120f152c1eee49447f640f97d01f1d5a6f79ef72d1465cdd31de896049a5a7163e4e366ca9454b0f78723c4a94a24b8d83e2c4540d613bfaa3";
+  hasRunfiles = true;
+  version = "1.0a";
+};
+"eqname" = {
+  stripPrefix = 0;
+  sha512.run = "1717aa83439019ba2c07ced56ca5dc969a68b78c9a711d97d0a168d432c6e26b53f30b2a3f6f8d241acf465fe8817d7e4fc4238982a68bf2ae143c5fdc2ca72e";
+  hasRunfiles = true;
+};
+"eqnarray" = {
+  stripPrefix = 0;
+  sha512.run = "f5abd20910152cf65d92c7e44930729c1052f72441f162de2f4ad869f0ff37b669066f43089a1369298e9ebdb536ed62d437b3f34be5b3e417d8b0bf34d9c870";
+  sha512.doc = "7ea3d87f81eca28dd52f9e9cf4f7df1ce4f7b9cd82cc40d0a7fff234415b2a3e033fa1c8a11594b2c08e5edf87ae265e5f7a65eb92a79cd523568f37853de30a";
+  sha512.source = "9dd02c43fca4f6e8dba0bd44292c8f97aef4cbf39d521b9df10206a2309e82492f344fb65c35ac0509532e9efb2571aecb2a5894e639de5efa1444bba9916587";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"eqnnumwarn" = {
+  stripPrefix = 0;
+  sha512.run = "ddfee700caa63f65fb4f53fe2469d1e6ef6338843738dd2c06989f23b6f4b40dd1dfe4b5979a04b34a9430d7cdd4d0f3ef14e3ce39613c8961fb0266e4ce6af3";
+  sha512.doc = "e6dddee646be40e01c211854d3fa04855286e24a39b8217380e555eaacfad50fc66a57e89336d505c80a8df77ff7885922195423d11c2acefce583c9cb9fce81";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"eqparbox" = {
+  stripPrefix = 0;
+  sha512.run = "b6e64a4d30840933614a42b16ffec215d1e01138c42805ed20bfab6ec03e232f87fcc2c20decb2e7e75234b7bd5fc2ebe5477808756ec92e6e724acb3482afca";
+  sha512.doc = "1b0f7e6249e114bb6371d19f941cd2308f70ac4f1c831ce5a1c15551bbd65a4289b0b0e718580cc7df97bf4732ad3a76b3f22ea12f7caeaa2ea6362fabab2074";
+  sha512.source = "2998b3fce2cce05512a41b4700905adb78d421302ed0275e7f263f891a0d8e9d5d8793ce2fb80cf1ca3e8f5f148e530a48c3c701f72729e6f4667382ad9247b1";
+  hasRunfiles = true;
+  version = "4.1";
+};
+"erdc" = {
+  stripPrefix = 0;
+  sha512.run = "56754f7ca1872837a362b1f5cc929fe5ed8bbd59a1a45eb2fe20b071f7c44362b0d98764c6d2870d275d0f0216a9543cc1e9f671f92de1b6b02136f9076f5f95";
+  sha512.doc = "3e9d2dbfb3bd877c6bd105ca8cdff87cad9cf801797cea39e760ceaa1f27ed802795d728f9bd675c6553a88e22c03a035436abb19dacd38c774b94a0e2bd1567";
+  sha512.source = "afe35b5120001d40259065ba25a9c5720f78fb1a679ed984727b89076bc265113e93184bc8ffbf998f069f85636f332ec5c93a40ba39aef4d4b7a3884da42446";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"erewhon" = {
+  stripPrefix = 0;
+  sha512.run = "efc2a9afd043de41d9fb81fbf09cff81d87165d96bd402d68ad8a00db4924d6c7f0b33d2e12efde8f34d24979109a47c1cc542289b4cd89b089501f88905f9a4";
+  sha512.doc = "a25654fe1d3b08412a5393a899fbb1192510613478a2f6e9143c802db7857261ced89f04f52a90349c450d4b42650d964e633687ca785f4bf69f6a3adbd35c16";
+  hasRunfiles = true;
+  version = "1.093";
+};
+"errata" = {
+  stripPrefix = 0;
+  sha512.run = "ac3b99ef6e120a5b488cf79f3e942c10a47ee92e84a04d3667f99810ef365aac66598908c491897ef7a99df268a0bbc7185d49aed2313487712e300383356ec5";
+  sha512.doc = "7fb625a66efc914e2eacc45696ac43112d7ca49b668ffbea179f47f04746509f981141a77d2948f30b8c56e4a2ff06f6af3047fe494e4f084237891fbbf6710f";
+  sha512.source = "ecc57287f78000349f4999d1f85aeaba0206a898ff2d97a1fa9b4f94acffd76099cc0f92a88e5a38153f71570f62d9616e0332edeb987e468a6483de0dfab5ee";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"erw-l3" = {
+  stripPrefix = 0;
+  sha512.run = "d38e28024ecfa8be96a0125bea5728f54618849963881983fe9d375086530246a8e0351fcfd519ad37a235c3897906ff2f7b3f88854865e2de92237d7873aa39";
+  sha512.doc = "8d1df458ed784fad2be09b46bfb48f1478c12a76127dda7a16b3c8b89966643e385ec139f0caae7a71b265451140ad95c4de4678ffbc6540bd1653c82a9775f2";
+  sha512.source = "e7e2ddbb2bf750c16148915d779412f81d4508539bfed20f0bf0ef1f983675f9976984a870dfe67ce56041954e25aea6e5ebef5b07c82197ab7183968402e20d";
+  hasRunfiles = true;
+  version = "0.1.3";
+};
+"es-tex-faq" = {
+  stripPrefix = 0;
+  sha512.run = "33f66e4f928591188289f07e003cac10229735e69ee7390020748e119930ea7b74ad69e5eea991d8e34325ac4d548ce0b843a00b3ca50b9e6fae3e96526a4ad8";
+  sha512.doc = "5b5d0ebda1bde2c1c67fd4853a41bb10956487fa5ad2686d6814dbdd51f68dde2a3d294797b7b1602d587a44ea6acbd8260ab9965efab81d91eb9d9fdb93da69";
+  version = "1.97";
+};
+"esami" = {
+  stripPrefix = 0;
+  sha512.run = "bbf24974b4feaba88b92b3179af6bdb45b86053ae8037fa41c99d0823cf3c79807283c01370365ea0264ba1eee3c4c289fadc5c2619900e85657366c14920a7d";
+  sha512.doc = "d9f57db15517f47d648e4ef91111a843fdd7f0d0706d1a863f5b4f7c65008c00507c552975c01b60c00cc724e63aea24f7a6b40930148bc981e200866cc30ac7";
+  hasRunfiles = true;
+  version = "2.5";
+};
+"esdiff" = {
+  stripPrefix = 0;
+  sha512.run = "84b2490e6ff743f0133deacc22c8e0368368e961d634239694ccf7b5cde7826996e080077baa0e0045230b6d2c3cad53ee055c05b17c89ca735dc2e40a01fb5a";
+  sha512.doc = "97dbb512437c868f2b15ebd1271f51a7f196e40c70043c224617378e6c9333f19e2c18666f64fe6ea323c7aa5a58438944d8c6f5b1a9c0d36a239caee972eb08";
+  sha512.source = "983f7f7cee22e442768ae56fac614d569eef18bff35c52c669d51079a61beca395c06e7fb9bcedde338bbaa1b3775094ce9b77fe7c043df2e1e25975410ab7d2";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"esindex" = {
+  stripPrefix = 0;
+  sha512.run = "4e3fe4402e025dbbf300b509954600e3a1eca221a448d32ff2399aaf552ff930e6921bed6f0e1aadb20d6453848e235e42e8b809c4f4280d39c29937615e90f5";
+  sha512.doc = "6db4b39371280b0f3a3e0be9e18337a75611410ad25e7953742247e750ca439c92c614edeffa03c4a7f39d8aea447037a6e25cb8f6f0d22a190f359c9cc35f8c";
+  hasRunfiles = true;
+  version = "1.7";
+};
+"esint" = {
+  stripPrefix = 0;
+  sha512.run = "d0eda90d6a890b7813648516f21e3a88213b1374df0c418895301354de402b9634492a1fd89193f34c6db6b9fcc0cdd0f8f46472e0e3a210234c7d8cab1bbed8";
+  sha512.doc = "aeeaafe3746b8fd75ba80fc36b1610a3e4f7c7f26044ca82c2c8091139e0294275a1dde9dd73fb3e5b013ff04e4d0f26422e8c2a44a88beab167353e7686b3fe";
+  sha512.source = "242e864b822f5deac76740d7a00edab9b6ff77e260b3e1adb6676dda009a8c200b9352e87998b76ac3047f0eacb9bd5ef87ac554c7c20ae649e91f1fcad889b2";
+  hasRunfiles = true;
+  version = "1.2d";
+};
+"esint-type1" = {
+  stripPrefix = 0;
+  deps."esint" = tl."esint";
+  sha512.run = "5a663d01e9241adf1961c922c588888561f495e6378fdd7aaa90954c3e51c5f0f8e6dc1e1947c9f03ce3472e1aab3dde1b35e6b5f0814f5e2cda564a31a45a1f";
+  sha512.doc = "081a225225f503fac403d306fac3ee3b2747341ef5c4ee9420f49a56ca959c7757f154c24f90ed9506041b13464ea216e6edb52f29790d189ea7b33c7c797f8e";
+  hasRunfiles = true;
+};
+"esk" = {
+  stripPrefix = 0;
+  sha512.run = "584d9b9abf202d93826c690545206c3b7276d6b3a4b717ed3671f9cbd2a1c6c6503d3352471fe60232e75d63632e021fb0ed34ce49d5a1e72ae58b08fbdd7211";
+  sha512.doc = "acc40c8829e69c681d3bcfd5aa7223b3f5320c1ed5fa3f4a9a700f203b622f300b73912ef5df2c163d2cce1b40aecfdf1eb880dcba48e94783c14054981e0e11";
+  sha512.source = "8f7123816c718d86eb1b362369dc10a745a003e8e79c54b8edb90813382528466a7e0fe3eb6b579372754d03888065b6f5c48a0682c6288905e93cebfb1b4a4b";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"eskd" = {
+  stripPrefix = 0;
+  sha512.run = "d0c1745172683bcacfb061f48bee10f78dbc849657295f5e7714cca949afd586c441f727e909c627b595ccdb50b81d813538e6837a00809ee884ffe1acd6b25e";
+  sha512.doc = "01a0be9d02e7fece62cfd1bc8ceb26b2036f3d2e374794f3c4aacbfe004cf4059346510009760fe48fc0141c4e9f3cf1e40088203d31b7bbb31ec375cf5f70ea";
+  sha512.source = "88b3edc0487b638142ba353ef108558b8fa6d420f2560a4fb1c189829af87d877a8900566c042556b15d654d11d2a0def58fa958fb9b234fca84419b2621cba4";
+  hasRunfiles = true;
+};
+"eskdx" = {
+  stripPrefix = 0;
+  sha512.run = "e5ef11cba6b0251844200093445f5183de60e0c0198da9c7000ef5c05a2a9a4303a15dc77ed03e9874e452ffdd283016cedb8901e78cd0312ea5bbcc529b74d5";
+  sha512.doc = "748dec387a09546b28718e943e05772cd56c75a0066793332b343e7f604e607efd37a071c1f4f32fbd20d7427277bf2d598b355b8ea3a0a04943ccb90f4f249d";
+  hasRunfiles = true;
+  version = "0.98";
+};
+"eso-pic" = {
+  stripPrefix = 0;
+  sha512.run = "52c1987317382cc5b3af5fa05627d3137c692b402dec1a19104f814be191222b9699935a52e68c5813beabc0f659735ec22dd37926d6a681ca6e415ac0235cb0";
+  sha512.doc = "e78570568903fc10ad3309c8247599da7faf2ec9851df46b2ff36451a874f605fd12b9aa0dfd68f237cc65e77b527baea296036721fbc0e2185d4cb61f0eb1b3";
+  sha512.source = "7736c3f6bc4615034127de7b88d0be8e88e1564760bb340d5fe555633ebedf1f5b12881e4c1cd504af47350000a931582f8f75f1de431f6151948c8a27af1ca1";
+  hasRunfiles = true;
+  version = "2.0h";
+};
+"esrelation" = {
+  stripPrefix = 0;
+  sha512.run = "a6d8a0a9bde08e3582826affa52142fe5b5a0dba43c4ff15f5fdd19cb24b561bcdcdd761c2a84238c9b31d3fe0a023949d2d0c716e105852443e06ced9df13f1";
+  sha512.doc = "6698e9f57df458d9652ae98abbea08ce1f14c6c31677c32ab8cdf9b8fa0866a57c50028ea36d2c7cde133588358dce0b2bb37b7085995e4bab9ce7d3de1a541c";
+  sha512.source = "17b0495b4b19ca5166835549c62c9c5e1dbcb59e2252e321860dc7254b9ebc9d073f317a344a2a8a4ec772ee1a931a5181d9d3b1af45f913b0ad04ebf189bd3a";
+  hasRunfiles = true;
+};
+"esstix" = {
+  stripPrefix = 0;
+  sha512.run = "e503f25cb713918329f297a4ed088b63967eb06828fb753653aaf60ef99c5fb7db6507d6f0f74080b9fad2050ca1917f7ab873be2fb0bd3fcd126f29a43eb775";
+  sha512.doc = "1233a284b88e5c8bfb29350b3b534e7a4c81b5692a9ac7aff5d69f77210e026dede300b511bc45efd18d6a96f6df9be2add166c80f0ee5d17c93732c0c242bf0";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"estcpmm" = {
+  stripPrefix = 0;
+  sha512.run = "20213ddd795e862dc924ddd71df08752f6adda4be7a06237507cec84abf6a6ccd664fa9676cb9b275ca9de8647011da0bc731fef9344945404f885b56b75aea1";
+  sha512.doc = "c240305f2ad7a841c1d9309d1934001fc42d68819505b5c862ca8c97c5ecd7b6d2fd8a79a4273be79126d1503d968fa4649ad06e0c001f3b731e300341802dfd";
+  sha512.source = "f867a24f4bde53c0de195874f1717fe49a3869755834ba1dd0a9004e3085f06076eefaca2e83c59cdf5cdf65fa740d0df898e0ee75f88a5cb516a3cfa404c164";
+  hasRunfiles = true;
+  version = "0.4";
+};
+"esvect" = {
+  stripPrefix = 0;
+  sha512.run = "1a6940862940d8ca29bcb19c69817b84a7f71f7a8762d3a63829fb0e0e88eccd940f3e2973d8d05dbe9323aa1f80dc9045b531e3509239eab399f02a55e7988c";
+  sha512.doc = "502d2cce629280d7c192ad11764c0c12e65f9f1318286d1acdc3e08c9d7d36b07fc3e5939c053aa57ad59ee91e73b4035c9bd1aafee3672ddeed4a64bf3cd7ad";
+  sha512.source = "658e98e4c97dfdfcb34b396ff644fda060a645d15760bd975ad1397ca73f4ed24331a77bfd914bfe6f8f218aec9ab3fcc0a2a48efc19a0c6adc1024943584a47";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"etaremune" = {
+  stripPrefix = 0;
+  sha512.run = "511f84d8cb951caaea65cbe839fe83c9c2dcd7dbe0e0c3db3611d914dea475b60de029d4dbe482616e9d219929c50b2a87f6c33451d0d880e3b368fbc9f7f612";
+  sha512.doc = "4d7728be13e1454b2456e543ffb89a19fc5204e8025f949dcda7ce3b8a8b898dd9a6d96e44477cd158baad4d462afbcc17b6df6ddd9982232891e7b4ccb112b7";
+  sha512.source = "17c0b9d705cd5ea494428bbfacf73d12f0f40d5eb4be2a3b1a4e2aeb97af61d184ae6a471505d6dd604174cdf34976f9e64de5366be7877da26141720f542953";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"etdipa" = {
+  stripPrefix = 0;
+  sha512.run = "88502eeb78f2f5901cdfc192638501690aea861de2105445de226261c62f526d6602ab5c63f02974d067e229b12441ee6663b54769236a1e0e125896b869301d";
+  sha512.doc = "6aa2ecdb393932a485857222e66471b9c52388e726edffd0b4357e340e8a5092af96ad1847486a58d6a8485a4ce0e80e25e80ad58f60991004136739d26aa996";
+  version = "2.6";
+};
+"etex" = {
+  stripPrefix = 0;
+  sha512.run = "8d9bbc49c5a9747bd0469d6941358e33dd273841c0e467ca5fac191dbf5d353de19e43fa6c66b95fe5975211c01cb6dadbaffbaf544faccd3e35af0158a0642d";
+  sha512.doc = "5d10427a79c38a573036164d5de8315a80b709eae87eccc050e319435622664203b4f859a7a0875a13e444a3da06eb11a2801c44c8c3e7d5ed0241adda8b5d22";
+  hasRunfiles = true;
+};
+"etex-pkg" = {
+  stripPrefix = 0;
+  sha512.run = "e2afebc530bdab4d5384170dd807d6e39c96d5a18af0defa534106103243b0e52d926e09f3ba62378452ef643bfa8f0e4d92a3c0256847c91e561707410052f4";
+  sha512.doc = "2ef9984629ffdafdc799041127e31360c8eee80726d8c410130d61f12de306e7b4c2cc892e8012029827e8ed470f9191eebcf758830cd34b8d01593ff78cef1d";
+  hasRunfiles = true;
+  version = "2.7";
+};
+"etextools" = {
+  stripPrefix = 0;
+  sha512.run = "ed7e514441de2fd296c372d9c56dd71ebd5318bd67eb4611c4bf784b16b045a08338ca4456899739dc023e5bc4695a6fd1784e592e542cac6a0564a68307a983";
+  sha512.doc = "5a8d722f9e2e59d483c7421909b4a0f8719b0de81f2b8b95801f905d478624eb4df936f193eb3e4ad1e3f0c2d844c7672a5e2ab1c0ff0654ed88c66bee4802ef";
+  sha512.source = "a2535e9648828eee76f6fe48d7c85ab4211c2c107bc91f72a944f8a9eae384205ef371459fe2df743712039eb745e48dfbcfc42cd39b7d5391263711ba027862";
+  hasRunfiles = true;
+  version = "3.1415926";
+};
+"ethiop" = {
+  stripPrefix = 0;
+  sha512.run = "ad9da81e2a9af7f93c3a9677a72b80335562677d552511463c20b73df25adb0a6765463273306486e295b8c5994af03fa1df8f1e70cc48ed7df44698637f8459";
+  sha512.doc = "13e9149433cee0c44d8eddbcc6f738cf113581e4890a8728aff08a6f3f26a62617e1770b4875668dcd75a3714925db9cf5c5d9fb58a9870292bc0d22005c844a";
+  sha512.source = "46bedb27b22953ee6aab0b372581fc58186f3208c985a88006846a1f7917d998b5b8abfe463c3f415100f27aae20ae1d1648044850e6e7d095afa480adbe5837";
+  hasRunfiles = true;
+  version = "0.7";
+};
+"ethiop-t1" = {
+  stripPrefix = 0;
+  sha512.run = "84f97fb5320ada95562aade797fdb62577e533feee9d7ece5cc51e17303012b198c0b1e6b4f720dc1539c4cb917ac71e3da6f48776d6fcfe84d4527ffd7b78dd";
+  sha512.doc = "81f2ed72d5cef9119c94c4b0025e31be6739153e36b7b31a2c59b0cbe5a683a67746da8346345d561472fdbb760c07831d1936222ce1388ee12d70c9053ca8ac";
+  hasRunfiles = true;
+};
+"etoc" = {
+  stripPrefix = 0;
+  sha512.run = "f513ad397a4c48add5b1eb21714bacc54989532a9ef56ae2e7d02254e325acb430a1bfdbd9d90ec8bd20c5ed473c7f8a73b3f2ff615690ba85ae2c69acd283f5";
+  sha512.doc = "e4363e5790dbe31c12e3c4392285fc3edcc3390af6ca66d5fc98008110c35c9f9eaea38ed401315b9403368ca4a977f4a926ec59cf76f70424c6e59bc52aca14";
+  sha512.source = "895ad1979e26e8fde07f5df98b338c661b849e4f67f5db77df7176aa7bbf37183c377acf19d9fd92259ce413c4efe5fb0269a854213e565925d826c9822a7939";
+  hasRunfiles = true;
+  version = "1.09";
+};
+"etoolbox" = {
+  stripPrefix = 0;
+  sha512.run = "f614e649193857d2348bed9c9ce49a64b78e0c165962acb51bab6b340a1b7397793ce07d649808eb04322d94c3df1699ed69164c6e4c3583600f9adf542650b9";
+  sha512.doc = "89b5515a47fc18b6a0a2e70712b614e5fc32ae537c632e431be1ef1e8c55ec2791c7394701e676b0ee6cbf6addee38ebbab67e60d67a34118381fd4ebb0bc0b2";
+  hasRunfiles = true;
+  version = "2.5h";
+};
+"etoolbox-de" = {
+  stripPrefix = 0;
+  sha512.run = "cbddbd599e10b6409db5c9f9d27f35b5922bba82da39b19aac010ef77e76a29465d91c10a40c578e834acf5d9ade2d52baec5cca06eddc802eabbe599fb3dd28";
+  sha512.doc = "4c966dc094430caf72e462c1a854995fb78b54dca84322233a16508e41f33f0dd71db2b997b26beb7fd4722f0df1695a118ef782d7954983e9df3ba2132b828b";
+  version = "1";
+};
+"etsvthor" = {
+  stripPrefix = 0;
+  sha512.run = "c70654c50e186f73bd6dbbb65cc40cbfd809a86de223f96b4bbd1af94fc5fa928f2400eca58d6a97e5578186c58cd038a99264a412d9bb7fe15a01d7f3aff8b9";
+  sha512.doc = "47c9d66a720a8225b34bd0571c0f0da18fc72fb5f37e4204e7d4842facade9a0b72550351c0743dbb9296ca8bd2ad61036361f0cb7447b06e0994fcdb7c657b1";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"euenc" = {
+  stripPrefix = 0;
+  sha512.run = "f5968e42b36d9c3ab7ae17d156283f8fc09f0c725dd1037cae3b232f94af11a8ee84507efd87cab901bdc8a34f0f72d831a078de205e9beec81c574bb65f79fb";
+  sha512.doc = "ac8d4e83ab23bf692d609a617bf8aacd8b33949e0bff1070301b8cad4e91f2a651555ffb44ad70be99791e64020984fe07afbb25976b73963abc79660eab96dd";
+  sha512.source = "4037c8f9961be1f4cd6a41d0cced28f4bcb54e5b7c4f9681b702f1d90e425ab0c772561b662fded93a0c469cfa1c43967fdfb3eb8c9e0e8c86d8340930565910";
+  hasRunfiles = true;
+  version = "0.1h";
+};
+"euflag" = {
+  stripPrefix = 0;
+  sha512.run = "e046d3b4b0de99d6669aa7cb62b4304ea8c2b83bef6dbae7d997355bc97ef07ffbad6ba139a4969c0a99307a43202566a283a40de1a69635d09afd9256ba0a51";
+  sha512.doc = "e0b58801624084e20083f1c92ee71dd6f53b75954cc2a63c7f99b2453d3925e9d4bb9509e86cf3fec3bcb2b1814ccc6ec27bdb08bc24f23803c0349dbe1a9574";
+  sha512.source = "2365d9bf74ff4194060edd03776363d3890c6cb3ea4da741413fb7a2fb03a79bba1c0775b287a82c9b30ec68dcc3db3d778460b44f5e249be5f21e130e7e52cb";
+  hasRunfiles = true;
+  version = "0.4";
+};
+"eukdate" = {
+  stripPrefix = 0;
+  sha512.run = "4f64df42384897fca09574330d919704bfac2115f330f8ef085c9be60b51c64a9f1f46c10b863e989b9eda6559a3e2cb2388a59a997afad73632d83b02177b3e";
+  sha512.doc = "7c79bb48296d491816b5e5cbcec389fb7a2a200a9b8e544394a8363b5b99c7ad36b332c05968b98c1bfa1caf04fb554318494cafd0781e25ecbed532c752c65b";
+  sha512.source = "114d472984fb42b7043762f7f76e1ac384ca4efd338b7ea1815d25178256dafdc2c83323cdc3e4c1835fa8d3cb019bf0d73dd3fe82acae16b41db4e0c76e81d9";
+  hasRunfiles = true;
+  version = "1.04";
+};
+"euler" = {
+  stripPrefix = 0;
+  sha512.run = "3b3d383a2f715f14dba0ab926d3df9d10ab63c06d203c59e551732a7f6af4ff8965750404a37863c91d3fc3db7d44d1a279d03839162fde9d8d9fd849f0047c3";
+  sha512.doc = "789c0b35257ad74dcddea589eed36f0a3b86eae3b201fc708c13cb11dbedc5b489d1495c218f9e10558b8977658b72c345a5622c10b8b1d7ceb3065a6c8fb9a0";
+  sha512.source = "59e262e4ebd3eee88828fb2cbc91b55ffe962e2bfe662df5c052075cf4fe4b9b8580ce217e38e4709789a0e77c810f9681ed3cef95f10709c54da5f1dbebd73b";
+  hasRunfiles = true;
+  version = "2.5";
+};
+"eulerpx" = {
+  stripPrefix = 0;
+  sha512.run = "1dd4c01260b9f2cf7053d7867530b1383a1b1218719a5a58895bb56e61416f9a93199218670e88cb59f0d87e65efdd7f10a218b45a165894c13b99330797296b";
+  sha512.doc = "d755e9694d0631e80ccf81f78a2832ae22269ded788fd30f0acd83a4044ddb4ee4308c26ae5f79c0510a2986f146d28847eabe200015bb197805d57d149ba20e";
+  hasRunfiles = true;
+  version = "0.2.1";
+};
+"eulervm" = {
+  stripPrefix = 0;
+  sha512.run = "f497e30a188bd0d6cb66795253b35f6a108ef11a2924da94110e5a2c913af64826a21789265bf7f2b15a31a914b74ec171fe3c3d299b1164801898c0d7b0e7b0";
+  sha512.doc = "dce6b483aa0d8ed6d6e607a0a518060fb290b25f04306ea4ba50f863034aa3184118a7a13f42e89fb2706daa173abb7eb5c2bd433eb038aafd1f3a8eb9c17995";
+  sha512.source = "33ad15486b813b4c4cb7758cb22acd59a9578df070857483e6cf7997997437df954619a197c4bd762c38417bf9841c06db446ee74939b8eeeb6a0d3bf893f5e4";
+  hasRunfiles = true;
+  version = "4.0";
+};
+"euro" = {
+  stripPrefix = 0;
+  sha512.run = "35a1c763998bdbc3b3b54ade3e4887859aa9d166699ccfc73db432aab3439be075d858e88d3542c25f8a0065301f0b1fea9bc368f85ed767e9deafa090f35beb";
+  sha512.doc = "896a040cf80bec968e4fed5b2bd774e433997d336855775c1e6e5215cd6d9bb094550da324a2433d4da94ead4af3cfa6b192382efa73bb7c6bc951c22bb02fb3";
+  sha512.source = "cf587911ccf53bd78d100221518aa62595279fd5880152d715950ece34b23eb5ef39b0ec190d2c5b5060a4f68861a8b9ac2ef93a3a6f3dbe3b85223dc386bef4";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"euro-ce" = {
+  stripPrefix = 0;
+  sha512.run = "c1a864ebf022c8949b62195be6ce857ba108b7f930cf6e0152d70b7e3283e09c2f93fc670732cac79e3f48b860431186ea903324a02597b2a92fa43a0819b57b";
+  sha512.doc = "3a44189546231f3bfde594142e6901a69f6e351e1d04203d1d646c476ca330431c0560faa79fec79485a4092b667864dcfb522ddf9a56bfc2b2ab76764b3852e";
+  hasRunfiles = true;
+  version = "3.0b";
+};
+"europasscv" = {
+  stripPrefix = 0;
+  sha512.run = "b47453280812327a1528e7d2a484e0b92e5464381bda11b715c624bb8fb7a1f57e3df71ccaeba7dbe8b0f757297ad3c4515aed773a44bfe78efbe9f64297e180";
+  sha512.doc = "e9041765db618541c6aa9a4142b047f4096bc335a9601186a26860d6b594d6b6125c0f5392fb6dae9a296392fb565ba0a8c288155e8d99e12bc12bec0bedf52d";
+  hasRunfiles = true;
+};
+"europecv" = {
+  stripPrefix = 0;
+  sha512.run = "474af2851e52b5b4b385ca9014bb6868494a6eb06d86d9ba7ad62cb5defca53c094a0bc3a91d62cc8d9af656adf8f8e8efd577fb6f3d940c134842d1c6a172e2";
+  sha512.doc = "fa6a2a0d208b7e4d87e0927d858719f522dc8ea8ff57e9db391372138b2d20447e5835662712bd81520868a0155c5209f6336a7ab3a14ff811b3da04ce11662b";
+  hasRunfiles = true;
+};
+"eurosym" = {
+  stripPrefix = 0;
+  sha512.run = "9624b0a91a8491d4178051e8e8264e506725ace0eb1b4e4ee9f3cf38cf7868d392f0f4fae92947c74182a6cdf7d4cfb46319a269e4e3aac686ecf4a4cd2f7b3d";
+  sha512.doc = "db226757ec82087da3e67fe69b5e9c2429e3cc2addb126bc528dda8bc421a4e9da2a367e64f119eb109e8898409a4e50177b81f9035ed1e0672bb902836bb61f";
+  hasRunfiles = true;
+  version = "1.4-subrfix";
+};
+"euxm" = {
+  stripPrefix = 0;
+  sha512.run = "93f4eb11247f8576241a57b247dc2dec20405146a0749d54bb8631875256fd262ac06968901a8682f4d530ae68602af366fdc3ceddbf0fd1042ab95f259c3775";
+  hasRunfiles = true;
+};
+"everyhook" = {
+  stripPrefix = 0;
+  sha512.run = "56547973d184de21ff5d6d3eaf1baf9b8cdbcf93307c31fbbcf658350ef0d441509ce359266ea6f962ef9b40b1680b47e4c14a822aa043ab8174ab0610df1665";
+  sha512.doc = "331def0138dac385605b3ea1d88af6d5d1ae29bac696b76f41cdcfd070d50915eb3371a14a894b1e59bf35d55eb7dabecfe18e89f0bfbe6f028ce5fedfe1bbc2";
+  sha512.source = "ba0d5e3f2661c4b5ba765b7509675f301dffa3fb3d9f158b3c3255d84b3a5620ec4d883a9c2f116319e6c70784eb5efa4a1cac270d1a299b23bd6fdcbaf60b2b";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"everypage" = {
+  stripPrefix = 0;
+  sha512.run = "6f4779a2a0e0d2352b702652a583f6ea7da71865196894b88b630e1105e56dd5ea525cbd4eccdebe8dfa347716c192fa098d5eb8501f305109b337b266e7ec2d";
+  sha512.doc = "185bb6b87896f43472d8c902cfda976139d8b1df09c5eff75e8f579314867dc05b6c215f0dcb09a3438f7279c6579ffc8f92fa7fc682fce18ddf7f080e0c6e37";
+  sha512.source = "ca04b157d255502abde15994da4690b99e4c6d015c86704d179001b3412e9c9170a040216657ef5afb174aafc34d4c0501b51155b84164b17401843837a9483c";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"exam" = {
+  stripPrefix = 0;
+  sha512.run = "77c488cbfa6960df070c9898d699492826751ab5cee72a4e1f51e839b6842bce910542d02c42f3a87125f4f3ea25b496092c26d0eb698a50bcebd8408efffeab";
+  sha512.doc = "7b225aee549267ad87b5e900570e5dde87e2e77d84a42f33043d760331cc71415f76148cd30245612ca8e566930531c07b71508f50867b4cb2c6ada659f4a2e8";
+  hasRunfiles = true;
+  version = "2.603";
+};
+"exam-n" = {
+  stripPrefix = 0;
+  sha512.run = "6cb28928125f1164fcf2a78980345373a094fc1a2f2f22756c8f9b27da05b88b6011f000508354b4d73aafa09a2a877bd0e6913a274518b471380074762be392";
+  sha512.doc = "502d6fd1073f4ce68477e6be652dd131bb0a74818df2b1fc6b0a97aafeb946de1d0fe3fe90ed5843bd63305c528031acde37697cfd756c9839b083f9926a363c";
+  sha512.source = "7241ce6d5e83e75142d8f3df652af4eaed554a7a2c93ee3b2868bb8c5918cfd950c7fa1413464604607b120eefed14fece4f801b08a6f0fbbded59f29e8ba620";
+  hasRunfiles = true;
+  version = "1.1.4";
+};
+"exam-randomizechoices" = {
+  stripPrefix = 0;
+  sha512.run = "0cb93637dda7a7813f8f89dba62db03cb1c1c6da5ce5dae596a14321fab8c46a5c6d67432c31855b66b37b0eb9086d23b5bf2881bf8fa41e410ed7a4724d84bc";
+  sha512.doc = "74daa43aa020898bf2a969e5f6fa09aea190209dd71eab222dde2b30cf2f6e12936b454a62b328aee59f6c3ae13bf5f7005ec3aba66766ade77672f74bb3ee8b";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"examdesign" = {
+  stripPrefix = 0;
+  sha512.run = "bf052063b16056faed35007a5e1b6e2bf4f116388b2698c24c7c00ff257fde4f0225f138af6c011f99d051085169b51357c8661647f28be07a7f6dfd330ac10c";
+  sha512.doc = "1870e3732933e0d69f52eff2c403011b09814938083b91bb428c776ef50140e1b43713837e018b09e8340dd5e47811aa1050bb9f90b350aa341216edb00c2a9b";
+  sha512.source = "8f755df76be154c4a2a1aa6d2814774a0b9398d0b64f7a59cd865e92e805dc3bfc84026a18dc449a2ebd6cb6215097e351037430de19960e957f314ae724e244";
+  hasRunfiles = true;
+  version = "1.101";
+};
+"example" = {
+  stripPrefix = 0;
+  sha512.run = "2f790c1bb8934e1127ba64c61ccf0d9ed503c01cb8975c114257a2179db7d88b4c969475b0e357d17785fcf7e42487e991e176df3dd7a1be5db4cdf87abb9cad";
+  hasRunfiles = true;
+};
+"examplep" = {
+  stripPrefix = 0;
+  sha512.run = "1e28a283a2d6d2ebc0bf7acea39bbc97c459defd6115e125c6b9482f880f59ac5eadd715d034b78f5690806345311946bdf6122db9b41e2da9e31d730f2fa82f";
+  sha512.doc = "f72f9893173263dab5436911b2efd5143a52dc43b24b470fbc315c69eaca0d326cc36e5254eb3f93f734a3240371e9aa2462c0c016659088014ee5a63cef756f";
+  hasRunfiles = true;
+  version = "0.04";
+};
+"exceltex" = {
+  sha512.run = "ef8495b4ef6937af022951044652ea1fb1dcd3f65961408e84a52f9053db8f4fde6703f18833ee9cd002bc058f01813ddf765f575200211563d6e16a956d3613";
+  sha512.doc = "a6c4ae60f2922af773f67494c30407b5b6ead39def9253b4710940774e619496a3c242f7e9bcc8733fc733234679bb2b01c6f4571e30dca16c8eb15ad8d6d01c";
+  hasRunfiles = true;
+  version = "0.5.1";
+};
+"excludeonly" = {
+  stripPrefix = 0;
+  sha512.run = "b83426d7ff334e64f8a5566fa905f1c03478ff68da5b74b85dfd6c872db7a63454f627db4e6bea48f8048da0d84bd80b269cf5cd3a5b487484dcd8f2e21c5058";
+  sha512.doc = "11f1a4e7b0bfeb5728ab632756fb612b784e7a8b46e68c2e5cb3681928811d394ac0b7f508e7c655945209b1e75837d4ec1a69bcaa6b0ac8d45d66302b4bcb13";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"exercise" = {
+  stripPrefix = 0;
+  sha512.run = "8de2044404690716d781a3b081181d9a14596487213762bb1ef426a0951dc18b1097a4cd8255bc7094d9d5e7f874e68181849c173a4932e7d07c46e14d1609b1";
+  sha512.doc = "3059c297ecb8a990bac32e1e52bcd6fe39e6958c96c145ad70b937ba89284a6f447a84e2f144d31aefa1c446331c7ce80ccba926e288d7ade917c7aa68095076";
+  sha512.source = "fa76e8b16def4f53a968c897e12e37707c054c3a964f14ee9654bae4e7285a3d300d62f0a79ba7fd80b2fa15e9a334bf38f3a744f0c0f6c32659853bc9b57855";
+  hasRunfiles = true;
+  version = "1.6";
+};
+"exercisebank" = {
+  stripPrefix = 0;
+  sha512.run = "6398abee37218c1c4b0e21f7dcdc82b49985888c8e5cc4702fbe20942471cfcdb8bb37c66edf2c6764d9a38dcc932b8584f65bec8dcf75ba11c738705a71048e";
+  sha512.doc = "d7b262b7a9ae3a45b69112e2924be8ec7cb2c13a8b973056e849cc5a0f4c82f85d4b5887a3286360b38c3459bc99ea9d917cd1084d6abf1ffc343d7ab522fed8";
+  hasRunfiles = true;
+  version = "0.3.0";
+};
+"exercisepoints" = {
+  stripPrefix = 0;
+  sha512.run = "cc706842f62ffd982dfde7f503f226c7f7050099b581dbef6e5e7f85269e3110a738232f1a99752b353a54a91ae5ef145697ff36ad9df1fb69ce1051bf92858c";
+  sha512.doc = "81493e680086ce4d833e8e9107a056daa4e74e321964f914d8824e25b4dbd6c181b1e10d41ceecf27d18baa53958babf77b0edf4c0234e0b80a8a3f5ae49c348";
+  hasRunfiles = true;
+  version = "1.2.3";
+};
+"exercises" = {
+  stripPrefix = 0;
+  sha512.run = "064b8df6847af6e8464989de7070ce1d5282a050ed89016ba9954767c6f175882ee11dfc4c92791f68f972cb7dfefc801696a10a650b7113e93dfd9a9fc1adba";
+  sha512.doc = "7108d509ed012d1560bf19205e45a2fcd09311c50e84ea4dcd87cf17b8c70d4e5496653d97cb303d32783fe9f1d29a17a273a7ac6808ec384b7972dc33106c87";
+  sha512.source = "eb788aaea48e5f9fed1aa8a9ef47792bb24734c5309b74e3554ca22618c9f35ddcfc1b5496299783584310ec7ecc406d8679c7d90a936bbca5122ca665bc6098";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"exframe" = {
+  stripPrefix = 0;
+  sha512.run = "36fc2c125586780b798225fd4f3bd5d089236b7d0b19fadaa92911fbc47e9bd47cb5d6e6f31e42262c72d9ac1053999ba41a4dd23054abfa43283b7a0e957b75";
+  sha512.doc = "9697e6388b7a1c1ab96ab945d5da34249425c460230b9508d9c3386f3c2ce0d969a2dbc20cec96a3390feb3e81bbd71ea13646af3982f266dc73031d3663ce6f";
+  sha512.source = "b8348107fd677a900e4a8f3f5557d9b2fd6cf154359a1ed991934f74db331725ba1c790b99b9f291dd975873050f5cb5dc42f9a094839b8d482c08e9c80a2dc1";
+  hasRunfiles = true;
+  version = "3.3";
+};
+"exp-testopt" = {
+  stripPrefix = 0;
+  sha512.run = "26b5af9bdd06a3bbd231b1b55c4ae8929efa06655656747b804425e802fa7d07355e510ac673590cef235cceaf88fc03e1493f4bee9c99ce2a32c32b9a3f9aca";
+  sha512.doc = "f4f7cda5cc8b3f8900cb12989834e5b1702f751248f58fe65a8d65ab69eb2a4118002212eefb609e251d4437579e635173366beb471e32d07d45c5c645ca506c";
+  sha512.source = "a41951719a9a4bc391216d3c5ed796b0f285a1a7049fa3617bae689127cffd32590ebd3212bf24b221bd7214128aaf564fa62e0a511f98f03961c16a39bc6fb9";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"expdlist" = {
+  stripPrefix = 0;
+  sha512.run = "fc0f0473faea3d8ffe917e654909374bef6b6d7e41d14c32acb3ee822748c6f37d1f5ab562b4bbfe35dde983f12cd9e1469bd2061aff32e3f79de66e6b3a6c32";
+  sha512.doc = "624bbc4ce685589e7e6393cd991b6305d8a20419b4538f2e1728f9ffc004ef4d724831515b77a607093bf45b8cefefe3e6a352403ddcb543b690b314fb469ce4";
+  sha512.source = "6713de4d316d2be62338ac94d465393a9e20e16eb2a088ca9086f2e9ad0052f799e47d89768e38fb04a38ed07800cfe9cc505b578b517c2f4cadbe520ee1bda3";
+  hasRunfiles = true;
+  version = "2.4";
+};
+"expex" = {
+  stripPrefix = 0;
+  sha512.run = "b447a885d65a000f0b79b4c9b050bc89bb32b71426a29261d282fad72428fcf64dc6c660d9142114094bba32040c8e723190e553260c3899a1c1923ebb9f765e";
+  sha512.doc = "b0dce6401ccdef7fbfebbcdef9d68f073058f935eabc95fa45619f4d4d85e6b53e15091d845593255c000c3e672dabadb1cef024b2b0c79765f4f6a231de86e6";
+  hasRunfiles = true;
+  version = "5.1b";
+};
+"export" = {
+  stripPrefix = 0;
+  sha512.run = "04b5eac3e263fd692a1f4796ddccf7c5f41398075c9b15e65a0712cc83dcd85a65ae4506a882249e09c9ceea37f973be3398a0c31d2590e0c3e57549f07e9116";
+  sha512.doc = "169236b497ce09d685c71bd21eb6c35ac260d5978c03f074371386062ce8219bac1e501878ba13b60677c423904ed11b37d8e018adae573d135a1e1cbfdb84a4";
+  sha512.source = "844f1bb688d389fba93a7350b884b4cd5298ed6974d48218cd1cd2c863b9193e6d4d177f3ca1e905dfaa028f626fff4af4b9912ab9bf3eabd2bd9f4ce5d5da7d";
+  hasRunfiles = true;
+  version = "1.8";
+};
+"expressg" = {
+  stripPrefix = 0;
+  sha512.run = "d380b7ca2efad2cdafc3ea6f2265452a85035765a221dd5cfeb33a03859dfca0e4cd01219995870c8943657d2525e25d32bf7e5b9fe8aa9afa8d17c1ac4703df";
+  sha512.doc = "9287376ba5aa36088b4a99455b727c0f60648d50421ebf2fd125542f208f490c5b57af256bf2b704f01a3e00e85e6023c69cb6dad529fb7521ee8cde74ae9559";
+  sha512.source = "4fc193835f6b283ebeb0906d847d54e99e5026ae53929b8855d78208212bc4ce6133359191830803298c1dfd07bcf7eb1e163fa12f8bf799a9eba381e11f7f82";
+  hasRunfiles = true;
+  version = "1.5";
+};
+"exsheets" = {
+  stripPrefix = 0;
+  sha512.run = "c1263842d06916762306b0ead03cfec31535f40d41a0abe504366d0a762850f683b10563d47d149e89ddd75c18c3da7687a19b0a5bbe2b628acac1ed891a8285";
+  sha512.doc = "fbb9dc0826789f6c19734b0b50925d035f3b55a5402dce6ced4cf6881c032d784d5f219b222170961a5e1563b2dd8a5c64e7bcdd434ca61dec94a857451250a8";
+  hasRunfiles = true;
+  version = "0.21k";
+};
+"exsol" = {
+  stripPrefix = 0;
+  sha512.run = "ef7e031334a27a522f54c5ba5adee0fbfdb4cfefca6e8c1d4f67c8bc542c82bab6ee89d35f8ba8e65ed0b17107fd164c00ed416c64160991b59693f5b567b502";
+  sha512.doc = "b6c5dd47fba5d14560a2d2341f1d17b17eda0ce16a6198ec589f47143ab46fa71808aa6a40a43613cf906542ed9df7d164fb2c7fe5785bf414076934932c63b5";
+  sha512.source = "1fa45d6d526e94e0574d15396a6d191d6b00bba30ef996aa999bf2b77a5426263f1e0a94303c07ff139bf44b0a07f419c19ac1c854c32b02e4c43c397c8a85a3";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"extarrows" = {
+  stripPrefix = 0;
+  sha512.run = "c5ec26369801ba653899a6c67c41a173842f7f5283d1279d512104cc9cfd04707fdd0313a9fde03672f03a7bf1f2c46f376aa961b211b4bc0ff2641d34eb3b8d";
+  sha512.doc = "be17974ce5f9361bbfd8ffdff55ab39cb1de6aa5701c4582586ea43cde45854bcc8c65f5c4c7a9a1eaa311c24132294ed02f36998905ed7f872c81a022d4d6ec";
+  hasRunfiles = true;
+  version = "1.0b";
+};
+"exteps" = {
+  stripPrefix = 0;
+  sha512.run = "1991bc0b471276ca3db68a8ba7611becc4557de4335a321b5c3e92c1fefbe34dc0488ab44850835b5ceb1684ce429e7756fb86d885e2da2177e0d9081797aa0c";
+  sha512.doc = "aac2e20a993818576f9e1efb153e9285b17b48827a1547a0c1033f22fa1a52f84ede214b4322ce4c6ddff69b8736f214f27370b3f1c006ea6e5fe2ab9fd64304";
+  hasRunfiles = true;
+  version = "0.41";
+};
+"extpfeil" = {
+  stripPrefix = 0;
+  sha512.run = "5cfe0172ad420c3ca53c57be33fc56b205ba05a11876e4d14c6d86387788c73370bc0708bee46e43a02f10ce9db4b3611b4ee337ace44fe8fbcb2ca82f88b2f7";
+  sha512.doc = "8c2983b2e777e21e95d6ce1b9b4732491ad8a931205adb071877bf966fbbdc4306b88b35db87db4c3fa0bc52cfd333f721de2e1e7d233ba3c91d192a3574171a";
+  sha512.source = "6dfefa85e111b39bd46b2f39ae52e94a053569fbb0b263bdf02996bcb122913cbb999ed6c060e00a12a88e0ea9b187fe2e33a990bd75fd1f6f78082d8859071a";
+  hasRunfiles = true;
+  version = "0.4";
+};
+"extract" = {
+  stripPrefix = 0;
+  sha512.run = "32889da48868c2335866bb5c229728f9a37dcfe552830ca03ad3b704d1f7a471ee120de2ffed07bcf50797f7e34dd6fce53c77f1b63d15071888171d44cc938e";
+  sha512.doc = "64fd270a61f5e5f39442a56bb7a20606854b45a995b9a455604139df8006a1b198ae332669de09c1baa5dee5ccdf59e5989d21c17376a764a096f535ceff3f48";
+  sha512.source = "c94663034b4069bb47f611b761f08df36e2e69705d491ad0405d826d81d07f0862dd2a7963cc1bfb0f071ca4ac56aedc96debdfbbb35b097a6a49f863ac3de2a";
+  hasRunfiles = true;
+  version = "1.9a";
+};
+"extsizes" = {
+  stripPrefix = 0;
+  sha512.run = "5b000d25ff594af2895408f0d83eeb0e7d6dd5604c53d5acd835898197e44fb88ed2469039489b75b45678f28182dc88a0af56ed1b1730be2ce41e6e81f13b7c";
+  sha512.doc = "9bfa898f7eab416beaee2938902fc0f3a5ddcf1ce972f30d18a683756fb53bc8f66ef1220bd3bbe6ca6a473959a67c55c18a7996eb095ef301da8b594f42d3ae";
+  hasRunfiles = true;
+  version = "1.4a";
+};
+"facsimile" = {
+  stripPrefix = 0;
+  sha512.run = "3a179a3abcc33bd0f48bf267338c8a7dc0186f7eed097af74cfd8a936956952fb50876dea447839738842fad34c724c057f577d427a82fd82f85c7e8ab80c8ab";
+  sha512.doc = "36da402d7b15601ad768aa1e07f356812ddf0a09b30d19c13bfecaeac847537caa3be31036cb80441370b6c046dee24b13aa3e04f339476e9ecd18cf09c8c9cf";
+  sha512.source = "ad8f90796cdeefe11e6c12e254c4571f2be57f5cbeca8b68e301d857a0ef8e52fbb1e32eb2d39e6d6b8c7ea19af58f6087c67c9bcee58e84a32038f18bde223b";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"factura" = {
+  stripPrefix = 0;
+  sha512.run = "e4ae9c0019ac296416497fbc8d30bc981a1987cb7b4fc7ccc21512fa2ecf11da0b4057775dac37e3421261faa8c76b9354725a2c514d1fc514cd7815571d2004";
+  sha512.doc = "0b091d2d4da4cb858ab13514fdda12babe9bddbffe466fe4d40c7acf828e31b9aedd6efb3eedd8895e7e12691a0e1e2bbe1f9bc8a21f3c18cb3fb1d455a8a3c9";
+  sha512.source = "52202822a438daafcfaed256f1091a5056b8c9e58273013bad555228bbcef02df9da3f3074f0cf5aaeb7349aaec64515bd1eb598ba1463927d7dc1c0a860afb9";
+  hasRunfiles = true;
+  version = "3.70";
+};
+"facture" = {
+  stripPrefix = 0;
+  sha512.run = "6657931eb2c0a134c53cd9271109552d4b8848247198fee9aa8d9010ff2faa4909416484dec8809d7ddc58b4202f9e2a97c5b97279e5432a1e928f91d7cde71a";
+  sha512.doc = "a96e30b15f1fa827fa4dafd3594e8b98ee8c17c23056926d82243955971225d5a4bdf41a1a2a5b19049619c2eabc1b8529db70adce17bc126c0e1e3be7ecb2df";
+  sha512.source = "2612d792d95e3e22727e3e7ac4c4932e1f25c3788ebf6b4eb1be76727c52694a65c378f13ce917f9cec3975468f79f7a6d62adf4f125c57e6b644076d22e7bce";
+  hasRunfiles = true;
+  version = "1.2.2";
+};
+"facture-belge-simple-sans-tva" = {
+  stripPrefix = 0;
+  sha512.run = "90d1ed96793b0463f14fffcef020ae58673df10bf511756387eb38bb2659ae3e362f52d898996410447bb5304f3950325fdaa25841ac4351b4584da951da2b4e";
+  sha512.doc = "f111fd7a81812aa0d65c4143751bf0bc331f8de248876f81c5517301d8a9743cf2e091de6180e3ec1d74a646ec539b65f0f1d8068ad1eb5e6638cbb783b4f420";
+  hasRunfiles = true;
+  version = "2.1";
+};
+"faktor" = {
+  stripPrefix = 0;
+  sha512.run = "5c598fbb40d7b37ee5b66bc1bfa8b0b2a0b45f7e22c992e6d0c85ed952a79a120803d41f9b4a13bcbbd6424c555c8b9ba6adb4eb79d1056fbf759008f9b741af";
+  sha512.doc = "57934606287afaf1471f1207af5d0e97533a504aa83324069154e88e70f10779d2eb19ed2a9e177c5a4b2cce4203b576272fd2513d989d4ee276330305597034";
+  sha512.source = "01f22e60260621a41e4efd6681b6fa226f7461f47348a79dbd75f214d606c6af2fa54d904792e653d1accc22298385d4cd658c204e653e4320e2932d742da28e";
+  hasRunfiles = true;
+  version = "0.1b";
+};
+"fancybox" = {
+  stripPrefix = 0;
+  sha512.run = "752e26abee96dd2bbf77b30a6d98d48a1673632d5601d28bba5799e845a015357b96302f3f1d8977f0458003d3456df4694884a05ccb6124b76ca8f7fc84fcbf";
+  sha512.doc = "2c3e0466198d392af57b2bda16f80589a9aa9db992272980a2e7ab9d7d1842d7e8f2980003b3b09648cfe0b9a1977562534ca54fae120bd7e4d950d25a83c0c2";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"fancyhandout" = {
+  stripPrefix = 0;
+  sha512.run = "0091703483cab573f9c9202603d31e310baafe932f929ad852c23d2ca97f21681637bb3ae34fd3d916f3e50f553b42ab1682b437f5a63b67c6dc4b7b7f202c80";
+  sha512.doc = "be4c7b2caf2e85ec192f3aded87309ee2361fbb7e8fd1225f8f98f96446251aacd69e04e306473d06e14c8a8b686dd7a1c54cb0311bc4138fc9c34fa2d528ddf";
+  hasRunfiles = true;
+};
+"fancyhdr" = {
+  stripPrefix = 0;
+  sha512.run = "da99c0def1655589988fcebf627dcb35ab1a3f7ef481f141ee91045f81138cc02f849f4879507afdbd89e631460e5104d49bf0be6a640f4c7e9532acbc952454";
+  sha512.doc = "a54bd1e4c0835e1d3790ceb9c50ac63766df45fb3d807b74222465c116fd103d65bd09a8e0f4cd20941422734cc508fcca9f86be3ee0cc2beb4927b9a2149849";
+  sha512.source = "aad6a82c734ba3a1a571ac67f38851808e42c600884b22b64f463f7f4b41f83a85342845ffdd70244236dbe1cb013ad77f28c1897c6c28edc16590ad61d79510";
+  hasRunfiles = true;
+  version = "3.10";
+};
+"fancyhdr-it" = {
+  stripPrefix = 0;
+  sha512.run = "6899f3c11ed4a8f7476fe954166ea7576446b670d0b22737766927fcd29eb24e6143ff3031b974856562a7ff55e68f208164729618a4d28d28b856919f2a666b";
+  sha512.doc = "cda5ff0581545e4eca9787b27dddcdad226b5dc9a630773b13073e9248b7b30b985fa5f5fc1bc5380e5a0d96f06c666d4e7e73168afbc2fa4ed0dd202967dafa";
+};
+"fancylabel" = {
+  stripPrefix = 0;
+  sha512.run = "950455301b0bf3ea3be0817a45c4e7453ba95c8afd397c1cf9ebf559f160e2828f414f0dca4647a80481f6e8daa0902e24692469023c21ba844afe1edda60b2f";
+  sha512.doc = "3a05f2b388eb2a22a0b48b4761b3964c7b0c616eaf0c8adcbd4f375a3dd059b3d3b0831e754842bc084123fff7a12f59c87c5c5b362739c062f36a215dca2ca3";
+  sha512.source = "5d0ae7fd455b679221c1877a5a8fe58da76d3db96de7bb6eaba24c50ef9a0bbc3252858276e4f0c6b81161f65e985911ab1608bca21418335e23189a2ddac425";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"fancynum" = {
+  stripPrefix = 0;
+  sha512.run = "93e1b88ca722b4169a572285443fad53b66ac59a3c0b6465aad54bd8d416046bfd79897db3d8f318f9d6e004c958b94bbcab16b1183d66197e1078840934689c";
+  sha512.doc = "4be390bfd7562e0c94dc19fad3e0f34e52db393878290773517d6d7951e428cd3d0dccf5f47f6f03e5f0b380ebb386c8d89373e8c8e4cbd16463a9cdd2f2417f";
+  sha512.source = "8f2f569fbb2a6ddaf371814e26b251286f8046e8a1e923f18e67b165c26c69cd09b46e39dae5fe00a427dbe4f95172680973b3eda7be16c60cbdfe6daf37710c";
+  hasRunfiles = true;
+  version = "0.92";
+};
+"fancypar" = {
+  stripPrefix = 0;
+  sha512.run = "18a4989c979c7d0b1a5c303b4663484e920962a5090e229d7b75ac5678860fedbc95df530fda954a3a2602a740f7afdae3e41f6a3e07405d77263045a6c62a1f";
+  sha512.doc = "98cb690d9096a73523bfedc6a2ea35414e34043d5eef3d73d337c3d4feef3bb98303a22a1933eab53838e78cffc8ca1ee36bc00fdc13a50213849d87fa92c553";
+  sha512.source = "dbbc831abfc030a45f530ac6e85cdd449cd411a2e5e52dcf80bc20770801c626cdb308012610ef188b22b7e9c4690836a65ad543ec6022c75e02f72415aebebd";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"fancyref" = {
+  stripPrefix = 0;
+  sha512.run = "8f4ea5f16bfdbd06bdbaad76da724a1aad82263f4db2c24cf5f2e9f2db9f2afd9d4004d629098f936e0c2d4dcfa5fba8bd278746b90542f87b547e20abb0bcba";
+  sha512.doc = "2231f5fd45d45cb7b538852c95b90db35fde9b66629d17ec9288de6ecf5339359c17fdc8931019fd4acce61ec2927a0cd494cc7462cab0df13d7660106b6a142";
+  sha512.source = "65de000487a8d317f0d05ff6d35574cf0bca521e4ab029637fd459b34f8640c53fed78bb9a54c21e4f5cc7c03dab221995810057350c46690c948a9e436c74f3";
+  hasRunfiles = true;
+  version = "0.9c";
+};
+"fancyslides" = {
+  stripPrefix = 0;
+  sha512.run = "a0b9ef4ce804b78a60b4c3a25d5d70bb7ec17324d295cfaccb64d166bb1a704bbd2baa5cf6edfed7adff03f48bd3f3e7854e2fbfbbfdc7eb953d567a257a6e46";
+  sha512.doc = "77e1839377ba440d4009f30ae6e58d843ec4b7a1bf7f0d3414700e32c9a01062cd6506cb589039299e7a4fd945f9ee5cd951a62fe9795f822089152ca19f3441";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"fancytabs" = {
+  stripPrefix = 0;
+  sha512.run = "0cd45edda0062f4a0fbc26a0516d7f5b35cb4f8dfd4072830da880369d71d8a4aea6a7d5dd95a0b479ec3128170108f114aa00ef4b0c8324c60ddd214568f5cf";
+  sha512.doc = "0113da627d27fe88c4faa87e1564851344dac2efb75c78facc4da49a8937e2bda8e1f22997a2018b368001c24e721cbf623fc199d03673701a55c7ca45404770";
+  sha512.source = "4a7c92f30414a595cc8c928b181565e3d50614fb4e5a128197bb4a8f90a50cbd9c75ca447bf37c41e9fe3c05d4422d6e3618da63edc51f240dc3e8d55c8d61dd";
+  hasRunfiles = true;
+  version = "1.9";
+};
+"fancytooltips" = {
+  stripPrefix = 0;
+  sha512.run = "e1d7243552cdf65cef1e647472a7f6c1d818c1e862afcf8069768d9beec01e4c250786e2c4c1af4febbdf94f20362110399bee33c7902bb7006de474a0d013e6";
+  sha512.doc = "4bd82e0ae682abd0157f94b5374ecdc6cedeff0af22a5227ab527b725d8710bd7f8c5a38b7380a91ecaaa383824d8b88d182d1edde312492c34728ab6ff2f4e3";
+  sha512.source = "3c6d477873c8fa6560d4188dbad1dbe43a422f08f4bcbdc15b034e0ee7dc5529171d005f48a25e1df6d6e6fbd0f8db5f11c233c515ee70e307cfc31e5f434e24";
+  hasRunfiles = true;
+  version = "1.8";
+};
+"fancyvrb" = {
+  stripPrefix = 0;
+  sha512.run = "334df96a99813a99d36a68cb99b35145048bc478e463373efec5932bfa981eec2eeac910616e6cda2491636961249c947b9daf4b130329696c755076909cf46b";
+  sha512.doc = "45ef859efb1e9f22799686600c1be8a5f2db4acece1f8c0bb4e1bcd37ce5a83d708ea027f0c0b60da7bbb2c8add47ce70ef6f53f68bf0810886066230072c9d2";
+  hasRunfiles = true;
+  version = "3.2a";
+};
+"fandol" = {
+  stripPrefix = 0;
+  sha512.run = "309b19d6bff9d3e009610d698a73ba191da70cabd57157f274dfca7583a9e9b31fc30ea52b2b2ab3386be7290a680f8eb47dc92381c3da8251b01d8c6a65c3ff";
+  sha512.doc = "d74e78a1c863d3865ec4b21a4c762bf6e2c30a8656fe0ec830d1e56b9fcb48861f316ccf8d8641e7c674e25f1ac2292d10ff2127315275347096ad325828d7e5";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"fascicules" = {
+  stripPrefix = 0;
+  sha512.run = "5ca661dea7cad6094d66d0a843cf5f19183154f81773db38f9a13795a5b9d8646e9f0b471bbd741e5f25cd424f199b3a18d1257a7e8d07e0d812a04ae202ca24";
+  sha512.doc = "02d72ccdec87334da2c10d5a57b004357e36c8fc1aad33783e44992019fe3dcc8b8d6442d63870b4806c3dd080c3518bf94ae110531ac65947584301a11b4b51";
+  sha512.source = "c129da364d22c605feba74d4e93d7eb48c8b5a3ef77c60d2f930fa2d3c8f757bbf3fd8a5aa8f3afc688057d80d86acb5b74d2d9b422d387bc075e7e7122150d8";
+  hasRunfiles = true;
+  version = "1";
+};
+"fast-diagram" = {
+  stripPrefix = 0;
+  sha512.run = "cedc8305ba0a7b1d22274d869629a1872a80a4001b443c8baa93e44198a5dd88e39c16c28bb5edf9fedf4f8f2f68c6964f009cbf6feb21c7c14974c4b598acbb";
+  sha512.doc = "cd8e3edf882fc16b5757f59d16ed1a479e437eba36c783cd86cdfb9cb81f8b30e8b95a522ef6fe4b6e22b4b0bf6637e72bff734f7771034cfaf85df935e4a003";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"fbb" = {
+  stripPrefix = 0;
+  sha512.run = "eebe9b977296dc02938c13cb9a160612adafc00dbf200fdebaad5eb1efe8c41eafd6102e40b7be2e734fceb7c92cf84730182bc2743c5c68924b00a5769ad172";
+  sha512.doc = "480f1df4a1b1ad29f009d70f56e96ca3ea3e76ca913a86cc4b75850211dd4f92e3e43fd9ce832ebba98aae194111ed340af2f530f00edd37e4a63016dc7bc215";
+  hasRunfiles = true;
+  version = "1.14";
+};
+"fbithesis" = {
+  stripPrefix = 0;
+  sha512.run = "3e593e312ac8efbbdd294e6a00ec020678dcb12259ae778ddaed4d43a800aa19ba16f8eb15b5122ab22f44c5e23c77e4fe733c7772929ef55589d387985db694";
+  sha512.doc = "92d0ae3382aa71260f6ed204f6bce1bcbac26985f41789e00c5d3186dcd448bd169b7641fa40d34cf87c556ca10573b0d8cd4235aaea8a0d1533dc40c71b3779";
+  sha512.source = "a931b41de1feb5b0a78bc40c20bafebeb529a8a8b351344020032641ecf9673168328dc271228130ff22ea17190cf021b1dbe01635d7cf77984f69861c84c02d";
+  hasRunfiles = true;
+  version = "1.2m";
+};
+"fbox" = {
+  stripPrefix = 0;
+  sha512.run = "1216117fdb03433d2986eaa8b277718304d5cd67b0d7944c7a4712c27a68e68979a3ae44d563a847b01bbbb0d5dd0d7da8feafa7699e27e8a336077cb96cfa43";
+  sha512.doc = "d2cf24e58efb78c8680cd3a8cbedf2517bce05025745bcae80dd7ccb23f127f3262cca75bf8c4f9b33100253194525f1538e6340c145a38c473a2afe5737148b";
+  hasRunfiles = true;
+  version = "0.01";
+};
+"fbs" = {
+  stripPrefix = 0;
+  sha512.run = "2d5bce7890fd8e087e035e60064bf134d8ac7ca2646f7b846df8fca7c594843c2778d0ad1752ffefed40283153194b5da97156e866bb4b8bd10b14c8ee3f2c4d";
+  hasRunfiles = true;
+};
+"fc" = {
+  stripPrefix = 0;
+  sha512.run = "12bb408f7ba4774d943aa954bd3d2558a329d383a65cd4780f6c5bdc39f51b943f01d87ad203aea3b02768dc0b9ab42f681175c18a1e1dd901255aae05156558";
+  sha512.doc = "a7495a0d6bd394811ff22438a42afe3c5109633da7c606a732f4c5746cc4162fa1c86ac3774aa7754e9b07c499f3519423d4b6fb212ecae156b0b8e8f848d914";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"fcavtex" = {
+  stripPrefix = 0;
+  sha512.run = "db440d7310805a7f3d918996e577a07c5d8dff72e6d667f00c1ffe5d88e3bcb689e794837609d9a0760530e923f9a28d3e5c052cad4c38e23ae03454e0ec26c4";
+  sha512.doc = "2060c70b6a926aae23c145f11c7c6e255f684f925bf5447ee98fdd6f6290d64fc5a92ccf8cbf85e0c6f0d6fee869a2d947e3df8726fffa4a5d2c87c217beef59";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"fcltxdoc" = {
+  stripPrefix = 0;
+  sha512.run = "c14db194a73247122e589024824a53125ff10e15f8bec2475530aa41e78d74993f73474ff9b3899bc499c0cd8dd3e1ea034ea821d233c2a512f8c4d4d06d095c";
+  sha512.doc = "4aa6aed9c5b4ddaa63eb2aa7e529da03dcfc57723a6cb40cbbfc729636e459f4df1e292bdcd20093595cc3ea154787fda41abb4f6f46db2a7331626f181f47d0";
+  sha512.source = "6b16053cf7941063e4f08a249d1b4dcb61127eb0f22938353b17b959e7a9cb78d7953b81346f25a6e49f4a7c8bc602b3f820c3b9acd3b84215796b3ef1a63550";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"fcolumn" = {
+  stripPrefix = 0;
+  sha512.run = "13128f25e12c914bf25c45c87a75bad814eab519059c8a478162cd4fc678972ed8e24800042e87866197174044eaf9f90d3cd3a8eca62f33400e3fd2294922c8";
+  sha512.doc = "ae0645744e26bbf1a940ba1339256b7d718f4df819ad04f5f52301a26d445cbce4a1ae4bfa2fe6d13bb81ed31e94839d87a251a7429305d396a56ea113df37bb";
+  sha512.source = "47b78b21332aeba11b08ed6f4eaf781b182c224450b508a48a80ca7f93ffb43c4cc818739d3793ca16674b29fbfeeed320247170c63a4aa321f6054610fe782b";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"fdsymbol" = {
+  stripPrefix = 0;
+  sha512.run = "37f716e9d540d7742f53cd38155141d763d3f8509d1aa1f3cff53ff33c45537c44dc68c9608558021868de3072302d7ac84909db05e8b25813c23ea01c87edcb";
+  sha512.doc = "7d1f3fd153bc17e65a99ce6a38c8992b2172c1d0b85254fcc7e926b9539928ad403809b8af4355abb1e93196b4e4d5461b587c8ad94d04cca7785c8a334b4ac1";
+  sha512.source = "d30403e01b2a33372ce49477ed81fcfcc505b50b1c0eb511dc360d86ec3793ff2ac0c8964448bf2525bec1bc5bb3792ea9729679e2ddd8215948c65bfd44afd7";
+  hasRunfiles = true;
+  version = "0.8";
+};
+"fduthesis" = {
+  stripPrefix = 0;
+  sha512.run = "2c33af9559603c08ee844cc0dd6dcb8a6c215f0b0c7cd25435b64b1ad6c83dec608c601ce16efdfbeda890258bb36df8eb549bf43bca21bd778e003cd637507c";
+  sha512.doc = "bc3d2c383233846631e5042742a08b5ca05d0cbe68fad908065310f00c50e9732af0b912eecf01496615d221a1ea6fa5f3d9be91c9533b97fdd642c47d6d8c5d";
+  sha512.source = "4f048791cfdfa5eb1dec273618111f0d8e685c9a638bb4aa2edc1e6ffcd11097aeaa85d9130be4ae8136c14277f85a22580c42fdde9a8f3602cdc57eb4beefdc";
+  hasRunfiles = true;
+  version = "0.7d";
+};
+"featpost" = {
+  stripPrefix = 0;
+  sha512.run = "9d7c35499df5c8c8efe8ea51d88c4cd9ddc6bd5238ec527d842aaa9ce42c30bb1d73c667f5aca22f385d3725c7443f043a2b63cd337a7f6d5b5d5810ea34bf64";
+  sha512.doc = "e4eefb43d63c6522c3080a76b4df3a369932bc9e2f868ed0143d62fd2365bb74e6891705b287d19b4ca4b2560b0573d6ff9a0e5cf2a3da2e4b21482cd6cdd0b9";
+  hasRunfiles = true;
+  version = "0.8.8";
+};
+"fei" = {
+  stripPrefix = 0;
+  sha512.run = "ece490df465a83203acbbf0a1002a801534e628fdcaeac7c54536a8e33a633d41fbb26e25ca8cc19677799a2be1f89080f3e9472f4d9bff10c6260ce53692844";
+  sha512.doc = "b1f97d16b0652a5e19144f652a3e30bd45486ad5de8dd287832a73345539ec6c2a509b1851b5ea6033e8d967c9fd2c997652163510a8554750641a61037d5bf7";
+  sha512.source = "1e9f70e9fe26fb0f5915fa9e9aa1bb5debde0f43a75abe64d9490de3d857f167dc19c9f215376fba3db7b1a9d2ff4a67e4c2d0708149b122afaae0e785c32a27";
+  hasRunfiles = true;
+  version = "4.6";
+};
+"fenixpar" = {
+  stripPrefix = 0;
+  sha512.run = "1b09294b430bb9ab6a4eae11549500b224514e55bb99329a4ee3d9d72ab906128063537302f672a772c02ff4372d46649656a88c4a303a9301976fc7a804387e";
+  sha512.doc = "6ee02d615438e99df82f939a8104097e43802b00af2a0e7be56f329061722cfc7df0edf84c82ac73754d63a703533bd6d5b88b6e648bedbc47be712ff86ec5c8";
+  hasRunfiles = true;
+  version = "0.92";
+};
+"fetamont" = {
+  stripPrefix = 0;
+  sha512.run = "20c5c83119d70a94e66aeec0bbb9a0494525deaf9addb9b91d8d5595397ab5a1195eb9d72056a5fd1c3ca490aef66b43558f5c5b86688e7d164360a697c331a2";
+  sha512.doc = "16cfb520cf8b3030d546e1c7f7cd41772fc9d16ea55db6920a50945a7aa3034050d873d3d5da05c108ee303dc1c77217c8a1f014c2e9beaf36d932e33aefeb93";
+  sha512.source = "de4a25f0a86f29d10fd1cf799ac6c8efc58633a7ba0c48bb33716c46e6b0e1c9d5be6ee4e8e4955739ddb324270e44d6fa658c360d03123c18cc275ba6abff06";
+  hasRunfiles = true;
+};
+"fetchcls" = {
+  stripPrefix = 0;
+  sha512.run = "6cd8e2016f7ff344aa06587fbfeb4e498d1b2e76d9a6ff64f167dad71c4ce6ae867d791660f50e80b6f2e59a9f2fff4c4c9b7c1cdf84cdbbec5113081b24a25a";
+  sha512.doc = "ebf9aa0150b06a0b4674e7be076fa5ae4b2ba4542aa28e1b9d4320ea0152a5cc9cbbf926d713f877e74ea948d6132fc36898647e4790c67aab651502c4e5d57f";
+  sha512.source = "067385746ed2cdba4501038cbc4565bef431f2e35e9069fe883c0de8669cbf6f59d8233ff2f561e8590fe8b32a7613a195104f89774bdae4ddd63d65deb3123a";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"feupphdteses" = {
+  stripPrefix = 0;
+  sha512.run = "b4d4285b33f314720cd07eea903bb2fc6092f96033f75d4b06cf315fd24d1a34722aa73db4cb6410a847e1d23a131ae329f8ebe75fca15dcaffb99097768f55e";
+  sha512.doc = "d87c0a7722f62a599bcc63f7ecfea190c64d82a4a4a1ba21d18c69866f80ec77a527a82cb94b0d081002073f5faab95119c6902e8f8f2c10d815ca2d206b1d4c";
+  hasRunfiles = true;
+  version = "4.0";
+};
+"feyn" = {
+  stripPrefix = 0;
+  sha512.run = "56e7d5b875db6eb6e5ad2b07d5696fa4fc6cea7d0f0f9d691bdec0fb90f16bbcac0c9f20f8f16bde20eabf98f72fbbd75831af1191b229cd7acca60bb2edda28";
+  sha512.doc = "df4454efa6f9130fac5ee2986abdd8eacb42063930ee194b65d94a1e1a90460c4116fd62da232f01f94fad63d9eaef627655aedadaaf034f910ebb97b40a7792";
+  sha512.source = "fbfa44afe7f1ae10566d736cadd02a3d9f562b19d25b2f23b1dc27fefc77d6b7af550e7161bba7c62d63f3c75d8b704dfdc3befadef9ad42ed42e42000ab4557";
+  hasRunfiles = true;
+  version = "0.4.1";
+};
+"feynmf" = {
+  stripPrefix = 0;
+  sha512.run = "d4eb87e3f086f2d39c87eba057fc490ce5d39e9c5ae39aa1c04ee8c3be9c4a188ef123f860fe74d31e0e9e9182909c39df3434ddcc618632723f00627f66397f";
+  sha512.doc = "933edaceff112f7442f7c662fda43f343b0e7e41f65aae4f1a45bfd2de18c1e4bda505a235eebc4daf2451846dab376449242217ec803f2932a4a1584038f4ee";
+  sha512.source = "bdc4dbbc449c911c0d516b10da18c1d541645ec57fd95c163d571a039c70ad46e6111717ffc86c802123c272509c85ce1d71d90f49578b2e228a9229f4d40f02";
+  hasRunfiles = true;
+  version = "1.08";
+};
+"feynmp-auto" = {
+  stripPrefix = 0;
+  sha512.run = "64ca275292b12847d823322ced9dbad615a34089c8cbe43262e676b34db205ed56509f641e18e949523bd252ed1ea73eeb5f019e2cd052274c02b1df67860a25";
+  sha512.doc = "3dd88f5af739013ace4fd8eea70ce247b997e887c0f7067040ff9bf4e0300126aff53845ecefafa7bb52dfc4d05d181a1e96847e6a534c718c5a7447231539ba";
+  sha512.source = "ea29f32f9f1c628d63b81c958f7c8064e884ba1764953dd62fbe5d90506547846f52fe378f813a09090ef6991c9b7d2905095b04fdc0e26aea4c8cbcb5e2b2b1";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"ffslides" = {
+  stripPrefix = 0;
+  sha512.run = "393903c180f2fd554178c909bf9a4c060707d8f2fac44022b4811526c7b505a0354afed77f8ae0fa3fbcebed3918a6b46f9e81206be78d7ed6b1c959cd3473a2";
+  sha512.doc = "4a8e176b7bce3d54464a30497e41d5a899905a0029199710aedca7234612092f0b2e265a465084536434c9b8c7f45eec3f2ac3df5eef66cecfdae5cdae36c798";
+  hasRunfiles = true;
+};
+"fge" = {
+  stripPrefix = 0;
+  sha512.run = "0336a91c06bf658c1bf139d716952ac2ad420e307fb8b525e53cd4a488e0cff536c89ff06ceb8788d1e54b96a9fe4b24d94beb6913c1be8683e359a4d00dc4f6";
+  sha512.doc = "4f18f7bc1c8000664753e6f0615f7dd1d0f71bf51aeee6860fc2181536f6f1fc37b21e83b0c5b6c151e1012a02ec97d3d5ff6d132a5f6986e94bd173f40f994c";
+  sha512.source = "4eebdfffd7fbfeb7539543719df1e50564df6ba815f37a503fc98420cfca5c6c2a0a0a0f732656bc288009e9bd0fd1ad7fb0a4625748496575179c3a7015e7bd";
+  hasRunfiles = true;
+  version = "1.25";
+};
+"fgruler" = {
+  stripPrefix = 0;
+  sha512.run = "d189eafb4b2f7788d42614f87684bb3cc36d8e022c9c98f8f7f44babd5f95d3462ff25d2d9ab541384d35ad4daa39b09e28dadae1fbd0f7fa25d0f8ae217c34e";
+  sha512.doc = "16e5f5be432e338788ea78c5e41091eac616a3ad779c3c40bff723fda2646d5205599857f0e23f1b2774fb56a2ac795c61babe21cc4de5ecc2fadb7b6d33eb2d";
+  sha512.source = "789c6383611f55e5efa878efc1ba229794a888a26bb4174fe263c5cb2ea678e67422a47520410bf83b90ebc32a4c9584a7f24bb66f4175d6b71ff0ccabdb3de0";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"fibeamer" = {
+  stripPrefix = 0;
+  sha512.run = "566fad32f04b81c95b85f65415acd86e729802a3b638c217054a2b5c0432deeae87213a4ac4a71e35f0113c23b1e98e0cf7fe047b2bcb4f9e00b929d804a230a";
+  sha512.doc = "a70d38f8b6e1f68f9261a99144d6fbdbbd4a883d4b60f3ddaa01524710e0405bb61599716fa80fd99e9b40e37dde9dbf3ac6fdbaa48a8f2ff4da2534973c42e4";
+  sha512.source = "51947801fc6c4c8e4098fe38bc6638bcf328884cc86b25e7beca8525db1c8888145b1852a3113d651f5595b84a84738adc5516e65677ea8c31c195dc9ab0c3e5";
+  hasRunfiles = true;
+  version = "1.1.7";
+};
+"fifinddo-info" = {
+  stripPrefix = 0;
+  sha512.run = "86767390bc9946b8f8d47dae0334d7cfc21ac2b064b00ab70732f7ca3f50d875a35dbb0e477ef1c014452fc14c177a1c5c6b96ee334c99bbc2bb49eee9ffe6b9";
+  sha512.doc = "e6635f5cc989bfa0da9b2b0cbd5c3719aa793552f4c1adbc1ee218a78b6b116d2c2046b04254e3294834e63901ece9489b8c86421afd3c58aeb8615b5859ee92";
+  sha512.source = "f01f2453c206cc7fefaafd1269c77b43bf1f24a8fef034ebdc40ac2be5c4ef553d2096f4168e7933e63aa816b1397c74fe21d725f0a6bc3d8187c751145a44a7";
+  version = "1.1b";
+};
+"fifo-stack" = {
+  stripPrefix = 0;
+  sha512.run = "4121e3cefed7ffe80bfaa8b054ba0825ab0fc2b4073a845386de4db3650b4d68c48a4f7378ffcfc4a221b21ad30ac6e199920e7d8c44f503b35c14cf4c001462";
+  sha512.doc = "220d9b2796c20251ae568d1dc5a7eee1fad5cf6aff26a2b94c1a2c9dd6d853dfc9c25377ec8c3d6edfc43f5b4cf645c459754c5d6a642506fa7779cf79f1a901";
+  sha512.source = "3ab0e67acb7895c527be3cee1ab0fe7ba03397410f9970dc7c286418ae6e785d8051b82add959ff7d0596d6983ae6514f70c631672fce5c66bdb6542a3b7d777";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"fig4latex" = {
+  sha512.run = "3f01676ea85d64e09376da4481794e1537b9e19c0ff0bac77c022b10b5d49c39d789de6e4f0356b4ea4b23326f9ef320f4b08035bc04a827951cbf44ed7c6228";
+  sha512.doc = "c05d3c08b916785b765694e68b8f7cd96c3c359325e8f84166102beb4caeada7490ed24ad0b4f52a66cb822000f8b4d75d1013b93055898e88e82d7f23d5095a";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"figbas" = {
+  stripPrefix = 0;
+  sha512.run = "2fdc1114b03123c35eccd6b617310c714f37015620551538458a1a49b1e9a583aa55b3cb661f204bb9168cee0a7325b066d64315a15a94daa01e43d05bbb2561";
+  sha512.doc = "7dc8140b3b545d2683c471e2e2907a58e2c995f23acea26d763da8989c3288940dcc154ffc0f81ea99169ce574bf90543e94f86bf8217996b7c83474a300806e";
+  hasRunfiles = true;
+  version = "1.0.3";
+};
+"figbib" = {
+  stripPrefix = 0;
+  sha512.run = "1632b372b06d8ef3cc363d6b05e70b8a493f357fb947ca1b8fbb7752d7ffc4ec09904e747a3e9b91b61e5d094c96eee954d533d1b286b372aa57244ec2abc63d";
+  sha512.doc = "ba42f6cc811fc9e00c41bb6fb410a57a2efe759a0fd0621cd83801963d0ed138dc66a1a245a4b7256cb056f3fe71e883a8fa84d19dda785ba24825e85edfa044";
+  hasRunfiles = true;
+};
+"figflow" = {
+  stripPrefix = 0;
+  sha512.run = "f75517b5c43119d33edf46fbe124523cacf0d7d837cdf66af702ba563392a96323b266bece1ec9e7f87df34d684a87ab38f9ddafab6c3d069dca8ee22c3bf25a";
+  sha512.doc = "c972bfb356731aa119e8cdf1292a3bcbfc08a74453feb7e509a5cc519f62ae6c7e6b0c087973549b9d860b97ff1a3bae9cfd1166c4ac6a74553ca6c0f463694d";
+  hasRunfiles = true;
+};
+"figsize" = {
+  stripPrefix = 0;
+  sha512.run = "3c7523b05d04363c57c1ba75a39d9698b1648ab6a858be15112b6f47c052742033e3ed16752a9b9ef3854ab93f547f0841c32f1cc68fb9d4538fc02a7bb19ad6";
+  sha512.doc = "598f631423a97e189c21e117a7da23c95bbf4dc3b616e62fc6738674848fc46be4d7dd43832ff58ef834c0fdbe35d8923ba9729d5c48f90b0431a22bf86f79d5";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"filecontents" = {
+  stripPrefix = 0;
+  sha512.run = "b40bf2e4eea194783dded4f00dc24f1cea26a854e96b57995b69354a70c1e7ba9ef0e64542c2b524ad59d9b12fb1accf93ee28b4c7e735279c0bbeb915b6c991";
+  sha512.doc = "0ebf1990c005dbf92b7ef73ccae0cf1ad47ca896f0805a5a8291a15c6764e2259ae03fe14d9c713484ea258764b706881051b4001589715bc36ee17ce5bdee23";
+  sha512.source = "e0238c49fcdda4a6d5ced2e52a7f5113996fed3bf7d8d2143d499870b06a1d8381a2b0796c2708570e554c1ffbd7f12c6c69b52980b1e2b7b91b2e8d2112e42a";
+  hasRunfiles = true;
+  version = "1.5";
+};
+"filecontentsdef" = {
+  stripPrefix = 0;
+  sha512.run = "63b399a5e21d2d4946c195f380a0d5f269f8c978c0b504cda80c0796604dfcb66df38ca79d31078efa03c7475967bc0ebfb856e933bce6b21d12836368780e2a";
+  sha512.doc = "26e7ca9971a0683325b62e2feeeb0db6ecdd3a732f07ae93515f2300ed58e97a44ff8a7504d194119c1e27d1d9bc4f367f29c17458c0e7f0b6a0a61fe18ea0ca";
+  sha512.source = "f6e822a28e074fece05b911f0bf9d262e2b925c2a73559764e1eb5131d9081b48ace0ead5f46bb250bf648eac204eb1d5d7b362be508f58b40a50f70577de534";
+  hasRunfiles = true;
+  version = "1.5";
+};
+"filedate" = {
+  stripPrefix = 0;
+  sha512.run = "5e2789c065459e82f073599c4d5f04c626fedae7e02c8dc58d6595d81ec8281c9c362592eee9547369b7a8e9cd2aed1ec526d69a8ae22f35771d5494e3109032";
+  sha512.doc = "cfc2eb596e6b6d17015ab2ca061da39e673376d6f4c526dc045c8d2514fa8372f1a853a97425b4bcb9eb0bdc522c6b482a9bc3da9f56f8a4e0c22e4970a40575";
+  sha512.source = "cc2a12c8f3b9e7391d6b57eec6c0f486137524022d89d3d3e7c037ab468a4858b253e8baa1cc8eeb731510c5e221b7cbe9a9f22a972023b3d1fe2f975e4751dc";
+  hasRunfiles = true;
+};
+"filehook" = {
+  stripPrefix = 0;
+  sha512.run = "cecba772dd7c5059750891151bac94cf1ca37512623363a3b42be449c47f29faac5746ac937fb43ea9a54e6e5f8f54087ceada240d3f1fbb33564c56d14720de";
+  sha512.doc = "dbd41905d906934608fcf83901b946ba811aa37463c8d0ef42679abb1a19d273298ca9399964e2c16b76b9451ceba89c220956133bf9edf0a83be1b9aec019f8";
+  sha512.source = "65bb2fdba8b6288189d6940d27caef6c25a999efb3df6ac673441cfeace02934fc7121e4a4df27cd2fbf7b3f52619e9d8399d2fe47cdc26afeac59b6cb9c4820";
+  hasRunfiles = true;
+  version = "0.6";
+};
+"fileinfo" = {
+  stripPrefix = 0;
+  sha512.run = "2e5914e32af48db731aa83c3e51e6d9128dc969891bce21e1e2f859cab79130c9f5caa0f591765fa8a9b48c38eed8d19305f4be598430ab1e2cb3276b6faf191";
+  sha512.doc = "03b4ecbd21ec39d98949f2e8ece7e48bd539a75051350d1a9ea19e3d32ecd620c0f1a5dc454e626237534114d0430e2ad7c175e9c1b27ba15c78a35aeca3e3b9";
+  sha512.source = "6875ecef667da4476def344901db38f38e988d2345c2afff42fb812c01c356df8bf1dd3c8c9a563a883fcb9e22e85b8813bbf50905d711004a439767ac0f7227";
+  hasRunfiles = true;
+  version = "0.81a";
+};
+"filemod" = {
+  stripPrefix = 0;
+  sha512.run = "4ec27d16dc551d42f9ff326d20f78c48d73e7324af65f6ccb9e662dcd399394c631d9a742aef8a2efc235dfd769a04d22b4ba37eb8a2cd06631cba298540c08b";
+  sha512.doc = "88c1d8c61ed1759617c9cec7cecbb28459dd5e06f139ba3ca2f98d7b6357a15fc89dd90daf26e5f4d17f33fe9673a8c17363fb757ecb71d9e530f0e153ec486e";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"finbib" = {
+  stripPrefix = 0;
+  sha512.run = "14f08cdc92a2d6d511c112c480efb0112d45c199023e89c9314740c2b9b83598bc9f8917ce616bb2493671f408f946ada3de4535136eff48b7bbf72e7436f912";
+  hasRunfiles = true;
+};
+"findhyph" = {
+  sha512.run = "aea6305dc0d9b31367638078a7958933468e761ef4cf47a1c44d9fd5ab2e25f7af22273c4631946a90edc9b51947c2e56b3d4b74c8c59f0a79250c2edf5bc137";
+  sha512.doc = "97f3fa22fe490d21bc9e5ce5ea0b23ff25ab9afd9c5dbf6e8d78b24fd306ddc132c5ba7ca7ea7e3d7aaeb48993c7968b0c02ae0b765416a939d84b53171f4179";
+  hasRunfiles = true;
+  version = "3.4";
+};
+"fink" = {
+  stripPrefix = 0;
+  sha512.run = "837a470970c8376e1d699b28954cf2ac6ed849c2f96a4c17ced56ebf142297c36d3f856f9cbf4db920ae33f491738f7891433c5c6627565a48fb5391b663634f";
+  sha512.doc = "7b1d9d1c62766082030d7632bd91c65328d1bf3e8bb6abe4ed64ec5188d9f38d3b2a99695f32c2bf04e2fcd634819926ba923eeea915186eb9fe96bcb43954ca";
+  sha512.source = "e37a35a9c292ad3f213c560505ca6c446eda397771c18bb1fa2b64df70cd667b58ca03b6f821aa0a9d6bedb3910b66c411349f70dfe3eb5ca2f1fbdb9f925a35";
+  hasRunfiles = true;
+  version = "2.2.1";
+};
+"finstrut" = {
+  stripPrefix = 0;
+  sha512.run = "8b360a3426056b61e58e577cc68ba9e2f55b63a3b4a0a2eb76ebee53e9ff327da9235e9da5cbb85e3cf369cd48354c00a79cd46110ba4adb4b64192b7ff7b603";
+  sha512.doc = "8cc27d82f7125b5ee82585f97385924737406e45d9739ec9cd57b76736e902a588c7258628bdcc4841e3e23f359a4d8ad22a31ed6f821f1d1c59798f4e8f3d56";
+  sha512.source = "c06f1b10815444ed51b13d83258e1f3d246da65a581a0946e7a05a9c8432e78ae395efe18ff6c0a84db8fdf6016ab8dbcc6f3242e72936f46e522d1074ff1b87";
+  hasRunfiles = true;
+  version = "0.5";
+};
+"fira" = {
+  stripPrefix = 0;
+  sha512.run = "3fdea4c886ccde87500e792a7508d5e7923d7a58f7f536b047ca537728f42c1ad44ffebb9b80869f1e30206e7f17ff5e694bd72b9d4c1a68eefcd01ec0b6d6ab";
+  sha512.doc = "b54acf3f963fcfbc58eec3fb1ba058724638939d6d0f63b69108c431e6014fc46313e7d2a11f2d31e1bf12041d6d85f426f2b0533a3669f3bed14ecffbb3ce3a";
+  hasRunfiles = true;
+  version = "4.3";
+};
+"firamath" = {
+  stripPrefix = 0;
+  sha512.run = "0a2e603e05302bc9dff0ac983b9f05e62cf085a89056eceb8c82aa8fe1d94b40fd8be48ab30a59cbd5a48cfea4f9da0e0060adc73d4cf76af5c03e0f3162560a";
+  sha512.doc = "f00a37d702ed8e38a841d308e51efee4c6b474a56dd4ccb9c1b395386da6e0de16be9cfce9acc7486bf5a000e0553bc1a47aeb189b4e7829db4bdd6c0739dfc1";
+  hasRunfiles = true;
+  version = "0.3.2";
+};
+"firamath-otf" = {
+  stripPrefix = 0;
+  sha512.run = "dbbb13d184e2a407bcbc2681bc9c5ff0e83017141792e956013254dcc50815f5b913bb2e40d6c09421883db774e9ce5e5ed17f6602ee902f485069fbd570936e";
+  sha512.doc = "699e10d44b1e36505e872070c2799e1191e995ca6ae26058e7d069c96500a9c0914614750f6af076abd3a30b281409613a846c314a64bef047b3e313b0a4cc97";
+  hasRunfiles = true;
+  version = "0.02a";
+};
+"first-latex-doc" = {
+  stripPrefix = 0;
+  sha512.run = "39641224689a1d45d59b5643e5037599d03df3ecbe95090d565778758d334bddf832e867a25c1688adbee1f99eea23b3ed21fd6729fb3d4e50f1503537c9a400";
+  sha512.doc = "497080fdad8195bdc43bef476f9e678b49d83829f10a6653c9443d327cb0da8505623e941cd3038349b6307ee37a65ce1a3d3eb48e4c6262f9d636d10d96e17b";
+};
+"fitbox" = {
+  stripPrefix = 0;
+  sha512.run = "5244567062493fcb5300048be6786f1ac48c72c363220b894a2695e78646f461584e189f227d04f55e9127a66ab966dc04cbd762fd08277774fe1c0fcc7d3c96";
+  sha512.doc = "71d77dd1879a2b9b20f9c4934af8bd696de567b5c0187e7a5bccc9e225fec5793bff6bc670ce0bbe1065cb67de73f518942ae48aa0a27e46c2aa47dcad6856e8";
+  sha512.source = "406ae04d838114e9cb7205c9e704b95e8ea8c4747827bb82fbc53891ca552042e5742f7e524361f2a797a77d8b7286dca3512ce7099ec8fa23101668d4bad5b2";
+  hasRunfiles = true;
+  version = "1.02";
+};
+"fithesis" = {
+  stripPrefix = 0;
+  sha512.run = "f21aa6a1866f0a4d21eb8ea1e1463e421fcc72c75b72f4a79efabeb65da21b633ff913cbf99eebc71232a9e020d2bb7743f520863563f7eaf9763bbf6e9ad29c";
+  sha512.doc = "ba5c0e75760119d9423cef3d26eac3f4b5621c80e760ef026aeef68589b5a724b0c7837088652e4e369fc48850a3d78c0e86f1f2b1149118a17739b5b9c0809b";
+  sha512.source = "33f8a8bdec9faa2b8a57d874c869d52e6b612c9d24da4ac701355c1ac681644388d516ee7358a0805ffb04ba6842d7c1eea533c17b4b14fd3c87acfee180a17f";
+  hasRunfiles = true;
+  version = "0.3.50";
+};
+"fix2col" = {
+  stripPrefix = 0;
+  sha512.run = "b3f096a64fcea6c6b2864d4e8a86733afb852f3decae4704e6c275c41e1295622f1eb1c8db0e0d33a29e369a9b757495477c9ebcf82ae0003c4316967c03f0dc";
+  sha512.doc = "302ffac957bc37305fc5b6f458c4b7dcb06b65408131bcf64c0132638a110813eb6c748270ead340f3d864b927aa7bbfe0a16c3722cbd8334b1d8ba8ca72e7d3";
+  sha512.source = "af17350815d50b2f880cfdc9cdefe457e541041e311e886a87fe45e53e7e48ed12ad83c27b6cddb0b3f719469d6c0e379a68860d13892879cb89678f51607e97";
+  hasRunfiles = true;
+  version = "0.04";
+};
+"fixcmex" = {
+  stripPrefix = 0;
+  sha512.run = "fc3a1ba6c5516378182373b89b71ddaf22e713c0be959e8d5afa1cd57c50f363e68669049750f286142499961c56f6bacd60c63b0211d5e6ba01d7f25d58f759";
+  sha512.doc = "e6f65b38a4baddf6c1840b0bb18464b6c94f97163672b67a87c693af19030bc3ab2db7607646d73f8f684e08258906da2380e7b1637ba85f80c49cf7d5045bc5";
+  sha512.source = "2967a93b0d041ff868b4f894a2b9e1d59d445e601af982d576a8ddcaacb00d4688eccdfd56d51beffd19c90903fb15fbcfdb0cba08983e78636757daba176cc5";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"fixfoot" = {
+  stripPrefix = 0;
+  sha512.run = "52c25b4d5bb9e34fe3f8d2b122e68352ad572ff9ecf1011f3e9fbd67319d0781a48ca08ab03ad3201f1d1d2bd6d4e35fa3818e695a741a8ab440ce81f7724039";
+  sha512.doc = "bfe0e39165be8f9a56e2cbd4b91c0b7b7448d0b9d8a4a0b62d6c0d45e542a9964af3d34233ec777b69f0666a0945513a8475629f0b084f72a0b349682e8ad6f4";
+  hasRunfiles = true;
+  version = "0.3a";
+};
+"fixjfm" = {
+  stripPrefix = 0;
+  sha512.run = "5ed8db53c1757c4ab6f14e763f9e58a76e5f8c594c30c1d1fd4d7c9a49d65da90d72650c88375806997d0f268b1a75215bf6969f45e45ef3a2127c422415bf16";
+  sha512.doc = "5de4126f1f5215fc8132e0449048bd66dc73d8a5cff460d7873205f3cb55c2f8069870d9ffc794d5c173a52acccb5bdbe45b34189fbdd40509bfcdeed804153c";
+  hasRunfiles = true;
+  version = "0.8";
+};
+"fixlatvian" = {
+  stripPrefix = 0;
+  sha512.run = "48d39745498c187d23c62191d7da6341ecc13d6c43ac97deebf453046e78a26d221b5c7b7ed22aa8909476a754e877de26c20391bccb5cddb2db1fa7b238d643";
+  sha512.doc = "07dc4fa87b8564c3ff3144936ae4374e0bc7cf37a5a3e4b5d0724681859a41d30d714e96742253bb9a269116dd32d2ab0c1e5e1965242e88ea12fdcd224ace31";
+  sha512.source = "04903bf5ba774034c0b3dbec7c7d37ca5a802b3d104670d259667f8a965da26e7e954ce9272e14b6bab058a7e6a4b8ad42b710e22f85f2d0320a7827b2c7e173";
+  hasRunfiles = true;
+  version = "1a";
+};
+"fixltxhyph" = {
+  stripPrefix = 0;
+  sha512.run = "df41497da718b157073b6ad2a4b9cea3f9ee0a0824698f47d4441b76261efb21271f1605f69b1c0de8a99e3e636587a25b4efdb4d578683ef0c89d7f849d2c8e";
+  sha512.doc = "37d6b9903a56d33577c8aaabd40de592bd78dc6b2f5a2c82457f6d5b499d1d6f9a9bdaff29bb9f9511365d32e160f92c85c6c0d93ed065fdd1688aaeae9ab246";
+  sha512.source = "321e52dbc69bceea16f03d5d280ae10f497278876cdf3b7f64cbfb6f31993c18afc5bf4c38f424c9a84ffa55b235b73b4daf7d68dfd115c31dc3a237a6b64eac";
+  hasRunfiles = true;
+  version = "0.4";
+};
+"fixme" = {
+  stripPrefix = 0;
+  sha512.run = "fbfc3a79dbaed48f79dfd59efba58eb3d6c4e3c3f6716b0910cc0ee7e6b0913f345f4a05bcbc5d9943437d072cf3008615ab573725c4e7b4d7d716bd90dd8d07";
+  sha512.doc = "78f64f31246acc6c153c0f0ec618a3a1c473ea3a5cce47af57ee65603d2064b64a3a506cd18332f1686b41768dcfdb10a9f9cc000dbe5cb476c8c4c61283dae9";
+  sha512.source = "f5c1f64772f76f43fc64e1395804f155587d677356bdebb6bc2e3bf6961b38004463e8e83b2c3b5406e32f329c2fc84083e0f0db90875fa55319f85cfe4223c5";
+  hasRunfiles = true;
+  version = "4.5";
+};
+"fixmetodonotes" = {
+  stripPrefix = 0;
+  sha512.run = "d327d19ac0e9041da98458e9147b3d1a9c9182bfe5c893c03ab9ef42b9c8044314f4024503327594bef337c1af6aad0b4f2046ea2d6a433947c6c45ebdf8838b";
+  sha512.doc = "7d7f8b049feb8e70c5d1ab0c71147f1f398b098f9c961267c3e90dc5e9ea9a8317361a0dacd8fe581e17cd85669bd39e83a1391641d353b01265a6195af33714";
+  sha512.source = "1a4028aca8ae5fd53dd8068d17a5331ad9011d72d668f9ca8242862599edf7709e84a8848bad35fafd790ec756c972488ac8db53a240426dc5dc95dfe18385fb";
+  hasRunfiles = true;
+  version = "0.2.2";
+};
+"fixpdfmag" = {
+  stripPrefix = 0;
+  sha512.run = "733995ec82df92bea5a674fc25a3a6af2102739c3c73eeed7c9f40cd54bc4c5d65cafb35366b70641ff0661dc83700071054f7af274487474c3893ce5a44c9ad";
+  hasRunfiles = true;
+};
+"fiziko" = {
+  stripPrefix = 0;
+  sha512.run = "785f99a52193acc630e5fb00cc2db9e16795f42059d65054b0fa07f8081b95e66a245fd05c8b3ee49a69d91a17e7447d10c39863612e44e2632afd5fd0165e38";
+  sha512.doc = "e9aafff476605082dd4116cda573c8f20311659276ccc7dc3477a24024d59604b4b8f724effc853d7d7832493658fb4f8b83302921544ba2c986266317f5a895";
+  hasRunfiles = true;
+  version = "0.1.3";
+};
+"fjodor" = {
+  stripPrefix = 0;
+  sha512.run = "26186ec669370270049d45f81b873b444d829c11e9127702533bc09036795ddbd5b6bb43ad54b91662ab9206d56211f1db08b99045c2693c0826f2ec531958c8";
+  sha512.doc = "3115f5294219a3db2a87d702081b69a27c36065345b4c2bb8fdc4d63f3d20c542c81f6d7d70cedad094297b358b83be4141b69615293ed2530e7e1224a5796a6";
+  hasRunfiles = true;
+};
+"flabels" = {
+  stripPrefix = 0;
+  sha512.run = "b05d66f1181eb9d7eb80636b69ea3af7a29ae7011f6888438cf80a7fa6fde44666f9fa7ee71620055f6882e73b6f5e211a2a65ca003d903cb26cc4f9571257d9";
+  sha512.doc = "cf9b774ef4e1336a123d48b3797d8122c5b9128324a9f6c0c1497194e8d3a3d9ee46a5a58470074c0dbc02f8c0aaeb1da3b4d5683ba9faf6e479a6790bc599cf";
+  sha512.source = "26b2a3e7fbdfe3523cad96880dc6b168cf633a115f6b8d794709514013a79eb2ab6d1545769b74236248b73c3b08d5b52e02fdac9cdb420e3a4f1ac5cad55d32";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"flacards" = {
+  stripPrefix = 0;
+  sha512.run = "45cf4fc3f4678a5242873f80ff1ab328e7675107d14052be90308d94d44a931ba8b2cf3eec67e7456a21168aba168fe848979a8d45ef07bfc62613ad9174488d";
+  sha512.doc = "087d2c5500b5ab51280bf3f57362f00723856b041f520d41849d21043859bebc106ff9af33dcbf044aabd838f68d1165f74645360247de2c3feb9a8493ecc441";
+  hasRunfiles = true;
+  version = "0.1.1b";
+};
+"flagderiv" = {
+  stripPrefix = 0;
+  sha512.run = "a7618ffc60c548fb98a581324901af09defd9226a655163d967e251b090b6ea74d91ec10bbe1e5d685a83d147818ecbf8b66d84c972cacaf3e270baf39293200";
+  sha512.doc = "8c9731aec45eb594b95e1c89a1967f169bf8394664977059af0fd77aa40ebf3769200925382694e221a32ced470161f505420539b5e3f7f00be4688e308ff54a";
+  sha512.source = "c81038f892b37dc2759251cc14d8bfe11d0aff056b95204cfe1a4434ef1bdc6fb3c035edca0e01282ca019193871dd6044a8b9b64f3b6051c24f041700f2b71e";
+  hasRunfiles = true;
+  version = "0.10";
+};
+"flashcards" = {
+  stripPrefix = 0;
+  sha512.run = "ea1d530296c2b3e11645bbf09b4776394cf1725db5f30f23297818fa68b5a8d1d860d5873755d1be010c8d7a3d01567d878f3a12490fced35f6f825034f1c9f6";
+  sha512.doc = "f42cef1b5a093861818d03f2df9cc5029546a1bb9b01a4349b815fa26d7320bbb9d596adceadd0583dfee7bf7bf8a011c8296ec06058717a61ddce10baf19e53";
+  sha512.source = "c9d90cbb0c0fa854a6d187ffafb20cefad24549083c166a5088dfa05c3240869996bd16097ddf74adcdd658ab953d39021c896eda94dd7ad426e5bd972d78c73";
+  hasRunfiles = true;
+  version = "1.0.1";
+};
+"flashmovie" = {
+  stripPrefix = 0;
+  sha512.run = "99ae914e1fa627f462be84f7bed923c638bf493ca183f010bdeb5d607ab00abaff7a1fe3d0f8613e6fb9df7cd5047b99e99a5da18470df25e7507259a441e188";
+  sha512.doc = "016331e7328732f5549487f8b2edbeabc9548eb81201584d3d3f7e0ff41a9a962761a8af867dbee8951bf4e99ea4eeecec7e9230868c23abc95260f288ca7958";
+  hasRunfiles = true;
+  version = "0.4";
+};
+"flipbook" = {
+  stripPrefix = 0;
+  sha512.run = "8e3140fb417115ada958bf6dab1a22b39779926b47938bb49cf86499d64ae16d321e6e6bbc8482ee7e6a2d79d8341a227785ecf04c66a15f7e5c0ccaea016d21";
+  sha512.doc = "a5f6aa188e7a0aff29d4e693f0f8e52512838278e12d13c29706c7bd5c1c1c2a8d70beb619195d8572ca5a3920205380d586d02580bc747acb8e3259c79c3fb0";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"flippdf" = {
+  stripPrefix = 0;
+  sha512.run = "8f4de43f2d6310bcf3bfe350a071d43ff4ddf4d21acaebddf59e3fdc62ae562e32006707a6f7f5de1f631f9aeec12edd7cf75332b012e433478d171e149f2c96";
+  sha512.doc = "3b40280c0d142add31bf27dd57cf52ab2d5f4f43637cf1a1a20202b5615b58c52567e53ff2f9875d2d1e73116c227319909d77df1609ed5590b30d2c151f2c63";
+  sha512.source = "359f526185b8d3160cfe2c78c22d36e2df4ed245f574d3ed905b8e0dd95664f57f0efc128130a00d2945c666ffb094eb4333a26c13b56c9917bc0172e31041f0";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"float" = {
+  stripPrefix = 0;
+  sha512.run = "4a5270ca2945915464ba25b7996dfbd4771ca5f477e4bf248183bc340b7051c042d9566908acac881782af74a59154f4163bc7879a21e042e1c31d67237fc6a8";
+  sha512.doc = "6f713c71361c1536bb086e7638b770ffe58e97aa01bd59bbab779f71cb485b9c06322d7d89e7d87cc8f77a0c7f18f4174fd4ec47b62556faa32d82fead0b7377";
+  sha512.source = "9e577ba84dcac612e4105e597ca2385da3dafb39327189caf30e5728b85a380b5a90363b8bf9070a0464aca2130bcf9419d030bd6c39d51f9a17b0a7dd578d5f";
+  hasRunfiles = true;
+  version = "1.3d";
+};
+"floatflt" = {
+  stripPrefix = 0;
+  sha512.run = "1f7de96ac5e82cc4bbfab3fdb665a18d20413cceea097e1407dee2073109ee1b82d7d3ea82c80630d9aaf445f14a8497aee7e3824458dea8b40b270135052ef5";
+  sha512.doc = "7ca1c6ed832bb3d697685cad5575e02b531c0469095468fd40eb3131d89b68dfa0fcb9c882965aa7a9cc9c60292f64bdbf6264d3d990bd697dc27b23a46fae47";
+  sha512.source = "6d243fd8c9a2fb7bbc242ececd19d94916de97fd3583095e8342d8e7c56decdcaceac8038eee9a774950d9261979150035e8c9175175ad7346b0eb1fbea6c5bb";
+  hasRunfiles = true;
+  version = "1.31";
+};
+"floatrow" = {
+  stripPrefix = 0;
+  sha512.run = "c650b5c856bd625ad192901f3c056171f790c549748d5de5675f14cedca5cf32931ece537ce2280c0e4895895a8eff0cf140c3408dffc2b081ebc8c62d2ae1e3";
+  sha512.doc = "b721ebbf59ca3744f1834c130da1a859cd4a98e9f5f977f5d35eef77b420deee303c109439fa70f89757cb9f57114bc74c5d527cafacc1daf2125b975621b525";
+  sha512.source = "033c5c65c9676054e209c64dd065f86631c9765b1582e4042e72bfd247a49602dd97ba4dcd5afa1fe2f7e3d252e4b6ef2ff1a2b00eec3156937fc214d7cf0c3f";
+  hasRunfiles = true;
+  version = "0.3b";
+};
+"flowchart" = {
+  stripPrefix = 0;
+  sha512.run = "9adc1f823378fcfaed58e99727b68389b97bc489ba38995e5e7451608cb712dd7fe02b2686f692328b73d1bc8011131017b8edcebcda5e886f3bb4a0f6aed65a";
+  sha512.doc = "0bbc3f1f56f5adbabca07096804412b33e93669e20af345e57bc9ad42133ab629b9546887599b472dacc8ee43b9c395f8c2e58a288c487e78920be1db5a110aa";
+  sha512.source = "5ea69b98cca431225564482ed0597be71fe45e9ed933f4417059f4cf16401ba82987f90617e57a5428a42d03c0877969579a2b976a2c48d439d0dab7af0a6179";
+  hasRunfiles = true;
+  version = "3.3";
+};
+"flowfram" = {
+  stripPrefix = 0;
+  sha512.run = "880869c22914392c4ade9dddeaffb20d6c6edb6da78d30705d9f6aa1b1352ba2734565fa8c2a6851e81f1107573753748d3f4d208bbbc4c0dc443c066e912719";
+  sha512.doc = "25924c121d2feedc7d815e4510b89f05000eef87efae8039c6566136b7fa92d6d4d9f25f2938363dcce8222d5c824d42894e4863b95e422b7949207a1e1daccf";
+  sha512.source = "993d60da76f1144524f9ece2c5c9ba0eb38526111a7cbaf6bb5c669eea790c1ab9519f4e7dc2bc955c611fadf5771f2d9b6582d753b4cf3b79038b2bdd29837a";
+  hasRunfiles = true;
+  version = "1.17";
+};
+"fltpoint" = {
+  stripPrefix = 0;
+  sha512.run = "8991df799bab2ef9e9e7787123a61752260122ebda5491a22d8bd0aad88810bce93fd78e1fd6f79e58bd274684c2495225513d0f69591cc3e92a052ba51baa67";
+  sha512.doc = "3b175372a197bdb243776d068e797e8f318200e6fb9cffd1ff612cd771a4c53e9e26b36079c2b392caa77b1ab430bf3ad7a6dc235a91f25662904ee702a84508";
+  sha512.source = "da74554dbe3e21061ec4d0405a59f3705c821dacb359736d7c769536143b22ece17114ccba579ec4a0b941d37a6c60753dc8daaa6593b2df17335070c098861f";
+  hasRunfiles = true;
+  version = "1.1b";
+};
+"fmp" = {
+  stripPrefix = 0;
+  sha512.run = "b87a361454199c16e1fbf97bd2b82f8b5569bbd71b7beaa780a6d88357e9262f77c9c3ce17d2ab0ad9b043ed7a1dd721e533c516e1b927f0439e13ced6598a30";
+  sha512.doc = "461ee793dc8156b0ecd6931b9d4c56f368ce4938838b042abae5d6475ca3739c4fe47517168dba742f03c98229376f59f8654a89f1d65ab394c0dd907ac48ba1";
+  sha512.source = "912cfb9e0d4669c5d128ace088190ab4c5f90e371b45f1e399346816d606ef3f96901775a51b5f89a8670abd1b08e159587c9eab4ee6383c12e260d26e070034";
+  hasRunfiles = true;
+};
+"fmtcount" = {
+  stripPrefix = 0;
+  sha512.run = "847b8337131417ef6ae30469b6a8780539511e08eb3d2723df0a444d48a427b18a723e2c6da8d88ee65c04a47d2d8796ae95afea61302d77efab3e3e584ca8c7";
+  sha512.doc = "6fc1958d288d657929d503301e6dc0c68c475ce03f270767fccdc6d2c95a58809704bccee3122763992a24817fb5072844c3a50fef99dd541c0dceaf12a13fc7";
+  sha512.source = "f7cee2dec2189c65500c58d349b6273014c6273ca703f809cc7e5843136d70ada0f4baec6ff139543fdc9d5648f86c81fd4db63102df4240266c52cf19ab3c65";
+  hasRunfiles = true;
+  version = "3.05";
+};
+"fn2end" = {
+  stripPrefix = 0;
+  sha512.run = "6be5c07123cf2470ca88b7c28c068c6dd308824138fd2f645a1a7c04c69fe84953468733ca2994faa42389b5889990941c8e09dc543b66a1589f3cf22df1e017";
+  sha512.doc = "17f0a1d12afd607a26687b675ccc65a150e4ae67785389fe9582a3b05ee383f078bde35f296941ea069323757e1fccd1ae0e76e5e24f3446b4154738c1a45385";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"fnbreak" = {
+  stripPrefix = 0;
+  sha512.run = "794e427d66efeb15920062e86b4a405e36604703f350c4e20f2c237b358eaf08aa22cc923c7995a7db22c117b48555fb92b136edbc94100af8e2046d49eb1fc4";
+  sha512.doc = "0e8778265258304ec1cae1f2d21902ffd6f99af18527b86af064209da7f4c84e8ca6bdcb359000e3f0e9aa75819db1b375f8ae9f0a825291ee03398b6bf345bb";
+  sha512.source = "05b2586aacca96367889e328115780eaf25ae6af3179c71701c35fad2d98aab79730d23a67e165248793c58a9988442bb54bb653697fb81f1832bce847ec8b3c";
+  hasRunfiles = true;
+  version = "1.30";
+};
+"fncychap" = {
+  stripPrefix = 0;
+  sha512.run = "83d74f4bcd8fa90cdf5d0b6e03e9e8e36ab09884998f9955647928ed0a33924735d236a82cc730412edbf54485ec8c357ba3954a264965f67752e397908ba295";
+  sha512.doc = "6a8c6910f0790457c71cd55c8d30d07df81c97f80a8b6b7930c067966c76c47848142cdcb7454c4b63a154c5c653933bf71acbd792c06eafdc496c92e4bc5806";
+  hasRunfiles = true;
+  version = "1.34";
+};
+"fncylab" = {
+  stripPrefix = 0;
+  sha512.run = "47aafab923d6455da7e63eb24e0fefa8b869efa5a04bb301000cb2eb658893927dd9f9aeb8e6919ea29e0caeca235b1883106228f6acddc667117a3ba1136974";
+  sha512.doc = "a987a6efd0964bd5ab5328658e011b5c8da56b404d233c55d96541ec2f37cc72faacd934908c7346041ec8bab3866dd1f171e1c5de5eb528b0f0e80969c0bba6";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"fnpara" = {
+  stripPrefix = 0;
+  sha512.run = "620aafcef4ec7fdaf5cd732551fddbfce53222cb7540dd370f2cda425e1782c907e59868953f50acfff993a8fd8a84d108da7992f1c1565cbfa889a5ca0ef5d0";
+  sha512.doc = "798c7fb03a8fb20695ed63ba1333686d21832a936a74a93ca77c7614346316234b2255b8e0340dd87fd57bc1480f23df24381107fc81c68cd4c0cd594ddf5329";
+  hasRunfiles = true;
+};
+"fnpct" = {
+  stripPrefix = 0;
+  sha512.run = "ab53cf7a616b6de5c5914efce55698dc02687892ae7065cf480eb2be1320592236f4150d520d606cac815b7a9c25c025d47bb981e28ff82ee0b16e7e39daac36";
+  sha512.doc = "ef357a4e65cc4e5ebc1a73a744e3eaf054d9d940573f456171209d5d333a7ae63f572e37cc4e78dbd3a5c0495d450802e8d9e18b6dabd7e973595ff7fbfe726f";
+  hasRunfiles = true;
+  version = "0.5";
+};
+"fnspe" = {
+  stripPrefix = 0;
+  sha512.run = "5e9af6b3b3136f49e49524c7fc85074fd75fff30826fcbb8dad358102e3eee6fa44037b7dde99b6556a063dbe4e819b27ef5a522999eb304f70c2785642478b3";
+  sha512.doc = "733a099cac2d96ddf6593b9e0195b85c8d5e86f6a1b283f011a55acc4a1bb7391bfd4356c6aaa40d9b2c70a7c180886d64162eaa396a5a457fbea491af1b47c1";
+  hasRunfiles = true;
+  version = "1.2a";
+};
+"fntproof" = {
+  stripPrefix = 0;
+  sha512.run = "c1cdc018808a2b9fb5b91c54b55eddf3d517b8dc6062db1ffda3db154efe6f3abb91e61ce90a68743ce411ec614785974b4362f20f03ae398488ac1f816b3ba6";
+  sha512.doc = "cf9e8909ed030b27a57573cc257682da84b7f14c3c3775e17fdc8a2203fe99dda8797ae7b2599dc92e9684140102f6d1ca2147bbb437edcf8eb41ffd28b9a576";
+  hasRunfiles = true;
+};
+"fnumprint" = {
+  stripPrefix = 0;
+  sha512.run = "7f43363ff861fd4f887df68dd6daae6c97940d4cdd60b19563a966dc7c08cb88356a150eab0cb5b91bd4c3d5d47e324dbbfd43cf45872a5738c5f9b70766e047";
+  sha512.doc = "44d6fdf74bf6c231a57b3fad63efa7eb1bdf5b4342cdb38e0d504c4c09190130d37534769e17c3f60bbad668d50aab064bc5c0a1ad99808a6d084dd1921769a9";
+  sha512.source = "3f6465877aa1dbf5ab021e8397725ec83217bd774ee0623e71cf15d746d7d0edeb2f78ce76dfd607568be75b67f4cfa8d3e1ddd29c0ada6d376f7b4fdfad86a9";
+  hasRunfiles = true;
+  version = "1.1a";
+};
+"foekfont" = {
+  stripPrefix = 0;
+  sha512.run = "45342633aec41f2a5fe7213dc418960d76ff196a08b906965e3b68f2c5ed264b3192ea45756133f12662e451fcad11d08232995c0de2493495c40b9b59cef7ea";
+  sha512.doc = "7e1aa7a240d825c014be6af7be5cd7c1bbcbc6e52bd55be36f987b4a25223179bcc4c4d342906c10f9df624536252fe4dc5a45cd3b5ddb63f91e9f4c7401a239";
+  hasRunfiles = true;
+};
+"foilhtml" = {
+  stripPrefix = 0;
+  sha512.run = "80b177c1eb224dbbd086d3b8a0b10b3f0b3434e977c8d71b34a58f76a5a73757148b4e7438a275f1be186df51e36342de132940ebdde9608e7c741664ea200d7";
+  sha512.doc = "a24c9f048f7e1cf187d40f6eb3370cf68f6de80e24f2f72b077d782be5dcd369cf3a7ce9bc7d0a269c285d04cbb543481cf439710037a26a7597164492b277fb";
+  sha512.source = "a6fc97ea007ddddaef17cfb4bf86d75ee34a5525ee48b58b111188cf6a2e6269052c4f90d87ff3aa6157d1523fcca3f8f99471fef108cc8c1e69dffa7c6656ca";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"fonetika" = {
+  stripPrefix = 0;
+  sha512.run = "4db9e50fde60ac69373f5abd151f3e17275f5c492b6855a7f5dd8895650a79cda1feda43398fffebbecdd6f7e032f8935972ef573f79ae1cccc5844dc148352b";
+  sha512.doc = "ac3f0de2a9a5b5052d4ae626b4368f8b1fef419503cab9a88d4bf89db348c1a756555a6cef7aa70bcf733fa032840fe9ae7cfe347fb40bae32b54506e60ccf37";
+  hasRunfiles = true;
+};
+"font-change" = {
+  stripPrefix = 0;
+  sha512.run = "8ec91864d719d20ff66195ec1bab456d772417ff2d4d9ae75ecccafe0da616d1dfdf5b965be489a65eb28130b3672a5b55c33f3254f59c00cf204dcae6fd4eb7";
+  sha512.doc = "75f7e45fb5313d0bc1c333253aba2bcd1d650fb6c0baffce6e5c558b0e7aeaf2e697ea9412860b4049d2685cdee26d19f12d9a28184084ab9df66101b78b0361";
+  hasRunfiles = true;
+  version = "2015.2";
+};
+"font-change-xetex" = {
+  stripPrefix = 0;
+  sha512.run = "17de7c596a774c5c2e115704c2c57385f3fa90bf2dd49362547873453c27700537ab7f1e8a143c2ed49c90efe6aec234d3cf61643228bcba5b51c5ddcbb8bba9";
+  sha512.doc = "138375750a4d493774cbd558c6aa910d04bf3f32337f773438d6bb31e16df3d96af3a6ea12d4940c785c04f98130977750058f7c0ef2425e0d8147b4ab882a64";
+  hasRunfiles = true;
+  version = "2016.1";
+};
+"fontawesome" = {
+  stripPrefix = 0;
+  sha512.run = "e08643104006c9e14c40bb965b4401a8fe296f43e5f39b285cd19d5aa0ed33602cc0eb6ffcc996e1d6e5aaa57dd906903324626ee40facdcb3cedc5216a3deb6";
+  sha512.doc = "bbd18a60db734922ea006ebd00b0c9f90c34907a7b519a08bf007daf01cceaaf6db3b31c3dd8c76e1dac199d4f7c312116f6935b764afb62248b7dcfd92ac78c";
+  hasRunfiles = true;
+  version = "4.6.3.2";
+};
+"fontawesome5" = {
+  stripPrefix = 0;
+  sha512.run = "31f9a5ecf1db94e562764f0e645aa4b7848ea7f940957177ba457cee4fbfb0b829af778fd5ea039d3269591c1f67288193bb17124a0059c286c33e45fda4bec2";
+  sha512.doc = "1901cc7843051cb0bc4b209c57903f380c6d9eb75b09991fd05792f9232b51fde09edb35cd0ed82dbfcd39a8712ac35fb4808eceabd43488579d9b5a5c9817e0";
+  hasRunfiles = true;
+  version = "5.9.0";
+};
+"fontaxes" = {
+  stripPrefix = 0;
+  sha512.run = "69aba944977a676c557d2015aac1058091b96b52a50da52cc733187b96ca02b7a8dedcbfc848198442a5f62c824ee9e977696677f9aae267579f09d2e1637f73";
+  sha512.doc = "f7e0986d9f811b6436ecfc42c943bc2b21b83cb94d8bdbd5daea3ab66fec5bff2033f56ad9509e9e9591b78e68dae1ea76e810bff51469583aba9c8b691898e0";
+  sha512.source = "6c966d9c88e62d772b0a011acd77a81e73ea92130de23d0f676bdbdff1c65bb73f54e3abb03c744e6eb7a48c22f3bf0284c1a8ca1ab0538686586e737526156c";
+  hasRunfiles = true;
+  version = "1.0d";
+};
+"fontbook" = {
+  stripPrefix = 0;
+  sha512.run = "55ee9dc22aefcf91c7fe30f516bfbaea5d0b8c5423cec204bfb208ebfb4b2331ebdd65032eb6f2a9f8958f15fd47433a9c7884f49ff1f3900f1538f9f25d4fe4";
+  sha512.doc = "65eb7d3f6426d3dcb13ac9a0d5b396eb4c03586d9d2b3d842af9ae4ad98119e8721034de499eae485c5803873946f04af992ddd860d09a7131021027c14b5d4b";
+  sha512.source = "8ecb0b7b4e5f00806a377acfa0198ef217faf0573930be1272d13d743d1e84db76f067afa7e7a665c4540536c1d888bdb702ea9c203a2a405389079aa49f71f7";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"fontch" = {
+  stripPrefix = 0;
+  sha512.run = "c8354fbcb6a13f2f874dd3df71f23ee1fcefdaaa1eab5166f35001811b9788ea2b53e5d5653437071d02978dc94b0a658bca5e2cfe825a0315d3389446b6c138";
+  sha512.doc = "a7c5f6622414d943a20745f7b02c3859d43d4f4ec0f9ffd3b2baec34e142c01474d8827c7b0fe5d1bebfa25d33224b26cd876e3457b7179097fd9539cb9d9444";
+  hasRunfiles = true;
+  version = "2.2";
+};
+"fontinst" = {
+  sha512.run = "af57d72185dbfb0e169231b2dc0d7117722a5c1b4db7a9b2054d4848d1e5288e5dd5b6f0f0153f2e9dc87a13915fa77cf9286fce6d5afed7b541eb9e48024d98";
+  sha512.doc = "e7774b46ac38bc2dd86ec8091ce4df364cf377b3864fac5d67ec0299e789ec10a171f8239c98f12775c750d023f69104a25b03f7bbc7dba15a2d1a7da3e70929";
+  sha512.source = "2f6deccf77ca8325a105ac187da3f4d6cd038ce7bbf174c57724b73836d662d3514355ff7d51ff51ec4ffae2f55871510817834cdd8c0431061e310ef20c3093";
+  hasRunfiles = true;
+  version = "1.933";
+};
+"fontmfizz" = {
+  stripPrefix = 0;
+  sha512.run = "43febb41a8bd7b0a89a2b60b52f9b83e0d0fa8303c0a7986658a95c93307ba6642fe07f8ac935ccb50b3047bc74100cc7268fde438d3ff80c944ac59afa6e3df";
+  sha512.doc = "6dc0f6c10d44a17d42d8ed4148f39bf89c84dd5a3a672755340456b0ab983b1b52cbd3bb62cd6f5ef4c3f6dfed8a39568d5ca35598c4b016483fcf7d3cdeb360";
+  hasRunfiles = true;
+};
+"fontname" = {
+  stripPrefix = 0;
+  sha512.run = "42412120cf59a9a3fe284c2d0dfdb0bdc4f8856ef1a2d814644290c772b00ad37f296fb66e83ed306a110602b314f6e7abd482180a0119bdd1dfbaa2233c77d5";
+  sha512.doc = "b6affbe821e1f127a5dd9962a7d89373108f57391648a15311de802ff555205ae864074d296690ac594377d00af5e4d375989b663c79e01408936c0bf934ea5e";
+  hasRunfiles = true;
+};
+"fontools" = {
+  sha512.run = "3d9635c6081f59b702107628f45df3253544ab4325cda5a53fa95a551c4acc8e067bae8fc863b05d087ab2f7191ecd35b32c7f95fb8a5c0e8c9a1df9eef42271";
+  sha512.doc = "eb5d0b04751127225964b28230d91e4c8dd9c630c93addc0f2bc19b4e657c874b11c93901c126ebfe83778f5d71f26fed9b7a4c823ef4019660dd0da2085134e";
+  hasRunfiles = true;
+};
+"fonts-churchslavonic" = {
+  stripPrefix = 0;
+  sha512.run = "ab57be2bda808cce456fe2fe75d0c9f7560d1ed376631c907723d156360f8f20f734d4a2379273c8b8378a6cc124376574c162e3f95c4588c688dce34fb49029";
+  sha512.doc = "596ae1cb37b35ab59bc712653ec873250cded1968b3e4874295692812ad4001c6f352c396ef6d224571da630d730cbe41f98bc5a3a5374a2f9532f9424f7a0b9";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"fonts-tlwg" = {
+  stripPrefix = 0;
+  sha512.run = "4d614651cab9a02809065b169f56685a7643a28d616f7b221dd6750c19bee5b4357ea003e4a0956fda585d73054288a2c7f60a8f1fa86650e2f175b08eaca35d";
+  sha512.doc = "a0245c7b68836a8c80830fae693016fafd3b218340bcdcf2926ba88dc845759ddd7d02c7b50b025b6411667ce35f562ee6dd7cd9f2d7e8e7f0d6570184242987";
+  sha512.source = "3fe3ffd8a171c886764bcc435e9e8b38ddcd888b993d4864591a2e0a05ed27efa9cf9a8aa5ff8ab900856285a3cba5fda7adf8d7a600476adc4c546b408df5cb";
+  hasRunfiles = true;
+  version = "0.7.1";
+};
+"fontspec" = {
+  stripPrefix = 0;
+  deps."iftex" = tl."iftex";
+  deps."l3kernel" = tl."l3kernel";
+  deps."l3packages" = tl."l3packages";
+  deps."xunicode" = tl."xunicode";
+  deps."lm" = tl."lm";
+  deps."euenc" = tl."euenc";
+  sha512.run = "12ca8f1195131cc60a4cb61f35a4eb3cfba88cbbcbf3a4c8b57f24ccd27d16ec0fc2975e0b2f456ef753dd983b25bacd865e3d974adfc4d5532b766a83c7a75e";
+  sha512.doc = "cc8357c53c3771de506369b92a4db08b9964ac8071f84839a9f4ad02d703d2bef3e56053a0b389d7c4e3e686038a33f587eb75f8a898faeab845f4ce92bd3166";
+  sha512.source = "7b36496857143742acca3df007f68d4b1bf197c938804ca3421609f2cde4467097a5cb810f983370f522805724764c81167652c2796607a0b5e90b4d5f628a17";
+  hasRunfiles = true;
+  version = "2.7c";
+};
+"fonttable" = {
+  stripPrefix = 0;
+  sha512.run = "f8db43eedd7f9e43b0cfb8c37e2687321fe236daa4bee898141c305dd2e59fb40bf3e8b3cabde561c75fb65dd053de33e45b90a8ab9518b0b30aedf35f6af1f2";
+  sha512.doc = "1d2b27ac253df62568087abb8f9e0f0054e3bb98cb62e65784192b281722e69e8565fa569eef4d061684e8965e0b05a0cd6dcbf7e632af7f68f97e8d4747426e";
+  sha512.source = "56210bc42e0716196bed05a35ef9ff7ffb40a17a8cfe8cef4d31e2c8ea28bfb75ee035bb887ca62387460cb7f99eb4f2b408cea767ce824124116caa6ae7d15e";
+  hasRunfiles = true;
+  version = "1.6c";
+};
+"fontware" = {
+  sha512.run = "6f6a58e0c804ff0aac48be7646bf1ef9eb13028e6b2d25d69b4764280d71ba57e5e48eded61b4855794efddcc7f1520b24a52f09ed541a975c205b11b23abc49";
+  sha512.doc = "9ab42743fef5a65eaaa0ab186bdef895f8e7e3d95688fecdac8f7b59e064fc20f2b31bf5ef1b9b6676f3bf901867b06c25792ad07b2a13192e7290b5fbef33dd";
+};
+"fontwrap" = {
+  stripPrefix = 0;
+  sha512.run = "5bad0487f5cfa4119d7baafccc6178925baea12f1cbed5912211c52f2c4ea01eb00f9dacd300c24b93f48e5f13197a86ba1e37c35ed69fb1031281fdeb08edf2";
+  sha512.doc = "857be54c81d9bfb14277c17638ec24c643c278d660b56e18a4701aea0ad28e496df0aec191b12d93bb29b7ab326b39ad9cc7ddc3615871d1b70fdf6e44ccdc6e";
+  hasRunfiles = true;
+};
+"footbib" = {
+  stripPrefix = 0;
+  sha512.run = "0cadef58331d5d51aeba1f69d0c9ceae99104f7c31ea79e0f5dee33c8612bc52cd0c8551abc6da1799705c879cc88535b46e4ef15232d3c4a0f7136e0fe46e05";
+  sha512.doc = "27d1f0e6bf0ef526f2b3c4852c53b78fc60fc10ec526796447940565ad75fab023406bd28548170f7382e822c3b0f43d96181233bc772ea58f8ac195f71cf495";
+  sha512.source = "120d5c14a1b12b15a39792d2cae0bfee5b1695af1c014708c65d61eba6f2fd52f17e2b61b576e192a2d2a9abfb3aa2e059fcd9ca17e48e8a3ee6e9cc2150f119";
+  hasRunfiles = true;
+  version = "2.0.7";
+};
+"footmisc" = {
+  stripPrefix = 0;
+  sha512.run = "50d0d02b243936d2455ad2353c0da1b77aab9f8f822033a98062d979b686163b94798784dc6b8496dda3ef38eadbd04a21e153f0fa9a76b499c50159c169fb85";
+  sha512.doc = "3a732fe8a1ca364275a7b0849be097e307ba322ff611a650a4625cc47792410b974055c75165b62ec8d5d2a128b0d6a194d798248bcd6bae266c7638ffe67e01";
+  sha512.source = "3489b4c09a145ba19d25120a48368470d65c2407a8c5697946ae669fdd63f0dc7176ea171ccd2a815055a6fc16f02523f7b2ca084c60159c1768a8a3b2eccf11";
+  hasRunfiles = true;
+  version = "5.5b";
+};
+"footmisx" = {
+  stripPrefix = 0;
+  sha512.run = "591f181c8103ebd7a86440b27992df9eaea91d5998caa0f52dbfa48b7afc4791ef8c1f5a95d85b7cafd56113726beb74268b7498ec489d7b3142dcdf7f07adba";
+  sha512.doc = "8c36c6eb169a804769ece280c2210949db96bbe57d6dacc1a0952fc1338d619334d3d8b46cbaa3dcac09e05a0c015f37146d8bed315238b5e918c373b2b42155";
+  sha512.source = "5b069985c3a55240d762ee67a1da66895c304b5ac82bc0ce80c9e5fe9e77906cc0810dcb11c39b3ab63ce39f5d52964b7fb3319d49c0b18c85bc1410bad84ae2";
+  hasRunfiles = true;
+  version = "20161201";
+};
+"footnotebackref" = {
+  stripPrefix = 0;
+  sha512.run = "8c18d95a4c74a7fe2ea4cc98df6bdb6813d9cf8323e44474330f03694758ee53da46d0d691164f6d90b2148a7cf9dc253dbc93548a3b33df3b0344096e4a90c9";
+  sha512.doc = "685484323b721c5277aeaa041b1d40b0d4675bc901a371f36dbff6246063252bca69261748a096919c7345a4a6e6284a6093068555bb43eb92fbf7cfea41facc";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"footnotehyper" = {
+  stripPrefix = 0;
+  sha512.run = "1daa49ea85b5ae7ac0d1e3d5dd86dfb1ba79a132c4a1493d911e4416cd6f1f7d7e6487032ff0cc970284a9df039996fd26258868f734a1ef7fa0311380bd7709";
+  sha512.doc = "d380557ece02393115148311e2186c99c6dda4f7ab311e448c3a52111a52a93fc17661bba80a6f62b24a30f7096793e422a93cd0d326336c1153a572b69c8b72";
+  sha512.source = "ec3dbcda29e1e7e441741607c897e39c3cedf5728b3661e8274b01ce759a1f78afaec3e69a1f5ddbbd8f0e0e153a9924535ea015645d2d2b09e917dc6724635f";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"footnoterange" = {
+  stripPrefix = 0;
+  sha512.run = "c80c158c550e99e0d10f2ddfd248e21a897947058ef9d5f6e38fcfd9bf3067eff1846181b46a3abd23054f133974f1ee6e53496fc80b11b1df749d889cf983ae";
+  sha512.doc = "d87cfefdcfccea2c08e8d7669bafbb18b940bb06fe3986634c684455ae12da25c515be60b5e50b685bcc4ca745e1b26747abfa88f2328836a30ed89e60efc366";
+  sha512.source = "9b46378a9a8282d78edbc8c73edf10292ef2e09d25e9d09e9cc1718df891e464d51364945221e84609a096116bdb79388045c1312762ea08f4316158512707af";
+  hasRunfiles = true;
+  version = "1.0b";
+};
+"footnpag" = {
+  stripPrefix = 0;
+  sha512.run = "a1ce9661f0f6a69d1709ea053fd548aed428a9cc8ef0445b9c4b897eeef349bb9767c219f5d860ab4d7d264982c1f4404d33619c80dec8411350bb965b19d709";
+  sha512.doc = "f83c9cc0701c63dbd5d3b7dd6038e1bb2c427e6edaca05b814778592587b066af3c4f7f12646f7b2ff7cc1c2ab8d2ffd99480dbfe72e50c9bce907e8e2d4c509";
+  sha512.source = "a44b0ba4ef7b6328d6d307eca25c34d494000a238c69fec3686a55057ff56ae1ada7cacc763ff1cd26aaa83962257442060fbd795c76d61f92761bd66be81378";
+  hasRunfiles = true;
+};
+"forarray" = {
+  stripPrefix = 0;
+  sha512.run = "f818d0899fcba2d61ad119698d3633a28d5300098a4bd56a82b7b1c9cfc12c47a9457efed7cbdf8aee3ba9ba4143eefbdd54bc995c84c9bbe99dd5717030bef5";
+  sha512.doc = "e292418f60b290bf0567ea70169d66557a8408b2933221e0658d6d8e807b6495258a6ea33d65d14e13129ff8e58dc9cb50115459b014ec00e0b084f3d3fd55fd";
+  sha512.source = "4a9574868753faa19d0e80bd08c524445a015bcafe241a85d59832fb308981d12dd133fa64e65804ac5c3d86617046f06a17a4667e8cb382676dfbadd6f012a0";
+  hasRunfiles = true;
+  version = "1.01";
+};
+"foreign" = {
+  stripPrefix = 0;
+  sha512.run = "e886be0cbbb64b11b6c54d6b62d6b38db1bb7e65b7a3a9cc951ad71d4cc1a93c323d8a1e17ba863daa6535c747c9801b06bc4d3c664bfb8da38518a9c93d45b0";
+  sha512.doc = "d3804dd1b83ba173e4098696656c814629ff099699f332c3b81136c4519bd577aaabd4d2601893f88a58009f00e8c8ba44fcf2c4a3b72ce90af4d4febb510ec6";
+  sha512.source = "d91bd89508318df931629678cdd0415da8baed9efcb55f965d71e26a61db705acc6abe14c6f7c17b61f54e32ae123ecd48cd018920b1f43626559e2b0b4a3c16";
+  hasRunfiles = true;
+  version = "2.7";
+};
+"forest" = {
+  stripPrefix = 0;
+  deps."elocalloc" = tl."elocalloc";
+  sha512.run = "84edfdecfe017508c496ead33102977f2548b1e664ed6fa5108ea54d738e5bd201716fc2185d917fa5ef43b727130ca46061228cb510f5f8f19d25d677dd689f";
+  sha512.doc = "ffe229aafaf7fc3a2c4e48a4e549938bc80b2ef4e40e2f22ccf3f62e72b8a1eb1a88972b58ada2490efb61171d14a7d5d1e6f940754c39e3b950aa889d585ffa";
+  sha512.source = "37269033ab2626581dfd8a93d739ebd74eabad9ab2b6dac1cceee33c84583241e2e5a660703befcc85c310233947222e1990d2fef02ee7f3c0ae50d2705b169e";
+  hasRunfiles = true;
+  version = "2.1.5";
+};
+"forest-quickstart" = {
+  stripPrefix = 0;
+  sha512.run = "14c3512b55e7653d26571a73216cd1eb5bc4d7ec8b74ae71475c37372552fb309c148e91d4e973bd60710f2a43af9a8ddb6ad99087fd2a9b76da896e521eadbe";
+  sha512.doc = "c53a365ccb1a4059c9440b8f23b3ec0bbafcbed14f871c92b99abaf91adc4bb42ac1d3b784cf545a6352298bded8b4cc7f6b2e114625335af5d9d003fcf922ba";
+};
+"forloop" = {
+  stripPrefix = 0;
+  sha512.run = "a9cfda31fc63d24737a5b422e9fc7072bd1f75c0926cb45d26ea3cdb7cfb50b3f74d7602964a08f13d216f3fb3798acd21f04bdcfe85a3e3652052b9f2cbc9cb";
+  sha512.doc = "49bb7031207902366fbd0924a025c692ba015af134ca38c90c43e8efe7a9522ee4db4cb9b071dd00681251ad07b4587cd49eb9e09bc77f1ad5632838fac686d6";
+  sha512.source = "f41a62a677f37a57c96a398d48cee84d213ccc23fbffe7f2da6c09e8f58d8b9524d3b53717b9657004e7de0083f43960c0ebd54de3696994d8e946d8044399e4";
+  hasRunfiles = true;
+  version = "3.0";
+};
+"formation-latex-ul" = {
+  stripPrefix = 0;
+  sha512.run = "d705a402a4ba61f232e559e6a610646180f22f47df251d2731cf8f62a9edd26d60be53ad969ae0bb8d02a767b302df18b88c048ed1536b3677b7199d347e35d8";
+  sha512.doc = "5bf8c412d061a5ce30ea3af713af400eded6a0f75ee019fc9f6e40623c3203839f718eb4b630282ec700871cf4b0cfe68ff38d43cb50f53560184d7d44d528e2";
+  sha512.source = "51a77394f3471dd2fe6b29717c89cc8d2f6f0a126ad84d5973bb1d3a8600539148be0450b1e5f5cde7070224ea02b09ed9b871f743ec82c78640b9ab54ae602d";
+  version = "2019.03";
+};
+"formlett" = {
+  stripPrefix = 0;
+  sha512.run = "9d984435565a9354d03f7ef1307d543e3a0bd3a8d398f6dec426f7ae16fe3c6b20e60cfb5daeca7be092427606b5a5886a31dc05d023d0f26d61aa1c07be4b8a";
+  sha512.doc = "8eee17c77620f48319e862f2e7d8ae4b979c84250dd17f33cae9db52b1f219f2f86c690969a783648ee3979f24ef58e410cee47afcb12bcd26e4278af4625c6c";
+  hasRunfiles = true;
+  version = "2.3";
+};
+"forms16be" = {
+  stripPrefix = 0;
+  sha512.run = "9d8b0c7aa2314c81afe09cdd9ba3455e3ff7e3000fa9de0e99da935b282c3d32bc60aa7f97a27450ce999ff101b606fadae3dbb4965cbfc1d4a8ca5c29eb719e";
+  sha512.doc = "52bedc12e5ad33ac78c906f9d60284ed079b0f6d66e578f826c946c28de3996c70da0b11284e774ad56196875b3bd166962eeead9282f3d71f6c6a0d4a8cba68";
+  sha512.source = "19e3efc0f73c919c7e74eaabc4b7f9b70be4dc2776b22719eec4f373e180f3ff736ac3ddc26209acfc9f9f9de9c594467cb6f67899f21f563386a44ff58c9135";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"formular" = {
+  stripPrefix = 0;
+  sha512.run = "0be09e33fc3cf97552dc9e960979447de61c53bea46205a52b37094f7ce39f10309f559dc99c0037392d4924bb688e27bc8d26e5f6fc69dfbc3d3c41736223ab";
+  sha512.doc = "09550cdf735f340a13c9104b86b37dfca67e39c277ec9f98bab08754f393368bea8379019c402662b7e7df351636e44814bb45c0970cb24db10bf3efdd9dd7c7";
+  sha512.source = "12a7c774c2b6638d610c3277246ced4c8946f0393527ecd0da101481b1b85d1418537019962f86aa8b7657a0159f7c210acb3eea1386e8a528a09428619f0b6f";
+  hasRunfiles = true;
+  version = "1.0a";
+};
+"forum" = {
+  stripPrefix = 0;
+  sha512.run = "6e15fe7d945fa300e85d8a61644de7783e34c1f8a61dc6a8f7496f3d14ff54bc5cc10ca7e253b5cc2bbff5db0061e50208a5892fc0b9f438326bf6d7137b4bd3";
+  sha512.doc = "c043736ca7c6dfddb6397628a5a832b37a98fd0a9e1fb95a3df2c786baceb3f289e53e49beadd05a481a1997cf0072903cf3c934101df4b542d41c15801e20d8";
+  hasRunfiles = true;
+};
+"fouridx" = {
+  stripPrefix = 0;
+  sha512.run = "01a2cc941482972cb8ca3f5402bef75f53d5e7db2b42f8bdf614c34faab3805c3548d3786c3e7cd9d8d8f7691cd5e8e71e056ad8afc24d52444c6969c11eaa14";
+  sha512.doc = "8bc55b8e191b83ea42e228b47621780f4aaeec65248f5b3e9aad94443eeba08b1bf1bf44b7cf252f66466e5b0170260ad202c13abf2d76d4576833224212ae44";
+  sha512.source = "c29e1c93e31da33a3ba3914ea2992a53b52bc18a4da0d20cdfec712037f98058be5113dc65d731253aff8c4e1b0fcac4afe3da36b972f1fb23ce45a795c546a3";
+  hasRunfiles = true;
+  version = "2.00";
+};
+"fourier" = {
+  stripPrefix = 0;
+  sha512.run = "3bcd5010df4ecd50bd29664b69d6ac6d56d76615dd20ef44d38ed021a2ca3beadb7eb5f8cc2634dda2476f225f6c174f48dad98fbfea7f3c91f3398ebc29c737";
+  sha512.doc = "49655ed0c27aa8b9f76ae2f1dc956eae91ccfc074d4811fcd455709d6574affca3706d06b8a2d1ad5b1285daf287b2b46e61f6ae28575c3197965df78f2e9107";
+  sha512.source = "026c359eea5d49cda0ac58c5905277c90231664d96cd8ad1276626beaae05bee30a0f3884533eae5641e494942ed65848579653ac8adef88de4075fb5d6f114a";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"fouriernc" = {
+  stripPrefix = 0;
+  sha512.run = "904b464fb9066100512cfd8a8998bb089113b443e2df1fb77100f9b5a26d48a5b3512931c00292d19764eb4f068f207eb38dab78798f217f2533a65229411df9";
+  sha512.doc = "039ce79d06bd1fb55b257f1c65c53412b15c26d4eafb9d3abe9bb7a7fa836c8b545718f70d935f1449fa235f33d07c81ad8f228608de20ffdfa99b9f532e059d";
+  hasRunfiles = true;
+};
+"fp" = {
+  stripPrefix = 0;
+  sha512.run = "27e60a78da80caf0e50d1fc83d227d19982e30950650845df710949f4d88db67dad96212331182561c43d37cdeabd3b68f9af55763f30175ab27a6b5f089870e";
+  sha512.doc = "79b62424943f725ffc6c1698cadb9ba2fa6d9f0694741a951bbed23c43f870b930d966f110bbe722c17249c7211f08a3a95a5ce7e9da69b7487aec37e99e5152";
+  hasRunfiles = true;
+  version = "2.1d";
+};
+"fpl" = {
+  stripPrefix = 0;
+  sha512.run = "5bd87e686f418d0ef76ca1868b5034ebf5239665dfa52eff5d9e559a733420891ec2f17d7e08b527a422b8c4cf6ebaaa80753abace423759fa06beecef31228e";
+  sha512.doc = "b101782fdbe6896cc49fd81b6ec213d5b9951d3e80de22d7797bbb34ee4ae18d3ad6650fb05e57983cd665d09d23f3d7efeb4dd1b14c294373f9d0df95e66162";
+  sha512.source = "7c98491db4a2844340c33f9f23f90a50c7a41404c010aab8ecf544c504787758ba86265da3f988453c3ddc3972df8dda55091b3ff5751d2c60ff4c5bab24a059";
+  hasRunfiles = true;
+  version = "1.003";
+};
+"fragmaster" = {
+  sha512.run = "dc5d80aa4bab7a0a66258face6cf8222d03b12ea492f7cf568ef815a6d5950a8a2b36c7403ab466141f49cb8faedfbb33146820b88da17d8b8fa18a2b16235e4";
+  sha512.doc = "61f0bd7dab46bfb91b634006217f01648007cbce3c9187b0811a5cc1755ec19654da94b47866ad9873fd57629f1561d1cc46bf3a4d62db618502aa0e67500637";
+  hasRunfiles = true;
+  version = "1.6";
+};
+"fragments" = {
+  stripPrefix = 0;
+  sha512.run = "adab94e7cc71c6ed2d881d13254793df16eaa08d1e37e4d3f0344e7a56cf08a4ffdca784871e8939f5db8e868b7166846843492ced0071c9dfbf56e39d20ec0e";
+  sha512.doc = "dcf795392d989fdea695512c8f7011f783ea9091bfcc238ad296b0cdf1775bcf631c3097ede09a138117e39c7fa71da7eb355878c8389bdab2deb76a319102e1";
+  hasRunfiles = true;
+};
+"frame" = {
+  stripPrefix = 0;
+  sha512.run = "b66df0a91a8605aaeef2452236b5169cd363689a40f4a35ab9006ac18c21d4ae2a070407f84beff7de0be246f2f1e55c8b06f234921c4d7153fea9a7f2df1679";
+  sha512.doc = "b61a3dfbc23031a39bbe01788f0f1d51750a3aa9132671917ed8d14c57453d588c75f8cd54beac9ac120f26b09fead55b871d53e918a735ee172f1603e4cd1ea";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"framed" = {
+  stripPrefix = 0;
+  sha512.run = "06f0da36c24ba42959b2176066d3e95f23dfed41753f4e4b07c1f92c4789e68d1b246c61cbdeacbb9c00b6eb990ea2b3ec75dff8ac57845102a867dfdf2c72c7";
+  sha512.doc = "1f48ac19f74f5003df88700ff85c072c8a655d4623b82bc3b7c6570a548c0a7b7e97fe292f8557a72188c0047fc28e280bc3ab65f58559804fa78e89317fd67e";
+  hasRunfiles = true;
+  version = "0.96";
+};
+"francais-bst" = {
+  stripPrefix = 0;
+  sha512.run = "b271711badae8883426ffa2783a2f942c9d37303fb4cfa8b4a2ec2f8999dd150060dae6689bef17d2120cc7489896ffa497ccb1f7f693d5db9a8ca5ef6747f21";
+  sha512.doc = "b3a53111f7fcfe972c0722e8600b3115b6e1a93631568d9bdb1f824b8185d4c78fbb135c4593856e3766404fc8e4c005daaf017e5c1552dc452c57e943832e14";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"frankenstein" = {
+  stripPrefix = 0;
+  sha512.run = "1d94962185391dc1fa9edcadd67a60d9a4b59592442ffdd45badea6279db8dea101b418ab3e03284e6e88c247fd213887f06e72fb6c4a002a66acaee82d8d4bf";
+  sha512.doc = "8d8a404aa0a61fb76104bc57e1c2b837ddf68516c4d4fdc1af0a84425943f4e23a4f660b28b02e088db8849090e3734915ef7e0216f578a5199cf12115c498cd";
+  sha512.source = "8481205c937e58fc0b46eb25e4f7c8b28becc7ebf2529ab784f0bbb7292dc21faa9ebd1ef3be2a98950f1d2570b23eb13f7d6e134b8c8c5eea25e81c0e6c6eb5";
+  hasRunfiles = true;
+};
+"frcursive" = {
+  stripPrefix = 0;
+  sha512.run = "5ac038493648ad14626e2a015c7dbf96a41257ab1d1086f9e79b0128df2c85af1a279e021e52c722636f8647364791bcf7580cccc1d80d60084f5a9a55a23317";
+  sha512.doc = "eb0559574af52a711f61ab84cbda996c7cf4b2314b4d5faaa18824ae3396f041b7a5948151b2b5cffae6675bbe09c2e4358b81e9ad7792e5ece8a2912d7ff030";
+  hasRunfiles = true;
+};
+"frederika2016" = {
+  stripPrefix = 0;
+  sha512.run = "b7b271af72364e0d2d00ac499bc1e419534d479d27fb424b7046373323354c47da29b888f0d765e3ff4725333ab3d407cd21a064bc4d063adf890de75aa49e3a";
+  sha512.doc = "e205744d689113870fce9cf791f089ccb59cb6fa326c811f34db7183588df3de9b946cddba2a02128a9b88490e9326bea6563fa0fd9a3cdc76467555b7b8d198";
+  hasRunfiles = true;
+  version = "1.000_2016_initial_release";
+};
+"frege" = {
+  stripPrefix = 0;
+  sha512.run = "39d359f01256f2399cd9226744aa9735543d5c9eb26104855bb52efaf51b8c720cb85e5be08241d72d3b2e1c2deb9cc7a10dd90ffca789ae91b6ea6b7cffb879";
+  sha512.doc = "28c5cb420f25ed57a03f3914ce2286732ab8e06cbb0b8446ab3112ccb79b34814762becb7ac7457593e1b5b1579613a76a8b21fe2c43ac9f08175495ea87bd1c";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"frenchmath" = {
+  stripPrefix = 0;
+  sha512.run = "1102ab998250a36d6d93aac7c673628eacf8b1abd203d91989922599ec6dae58439ec2700e40eade5b0ee1666a68a30d94f89d3a225082a6273ccd63f61fb586";
+  sha512.doc = "622cbf8f1149c53f240036e2cf2d6245d6870ea24f9af6e1883e7fed2f1001f38227176156e8a33c9d9c07414b1accf1a924fbf7248e91903d764fb85d277bdb";
+  sha512.source = "f41712d3bd58290fbe205001e9fb531a147debea4b93aeac3b9831cb3bc8edfc7d1364bee575c750aacfe1db8632c357a36fc5afb003a7c895108146a1ab3b7e";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"frletter" = {
+  stripPrefix = 0;
+  sha512.run = "5f6c61585ab0626931cf7f19d18138ec70572f3531f36cf94eecd82d93855a2ec8ed2ed0146971e035f8b5119df7c602c6279a9976e024ac85869953448d51de";
+  sha512.doc = "36fbbc422eed8e577e054067e7b442cc84b640fcbd0706e3d8cb503884a5208e0a5bbe0c40b67cb5b495bcdd0ba7a78855338588757e5a9d26dce21f9bedcf3e";
+  hasRunfiles = true;
+};
+"frontespizio" = {
+  stripPrefix = 0;
+  sha512.run = "6045214cc6a8325d8c828c2591fb43995f098803b031adf50bf8b4dddfa0047ce110dd25e5db71b068376893b7ee83a70806713a83b90a26c4d1c8553e4f00f2";
+  sha512.doc = "beb8cec7ff51ff9b85e2a650bd7931070c126ea3b126051eb63194e8a071f6dd92d0014953afd85b0e73095208fdcefbf202d9c0ac22003f71d7f7a72f4a4034";
+  sha512.source = "690c42ad3b6db68c8d4305fd9c402126013a26a28049f5cdbaccc455effacf9bbf86ba77d91c518d88b72e48930939389ec33620e8adf06eb20762606ad53daf";
+  hasRunfiles = true;
+  version = "1.4a";
+};
+"ftc-notebook" = {
+  stripPrefix = 0;
+  sha512.run = "9dca1b2e09293df3a12df85f843e1701e1ac428f4caccbc196f43cfd02517cbc98908fe95fcd3e26685cd95dc8565aa5e29ad79f7d42ec5cdeca0346db6a759a";
+  sha512.doc = "36022ae2df65e45e2fdd2a01e2c95502c3acee0e8fb0b738ef06b313f47cf8798df30a41a6f5e7b4021a556ebdfd17f84b4a79d54d2b6e88c8044f0a67a87f8e";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"ftcap" = {
+  stripPrefix = 0;
+  sha512.run = "1287e0bd63fc92ef3e3c77ae3a6113cfcca38dd63f4a90948baadd2a365c07b38631d916230baeaf550b1aeff07f9cac3a26a07301838716d8d70fcf0843953e";
+  sha512.doc = "afa317f10c600c88bb96fccb0383b291e1fb7c11abba5f6bd1efb05e7d2ce117c4ece7bdf9a9ea16c71c116143aa65ba26cf7c2e1dba68f225b655d122169001";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"ftnxtra" = {
+  stripPrefix = 0;
+  sha512.run = "df8395b996f96ed72505ef1ef7f0e8e6101d4b26059831b227344023514d377eb189961a240e83ba42ac4ef7e8086b8ffcda347290014fbb1cf1531371c20eff";
+  sha512.doc = "fc16ff992e3339480a4154169665be49f51e56f361d0b1f97842c555be59485fd7edf3cf815e32642826224e188c5377fdb2ab36746cdaef7f552399a4b7119c";
+  sha512.source = "87e580467312c6198fd7106b6fdfdac994c5f9fae3d131b793da60ebc9d852141ed6630aa0d4273e50e7311b6e10499a3e4e2cf141ff197d5ed72822f0c15be6";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"fullblck" = {
+  stripPrefix = 0;
+  sha512.run = "b298f55ca3afe8819e44704329c06be2867b00c1a2a399b5db8de8477751f9945bce1041450c7e91559eeee65c9bae5e76b57469c956239c9752341b820047c7";
+  sha512.doc = "9da7587195a077f8218abc6a7df98bd15369650e00ab3893b6cd70a268bf34431b8c2c49b3415269bf6b8d1ddf51a8e23e76ae87667309f8466ad69da87f05a0";
+  sha512.source = "2ccd2da9f1924a1547f4a6b870ce150e6140abc9c1984f1a951a59146944d50c6f8e115ccfe79232f941dbec756e26d460037d92af191eee644bb2dcbe986c6e";
+  hasRunfiles = true;
+  version = "1.03";
+};
+"fullminipage" = {
+  stripPrefix = 0;
+  sha512.run = "7ca92205caae688761ddeadfc0a37173b37e285adf3c1f54c4b2994a0c82c90713a255d5068784e3f3866a7f1af603906513a561632b2d09c68477e497330d2e";
+  sha512.doc = "111145d2f1c81f74692df8ef397d36c4c0d7b6c89efe0250571c0153b22b9d562df0dcefa90e3be96f8eb518af75ee8a23d42ad898e23668265dcf39d3c678ff";
+  sha512.source = "d95dabc4565fd48b8a6e8b35777fd456934a3cba8bac34629ee6ff4847cd1578f70a06e6b87a9b76d26e341a502d1c284e4e155aaea9c92a12dbf6d0043d8249";
+  hasRunfiles = true;
+  version = "0.1.1";
+};
+"fullwidth" = {
+  stripPrefix = 0;
+  sha512.run = "c9b9c37991365346804b51aae7b4645e5b63eb6a3c5c60a953cbe0583de0960e8a9d6cc99dc7526944415764869308d778fb85e7cde821792bec940f6c19072b";
+  sha512.doc = "55892645ce01b31dd0285749091b8fbcab0061a7190f7a426379f6d3ea8bece8a5c054cad8b53efe1bb69a68fd3e49c3e8c8afb94954ff4ba8838142ab4576b8";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"functan" = {
+  stripPrefix = 0;
+  sha512.run = "0899d9a3c30e701d5ba6a0275521a40a3cf2df680e9d4a95624730184fb370ae2537bec1becc3b185647a988af5fa8e4bda5198f42cbe68cbc848d8915f1c9da";
+  sha512.doc = "c824825fd424316701e25fc573a431aa5967af0d520b631489b20608459dcd0f7abfac277c5b1e7b60e0a2888e0b37d787755acd6f671e48d4911969e3058692";
+  sha512.source = "f83465845900ae5bc872fceead5a83fa972c9fa8b858606007237251ee2dd77cbd095376194aca0356e5c8be53fe653a88f5a10c1f73effa8201b3adf55c5a17";
+  hasRunfiles = true;
+};
+"fundus-calligra" = {
+  stripPrefix = 0;
+  sha512.run = "a999f372ef266e66a199935a0783d99293141aa08586a38d65a3748c1a239eca7b0faa74d537085852e79520343ca937943b30ce38820fdc925d75b1a334aabd";
+  sha512.doc = "93aa54f12ade2eab798bd84596ec3b366db0a15eb05b5279261af8bc13bc1ce782077de36465e8e29d11ea1b89456ab207c33ab907e5c31af95e63d5d897da88";
+  sha512.source = "bc5cfc694592c7a0fb469f752a6ec854d11d9f69588fa6e42390080e88cca3da2fbe888b826ae7a3c07505bc418129237faa791dbf4f3dd9a31cb8e06ad1a9af";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"fundus-cyr" = {
+  stripPrefix = 0;
+  sha512.run = "de84ebbe6e70f61bf9765b9368df95fa5ae607a8d6e1c5535240e8665bb097c6958956d1b19ccf12a2a510672675c7ffa08ab98bd80b6ae2973fbe65d0e8d343";
+  hasRunfiles = true;
+};
+"fundus-sueterlin" = {
+  stripPrefix = 0;
+  sha512.run = "b15a1fa2ee3272f25a616234a335d0bd5c8ac810724ecf453e172d2b68293b55f01f3e57acf81c17721cd3f489b35cde077d5456b78afacc589853224f1bce94";
+  sha512.doc = "7162188682c9129e1788104fe94aae2a70607e276eeec4367ae60ff9e50d26aa88a73998028b99ee42627aa27e8868ed2fe72063db2e033798b09ff0b7a13477";
+  sha512.source = "59f5e1e7f338445d3e8430c5c7cf69de9499a659ad5f32566c26166bc2997eab82964919c50aa15311d19c80a14a1a7bc4380e985f382d4ee89c387faef38b37";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"fvextra" = {
+  stripPrefix = 0;
+  sha512.run = "9b5daea58dbbd82c3c2d5e637b3c46531aaac1600b39a945eecefc725591c885b0fd706fd38a11c3149fbee3b6029ed518147617a9f0c95b57fe5d66d19541f7";
+  sha512.doc = "8e21f94366f7642cf92b8874050c961386fa019450a5e1ae9f6221ab3bf473b41e768bcb2fd1063a4421e721daef6ada5b964a1b6b9fc0054a1b9d7c4040b54c";
+  sha512.source = "85330a89067d35c88c86ffaffb0445178b899a9f7727148ccb6cece070317f0d559e72e216c7ecd5a39bf830f5ca93f9f5f711a931fe8cc9d942e4572263f74d";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"fwlw" = {
+  stripPrefix = 0;
+  sha512.run = "ac2c981bcc4da92a7f91c3ac17d66c4e0e7c94ff1bdb3bf3c7f6a4eef19fad1ecbbc6048a5c74627126c7e1190ee18c2c9373e80d52130a2d272c58ef70de6fc";
+  sha512.doc = "bb55ca044aafb5b11b89b3c817066c4fb20facba8812667398ecf945bd8ed4b11bec2dfd21455db9cfa5e81e5f865655a3e6f4d3724bf40e47ad1db708896902";
+  hasRunfiles = true;
+};
+"g-brief" = {
+  stripPrefix = 0;
+  sha512.run = "6c0a8e653cab5f67a85d25e18b98371323b3dd09365f6a3d1b47eee409b233db4290f6e6de70128f5b45facfc7771475671990bb2c79a1718c74972bfba78070";
+  sha512.doc = "147d30be05a9224e141d9dc23a81750d0c43bf590d6e1dcb3e92fda6c668031522ef410904e5c7621c9b98879d6809fe604cf47de7f24891bc7e15c7be5ad05c";
+  sha512.source = "447a25d983f71d109bc747ee8ab9e120a0b7c698a9238ea5363d4d826383af5587f78f21c442d4e1d999eaf4cbfee813063f7547e786df962866e57c55673c8c";
+  hasRunfiles = true;
+  version = "4.0.3";
+};
+"gaceta" = {
+  stripPrefix = 0;
+  sha512.run = "54c42cde3613f1fc28ba0a675281e64d2596e8f3c7831e1b1611c34fed1a82c01da2d6eb98058d5776ffc625d04e62359f63819307d04c6296705de74bfcef66";
+  sha512.doc = "594fb3b44492018c6777e014ccc4784813784d3e282cffec0f6b6410a59f088ee30c8113a714fa41369eb795b35a1c615f3069a43697d0bed887123a44c02bf7";
+  hasRunfiles = true;
+  version = "1.06";
+};
+"galois" = {
+  stripPrefix = 0;
+  sha512.run = "0c864940c2a47ad82f031868c1933679f9ee0e5ab01e98386433311a4230a77c7a5d41016619fbf7bb1957fecc259bd092d7a0894eedef91143a0d85e68a6978";
+  sha512.doc = "7c71fe703efe235b3d1cf3298c99f2ba7dfbdc8d7c20861e8738070ef03b9671b1a4f6df40b2238d4b7cf9e765a1cfdc6210ea63ad06dfc60e0ac7a101735315";
+  sha512.source = "f1f62a005edc9b6b5c1b294aedbfe00cff61c48f22d2fd0b90d76b1c6144fd9c8b885890e4a6c6e64e054ceb67b851c6fe3d9f2f1baf2801f070f0bd269d4925";
+  hasRunfiles = true;
+  version = "1.5";
+};
+"gamebook" = {
+  stripPrefix = 0;
+  sha512.run = "4af22bc285bac3f368778dae5c91cf6a1999748a6dfa5fba96e166ed320e124c33f2b6d6bee16ad8d00d0f8067b24bb3567a1aba849b74a6b02fed3bb85dbc0a";
+  sha512.doc = "58493c9b39343846913263f53b3bfe0fd89e4adb4154580d1bb0ff5d32b5b91ddc75511a0241fa3b98faef8b2d9d7c1846aca486e0c7262f8b3ea7a6bfddc619";
+  sha512.source = "793f5cb23ef53b3d24d10ac5d52cf1e8bf90438571e23b5171c778ac720fb2c52a03a90e1f83f353df0b5410e94b5551d0855284df72c34a0f212842a3f96c41";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"gammas" = {
+  stripPrefix = 0;
+  sha512.run = "96be5ba2abc71f93d044d762403f294082e9afd10ff4f159713ae906233d1581ba408205746f968e10f84ce4e79e633a4f203ec4a8dade3f9738d0f277cb703d";
+  sha512.doc = "0c1739b475a45149deb78daca921ff8cdba4555d466fcf26ee0098632b835f650d5bc5e9855aba889a0caaa2a64e08d7afe1021d6171984bde3161c3543fe7f9";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"garamond-libre" = {
+  stripPrefix = 0;
+  sha512.run = "3ef5b7bc8255319a25245616f1750cb09422a9dc0184f0e7a13d481e7124278e093dcc2962f9d65a621bd1ccf54ac82f46d74c5a97b5a2117f8e23c7a39fe587";
+  sha512.doc = "d62d901e83e943653058d64c20135e460d5c8418665e5418439eaeaf662666011e5563fcea1bf3e68980bfde9a9572ad92a4a60d6755acd8737fb10932483d51";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"garamond-math" = {
+  stripPrefix = 0;
+  sha512.run = "e9815808b7dba1d0c37835bb30838fb8073f3ba7c3700bbf7997cce30b70d71194fe07e595728ffc894e22f6bd76bb559104249aa6c22c1b49a92251971c513c";
+  sha512.doc = "1fb3966ec8d6d7b8e048476a7129b8e6a650e4f7350f744db53f844c35528042024d156db8cf20939aef79d74292d3d90a61e6391e8723045efb4603eb0a8a38";
+  hasRunfiles = true;
+};
+"garrigues" = {
+  stripPrefix = 0;
+  sha512.run = "e1440fcf8eb0ccd3b140649c590c902882a8a5a02d4cc14589ed44193f3a70bf13839e9de9663c500bb6874d6fce34f5a21c07e38a7456738548b6ebf449b258";
+  sha512.doc = "0c91f7e1c8fe4910fa7052440edd9afd81c8932e99368219c8a5037bddfa4c8c11037576e9c94721062df9cf7fd5d467389ddcf3aed3e1853be38846c049100f";
+  hasRunfiles = true;
+};
+"garuda-c90" = {
+  stripPrefix = 0;
+  deps."fonts-tlwg" = tl."fonts-tlwg";
+  sha512.run = "304e330de80c822862725f05da0c800ff8043d73398a48a4d88b9156d5575593aa1797e65f88093d3058594969fe3a288010efd2a13e12de52beb405ebfdbeec";
+  sha512.source = "2e2b368b01952c710fa01b68b8b094e2c64905ba9e6375c3d6a5d82a4b63dea5f6343db3898472416ba9e7faa46d660f34bb2f6d3530aca753feb5aa5c1ffa2a";
+  hasRunfiles = true;
+};
+"gastex" = {
+  stripPrefix = 0;
+  sha512.run = "b6e90db05d820b5e8001fb5d7168449d1fb6ed0679d158850ab4e5ad1166ebbe05680d190bcaf3c2808e2fffa6b3ddb2a824f223855182960cf849370493a1ba";
+  sha512.doc = "2890b569863b2d65a2df850e0e885e15754ba4b483fd559c0f914fd5ef2516a4b33944d365fd58a381a1992a22bddf69166cec0bf2b1072c9aed7829fa21903b";
+  hasRunfiles = true;
+  version = "2.8";
+};
+"gatech-thesis" = {
+  stripPrefix = 0;
+  sha512.run = "c5928d0d383da4057a0ba00d2848d324624228f1a98f0f254b09fea35ba21e3ce655f1fbe02ecc6291921e43e9dbd2ae954d6199dc22c1390bf04670ca41038f";
+  sha512.doc = "9fe1e4342becab8b57d892256bfd0723afea3a3f4ad3edab2b3c374bdf410d14b3105f165aed56479e848939a5cf6c807112788ff3a82099641fa71f4e78b5ec";
+  hasRunfiles = true;
+  version = "1.8";
+};
+"gates" = {
+  stripPrefix = 0;
+  sha512.run = "704126d5e113b9718654e5d611d169df17b45ec09f187d86d1c108a331e80939d0266c4473233277e1b465a70775da1ea9576744171209ab45203b4059b96b83";
+  sha512.doc = "a9cd7d2c616021d429b299027503fed60e8474774b6d57095371f1afaba68709770857ba09f74e8e5223dcbdd1d9f1f70a0ec81c3801b1a77c3a494336fa86bd";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"gatherenum" = {
+  stripPrefix = 0;
+  sha512.run = "f0a0897ca3b306341a8af5121d09b31d9169a90e073f3d2babc2b4a32b72d33b4f7ded73f2455e5b6e7454188112440cdff97c4332f3396c948ace8b2944598d";
+  sha512.doc = "9e6e1c322aa19a1c3ccaa622cf8657dd314dccc0fedeb7056e182bfc648fa21b06b67e8d1bf2d529fbf84652a0d6eec9d5a4ffeea1003dcfd2cd195ba628c6f5";
+  sha512.source = "5696c57b7a05132487fa04c16a577531886e8e443aef06e2b3b6418f74d2d971160cb1d95df43ae29c81ebde9459f8611bdea151895f8390e03d5ff2193fb318";
+  hasRunfiles = true;
+  version = "1.8";
+};
+"gauss" = {
+  stripPrefix = 0;
+  sha512.run = "9dd3f7685a8b7bbdfbee1fbe5dcc5d2819091c7c20df7979b1b0fb7971e613e45b6321a18674e88bb0d6222f050f0ab3959b087be70b90b5bfefaeffacc733f9";
+  sha512.doc = "50de7e9af2360367de7f7136def2536a82348752656b1c40022d7e13271cfde64e67bcd482c2d208f47b88a30560f8179b7b8706288809b41d023c037147f0c2";
+  hasRunfiles = true;
+};
+"gb4e" = {
+  stripPrefix = 0;
+  sha512.run = "1ec519ad5f22e6d61d16a0233a73065b45e8628549bfecd109f968b8749c362cd04f358d67e96b1311577f94f6152e7de7a9e3264ffcff5c5769662b52df7e29";
+  sha512.doc = "9b8c8e2590a1a515aa84e11a4028aadeff9e4acb7d3ce99b0d21009e17443db3d2feee85d888a333595e144244efbf978239e6dbf48c68a43bd5709d9489c203";
+  hasRunfiles = true;
+};
+"gbt7714" = {
+  stripPrefix = 0;
+  sha512.run = "20d7691ca964b30f89560a250d73ac35fb01e2da40026d5e03d1367a12c0466b94d19592694950daadc41d76b3dc15420b0fc257579a6be0a4cff06011b0f39f";
+  sha512.doc = "4c251b0ad2d13581b0085847eadb6a376c6cc64218c08439f4851cd3210671275d692d49a57f115c3a5764667f0558056ecce99fd51cccf169a5e61d80af84f5";
+  sha512.source = "8949ed61bf30ad172217bf50943c805edad7de98baf01e3e07bf411dbc95b56f8268b0c143156c153fcaac7326134282c1a7d797b03989ddd14ecc4eac810201";
+  hasRunfiles = true;
+  version = "1.1.1";
+};
+"gcard" = {
+  stripPrefix = 0;
+  sha512.run = "de462bff229779faa33c546d525e3624f1ed372c09c1b90fa9270928caf0a2604f2bb9d3ef0768de7dd0646202d7a59995b7252c0b83b19eaf777438bd1acc47";
+  sha512.doc = "f7fd3c07e053962c88d0a0b8e5899272a3bd9af4cf1731f88a7014773d8f0ecc91fb45e1e59b1a372d8c8977e1dce91c5162558d0245d77a187ac7787a3710ea";
+  hasRunfiles = true;
+};
+"gchords" = {
+  stripPrefix = 0;
+  sha512.run = "7fd655af5446982b450e3eec2b8966f2fc17c11686bb75f516ce0043af651b90e4f88c9cfac133929fbb686fe3f7be6de64d89bda6822f218b691791c9207950";
+  sha512.doc = "26818218c9e3142f4bba491e996556b28266953c6b84f1c3de58d60b1bf100d15513fd2898507cf43226eec127942dede647784060668d86bcb22e3fdaee96cd";
+  hasRunfiles = true;
+  version = "1.20";
+};
+"gcite" = {
+  stripPrefix = 0;
+  sha512.run = "169d9e96121d80bcbe7580e7ff447e8df252b19dca5b304514a792764344df679e9275b1a552d67070d3f5b0fc41c70a6cf1ce9c90358dd9ab58878643be6015";
+  sha512.doc = "d9b50778855efc00ba4d6d6f48891865853b8de8e55c3432140b0ba69767c6c13ab934c2be43b2556a862bbb5413ddccce158ec4130576617a75708919f1ab0c";
+  sha512.source = "44e8fdfff2e015a9bb034496454016f8f03e08e2f5b8ca907670447694877a383ca99a5673db107397dba07142e99cf01d9ee59a4a360d6146a389de7d103cb1";
+  hasRunfiles = true;
+  version = "1.0.1";
+};
+"gender" = {
+  stripPrefix = 0;
+  sha512.run = "261d57b05993954b80f82844f590f952fedaa4ade8f89704f2e2b4e2d18441ab5c8adef2ba3dfd81b61bed53150b737ef72964e1faa44ca48e923cfeb5a1bc14";
+  sha512.doc = "7c8bf143cb7ae1d22416df88aecf7e004eb02bf199f74f8003aeb9ae3923a3db42f1735650fac8aa908bf220f16ca48b3e4f9dbc312668d87df65149ea674be4";
+  sha512.source = "ac76060cc1b8c3bd876ccece1d82127575b956fa1bd3bed63d9d8a927845c8477c903b47be3a6e2d85de06899957d273d981f250cc7d02a12830a8cbfa6f6183";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"gene-logic" = {
+  stripPrefix = 0;
+  sha512.run = "b7cdc0d653aa8e25d763ca4115fa6fc857ddae35ed835aee6b6a204ba83d01ab91928b00248c40677ba132ef113276912a6b85dfd456d937114a3263a1ef4c7f";
+  sha512.doc = "db358777af18e7d2e93dc23084bec0f47270b4cb6c6078382a1eb9ce288aed06a6f55fc30ce728b1312d06f871458fc6b5b697b1073316e8f727b5ee80f99468";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"genealogy" = {
+  stripPrefix = 0;
+  sha512.run = "907394cb0ca9b3d339d78595e613236038ea2acce27c4468b7d028d0db7ddf36f7037c4f0bc63d5970e904d0675bcaf057c769239a79f064fa6aa9dae4f2014e";
+  sha512.doc = "34c9d737d31626331a18051a5b04584fd896d7cb8ea1814ff2fbf30486ec3578b2bef16155b9c8f2ca645d42f797f3101c799d3422c05f824026e268fa4f94e8";
+  hasRunfiles = true;
+};
+"genealogytree" = {
+  stripPrefix = 0;
+  sha512.run = "295a763f682dc1acb025856df4de0474d3893d87cf0e530a2b3f72ef7a37dae87d34c97abbf40898f920f188f7cfb7366b654004b7c577b409ff14caf25c1072";
+  sha512.doc = "9ef261874b54e2d5d092b2f362ba0e5ed6b1932f433290ebe6fda61cb87aaa3b6ba09708df31d6b10c1263288fb62ef79878ff0dbfbe104d83d3b4559292b6f5";
+  hasRunfiles = true;
+  version = "1.32";
+};
+"genmisc" = {
+  stripPrefix = 0;
+  sha512.run = "3e41f140088d5340e2ee6dd022eedf2dd9d9e6424d5a2467a674334b4afa079d91039e1eb018c4e95bea47d61dc32350a3b30897ff9e4c70cf9eba36a29f07ca";
+  hasRunfiles = true;
+};
+"genmpage" = {
+  stripPrefix = 0;
+  sha512.run = "b2618005fc0f00a636e3a307ba1038f8dd39798e2ee2afa4d9169eb45ed4b38a67a57bfb516e9dd8d93ea0210a7fcde21b26c0564b974442e18021d83f905265";
+  sha512.doc = "c428886adead6fed52f0d249db34a950b4f22b03770ce1bff0831fca29477ab92b5d83a9719b73aa45aeb5f2067f31afc810b6cdfdd69e709ec5e61a08f45472";
+  sha512.source = "563042ab68aaab51d357c957111419012a0edfd27332bf30be0985e8625abce945ca6a6a081e62f6d0ee29b6885a55270553b622bbcda5f369ad61b53d4ea723";
+  hasRunfiles = true;
+  version = "0.3.1";
+};
+"gentium-tug" = {
+  stripPrefix = 0;
+  sha512.run = "b95a521b417f21379e61b7afec5462f06e3e20265f9566d40a19fd6ba430b02c6a3994a2861ca1f885612bfab0ac174ac89fb2221734e33aaf267c2a532e56a5";
+  sha512.doc = "074d5a42ddc427f240a956aca94d95b065813206b2ba66778de032665b924d02065cefa17dce14671b31bb8e455215bc34cdae29ee09a2db8b6e330fad3e7e1a";
+  sha512.source = "0c660e919f9482d16ef6ec5fcc91a894b2425a250951db1f688f6d2d13ccab5463225cce652b35f0f7e3781e046fe42f7dfdd285eb85deafaf420e0100dbb01c";
+  hasRunfiles = true;
+  version = "1.1.1";
+};
+"gentle" = {
+  stripPrefix = 0;
+  sha512.run = "b244b249329d1ee622686d2a44d1469ceeed7e2adec5d82a2482e8659266a8224490531e0ed971b56f945b63fd1081f29aded9c43cea78fa8a9aec836301b26b";
+  sha512.doc = "fe296c5bc38a1e6d13d2b46dc8081a6658764f7017d0831cfd46dd86082371d6ae095ec3b52b3aaaacc0a57cbcee066b94644a5746391fae4129eebaa246e146";
+};
+"gentombow" = {
+  stripPrefix = 0;
+  sha512.run = "4643d4146fe341552af7b3600b61b7c852427fca554b9c7fd4eddd3b1645ec7a686a799fa2371e0a9b1cad02ab5aa965a690daed477ea8c14711343e8c274992";
+  sha512.doc = "0de50b7a73f752f36bca2ae985a53b1203e9bfc733e2cc3bb5e7ed9afbab0bc59b91cba95a315d8f41a4097402ac9c84a5fa86bbbffaf003fd1bb7da643af54e";
+  sha512.source = "d73b8bcaa902875be9fbc2620e69a85deb226337b9c330a1e083bc6b73690db214a8a426d243b41b50ac708911559ad8287f7842cd449039b98510c04b75bec1";
+  hasRunfiles = true;
+};
+"geometry" = {
+  stripPrefix = 0;
+  sha512.run = "792e765a8882e18db38219b0004c6079793d630ca7f80b6b53cb79989d0a9a0d9a58c69507ab6418cbcdfe4cb00236919c51f3851171dfc42e43be682e0b92d1";
+  sha512.doc = "0293ca9ad86d2b2bb0cd38d151aab88c2d6991fc8ec5c6745fe68dec0795082c55d473114cf44e5dffeaf17f064b24720509f60bcc1830bfcae67254b0997a0d";
+  sha512.source = "9a18a0339fef0c5a0056ddd03b100e329b8860d1778c1e0119bc9677d5e571323adc5029c245afe30b7232a65d5793221aee099e7666a73e9b695a2336bdc341";
+  hasRunfiles = true;
+  version = "5.8";
+};
+"geometry-de" = {
+  stripPrefix = 0;
+  sha512.run = "462a81975ad340106b5e35d6d57e6102d31baf494b203426bb8783ca82b7f02e0656ccda608d558e91693a771e14ceaa02094f365328296b721147eab83fdd3f";
+  sha512.doc = "afcbc17a2cf01ec949cc2ad427335f092f65b3187a7a0225971a9ebe53402b19629767dcc3b1935f7d019cd1dcaa72b46931efccfcd2aa61c4fbffce2034e4dd";
+  version = "1.1";
+};
+"german" = {
+  stripPrefix = 0;
+  sha512.run = "6cc469012ca6cb76baf2bbea00d198b97c2694d9388e90d2ded6b27da30f8d56aa2e6742ecabbdd335b7299c0c7476cc5479b59fa94468c9354f35ce18b59732";
+  sha512.doc = "b9795ae418790119ca923079221114b9bf608ce2460b810cb39575910c0b173ff445c428a2ce6260bf90a993fb354d2b5c300ba58344d907965b65bb6f2d4ee3";
+  sha512.source = "9064ca69c304f86eaaf2530bafe353902de078530f57f39cfcc0a9dc0d5a04ba5329ac9d0e7e10e3ddbbbd380c14b4efd8a5b7a6b0099f2c504563af74469c42";
+  hasRunfiles = true;
+  version = "2.5e";
+};
+"germbib" = {
+  stripPrefix = 0;
+  sha512.run = "a7854f834c868ad80bcf986380f19139687eb80309e3aeb9a001d2030c5bca51de617394f920801834df460d05b52878301c6b45a52666984b3ba2d0910c416f";
+  sha512.doc = "53dd4fff2fbb7044436f37e8a2baf48877699db4f99b92a701d10c0230439b00b48ee09051839efe4392abdb4335c3998d92d6239802c765bde4aa2df3d34ab6";
+  hasRunfiles = true;
+};
+"germkorr" = {
+  stripPrefix = 0;
+  sha512.run = "6819a79268da2704a3fa6baab74be48ccd591ba998a0b012d323cb0149273deba6298a92629f0d19c19725ef0b41db9dd28adf9bb898c1c637038f9c22ad4b16";
+  sha512.doc = "ab5362e069674c2c53709bc776be9fcbcfd3e56226a8fa7b9230c2f4ccb6fb74bba20485362f48130c153d81df838281620a628671c202cd60a52bf8ab5b89cd";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"geschichtsfrkl" = {
+  stripPrefix = 0;
+  sha512.run = "24cad33dfcbdb8ab91a80509771bd130ea6682a14fea5510ea202af73155653471deab91abb43a302b9717c252475db58135ad465f28509adae5d8583bf98e0b";
+  sha512.doc = "6d1097dd0047c029100358bd3161f2ca515a09cf9a62b2633d4797059688bd5c30e4eab11c31081faeefacf892415c5d9a4985d20245ea9cf79b4197925ed2e7";
+  sha512.source = "28c6a7181bb91d32ddcdbed7dd9824c8a63a351acc39f4c2e60ca507630fc23b0afe62380a64618d882fe742388d5537a435dc0b6738ba8d5288c5f2894a4064";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"getfiledate" = {
+  stripPrefix = 0;
+  sha512.run = "017b3ad95801da2788f2c5040225c6a8a2ac6d005c1d68d9eba0be061dfc9fa6f088a0279a75d25bea8ba380e4a92cfbd9b6a6b812d08cd2f86de097f7974fb7";
+  sha512.doc = "490daffa0b0b28c9c02d745d8de50f22395f6ae773e07f6e826a8ddaff0d38f9ee48e822953e9642e46be26084ec2919bcac76c388cb3f42965f1b662e4e43a0";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"getitems" = {
+  stripPrefix = 0;
+  sha512.run = "8797c7e70f1c81330b68b6c386116b0caf2c350a2b75724d796f0ab7380a2ea4cb2ae293ac3e6b941887b30faa2b73775c2bfce7c674ee98c4256a23231443b0";
+  sha512.doc = "95302dae67f3193dc3d52b4e5724584ee066eee1dbba30b1233faa0c65fc568f932805b18b8054165760a2b655b486e7f3115d3b37be780f8f5a7220f2f924fc";
+  sha512.source = "1bc8b4c2b75c5cf43e18a510e5e479a7109ac440266e0dc7d748d6ef391280d81f72a07f6bfc518c6c0c313b7c8e1e11cfe9ccaae33540e1b48988414bef5ad1";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"getmap" = {
+  sha512.run = "e5287152442820e20087b45c50a750af621e71e2175cd6790231d81e1f338e50aa75f29d9fbc31c2e5802229c8f15c4e0c7769d0513f1d1b0bafc96a8a3b120f";
+  sha512.doc = "bb55c60ec958182aaaa6dfc292a06fbad8a0ebdcb56a6799f1358ad2009bcb72b06611672219c5e9bd6d7cb4db76c4fa030be5e06f9bb38d04fa6744f8bca330";
+  hasRunfiles = true;
+  version = "1.11";
+};
+"getoptk" = {
+  stripPrefix = 0;
+  sha512.run = "6a2e543d0997c52155807d0d2641af9714cb09531286a58bcb2d5fec0e70c694edb7d603a250281a641610d1c39495d5f93417da5cfea7a86da1fd53a98ef77f";
+  sha512.doc = "fba54e8acd4f494c4e859c8705cb97923e477ed909720adb8c4735c527c3b13799ad74ac1700099bfa282144f2b38358b890bc52d4ae4a9e16699c2d0e10619c";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"gfnotation" = {
+  stripPrefix = 0;
+  sha512.run = "4f99442eacf28ea13cd98ee4bbe981b95ae9d849e6bf2682cac2305fd793f6e9f5e4211362385890956fdb24ef03748e9cb0184c7ba9ed89e7985b2caa3e2da2";
+  sha512.doc = "b65d173c11400a7681510cd837ac6e8ebf65a458327bfdee140013d49a0c6fcc339f6c45d4b4ee918585acaf785c12e66b3df5f73f01a1f2d8c5b8db58b9c47e";
+  hasRunfiles = true;
+  version = "2.9";
+};
+"gfsartemisia" = {
+  stripPrefix = 0;
+  sha512.run = "28cb811a30c06bd6390b9268dd2a7a4dadcb2fa9d426d9461af1ba5593b2c419ed1c7886c3aef9bdbb0f1fea3d6bf127ff6088a6b2c2048dcccfb21c2a06a5ee";
+  sha512.doc = "9f2efd76c243177240f237f7232fc87eb33d7ea1177a7bfdf7d506077e19c40d3fd923a960595c46f50fa19979598bd06a1865cae8794d45f91da1d6a9a60a7b";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"gfsbaskerville" = {
+  stripPrefix = 0;
+  sha512.run = "b545ec586b3bdfe3da2cabaa959ceeeb4ff513b48024575b1b5e3c57bb2d10a0b4e2cd7507726275eed0826dabf03d05c20eb9d5ec341aaedc0313264214ef78";
+  sha512.doc = "a45ed2b35774755a6558431f784faad4bbd63aa81ad5d80c3cfe3f7726604aea3e4de2baa72bb27a4e2271e9bfe180c8963d06b880a0efd2dc5f7789dcabb51b";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"gfsbodoni" = {
+  stripPrefix = 0;
+  sha512.run = "e01cca38176330bdc0a4b523bd2bd4f73a497d90a34682d29920e145d11ea099f163fa08470c79e10a27a137a5901d7da9db54e461667af61c687adca1960249";
+  sha512.doc = "c70b1a32e945d82e50b8a37319ee2bf63d4800b381f317168fd945311485cf6c41c7a3112e89457f4ee40bd29736accf681bd61494120e3d41f0c8fb28ad466a";
+  hasRunfiles = true;
+  version = "1.01";
+};
+"gfscomplutum" = {
+  stripPrefix = 0;
+  sha512.run = "4013ef92910c3c1145708afa5a9ff13cfb0aae05e6b225c56c98090ea7cd223799e73212982312a14cf504a355dddce08e3364df8c046dfe462d07429cfa617d";
+  sha512.doc = "5854b000522120f6a1b065300943fd8aebcd75f57da15d667616a3706d35ffa35cac0422712d0b008dc2abf2b9deceb0248fc044be68f893f6ad0eefcd50b316";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"gfsdidot" = {
+  stripPrefix = 0;
+  sha512.run = "9e6ea7c3d5b7ecff95270b17879297abcccb62df11ab7eba54f02e7fc2c732d1be39b052e3b4b6eff9990ad010e46f73b40b4134b4e024f7d914a1bde29b4a7e";
+  sha512.doc = "93bf3a4fbff9e0c936877b135a487739a7f48c2797cce9d27c2a9f173fd290c2da5a3a3f30ca883ea057ec47a4695d54f5e85ae01f13af40e1dfd3210cc7c273";
+  hasRunfiles = true;
+};
+"gfsneohellenic" = {
+  stripPrefix = 0;
+  sha512.run = "c8ec8f9fba5d653e5497a9812c5978a21cdb5b59f6bb0f45441c761d2afeff1c055c48f1b07c4f56c6ba6a6adb2f99525d838fc7850c7c97bb3f3e0f67f50dbe";
+  sha512.doc = "581bd169fc4f6ed92453e2e8f50ee0efa4d3ea282b710c340d1f05f8ccd1e117721ef4b9e9fd6553912ca60d8ee63eccadeac710186cfae62a39842d31b5b766";
+  hasRunfiles = true;
+};
+"gfsneohellenicmath" = {
+  stripPrefix = 0;
+  sha512.run = "11816aed70ed5d89b65148b3872f77a788271c603ee4f9eda71d250347bf7f2aa251b7c8e9dadaab75dde273a465a199adbcade3a957dcc79947d5d52297e7b7";
+  sha512.doc = "2022e02ec438b19ce6e8fbf8f300ee050c2c7687408a4c4772751ef3059c882cd6944985a59ed9a5c1c8de1aec0ef2444c6f06c468cb4a8c8a3ea269b12b7ed1";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"gfsporson" = {
+  stripPrefix = 0;
+  sha512.run = "f52d6cd8d0b674771dd56a5d2974fd3edd8b4685bb201489e578c62d1e31b5dcb6f2cb2e9b05702ec439ec7f0b35740e291d3a92de53b75870fd791858f8a474";
+  sha512.doc = "3dbcafd00a88537db9e27aece276df08da805b59076d5e65395a4752d8ce57a794f23508238e96ec26b8d7e6d25e11992c2a567e44ca2f930bc44b9dc980202c";
+  hasRunfiles = true;
+  version = "1.01";
+};
+"gfssolomos" = {
+  stripPrefix = 0;
+  sha512.run = "6e6ac03cf7ee20accfb67855b3dce136e3caa2466fce760adef0a2c1633e0a170543cf861a6a07a0c80344ab026dc2f74a35c5543ea92a53f7ce8a1042f778b7";
+  sha512.doc = "67640d1a95ad7ec43d7df407916cde264c5460cf400011cf0cdb3dc4caffabba370f2fc15ae945e20b6a9bb6623645f6ffe80034a781cdeb11c400bd23985e3b";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"ghab" = {
+  stripPrefix = 0;
+  sha512.run = "7e919cbb0c84fe337dd05c749a3288990e750ff0aeaf119736108463a1684a18a66be94811a31156f951c871b2f073627914629756b06e747f3220d2ce08950f";
+  sha512.doc = "2cb7dbf5b43130b122618c50c18e513dc0ee0ce267cdfa6e710451d1fa7fce8965617d74d48748241321948ae8c5eb9cfa4945df146ed8e5d476d0fc5caaf204";
+  hasRunfiles = true;
+  version = "0.5";
+};
+"ghsystem" = {
+  stripPrefix = 0;
+  sha512.run = "fb818e9da2c92ec4b8f943766f00b39bf2ef0f9a5ca5606ddbc4846cd8294ad012c6e7e45b51d04c249af2bb8f4d59410b644e65e20e397318453e0860d60b91";
+  sha512.doc = "b013e2e327a648b07d541c6d4af50f3142012a8ad62eba032aeb625ddf4ab5c285b8428f795b193fc85d6487f68921df96f8fac70f0128c77b1604bd71443b62";
+  hasRunfiles = true;
+  version = "4.8a";
+};
+"gillcm" = {
+  stripPrefix = 0;
+  sha512.run = "37c8141eac6b1636292479299f7df6b3dc128addf8f7ba680cef2c75d2f7ab04686134b243a86168c54052d4dcbc33f13c13a6629d7c98d3908e4cce5fb53f06";
+  sha512.doc = "55e02d36c12bd12932c2d220f892852dd1c8c947cdea09d058ad38e5e513dfb684e75a8ecf07f5711200f942ea7732519c739866458c330ee271bf45af32ed45";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"gillius" = {
+  stripPrefix = 0;
+  sha512.run = "9620e63fa3a9a981bdb20cbd6d8002179c722e844df0a18566593acef864f134a894a7e1920fbc4494467b1301af0bbf9ee80fb10bcc192762e5b2505fa8becd";
+  sha512.doc = "df8fdeb2055b4d3383eb6ebab3dc4fb92774a96d7b31e7bdd7a238e215619710a8c0ec3fe9593213535933fd76c38947ed295df1a628aee7a7d7b21078f5ffb4";
+  hasRunfiles = true;
+};
+"gincltex" = {
+  stripPrefix = 0;
+  sha512.run = "c77fd5030e626027819396e94d07c1aebaf05a1ef6a02025a6a0f4140d22fa8d0a8695e440ab72eb0a042ef5f33430ef60a47706658134907725c49969841171";
+  sha512.doc = "2f3a0ef1eb5d1b9f5a819e99354572f34b6fcb7daff3ae02f277d9280e202d1d4d1a54b9c033860da1ef3ff302229bf2d1aabbe1e6acff05589d3daa32f5c87d";
+  sha512.source = "ef3af40826e339dd7ed92d0f93e16029bff275a32e2c2cf64fbc1dd48a243e9a5efcb6cebc9bce237465c62a319386dfd94706238958381667195cf86face04f";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"gindex" = {
+  stripPrefix = 0;
+  sha512.run = "b65317c570c923c7b6b84c2923122d844f895657267b694b46fed2d505348833a57700e4da93cde3d5a81e7589a456eea179a455dacb7c9324e0f65d9c718c9b";
+  sha512.doc = "2a3ed388473c669874b0474b9b1f45c60e2efd69e8c589a9f9086cecaeb5f1e3192fbb949c3d0b485422c7f6b49075d3db4cb8ba03bbdde0f5f77089331f770c";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"ginpenc" = {
+  stripPrefix = 0;
+  sha512.run = "20ea4e42fa07c21d8f2ae5d4419e6382141e6babca0b89b508744ea22d6310052f2c46e6ba0ad32b06f5623daee07a16eeaaa98378c9ad04dacb78634b9a583d";
+  sha512.doc = "4e343ab469e2445f6a2fd5297ae38d1cb42d4db1a3c438885815a2e4c5d367bfae3226a628e11152826fc5e4fd28a9c4bc5c393acea550c5ab33cd854d4f3e8e";
+  sha512.source = "b28077cb4b369567952e77198cb77f4edad02f0949d4f46836ae59d75a2f113f64446fba83a88e6155e9356797577fea72c79244808d575359eb7ca10d029940";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"gitfile-info" = {
+  stripPrefix = 0;
+  sha512.run = "7d3577b55f0154dd9c0a1aff3d46741631fc561b4c730a4f55a84dff361e6c27f327979638946d89ceb35370bb4051b1471481e6bd761fbed66757bc613abb2c";
+  sha512.doc = "ac2083dea1ae4373ee2482f41f9c66ab93a2b66699fa01449c712c219ec0c53635230b062ba58b4107eaf7fb54fb7eed76c5b9346ffc60f6f35b18a72ed0a08e";
+  sha512.source = "7b15a31e0ad37c75fc1e64079edb4ffe93d9e9a71fba7db13bb9ca7b68fa8dda0244fc0da473ecff8456459bb3f6f52e3edec2ac8513433d03ab107715ba5258";
+  hasRunfiles = true;
+  version = "0.5";
+};
+"gitinfo" = {
+  stripPrefix = 0;
+  sha512.run = "099bcb4970827cd3309f88278d8ed993856d5ebdabb22c3a3f558787bc6cae46378f7a92b88c5cbaeef496f40a8adf1e0740e685d667ba2376b5852a12af9e5b";
+  sha512.doc = "c5a9c948ad8cf8f2bc3cc134d60165ca4fc79117a6597a5981b39e26e25f4334f479f2bc1a0e22c52fc48794224115c0c170612c8088a414544d9f51b18421f9";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"gitinfo2" = {
+  stripPrefix = 0;
+  sha512.run = "7dd68c7b1d5ea49dcaae8ba1a1582676617bcfc6f5c6ba34eb1c62e60ea5b8ac3a50841a93394b640e8a79c3cfe447858fdd1630e4095683958f8d36439a84ca";
+  sha512.doc = "872b7fa8e0c97e4f6e0e1989b7c45507773b4f96cd56f7aa7064376b520d8f2beb4acfe71a21e295a8a457b86fcf7521809fa59ad02875466cf426fa09bd8aa9";
+  hasRunfiles = true;
+  version = "2.0.7";
+};
+"gitlog" = {
+  stripPrefix = 0;
+  sha512.run = "2fc9830dd1c43cf0c32fd743c9fa001287f5753dea38d8491af43803a1d98a0e09cd05641484fd2f7c47e68c8c6919c2eb9fc298ebd761166eb5b77c54d7f00d";
+  sha512.doc = "c1bc22cdf9b23baec98ddba49784a09c97e9e5f8c1a471dc39b3d58d67bb3ad2559f25766debeaf613b3c4e8d8bb4b22244de07d09e957ff09a94c0254fd3e64";
+  hasRunfiles = true;
+  version = "0.0.beta";
+};
+"gitver" = {
+  stripPrefix = 0;
+  sha512.run = "ccb08db2f49ab23e832e12dcec8b2754b4a1c916f2b0b5582723ef6080dd93a922111f6b5b514f1f53ca684e141c89f0e1d95d0b391adee857211f0e7bd243e9";
+  sha512.doc = "92bc02edf0ba8a6877444b418cb15a9260fb5b26fd95bcc044665b306edcc1c5f5b12e36695cd02ad9260d7c996195e3beff69843ab7ef9a9272bafa2b1f2419";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"globalvals" = {
+  stripPrefix = 0;
+  sha512.run = "815a1aff9e889313854962e44c1c09a41713f4efae915a1d1a65a3f0777a4c36e9987c588c0d6f2f1ea91cfed6c28ffbe045a842ad71fd6babc91ae1bb16aa5f";
+  sha512.doc = "36a8b35ad90d9fb797a03b48f8cf818c9514ffe6e7c24be157e04455559d3004ac6011e2dbd16a4c478105b39ec0d2597f74e484a1913bcb180a7209b9191fb3";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"glosmathtools" = {
+  stripPrefix = 0;
+  sha512.run = "9587fecefba724acf5db13a1e915d1adb8494536be2cd72b1d20d9a52b065e4efc91ac4d40da9a16bff1fac0271c0e982c8b975ed0606bcc188cbba46522ff89";
+  sha512.doc = "f000a1389a70239256c61ce72865f1b606f11802f6ad9761c10786d19414f0e59de38dcf0f1414b0b05fef3f49dbc4c0c345b2398b4066e6accd62a746fafd7e";
+  hasRunfiles = true;
+  version = "0.5.1";
+};
+"gloss" = {
+  stripPrefix = 0;
+  sha512.run = "399bc1b809c01fd60934e28834dd7d6f263aded75bbede67507a5dc7bdbcdef725248b9a10d4ebf3cfaa981be33fd35a4ade78eb20b2b23cbf851376ad5e58f8";
+  sha512.doc = "871760a86ffb9d50cd480e2cd234a9873de48ce620f57a6538b36b0c1fd5e7f11342fa435e147ee1fb47ed08b8e855eba8168c8b755ed67ed7fffcb8f0e0ac86";
+  hasRunfiles = true;
+  version = "1.5.2";
+};
+"gloss-occitan" = {
+  stripPrefix = 0;
+  sha512.run = "699068d013af556efe5c02f5a2338f2440c0b8dd6bed61dfec94c9fea3f8b50926061db899e5408172414e48fbef98e79905df51463967ae173ee0dd7f361b85";
+  sha512.doc = "68b577e22544b76caf10aae62282a2649e1d18d9019c0727d9eb14d5f0342b95f35e1a95c85bcaeea551808aedebb76a9d5031453269d5ead71a2df0fa45e228";
+  sha512.source = "a4d1936873891b2e04e6d9b476432090b7b3e31ccd07dcce7931b62a8044f691ae79df929dea87ab2f6b7bb89dc84e33054f56e51332d84fb97db9d787dadb0f";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"glossaries" = {
+  sha512.run = "2b70c5a8318f35288c728d3b03caab7ef73a689fbbe186fe46266c987d7a7922be1838307a00be2bf6c3714bbbdd30c778aea61d85ae92545d0ad4111021b9db";
+  sha512.doc = "2a3f0bf2bc02cead8077dd45f3b1c3c02fdebb9b37a25afe7c7e63f99c049cb41a0ae77fbdc28ab72aead555e926a95a242175490fd548dddf8cdb98dc4f10d7";
+  sha512.source = "1783b1e706e870b2814aa558e3f80b8c4a92f12d6be519e532f0f6a1c7a7316860488347ca1b4a53d75a75dbe469014cd424e098c28efe10fab4e3ddf7c62fe0";
+  hasRunfiles = true;
+  version = "4.43";
+};
+"glossaries-danish" = {
+  stripPrefix = 0;
+  sha512.run = "d9551aaa01e6f6720406a58f869048fbeac30fd629edd7fcdef657525dd1f7fb3faa2127cd81fb777d339ae65a1015e9cea7e5fe26a7de10db3a387152aaf0b3";
+  sha512.doc = "8e6097ced6686f3f5f0162c7deb11de9acfd55ca152c8ba3d4eafe155f645f33ec32dc495e3b4f4832e33300cd63d2d4ba56d018177f96426ee72e14cc60e230";
+  sha512.source = "f8a52fad43c5a95989ed8da27ad5a15da56e5cb2b08797bd70879327a512d9bad44fd217270940ca1ac541a880bb939b9e360fe5a686b0b25d779baa1bd01de6";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"glossaries-dutch" = {
+  stripPrefix = 0;
+  sha512.run = "0e3d2607caa6032c8c768c1bd7c84808f6b836d6c167b1e0c720b57c3033c175269663f6e21edc248676bb2b73142c20c85cb6c3011586cf17d876e540a435dc";
+  sha512.doc = "c2d6ce929bb9e7482413886967beb598b6cfb4a2f84d5a2e5edd7039b94e397ba9ad2e63954178d6fae91c5e3aeb080a68ed466b609ba0adddf98003f570cfd1";
+  sha512.source = "5088bafba48d95e4392a5891ba3566d37a708cc7ed002243995d67ad6f6cd1eed19f6a572e5e3234c8e4ce58e815b4cc79e97d2644bc5341911388f7b80030aa";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"glossaries-english" = {
+  stripPrefix = 0;
+  sha512.run = "f62c43c9cb5a10fe5e364e6aa4ca500aae8b89e71f6bc80831a8c8211ca640f3631f011735ee5c82278b188bf896360b69502da2128e1db1287d24e44805ef97";
+  sha512.doc = "40c30888541114f5594403ddf251f0c209daa57c6b6f2d3d75b4a51416bf3011bea70cdc5f461e80a1e148181d6ecc2b2d7c891a7c75b1c577a72e5ee8ddc8e9";
+  sha512.source = "4a1d9cbf515c52d8f8a787970bf5537f25d6de7a66c3a1819cc5dec05df0f004aaac3734dba6ef813473db0cd5b08db4ddebca8dbc8674c2582abc7e9e85524a";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"glossaries-estonian" = {
+  stripPrefix = 0;
+  sha512.run = "48eac96868bbeb636bc8d4352cbc1959829daab75716b3dea2ef98d98e388a2668a2ea1e35cc46f53e9ee030aa07dcef3e528f056f59d49883f0a00380785bcc";
+  sha512.doc = "5f957f53acaf6b56e338b606843cfa2ddd16dccef6bd2c74844e514c157ddbc3c5c24168cbe28c67894afab8d115460fd497de91f0142bbec3d1987d5889925f";
+  sha512.source = "f2d2ddecc5a338f844a9b98d50e636d69d31866e723e3aa261ddc5ac2d8349d01e76afdf9cc6b7a4b4d96dadee78ea6933c0d1c69d1196f11770c92cef356fb2";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"glossaries-extra" = {
+  stripPrefix = 0;
+  sha512.run = "419da7c981304d369dbb6dd342bc5315d84fe248793df725e454841b25ce2b5d2204e76e84539bc4bd71025115b9369944cfd8d879a02a5a63fb3cca11d0c977";
+  sha512.doc = "e2244e01f9efc52e629a50491543ddf9b4f441be5afd9c185923a9eb23d9ba01208e90fa4a7c05e11072fd5f05246c30a4a48e9deaabb1207b05aedf38ba7fc2";
+  sha512.source = "a11ae8c79f40f47ed05081112f811242b5b5192e35124fdc6ce628c1a2c3cc73ae816f6ce43f9804c783072f9ffaef1f5a7bf9744b7439bb754cbd588b948729";
+  hasRunfiles = true;
+  version = "1.41";
+};
+"glossaries-finnish" = {
+  stripPrefix = 0;
+  sha512.run = "f4008f165ed34678a9f9d1cc2fbf2f2dedfa66d31acb5449da6f93a8b19a7ea6b7a7a584ff7c744e92637cfa4a7c98a478b096be73a3abcbeadf7d2af00a607f";
+  sha512.doc = "46ffa9e86596919c6ee001bfd425fbe0c58e890e8af3131ad89b4e5ae8ce20c8f3266f2ffae6ce039908a137180c0552b9c9f2a729bb55094f999a0bdc3443a7";
+  sha512.source = "e21f3dd39d6c5adaf829657c75badfb9bfe71f57331a89ba196e34a042a03f308206f2c3cdf7e1bf5dd82ac230c0aa5c48fe982e017ea7bebf2a40bb2e664511";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"glossaries-french" = {
+  stripPrefix = 0;
+  sha512.run = "8516e94f69248238b0e94099b67c9807f02587e934e6fd2c9ef23befcfac783297cc4df71b8e41be77fdab85abcb4103435c3fd24584b46a3b473fc4489d5d82";
+  sha512.doc = "c26b40d499199c15c875cdca901a3168ab72e4009a04e92f3b1ae9010d7912484b1185453d117154eb5b9e63358b36cd58aeff3d0c4727945a343be4c3c2ede0";
+  sha512.source = "9c6b0b1d851c88c757e87c8b29b2cfaa3886efb00433a9c3744e175fd4dfd4433de3b80b9d70df89f879536b1058ddb1baeae41c5cdfc6c47377256df8e63882";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"glossaries-german" = {
+  stripPrefix = 0;
+  sha512.run = "e0b8e18dbe4d4e503c144be2406b99b56ef0a48847b4044665ac178dffc59d2b8ea95873ee5f2e64fcfb8379a44ee8761ee84ae44fddf996d1029372d5185d58";
+  sha512.doc = "0ad0d7d8f41e52613d049fe3ec6e48d5ceb77e768c7b9ee6b3b0978eeebe6abfc803df44bbb7f90b4e487de074a2cc174224ab0e89d5fe7bc896adff495abfc6";
+  sha512.source = "7d34e603e6c667fad268f4d16edd7b066d3f6fb34739ae5e7620cfb2024fb6c7882862845055205d3a3c14f2c60bb3b304cbb1871958c17427107cc245e10bcd";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"glossaries-irish" = {
+  stripPrefix = 0;
+  sha512.run = "b59add658270f734a8fcb70bae29ac210c84472f0f7ded62baa647bdbdbcba2e63dab71aca6f8c524eae9e3d80bfa7bf96bef45bef7039c3eeff738055a93acf";
+  sha512.doc = "9ce14ee4ca3ac1eed10f8c356fd6561f7ac43abcde46009a6d43245395985f045e9ecb83a38a190ea3a5cabf462a233967993bcaa40211cd7e64791dc2a583a5";
+  sha512.source = "cdc7332678be3abc86804b9b674aab88f087791c8418e6273cc07f2c2b4bc8316ad21a3421af9ca2f87f76a3ce42a6fc5e7343e006120dcbe1c7cb14901d7ff9";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"glossaries-italian" = {
+  stripPrefix = 0;
+  sha512.run = "aeeeb9fcd98e55ed64c918276e0bf0b25489538da80f96030a85225635e7e0ca3d1c93c65aba8b97b486f086a50504c257ba478bdba28de92058053dcafe323b";
+  sha512.doc = "f1ee5a84c9a67b88087f657c259a3700fcd1fa4ad8c765cfae11cde2d54c4a71e69dc57bf626ead0d2cf1057750e284a31443c72e994e37a62715548fa9dbadd";
+  sha512.source = "9a014922abb8be849e97660f2aabff49413a56c06a93f5a3fb0cb89f972b54fc371bff8dfd6a758196d941efbc9281c5cab3fcf047901ab08e296d55e529206a";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"glossaries-magyar" = {
+  stripPrefix = 0;
+  sha512.run = "66847635e1f00af9191cef210c19ed154dc1e5405ef0d2ad38485a913626ab9cd93b7c35395feedefcc04bfd1b46112e6410154c2ff26be51553619326d1e55e";
+  sha512.doc = "a6bc19bf794943b1b15c8cbece363f644671f912bb71d8b2f0a9e75d05886ae4af4846c78cd060099bb78872e4d7991a9a3274fd1343a07bf73c3ba1d475241a";
+  sha512.source = "e0e90ed2fb01df98b20a7807a0dc1155b108c35788ea952f753ee9033d2c7e516086c6380b8617411392198c5469b57b96aa35f8903e44ce44d30f5758acb75f";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"glossaries-polish" = {
+  stripPrefix = 0;
+  sha512.run = "7ad5a924f24acb052c16436f1d1eb198bf10c65ed3f77fb8911cc8b390cf286581a6d7ed409211993545d597a4dee4318e1d9b820dca6f831ca215986ec4a1cc";
+  sha512.doc = "cad7bbadda3e690ce56c75d2dfc92b02576226cb31d848b0c96d6115d18d222a50e514a6c6b5db9907d6a0e542824e229b063a0cec49dd726246f3dc5d4b41ed";
+  sha512.source = "5f7ba658feb54089405ed6a2fbab3a279143205438a9dbf6ba0a49d38245799cfac6369c48f9ea1e5eac2125cf475e26a3b31dd3745f283a21f3ed07aa8e64be";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"glossaries-portuges" = {
+  stripPrefix = 0;
+  sha512.run = "64582081553f90a5000992f9db3f79aae7ddfedc6f128ddc09ec7878576b0e17a580f7c58515c2696e2c46ce1ba49c2cd756687c144d0134d91cb6c5e0506ec0";
+  sha512.doc = "5f1692f14e2e4a596555cc426a556d069fcf710775d9a039f0143eddbafd0502e4f4a10e677a43589b1f91cddedba6dc9358b6015801e68f1b3d1e908e57dc09";
+  sha512.source = "a7cb8046b8ce5d122f691170804acbcd39b5ae367cf66057d12fb24d58f142e2a4cf52a1039de9cd73a0f8c0bf851f07367c180eedb12923ab3398189de29652";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"glossaries-serbian" = {
+  stripPrefix = 0;
+  sha512.run = "7360d33c1d3912802be171ecf8c218fad45719ee6dfa0596904484ebf9dcebcc0d926112e40fca76a196ec6081fafc4524c81b366008fd20207f8150dd82be29";
+  sha512.doc = "1ce493838bdc59521728b6856d2cc2df26f44f3bcfcfc04d32fc20d3e416639b1420e1451acad8b8bb0597336a77b553ac599ec0c541527ab4d8e56765f07f3f";
+  sha512.source = "9097fda313f9cd3e0db095c27fa534269e2460c6b5efa3e6681471590591b0931c52f28374ee33404ae0491297d1047dac8b7ce7a525a46b01873210b6242515";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"glossaries-slovene" = {
+  stripPrefix = 0;
+  sha512.run = "d569d73cbaad175549fe5d4000ac73b0fb65d00598dcab0f3a7c7b384682568d21016fb50d7dc6d2f6a1b250ef34c44c784eb99a1ff042bc3a52bf1c987e0b55";
+  sha512.doc = "63d212e4c04dd7c7e663de230274b9111b8025839c8136313677d13e967a23870927a49220aa1efa0702422e8ad4cf683d1e5e09fcf291873d78bcb055e24003";
+  sha512.source = "0e779292973bed40b3e077058aa99ceaa851ef516af7be57a21bd378492f77b87e65ca95f9f8fdbebc8818dc820108e598ce93efb8c6129560e0ed40f3633b48";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"glossaries-spanish" = {
+  stripPrefix = 0;
+  sha512.run = "6c92de5e24135a9c47d200f8f0c0ce7dff8a01f8c13bfb49d4090d1c195052559f75763c0ed68d633b40cf18bc89bc51e7b6c2aacdec05376a3c2e1d1b7a31b2";
+  sha512.doc = "5fc58f64a7f54b50dcfd632e700805bab2f46a92b727853b147d9f7156b2fddd50a8fac08d0ac59bf5f89e0ecf1d5ddf7c22482e661f8a5e7b5568832168bd5c";
+  sha512.source = "8bccb84eec75980107ed08b9f7e1ef0a595f7eb0c270ccbff77f4ea176fb5e17292b7d34d081ffdaa7d7be82fe40f71bbc30a65904892400536c51ea777475df";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"glyphlist" = {
+  stripPrefix = 0;
+  sha512.run = "d4b606f0aafd19d642be4e18c6ae4a6fc2051f0359bd5f15cec2b398b097e204bb9fdfd0b0925f3b697658c671e598e7b2711a85d0ae13d21af1d00040cd2354";
+  hasRunfiles = true;
+};
+"gmdoc" = {
+  stripPrefix = 0;
+  sha512.run = "cfe29d7bd5e7936c2a40292fe2518dcd79dbc105f08d3f0dfa11ebdc4693ff207a1b312e6160fad4c089bbe5012697bef1122a893b1d42d59fc39fa5c48d2ccf";
+  sha512.doc = "68825a5fe89383d68b2829bc7e2fe230d717104a2ec56010bc7e67fcb14f9191bf47594cd0387b490debb5e752670048404a7985ab0b5dc039f4764d7926192e";
+  hasRunfiles = true;
+  version = "0.993";
+};
+"gmdoc-enhance" = {
+  stripPrefix = 0;
+  sha512.run = "481bed630ec444fda66a22656c2cdfcbd931a6743823c36f570ede09038ec4f219ecd1985243a4fc8d852f38512c6b369227f559d3874447144e0cd62d7949a7";
+  sha512.doc = "0cbecac4ae6f70ed01a407a9e5fa388f2c142b7bf77d219429d6685bf7d7c6bb3f324694286e6fe49bc2eff287faba901b7eba44f8bde1894e8cb09527c289a8";
+  sha512.source = "131afb02bafe204637f0cd1589db70584071d9f2480d2a11c03de4b0c14ed79500fe0e811a035a761ae4e6084d63a89e1dbcfd40edd24b4715db55d206f5206d";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"gmiflink" = {
+  stripPrefix = 0;
+  sha512.run = "768353fee03e36d5f13e5ea8ca2cf0925fb5dc3c847680325a0961b78a3ed6c30859bc57de7b927cd9e782f85539c97183687755c31738e1da3cc27a08f52387";
+  sha512.doc = "4fea41151ea197efdacd9e5756043b87500af8445769d0d0f69560cb94decd4f097bcdd52041706ada9b1ee7826f3c56aa30db473c472b1c74553cebb5231072";
+  hasRunfiles = true;
+  version = "0.97";
+};
+"gmp" = {
+  stripPrefix = 0;
+  sha512.run = "79ec2dd12610086eb5e7b582f5296fe7f1101c20b6d4edf10d47c5dbcdd506ff7c5f326af7600287a148031be060b3e8319d20d8267933b94b6c8a53e7753bf8";
+  sha512.doc = "d3d4bdbc5b1c4618820247ec101e43c1c28b9e023e7613d5256456424fa95a54f23463ff1336f2586359a6078aa733de77cd7ccb892b367cdd00215ac7b67512";
+  sha512.source = "13c602f735e86066e87231dd299680739af8ab526d55897c8a972b177ddda6a92277c3455208a11184281332d94f924b59dc845b51d7288c7c6ed750c45a3fc0";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"gmutils" = {
+  stripPrefix = 0;
+  sha512.run = "af0fa2ec7a3ce1414bf5d48d0bd8ce9de1b96b2bfa4f9c2babc6b27c52d11a7e5024bcf66938f3566cf6cf331b154f7eb4ca9d1cbe7109cde939829ea5be55a5";
+  sha512.doc = "f1d6205f39f573b0c9b28f0ebca03b32e20e27c0be12adeb7eb23e12daf41a9590733270661aa29d6b8393dc87855f293437617cd8598f39082db8a33e9281ac";
+  hasRunfiles = true;
+  version = "0.996";
+};
+"gmverb" = {
+  stripPrefix = 0;
+  sha512.run = "18038202bca3493596925d9d7c65612434ccddde4b301134f1f57706e5d2978025fead598751e27a29d23f66ed12306e6092461aac1d9d921ce818b0a49cdfbd";
+  sha512.doc = "6dfcc27b38639d4a97ed311bf7c6f1faeb1a023abc27d53e272f334b232a52aa0edc030b0c53d6587845da64097496696ceb03cbd6aa13c8ca5ac12c1772860c";
+  hasRunfiles = true;
+  version = "0.98";
+};
+"gmverse" = {
+  stripPrefix = 0;
+  sha512.run = "98692f781fead4dc292648153ca18a05d03f2c44174bce8b2f72e85fd1e98cb5ef0fb67c12f33dc982f1d04958873ea4e78f486fadb0c94544ecb66180ee52bf";
+  sha512.doc = "7e37c0c2e8443aedd6462251f603e2eef9cbacc45d980d79bf42cdc64b7ab0a5d81f50ae65251c17115265c45e641a5930de640099f04dc8112155f68ce9adf0";
+  hasRunfiles = true;
+  version = "0.73";
+};
+"gnu-freefont" = {
+  stripPrefix = 0;
+  sha512.run = "c8ced8afc3b1b9108e5a4a82db54a9a28ac6ba5f4f379062b0d9d8b9724716ca98234a345c06c7d809b1ce609f817f0a9acba1ef8e94ecbf8f1301fd3bc9d248";
+  sha512.doc = "3b7adbdabaf996fe8e0cff7e1192cb7f5984103398b22af6f859500a0041a0ce2ac0c70bc3f17abb7294ba80e34baa5cc77639500fa03f1a2c1c93548aa2a816";
+  sha512.source = "df7be02fdf1e4559f701b67183237f95c7b6c1b9b22f3b65688bc84d96f97964755397e4cf9039229ecec8b5810d65042ff2d7c101ef7cabbb126e6e9c93b3c5";
+  hasRunfiles = true;
+};
+"gnuplottex" = {
+  stripPrefix = 0;
+  sha512.run = "1d1f271fb02e7cc8e5a5fa563d4ff30269fa3f6a33f0acf3eb833998dc22276c0ada1ccd751588987bb2b6f2dd9aad2fb6c44caeca47953c2ef7c5472dd50dca";
+  sha512.doc = "b782fa72903c4de4aba803b0e3b888f4af5598cbf8c82a94929d0a5148f081ed45d6f8339f6a20a97b8ace731e2039047173e4fd02d795b75cbd2e5bbbfeecf2";
+  sha512.source = "5101ea2848d49449f0899e2a3b83478291c03b439c92d2033b56a0f01bf4af628f592cfaa44ae113388603ee0c4f0588cc08e226de4ffd01618ad785d6d1ae07";
+  hasRunfiles = true;
+  version = "0.9.3";
+};
+"go" = {
+  stripPrefix = 0;
+  sha512.run = "772772146ad95f2ebff85a2f3064615c26300a6a4050c1a6c7207d53e12b41477b0936b1c3d182f1c5db0aebd8499de19e0c23283c2bccf753addb2623dfd1be";
+  sha512.doc = "c65516b11156d4fef5104a36cb361bf59be244555233cb5d9692892da06d3bdecd0b09866db136aec177a2bcbacfae6bb41c606f6b9da0329a00c614055905d0";
+  sha512.source = "54cbaf16bd4a1a9bdd02b7811120cc82269be40e97853d94b1d526eef98e7df8e7ab8de2e7abcdd7e7db4c1f7fdf3d7355d511ed57c44c09643ea291e5b1c6d0";
+  hasRunfiles = true;
+};
+"gobble" = {
+  stripPrefix = 0;
+  sha512.run = "c2426530cc89a96c8a8e6e01c936053c9eb9c4a07cb46369f3dcf6d0d74557421b1a749a112f561f7248a34a46262fa0b2b52d103bbd8cfed720285383a5ff8a";
+  sha512.doc = "1f4879234402deaf684312daf31abec8a9c36c04ec52ce9b48cf6b7358153b6feef328f2c4f704a2ac7a0ead18a87e35e3ec21d9e22b1a60311aac56f6b48413";
+  sha512.source = "ab765f57595789abba5fda194d49ce1c267541a4b22dff0b4fdbc6f2690700503c28f860cc21eb585894318d2bb88ec9f0dd6b48ebd515c8b23ac4c0f46de195";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"gofonts" = {
+  stripPrefix = 0;
+  sha512.run = "564685c341571d012c0ba80b44470c257714cb03644791bb4d0dc771a4c8234aa980adac503caad9defb0a6230bbb65c6aa552989c25fe59d42b0e623077b538";
+  sha512.doc = "0ba8fe236f77ca7bb32fa7420a8c6dcbc1a493837c6fb78aa5f32fae80614c4e3a413aae9e691a33eccb747f297ae0c2e3dd3da9d483b15ed043aa21c0a01c74";
+  hasRunfiles = true;
+};
+"gost" = {
+  stripPrefix = 0;
+  sha512.run = "81509f8eeda503dbb62d696adebf15c7f5fccfbd34d23ca8d83a9e7e2fa328c98fc1acd1fd99061c260ace3895cadae8138f0350027c6e81a0b52fb2735a0cf0";
+  sha512.doc = "4a1a95d8647cc0e2b57f7815b4b06b7fd009e78a6aae701248f70a73825b394ff508a558a03386871d0a2ce22d43af81b677a2eeb3c2f2475a64a13d87493e51";
+  sha512.source = "4d54271026bc1490882e207c079a4caabb8fae9075fa39a2bab4673a4046a63d175e12182fd536d8c2e4bd049858add1739da987a4d99baf3d61a32fc0596687";
+  hasRunfiles = true;
+  version = "1.2i";
+};
+"gothic" = {
+  stripPrefix = 0;
+  sha512.run = "0c3fafd295fb087d3ace144df7253ff09fb3d79091dcd49003964a7ce57308cb4e86f3c3158a5e3d7e509e9958f77d5cc6da03fc41b585ec4ea397822ac29a7a";
+  sha512.doc = "8f2495f3f9c72e5a5b01e17e1a9f80bae3ded97b902765dd2fa9b43ff87769a9ac2b972aa660344bcc8e29af3824985c49639477ee96213c0ee7d9d411e8ebad";
+  sha512.source = "f6e600c736989ac81cde1fd51306ddb520e693b6a5ee8338c3413b5656aaacade8d4f1ca7aa316589c4d49fa8b96b598637792825b03ab0fe3efa4bb584067b2";
+  hasRunfiles = true;
+};
+"gotoh" = {
+  stripPrefix = 0;
+  sha512.run = "478d51d4f8af849180d1e21ea21c6404f6eb1d13cd70d232f7002f62a588ed2de40e2950699c1bc0e5442069a957b05f3128430ef421311737cf55a6df868a12";
+  sha512.doc = "3aa9837e81bc59adaba5b1cc3908738451fefe2645bf1422e0c6b119e4ff94ad85a7c2ddbae798e1e1ced95a530ab95b2f7a5a92da827c9f6d9bdc574b5f3231";
+  sha512.source = "8ae972cc1f0095c442241e5340c3688021253d135167a89c67000c74a53418c48c3fa13b4b2007dbbf598abd1445ef06a9113a32a1fa37b0b8a5dca6c050ba5e";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"grabbox" = {
+  stripPrefix = 0;
+  sha512.run = "d56aedb2c60216ff18af9cc2f2bce0c646545becf973c7d791db5a17cf593e6677c3bca7134d9d663e6826c249e0ee737128ff68184200f1cf7c09c308508db3";
+  sha512.doc = "584d8fc20bb49a9486426eea0c7694461e904375bd9af4d0030394d65c1dae8d97451244decfe3c00a59ee7ba92a5e8b5fcfdbec6668cc1ee3652657b7b04330";
+  sha512.source = "a82cbee93e9dbc9a2485f13783275304d11920ea201458175dface98da3545b4266be0402f4d39fe3f9f0a0adfdc2210244982e09fed094b7487385b65bb0808";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"gradientframe" = {
+  stripPrefix = 0;
+  sha512.run = "31612230548e2167c7f1d6a13029ecc202675d6ae3e681fd915d38aa116374214916155453616da51ef3dadab06955fcbfa9bc383f12b5008adaa8a60e24e6a1";
+  sha512.doc = "8b010be9e222609d13015176dee4bcc196d953caf7a8c1814e49f9e50325bc33362975338241bd5cef27d59516114113bd5ac81e3dcc6e89ea7f4d53465b3cff";
+  sha512.source = "7ac2eaaff343101c1e9501104e2be138bbbf85d009c2eff98f10876ee814762ac2198bc800ca43b9573e206241b9e3f196ab24e053078f78138415db8ed8fb51";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"gradstudentresume" = {
+  stripPrefix = 0;
+  sha512.run = "b66b3b8f7cf16f17758e4dae3bcd45f6e6e5cbc0dcfd6fc42f8dbc08abb572f16b96d5de4ba634b27cd16a1c4177bc62644d3eb5ac6060e66d9ca6d3f5df4eee";
+  sha512.doc = "e7b166b87a5dce9941d6bd931dec91124a118ba127075aedbe70fc9fe415a8083911f90f094ddede551eef197baee9cfa4ab6ac65c8ae081cd8938f872ad7bb2";
+  hasRunfiles = true;
+};
+"grafcet" = {
+  stripPrefix = 0;
+  sha512.run = "d322b1b45762c65232f6f66adcc12955d85d4bfddc08655cba8e11903f6403f2031a78d7e566f4d9b5eaf950aa8d2a53472038e204a1d18517c754c379c60bc6";
+  sha512.doc = "b02bfb612cd5fd85c1839307a016bfc4c3d472ddbd591d1318bd7c5fcca42cc1200da07f2105ec429768cb0f9270273425b01df1242e475946bd37658e692f41";
+  hasRunfiles = true;
+  version = "1.3.5";
+};
+"grant" = {
+  stripPrefix = 0;
+  sha512.run = "849bb84949f2fc2f766556988eba540ed1a63ffe1d3a16279295cfcc772ab027dc1e9e5d55a9bf834c24e97a0bcdb04bdbfa653c71f99cf55ec3e18a83015a40";
+  sha512.doc = "bfadcd59264fe3d3a6914267cc9d26c5bd6f7aa2061160a6547b04f448daed041d2c15633a61a246ea7808b778ff32679249f4c68e15b84e8502a454a4cec1dc";
+  sha512.source = "183057279f539234df3f3354e0aa569679ec5a265a515dbac71aaf9cdb430d17804c001772a6ae69d7918f248d3d641c1f04740c5e9bc578dd65607cd3e4313a";
+  hasRunfiles = true;
+  version = "0.0.3";
+};
+"graph35" = {
+  stripPrefix = 0;
+  sha512.run = "c9e2cb847614a7c21259b7b4e28ea1134d900049ca55da63990ac1f2c733e3b567bfae48de46b1e4b6b8faa9b4e0d4f9202bb00327ff33a899380dc3496214f1";
+  sha512.doc = "21a04b52c476b78142239e3db4165267b51ba596c2c7a95b175f323cf1e78b0bdcd324f55f817cfd8b2b6b7434200b060b51165e3468ee009d295eed752d1e88";
+  sha512.source = "4c2f073a22fea162e1c3347a74c60f680d5d2088143fd1e6634d4bf2884131c6c8a8c267531a04db705acf2bf2f756607d8164cf81659259f92ba600c7b22427";
+  hasRunfiles = true;
+  version = "0.1.1";
+};
+"graphbox" = {
+  stripPrefix = 0;
+  sha512.run = "d78f870b4cd54f7c6819413fd8acf0e3e1fe9b3b44f3b68ff3a20ad51aa6fde69c52b336b57285db1f6d5465204beb8a1179f918a71922889297cf6925282d14";
+  sha512.doc = "342c9018116e80ebf3414358320df55e456581630e7e266ff868e6c624baec0b7209ad3895d3232cd0bf35a9677b8c3db800b7772606afa928ed3424ac16c71f";
+  sha512.source = "1e97e3a1a91d007309c091fde6f05a7c1b062b715ee1f35051b20ad5fa119ccd415fa3741cf0d5e4f2a090ee9acb090c06b5467294ca26ac8f25a11971ca7530";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"graphics" = {
+  stripPrefix = 0;
+  deps."graphics-cfg" = tl."graphics-cfg";
+  sha512.run = "56507f63739bc8257e849d77f08fe2a4daf70ded39bb474d7da6dc6013ed6484fff7505fddacd445d6510848da6a955ab15e1752e5abe566fecb47419d4b9000";
+  sha512.doc = "c938e463d63715e7d5803608ef567d7dd58fdfed49acaad19c079c30239ef9d5738d2308b1178b9a77c06b472d91f1e42fc724c56bc34cda9885d6e7d1f3a899";
+  sha512.source = "057f7744323cf220bdebb07ff17f5f83882b3f0b35d48198bf1e7503d4f67b2c0db770c81d7ca21fbf7b7f7c38e8036520d8acc71f93e2652c8b92de2d08c3a8";
+  hasRunfiles = true;
+  version = "2019-10-01_PL1";
+};
+"graphics-cfg" = {
+  stripPrefix = 0;
+  sha512.run = "e1015d360b56f63f1b9790daf16e2101e6af995bd1e45288ea604ae94e20196cab22e7e54d318aa79fa386123032a928be70a57154d409321e04f03ecf97ab75";
+  sha512.doc = "dbcfdf635c2816f305205915119e1f6acba816c17b683622a8a32c361d75338376426b258c1fa3271abc1d7ad2a520ac85092a7b3bfbac6463106449bc906ae4";
+  hasRunfiles = true;
+};
+"graphics-def" = {
+  stripPrefix = 0;
+  sha512.run = "ce101b28d6a62698636e03bb1f79ab7450552d15603e1d8df416b2fb55d397b3d696152c05e84e12415790b7e634322eeb6266435b0d9ff13fdac28ab164cddf";
+  sha512.doc = "6c8d0cb49cfe1a5abf60a1473da509e34685c4ee2525a3d0e895b9513550842ed420d2bf6e949e8cbbaf543ad32e18fe1fd8434b16e46e2bcbd3ff7f50154e99";
+  hasRunfiles = true;
+};
+"graphics-pln" = {
+  stripPrefix = 0;
+  sha512.run = "fa45e825390e1a7db1bde443e24a73fd84ae45c1403391bd2d4c944820a3bedddf388a29998f92af7c3c22c895fc2580f827808e84ca1ba334bf5bdce38f37ff";
+  sha512.doc = "8df46cfbb8fd1a6c2b921030645f70795923fa21046dc209414fe3302f0c920cd47b432df22e0bd77574834dc67ee68fe4f307d79ccfdb95c1f8bcf0c6d5691c";
+  hasRunfiles = true;
+};
+"graphicx-psmin" = {
+  stripPrefix = 0;
+  sha512.run = "852b917dd2f4e4366516db9e7e22a6f34fecd1b69dddf687bd79b1dd995b1bb94c8372b85214e4d4c668a4a8d7d84a8c6e246a09e9d36937cec380c65a14c12f";
+  sha512.doc = "7b2872618992fa6363b8a5a4e1d72f51779372475e7b7bf8ec3c5b9b571e77c1d80be42f2958d7c89ee4c09ce87f7c3fb76533010b0266d5108cdb89a81c49f6";
+  sha512.source = "7916831178f04abfa1e9a87b993880cdaf678f567fd9bfe37a05529296c7b19ae9d1227711b7ecb829542aa49bbbe94db523ab1492e649304091a70e942ce9a6";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"graphicxbox" = {
+  stripPrefix = 0;
+  sha512.run = "032168dcdd5eab142cd6bf24eaccc3fc6482e3eba7e0fd2600322b4a6f2bcb1ceb8e30a64dd811b500af37c94e7de3ec25c60c437ba9afa7ba4d8a9af8b79a19";
+  sha512.doc = "6fd432f48c05c486963b8058025dda2a65b5cfa87b6ae03581009dcdeafd26396bf16e04fecd0e68a896a99d5c3e09e43902bcfd3f58fa9a9b393cf64406e160";
+  sha512.source = "a563a3c1e81496da30aca7256b5b2afc57d9df9e9aab2b6f5bf908691961f736a616f7c5f86647b94a6dcf36d3732bd68b75f5a4ba7d7d049bb67789ec48449a";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"graphicxpsd" = {
+  stripPrefix = 0;
+  sha512.run = "b9a6cd054b8b2bf80372d1e4b7d8a29e1d0c6d0bf0b3d67d961e37ddb433a73678fbf99cc6f2b00d94e6111871b0b267b8541762b52100ee7ead3ebaa6257543";
+  sha512.doc = "61d86c6eacc90a74a349eb52bbc7ababf6aa7dbd881a22ab39e06c0abdc6b8498cca525c431b2057245b294096a01a22d40c9dadbea91565b660f59c7b08120e";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"graphviz" = {
+  stripPrefix = 0;
+  sha512.run = "9065f2316f423697c8f815ddcf91254f22e44d89964196d971c3a42192bb1e20f9152c5a98375060daffbb295f8885899d2800728de31ecf60e1a25cf7bce31e";
+  sha512.doc = "688f17db6771785753797edccd141470517dbb2ee875e2a70769754bbd314cf8af46b3dd89d5c340e7da7d81d86895894baa2b9e8facc0a54ad91cd1a3947722";
+  sha512.source = "c3e4fc091b5b64924e886435667049ec2dbf91c20fd7d1678f40990e66aa9d94fd7b40b30dd359be0fd1fba0e169b29058337ede8232189dad3dab7bb34af869";
+  hasRunfiles = true;
+  version = "0.94";
+};
+"grayhints" = {
+  stripPrefix = 0;
+  sha512.run = "45d0736b5b600aa3ae524e0ff2471846cf48105464710fc7bb7f8d27326275d1accc63b5a0726c5d43e5af487207eba105e1d5e4f59913a1b27d33e950122574";
+  sha512.doc = "85a6b8e44ec045ec00b7526f034e5b15d71fc8e439bfbbd43e1c8f85d4400318d8dfeee4bece211705c351e2b5afc9ddc89073fa14c1d90756bdf458d7b5b100";
+  sha512.source = "7342b60e1957297f41970fa2af45a8736f438e6560e4cb6bd279516fa40ca283d7cd60e5faad2959aba12958c0fa70a95d94bb9c48e7ad47956bbc646af82173";
+  hasRunfiles = true;
+};
+"greek-fontenc" = {
+  stripPrefix = 0;
+  sha512.run = "11b9fa2b314fcb5ba800ba800be4b88935ad2f56f4fee0209d3ca5dae9bb120a9267bca723195a9945535e24f4cb883b08ef335c1db1061773e1ea91a42ec132";
+  sha512.doc = "3fd4d1459679fe228006957bc194a2603b3064dee8312e5dbe52bad517192ed58fdfdbcb82477a30fa80ded661d97529aff463ca468c8e9d72073a75ed58f958";
+  hasRunfiles = true;
+  version = "0.13.4";
+};
+"greek-inputenc" = {
+  stripPrefix = 0;
+  sha512.run = "1b3ad85dba5955a9dfb17d44a41db3e39c0d33920e1c36157e77803c4b2e402c6f7231c0628ad549c07ce7914f4a05c7da9369950b406270233d28f1a5adac55";
+  sha512.doc = "42cab0f26d944da70ec3397946bf217155534f0def949f2a0fdeaf8c0dc30a5046447c5daa1d8e2d4fa4235cbd29fef2d8e6fa0c4c440c1ea58d1f2c4c2ab81d";
+  hasRunfiles = true;
+  version = "1.7";
+};
+"greekdates" = {
+  stripPrefix = 0;
+  sha512.run = "7f350b4db9578f9020b28bc217e508574b697749c1d2e10c9de9c6499e26605da8334583ea7fb56d74bae77bc30e5835653014f5f8f594d3f35d04478ccffa9c";
+  sha512.doc = "979353f7cdeb127e12388e1eeea4903a929d911f6f8fd42cd814b6cbea09a64d0ab9c8118968bf218330dfae64f9147621d23d2955fb85291f484d0b5eb92a00";
+  sha512.source = "16a5fe04bd6a598a09c7f326f6848074782e8801d0723366e5ae2b1ae51580319210c64f5e7dbae7eca5cfe3573b0f24d689c802d9594d18dc7c8f4126d9ff49";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"greektex" = {
+  stripPrefix = 0;
+  sha512.run = "d7aeb9640061341ed39a71f7f69036f892bbe60b9db2236660e163b42fede81d6be58627b0163d3a183c120c9c8fa54f91a1a036ed9e50d2a72d5eac7f8a79a5";
+  sha512.doc = "b58305d403a58a60ac0cd6ebb60afe3058430eae15774895e03e41b331824673c128c5f06b583525e2311dd8ee5166549ea831e756e8c934c73ae911a0adbaa7";
+  hasRunfiles = true;
+};
+"greektonoi" = {
+  stripPrefix = 0;
+  sha512.run = "a19dd42de4bfdc3c068169bbf32c55fbd76135a8138d41e0726b421d3cd5e20483f77d7b78f85e54571381f780568f1fa1ebc57d23ca460b33e4caa256c4894a";
+  sha512.doc = "94da0bcac7b513fb9f720c0bc6d7ca8d822956b1517a95335b415e477d3144063bbff65d57978421b6b9611c6b4a866701762cbb2ab09351fe6c5d02e4b02f39";
+  hasRunfiles = true;
+};
+"greenpoint" = {
+  stripPrefix = 0;
+  sha512.run = "2ab6b0a9d12c12936362e9e1ff387c393bcd2e9769357dbc74a5d9bcbbe027424f5d58d85d608c2c519d615f01e6e809f6192280c8c60aa53fb8d96dcbdeb8dc";
+  sha512.doc = "84143440a421999f0a59461652be21d49d8ace66fd3b8d9d89132c6f06f67ef4b571522d6ed54d87f614a15dceb99cdf4c3caecb54eed9a4bbf49401de20ada5";
+  hasRunfiles = true;
+};
+"gregoriotex" = {
+  sha512.run = "b27e105c26022f7a9d04d4990f83ed6a73cb92fcfde1698c4be81faedfbfd67730d4957db1ce5b865820cf714072c842b85fc698dfe6cda0bdba100b3d4d60fb";
+  sha512.doc = "66e5170d2084c01b2a9cff2ec344322e1b76942d7424ca75306e7163ffa592806240ae0f1dab176053753dc3dcd2ea7f0db9aa9afd5d7dca8200e593b2158193";
+  hasRunfiles = true;
+  version = "5.2.1";
+};
+"grfpaste" = {
+  stripPrefix = 0;
+  sha512.run = "e7c28c38a20e01b05c5839dc7d011ef5769b3344fd4321f68e1189a830a90e6ccf9edd596e248489a0a578b2aa4e5e5f3bd1ec21c76b3dba86a91d5e431d0617";
+  sha512.doc = "63719b8f7904baccddc9e68d1fc7d609453b2eb9feeee95bb077b82d1345c40db7a92c649c3d9abae6b9c2e19090163b6a227418f4d9d4d91b1e8b1c0438005d";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"grid" = {
+  stripPrefix = 0;
+  sha512.run = "c8a6c0d6ac1f6043411d5484c87877a939d891aa3bbaef31248f8dc04f39bfc5f7f13344ab2997724682f228f180025bc5afcba8712ee95de983d7182785a8fd";
+  sha512.doc = "9fa0fbf1dfd0fd334c9dd57f50e6d1f893a222bda6402345c70240fce48ea07065fa25ce890fda77983dcb537c8b3b4740cea71ed6a6b4b94275f1e2bd8ea983";
+  sha512.source = "01b7c6dc356487d9e1d9b210828bdb6af50382a59d65b85c8246defe963ada4ee0796a93793d90d25c37ea9c86432d9c05c3eb05598c72410fc2f865e1e69836";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"grid-system" = {
+  stripPrefix = 0;
+  sha512.run = "b9846f467854538c488ae444645fcfb962c1aece34e3847dc3dfdd4a2aadf8339840c09243448922ce184f6211bb3b95c6fe9675b5bae0e3b3756b2787e7e87b";
+  sha512.doc = "659b426e99db9152c64f37a4c977176ce1a24c324465399f3e481cffef505044aa820f1a445a79c68f069702c07082d3d5c73c5fa762068a44acdc21221cce68";
+  hasRunfiles = true;
+  version = "0.3.0";
+};
+"gridset" = {
+  stripPrefix = 0;
+  sha512.run = "e9e9fbb2dcec8932e96655886ab9c4c19ed3e986f033feac7d8e64241fcb41f8e2be5e5bbb47032816626580bbe77611dabe24fba34b43ad53f3a592062b826a";
+  sha512.doc = "b9c0001a5d89d592e9d176f2bf91cdd5fc6363de32e21621b73f9d7c392928f0e39ef4eb17c589469e59e2e865b05e33233d237afd1266f0477ed3d8f3c1c66c";
+  sha512.source = "bedb06496d04f10395ba999f91bb49c4ad6c19d26f3c8de3b1492268fc58dcde72d8c03bea6d646ef75ef65dd843b4459af453ca673634fce164599ac014d50a";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"gridslides" = {
+  stripPrefix = 0;
+  sha512.run = "222ba30817fdd016d80210e25300c925fc45f5a0e5eb02d569f8e709ba578a6ac12aa3f2ed16e5bd6fea3e4b4ffd2356a046a27445e47f79bee9be93ca5aff96";
+  sha512.doc = "6d8a2f2a43b7e0b6232aabb78b25bbbb2f256e9afd54c704b818958496f7ea7b38a2741a60b3d2f3f7745431c302a7106ee015fc18d5c50349ad3cce375789ff";
+  hasRunfiles = true;
+  version = "0.1.1";
+};
+"grotesq" = {
+  stripPrefix = 0;
+  sha512.run = "30d0d52c98f44945ed40f45f1e73ed60e6b98a8a74dbf57cdae5c2d400ef613f8bed2b89b3b6afbf7b98e449738f637911dc1becf0c0dd33c21a23ecac9a9767";
+  sha512.doc = "d41ae946f315d87b483a03d8b5a1034706f5bda765c69fa692f117b79bd5046b409e42c7b17577ee086ec98795e8a93acd761e30815c6083520b4bd244c33cd5";
+  hasRunfiles = true;
+};
+"grundgesetze" = {
+  stripPrefix = 0;
+  sha512.run = "2fb5c03a405e29d27c929fd3970af300df8134efc584a52dd088adb6e0678979af7c6302cffc590b2471a66e13399f628d257f298f1ffb9689d8aa1d268b9438";
+  sha512.doc = "cdf228d38f34810d543b0e5135acb75a8ab12de7b706bda79f2abe9b6cdcf1e7c7ccd3f0ddb7cc4cc2560f5fb06c06eacdebcf06af89500953812f2e7a0c8285";
+  sha512.source = "7cd35484acde51219cff50fa78fc202c03ddc761fc2151bca789454e0aa0a2ea4a8088a5c6b9cbe468707f9efcde661c2d4c5357efc161d8454b4749870358e3";
+  hasRunfiles = true;
+  version = "1.02";
+};
+"gsemthesis" = {
+  stripPrefix = 0;
+  sha512.run = "7debd75f882855b45665937669a3869a9268d2184b22da3d344a4a6182577aa8bb440a6f4e48123d359c23b630b61016331cad94f4a08acc3295dcfd722c40ea";
+  sha512.doc = "41ecef19c29f63970dbee2242fcdf612b7619a6930002d8be03f4116f3397a619951f2f19a79f0e3772f17005847ea5a6a20a91b6ba9dc3529fc4e84dbf7833d";
+  sha512.source = "757fad4bcc2bac03acfcbcf5dea53c30e7902cb0a53dc8116fde2b28ca9f85861b08f19a296096253a4e21e1d3513faca3e0f206f9f0e22e3699f32e0a5edfe1";
+  hasRunfiles = true;
+  version = "0.9.4";
+};
+"gsftopk" = {
+  sha512.run = "d05802963d499c4dc0979a58bfb56a1c04e006b25b7eac4cdeb7659ac6f31a0380e476e933586f4169846f88d727742ae5494cdbcb29995439a4cca5be4c7332";
+  sha512.doc = "7d9fc4dc5c3b4cbc05939332e7286be712a51f74b408df2e6cd9f1c52f81b01104e4f41074c55f74ecd003276f2b9fa2285e875a27c20e16936e78ffedc6a4f5";
+  hasRunfiles = true;
+  version = "1.19.2";
+};
+"gtl" = {
+  stripPrefix = 0;
+  sha512.run = "cd1c08d092b11423d77a87a5fd7cf4f62290aebcfd6a99b12dca957e075d0b26cc3c482b45e5083916bee3bb6aff91940df375ca4b1dbcbd9fc37a31d8709aeb";
+  sha512.doc = "2f41bb930e46a95d5c7acb07153e5d874724ac009b2741f6f2e62a9b56165b5e2cf06cf8c89cd9c1fc42a1a93babf6761d0a48b418ddc0a0f5d38e9c2f31f175";
+  sha512.source = "5b5d004fbd3dafa14102774a3bf57867df1cf9463630a7912d49303aa9daa2c147733badeee3f628c0d7c2c9b8081131ac39f195f6dfe97d659a945702b7eae2";
+  hasRunfiles = true;
+  version = "0.5";
+};
+"gtrcrd" = {
+  stripPrefix = 0;
+  sha512.run = "dabadc0fba92f6da23830069e533e8d4fb234bb679aa355382c03bd3ac13924328ea8fcece3186f36d33b7d7f6cceaebb23f1158b855673160f183991e880796";
+  sha512.doc = "d8e715d1c4d9c7ebb0c34c690a82e338733501012ad19cd9e2c52e6b39dff352a4e042bdc5f54e63a03a38eb9c76b5aed2ec3afae88ccd63f56663ada32e828b";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"gtrlib-largetrees" = {
+  stripPrefix = 0;
+  sha512.run = "320b5993b676d803b235d0a10cfbcdde966c3e9415f164da6f45dbd2f6f201750b84cf9dd8ce5383afd92c72acd35aa8a44d0c6518e359615b5b2009e772bc6a";
+  sha512.doc = "6558466d513a94cc98e5fe97d5e3bc89f518128dcfe411e27d0af171716545557096a6cdb103511157f0cd93540ea784f97d688ba271d9b2f1918f11608bb437";
+  sha512.source = "258780013cefe87f8fed74b0e3251f64da8fe700b13f45dcdf20e9d9215a5b7b74e931bdc1da944e70b5a6c9d87516eb2618546994b5b45193112fa9af74cac3";
+  hasRunfiles = true;
+  version = "1.2b";
+};
+"gu" = {
+  stripPrefix = 0;
+  sha512.run = "243eb6ca0af62518d60134a8fa66f91ab05e39c96fa9c0ebeb2232d27f46679da0a634b64273608028bef7f80bfaaf049dcd9f0cd935d5f66b0d5054b2d21a20";
+  sha512.doc = "151f9765d6da2312a10523ffca06cb4e0529d4ebf8189e9ddc00f86510c9cd13be9a04e47b85dc8cd815461c17f7e4b8be9604a1a605c86d7228d1113f985a23";
+  hasRunfiles = true;
+};
+"guide-to-latex" = {
+  stripPrefix = 0;
+  sha512.run = "cc569e242b42361e6506144257db1109f1adee52915f361ed330699edea1895b78ac64488ae8b9e2224bd3baab01515be86486113afc1ed9b072a400ca736695";
+  sha512.doc = "bba47b9a9e5223e558244029e258835a865b90824c7069287f0c996a36c4fb78d21e62e88e52ea008dbc573e7a4ea34843a646eab11d8377a5167724286c397e";
+};
+"guitar" = {
+  stripPrefix = 0;
+  sha512.run = "fed7be24d0bff6d2a0022374e4cbb60cda508b0f99a5a96d59060247aad561c1124728f00a6d0a51b3b22f4490c6153df740a5e9d8106da23c85bb18db385195";
+  sha512.doc = "4a2012e693257c2bdb4daf46a2402882caf0c8efbc65bd6679c9eb11440ae75f09d31369839f84312bd1028207d8aa23a745847be1e762dea977ecd7f73b4a87";
+  sha512.source = "26b552a91240900b54a3266f26e9f439c46315bb9558d95ae5b27f518a7f5ffdcc1990a4ef676e9186b5492d4a66826754c4d34e13e82b9bd912ff74d14cd185";
+  hasRunfiles = true;
+  version = "1.6";
+};
+"guitarchordschemes" = {
+  stripPrefix = 0;
+  sha512.run = "3d4506825043357708cb5fcfee6ba7d6cc42fdcbdbaa772628bbcc89381afe40c58bebe9ad01343b96f3535c80c217bac5b85d5079d1e83a42bacfec995bbfa5";
+  sha512.doc = "ae3e21f74e66ad70a60403c8e9a06e747b770af3e586ee580686095fce8b405801e9c4d1bd59cf429defff61fb087974ce305c5fade387d5be10fe47be46e6bc";
+  hasRunfiles = true;
+  version = "0.7";
+};
+"guitartabs" = {
+  stripPrefix = 0;
+  sha512.run = "a4866683cb639b63d455f40da2ef58ee4c69d0e29e5071437a07922a0a45598677557ce609905dd8fc5c3e40a98bceb9a753cf4506342585e6cc2c37fa591271";
+  sha512.doc = "ef5f516db586d1473d949f44a2eb9fb307b84ea5a7dcc3c9419298203b41c54ff4dad75d3b24cf30fbc24f4c60ad4b79b9c1fd58804667732a66b0ccb52cc3b4";
+  hasRunfiles = true;
+};
+"guitlogo" = {
+  stripPrefix = 0;
+  sha512.run = "c4fff100ff6eb6c73607ce83ec90057a47628d0d354f24176be02c8e9e4f62311c466cf7d8e7ec27787fb83a4c35accfe06d01055ad1db2189c82b9a7277aec7";
+  sha512.doc = "e60d42b6db1db84688fbc657b854cb17f60657c22e296d13677e462b39090c8e99e83b86227ea65fe60dfb7616619f0459aecdfc6c6725db68567f458d0a4308";
+  sha512.source = "65773fd849d06d834505c9ee4e97f7ec6d30308550029e5a71756da7f70fdfdb8245bb6f2fa0ceaf2cc3ad5c9b865f7e617df0c763695bd0cca60431da2bbd5d";
+  hasRunfiles = true;
+  version = "1.0.0-alpha.3";
+};
+"gustlib" = {
+  stripPrefix = 0;
+  sha512.run = "cb91f48e66063c784addd1a208946343cdaece3ae0d28d3eb697add3bf16d82b7d01535018984434a882aa5d1901cd05ac68e0966554b77f4a2feeba933ca880";
+  sha512.doc = "0a472bcba101b759b0864c09fbb28fd7473e8382e73cb5c2cfa8fe97f075a9a0ccba1603e0b08bb17fc10faa53907e52d78efb7ab09a7d5cd06bf1e17d82a1be";
+  hasRunfiles = true;
+};
+"gustprog" = {
+  stripPrefix = 0;
+  sha512.run = "597abdd6c2eec380c531ef7f89ac0d2fcce6e33dc2d2c5040a58b5da3bfbdf2dc75cad926291c94ff1207a47e66cc213c7b7f76890495aa9ef6466bd830caace";
+  sha512.doc = "7817b203f9722409f10161072096dd410d34c2d84ee0ccf332d717c2eea0f408c76597fccea18b6022088cff0155433f77d085a8e8d5f28b72c4c227f578cb0d";
+};
+"gzt" = {
+  stripPrefix = 0;
+  sha512.run = "7e0f493dca3e9916f28509b94bef393e8ff7be95f55e8da937b4922139ae77f4f4197586c3bff343f1fe1d22dcb4a803e2d4a3a115d201cc0f2c5fd71ba8a836";
+  sha512.doc = "388aa99642bb838ae4a81a665bb90019c6e31b3aabefbc2c49396edc98d8fe2d00986023699b849162a69db6e6dafff26602f61540758510acb1aefcd883c4e6";
+  sha512.source = "f6c4b16c47fd5773f6a25822d7cea758b5e612603e8004ae462b4e40ce4ef45e6fcbe8ff62b41828bbc3c7b83b8596919eb88864833546b9d785b865c475b312";
+  hasRunfiles = true;
+  version = "0.98";
+};
+"h2020proposal" = {
+  stripPrefix = 0;
+  sha512.run = "ddee9c5c1838bad606f212c1a7ebb7ac4d7ae571f1e29e83d55744dd50afb55e302f4f20a3cedd0d4446886cfa515371fb913b862d4549618858896de2a543ef";
+  sha512.doc = "5ffad62ed8eb39c8cf07d4840983990009e5696a2d7714d2cbab13a69c77634d01f10a18f612c853a09dfd91ae1ea453bb3373681e89a6994ff4924dd64c3093";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"hackthefootline" = {
+  stripPrefix = 0;
+  sha512.run = "223fb22b01327fb63ff16684d578f89ee583d5c7700dbfd5966aa8cb94ca4e280e4409620b0d261bf2a80a57f51658990b0a221c0dd311e3eae1f39d459e8098";
+  sha512.doc = "960c6a0bd61210b097710cc6715012e4406b54dafcf070659228074598a05e0dbb65669ef77c3f6ca2cf80001e95c5f801070be29d416d2bd552d6c2a1d27f56";
+  hasRunfiles = true;
+};
+"hacm" = {
+  stripPrefix = 0;
+  sha512.run = "6f4373f4e30d95c747ecbec45c53a9af23b78acb84a063dc0b2d4d5ed218e7c5f70d4f29817d39f6cf62cacc455cc3117ced589d41bf3f321a6f9d882823164a";
+  sha512.doc = "bb6d5cd50e68ce84abd5f7296d8216d929b772f30e946508ca9bad2ffcd8d077d1927fcc76a5ea2e338799109b34adc8272f9f7f6d316f5af1312070f57fcc3e";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"hagenberg-thesis" = {
+  stripPrefix = 0;
+  sha512.run = "a8515fd281f726029f3bcc170f60c8a98447d8e16cb64ad787fdd5576ab5fb58a077666f191a02f46608e1aaf84bfcc8f1064a28e00c77f62505134a5508be28";
+  sha512.doc = "e7f1ff1c796b7ec2dcd7758a46149a20ce3d33fa6bfc3dc93a0d7dc4832e4f4692e1e74037c1f9e990a0245fd6cc5791ff998439ea6604519cf40bf463be7476";
+  hasRunfiles = true;
+};
+"halloweenmath" = {
+  stripPrefix = 0;
+  sha512.run = "f56079b815307a59054559a0edc8c0d3e9e4138b0d961f81282a80af5ae579e4e3a2b18a3722cda0b49c014b834c6bb76971862e7e0740e0130b2f89d27318e8";
+  sha512.doc = "0ec7d77114ab6296be8c7b38b2a6dad0cf5cdaa9c8bc833df52e89971b5d71e3cd6f026e02d480e8cbf1ce1b4231563463524745ce0f76be279340cc03550d4d";
+  sha512.source = "84dce1251e7fa939233322d5a74b41225e9a2d786af0f49b8a4b8df962ee1fda46ac492122fb361a4184ffa2c6dfd5bf2967f577b3a9b675900f3ede8015d790";
+  hasRunfiles = true;
+  version = "0.10a";
+};
+"handin" = {
+  stripPrefix = 0;
+  sha512.run = "361fa013f1932da2370ccbd67e70acaac725349e4fd4fea28a6b676a5459aa8ce8fbc1edf42f3f3fe234e12771c5be8bc463ef758f823a3b43fcb7191bc1a660";
+  sha512.doc = "cf91e16a8f04835a47da1a5ccb31711fd9317db557f0152689a93c4f58de33c8e7c8be1f7c5d9eac599bf8dceab3f4d3e84831efd0612a58571d3c71f508f20c";
+  hasRunfiles = true;
+  version = "0.1.1";
+};
+"handout" = {
+  stripPrefix = 0;
+  sha512.run = "9c5da5e16df3bfb4eee1ff7b8c6881e7faeba7001fd7f0ecb8b3027a464d611149c8768b8d8853c07417d67a723fe5b1de19620593a177139241b47c7a814285";
+  sha512.doc = "6da7783c7a0dcfee168ec4ad6924fca636ccb5fc965e326d9c38ff31c9d2c7942a820165232e4e89b7c1e4857e81952156198de55d7990ba01e5abcd4c31bfcf";
+  hasRunfiles = true;
+  version = "1.6.0";
+};
+"hands" = {
+  stripPrefix = 0;
+  sha512.run = "77c1742d045110ee4da7473b14c1804fcfab3772ae10223848fee99c7c8a8fb3809aabeb82e4c99460f3cfa0e009ee8d470d60e8be4c79c25c3ff990b7d1595a";
+  hasRunfiles = true;
+};
+"hang" = {
+  stripPrefix = 0;
+  sha512.run = "4a8227707b6878ab010b595296dbc96f0b31489dfc0abf0116e00d6b0acf54e91bad1ec182169357e4a2e1f14ee27afcaa23bd35db1fed7e4e972e66eebee042";
+  sha512.doc = "bb0af0db38793e12dbd8d33e2df613d581a1809e0661138a3e75cabac1aee2aca942aaa429678a817f487fda82f3ffa3a631d98c3129853ba6a5ce4175346b09";
+  hasRunfiles = true;
+  version = "2.1";
+};
+"hanging" = {
+  stripPrefix = 0;
+  sha512.run = "54bd2269c169bfe2a28513354407de22948658e8067cebafa3a3b3d88040acc318f3f3aa375798e36bafacecfa10c4ab5500095b92328e6cbfc12a541a8a7b3e";
+  sha512.doc = "a1e7e9d0d5b85e43ebd7ad88b39d6d5629807f668040041fd1248239c02394cf3c51aa676065c1d1d9e9ba8d1ad20f00e46d25025ddc0db7ec15148280a5b9c0";
+  sha512.source = "d982182e5c6c19d6dfaf527f5ff95c0a1d15cfa3078205c73d9ac894d24ebeea31a636d66356387996fc0faf9815242661c884dd566c0dd1d90779d61ba93c28";
+  hasRunfiles = true;
+  version = "1.2b";
+};
+"hanoi" = {
+  stripPrefix = 0;
+  sha512.run = "efc8c4892ea4cc8ae395907fc428fe74d535d689a68b3b21422c5c944d4defd57747e519dbca9bd2df2dd010b99e3132afceadee36d547fc11b04480147626c4";
+  hasRunfiles = true;
+  version = "20120101";
+};
+"happy4th" = {
+  stripPrefix = 0;
+  sha512.run = "45492a6becc7496ec6ca6adca474aa141b9c68b06aeed46bb1459f15b6cd1df9e4e2de3842a91ae0121d83269c1fe4f772418a93da67031bd14b6649f3a80657";
+  sha512.doc = "78fe311673e370b867ad209fc1c62acd7aeb515e4b145bb7c487d30c121715994803e6dd540bcbf1b9b0776014327c7ca2f6c03437d9ff0b40f477ebff9cf254";
+  version = "20120102";
+};
+"har2nat" = {
+  stripPrefix = 0;
+  sha512.run = "b3e76b7c4a3a241f716de344481c9927daaa73badc2f40cade074402629cdb3ed02568d9cb3d6276b0abd59ddcb34254fda419f859633281870ebc394c4a5a14";
+  sha512.doc = "927ff5d03cb3559dcda63aa2745958722ab9233c58e55cdeaf7e1c441146991d3edca9c3a40fae2cc147e5e69d0c44c0d357ed37ef0e02bea41952474b36f88f";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"hardwrap" = {
+  stripPrefix = 0;
+  sha512.run = "eeb0f1da2161dae80d292db7b3289a307d892b8967ecf16021b8ed73c5fe724d914dda356bb8fbb48786760698e0060b39349b51886e13289524ed9d45463106";
+  sha512.doc = "6dbb83fc5d4b82d11bc8d97d0ded3bcfe583c2b21ec2a260000b6bfb0bdea9c10df834735ffdcddfa9785b7c86b53920a20146d020b0435b8dc04610f05b9b16";
+  sha512.source = "9a40a2a441e9f47b3d681dcd064fad48fe90999b34b57c85b7112e518c99d3b87a9bfc3867beb66e76499bb53ff3c14837f71f2d261ed4c78cad447f185d0ce5";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"harmony" = {
+  stripPrefix = 0;
+  sha512.run = "25e84addf5ac4c67985e1e433f795f377accfdd4dc56eae0ffb25ddffeb52e0a44278ce1a936406105ff5b7e9541452a103e0bb4ed91b8949facee75ca7c11ae";
+  sha512.doc = "3226831df9702b669ba4c269549927563ae321e8e10e0e41c6bd1a8d6522dcdaa4ae6a25a907a84cc1dc324c516a53754c81a0e1296fd8e3afbbb29f0992ead9";
+  hasRunfiles = true;
+};
+"harnon-cv" = {
+  stripPrefix = 0;
+  sha512.run = "5acef7bfd07f896f4251fe922cb96f71e9f289205eebfa83dd6aadd241f20eec5d9ecaa3d70d6df3dd61fbe7523f568407d89b7c32c27aa719a6f97b89f4cd33";
+  sha512.doc = "1a8d96a152f9ac90f3a6e546c03652ebcde8f8d88a7282626d44177854aa41ec1c66eb6f4d787853711b80935f5e3e3c31d726d0e49d60841119db7ae278de96";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"harpoon" = {
+  stripPrefix = 0;
+  sha512.run = "1894f54ff9eb98975f4eec9250a382534a0ede5312b4b540223d298a0fe5d7d8d24abe2018d07b30773e14bacdd97b60039a458fd274bb446aeb2e26b91bf96f";
+  sha512.doc = "4d69050cd2a7c57219a7c55e8d97656fe6f130936d2e79a00d3760e9139799cbb98db2f338586b65412402069b22971ac73e5b722a3911bf1402625dac3e7d52";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"harvard" = {
+  stripPrefix = 0;
+  sha512.run = "64781bb5c419248934f259dafba2c43270396a1d3f49bb9a79050ebbb5655a5836a07fd69720f54f009501c5294a62f344f6b6c76adb89114a8c60d1e149e612";
+  sha512.doc = "291c2a530da6d24ecf1a87818d27b6141e99944eed10cc2dced2537f30ecfc12580c2f58d01245ef53f7d2b803853ce9bf72c03f8a2c3267dde0f4c799a991bc";
+  sha512.source = "58720acea1588f742d95d2916f8b1a5c8cba391243a433ae9b2cc4845dd3949c7b2a7a349b87fd663023e4d26b15b15dfb89b7f8db92e14e52f2f7ab835a160a";
+  hasRunfiles = true;
+  version = "2.0.5";
+};
+"harveyballs" = {
+  stripPrefix = 0;
+  sha512.run = "c282249d5758f6c8aa9dfd06cc4671211e76adc2e7c4f5cf925e713472e60f3d44c8a389c9ab4db5b8096336d46d99b62bde0f8c1f9fb5d22857e3cba98994e0";
+  sha512.doc = "89ede2f13e82600a2e78047a08766e99879ef5c64dcbcf747a2c21b1a395f4c1a1184921a8a0064b15b86f574834f602870f6641f0f265f92dce506959c6c4e7";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"harvmac" = {
+  stripPrefix = 0;
+  sha512.run = "7acf7eb52104bab80b0b9995cf43cac842c106b8aecdff8245b0d1ce8440823e65ead75e470f00923764eadd32e936e02192ec7bbe70295ca254aa57f9b5f662";
+  sha512.doc = "a0f3308b938ae73c66398c5a3140662240603248cd6fe338a22f3ca6b23f28789dbccee48dcd94a8bf84de029ec103aa35c5b9a78151ceaf61a9cb60b832c484";
+  hasRunfiles = true;
+};
+"hatching" = {
+  stripPrefix = 0;
+  sha512.run = "71983591270b533a6824a836948fdd15d19c3f966c8277d8948b13c5f38b29c29c0b7fe577661f1ecc570dd71d89fa964afd254d50556b6893667cda95e21aa7";
+  sha512.doc = "02c2eb4991aa9775feec0846eaad9ddb74123a64eba8a3731c8e40c689844e542793e0f6884df8666f3cec2ed43af26b2d25254cd0536920c6ff0b107f35bf5b";
+  hasRunfiles = true;
+  version = "0.11";
+};
+"hausarbeit-jura" = {
+  stripPrefix = 0;
+  sha512.run = "99fe789073c76535c9c8a307289bc29b14b0b7a45adf01459d76ee67099d56c9cf36fbe3587b108c99c1563cf077066ad6408955bd55f31cce6b4e53bab378ca";
+  sha512.doc = "cd98eab62d47ae03a5238702ec5a246496880e55dd8a1a9913b3639197d0fe65d607317d9cc9cbd578bca6bc64babc80d257c2f8d84b7327fdbd77537ca1f660";
+  sha512.source = "2d8edbc3163c00117f9c1297970f2309df35ccb6d5166c723365c1267af736c05dc5eb4bf77cfe6bb6e25a829bba83007fa95bfcbe6aac7473f4657cd450fcb7";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"havannah" = {
+  stripPrefix = 0;
+  sha512.run = "f19498f0f9a7ce349fab4291fef80ff2f2f9eb88c60edeb76174918955fab51f22a0d06b533112e594c0f4cfba23feab58c41fe75e1c4fa2fc4db7cd9f473d0e";
+  sha512.doc = "ee1a90d491debac3f22f470e5df79e11152d153cef97e8d2e38c5d8a60a1931384d65bb91a6d459e6aeba39741763fa67d589bf9004efc5059699ec621b99e43";
+  sha512.source = "9831ea87fbe6e12af8c7fb49d321049316221f4dd33b79a9495c5205b60ddf2f3593c8dfe2f4157e3934f21e69e3004b05802a0d592ae608b2de69cceb2f0c7c";
+  hasRunfiles = true;
+};
+"hc" = {
+  stripPrefix = 0;
+  sha512.run = "17c7037eb04c1d0064dbb637f51947243d1b8f07d46245dfb8f2a38a1ea068ebe41da7e2346ccedf02979003a0a2fa0fbd25eaebf7847b266e21b7c873b032d4";
+  sha512.doc = "18aaf579ef82a11ea1e752524d9a04a4a0aa5d6cbb496bde380664723dd30cd421c77dfba1ee6bd88def576c76e202b328198fa6dfb4a9ab451875c3753a515b";
+  sha512.source = "42d3f57fb2c38823875116a67e3e71a3b1aeccdfa00c7a201163325c31fbd47d60a1dd028c6d9102d38d6490424bb118178c7589a433a69ec26e505b805418f8";
+  hasRunfiles = true;
+};
+"he-she" = {
+  stripPrefix = 0;
+  sha512.run = "726954216d3f8328eb7868553875651c2dbc3f626a9eb60fddd770b0e236a4e09a45872020589d8f263cb9f39300d1743e0a35676947752f33933db1e766411d";
+  sha512.doc = "580702222de769b066b01af45aad75717d11f46178a2b1f19e0bdc85b67497d9aed8b7ad642f76b8b85c5513f4921f58af8bcb80d1fcb88307f8ca8b07c8307b";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"hecthese" = {
+  stripPrefix = 0;
+  sha512.run = "5cf62262cc231f229c1a66819e620fc55f798d8152b09434c0c288610a59a6ada5a9703e903b7d0fe761f1197757a1594242fc181928f6c6a5bad1c3d7dfebde";
+  sha512.doc = "3d06c52646c4985df8fe71bf07ae0f5305dc719c03025f1cbaf511b1c1de99e02f381740cd4f1074f0fd4b211a16575dcc7c1def28d9d75e615dc1d08d5257fa";
+  sha512.source = "76faa35c65aedcff2e177c40f08e4d5a031f3804f3c786e38429c55b55a2f0261c66c8515691d2e23b0ef954316479d6d02e57388896f1d4bf79e9fa24e277d7";
+  hasRunfiles = true;
+  version = "1.3.2";
+};
+"helvetic" = {
+  stripPrefix = 0;
+  sha512.run = "db1921bbf180287cb735ef403948585a91b3d84fa0cb5c99ca1bd06db57632f2533f40d0b7aa04c01664ca7898166482559e130f375a85242bc44f362079ec8f";
+  hasRunfiles = true;
+};
+"hep" = {
+  stripPrefix = 0;
+  sha512.run = "9cd27826b7dde1ebd5830cdd17423f4092c9833c962be7e73b515de2e624a7853badde0c244dc26be6b7d3d9f9c3932fffc48bb4e86e06b90d6699dcebb0d497";
+  sha512.doc = "1d77a9bd31e982a8ff908f772d8cf67692145624bf00db2745afaf1aa59fc1da7cae6d2e094379077a550e4d76338a5a82bef8e25c8d733547751a24c84035f2";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"hepnames" = {
+  stripPrefix = 0;
+  sha512.run = "ec893de8b4cedd1b18dd16c3237fa79b434e91cbab4b856c4fbe11afef162b560bda18c0fd75ab2c47b863cdcca1d64809a139d51f04e9c2f45eab6ba4036c28";
+  sha512.doc = "36a0966b755b6bb0f0dd27c80235e66af7c5252df1ae27652e59fd65fc5f280eb487666eef04206813438204dc592c0295651ccf0bce1e5f85f4797cdb439850";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"hepparticles" = {
+  stripPrefix = 0;
+  sha512.run = "fb9229745b601b6f731c959856fe46d6871dd3a1c7fec2bac8116f4d74a575ff52523f610599979e25e7147b4ae6d36906d19ba66260356f15bc1a47a2d57460";
+  sha512.doc = "539025b2f0998bf031f417d002028e29edc58c1818d0dc9c07ee58c6877b5709936be23985ecd5a518c36187f451a2d5df66b5832d0019ff8b755c763b903aa8";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"hepthesis" = {
+  stripPrefix = 0;
+  sha512.run = "ea6543fec07480af8db52e43ea5fda346ed4e9ea245af0810a6988d864675a903841849e502506b333cef0b1685a6946ebf1f686bbc74f4ddcc7eea676c019ed";
+  sha512.doc = "e456a0ca03da4bf71d767616a140b6e1d922e05944a4db2c0cbb360dff39fc7e8bae741ae5adb49972253f38774f1a9c65393bcf4e38e3c568b0215a04f63d48";
+  hasRunfiles = true;
+  version = "1.5.2";
+};
+"hepunits" = {
+  stripPrefix = 0;
+  sha512.run = "b6abbe3a93eac6c7c159cd9c305fbf61664908b93956b90cb413e2220b12d183e4fafcb361d8935bac16a39d14451f538d38d9452ca78eb4ed03841f3e5bda78";
+  sha512.doc = "3247cf7865444fc2a600c05843c55ddca792b59b5906326e79591822c0e2577880d55704d4e726447aa503983644e7c0b7943482045b5c9ce6e8fc765bbc67b5";
+  hasRunfiles = true;
+  version = "1.1.1";
+};
+"here" = {
+  stripPrefix = 0;
+  sha512.run = "35c9ac325579de5d3bac4b8d16b1f30355398037cd0ad1c52b1585eb7ec666e743680eb05bec7b1f8cfa3bba3d7f5c0e6e06cddde6ca879ea708388df140eef0";
+  sha512.doc = "482a2ef8edbe41ce76e2c32bb579b132c84306cbd5387cb5249b10a02826e610229ec9c75a1df53b5b930bb982e1157ad9ffa63a77f84461cb6cc6332f6d6e54";
+  hasRunfiles = true;
+};
+"heuristica" = {
+  stripPrefix = 0;
+  sha512.run = "bbadd84c1cc0825f0dbe72bdd8f5c4b939ae1986dc0f97ea80ecf12999f97d455e2f89cd12e71e8a51ae4ccadbcb01ae7768a60a47b9b35f19b98ea17332372f";
+  sha512.doc = "f445e4588ba85a71af43640e6625fe1fbcb1f8a2208d2c5cfc7fadd1df325be3fdda85b9da4dd824f3c0445033b2bd9e2120e71abf61c6f55b9e828a3e61a87e";
+  hasRunfiles = true;
+  version = "1.092";
+};
+"hexgame" = {
+  stripPrefix = 0;
+  sha512.run = "b16abb669f6bb5c3111e6c333353cc37a76431c49920a4cd22af79f6237f78a5c56124c5854b7665e9dcf963fb2715c488dd7ef4df86d5582aa7b3dbe3d08822";
+  sha512.doc = "0fad11a5510dd1a2ceec227c46c3f8c0c387ab3e2819bd70765d363ca5f97822147bfac62e69de773a96d24a881394c35c1542a8f08a1828a82f94aaa7f02644";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"hf-tikz" = {
+  stripPrefix = 0;
+  sha512.run = "47ca98b066829e6ea2009c4beb92db2c7671642c495f1011df9be00d546f3613b7853aba5db88e3805441eab66c873e15b60f5ef75cf21e906f80b5f11aa30a7";
+  sha512.doc = "234a8ccdd9cd921368f700fdcca818d0c76265371ac89e09c1a54454fa3e00f0f28fdc7f962c227f9bb69d851585f2c65e20b4a4093aacc3ad0aa84d1abc7f87";
+  sha512.source = "74fd110da2d0d248d70811db52f220012c0a41cecfaf702765cf8bdeae98d9e1a96c6087770de4fcc1ec249901ccc79837ed4e89b4527dd3f746ecf503c201ea";
+  hasRunfiles = true;
+  version = "0.3a";
+};
+"hfbright" = {
+  stripPrefix = 0;
+  sha512.run = "91c8b007dd8ce71af9dbc98a66a82a395d68fc87a0abcf9518b5b89a98dc23b28f1b9b9aa551f82b920dc3e2d8b6500884eaa3bc98be48371a9774f9f283a641";
+  sha512.doc = "7de24b513093d965fab1f8d7d13ec4b356e7f5495cb3a8f17204b1a786288488b4921df6b7e184262bdd3aa11fed6483a25d0bf8e898db05c8b1f7dff769c175";
+  hasRunfiles = true;
+};
+"hfoldsty" = {
+  stripPrefix = 0;
+  sha512.run = "5ff36855df468bf59d387d56f4ea65c86ba304eb2495f2ca110558ef48c528ef444c7ebfaa378a454c311c806525ddaa639a32d3d1b16ca492b641f223133390";
+  sha512.doc = "1f88ae3c13857be317ac2097093bb368a9f1ffa2a8fe1b5e15f59622dabdce2f2b3aededbca31a4d17f05c2dcb28f8ae0c9be3cfb1758bab4501a99efc68612c";
+  sha512.source = "5ccd5708962e9ddeea3ac41426cac6469ae22914fc4bbb5779e25d592d1cfb0df78f73d79c969e00b68b38eb9ae7016cf394f9592c14d9400bba152e6fc91092";
+  hasRunfiles = true;
+  version = "1.15";
+};
+"hhtensor" = {
+  stripPrefix = 0;
+  sha512.run = "387fb53bc2c9b83d2f34d9fe7856e3e7c54e2403378a1f806e29549e1d4b871cbc8333b64f721230918b96b9082ebe0ec07533cae9e4ba54d73dd8244a95b1f3";
+  sha512.doc = "30de49c3074840066555f2363f2c4120d731c3d515c2b3ad6839bd4e04abfc7043930428f0345149c6da1b5396950c8864baff6414a42769f1652a057817616b";
+  sha512.source = "10c1cb953af7cbf3c1f31d06116833eeb4a3c81d66671ade683ad38cf97271e4f05070cf065389211baf8df13415d74086329d2e83f141f4167f0909214973da";
+  hasRunfiles = true;
+  version = "0.61";
+};
+"histogr" = {
+  stripPrefix = 0;
+  sha512.run = "987c392828a4995afdb37b10194c7735a7dfe3375bcc6efda6592d3f35351c369c045a2c1464cd2653d6275913a335ce3d527afb44c51ee38d3038d4751eaadf";
+  sha512.doc = "6cebdf9d6000ba48dd8106645e7a05709ced06c8790f8383a036629d8d53ca434f5c5aa0ff511754ea9e00fa743e435a304dacc16edf18098409972f763f9087";
+  sha512.source = "f5e764adfe67c9e07261ff1211cc08ac9b4b076e67683dc50f9759e942f50810a72222a9669770b9f281b7f821d50a7da85014ad65461dcaf1117d54b98d89a2";
+  hasRunfiles = true;
+  version = "1.01";
+};
+"historische-zeitschrift" = {
+  stripPrefix = 0;
+  sha512.run = "da501792653c77f7cdac978a348e1267d4abc2e80d8b5565b47fdab4a1e2204f9544bab972a291d191ce26bd29203ff28a6440e2f8969cf1b33a5cea48998b04";
+  sha512.doc = "1b091b850e4936e8e6484ca484f740005c66458655a0cbe24938c3f33f23807fe9b7a0ab93b38f6a3481c684e35031398860d5452f6bc3fc8a8e6f4c2e82f927";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"hitec" = {
+  stripPrefix = 0;
+  sha512.run = "d7ebe166a23c05a1b78552c102507e697c07b955cddc8f4061d22fc42fc414664d3a1bc1c08e0dd122a987c736d24d4935dd944b37f62fe260b3c811678a3b30";
+  sha512.doc = "f166b529f29f0470770d5a24e0f3ea2be9021732fb5373611b87cda10ff2196d1d121258fda75369a2f0f9a65324f4a8dc0d3c5f377cf994c04807b18b5a46f3";
+  hasRunfiles = true;
+  version = "0.0beta";
+};
+"hithesis" = {
+  stripPrefix = 0;
+  sha512.run = "987d14e74f7adb87acc5b9ca44ffcda67872657f48ce421a13a028b7cde886ce6ae70d504d6684f42ec03774b6d1012a7fee11616b9f66ce6d989a2c4594e2cf";
+  sha512.doc = "18fe3f3b8892f69354caa043944fc6dad88b0f468506acbeb08eaa0b220dfee44af5ebd2470e70814205d07541b2eb3ad93532dbf0c1c1b544591eda81e05da8";
+  sha512.source = "9d77eeacbc6738862aeaf12b9af9f9474c90bd2a916e06fe4eed26743101eeea48e64508cb2ac29cb7abe9de56f1d187e4f84d89d0fe8408dbc4c878ef6587dd";
+  hasRunfiles = true;
+  version = "2.0.6";
+};
+"hletter" = {
+  stripPrefix = 0;
+  sha512.run = "bd79dec347980624c634918880718af9e434e24acaed206815e974c2db856e8f424e12b6870d920079626423f18a02fd326bdc387c256ae9c3a1dfa4ae26e71b";
+  sha512.doc = "67a9a39cf0c8ac1054588ad542a8ba3705e94445920d4ca85b46423a4cea364c58e8d2b02b7d7579c9684653734f0766e8ddced28a7c5ec77e0daa3c3dee26b9";
+  hasRunfiles = true;
+  version = "4.2";
+};
+"hlist" = {
+  stripPrefix = 0;
+  sha512.run = "9e2150f08a7fac07a0e2e36edcecbd5c16ab3c119d8532fbae9399f14c6c7567d2cf4e2a92eda9a650049a901a35b6a9a0dd3423a06da6a9d266a3859392334d";
+  sha512.doc = "5b3748d7f67fb51dc0df2a03318e96ac9224abc42291ab475a907befa14fc210d9d2371005150404480900865e8ffa9f97e3ab122109bb5454c3b061f66a064d";
+  hasRunfiles = true;
+  version = "0.11";
+};
+"hmtrump" = {
+  stripPrefix = 0;
+  sha512.run = "62efa57cc09a2792fb755112defae31666d44ef295f75f1f04b3742b63ae5696352bba7369778a88f822ff3e09bca00ed58157df6afdd664f7090c084c28f9c5";
+  sha512.doc = "58a765a12ff3ad55278502d8396c3580f971cb3af772acedd54d29fd47b73716ad543561d7d7f58a97b54c400e827e54bdaae3d6a599999ed12ef8d884d2c7fa";
+  hasRunfiles = true;
+  version = "1.2a";
+};
+"hobby" = {
+  stripPrefix = 0;
+  sha512.run = "669c768dffa4e88d831d0a03a7e518fb2c101cd0af9ca1e15e6527ccbe78a13485145bedd4ef45cbaefcc94e4bead303acb89a0d0f50c6fc3a7ab312717febad";
+  sha512.doc = "7c8a353078be8b94195558d1d7a319173b4480a616c8725b99357ed3a086565c238b944b9b3baa719b354dcff9476aa7c7ffb055565df546054e662370d5d808";
+  sha512.source = "216ff34f42c28fd3e2303ff5032a299668881fbe51e8c8957547dd7953b2296e984a449cc09b79268b968ec8fcb8b774453a26e88156f5b7bbc6cb78a57de7e7";
+  hasRunfiles = true;
+  version = "1.8";
+};
+"hobete" = {
+  stripPrefix = 0;
+  sha512.run = "d2c79f5d39fbe82b43704a78add3a016768ff282d48ed1f49d1991c6ab56bef5266e8cfa7b3b03bcc944990d407ae43eca99930270ab84679f51323407b861a0";
+  sha512.doc = "ef7b1bd487c496cb2ffc01fb2940a72ac69edb1a5516d19ce6a6e6cb197ba6f517e03ac673b2372cc9cd4f40e5c6ea2469c2712528a10a3f5ba09e9d3a46f209";
+  hasRunfiles = true;
+};
+"hook-pre-commit-pkg" = {
+  stripPrefix = 0;
+  sha512.run = "6fb3009d4bb4016f0d6e92571d52aaf7e3780d39a6b2ec73ffb37112b3f153ed71ecbcd985b81dd841f296a39da83e9004a2d6e6e85e9a49765e1682563cfde3";
+  sha512.doc = "3873c4714a8a6d221f860a5d0606113c64482b363727067e0017d27e99d73f31cfdac88a799fb1412225baffaecd7bb03dbdc66b607a075b1e4539ffc0df2a9d";
+  version = "1.1.2";
+};
+"horoscop" = {
+  stripPrefix = 0;
+  sha512.run = "077b7bc742d0526daf7380a080e640de72d61d5e65cac441d3291e1dfee8c0240be8817328e7080fe410fca9ebc8b5d13e8719ed48bd7d412485d7c5d2f67ce0";
+  sha512.doc = "b7cfdfb772f5423fe4cdcd914a4b0934162ea33542a773b14d91d057efcd05b7febfff46decc3760512b0df95f52180a4de0dea2f0dcc4b504945ee572f832a7";
+  sha512.source = "2e132bba43dce98d65a717f755062ed6f63ecc0775134562d1061fc28d7776fb02baf7502273d1e825306a8a19eecd4d4e94d4603687ebc0df1923b27a213cb1";
+  hasRunfiles = true;
+  version = "0.92";
+};
+"hpsdiss" = {
+  stripPrefix = 0;
+  sha512.run = "4905368d081cc6e7f2c7b43b28d4c6e22081796d8594e5a07e521bb7ab0fb14c9ccce1dcbe135b0cbc5a7b2671e3041d7764ff80c7e1543b4ac4cefe945794b4";
+  sha512.doc = "566f0509feee0bc5c28481fb62f2c991827cd5855f9696fdda79628f5c43329b39dd508fe9613d2c0f823bef421a97393fd303d830c779c42ac67f88303a239b";
+  sha512.source = "8337cbedc42502ececcfd60adf422e15aba32381c46489a82d8b618286a4d8848c0288136771b8acdbb03af9f39029e4be8e1c287f6dac9bd3ade3b727e8ec8e";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"hrefhide" = {
+  stripPrefix = 0;
+  sha512.run = "6d96fdc550a99ed7f3e4dbee19a589c27b27af16f910a22befb51bfb452d8f9f57cbb27f1ecf96c5604e61eb1cd0343c0a07810ac1519dc51422183d6229916e";
+  sha512.doc = "a8ae0fbbb185ded46cbc1d7550526230de4098bf3a5bc8bf72ec8f5a5b4b93703501da19a4c9e09e08044aea768a01e39dfa36c38c9be72c7aee8e61f58acd71";
+  sha512.source = "ed08bbabfdd78725060f3bac173d2819ddfe494e99d76abe02ffff755718caafc520e0336299c8c1dda0db1492089316e05b1b85c93c866b683703b471e845b4";
+  hasRunfiles = true;
+  version = "1.0f";
+};
+"hrlatex" = {
+  stripPrefix = 0;
+  sha512.run = "14bd6fdf4a60ec599971b1f5ee7ae5fc649b0d1382f9dff8bf9905f4623f3964c2d552bbc4485680d22cf04651a5e49b71220ec2c05e6599356b6dcee6e4d122";
+  sha512.doc = "ecd67675466d365f00e49b775ae3e5264e2d10d574dbbe913d52b3a5b553fe942e06fcca26cb2357fa76688c55fc4268bf7d18f5cb2a90663bfe47c11a5bbde7";
+  sha512.source = "01f47918a1926f36840fd4d78debc70cbe09fd2a52b06ede7b40d7c3ce0d42e6385d54cd2cc96eed8bc222ebcbd2e7ab191c41f8c8df82f9b5ff93d2e0f54a16";
+  hasRunfiles = true;
+  version = "0.23";
+};
+"hu-berlin-bundle" = {
+  stripPrefix = 0;
+  sha512.run = "1f7e2b6dece2dca1334c876cb881f7754bdc2e66eac656c577a416f26873b5fc6ffdf0bf539b446ceb66ad28d7334e3dc340ed33bc59a24a1ebd734b936b754a";
+  sha512.doc = "67ae49666ac397c0cf86eaedfb1b7a2cd0748074b518ecdba2ab9c38f25408f4de42a8293eb3ddbef9724dfb24be1e8da30f3ee5ea4e6bfb9f11c730d622931a";
+  sha512.source = "7de2dba58b4efbe8bd03290fc90c29f6b515abbd74d32f8eb1639a488c5ea98cb4b7a94ca9883d69dbb0cdf16adffad913fabf01ac5184fabf8ea615feb4ddf5";
+  hasRunfiles = true;
+  version = "1.0.3";
+};
+"hulipsum" = {
+  stripPrefix = 0;
+  sha512.run = "c43867cb608e955254f2c597d3fd9938fe815c1683c9d61dcd1cfff29608b5c391d7374a740646dd915fdcf282d9adb8f83d3dcb6781fbe547b685de81f67143";
+  sha512.doc = "43dcdd731116bd1eac309b1213b3c961dd189f861b8732d73127ba6b4c20d3ea3584f03340ff5973b4aab11744e61069edfe6736d389e1487587d0372591e343";
+  sha512.source = "e1290087087ab8d63d2e2de72cbf641ec71ae362a64faca2e362cccfb05890abc9cd970a2eca1b1c10cdd95760dd82e8bc90fe0e8ef4d99df6cbabba24c80be0";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"hustthesis" = {
+  stripPrefix = 0;
+  sha512.run = "508c86a6cf5e3d952dd43786f78952cc8bbe635620a913abd82b49c2cfade29875bc924d5ea89803b03008328c7297010e98f70b62b5191d9855e0cc1614d3d0";
+  sha512.doc = "5c114cda4bd4264904b7fdfedd55720046403b8cd3c1bce4181dffbf319a9107ec0ad8cdd092922c8c5268aac62437d1128a45ea0cdff4121a40f02e26dc0148";
+  sha512.source = "61b6147d4bd063995900479b894b60d929445e60855c522e46abaedfbd33f7516f90a99d5052b3241d7070d375504cd660446d6647c28284e76d0ff9ec5aaf76";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"hvfloat" = {
+  stripPrefix = 0;
+  sha512.run = "717fd6f3a1b9f7fab0cbbfa929b09e9186637d56092f50d1f0d1603b7b7d67c300587d12e9ec25e73a89b240ac3744bbf232802b2046d34b8606263a7fb6064b";
+  sha512.doc = "98b61ee75c06007773a5119a5c9ded7d0ff9579e016dd024265329193661771ae246b9e0e44c55017dae9754219f2898abf221a4affb6231e0d7ef775fbfc30d";
+  hasRunfiles = true;
+  version = "2.16";
+};
+"hvindex" = {
+  stripPrefix = 0;
+  sha512.run = "12e47531ca8dcea2f195d86b5721f2a62d2590de5a0b464e5e6de5484ee34803eac14f2474e4a00938f6d5e5b307ed3183ea3aa0a4f0d5874877356de6e8c83d";
+  sha512.doc = "2a10c26537e550e3d51330c704711c2c43b872f90db15ee709dcfe603a5fc64102a8b466c5d5b7ab4706d5e96e91b11559305ac607477776f34da97590151368";
+  hasRunfiles = true;
+  version = "0.04";
+};
+"hypdvips" = {
+  stripPrefix = 0;
+  sha512.run = "da692cfec4c9989b313326cf32c00a2602413da7a01b1bd7557ce5bf982fde071e1e4ca6613f0e2c7ff74b53a8edd5cc88c2b8ccc681ea94a46a5ccf97f2d3bc";
+  sha512.doc = "40c8126cb0fe0ee748afe0c46f80fa3a01cb52142b3d8e06168877b8e08a7d35c80e555322ef97ada73f17f649e50ded340836d33eba3d9560143e7f64abe2a3";
+  hasRunfiles = true;
+  version = "3.03";
+};
+"hyper" = {
+  stripPrefix = 0;
+  sha512.run = "6e5bbad0a682440e28be67fc893a970de315671e1f4987bebff4a163d9c38bb33d8de9557765f1d8c74386556c59e332ef5855a3f1fe36d08eddcbd2a77179df";
+  sha512.doc = "41fafe8bcaf651994c45abd0040e2123caf8e33fd2d06fafd310d978c10ae5c705f7dd64d9b4740bacee51f11fe52741ed64f83d6b236d298cb6c932fd3ba06e";
+  sha512.source = "50552c5d6650973719d892d2696ee4885f8fa78d9e9c62e3fabd8ac42f35610c025c508aaa250f52c5c7676cb5e0e6aa4b75efdd19d3c9e1f3b3ac6981ab1342";
+  hasRunfiles = true;
+  version = "4.2d";
+};
+"hyperbar" = {
+  stripPrefix = 0;
+  sha512.run = "80077002a3bdc99339749e2f76687a0f8597a786fd3ca3f5207ec44dc2037dbec1e696ab58d77ee6b067d6e958357cb8f0c9805621c3feeb40dde004851311b3";
+  sha512.doc = "0598acd8fb945605b204c5c99982db63f4fc06fc82c47f7b301ead30be0474c7dde5eb4f78f3aa698160cd068d38aa2aabe3a1fae3c49cc32194e7cd796839c2";
+  sha512.source = "99555f8a939783db613ceaf509fbf2d95352ce8e774e750a9d552717eb538a64663a905a063b6b93aa83384ce322079656c61eeccc9678bdee47b2c56e52220b";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"hypernat" = {
+  stripPrefix = 0;
+  sha512.run = "0a803b9e7d23d364122869a89a6f181132f00b54d39f677a9d9471c336c933ba0e743fa4100636a6d3e929714a8896ce964e7614800c675ab9df7cce7e6d732c";
+  sha512.doc = "04a3f646e1595404513149f0ba56a36f0cc21a29f3ab455f38c4a7c3f5a282199208ac3aad329f38aa9fd5086762d326d85fa5052dba125d944969bfc0446489";
+  hasRunfiles = true;
+  version = "1.0b";
+};
+"hyperref" = {
+  stripPrefix = 0;
+  sha512.run = "a05e87f45b52f1e73fda4233dd3c117828d3edf06ae8eeec2657a4c887bd8f7ca65cbb4def4f68a2222b2b586da3df9be7eb75aabf2aefc6c80c7d1f191e2af7";
+  sha512.doc = "d3a016cd4de4003d65dce1382e0b987bf62e9d5e6107fceac9ff78c23cda49f8d35b8b2963403258ae4328e3feb3ac8d4d24936a3937cd4fdd575e854a082be6";
+  sha512.source = "23a44931030ff104b7f2251458401a10133b9352021ff9f316b12026a56485b05c5ac05666c8f4eae038a962ffc2d06be32efbe80af16b2094e8ff6cad6cad0c";
+  hasRunfiles = true;
+  version = "7.00a";
+};
+"hyperxmp" = {
+  stripPrefix = 0;
+  sha512.run = "95ab28036eb17cc540ade3462c3f205eeb07e6dbfbb6d150bff2c8264c3ba344dc7e977391a2c72c0d2d26f51e5cdb56751507b56da8d6862b7a2eb941929694";
+  sha512.doc = "473038ca262432f860decdb67c4fca775bc96ff62da4dcff7b6f6b5c681302f32383c112b46b470fe0d96edc4599b4c2e328fbacab0ba091d9d1e9e5e837d1d4";
+  sha512.source = "bba2d1f71c938ac57423e792ea49cd6008f97a3aeb608359780370f832157ed716759460dd1daefaf6b88af40ab03ab7ccb6237202e8fd7dd43c0504df1e2daf";
+  hasRunfiles = true;
+  version = "4.1";
+};
+"hyph-utf8" = {
+  stripPrefix = 0;
+  sha512.run = "51fd6b51c1292b74c7eb6e8ec3fa7cbc7e02b8c5d716aa55e378a4103d21f7c4dd5298e2efdc47378d27d5326830b9b94846fe3109d3bbdf60f8e038969ad95e";
+  sha512.doc = "027285084e97c6a51296e532d306dd22d4b43ef02928e06d9d684d0137d0379d4f67f83e0f16e472fe37bd285793615af8bf082bbf7a959d586173a04bc5326d";
+  sha512.source = "10c310af9e16263817c400686b7894d6b62f99c418972e7f494245e2d810e8fa02464ddf7175d64a857a3b1237059df5d63277ff7852993bc0f5e6680c82111c";
+  hasRunfiles = true;
+};
+"hyphen-afrikaans" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "71da785bd33d3c4ebb5315696e1fa9466e188e13a60fd60920e923a49e74b593fdd0f50cbe5350d28921739a0f3e72866e04736d95045a670f53c36b6ae7e83d";
+  hasRunfiles = true;
+};
+"hyphen-ancientgreek" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "ee5105a58c49f808594d9b2912f85f15617c8187113663d3de3bee4824dec509f8010d89b8610b67c074b38ad7e7aff835994b044dc40c8ba72f2d08e370bb9f";
+  hasRunfiles = true;
+};
+"hyphen-arabic" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "1b43cfa50f074441f757b841b00656ab383ccabf5f2fafd8260e4088de13aabe8e2c3e7099e3d84ef0dff49fd312f17fe11e44892f95b6d7e149e2d4cd023171";
+  hasRunfiles = true;
+};
+"hyphen-armenian" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "a9963cd663ec8e060619d01516fe326149666d3b34e1f1afaaae42020d17c40885599e485d60d0241c9b3b54bfb9614725d2ff39a9bb5f002a240b2c54d2d57e";
+  sha512.source = "8c2177d07755e7a0255057cbe8f9620badedef5fe70b6945c467b555b079d00b7de42ba4b65be095bafb88b2d867e2cbdded53be5bd5c6b5d6d3cc9b55471584";
+  hasRunfiles = true;
+};
+"hyphen-base" = {
+  stripPrefix = 0;
+  sha512.run = "e1980b81a98b82da2e590d08ae5873529041f3b048396d9bd1c3e644e6e8a48a8eb2040ce120462a9e844353f8f0c3fa93c38bd7492d35d390525fac69794503";
+  hasRunfiles = true;
+};
+"hyphen-basque" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "dc57f3ec18dc77de7f638084dfd42e236fb53cdd4027261f81b1425e89397e3343568558c869bc2def57cadebaa5ad113e9993bbc903b157ef3de88d9b6ce23e";
+  sha512.source = "7828868113962bea3e6465f7d7bfeeb9e1c065180fc11faf8d4c17d855931cddbcf4194d6ff65f0af71edbb6d802ec087aa9f745dca9e311a2391be642d0be99";
+  hasRunfiles = true;
+};
+"hyphen-belarusian" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "2da329c3f21b3422294bde8a9cc896aa3e65fb892a71e98a7b836d681b8f3f3b54dd3fa609a3e4c2a46776a0556cfa190aefae10de2f4e20a686c1c15d18c913";
+  hasRunfiles = true;
+};
+"hyphen-bulgarian" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "32a2745a2d94dd306b852ae0d86f26fceda1fafddf0e43c36b323b521b77526ed1a703fdcc1fc7c0548563cdecb80bfe60218c1c939aa5fd595e2ad7ae5552f9";
+  hasRunfiles = true;
+};
+"hyphen-catalan" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "86979241d2a216460d2cd53cb5bb5a6df257b0273c4a4f5b1b799397be48ab6783e37fd041cc8071a1433a8af138a4d3a777cc050cbaf4907578e7ce0645ab5c";
+  hasRunfiles = true;
+};
+"hyphen-chinese" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "1b37c95821b46758e2ccb089f3897c1691e76e7c7aa760e45c0305835c8e4719751c53e6a1a28d2153184e6c1aa20bbd4595a4ccd55a7fc196dc36cead9e2f71";
+  hasRunfiles = true;
+};
+"hyphen-churchslavonic" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "5a2f3bd482818959c2abb74587c04a46919cda5f7ae627a830e2eff6f51ce233e8a2ec8fad727eadb7d18dfb1d2c19b589d94dbdffb36d7af4307e16ff6d4ab5";
+  hasRunfiles = true;
+};
+"hyphen-coptic" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "737dcf70c32e3d39a8092e69027663e9ee173116c14219dbce52f583bf33015035249d34c8cdea4317cd1d94b658869852aceeae1279ce784e9754149f420465";
+  hasRunfiles = true;
+};
+"hyphen-croatian" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "97c4b047a94488d43a1542ed77ccaefc6d369051707298a3f86926e0170c63647a40e0dd2eb4363a7d5bf526358ba48e5674a386451a41877c9176f4ba49c994";
+  hasRunfiles = true;
+};
+"hyphen-czech" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "ea97fbb5b273238881865f8499c300d9b1886e921eb50ccf01291c40059cde75088890d4a06cdf2e43d4aaddc7aa43ab82174c0a50097044a69a53a694b47aba";
+  hasRunfiles = true;
+};
+"hyphen-danish" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "b579b6d00c0139fc5fd1058b5b1333a231a21738a44152346b69d04b39e02ffd01c530ac89f98d2566d17c765c42461c71985b645fc2e62a380814051d064f03";
+  hasRunfiles = true;
+};
+"hyphen-dutch" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "934483760e5a81a65ac8aae0b7d910b5fdea1a62ef7d9575e1a15027309e19b12cae27fd36f75b5336f6f0b38de33530bc4222e27ff3afe60f8e94b16897b816";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"hyphen-english" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "ce688320bb2cf250f9ef4089db9c5d8af38fc1fc12c289ac87f1508f8f5ac09a5fd0fb9206a1b5d446488e68ec3a7184ae45038501afcdc1cf52dabb6cc7ca50";
+  hasRunfiles = true;
+};
+"hyphen-esperanto" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "da7b5bcf0bd6d6f2a34d5b5330f9a97c73f7dde48b28545f8c6d21b5235156535b2910d386fa9f3b4e68915b81f534421022be345da967bd90723be7997f3b6e";
+  hasRunfiles = true;
+};
+"hyphen-estonian" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "899452321c4d907d7f811f044d9d8552d522ed53446419f59a5f8668dae977a3bad3b1dc02bba05c803cfff9a61b4394fa7bf879e1c85a8ff7400eef672d6d64";
+  hasRunfiles = true;
+};
+"hyphen-ethiopic" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "da5ddbbb8dfd8cc8a0b02ac5d8a7b9056d5f5d3a809b4afa41032c5288dbb3d92ef60fc7edb0196448f055aec0770687cf54490a6a5b99d7a3608318c9900006";
+  sha512.source = "0a68114396d036f1a3e63507a381861865ca7c69ed56de3795cdffad134c76a428bfa1dfbf45edc5456d02aac917a4d8690938f935594450a968ff3471c82923";
+  hasRunfiles = true;
+};
+"hyphen-farsi" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "196bd0331cb51550437f634bc37c426c8006a297a6f16d7c43dc291c92f3a635d5a0825a96f2b4be0d30e9b850422fabf3f404a262eba1f65807c59ad8213e86";
+  hasRunfiles = true;
+};
+"hyphen-finnish" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "29e384aad09ab8a636ee47433f83a0147cb4c55698f821b5d40cef74cc265c85c15903d84d721a6bc4921dd0dce0347550cedaaa4bdc58c85dc93043e6a61738";
+  hasRunfiles = true;
+};
+"hyphen-french" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "625087254c231e68c1f9abecbc3b315c08021c22d9c0332ae07eea8e600b800b12ac5147ce11488ec99d6368d695c0766edbd78115c8d5ac6cd6fb71478723d7";
+  hasRunfiles = true;
+};
+"hyphen-friulan" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "fa724316ce1babb63981a51835bae3409b23e23bc0a65cb1bf8715073d076659abf8b4ae942b79257a92080857b67f807d7cc56859c45d8d4874dd0c9b26f001";
+  hasRunfiles = true;
+};
+"hyphen-galician" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "fc4bbfc8f824554487670e115d9844cdab69e4410d8db6382c87386513627a2a96c3a5fe1278102704abdff04f859a51db79316f695ee259398723a32d4fd64a";
+  sha512.source = "ae42aea21c42d2a823e0b1fb8d1a595681bfd797fd5205516b5221d2c80845ead8dd7a9d80c205856a4c701a942d1dfa407150edb0a4236e9a069f02d2bfff17";
+  hasRunfiles = true;
+};
+"hyphen-georgian" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "ac68c0ce6febdf76178e9fb88b88aecac9ad4cf25977054a8276527d12ab55da5be080b01fcc8111ca4996af5d76c26c7f883f9bde5cbd38140e9785ef45713c";
+  hasRunfiles = true;
+};
+"hyphen-german" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  deps."dehyph" = tl."dehyph";
+  sha512.run = "e3437e3838dde9450c755e442b5d90766af9b2c63e9a806bf4aca97c6527fdf5ca38e0a057c8241ba3706508ad9cb5bd4562ce30c5965efda282a66c83829810";
+  hasRunfiles = true;
+};
+"hyphen-greek" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "7af2a6fe7f302dc537f6087c004fd38ce9269679913765c08820c6d7e060b14ae104ba8ce0ef2c54131c62a3731c926a7c521a5ff9188b622c6fb2bf588b410f";
+  sha512.doc = "289e4bae20e0c52e7ccc4156908fef8639b2f803381bc362d1fb6a764e708e7a345fb14d2614ef1d46617e63f0cb4b4852c336a78f34af30ec66dcf9601599bb";
+  hasRunfiles = true;
+  version = "5";
+};
+"hyphen-hungarian" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "54d8a0c0ae2040934f14bf7ba7778108eaafeb5408e448d23c72e2e9a3cd79251b06b5a015fe2a74a9264de7100fc9b9f7f66e89b89c731198aec5b0a160430d";
+  sha512.doc = "1786a4b29cfaaa1b0f3cd2d9b78b980490e2fa5848e6f68f7c9b23d25410eb7aa6ea0dcdd2db0e2270e804746d4523a7a4f40ec53b890acf8a894ae5489fcfc9";
+  hasRunfiles = true;
+};
+"hyphen-icelandic" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "32faa121a9a1ae6d21551b01fc953041da3b1d7beee179daf0fcb022a99c15dc519ff2d32d3e8f3294e6b9d7cd5be07a91d21f7422fb85bac2a890835784c588";
+  hasRunfiles = true;
+};
+"hyphen-indic" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "857d447939444570c5d34639789f2846d33e11e434fb708c2748d275b0673de72b001e6c6c724271496cecae5814e02fa0a96f765cec8df27b719a9e686e2a07";
+  hasRunfiles = true;
+};
+"hyphen-indonesian" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "53cc5ef4877c98b5507cf1952cabc009c0c74e3a96bba42cd5742626ba911145ed44cb711cb5f19d37fe93f15e26eceb3027bc6d22a542065d6bd1211b8357e0";
+  hasRunfiles = true;
+};
+"hyphen-interlingua" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "f341dede7a02b24952a18dd26310386f9dfeea3ceddf6cae3e589528991fcf3fba889096b920bd85a20f5405150d374e2f35f520fba693afba52d071765e9493";
+  hasRunfiles = true;
+};
+"hyphen-irish" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "f0f577439fcc997b0b634c7fab538d56438a670f4f08b7189bddef7d5a88fd842c4595332544ea4ff2bec70d55c67a8684de170db0388a13251f3f5b2079847c";
+  hasRunfiles = true;
+};
+"hyphen-italian" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "f873581b4e5f674e4cd37101d89fb3d5099930bff904d2c7a55512ac4dc7dc48e050cd18615bfebc269d894bb46b65642badc7de37e95e6730d8312afff95b65";
+  hasRunfiles = true;
+  version = "4.8g";
+};
+"hyphen-kurmanji" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "fb7bc7353bc20cac4a76330afda172f56048374dc231df8cb171f6a8fdcfb05ffe720ea358603df991e6ea34cf83495e573a95b4195f545ca68fce7aff0f5679";
+  hasRunfiles = true;
+};
+"hyphen-latin" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "2b1c40f68c25421cab3fd6c9b805c509686c4cefb5e8de18490fcbe8a4556892fa4e4b692ef26ef388a7a9a7cf690828fcd5a0ff3d2c374276b4a12087e1d58f";
+  hasRunfiles = true;
+  version = "3.1";
+};
+"hyphen-latvian" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "6ebb6611f20d90ffc57d4f67c5fc4987e31da62979342dd0143fb51126a6400c634e9bbabf4b2383ad71619833280c30fc22175d394800ad5960b33434c38c52";
+  hasRunfiles = true;
+};
+"hyphen-lithuanian" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "7f1fc26d4554abbfeeb1da1f0eda68ee163589f519e3eee958fe1706d2dac7ace451da18e0b1ca8078a00319e2bf6ec6da8a9bd75d5d29824760194c1d9cac87";
+  hasRunfiles = true;
+};
+"hyphen-mongolian" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "0a4f14b167afc1bb4b017978a61aacc40b27ab13f26aae90f3d970a5ec97f2d8b2ddda992bf83488821d2fc58238c4d4197f91586e36f3812271d2ff5ef66663";
+  hasRunfiles = true;
+};
+"hyphen-norwegian" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "3bb97aef0042c3d863659a3f8921290ec9aab46f731a6908262f7f35f3843a4b2a0caaaa1d373d643e1bea43ddd57ad85b3c0fbb9a576461bcbe21fa8a067759";
+  hasRunfiles = true;
+};
+"hyphen-occitan" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "8bf003921d4b93a73013e7511d3ea0a11f1f9a1f927e46ab59e65952e7e51ccac69ccd52382e37785a1136426835d7d88ca71241b29ecf7a1d582e2294f449d7";
+  hasRunfiles = true;
+};
+"hyphen-piedmontese" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "cb302bfcca925b09ee9ea9f24014249ffc48dfbe16d3ed8c4a4503c036df1a15af457e1a1a3069d4f8f00c511d4099cf1a3541854a992b0ab5f0825ae1df378b";
+  hasRunfiles = true;
+};
+"hyphen-polish" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "c36d67a9ed57e6fd0d683ec1c8b86ee6e1336ddf8103c430d074b71b0710a1fe64e7915de32eb3a789aa42b0576d286e11cff966024e6eac83b80315101df529";
+  hasRunfiles = true;
+  version = "3.0a";
+};
+"hyphen-portuguese" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "ce865fa130f7d616aa0dfaf3bdae399c360f624245fc4af156ef4deeed254cb66b549cc64ae5727bb5f538ad9b2613bd2b4ff64ac0345b8ba59dd172e778e01d";
+  hasRunfiles = true;
+};
+"hyphen-romanian" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "2c49bc2a8ab1dec522ee37a0e235b4dcb327545b072fbda972c68c4dd7faf8bd029b74316861168352effcfdcf022e37c42d079f71f5e719764ea2ad50d294e4";
+  hasRunfiles = true;
+};
+"hyphen-romansh" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "d2d107149d51fbb76813ae495127b1965002d38494cf933adfd17fa613db8658fb28d5303222e289e81c56639ff40001b73804474f7d8b09a4bf763286d5dddd";
+  hasRunfiles = true;
+};
+"hyphen-russian" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  deps."ruhyphen" = tl."ruhyphen";
+  sha512.run = "b13290533a666b3377f9d0fad9d441f6475a3363e32e3675ab836402ed03083b4a1ddbc2fed946e7e7d048a4ef9a8e6d13ece7c98e77a828af3ba6e7ef14c0cb";
+  hasRunfiles = true;
+};
+"hyphen-sanskrit" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "5dc85b741c8658af4c9ed02a52c394be315e2a076f91a98ca44254bd7006f585c44539f1a911b6d63fab17e2dee7ef89cee74c878348115eeb9d7aec2e253595";
+  sha512.doc = "b93af3eae61de575fa8909a8cf39bd190585ac702577c76df655ca94fdc3d1d5206d4017c80641e5351b894cef9d214ed18c3d5cb1a30f5e06388445724c28fa";
+  hasRunfiles = true;
+};
+"hyphen-serbian" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "979ec2b533f3bc90b672a856237489b78e11e1f78782d0c14320ad38da08514ecbdc1b7d3d42930280324c36717c11fd8e3d57bfea74e3fe257fdd84138a144e";
+  hasRunfiles = true;
+  version = "1.0a";
+};
+"hyphen-slovak" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "08ddbdfd97d005f69829477f0f269c168dcf68ac2adc278eb91db91a9e61bd8ddcd3890781ddacd623a12aa6698e6a46651d8e26bf9bff3a817c655448f1747e";
+  hasRunfiles = true;
+};
+"hyphen-slovenian" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "3caab81e3d46b889c1f72bf4a2bbac5a03ae6581eadc919f21eac47af8defab69a7fe3a8e975d8f578cf4ec6c56458f78428ae621fbb2334a605b3480426a833";
+  hasRunfiles = true;
+};
+"hyphen-spanish" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "171417a27ac9303f124cbfe5e2c788e11148426a16336f2b2f3f9651c67090b6a72f32ed681a7415f886d5e18f6075c6ee0dd421b22240d6a130897865953488";
+  sha512.doc = "e52e6f19134c653772b6b36a37b00a6a1b83ccc93716eeb9215b1d7677a1df5d203493bceeed312cd668e4de123249b41368b4c8d0479684b9b5099ac5ec9f75";
+  sha512.source = "3e010822e51974cb70c8e551d0bf31b13c754d3290f04e8829dca6642a0135636255a578bf50ed2642d3aa383bc6acadcf11d25c8184833d692817e518a83e84";
+  hasRunfiles = true;
+  version = "4.5";
+};
+"hyphen-swedish" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "bfacb0ec44c522f993000db583d495107da1d98ea905feccf36a3fc517058feccc8f4868065bedcb6dc64f0c6af7f1a2cb082179b6d86f15befb4c712bf5bd31";
+  hasRunfiles = true;
+};
+"hyphen-thai" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "4c47391ca4cde10be3bc50594eaf506172c0cc12066cb028073845868639e1ad18dc6d57dc418176695df1a7cd7d8ad29f3b4c007c746a39026646dbf2b07123";
+  hasRunfiles = true;
+};
+"hyphen-turkish" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "d65df4ad0364fb7da5cebe9f39a2351671cecc49d050882399630975c5ac468dd1e41de9609c0581322937dd683056335fd78c7bbb1423610441e0bf4acfdb72";
+  sha512.source = "27a469eccbe748ded0466c4034dfaf280bff3e6448aa828f2411bad7b9ac8e875f172eeeadd077670f851e4650600c70b222b6325dfc3d362b6737bc988a20d3";
+  hasRunfiles = true;
+};
+"hyphen-turkmen" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "e4595aff01856c97ec6bb178a0b045868e2edcdfa23cf24e20942b4130ce46ad42d7ce6f13edc7c7bdec2482b29d21a0137f0cc8b77c85e044d85fe3955aeacb";
+  sha512.source = "dc3e3f607c25829dbaa3193ea92ea16dc86503189eb19d66738c0148507f3db9cbff0b2a0700a19ed994e7ad518aa0938c1fb4fb28bf8d6c14c2b82cc130e6da";
+  hasRunfiles = true;
+};
+"hyphen-ukrainian" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  deps."ukrhyph" = tl."ukrhyph";
+  sha512.run = "4aa80aa8365598bdcae2f7dca2a1c7ec7b1f4bf4a5ee434e2e8684263478e6b1346d18c64756fd40c7007f73d3e69c71f2868862cae0c983d9c9eb9e645ce237";
+  hasRunfiles = true;
+};
+"hyphen-uppersorbian" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "b60b36ae0816f11b6064285d79098ad6aac605bc1b20bd97191b97bb10a28b445e0e71d1ea2476c0731a72d96c20d114d640c3d4471d53a8b6726dc089377a0b";
+  hasRunfiles = true;
+};
+"hyphen-welsh" = {
+  stripPrefix = 0;
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  sha512.run = "e4b61366f67645bb8ed2b848a246cab0c267dc626c7a033627d603c91b7061259d2b95e360f15672aa03197b198c4a45152df4dc88f923fdbf8c1ddf92a5f33a";
+  hasRunfiles = true;
+};
+"hyphenat" = {
+  stripPrefix = 0;
+  sha512.run = "5af847cd55cc1b455b1928f6ba275054209ad5c9c2f81a7ae648d87eaa39353e842b2df4e91cf530909a46b4aa226228978d771b35e46b7e12f1a08a08faa181";
+  sha512.doc = "57f8a5d71763cac73635fddba75eb59faaaed01d47bcbb7ecc96b80fa5a926bb0091d3cd3448c6f53ad82cd44c9244ee631fb5b56141351b578cd899509eb323";
+  sha512.source = "781337dbca0ecf6155221b768ace1fec364bd1ddf29e3df36b2da64b6137a09996423466c8241cc5107c3eba056b4bf5c54572af77e781fe8e1e7f02264d9577";
+  hasRunfiles = true;
+  version = "2.3c";
+};
+"hyphenex" = {
+  stripPrefix = 0;
+  sha512.run = "dfa1f625e736c2c4125209552f084fbd5d64109db5dd5b8f37b5add3fce90984bfa5db855b581396ffad20b1f5a3461cae01e031c086f7db5dc98203bb7bf8d9";
+  sha512.source = "cedcf83033a5aaebb44a8270b5e670b9db2fba2b8f65925cddee4684bf50fee5dcadb02921b04288d02c91ca3d003c8da143c7bb1974e7af26b1f392dfd4283f";
+  hasRunfiles = true;
+};
+"hyplain" = {
+  stripPrefix = 0;
+  sha512.run = "f2968e8baf048329d8c78934770aa5d0a364ac7b3f77dc00a163e085e4fe45420c180acd05b281016aefdfa6523bed234e75ca07da0d133438798c1e51330d83";
+  sha512.doc = "cc64c35df85ba832f18f153d0f0cdc9f153ac4a9db0a175a1961a353f59ba585e19b6607e0c4cd1a832d921aa3451687427965cbef4fcb2a87488895e6643bb3";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"ibycus-babel" = {
+  stripPrefix = 0;
+  sha512.run = "30f810bd70555df4f05fbc0b073456c030a0768372bd3c681921f41fc31bfbe0570a39e474ab26aeeacb142622154e5cab3714412b09f89d1260fae8b60e817a";
+  sha512.doc = "f09dfd00f35f653defd756b72437dd712ed1ffceb05beeadfb34c1c5163559ee7c0ae6ce0420f57b722e93080248cbcfd678d811f1383fa5fa1ab76db52a060b";
+  sha512.source = "13e3ad11b56a70d7752209feaa9437bda4979c40a25597114bfc5b4e26a889c623aa7266959a212de6b7e74ebe75fb38b36767fa95f692adae027e5d025a4702";
+  hasRunfiles = true;
+  version = "3.0";
+};
+"ibygrk" = {
+  stripPrefix = 0;
+  sha512.run = "89002af0024ec804ebffcc45f3a33337ffdb66f71e1ca70224b0936388892dadf99605a8ca3f59a2b879e76e24acc91b1da92622d602f49b236aecb8aafe64b9";
+  sha512.doc = "9dd3bd7a8ef3267965f30048e4a71314b6a9813cb400b7a94dfe285606d7554cde80aa429603d0fb1f587935e193e5ece5ed67870fc4e0c66eb5152c392a9cdc";
+  hasRunfiles = true;
+  version = "4.5";
+};
+"icite" = {
+  stripPrefix = 0;
+  sha512.run = "1a71e185bf65c65f64ffe49d4b7cda415bdec89a7f92fa45914c0adccc2b1430f0022f9c789c2e13c2acb0a780ef90360a22247ba2aecc171a3fc6e06b8f05b0";
+  sha512.doc = "efad2e573358b64b6d6146fa80011b033e4acd7435d9b0e32778240cf8051c732f1617614cd4ab56c91a03260b203084aa5c15c03208bc86686ad18d2c75e93c";
+  sha512.source = "a0c728f3896f269ab6f91945e1ac984bd3b6774525567f8f196c46ea8edba2cc5f6e6886b26a9ecbd2b1452e9980ccf4e3ae7a7a5dee852c073cb9349a6a874e";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"icsv" = {
+  stripPrefix = 0;
+  sha512.run = "e865708ef636c7c917cc9a870eaba4b8c0249acba01bd2cd3fbfc9d95672405db133bbf0faf9f2d299bc4024118b80b4354ecb8216427507f66817cac085e01b";
+  sha512.doc = "dd06bf5d8a087bcb20c63a61cb9867bda3df35e8adf30a3d4ca69ab149772d46e3b83f168a8fc1c597aa2536a14b98561f42226a59b6663f58de4e338f9b4e82";
+  sha512.source = "9ee3fecec68c7719a39d83860e8efaca3f5daafd82b9ed06af9ac38ffa3659d03f7ecec5407d568ec5f071c22c0cb33166449b64757be7b740943472d9ca1941";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"identkey" = {
+  stripPrefix = 0;
+  sha512.run = "b04dc4859826ad3f4fc4dd4a9b19abc0f6125d66d200519652a130c522fc6b49de8565af73f81efa9e75d592036ccca6d373a368e66526d8997dab9d8a5f806f";
+  sha512.doc = "c676908535a4a67efd8569e81a1d3ce5a47bf7a5ec755e87e62830e370fa3307bf0d6a84f3ec7c399bca3cc365f97469393a6fc954bf83b2e2fbc9eda9983811";
+  hasRunfiles = true;
+  version = "0.1.0";
+};
+"idxcmds" = {
+  stripPrefix = 0;
+  sha512.run = "ec7d58e5f52472b0d359f84afcba179ce3428638ad8c45293b7de2346d4ba84c3b22792bec27a10328dee9f0f186c2536d562ec47e9f6aa2103e708788a553f3";
+  sha512.doc = "9c55acca21ba10f051c678f0e59d68f4a1231c744d7b470f7a905c81226a23ae0eee03b02b9466b5fb6c92af1e884a95d1f6644401f83a50441b7c77becf0874";
+  hasRunfiles = true;
+  version = "0.2c";
+};
+"idxlayout" = {
+  stripPrefix = 0;
+  sha512.run = "968d869a0b635b14ce8ce85e710c987ecd8ea2efb97a03314098014366ece450b4566d626031e11b52d7ede53a019665640fc1626dd1e24651275b35a8f2cac6";
+  sha512.doc = "469a20893247406856f15dad6b14050e221299dc2adc40f1547361d74d3f7ce90ba6eabde06402bdbe22c845119df4bbfa8b999931e99c1b944b165f3b245892";
+  sha512.source = "a2fac68e0c6c0f2cc0c9472d9d58882c337f519caa3b2bb088a330bda4f65b43a1acbbdf936e4975f3c628ce1f5a45f58def28cb129a0708a0b4168cbcdcac0a";
+  hasRunfiles = true;
+  version = "0.4d";
+};
+"ieeepes" = {
+  stripPrefix = 0;
+  sha512.run = "60ae4ff80be5c2b02e2ebeea5954ed61b73dbc085a4d282004796d9be6038cc7c8020b7c81226d7dc7b121683e4196e461c7c3d101bb460eb8c39bf2da179bb2";
+  sha512.doc = "ae2413800f1bd4c0467321a7332fac15a8010e31ba7a4effc0fdb44e9e7a0001ba62d6acb44a72eb6f996560ddf96231b7355c4b9ad8b816be102a143b7c8011";
+  hasRunfiles = true;
+  version = "4.0";
+};
+"ietfbibs" = {
+  stripPrefix = 0;
+  sha512.run = "ad8796bf4e492072dcc9335f913ae2b5d81f2152289ca76cfbb61a63577c631bc38f5cad6860aef47b1fb54c02157f509c23c3f903b34b8e7a82b8604eaa449a";
+  sha512.doc = "586dc66004dcf4abed254d223394badd45557d79c7e1b56bd20080f41185ea8dca28b3d501e708cc3ed4088f1368f153ba2d2af313d5d6add2d072b46954952f";
+  version = "1.0.0";
+};
+"ifetex" = {
+  stripPrefix = 0;
+  sha512.run = "0f814eded272bafb38e04d7df845f002382c1f87854f8eb8dbe41e964383d3390f5f44973d0a23461568700b7a3ed0f837afaee360c996fe17fd7b2473256cbf";
+  sha512.doc = "34741cc3514404ed1327c8c621926cdd2c24a5ca655c24b9e6157e0623d61b4e2d9bbb7df3bb396251e564d59eeafc9eeccc5509914eeda931a43b9d8b23df94";
+  sha512.source = "4904d2d78dc8cf67cb3d4b2498b391f290addac86d07fba24a76dc16446ed10b18061dd32e4890fd0344e10bc02302a13cf3a16cedf9033591f35f0bb4ddd00d";
+  hasRunfiles = true;
+  version = "1.2a";
+};
+"iffont" = {
+  stripPrefix = 0;
+  sha512.run = "a2a329da661f003edac0e0bc701958e0744864f8693ffccce7f1ea6867eaabe7d71b38a1dbef8bc27f770e8b4c30a4480ede1dd575d26860095575020db987f6";
+  sha512.doc = "95a8f7357f095dc39ff642edeb6d7df206c37ef01c14a1daa280939d44047c5a935eb18049c280ce00238ad4fdfef6abe7399dd8c6fc815b7c70b22072465453";
+  sha512.source = "2a12158850d95a2008e5a845914293cc9aae54dedd54e4a13a27899b0bb8c272e43bba374447b34913f7b4aae01aff9b9fee981240bed93f8995dfc53eefd2e5";
+  hasRunfiles = true;
+  version = "1.0.0";
+};
+"ifluatex" = {
+  stripPrefix = 0;
+  sha512.run = "b381103b0f9bba985d7d8eab15082207ae5ec5b12c2f656101796a2a6f5ba023ed068ce06bd9e960b23d8182baa3c3d24c63050ac35a924fd94b5b8e38024bcb";
+  sha512.doc = "12fa539de223618275f3484a7c803dfdaa3c7ba7deabed7c591605beea2aedc88d48c2b66606c4d5a208324a4fd385474d911e4f6489d0b68f56c504f0e459ab";
+  sha512.source = "221972938c4b52a57b569b0729f04b517baa703a7e9cef14335512ab3a0a401bf0c7a131b8c7af7c1d6727073d3c2f21c9856608307eb612ad2861d5fa83e40d";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"ifmslide" = {
+  stripPrefix = 0;
+  sha512.run = "c9027b8bb34f15e667e530a8b8d57b793ed16a7ea33feabe58f22cd71230945905054e01853561f4cbaf5fe22f4aa140cbc95072f375d567f57bcce3c4d07d09";
+  sha512.doc = "4e7a64773cc1a14df0d2f58ae0b66d1769b44958bafa8fdd4e51bc294555e7895632b741b47edbc29fc5f5ac0ddd73dddcc16723a7297c12311d3915e88f633d";
+  hasRunfiles = true;
+  version = "0.47";
+};
+"ifmtarg" = {
+  stripPrefix = 0;
+  sha512.run = "b04aebac5acfe90a149f417cdf0d45b3a7cbe53d53d4d9f39d5badddfcb894e07f397933199bca702f3f0e66458133ba17feb5ace2ebda4a25bb24bf1af5d259";
+  sha512.doc = "8f456c15ecd5090d2124a85b02c1ad100dc999064b258678cad3c444acae3e88b95e38f7ad1785bfc91f385d6bc1664c0b58282d5ef36e6cff9857b81176ab7b";
+  sha512.source = "e30806ba6fa85737f67dbfbf7cc1556781bd4cb2179672e5b9980e7f625366d5627c69411dae34a9e1c0fc29c16acaf302c344d9d93b9dd4afdf23bea020cc63";
+  hasRunfiles = true;
+  version = "1.2b";
+};
+"ifnextok" = {
+  stripPrefix = 0;
+  sha512.run = "a56c703e1830fa64432d1b3aa72d3dff52b17c0e5b90b2cb34f7dff974e51331f5d9daa2b5aba578a8bc4a73b693c9a3dd811c6d7e32379165cc7ec1349c541b";
+  sha512.doc = "1eeb8d7627ad8887761e66704a8f3c848b633a4f3a5b094626b3c64888e6db95c25b8dbad4332887a6d9e866e4aada2816b7c7e7fd19c07dba03db38842886fe";
+  sha512.source = "05422af6ee53e12ad124b314388811490304c5f42b81b17aa899e7cea5c548395043abf4abfd0d4819e6338b6d93e99c57929d18312f49500f0368038e440495";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"ifoddpage" = {
+  stripPrefix = 0;
+  sha512.run = "f6ab9abdef81cbcca8728bac7e1f94e2b72e5db6a8e17ab13c8d56477e98fcf7fb20f006012c3a3cf815378d8bc9c5cc4d39e2767b7d634d1ad99bc24dc1d1d3";
+  sha512.doc = "80f1431a4da340b0b2ba6f396c618e2923457e95b5de01018ef7f95937e55814e3c3e96b2f45f18e971fddd29021a16852b57bafd0b1ba50cf2626b4b784541e";
+  sha512.source = "dabf25b7588f3fe4dc92c4a4e20f2293ef62878d60f1ffa01e1e9efe564b930d7cdfeada5f0e6765a88c46d55aacbbd1dc692ca26168c86690db6c229b79836e";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"ifplatform" = {
+  stripPrefix = 0;
+  sha512.run = "952f87877c058c1e8ba3df227ed7332501e7861bdfd2a29878dc4b14e6b95a1b116459bef7f65c5bf277c95d08120c7e9fa9576a7654739e4a26125ca4d5c724";
+  sha512.doc = "520004cfa412c2a24ece0e00b11d457405e71a446e554a1d930e60ea7dbd00f61b2b6a7ecbe89b62610316fd3b6fad685d7013042fa71fd7fb270b40748dee56";
+  sha512.source = "a3c33b16decd5fb443d9b5bb13f3a5e0ed56705d353b0260772d81f963460ff7e914fb1d7f4ee24e249bf15af77368ddc6fea49014202389baaf035f2165e17f";
+  hasRunfiles = true;
+  version = "0.4a";
+};
+"ifptex" = {
+  stripPrefix = 0;
+  sha512.run = "56c72a37f02e87817736a8c172bd031293e63379a15a01c727f5d0208e6bba1900e06383bdb470d96edec80f5151eda05c5ee28bdbe37943e07d6d846f0f2a93";
+  sha512.doc = "47aeb2a9e1f9b1b2ec102fdfbefbc932f0a0b5e7c89819609b5b6456dd8c50effbd05ab7eb24d65d40bd4f9065baa5aa5aa008e613a23a10bcc5bfe44e651377";
+  hasRunfiles = true;
+  version = "1.2c";
+};
+"ifsym" = {
+  stripPrefix = 0;
+  sha512.run = "ef6615a3768f87009d22c3feeaa074a0589b17efc8585a509e21692195a100e5b11e2d0849fa2eaf8f80cbe0d96ea12e773aee0be28e7120ee80a86dcfa6f8e2";
+  sha512.doc = "10dca0c00a52d9d9775bd2ae35b50d7d56294da9b8eb21f2bc35f7863cbf1ab357cf8f3e1d949570ebf4908a60d9ccfe604e69fe779780c8e7527172f3f0e999";
+  hasRunfiles = true;
+};
+"iftex" = {
+  stripPrefix = 0;
+  sha512.run = "29f81db9d89a5802558a0e6abe9718863d1cbfa3f456aea211da5c6c6e134aaa47ddcb3b35cd2c4c77c06c2a962aa0687410dae2963fb02ebb69c68ff25784b3";
+  sha512.doc = "59bd612d82b2f5d8bc3e5d978a61db54f7626f779ad1c183e90fc03e998b73608cb54263ba352748763a9cad657a24fff51ad15e71d5dfc0cb36c7cf65636045";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"ifthenx" = {
+  stripPrefix = 0;
+  sha512.run = "76235d3f8dc4e62604828beaf87327d11d4a9ff69061edf1a3ed4c874983251fba75d80973e54fb3daa2d160b27000089f4cdf1c29748124825fb4075b6f7148";
+  sha512.doc = "efc4fa3b5d6e91d1d5af27846bf2652672a233537810051b2858c1c4ffacafb9771b2c3a222cea4d490e0478eef96b205c4043f4957b876b7f4d57903b26454d";
+  hasRunfiles = true;
+  version = "0.1a";
+};
+"ifxetex" = {
+  stripPrefix = 0;
+  sha512.run = "44642709a4936cdd65d9cc25480a34bba64e3ea38426ac6566608cb40b54fa82fb96067680a70d8234bb448c3a3423a43d565014860194242ad86995dcfd200f";
+  sha512.doc = "231969b2185c83eb9be54abf7bd06797d47bef253198fa8d73df951a4f7fdfc7218d6155c971dad77546767e99e476bef169df1fac13146abee841a10b257fd2";
+  sha512.source = "59e3644df1afddbf83fc0b8db58290b47f0d7065fff81535b3bde024bfb6da80c62751763aca5c2ba494ea7bf2fbac3ebf5f4e95579af4295916ce1a80ee1848";
+  hasRunfiles = true;
+  version = "0.6";
+};
+"ifxptex" = {
+  stripPrefix = 0;
+  sha512.run = "7bc52847fe21879614ffe673ebec74c735c70e07d63649def00f70d22db80faa920f0764f76c5094ef982abbff8202ca55410ee92d033c45ec43fd25adabb23b";
+  sha512.doc = "1bc4feaacbdd33ba6f46c699969638cdc8a4b962287332476d0d163a10141136f9b913027ccc3418033dee0862d5e572957dbe07d47371c1d932103958151e27";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"iitem" = {
+  stripPrefix = 0;
+  sha512.run = "b2b37e68db2b33e414ecbfb9078b60ce5571b7ae931ca828a3c668ea7cccd7b93a2919cadc7723daa3f63a7015939a8046973ade140fba01025dde0d5212edd0";
+  sha512.doc = "f9f001123e1f49bd90cb3b24448e423068565c9256129e23126791e2ea2bc39788ff5769939d90018087beb1b31fbf3568c6d4962f2e92205717c84aeee54a21";
+  sha512.source = "e24eb4a7a6a635b95b6a1b40d27651eccf86a6c5276aad3ca46cfde08185371fdb34ac2732d87750db74605c14e087d2102399e23ad85a236a68dd5987784c0f";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"ijmart" = {
+  stripPrefix = 0;
+  sha512.run = "a1fc1aca9f557ea9c8c70343ad1e5712a846b8a7edddf2077e78fabc3919b928a5d7e8b1fee0f0bc29ebf7887e26dcda5bd95f2ba613051e52f13f1ee24001d3";
+  sha512.doc = "502aebf377c8b13d7699761651cfd67e1e2d10a8e8a022303921aa1e708fe913b217e186b4e2527d8ed81e3db6ff055dba5edbea218d6b9a92f679da66fefe97";
+  sha512.source = "e42bfa6ded16f78b764d1ca55e905ae0b2c0a5611b8ffb2e882f121d04855b5f72bf925002bc322cc1106f68c7c68ebb412acc71789d560fbca12051a75860e0";
+  hasRunfiles = true;
+  version = "1.7";
+};
+"ijqc" = {
+  stripPrefix = 0;
+  sha512.run = "55f7693a820f0cdaafe8697ad352cef2748471711113cfa4738931926cb4d49497f4e825b0a737c233541203cb5c8f23dc4f8326950520e8aa0f4ad27f353347";
+  sha512.doc = "6b94eb95d58a06b54a1fb28b26ddec15528ae99286a37631a64b4ced32343872a04b96cb2de540d54c54f02361981ecc575ef7d014a17e1d0111883e92671fad";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"ijsra" = {
+  stripPrefix = 0;
+  sha512.run = "9d5db4217675af4577fbf9b7e8a5dc4a42f447e7af60a818d740327326d478afa9071be37c80315b0822fec48d1fefe4e3d6a8dfddb6f34fbc11cd81a5d05a12";
+  sha512.doc = "a3424b8ed16d1881c5a2c4d80a42277a1c0e3a62484a0d5ee6a18a9ed9fd39fe0de241fefbc723960bfee331908bb5c95a0b1b95ecf5e06d6425ac8e6c2dc342";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"imac" = {
+  stripPrefix = 0;
+  sha512.run = "5e51d080e18f2a5d9529705d0e8745a8c7b2d0186c929e04434b71ed356df3ee2456c268ce2232da9cdbf6c15182f6580b2b96995a6c48e40fcff1efb001cef9";
+  sha512.doc = "df4232356db6e2001277bdd8de706549d2f91b2d59d4a55f39c4aa9628e1a2b6ce092a7630ed4fc20096d069d19f2ecdf445129a870ca8bfc9d87e522350798c";
+  hasRunfiles = true;
+};
+"image-gallery" = {
+  stripPrefix = 0;
+  sha512.run = "0435d5011bdaac97c6f36202a03cbe52cb45f83d7dcf37111b9c68706e4cc971b5b13ab5fe0b29cb296f7af4b217a64b5507ea00dfe63e8496e10b5adefeed8b";
+  sha512.doc = "ae9c965bcaeaae17b8a815bac824093a5834f2b96c99bf44527d915ae251cf1dc818279f78d3cbe75e51875e658d47baa3b9657e27f5121ed4e259ae5cc052b9";
+  hasRunfiles = true;
+  version = "1.0j";
+};
+"imakeidx" = {
+  stripPrefix = 0;
+  sha512.run = "6ca0680f29daf88dfbd26fa87d47a65c8b2c2d534321b814ff78d77d0b97d7fc5654b4dc0b91d12eb0c9373cfaff5fac59f24def8d0f50d97da34fda6f839d84";
+  sha512.doc = "a07d9461013045274f03145e97d286d930055c4573e917a78e8913841cae30fb61b99e66d098b4ba014cf44e92982301c7d72414e3ce1df176bfd35ecd26ddf0";
+  sha512.source = "f3fd8e1a5057cbbfea56a0d21f16bb310fb815ad7363e284083f2c313ac055b1b335fc1c43bbddd1b1beae64ec42e29bb4a194056be658cfd3ee24e49d5e5804";
+  hasRunfiles = true;
+  version = "1.3e";
+};
+"imfellenglish" = {
+  stripPrefix = 0;
+  sha512.run = "99dcc3e48c55b402adb5e5481615a35f4d6ecc535cf68ac95b223e13bedd8edfad2dcb2d6ce99712646b52d384e02a1500f333823a343d887f87fbed44a06ccc";
+  sha512.doc = "3ae58fa270354ab028a4cfbd6d23ba12a9969073f28db5ce2de4888af2ec70a904767dfe692ff7ef657e5ce13747e7a2602856b0ee4cc92db87ac8e2f4a9e635";
+  hasRunfiles = true;
+};
+"impatient" = {
+  stripPrefix = 0;
+  sha512.run = "d66e22eadafc2de1816356c60151578f7ae7b1b7136ebc9cdb4e1a32e019b4d403af2f19d4bfb15d8fce4a7e48576e396cb63dee1a07da6d013e93fb09421423";
+  sha512.doc = "dc557d4bf80acf430ba867a0767e17ab2ffd57acda5d811f38144b57ec19ee797ca64fa01487704a90c3eb84ebc14610719370af358d60fa392877d4133a49a0";
+};
+"impatient-cn" = {
+  stripPrefix = 0;
+  sha512.run = "216d5bddef463d26c6cec794a38f0b6d325aa1d4cb9792b642715d71d4f30f1d73396036f8eda79b12498c7ff2b3e1e3d2e17d04e3f071f90e8ca35b3acc04c3";
+  sha512.doc = "00140f4b38177ad8c3040cb29a90545da65f2f6100d7058b1974a174e3cb9e4ccf03f0f9ba196953fdf6636bb44d46a1346a3f812aacd177247f40d16f1b78d4";
+};
+"impatient-fr" = {
+  stripPrefix = 0;
+  sha512.run = "41bec2d1167dc2f57a09d0028411147f8bf31d5e020408bebbd1b6c6577d531a38f83ae395146da699a53d9504f7f6ec1ab5edc5d6b559527867b352e4a8a551";
+  sha512.doc = "ca3f388df4f17940ffc3b27ec1bb6d07d3b8728d8de011975b4f2696a96eadb45f208f5455890491af6fb169c30d6cbc6849dd3d25b6aad0284f0a65a81c8e9e";
+};
+"impnattypo" = {
+  stripPrefix = 0;
+  sha512.run = "7afd6cf1fc2738bda4f390fe7f2f9d5e1bdd33c2e6bd32b4dda5b232005589f38436813d9e5effb6feae6371896be453b608ed61c64b9bf38fd25ec400c4b101";
+  sha512.doc = "086b106a965e0f469cbf3560561da7d84e4151d5430d42d87c2c52568243305e20a1bc99ec4b252237f4c61369127683ff7b629013af8c76e9dc8ea6e551e24c";
+  sha512.source = "5bf181ff35a90a1d5c7656f7ae9778305088035370cec3542fa451b055cdad6d3b1ac1cf830fb7ab7ba3d4d89ce7b96a1112575f924fb13f24b1a90fc84e24a9";
+  hasRunfiles = true;
+  version = "1.5";
+};
+"import" = {
+  stripPrefix = 0;
+  sha512.run = "d3b1d7fda67d0f685a7f338dfbe37199c40a4ade516d482b12efe03b5885eecf1258dff861dd17ca98f267cb12bcdee05178949dce192c2e8336d42209029e3c";
+  sha512.doc = "aed56b21c2b10e94f72ac15c7b892a6aa2b0a27f50e502f49366ef73c72f71021a85ce5aa4288f48a09b941c189bc0477d040ae83f9b52a20db2d23160fbaa5e";
+  hasRunfiles = true;
+  version = "5.1";
+};
+"imsproc" = {
+  stripPrefix = 0;
+  sha512.run = "12ce0d8ccdcd54890f846b501cc5cf7af00f7759c916147c676358b689b852a86a1981b76a14e455a4edece20ad1857100123f91469dfb23ba168177e15fcafc";
+  sha512.doc = "a4007fe80cca88525dcade8d8201fb82a2c35cafd7bf92a8ebe6b4668ddce6bd43e958e1223d5c212e91ca692df39aae84c4a25b6862afa3aed2f1f646eabba1";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"imtekda" = {
+  stripPrefix = 0;
+  sha512.run = "ae95a9d52ed07e962a9d98cdcad868a9d2dc6e1eee82c38fceda7f7668934caab5062727e75ee3b1824ec60ad112f15541c9519fd494fa8199caaf0e83906484";
+  sha512.doc = "6f854d85a7649b49b3c88d99f1f011df514b39064e2c340ae1e807de3e730a46a432afe178574105a414bbd46ae0509b9e88d6c0ff825e74dd55772ed189427f";
+  sha512.source = "c4285c9099d8a2582570d0d7df327e6f693825a63c7dbbd6626361d9ceea83a039425b295e17de133fe51e43a23ada74e5fa83d0995fd4a6528eceaad2f59461";
+  hasRunfiles = true;
+  version = "1.7";
+};
+"incgraph" = {
+  stripPrefix = 0;
+  sha512.run = "9a063a51c77ec55136a60a7ffaa259f7c8e2fbc9c71dc2d5240f125be50fc246e2a1d1a6c3379aacc044ad0eb7a754dc27a6445bd12fd63c3d5b2929cdacc133";
+  sha512.doc = "1a1be60ab0ee587095ad6e2c74ce356292ce454f3a40fa96e5fab7d48da52b98cabfe9826235b3afae679baeea1b23e5c4fb4d7a4b00279ce0433568a9cf3108";
+  hasRunfiles = true;
+  version = "1.12";
+};
+"includernw" = {
+  stripPrefix = 0;
+  sha512.run = "a2b43d658ed62ff3a301a1b190cc46f04a4a46f413ed4af3e0f84f1873efc6841cd23fc07d68a90cca50b6ed00ccf654aef9dcb6a8b4863277b06c7e8c666e6b";
+  sha512.doc = "8ebde646868cebadd8d50cfca25cd8d924c0112129ea86b0ca3ae5b9f9f4e4fec3c1e464486ec0f92e5cf7b7fe3df1fceb1a7967bfec755c57645e6909705c0b";
+  hasRunfiles = true;
+  version = "0.1.0";
+};
+"inconsolata" = {
+  stripPrefix = 0;
+  sha512.run = "0356a6022a3370663382f887806a86adc20d9ab7943c5840eb9344a6c64893819d0e3de6b42aec599cf1cfad0cea5724625d96f032f67c45ab282aa386bde484";
+  sha512.doc = "bf80610a2a64c12098ee2c9d6d034791cac79154869562723321c715a008479a267c2f4b8cb490b6d4de041c80bbcd25cdc3faef2b1986f2b53dd463c4b81be4";
+  hasRunfiles = true;
+  version = "1.121";
+};
+"index" = {
+  stripPrefix = 0;
+  sha512.run = "2b9bed00e12b5aa7b1813be766ba7c2e1eb750dc270e9eb585b1cc3d559a3f0c9094919344aaaa51cb6cf7cc132a5f89f8c07c96a12c5b1a5446524d07f4121e";
+  sha512.doc = "0e68aca1c5dda444aa42cb1883821f2003c450291191b2eef16169f3f76e03e5ec9d31577574afd8d3b10237309be303538ccd1d4c8edb9757e7c910da7c5f51";
+  sha512.source = "fc9e646c54415a14e41f1adf9894e723ea8d25e1d151b56fe40e5dd437a4659535b11eccbe9e2b6077d01a7a83b044c2d1d2b9aa1b08243d82b5a37a70641c11";
+  hasRunfiles = true;
+  version = "4.1beta";
+};
+"indextools" = {
+  stripPrefix = 0;
+  sha512.run = "69bb7007041b46a25e9f6bb12d8212a4dd4eaa9dfd00fc033edd94de153e8941cc4de8a06d74516220ade56f2f5800f83a96ea2c02d766939cf70aa3822da63b";
+  sha512.doc = "9290dc53a68dcc191d39bc0d1e760bd4cb8db50d7cf70771e60686ba2b1a7923b408f21e777453a6f2ec9ec372ac30faa3ffa2cc6bf7d2bc82b2526327d732a7";
+  sha512.source = "2d6d1a6009351911a3dfe204ab81ce8b54abfba885525a98557f56ad22ba6a319d35d36ea6f868d3abe9d788628d9f635dec8a657827ae3b772dae972a11c53c";
+  hasRunfiles = true;
+  version = "1.5.1";
+};
+"initials" = {
+  stripPrefix = 0;
+  sha512.run = "65b2ca2049dbeffca1a425530ea36357b0f06ae8cc744f16471a29dc9f1668023a7edb184d23c80dfdf57d74f24c9425b48a90133f9fa6c794ddf495e3d0413b";
+  sha512.doc = "ba6943a564c000f986a4029d31ead6ee4cec028496636090fc56267dd8594bb20be94e4fa4e4a2f39b5b4c7af1b0db3a74111e45a8ad229f6e9fa8862b11c68a";
+  hasRunfiles = true;
+};
+"inkpaper" = {
+  stripPrefix = 0;
+  sha512.run = "a5357a2401cb104c64f64d31e9583b9e427673233a4dc6251ced5f23bda1ad895fe499f806aa7dafa3bfb2cb4f2aa9718868d6d3b0a71f249a545960232a78da";
+  sha512.doc = "ecd15bcb523948b5dbd89ac387fd427a5041b39f6ae1aac26888632096fd1e797beb0cdee926dfad1b3abc5b55c6e1f599a07421e7a52953d0812261df21fc3f";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"inline-images" = {
+  stripPrefix = 0;
+  sha512.run = "60957844daeeb2e4956d83e1d57e9721b2dfaf4ad2fb4358f1d27cbda225ceec7cbc78cdae5144d28a946bb9408fa960748ca3aabac709bbffecbbb64356f8a5";
+  sha512.doc = "5ec326c1323cdce80f5a83052302d2e18de3b0f054ddb7a29da5002605e1020c81fe0219ee68866eb5d8c3b12b4c138ff56f8a630e6f0455b27eb0a0c905d027";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"inlinebib" = {
+  stripPrefix = 0;
+  sha512.run = "42e158a9ff10dc165345bd08b18fc0f90b463482fbb824872289edf93269b36b04faaf35cd12538e83ef1e509b7400ee61e604c5849922106368624c6c20f507";
+  sha512.doc = "2a00d2f51daca68362b5243d8cc485bff6f64fbb9156d1a221d75dc5eec001c3377e6d67afe5d6384ba3f7504eafd65919f5afca8e1170f8b584eb101c947faf";
+  hasRunfiles = true;
+};
+"inlinedef" = {
+  stripPrefix = 0;
+  sha512.run = "b98b83ff26b5ecc9826f111d9faef5aa0f51ebcec7978881da2a61287af7aee022dc1b7812ee457885c7813eee0d2200d250ef45648619f3d105e2df54cd21d0";
+  sha512.doc = "6bf73914a9eff5d774ca7b7e37a859b0e7da3d408bae603b74c9f76e379ff6d3558d7e30ee4a246bf3f7d40f18446fc78299edf4eda0228e2f22e47ad09ea024";
+  sha512.source = "ccac53e2ce8ad0fcfadfedeca45d136ba94bd51d46fb4b860269f2efb7c0996823d32ee1935a0dad79ebe69c9794e2882e6dabca0c5751b3e8b25e5329623953";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"inputtrc" = {
+  stripPrefix = 0;
+  sha512.run = "e6450fbeb0f9033b0bcc586c34f5bb8e9c3a6aae102c15912be315d14fe883b8bea62a59a4a65d0ebbfa9cebcc518b9dedf59297f026423ef14aed2c0a2004ab";
+  sha512.doc = "4fe7894ee87bcb81566d1838f52c02902d8f5668662fdc016005e9a44b31f35eef8831143cdf5321717ee590ed14fc6c35305f584a0b63254549f96149ae2a50";
+  sha512.source = "942d536481750f2272cf8b1420e13703d16231a0998b90c7f3335d4aa6dbd0cf1ff3b6ce072970b182fffdf14614422cc794798632ecc5ff41dfffb18c836398";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"inriafonts" = {
+  stripPrefix = 0;
+  sha512.run = "fb8218a74562131139d0125a40d04363df7f50e43c8207181f3c72210fec7f501497b5256cfa38d663c21b466e6c7fa94ad2fae9612f4f9767b32a7f5784f7b8";
+  sha512.doc = "b55bac3fce4d012be6d8d604faeff7868b62fda93493e49d7a0a0cc7d992c704de5a845ad7ba4cbd97acc787155b33fbd939954001dc6d4a9b29cef21b0004a5";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"insbox" = {
+  stripPrefix = 0;
+  sha512.run = "98398c838689cfe22ba859e2983f374ecf94b21bcf46de362056821af31285754717f7b2169f8bfb6fbbbee849449a1f3caf52d1397a901133d0364b392654ce";
+  sha512.doc = "53baed8af86447a60bb1a97774778256fc4ad1f08f73e2172a68fa091c32e41bf84d10642ebb426be610e34ef5575999d15be7f0c5a966618cea5b3a3832c9a4";
+  hasRunfiles = true;
+  version = "2.2";
+};
+"installfont" = {
+  sha512.run = "cd5133b93c5daabaa0ea13649f3d34c28f9af9f92db54917e64cafca5f5e7fe5169d87e36783036850ccde0002d34860eceaea528ad06e21f08141106e6599ae";
+  sha512.doc = "2b61c4b229e0c4ec89c591075e52bcf8c150f5f9584bff94f81ec1f229940dafef11d6b6f84dd086692cbd99e6616685533d4313ef5bc48c56a7494fef3583b7";
+  hasRunfiles = true;
+  version = "1.7";
+};
+"interactiveworkbook" = {
+  stripPrefix = 0;
+  sha512.run = "2afca3ee8051065d4014cae8ee751f085abe6e62ea0af7d6c036bfd9ae6c3f38a295857d67c7e8f75a049fd618c82ad8b28a66f5c83a387969549cbf20ef159b";
+  sha512.doc = "cdc12a36f547787fd1e6aaa5f9dc38b99092f4fd7e71095c1b5ca25730b4d2a5a5fc1636798978741538624091721c96220d91b8f1cc29d7f4698767ce0269f0";
+  hasRunfiles = true;
+};
+"interchar" = {
+  stripPrefix = 0;
+  sha512.run = "8beb2e016e1a6af0199708355b8f13aa1accc614135cdf1d6dd534eceb6fd5a8d9e611e4d6fe0d72da9effdef446549b01d5ea2aad043f3fe94b81fd3d4aa188";
+  sha512.doc = "c36dfea3f3f62660cae4f4653136269247bd109931b2eb6478eba29af089d42b6ea9f8afaf0c345c9364a68c1645e288d289345e13c8582e1639edaea20a26be";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"interfaces" = {
+  stripPrefix = 0;
+  sha512.run = "3c726602547ae05d0ca055d92b98a3cd5fce9709329fe9e769e5bb02c401a28b9b4cee53e5b1ee21dbb6c1c4223cf7a098aea227d615a45ced885c7c4ccab93e";
+  sha512.doc = "a9b44711b1f38c48886f7b4a49b3a58ec5514995c9bed9a067d41cbf35dcc0093fcade7ef28693970f1f017924dc2f6f79d8c89a1efc847f7a8c264cb8f98ea9";
+  sha512.source = "a93e77e7d12c91515e2d67f926ff6bfb76a278eae5880c60d2575580517d31f82d45656061f2999d5c4e73279a09dc5c5437351f10419b6ea92424d555e7e3a7";
+  hasRunfiles = true;
+  version = "3.1";
+};
+"interpreter" = {
+  stripPrefix = 0;
+  sha512.run = "6dbbf39f9f0f357f45ae275458f03abfee625720b5f2dd3bbb5a78f60f4c0e8972d153c8d1647f147403f7c665e25147fd0c576cccb226a74630348a9f0a7381";
+  sha512.doc = "3408bcb3cd3e6da67294c830870534d3cd620b7abc3ad35d4833e30c831bf93d11dc06d00547888268870c75f6a6e2e861448a0fa197e3e5a3c10aaccc6e4dd8";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"interval" = {
+  stripPrefix = 0;
+  sha512.run = "2a2fe0ebdc4754ca74962270ec48c69e6574c13e446628f34604b13584e7b14ff33add55744f03a1d28443b5ae87ba79926816bf44781951a729913ceeb4d6c9";
+  sha512.doc = "22dcf2288d7f888e76967209ef1fd31bef66dcb9784a45126a945c4a0ea302c67ab4a35bd864355b29679131cf2cf36fc6172017599ccf3025c4ae1537362b9b";
+  hasRunfiles = true;
+  version = "0.4";
+};
+"intopdf" = {
+  stripPrefix = 0;
+  sha512.run = "e1bbdb7fac641a3aa6965cc6dd7fe1c2df56026991277d25814e07f22722ce9bc3851db045611b121b358c46afecc2d8072e36f435cb56f4bfcf45859741d2e6";
+  sha512.doc = "b56f170934bc7d3528604c27d4153800e1069b10ef98f4dcee6276d0c4259327160f8acd381c294490422e34dddd2ebe690d7143aa1493ebe36280323cbdd633";
+  sha512.source = "dc48d013cad264045e8515bd8e87feb09ad0fdec11a811a0933263949fd6f93c1ea0abe5a4d40553e3d37e43aebdb67dabf6715ab40b3abaa2971b2843a07df1";
+  hasRunfiles = true;
+  version = "0.2.1";
+};
+"intro-scientific" = {
+  stripPrefix = 0;
+  sha512.run = "9919021461485fc22ed6ecc0b30d0a23c0a2217c76a07dd8acd87c9091c9d71be0e370ce1373f90e6f5a36a9638ce4312fc674b16ccd0846aab97d1b05674391";
+  sha512.doc = "0daf84bdf7821aeb2f7971ed15de5546a13a444f3dc1b757f31490679350199fc893111109fc564aae2c8786fefc9e198e79e817bb318a1ad62698b6a5c79af5";
+  version = "5th_edition";
+};
+"inversepath" = {
+  stripPrefix = 0;
+  sha512.run = "d0d95399067922172799d17cc9b9b4fa7a79cf2928630c63441114c479bc60e72b3e5133b54f8f7925cbf90f5b419c89e07699ecf8e8269b43f969e584698043";
+  sha512.doc = "a9dba77a8aa851a5e915e368c5090fc83fd894c22efedffce97ee0915b4ec50fa72efc30f377891b5efc0749c12018228ce400cd4024369cfb81ff3fe62567b8";
+  sha512.source = "de5bfe7ac5967f4ab02dd0931c5799c6c68c5c7a57d8b6c40a205e76546d8a23a6ac6be292c6a1cd4c8475bbf0eb229b6d198eabc66a17b2ea4b0ffd0c798323";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"invoice" = {
+  stripPrefix = 0;
+  sha512.run = "7ddb8e05d88321f45cfe8618c740671e17e79ddf53fc2c11a3b9224a27ba1ebc815635484f3dfb4c849d90efb859412028df1e7f91a4e746cf812b19e5d1a269";
+  sha512.doc = "7b827f575eca669f15767be9fd215e827a3e98b03ea3e1f353039f5190fa7d75a5e59dd5d89ada982518101fc5164449843656c60a65679dd82061dbfcb95ea2";
+  hasRunfiles = true;
+};
+"invoice-class" = {
+  stripPrefix = 0;
+  sha512.run = "d31a445c1696741dbbdeb4f035358cdabc9a4ff74855c432dd2b6d66b0d690e65e400207bafdb643a1ae7bee3b3472393043088521a685251acaf9abadb08769";
+  sha512.doc = "a3ab71dd11f6aedcb7ce8a89f8b97f8a18ac4c610e3460fd13c1d31b8db0d347d25ff6520af7bd4d37453759d03db384df9e69b281307a36a1d05b4beed0a60f";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"invoice2" = {
+  stripPrefix = 0;
+  sha512.run = "a790c180fedcf407b999e018cd96b1a0440b07f98c403e9c9e780863f2ecac4f4559ffb88f6a3e4f6080c89745d8a99e5ca6ee98299c7529972edebe68e00eaa";
+  sha512.doc = "fc4baede264c6fd1ec94338829c6973c79c04f21284532194196063b3499becf2bbc2933644ca8b870608e8879315f724b173bbbd26548d24e1649929feed7d3";
+  sha512.source = "cf014bdc2debe9e400d940232eb434b1354ba7f1a093c7389c5b1d332dd2c270e7e3c1f07d65ffe9fd5d2d088e59b3e846e2fc2598eb7297189d6c772b2b16ee";
+  hasRunfiles = true;
+};
+"iodhbwm" = {
+  stripPrefix = 0;
+  sha512.run = "694c87987c02504c3e9d4db2c094582b0ed979d240f569a8d8fde37563885b23fea977c6671cdd7be464d7fe1fe2870dd321afd59ca5a33fcb7f0dbc6d6a485e";
+  sha512.doc = "a94dae7e699365fdedda975b69905861a2187590269ffa65256d97e28c8b7a89facd79edda6b4b177afa18df3b790c6a2e95c82cb59b475a7a2e57c7e26fcf3a";
+  hasRunfiles = true;
+  version = "1.1.1";
+};
+"ionumbers" = {
+  stripPrefix = 0;
+  sha512.run = "f964955ea6470a8906dd7623bd6959aad72ab4da5cbd4c32aa78cb2350cda05a1f577316ef97cdec9658deda027429462b70bcdad18024f255191b2f6cd7f99a";
+  sha512.doc = "5bf57ed5617846d10834f880e4a1c029547f1ac678a52be3e79613803b4e6cd0986887f2a44a0a4bfabaf9134ef39c44e420a12047fee81fd34243ec42c5262e";
+  sha512.source = "f7d0f56de1a00761104fa7e9aa13f1ca4b9ef97051ef2dd6d28dba3066998d53aeae015d956dec0d3c771d85f6553c5835e4a9bd9d83dd4feb65591d6c613fb4";
+  hasRunfiles = true;
+  version = "0.3.3";
+};
+"iopart-num" = {
+  stripPrefix = 0;
+  sha512.run = "49fadfe2a8a1796131be814b170e270e7d39c035419d7e546e57d2ef1fea13d48b2b022eda463829e1bdbe60233d361773321d86070420ad2b63b48154adf18d";
+  sha512.doc = "167b0612883558f74d7696a6c9481fbb75e9ef6e7760edc4f79d81b3e1d7a344dc1efbf638eb4f5ba69be7002391211024f7aafed2e08e19fe559b58b0f7b1b0";
+  hasRunfiles = true;
+  version = "2.1";
+};
+"ipaex" = {
+  stripPrefix = 0;
+  sha512.run = "c15157c117594f670a5779bc33e1cac043fda730e2b7a95d781470da2f42075e387d2a939976d469f1b0d05804b2907a7daf7ddb7d9f45074239c6893d89c21f";
+  sha512.doc = "04fca8414689b3b828937ba46767415b3b2de1a4cbc87ae95f790aee4bc82b658c1ff0ff705bea0c45952589693cb357cdf00c1721722d7c340a32f502d3b961";
+  hasRunfiles = true;
+};
+"ipaex-type1" = {
+  stripPrefix = 0;
+  sha512.run = "0dd513aa3cbb9dba7e1099f7f08d839e80002fc5f5bcfc2a2a013dc799a0a6389f128fe72ebc32b673afd66f3ebbc7fab9b97c31763f94b7ad64eebc83b2f569";
+  sha512.doc = "1c2974ec35c0291207ddf560b6cef4cb5b161fb59e80a6508b4f88aab5ecf93c6a3dda2a3107a40e838235f5af22ce23704bf4f13fc4a0b344f0805c29655605";
+  hasRunfiles = true;
+  version = "0.5";
+};
+"iscram" = {
+  stripPrefix = 0;
+  sha512.run = "6111c93a14c28572c17a1336fdf00ddd16b6c04b34b4a10a1b4a5e46742852b949cc99438397895de36632c9f2fd57c4940a0ffa458ac148b4a5e49707e5ca79";
+  sha512.doc = "24f5ebac7b8bfa826cb9ebaaeac0ec82db18807c5c3417dac53c6b636f6cb32b60901ef51f0d545cbe185ef0eef034404d3120c1211bf65c4ed4d155c67e19d2";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"iso" = {
+  stripPrefix = 0;
+  sha512.run = "1ee4026383b28594c02ee7a3fde24228ac777814456fd8580954b1708ba3f735b563beaa291cea859c6492f8b9cc488635b67e373fc3afbd8f884a3b6d30a392";
+  sha512.doc = "f5c874d3e00fb451f81a52f5711ac0b1c39ce48eca50a6edc0b1049bf4aeec43830fb534e207d852bb440c96bcb86d960d5e2e0670610d7cb9eabad2ff1451a3";
+  sha512.source = "c40bd267337a62dc7dbf437087e36e569b83da7806f801017ad3aa8b3059409cfc51c32d83e9991b7fa0c9b2e7eb5aed22f841670196fa9f7080e5398a098d74";
+  hasRunfiles = true;
+  version = "2.4";
+};
+"iso10303" = {
+  stripPrefix = 0;
+  sha512.run = "40a36335c15b453d2e5b5abc29b2ec1891c6f1502ee2f8ffdebd2f9a159cea3aa28eba7c661c12a0445a4f713b77079d8b965ac955123fc81225cfd4491e5317";
+  sha512.doc = "24c2a83508282a348d6748bbf722962f3ffcd193cd1cfafc4ca1e87c60622e463e5fd382ff65235590f2a9d629e8f40588630810036d2195172f61d1448e3dfa";
+  sha512.source = "27cb8dd236ad5f249595d963282054eb40de35d135cbd6ad6a106941955e0abf8777602fc341233d22feb1073980341d31b6e939a69097d3776d7e20096fdc18";
+  hasRunfiles = true;
+  version = "1.5";
+};
+"isodate" = {
+  stripPrefix = 0;
+  sha512.run = "5fa145cde64155e9a4ca7236cf41449169ce0d1aa88381b46935641ed94d166429c1b139c852f96526dda270fb85736ca54e8864c32452996109b0061003639d";
+  sha512.doc = "75118f62de8568c9826dcc11b753511f57b7fd237cac6aab1c75377121fad2179c81ae5ec5f64ec127a299beb88abc209727d17b1ded623718c7594bb7ca5da0";
+  sha512.source = "43bfcc11aefd2c68ec96cf05f7609cab4009f960b5220bc15d982ad384e062bc42a791f269d5480bb1582ceda68f8c7d36e1308129aaa3df41d25d35cbbb96d2";
+  hasRunfiles = true;
+  version = "2.28";
+};
+"isodoc" = {
+  stripPrefix = 0;
+  sha512.run = "09256daeeb683ad518302f29d5385b4a084dce7fb6add48249fee7ed9920c1585f6c7033b19f466d9bec3c396c1b7950c65cc736be650836e09d3304c14312cb";
+  sha512.doc = "0e215043768c2b55d20aef9ada76bf0820e9207ecd3674e4769944885477db9392aa978a90f221da17d75a010844e87988a3f449a29cfccef2c9560d5a98c903";
+  sha512.source = "ae4f54b4c8f8b2d1d9caedd6a89e45e66eefa47a155808b8c9f842b3976fac25769dd349cb5d2bea006dea042a275d5c1396b8a98e4c65a4bb29f632225ca49f";
+  hasRunfiles = true;
+  version = "1.10";
+};
+"isomath" = {
+  stripPrefix = 0;
+  sha512.run = "c9ed49ca5df0932ab59de0988de688fa119682810c3163ec530a8cd80f439eab858bca4dfad85567dbc2de08d226117b4df5249ff29f247c208ae2b1739165f2";
+  sha512.doc = "55d94c6b4cf4c2ebc0eae4998f8ed6a1f450efa70e1644549e169cabcc782f1acb879c99bec5237e3147886c696c36f675e9f3c452da9f9880570dabf7adc5ad";
+  hasRunfiles = true;
+  version = "0.6.1";
+};
+"isonums" = {
+  stripPrefix = 0;
+  sha512.run = "d82a96c2208dfd59f091b8316d8b496115ee56d51e5418344f128418c3b202f0ee20bea505c05f5e81f76006e2efcef48b2d3592bb5c550e219b5c8e4a6e5f4e";
+  sha512.doc = "5ecd4587ad6d782182986592bb7f76fd62ccd2e9245921b48ae28e9e381f4084e0d5930b32815ebd074be4190fcfd6beec8be890014edd76e9a5b4958f71d6f7";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"isopt" = {
+  stripPrefix = 0;
+  sha512.run = "2e313aa3afe2e1457a794834c1c5eddec66ac2d17fb614e15e6781a23ca0834a3fc2d68632b07e55618c6d8dc28de5bb8bf435e34f61a419cb27fa53042d4a7c";
+  sha512.doc = "94498c64a4acbb2b41a7e4869b628c683a975f1ba28a8b721b9c44843574610a47a39883f5333b405bb8c02d49f50c3d9ee4f344c27b5e5c0d22c181db46bac7";
+  hasRunfiles = true;
+  version = "0.01";
+};
+"isorot" = {
+  stripPrefix = 0;
+  sha512.run = "788b712fc11f3e4dccd58a75a950752d0492dbc30f0475dedeb26b86e500d0d23c4babf0dfc2361fe16e74d7b37d8f5605b4d4faf1e7018642a5e9dd1be73be3";
+  sha512.doc = "4aed42e6fe61aecba99783a1173d903daec621e7d5e0867f6f73319804bfa7727a2a2dac204d792b76a98f8e291bc563bff364360b19ccede2b79600a59260d0";
+  sha512.source = "99767e98f2eca92d4f0d8e32024805bea9646f10eda7cdc7fa5b325de04d6e70648c1e1421172e2358d7a6ef7eeca718db3e31e7f272160ddba2f24e4c516888";
+  hasRunfiles = true;
+};
+"isotope" = {
+  stripPrefix = 0;
+  sha512.run = "27c03c4c6519c038185ee485e94ac51d90c21fd095e4a4cb6d91b06f98e7adb7a423a53b1df035514f58cd0556ab0ecb1afd55c05008e558812d95de2159c8ba";
+  sha512.doc = "e1a6e798f894f9455e5d2144a935ee2960199e65db0499c4a900f888065eacfce72269f6808e01e98be3ea3440144eb4004c53af26d80d6ddda1be5df5492b1f";
+  sha512.source = "555ad9d5db22d4efe1373bf971f441391371c91538b73f3140996d3a2dda85fc3003f6d685c3e54c06be216e5b54493d07f165c0a7adeb00845e79bbd9958c5d";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"issuulinks" = {
+  stripPrefix = 0;
+  sha512.run = "2ac24eb0e19b92e29fa898fcb8cca7e2f64cf87fac408aa0c834f6afc0ef262560a512637b30dcbee2ec06e9f0fc32f344258bab983b1b1d6fd4da85c821c056";
+  sha512.doc = "2605ffe2f42560b04fe781efe3c1972ad76f6cbddc7ef68bdb0ece9b0573b8cec785c2bf4befdf339935730a728bf19b83f3597119d3f9705f571350e963801d";
+  sha512.source = "c66f332f9dea7a03a0ecc7844d99375fbb91ca262aa50faac13b9b396db0991411b33616aec6c1af22e915e3643e7340e0083635fb40b6e693a4e487e1e45fed";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"istgame" = {
+  stripPrefix = 0;
+  sha512.run = "3380e604bb3153d94ed21ca3c5fa16bcf0d81ff3ff878a3f19ee3f1beea0ab32185ea9d8b0118eaddfb15e483d040bbc5f915ab7bd3033978518fd30aeb5f609";
+  sha512.doc = "9838728c32479b6a1229d2f9e9755209c07520bd691452bfba81a62f21ba929237bc916c5f49523610516aec6c054d080086c82be277eedd5fe4b0006b4be8e5";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"itnumpar" = {
+  stripPrefix = 0;
+  sha512.run = "73770854d45bf404e874aeda0d0bc95dac7ba266cb012fe4af7c4e7686c078b1314500ddaa767b1652e9b05b02691c93cd24b34d6b145fc30c0a3f56693f6a17";
+  sha512.doc = "b7c81a74d816508121f0449580e4599092bcf3d176cbf9f754fe9e662d83a5c8b66e52e43b2621338a13b09c44babac6a575f1e8894863402c028dc3ed792486";
+  sha512.source = "72ad2e68d946f5a862e97c3cd3f20f94c23a2a85fa5183a6da9b1f03be60067a482b2f22e7560c5c731df18f910f643f0c991a2b0c09925cc270287290654c86";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"iwhdp" = {
+  stripPrefix = 0;
+  sha512.run = "7153fd75ec63a6abbb4d2bbda8a5eb150f4b202b72baec8361a810d28aac5690f76e4099ff3a616a44077337ace469d6a111d4e42ad8d68428144b7fdee58575";
+  sha512.doc = "f75a9d0ea4b69de5a82659e18a0ea04544c93b056c52efac534e16490a5ac78b329d700f2ed7b3e8564a72331489106bb7e735c44b3e24ff943c6ec0b89eaef2";
+  hasRunfiles = true;
+  version = "0.50";
+};
+"iwona" = {
+  stripPrefix = 0;
+  sha512.run = "2a125919a015c82e00bff575407f02a6c9a176f83a6017df682b98af55473e7e36ca0a94ff27091a3a4279d42fea9c49f0d8ae6da7e852ae9c44389dd5d8f7fe";
+  sha512.doc = "87128ca46f7f2f13f8f886fc1c3da11f17636637632c0d39ebae07dfe70ec92024e1136da7a736a3fc8d494e856b86407ef9c01cd54a56fc2e41372bc0f1c4fe";
+  hasRunfiles = true;
+  version = "0.995b";
+};
+"jablantile" = {
+  stripPrefix = 0;
+  sha512.run = "40fb96443b2194adf8477a68d9d435101dfa42471d02ec48a37968d21e12802ff1feffa830484642b457562392b6ea147d394734acdffd735a8a5db421d0eefd";
+  sha512.doc = "00e753a85f3521ac0c6f336e0e563bd0a68a5e2ae756dfce72d3cf59a01eb9654b6f5c9ad9b83047d3d4f7743b7cce6f2d0d734510532db13942ef6619ae813f";
+  hasRunfiles = true;
+};
+"jacow" = {
+  stripPrefix = 0;
+  sha512.run = "11cdae5bd4387f11e30200f72ebca29a0c19c61a44570fd02de40dfffe1b7578defadb15eef1b7e9d06d5f394f816ab8a5f46994b3a225be446c693dd23796d1";
+  sha512.doc = "6872a79aacf4a59ab408fac511604a596c40ad8dc991d0519afd75590a1e3b06ab24c3b7ad33eb4a8447e14094fb34e64d52cea75fd4d41b2ef1e600b4d12d6b";
+  hasRunfiles = true;
+  version = "2.4";
+};
+"jadetex" = {
+  deps."latex" = tl."latex";
+  deps."passivetex" = tl."passivetex";
+  deps."pdftex" = tl."pdftex";
+  deps."tex" = tl."tex";
+  deps."amsfonts" = tl."amsfonts";
+  deps."babel" = tl."babel";
+  deps."cm" = tl."cm";
+  deps."colortbl" = tl."colortbl";
+  deps."cyrillic" = tl."cyrillic";
+  deps."dehyph" = tl."dehyph";
+  deps."ec" = tl."ec";
+  deps."fancyhdr" = tl."fancyhdr";
+  deps."graphics" = tl."graphics";
+  deps."graphics-cfg" = tl."graphics-cfg";
+  deps."graphics-def" = tl."graphics-def";
+  deps."hyperref" = tl."hyperref";
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."ifxetex" = tl."ifxetex";
+  deps."latex-fonts" = tl."latex-fonts";
+  deps."latexconfig" = tl."latexconfig";
+  deps."marvosym" = tl."marvosym";
+  deps."oberdiek" = tl."oberdiek";
+  deps."psnfss" = tl."psnfss";
+  deps."stmaryrd" = tl."stmaryrd";
+  deps."symbol" = tl."symbol";
+  deps."tex-ini-files" = tl."tex-ini-files";
+  deps."tipa" = tl."tipa";
+  deps."tools" = tl."tools";
+  deps."ulem" = tl."ulem";
+  deps."url" = tl."url";
+  deps."wasysym" = tl."wasysym";
+  deps."zapfding" = tl."zapfding";
+  sha512.run = "7a284d9eb0639b64299b59a3b29cf939786590ee7eb289a7f67793ac10b8945272116015d7ac8732870eca5a2751e17e9d69946664620cd8617d056f505ab85a";
+  sha512.doc = "00014ee9e648cd179c8435c1eb90c804f8904ed890ab1c3f93ce8a8e04785a493682b4191c1790a1c0945761fa193b6c6f759e852e43445e896b0c97870247d4";
+  sha512.source = "a9e70b48db9ee9fe389889acf512bb9db9010fa61e19aea210129098781d8f6f211548b1392ed2299945d7bf24cc213d43fab2fc7f792ccdeb8dce6ec1dab09f";
+  hasRunfiles = true;
+  version = "3.13";
+};
+"jamtimes" = {
+  stripPrefix = 0;
+  sha512.run = "72e2dc3995f173f75aa4714c397bb036c140bace3b17ddbf321afad677ad397c2be804c890df472f89e15300d4645d02d8ce3746c33fa37be85a9d9312ece3a7";
+  sha512.doc = "bc14db250b9d34e700c0fed6390948b39022f7ba39cc0e083c6a1355517fd10aaf7065f6ca90f40a50aa0cd6557a35cdfb1534aabff12ec6c462a2fc87ec699a";
+  hasRunfiles = true;
+  version = "1.12";
+};
+"japanese-otf" = {
+  stripPrefix = 0;
+  sha512.run = "e62e32e37fd460dd16a5bf62423564a83c6fc16a9b485dafee5f00fd4c3342e3b94c78731e25a9fca3aebf9cdf91a4bd1ae6edb8213699adc4c8e7d139e14ecf";
+  sha512.doc = "90d9247aecc96871f1def7db153266d9c42292c5f0fdd7b835392cdf61d2b15c908e2895868121dcc5dfd508c75c1b7424104412a2b75e430a8fd2f0107cb085";
+  sha512.source = "e3cbd6b664fdaf62ef764bf10c3f42086d541805d8ddcae3557f19bb607678fadbfa2e6d7dd97e9fa914a7153765c63eb0da6e8a89506a8e3b453923e785e869";
+  hasRunfiles = true;
+  version = "1.7b8";
+};
+"japanese-otf-uptex" = {
+  stripPrefix = 0;
+  deps."japanese-otf" = tl."japanese-otf";
+  sha512.run = "130d2667c3829311153121415d27d880e475e121a16a8f739b018894b93d2f45200e50c53ead912419900100d596ce2cf6c047a201423690ea52ae415d82982c";
+  sha512.doc = "fc672ee767090c52c2eaffc6cd42e74763f879e66f45942d30515a498eb83b14786e52afc98ea4a47b349687dcaa7e782fbba4534a7adaf56cc46796f79a6481";
+  sha512.source = "0ca42ba766cca6d917cb5fd435720bdf6ebffc0aeb5817e725977da51177178b14c15a8f5dc1d66a463934690abe338b669aa968927919882359f39ae01bbed7";
+  hasRunfiles = true;
+  version = "0.24";
+};
+"jfmutil" = {
+  sha512.run = "8aa9ff7477739e75824f7c7242a02cf6186fa1a7a37ae145f7fbe989d6a7fd774c0428c60575609b235cc8d1d4f0f108cf6bdd7cb1003a0b12b6b6700e9414ee";
+  sha512.doc = "b607607ac051370a5374d57f2aebe33a2763029bee0e7cd8816a614e3a49728d4ef4777ed5c8de4d9f09edfbf3524959c3f8e644d811105e5c69d93496ea3dca";
+  hasRunfiles = true;
+  version = "1.2.3";
+};
+"jigsaw" = {
+  stripPrefix = 0;
+  sha512.run = "3bff01425c502c98894fc517be9b4af8ed48bd5a059835fb850ad1c58a2618998967780a65a5bb43946acecaa397ea51fcdd051dc2b8c863e27b55fd3beb5230";
+  sha512.doc = "17c263228124da3f17ca338738add762992e2674b0e0fb80e250c8302cc59d11bd1017a1d4e005a7c9c9d66444a91851cfd6e505a5e1f6fb73aef7d5ee703d31";
+  hasRunfiles = true;
+  version = "0.1a";
+};
+"jkmath" = {
+  stripPrefix = 0;
+  sha512.run = "8e549db42b25c2edac71013afba0ebe3e09859ce4ef104da2b969663014cb88c10bf1c8899ee181070e6cec1b28d0ec9e5966d27f2176e2032d6855ded8ea941";
+  sha512.doc = "99a954f6eb917333a8e6c4e3437fcd16f6950e0473fc1a48c99d748246c97d5a3df5b96e0314a9ec5e7c6bb0b318b934c40070ec94df00546e49cf140aef23c2";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"jknapltx" = {
+  stripPrefix = 0;
+  sha512.run = "0369405034393ea8de2cd94497a97ba6c40264ec9142eefee09647fd4e51f83e169a99757a4b92c1c9d911637f137404fa54231de452bcd208ba3f9982984153";
+  sha512.doc = "cadb522c007963278990e75a011e22d2c6bd8429e55fe5ecba3c2f20b9ae13fda4eac304bc405440c1c1566b1458e0f3e77a6d4adc77117b20673204bf502131";
+  hasRunfiles = true;
+};
+"jlabels" = {
+  stripPrefix = 0;
+  sha512.run = "5077471a09df4090e087a465e9d1823668ab80f088a7d5fea7d14559e9ea8906dae029a2093038ce5e9f013bbe3a9bcd74d8626e6ccbcaf7ebedd5c2f1e3521e";
+  sha512.doc = "7736480f6736d8b623fac61683321eb7444ca8672eadf0da200eeca928de9dc031152e4599783d602e9c11b58463b03fc1162756edbaa5bd3dc1f6c5b64e08a6";
+  hasRunfiles = true;
+};
+"jlreq" = {
+  stripPrefix = 0;
+  sha512.run = "adaa5b508bb35b7fa362f9a8b533f147214eae0b779169d2e35689050548c6245f29c10527dbe437ace467f176deb7f5d8a2f19ebddd667b29dc9edeafb627b1";
+  sha512.doc = "466f1083d06639d983b1e2d6b4ea502bf7e4c70e32de27f58c2054cfb4197258537dc531d3ed7b1a5d1d2cbd3753eb5fb67da73aaddfc757429622c2effd33c8";
+  hasRunfiles = true;
+};
+"jmlr" = {
+  stripPrefix = 0;
+  sha512.run = "68e236de2bbf2e1658b2319f5c6ce8cde914c8be03090c0ce2893e8843e5410c477a9bed4cd5e5912c69fa4a268ec1ba5ed13d04f2f49395d60f0c72a41ca44c";
+  sha512.doc = "3b42e6e17818bbd8280e6501561ea746f754ba9b9a4d7483e7b74b40cabbf1bb634dcc4e27677c1f8bc68f932fa03a739cfe5b928ffc8d4ecc0872f263f352f5";
+  sha512.source = "706a99ddc53804b5d61a7ca8f65fe6acb7632dbaa8d3f7a4e9b11270ca5da1d38d811c2fd9ebd9bc5d4aefeec406f36cfbaaad0644051e59593c297a35abaa42";
+  hasRunfiles = true;
+  version = "1.24";
+};
+"jmn" = {
+  stripPrefix = 0;
+  sha512.run = "2e250c3f115911c56f9b8d46d358fdef289c624a5b24c9b4213bbf7818bf42c7b778df55d4bf181bce115b388915cedc90ef7cfa99ee6ad8dd621e7853fc7c29";
+  hasRunfiles = true;
+};
+"jneurosci" = {
+  stripPrefix = 0;
+  sha512.run = "1ea3d11a66045784c2d1abe0290d95482c5a2a65a21963a58d9626872b25bb0d20f8d1c3c3b8173bf7f63ed71f7c33e13c8f6dab0918585b36d72fa37dc35714";
+  sha512.doc = "2ed6a342b376ced405a75da39fff51d03e9fffa89341522555d2edf8d8eca701013a95f09f01cbf642d3ed1ba93a1aecc89682986ae5c94d784f3c857eaaadb1";
+  hasRunfiles = true;
+  version = "1.00";
+};
+"jnuexam" = {
+  stripPrefix = 0;
+  sha512.run = "2dc1aca90383740ae471a096c82e99b613841305f55d960b861cb3c3c1ae920caf8386adc56f6f0f5908b412c399a12fe69648820525ee0ec5edaf6cb7e46c48";
+  sha512.doc = "0a87e1920d853a08516ec039f4f87f7c2d9bcf28a0e8e1153c6748f9fc067a9fbf1d168e7f96d4dab59961d288d514790d79e31da7a117378055252f8cf9531f";
+  hasRunfiles = true;
+  version = "0.5";
+};
+"jpsj" = {
+  stripPrefix = 0;
+  sha512.run = "70b0e83af5b828e6a783d888adcacc504342e2cbe255d88aaa2fc3cdda629fca8e2fec9c98c73c0673d98d396727025b0a622905c3403c2b568d67597218398e";
+  sha512.doc = "220c28ed6312c046dcb2973e2e22fd47c683460578dbf952d12d52da0aa4c21a5dc5e8195b78d743c093e05772ae1e00a45d3c221e805a452420c435f23b6a38";
+  hasRunfiles = true;
+  version = "1.2.2";
+};
+"js-misc" = {
+  stripPrefix = 0;
+  sha512.run = "6dd7920204cc66ff28c78f54bd6432a71d77ae2f4463bd997d2a4170465053eb86d61bc35d8da66377b47cb1eba88c6ed0918142910a5bdd4e44aec41d3ec4d0";
+  sha512.doc = "507cc8c04589dfa7b4d36bf32e4c1d18af42b90df58fee128c0ad37284a87aa1adad32623591d0e8ca880c53a1f583b0bd8054487e231bb2a58ed06d1bf6c6e3";
+  hasRunfiles = true;
+};
+"jsclasses" = {
+  stripPrefix = 0;
+  sha512.run = "3ce4b069c3446c5a7973bf9e26b3effe276a827aaf8658068193710c480f1f32bc1299ff008f760df7945ead776da164130eb7d7d63e09dac2aa6ccd0d19222c";
+  sha512.doc = "ce4144322f2a1b3cfb4a3197ca079c59fd775f2ee0443bdec29f713bc98691245c1ab95e0ac6d685df48db13abe9813bb42344c3a3e7924e221d6f1c4b2e84b4";
+  sha512.source = "050f9eb1c70a37d3ab789e0ed5bf168cf91f515cc647943842503606c22eca20a0c701f2b80d63ad4d3d662d3d78fd5a2896c95577f60eb89ff4096df776f177";
+  hasRunfiles = true;
+};
+"jslectureplanner" = {
+  stripPrefix = 0;
+  sha512.run = "a60f38383f72ab069fbed0de38fd139bfe2c446c0dbf566e3e78c842bacc27b0a49e0595e4764645018a73f57dde31c4f945e2ae77978827e35014a1d69aad57";
+  sha512.doc = "f52f3c0212cdffbab4ebb12ac99a07e3f496774d89039fadcacd2d96d9f15fd508c7d7a759e440fc69a4b17aeb7b38781fe6a2566217bfbac6b59782e1e4ed0f";
+  hasRunfiles = true;
+  version = "1.8";
+};
+"jumplines" = {
+  stripPrefix = 0;
+  sha512.run = "e09ee044fe7d5692fe4f1098406e33481ebdf81698168223235e735637499053c66f278a1f7e27585aaa1a586ccf85b4f5afdccfa3ac35950475f56e46324103";
+  sha512.doc = "c7f56f012d6eca83e54610aabf1530889c01c1b28e9b790b220726bff860504a3e46ad4fd8d88ef50d3fff17507710bc168fd2d5861e9f2cdae69cff6f95ae71";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"junicode" = {
+  stripPrefix = 0;
+  sha512.run = "e35652c1bf36d48b5e98264604d62cfd25a0a69891b1577d701d75944e859435bf156ad70f808ccf2dd74f8fed963eb3efe5383fa5fd18b341932b7ceb2fe9b0";
+  sha512.doc = "f2e31f4459adc639f6dd36654c82871e1e79ec24c5a2a864b16ff3d4fc230619264d958e7915da9444bde9c6cf828f9c919880fa48a4339ce7d867adbba2e950";
+  hasRunfiles = true;
+  version = "0.7.7";
+};
+"jura" = {
+  stripPrefix = 0;
+  sha512.run = "08426bab6c0627e945d620a338c6081a8a21d80567d4a4b686617d0d57c99b1e148f5e5c3406a0337ee4ad61bd795dca353c28b0f33d397c5b47515969fa5951";
+  sha512.doc = "4d19c663f73791712d9c24361d8e2a0c2faf25bdac15dcce48825f02468f6a798eff7e147f531368bcc8d7e2a1938202b5614e2434cd46866f359f8349564adc";
+  sha512.source = "7c83d639330c1bd405b2439b5e85dd723f476f8ed5096c8085180f03d63ffdeb834639fc8a49a454d50df9f882f27dd42782741fed89f8bafe45b6222bd43239";
+  hasRunfiles = true;
+  version = "4.3";
+};
+"juraabbrev" = {
+  stripPrefix = 0;
+  sha512.run = "4d6fd00247c6c915956679674dd029048cb96ac3bc97606c0a299bbaff24a4cbb9440d557eb2945151720265ecb27bf15c638c003e1039dafee56471dfa03945";
+  sha512.doc = "ede48ff67dacf107baf50be345b042a7b64c815442875281241b7de4c3be56ec40c969e40ec69669f31058bbbe9b27c51cae25938d93bec99a8c57dfb8e9cb75";
+  sha512.source = "3a92a5231317d6f7d7b1afdf5df14997e17217e10b694ad97a9a2f3984b0afdfe5a3edeb4368108e4fb389a98a7f5414409e5fc7d319f4c78802cdc1a350d6a2";
+  hasRunfiles = true;
+};
+"jurabib" = {
+  stripPrefix = 0;
+  sha512.run = "12a1d9402ca15ff23cbb9818f07290f0b295c9844bc4cf02e1332eb27a26a3a8d0ed3199df1c4f4f85c9ff5308e7426d0c7adad8dc587fe905c5a15314863b3b";
+  sha512.doc = "3f804537752bfd7b6780d082b37834c805e521491f39bd76b52541707e69f8b775b9e18bfcba0b0827133be8cf82bab86651f2a7ec351f9cc140427056ca0dc0";
+  sha512.source = "349a2f55265584d73d0a1b0cdd00f0fdb384c87f8b1399acf62f14229ec4cb03919bb1c37d3c8ed992f72f3cd846c93bb13f25bed052edd80810bb6a92665e75";
+  hasRunfiles = true;
+  version = "0.6";
+};
+"juramisc" = {
+  stripPrefix = 0;
+  sha512.run = "cbf6ebe12bf72dfb823578ed49066f34059e5ab1beefe0eeee84c7df55135644eabdea7582dc848b52cd575579d8807a2a2723bdb697e851eb8aef88f8a5e533";
+  sha512.doc = "3925418b9e4d05def76b9e0ebcf882c4b7061ff7ae446aa63d412c093caa04536ad45c757e04e088c3b4099c569885c6e6708ad31b866ebe89ecabb8395964b2";
+  hasRunfiles = true;
+  version = "0.91";
+};
+"jurarsp" = {
+  stripPrefix = 0;
+  sha512.run = "511130814ed94c7f0829802a0c3e8e613b0c4aae50854f6e06779448f430e78c8712142fe04d3662b799a488d90944072847dd223b01b642de78c1f98649e79a";
+  sha512.doc = "1c439e351102ae3f768ae38404cc5d98403028fb6fa6088cd53eea40593ee03c10d20955f3fadef41f41af6d23f139ba356a9b06ed735644b67d3f42a076e0af";
+  sha512.source = "8853060222f8f45e69fd7d3539534ed6a0762cb7f97d4c140dcb4ac59fcf1fe339d7f6cdca6e035d4e9bbcd730746e1311885d837fbedf65e208be2100ec2a90";
+  hasRunfiles = true;
+  version = "0.52";
+};
+"jvlisting" = {
+  stripPrefix = 0;
+  sha512.run = "70626cd23359751909ce385a7ed4415c5641e9c303d0dafeb99e36d0151f382c02c2f6818a135bc92fb156d4fa25d1976b2c906074fcc112e56a1a7a458801c2";
+  sha512.doc = "de6a694c26332d9c97bf4202bec0989370226b7381d080c4d6f5a106cd8f2bf352d756cbe7cede2a4ba3e17f85ad553e5c24e874a00cc1dd307325125e6d0bcb";
+  sha512.source = "776fe9200a5447c151f11ee09b0f3d95aa5f07ccd427607b12ad7069aa70084d99c7d620261797e6c147ab134bf3a151bb739eadc8e3898dc8b16f284c66a965";
+  hasRunfiles = true;
+  version = "0.7";
+};
+"kalendarium" = {
+  stripPrefix = 0;
+  sha512.run = "fea39ce08f6028f078e2d87ec73aeeb56d72006d24d316f8e257b3c71604efe2b4ea2fa698f79798ec5c9b3d271d758d4c0699ffce1bf380a74d21158224eabb";
+  sha512.doc = "60a1dcbaa92fcb4438f4a2416dc4784fc30af34c6e1511533b8827a266b61a62a6c0e66f51b27ce81dd879d774e9fee6b155a048ddb9f68e1f991294791739e1";
+  sha512.source = "a1668bd43e489002ff365f5f90c6f9f8d6acb752256159f223a444b41ac1398e8d0bde50a63deac11f8d3a22f792278891cb05109b5af4c2efc1e8c278f01a76";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"kanaparser" = {
+  stripPrefix = 0;
+  sha512.run = "a9db1fc66330bafc5fc26ed600f1779dce328d6234ebe930aaff65a02a0d740188e73c5f73a9c75d69926323a610dca4b37044e7357a141eae9bb3231fd3e272";
+  sha512.doc = "9eb00a9652f22411f9ae0123bd2bda62af617f39ed3eb8266c4ca38ff0783722a3d1eb05a0fe1ef6a238a3132ade65c5ebd882309f154ca416e2191b9db44c4c";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"kantlipsum" = {
+  stripPrefix = 0;
+  sha512.run = "7aac4684e6d08b46319b711a824dbe33446674f63fe301e366543553e6fc4c41aa1eb9aabfc9d11710014c9347ac559dfa1882478f6ec5d9edb39c5dc42cda8d";
+  sha512.doc = "bb96e91c7562c34c56c7170e246eb71c353d67d649cbbaee5904f6bd82b905b93e79baeee536a3d8eb8b9f08296591a8d0fe621883914f4af676f78c6f244523";
+  sha512.source = "aeebdbaa22e0e2b369a18bf7243d714b872115ac9f0154438d37aa0719e3623ce27d31068d90bb60b301322b30c18bf34d4ad312355a65c8e00043653f696b54";
+  hasRunfiles = true;
+  version = "0.8a";
+};
+"karnaugh" = {
+  stripPrefix = 0;
+  sha512.run = "344027bcf79a9b1d3c408aae774bc532a39e7c638c4831d2566e7cf5ba5780161c6314bc0f9337de21fa08a2a2d72f3b5ccf9df7a521d7c95b4dc6e62cf2136f";
+  sha512.doc = "379638ab38cdfe3d94d049fec7701995566df9c5451f4f6a862c7cde232ceea899222b13f3c40398676bd2746305ee48e8b43781804cd24f48f36946526d23e4";
+  hasRunfiles = true;
+};
+"karnaugh-map" = {
+  stripPrefix = 0;
+  sha512.run = "dc2327e4cda55e4b60365d6354f679f9bc68d87a3d3695eb98c2754d7a5f7f64d65db8732b107f686fc39a07868d4703afc0fba754f42af3fd567a143199580e";
+  sha512.doc = "0daa9aafafd67df8934ff2b7b31794b23c8ebc53fb142f23111e64957a75904c4813c6f40512e4a440861351a2185884969cffef35209dfddbfd9ac4007e6557";
+  sha512.source = "3de03d6661f8a8d0955de760bd8e0a9e2c5592e1ec95e55224994c9b5580036da6c20a9e68a2e59195fbdbbe0ffb5f431dd025400a3c1c57c44fa92000575dfc";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"karnaughmap" = {
+  stripPrefix = 0;
+  sha512.run = "72c5ee674d7719b535a03cb9180a605fce2ac089c875cf57b95739b5c139bc45552960faf8f3287731fbe12c8402ce3c2c6517513d20bbc484e12a44468d6ec7";
+  sha512.doc = "c79e28dbfb45764c3f5feff21bf3cb8ec5ee41380fe43d35b2b091b1e263db1eb417a19c74987743c04a2f41fc2c3655fdc531c8971320580be48beeb4d3d6eb";
+  sha512.source = "ff5bdbaebaf55faf2d617b1e3634e52a6ec52c9d56932653d9b13a8aba94db101c4afbccdabd916d51be201135de2e739295b8a0523b63def160f1c07171e4a2";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"kastrup" = {
+  stripPrefix = 0;
+  sha512.run = "d7cbd22ead6633284e9d114d90b2cb47924bfeb10c15eb350e4c2f82b883930c953410362313cdf8ac476a68cfa3a9b020217097909504b97a8ecd7addbc8d97";
+  sha512.doc = "32883a008b0f44c341fbd5f65f9783e403fb5751201235b0c4a2dfd9af8400e1a36adaf4573165688d78cacdaad3c8b2ac1b92ba87ef6951d3bc5330537d1f9e";
+  sha512.source = "60390a053fe2fa53685403df1d67a2bf8795f49db0f4eaa5a147ccaed951a55c1ed50c9cc5802bcdb5e356b694c2b4be78715022842c958f784908cab89a3f75";
+  hasRunfiles = true;
+};
+"kblocks" = {
+  stripPrefix = 0;
+  sha512.run = "dd234caad6b289f85109303a8e3f770bf7393abcf1685f402c3d44234d6ea4da060b9995b8bd2c11450e463d4b729538ab94d41e76deb9a0fec07bc1f909ea5b";
+  sha512.doc = "924ed5dbe96eafc0bf8dd2fdffd4cfed43e7b8f236181553c999ff07a40aa3396e0b7fbf5c474b50d7c1c5cccdc364f941479ed710003055fbfefe2a34cebda1";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"kdgdocs" = {
+  stripPrefix = 0;
+  sha512.run = "79b64f2f20b9da908fd9acee1033fdef290c30e99794c37f5020f33dc5fdbb670383463bc17614f4ecaa1d5d4c03b4ffd3aa4f2b7c53f27455740adda9d0545a";
+  sha512.doc = "6b579a44d041a10eb9224aa80c1b59b113492cb12c121b1ca5f57625d044b52a80cbfab63d7a3160043b41b1b4e27d463f5ef8c9688f620f431fc1937a8bc561";
+  sha512.source = "256c4c4e0a8dddf39fc6ce14f17313f2bee7c967dac21910fb44fd674573de113e78b0beaaa979d3c7f3fba06ad15d24d6243b8716b0114507331f267144d6f2";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"kerkis" = {
+  stripPrefix = 0;
+  sha512.run = "80989cf32881e82a9111bf99cee96377b8e315dc4b36af014653caf551fa008ee453d342710b8a5308d01654c68bcd0beb7d2c868f81354a699522379ff95061";
+  sha512.doc = "bd7d84083fe8d07a8e3fa7aebe9964771616e6a8429888cc11188ad7ef00912e92399cdc56ced9b67e2a7962af3bcdd5d99fa183e6760b8458427c19f79b354b";
+  hasRunfiles = true;
+};
+"kerntest" = {
+  stripPrefix = 0;
+  sha512.run = "9f295c253228745bdd91db65f2e414bc6113d246242ea1717db6659c2ccbf72530fdc326c0ec499f6d6c2af3ec8df2b78965666dd8544e07bce864716804e76b";
+  sha512.doc = "b471544af9d1ecfd6225e4b9d61f05b4da950a6512ac4c4bab54b1ef9befa859ee5aee2498690e724d84313808d2abc8f005fd4e121891878cd2dbd03ae36415";
+  sha512.source = "8d7c2a8e8881f361c67ff71a57056dbabd3e0af5d24cbbc5f9e7e6e321504482469809f8bf349b5fd4d65e011049d5a67e7570c0b364cfe178b0fe377da82c31";
+  hasRunfiles = true;
+  version = "1.32";
+};
+"ketcindy" = {
+  sha512.run = "38c3963781e1a880ef3b8d2ed5d21f7c64f9454ba1fa01385592fde62815c935594d3f7d1a1ac5e77d709f012034a194ad9c4f78c06903a12ba71be5ff67f720";
+  sha512.doc = "0bb1eb8c190ebe91624b7bc8a1c1cbf922a29200159236d683a1bfc356b502c38d2c2d2051d65104a85a15e1b55625b32025e2496b7987cb7dbdd0e07ff1fdc3";
+  hasRunfiles = true;
+  version = "20190927.0";
+};
+"keycommand" = {
+  stripPrefix = 0;
+  sha512.run = "90c2246edbfd199d98a05df336ee228c65f26073f3c95c5ae55c3201cf59453bb5afb95ad367ab4af6b36dc4e0c52a25bb10f80fba265003c701122247be50d9";
+  sha512.doc = "b99b58407f5d93fb868bf525ab199c41e07fcf5f31c7a6a14cf68622ef3a34e44d1014e4d34594441144af5c7d9a9853cef1505311928b32a9fcbd41c7bf4284";
+  sha512.source = "44b63a11f08c3bd47ab337ccfa1b0b2737624f77228ca1d745020e2c1ca1b1616c1bfadda1b99c362c0b372bfbdf37d839f0d0457082922a54a66608c82aa928";
+  hasRunfiles = true;
+  version = "3.1415";
+};
+"keyfloat" = {
+  stripPrefix = 0;
+  sha512.run = "3d2be77c6ff60292b3cb50e8033d5f182fa731b6b435e4eec4d6a3f4376e6f0487a6bc5bfbb59da37ba6d620721f3756e42a795bc26547d2218f66b2dcf82a4d";
+  sha512.doc = "b678b7e0fac699625b9638b67e3e00b892ed4d0a01d78ef0fb13ce65d2a1e74afea50bbb9f4ffbfaa37b1e80a96dd1cd8f8420e8b1b5f1cbf6f6155d745a7604";
+  sha512.source = "32c7cfd96870d94034984b923d47075a2e071df11290f076ddb4def33236aa3ca40118382072b3d17aeb8d8fa263c1c0575182ff5b91a4c410f6c7268100eefa";
+  hasRunfiles = true;
+  version = "2.01";
+};
+"keyindex" = {
+  stripPrefix = 0;
+  sha512.run = "93de5becfa1b4950f518bc004f0dbdfe96f567e17ec4b7656326b89201f1f85edcbdaa771dc8568fc0c87bcbd8877b618d0d00ce387ca70036f6794a8b870695";
+  sha512.doc = "4be79367bed5a7bc3f5bfd6c10f7ba6a4c87ed51139e8f8a7f55c59ae3ce6c1aa10df1c88728f7dbb4573634bba2ee599378755cf6c77a2ccf8d93ece5540736";
+  sha512.source = "3f177cf8d323fa6dc0b47742a27cada66cc505777a20c26864dcee73c272e46ba3867c4120f480be8ce5afcfc6896d908eae0f336cf306a13019bd0f0206f9dd";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"keyreader" = {
+  stripPrefix = 0;
+  sha512.run = "d1786b07a3dc87f94248043f0bd941dcd8dccce29132e67118d3fedc0fe207a2df846d850851217fa87ed2219915719e70fa73ec284ed420072654c578ee0b3c";
+  sha512.doc = "05c45cb13bd2612dd5b048f296437b605117c71a52cef2a1b90ad58b693a31d05da9491464ea9b208dd7eed3f3cfc96e9b5a00f5a77e5d492208fe1e924dde4c";
+  hasRunfiles = true;
+  version = "0.5b";
+};
+"keystroke" = {
+  stripPrefix = 0;
+  sha512.run = "e04e13e23b3342686078c2278d3b6f7c8678d99acda197f50296ade3dd91bc4316323a669efd7238fd246c60f169c694677252601a81d9e23b49a1e37049c93a";
+  sha512.doc = "bac7f2e879796c0ccd5ee28c47aa79e9208ce0d01456de9ada6cd00d822c098cfa318615311c43b1815de0e6968252f6005a3dfd9d0475ee7dec25f7d24d1d86";
+  hasRunfiles = true;
+  version = "1.6";
+};
+"keyval2e" = {
+  stripPrefix = 0;
+  sha512.run = "08495711a9b509707ce6da359f9743b267baaa6ba6e18e41c965ce016c4c51e1bb7353769ecc9596e9bc415976449612f602e291608d306ee5baa69a4e823160";
+  sha512.doc = "424035c6250990b4104200fdab744d50643b6ce36ea717f50544fecd40746d47d7d2145203f0d6f19652a7217c99eb599a1c7d8b0e3a0fe00e1355c416cd4294";
+  hasRunfiles = true;
+  version = "0.0.2";
+};
+"keyvaltable" = {
+  stripPrefix = 0;
+  sha512.run = "b7a0fc52feb2a4e4bf6b626701f7d4fcc455e4ebd560389f2ac7eb15e9cb2ba814ed3f179c1662364ddd4fdd899158f863656555e9d3bfe08ab03ac2471c1025";
+  sha512.doc = "277544403f8e06739789396077dfa08b3a0fecb99c8eaf41dc61528d66f0765a519a8314b85196bca5adb733dd1356034b72c9a949fe0d09a845ed3d35ddce5e";
+  sha512.source = "039b27d55b8b51a4d49e8e06cdebf3266633a3ee658f7c99e191d248c27ed05ebae7bb433bc5b242d815a795160e13ab8a0853e92147979a6ac0a1568e013662";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"kix" = {
+  stripPrefix = 0;
+  sha512.run = "dd819518a80ca0486a191361625b58f91d00ccac88a2f69269bd6e1753f6c87dd3c97d39a14a5dc3768c9ecccbc981106eba1f495cb7870103a828ea69ed8bef";
+  sha512.doc = "3d3816d395e69ec83c88fe55801cab052b12f5e38702edafec2d3f9225c80a31165dca553b60401dedac7689c583feb00615e41c7179fd19ccdc420fbd5e6d86";
+  hasRunfiles = true;
+};
+"kixfont" = {
+  stripPrefix = 0;
+  sha512.run = "a866364705d75ab560488c84a5e403755acfffe7b49b8e6dd65342f45f852a5be9d4072d750fae606c3d5789e1d46458da66f0af6fb9f9e0225c1d9acf69d4a5";
+  sha512.doc = "ca250703364924daf9827ddeb48126fb21ff5ec3230afbc3f6778d23e96dbbb16173e5504900032ddbe14920cb40adf8130be50ee92f3c9c2dbceb95b8ecb90f";
+  hasRunfiles = true;
+};
+"kluwer" = {
+  stripPrefix = 0;
+  sha512.run = "36f0d6ade1e6afbc7a021780a9d6d56e358805be8a8d5835ce256c87f426aa4110b9e395d6406cd1572a362557ba0d914071a6589a65ca064cd77c9310c284c5";
+  sha512.doc = "9990c4fb99023e6262c1c7336f4b8a98e3131ae60f380652469f7e2f88a8793d745655e0fc13dadc78fdb8c2beec6248e54af661bc81a8ec016af58b688e583e";
+  sha512.source = "a6ead8f091ea55b4443da5d048df1e27a2f2af0abd047d7585490cdc27b9efd1f3a59a5eaf6b77a8b5dbe676ea89dda8e96e80b833bfb995605ca36b21e3cecc";
+  hasRunfiles = true;
+};
+"knitting" = {
+  stripPrefix = 0;
+  sha512.run = "af3f7d2355054293c2c7973cfd40f0b741c8821884cca6ceec7562efeb92433bb81aa204b7b0ed4dae77cf674f4a63005f36133fbb5bf3d239f0cd5ef61a69ac";
+  sha512.doc = "effaaf06a5593a9d73f2e93a722355009a0a957a2067a1432edb40d8dda7649c42571cbc37fc7aa4103ae2094dea7b1bfd861273566102c55546f71b326e7118";
+  hasRunfiles = true;
+  version = "3.0";
+};
+"knittingpattern" = {
+  stripPrefix = 0;
+  sha512.run = "cee26b0e6fd54a43a12e0e48fd5b4bf381816dabb6019cbd7c13ab5e2561b9f191d9fce4c75a513c06530077bba8d383b26552e2e6f4e97600aa2216547a08b5";
+  sha512.doc = "d391a25a224713092128af5adf68e5331c530a67a763dc37f657d8bfcee0d904632e86ae2f3745ec2c4bb0cea5e886c85da15b064780dbe997104b9afbef9e4e";
+  hasRunfiles = true;
+};
+"knowledge" = {
+  stripPrefix = 0;
+  sha512.run = "b0b447090a1fe99b3c30d47aa7e3b9dcc6dc7114e37d1eec6cd6fd66d1b976a70bf8e00fbe1decf25b8d0d74c77555282ebf0e4b921a5c28e615191403c57286";
+  sha512.doc = "cd77f5c9880d32e48daeec69fd4b23f0fb1bb3d945a3025f2f62da9c9a4becd3146e9f04033e9b40a4103daafc7a356c6c0796a644d1f4e20a8b26ad84e345cf";
+  sha512.source = "74d7c0a1adb9ec30ef73f755e0b14dc986c69bd85341f0c1dc92f03469709f65f2d84094aa5e8160256e2241793a68c97dc14eca7d6b7ae1f1e2f7d8df178521";
+  hasRunfiles = true;
+  version = "1.17";
+};
+"knuth" = {
+  stripPrefix = 0;
+  sha512.run = "0444090d99b39e2cdb47060ec7eb07704948efba49d4c9ced27a0565e34bc31cc81e10ec19559d3455ad2da79c5117da3f2d84f2cdd080cf97d5c14e6d02f707";
+  sha512.doc = "a2ec4befb238f3cc51593e0aa145d02f40e3e792d4ee13147cf58baf366f9e019fb874179940b7beedf859c9d756a8fde2b6f65e8c6c20e9c2964e980e7dfabc";
+  sha512.source = "a5e53275149199e9bbf88f6f6f03759b39ab0401eaf1fee4cc9875eee62a82178bb3f79deea9cbddf5e3153366dd57e43733f583bd66327e73b2e78b0765964b";
+};
+"knuth-lib" = {
+  stripPrefix = 0;
+  sha512.run = "8925cee55d97e93e9947e62581bdad06cece4448b94516c72cdc8826ecb8148fd393c0621f57eb92dbc4752626a38029bcfb30963b618027e0fb5459e0b29bd0";
+  hasRunfiles = true;
+};
+"knuth-local" = {
+  stripPrefix = 0;
+  sha512.run = "8ff3f05e2584cbc5301ce6fe74e469db70438f689323617ab0cd762af9f66fcc8db10ef687dbe5a97deb0771a75320ab099cfd8cb7a900f5ce6c65e2f6fc9edc";
+  hasRunfiles = true;
+};
+"koma-moderncvclassic" = {
+  stripPrefix = 0;
+  sha512.run = "68aa7ea875f46a4c1d1bbf29d4abb77f4ec729242fab41f3e79caf95a925a076ec3d37ce7d98b44aecaaf9edce541d1673780238786b36cee0621acf4212a1ef";
+  sha512.doc = "968f5303bc7b5fa3df39a2a44c38b63e54059a94ac7df2349b45cbc0855d22ec64ec39feaafd761515720d306d5e5ea8a223ca74790ba160bd093f989d8b69c0";
+  hasRunfiles = true;
+  version = "0.5";
+};
+"koma-script" = {
+  stripPrefix = 0;
+  sha512.run = "9a87386ea77897100dc1edb17665ad32cd1282b0243de956c7c1d60983988fd22f54dac9d519ecd7d0b3b00bf619a83ff1782baef6012299a8159d6c5264b1e7";
+  hasRunfiles = true;
+  version = "3.27";
+};
+"koma-script-examples" = {
+  stripPrefix = 0;
+  sha512.run = "df9ccc215a2693454b3f8e1cbce816708415e987451cb652c1b3c2121ff073b7dd0311e3a61de493b5591923edd7688edf66e061467d28a5c3ea437f912568f9";
+  sha512.doc = "6cdd548d21897f33927ee33be350b77b317777464ce3c7be24223cf10b6200ffb73944d72d0ea8491795de71c9554881ee52ae157a035b667f8c2c74aa1c3641";
+};
+"koma-script-sfs" = {
+  stripPrefix = 0;
+  sha512.run = "3b281a1e94c73e1d8224f6ae552be91e3df344f9031e139334fd7256e38dc70bed4132164935845c710bef9dfe0e8c439c229d3415ff835e48777aea182e7fae";
+  sha512.doc = "84f7fb5c11c9b40029bc481d34ef7cca39baa2a3872f22fd5b656e324aa5cc0becf3ff6d894ceaf26e8ddea0d8cc14d428a140e1f19ff2e060c6d32390d51070";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"komacv" = {
+  stripPrefix = 0;
+  sha512.run = "007ff84d143bf46d2c5d0772111e26a459be663ab40c785a8dbc8b787202f4ccff15060fa7d52cb547348ae1b128a9f66256259c2f72775d4278ae0f4e04c0bb";
+  sha512.doc = "58548f1dc27a80a65a275140bef757329a49255353eb09c0c41e7824985603799620b696fcb4af454d85e90b61a6bdc6965cd0f3f2f603674064be502674cec4";
+  sha512.source = "eacfb8e12e043f30daf41c3ce7b4a72bf46170a1c5f9be5accc5c8b414a2a8a69b3460d26832806eca69c3285d0ff87014e50a411f8bf6ea1d7d82fec250ba9e";
+  hasRunfiles = true;
+  version = "1.1.1";
+};
+"komacv-rg" = {
+  stripPrefix = 0;
+  sha512.run = "6d400b0f228d42aaabf9527bbd3447fdf92eeff81f1fb7978cf90c3afa9835e4731a9da938bbece65034476ac2e2f7afff19000d9012ddd76b6f65618bea7223";
+  sha512.doc = "58236086df2335cd167a5d475cb0e223747d43d81d23c0c0ace1cd711a19ca371426d36e199d69a9fd5414a33872dc4ab3725850a6677440484daba0e55d5208";
+  sha512.source = "512fbddc0b233061afd3a2af20846e8eefcb9d1dc00b29669e45499b62289d842053201b208819536af0a2a7db56cfbf2346210775412035fcd13d2b2593dcf1";
+  hasRunfiles = true;
+  version = "0.9.2";
+};
+"kotex-oblivoir" = {
+  stripPrefix = 0;
+  deps."memoir" = tl."memoir";
+  deps."kotex-utf" = tl."kotex-utf";
+  sha512.run = "37aa00c2558500c5c308f7ab5c0d8af0277009ddba2615229f718f4e7f954708dd8d3942e03f5fbeebf29a7bd49b81c24c8364fb17468ca0e998d3235bb68791";
+  sha512.doc = "907fe884a715e82367ade24d3053a9cf4bd06ab276cffb4622932de1d485813ba9ebcf631680963e926ab80d18838f3c078434843c398000df9a7bbea5543f4a";
+  hasRunfiles = true;
+  version = "2.1.8";
+};
+"kotex-plain" = {
+  stripPrefix = 0;
+  sha512.run = "f04333a7b7ffa7bee44b2d74bc1c4b0eb22fc57fe0721db0ed3bf260fddd68a6c10d92a041e42fe0ab1f897b5869cd7ff67da168336a708f03d072b4c4cedd68";
+  sha512.doc = "55b16054d06f079a5d8bf6baa32155a0114e2a12b0269e1ba07ba988e733ad16cdebc1c991033f7bedbc3a180ef24fa84bb463c07e138136ffd89bab0c48b0e4";
+  hasRunfiles = true;
+  version = "2.1.1a";
+};
+"kotex-utf" = {
+  stripPrefix = 0;
+  deps."cjk-ko" = tl."cjk-ko";
+  sha512.run = "65ce36703d824ae483a53ac6a3550a8d71d140bdeb67d3c9ddd343255cedbb74739c1688b05ae4742703c6c46b3e46deef5c6a7c5571cfe8f8a4003d56aac446";
+  sha512.doc = "692a2d90f404c571aa0dea436436f72139bf2024dc6f3be0b9e48cb57b60e36d1abb79d7e51fb88b5efc83176417b8f74c8b945fbd236c0832873ad8fa65f410";
+  hasRunfiles = true;
+  version = "2.1.2";
+};
+"kotex-utils" = {
+  deps."kotex-utf" = tl."kotex-utf";
+  sha512.run = "569e9677ef0f346e5a53f4cc84302a8ddf2b4ad85708f4ab8ba7d076ebf339ec60998a41fa92fa815167e9bfc37085ebfd921dd13a60b017a0574e4a5d205802";
+  sha512.doc = "a46c5d09d119fa2fe8b9acea87a37776536e3216b776af6b7037fc5b0a522af5c1a58baf081e60f06c9a4054e8ac2372458c276c779038a030dc92efdfa3aef6";
+  hasRunfiles = true;
+  version = "2.1.0";
+};
+"kpathsea" = {
+  sha512.run = "c501be99e4de8c65a63e4e9ce4d1c5c518d849e792b36ccf4048c6697c272b511a4f9a34bcd2f3372daae96f97c0378d04348eec7ba29580a9649dfc3e144637";
+  sha512.doc = "e31624b39e972b6c18bf34e513d14b929deaa203d6df8072a783cac661ec1431b28a36dea7b0d0f1793f7a048871c3697965ef5948a400582d618175bb314bac";
+  hasRunfiles = true;
+};
+"kpfonts" = {
+  stripPrefix = 0;
+  sha512.run = "65cb12b6d10c91605db91de58fd33597720a4d8a7cded8a4b60c5bb3c1f2e7220c5354488a75e5a25ed0f8162d42689b6877b3a7efe5c1a0758dab237564c5ae";
+  sha512.doc = "5157ad4e67bfb1f0ba54cb34c2896a856d167bdd89a9f4bc4d69ad0b6f4899ec53cb1d22582b352adbf28d7af9458e2d78147580740e7c41437855eb30557a17";
+  sha512.source = "f70870ffa7dd55da69af7d8274fd3089c047191197f4f4afef4908a93e56e9f1b8b1655cf8042138ddaf95c24240df73549bafc6e2a3b3002b0653bb2e2ac592";
+  hasRunfiles = true;
+  version = "3.33";
+};
+"ksfh_nat" = {
+  stripPrefix = 0;
+  sha512.run = "8893133ed49c9b4ba7472bc80a4e5583ec2546838e261fa2cf9aee188a0b00bca45de05c4e969af0b6f222a9668c3a7fac0caadbb180c10500fc53ae8c9f56c6";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"ksp-thesis" = {
+  stripPrefix = 0;
+  sha512.run = "3a250167d8810e3e81c5b6f86dad57e191a2a8387b5c7701e9b176cb007ebed79bd11867caa63e9cb9d3412fd59baeca7ff8e7589b11c4ef1144678552957216";
+  sha512.doc = "ea4ff7ccabb237b113511b58ff767b494b213cec1382467ea8b95b72abe9c0d361f39781940c976075157bae93e8e32364f716cdba2a07b8a7d72c0970a31cf9";
+  hasRunfiles = true;
+  version = "1.0.2";
+};
+"ktv-texdata" = {
+  stripPrefix = 0;
+  sha512.run = "c2f3e86494993e6e56f131b9e7105ee2d15179b96580982ae7fba9e32c3e9889159ae767d96d95111f2eb052bd61f0c3c15406ae3af70b359e3b5ce081a6978a";
+  sha512.doc = "d930db31105dbcfe3df4184422115d82fda7efa93d00eb8f9fefa0eff3893602fb4db9e7be26d2a44c0b3cb56e8e9810f61bc660c15e49c23880c3f0cd44025b";
+  sha512.source = "1f7eebfcdbdeae66dbff4037a01173bc9383f75b5d7704755a10c442d63380d286bb4532546e036d5c558dc399defe3f9d3d035bc67a5ba90f8482e427b507ce";
+  hasRunfiles = true;
+  version = "05.34";
+};
+"ku-template" = {
+  stripPrefix = 0;
+  sha512.run = "4603e59129f749b0eb065283bff9cddcafcd1096627f196749be09c19a4a79848564ee9343f14f31dddb2e37a01e222bf08531d5b3237bb906cf88efb427fdb9";
+  sha512.doc = "6b8535ef84bd1ccf70d16f7098826b5acea602b22cd461df66cdda64c4afe36f9ef6c4386227c5317a31767e4694c388f7a2fd87fe8fe06697af4bf5202b29bc";
+  hasRunfiles = true;
+  version = "0.02";
+};
+"kurdishlipsum" = {
+  stripPrefix = 0;
+  sha512.run = "d7160d78d7f0d8d7771740f030cf1c76b57aa9ec2d179887fe4065337e35bef528b522c666eca0974aea6696033678dec5446a9a198fb139f2d2469c8cd47eff";
+  sha512.doc = "6af516595f4cc5b090398078977bb37e97a5aa4b28a578c068931eff7d34fa2cac379b53e70c8bcf270c998fa6fbcbe354b56d0299657fcce9a4e076a87b36d9";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"kurier" = {
+  stripPrefix = 0;
+  sha512.run = "4f727e8733824e8c516e3ab1286cf0c834413a6ab52bccb5519c9a14a526cd3397a6d0a264679dc8b7d80cfc1d75ab11dcd2c02734ea63d5a2a5cebd3ea3c24c";
+  sha512.doc = "7fda14c05f105d341a31561e761517ce12b3e5ceabc01e0c5c8552ddaf55be1863a22545b268026c844b23f03e8700350f0dede79ca8fda62e7a2672fa510407";
+  hasRunfiles = true;
+  version = "0.995b";
+};
+"kvmap" = {
+  stripPrefix = 0;
+  sha512.run = "e9482c26c7f188d1bf45e5d577899efbadb221485e037460f233ca3b1fdf540f9984a371f62d5dbafb6bd8d9840c6e26ab3173152ec5b128e9a3522540db7912";
+  sha512.doc = "fe9cb7b39aeda44d826920898c48001406801ba9e651af34ea9d25ec85141e6a0a6cf4eb7f95451c84da5c7716d4214292c7e3f9e442d0ab5aca1c16e17e5c94";
+  sha512.source = "07562b173f46aa4787d3e3d279f37f59418260c9c610ecc476c62cd8c96f7f59629a126af024de5664cc8c8dc8620bf7fa5fa00baac009c62575c2ad47008b7d";
+  hasRunfiles = true;
+  version = "0.3.1";
+};
+"l2picfaq" = {
+  stripPrefix = 0;
+  sha512.run = "c6ea1d8ac189784d6581eaf9cae83a83beba9adfd32536f43c04633f7cc457353f0dbb69407332a29856633552910bfdd31cf85332c6dfb05da2cbab88ec67a2";
+  sha512.doc = "e4202740ea2842296338e9d635b27c35801f4a5f8b21eb8dc0c1db572da0718fc5adcefc5c122793618336272606ec27f02f13825f8d2a6cf4b83583ea372288";
+  version = "1.50";
+};
+"l2tabu" = {
+  stripPrefix = 0;
+  sha512.run = "2e94e77ab5c8327396d2ff714f7c6c1e8c91a3ab0f35be411d11f617d39dd815d4bf1c6eb1dd0be5154c1d702697c08b8658c8371dce3dca0349712a5dac2d1b";
+  sha512.doc = "84673b59100568d1472f3221ff0cc35b8e8512ece38701f35d60265d316aa52186642def2d66885df47e2f613ae042a86972b7958349b7b2b83e754d72163df6";
+  version = "2.4";
+};
+"l2tabu-english" = {
+  stripPrefix = 0;
+  sha512.run = "66e1d62c731a021c1be2fb6e9e3034c7dec59edfd03dc2bb0042a37ff6f0d967e59a023fee994f45cf2c9b15e64445b45c48a207e21b7edb81d8a538b6c8eb6b";
+  sha512.doc = "250ebdbd2a6dd3dd7d05c35cea0ea8fdb969bef983bc0a5f2c804129091f22ac0a499df482a1a990bf278ad94befc774d354341b30f9a0cd67539e1f63074ee4";
+  version = "1.8.5.7";
+};
+"l2tabu-french" = {
+  stripPrefix = 0;
+  sha512.run = "8478211e871e38765cbbd36f8f571e63b5cfb9dc652107a4a9178c11a16b419eba7314246878507f22bf7f66818f8c5d1516a527deda5a2dc6c30f9260f23b59";
+  sha512.doc = "f489b0bd07b60797b53fc9010c699029dabccbf326767948dd815224f1c591cb59d6da7bbac0d0385ddfb6f0e885e187b2385bfcdbb88933588b06dfc34f640c";
+  version = "2.3";
+};
+"l2tabu-italian" = {
+  stripPrefix = 0;
+  sha512.run = "5b2348bed7ce47d7e2b8de6642e14b24ab440226d0de46a51eab08b3d11a39bada93d890e1ab9e2dbd3ce253b3263460fe7114baf9bc7b5c775a7d806c731ab2";
+  sha512.doc = "c76981112631423d5d92ee9236d9b5b076e3d71086f9dada77de51362a5d5e01d82d5b018a68950c2b7f4b10eff1882d677243594436bae41bcc6ab996aa900a";
+  version = "2.3";
+};
+"l2tabu-spanish" = {
+  stripPrefix = 0;
+  sha512.run = "73cecbb031be2d421c25a7d6a5c04d08e30d83a88b4132682d434a879da915f1d4af56980f1bf04f7df5a3e881ecdd940a058a2dcf89b5e9f48c378eb322da06";
+  sha512.doc = "a6886d54c0f5e1915ff9efbc4974ab1ef7f6dc026d67a0596ed47ac9e94da098e690bc70d5ed3e45a4d8cbd0f877f0cd6cd3a3757288dfc2df284e9c040b7c1e";
+  version = "1.1";
+};
+"l3backend" = {
+  stripPrefix = 0;
+  sha512.run = "333591d082c62f4455d7e8208857b29fa7c4a9ecd0a29c1e51f326f13f10cbfd7ca71fc2b5a28d13ce6e1c6900bfd414bc2599aa9ffc93e7b29f08958998d277";
+  sha512.doc = "da240912b67819ef4ced9ff48064b5d84db033948cf318cd86f00142cb6ed9e0e31f26bd56e368cfc532f0f10555dda5c2fb52a663bd73a0512cf1735b760334";
+  sha512.source = "404811374a59ec3dd65817ac920639c2ab002f9f0974d53ee75836d507d82cf1c9c93b8d7178911b82713a0f2e99cb0245720152397467420822d84fc093171b";
+  hasRunfiles = true;
+};
+"l3build" = {
+  sha512.run = "c9f28b9d6f84df09f1d3f30a86d228ebe1c0108b235aac32bb11dc605323a2fb04a9b7002e3ad0969ff29c321fa96f2dceff02ff718797f21b2c5de4fe499462";
+  sha512.doc = "f1eb06d0f8a521f14c76581600151a31aab40fff6f43961c971202ec6a17617192c39b14e79224505ad31707166c165c7b08a66dd0ef9950bba6d6293309475a";
+  sha512.source = "a41771f414fda27e16a02b7b6f8d46a864532197a3f8361751db54c66db00ca4014a3742d34831d3bbba7bcd869c1c28ad10adc8a742e7686d923dbf6bed463b";
+  hasRunfiles = true;
+};
+"l3experimental" = {
+  stripPrefix = 0;
+  deps."l3kernel" = tl."l3kernel";
+  sha512.run = "e69ab380e3039e4b449c811f201e6ad8bcabbd74cfb887e18a2760d391ce7d0d253ef152e2a27857cb182ad867629b5a4a1982ae4253d618bd1f2ab147a42c06";
+  sha512.doc = "40da1995d9b5932dbe4278f0c24ba512f6880c048e04b1e38ea7fdfe47a60ae6b0ff07c2133f7faa3d901b5c5a29716ad8e373256ad65f9684b027e36d734724";
+  sha512.source = "2483730b0b0ab47b55c09f0d51c87f427b0f4c1c5967057a907807f04f3c9fbf977068156ee8ac2ac1b8203feaac826da602e4cb894cca5eec7d6f1ca90b17e3";
+  hasRunfiles = true;
+};
+"l3kernel" = {
+  stripPrefix = 0;
+  deps."l3backend" = tl."l3backend";
+  sha512.run = "e5290e256df8a05d80e27a33ab9e498c061e2ae25ada357ee1d2b50eed947f0231c6e8c22960603373a1007095c3ae56381037aee5cc0297c57e7657b97fdd08";
+  sha512.doc = "6b6fda38fd8cf982682977a3e7d90dc22f45260251f30f29cdd6dd047a97368989fbb45bf4a1458ed29e1f45dc22648a75599fadd3c9528999e98d5bf55e3f2f";
+  sha512.source = "3682ae236165b37846d9e0605f5600117a71c31c1d282d95aa88ee5711b38708b11f6cb1de06d71d97858fe612b8ef7cedb2c479e58e0d7a0e9e29ad37b98cbb";
+  hasRunfiles = true;
+};
+"l3packages" = {
+  stripPrefix = 0;
+  deps."l3kernel" = tl."l3kernel";
+  sha512.run = "eabaa7d60a77ab4dd9b4ae96e5b5cd1a93bcc4e5c4ee0259c3f3dd7856f1844b1b1b7eb4dd9cbab5b9b8803483ff1d9b1b84618d627a2bbf157472aa3db46289";
+  sha512.doc = "6f296faeabe88c7a1d6b47b2ae491c138be85b1fe93611f51eba8d756225d569d3c415969ac1907b08c6cb8885ee2f98f0063e43eb7907bbd8cc805588e51be8";
+  sha512.source = "59a319d8832072e9cf57cd5a3d4a9b0173bf8357f8714e587b2b1b50d84ae2a59e9ab9f8284f79f110d27e6e513c389ce5c95957811f2ff7039dd12eb1ae3ec4";
+  hasRunfiles = true;
+};
+"labbook" = {
+  stripPrefix = 0;
+  sha512.run = "92bd582cc729bcd3cea6979771e934d5a4a194536ff89a475309d3999ab0a2ab70d5ba5be6f0353e97498ab4e971e3209df9a3ca4ac99a8c9de27586a0f4a3b0";
+  sha512.doc = "98758f4cc186df470e8a16b2e9365f3bec585be18c0fa8700df238befe052ad69b697357c7d89b19233a9cf2b308c29a54bf84215fa3ca8859111b0214971ed2";
+  sha512.source = "23b9f993dbd431328590617c6715bb082cd1dac757db003b05296d318a002e85c8c541f5ce6a45703fa2cc481c7af98fe41e483c77b5025e50de324b68fcf525";
+  hasRunfiles = true;
+};
+"labels" = {
+  stripPrefix = 0;
+  sha512.run = "b1cd175e1c5ece09926ad3fb5ef3b2dbc528435e26c81df563f674388083b481e6a6f072724254302c243a640960a942a6b356664675f4041c94962155f5ee62";
+  sha512.doc = "0ac61f3a1ec027dd3631a4e6ffabdbf71ca27eb19c877a0beef8d7d991989d613769474e99770e9edc74dffc8b59981da8666e5dcb26450717be37b098a028b9";
+  sha512.source = "debc22ed66f978aed88c84a0756677cc5faed39ef47ad37f8fcd4d6dcd02ce6b3a582ea6edc73ddd96ae04e7a50d43eddaba8404ceadb8c49439927f41f8c210";
+  hasRunfiles = true;
+  version = ".13";
+};
+"labels4easylist" = {
+  stripPrefix = 0;
+  sha512.run = "1f792dfc8c3d51cbb3ec4370e4ea36612d503a9a92d088f0d8b03ccc78c480118308aa48e4dba66dcfd55c8a3442950242742eddd557bd6b44c925e01e361163";
+  sha512.doc = "1ca630c5aa01e53d6a7fa65d9ebb4ccf5bc43af7d3cb66a6bbb287398e28764dae0b535eb4b821c2c406e22e239e8a88fc63a010d4e79977ef6e8cfd563afde2";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"labelschanged" = {
+  stripPrefix = 0;
+  sha512.run = "e9cbb45a636fa75c9b9c8d8400fd9a0cf0ef2a46f998d650631e9874907daa7b4deeb4c99d1610eefc343436d164ace717b32cb1d0c45e860e64d69e4c827a07";
+  sha512.doc = "130c0e5f27f0de161949fca202f73bce3486e9346a48584ce1b8636c16367eb3398b36f0145e37531d64933698c201132ba90ca3b5d5b011978d0fad0cc5ad63";
+  sha512.source = "59c1cd3371e97542f6f1cd8fcd14b3cadfabffbecad635bcea33eb535e45ba8b174e9e392e135c799afec08c195b867477255d1336c281a1e9dffe7c1c457cd3";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"labyrinth" = {
+  stripPrefix = 0;
+  sha512.run = "06c61f5a0a2b39d644d5b741877f445dea48fefaaddfb7f60251ecb328f16ba2ec6f09731608ac5ca7b288fe77fc193984dad25b8f0ad0da5f35bdd43fb2f8ee";
+  sha512.doc = "980a3bef8b8eb51cd454c835ba09205f8dedab92f747db9704c72d5433db75f68df298ee4ca06c6d68e0cb4c4b733c882d14bbbb9d877406163b0f95730a10ce";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"lacheck" = {
+  sha512.run = "7b8c4c7d15618b7e0d860afce675124372d31bc11b5e89ba169c355401714929c2c192912e7d666a3ca98c805e2f4942bd6173763a5a9265d1f19467a29223d2";
+  sha512.doc = "59202286440ad95fc96576f6915843adfb2b3f0092509175c759c690069e36c0ce1ae66ef46c1dc1b9c33e42e7819b1f3490b45d3c3933233201d3e86eeb5746";
+};
+"ladder" = {
+  stripPrefix = 0;
+  sha512.run = "bbe2f94442a4f308a416e9d849f9e4b8af12387e59e73931b563d5daaee312dbdf82a99f5122de897cb069a54f3bc13619e719ed717b38db4aebcac72c2c4f93";
+  sha512.doc = "1cf2a2a2267e819c9ee723af9cf51d711f778c3583c859eb01f2b2faebfd0f7a6fc4f4ab6caa83a9df6a797175ec27d29f0debbeaeb39387954070623ab60b29";
+  hasRunfiles = true;
+};
+"lambda" = {
+  stripPrefix = 0;
+  sha512.run = "54da97daf172e3dae434e75425b80d1c617ddc9991f6ee804cd812e2c4bd70b49eb1a01318e243c10998870877d4f76e084b5ef0b0eaa89afa66f77a124a7c02";
+  hasRunfiles = true;
+};
+"lambda-lists" = {
+  stripPrefix = 0;
+  sha512.run = "caeb3a547eb68d3e255d729cb6ec390cfaeb3bd9d4b4b6e8f877140fe24f4ee3ff0ddccd4107fa836faf5163d3d71209fed4a9e052d3329ff22a892d62b43b92";
+  sha512.doc = "846c403f99194a19cd21e4d7367a1b43a8ad608055315bb36a1113fb37dd3d922dd8c5cb8474ae52ed3006be520b7e9023680e85f0dbb17f69a41c8c17e81a5c";
+  hasRunfiles = true;
+};
+"langcode" = {
+  stripPrefix = 0;
+  sha512.run = "bc3e601701732d3ff533a7415446c2aaf7306732fdd6a8ac8aee6571cbdfc02b38f51fffde3a80cf5df6b0dd5e649971406f76d394500a74f1830139ea0bc0bb";
+  sha512.doc = "7ac261071a2902d1e24cbe4bd43bf1baef418bdeb4d3c1dbee4db273d29918649f346e97b5ead3e3de2820110c0cd11dc58c78f765dbd07f7221f28ede5242a8";
+  sha512.source = "60baef83840b42deb38d8ae66e18484e4a0431fedd23b1a8dc96c426840ee57f37ab613d93409c3ad8660eef2e759757daf39ec9aace30350623accbd21d2de8";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"langsci" = {
+  stripPrefix = 0;
+  sha512.run = "de35684ed71408adbda8f7238c80bd4e453761e18dd4083ec4680ac8cae711dfd0aa8339cc0ee211c231b17729d6e85316845586f6f6ee70e5c0577d84b1c9ad";
+  sha512.doc = "439ac71163f1dad47fd4f2eb533f4a17a84bf3258f31baecf941242ea845d37b55ee88e8b879b3cdd070caca8f98b6b5d591c07889214ec1d64e32c3112d8476";
+  hasRunfiles = true;
+};
+"lapdf" = {
+  stripPrefix = 0;
+  sha512.run = "10bb6891b82334f7dad4a1cf48c78b2b55c3b4a8939628a26576e99495f00e2bb8ee82028b13db4de6224e58e421402794feb2591842030cd47898506589ff6d";
+  sha512.doc = "6e561e0d513f7b18e4e40d11fc1f077a061e6cb08ed072de1d186bb86ab1fbd3905af6a79f9dbb0c201e437a1a8716706a83f1709d580c293961ae454699c9c0";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"lastpackage" = {
+  stripPrefix = 0;
+  sha512.run = "f4d30e327704b32afe1bcb81023a247095203a9b47357f9a6dc4b631f4bb669255ba899cf1c8378b42ebd16f2608d8a649a0999f26e3d05c963eced1cc955ee2";
+  sha512.doc = "f31731b5a93c154db123e66699ac5175fb63b965522bb511d344577645f9b8ac6d78c6a1a108cad8914b1c01b1c7a6e656743b075a03322c306aaa5417f62be2";
+  sha512.source = "f894a701e4f30797039bf60e98f9f9e6cc730a167fcccf88075802c0a5a0244eefce9f854b95207b7a0714984592030965f818ecd72c98af199c07f3400eb74d";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"lastpage" = {
+  stripPrefix = 0;
+  sha512.run = "adcd9319022ecf2a5b959ede5d5ce8c5d6a3e7efe1aae5f84abfa7d138162e24a403c6d50604cb6bf8bc80a918837f6d78dee60a452397e7a495cc4d15e52956";
+  sha512.doc = "2eb7e8457918e2ed51abf6f48d5f5d93157eff19b8e320a782bc204b44c58a684cdeb2dd3b1c28f5a8de7434b6da9af49ffb2d939ae80875234797149a80c2ab";
+  sha512.source = "53b1f86deddefe6f61b270ae18cc705a8ec1360a98a5e5338730aa7cb1653383062cede821dc670c5a9db0064e2989961d2604491bd6a5df9fd90f6e18ba0ae0";
+  hasRunfiles = true;
+  version = "1.2m";
+};
+"latex" = {
+  stripPrefix = 0;
+  deps."luatex" = tl."luatex";
+  deps."pdftex" = tl."pdftex";
+  deps."latexconfig" = tl."latexconfig";
+  deps."latex-fonts" = tl."latex-fonts";
+  sha512.run = "c1238a06abcf973717a49441d243bf7cd30ce4f641db3ede8c04796ae5be38b5724c3431d44ad0d2e83998b7421443ecc7feba2ea318eeafbecd33d959704dc5";
+  sha512.doc = "7dca728cb9733a93de6265b4504f2ab5bd4b9b518a28c7980e658564c32f800aa3a9ed8cca7e43252b54b9888077efaca385308b33d7cfbe8ffb942e170d4756";
+  sha512.source = "c28ca4c596a1fd0357fafb3f67332ead41ab0445c6f2258fed19249a67e25864f70fbe1a08d5879db918d102d30a0249b88e5897097538578c5c52b8523447a1";
+  hasRunfiles = true;
+  version = "2019-10-01_PL1";
+};
+"latex-amsmath-dev" = {
+  stripPrefix = 0;
+  sha512.run = "97acbb55f65abb9ead2b6134d47ff72dcd6de996123b5916c6073f976064a4c8055228f37a82a124fb7958f3cc7c08f3c2c4e61fe5c9004a5b8c24a086d0f9e0";
+  sha512.doc = "cf2ac69cc86e95f8afc814bdb9003c6ab59f3f9a9afce7aec776352496ef114fcb0d8ae672f71d901c2bdc0d45ad5efd70a7bb158e9ee7eefb247142d9330db6";
+  sha512.source = "569e963b567e5e1aaffc8352894f707063d0b83ac87728a125cd9bb915e1f6e1f82e89fd6c35a1b4fc440aa4ad51b61479c8837ba910b4baee8400bc990ce4e6";
+  hasRunfiles = true;
+  version = "2019-10-01_pre-release_3";
+};
+"latex-base-dev" = {
+  stripPrefix = 0;
+  sha512.run = "2667d8bac15b58018d60535087cf1e95f78cefa7c55203220af2ab895dbc3d144e140f80aa3511f2c08b1a31736e893a4533f41a3d6c60b56de6aa522bd129f5";
+  sha512.doc = "0cde2495ea61c5f0dcd066b50a487ff950022103947894cf28e5859590065879dc9ce4b3c6feccd195bfe408c3ef4ff3b24feb86ebe5de68de4d237246c131d4";
+  sha512.source = "551c2a9cc8389bc5cea38672a68fd746593a74613a95072856d2a8edbec84a8569ba77f39c06adcdb5caf4c58d087882b2bd56fddcb4fb0e6ad7ce0940e51afd";
+  hasRunfiles = true;
+  version = "2019-10-01_pre-release_3";
+};
+"latex-bib-ex" = {
+  stripPrefix = 0;
+  sha512.run = "9f91b724d8fb1bf1c3140632c4ba485350defdfc926dd3d558d2a318affb5b6d56cfb1d0f8651d0af878f165148a5a1f06c82f71b8033187ca485fee1bb6ec0d";
+  sha512.doc = "127f8ef52da49a348e79b062e16dc6a5f2b1728fd553ec3eaf824117e764e11d8e9dc63d34c0eb86417ddeda5e7f53403fe2361d8f959acb697330148f5d64a6";
+};
+"latex-bib2-ex" = {
+  stripPrefix = 0;
+  sha512.run = "cabd865b67e6e41b3b0745557b25d03cc15da1f1de41c79f92274c05e6d07718a598554b25c096a4261b202a20134abbd788f578e279ce6d57efaf1dc133eaf7";
+  sha512.doc = "2b5f1cecb8cb5d3ed78b10846b6f5ae38e02b930c2012353e7064b12865b155019924aaf48d995910b6cb7594928276e896421e85e71bef17822237f8350dfde";
+};
+"latex-bin" = {
+  deps."latex" = tl."latex";
+  deps."babel" = tl."babel";
+  deps."cm" = tl."cm";
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."latex-fonts" = tl."latex-fonts";
+  deps."tex-ini-files" = tl."tex-ini-files";
+  deps."dehyph" = tl."dehyph";
+  deps."latexconfig" = tl."latexconfig";
+  deps."unicode-data" = tl."unicode-data";
+  sha512.run = "d06524764c097f26b80a82d53ca02d2648cf6292a0d346cea6c52029c3838829cc2a3f1d4ba410f009648a1cac0c851bde40955fecdbd25146293fa63ee99af1";
+  sha512.doc = "90a9668373a99610db35b748aa44b34cb56a0c02cbecf483e93af106b0ce2745bfc03aa2d41eece3038e9c9ca0b1e1428ea38c2606be6a607dea01d4aa46a5b5";
+};
+"latex-bin-dev" = {
+  deps."luatex" = tl."luatex";
+  deps."pdftex" = tl."pdftex";
+  deps."latexconfig" = tl."latexconfig";
+  deps."latex-fonts" = tl."latex-fonts";
+  deps."latex-base-dev" = tl."latex-base-dev";
+  deps."latex-graphics-dev" = tl."latex-graphics-dev";
+  deps."babel" = tl."babel";
+  deps."cm" = tl."cm";
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."tex-ini-files" = tl."tex-ini-files";
+  deps."dehyph" = tl."dehyph";
+  deps."unicode-data" = tl."unicode-data";
+  sha512.run = "a00c38a2e40b62c40613b73ec6f71344453cc638f17840984a95c66de4a2b42fc670710d5e242350e6cc4245c29b5cb35ec0764e56d5c8e094e841c29c6617b3";
+  sha512.doc = "109e4028793c4c0f0db6f7c7d004b11d483ef35cf0091ce50135510cbadee2069d6203f3b6504cf50f43f5ceea9a409dc47707cf31dfa6cc7bb013e6c7ccc781";
+};
+"latex-brochure" = {
+  stripPrefix = 0;
+  sha512.run = "de98a91947d5cb919b6a2c6e6a87f63499c8c5975992d039bb8d2a4662ed597cbdad99668b006cf775f71af936e5ad285958b48b57eac61783460fe37ed76298";
+  sha512.doc = "f057b86b61ee1f50430cdb83a56c27896e052047bbc93c4f09884b7d76f16f73cb1b570341faa2b8c771c0d42bb4d6450b8715c921fe866a57727eb4ffdd329a";
+};
+"latex-course" = {
+  stripPrefix = 0;
+  sha512.run = "9af9e8a2ff7663ba89538a93e45e27098451be4ccb9380b0deb002a9a42613467184b5a4d38ff8222c7ec5e3c722128222976aade12000c447ff7f8ab42c0656";
+  sha512.doc = "772ecca6e71a9af7c31b9c5fd48cce88a7dd880a98b0885e9e5084247f64049234a8d123fe985e247ae706f1d0da1f58bae9e62082defe1acf9345bc252b03b7";
+  version = "2";
+};
+"latex-doc-ptr" = {
+  stripPrefix = 0;
+  sha512.run = "dfdaaea00e167fa3e4183b6e6a223996d1364707a7cdfc0bb8cc76d02a0c5b3739d8171979dd80540edb571cef84167b24639b265349fc9646d5570e6c48dc61";
+  sha512.doc = "e5ccf3968aa02ecdedc2a64f0c53b2eccfa3c4df66da5255068248de013753ec4be67937d9c41552f302979edabc53ce64d902a9f13e4174d67f39909adf9735";
+};
+"latex-fonts" = {
+  stripPrefix = 0;
+  sha512.run = "98549dd0c7b29511abc3a1a6b6803a86af0b48121d47e292066f3b67e4b5847efbb7025352c1ec996778c7ea3a5cba552385e9b4dfd6ab005d716f503e37a26e";
+  sha512.doc = "4d3162776a17f31caa8e6a0fe05eed9447b681d77e653371cb5fa5d8dd2f01bddddc9f95ca916f233c11f8ec7d15e02fe575dc953fdd18c34ba877829a142bea";
+  hasRunfiles = true;
+};
+"latex-git-log" = {
+  sha512.run = "7277bd2160cfbab8daa88144b384cd03647192d516114d692af232906a39ea44ae5721ff0b935e7dd6425ec5514851220787827b819af71ae3f0c57b29d0d924";
+  sha512.doc = "34c96eaa3950f9577ddf63fb42aac51080f8e92c55f02b217d2b680353f97b1fa6bcdd59158fa9e81d48dbe63d35859b52285912ceac4b523a8ae34ec894a1ac";
+  hasRunfiles = true;
+  version = "0.9";
+};
+"latex-graphics-companion" = {
+  stripPrefix = 0;
+  sha512.run = "3148a646539db3622096f9aeefd7ca2d44b0cf83cd454673893978897d07cfe7107b8f5bc745bc6b60734d4ad3429be1ffc2edaa8c9dd1721b41bfe913fa0dbe";
+  sha512.doc = "ab9d885c811af3964e8cdd8576349059bd45d660e6b9a7e931697f7c7fa5282c725e044817de8f2648ded59519d1592945e0804ba7cbe0054ce2bd4d44606af5";
+};
+"latex-graphics-dev" = {
+  stripPrefix = 0;
+  deps."graphics-cfg" = tl."graphics-cfg";
+  sha512.run = "92bdb4f11668c51691cf39f65a2998b8fe9eccec0928eede30c38a85faf3cdc5f8a97ecebf871a15b1cc89655217e7c94557f9a7a83945e900c126b28a94d950";
+  sha512.doc = "5c0b12fec212b50cb444ee873d0e09993bc0b969cb6118d9cad02ec3857cf89a91c0fb23b288af7c3d21c3dd95fd979740952bfa8557ca93e3a76a1815a7d22f";
+  sha512.source = "a92a2b7d1a6e970e4be733697c4e9d00cf7cf8ea3deb19e1b076e3967ccf2e00828054001de482db3bbaa7e90f593d3e199bb9e8c77b07bbc79acbb78588ea74";
+  hasRunfiles = true;
+  version = "2019-10-01_pre-release_3";
+};
+"latex-make" = {
+  stripPrefix = 0;
+  sha512.run = "cb48ad252c77ca6271a527718872f95f28d64664aa62aca9ed11d73b1fdf29dec1cefa6c2fc07f0c95e16495a0a2410b59087e88a889b1047ce24bff71495ee4";
+  sha512.doc = "bfe0143040544987d9e89827b79a847657f9b705ef3607ec2757ab7d5a8b4e005c64060ba5d3cf4066c4f21e622cafaf5e7c442aadd53f6583230e7f276c317a";
+  sha512.source = "c437e31d4cb28c8ad838545aa0afe053318986a8fd9efb8dea0500d544b94bcb2a6b89c96d079ddc640477bba845b84f7f1fd8cf86ad689c04628e274352738b";
+  hasRunfiles = true;
+  version = "2.3.0";
+};
+"latex-mr" = {
+  stripPrefix = 0;
+  sha512.run = "3c5b806bb100cd7280d4a7e97104f21b4260372292aba60264f88fe9a7230fb42365ffea15a948d4334f8f74683d9a79ca40cb9b87c49066d61a2b0f101dfb8c";
+  sha512.doc = "6022c2e3642928e716e6ed2536c849fade08dd26138312567b139a450032ec75d029ea5f1103bfbfdbdb7bec4b35d972c08e866da8d5eea89012b7a1fc414678";
+  version = "1.0";
+};
+"latex-notes-zh-cn" = {
+  stripPrefix = 0;
+  sha512.run = "5e5b3bb01456fec3dc22cb5d0d4f521b4d4f5f8f3119fdd76ea9cc55a70a2ad8a2b72e36471894ee448c1d40d887d20ac8fda39c4a3fe2cd111d2850eec12071";
+  sha512.doc = "477df31445a2991db3c2b8cafaa97662d722f3f7171c2f756cf025717cb3b896c1773adadbc42c22cb360f7542a0e658547f15cd71c54e9b79f76fb1e2097e90";
+  version = "1.20";
+};
+"latex-papersize" = {
+  sha512.run = "cc3c6b563e16f70cab0ec113068d7f870a266c090ef518c06b4e3eced8e8fd9cb7aaa3544ef362ffd4af7f1d033a104daa48d47416061c3a73ba8329cc9a0fbb";
+  sha512.doc = "662d7a890978bb772a79db7a1d406ce6958970f6cdec352f78347d9ad8df47734ddae444370fa9e93582d4030568cd516ca32125b2d1e0f60aac3ce1c9b930e9";
+  hasRunfiles = true;
+  version = "1.62";
+};
+"latex-referenz" = {
+  stripPrefix = 0;
+  sha512.run = "b61dfd5317eaf0ef7add1f80506492390d5ba0c01480e83d384e60ac0aff39710945ab81e030e7882fafa77a2913d88efd31f3cf05729ddc09c63243e825260f";
+  sha512.doc = "e71abe8a8384be7b0e343657e992b7703d30b38bfcb1dfb689954bdf84581336e099059bdb14af464c951777a8a6809f1161955868dd2f3b219fee3d2046ef94";
+  version = "2";
+};
+"latex-refsheet" = {
+  stripPrefix = 0;
+  sha512.run = "ea6751fc09aada1b8ebcca08ecdb10279b6df881b3b373b04e8c238609de92b4cdc4f1e7321f178b15637c0b712e9781317af07030f2f9297a3ce23a5f46cb32";
+  sha512.doc = "77149dabb1fe5c4a46591b3b307d02b2e2b33a07267afcdb44b77a2a823dcea9ea76b4be5ddad530151b638cfbcaf5d87ed0fed59a9e8ed99acb0895717bc71a";
+  version = "1.2";
+};
+"latex-tabellen" = {
+  stripPrefix = 0;
+  sha512.run = "ca056b194690d7b71429022c4b80b9d171cd7aa2e580921eed556a11fc2e3162106a06d61333dc69495d801120c35528fdc74b9c282cb6baa3391595e5f28d76";
+  sha512.doc = "7f3f4ee26f1f9f6bd6d27cbde4193d8e2607a34ee2ebcbc44934b17673b60375a566828461ce672fe8d4404e32784cc62a54b51873645592079aedaa7c82e081";
+};
+"latex-tds" = {
+  stripPrefix = 0;
+  sha512.run = "a688c4e6790460f3155110f31c36c240fc1d9e9b8c3b2641a1a186c54d7939bbb4f779e80cb125d34036b64ce8da26d3460365d34d23d49067bf8438816cdaa3";
+  sha512.doc = "cc4928fd82e07cc0b601c702444a84475978671e3c86280cc8aac334ca562f3841a9f8c191bc174522f5c00e45cad519e6ceec1344e229f4b125611f60e43766";
+  sha512.source = "0f1b88a565c417a238476ab3c91bef40d265388458473f1ff3b4dd5e6b6897e8d8cdcd15f9eab17606aadfd5ce5ac978b81385618d8d3906defe4d13d438f72c";
+};
+"latex-tools-dev" = {
+  stripPrefix = 0;
+  sha512.run = "67afc0ae3988c380dab97d9d9af8667448df0e15aa0e403f6db7e4699a87bd74522bd396ae924af3d265dadc9825a6f5f22e47bca92cf3dc07e7b243a97fd78d";
+  sha512.doc = "40eee2b3183fe5c6ac1e7af831c3119b650bcdecfd596b5cb5b8f4799f886829e6bbdcf042c027f3d4d9713741bd2017652551c95e02b2c4f0a8464efa1f2f2d";
+  sha512.source = "2062c2d699afe1c5a6ed1a8b9f3f09ecff3bc2f7d36b13d6381e48b27c25ec8539f19dfe6383a504462bbda8184fbce0adc555efc441f73092c84c3496e16679";
+  hasRunfiles = true;
+  version = "2019-10-01_pre-release_3";
+};
+"latex-uni8" = {
+  stripPrefix = 0;
+  sha512.run = "1e98eb60547932eb218f30cc713b94e8c7ee5861e66cc600b01f577a37e318a5b440b65c2aef1c770ef94bb4c4cf86d5d1636943de60f78049d2286a92ba5d81";
+  sha512.doc = "201de55826ce4911153f079e1107e2f4d2399d3d3cca95bc669cd958d09839ed7de778d644502cb6af8429818834027c9d3f3255fe58f95c985d1a96e4682f22";
+  hasRunfiles = true;
+  version = "0.03";
+};
+"latex-veryshortguide" = {
+  stripPrefix = 0;
+  sha512.run = "239b6ae896eb109fb61aaa96149e3b3962fab250a4e017baf81da0ba7836837c1920456eec8fd20999535c96fe415115a621e73e639cbebf64cc2b14989c93cb";
+  sha512.doc = "aa58ce07f56dd819b6a3b618a518384547350a4582828020f5b45752c1dbb88d5f36c5b5bb831129352489bba8f5c19f89d38c99585da9253f01311ea63d3232";
+};
+"latex-via-exemplos" = {
+  stripPrefix = 0;
+  sha512.run = "a56c986dd52cde8d03689c74453b2491d2ea2d2d187ef559facdf9b5ee4e00f5c28cd0934c9bfc0a9955a33cd2b221fba334bfc80af7207638c90ecd72404bd0";
+  sha512.doc = "9db3b7cb038014f4bb01ab13cb091a5d01b1ddfd2c9a6edf176ca0eeac7e15a69f466d8c54bc9c3d3d463cc683eff943bfb60d157121aa83b794f49a43c8b1b5";
+  version = "0.5.5";
+};
+"latex-web-companion" = {
+  stripPrefix = 0;
+  sha512.run = "5f45c7f74a0e97b938009ada69146875e141edd556165b62185553b0ce5f590d5ca6f93a875dae1c546ebc788156d5cfc69c46535000adfe6933abe79a2fb06d";
+  sha512.doc = "a972860f65d763c6fb45e9726e5dd7b8234509b90634f45b8b25e090da92d0ac577bf8b33ea7b0a0f91e4e5639bf62c07086dc36708ae697c1e16e644acc83f0";
+};
+"latex2e-help-texinfo" = {
+  stripPrefix = 0;
+  sha512.run = "dabdf3a20bcc6740b7feea1c444b2423dc54a97d0118411d44acfaca31259782eb49bf68b144ab553a9f865ec47557bcd47503b1f1dcbb69ae3302d94bdce715";
+  sha512.doc = "0a3cd8f22e15709b056d6ace9fe0c8d348ac8bc808fe8cc98498b3d14747eba9f6e9838375b0ab8226694ac8dd45027c62ffc1949c3e1a42f9f182f346df0123";
+};
+"latex2e-help-texinfo-fr" = {
+  stripPrefix = 0;
+  sha512.run = "6023d1aaf419519fb35f916be296e9681dd2e2912b35d92da5b59d5ab279154eb71813f49b159c01bad045246a293c8e6552d2a469cb69916d169ac1b60d9daa";
+  sha512.doc = "bb1ad23b5a46e00193b4e807aecd0a439d1d5f7c15736e748b002168441b5c7fccbcd8f7f6361a1c5fa3175344c9aa1c0ec77e20be450e653a0354a87643b9eb";
+};
+"latex2e-help-texinfo-spanish" = {
+  stripPrefix = 0;
+  sha512.run = "65faa42d1ee01399e1f8c34cdcd1a5d1ce6841f144e7b582aa4c3586ad1426d879c60427944a9524f16d48c8340028f1929dddc04f9ca4f8e634ffe29eeebf72";
+  sha512.doc = "b6f612ef87c52c9b67c65ed79f8b2e4b7e089baff3da617951288b57124d63f53acd4f48edebbcd7f27855b3bfff14dd00aa5a2c277b4f89b8f49426abb49c6b";
+};
+"latex2man" = {
+  sha512.run = "9ce1870958d7de7625fe73dfb735488d2512b048c8c06fed3f87255db0914080675017d24c88a97ec71ddb9cfe6f5769ea378f099d8787e447837a1ff5167436";
+  sha512.doc = "214685e6982c7a9c694d74a73d37c58f3947d7304637d2ed44fc616cece6026e5d02763f26e280ab21212d18a962c31b4ac5315fa840f10bf1efcfb782f4dd2a";
+  hasRunfiles = true;
+  version = "1.29";
+};
+"latex2nemeth" = {
+  sha512.run = "ee82b11dfd3ede3b926a034ce8a7f46ae2bdd065f648fc0375a62392a8be605e391c64726eea03efc439b7a01fcd3cecfd70106335c72927e45c70ef0c8aa48f";
+  sha512.doc = "a674eac6b80811890433c613f7ec9c6fc4667791c5b4692606e88d3e38ee59a3b68951e5f19b26d2b9f9de3b79002d17f4c539fdcfce37b82c3dfea5cb811086";
+  hasRunfiles = true;
+  version = "1.0.1";
+};
+"latex4musicians" = {
+  stripPrefix = 0;
+  sha512.run = "a37c75d55857e9680b8e4b0f59f1889f3b5198477212ea531aa6bbf9ea11dbae06fef7fdba9e706f016c6c0618eebe4ddb81ba73b48979683a22592a0adb119a";
+  sha512.doc = "738c2c467d9df87cb1eccf0442b5c94a97a3c4c2b329d78d80b05d2adf9e3be11aaf2fb407ebc29f07e6455e6533464d981ae65122b080aebabdfaa29cf71b61";
+  version = "1.0.1";
+};
+"latex4wp" = {
+  stripPrefix = 0;
+  sha512.run = "64ce122ac380c4f2c06d3afe2cf1aa2af2dd6d29fc451ced9df05206c97dc0343e6867d770d9b4e1c0425ea41ef89cb2d0a003d43cddf82ea19a7b33d383b7ca";
+  sha512.doc = "e8f22deb966044c87e7414d828ae3d8bfabfda40bdebb4b26b712692020c785ad8688595cced27ea5993c8b8f34f7fbe0cc86180d2ff8bfcc44cc009fd52e936";
+  version = "1.0.10";
+};
+"latex4wp-it" = {
+  stripPrefix = 0;
+  sha512.run = "691d8936d71ca825da3a5fb193f8f7067480981b1b9bc93100f54834a7f9500e66785a216110cb1eb5cdd41b538333b693dab8e0e855e546a3eab90c43c48630";
+  sha512.doc = "c0c527bc7e9e71038316be5c6a57f4200ed69e7ed6fa0f066923cb14d14e20e90213cf0b989d3ba746bdb3e2263cf1daba56db3073017a0d7582e40640d35fd3";
+  version = "1.0.10";
+};
+"latexbangla" = {
+  stripPrefix = 0;
+  sha512.run = "97e4a88b3028f3836a82c80bee739393c0ebdd219ac3b78acfa00f84f5b5857334605ee4719c8dd40d1cfcb44a4f9f821d711401d091a3ab46204d2457559fd4";
+  sha512.doc = "dd88aa9630a08992348699e71c1e1ac7a697c0279a83daa333f0bd0c098d564b730f7bff829e7489000ce09331c9f13a804badd4bc253dc181b09646f8c0b991";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"latexbug" = {
+  stripPrefix = 0;
+  sha512.run = "ff27b7fdfb53b0c2b0ac4b5aa12d98e30c09bf50fbc7959930b35721924bf52c361581ddcdf8dbfb03571f676ae9f659de2bba137b937d37ec11a0da2bc721b2";
+  sha512.doc = "5e86be0719138bf111b6d655b2aed620be6a490f772906fa676038f2a5f13875d3ebffea2094f8c9001d2e70334002498d8eaf5ef96f14cf8458ea0b03bf8723";
+  sha512.source = "7c00729fb9c17f3437fa1839c0ac12b51407c4ccfe2566b0d0a19701cf124583750c00030f359b70cf0280eec29f55d03d0677628b2b149f37219e880d56dc94";
+  hasRunfiles = true;
+  version = "1.0g";
+};
+"latexcheat" = {
+  stripPrefix = 0;
+  sha512.run = "530041d286048809968d91b20fd40c5ec41eb440fec25bf08f92af0f0fd5e1481a1344ba3c659da4477de353d222f3cb160d75eea2241ccf19b05e63e059ed6f";
+  sha512.doc = "28abbdc3b53c245b0cfb6ab68549661a72d37df004a5c760f5021e91b1df892b02872c7e20f328c7dd4624edff96f3b1fadfb46cf35d080c6b7c5635dc36adfc";
+  version = "1.13";
+};
+"latexcheat-de" = {
+  stripPrefix = 0;
+  sha512.run = "84de8075c1ba86467c8b34ed614462953ca8b9a237bb84453b2f9a1482eebfdb628c3e460d38da126416cc111387d68d3f479c5806ecbf06d079e47c35b88ca6";
+  sha512.doc = "dda8002178b55e155f7ce1f49f57f928b6c5097007daf36aa473c1a2d07aef4c3ec5e1c238537c0531731af0cb0d51804b0c0310be63954f112f266e737c7d37";
+};
+"latexcheat-esmx" = {
+  stripPrefix = 0;
+  sha512.run = "ab9965189096647e8af9aa58a937fa15595bed32055b3819bfd12334cf60e01d18b12563de8169ea28e3c0a7768864e51631c29bbbe47d45e09ffb2b87c5d524";
+  sha512.doc = "a45f2db2445e2daec8b31e995669a189c1d201f457e06de7fc2a85ad85686b31fcf70040e7840e1168e29b2e5caf796c45b6ce934780fa5982d0750438263606";
+  version = "2.00";
+};
+"latexcheat-ptbr" = {
+  stripPrefix = 0;
+  sha512.run = "e50cd94941704f1a620a7411624ffd61d47aa4ef2944220ef0bfa9fbc428d8ea46be17bb3b18b30d645dcddf3c8091dafa9532f809dee7af230e2133c86b9bf5";
+  sha512.doc = "00369fce725567a85310afd3063a4a20e670d8a0c57ef7e4515579ee0f91157f44bac2471b076c2ba51253e2c172447cc4b915877d80b0c43874c4e125f5f9d4";
+  version = "1.13";
+};
+"latexcolors" = {
+  stripPrefix = 0;
+  sha512.run = "b22521df5572411a33ba84b2d7560f0735a6f3a3bab0c6d7ca460e19333fba20ec8852becc618274ca7b7461fac1c42d0e6ce7fb9b7e4349c74bd05e8e1b5faf";
+  sha512.doc = "5f6f26c2ece42c07b2b2e634308a2a417e12a105d9856d630f483443825615d770ed35f7322f59904b1d8fea9425e0222fe9deff27451a5aec52fac39eb9369e";
+  sha512.source = "369c0cb2c019ef227c41d38a193f82ca1417158065cf6f0f913d9e4bb7030e6ff3b34fb49157d3e81b9917bd38db454194c3576009be76d9293b365e59619a59";
+  hasRunfiles = true;
+  version = "0.1a";
+};
+"latexconfig" = {
+  stripPrefix = 0;
+  sha512.run = "8251c3786d2dcda83fcd36a8f746e2601c72986e6c27396aa6707dcadd16c0bfbb65adb9c7f28035b019618b046c1b3f386beb206f877bad95ee4ff85cfd2cde";
+  hasRunfiles = true;
+};
+"latexcourse-rug" = {
+  stripPrefix = 0;
+  sha512.run = "ab31ee52beb0fe100f4798e6e42673d5284f6f85ccdecf8875f4d058928cab7363507f8cafe6c3c6f437a682f3e0017923d138ff671eea118ca8d2339627fbe0";
+  sha512.doc = "aeaeeef2c43a5ddf782a91152c9e2e18f00d9b3e18b7023837920a53eb390652d7ea85afcae338519a00b84a972a723eedd7819e73944ef7015f8c028822fea9";
+  version = "1.1";
+};
+"latexdemo" = {
+  stripPrefix = 0;
+  sha512.run = "d8b6ceb9aed4b2edbb4fc9e939dbc2dc5b6989fd04703dce2e504135d2c1bda46c8dd78e995d41a7e8727563c72b4f77979a52513ab0d49d8c95f80246a94fa9";
+  sha512.doc = "34a0ed1b5e9ce5f2b71d67384427b4a7d69439ac4eb5113e1b8e270618164f883b05bf7cbdff9da57fe2bec7cf43bed844ec77b90da00efe30fe9061b3ca0339";
+  sha512.source = "7416fda5909c8488b2e7aa6fce9b1c0e747577e82a2fcb44df617c493e768b3d86310b1817ccfd96edd22aafdee45d32eba1495949c44aa9c1e252abece321be";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"latexdiff" = {
+  sha512.run = "64b3c9906ade859568f67b235192ff29b70cd4ba94006a86cd1f7872d88ec7cf274fe89a5d292737d86295d7f92ff9be7be46936192eef2e5f99aabd116e9479";
+  sha512.doc = "665d2029e8fa0eb6c1fbf3f9d99d6ae92e43e422bc59da6cc64b5119f3ffc46c6310acf8a95861ff3bc4d5ab6ac5fe78290c0454f9bcb4ffe2e815872f6b8c55";
+  hasRunfiles = true;
+  version = "1.3.0";
+};
+"latexfileinfo-pkgs" = {
+  stripPrefix = 0;
+  sha512.run = "b08fbfeb87299273a0e087e7cfe0e9df9bf50b95503a3110b9b329a9a41931f34f65661e219c6adf377e3448536d5aac8199799821f7057a67a4680a24f30ad0";
+  sha512.doc = "af5ff5d84fbbaf299be548d13163c8e5e83b73ce795bc1236a204f4025e34d9ef0c587702ea5d6b234791e16e7cd1930a63f3839c20caefad7610de125a583e6";
+  sha512.source = "b204065af499edadaf997f6a6cb1be474d02d03c1e37f94b33dc7d290f934c4a453fb648588482821f52f7b0b80f5edafa9a034f8eb2a9287ef06e753b8c1e96";
+  hasRunfiles = true;
+  version = "0.22";
+};
+"latexfileversion" = {
+  sha512.run = "3a017b8a367864358370f0063957c301014df2aa039566ef33ae78dcf428235ccc2a88e19c917c940e186371e2c0b747887cb04e7cb78b9a04ac1720dbd94cf9";
+  sha512.doc = "b1df01f8bc7daed937cd20d1ab7cce443a3d1fbb58e04cb18f0c0b30ef0795c988cf51bf49ace2f960c173f6a95fe982ee9d29d7650dcde21784c788165094c1";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"latexgit" = {
+  stripPrefix = 0;
+  sha512.run = "5076ebf74361a6997536988c5204a72ffd761a40c33acac03bf2a104bfac3661c91b320f47bd264d607df7dceff41a18670e7c18cf19cbb27fba1d5f273c58ca";
+  sha512.doc = "dafc932c2d0184c848b7f7ca549a300f273fc7e358c6bfbc6b5698aaeded12071a722c856255889438e1dafd1c64d6c2adcd60766f8e1a1652a74591d5e74161";
+  sha512.source = "58097f88d70518c49bb0900c595eea40241a600745a8fb8a9c6f47a3deccc97aacb195305ec48fb54acbb95324b2ef27b35467bf90c27c88a960efd6d579a0ca";
+  hasRunfiles = true;
+};
+"latexindent" = {
+  sha512.run = "0aa45877dfacb861ff325c13518abe9fb15b6a07a2c6ba93fa7d8edf982be40c26d46c439875488fa468490e5a74e87cb214dba05346a8946addaddddb44a3a2";
+  sha512.doc = "0257dec625380e5c31f982499738d67c0294acfb113f6c0bd6a81b6f725e400853405a60829290e3fa4626625a01df0e838d6d9c07fe4caf7a7949cd22ab690c";
+  hasRunfiles = true;
+  version = "3.7.1";
+};
+"latexmk" = {
+  sha512.run = "a019682dd8fa0c9b818a107cc55266254cd097d92fe2b05cd241f9bd183a3d2fb59d49e9f80e030052766ea0834af5c47ac5e5f7cfd59be33c1e99b0914e8660";
+  sha512.doc = "9db1bd349d393718e5c635ab108f77edea8b49d113104289b49ac2a2e860238ff0b82aca4e1e01d79ac005464afc9d188a69d534517a5f19303d58b3f13fd70a";
+  sha512.source = "1b74bb039d88ba228b71c08f500196de0fd15cf787f0daa521db9121e8b57f5a8f398a9636328210d685c35f3b119a0bd0ac02f80610b72241b4d86b24532dd0";
+  hasRunfiles = true;
+  version = "4.64a";
+};
+"latexmp" = {
+  stripPrefix = 0;
+  sha512.run = "e63d213969434907df862dba2684ea76f8603a8283764ff431edace0802a61cbf3eadea6a532a21cc83d722359ac39680e716a24859b85f526dcfd809ca319d9";
+  sha512.doc = "7668afd5cc1dd365811f8e4290392037adcf5f3bb220e062588a446827f1d39510137185699d4b667f2b452809704d3c08caa889bb52cecafd0e190b0e7c49a5";
+  hasRunfiles = true;
+  version = "1.2.1";
+};
+"latexpand" = {
+  sha512.run = "9248c63fa16b9f9ccfb0243bdc6d56bb80b9887e26d8f1cae53092ecef94f046f554d8c5b9ed6cacf7202dd5be212472f8bddf9eb740f4ce54e521c9baaf75dd";
+  sha512.doc = "faf4b269446a008ba77d37d8f51ab123171a3cc56d59dc6fae9c5274833e97276c24392064f6f95e8e8eb5b88717d1c4433a915208cd81788364d382aae200c5";
+  hasRunfiles = true;
+  version = "1.5";
+};
+"lato" = {
+  stripPrefix = 0;
+  sha512.run = "1243f2c4fdea9ac510cc99bf4afae173378b47caaadcca88251b53badc5f63bc465e19247ab10605436ca07d96ba4966460f35d8336462950253c4eaebd80bb7";
+  sha512.doc = "28053a4561422f721c6cb400be57a0aa18d18173dd5c9b46b806dbd4c8decc5eb65aa5dea509b42909791bfed7a2a8772d3ba9917d3bb1f6fff742caaa5fdbac";
+  hasRunfiles = true;
+  version = "3.3";
+};
+"layaureo" = {
+  stripPrefix = 0;
+  sha512.run = "849b0e0fbd15b45cb31ed4856b0eaa190c26437a1965da2c860af62b65cbb000b590320611e96c5a6c4cc63c029c31fb352ec44d96e0704eb52c70ee460abcd3";
+  sha512.doc = "b4333e1361b352689dfd67e13a694a304449eac61ef8189957356bd94e5745f4c15fa38bc21219c8a21805dbecd44a51e719bbcd884b850ba1276759bdebeb94";
+  sha512.source = "054df6aade854320987e605aad0a641778336ef918ef086dd097db8d1a2fc8d623f0335aa4ffb98942e157438ba06b6e75411b48db541779fc2a6e08e5b1c594";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"layouts" = {
+  stripPrefix = 0;
+  sha512.run = "9db14862ac1bea22096130ddac071a9b058e4cc1309917d2f8e8c536f280d2f4efc9a8dad9a5dbec0824b94f92c290e82820ec1628f0e4b72aa8fa617b72d981";
+  sha512.doc = "aa6639c5ca0029efda9af523a0a075ef2b60ae9e031bd68232ee03792bb2f7452e2201e7223735e83b7979f2c057674fcedde4ed416254ab4b5b8a6cd9bb002e";
+  sha512.source = "1abb95aa76cb3dc55d7426b8f98923662b48fa91ae8e5e2c3c01fb14dc28c8ceae90c01c9a22b1f59103e56d1818675d6da6223be6771083562ebc50ceff07b6";
+  hasRunfiles = true;
+  version = "2.6d";
+};
+"lazylist" = {
+  stripPrefix = 0;
+  sha512.run = "5ceccebce9cf3ff0574c471141f94b919d14a7faf1b5c7b5e09eb079aee11cb95bdfa7d8b26fb83e99875818d842cbd64733ab7cf7b7024f04f661f732a3fb04";
+  sha512.doc = "1ecf491370fd7ba0fcd3ef1ce11df768509c32bc9bf14978e3d6f36e39094570144b897337bbc481bfeb8b74354b36f66d561a33e255ba50aae0a5c42f002e7e";
+  hasRunfiles = true;
+  version = "1.0a";
+};
+"lccaps" = {
+  stripPrefix = 0;
+  sha512.run = "98d57c77a3ca19a067c04c9cef06d632e56f42daaa70ec729a7cbf3ff68ef3e7ab95e1d0d25cf853d85dd1916668dd5601ba6feb889d1eda344b3ebcb31da333";
+  sha512.doc = "ce14177476624831de64a12ef858516a2df28a3e194748a1c759d7a41743a93e03a7d96bff3acd85f9db0f5d4c96a53aff7b73077e131bc6fa807c8b36844bef";
+  sha512.source = "cb0f4f8400542d9d15e55dd8d9b55ecc1aad60dfda5de9ab342e8e02d075123e9b32b1c19dbed700ad8626d754a11be6e694a86b6eef757db3a6f47f9f5a22d8";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"lcd" = {
+  stripPrefix = 0;
+  sha512.run = "829c0fbed639619707023c1df1fa511d584e4805aa4f26b0ba5e5c5dd85d927901f4ad949e4a171d9765995c9ccfd34e5d45aa44dfef2508d5ec84c27712e05a";
+  sha512.doc = "385df3ec85fdbaa579b15f0ef0fa2347e15cb796a84265b1cc7a9e2bc520c0c98d0703615ed28c68ce5ab7cbca6f2699502ec26a31297c14b0039dd4b584fd86";
+  sha512.source = "1d788d589c959240c92775455ee3272b8014a9491f2299c4d6f4d9aff66681100a6352bfbb644e0c4cb770e27152bb5b3fdf0f347aff489c172189c542a02e58";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"lcdftypetools" = {
+  deps."glyphlist" = tl."glyphlist";
+  sha512.run = "90e2fd4cfdd5b7dcdcd3eb395630e534220ad406135acd251d9c2dd35d7078bf0d781ea9d7019a38f698fa045d6f03738ae25bff80df12218f8d64a88079835c";
+  sha512.doc = "2093330ede2753b383d57454c9fade7b89915985be4168677081ad2841ec1735c9d5ebefaeb3d53f49721d81f39d55ea01a42a0188ff79a986fed7530f3220e9";
+};
+"lcg" = {
+  stripPrefix = 0;
+  sha512.run = "6ca6f347b6ca4104ec376554ff7ba5d19002b2b4174fa491f3fec87d6c75c3ed11c1d13b9e7d30e6c086b2a12dc3013f21ee10b482c95b177f0eaff02d953fee";
+  sha512.doc = "5674612693481265f72420ae10914329029f9af2f526e6b59ba2614d4d2994a0033cb3393d2751064987698f819cca8e0fa3783555db3fa6cc5849f337b1cfd5";
+  sha512.source = "b26dc9e706b14c304a282d2b5abc2d0fdb81799238c3951badb6152f8c83f6a2ace579ea0c2fb782bdfe0d02448cf716e77c3114ff0be594b12bcabbe138b17a";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"lcyw" = {
+  stripPrefix = 0;
+  sha512.run = "324a9eb8f1a68124888ad7d4f35dd0446c917e643e2cdcfa041ca26b719ccdc541b9b89857aa05dea2d599912c506561c762d288ccc86d637fd927cc70bf910d";
+  sha512.doc = "c063b6b5d23bd0a7197f5bd3121c93237c24f0a77fbc72cb370a7cd535282151731ef03098c36d8152707c50808c1b996fd1adaf16185bd3d0e3589e85b67981";
+  sha512.source = "5303052e625fa1e07a3e54a682a11469f0b14697fad5658f2eb6d0266dfa25e6f66bd752265a3ca99dab138200711b48cadb29d8b1a1a878a59f5c5e112aa860";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"leading" = {
+  stripPrefix = 0;
+  sha512.run = "c326950e6c4b07782148ee4c9ac5b22f7e42512e0bc6e5e1f75be6ed757ca90ebf2bb6b30b91ceaac32c761d595ba5799f0f40ca15954f150d481ea366f1c72d";
+  sha512.doc = "3ede6910ccb0a30c3ae9c78b86cf00cd7e2c5d8905b648861d2113d0af6225b2ffdc30509a72a5f69dd9e1164525c3225cd4ecaa04471ddf5c346a862fe097e4";
+  sha512.source = "b42b230efc2508f4b3901de791424251c6e0ff003bb342fa11ea282f46b2dfd5c68a63c95fbb9aee146839944586218a3cec0ef182575a9760d3ed3f5924d78f";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"leadsheets" = {
+  stripPrefix = 0;
+  sha512.run = "e7a84348b6347962fad95171059e968f35e7601da51ae6fa278add1ed4262bd7ab84bddad9b48780e7481056bece9c311ed1cc25e77c57f9d9e0649abc9197e5";
+  sha512.doc = "dea48a9b053aa67f6d9e3dcd3560ceccd104d743a5797320e76d43cdb8709afe7236f7ac8ef23dc9175268fe57c97898c92d0dc329a4e3151b017544fa537521";
+  hasRunfiles = true;
+  version = "0.6";
+};
+"leaflet" = {
+  stripPrefix = 0;
+  sha512.run = "b819cae65ac9f38d7170f4aec4f94adfc547afdeadc345091fad170def744247ed46d653975e493aa64a28117e89a5414463f693a4b2f7e28b9bf998b8859915";
+  sha512.doc = "d2355c9b93ae490f4087bca09ed3acc815abb714fa7508b64155d8b5994c967b7296b79f8b3d68cd59d082d7d3d7c618c0d4d0fa50df23724ed50718f0433f8d";
+  sha512.source = "38cdcd9b452afc6ff98e946d162119615e44f372322664894a479130035a2a05520b7b1e7f616f17b04914c5caac6910ff18fd71c06a31dae9d4e044c6106627";
+  hasRunfiles = true;
+  version = "1.1b";
+};
+"lecturer" = {
+  stripPrefix = 0;
+  sha512.run = "e0c217ed089dccb7cb526e62456bf72d186bf8cdc69b2014bd4210b6f1225277d1afb514f381e4581727900c6ebf34780bb4df01c3682580cea0418fa9caa1db";
+  sha512.doc = "97892442ebe9263cbdc8e35ecbc2f3acebdaa886e5fe814bcc0ada98b0cecd9e140a0d103adc9eb0aab1e5e48e9d7f4ab42e786d52f8fcc96d03db17c51fc17b";
+  hasRunfiles = true;
+};
+"lectures" = {
+  stripPrefix = 0;
+  sha512.run = "54e2b55fb43bf548a0d20dd6c98b3478cac25bff27c013353c1e0b693990bd3afde432d07ec4b0f48054f5e923c70bf5aa60ca5f5d79abbf12d36ff7949948e1";
+  sha512.doc = "45788814da746bcc2c00f3c33541fbc4d0114aa03676971b038ec38686d833e698cc1e255aafcd06d6d5029f835e93674f0dc544a8ef267703ecbcbc96da64a3";
+  hasRunfiles = true;
+  version = "1.0.2";
+};
+"ledmac" = {
+  stripPrefix = 0;
+  sha512.run = "b465117d5634dc4eeaefbc2c12a4d0fb892f4a27ed66057938701fe51e4dedfb5b7f28d796145d89a59b2667cf61c7175803f72e5970cf81244329130d173136";
+  sha512.doc = "7e7fa49106457f13aed11bcf80a1e38f000f5161e9a67bdbb174371db63a3953109f26da3cef8781d2c13abb4b86d5cb0c2b1b41e6f2cd3584512bed1a67cf6a";
+  sha512.source = "918f3009f11e3fa2b5531c5cf8ffe9d835e331793abe1241f01f01b14d990ffd1f3aac6ec153b17f77099f38c284965209cff8f9105c340bfdadc85f78fd5d5c";
+  hasRunfiles = true;
+  version = "0.19.4";
+};
+"leftidx" = {
+  stripPrefix = 0;
+  sha512.run = "a01d085af4ac4048b5659e7f2f1692dd787b7c4cc9a0c06acf9852ad9d5aaa9790bdad6db7a76ec2f1a268af520ac35975a7fc55ef0d6373f244c85b8b6e116c";
+  sha512.doc = "1e372c7d307b4bae8fc5673c9654785db1fc7c510e188e7e0945e01dd502580479b7910e19132c7b8b169acf7d9de84504de2aa9fb580c9a526a5700114f009e";
+  sha512.source = "3339968b569bf6fba6d7332399d0727148add95c1c0dc2ae06626269c156a4e365dbbf672b652d3c5d097d0570b0955e6cb34255e3f8383f05ea52fa2c12e375";
+  hasRunfiles = true;
+};
+"leipzig" = {
+  stripPrefix = 0;
+  sha512.run = "b5bf2bf26963f161fbd5c95259404def07a14c35dc40c9fe5c8d1c2e06f9a3bf5f1ba22e8a96c965159577d6219f376c8f3f50865a753019148becfa2defac28";
+  sha512.doc = "7c8063c1a5834dbb8ca87692b226968f98961c76eb25d4a435928253250c2aba2a204bc3c24883a1a932a726e5ec430944813d5cb78de40c7954b66a2ddc9f52";
+  sha512.source = "3a6a90f56a0bc2f7412a2481acb651289fad3caa4a69d65438dcb5e6e48e3e98118f9b15218569674fb6c5600f6a626dac3234ad6d3725afbb05f0bb69414b3e";
+  hasRunfiles = true;
+  version = "2.2";
+};
+"lengthconvert" = {
+  stripPrefix = 0;
+  sha512.run = "71441058a60d5c642fc7f162952f8e7e696f25ed40e56d5b61177efe6e0f4bb3f55a8ab616e52f2555836d5205f1c09cc75307ca3d0f4fa964347d731c6924e1";
+  sha512.doc = "756564bef540ac96195b9846d79cfdc8a553c25e83313c3cd22b7926010e65033e0eee56899a0ec1deb92eb34a1c7c74ea541e4881962d6bbf34a16ab5462b49";
+  sha512.source = "fd9f190b1b388e17fa0bc9d8307bf1dd654184c3da7ee69534b7fab2d686b5dc096fa3656d0620ccfdc1da40f581ab1bd163f82d2f0071062fd48468200f39a2";
+  hasRunfiles = true;
+  version = "1.0a";
+};
+"lettre" = {
+  stripPrefix = 0;
+  sha512.run = "7e50bf7d6109fcf0e128c35ebaa034c3301668f6e3bd8536b4a37c7e721592e28561911f922cfdf740d0c397a8375113dce0b7a00388a11bc4196b4b33fc04dd";
+  sha512.doc = "308122fdd634c278f6e05e85a3a052e4255f06339db0f744fdd4859f6bc2983b7150c8fbb5d85fa71c39bf71ca6aec9d6c3d27707da0f95252beb2fb09dfafc7";
+  hasRunfiles = true;
+  version = "3.000";
+};
+"lettrine" = {
+  stripPrefix = 0;
+  sha512.run = "6d52341ea517e94128da35dfcfec9344e08a23fd933ef18e1830ce014e6906bd248be4161439cb4d48e1bee64d3b9896cb866a78233c86ce72f87ac5a788e98e";
+  sha512.doc = "4f12fa28940188c95a3d707a97b18c7b30803d188bf7c5c46dd74a13589ca15609f47bffc309474c43966c3c2ba0fc6df09db2d85af1385b82ffd0a10e148c59";
+  sha512.source = "d77bc694777fe902889aa15ff12396dbc388c73fd89c815a17bd4557a340deb2f1547b357bf270c4cedf7f97edb4f33faffcb65efde9e36978ad5b6c81b76356";
+  hasRunfiles = true;
+  version = "2.22";
+};
+"levy" = {
+  stripPrefix = 0;
+  sha512.run = "a71294df1b2bdb1402892ebc0c82dd60275cf41f6844cdd284e1ba73c8515e98258118c5a1e5158fb6d09acdc53427eb4e3f62f24591fd2eafc90d0bb69b71ea";
+  sha512.doc = "e69a1e2e421100a50416f86bda40702aa9a4d5c5b0b8c783e328e56e1ce587f832cad984fee2cad259603e893413155bc4539e853e1df0d95c89e9167c67b2e1";
+  hasRunfiles = true;
+};
+"lewis" = {
+  stripPrefix = 0;
+  sha512.run = "7dbe24061df0d0bb4762e7d308c895c99d8f9a9105137bce8c4e589c7fdc80f989aa8c3ebbe40708a8b6fa2a2df5542ce25fb16f528344ca46d50c47724e006a";
+  sha512.doc = "b267e3c79dfacdd7ed8c931a0e5954c9fd2ea0cfc12beceef3b40bbbed30bbb421d29afd263a25a5b0b5b77a6bc74ddf38e609262485eecae065d65e23200bff";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"lexikon" = {
+  stripPrefix = 0;
+  sha512.run = "7c0642f9e727d34175898138d27a838f0432a68659acd7986acb0b74183f28467351c169c52ab057daf46546d8ef9f9bdf30dcb1846b458b6b718ae38633b275";
+  sha512.doc = "4f1329d49d92d93743127e4f3ad9401e07529d31d2d68af86373f08b56ae69c22c70b89151461548aefb7fc1f7eca66cc1a4ac73407d82b65bd007f3372243cf";
+  hasRunfiles = true;
+  version = "1.0c";
+};
+"lexref" = {
+  stripPrefix = 0;
+  sha512.run = "f9bf7792ac09a6b5a69ae642e0becbcb1ed0c2eea3254b31da62bb9b7e3e161c24109e0bcacc8b89e3d03426710378f04e13a05be467115eaea2be028f8e5812";
+  sha512.doc = "6a348acfd0e0701954195210bc717666308743f5f282b9efb7a253ab860a0372ed383cc2c8811527eeb2ed72c46be95cfb9e133d156fe8b906b67ed5140437af";
+  hasRunfiles = true;
+  version = "1.1a";
+};
+"lfb" = {
+  stripPrefix = 0;
+  sha512.run = "5b1386321f8c24673531b48d996a20cea9ed527ae60e608f63a790a2cbbea573d01e0351c1ef695b11f14d31d5c482ffa02b337ea04e649b7b758eef713f3bf6";
+  sha512.doc = "59eef59a1be002d28ce802617ee638b6c0e74efb391a502fa9593bf19e54f563f819f45442714b46a2e97f49bd561d2a2df631e53ad3847b48a881c8762d2d9d";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"lgreek" = {
+  stripPrefix = 0;
+  sha512.run = "f0b5cc9b7267aa07dc0b0f8c6d23a164bc239591fd13b5d77c5c840d33e131546c63c63a3bbbee2851000bda2e8593e7617f8a7ae381e7cd0561302a667acac1";
+  sha512.doc = "915df985f4766f492a70a35342e086567d17c155ea0dfce5514c6edebaf1dacb78998dc4bf5cc44415fef580a7779083bc2261a22dfd668e8f2023f1f15bff35";
+  hasRunfiles = true;
+};
+"lh" = {
+  stripPrefix = 0;
+  deps."ec" = tl."ec";
+  sha512.run = "265aeba5ee99cbec2eca77a273a9e4857d78280e0ff17089a358e7f85d0595025e259b2edd471ce5287479531fe37cfeeaeba405ac9cabc7ac9616242815b6cf";
+  sha512.doc = "33f1cd39b2e68caa750ca5867bebbbc43c9948a7606f6fe44ba3bd8be84661fb562b5472ec57ccc3f6c18ef2823188c2f81ca4444b562f935e6f041d8ec0f39d";
+  sha512.source = "a81d3d7295101718dc4e66c6daafca8c480b281d7219956b0007adb4fd7e0f35959277931254fc778bf69c581b7d15ccf445f5037b589cee937211c39f59529e";
+  hasRunfiles = true;
+  version = "3.5g";
+};
+"lhcyr" = {
+  stripPrefix = 0;
+  sha512.run = "55cf81c051e8f23fe4f085990bc72a5b1dfc276e3ae1721680ad033deae1e3eafb1b9dcff3380ee20b72623b1ab8f117aca66f61441387d914dc29dc91c78448";
+  sha512.source = "18fc370261acff25634107705a36d06ec6367da95526a79fdd78c887234a2f2a6a17147eb317e97effa2ae8fe8e21e8df71cff3da5572055356386d26d2b06d8";
+  hasRunfiles = true;
+};
+"lhelp" = {
+  stripPrefix = 0;
+  sha512.run = "3a5bb1d95c300e9546b67c48cc2c3e1a5c3089c4430d76172a8d7f3cdc59fe03de1fafc6a1babeacc9259444e09e85e02a64f3b3f8ddfe3883511482b9ff0985";
+  sha512.doc = "2411bd37dba9c4afe1ac4251c9897c99e5934938bd802dbe89993d5b6ec0d19e1cba8b143ee5febd9ad73f0ef823eb79f34587e6885250a2bce8eebbdbf06fd6";
+  sha512.source = "42e419f41c8d8c00a4d27b4bd4499097b7c4c2b8b2e75c68fedd224796dcc9b9dd09054f90cc525286ea6b72a579120c3fc027239bd0f0630ec471bc870ec02b";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"libertine" = {
+  stripPrefix = 0;
+  sha512.run = "22c376288f7feeca3201a0eb8150571e733acedeff62feaa1573a90d22c11b5cd1db34e5911bac9f6b86728ff47ab3f9ab94114fb829a83c77eb702ea7f453aa";
+  sha512.doc = "b65834e2903e8c11b1bda92a2d9f21e764db4828f5b63df7b14f28cf2ee791cd3000728858b262a2bc7536f9d536c4470089c7bfa8b0d5a961ba81775544f8bd";
+  hasRunfiles = true;
+  version = "5.3.0";
+};
+"libertinegc" = {
+  stripPrefix = 0;
+  sha512.run = "0af71c5bd17a2c89d85c2df056e76e4f8ff98b24de40dd306a9c4207c15dbe9dfd08864736a3a45f1c82f51717396ea843082f6798b89f7e9ea8c316453a707f";
+  sha512.doc = "010db594b034a5e401fd17a7772dd3dbf95c37d533fad97f7b1568336beca31523384da1eab42e74b2e8bf294b25a8d19df7469eddd65cc1bb61abd5dbe79d03";
+  hasRunfiles = true;
+  version = "1.01";
+};
+"libertinus" = {
+  stripPrefix = 0;
+  sha512.run = "ac413716b5316b11d09c30613461ebe432502d4f6b776aa3931a6e8e15ec1afe56d60632a5d9f941ce4acdb89e45914f2b072c95d8160fa1132819b8a0c67bc2";
+  sha512.doc = "4a01523a5d8211138e873e15c9ab7c7b1f62900d64c7c75c08daae3114cea4fea5ae3a18d81b3210be78866887ec1cb9d38fe0d4b7e9c7e498f75d65f3eef5dd";
+  hasRunfiles = true;
+  version = "0.01";
+};
+"libertinus-fonts" = {
+  stripPrefix = 0;
+  sha512.run = "f30ece5291ceab44ec15c8eb6f20593e78ff2b31b27f49d9472f22ca63746099cfb9493dd9522ce3ff3b712eb3bf22d981318e985461fa53c01f399ecbfdc788";
+  sha512.doc = "8bd8dbc35aebe0596173b93ae56f5547b3637f9973802ebe215216c485731721bb400b7bc8c404644a401062eb7efaac612f03ad431257a75cb36c59eb83c4b8";
+  hasRunfiles = true;
+  version = "6.9";
+};
+"libertinus-otf" = {
+  stripPrefix = 0;
+  sha512.run = "bcff14ba57c0c47b6b9c01290f47fd0d014d8c18913d1722fef2384df6b0c0e57f28900a9f53f62ec91da9aae7d3d40730ad318426eeba61a85c1c2b321856b2";
+  sha512.doc = "1a4939881e1684c940f5b8bc45d6f23d99e5c627205c16f09fab00b00bf37ec315104e1432003a83bf4406e3dcffe703d524f98f1168eb284fea8de327aa18d0";
+  hasRunfiles = true;
+  version = "0.20";
+};
+"libertinus-type1" = {
+  stripPrefix = 0;
+  sha512.run = "ef51e05eda0197dfdf1094212ff3b8b25934d3a8b1825b145d17183ebdf96da1ceed2b6eee367e170d698c88342f2483285ea9c6f4733bdbed90a751426f5265";
+  sha512.doc = "8c7ce0de040a0012a3a15080817e5df153e30c82d3be504df7dde98fe50082307ff5cdafc35640de56eede72fc1daf55c66c8dff0ed182b1a1e4f89920475fbf";
+  hasRunfiles = true;
+};
+"libertinust1math" = {
+  stripPrefix = 0;
+  sha512.run = "e1495d0bd0e0082b54748cc6536a2ba0c0664da049f3ea99cf3df3cf60066fef11854738fe89f477bea879db9dc49199fcd2e8c3c4676cd3bf135122e011bd10";
+  sha512.doc = "8816d8592f613f9776d57bf1c71a0b4018a056647be658268f8d13135deb2903b7b31e4be11098b6aedeca852bbb889b23110f76c98bbee7cfd26a2c0ad29359";
+  hasRunfiles = true;
+  version = "1.1.9";
+};
+"libgreek" = {
+  stripPrefix = 0;
+  sha512.run = "0547ebdd180554fd00a7ad96932816e13744886457c84960b8abba06125f68ec9391ffb03c7bb7ad039a2654a1b73c2c378b8eee2130107a02e25881581c8139";
+  sha512.doc = "105ad6a6d557213c6918b2160dfc70449d496155e3a0fe1e683b2186b8d10d3067a85b05e3ee26f01ccdb6f70c2f864d09439eb4b8347dc3217482e17600f79d";
+  sha512.source = "41e1629949d8fbe9cbef5a153bd9ffe2ed354789a4c80d518e5ef7bb4bb9f5152c024f190a4ad8d22eb58a69852d3fa63d7670aa1fa78001cac5d46c3891e025";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"librarian" = {
+  stripPrefix = 0;
+  sha512.run = "2a01755bec49fa8c78680b0599b58649b803694f339383ad168bdc06554dabeab3047d1b17d63f7487860a5d0102dd8f68a78d5ad5ba94a2f8b29db7329e1ebb";
+  sha512.doc = "6d95e43b1f9965fe016bd9fc7ba3f9df56716d8f6c89948417643bffc4b9e89f8a5e6cb045e873daff819a16cc10cd61e74e73e98119a076580967187338be37";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"librebaskerville" = {
+  stripPrefix = 0;
+  sha512.run = "03f47456269d8fba252415fd2d13faef8efdd3895405dd0385eeb2bd44a9ffdcbf410c5cc0f63a2f9df349b940408a1bbe492bb8c8c71e756ab184b6ff75743c";
+  sha512.doc = "c6fde0f97c5f5ce27172fb3d9b41499c45679fe65ad980916b0d4af5e6bc9a0c91eeb33b2a30967267887197628218772761e5a909703d1807d2b4d8f34fd4f6";
+  hasRunfiles = true;
+};
+"librebodoni" = {
+  stripPrefix = 0;
+  sha512.run = "eebacf9b045b46df1a8c806deebbd94742e2c1615e45da85946c83cbb82a3a2ff278a6a0bdf47059c5713ed1c2dfce8988ff82c4682aeeadc05772c49426372f";
+  sha512.doc = "5cad86257fd423e1f7551a014f888c28d4b61a9fea14aabb0128458fa17ad81372668f247d9e7a81ab0801d9ece0a0529a304d16ae2f06dae5598048bef4d036";
+  hasRunfiles = true;
+};
+"librecaslon" = {
+  stripPrefix = 0;
+  sha512.run = "7f3de2e6478399b1f48bb0359c90e76de85bb764788fbbab561c4d2efb3f90171a1cd06a2b68eed444f8f70ce317b62e979d79d50b2ea47d4e0845a968238524";
+  sha512.doc = "ddb0f78d298566dee2703838a75f88011a24ffc40c13dd943ea05b28ef4e43d39f9a653b66617368e5c515240fc5b74e8c563d4de7b620db98c00d94fb91f615";
+  hasRunfiles = true;
+};
+"librefranklin" = {
+  stripPrefix = 0;
+  sha512.run = "565a2a3d05a9f22f5ed1ffdc5d91f6793584317e34b999291210bc87bf7c0b001a7a01458fe95bc69d793bc4fc001e07339df4a46e3ca14311d0fc49ff95805e";
+  sha512.doc = "12575264f327a724e157c925e5b66054f7982eb0bd498c1ee50e5eaf0b37e04f8eb497eb9f3ae22ac6c537dcbbbd40133bff80e79709720674b6af3b6fd146aa";
+  hasRunfiles = true;
+};
+"libris" = {
+  stripPrefix = 0;
+  sha512.run = "1a754d896846d0db358cf4f878928dcb511d76a7de6e7dfabee71970908e3ed7caab98f854695318ead334e052282b690712069597f42505b00c41e328ad141d";
+  sha512.doc = "04378b8461d6ea0284f038974fed6ae6fc48fc362f63dfb8b8d57a81a721da7bf17ca3aeabb198c373a68a4c8e5516b66f12c240e081dabcf1b9c79fd2d2b388";
+  sha512.source = "8ccb8a6beb30c508d582dc905136cc8b1b053a8d71a7701bdeccb0ff1eecfa69e32d7167b871d4e38eb0c98ef49c8ee9a00a9ea3bbc30e51c8a81d903ac147ff";
+  hasRunfiles = true;
+  version = "1.007";
+};
+"lilyglyphs" = {
+  sha512.run = "8d0d8b994628731e23b1a579a141cee66043838bf254306af91f9edfe2848379492baddddd1018b7a8b7c5fc7de33f4895884412b21d1b6825856f19b7da4a57";
+  sha512.doc = "8c834cb3ca5bff9538218112523537417bc41b05e34f6f6a1670c3f6eb573cc223ec8be121c7df79ebc746afe427520eef6d1ab0f4e569339b542ee67a6549fa";
+  sha512.source = "810c33637a1a8484e28b4a3b60c4a5ec281928d049024c2e24aa0200738a9d07eb9d63f2d5f2263c90376ab071dd8b4d8ed40db6d5ebefd8f49ac2aadee869df";
+  hasRunfiles = true;
+  version = "0.2.3";
+};
+"limap" = {
+  stripPrefix = 0;
+  sha512.run = "eae51f72a65d407b091244ed926ec98a7bf02ed8c360fcea2d614011555195992d315bb22b3697c8220f8e91f34a1c2f88092f34697dc9ac42f757e066198650";
+  sha512.doc = "748504c008704d2aa1c763920c03c72372c89368e245fbf4172b442b6e9efe11b3754f37c37a864ab19301c8822aa31f0d25f80edbe26405c043aab8a0382739";
+  sha512.source = "2fd49d1313293fdda8726c84438a742095ef9a917369d8ac62d619507f540b4a9ced794472441f8d48edd5a5cc575ac2ac8ff43b3a50ccff70af0416808dd611";
+  hasRunfiles = true;
+  version = "2.2";
+};
+"limecv" = {
+  stripPrefix = 0;
+  sha512.run = "385f144eb64f9ad6ba13f42e75ae9ce5701265c3bb2641523bbeaaed086781e92f7cc03f25a576dea97fe533bb08adf8c24672e6237363d37f7ea598138fb40d";
+  sha512.doc = "c375f4e700e19fac6334df88100776b93df315000efa11189567d3ae0e6d542c3acf3d21dc29b541f7067d8cfb32fd74197e02569fe5275eb0277fc645e182e9";
+  sha512.source = "22953f4f1dca7a88f1f6aa359056d88944cf86010683b3b5cd1b9e0053b5501c4e98cce2abd66081f5053d75707a43749e78523b640097b9cc219b945665b481";
+  hasRunfiles = true;
+  version = "0.1.3";
+};
+"linearA" = {
+  stripPrefix = 0;
+  sha512.run = "5fc18101f389b2576b8e035e2f3bc79a37c11cdd64783df288f7776d1dc99ebc5c56a61d727de2dc57a9af4a4d0634b5ec6564513aea369fb1c8e4ce4eb407b5";
+  sha512.doc = "ca6749644b81bd4e6407acf0ea99f2de57a408b8fd332725dc8319888ae05e8e27cec2c3201c49e51f2cab22221ebabd8f980c627c7ce9f836bff2cb0a2cd575";
+  sha512.source = "ffbf77f9c3f97acc3bed0445dc3d7c92b9d4cd095e117a2f9ff1ba54cc1c3f96c734c1d22951fd520a194ca3f385504db06821a0797a4394079fb221d650fb7e";
+  hasRunfiles = true;
+};
+"linegoal" = {
+  stripPrefix = 0;
+  sha512.run = "87a062513ff7674f315472cc46e13fbce99057c3b7083a2b9c93b92f09d538af29f5d1e3664dd5273080b9037ac232dc0d7491753b83136d2d3558ada1b81976";
+  sha512.doc = "9c61ec4fa6bc63a57f7b272c7dfc55035e8e4f14225bbd2763157915fd351a2bb4f179150801f06682fd9bd59f756edbb127e7bd68592ffee5c1cfbac91b10a6";
+  sha512.source = "69133c573e53608e6b341abd7e745ba6b532eba05bb9a2ff2105bb9da69e31bf590fdc3f06241e5b667ec7f0c9458a908f5ad72304c7a5c9e412c0057611c5cc";
+  hasRunfiles = true;
+  version = "2.9";
+};
+"lineno" = {
+  stripPrefix = 0;
+  sha512.run = "c98bb4c84d6473c3038a359872442ff8387ad8f111ce1d82021728d9bb8e29ca08cc65d5705261bb347a2da2fc27594cbcdc8accbd59aa03c91f0c25312578fb";
+  sha512.doc = "da4fc0ca69d434c6d97cb87390247b3efd3463f5dcfa7e828d2bc840d2636036c097d6d54bb2e89b5d9b5f2a95a41db89af415d08ceacddbc4642883ebc134dc";
+  sha512.source = "9598996c2796de011a31a8b8ebd38fa343ce856fc6d291426074da40bc557359e9ff40039cc48faaf6b4a3d039ae091bb7d7dfea530e449a0be3a34dba1c997d";
+  hasRunfiles = true;
+  version = "4.41";
+};
+"ling-macros" = {
+  stripPrefix = 0;
+  sha512.run = "686dbb33df2670af909a80863943a8870ecef128679ab679f3d90d1747042b752c9aea15660c962b0f02418233d4d152e64357d5b57884a2fc2371acb3d90a52";
+  sha512.doc = "fe424a7db4be743168c4b1016fc25c95d33cf9d66767b39db0e79a5ba1bb667c76b9b5f10b23a08449362a3fef281d60f0b53e2b0f196846efe9f4765f3f08c6";
+  hasRunfiles = true;
+};
+"linguex" = {
+  stripPrefix = 0;
+  sha512.run = "36fab316a894029feba86bf771d4e600b3e7f5d766deb9d844605979b066483500c8fa0a425718d22e9a2bc14d74aada16ca8deb7ee744a81e18fee8c77a7b50";
+  sha512.doc = "7a5d84d5425031d341deea8f37f1d8a9f6eaee820ef66661e8e38eafad2b20a5e9b04b81b1a0db0b11ab70fb0adc9c81cef886978626008eba6aa3c32bc0c848";
+  hasRunfiles = true;
+  version = "4.3";
+};
+"linguisticspro" = {
+  stripPrefix = 0;
+  sha512.run = "74f27695393e3b9489d085f6a358c05481c37eab37985530cc91a12d81430141e57226f08174079eb4034887ef439a27498c6f224c01169c74e04ce71bd4a680";
+  sha512.doc = "4073f3eff8e46433d6fa58f9cd271180ee8e2861229459fd8066a35212d562b6625a9acc267c68f584f82a7d235ebeb361a41a971a8097548eb926004418ece5";
+  hasRunfiles = true;
+};
+"linop" = {
+  stripPrefix = 0;
+  sha512.run = "ba0c5e053399c44203d6eff42252854a16ccbf12132ee6e26fa577587554234b36ed31a63f1a6c40059e0aab8d9367a5b6aa6f34d552d64866b46e68478c36b4";
+  sha512.doc = "e63f09e370a53dadc92591d105c677f2a5eea4cbcbc4e3133448df64b10abf2eae1d76cdeed5e288f610be13eb4baf8f248a6e9df92ab79066078ee165b9fdc8";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"lion-msc" = {
+  stripPrefix = 0;
+  sha512.run = "93a6800c371a2444c34de2888d09076cd41b9cb773b39af1c6772928087f4c0438e85a58267e9a0afd309722b5eb16907a553c23d2cba008a65b6e2f3b3edda0";
+  sha512.doc = "d3df6b66fe429e565b9f336b2d864458de759a907fe1c0ea88e002738fa7d7122a3dae0951f596c56192ec5b44023eb604eed7cce357521e8295431675bf2e67";
+  hasRunfiles = true;
+  version = "0.28";
+};
+"lipsum" = {
+  stripPrefix = 0;
+  sha512.run = "f5d2454f160162fd1272f5a43e021e1050947b527614c6450a87e1ba8aaa8151dad281cd962142d5ad39cec9f44ac7b313fdcc44da94db0256ab9a2e14b75b0e";
+  sha512.doc = "fae8e8002b33c26ab34c53d09e1bbb76f46164e2fa8a59517dad19e81c1b84505170e675cc2d9072e30d5e5314f7ea7b72d61e273de9ca9f898d97ec2143e3fa";
+  sha512.source = "1ac058c3c83d14701b54238aa78aac52c1495038985e30584e948842d5a6486436c733df790fb56b405e99033496921d9401e6d73ee485685e46586a01edba00";
+  hasRunfiles = true;
+  version = "2.2";
+};
+"lisp-on-tex" = {
+  stripPrefix = 0;
+  sha512.run = "67817d9894ac5bc8d456ce2b114eba81b0c444bf53422c4acb5066b42cd5cd55d73c46fb2b443db9fe3b13bebb58d6fd7f2bb31686dc4ac2295447285295c602";
+  sha512.doc = "fb3a8ef4ada38d910b3055f408059daf700946c84b17873846175e6cd3075ad7f3889d2af154adc3a7898ac33646251bdbe0d8cda17ccf354dee526a96476432";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"listbib" = {
+  sha512.run = "e71bda783acbb8ab6ccab3d8af535034caf0eea919bbd175685fe50585970b87613e0df5ed076967aca395cd8c7f1317e805fb1cf765897b03d6cc131d3d98b8";
+  sha512.doc = "0ec0970f591fd3a840c27730d41f0b817f631727c9c7219880b45209c21fe0d3aa616eb6eb94bc7016a9acabfe9c50846d872d3b36a104e1f4eb74dd003a16d3";
+  sha512.source = "441b13ec75d91c68b8e7253a5dc9a6e515c5bb0df81a4784dd414b1956be6f2c9189051ae9090a04bd4d11919945a38ad6563f41c27d1b8d03ad283f71c9a19d";
+  hasRunfiles = true;
+  version = "2.2";
+};
+"listing" = {
+  stripPrefix = 0;
+  sha512.run = "154a9eb9da19d4a1d9f6ed421bc13f1f83279cd456b95ab8b7d84f9c48d6aae5548b7357e46041580d4b457758aa090e6352aca9d9e20f1739dc589d4fa24bdd";
+  sha512.doc = "11ef594d55ee823dab2a88ad5882e1ea89d7741f1038d3782ac43fa43cce948c1ed72096ddd11d1efbcc3b43ac9bc4dd23713f725aa71807ea174548d9a5c968";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"listings" = {
+  stripPrefix = 0;
+  sha512.run = "ca15ff0ea1958ccb4d7e464245f7a214a509341517b7bc71823823f5673bca3d7ce27b6b7236f195078c7f9e7e3812a5bfbcc1c0b59196d06bf28cbd4ca63acd";
+  sha512.doc = "38e7e013f56787a025425342858e2f1933f0f6295876fd9c2d01df568d76b51aa17e479fab968a9cb950fd77cb0810faf4b31b267ad23c32ad26f6e85ec32d0e";
+  sha512.source = "50d5bc041b885ae0e35934adfb3a76b048d8c7a200081eedcff4984b433e498444f4230baa63e86669d526fbccb15a232b8b2faf2f9787fb63eabc3da14ca28a";
+  hasRunfiles = true;
+  version = "1.8c";
+};
+"listings-ext" = {
+  sha512.run = "c68752d0e7a1ffb7d08f153bf337849164d0287f20ff8f092635ad7083b2e5a6c487bcd9dff913dd029f4ea92750768d23583eed53a0c2d3bf012e4db059708c";
+  sha512.doc = "82491f81dfc89950d085f7cc41dabdf7b895b23c8a69f80c1b4f4c420fe8f036ac181b56e3ab60496910d0f1165ce19b2f94c5e268dc1d59e352ab6747e3bee5";
+  sha512.source = "fab34f07d6384a5474f3ac30e2e00a75398418668134ac1041cabded6209c9521244e1637e4037e7346bc70b3247ebcd90526d5e34fc3c4e388fa978382bf228";
+  hasRunfiles = true;
+  version = "67";
+};
+"listlbls" = {
+  stripPrefix = 0;
+  sha512.run = "b5c2e7e168b07aa288c911dbf5c1fa8b56d2a73d38babf0140b77bbf783334f2da42b2bfa8d951e166f7184345cea26a908d12ff4a07ef89b85a7d7772d645e1";
+  sha512.doc = "225837c7a5c80b5a01739c20011f4b4c76b0cdeaf26e3f8f44fcafee3e439a104c6eb1a47660a788b96a3cd63f3e19d1384ecada059380773850c7a4109d3269";
+  sha512.source = "3b35fa88f640d4f2a13f0cc888a7ab7bb09052ab080454d398f0edc27caa11728152e24bf5184d54aeb1bc86e599aa8a4bbfff6a6efd790e11277f99da2f27e6";
+  hasRunfiles = true;
+  version = "1.03";
+};
+"listliketab" = {
+  stripPrefix = 0;
+  sha512.run = "0aead2b70e314639aeb98c199d051fb0701570df0263f452bb2e65408678d437c7eb071c41d8674971e42a0961da30754696a58eaaa41dc32d33ded58a833153";
+  sha512.doc = "70ceddb9c59981319ec33fba05c663ecaf549b5dab56f29fa07f9c314d97d999c762ee1efff0d20b5e35b39e89b031458fdde4c5c708e0a1c2dbfdf17d710c2e";
+  sha512.source = "68b75e9dcce30acb59d928f4ff95732cd7e37061d31625f8c1835ef6b8da85ef39f4d8ee86b50e299e71cace2ca5307c25641042f325a93a93bd04bf804ec5b4";
+  hasRunfiles = true;
+};
+"listofitems" = {
+  stripPrefix = 0;
+  sha512.run = "9cdbbac3442d2b6cf45659a77dbbf7c1db2252af3c656d277f8c9c1f8cfd98879efb7e6a9957481cd6e892d8f3df1c8ef46c7992b45c6c461dfe936018600917";
+  sha512.doc = "e7c3df40b9657dab386eaf54f08018e3d390a1de96a47c5c4f63759c11aa38b243301287940131297ad107e4a63fddad5bd9ca5982b211febda7bf5a6a8d40de";
+  hasRunfiles = true;
+  version = "1.63";
+};
+"listofsymbols" = {
+  stripPrefix = 0;
+  sha512.run = "dd32fbcd59fa9ec599b0a06672d2e810b5b8172a96a4170cad03a93be3da21a02a036967d0e7e3a617bad6535aca2b1a34a114c383b5ed1aca22bc45239266d2";
+  sha512.doc = "ff8bb87ee326f0b0df175eb41d634d67cf2f1ecb76f1f8dacf2e19d061e54c4f5cf8e01c7e8c41087ca6b69a04f5a3184ee8ee39f00758d3df2f24a4b2e372d3";
+  sha512.source = "b232671411ada9bee8e9408ac9f7bb94e57010a39d916beb78d3f04dd1826203b37f8b8d4f040cce5bf0cc6b7ca97eab97d6f764ffe370b09c361a44af530837";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"lithuanian" = {
+  stripPrefix = 0;
+  sha512.run = "228fa0f588bb0293778a71a910401575e20aaa8a184d54d51dcf1bebc8bb6b0c0ea81cb1d3e0f2d36b6a0abf830dbd328caa6053fca7f40a83bb292f76b83918";
+  sha512.doc = "e4b01bf2174854d95f348caeb5e5b88ec436420178eb06a78cb9157bad23bcd34584e9bde451e3963f4de59e66162820f9487ca4d166b2bd898b2cef17e63ee4";
+  hasRunfiles = true;
+};
+"liturg" = {
+  stripPrefix = 0;
+  sha512.run = "e97da4e9046fbd60ac2b22bc3753db7a75b5b6aeeb6c37293c5dd1e4e8fffd18b32818b9038b816a405033ff74d9c19ec2443b0169721656af687f1c5d62cf9d";
+  sha512.doc = "6b342e85917d5a70dc32461de01ae3c6ac66ca247b4ba3d812b7645f1cd1d961c914e584cabf743bb03ea74cac144ec05b03cc09d0c23cf7bbf4b8ce7d01937c";
+  sha512.source = "07bfbe684ae7584cac1dceb3d9012607ee24639a0e4e858d2f570f4aa3c21280bb6116123910a111c729dab794e568c05f8778d3b71612ebc288b0c268eab920";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"lkproof" = {
+  stripPrefix = 0;
+  sha512.run = "58c211cf1ed20b36e69ceffc8568fc1cbdb51cb812af79d16a64cbe8a8e7e672a2d49e672501b2cb23ef72c4a04c59017e17e538061159c8b9e797624f8334ca";
+  sha512.doc = "01c3f1b50147c73294dabf83d79811862d4742f5a76f69ff6f6a1d5a2b0a8462e3728ba6e4d6fea57d3703c638f6cf04568948d45d4ec8d1dfe59571ff2933b6";
+  hasRunfiles = true;
+  version = "3.1";
+};
+"llncsconf" = {
+  stripPrefix = 0;
+  sha512.run = "9df2b2ab5fa1434263f4df8a4f5c5329d38bff47a3f9178b2b220b50d34e410ce2904df5177076131ecff1a5a20cdb9cfd6cf84d986210df1ede7ee61f73b255";
+  sha512.doc = "a0a9ee4372d9afc48fcaa16959a9c54a3d10216d6196be963f9b35c66f13c970a4cb4a01996cb2397a10a6ea36c445a75541f7bdb9608c759e611faffce56574";
+  hasRunfiles = true;
+  version = "1.0.0";
+};
+"lm" = {
+  stripPrefix = 0;
+  sha512.run = "f94af6c169ee05d3a2dceb00794feffb7808a4bedc05da7655ea74fbbf675047661f49f4f2542373e5fef60fc0f91ea9931b25bb10c1449f593b84ebf65cd154";
+  sha512.doc = "baa33984a243c1000fbccb73f853dfab7c935e2da5f68294cff38db950d85f09ae9ab63f01178028c5f77d00c03b919487e73eca78dbcca60b9ade73a0773b18";
+  sha512.source = "954d7cf62a32a4cff318c9e51f0f9d5e4b2de358e7f8830b1dd6e4515806b9e446d6f1f0b074bc8a7a8cb20ab5f8dbe715bb0ca8b77c4c8265d868d821335c72";
+  hasRunfiles = true;
+  version = "2.004";
+};
+"lm-math" = {
+  stripPrefix = 0;
+  sha512.run = "f2424f917e13aa9805f6738ceed376d6063713dd4c58a5953b5456da4ba81eaba3f0f97963ecf36ead4f68b1311c4c9e30f064002ab8bbf0f5ed3a67db3ead4a";
+  sha512.doc = "262a99ab29fd22976334eabaed77d3326e87b63014d9e640ef8ea31b14382b273a6435f3059aa235c50f9f829ec28adf754763e17a945265495e9a54e7ee53fa";
+  hasRunfiles = true;
+  version = "1.959";
+};
+"lmake" = {
+  stripPrefix = 0;
+  sha512.run = "3613e9d53808b2d1e326175c28acb672c1f244b2e00ea1d544e1e05c73e2a93e49b5e8b187a8a73e87ffbb00c22235781983a2c0a733a6ae5598db12c278a763";
+  sha512.doc = "08fa487d9151ea6a49a73044d1f6b41ed0c636a69e04a2c9f04bce996f915e9d267383a6fc374f3292c01244981fdebf6d9fc462ee0fc151ded2601e4554593b";
+  sha512.source = "d18894108d2b4b5d46d4e212648b6c7d76894faf4dd45555371d17df5f6d186d4d2b5c8878e745520441eba2459c5fce320bef28e23bb59c09f01fee44a6041e";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"lni" = {
+  stripPrefix = 0;
+  sha512.run = "8648f9a39d982e99f19af652e39ad1feb98c01ee2a06b3912dc609213673bbd685e11969507842caea4657d8ec0a33f7b3a9ceb0a4cbfd4a9c4939ac1d30e42a";
+  sha512.doc = "7ee44a6ba2782b28a81c8d907ed11a07079b4e8eed3fc1d8adff80274df471637dc69e15e6012d9147116c76d2faf9beca10b22a554a03ae6985c9f68791f104";
+  sha512.source = "ee33399c5fe757c19b4e297b184887aaf44fd011b78b2ba84b906955c2da3ff3e76c6400a9f21967ffaef8806f12a3ea3c82a4a20d24c737e0c3dc514ec5a0a0";
+  hasRunfiles = true;
+  version = "1.6";
+};
+"lobster2" = {
+  stripPrefix = 0;
+  sha512.run = "97692ee9293dd7fce8a3ca01f29a11daca837baef5d55b2c85339e1b2656430d009b5beccf7f04c5eaaf9b1643624fa259e353bf7f8afd6ad78df00999c252ba";
+  sha512.doc = "4efa18df18dc64cdc88d52b3b4bd9936f021a039e62eeeb2b028461328f2c3fc5b0bb0b661bcb3d2db155c48c270dcf1c2dcc2fa4951666597277e8ab1195494";
+  hasRunfiles = true;
+};
+"locality" = {
+  stripPrefix = 0;
+  sha512.run = "c7fde4ad74b339d340a046a4f59ff73da45942631c6b68275d365c18ee80b213d18b84540b8ee535f012aa18ef559e88b1df3fcff4560d241ee1147695824a2e";
+  sha512.doc = "5b7fde689fc764dc75930522416cfeb51ec30eec64080b289c085be4b00a0da1c5d6d79d2734502ca8a329bc2935216a8b298495e0ad1ac8331c6d3a5718bb5f";
+  sha512.source = "bb1e55107d9b16460b8990f35461bbe775c674ecb2dabb78d19514e365cc97f0b03ad5884b310edc60f2fea9366ee2633ddf4280165cab562038e024ea9267fd";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"localloc" = {
+  stripPrefix = 0;
+  sha512.run = "ff1e797efe69f372e61272d187e758e303e505128549e02d8fe45c621a28e55337d13b0fdbf6065ef97d4f8c51018ead4e97c1c4b2d9a76f9a6d299136f510eb";
+  sha512.doc = "13e03c65221c892acf80a51bedd6a18232e9e9adc7ba92f34399e678a2d88d7050b94f8047087c891075c2098bc759c79f1276ab2ee8cfe08dd7723f2ede6f74";
+  sha512.source = "04da29e24ad627fff42fc88a5fcc480ba42eec235ab2e283a89efcdc87082bed4b4b988dffb5ea2456212cdfebe9f66937c54ca799a3253c76884e86b13f2d0f";
+  hasRunfiles = true;
+};
+"logbox" = {
+  stripPrefix = 0;
+  sha512.run = "0c6f9d401c81344465d6eaa6eb6e655443c4af1622bfb6751db508638e2625aba7b5e77780fbb6453eee40b8a7ddba84d70ceca8882049779db61f83e7a15aee";
+  sha512.doc = "21f379c88638ee8499e7e47abb0850822a08d520aabb352e0f85ed0c38950aa71b4f9b3d430c31193de5640a915d0c84dc28fba71443d3f2e461a2dac53e2b9a";
+  sha512.source = "3123ed1fef39d4a252159c65e0cf938933f2ab4c693d8f7364f20e60accb20e32fcd9da8828019a8cefae1fb874605ffbcf88dd7123fff91871858cb5694a985";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"logical-markup-utils" = {
+  stripPrefix = 0;
+  sha512.run = "87f7fc345935804705ab25ab010376fb72bc4722c75bb115b0c9dd0e0a51fc8bdd6dd4051b76dd083ec07d80b8c59c5d18423da55e0430db7a9f94ad0bd45906";
+  sha512.doc = "80c44068a6e474071e40a0bf3dc67f0201b21eb84a041fad8423c59c9e34ce138833c54ead638979357dc3026eea55da034daa05e71a56ecabe701ebf53faf24";
+  hasRunfiles = true;
+};
+"logicproof" = {
+  stripPrefix = 0;
+  sha512.run = "d5b15ee5f35a9ef94618f8b092e97ccc4f1959a617c2e604b99ba56eef14c4a1a078d66f2c77d02239289e30878293ea6c9ff4134bd003331fc41fd3db19cec5";
+  sha512.doc = "bf8a33c5db05a30cb4f520fa2f73f572a90c3803c4b6dc1709f9e2c80f67e32e7665ce898852dedcd3daa8974bf909034d06f805ce473318f0f512645ceaf9da";
+  sha512.source = "4cde464059a65161c6ab069ef0c8905e4e6cefb7ebfd8c7c3b2af909209af4a911dd1bb0daee5b27868305660601187fe7a105660b395de98ae3d30864f012ea";
+  hasRunfiles = true;
+};
+"logicpuzzle" = {
+  stripPrefix = 0;
+  sha512.run = "2c642c7aa6d6f12e51228432f8bd9fab906ff4dd3354a49f636582a065bff0f534222161ce11306ff6bf3e354a9ca6f6394cf9826b321ac94e9ef5ee8c0621ff";
+  sha512.doc = "872a72ed13f7dcb43df3bd2f2b7bd504e3e430030115faadf0a130d2fd94331a335c4853e37c78e4b8aa7c59a44bfd87ad2a484b1b836c2a7526b97ef26ddd56";
+  hasRunfiles = true;
+  version = "2.5";
+};
+"logix" = {
+  stripPrefix = 0;
+  sha512.run = "19aa0ab48dce9b395436486fc731ec9ac1a153bd965aa6cb0835954acf54b2d2e32faef22c4130e167957ccfbed59fb3a83ded4d2b180966cd383e27d6a65f92";
+  sha512.doc = "f2408fc3d3a99c97e3be5090a54472f568cda97425d106bd14610d687f7bf5bf4297c3870c69a4f6b94004ad0e439e57055c2a6af5e18d39861640d0725405ea";
+  hasRunfiles = true;
+  version = "1.01";
+};
+"logpap" = {
+  stripPrefix = 0;
+  sha512.run = "159876dc23e96f65fbb29278e30baa497489331fcf52ebda2adcb19098c2519044ce54ee590c3d91f80bf27b6df0a49aff455da54748c3e04c7e81c2be108e4b";
+  sha512.doc = "f85a52b9d95247ce5eb537cc677aff184a434a41fa9c3433955b43eec3e3cf2deaa701718fe77dd3b3cfad5811c5275a097d980e157130705ad5cd3f14276dff";
+  sha512.source = "c6c2127c2789c2717072d8d08043ac73a86248d71dd542d38dcedb3a36947f7ceb99f0246787e279b22fa03dea554a6afde6438ffda3fda6143027a7e6f1d78a";
+  hasRunfiles = true;
+  version = "0.6";
+};
+"logreq" = {
+  stripPrefix = 0;
+  sha512.run = "4c9e5f42869e690768515d49f62aa5ef7ff2d9de2f42bd1b574f95b7903958a0506d334300f89b38955fce0c47bc65e4c3e17cfd04c5b6df95406e6b78ecaa2e";
+  sha512.doc = "5addb710e2948e67f6369763a74d31bd3cb20d847df6cccef739fad3b34abea8663d00e7304cf47309baa74086a5cfd581bf46610ed3d7123ff74c426fec0131";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"lollipop" = {
+  deps."cm" = tl."cm";
+  deps."hyphen-base" = tl."hyphen-base";
+  sha512.run = "81557b83acfa4ad42dfa6fb1a65ea42bc33885da444ee23bc3c67a899df7b3ac2c19a1607305b5ec10b503980365c5d29ac3598339fc186a05417ea5bca60a78";
+  sha512.doc = "206dee2be733e3ac04b5b259862b60fb3641fc44ea182da601ca54a010ff8e42f254dd01c03be7bcdd2a6258110c567a596ee82b4eb74d04ca8ed70e50cd6a86";
+  hasRunfiles = true;
+  version = "1.07";
+};
+"longdivision" = {
+  stripPrefix = 0;
+  sha512.run = "64669ae90bcf3c98d4e58e9ff016bd03e151f57a83c6a98e71eff714017c4e9bab95694d33fef3edde79001f0f90a54e4f64514488b00d1e373122914064d8b1";
+  sha512.doc = "679f3766529588f5319f511178ab84e636d9e888a3f2cffdb6d94384042bcc7deca14821fb5010e7bec65614bab9adf336346bdcc38bc8908a29a6e9266cdaf6";
+  hasRunfiles = true;
+  version = "1.1.0";
+};
+"longfbox" = {
+  stripPrefix = 0;
+  sha512.run = "43164941fd7ad91fa304aee01c3d34ec1faf8672549ae3b2711bdd4c91ae57ecbdcd8b29080d6c96cc64a73f7d7fd74c8621a70604a29dc1474f3c922c34a4c7";
+  sha512.doc = "fb319a679631e56122535b99a187d3c2ad5400d4a1f00275b73420c43f98e8b421a4b86f77b868c68edb39870132117de3310a00bde82f6387559c6adf34a8a7";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"longfigure" = {
+  stripPrefix = 0;
+  sha512.run = "984f10c8a2196b490dbffb015f2aa6449e8db6475c2f02dd71c92d5a3f6cb5dccb98a4c4f923f6efd3bbb1056aa8e64f324e3d8a051c11879677addaed8d3f06";
+  sha512.doc = "1f949e3ada113710f40b6d2960bb01ffffd3f9d26a65fd0482644da2a20c5375454c430e1c7d3b74cf872cbe486ccab9a4e71567592da5d39ad9e72102c382db";
+  sha512.source = "03d73c0d0c30d0c69f1fb878dcf843b26480c5005d88034e6f09fce485db3cf249240f2e39f591acd13556cf06677bd567857ceaaf96ec9cd0178f8216323be8";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"longnamefilelist" = {
+  stripPrefix = 0;
+  sha512.run = "1d16ee9c76784c5124de3abe62b6e916d0f65e979a18a721ef688a960e5d20382dc976de0b68d95c47e9651ad71a67ca97a828f1bdfba8e4a77ac084d7561386";
+  sha512.doc = "d909908d763342790b8ab56d333e60d7047894472f3922a2554581a5455539845af72d3867d0a55f5a27e982aa8128ae1a948f40e106fa127f2d01156b55ccf6";
+  sha512.source = "af1383755b422a3bdbf7af7437b732a39aaf666c7244e75d498b1252d3644e58a18115a744c4b4c7fe1433f415b40886868faeb064b13647452d444f64fd6f9b";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"loops" = {
+  stripPrefix = 0;
+  sha512.run = "60ee6999e43ba9082c5a283dac5a930c9075b24f6bc7cd3f719b0336b01dfcb17fb2d5e3c82b9f1636c9bb3e6c923607a3d9237d08fbaf17bbfc1196d0a75281";
+  sha512.doc = "9d70b3ae88d64bf2710157db88113224a95947aa03f11a2eb659c61109a451e2a93b2aa5ffd6ce9cf2f1b5fc8e0ef815850a0a9f27c7ec5ddbfbff1fe98ecaa4";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"lpform" = {
+  stripPrefix = 0;
+  sha512.run = "91d5748629ad72ca421834ffc61c13f71240bbcaedf9f0e4279bc6aa0bbdc817f093c24cf5a9c50d5a4a132208969bd356642fc5704ebd5c4ef2b7eef23f27ac";
+  sha512.doc = "92ddf3b473e13fe8b77ad955d55acbe7a6da34381bfaac78184342a900f2c9bb1e0981d5ebdb440cf0f44affe2eb0dd862f9b51d2a40c9abd90f1dbe81584c9d";
+  hasRunfiles = true;
+};
+"lpic" = {
+  stripPrefix = 0;
+  sha512.run = "d918fdc8744a9f5e0d24f6ba4f19bbc4cbd9a5ba4b3c559ab1321c36a9e3599ccf6ee849bd7f2ef6c3156cec6e526a44d27bc033b7dc5b217e289fdbff0bf149";
+  sha512.doc = "307109b75129099c191a65a7632ad0cbc903cb2b621b199dcceb7cab5ab5ddeff7ee504d7da3afd653e1aac04236efb6a3c1225f9e533a777295052bcc28d2ba";
+  hasRunfiles = true;
+  version = "0.8";
+};
+"lplfitch" = {
+  stripPrefix = 0;
+  sha512.run = "189b9d6000d4b762a3c64652bb05f9465d5c789b7e2413e8f0ca281a8d4729a3044aa955ad7eb82c7b8513bd547bb76c2ad2b609e902b07f8f4f018698e17071";
+  sha512.doc = "a690ee2c1f9cf5eb36693a4a9385c047a31d29387930211bf6384d7cbedb3d1f1696c0c04269b02ef29b13ebccc69bbc329772f3fee209a1b1d51768484f9a50";
+  sha512.source = "b06b45d992045111d1a8aed78267519f8b959415b00b94f75602b35cb7d37c47092e726db881d9094e82d3e25492513db66b210603730f8119d10e60819ec89e";
+  hasRunfiles = true;
+  version = "0.9";
+};
+"lps" = {
+  stripPrefix = 0;
+  sha512.run = "8bc59b5d8874fca88bfe62822f2050f5dee0461523d853a1c92a051e854ddd6a8b2ce235a674bda383f26ad01d6e18a83cac87db2ea73b4af7e22e74ff823d0e";
+  sha512.doc = "a8ad542b5d2c28a9a02b5e4d4a43a13e2f3469512cf7264eb7ed78e2c5a29228531de3be7e84e557e3cc8a9ad60e59ca426da3d5e034dae6b40088ee99d2fd94";
+  sha512.source = "d1ae82c4a55280183a85fb3eec77306990f694f85c5d6b543b4ce4bbaf87a01b7fae2d6892bbf23587738079be503ac94b6a68b372ca1948863ceab826975a85";
+  hasRunfiles = true;
+  version = "0.7";
+};
+"lroundrect" = {
+  stripPrefix = 0;
+  sha512.run = "6e4968db6d4593fb0ad66c58b7977b77cfc5ad29a8ae8648bfa0f7844d71a809e0b381acfa4563cb1795177374963ddc10e8fad8a62c1523ea82288c7bd02087";
+  sha512.doc = "12e6bccf3875f4045558df6e274a13f60fb7845a998de2e8a722168cbef2d9003224f02e379bcf0752770542aed15ec1d1e680a54e347763b554535ffc2e1042";
+  sha512.source = "cf39670d2c17420b2283be3264b163f7d4df70288b6c974674cb0ca4d52e3d7f99766f9f0c5b8636348aaad2ca851d1c4b3d530a2a85567a1bec2804ac5d70a4";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"lsc" = {
+  stripPrefix = 0;
+  sha512.run = "f61d81a49c25972e03120cbf6557d356d6df6937af6e0443e47305312485217b6bb5c0818adf248fb860ec5d42c07fc22fdc0c54f9dd1f3bdcb12486350316da";
+  sha512.doc = "5d0550421ee0657c378cc1ad8159e16e43644f533e3d8a013d917c494bbb8d11cba79b99fcaa7bdcf8ef5f5deb88d144ed64d75a5682fe4c4187c60c634297f5";
+  hasRunfiles = true;
+};
+"lshort-bulgarian" = {
+  stripPrefix = 0;
+  sha512.run = "b528c16903ca8ed5ce69f5e2397dff8f05b13016384bc1304980cad71d86bbb55004d41db92dc29dd412a12b9a0a1b1ea99afcbea621a25bb20da4639d008776";
+  sha512.doc = "7cd22cad45d7ef2972679cf2a3653c3bbcb1d9bcfe94a65fb9dac23760de05b659470ca45cf8be13513924fa1cbb98599a304a51bc18f8f4d6631f082e662bc4";
+};
+"lshort-chinese" = {
+  stripPrefix = 0;
+  sha512.run = "29c47ba7c96ea569e85df3b94962bb60e9d81259c9a30e04ff2d51bf667bab0fdbebb658f432907f4cc813bdf0f14acc0cb28b24e35f98a9e4278e1c591e6b4f";
+  sha512.doc = "5365dc7936d87d7af00909d9f3f3cbf4f0423777862407cb264a6a2d73ab9ab90586f7396ef606baf94ac95257742fba43aa1a4b48f59f01cf33bc15ae62b572";
+  version = "6.01";
+};
+"lshort-czech" = {
+  stripPrefix = 0;
+  sha512.run = "feeb9c7244f686767c5f72ab3da8aa2bca69af7e6446e1bd8eb4dd858ef92e4a4eb6f42cf8d429127a20e84cac894732f0e05a360b47af02f67340b09311e495";
+  sha512.doc = "03295ea4bed83fb67a370ae547945335f51f6441ef913aba0ac3364f258153c6f5013d57e6579f3be6a9746a22cc4f34762871569d9d68c0b0d2acf40127fd80";
+  version = "4.27";
+};
+"lshort-dutch" = {
+  stripPrefix = 0;
+  sha512.run = "c8635db5888817d392706b8b65aa5158a4973cf236dad7fe31a9545857daab15a6c1f2f82ab06e71e50a4af94824b17ac89c394a759721e192966a1f78433d47";
+  sha512.doc = "29fc8b6a2645f241e8af437de3a295be8d56a088bd7c7666c35b14f104f242e68ecef2757d62a393400d9f337eb685e48ebac06769259c723d634312a7288ab9";
+  version = "1.3";
+};
+"lshort-english" = {
+  stripPrefix = 0;
+  sha512.run = "88214b8addd6169f3bb1168e2b3eaaf9786e0c20e9261ed403f8ee6c95a22252426438b75d0ef74770ec26cce1da012ce0d908df03fcf1aa0458294e8e6bb603";
+  sha512.doc = "14a1bd61570b2445bc8f38595260aa791760a0bce82419acfcce0109698b5600b727c78233edf3cce25b1e2b17dad97cbd8829b072fa7b33d71a3949fc74f303";
+  version = "6.2";
+};
+"lshort-estonian" = {
+  stripPrefix = 0;
+  sha512.run = "6bd3c07c1e5f9d543b0f67a5585cc33252567cc346a8d7feca050baf8ab437be97e73d2c4b4b159102e9c4772f8cce2abcbc25486d73e976b83a3d2f4b9e9487";
+  sha512.doc = "e16397fac3e6cefa699b412ada1851c7792520da8af1230274fa1a337b890629b68f71d94b3894044f28e687c6aa60d766377e12232d0e522e82e18dc97428e3";
+  version = "5.05";
+};
+"lshort-finnish" = {
+  stripPrefix = 0;
+  sha512.run = "997db393d16942e78e4f52eef886ac7b14cba7ec3fd0c88f8c2cc74fb6b35f3802c58c51ac0112cc2b086f9c3b965b5f8d508ea81a36edb7da1ce84ef83cd203";
+  sha512.doc = "71c2e5c4d49a779f529a527cda5fcc6e55cfa0149fc2d9272ae7e69aecf2a8a361b057bcfdf5deaa7791073bc6252c3101f5ce0b8d231c779e99c34910a3343f";
+};
+"lshort-french" = {
+  stripPrefix = 0;
+  sha512.run = "1b2ab00e9e69eb058afd96c1ed099b8c783bb97bb52411cc907afcc82d43167ad6e2023a95671e90d059ee43ae335dae3401cc0d1b53c19c186992756aad5060";
+  sha512.doc = "2974f067584486528adf42a13cad28afd205f2f52680e89e8de33c4c0debdccb2d0d9d8259d6e2adaa5f86af0b9451232450d40ffacd9f63c43af2519cd8a06a";
+  version = "5.01fr-0";
+};
+"lshort-german" = {
+  stripPrefix = 0;
+  sha512.run = "92795389c811be26f98af6df5bde8c521ceecef1861facab67622811a9d6859ac83daa78f0f37257588318a87214f1ece3f0ada40790661d09938914b0cea437";
+  sha512.doc = "11a2745ff16418ad28dbe1cf4b88225a86899c30d102ea8fa6f3775aabab102772173335cd4985b8fa9b53e324e060ee11d8d31ededf0f6b7f5020443c835331";
+  version = "3.0c";
+};
+"lshort-italian" = {
+  stripPrefix = 0;
+  sha512.run = "b92c1566d1a7c9a079d3d770e9d5bc8e33e61da53100c3cb4617e37765076accd16b89210da12ff954e25a97c55d8a2168f81789ab31c05f66bcd6a19168f719";
+  sha512.doc = "2f46613ff2ebaad079a8f2bea6756932aa9dd0840977dcbb8ee195072c1d8c590549e362dc979e9bd373a46ec44d21303aab72f351d799d2a7a3f5b6883e2c06";
+};
+"lshort-japanese" = {
+  stripPrefix = 0;
+  sha512.run = "25de64f37ca5811ce39c8efc3e895c1deea317c8dd02ac3e091a41ff11ab7a4730a0e476d323d8375c41fd60401cf441c2c15d614a090092d66413701500d43c";
+  sha512.doc = "83292d42fa21614a055420eeb372ae5cf21a9a15b999e0b39f1063f63ee7fe53f77ce771a8aa649e860827214138fbd435161cb3dc4b3fdf2b75775979d904cd";
+};
+"lshort-korean" = {
+  stripPrefix = 0;
+  sha512.run = "3353534a09681a9f1187156bb6cd9a3b4586b135328a7ce606a0e3ef15844d57ac76b5b55ee7cd42b1dfe3d67f784d4f0682c3ad0af0468ec2433452127b52ff";
+  sha512.doc = "046095e09db9664f68b985882ac92da51895342c79a34f8045853df40d868a2d60c1189b93e47843ffe6fd4ecaa5e7144eeb68bb2954190a9d6bd99e9bd50de4";
+};
+"lshort-mongol" = {
+  stripPrefix = 0;
+  sha512.run = "464b6638ca4bf859ff178238625ecdb7016598fc98c476d3e4b2a24e2f34e6096edef5864ab325ab4df21bcf309a8467deda80b385b624685b38b538a0d40b8d";
+  sha512.doc = "cb60632992b187e5cc80973b9e9848675b464b075b13356db171c1a7613c94dd9bf8ea53df47e0c36c910772316f4c43857c8e638819d8ece7c1ce1790fc9d29";
+  version = "4.26";
+};
+"lshort-persian" = {
+  stripPrefix = 0;
+  sha512.run = "6430462b11786fe3703e78efc9f1486da78db15601ae31e72a95d516d10a098c8b4c5dc9079490e652c57369698d3b4fe4d75b32c44ddd2a470aa5cbc79ab492";
+  sha512.doc = "9e7c43f3df8299db4bfad3c0b270c5b54a1448370e6782d095dd9a9b82ccc186aae98da86b2efe71c34031a5f4a07f54f4640de6d8b6fad913252979d440ccd1";
+  version = "5.01";
+};
+"lshort-polish" = {
+  stripPrefix = 0;
+  sha512.run = "13c52981d80ae9f9da34dbd14abedc166bb0abfe3dd31ba11f684b5912869be62e61a28d57d93dd81fe46f4d694429b3406bef774fa8b18b9918989fb839bf31";
+  sha512.doc = "a284230f6599cef5fadacad2a3cac07f829cc8ba35a64b798fc76839b57a8867f745ecebf75d41a0c3bce05b3b868451ee141c65fe0dd8365d1807a38b8dc237";
+};
+"lshort-portuguese" = {
+  stripPrefix = 0;
+  sha512.run = "2c2d56eb0313dff9c2c102ef9d80d8e6029e35ab1ed8df5442c68b80fe4d746b3fb36b91b40cd831127e3004e1015ef61bb4b1c655d4e521f699ffc301f6d98c";
+  sha512.doc = "d9519e2dc7632c1d933c62696aec95402ba0cce9fe6ab74758073f23ff474cede7af24d97c9a480e734f801547c062956cd4541dd61064d004f00410de88bc15";
+  version = "5.01.0";
+};
+"lshort-russian" = {
+  stripPrefix = 0;
+  sha512.run = "71e40e2502db0706d5ea1776c49888a05229771eefea3d17b8260d489099249c59ff3b94f53eed14fb7b53806e1c29f99386cb4118bc28e2bacc3dc3875eaec4";
+  sha512.doc = "65183cee479c3f3afc909616f39c6e8a51c4032ed67563709713d8c1d9a6d2f681914c2ace4bacc88cbf37a4bab4fb400b2ec108b257b4e3e67c0f0611de6eb3";
+};
+"lshort-slovak" = {
+  stripPrefix = 0;
+  sha512.run = "bf3821d0846701c2e45d89578625f517567d401d613f5aa7aaa4cdfdf8c4c4f87abec22d6fccac21b274afdba9c29c21a6918fabef77f4cca506071341b7cdbe";
+  sha512.doc = "8ee79c17e5ccc9dbb9f833b4f8927b22e7ce368f49f4d016fb936d2a5ec964791d9473b679a037d704efb269dc6caa1344168927a90a8e859527c64b0410996b";
+};
+"lshort-slovenian" = {
+  stripPrefix = 0;
+  sha512.run = "933781a7b3b3481ad955aa346fd1011f9e6f8b27cdb4461f081a31331e8dd5fdcde72851b44aebfd9707a422c133099790d1f304c9f24f35d9fe2e12927061e8";
+  sha512.doc = "21a7611b67d9baa0065df15e86b38872f057bd4b3ed2a337e19f52a5ec49b409f4b1297d7d0ec951f40d0b1b4cd18cba1f1ae33228142ac27178520579659065";
+  version = "4.20";
+};
+"lshort-spanish" = {
+  stripPrefix = 0;
+  sha512.run = "127fc2d598f16d38b075b4a9668ded064537f7056aae34bdde22f89aa8d301d77cca818976e22aa036f47867929d30cc47e02ed3f724ea26279ecba723e5baf4";
+  sha512.doc = "f968352fe1e32a918c1d5ebfce16d3975c436539349af22b32bfae1ab06061ac2b2b85feaed3e8a28da89956f4d5948e7d1a6426766144b0c0ebec72ecfe99cb";
+  version = "0.5";
+};
+"lshort-thai" = {
+  stripPrefix = 0;
+  sha512.run = "924081bb5ec18ffa92e92f71a5eb6da893ffe0b7460f757360e3bfdf15c08d4cbcad79b4d45cff702915b98ecea16212c4d5ab237c11410376677de527af71aa";
+  sha512.doc = "a9522c99f62a8f51eb751d220495526f40cc7581b8d0fb120d6e9510b1af68e2c97158ec54fb220dbab4fc8d0070c93027741b549d01cfc3892bf373e3320f4f";
+  version = "1.32";
+};
+"lshort-turkish" = {
+  stripPrefix = 0;
+  sha512.run = "769036083d282ab95c5f1fed08d669dd4fb1d2dd7937e5a4e2fad54e20cf56ce3d5100b7aa612cc59dca50b6ff67fbbd5bbe05c085b6121654f873fcb991609c";
+  sha512.doc = "3aad40a5de5eee9e59064b15fe3e9c6a2585146fc21fdaf4683bfcba6786366c4ff1b3c38b6932426f53a6a9211809d4173f688f0878cbf2011d8982e3732834";
+  version = "4.20";
+};
+"lshort-ukr" = {
+  stripPrefix = 0;
+  sha512.run = "18754d10f48df3ff86d644b772daf7f6530c4e03f0bd3373ccb12df2181aac26b4b5cef6bb673674b576a07fad2f3a13a5fde954a389090622f4d6f5ba9a4bac";
+  sha512.doc = "03b8947d0e1d6e9d331c6ce6d60ae485bfab1b73ed936086a21f26b3d87116de99e535cd42f16561d3b839c84cbd343f8fa3167b1c478d6f8d0df3964d800e56";
+  version = "4.00";
+};
+"lshort-vietnamese" = {
+  stripPrefix = 0;
+  sha512.run = "ab9369125fa7283dc2a2b58999f57db3e5767e1e6810000fb71f2f0abdb693a60c2133703cf3427d35732769e393cf389733694aaa6d9e41f9ecf28073d06112";
+  sha512.doc = "ba2fc0eeb69f845ca306c7a03c7f7a46cacd3304c420c048284d248202a12f34b176d91244ca25892a64f6ab734e852ea83ad888684cdafb644da7d665a02b2e";
+  version = "4.00";
+};
+"lstaddons" = {
+  stripPrefix = 0;
+  sha512.run = "8b2b14b28bcc4a3b4f26d2f48bbb59c111d4fd33d5479c20f7e03ac838c6b6631b99b1a5211b383e58dec74d70d9130af2a38e3b85407c4376f81e1b52c212b5";
+  sha512.doc = "82bb6745b9f2342628bc83f356313c0de52148eef25ed3ade22f899693abe190de1a09347ebd2d03b06a5976d8c6f42994e2495eb7c4e513ddfa8244ca258cfd";
+  sha512.source = "048555cb2355366b87d527a39ab64ca91226d366d52e2352c1f4d503daced739508e217893dd0d0b405e99b5927efdda0f68c780215c392494dcde20b30a88d9";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"lstbayes" = {
+  stripPrefix = 0;
+  sha512.run = "8089546f54a849fdd2b8cd1bb2430927a03249f1acb72bd9d37e9ce42770be2413c6ba8186a45eda8f52a3ba2f34e01e6073ed7acce5883d9407e4ccd86cc12e";
+  sha512.doc = "9e256d20493164eb1ed01bb6f7dc7f555d9617492fe14688c0852b85e27c1f8f7f1978b1352ea3294bea41f77ce505c6a5bf2910514240e62ce19c47c8da0ee6";
+  sha512.source = "9378291c820b65d1f1f126a47d6db40ad757009d71327f84e5b78fc4309d77272231cc892fb6881426130d6571b0e7caca7ee910117a9e2660cef42f6f0d7827";
+  hasRunfiles = true;
+};
+"lstfiracode" = {
+  stripPrefix = 0;
+  sha512.run = "d2752c177194f4926191245f6397ca1ad613e66708e245b29ed6719bfb7438cbbde8dc69a639bdaf7a4447d7737909a5dfdb465a0f0b446c0d30900b7d279c6c";
+  sha512.doc = "ab396312abc4174267184dc2d5f4dd61e4510d3b70bcf1b6b84685cbe2e5941d6325d4abeb1d08f85cef62adc953d4a59ebc5d99fe9d7c643f7d25c3d36bfde7";
+  hasRunfiles = true;
+  version = "0.1c";
+};
+"lt3graph" = {
+  stripPrefix = 0;
+  sha512.run = "9a3137a56952d18f41337f3ea1412180d6a0d7732178fe4855d23647d01648ddefd57859f786534c5bf39cb622da11e113a028135429ca38e6ea3bcfde41b5ca";
+  sha512.doc = "efa314f54f3d7444931f4b7410c406fc89c35fc318882683cc97cd479faae00d3aeb58be06c9b174e59bbcc2bae57ff712983ba0c216a270441490866646fcfa";
+  hasRunfiles = true;
+  version = "0.1.9";
+};
+"ltablex" = {
+  stripPrefix = 0;
+  sha512.run = "5a64bd2904338fc45d6150c6be6497d56cf2e190c41018527a59ef075db41f94378f8981d4b92e211f60f2d641408144c546f2de0bbe4a8e94b0a3cadf4311a8";
+  sha512.doc = "c3ab3559880077f63523c84cfc5cf363cf9f1d2c4d8aa9cb173b4a2dd07e5afbbdc9b1ea1b29cb50b64c68d65f4470dd9c1656703e0a1ac8955b72b87e33e804";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"ltabptch" = {
+  stripPrefix = 0;
+  sha512.run = "15c839c34935ee27b0b741325a13cbe6ec2f918b007ddd691029ce341173d12ca0e5cdef3a0111c3148257babf686815c5f81c92b6019cbbb022608535f17283";
+  sha512.doc = "d85ff06112e540d5bd3cac2bc6100d7d922e44d3388d247e521119ee4145716ef52889515b640e85c8a21405a35fbf63b168af09253e772e826572b0560305ac";
+  hasRunfiles = true;
+  version = "1.74d";
+};
+"ltb2bib" = {
+  stripPrefix = 0;
+  sha512.run = "42e634e7c3018b87825e2bae40513eeb757520e1dba1b1b20244bee2d0fadc4663cbfa0dfdf74fa71f7821f47c41bb7c873a64cc68e153f9b7207f6a8bf3f8a9";
+  sha512.doc = "c26b018043c14022acc64bfaff6377988b5e40d09ac10916479079550bdbcfa5219df13988327679e7647c4a679490645376ed23be0601dc4df0528d45725325";
+  sha512.source = "0ed23f0084e3afbf51cb6a5c6079db62fd8dca9ef12a159b4be1d68ede6b632155ebc0ee9d6fc91cf93d2cddb5463b5d52b14cb72e7c1d61b975c891f710af3f";
+  hasRunfiles = true;
+  version = "0.01";
+};
+"ltxdockit" = {
+  stripPrefix = 0;
+  sha512.run = "1144bd68bec92b4ac9ec8763e2e7df7c6018cd8b88c7ed2f02e7597c3bc13608a562551d80fab2a41b8aa9881848fa1b3501da7ae9c39edaae3720875ff65bd8";
+  sha512.doc = "a47852f464e8c31d9a2926e55d62c090292337acad6398568c7082012899045ce32163b798b25ac090e7fbd6ebec95f17a83ee1fdfe5f1f33d0b423dbeed94a1";
+  hasRunfiles = true;
+  version = "1.2d";
+};
+"ltxfileinfo" = {
+  sha512.run = "ca078af6b822747e9b337eb5694c1b019444e55f5f9f9dbdf59fa1a65c9445b19a62b0d610514c9231365017d3ea95ad9288a37b62b400c12df74c0c7f774a44";
+  sha512.doc = "0020ffc5874e0545c7ae4d1f6f9c0d5d598786444f4e98369e0c5fc872c5d63f235222594a9b0f5d2def5c3dcafc5ad660a4fd5a9e4551dd7717bc6ac06189d5";
+  hasRunfiles = true;
+  version = "2.04";
+};
+"ltxguidex" = {
+  stripPrefix = 0;
+  sha512.run = "bb808c7fc1d3fdc7a4d065822a5ff67113bd9fa47a60762b5674040c52149cad14ecd2d0612216b15bcb9684e65e9b51312f83f14030e66de37ee30dabbad434";
+  sha512.doc = "534e51a54903e1bbc783b5120015178c48a1a9ff3b06b2121bc9f79c95b7fdc1bc64c374af27a357a44c67df45bb70699d788c150c625d7d949acdce5b109a3a";
+  hasRunfiles = true;
+  version = "0.2.0";
+};
+"ltximg" = {
+  sha512.run = "28486dc83e37120eb5c8e0218541f17f6d9f631087b56890cb0bb9a10e3599d4afb31e997f736ce99476491ffae01ed9ae3b4194205e366dd0a2ea09dc2dd565";
+  sha512.doc = "c8d688e451537c6b08556f3d021cd552ba491f0b031c253e0f914945604b492c4d2cb2b7423ad2f95cdd4ed180c8b0bee1501e28f7fc0b20a551b735a47a2094";
+  sha512.source = "ffaa0f7f2d7a6bdffa12aa333a50e3729853f61684ad85a06e6583fde646e968e9ae3ba12a98655f3cd230c9cdd7618715bfb6b268928a06b3361e8194bdb1d0";
+  hasRunfiles = true;
+  version = "1.7";
+};
+"ltxindex" = {
+  stripPrefix = 0;
+  sha512.run = "ff757a44f29820ab29946f66766b11a928db11b90269781b8039428aab4bf0b243b317176aebc92cfe95bf2e390be125012daa72ac4b8bfaab81477ed8129ba7";
+  sha512.doc = "119f18b8337b365e09b5d6a22ab447bcd0d4d516514c7bc6622d8b1f30aec5746f45d81cfbc07a81aed9de7f47627797b9c7cac3015092f7ca72acd79d5263ec";
+  sha512.source = "efadcca7c0224c4bb3814588947f7dc507140dc3624c5cdb3c7a788afa763c1cae5f607bcd4a67872dad97e725afe7e9f99f3a694c8398aebfaacc31f2b737ae";
+  hasRunfiles = true;
+  version = "0.1c";
+};
+"ltxkeys" = {
+  stripPrefix = 0;
+  sha512.run = "f99008a8d6d18697d095721dfd741ed2dc48f6edad09b15d39ce2c37f05e6f9c9d613a4ca7ba7fce8755f9dc5659e21f7e7961a7e38dbe17b7114c2337103d8f";
+  sha512.doc = "ab28eae4955de3e5a23be1d718fd1e23384ec0e4a8c4b86348bd83ff501ec2e51a3981c60babd478bca0c115ba524367f77f3cabd3f733b82a9fe4cc5fc06878";
+  hasRunfiles = true;
+  version = "0.0.3c";
+};
+"ltxmisc" = {
+  stripPrefix = 0;
+  sha512.run = "3433a283f52c41f198b944eaf58a961751e7fd3c0991960a2516fd72af61671e776f48c6a5e241e379b54a08af6fba732ab1c35e42b8c93a62937b5a38cdb767";
+  hasRunfiles = true;
+};
+"ltxnew" = {
+  stripPrefix = 0;
+  sha512.run = "7dda3fd3638ddf528adda0430cbd32cd8fe410a743b7af5bf76e651ee98b10f2481723665a19fda2f2b468ca5c4a838144cbd6e9c457f50362f7b0e83106de26";
+  sha512.doc = "91e07169ac377570382b9bc7044c0d66b61268fca38e2fcff4d7075322dbed0d3151976848c93b5d0a2088676e67f3a79d2a555829f170ca61a37b7c40fbdf66";
+  sha512.source = "0718785df4355f264738d8929128e4024eae629dcc1fc51e0d408ace6be8688b9281bc0e352e401a6fba71b0a3f376610fdbea7520443233d088e93740e0dbc7";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"ltxtools" = {
+  stripPrefix = 0;
+  sha512.run = "aed74d79bd9da7f7303cd14db5c2a74aab51de03e87a84986b294019a971eb68a445cace8af2394631fc4ec6963ad32347c47a80612f70a7427adeb689d3cf36";
+  sha512.doc = "e0a8b28f512a15fec379aeb3350c0611a77652531a66ee5a39010400fe5d1416c40bf6bd89d4e967851b09ad5d11b1d83ead675a0a722255a0e941980d74d1d5";
+  hasRunfiles = true;
+  version = "0.0.1a";
+};
+"lua-alt-getopt" = {
+  stripPrefix = 0;
+  sha512.run = "94d186ff2dbaae126995eb2ee71e52145e88b32ed1fa765a6011c0d3935f19dcf41692e47699abd176f680ba8ebed58142cdad7be19526f7b8c249dac43bf3d4";
+  sha512.doc = "b7cbb2dff24692038f38e6185fbd6471a6979dfd8b659fbd972c810cb701aca59aeaa4d30c510333003819ff08921f3d57b9c43a7044827a35472ee54e3990fd";
+  hasRunfiles = true;
+  version = "0.7.0";
+};
+"lua-check-hyphen" = {
+  stripPrefix = 0;
+  sha512.run = "89cd0a13578d386bbf584f3c74c6c3ee1a45a7c0bf40480e5396f86b2af29b26abe3ab8aac69be0f1fe23cceb6da33237ea38384854fdfc7be6939832a8cad08";
+  sha512.doc = "cd756e0356b36ccd26d1d78c67026f5a27272ac383bdfc6f44ddb630f58d067c05fb9152f1ed9793d71a63af6607107b8d4b5af311563e2c3d966079b2d3e0c1";
+  hasRunfiles = true;
+  version = "0.7a";
+};
+"lua-visual-debug" = {
+  stripPrefix = 0;
+  sha512.run = "2b809e240570105b46f361ffcc031719f4afcdba45d14b4e51d4cbca10a7d189b385c00c9b277180bed4ceae45b8ad58e2145ac6f8de5d0568ff5f86b67c2cc5";
+  sha512.doc = "814f650ce8505338b41a91e1e7e55872f1f35252ed5f1c3c74f73379b4c60c62e40d48a2cc5eab62b4a726db29fce70761ad7a2a0a17b7d5019859fcd72098f5";
+  hasRunfiles = true;
+  version = "0.7";
+};
+"lua2dox" = {
+  sha512.run = "24b6cf17ee55a9699077aac82263e442f1ba3e7843742baf425a4d4c514cb2f4b1ea8a4af9165997559560f2ed060ef818d3a57f71a79d6238ed29ccd263d787";
+  sha512.doc = "96746e4d0401cb0bb9cfdf7a44d2935d4e257dafb0f5099faf647aec0b385745518f160bfad8ae54a1ec018e0afcf4a7dc998cf9b7f310e0ba867bd2e6213960";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"luabibentry" = {
+  stripPrefix = 0;
+  sha512.run = "00349f5a6f5ecd5478bb718bcfc419953db4f90c9b2a70aab2e2bbce4395d189066b39cca743e5b790f588a3f2a17047a6e233258c4ef389ad6fc5338184af69";
+  sha512.doc = "9ec19b99275e3117f07e445e2c039bd504537fd470f62fb7f7f7fc428842ba86ebdbf0bd6a6be7a3b1b99100d209c6c47a9795c776287206afe331601222acad";
+  sha512.source = "628ff69779b5eba6056bb49b3bdb4017a10c3c4afd710319de9ac3168ffa44782969ed67399f8c1a945cbf77f1bc44ea33b0776a9f1f14aa2e5e29afb8cea544";
+  hasRunfiles = true;
+  version = "0.1a";
+};
+"luabidi" = {
+  stripPrefix = 0;
+  sha512.run = "080e97a588793eba6ca8b63ba25a7046006f4a788136d933f21009e0541c5e92e995bdb9970a5c4a921ae0654a1a29573a922ee5e0a3ac58fb30cd178f7ec736";
+  sha512.doc = "20667a11108b51603ff5866c85e023176d27bd2201c8e4736b6cd2cb895fd30f205bdef0077dff65d0d8a97192f74be6f6ac4a0ecf3948c51196071bc3be59e8";
+  hasRunfiles = true;
+  version = "0.4";
+};
+"luacode" = {
+  stripPrefix = 0;
+  sha512.run = "b107c9cf774608782c1ba1ce3ebea8d330ff9762046eaa9b9de112b704df1d0da1bd7e33b15e9d847f232b7594d53fb2678cdb78b23d87aaac73cc2517ac8e1e";
+  sha512.doc = "622a2417490fb818d5021bb519ea7ac8d886df5002534c4d269268ca4d2119ccc15b029111edb42d04a546e7a46a60bc8eaa6a0a108e9231cc49fc2141ed8ec7";
+  sha512.source = "fe53aa46157e24f7f637584faa0c18de62ce3857d9841598f51e09a03354e9cd44bb8fc150e91d5b9ad6d1ca150a065fb1507847cc385ca67bf67679669d7ef0";
+  hasRunfiles = true;
+  version = "1.2a";
+};
+"luahyphenrules" = {
+  stripPrefix = 0;
+  sha512.run = "f1486d23a51111023fca3771ae530ca058c582640ddfc17281a66ec055b05aaf24021c724566f5e9c9a5bd674eb8724964fae78762dab30182d8a95333293efd";
+  sha512.doc = "152f690268e3b1c6073b36a66965c84b6bc6f45050b2887b7a2ed67be9497ea7b1708cfa1335fcf296d6a2feb11924120336cd89ff3017cb7e77808e9927e9c6";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"luaimageembed" = {
+  stripPrefix = 0;
+  sha512.run = "c0ba8a3164f1a87cd12a5699e9caa23ff7a85debed9881798502436bbb594d48a2e15a135e3a18efb9f3d825af98303a46495148142c810e4601641fdf925654";
+  sha512.doc = "188049c30c2c845d18e1a20af3d5ee009eab6064321b1f09aee4b77c3111317755e698e28876561440695c910cbfea6f67e41a5195a5f7b50d45831d7b78d76b";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"luaindex" = {
+  stripPrefix = 0;
+  sha512.run = "baafe2dbcfcc07293ec04f775becef7b59a2349ed5c98333c5a4e680fb3f8561f8749a6abadc6901cfbeae1b6e9a47cca05e8ae76064372585b7d7f4978dc844";
+  sha512.doc = "c90deae24da8584170bc2247d5f6ee22ba522c21d3d0e05a6ec2b9594645a022eed1fcf12c3ffbaa03ce0d92a16f75550dc7e0694920ef58b17bdacae02d6fc7";
+  sha512.source = "aa97d6618e7af11a7d5aaee332736aa60a8ba5a2cf796296368736c7d12b1e6eeccbd5c807cc2129fd3e4310617dd92e14aeac053753fe7267899b9b3459d8db";
+  hasRunfiles = true;
+  version = "0.1b";
+};
+"luainputenc" = {
+  stripPrefix = 0;
+  sha512.run = "bc3f05260800cc537436377c1f9fbcfc6a1a60a7fd892af23ab323171208b083c08c8bb2a5d299e4ce09468f66197d43f68717a57e649c50caf74b736cdb06db";
+  sha512.doc = "7c6093b3fa622007aa7e6cc852076090e1bcc64e9b890d1ff0cf6ae552a21e930e791d32cdc2238a0f60c605c92a2192dad7e9d423a2d6e013582926957da58f";
+  sha512.source = "a9ae3dcacf7ed85f5ff63e32c9fd66ad6860e149c3d2737bcfad870137b242797b8a3f62e90f290931e6884c74f70a0716c72f2e5414cb8406e5ec0141f13831";
+  hasRunfiles = true;
+  version = "0.973";
+};
+"luaintro" = {
+  stripPrefix = 0;
+  sha512.run = "2585639b6a7b93019f8fe4dd353332dabbbfb5663b84b1c92df397e940392a1b3bb2ddcec203bbb1b0f4244ac26b62f9745fdf50cb7512f96e5c12af8c08335b";
+  sha512.doc = "47de79cdc637810757b7879956cf758a77cde95e77060ce74829b438d13b58e23cbc8e9b328d0850b44fd8de8da90fa9fda206ff0e206918f1bccdf5d71d2c38";
+  version = "0.03";
+};
+"lualatex-doc" = {
+  stripPrefix = 0;
+  sha512.run = "a1d98422b13a26aa844213df2929629889ed6bfe3fa16c27f6376f00f038a50dd32c5128a27ecdd872d3fce8372fb93ec603c0c92edb8692325f1e76fca685d1";
+  sha512.doc = "0756a0183d0b7b302f24cd16a8957915a69a3db3fe4a8a4fc301e246a0563f9fe81ce2af667b7bcfa45717b605be163cc5fd4c170d8584028f2ee7b2120390c6";
+  sha512.source = "a18a7644b50ad608dbb2bbfc15f2672fe7b9a48505c3224dcb46aa97b2d57b5a007c928dd5b76518c8963970bb1b8b56bed8e5c374ba5cb18a9521528dfdd58f";
+};
+"lualatex-doc-de" = {
+  stripPrefix = 0;
+  sha512.run = "c1bf1c7f367e5d15cb1a5ba0878a4f02dfe25772bed22b48f7376e8448569247233ee41ee8b58c156494d9cf0c0956dc23f4576f053cc349896247de0a96444b";
+  sha512.doc = "b615887d8b543af1c125b6e9fb9c533f52816f8087075a8bd4e6ef752ff48f51169f5945ccb067228612cbdeb10dbeb298a090bdb93d201b9629b128b0c5a466";
+  version = "1.0";
+};
+"lualatex-math" = {
+  stripPrefix = 0;
+  sha512.run = "931421eb1cfa64bb14050efc449e9d600ebbecfd524bea0162c1e20100345a85eee0d45764c8e1ada7429fd59ea6124b757f9361eb4183b2a295b87c62cbab7b";
+  sha512.doc = "33da41b1515fc58b68fd8354304ae454b0abdd5f41475260b762012216595025a28db60f2997e5d36553ce551f13450024e9c017b9971219667aac57df84a2ce";
+  sha512.source = "1b05c3b7c1ca0d8e34f2f0a4f70c8b27996db61313117b63232a8b0164ff981fa59d932aed6ef8ba41f2b82c35a11d90525a246f12dfc935c8a87380525a1a13";
+  hasRunfiles = true;
+  version = "1.8";
+};
+"lualatex-truncate" = {
+  stripPrefix = 0;
+  sha512.run = "f4de38427798b565aacdb127152cd7ac8a42b441c555f742f5bf90480f7cdf8e182745a5882a9c8e0645c529d27647a056f26b7493dadb13216972794e617341";
+  sha512.doc = "704b34da4b8ab787c53f2af21fd17a29d6c8e1d42024de2ff0e65d434a502b47022fa2a506e149b67ee5cb542f2f4835babda315b1dded598f63dca353aa78b1";
+  sha512.source = "bffd59b8b5a7d02f40f4ff2f4d028aa98ae26b3d9d9cb432f531211fbcf65d18814653fed07b68e4d34f65d514f7aacfe6bd5aea956a12f7fac2e088841ca02d";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"lualibs" = {
+  stripPrefix = 0;
+  sha512.run = "7f0f9109835f61ae2d55dfc4f1cb4759f2c9e7f54987ace4199acf4b435c4222ac497256beaed06002e3be645fcc149f70a49507190615e54a0ee4e0e4caebf6";
+  sha512.doc = "3ee3797410c8524575f51feb669f079de3014d0fb6a18d3883a3ff1d2442b7c29989d71f80764c0991625b2ff2fe1ee23522cb28b1c5d7e7f56b702f315bc56a";
+  sha512.source = "554fb8b6b069982947964cc3807f2161c76373162944c06d839cfb0bb50220f6f3a8388cd4f0c56c3bca900228fd7c49b0548df6b754df2e8a66b4461bc4383f";
+  hasRunfiles = true;
+  version = "2.67";
+};
+"luamesh" = {
+  stripPrefix = 0;
+  sha512.run = "f9ae2e27725aa78c7a6c7d049d0c25f4a4fef260dd2a813a9cd6a4f49f5ef1a786540c77c88c0778c5ebda5f188ca8b62be8335d5bcf0ee1a5f22df193875cc3";
+  sha512.doc = "f25df210662af9d91229a99228a7f15bfc58510adfa2f5a91c586b4ec30b2482ed044b30db40cff0a5c70dfc70ab560367efa96bc077bf412d536e15f1e32e0f";
+  hasRunfiles = true;
+  version = "0.51";
+};
+"luamplib" = {
+  stripPrefix = 0;
+  sha512.run = "35aa418e3c49e4d6943b2f4a118e1aaddc54a4337be32da676fd8bf37b8d47b78a63d707eadc7c00a9b90648c07ce1e26b21523c7167cc4f69b9a25608d3143a";
+  sha512.doc = "e994c52b44da2df051e66c2cd66ab88f8f705905b25472906d558395b1c673da797598cf0be44127f10d448cb36a0f0747e3ca594f632d7bc6e40f916889ab0f";
+  sha512.source = "9150ff583540bc6511874994b708a313295d01fc319accbfbac9e8b4176f9d146caa5ef3bc567e733e8938a88284fa273b38940615ee9fc00d04b7dd39e700c5";
+  hasRunfiles = true;
+  version = "2.20.2";
+};
+"luaotfload" = {
+  deps."lualibs" = tl."lualibs";
+  sha512.run = "b0934de001e68e95f1e79979e11d85a2268f67957b31b4f9d0aa5d069e5bacaa5c238c892a75146906f5aaf41a7fd4675f05c3170f3cc1ce4c96e25ff5233169";
+  sha512.doc = "eada60cbb87c0bd80b2b54e4bdc650614ce8841d8b8dfbfb4019f7abb74bc364d456424fe211a2fe9264d307d74a4b181200621c40884b5156edb81d60276ae5";
+  sha512.source = "feceb81fd2d1f1dd866b3c583d35d92bb721cd26109d3cc9339fc4bf37b250489d8e3619312ace75a19d83f4659c7fd2ce6c957a1b96e646d419535e8b85bcd4";
+  hasRunfiles = true;
+  version = "3.00";
+};
+"luapackageloader" = {
+  stripPrefix = 0;
+  sha512.run = "a89cbcb445b1a73d0fe1c5e241745d1572df9713bd867076c1390a302860891b5f08eb0aa3000d064df0a5cdc6135eeed53f5ef6f2801da17c84fc343005010f";
+  sha512.doc = "5e1de43c58d0bfd6b8bcd9c068d3b1084df398ca843ec341b29e55c646bba6a18fa9075a9f6cac737f0698f6bcf9626948e9be2c28f6210156d71ca00e1ef916";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"luarandom" = {
+  stripPrefix = 0;
+  sha512.run = "54019dd968b2cf3b6ab9a3777e609789c04a0d369b1ae938df152ded3bf54607140fe6265b81ca2a75f458e9b8144000f0bf2e9d77fb00aa923f7ce9569c423f";
+  sha512.doc = "f7fa30cd6668674cfee8116bdacd3c457fe6e1a3ef4a1c0da603db2fbaae77d187bfc5b4867aea0410a906238769d7138672b89b51eccc9fc4d110a079784092";
+  hasRunfiles = true;
+  version = "0.01";
+};
+"luasseq" = {
+  stripPrefix = 0;
+  sha512.run = "400e95fd898152e8d8e989084ca9cd115516850edb6e8d102eddaaf278f29213c8a4828dde01ca202db68d6cd2b2685bda71f63ad7a92eb586a4c303d2e9d02b";
+  sha512.doc = "7ac8f5df74cede5734c9c47048cbb3b079155910a89ebf0c7adb169b4b61751f6255b2c07614d44a55e8dad43bb35693bf224d0f750bff28987c7c5f1a8a5bc4";
+  sha512.source = "4946e994a3ce2712e6da73a9969cbf2634726191845332e4464ce8d446c09235e94798c878e9e060e3a7b3bc3a27c37a299b9d30f1da6368b67875b551ee9d0d";
+  hasRunfiles = true;
+};
+"luatex" = {
+  deps."cm" = tl."cm";
+  deps."etex" = tl."etex";
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."knuth-lib" = tl."knuth-lib";
+  deps."plain" = tl."plain";
+  deps."tex-ini-files" = tl."tex-ini-files";
+  deps."unicode-data" = tl."unicode-data";
+  sha512.run = "0b9bdf74c170f6cd902386cf18b96f3cb78b853eacccc3a7c75f4135be0efbab47e36a717307600509b78c9fc4f58b8e62f1cdce52007fdd5e9a47dd2f57d666";
+  sha512.doc = "eb387b69cef102386bae65239835f0616cd676bb0dd6b91aac6ab0766cb106fae2e102de8682abcbf42d0937eb78173381fd12ddf3d27a34fc6d200f33e52b5a";
+  hasRunfiles = true;
+};
+"luatex85" = {
+  stripPrefix = 0;
+  sha512.run = "fbc1306d40e1c329a106d7ec4ef79ebb99b2869ce72c45212b87fa03f66a18b1636324dafc739a33500be77bee2c71ebeff02c97c42f85716f5bded4dcebc021";
+  sha512.doc = "4bf353f60c305ea76e66848920e521dec0c66c80f71ebdfb0593acfc9e2914eac272eba3d69f63f43fe8be903cfbb2da7edd82cbc3d38a897934d91f1ac276b7";
+  sha512.source = "40f2732ba0eea372d084c7a9096e12de76a6f7c4ee2c8c9c042ae51696ca46fb527aa73dfb37b7c6a1a75f9753ed32b28fb9d3f2474cfd54528336b4a3cc95e6";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"luatexbase" = {
+  stripPrefix = 0;
+  sha512.run = "5a369840242a429cc7b827126120f38656684d554e06882af8174c009272f0de88a11effa881fca338cb3e7f32aa80fc16acf24d3fc10fac2c2391ce2f2f6972";
+  sha512.doc = "4e7a3e00d5063996058bd85bdc11f3469bb90f16bdc5c6ecf1077189718950053d660a86988f1bf4f203bc8f91da0e9f79d76a327e0d2fc38dfbd1aafab20028";
+  sha512.source = "bf461aac2cea7282fa4be8beae1254fdd2260b34205b012bb2ab1780af387a6855634c87005ce58b5031c863b857f56f88f436f262f192ff6c3a16bea5acc919";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"luatexja" = {
+  stripPrefix = 0;
+  sha512.run = "06ce71869965eeced3d97c5771e13a650b5d306d06c54c500e0222a9ed031b74d1db63e29791c4e10dc1873577e250e9197b2c9c945753b18da029b1f1eea06f";
+  sha512.doc = "32a21dcc470c38732e8851421f094ae7a24eefbfbb984630e2a5e392295ae557e1a28f5582805a4c5a4a41dbef1351227799a116743d179819c8560b846b6f4b";
+  sha512.source = "f01a6331deb8cddfb60069ddced04a1f621cfe72f2c083a4ba2de3fbdeed9197237dc976286e2ad3127f7d519969a8d60345b71d1aab40d4c0d5b54d70c4f9ba";
+  hasRunfiles = true;
+  version = "20190926.0";
+};
+"luatexko" = {
+  stripPrefix = 0;
+  sha512.run = "ad454d899cc34304231476cc5742ebff3a16565737a2e447b25afd97b07b1108ff4da6bf369b2aabfb038a472bb7eb706425a8501141e1dbc7427d2384fdf565";
+  sha512.doc = "42f54deadca1308c413be4ef2ab65c52b5739b1526bf9f436b3576089bd2a72a1e6461c8b30ea2da12a58c5160ea0b82304668f7897d11d7fa06dc00df4e3b60";
+  hasRunfiles = true;
+  version = "2.4";
+};
+"luatextra" = {
+  stripPrefix = 0;
+  sha512.run = "03c95a5e42d8fc0ed88704799a36624ebb48b9c7606acbc09de29e5da845ede3f239a6dda43cbfb4377971cecb55b1f5280cf0ea1aae5057f3ab8df2e0870745";
+  sha512.doc = "f1c0d31fbd66f4e78eb638a9bb336f49de3d19b29bf276fb6fd0d976ba2f33599c1536ec82f7887af1c1ee359b48b1048d400b7faf0cd8016b914f4c5318c849";
+  sha512.source = "2050bf6c907f6f4e210b400cc93b1786a7ea8407eb64e90054b2ac8408d31689fdb1ffcf4859f1bf6c24c298e5d07fcbd201574b9b397de192609dda504502e0";
+  hasRunfiles = true;
+  version = "1.0.1";
+};
+"luatodonotes" = {
+  stripPrefix = 0;
+  sha512.run = "df5879d73d416054a5146919a59c2bcc7564f6895cd32b3a93e287c62f406f7d53dca0f6dc3da1e1380027e8403aebea75076dc50517dc697b8f9fb2279cab47";
+  sha512.doc = "bf2f0e49cd323e7439c1ce98c76deb0384c9b9a540764eccf3322da50ae939e855e5a002b41fd00e280aaf8d135959ec87b05830e9634e8d1bc701df97568852";
+  sha512.source = "6c7c1a9669405da4e07dc218ac84c23018923314dc3fc77a89a2755ab458fca7a3a35b6fd17dfbd4e7bd5deaab63bcb09af8e81d83680246eff43bf7a2b177c9";
+  hasRunfiles = true;
+  version = "0.4";
+};
+"luavlna" = {
+  stripPrefix = 0;
+  sha512.run = "532172433fe45c3b6a81d7b788f6202f46ba0685da373698629c11177d298ea81a30d967310b52c9055fe2dce6589e2ea67f08be9d1d3da5dc1488542feedaf9";
+  sha512.doc = "6e6c7b0d9701804b557605156b391815497bc7b78d7d3aeba172ad89e3f83d4cba7462e3f045d390d4f7a458f9b344083caaa27821a774f68b8e9cde476e9bda";
+  hasRunfiles = true;
+  version = "0.1c";
+};
+"luaxml" = {
+  stripPrefix = 0;
+  sha512.run = "95279ba444644ff60cd0aa812690a5f60aacb4c921b9e3fe1b714f8574b0b01692cf8042fdf34a044e162b7e231bb31989e256c4a4696f1e3358df8088114707";
+  sha512.doc = "b5a7fd96f95350b8b7c781d1154ca2a46cb22b0413165f599e5d5614b411a1f1e5ba236862270855bc613e3d9d4503d9f9460fadd7694f719f8bac6d354fc8b3";
+  hasRunfiles = true;
+  version = "0.1l";
+};
+"lwarp" = {
+  sha512.run = "9251bf5d255bbeaddff8b3f1d6d32949fa9278158bc7326675b7c39d450e58853bcf673b52b1d86d41ded9892ab76c9955e3b48889b37fb4e847d57b020f858d";
+  sha512.doc = "eac134b818d05ce5396f0598d1b985953b23474aecdeb91901144d2dff5f2a940b53216494fca762dd955e36112cb5678688d0129c2fc81cb4dfb37247e7ced9";
+  sha512.source = "dbcc6a85e375f40081669eac063a01d5847753382e56ff137cc84c9b3701dc64cd19148baabbf7d7cf751b892f33e6c9f4022ac2817891c112ecb4261894ad51";
+  hasRunfiles = true;
+  version = "0.76";
+};
+"lxfonts" = {
+  stripPrefix = 0;
+  sha512.run = "aa732f403af1adc898e6ac462412a59e4d2c8821ef47807ec5d8c1ce565a73299d472377117bca3fb30add468b546280b1603feff95d35090b338f87b279bdf4";
+  sha512.doc = "fed48ea91eb5ad414463d3b929dd4deb5cf433be63aa2753acc251aa1e8b85f0db7307a0ea96ea0bf9c4d9b14d0b90d26cde703bed2761a4a1b789ab3d117eba";
+  sha512.source = "18da6f216135745887160dcc1df6ed72eb0e49f60a445e45326c84bed8fd98cd66316e21a6e0e7528d551917092f9715641fc68e02371b609690e00403ca5d96";
+  hasRunfiles = true;
+  version = "2.0b";
+};
+"ly1" = {
+  stripPrefix = 0;
+  sha512.run = "8b170d04aef1c95b345440b60e5aca56442374d897e4a64ea4fefff4506e133d4c06350b5ea86a81eb9a015a1fe32b2bd8c433401a9bf6433e279cc700d0b8ae";
+  sha512.doc = "c1bbaff6124984b0c582cb86e3e8f729e2b2c256808dc621de2c12da94c7b67c673c70fbd3d17c723292a90c60638e32fd79ece9915648347a7469caea040d7b";
+  hasRunfiles = true;
+};
+"lyluatex" = {
+  stripPrefix = 0;
+  sha512.run = "8ef105cf148927c99a20e792fb2259320d0e28f4140621561c9314afeb51f71a15013841e1497d0246df8305688e7211974bfe6a618b188d813481c9526f44ff";
+  sha512.doc = "d8768ee9ae861477a13dd837629d870d34b0d1fc0b1f0709a90255f1ce230ceb3ebb782c9a6272f72e32c3371b2a1d16577033c53e2d6d1b1cd09adb19b62e41";
+  hasRunfiles = true;
+  version = "1.0f";
+};
+"m-tx" = {
+  sha512.run = "055839d04921e71aa0a83309485ba2506feaf2d3bcb919073cb011bdff8ba1f623c2c7af6fc4008badf8faad17e41dc4aa55f9aa47b0065af65fd2fb5dd6ae89";
+  sha512.doc = "c1470ffebb9b86958bdb68cf50e1fe18847e11cf1c28feca36ba0de68ce0fa72daa80c1df9312319d9cb5a42bfb250e7aa3a1e2ec8e093780b170b4d6d1b619c";
+  hasRunfiles = true;
+  version = "0.63c";
+};
+"macros2e" = {
+  stripPrefix = 0;
+  sha512.run = "5bb8ea01d851272306a4d9aa1897d879eef53a1f7262c83a8cec81a7e00334a495eb89926683d42af29f38aadfd1461893ad7bd72cae3993f1ea63a7475dcded";
+  sha512.doc = "0a089e411cce517581166b359ff092b7c98d09502afc83a4935269ed2520ffbb044921e5432238e999cfe85c72371bf8a45bedc07c6ecccc14cba2f4e7b6b6c7";
+  hasRunfiles = true;
+  version = "0.4a";
+};
+"macroswap" = {
+  stripPrefix = 0;
+  sha512.run = "39af1bcf247986c1f7559e1523d1d33680270602bda1d904404db0700452d203f950eadb2d9808a1cd3098bccf070218bd791fdbe5be4a3b0f539f013ef226a6";
+  sha512.doc = "4e46c824a6a5909fca7d8a4628c87cc7a372ae5eab0d2f5110dc1f205e072e53a817043cbead53dde55e71c7c1c0e23695ba963c27e46bc70e2f84d430b656d7";
+  sha512.source = "43ac07d97c89b821f89f7308acc21521d025bad0dcc82f281e011254b163a54cc457db5bc0dc74419cc5bdfc4297e18cc886bbb1b22715dcb7d41e6bcc0c2374";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"mafr" = {
+  stripPrefix = 0;
+  sha512.run = "802d108e7deaaa1a42b7f1eca5059f9547f0f4edb2eb5f8f3f0b68d03c05662f37d2bf7b25844dcec6b89d6d1f0babe93614cbc87fe1e2ca0ac2153602c0cad7";
+  sha512.doc = "5e3a0c42944944fc467e09751c1881dfd16ee526c78e509acbad394725703771893770d11e5aa16b09b6b5d1059331b72ce0f1e85c6ec61677d101276398624c";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"magaz" = {
+  stripPrefix = 0;
+  sha512.run = "5c35baa39a8b26911b2c2dd875576a0f875f5edc37fb497dbd403720855861219fdced11ee3fbbdee8e63f0817b6c2ee6a20e6ec3bcc9a5183465c22caf7735d";
+  sha512.doc = "78c9163951f269a489f6e8a48cce7d9ca46aa5c7f2f2567f8e50627ddc32920a8a5b54bf141ae881c2863de6bad4f7a954588fef9469291f18e65b7fadbf051b";
+  hasRunfiles = true;
+  version = "0.4";
+};
+"mailing" = {
+  stripPrefix = 0;
+  sha512.run = "33fca4d77b34e3390de647e7e39d6240344f2a90c6067275bdb0e7dd1a3deaf5d5cdaa84dc4a49a0c817bc6923eb593602653b0d0ae4b794510a272b78498be9";
+  sha512.doc = "2fd2d4dd5c1896d0849294a1911ae3682b7331cfa574bd46aa047f118fdcb09b4da3e29f6d5412d23ea49f776cd042694508e8b5492ec53cb44a6acafec110c5";
+  sha512.source = "5adf58b4bc60e939906b8ae587829937afffc54af81623e640a513ed8522984c2308d3af1631857f4469a5774a844e3655bc3a9ca8ee09445b545d10dbcfea5c";
+  hasRunfiles = true;
+};
+"mailmerge" = {
+  stripPrefix = 0;
+  sha512.run = "1930b0c554dfa36514d0c0b33749d506d6e5acfcf65e3c1dde3ed75a7c45bafb74db8d83f1b286c1a623acb32b2047dcab566ad85e3676c67c0ce1f7722d24f4";
+  sha512.doc = "3e8aa80211af8f59289b87dece6cc2a1c5eccf02805e3e7927c78cdac66cdb6afaacb07b1114f8c67105289e4d4f7188043cc28f00365c1f5c3f353a53f14922";
+  sha512.source = "d894133e294ea440e1916a04f28a738930ea0ae80ad96e148434c84a02a388735d00778ff4850306ba7336c915a9b2992f41c496149447e6189db82c59a66138";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"make4ht" = {
+  sha512.run = "ba85b1b4055d997677f5a158513eeca0390e9e07b872250970908151f33f7203a4d0938aaf4dc56c33e36f57b99f797b3a28f999add39d931bf4e78b907ceff3";
+  sha512.doc = "45637b363c64d0ad91e164d8c8a254506f98c8105d226ef9ce1912c2c4ee50057233f17035e8a5ab995c49875e638bbd14e1a13949867329a3e3cae65b844c55";
+  hasRunfiles = true;
+  version = "0.2g";
+};
+"makebarcode" = {
+  stripPrefix = 0;
+  sha512.run = "a19268b5e63e577b4df9255e4c0eac640c73ac9e08f6d4b4baaff7920f714b7dd961f8143587b59478df2d854dc2f363312833c7636d08c2aab644a25b54bb40";
+  sha512.doc = "ecd0121f679d7e4ffb162c151dc4b60acc78f9297d3bf0003882b914f0b1a10a52b43e844c5bb085d73ac08f9f0aa2e768ec4fe7374067ae2fcf304e842a29e3";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"makebase" = {
+  stripPrefix = 0;
+  sha512.run = "cf36d0bad24180f48a7cddae8fa19c6260ceb5076b21f05e48360a30ec259b342e6a17f1c5d299ce5fe02a8dc5ed7934dd55c5529118bb24dd13cd36242b0d6a";
+  sha512.doc = "2f7eabf88fe3777ebb1455caed5a339c3b56e0e7a97d34aac0b4c461e7ccf6450de936678ce00e64e39f308167ec55a6b3ec42f7428a7a9c87d2607570e1576b";
+  sha512.source = "734e05be1aa54da7bf484fb9211b1f5d6d076c9a87c3287ebd1fe0fa965f542e4e8e14a6df767ccaa23063fc263e66d52b42df54fe3c3142bcf0b3d7f7fd8de0";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"makebox" = {
+  stripPrefix = 0;
+  sha512.run = "918052ed5c358e12ac7ca7c93f25a43fcfa8f7ba261fdf652d7ccbbcc27e3e0f822813d8297d3b75450c443687bd97e93416624b51da61572557d6a337638bc7";
+  sha512.doc = "807d495fdef601fff666acb79c7f3fa43d1aeebf8aed77bebc02f90dca4fb9c36ae1bc911a9af1009538f3d3e2c4c7f9ceb0111d091dd4c1691a1520e089a697";
+  sha512.source = "04ab9a02882a505f4393288ae8e5d6be374bdd6aa8a4472da1fb7e2c9e3b4bfc58132921a3287a4c8fe4d8d3fb91ddc33496a088431862407988ade1f716ee85";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"makecell" = {
+  stripPrefix = 0;
+  sha512.run = "ba32b6a68b0a4cd6df36d460832e5cd9664a9c305c24dbca93a4fce69e97b6db3d86e3f219a0511c7d70378ddd9424d3685d60cabbc8554077c6bfbd8847789b";
+  sha512.doc = "7c762852f1c7b4609fa823117e765d2b42ad857e2ffa1ca84aa3df74497c88dfc0a2cf05747f11f14453873ee70c4b0f2f890112c567d04ad0d61ada37e14335";
+  sha512.source = "bb2d33b674b612e67bbbc1bf04a68f3804fc37b9e22e19c9af05746efa869ef52db48c5828724b88de130b15120e9ae003f49ea6389f7add98c712550af87d4e";
+  hasRunfiles = true;
+  version = "0.1e";
+};
+"makecirc" = {
+  stripPrefix = 0;
+  sha512.run = "9bba91e5139b90201e232aa3fa21254c5bf8d989aedaec8310209ae6b772d24d7b8c3be379909f04c2c7ff079cca10f43a1f74091a77bb1b8ca637a0743a2ef2";
+  sha512.doc = "25190b3a5d911de1d02fa596f604527006f3adf7512afae397e5ba15ab62d6471ab834f92437d35a9f37ed83c8b84990d79ef0fd9ce2b0edfffdfaa2ec97a345";
+  hasRunfiles = true;
+};
+"makecmds" = {
+  stripPrefix = 0;
+  sha512.run = "fb63fdc9cc0aaa531b25417f0c23348971c306b1a93d99e7efdbbfd7c3907b50f28c67f36a88bb2a94154bcbde937e63246ece577ee2440ad4f5c2935eb25b99";
+  sha512.doc = "f69dbf682df7e3089727570417be3624b496b5ad7db627b344d32b106606cab5299dd23497e137770fdfb9f940503a65e1074e06dd67e0561b36729ab6c3d428";
+  sha512.source = "380eca4f5fed0ae72cded8f6d3a201cacb05a57851c4c207f086dd17762689cd53a6b27daa23d8043c311adc9baed32808d2c7eb1855892f8113ec7f13c02946";
+  hasRunfiles = true;
+};
+"makecookbook" = {
+  stripPrefix = 0;
+  sha512.run = "a4fdb7a7553a08b51d15c038187ef621ca6852c20a033b1751c544634c3092f93c3db5c1f4d744732ff6696509d8fa406251e9d14e619397ca4202b55c1b9c64";
+  sha512.doc = "84c97dd438e3d3abedce031da5841f789f3b8c28672c9e3b6c53929e2e781a9d51adaec6d883d0008b42f1eae2ed5bbf992ec229bb8b2f7f510346d10dbc31fb";
+  version = "0.85";
+};
+"makedtx" = {
+  sha512.run = "e083fa791975cef84b2e2ba3472984e354d5ced50ae7fb96dd8239cfffd379e7a25fdab80abcb721e63dfb10d9557bce69e97c5624d1635f894bcd26e22b5f4d";
+  sha512.doc = "913f6f02ff478ab5edeed4792846ee6bc06d28c16fd3d7396d394f4a964d6f39a12c8163d66a50a5bf53add151317184b09a712dfd32f9ff783bda7f520c7eef";
+  sha512.source = "84e12e7798c37a598a2d37fa7faa206ffb6f5c1f9c21af7130a9f05bebf9857f2a4fb7988be55a9936199694a0d74595ff75a1261187d81fd06beda5e0628931";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"makeglos" = {
+  stripPrefix = 0;
+  sha512.run = "477523d4663e1e4a1fd6bb830e4574d6d116180b06a3199d6ba27f7cf704a1906a2812496e9a7ba8063690a2095fbd5022a5eb8c2448b1e0341c8a961cf05794";
+  sha512.doc = "c580a23d65422d8405ce011fb6b088f53836811e3da517423f6d0dce098ffbd64c0648318eb9fb74ab637e1796d19247ee87ca8a25c7d306e3dc35a5d6d79f99";
+  hasRunfiles = true;
+};
+"makeindex" = {
+  sha512.run = "6ddccdfd89e0f362b312c981da16e7e2771035ad03135f7c49998ec7d2b4f7990cc8d3094d2a703277aa1be1d43b332906169d1a6699eee8730a5d6451d9a2e6";
+  sha512.doc = "6decf2c8d770fe0cb18c87929f877afac8f2e5baf64cc85c82e575fa0722ed9dc89fb49f08aedff17f26101dc3e7ae42ca6d4a1f2864ec2906c46a960efaf90b";
+  hasRunfiles = true;
+};
+"makeplot" = {
+  stripPrefix = 0;
+  sha512.run = "366e9ec4ce551e17ae6e77f068b0d2fb46582c033eb27781cd620a87731eba744212db8dde9ce8e50318f280dfe31e61a344ab4232c3bf26040dd7a2290d4fef";
+  sha512.doc = "9aa863af450a66201e7cb3d3a58d9248430aa26cca9b50de4c71c350314ac9c0f6fe54e5eb1b37917a75030a60ca18102933f154bdeb7831ca02bdaa65b3a6bf";
+  sha512.source = "b4f0e0de72c005124b7e83f214111931ca2ba03ae5f1270b5d10ff790c6fd84cb02950aed7377deae2c432de55b7822ddc68b9911b608b0460c7800f375fcecb";
+  hasRunfiles = true;
+  version = "1.0.6";
+};
+"maker" = {
+  stripPrefix = 0;
+  sha512.run = "d8cefc4d4389e4024c448400f02bc0ef0a21146c1d079f804f5e102ee3f2977be7fdd2c1011672b70192af48693ab1fcc38bc1d6f7711fce217792e82f0e5e54";
+  sha512.doc = "fb7f68b4c48de87e6c1e380525a998bd1cf7578c2e4a51551b5ab4909481e66faf38f0a74083f25954b5d05e9eda12e56734351fab063f80955abf24eadc0e21";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"makeshape" = {
+  stripPrefix = 0;
+  sha512.run = "b13358696b16b41a69e5a207fcfb717b417ec191ae9f6ad4408422b1ce99c3785a3328cf9bd2e87ade3ede4998ba76ddb2f640e06ef5ce88172942e4d0cf2bfe";
+  sha512.doc = "a249c636b414203e75225af611173add2e90af306d4a78c7d865fdd0e76b23637fb3b8eb41f127905bbd0065cc7b941d3d26e3ee73b9aad56e05ed0a44f67d57";
+  sha512.source = "43886cdf9c2da20943bcf0403e05fe19c035cd3d49af9afa52212c376a2ecae9ad963a24c257b70e3dcee448f42ee1464e63dcb0c5addd7018234658867d3179";
+  hasRunfiles = true;
+  version = "2.1";
+};
+"mandi" = {
+  stripPrefix = 0;
+  sha512.run = "a22c6cd667b7a256cdb0d1f975d214890811ad047d3eddc96e1289fd22a8ce9035183c5c1f6a876d7bab85bf8bba9626d36c2edbc8abbd060c0ebafca6b84932";
+  sha512.doc = "60cc9d6215525424b3e05af173a533d3781d1eed50d1e89e3d31f80274ab2b91033d45254eb419ec9a9a4e7553f50ac9c737ac82daea8dfbf29ba077d69ce5b2";
+  sha512.source = "2b05284ec86ac90ae6e136c96b2eeb0215ce3cb7d9b9f85aa14f047c596e7b47c8c618ec5d4ee0a99d624b737fbc8a3f026895bc9a8b2d465fb3dd7fa2ea806e";
+  hasRunfiles = true;
+  version = "2.7.5";
+};
+"manfnt" = {
+  stripPrefix = 0;
+  sha512.run = "6d4282db5f5baf92e6dfcde9b8a1e78027a5d6bef4e27b8ff35741fd8bcb35ca0a0d4e3db996ffc9a2e50868b1f849f961a4d0179aee0f580b33d79972656d4c";
+  sha512.source = "1f8b2acaf18fd350ee0359acb4771245eb3d5d750f92a637745ca01f4100be9526ea323ced82c6a6ff71eb6b9dfdefa2c44b21f5ff9c15f3f2fc68536f5f8ad3";
+  hasRunfiles = true;
+};
+"manfnt-font" = {
+  stripPrefix = 0;
+  sha512.run = "fe7ddf667368990f988005a44013aab80af9c097f4f824f717d84fddfd61dfc658f507d5b1bf8f7c076be1bd5a4363f117b388ecd39b0ce2b0ee5fc8aa83fd4c";
+  hasRunfiles = true;
+};
+"manuscript" = {
+  stripPrefix = 0;
+  sha512.run = "24e4c800ba6f5089ae76b6d444c81689fa696cd2fd9e62281171d771f8f9f065320b53b058cc6adf836f36d378f6f7fece98e8c09e2b655ecaa8884067bd696a";
+  sha512.doc = "baaa102f870cc307fe96b583f74c19c7ef2c7649f01fe7985c3dcd331539bc9d839f6e34aa238354b6932d14638b77e83b7bf8e62296c36fc2dba18f776271a6";
+  sha512.source = "0cc418f2b5538035123d81f6702031d97bf99fa6733d491b306981ae698f3cad9bd121a20410329b8428b5c14749e825052544cdc52b9c8457d7e302dfc64888";
+  hasRunfiles = true;
+  version = "1.7";
+};
+"manyind" = {
+  stripPrefix = 0;
+  sha512.run = "e08291b4cb0d2c18e6b97cf6a287d7cf5b49eb312138910185845b6c0a075981a15548de2dded6f597605aef885e736c17b5306328574473aa56f8f11b6b8288";
+  sha512.doc = "e8d9c687c1b3525c5e4d218a380781f1b2e7d512b053a583b00c97f0b7eefa1202dea310454065194039841bf8763acc2b0c4712ca8d5e9d31b57cf03c50b928";
+  hasRunfiles = true;
+};
+"marcellus" = {
+  stripPrefix = 0;
+  sha512.run = "dbb5f27d0bdcc0ac304a45b06afb800c002b299cb70f86fefcc25f9aee288c2cf4eb8bbbc37eb97d380bf1d1e2371fa77c196e87fbb92c22d2cb248243dc35d0";
+  sha512.doc = "a9c4fd90385e9ab3b39e4744084d2730dabb4091b09270855ca0d1bbd21b3f0518300a4f2ae0243121f5174f3a491a460ed6c5d617298bf4392a23368cd57f8f";
+  hasRunfiles = true;
+};
+"margbib" = {
+  stripPrefix = 0;
+  sha512.run = "7f734e46e72badf838397305ca926f4589b9aba7a0e91e21313f6a733f7cd09db959f30e3694490633713b1a77c8d11a521b2892722496fb162d7c25c7b8641a";
+  sha512.doc = "c4f93e442d1337cb5a1825b4f7e6fe5ae0a759c32837a896852ec5592b3c31a9c473789db35c147b67360ed662b1e9ae42a59fed446dde234b174f65e358662c";
+  sha512.source = "7a9aecd832d34d1225606a905558f5ae33befaaf20f8fa1e6e5263850d2c72273be5a4a05e96d15225b7a2853212e3de28455c856c17e42838406862cadcc344";
+  hasRunfiles = true;
+  version = "1.0c";
+};
+"marginfit" = {
+  stripPrefix = 0;
+  sha512.run = "dafe223cc6120beac7ce419c5f5eb72ece9be2a21992e829a8015f7e05ca22c40d5196d26d21d8febf3459bfa58c7defc797ce7bd4ee1e3dda28761594240b3e";
+  sha512.doc = "fba2ff6febb4acd0dad443221c6146fc2b3818c4948827b827fe2ff2df82f4e2843520f1f4cd41fd64900012d64d973d9b649e65b1c5ee4e74757344ab423dc0";
+  sha512.source = "89892d83570cad7c46b5fafcf8a7d87b660d898afde97c2fed03f82d3cbdcea9bd11baecd19d3aa958305cac0d9f7163e00fe262a0738e7f89b62f7d1bdf0df8";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"marginfix" = {
+  stripPrefix = 0;
+  sha512.run = "9b9649077a93599c653d0e2d46e6814eb378ee8d2b531e2b810fcf0a6b698899bd13041d3b7f4aca5039bced2eff4789ad21587ccc596f70a6105c2efc89ba59";
+  sha512.doc = "fe547fa6bef7d2417447e4261fed0b43d2f88c944c499a55c5959a2e7d9e169e80a06c9e191edd76f1ce7ab4da9834b8b216f0881d93095e9c41ba5b7741d845";
+  sha512.source = "fe914d9e7094f64f3d94969691e02950fc10a69c7237d5ea42158a1ffbc983cce768873ea734d1def8562ab70294af0f13bb1b9cd80a2b1526394f2e151c3b31";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"marginnote" = {
+  stripPrefix = 0;
+  sha512.run = "db05524c613df90a75c6545dbd19bccb955d0b3c2c0312686e21ed42e4802d47105726b0e092d178bf484f1585331bf71c604c2d9f039065872e218357d0d07e";
+  sha512.doc = "a9d6a3d7f8de332a5f77d086d552caaf91e5ab4a71288548d6d7ac3318cde208d948a668ac554d2a8f510f984dc9943bcfd0e07a70a2ee00c9bdadd3e148f550";
+  sha512.source = "fccae0e44e24059f6ff2cb61b2d52d69ece44287b4183733b37b157ff700f6f251d86d4344c3a10c1417155d6e16ff4105a77ce01a2468e5ba160ca79e25b064";
+  hasRunfiles = true;
+  version = "1.4b";
+};
+"markdown" = {
+  stripPrefix = 0;
+  sha512.run = "c17f37998b3623bdd94f074d4f47fc871e8cbf3ffe961d1933ed2113eb90219cd74105d5e35675597376b64a854e89eef07c629335079a9b131f827c6839713b";
+  sha512.doc = "34562bf94ae2a4c9dc415b8c4213b6f81d1fab8e92d1b6da057997c6e32fee652fbe7245bc2c7b9bc188bcd9d0b64c7a01eb1795874df473833730a551980cd6";
+  sha512.source = "b90130e216957b4612283e3316192d3e0118740a9d43cb205bc429e008832054a23818eff2bcd3b23f12a3f27fe3a72f08e361b15c84cd6efd13173909c61ad6";
+  hasRunfiles = true;
+  version = "2.8.1";
+};
+"marvosym" = {
+  stripPrefix = 0;
+  sha512.run = "64093dc5de012c6a50762ef34001ff2305e6b59b667ac7b1ef72cc53f8b0ed3852b4d307a8d421ece996e78f2e32c8871038b6b66659b0866dbdc536445dc7a3";
+  sha512.doc = "d6f72ee7ed64404acce5c37c216a7e23193f2053c18910d80fc6d5fde73ba86c07045102488f17f4cbeb9e1d148567973713bb4d9ce2cdd3cb166936ba5623e1";
+  sha512.source = "c28a69567c593160c7d04b4fc0fe7f0106db12ab588d3f02139e55ad99a1b4e33f1bba92f5af103b6f2a7e720d243b919d1f39f28031ad95dde3ae7e723f6e36";
+  hasRunfiles = true;
+  version = "2.2a";
+};
+"matc3" = {
+  stripPrefix = 0;
+  sha512.run = "19996040ec55b000d84637070a21fa9fc216eb3cf8ec75f7c408925e0d7a716a7dca0eff4887778f666be3e857b589cd033c53d3859f84226416ad069720f7be";
+  sha512.doc = "68f65e9171eb03fed79dc9bffadb725dc7324fd9696ff9f6f0a13233327f47474477180c6e17b5bbb9ee2ee02996ebd6213b43eeb7e9b7eb7dca2caac2db470d";
+  sha512.source = "efc84a936de1ab0905e94937d00c3ab2f371412975786c3816cb3b8fdf98482943c1f18a08422ea95d7a7bda6607ffd1dcb6b5c28101c7f5348260a088cf1233";
+  hasRunfiles = true;
+  version = "1.0.1";
+};
+"matc3mem" = {
+  stripPrefix = 0;
+  sha512.run = "e0736f75126aca9506e1cfcbd321645e731e2dec7f3ae2c045201dd8c729044689e358724b77ef9d99aaf3ff742802857d488e3f2f78e781b64af711c7fdce12";
+  sha512.doc = "2038d84ab20c6763163769b62a35fa4e95dbd3e76b0e2cf1c4a25694488ddb5b9be8b40f81a1702600d918618455bcae46d22fa101a1a95978b996714de41dfe";
+  sha512.source = "cd8ad4afa288ca175c06df2de15cb7ae048f3b69ff6b96225f134c022efaaa5223fdba1b2b80f75ad3ab6e3ac79d38b41794cdbfecce1ac6ffd2ed47cfb69649";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"match_parens" = {
+  sha512.run = "1e03e279e977af436a8f5d5c3d30f046f46f1a31a0fd3de6d8ab458a64f0634b5f3ef8a338954971a898a1c68128f60c6eabd7ca231df9f3ca8ed12e55967dad";
+  sha512.doc = "60428bc16f65fe820e267852c9d85a5f862c6800ac9c2aae0915a48819da381b2a311fdd3d08096d4aab7311ef86c1c89fabff3d88caf419dacbef515f4dd39a";
+  hasRunfiles = true;
+  version = "1.43";
+};
+"math-e" = {
+  stripPrefix = 0;
+  sha512.run = "c51c61baf8a8189fc2facc065d2f80c75026f5dcca8ee79c6d72ae9d71f0dd7fcafd7a230041db55c07e065838e865a56129c79b502c5f65e41ecc7b03e1e5f8";
+  sha512.doc = "8f2356c61cf47332ad4b62f2065ba7f16173aae618e0d387c6b5f9f97a47c6b3fa14deba24e93ab7b359571ce732023e9b062342da0effc16aa6ad13fca71c5f";
+};
+"math-into-latex-4" = {
+  stripPrefix = 0;
+  sha512.run = "d5739155ac3cd6a02f356bbb600f7f76022faa4a5c004a93531678ead3c2f0a9f8e1419044883306ce453ac96ab8726ee45d8e49c86b0fca6a9232010a8927e3";
+  sha512.doc = "5fee7c89fc9f273817b23fa25260733ee0552df7bed0333bbe604c17bdecfc28d7e386478f7b42d3c2aef89f80ce7a1d35215fdc386ea47e4db3a334bc6a9597";
+};
+"mathabx" = {
+  stripPrefix = 0;
+  sha512.run = "400bb43207c43192321cfe1b658c85a07410778e7694ab1604b992025d69300bb2d4c2cb7866a255dc4988c843dd3b92c33e527c12f087bb560cba4520115643";
+  sha512.doc = "e1f9f96794f6d20dd75bd7ceabd40993e56d5315848bbea8a6812a16f74c0fb92ddc6356c71aaa1367c47b1dc26a3711793ec88cf0b90d391f8157fe20f77196";
+  hasRunfiles = true;
+};
+"mathabx-type1" = {
+  stripPrefix = 0;
+  deps."mathabx" = tl."mathabx";
+  sha512.run = "ae2272ac7d79a3bb1a655000a2d5fa1c3d948363763abe194cbac4084d5ef60492648977660c3d9dfbc2c70bea3c207d031d2147097fb1d7af503aa80f257d1c";
+  sha512.doc = "2504e85d659cba06fa25ae4e154309a6d3dcba2ac8bae0d4066b6637f19081987b0bc774902365e5b723f4b6c35cad07709e316ec1893a018baabc699d755e8b";
+  hasRunfiles = true;
+};
+"mathalpha" = {
+  stripPrefix = 0;
+  sha512.run = "c6b653e5a0b7788ac36ea9ef6ce07dd4fd19a75a82c4115cac5921849477839387b0cccac469dd74b9f4221315ca741c49304eb76213ecacb97dc7e218ac4cc9";
+  sha512.doc = "5a1d993f73d3684ccd8a855cf8e016d35aa29c34fecea0f01f147a0cb108b355108faf43734c83bdb74f59287a7963b4b418894e0a5c0ec4ffd884f3f4ef1d0e";
+  hasRunfiles = true;
+  version = "1.13";
+};
+"mathastext" = {
+  stripPrefix = 0;
+  sha512.run = "62834a7164b376228307ed63b763d395c074e3d861ebddead63ead1665b2b41177a7dd8db58ff8fe3eb56b4aa1cdc7a6b3a2ca75fc07860cec3cd8aef561e4cb";
+  sha512.doc = "5ea37b70e074b5e233b6ceb077f3ea95107615dfa54b0f3f1ebf3b44fdb744f4006e5bd9ffcef180830df5080c777d82edecb26ab430cc73aa08acd7cc8a5fa4";
+  sha512.source = "6cb645e4567b812740adea4efb097104d8e55542e317e97496a02813f309ef1204255bf0dca66d7123566739e99dcac706a67dc13a683a48c2cd6c9e88f26c83";
+  hasRunfiles = true;
+  version = "1.3v";
+};
+"mathcommand" = {
+  stripPrefix = 0;
+  sha512.run = "5258a3e438899835e65e092edc5b4e0bcdaa209aa5cdb26ef5d8208a673181a3d8a24ebd0eed311aa04ed79330891a828df0ebe47d02435c40328333f5b7faa4";
+  sha512.doc = "bb0c76f4349785aa196c7ed9156ca92e3f05aada3b6a6c42005d8cd8c58a3987eca54c396c89f03bd005e7eaf21b08734e8a4d4ac95f08ddba286ee615a92e4c";
+  sha512.source = "5f89ec740025fcc2fbbe5c7ce01fa3c3929390b4df8bc433457ab2e002480fa3d8511539c451783deb6d0fac230768ab08d5280fd1252d33845a19d583274688";
+  hasRunfiles = true;
+  version = "1.02";
+};
+"mathcomp" = {
+  stripPrefix = 0;
+  sha512.run = "7dca82aff58606afd315bc18c6908946193be75f04ec456e2cede8184867543437007b27f04f4363a026a0db83da3fdf963afecab7330e9419b1ac5376efcdd8";
+  sha512.doc = "6135b3d06908c5c359cc432a7406f146ea6b0bb614ba0b983738230ca2073f4348a6ff139bdc4b43325a8b67ef59a6db8e60ecefd88af5c8ff0eddceb0f279fe";
+  sha512.source = "3578e5e31ac3cfda23381e348dfa9e4da6993a9cefaa73b3746be0f2719d04dd37d04e75925414f4f0083b0971222da5eced4bd582e405031f29899faacecf57";
+  hasRunfiles = true;
+  version = "0.1f";
+};
+"mathdesign" = {
+  stripPrefix = 0;
+  sha512.run = "cc8a1c58348f8f81417178434c9bc3d9edea79dc5d300753f41870734f8fca8f43325d56f73e3113aee8e9f38be1fbc6abd3cefe4458af1e1e22900ce889c315";
+  sha512.doc = "f6c0a3595beb7b25ab5ef2c8a08b3e0be90cdbfa20c946b7b3f5cfd29f5c9a38963262818990ef78be02d95c2d2a5991581be77834048fab4eb0e4c0252e6871";
+  hasRunfiles = true;
+  version = "2.31";
+};
+"mathdots" = {
+  stripPrefix = 0;
+  sha512.run = "1235583223f831852458d53e1e8cb767495987829d4930387f4dccf7ab060b9f0af8722d6c1aaa820c1a371f8ce1c0222633e6feb064e0344e639eedbaa4129d";
+  sha512.doc = "b1ce238b3abb3397b0085983e752dbb9eb9d9c1026046726360498d089304f7f4deecd656dceee27b63934092568f0ca46620231f03e0952c43f28ae73e97dc0";
+  sha512.source = "dd590187fadbf0eb788eade245d4198a4c1075433db1a0df00ce2d5cf2b6f332e09ce995292d21ad46f13ba68284808cfea6c7818a47bf99a61ae44e5381fe55";
+  hasRunfiles = true;
+  version = "0.9";
+};
+"mathexam" = {
+  stripPrefix = 0;
+  sha512.run = "30fc0cc9c44f2b7a64860a7d8eeecd25eec7e888f4ebdafade236edebecbd79f5d832566d151243430a60c5995807ea77d34e19cfd5e0d8cb037ca67d3e933bc";
+  sha512.doc = "6af2944d12d09f1ab593a7002b9de71d14c5436885b79e5e495dc0ba1fdf9dc6b9080bd009bafff988b019ec3e75da934a7c8c043870fdd52a9a46b36c9d646d";
+  sha512.source = "f2324e1f9e0fe8f259b6e1d2a1370ddfec87091c82650432e24b08c598fd6ce57334b88ab53a6049f416ff14c3ccfc7c250029767eccf05456d6c233e665f6a7";
+  hasRunfiles = true;
+  version = "1.00";
+};
+"mathfam256" = {
+  stripPrefix = 0;
+  sha512.run = "4e13b7f48c9e99f3f8af8a57f22636590376c7bbded8afb08c93524cb53dfd28e04ad1035a3052a2837ca5d0781c1eab5fc4ac8fb569cde558ec7823ab4ca4e6";
+  sha512.doc = "d49315d18922c3f600a0cec9596fc972324419317a717a987188135e1cbf35976dc54a028c7cf98a8425dfd44f8a45c40cbf46411847b3e31e71beba63f041fa";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"mathfixs" = {
+  stripPrefix = 0;
+  sha512.run = "513e5dd9eb58ca5b1eb8daec663c48577fa2102ade0234412dbb22b6d756ad37009c689746c57c6624c731df64fa8d58eabfecbd4cdc31c576eb0ecd1e232fdf";
+  sha512.doc = "c9ad8dda9ffaa77ba727f536016ba1dcbfb91c4d7ab98b1e4b72156591e8ff0359f623475324e57c6b22f509cdfe7e30ba67c3fb22f9dd152e59f1557c96a6a6";
+  sha512.source = "f08a26458ed871a11a44a1e957a1e9140b3e95c98ba1bd958cb9d63cbe483ee94e91217a5a7e54745b2cf245ee7f898fb64238941d1a8fce04699a3b8a06b7e3";
+  hasRunfiles = true;
+  version = "1.01";
+};
+"mathfont" = {
+  stripPrefix = 0;
+  sha512.run = "bf99697b79edd78de3390556b030125cc325da1d3dbf28684f9a3324a2de614d1582a8306797e8cebd6be6000a3be64f178e6cf67a68a3c68f0f74757a652fa3";
+  sha512.doc = "4caef345e33342b06807d38097b4d3bd8a51f9f3278d069ce73c35b10dd72ca9e48f485a4870de4e2b3d827d1a433b4549a562c6eb9be68b2823bbd557f98fda";
+  sha512.source = "c9c569ec7b1e740212969fecce09008455fa6f72b28f00cbe62bc5c2087600f6c368ca4b49c312a553f16c5f9f416a17752a70c3e00885441807278c81195429";
+  hasRunfiles = true;
+  version = "1.5";
+};
+"mathpartir" = {
+  stripPrefix = 0;
+  sha512.run = "8e1c99db2d64e9c815bf8b6784d1c717969a5ecc96281df2f815ba7c0d779b53484c61ca233468de793be94cf636373f4fc0e3413c0ce32d4715db30cafe5471";
+  sha512.doc = "fca6b3e2650ada022617af137dc86858c83c51c55fcadf2ff21832a1fcd9fc44f371f89e8943c5e1d117a09893c3587f15a3e8021b11f7472dd3c9d37383f8a0";
+  sha512.source = "f5c5b328745494965d1907f6dc187859a5f9bda5a8beda164e7317dc1b8a6e886073f9d2e9b564c6aa56d55e7cb7191afeea38edc059b2dd55066e68ff826dd8";
+  hasRunfiles = true;
+  version = "1.3.2";
+};
+"mathpazo" = {
+  stripPrefix = 0;
+  sha512.run = "e81a55353385ff86614cbfca0826298c6b5ae269e3d17ad8c9eb391ac37b25c95c059e916dadb67ac7432bab96be5d8a496880d24e56327129f6274c4950bb28";
+  sha512.doc = "0f325490cd35d94b202deaa7a27f4e4685ae15760dc06813d67ba7f156cf62ef56510c2e07fd8759a6c27d3d947d608bd72819fc36aa83674ca97af4641bc368";
+  sha512.source = "65d2a446e86431d805db9e7384f18c1f73fc8a5e7ef4bd55dd2bb30493345434f9b5b190b650e0af6ac170372a410f149d3b538e57b7b2189bb029a07e144745";
+  hasRunfiles = true;
+  version = "1.003";
+};
+"mathpunctspace" = {
+  stripPrefix = 0;
+  sha512.run = "81d1fa6ce0e96190516f2440517d554e259013869065a4242c55bcc06f2d9eab1f8102464da71fe72dd0d231248b637d54733b2a11b832d2153f151dc5513339";
+  sha512.doc = "ce318466af0c6690a905c92e9f24f9a7c2891c4afac7c51eead8ebf211bf13e2c20d368782ed41f20a2bb2d6f3a6cd6bf44eb6a0c848ff8006564ec98aeae2d7";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"maths-symbols" = {
+  stripPrefix = 0;
+  sha512.run = "f2028a2b8dad52aee2db1fcf679647192cb926e13cca831a419d876783e492dbc590e4745302addae7d3f01eabf7eaa1fd7cc6f757eff2ab9d9b5c39a1b0b785";
+  sha512.doc = "b60a66b3cc67e4dde62b0fc0552233ab59b1981ab92cedbe4c0de31a4c9e9d3207cf54ec5d2361f81937867d81bd345e77c4ab3e36fcd8588851765ec3267864";
+  version = "3.4";
+};
+"mathspec" = {
+  stripPrefix = 0;
+  sha512.run = "7e9838ad2f212354b103b9beb61d60f124d2f47e52a04e2fad61de01e2e8220ca5f19f5b2188cbfefb379f94dc4b76573355dbde563f887beec29c57b3648ae9";
+  sha512.doc = "d22c19bd2114bc48f438d820177006170d52d1a261f3cfe69452148f4e11a0ddeb1bb25e1c1fa22ef8d2284c7f34f7ef41bcf9d8e90a89705b3a7515a679a922";
+  hasRunfiles = true;
+  version = "0.2b";
+};
+"mathspic" = {
+  sha512.run = "e556960f07a003e877ce678110e724ef94d34aabc0ae52c59ec2ae487fc7d3e5de169844baaefd61e467e98a7a9718d94d881c3f0d43855e133040bdbddb6a62";
+  sha512.doc = "1702071f4c26097e241ba161258a51461405954105c8a7f2d92a552d6397ef69af029652ba5528df999c569fae32955d1b194b0f7c4475b3fc870656b473386a";
+  hasRunfiles = true;
+  version = "1.13";
+};
+"mathtools" = {
+  stripPrefix = 0;
+  sha512.run = "b3b13f14a37ec2e664ebacb0d30b220cf9d0ba8ba06e456c7f53d9d75e8018fdd685d0c078ae784c8bd13d5bb92c2a9868cbc028a925278391849de799092521";
+  sha512.doc = "f30811f20820e24e541bd0a19763ca713dd085b0f55d98a5d6b75116c18b80b9aae2240e6a9bfdcac0674244dcef72a439dd4287928fbf25a04ad44dd9fc11a0";
+  sha512.source = "e97678109b7655b1c2b4346bf1622a12cda4271ecb7bd010e36b158497c0506f6182c0fd7c5bd9e150e0a3e6211df8ce9e06c3c0343348b4f2508d9db88a93dd";
+  hasRunfiles = true;
+  version = "1.22";
+};
+"matlab-prettifier" = {
+  stripPrefix = 0;
+  sha512.run = "840d860303925d148c10a980218018ed14e2d0ba2b1638f8328308a0400e8862ced7cd28822fd81c3c3533d2ef4cd37e1c4009065b1300011898fefb407ac202";
+  sha512.doc = "22b783fbe09f661d1e5034cb623fab29e54df35b4f0379579f430b17a80236a843c15201b6583bf58f22ae39dba34d7f5a4f8482b1c6d185822940c67ac06942";
+  sha512.source = "25daf7d57d376a2a218a48c275b07459b512bb0e6ab95e78969883a3ca26f010c2e3204c0fe9af0922a50b48aa0f87c6b47973cc7adf9678d351faf9e263a9d3";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"matrix-skeleton" = {
+  stripPrefix = 0;
+  sha512.run = "2adfc8591ebb043b9b962167c4cc393d5c5e8ab2587c88407530fa8695210800b2a2ad0944d43b12c9cbf2e1018645d3c32fbffa4dc480d287a034b2387bbb68";
+  sha512.doc = "768d78c3b5752f04f1ba4c45b0151659ffe5de91d976abb7b6a374b18d148890a7edf743215f263c6cee08506ee10725b8a1bee786977f998a546dadda1494e5";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"mattens" = {
+  stripPrefix = 0;
+  sha512.run = "9ae7b4d3e3386a5c9b94a30eafc02d00c9a6376ed356755ba283f7b9b43fc27d3b9dc2994d808360b77d23f39014e230434f404bcf6dc20bc974d9efae97a3dc";
+  sha512.doc = "d67ce30be2e20c5182460b8e567d955c41b364383acd350cba1c07b52576d78016a865148ed871ce7ef3f937eb045201e64e5d5f52fd5b173fe93cf84def2119";
+  sha512.source = "d199c5fe62172d98e7184a2689c3415944128251b75ee45e0629da5200cbb7b954cef1243a165ce2713582afcdac30dcd9f1445ffcaa18a69ece0aa79391d852";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"maybemath" = {
+  stripPrefix = 0;
+  sha512.run = "32520ff01d76e11bd70694a07b86272425680ca8bf21b6da9412c133836f9ecbc9a9537377ee67cf9292e33dedaa1d33e906b4f681b89f075d1fcbbbbdc989dd";
+  sha512.doc = "b0f978f89ebb7f681e7b045d03a9a6e7e9083d7c468c91d52ef417c85d707243fa0ef253b3e2d1f1737a9c7235fefae06c4a8fe2975cf2c13f7f09ada7752f26";
+  hasRunfiles = true;
+};
+"mcaption" = {
+  stripPrefix = 0;
+  sha512.run = "c3e1c2948e2687bf720dc05dfa1ed6140a1ea55de3cad7ebcfe518d720ed96793b6bde32fb0882cae773f986b11150482fdfb382391650a8c513131b7041555a";
+  sha512.doc = "e803f5731e6ac1c299bc3a42666acb81a75a3f110be729639357a15633e0e7b8ad0a244820b96ae9f8b435d9d1fea54a0b7f14c5db02799b3a632b2f0c5cb4b9";
+  sha512.source = "e859c83efb88fa03790b2ddbe18cea57ee489dd59679559f8d7f3b93a0804d93478412414e131f39bece090ed5b3433e2784facbff9b3ad705a81d1adc542e77";
+  hasRunfiles = true;
+  version = "3.0";
+};
+"mceinleger" = {
+  stripPrefix = 0;
+  sha512.run = "0792d7a5289965b2379001a54177e1aed4a3356d8611e52ef77f5097bed1918dac324bdf5c618ca76d2925d11539b623cd9d4016ff0f4d1f9283137816ec145d";
+  sha512.doc = "2dab78fd096927e3958d7270ddf15de9350ec30d1d000e7cf92be3b249ccf70e6faa1dce482a07995e65b4a4549693ce3b34d1a63bcc403ebe81f3d1887ecf90";
+  hasRunfiles = true;
+};
+"mcexam" = {
+  stripPrefix = 0;
+  sha512.run = "37637616c9ccbe4e20ebae6b479e076fe87b6bd5f3bbf9124c79b93cef6e992d82bbb4fcfbbec3e4a7dcc187d66742c410c4a6280328c80765495685b4fa2cac";
+  sha512.doc = "5d1eddfdca3ebb7fbe28d93ed6e7332147857d7523d3b64e908aa56ef71d9bb2546d05c150737a3401b5ac7f76110a421513db2d8fba906173afbde9e012f7f8";
+  hasRunfiles = true;
+  version = "0.4";
+};
+"mcf2graph" = {
+  stripPrefix = 0;
+  sha512.run = "39091f364cbbcea1fedaf04ade0ae9ea01025c188eed41dbc0babe4fbc68a76b8bb367614c6515cfc0b311b93771040d78dd15bb871459bc93acea067e6f04eb";
+  sha512.doc = "5bf78d5b708c93b23307d9c10394a74ddfb8e2926184db5fe7c7709cd3c140980f9c391b534597448b0b5003d2ab24b3ac0fb308d0bdfedcf207e40380c495bd";
+  hasRunfiles = true;
+  version = "4.45";
+};
+"mcite" = {
+  stripPrefix = 0;
+  sha512.run = "71276681ec29d3d77450a8c343d64a1ea734bb48de0d693a4e9ca795e4a4c9a3d5f4103b5641c8684d49b5c95f56bfd08bd12e1d7e37d06f9170008b51804897";
+  sha512.doc = "8c5ae4b1beb334ecba3294108345bd616746ee651f03d39a7bd5f5cac97f671a861fb046e29ae7565863aecf4b043ebe25bf9a4180889c39e48735251e430004";
+  sha512.source = "9f6e6edf49906bf3300123f8fe265ac8f8580c6838d59f7147e9337e67bff71325ee41a3993b3d1cdc9c036b5d519834261fb0a2a9cfe4d3afdbe070b454af8f";
+  hasRunfiles = true;
+  version = "1.6";
+};
+"mciteplus" = {
+  stripPrefix = 0;
+  sha512.run = "5be1980964ea8342321964f0db1c750c33fee9f21724608a260ebed22500d1fcfb0fcb7e588a0dd030a6c534b0da904b8bfc3eb0da7b2df34c0b3f2b1b8fb637";
+  sha512.doc = "5e720fc2b32ca00d71ade77fd0a47c6ef44d9b7692a8160ddc55a5f60495a40272a7a0c6c2f5bed923ea10703654f155701d4571d72805c1ef900780a209a0a4";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"mcmthesis" = {
+  stripPrefix = 0;
+  sha512.run = "1b74cb3339eae2ea8fbfccdd993b69177f901166015fd10a422471bfd84495774309a7bed56a36a5ff56d3ca119954353f844ec01bd64ae5dc64e7586b1de17d";
+  sha512.doc = "5944885065187151f4336d34cc94328f264ea35fde8cce35a0da4a13f52d1261a3bd32885f21ca442694cc98219d2c4a63708f31c918c4768f6e8e8f4bd54f52";
+  sha512.source = "9ca1ba748ca82968a940326ad695ad631f9a4e081a635b845b6ca94467a52a4e63fc67074414a214adfe0f7c14f91e07339b32bff28b5e770b6ae7bdd5ab3b9e";
+  hasRunfiles = true;
+  version = "6.2.2";
+};
+"mdframed" = {
+  stripPrefix = 0;
+  sha512.run = "0cff0945adc04102e0b0a154cac1f78e9ea903b29e3f880156b888abeb4ca23565d39a7b66d8097c35534baebdf6af152c5b3830d08e1287e8e8d18e8f6344d0";
+  sha512.doc = "06822404872899d6f509fa94f69cdcb81dd69866fbc5a82fd54ca361aaf27133140290cec2d08800dbb39c896ebb7cc19dc4cce38d2a0e45de9c658bbadf3352";
+  sha512.source = "04fa6379f9840676b4fbc31029f091d9112524f8450747ce31687c9ba77a02e41c25ff51676424e97b788c48bf0bbab690459b6b84e128514cda8efd459255d4";
+  hasRunfiles = true;
+  version = "1.9b";
+};
+"mdputu" = {
+  stripPrefix = 0;
+  sha512.run = "2720c63845939d2befea3af157eae95d2550a216cd22634ab0a923a06d50b48e7133e914d210c5d3aaae6fd620312d23d2e55a015c2a24ee1881bc7ed4868778";
+  sha512.doc = "8c8097552ffa1f11944203e818742bec244abc5a7708207cbb69c46ffc64acaac28ca390c1ee256cd1cf2af093e39189cc9bcf655e948062cd217b58acee7628";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"mdsymbol" = {
+  stripPrefix = 0;
+  sha512.run = "49b52141928fedfdf5fdd63251de182761825a6cdcbf423bff562a863df159ac0d1c001239f777e7aef68ddce23c52407758c70f7da42f066775e204ac8c841d";
+  sha512.doc = "ea4ddd0fd65204ec0ed980108d86e97be267ba46c1cf45711c36721bfab9302766ec1d0849b38de75003af564a797f8566def377d8d947d464367bfa40b91399";
+  sha512.source = "0b649eba13871f6da834bbfb2c6523db6d50bd6a491b042a19f0e061ce9794d2ca03c39d277669b6698b48806fd0b705f322a69743c4fc50233559fd10406280";
+  hasRunfiles = true;
+  version = "0.5";
+};
+"mdwtools" = {
+  stripPrefix = 0;
+  sha512.run = "bd78773e42fe20cce637a8fbc7c0e3f4f37ed50810190ffcc035a20c83508b6b7de7f7432b7bba8fbd039ba62f43a5b5e1f4839acb3fe62b425b650f23ff71bd";
+  sha512.doc = "06c8619d8bcce2c5cf9f5fce65318521bbb0c2ce53acd6b1793d0fe19a8f7a32c36ff68f355b6809491cec365d09f5f14b0589ddcbea6c5b48900d11fda4867f";
+  sha512.source = "b3e6ba09116dd83187a55f205527c318d9afb4742404bc21b12e0be3b754140ecba82642154d92947cbc0706f0f9d3e6d876bc27108f13373d3c9d6ede4d7f5c";
+  hasRunfiles = true;
+  version = "1.05.4";
+};
+"media9" = {
+  stripPrefix = 0;
+  sha512.run = "dc3f33ef201fa910251d84c82b00efe206138bbb110a06752c0a5b44e98207500788f5494c7abbbc83236f39bcd131ea7434bbb5c72653e6c43ff8d6733f3535";
+  sha512.doc = "1f25b870fe8e00ead3d3703be49b8e3593b497764edd9681a7c065bbc5cc091b8b97830c76c4c54a4f206bc1c4d2942318f06734ef169ad54160ef983a19618d";
+  sha512.source = "a84780ee19bb49d3e3c34e8765be950388fe211d16d70633fdc0735dcd55d2b8df92cea4cc51ae73185844084a083299363694a73e399141403f52420ffd0b18";
+  hasRunfiles = true;
+  version = "1.03";
+};
+"medstarbeamer" = {
+  stripPrefix = 0;
+  sha512.run = "731eb6f78875aa38a90a228626d7cb5b7129c60085418d7ddadff056c9b82f8db95ee17f20ec8cd4611aa90bec391868f6b0b16fa0eae518358a869b576c150b";
+  sha512.doc = "1605cf9ac4eba56059b6e90e6a6e7f3cba9a924df1cf3dcfed300e218bbb71d79bd69b47a5e376da209490a8869061d6de8415e1670b4ac5b0fa977f74d7c035";
+  hasRunfiles = true;
+};
+"meetingmins" = {
+  stripPrefix = 0;
+  sha512.run = "315897eff4ae50257057f8191ff92535b669fb174a2eca5c368a9a4b9f75cd71ad745f3feff1c6863705b3e9e4a954afa449cf56f86bf60c389250842aef5215";
+  sha512.doc = "6afbfe02ee39e26e2f38ce462affa66e7e0acf5f26534ff9ace0b26b4e63514a3b1702e34bf478988a50c55fbb09b7d9421a8e79da6a6c46de88c6a958afa874";
+  sha512.source = "3f4a274000889e9160943ca0b7a7af30bdbf7aa9a33c8cccd0e938ad3ab94ad8f24a6685bc99596a1046a22d32855061a7c511046dd6c306353c4f5979e1f230";
+  hasRunfiles = true;
+  version = "1.6";
+};
+"memdesign" = {
+  stripPrefix = 0;
+  sha512.run = "42949db3193952d1ae75855110ed40a1ff467b3cef0bb6d43195bac960a0873a47fad002695ad1376da2d4a1df5e1e05f89289102780d27b173da2e852b53cdc";
+  sha512.doc = "f4dfa00676379ce33857cc0fdeae867d1ae5c99e6767884a029285a94d2197926a68cd85c574bd876a2eeb85f0453520ef5efcb7f2a71a77c725f8066e7adf8d";
+};
+"memexsupp" = {
+  stripPrefix = 0;
+  sha512.run = "74931ebb1a146edadcde19d8c404ff8df750c4eb8f2f59fa83e6da9f8dc6567005d51f58e4b7bd2cdfa6b960adb072e9fee7b1842142076df88887c3c2b41051";
+  sha512.doc = "645bb189fca1c74e249745ad42c470dcd5d9fa4412a6dfefbcb6377555047bdbcf005f1c07977762e0026e8a4f8ea49e6965a7d50b0d5d5e7efd0228ac2141a0";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"memoir" = {
+  stripPrefix = 0;
+  sha512.run = "b20d8d7f3e4a65d033f97ccace40b4e0f7ecb6ee143b6f0ecc7de46de7610305d04247ea4bba6b415940ca75ffe468793233df5965a5e366668fcb0a4ea2fbf6";
+  sha512.doc = "16ff13049125d9e3e9d1a735ed2a0c89c169769b543048b9443b5d03192897296727e878a9612a63683eb71fca9535eb0f737be6a2e764e9413c9b723d783b5b";
+  sha512.source = "e1586285097ba0adda9cc667afdc4ca143b967b5756ec3b661b2def79a3b13efc418a6204e3400b5bc799051ed62dca940c683de5d64563cc5839dc171b794a3";
+  hasRunfiles = true;
+  version = "3.7h";
+};
+"memory" = {
+  stripPrefix = 0;
+  sha512.run = "9b760613dc36895edf50a592aa5ef994a30117cc9da6ea256835cd3ad9ed62ab8d8c39de95bda5058d1bd3f06451d1c79d78d52ff6d068c28d75410c5ad98516";
+  sha512.doc = "479428f1af468d909fa291388cde319aff1ac9ef6d7c0168577c5f6978c0fa7e6b23f8f81dedaf746b7e394c92d51d5799bd17aa3488207be494621b77220cd3";
+  sha512.source = "731d4e4c874a58c2c1ddf6a394dd9eb67e557608b0d2a736cb500e4e299be2a726d4312d2eb4a05008684cf5fe14d458a7c020bd31fe134f8208d9fb618b312b";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"memorygraphs" = {
+  stripPrefix = 0;
+  sha512.run = "e35c7e727cf5d6e496c9c0e52252b5169670006b9bc9e96b1c95584085d57a3f25cb9464bb55fc4138640ebb6fdb079908cc49c0f1bfff130a509b6866d3eec1";
+  sha512.doc = "1c04e25d1c16348e594191c17f9f104e9388bb608b10783927ab3412f2f316138d6b41242046f12853b37560873bb61e0a0ec3f884cf8fc26ae2ba5809b094c0";
+  hasRunfiles = true;
+  version = "0.1.1";
+};
+"mendex-doc" = {
+  stripPrefix = 0;
+  sha512.run = "2a4b24f7340194fa80160681fb038369e45c1e6783765860d3f57be944c4b79533febc82cdbc65f89b9ad99308cb4ecae4baad37205d0f375f244e5211a87df6";
+  sha512.doc = "e8c8e773169a262e9f19bb9ab704c05968440aa0ea5928e329c79851e9e23fec5f78a108188fd2512becf7d78ea1e9f388ffa80b0795bbb4ff8cb81893b4e869";
+  sha512.source = "b526ed09c503619dc128721e9ae439b89b5b143ae18d388fa387cb7407533e47f0bcaecb6967380f3ebc067f9e310f596f0302fca5438212734730d3ca7931cf";
+};
+"mensa-tex" = {
+  stripPrefix = 0;
+  sha512.run = "c453044a7f744cf89605996d0b913c56208f10c46e26e0ba37a85bb1d63ed08426a18d87cc7841aabcf44231c71dc33a5c858de482c6d48759893066168d5fc8";
+  sha512.doc = "8297e3f69517f3bace8f509dfb42616e223073f5d428c2269d9dbeeb53579f105fb65755b22ab552e5635f1267e437c4aaeda284a8325b2d95717cf7adc2de01";
+  hasRunfiles = true;
+};
+"mentis" = {
+  stripPrefix = 0;
+  sha512.run = "ee03fae28adbf147945a88548e8223bfe8c8ce220a61726bc6738f34cc90ec776aa468a1cf7fc862d1f7f091cf87964cf665839922819130f3575d56301a5d26";
+  sha512.doc = "2e869d1368b807a70f3de5550d2c79f229dbeb8d888a927005fcc43c70644da0ccd36eb2464fa6437c9947c78d59e77c4013824b1e8d5a4bb517b80f1cfb5a8e";
+  sha512.source = "10858cb9cb2db0f7db31d371e42436ca001ef20fede5f6b34dca61fa48248383e32547576a2dd3a4a98acddfcaf9e1d3fec89183c48ae76d5b3b677fabda7549";
+  hasRunfiles = true;
+  version = "1.5";
+};
+"menu" = {
+  stripPrefix = 0;
+  sha512.run = "2b2560a1df5091d19ff37bcbac1465fbfc54a848e4d19782602d656bf42abe47bd2bb1946f87a127c70725cf508ff9712337f3a8719d1fc0bcd4dab4473c7bc4";
+  sha512.doc = "ce8ddeed4e1bd859865f548d8ffc6978a620d9003f908d360e656085f6010a0f179218cc8b2bda4f754685369b53ad59245fef8d8f8a766b241f092162bb76b5";
+  sha512.source = "6c96cb64584802af2248bf43ccb7cc5215d8a2d2c13f1d6cf8567934938979095bbd51760bad7892a6d894a9651304dc9f5e4ed038f68ba0af087567de0777ad";
+  hasRunfiles = true;
+  version = "0.994";
+};
+"menukeys" = {
+  stripPrefix = 0;
+  sha512.run = "690a07e343a3358179b271fb51b33f6b9dd952fead758405bdbdea9afc8d410d1bc72a15557d90d0699f26dcf7e51a6df3aec1ddb7ca752f5088de46dd5b7711";
+  sha512.doc = "4b962d91d637a69f7443fb6ac4a94fe63901a7fe7a2d880eed320314ac6114c341add9e589547649331f123d9bd3af7830c19f83389581a936c67fd0dfc4424f";
+  sha512.source = "35b57df92bf1eeb8ecec107c913ee8be0c84d27c2f98e7f2c7ee42b182905d3da1ac0e0969056d4d5db849c47d6953a8d2c6555259dc37fbcc432df4dd0e3808";
+  hasRunfiles = true;
+  version = "1.5";
+};
+"merriweather" = {
+  stripPrefix = 0;
+  sha512.run = "58f56dded4abe3724411d3c46e338fd5f7fc2c8ef9788939077981503383783b005a7e691478621437b158738129a7dcedaae45b397e1605805beff04437ebbb";
+  sha512.doc = "54d8337ab007790d300ec6c9d8c0f24964693863bad3057d1f473225187b7c6b7315c3425fcffff3134cf8fd96d65d6d4311a9f4c6019011fc8c2e11f8ceec76";
+  hasRunfiles = true;
+};
+"metafont" = {
+  deps."kpathsea" = tl."kpathsea";
+  sha512.run = "7a1a5d0090a538bda4abe8f994a6891f46a8c276f45f26b0be0901102fdb55103a86848a153d3b0a980d08321471cea3f4249595aa4dc6398875d1d14cef8e96";
+  sha512.doc = "119568cd01c06d8772495ff725f3056d648b844b58591216e8f35caf0f80b5d5908ef796c725eb7d917b04ca734fbff1ec0a4ad1e554ecb6a5d243a829644beb";
+  hasRunfiles = true;
+  version = "2.7182818";
+};
+"metafont-beginners" = {
+  stripPrefix = 0;
+  sha512.run = "39352d8b181f3010fd4dbfbfad18a8cd3f68f0c38bdb89996ea4c77a649acbbd15e9a7fa318193db08733b3722a07a8ebfb17a6430bcc9af8101dc444608d75b";
+  sha512.doc = "4fb7148b0668845447fd38411df0288972312a56897b1d5bce69a7e57ae632aacd12c273a911045204705a5534ac1d1c290af08a7057bd62184a59eb7146feb6";
+};
+"metago" = {
+  stripPrefix = 0;
+  sha512.run = "e7b3661d99ea50f7b20fe3af370e59e960fc0599409b5c11bfc9618c12c38e44b89e4e81d69ae7ba5e2565e46078ee52ed0bef46aa619408b386bb73926caeb7";
+  sha512.doc = "8396725c0afc87c63d16256d5ab0d575a19f05d78ed245099a60785f0810a012e8c0026cf13d03781d09d7c0007bb9ed9b87072ed732ba706c893e5465461052";
+  hasRunfiles = true;
+  version = "0.9";
+};
+"metalogo" = {
+  stripPrefix = 0;
+  sha512.run = "20d5a9b8454166535aa3aa80da7d2931937fc6a4d730c1ab70c856311c223d466e9fce2ed6e3b2fbf4b4fc75778d7d4c2649111df5f92dd58b6fc42b3ec72696";
+  sha512.doc = "48318b396e4e227dc1b80e21474a296ba4dfd37e81b95f9669dd8c96ca7318abd8a1e21ceb95e0ca7832ed64a85ede985fae7e2e52b3aa742c64b86e54fc563c";
+  sha512.source = "bf240b77ef00d5351218674baf851b0eabcb22257fd6ce9dbd6b66afec5323a730df7b27d522f5130830ecf92af377edb3ec7906be206e760971dbe8f6266942";
+  hasRunfiles = true;
+  version = "0.12";
+};
+"metalogox" = {
+  stripPrefix = 0;
+  sha512.run = "d2f6bb89071ae56b0083e5b38a629e6089d5d2c73fc9206181b2aa3071e0a4a350a3f5266997063a011d41e4d369745ec5f246d8f3b723c00c8dfa84452e7cea";
+  sha512.doc = "d55aa00226b6c7773cb275d33ed698e2617b82af5a2b060b58af7468e8be2d9c65bb8b052b66c28a94551fd51867a34e2c6b9d0147161e3df9cd05a03567a59f";
+  sha512.source = "b6354ba439f3514a491c271294436f01aac26f77225455d1fb1a91d55a5353d63f2de6d3814bec21c0f043c95186411353c87992387f2e174d9cb03057ef0560";
+  hasRunfiles = true;
+  version = "1.00";
+};
+"metaobj" = {
+  stripPrefix = 0;
+  sha512.run = "cf587c174e44da9496ece876bfcb8330bc52173cc3bd6d1b1351efc75a7c333ed8c7cbd41c079d492947a1ee43d8043fabebc80b4c7a5d348eb054e82c704e3b";
+  sha512.doc = "0bfe1fa6a4b3a8923cfbe9bdc4fa1b27567df66365db447346fdcc739675d1d815515e09fbe96f44369643c38e6a8007a0f8d089ed8504020fe0a0e2a795ea9a";
+  hasRunfiles = true;
+  version = "0.93";
+};
+"metaplot" = {
+  stripPrefix = 0;
+  sha512.run = "eb083316720a5d7379c0ef7c1afa0e82ea5df63a3a98200b7041637a6fa47aa33dc20a265e05bdbc63abfc375e6b59fa199d4091875c057a044821c557963dab";
+  sha512.doc = "1732b5a572a3d4c0a646308d3c102be29de845030a624763dd6075a44a739a29e65fd9f224229eed6dbe8dfc6b590a3df1cc07c184881dcd2f3dc5b0642a48dd";
+  hasRunfiles = true;
+  version = "0.91";
+};
+"metapost" = {
+  deps."kpathsea" = tl."kpathsea";
+  sha512.run = "a22902373feb03ba91fedd50274fc110bfbc5d53a016d18a5ffea87946db7f534f0d68c50aa28292ce0a8ecec4808541fcbb4ba94ca3a1db52232c59883bac65";
+  sha512.doc = "ad46b27fdafccf2b6699dd64aca10a7f94916719d13a10bea0c3359577cbaf66324084777400c7c8ea531d911f0529bf7be1f95cb80d187d9b1a2b97a5077853";
+  hasRunfiles = true;
+};
+"metapost-colorbrewer" = {
+  stripPrefix = 0;
+  sha512.run = "e59dd121f9a176e628697e31b720507723867a0b7b68b73531aa825bb02b07d04ff705bdfbeb369fe3a2d304f4c6c5aad3f823aaa4c82257540f1459cf099cb1";
+  sha512.doc = "59f17d78ef78a142bde5783996f149b3a7c740c2b3ec6f90133115ebddcf6c460dada543482f5379872054a74eb772bab8afd96fa48b2484f7932a478b8bde2d";
+  hasRunfiles = true;
+};
+"metapost-examples" = {
+  stripPrefix = 0;
+  sha512.run = "95942b1b110e65274839ba01c16fed3e63a0ac99aa564d7a000bc9d9a0f5625ddc1dca13e786d0721bf93e76410722d4d76c86a05297bc39cd9af6dc91c2e6f8";
+  sha512.doc = "2a3aec80b511864878e07ff973e17ed4fe1aec692c7e6983b57dde586aa19500cdd373687b0e081dc80c8584f116f0fa3de7ed4f09ba232eee8adce5e998c954";
+};
+"metatex" = {
+  stripPrefix = 0;
+  sha512.run = "8d438cf0f3bd375c169681b242b7f00dca96cd3bcfb167c6aa664e27dba59eefb53a6d28ef537802d584b17bc578b1d63ca25799146ee6d986bc647ae1b0af2d";
+  sha512.doc = "3c2918a3bbb30b4abe2395baf32ed2fd5fb1ce3541f86250f0c4037aeb127fe7e90cfced87144d564813a437b39b184503ea9a2c0c61b979907db74d91860677";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"metatype1" = {
+  stripPrefix = 0;
+  sha512.run = "1dc34e3f826ebf09c6f3baf358aa0e5ee4ecbe86e2f82a7da12c706f443f5eba7fd8582bf46612b2fa3588515dac34c49d47cfa2b9c3ae905cc51dbe7779eb28";
+  sha512.source = "26f891bb5a62da78763df29f1d9caf26588c6dff57e063eb445ae23a5dfd7108956068de991bbb514ee394c49d4ad119d4a0fdb5398aad48d9be223b8f13d388";
+  version = "0.56";
+};
+"metauml" = {
+  stripPrefix = 0;
+  sha512.run = "96773f0d0e2788d13738930fa1aa727c7ca2edee020f3848326d7be3533c177ac977564aed533c59695b1e6c4c65e191784cbc3e7e70becdd651cd702b462ef5";
+  sha512.doc = "6c649c32111a6350d36c69405fc272a917144be429bd84c0f118a74e1232c06744e66fb6647c5a742f58c6c78b46830a1484bbed3a9a962380ece6b16c555169";
+  hasRunfiles = true;
+  version = "0.2.6";
+};
+"method" = {
+  stripPrefix = 0;
+  sha512.run = "9b71ed52073f831431ef6a3a81afe7efac97a6dd39d772b8f48cfa639dfec01411a5654830fcbaef6a3bef7aeb718bbbc38cbd18c592a080e67175dabc7e9919";
+  sha512.doc = "2a211d1325322bfaf57c81a534f29fde51ef2e0dad8d7697c3af9fe10745c5f6245bb689b65d54c39a66b34ccec69d055f201aba34b2a4957ce2fea0827eab45";
+  sha512.source = "ba90537e63493073509e9407aeecb28797370d75aada1835d5fbbbf991ea9b933226950765b61ab831a708d5fddc10c2fccd624d2872148bb77759a3595cd275";
+  hasRunfiles = true;
+  version = "2.0b";
+};
+"metre" = {
+  stripPrefix = 0;
+  sha512.run = "29d99fe061c828b4eef12047215451eaf6d603106b0ebb0b7c83c8f8b5ffd360160e29a0c86bc0cd329e6f694efae695ef03282885e872cf26c8177f951b705b";
+  sha512.doc = "73ca10e1d2b32d4f7b37de6c409b68dc38b3dd165f47f52714c3a17e7a5dc6c1562928e7a7f8c5a3ed9aadfe1324e451baf6cda5dce69043fef3811cb6ff8cf7";
+  sha512.source = "d11bfb161dd68208b4f4e29b67131618a02cb60f4e87c3f2809759ab42c44603e790876ea84c6c9f4f053c3cac1bf189344110ff5b4acdc97d7ddfe4c466c977";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"metrix" = {
+  stripPrefix = 0;
+  sha512.run = "00cbb4d0cd9417c57ae2cf701f0a485d296e17b95eb56a7a3b0acf328c4eadf3d8ddb7d4c3442ea26ef019dd4a6b5c95af9f718cd4e31b5e5d29301ce8e82edc";
+  sha512.doc = "e5f8654272e8a85366c226113d3815ffb1e539237bdace71da55e30864f8c746162ce1b3f3023e3e62616b286145157816aedc871c6c42dcd3d4b76092d8ea46";
+  sha512.source = "51a355ceccac5ff53cc98baf6d8fb3c36949f620a51191899d272ecca9671819c740703af1c47856b4c171757de68df839959388c2d87b2f43f54aaaf219b7a2";
+  hasRunfiles = true;
+  version = "1.5";
+};
+"mex" = {
+  deps."pl" = tl."pl";
+  deps."hyphen-polish" = tl."hyphen-polish";
+  deps."pdftex" = tl."pdftex";
+  deps."tex" = tl."tex";
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."knuth-lib" = tl."knuth-lib";
+  deps."plain" = tl."plain";
+  deps."tex-ini-files" = tl."tex-ini-files";
+  deps."enctex" = tl."enctex";
+  deps."utf8mex" = tl."utf8mex";
+  sha512.run = "192ff9559722639d535d91d58d161594506374548a4414ff1508750e35b0b3e755e0c6c87559899e216901d62bc88cb28dfbe0725ca5a51325135f4251e1f110";
+  sha512.doc = "0409918335f2b6fbaba3bab7027d91b2959c13927445bf64aab60a14b033c1e50d27c19878a65a56e8245ac025a881300e0f5e47ab0662e70e5872109097077b";
+  sha512.source = "3d8246a6e7f3723904711f765f42282cdca89c88d62aea2d37a259900a645c094d6b1cf8185533341c82d14ed7c44e4b1b573e6524d5b4fccc74cc9d2cbdf1bf";
+  hasRunfiles = true;
+  version = "1.05";
+};
+"mf2pt1" = {
+  sha512.run = "87a90bdf45883da1291d8ef5a21e6f7fa51480f9933b92ad4a87384037de991ce36b47c238f822d466238f4bca6aa41a123c76a34f9f6efc2e43a2104f85182e";
+  sha512.doc = "8e672808d60133e8a06bfd7350b1f9f5a4b1e706e565382b015f8eb9dbdb6da246b12815388f445fec87e63305381717d817c1eaae7762fd7b8043c89e1f2401";
+  hasRunfiles = true;
+  version = "2.5a";
+};
+"mfirstuc" = {
+  stripPrefix = 0;
+  sha512.run = "de7ca64b5a32f697ec1efb477c2230ac418799e72f298ee6ac80409952affb35ef6152fb366e822ba1b01e39afe4483d5437c4e9aa22130a90bef79f87ab77a5";
+  sha512.doc = "1a2705a13325a97199095fbdb900b94e94f308311d7609ddfbb75efb7afeb1a2634a0f543da517a03d68e974d2b917f94a1b6a7b3d31965d7087ac585b6b0df5";
+  sha512.source = "021d1e945d7033ed18d3df4a3a0756c9048e7a576bd5d64f1fa2f963292a9aadf0c5bea95b29e3468117ea4f02e4b83785517516d87a31bd85bfb6fa0133e734";
+  hasRunfiles = true;
+  version = "2.06";
+};
+"mflogo" = {
+  stripPrefix = 0;
+  sha512.run = "a1c5168e37fd9cbe5fc2714ee43143f36cec662441a7a9d33085652a5d6f769838d351faf416df6fda78529b5f8712f1a056afa47577fe925dcca5249f1fda38";
+  sha512.doc = "6d1dabc636d22c824838a82da83a4676b20bb8a55dd1ab5628d00b4543096f91d234a51a312eb83544891910d923650f09e8911ec9db668f411735de6ef5bf3f";
+  sha512.source = "7078092cdbcba668ebb440ca6214eb155221427ceaf4d1f574d1055d2f1f52d288cfc0f1d2212f2a62903e447c4aeb378fade068ab901833ab9c251b1890e15a";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"mflogo-font" = {
+  stripPrefix = 0;
+  sha512.run = "8be2b2456a14bc9a8a741a11b033a844bf529b511eb1173887eefab646922a37b82b5847cf94331ad34ad19bf6c75629687a7e490dc57e7ab7be473f751945b3";
+  sha512.doc = "aec625435ec638a6c36b7303d9fa81681f355460392f42d78cd820d98f7b6489b978980ada6962db5c1143057133d32fc7f314dbd60f606db4b69209de5626d2";
+  hasRunfiles = true;
+  version = "1.002";
+};
+"mflua" = {
+  deps."metafont" = tl."metafont";
+  deps."luatex" = tl."luatex";
+  sha512.run = "a12e8a56228f0e3c49ef08a47c989135028ce6a99db714eee1304feaa31ae10ca5f030291ac56e9a344b54626247a521a909a18a35038333dbdce6553019e31f";
+  hasRunfiles = true;
+};
+"mfnfss" = {
+  stripPrefix = 0;
+  sha512.run = "33206fb4cb7ce8f18050d713be415abb95323599270b2b91c886e2ac3f24a58786a480e5d4d1ad6ad2083456231eacf94dc769b26e6cae7288e996c6e14bea29";
+  sha512.doc = "f8421e58ede77c8817679fcdcb43fecfc519427b3cb93ed2594fef5c8ac8124e0563a2182803a2a6bc417982df298abc7fe092f1cae5ed7583e2fa6fe94c8345";
+  sha512.source = "2bd5aee80abf38884cc4a3ad6d6226243a6ffe0d2e879101aee56168a10cd0c7293eec7ccf53c7a7e8087ca94398e3f4ef38d71ccbbfe48677ffee3f8b813bc9";
+  hasRunfiles = true;
+};
+"mfpic" = {
+  stripPrefix = 0;
+  sha512.run = "361983a020165d094bcd0fc9616be74bd2b5c72542b1e1b257b5ec42ac6be1175caf59c79e156da2bf6fecfe3746b4e33a4a8fc978eb124939ce0ffd2c383081";
+  sha512.doc = "97ec26cc1ed8e181c7d69af264204772c9075e3650044b58cad938fd6918f9cbf5c849699e31846f437e41410492b67668a7ec33e848cf6b5fb9c2d52d7a7947";
+  sha512.source = "609b960a70d47edbb814c981c5cb03b91fd19e905f8caed599be2488e0ed9ef0bfe01af79353015e0d6dd2fcda6810bde10ec4d8e993356bb7371ed2805988c8";
+  hasRunfiles = true;
+  version = "1.10";
+};
+"mfpic4ode" = {
+  stripPrefix = 0;
+  sha512.run = "4f3a314afb6b1f8c4fb07421244f2a05747f5d24194659053c561ba24ed90f325e82ab9d97981af6455081580f75e9e8f75d11f06aef9e1c027ed0f9bf17696b";
+  sha512.doc = "9d5f38873cd94fc3248b619f68e04bdb1824eb1249cf02e555a60c3e84dcab78d3e04f9451e1803943e898ed7f55e33615f673da8c58569219650976c25f0ae4";
+  sha512.source = "b5de6dee490578bc460f76ccb606b5d62d4f6f2c43e2f9967085f1a323ba287cfc596da70905a40e1ac602074323940a9e42ba8096a9a35190ca280217b2e10e";
+  hasRunfiles = true;
+  version = "0.4";
+};
+"mftinc" = {
+  stripPrefix = 0;
+  sha512.run = "64fa5f38398a626d5a351be7ad866c75feb4549f836932dc936cb99f921e7b8abe5b3d6fc1e1e6c427344606ee5dacaf067d8678e7b199fa1ff8d5c94cbffa49";
+  sha512.doc = "0846744cfd86bbcd8b6ad90d58bfe5788a79f43d05f3cf6f438fdef50cc4872ad8ec4d32005ced9ea9c424f3e86a799d79b0baf2a9544a3018531a99cd81fd5e";
+  sha512.source = "50ca90a2f48970b3cca5552a361337ed138b4a9e31bca2766eb429cdceac2a09adc1cafa6c444c514fabe71c38ed82a63b847e1da014f2c131a15c362efaf09f";
+  hasRunfiles = true;
+  version = "1.0a";
+};
+"mfware" = {
+  sha512.run = "9379a31291d572743dd3d8f82e32e7057d686ef12d321e1f4c179df1d9d64116a61c7741b2be5b08a0f396e69b6c567e40cfb66141dae7a95ae3910366214a37";
+  sha512.doc = "f22a628dfe7d1566efa13502f38ac399e17bd90fd274a0fe4fba98de25bd24b6a3526bc0124e24277979ca42af8c01898f71e9bd9e1027a899b12c74c6ac205e";
+  hasRunfiles = true;
+};
+"mgltex" = {
+  stripPrefix = 0;
+  sha512.run = "f9d98f3e964ecefaf420ecdbdf7187300613bd22df092714ba5b5e945b47c2b24b95dbdb22abb92725a7fdc1ca1fcc88cd14cef1cd1f241c02ce26328951d751";
+  sha512.doc = "3a987e0ac6ad678887e9a2aabb18d772a3bbe4d1d10d53184887f95191961b692d231c1a7942c3383a5468098432807030a0d3877c5f3b0e271d8b7efb1366df";
+  sha512.source = "3467c64e09fd1d988619e93df1e2313639d2b8c95faac62db5d17d615d56e868c06be917624957efd7528b50cd16cdabeea1cf0647c347061632c57fe99543b9";
+  hasRunfiles = true;
+  version = "4.2";
+};
+"mhchem" = {
+  stripPrefix = 0;
+  deps."chemgreek" = tl."chemgreek";
+  sha512.run = "c6ab7b1a02d2b4c510e487d86857ca82b2d9e9b46a786b6067b91a097246ccd40e24aee09b2140ac2b5446f7b12d85614b31ce75d45641d923bbd77411696781";
+  sha512.doc = "832897ccbc039a46d0c5e0c3c8dca172ac54451b8d22a5d275acd6fdd30f6119ed13345b0b473c44edff3c8cde47480e6fb3424b795db55957d40bed08a1def1";
+  hasRunfiles = true;
+};
+"mhequ" = {
+  stripPrefix = 0;
+  sha512.run = "90f7dabe6486f6566ad6f835838ddf58a6568364ca2b5a82ea9cb96f283c5025c1f93fb50bac98405e8200de32b2c27e592e401a44fab691331fe4f77d27a202";
+  sha512.doc = "0d7a258a96604328231c1784f218ef3351f9ef02a0a9a9da42db36c89324ab5f74559f3ea91c12553ec5a39d14b3a5f282f61ab9e001994e22e266ce394df26c";
+  hasRunfiles = true;
+  version = "1.7";
+};
+"mi-solns" = {
+  stripPrefix = 0;
+  sha512.run = "ac5beb872c78675bc9df379f8a2afe533647a1c39781c57fed2cec6e610cafbbb45a4fdcbd9826cb123a584e121ff752633d6c990109bb1f619b1d9fac6906de";
+  sha512.doc = "cfd36e0a1476e0d148fb36f350ec236d57beb2c0b27f08eb56f69683790b16425a6f95b4f93a010fe0d450863fb34a7eb31b1c8e40fbe5319df128439dfa5372";
+  sha512.source = "cf41fb6338270f2fbf56b33b9d0b3b6904f06a84b99dc8fc0613e10644b3f198b22634cd82b78bd50b236415ec6b8d46c9d0d99728480782459f514d2086426c";
+  hasRunfiles = true;
+  version = "0.6";
+};
+"miama" = {
+  stripPrefix = 0;
+  sha512.run = "f7a23b5d536b8fcdbab50eb86727a3e2b88c079f3e0a137220459522e4c939910f9a06ca55e944c1e9cc65301836aacd45aaaf8048d35397b3919220afe8ec95";
+  sha512.doc = "415233ee772f2c1758f1a980c5a7d320735125819c5c7ccdf2d4a21a2c02ca20dd741d64fd3b3fa5dfd8e0f0b69e8b669a319745f30b179ec345ec4ef014bca4";
+  sha512.source = "29d11b1a7e711a5c5d1deb35a7009a4532adcb640af64d23f9adf60eca35bbc3a4bafaf66c536a2c18b30d8944de810cfb1021039b0c73449d0ba799b55e3623";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"microtype" = {
+  stripPrefix = 0;
+  sha512.run = "fc9b36ea89ff8b064a415c84d692ee6cf2a928d650bff56bea9d34e3bc5bae84e080b3a34c147f9bb1b6f16d2ebdb7c32198a592ca2470afe4b181dfb3e58144";
+  sha512.doc = "ab9092d0b91881d78fdf9007b23f9c147fa944bef745329cc2a099a1e4dbcc9aa5836cd79cef3dedd2e458e2c9f4e83599b20436bd3d50e5420c84929f660930";
+  sha512.source = "d79f9aa79e3b4ebb38dd6b72dadcc6e00d722010d973d2bd6177350f4bc58d6f2e490be1c1eb7233df1d2d6a0a10d70dc76e08aa59bc7109099e2c0d2c2864ac";
+  hasRunfiles = true;
+  version = "2.7c";
+};
+"microtype-de" = {
+  stripPrefix = 0;
+  sha512.run = "bd9b7ad26bf0d4125d1631a377328d934e6fb8b619e7040f6644a6df70bd43cfb8a93e8ce6b49afb90d824b73302d063bb23e67fa172d635e952b035510dd6f5";
+  sha512.doc = "1024c46f6b7dfdf4aae45090533087d1cb495d737856fdbd9691e7cbf489c19ce229d35ad55237e30998f154c9ef524c78068d338c236634df8922d50ae4fc17";
+  version = "2.4";
+};
+"midnight" = {
+  stripPrefix = 0;
+  sha512.run = "8f8bf1d8d3c5c12147dd61a4d65d311552877a9f5eb7ebcce71602dc69ed5459187134d3a1e346a15255f2c4ba57f054c3d020817df0d5d89c7fc2f216b19cc3";
+  sha512.doc = "0c594cac3c7e8d3064145f1b2b088d74a5445b7a7506fc2629b3df6f63419b025779e348116f7dbc859d7c406d87e5b5988d529e5da61d01b0759b0f0fec2382";
+  hasRunfiles = true;
+};
+"midpage" = {
+  stripPrefix = 0;
+  sha512.run = "9a13760b776cdce28cf3eb1e28e957265d7d4e83b23234f1590285bc83409f1d5b09040fc6cacd3b9f7a5ec2f61a4e5431fea92a5fcf20032c7bb919ed59612b";
+  sha512.doc = "25f41bb8cb12c6d310da66d36032eb4933248f0c84a67216cd0981fda7e61343c0dee03e96f522bddf969e925e6cf495754e52e863672f1cab4e94ae3b0400cd";
+  hasRunfiles = true;
+  version = "1.1a";
+};
+"miller" = {
+  stripPrefix = 0;
+  sha512.run = "a1415d82a2a81c3dccdea1b59c4c0e8d2cb3902dbc6816cf7615fa3e571de26168a6a066f52bad94c38595102afcd1447721095bd084befc20b3fb3ad420e129";
+  sha512.doc = "3f888fed2b909c269ead9e5191a788828048a21103c881a9b769fb0e8a3c0f3e6c41467827143f6b79a45d2497e3ac21d5c6da8727be3c987ab8a1fdbcec59ca";
+  sha512.source = "06e15ff6c146685a8b4d13c5d4e23de4ea343afe684924694f86104f362df7dfaa975b25e850b685e05efeeddf2ed079038cafff8a495116f27dd756e4dceab3";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"milog" = {
+  stripPrefix = 0;
+  sha512.run = "126942c7be2217843d5dd0a6a927d1a47537ced3b1a083caa54b4905625b57238cc0a3a8d1652da076144b8c2469f418077eb4051527e5d351c2d95f3d3a5f79";
+  sha512.doc = "251b73ab0f52ff2672733c3855289e012965151e07ff447da373bea083b1ff6bfeff38adef72419f03ca153545fdb90bb18f3aa254fa7b59d3c5c061ec5d15ea";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"milsymb" = {
+  stripPrefix = 0;
+  sha512.run = "45e601def6cd11cd58f0d30e39f243a48be800861b0c1c787c393f39d5620e53ff43759e31e87e20aee80dabfb96da5bd5f2349b83fe2c4f0b82455e461986ee";
+  sha512.doc = "12550ee788252597671d8f19f5fdf412999ec80d3319dfc92f48be5800dc9882b57a98ef898c79d5e22f333528a0db248edb7798ec28a9e41c9d2542dbe1cc62";
+  hasRunfiles = true;
+  version = "1.01";
+};
+"minibox" = {
+  stripPrefix = 0;
+  sha512.run = "18d409728f57cc2e423b5c74ad7ff4a9e93f2405497a96024769fb01f7604e019d914365f82fa5908bb679ce4a48cab64fd4435b531ef72235067481b8dbc96b";
+  sha512.doc = "0404b375fb0ef258d0e5acb8e7a78a60a55d08ce7339b9b63b1711dcc6d40b6f302b0f35f7d1fc8bfbf431b66bb5aaa2c94e92ee8e788a5f2156031425c0c4a3";
+  sha512.source = "6aafb14003afb2ee18390391e15fb00f73a16f568158d72fea348e7052bf1ec5f25cd446569bb3c6dd815577fca7b2522d4474681b560ee3ea65b6053509df92";
+  hasRunfiles = true;
+  version = "0.2a";
+};
+"minidocument" = {
+  stripPrefix = 0;
+  sha512.run = "33a7938dc25833faef05245d00219ad4d94902d1b5a8f63de8c08448da1f4ddd8e305cd261a3051df919b097f0b3b82081b57fa420e773dc89a1c8cb801ba463";
+  sha512.doc = "03ac398f6f8e79003b155434992a53b1485032ef779e5fa05a43adf7528fec1966ba94731ab2fc11cdfadce51bfca6ca9d1a88f882ca87f08d8e4077896af4c3";
+  sha512.source = "556f1c482366f1bf2bd6e2f4e92f0fb811d97e91e057994605a2794f9441f2df35bcd2e2dc4d6218e980e921b7d7a03e5ea2613b6d27d8258985521ecde2dbf0";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"minifp" = {
+  stripPrefix = 0;
+  sha512.run = "412bbd3466eee82a99b43d6f4a5998a0a22b20c2d51621368ecba1084010a5333bda9e221b07dcfc6ddea8810edd0dcf60c2be6f926ca0da33071e6a812108d9";
+  sha512.doc = "56e1b71f8289c126df12091cf155c8c05f05a391abd40ff6ce0b84bb7620630a80747e23c25bbb4276aa5d110314076f61da72683b6846a44a53ad3515b91670";
+  sha512.source = "32cd837a6c750ae92f9662db289a5479a102d09058bb4c85605820d6ced83f237d684fb07c9ba59f76062d6d383d1b45485ac2f2ec4e5bd43f780254facac1e5";
+  hasRunfiles = true;
+  version = "0.96";
+};
+"minipage-marginpar" = {
+  stripPrefix = 0;
+  sha512.run = "acf33aac7dea3c20986a9ed1f76efbb470d9fa1cbd31f29ed4fddd0e16835ace1946278fcfd04ea179122e603f63b269872953e40f8a64843ae8e60ded769356";
+  sha512.doc = "20d503697a246b8b56a71cf324e4daaec436b62e9c3b9556095670c2b461d273e8b77e24da3cada37106c350304827a37bd6f658727373e384f11fe064e07992";
+  sha512.source = "1050833e51b5a00963b616b496d9b18e49cc8ded901ccdffbaf949eac12fe8d31219c650936c083767e39a39dcd08686ef049ce11abbaad5daa998f4e9c1b7c6";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"miniplot" = {
+  stripPrefix = 0;
+  sha512.run = "2c5d08c2476871dd182bb320c50ec96f202ef65a417e65d1de8aec391fb60dc66c1e9e4642ad2207f7f4bfdd12e83bfe2cf75e9fa4f0fff0f4ee72769f7ca84f";
+  sha512.doc = "6ae8000b3d0ef50e37dfbda399396a42bd348d6ed9ee485ff01ded9d850693f43b0c1945dfde93d9ea0f17494ac2e03391824f2f0c0eff67355c3d3f3ad6cccf";
+  hasRunfiles = true;
+};
+"minitoc" = {
+  stripPrefix = 0;
+  sha512.run = "c5af65f4c1d7c19ac5bca84a6a8b465a6d00805164e0224ad3adfa473dbff8604d1ec39958568b3ab611364bf09aa671d277a7458595eac130b121b0972ee32c";
+  sha512.doc = "c193a77791f3304b09ae58faf19490bd68bf129c8ec435c378d3ebce6ecb47c284ab1e1412d10e43dd2e4d5ef60a9fc26088d8c35054f6099fa2675076adb6ce";
+  hasRunfiles = true;
+  version = "62";
+};
+"minorrevision" = {
+  stripPrefix = 0;
+  sha512.run = "d76224254aa18dd80f9bab56f055fde5bb7ee6b5c3dd88e6ce19667c939fb2dbd1e5cb987522a3f1c50082f46ee20cf918f1e01fb00f588ce11d30d300fcf574";
+  sha512.doc = "ab1484f7ec214d43b95a8bd5cd78ee28bf0055d99d8c63c424c5c1db1c77b41a8631ea35bef745ab0399dd1c8dd9c9ab66b60033bb151f46afb023b6b5e1ab44";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"minted" = {
+  stripPrefix = 0;
+  sha512.run = "5923b5e87e8bb2cf148a480035b906aab4b03b903308e8e9609f98376f82e23fedd529abca37bb4e9211719160abd9d4488f5c73a0283f67c7f11ee3e1f1d5fb";
+  sha512.doc = "0187a04f9e42c1bf3e5d961c28b977e527dfc1b57c0f823eda047d5e6c888f3f8da1fed691c8e3128d09b3740deb1b324baa607b9abc20a4fe47ea0a29915e90";
+  sha512.source = "1595aac2da1fc9c7b9e50c92fd12eda866fc35e884e335b1f4883188a4b0f9603a39cffa252cc1bb11ffd4a67e16a80b05c5ecf2cd7440c50f0605e5fc44e302";
+  hasRunfiles = true;
+  version = "2.5";
+};
+"mintspirit" = {
+  stripPrefix = 0;
+  sha512.run = "0155fde1eddb9558959c260334ab1d5489ca5415b1f7afb687308feb67f6951932bdfcc2e59e6cd3a4b34449f129dc1eb53730b75d60347bf7e2647a18cbadb1";
+  sha512.doc = "54211f0e40fcd0e3c248be16b647462cbe3e3953fbc6ab050634e6a9455b5d52157b77a49fa96c707e3a65c088a92e7e24e86359cfdfa141d48a0ba5b2bfb682";
+  hasRunfiles = true;
+};
+"minutes" = {
+  stripPrefix = 0;
+  sha512.run = "3abd6c4963ceec3cf073048c21d2abc236d58f522000195fd459c554c10d2af9afaf772b0fd1545fdf72decbc7e1c62a0bb12d7bc1dfd9d5b025f5131ca5f145";
+  sha512.doc = "a069ea537eb1fc572c842a26dd406b1ef2f1343ef6066d266642dfe37515a3679c3a9e64eb37e1e992fc40281d855b817edf9116aae3922abc60e3c01106e3da";
+  sha512.source = "09b6260de696981f020835c61e20f23bfb81404df44af477f62341b9b07c65a1be58098d33dc876d6f07f3a5aaf6df25c8e3e7707c0f238ae76094ff0bfe5a2e";
+  hasRunfiles = true;
+  version = "1.8f";
+};
+"mismath" = {
+  stripPrefix = 0;
+  sha512.run = "6993d47e645b2cf4ce2bf735e12b639ef9cc3e91bb48be0b693534b23ae6b1b90b9abef56d3781e4d87aaedccbfa2200f963379842635d43de6d3ca76c0c7b92";
+  sha512.doc = "0e2fd30b52ba2ebb77ecb4d3c90218fb097b65356a5a7a05897d29394ffb59649d9ab24f1140b416eff8a64cf0ec16d326f312d55488be8fcbe9eb591b598a3b";
+  sha512.source = "a568817f4112ebabae20e73b8166085064a6b336ed242af132f96313eccbb878de8bb18f08ac8be2012dea6cc63af856d80afe5593f336090059dbfe869acf39";
+  hasRunfiles = true;
+  version = "1.6";
+};
+"missaali" = {
+  stripPrefix = 0;
+  sha512.run = "d16285296232f45ba3eef2e427ecac59b248f9788abd5b2e9b9007f2013bcc52ceb482063290e3ebe6ea625adefdd05b5948546e0a4c17377a6e4de30ecca041";
+  sha512.doc = "c786638ba6c5d03395e8efdcc1295ec7b7470daa058b7bdaff4452e4524cc2467606bd7eea5591826c8aa50ed22baecd18319dfdb28bcaed6d2afce176e984a1";
+  hasRunfiles = true;
+  version = "1.004";
+};
+"mkgrkindex" = {
+  sha512.run = "bbb0b306f30b4fe898f5d5bfdcb1eaa4d2d88a95cfa1ea0da51957aad1de028928562c930180f6c0a7d66b5cdfd804d52afbd229e7ca43173477a229cefff192";
+  sha512.doc = "5a5b14d4282e97420f796456155a71c23a44d4197d4d92bfea1f0f20e95b42e506c7be3f2b0aba37508415341e999522bd823c649cc6259a6e26d42399c6b8cf";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"mkjobtexmf" = {
+  sha512.run = "c0dffdb276141b78bd2c47e6d2bfddcd13c1800d3a0806a05ca1fba72a91621364b827801430bc757601e07f2a5130366ade49d7ac1df27901fbec29827739c3";
+  sha512.doc = "3ef5c333cedd5104b63c1457fff2eee40aea7d1f1b187d34ce4cfccd5b6bd38809b7686dc7b41a147fbee2ae0e951470f3ae574bd3c10a5f9b6fb76b686ce4f5";
+  sha512.source = "7f9de9bafb890d12ef2f07d3b8596dc31c4bb97079f826c9efd4f318383f64d8250099a937d8d692fecf703e626b42f942962f4d906e705cf4b0155e354bff0f";
+  hasRunfiles = true;
+  version = "0.8";
+};
+"mkpattern" = {
+  stripPrefix = 0;
+  sha512.run = "0395c9258e6c4a8459e69ff2fbdfe511b0c6863e02333d9481a8a1e82362cf9e1be7e89e7447bda497e7ed2bc18e1986e0a5461e9f49c63ff869f39a4da4f007";
+  sha512.doc = "8232866143444fab1ed1f15255dc5f8c1c5050812e2882d2e20636bfd300216815a53aa03cd4f69ed7f45aab255a8efae9bfdc10df6b7a246d36d4db075204ef";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"mkpic" = {
+  sha512.run = "7814f14293e10a23bc9348dcaea9af326ab4dd93cc55865320706984e50883742381b5df3e77774e7a63fbba7ebcbe0fae7268a3d1a34ebb2d8a0303f5b53034";
+  sha512.doc = "bfaf4232fc39c13fefd86c21b2f9f76cd93761c58e39c1420c601627e95adf9e6c5c06db73a0afda6621acef374089dd93afbd2a3bd761cf5aa8db29883375e2";
+  hasRunfiles = true;
+  version = "1.02";
+};
+"mla-paper" = {
+  stripPrefix = 0;
+  sha512.run = "01e6bcd07d5dc7ead0ddb4f5d8ad537738bf0b863d2b43f04f0136a33627941b377e53d29808cd284dee3601bc7839c3f0697178ca586578207f9efb60a6f70c";
+  sha512.doc = "1367bb1bc5dd62faa89294141b74c7d2c9f5fd0acbfc37285421f9ff514ab67201de9c6a9070c5aeec396f0923afc8e10c5ec307fe89ad016ac167f33247154e";
+  hasRunfiles = true;
+};
+"mlacls" = {
+  stripPrefix = 0;
+  sha512.run = "14397d8a4afa0cb4aad0749dd4d4e32c6384d8cc40d302504783ddf86756c65abef878fc7bfcffc150fd5b73c701c6d79a8f5a5a085a7bac00645bfa1b997c30";
+  sha512.doc = "fb0c75e2f3a8f9f543af670309ec035e3f539cd642a8d829b88a733c5fc7656b86947c6b56d36dd8b17942f72b4023fd20b21a0415aeacde878b95e6675132dd";
+  sha512.source = "4f087636bef5761a97ed2a4c48f207b92e290683d92975a014670194c0e81d598aa2282e266dae2a329d7a47ec777b06754864ba32bda2eddad77635445d922b";
+  hasRunfiles = true;
+  version = "0.6";
+};
+"mlist" = {
+  stripPrefix = 0;
+  sha512.run = "23466ef3b73d8476c69632fe0c701f3ec675250b534fb4451cb0dcaf93c30a649ca07bb58cfbac89054cc31cc1219daaa1e7f746e6689927573175d42f78bfc0";
+  sha512.doc = "771f51f52e47aceb7da064a0bf8ba4b19f0255fbd14d3b6d301457ad0dea80836f3e4c449611f5574c12e87185ab5ac9668404c5f1f97100971293425c7ecd13";
+  sha512.source = "6112422b62304d0dafb8e4fa43239dd0899327dc952db6d1179af684049b46482a30675b8c44be534213d9b2fd9ff6bab267997bb0b08102e35e1ebdeca9956b";
+  hasRunfiles = true;
+  version = "0.6a";
+};
+"mltex" = {
+  deps."latex" = tl."latex";
+  deps."cm" = tl."cm";
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."babel" = tl."babel";
+  deps."dehyph" = tl."dehyph";
+  deps."latexconfig" = tl."latexconfig";
+  deps."latex-fonts" = tl."latex-fonts";
+  deps."knuth-lib" = tl."knuth-lib";
+  deps."plain" = tl."plain";
+  sha512.run = "61f3712c0422eca9663cba6159a98ee20fc902e8c2afcebe700239958a97f948e8d02af04a5aec779751cd13f9d000128b4d6acb4b6d00f95164775693bd7f37";
+  sha512.doc = "4a4f957ea1d27c25a4a5ca5a3aaaa7be0d65513741112512dcf65c4326c81ee090f371a6f8787629a8a7075344d8f8150da006004945a5075bfaee095e1ecb95";
+  hasRunfiles = true;
+  version = "2.2";
+};
+"mmap" = {
+  stripPrefix = 0;
+  sha512.run = "a2427b9863ef37385507783dba7bdfd65bf022d1c7322e7560b78222c3d4e0ddfccfc70aa927196e64ca1a520e985eea8cb78a4129a39e73a8410bc210b801bb";
+  sha512.doc = "95a71c9a9b9cd46c1723c986ba41c29a7204fada2cd7bdd14ebfe5e0c4e1b06106f9c13469edd9caf0b94615bfbea9cc8a1f56a4f83cec37de481b39d2b4bd91";
+  hasRunfiles = true;
+  version = "1.03";
+};
+"mnotes" = {
+  stripPrefix = 0;
+  sha512.run = "f95e4cbe33ec00e62aab2b3b9cdddaeceb762ccc34b736b8e2c0d658b3e871134d0a0b8805470f8c4e148057c513dad9cbbf6c1d5076843b2b2fdce03c84dd09";
+  sha512.doc = "58c3d8def0ee368f1cb87567aab160b4af10de7137de1901f4c6428531f1d080146ee5cb7f0be73a09216d0aa5580bf4baa8cbcca4c7801a322731f88cadf2ec";
+  sha512.source = "4c0a9077711c44601ab9933cfd46b1ed8c5bb1866fb40ac0707100ed9173bdc67d59f7aab91972e6150ed65e385583dfd9851479c8f0cd651f61a6ab6fe39946";
+  hasRunfiles = true;
+  version = "0.8";
+};
+"mnras" = {
+  stripPrefix = 0;
+  sha512.run = "8c8c49846a2bac72383b0481b0da0cbfeb67bcb0787815d3509e4b55bf5afda5f3aa74f44d03267891b42b609b1a10b1e1577a02e9a3e4c8d9cd5ec57585e9bf";
+  sha512.doc = "e90ce259881ebc34dce52eeef5b6eeefe1659a3e8b4ff5a749604d5f3061d38e1cb749d8dadce757a173c1174fdbc9bb3b272ff1bc344a55ec2dbe946e90cdb2";
+  hasRunfiles = true;
+  version = "3.0";
+};
+"mnsymbol" = {
+  stripPrefix = 0;
+  sha512.run = "68df6dcaca1d2f3b743c62e205a22427152ec6ac1deaa126e7511842ad7817ba4a7a232b72b45c6dae88d930837f46597c5f89e50b1057ba313a590157342ff5";
+  sha512.doc = "bf06a1534665ad50d33073e5d7332337c05f5d5315ba41af399f73f98d54b22a0610c65fa0e96b311925f40bebc1458fd0f0fa9c5fb41330f6d0b9b49aa12aba";
+  sha512.source = "1d622e81bfa0c2e61ab64f058a356e66c98f75a2511728bc49c6cb3d998caf132def2f092db7ff18b4283829e7c118368fb09a39ba2e9c05b0a0be5e4cada210";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"modeles-factures-belges-assocs" = {
+  stripPrefix = 0;
+  sha512.run = "870cd893fbb3bd36d9af8a35487fb47f9afeee75c6093fe3fe9167c4db4f0365499e0fd87b4b3debb0212076d1248902014fa374df3fca79108965bf0c3bb07b";
+  sha512.doc = "f879904a96322990beafd7e444040b11fb9d69e93d73df5e5a159d70fd8e033d9a137e1bb4c54e4bbc4f8e5b04151336bed77aab0b46fcbeb531b346855df920";
+  hasRunfiles = true;
+  version = "1.0.1";
+};
+"moderncv" = {
+  stripPrefix = 0;
+  sha512.run = "0d175791a9d10d0fa9fbe2702d663ff94d06f5486aff2b8563f9dab1f18305be0e29cdd050cc6e8206c07adefd0811a614589f7afd1af4fe37687c7eff229b43";
+  sha512.doc = "3dcad35776d47e27e6013545d28e2f6891eb538775d30966ac89aee8a8d4111d86acb2dc51e546070c818731ef6a7d753a55939e80c2cb5346c5b127e7e63b77";
+  hasRunfiles = true;
+  version = "2.0.0";
+};
+"modernposter" = {
+  stripPrefix = 0;
+  sha512.run = "d631f058a0a17a841d4026c43fd086cbefd50d0ece85563ee81e34440650bdd7d3db6dd6f49d5e74278872961300bbd443b896586f5c7ea00a9ff816ef20b7a9";
+  sha512.doc = "385c8b97c57053d861d72b4f10134cbf2d943e4bcedb55ec42bff51000843db3fe30737f7ada3ce569c1d96584ec0df80afadc39be98c16950828647165f6801";
+  hasRunfiles = true;
+  version = "1.03.1";
+};
+"moderntimeline" = {
+  stripPrefix = 0;
+  sha512.run = "a38ab33c0ad2384699954688bed05d9ece3ba54107c962dd5e76fcb586699887ad5553dd12f801553ffab5e7a459cda9a9178c0d37d6eae3796766fed428058f";
+  sha512.doc = "dd5f43c4287f5a5a23366c3cb982afdbf3385da2c19967e3a77ab42476536d2ba44887fe5fa657f18285448b0d7d3ef99b6f7003328924967529478e174625d7";
+  sha512.source = "4a794bd422b800ad7cfc41c47838798b6e1f3eeb9f7de10c4c6f99d4f2127b8f22e0d31875bd82595e6a99d5995648a70bb006c41dbc70c50379e8d37570222f";
+  hasRunfiles = true;
+  version = "0.10";
+};
+"modiagram" = {
+  stripPrefix = 0;
+  sha512.run = "7a84caae8d6811bed003266283674bf364d18b9d3cb01a440bfca97ee66124b991b4a3dfc9edd07059f02e047892d8cabff81bb0066d449171b669cc872be2fb";
+  sha512.doc = "cf1ffc9c60773c8860cc4c0021e6af82a719aa02d1ae7c56dc332d1e2fb6bfccab85c09473ad8f62a7219703d792cd4bd9db311834a35a186accd4857661ec37";
+  hasRunfiles = true;
+  version = "0.2g";
+};
+"modref" = {
+  stripPrefix = 0;
+  sha512.run = "ef5d822fedbd5026903fb7d2630a837a3a1b0222150ee1a9f72a54e13d626a0387abd1fc20b18a257714c63cb65868ac885f8340d35c5453b42323da3b9b0782";
+  sha512.doc = "f7539376630672b6fc67821045eb8c891b4781d233e1b914f8fc5c255fdcc57ecb6e5ef4d36ae72ceac185e8d2e4aee42741538f27fb3ab1f5160855cfbc8def";
+  sha512.source = "370a7287ed60084ce3d92ef722bb1b1c5f49faf6563a154dc2fa2442a60eb2ab06ea1c82d63e5c887b8aea859f9e647a5d80455f9cc87746d2c9be25f4920b47";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"modroman" = {
+  stripPrefix = 0;
+  sha512.run = "3314a474cdb88e517fd16943b8f1f1da252608bc5505bd91581e87bca19ea317718d36694abc670d471d0028dcb5fe502a3be1b1294604cecf619de235fe63c8";
+  sha512.doc = "5c6ad1cdad66a5a7285b7c51074f724670880d4417df45cae51e5b3b35bf5cf99f374f7abca73c7ae68d12f626e4b9bf0dddd6b2bc94250c4e6146598d4c5ac6";
+  sha512.source = "21e8a2bf6f1d58800452dee77d7a7dc89bd8c952ced6f485b42a2e0b6300df9c823c23f4ab3327d9a367ef8e8d6ba1bae27d3c9bcf875270053c7fa65bcf9f70";
+  hasRunfiles = true;
+  version = "1";
+};
+"modular" = {
+  stripPrefix = 0;
+  sha512.run = "13d80f572497551551151c35ac32c09cec70cd40c6d99d36c22ed84bcef509cbfafd511a8e2e284cd06ab1a57f4be7fe556d7e390f9d30135bd20cd49acf362a";
+  sha512.doc = "7d7201db0a2791700748d440fdc5cca9d8d274ceeacddb3715d99b68b4c04f52949e8b9897377168463059deec86177470a997bfea7a32a2765afda713aed499";
+  hasRunfiles = true;
+};
+"modulus" = {
+  stripPrefix = 0;
+  sha512.run = "e5dde62c2e0730befb63612bfd6ea3626463db85b74291df5937d8f7e1995f6b63c8bc6d7e08536ae761457ab1e9a0ddeccf11afa4108910561075dcc03201f6";
+  sha512.doc = "965d03005ef257526ffa6667d889a4b238ca5314f4fe8714bc8219ace1e909eb5765da6c0dc94e9b312635e0f9ca096f1d14364effb0045ed467da7c1d735474";
+  sha512.source = "0f33d1d241e0155eae39875b0ce72019740771c2e36b337255a0865cabeae78c93e24d7f7eddbe7cba9ce312090b251b26a632c260e097a2619d35b47fb050bb";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"mongolian-babel" = {
+  stripPrefix = 0;
+  sha512.run = "a4e7abdc0b5817d88ad442e693fefe79df224a74f37d09b630fd7ded16e1335f563ca00a26aee8ba4b46b7516c0fa2f5dc9d37ec00455b11223e46a6e289cc01";
+  sha512.doc = "d0aa4f4a7f1b22d3d3a6a96b85d4d72acb71ee6b1374b70008b966ca2401b7b9434bca675601cc1cdf2f013520eb82c2cb193634b3ac9f9b9d40a201d10dbd58";
+  sha512.source = "07e75b2c9bb6c7596d698e0f31d8194ab5cc4e06f5ca472cc706214c342960378376406bdc0eef0940ac0179e989a92af496069ffb25ed75f5b3a0d5fe639517";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"monofill" = {
+  stripPrefix = 0;
+  sha512.run = "6b9a45c32bd44aa01119c7bd8304ba8e5953422c14bfeaacad20f012188f9204c19f432719c74d9481a00611a18d4ef1ba2c1dc858b83b8a25205d40568e5fa3";
+  sha512.doc = "edb00621e74238c09d0ca0c04e5c57589012ef2272f0b470345845ddedd647c73fffc0fcaf4741726214b2419e9581127375ba2b36948ec73f4caef561c3e57c";
+  sha512.source = "fba90d74e9b12086fb4dd431eba4bb3349a83a2b839db1f1a1f7f076e3568cdada03de56570bd38e937eb51a76990ab39778a1832ad233067025ae24877b279d";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"montex" = {
+  stripPrefix = 0;
+  deps."cbfonts" = tl."cbfonts";
+  sha512.run = "9676cef9e0fbe7a0196b1ea0fb3ea4f0399a3ee8ed76ef06e824848a57922dc4f7cc1f50a1fcea47fc265465407653447ab80e80dbac3c4bc00488d0929f87bc";
+  sha512.doc = "1965f31e28a9f54d86a495b4b8cea50dc59f409d066918dedf77f86448b60ea547565dcf2069ee0e0a646d53f34d244868600951c4b1a4d4e099fe50e3c2b477";
+  hasRunfiles = true;
+  version = "IVu.04.092";
+};
+"montserrat" = {
+  stripPrefix = 0;
+  sha512.run = "10f6a7bbf0d3ae2ba7d859d6e180e38c01708439cf27c89f7998aed93eecf85096f368094ddaecef304e00a62bfc76d8106842bcfebdb94b2a5c8ed27c51825a";
+  sha512.doc = "63db767833f42d6340955aa67e0cc48fd0edf9e47ae129cd4fe39caea13f6613142a0042d97e366eef09b935fba2b3c27dd473d2cf7549d235fd6ebf27e4c1e6";
+  hasRunfiles = true;
+  version = "1.01";
+};
+"moodle" = {
+  stripPrefix = 0;
+  sha512.run = "839db4d5082703e0b6d5516b6ec3c18b4fa4b449e732904569e839028bc3f7e27def83c56eb9929f65b0527cec9b180fd743aa3d0df2194aa6372922582173ce";
+  sha512.doc = "9448341e5c33054a39f6990b4f7942f45fbbd884cd5691fa8c0b82fa1b3f9cfc887a02edadcb0df0a7a62c53c9f4b20496db5e6e9ecca4bd6ce8bddf2749a71d";
+  sha512.source = "332251d2357ce64268a1bddf7e77f28f7cf4be10846da84c1512bb39eb804e671f38aea4843af0f1357307869794029c259a52f6ab62d96736fb691436d841c4";
+  hasRunfiles = true;
+  version = "0.5";
+};
+"moreenum" = {
+  stripPrefix = 0;
+  sha512.run = "069ef44faaa8847a07ad00dae31c1b63278d59a560ed90823100cd601850a798f574d8210c07854a8b1a90165efb3bba852e100e53aee496f78395e3d6defade";
+  sha512.doc = "987a1dd96669b9202846fc604fbcfb935b68c79d13bbe4599f32fab9e869ca5b60f3b4bdfcf78d3b3f5102db9ab16955ec13958c4cf3df7ec64649268c226d1c";
+  hasRunfiles = true;
+  version = "1.03";
+};
+"morefloats" = {
+  stripPrefix = 0;
+  sha512.run = "28fd471aa854852cc2a48597dda19cadda3c92c589d0419b8d36e044f9c04e406037f162e1d02c1f4b20a6288efe4a689fe4e03aafbfc6b06cf14019f7e880f0";
+  sha512.doc = "f542aecb6d3868559cee66a7c153dc80cb6aacebae40c0cd0dd120c4230cd358b4d2787286cb3e7bdfb5565949861a35af65ca616369585b8f28462a2b1dbcf6";
+  sha512.source = "7f527c20294826a6d7e1c3ff390ca02f521e9b6824db41d078b4132201d1d7575cb43eebda9e66e8226ba2a641db692ae2d1f1ccac5c4f027851b75100e261db";
+  hasRunfiles = true;
+  version = "1.0h";
+};
+"morehype" = {
+  stripPrefix = 0;
+  sha512.run = "698ec10d9e70dc1b89ed5094369359fdeffb663ca95513b7207aed065515a66dd2c82b4e43d14fe271c9851e72a44e9c2f6e3baa177ed9430f89e88bdd692172";
+  sha512.doc = "2600045257c75dd15320a2f188f5b043358bfdb21ce4a19af2d1a696141a2f553da42c13143d14c8ba136fb1ef7a560684ac47c5274738c747f729a00b02a099";
+  sha512.source = "f710fd59d5c99d7df8b84a365a8f8c110ac7086699f36d1851eb7fdd27ed43212c403c14d9f9105c78402b278d66fa77ca2f50a0253073f55842a60fb19b4c1f";
+  hasRunfiles = true;
+  version = "r0.83";
+};
+"moresize" = {
+  stripPrefix = 0;
+  sha512.run = "92f67234dd9c0429798f9e8001a2d4b7004e11f2fa90130b738670e6228f45ebca3ba26ed98616e3af5c86148992f9915e3e6a1cfeb4c875fbd20fd818743525";
+  sha512.doc = "3c1ed984163e2adbdaa7e94439e160327515f1c6999e40114819d8e5250e090c932909217d37d1d07fcb108c56ec50f294324c32523995f68f57fd918983a412";
+  sha512.source = "701a2ba72c22bed8397350f92023b0b1d1587b837c4fd247dabe5860cc32e58499e8803a0286aa9f9e3831faff8b9ce0e74ac1a0f82d798a2f7f461b015b5809";
+  hasRunfiles = true;
+  version = "1.9";
+};
+"moreverb" = {
+  stripPrefix = 0;
+  sha512.run = "673b7ab5951e418fe10622fb1a4b4a420c4c436684afbb1474c58b7aa7b235f7063555a220133257b351b5847be5e880714e44ca49bd9198a4306c0e821dcdde";
+  sha512.doc = "27e4f361f5d7193c97629debec048168045bc38e353f677829677cb5ce5c0a9ad8f5b2576bd9f870da8dfbf16d745e489ba79e3dfe6aa1da8a9cab1ad72ace06";
+  sha512.source = "55ec67b5b9616459a776b0ca386be19cb6ae57fa2a7bde1f6a1896233f4f303277474d629c884e40bcd8d076522ab4e41fbe8850304dbd33469a1f21750c81ef";
+  hasRunfiles = true;
+  version = "2.3a";
+};
+"morewrites" = {
+  stripPrefix = 0;
+  sha512.run = "fb1f515fa834c422f628464467411a51c8c9a99f353ab297ca0ac0b63d65a7f2e05ec3e6a649fa35260a6bedb91dedda594654e83e94a28baa62764a38d9ca8c";
+  sha512.doc = "9f4bad59ec0f024d24956481d2f70baa56748c9deb000979490c001cd671dd07fc3712eca1917713775d6b879169050786b22a76e2ce1d8d57a99cd76487d167";
+  sha512.source = "21a6606687ac53e218408cc5790c1b93c9db3cef7b1f17fbfe574ee2f1a1c48e5c21a00d7b4f44f6fc1b98bd77af032be97c1cf48571bc439ee20fa6367d3bf1";
+  hasRunfiles = true;
+};
+"morisawa" = {
+  stripPrefix = 0;
+  sha512.run = "7f149fab67905d6b21670becb1c3e3afbc8fb4c45fa3c376960e5a87d7fe17abe091af63930a8385b5bcb63e550fc0b9bb16d522f50f90b911b09599dc5ccafa";
+  sha512.doc = "7af68b3a8233cec22efb49e8131c65e33db4076ed4f254f2d62f629c03d0122e8dddc3ba68d283affb5ca663d3b1f744780dc98c14eadfa1a69028df281e5bb2";
+  sha512.source = "7e3821bc1f5dad076307ebf00cacb68cdeb9e18a060c9c024c0fea85c558f7373f214f16952fa643f8b832376101ec8c8bb839a902e6e8213912a4cbc10862ad";
+  hasRunfiles = true;
+};
+"movie15" = {
+  stripPrefix = 0;
+  sha512.run = "a45726b24f76683c44b0f006d720695c14ef51a260fa00f3223a075e48173638dbc9d9d361fb4e1f8f567cbe80f65d990aae485b669901a50d5b18750640b103";
+  sha512.doc = "4df2fec7f0abac6ef4d948285b3156bb9489a3b7b18939fa109abcd9c537e383d505e308516e1bc852aa5c5bdd6b8825e8f7e887c9787d7c2d337124942cc9e5";
+  hasRunfiles = true;
+};
+"mp3d" = {
+  stripPrefix = 0;
+  sha512.run = "e5899aace25cef3a690150cf09e76bddc008f426800588ef7d21361229b0040dff74af7b43d563b05d8c3d16166e34b5a21e8e25ae3e97ca80e5ffe5c4925392";
+  sha512.doc = "2b64199f50ae5b0e6528bf041ac2422574f9adf467183f3ee3d58ebd91317ce25937699be29d0a5954565a4fd326719f11bc04a35cb4938489696ae479d5d7f5";
+  hasRunfiles = true;
+  version = "1.34";
+};
+"mparhack" = {
+  stripPrefix = 0;
+  sha512.run = "9f050b6ee0aabefe384f4b78678620b8a15a49f0582cf22caf0e5fc2b1b975eb0bfffbfe91165a121aad6d358044f97be410250597fd31b462630aa1e32ae96a";
+  sha512.doc = "0f28a6dce33e14636bf5515bc1395a80f9ced23553698d9db766e023715554fd87df292836c669b8492844c559eefaca4c4598fbee94db425c419dea16e90ca3";
+  sha512.source = "6c90b951bb47450ce9892a84e72c37083438682edb36393895d25d4499f8d5c071c969f830cccc229851a39811fd04593c6b7425a2b0ddcb134b73f7faa2a722";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"mparrows" = {
+  stripPrefix = 0;
+  sha512.run = "58e4a909374486cd2d4313d62a49e4e30a5e85f8ef2cc0d9a7e734b546ad8b36e3bbfb96f3eecaa9c10b8d7b3b1557aa9e0b5dae5b4547d42cabc64d2f2949d3";
+  sha512.doc = "d1ca204228c1bc76d4f15257687a865c650fa83742dd126b3d7cd5e93e725b2da31eedfbca9a86e93eaa08df487b0432cc41f0d4fd2f99951f874691acf47016";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"mpattern" = {
+  stripPrefix = 0;
+  sha512.run = "1efc3f1f1c93456a3038ae5037ad5dcc4b177c57852f7db475a7ce6d2002559b370ba22dcc6d312c68ba75c03523cdf0df8546fff8dab032832d3ff3148b5d65";
+  sha512.doc = "4ec7cadd89449ca049fdd723de9e29f20199a630fc28585a4802e3ce3666783822e4f0769907cafbfb0fe097b1da4a08d3e5e5f4038ecebbe9fe3543dd3413d6";
+  hasRunfiles = true;
+};
+"mpcolornames" = {
+  stripPrefix = 0;
+  sha512.run = "9808706010059e8d2683f88a47535b8039049681e5a9fdc013cc384bcacb1910cc7ab2f7614d35ed964c28507bf5fc062fe4db852afa45f9d9383c367838eeba";
+  sha512.doc = "bfb9ce4c85de655b890948897deba96a5ff60cb7518b3e198cd0b088b63670531f29bd84dbde4837298a24f36dac0652f2d2d3491dbcd7ac8f9e57de6500c6dd";
+  sha512.source = "ec29085382f6464b10323680488140b483aa09c9df050806a154fce60bf92feb7d4e04de444d0fb4b1623c6ea3506ba619bf0fb2477f048fd4c5f2f0be9f272c";
+  hasRunfiles = true;
+  version = "0.20";
+};
+"mpgraphics" = {
+  stripPrefix = 0;
+  sha512.run = "5d711f7a981f701e11874916fe8d22fa237404dc119fc2d5c8f8e9b3eaf8feb59a63023ec30f0c67d304839e4971288a669d70a697260af35e401edf00673adb";
+  sha512.doc = "954c8e3a8a0deafea163c9bea9da6bd1c27fcc9b5270408fdd29f0051ece1f4138a0af99808cf85279823cb48475b8e21b3a450f021d678fc5b2fbdf28e55320";
+  sha512.source = "30e7324760efabffddf6920362ba213eb05fce2658d9a442677a2f8f322695d5a361b1d183c4f775b289ac116d586e2466be46d4ea1798cde251132b95a98bdd";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"mpman-ru" = {
+  stripPrefix = 0;
+  sha512.run = "e234fc25e9d8e5aa89a59e21186a16de3c695ce45c9ee8d132546381cb18e9be681bd4ee9c70bb10b4769ada5e5874b500d2a3cd7d264d89610dcda35fcba9a1";
+  sha512.doc = "57f2449eaed3651b808095348f056fdfa90b00979ba2e21fad120efe096dca9a9e48474e9dbb539f347ffe20ccd5582f4815ff4552c54e9ea5f9df391dd75edb";
+  version = "1.004";
+};
+"mpostinl" = {
+  stripPrefix = 0;
+  sha512.run = "0749fdf4c54efe9b8c9ed9f735a851a0c0b08a9092679bbb80eb32a80ed6e7284094a043e27721dacf8112b6898a8c5f47bf0b0dea4af9082a40bead0599ee76";
+  sha512.doc = "ad639ec50e5b71a1ef02bcc04cb1c0b195e9ed2cdef9ff8e145d17cfb34dd853d96449620f5d0eba614154cdf6291902316f4fdfbd179a112cebbe2a059acc70";
+  sha512.source = "44ff22f1fb0496422dd760b786174e520643ae9c2b8d3b922a08f9e065708fb4c292169e58cd328381c29672d0526c13506429c55eb57100e96f876324e6fbb6";
+  hasRunfiles = true;
+  version = "1.5";
+};
+"mptopdf" = {
+  deps."plain" = tl."plain";
+  sha512.run = "3960623583dec782191299a72261e41d85a636d6d630cbde0b0c85c5ff84263699e31bc4ebef674dd516cdbf9089988b5ccb8afa8fe5bf9134cec927d8078c22";
+  sha512.doc = "a80bf1cb2fd0f7197162d0b3cdd2e7dcc084f3745e92273df8e45a989e42bbcd5522b9cf5aeaaba597c29b285181e48e08767b63ae484193c67d42b47479c6a6";
+  hasRunfiles = true;
+};
+"mptrees" = {
+  stripPrefix = 0;
+  sha512.run = "c495bed58639226b0552dff1d2e7c5e97a60ad4fb20cef65cfd873feaeffef4e0b7672a33d310576c042a94d6d27141056e8a56c0bd5d648841b860a3c1919de";
+  sha512.doc = "38935dd6694e4c731e6ea8e8a1575ac5985a24ad5d1e05d5766168d3b6f82be6e3bde8c57601565be67ebd0d1232191779f973adf5bcb7851154aab3bd6472a6";
+  hasRunfiles = true;
+  version = "17.06";
+};
+"ms" = {
+  stripPrefix = 0;
+  sha512.run = "883832298e0135980808249f5af0b28e3dad7941f401e3ac031cd558b9c6b895bde1f5dc459de9f4c5f6ae41d6a6aac08137be09f9a91b26761399868ac7457a";
+  sha512.doc = "adc189823e89d6cd90369497dc4468b72a36af808eb2c8d6738b3a00082335f139ecc54ad6b601a027b6961890b5bb6975e46d1de26a1e0ac7dfc9e8766fa6f1";
+  sha512.source = "41bdc589f6553ca981a7f0e7340f4e1163396a12acb1b7210fb5e9efc83924961d0e04f8ae1aa10b0db3266f63d4cdfa4f52d59f7624c321dfe0bda53ec6776e";
+  hasRunfiles = true;
+};
+"msc" = {
+  stripPrefix = 0;
+  sha512.run = "cfd66ed08d144698d11905ddf987f44782752e412d5ecb0a85fc27e569cedd4918ac05f19d986e0fa6e17065bf871e805094251eebd5d27653047d436541600d";
+  sha512.doc = "9485a70d19aa2754ae4e12e4311d4a03367c57a7bbba69cfc50a38aa50d6d9160aeb812c4a63b23f7da0e726b07cf836ac9df7b66b4c847b9cad0e7d66aff23b";
+  hasRunfiles = true;
+  version = "1.16";
+};
+"msg" = {
+  stripPrefix = 0;
+  sha512.run = "9419f306ccde237320abe22fe192a2473785244fd337063332a242e029b8650404df7f7d150b196d3bccb0e10e58e25e2b8aefb15627e89eda8636ddc50599e1";
+  sha512.doc = "85db0022daca5aeeb50e2eded6214a3b144012bfd0bd433b4f9474307c2a37e57c7a311385b8de4efcdc4e462f39c53f6a5fcfac2eae7263e2d1583b0ba584df";
+  sha512.source = "988d410412b2e7b3617678d0cdb2e8059f7261d48b942eff588c472ccb29e022a3e10ae2302268789331c20705ce062f0930ef53bb785245923ba199ed71b15f";
+  hasRunfiles = true;
+  version = "0.51";
+};
+"mslapa" = {
+  stripPrefix = 0;
+  sha512.run = "76910e823a3d1114a2f7497c49d7a9edeabdfc3642309604654f244b060c4ef456aa170f677dfaa719d36416eaa41b68ab28c5cbf869f611a33155250bb44423";
+  sha512.doc = "af01997554d68c0c779950e3be4c92fe7ab0616eb2c5ab55c5131f17ef22eb6e7066c4190607b77c9cc44aa50c15a472ea27733add54fe82b7801c7724f1663c";
+  hasRunfiles = true;
+};
+"msu-thesis" = {
+  stripPrefix = 0;
+  sha512.run = "e05cdf909d11616692cb175b117a134f1eeae10cd9c62058847cca383b86eb99de675f4e534c3b9d378dbebef10312b773f111de46becf8e4f3c840faaf5555c";
+  sha512.doc = "1b3c8266ff9dbd2c757365d30772057433e1ddcb04c83a9f98e55c9c4707a380e5d289496887da9adb922f96e7f4c64b9d3828e2a758aa38fba31e59c39c7d1c";
+  hasRunfiles = true;
+  version = "2.8";
+};
+"mtgreek" = {
+  stripPrefix = 0;
+  sha512.run = "fbc20f61e1d4e9d3ebf4a92216c7c007f2aec2b2cac0aca6e08f0e1ea5f6f405a32d947efcea0057a025a138afc85e0d1486191ee82fa9a0e9f2f6e2542a9e11";
+  sha512.doc = "49631058e9bfc59dd38a7e0e2134f6d9ddf68779a6f8087a056a89fef975154510496415b782102dfeae6b5563527fb6178ce301b004fe33a4dfa8dbeb4474ac";
+  sha512.source = "d69c6248a4d8fbb9a64cd539e7f66db5373f9551d27c98b755377594f9b1680a323719599f5963972d169399a0686b5e6f500148cc54881d23d8adb3b91bf4f9";
+  hasRunfiles = true;
+  version = "1.1+";
+};
+"mucproc" = {
+  stripPrefix = 0;
+  sha512.run = "02ee23aa25152e80e8dc2c57f14b99c70ff57c38175498c179e505a76d967f826acf076cae2085d305cde93964f03134fc6d1027e0669acdbaba5ed5ff6efa8e";
+  sha512.doc = "01d154fab3c0ad8db790b5a22fcc4cae7a5beea1a2850f5e9d6fb1fcdc6c1071c2dc294568451f40db5455826f78ae910be9572de5a4a7d870e3a18a74fc0082";
+  sha512.source = "f1ce5b80ed1c79cdb5939fda97b18bd263b313496a98cd7940e990ff719dff9e633d636505c0d538f37ff26a81c33d6f625f51a479e5ed6f949f7b3ebd845917";
+  hasRunfiles = true;
+  version = "1.02";
+};
+"mugsthesis" = {
+  stripPrefix = 0;
+  sha512.run = "26a40992f66bead658130b6a649e7da550c85a92dbf9bf5778d4987e06f3a5f7d168eeb77dab3e81c5f328d252be345265c2326760d861fff35fb4ffd1e3a4b0";
+  sha512.doc = "2f9d069468c3ea0b420465200abafade7ec7c52cb22bee74865da5fb06064eeae47709a1ff60868bfbf675a4397d828e02581defd338ef3e79e179c0ae7cf7ef";
+  sha512.source = "bbbd79aef8db604e5349cfcac7fceed96d8b2570cbdb455b36f96d99e52660562b6d84bdb5a9e1a4c9ff32c9199867f491e91f96758635ca800ad5b69039b120";
+  hasRunfiles = true;
+};
+"multenum" = {
+  stripPrefix = 0;
+  sha512.run = "e73e2d3fe45f562398de752520628032fea310e5345a247472a2807618b72467b245995f32f21474dcb5702106bf32d6394508a96c4aeae4dbeaf6fdda7bdf4e";
+  sha512.doc = "889ffbce149b1f0a98e22a1ebcafc60e29858d08b57e2e567956830c679515759a6c8209901641e3d77ded31238e8fe93f7e4cdff95d1be925e3972c9005f4a7";
+  hasRunfiles = true;
+};
+"multiaudience" = {
+  stripPrefix = 0;
+  sha512.run = "58610f5b5138f7713fcd3e21fac721d0cc0a796e928bd5bd89e5981e08a0d4d6888f6f4f2dc2c6b9afecfbf0366462109be7a497ff6017e3b76ba83b361fe2f1";
+  sha512.doc = "5db8176fc1c40091db428b73bbb8bb3eb2e7b14b8c8a681e7d5dcf04d990873fbe456d389e468456650faae3939e38d1217057485d60750cb29aef89e8e15b69";
+  sha512.source = "acb69d29f8f12a205b4560700330d0a94593595056784275a79531351c674ecb560cb453956a5eb088f09a666ba4c72a2bc64a79b954d13263559093d06d33a7";
+  hasRunfiles = true;
+  version = "1.03";
+};
+"multibbl" = {
+  stripPrefix = 0;
+  sha512.run = "419f7bcf8f2226cf8c60119e30da278bf6138f4e1903dc322da33ca2b22120e50b205dc0bb01b46cab0c93fdaacc37b823a812121a731fdea4cf03354d1b0690";
+  sha512.doc = "68a3f99cbde27d15fa8b56730f4e9f7587bcecfc9a6ebe19a7811a29278cbe21f214465942bd4ee6cc28833b9614dfef14714dceddcdb041d5676ee7ead810bb";
+  sha512.source = "be2bb39e0267d6a008dd3dab1d1fbfc22e38017656f6fd717e35d3252def115d451a1eddadc6fbb3787bee901b43b09327ebb0f676ee452db71196cd2299778c";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"multibib" = {
+  stripPrefix = 0;
+  sha512.run = "82cd48cf9097b36664d4dcfb5d73dbd6e961c2f0a8bf7816d1bc59a33cb6d2c65e0f63a9d1d596dc9faa4339536746089e34bd1b510e1b2c0ea272df5840e396";
+  sha512.doc = "1d4536094c09755fc91b2657cc0eb0b0b2fd8d1c5ca37bf2f046b62a4b0be6f83a93debac8be3c5481651dc75cac2066962556370bd84face6b03aaba24bbcc6";
+  sha512.source = "c7777e3c32833538893ae463d8396f894b390f642fa697b8ba237cd7183e2bc7cb86a9773530962f41372e4ec016eb96c7a060dc63081b2faf29248a65f14a1f";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"multibibliography" = {
+  sha512.run = "faa2e16b8bdb9309e2f16cdb2c717b59c8ecd5d73e4819d72ee3226a80fe0c0ff6b4d686d0f1d009601e0d6dea140cd4812c2f4cb94f37b5bd9cc1bd19137965";
+  sha512.doc = "3e13c8c60ab8091a363b63a63259e53e3c5076feb224a6f426e55a351141f007ea8bf7526b0f80684c83e4e97b43f5f05217e254f978e8b69665c736efbe8512";
+  sha512.source = "544b3778bd0a51e99e89e18e606d37551576d655a01b46523786d6f910cf84b3886a8b29c72b9e0c25b3ae629045470b24e2741d7894f867437ca069cd692cb4";
+  hasRunfiles = true;
+  version = "1.03";
+};
+"multicap" = {
+  stripPrefix = 0;
+  sha512.run = "5e4a4eebd7560d4aebdaf7035b9bc14116a32cb2e043aa93afb9f95eaf271fdd75fe7d2b6296d36327d7aa5b14b52046b0c941ae949584ad27a2b89ebe54b6de";
+  sha512.doc = "644f46fa6431f0f7bbbdfed8a346887d107c8ff7c8d5b2c826b16994faa48d83ca59cd139c16fa144122e0425e6a2c592762b86568f17fb914dd943cdb7eb808";
+  sha512.source = "95df0571a8741db7d0b4d3ab0fd0d1469c531a00e3cf524977fe2cec57c3cb9ce9cf3c3136b42a8d0fb8f9dea2e8f4cc6f07fa48490167094e04c0e688d45527";
+  hasRunfiles = true;
+};
+"multicolrule" = {
+  stripPrefix = 0;
+  sha512.run = "591a7aeb5a918fcfb847cbd7f91cf389b6131472e62dea411b04e9ecd0c4eb1e203a31bacc69721f444c6eabdd44462e84cd263629ed4d6566840da2921c843d";
+  sha512.doc = "ade3f0e13f39a4173d6402ee2521232ff42ebfd8ca55d491f27c1dd35caeb06d92d7f53c1f897d71752a9013f1383eb9cd6b6f250c9ca535a31c21f751db4abc";
+  sha512.source = "e1b2fc58fbb95f6d12b20f02a503a62cf49f4fe1c888dd7185cb7bbf1f5a7644af1f14a380a44e25ef33d87387e152eceba602897b60f8b0d79112cfea4b2492";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"multidef" = {
+  stripPrefix = 0;
+  sha512.run = "2d15975c8a191cc08925cc8cd74b982af909a7488a68e4b6f5eb4c2ba0dc94dbcb40c4347c5c4774fda24f98efff52131f6a243e1e6bdcb4dde7e683e408d6a9";
+  sha512.doc = "50b26f8fcfde20dd04f3e3701d611631c8914e9488a3f87d25e0c60803090133f9abe889b449c67a09ccd5053c67c4a3ea699d52d44480051391edaaa7ff9ef7";
+  sha512.source = "4f506eef5dc2bbb8c740d3b25c00e21a56ccb02410adc85788f2cf2ec7da81531ec5843d0a29931ab1aea0b4e8280eeb235b6a97505fb777068d902199cfd084";
+  hasRunfiles = true;
+  version = "1.10";
+};
+"multido" = {
+  stripPrefix = 0;
+  sha512.run = "5c861bddcb8b2bdb654dc4438621834a68b2bca102799317c9a220f9bc9bc4c9d70775375302a85736f8706bb7fbfc1a4c24fae2f850237e8f54ad521b1cef83";
+  sha512.doc = "8cef36438fbe57c54f625b178331f7a6ca19854abcddb475283fc0cb4a362764c443de05989245e962dba9e2e4f17734533502fbd4b2ef4fc8e8c36b96bc68ab";
+  sha512.source = "3f3f6f5813ab1da542ebc9c4837da72339804866875bf225292d8a36ebf54b33f12d3e84de9d0b5027d3e8889e10180649a19e25c7ec6bb532296e9e204e25e5";
+  hasRunfiles = true;
+  version = "1.42";
+};
+"multienv" = {
+  stripPrefix = 0;
+  sha512.run = "b387532d90db9f46cb18518b27eb8853dd52366434c69693fd08d36942564c43a45605694a55783fe244690f4cb64b94f3082235e465336cb7536543b00b6f20";
+  sha512.doc = "1ad0cbfb0c6029b77f2dfd71100ac43cf3c7512df88837c6da5c26fa9a520f4dacd970e331083a56ddf3d9cd19fd9934e863e4bea9e62c7a0b1cdd1ac6eb2a15";
+  sha512.source = "5d22dae7cf44eef6e63cbda2e9421903f56a939c0393d3b91e9d009b29cf0b748215b455dd9143cd7e13b2ad81c08d7dbe447268d7d01ba495bbb307cfc8999d";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"multiexpand" = {
+  stripPrefix = 0;
+  sha512.run = "63f512ca5b9649c86a6936cc2407737e41afd6c6a3b4810fe81155a5b4127aecc538303e26b91f53decee900fba7946e90a46a545b3c9caafb3e0863940e0009";
+  sha512.doc = "6b8a727aae2d314877df551ca5804e84be0bc530b4f09d8bfe6a9c1a4c1eb98647257beeb1813a183f0aa5422b0041443e817ce11b6db70e4129e3edc664e788";
+  sha512.source = "197ad74e02212405fee0c79ea03021172e7ac5a99222e0c0d300da6a141bc694a2957c544bd357fb67fcac24acbbb4059041bd37f607b29f5f763b59b70613f9";
+  hasRunfiles = true;
+  version = "1.5";
+};
+"multilang" = {
+  stripPrefix = 0;
+  sha512.run = "57f9829b100068a84feb8a09a94066b93ec5fe70daf831ea99604089a4fc2f67af76f79505a2eab6dbc8f2b025feed6d908a1f24630e27e0f7606c4a3ebb71ca";
+  sha512.doc = "e611f2195fc4f7083d6343eb3554a2e786fd6522383456544e45346481cd57d54b0899cdc6ffd9edc4b75567b1e092ecc597bff660d849e0ce2b3e2d1bd55507";
+  sha512.source = "1e52e9c740d0eae4f89eb4a65e1d12b3d5f159cd6c938f729bdd019ccb8bcf98300a544fa7131fe214cde9b7b58f9b64a771a49513f45943c681893fbfc78b6e";
+  hasRunfiles = true;
+  version = "0.9b";
+};
+"multiobjective" = {
+  stripPrefix = 0;
+  sha512.run = "80b0f340f19dff329cd9f0fc32cbb9a8cf690243aa925d6687b9da345984f9eba9c0db7b62fedd2a54f077d841b9cbe91e47c98140f1cfeebdb16fc05408898d";
+  sha512.doc = "3a7c68054a85bbad36b6516c52ea74c35ce11c5ffd6f3d1f235ecc2ea55209343a4ff609857877094fb7f8861e8b7c54c8c979d06cc3b3583fb64e997372ae9c";
+  sha512.source = "99b9d17438d9f3f8a6ac40d0e705371d255af957fa5dc78dd6d98c89b515cb5af7377b5ac11558c84c7908b7efc7faadc9be83b86c2a255ba8c4033a69be3f4c";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"multirow" = {
+  stripPrefix = 0;
+  sha512.run = "61a072b45e6caac673ae4e5df536f12ba0bcefb3457099a0a03c73f5177bf94b1f0da056f622d3963e07dd82fc1f18eaf892f2205ad34e221963a07a9458cccb";
+  sha512.doc = "ae7b86866d6271f99bbda77e1df62276383b3759f59c30c86eaee3a5e14e0633dee081bcbb39fc9e52a5f4afe43ab0357aaeb11d81560a7c1c671d8773de742f";
+  sha512.source = "fa10c678e843835d7d6ca2081ecbaf3a5347eee25da109e0db85be9422c2d0e8d2844e7e66784761f0877ed52f860bf1242aa05ab3015e6698891f3629fdc377";
+  hasRunfiles = true;
+  version = "2.5";
+};
+"munich" = {
+  stripPrefix = 0;
+  sha512.run = "d8d2de2245f24c6993fcd178e2a21891e66b5b99039e8969639d2a9cba15abc6c3c50374db61c8082695a969a69ddce902ff8b5fb8104fe66ba1384ef99b93f2";
+  sha512.doc = "ed2dc99df090a012f1b1b922659eebe4c2d8523127e17341b9c4b66413acfc89f8b64ed639c8fd40ace0f4fddc8662f42630411c67026311a26fed436a363b78";
+  hasRunfiles = true;
+};
+"musicography" = {
+  stripPrefix = 0;
+  sha512.run = "6c1bab036f58b9f1ab39a29e4c2344361e772e44992da5c9b345d3d2b97e4b5b5a5f237494f228bd1ef812f1ac5d5e00432133c64d8a71cfeed9e526360f2310";
+  sha512.doc = "a9497d4dab85061ef8fb5698bfb7e3a1356d141a4c1736359f124842e09d87871ceb3035e6683c2f2dcccc39accceed4fd2b76a6cd2850958e3cd3740f04affc";
+  hasRunfiles = true;
+};
+"musikui" = {
+  stripPrefix = 0;
+  sha512.run = "602132bc51f1ed20f045bf0c822f201f7bbf3386f9181599894e66cb3c59f4ed15364013a5e30bfc59b22ab3fe4931872b779d1e7f34b8dbcd1eabe058b1f5e3";
+  sha512.doc = "29cc8526543698f218e8c9c20b424fb2b05d3ee0a67c70a2afadd33dc49f0030ceb440b349898b8bd66a53a5682aa8289d081e4502fa5ccdfe481b4e2430de03";
+  hasRunfiles = true;
+  version = "1";
+};
+"musixguit" = {
+  stripPrefix = 0;
+  sha512.run = "6262e1b447f517680ddfd9e5e076ea384dfa7fc8d219e7a2613a80ba66a0f0435d9dc31502f6abbfc150fa1e2de001afbdec25dd5778e3ffe559ea389d57208a";
+  sha512.doc = "8a6c9a42383d6b35c1300b958a7629306a6883bec1bd68751165eb3514f8f069c9995247142bad459e06fa42378a9ddd23093cb749bb2ccd58743312f83425dd";
+  hasRunfiles = true;
+  version = "1.2.2";
+};
+"musixtex" = {
+  sha512.run = "2793fe7e110e97df26dc0a681b24cd738eadbc6bf322b438141b66718b561af3d1c7cb029e465827151be5242d620a3182aa304467f3e8e7c58f457310881c0f";
+  sha512.doc = "29e7bbfda630825726d716ec45e4112b7d35e180a5d9294a5d1f7a1c8a8c544a8f9020021d17a1db74068ec23ed0c744593f74426fe465182d139d3e9e70e829";
+  sha512.source = "62a04ce4d437ada5b2a267b648844cc6702194979530f985bd7fb96b2242d9e92d9fd6367917352aa7f9a699f520569acd2fbfc4d6d56f2f33e9f6173f311909";
+  hasRunfiles = true;
+  version = "1.29";
+};
+"musixtex-fonts" = {
+  stripPrefix = 0;
+  sha512.run = "9cb72eba919842dcd8f892562a9f6f2c4638a46b4152509ffce1666e3e4243a2686b4feff3d9d68ac3c70c755606cda7b8659ceb1d8347b49bdfc4c0c7f35eda";
+  sha512.doc = "6fbc429483bbb7e1382d72622168d692dc5686ee21b9172ddd3a14df04397cdb9a3b45bae57b2ba2851aff401a5819d81894354e2e942d41812ebede75c45164";
+  hasRunfiles = true;
+};
+"musixtnt" = {
+  deps."musixtex" = tl."musixtex";
+  sha512.run = "eab6332d626f199e46dcd03ea546abbc4446b41c4b0354c066790ebfde154c6fa90f861dcff77206318b58a31565d884576899629520e78b3285bac673d1f4bf";
+  sha512.doc = "2da473ad2425064747187da005e01d6844731c536b75095828a85d358ffb1344331ef483c0cebe79b346b4fa96a358a1e416cce7d7cfcce6b1242cf3c0a3645e";
+  hasRunfiles = true;
+};
+"musuos" = {
+  stripPrefix = 0;
+  sha512.run = "3ad7bc18f20b0df70f6c92f7816d4e5bc90070a392788d93caffaba39f25e516a1ca4a6ef5438dbe55b514822d2882e7dfb809eaa4fb1380475fd624ec3efb9f";
+  sha512.doc = "a2bc27d789cbd6833961d41ee6d697004fa7539810aafa8749af918572dbd20e2f267bb7435c068fd604540d0a75d1a558fea38a8cc7748c9dcf087c17469a61";
+  sha512.source = "55cbd375a48388b310c52e26b02b6dcd56f7d50761addaf275de656a2668bbb0c436c742649cfa07355e626c3ee01572960fc0177ce4226f764db2b5c3e04598";
+  hasRunfiles = true;
+  version = "1.1d";
+};
+"muthesis" = {
+  stripPrefix = 0;
+  sha512.run = "66345512d1713dcd352feeb46d8ad9c609d4c9364a37b47b5fc0207800f6576831e15d7be59ce13f560ebedaeac9a595f2bd7045b621fbdc8e20a3b3c553524d";
+  sha512.doc = "5ed08b459ffdc954f5857be1a1970e9a23d2cfc23cbb04e820b82368b1febb9bf04811e53ce6fd05cc12da302d182179d29b278fb99157e801afd05db15cbaa1";
+  hasRunfiles = true;
+};
+"mversion" = {
+  stripPrefix = 0;
+  sha512.run = "3031b6aa9408bfb0994ff23c36f6b3f770aa8beac0e94bfe1361dc2ec6ac47859a996ddea9f5283833e5711d0308ebfe5aae91bc0ab564c6e83056d7394f14f5";
+  sha512.doc = "bf7639f024b214c2b8b73cbe4f87848f390d106f46afff6f6a1257d80b37a6b7b02d8d9224580d945b93b3f86a43495d00c5c07d22e8428703036dc43273ad41";
+  sha512.source = "22ea633c451f88302061c2d3427ed52e561bf31bde30456e632f3abbca918a329c40e239ecf0a2f2b219a23da063101ebc9a23ea5fa355e479ee28a9404d50b7";
+  hasRunfiles = true;
+  version = "1.0.1";
+};
+"mwcls" = {
+  stripPrefix = 0;
+  sha512.run = "045fbe4985684ff7bad3a7c493fa0b37e412e698ee5eaf31b4ccdf3e185433d185faeb78bbbae7e11b84354e4dcbc24c8f2cf549a64b81ed0b6adfceb4bc8d8a";
+  sha512.doc = "17b548e9db8a842c16367cd27b3f5639fdaf418f1967155a72c90e3e91d47a121c87dcf2bf0c6eb9042005d54e04ee40b367e0d81c7e2ff57de04da617f8b1b2";
+  sha512.source = "aff2829633113538493a5634fa11d11a65d643e65afe74255ab31141ddd5fb39f6da59764507af10314b1d458c5c75b1f970b808b1e90c53d211cb4bc11f3b55";
+  hasRunfiles = true;
+  version = "0.75";
+};
+"mwe" = {
+  stripPrefix = 0;
+  sha512.run = "fab45c12e55ddd3b748ac6a07041c64efd1b344cd8375d870ab3ddda155d9c43adb1fbed21c82237732c8d15ad68201ade3eeb54714e4737a79ee3fe22db48bd";
+  sha512.doc = "361130c8fd556a564975ed94286645e1b2ebb399a4895b59244bbe941cbac20d0e4271cd74cd122595faad4f2ff1db24ad522c04bbded59df2ccfdbbfdb19c7e";
+  sha512.source = "3511bbe2629f5a69023836495e768ba9fb218d23f05f2587c39298c007017b272bece226dcfdd9f9b6625891d6d4be5622c4dff35ed413c797adbe1db1c60c00";
+  hasRunfiles = true;
+  version = "0.5";
+};
+"mweights" = {
+  stripPrefix = 0;
+  sha512.run = "944c84225a923fb3a1b72f8f44872fbf9f1207194924c9fba8c9c45a2de304748f9630a6267868eaabb5feba4b268a702568ed81cea6cc587319a1cecb94de0d";
+  sha512.doc = "613f3a22759878a34e659a9606b289cd9969280a3de4e8a7614d277aee66aeefb44776f555efd0d2e11d61f70342f747301002bf9b84b888f01216c439cb5a5f";
+  hasRunfiles = true;
+};
+"mxedruli" = {
+  stripPrefix = 0;
+  sha512.run = "f721b48b71ae2eb74104e23989cae84d3316b322ebff4703d9bddf74e0ddacf742e279813977bf29883fd17f01049112169d02aa3e4a9be887c049f8484ca0fe";
+  sha512.doc = "ea9de17ac138af2fdfbd624e0c516faa2eca674ae1c423cc7f972f87c1bfbd37812e199f68b463c07213fa263636490b7207baf68506514f73fdef1d6c041a49";
+  hasRunfiles = true;
+  version = "3.3c";
+};
+"mychemistry" = {
+  stripPrefix = 0;
+  sha512.run = "bf8fbe30dd3d1637db289bb92f6339545f4d52b3876e5a81e5153b4ac72be0b54af48f46fa7d1dbd5a129bc83223c53163a760e6cec0bc61101496b25b677f68";
+  sha512.doc = "7f9a9d6c6e0f66805dc37120a4c76787e60452067d9f379cadaf4993a76d7363553699eba7af1b9e507bab4e68e66791a5c93d940e6079521de5d1b7a83e5a58";
+  hasRunfiles = true;
+  version = "1.99b";
+};
+"mycv" = {
+  stripPrefix = 0;
+  sha512.run = "72e74c30c994441aac708e719e894d01bc3d1a6570863a589dbacae8e3c69f70d192abf7473b58a026b2859f7f10dfd1e56827cc759898248e3cfc9d36f37583";
+  sha512.doc = "892d0c10fb8a2dd9a65bb6fa4dd48fc3ea49803a7e633cd390427bfbcc8f16f6d213f9ef511c7202521b518db4c94bfdad5197c30b2c8786bbbb6c6f188293a7";
+  sha512.source = "56901df8931579aae3cc8f51e7c6c6542cca3b1b231512e6cc27b88104c39dea50026f0cf21b2b4251f4e1ddfe4119de7ddbde6f50bde743296bb84195fb5f05";
+  hasRunfiles = true;
+  version = "1.5.6";
+};
+"mylatexformat" = {
+  stripPrefix = 0;
+  sha512.run = "476e2c739c9a99a53a9f6bb7eb32e6122c149fe224497cd8e777af0ebd139ffadfa792090d8673ff96b4e17466e918f9af4ecb7a12c608d4c33d4e17f2b26f0a";
+  sha512.doc = "c0754ef147a457e7c91b16a50dab2220fbf2f5385e126e796b1c65025f0fd998371b4e58d96ae72b8c6eb21b2030906729270c88c0914b1748714455e78d1bbb";
+  sha512.source = "4f172517cd3e0bec77bc9003201a4488acfedcbddbca217ecac4878d3df9ab86719c5d9fc645671bbf3a5d5b66a1c4e80f9acc01ef27c82a3eaf13aeed45f857";
+  hasRunfiles = true;
+  version = "3.4";
+};
+"mynsfc" = {
+  stripPrefix = 0;
+  sha512.run = "fbf6a66d9e4f7863b380f6cea43c58bcfb54e458d56fe2867b3e1354cb2489d4a0576e6c392e4825023db33465176161e226d954bc12080722317e92edfb3d0b";
+  sha512.doc = "11b2d4647cac4aa2280aeac24abca47b9d92680845eba5a99fdf05fbcd4590760927495ef87b04900084ec64652a8b2e28263d4d1a26765cd3e027393f2d7417";
+  sha512.source = "4ca3be26449fb263e32a0302f5b85194e29b1c4e55012881a60f84a81a3498d82447934e60df522aa1b3e20ffc746bc78cba535e7208f88ddc46aa9831ffaf81";
+  hasRunfiles = true;
+  version = "1.01";
+};
+"na-box" = {
+  stripPrefix = 0;
+  sha512.run = "8b0659454d8324ca51c9e97f7957a3c14230dca0b4b8e047b961bad1b81d2a8b0220cf275bf84e9aae6a3d601fe93df3de94f603a198f6bea716064ae8675d0f";
+  sha512.doc = "2c78a71155eab3cfdf551830051dd360f6e9fc8085ebe364c13a79a1ebda0693d633e7ba08e31c356e46140c33bf3b190365cb88d944d2b3e8c0799ff68cdc8f";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"na-position" = {
+  stripPrefix = 0;
+  sha512.run = "1f5d742e5fcfce8495f2c772ae166775151b555b1e4922615e5f62ce161a167969c8d6043d542018debc69ef75f472995f498ef9f3b1f094b97d5b986285b1be";
+  sha512.doc = "569a4c0a03c224195752a072581e4c8a2ec428fc4644ba66c43c94e322ac495137f52b3b1cd5cf40741c83937ce056e610a2fb4f4b02f3f8a73d43fcb3fdb4d9";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"nag" = {
+  stripPrefix = 0;
+  sha512.run = "a2d239ed1e12fd1b082c8df5531c9b83cf55c39b13781aa01848f3fd06136a9522598abf9e63580a93fb12ad7c392061b14d5e96b4d4f4dcf8180180280224a0";
+  sha512.doc = "9a4859b67182b40428f720e2e955b591fd3fdf30acbe7c3214548766312833b3ebd5a046d1ca2e2b824e3bad95bde635a1cd112e8023395333cdcdb9cdf55ba9";
+  sha512.source = "969b7e463e6e8eca51af114ba51d538d0a1f7b9ed3cb5dfecab92ec7eb913a872b740b2f434e854a7c11b31c7b3364120379a5732220833235912e73ee202878";
+  hasRunfiles = true;
+  version = "0.7";
+};
+"nameauth" = {
+  stripPrefix = 0;
+  sha512.run = "e393937e84856a21433266f18f78d739036df951f68d21ff17c607206abcf6b77f32253be2e7a771f10f1f789df47fe6bd45f629417eff94b91ff9b4f7179f74";
+  sha512.doc = "b586f85eb88204670384a0c7559219704f92c9f03922f98ca01ae2a8206ba3afbd920f94374f3c62ea3923129708a2edd74bc9b79be0d09ed1c29491811cc2d1";
+  sha512.source = "781de5fa5d74cf295718a0225e5faa87c3f65aa7f42def1610eb43ea86371ee3dff406f7b7fb7ff5a1dcfba84671847ac975bd55b14ec15875712405d912bd9f";
+  hasRunfiles = true;
+  version = "3.2";
+};
+"namespc" = {
+  stripPrefix = 0;
+  sha512.run = "71ec09a2aee5f299e9620b9b90558bca11415cdbf4304d0e5777896f85cf4e30cc39508fd69ff831a86707e230cfca1773fd9a8bc50c37f310f8bfeff629d2d6";
+  sha512.doc = "4bd240f3ce155ea517fc267af1925f2e84f7af694a1ee4a068a2679d97cb6f97fd77f8812017e05f33c935bb54a34459a9deeaaf43cdb4ed69d792676316734f";
+  sha512.source = "33579dd40ba708e2e8a727f923f727f893f2f8e9562d369b1e025b50300250010d2829217a7aa72c1ee5781f3ed501e60b010cfc3cf3211b4bed1168494fa4ab";
+  hasRunfiles = true;
+};
+"nanicolle" = {
+  stripPrefix = 0;
+  sha512.run = "3e495d68e20596ada67e55fa7d7273aa0bb19ac8ea41abcede5ee66da6870d3a1703c464c6a7e911b0a202c6062bf1afd7700755fcca0abbc80d0e0c8afd5fee";
+  sha512.doc = "007352388b415e597da827b25c2b8773e64fddd1b2910639139add09e07076a0f94b0a70422f1ccce0c00b7b7ed5f6534a8467e5257dc4670819dfb5d9f61fda";
+  hasRunfiles = true;
+  version = "2.01";
+};
+"nanumtype1" = {
+  stripPrefix = 0;
+  sha512.run = "fc775dae204d8f1ca7e05005ccba0bd568f00819519d34b2282028d7f2b89b9c1f9a091ed192def7281de97ea97c75b9327727489e8ff88585bb97cf5e8b8f10";
+  sha512.doc = "ff0bd0bcc32eb8166e7bff9d440692a3c21c5cc7fd7b8139b472fbc2e079cba0591d162e2a81090919990dba31d1e04b57d50c35ac1d0670ef9102c64abc88ad";
+  hasRunfiles = true;
+  version = "3.0";
+};
+"nar" = {
+  stripPrefix = 0;
+  sha512.run = "212f1a002743ba14eac41de05a88325533db8b25d9f12b141064b9aa98f78dd5c28caa7cdaa4419829e6180e56ff93e42b069cdebb52fb8ef40c9652b8a23c79";
+  hasRunfiles = true;
+  version = "3.19";
+};
+"natbib" = {
+  stripPrefix = 0;
+  sha512.run = "7e78ab76bd86a864eeccef86a64fb28b6b063d5a12210da80f0c5a5608df429fc2939580b88263dc50fd68d841580a12358617e20a0048ccbc9e148ba04d5f26";
+  sha512.doc = "afe78103a6ba2d58c6f6ba6927101cb481abb1b028c4cc09dca59296d30978c636e837c248eb4f8fa44aa8fa7f6db1e1b6855afac9d99b0cfa030dbad6e59edc";
+  sha512.source = "ac850d6b92e7cf538f564d052593319ec1b1366d74dbf86e55f0c59ab3a01ad79b780378e816289aedf9b645774cbde56b7d186abafa8d1ddaa6c32d676141eb";
+  hasRunfiles = true;
+  version = "8.31b";
+};
+"natded" = {
+  stripPrefix = 0;
+  sha512.run = "85568d2bd3b729cda5e4512a2e3309353e7abdcd6a02ee3f86e07bf65cd74ca9581d7b2746d582b704a116313b77cc5ea94f19fe0d233a3b41c4ae88a8704f12";
+  sha512.doc = "5cc23aaaf6006c1f77d676ad1f20d3a62d9ac8d8be6f41e68085844f6060d570baa04000bf3108c975add502c7ad62086509464753474a74c43d045122b28294";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"nath" = {
+  stripPrefix = 0;
+  sha512.run = "2eed9bc55d9d994df8710703c5acee9fb07d8c9732288740cc3c20740bd8db1e3d22617886818ceffb0346110dcd0dbfafaf192878500b2865523d00c6e02bf0";
+  sha512.doc = "ea75b3f282f81963484b2f6b29513a99f3153f222931dfa811deca40cc79a814a225a0a79e67237f53e3aabd33f7749095d3c7fb8f374ec802ee054ebca291d4";
+  hasRunfiles = true;
+};
+"nature" = {
+  stripPrefix = 0;
+  sha512.run = "78b6e945642bf2073e49acb318a0ff78c1ad24d38c28133b08d5e2881e6e5ee2dd6e8634b467047145dd72d08bfefefc631fd81c7e0facb590be2f9f4798ff6d";
+  sha512.doc = "cac72025fbb65e32fff8dbe3a457e28b2953ce2a14b9359b93724073d1c56761524f2e3200f80aabfea1aa0747fb010bb78586978856c89348fcb255630e5d9a";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"navigator" = {
+  stripPrefix = 0;
+  sha512.run = "868f3c08b71f670010fdad0320e4792929d31c2be1b29fbb38da518288596dc299b58635ebc8e7551b9191954b76280e87c47b1eb3c4987fbae3afcd133a5c2d";
+  sha512.doc = "56605790284309e8b6432152bdd6765172e9e7c9c6ca88b07ce5b4b19ac792df21879999a47663dbffe7b3dfcf6da0de3e8f8399cc65fc96dc2e8e3a57350f47";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"navydocs" = {
+  stripPrefix = 0;
+  sha512.run = "b1a5afb90babbdf8fbba1915b88cdbf30a0244d8363c25dd9ce33bb153f9e8e0437146d9883016a40b1cf55c1dc02a06a7d2b72947326f5dc13998beaabff923";
+  sha512.doc = "2122252986f1fc852a121e09ac4f6a6a6c23f9227e374809f2968e729602f6d870bd9293fe1d456c4cc04aa48ee01361d37695c7290bb047f2c8f9a41981d3d0";
+  sha512.source = "aedc1a3bde2379780b1042f9fb103081acde19e4f76f5608d0382756b8f9bf0d4743aa3aa66556bfc9240d2044336a609f3b1efbf0b4780af87b66109293b225";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"ncclatex" = {
+  stripPrefix = 0;
+  sha512.run = "88ec3d2c350521fdb978734d32bb7eb9bacee0ecb95ae051d7bb039cb86e6dd1eba3b4ae93881ef8fa2623e99f6dba9b126373f181c4668176eaaafa94aa992e";
+  sha512.doc = "e9c08ac08ee2316b07610bde89aee98289b937e8dbfdc86b392cae02037632d6d303c799f74f381f89a6bd4f4397a8c4d78025a88b8fa4ebbce4be663167f2ce";
+  hasRunfiles = true;
+  version = "1.5";
+};
+"ncctools" = {
+  stripPrefix = 0;
+  sha512.run = "f7ec6f6c51d2a4f071b85cf28299a4a11eeabaf225c85cd0144bb0971ec3da44ee9aeac7cdd7501d258b7e8cf25b3e3484cd60dbadf0ff3ee05767c713c12dfa";
+  sha512.doc = "a594e74455024dff7d38a8a750ee02637341f84d342a83409ad0e20a1b0f292c370e16c1b267c2d6a58975f45a6b4c1092c8518653994392cf4dc08fe8553644";
+  sha512.source = "9fd3fccd2383ba6dd9f32766fbabb5a2c108c335eee1b5fd6dd11d93d5d6944bed22877b640ea676bf9721a69e34f0500a3bee131a4bc65feafc348207d131b5";
+  hasRunfiles = true;
+  version = "3.5.3";
+};
+"ncntrsbk" = {
+  stripPrefix = 0;
+  sha512.run = "e023d0a407f666de1415728a90014041feb5d04ceb1007e8fc293452ecef1b9bdbd014adedb9e25993e57c0196632b1413ec19893f4c37c26a8e8e42a20a9de9";
+  hasRunfiles = true;
+};
+"nddiss" = {
+  stripPrefix = 0;
+  sha512.run = "62f951bce52bab564ab2671bd5d019ff9f6f5ad1d8a18ae9f8b574226aa83e4d3a9c6c931f4830f71c43499f68b8b06e539d55a027e712ce4cd2c03e349d3fd1";
+  sha512.doc = "bd92c614f160c50a22ff83d296f0e511909906459cfcb7100c615170ee9fadbd38ba032bf95f7b25a083cae33c80ede96964d3b81e23c481fe5a836d91967ad1";
+  sha512.source = "498e13f4e4bbf8e2133870854f75feb5617a517b55593ab90c203ba860f95599ac5b010bee58d4f35706a6e17bdba54c66e02e04281bb548e62b335c576a6357";
+  hasRunfiles = true;
+  version = "3.2017.2";
+};
+"ndsu-thesis" = {
+  stripPrefix = 0;
+  sha512.run = "d79b603726abaa506ec0cd59c30e4c341839c1dd6f7b7aaeb536385d22d69a37d764499aba390fe7e1efc6a6e25ae6dbb7e92bf659a771b6f4d6ae3b5a2c98d9";
+  sha512.doc = "8e93554ef50d43562d1c42fff3da81b77b4ae444d644e5b1a818571e80cef88a2006f1b1c61c320e467724df7847be50f4f3ec1663bd767261720cc1a80419ba";
+  hasRunfiles = true;
+};
+"needspace" = {
+  stripPrefix = 0;
+  sha512.run = "663b2ffe30b1d9a588183916ccb0e3fecf3098d3e67f2a40fc49e1db1e5c1a892bfb56eb177bccd923415dfe51d4a225e2017be3b2f3f7185071836cb2e04391";
+  sha512.doc = "3af05a6704a8d3c9539cab0871f9f9c8b7a241549c1b3127dfce2a0eaf77b87d54fdafff4b2749eb4614ad9aba45bd2e3d695a92243ea30472e62f7945eff004";
+  sha512.source = "a629e9b798ab772feed1e66b773fbc141b0b2c2cb6c336acf61e8e3884246da1b36f90260fd47121e53e552f6569528e81ee788b6d1779c9e87eb54517a2d787";
+  hasRunfiles = true;
+  version = "1.3d";
+};
+"nestquot" = {
+  stripPrefix = 0;
+  sha512.run = "cc75905a3423deb02f226340eeb6a5f97d9d83470f156bc75cdf39569da845279fe8d4a3907fdf269bac75e7afae02faa04dea367cf0326720301ba3f1c31395";
+  hasRunfiles = true;
+};
+"neuralnetwork" = {
+  stripPrefix = 0;
+  sha512.run = "ba66b86e10f4425c063c76ffcc97759863677a673960255d5c335d215ff8c0eeb4d0f12fdac584ae1fdcec00ab04705cad716ff9290f6b1ca9c8635841f580ff";
+  sha512.doc = "fc2cda90284e4360c9dd9c03611f582c7c4569331a3bf04d51152408ff8533dcc1f398f641ece389e63f9b7dd12ae471c3f6b5d8fbdea5d206afb1ab15df4852";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"nevelok" = {
+  stripPrefix = 0;
+  sha512.run = "01d207fe9d77df0a225cd5fe718f118bc755c1e23c9dcb2bc4e0b4c2983205469baeeefcc195b150cc54f4540ea71d96cfc393fe61a32f7e85d5c9b5944c5938";
+  sha512.doc = "653fea96310508e8a30c76821d1cd83dbf579052fecbb8c859d40cb39926d24ae0141b4788901b34b4839615b33d5995eed2b6a27f6abcae981b9d47b6ebeb34";
+  sha512.source = "455ceb971d4617b096bb2d1c42fdb487208e8c6ccb3fa94869df08c9e89516e0f5c9e5513b0573d17929bc3284fa41ec19ef092ac7c7c99ca8a7f9e63a1559c0";
+  hasRunfiles = true;
+  version = "1.03";
+};
+"newcommand" = {
+  stripPrefix = 0;
+  sha512.run = "e4716ec35793f0ed4140ed3bb221bbaedaf121b2529dbde5114a575bfb8aa32a8fc56e79e43068adf560423aaf68c5f09dd5d6b624e37005bbaa4def2b280060";
+  sha512.doc = "84f71adb1cdf4213f34e30a2737f41c93fd0e8ac4970b2adb832570c98c5f3876502556392fa077a8cb647a552a8e914b2a30e4e38a039c355802e2c85c5f3e1";
+  version = "2.0";
+};
+"newenviron" = {
+  stripPrefix = 0;
+  sha512.run = "4ddcc24de158fb1a5b585c65adf769c3f92c4598355306e08257f4ef62718c6ca7f2dea80d742759601b37133a951d031445a39ed5d8062496459cc2f98a71b4";
+  sha512.doc = "cadfcd8ecc9c0904bc9a45542a24c1b6907dabacc94f45a1ed1b885557304a27e7e836b55cbebcc6130da0bffeff7c56fd89f0b7a16430dacccd670c8c6ddc7b";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"newfile" = {
+  stripPrefix = 0;
+  sha512.run = "b949934073af1aaaada73c93e493fd39ca01ad625d72bcfa5df915b2c2f759a39d77b7c2a0a952711c8c3e0af5e6cca59eb7f333fcd27e7232c3780ad5400ec8";
+  sha512.doc = "c2c0e825ae7fee4fa551e831c822190f7682392d47bd8bffa3ee947900d6eaf00a363edd204f7404c834ade0bd5a05e9bb0a8284f8c660eeddf7f75179c0060f";
+  sha512.source = "9cc5d4e1ac98c2884af3a2e5d11e9cf573660679658450d0705d6d0c4004a8994c3b471078db8a6a95527f5aa84b3a7ea18a1c00b7cdcd9169fa1cb870a277f3";
+  hasRunfiles = true;
+  version = "1.0c";
+};
+"newlfm" = {
+  stripPrefix = 0;
+  sha512.run = "72f7b087ba1002541e3d26d5b41b58380443e30061b92885bbd3bcc017b17cbad9227c14074a53706b98c785117c7b07c6d49639c84c617782066491dc0cabf5";
+  sha512.doc = "8391122e13223055582bfe0f9e6d62315c9a48588848ab02cebd5b2d7045be5f1d476145e8ca29392820d4ee018b9f84380408331b3ea56e7e99071024a8c369";
+  sha512.source = "fa807aaba787c52d3e769e240a04f5fa23e469908d2eb5a60967e2b08cfb7a694612e85514a56c3138925ce2f3c480bd5b6d0f701031d8ee8e646c3017cd0022";
+  hasRunfiles = true;
+  version = "9.4";
+};
+"newpx" = {
+  stripPrefix = 0;
+  sha512.run = "bd5b9831b0c42c3d3558081085ad469637390d8410dc65ef622bb6cc01583b8b1d7da3b2a6c4c0a1409e1aa15334ac3f33aabd5666dd986c9168203204c143fc";
+  sha512.doc = "4a9a94af1171047411df91dc6a105f4fad7431259fd3035f61fa34b5611999486ccd031b1964b367d75a36bb77a92e7a368681fd2e6df3d9160b22194e90e1ce";
+  hasRunfiles = true;
+  version = "1.403";
+};
+"newsletr" = {
+  stripPrefix = 0;
+  sha512.run = "e2f1995420ed7b94b980fd794df5dca89e89dd96daefa43559d568881ffd17668717de1baaff18bf27e8519663203e0ea7fef214b8f7541bde81d436a3a5c378";
+  sha512.doc = "aff23fd9e3397c52a1566930d6da6184786f07adc64c63e5d9e0062451014d261db8dab06e9d393cb66b3b56a51b57f494f01c9ab27b05bbe2a226cd4623d590";
+  hasRunfiles = true;
+};
+"newspaper" = {
+  stripPrefix = 0;
+  sha512.run = "227fd249bba9deea4f191c59060c49d2d1cb8e367bb3007d3b123c17dd4328206962946ce3f637c8e6ae079a9c95244ce9027b0c9f83e0901801dde066a0405a";
+  sha512.doc = "b08d57346ba93e37e93f3c6e2487d56a0ac67eac0e4d9db564d221319e6403a1055729a2a1e43db4e161877b7300aa90e1853d75843c95295481d7cfaa3f6c1f";
+  sha512.source = "172e832bd15e8aecf6f80f8cb768d2d7b3721975638007ce631b78cf5f6dab27ef24ff63f5693f5c46cc430bfecae577beefe4fd2f6fef22d6f5fdf9ff20dfe7";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"newtx" = {
+  stripPrefix = 0;
+  deps."kastrup" = tl."kastrup";
+  sha512.run = "c765cd858ec698cec72819e61f04fc75a53aacbc2459af20ff1c0724093a41b0c1dca17168ad46d118adac6f0290757c1ca4fc996fa9bc2a42bb5a83bbd4e10e";
+  sha512.doc = "494520dd7654e414d430b77acba7fd444ff429800e0a98bb2e4af1ae2f4472ac12d6b959575f5c9e821185cbbfe8703f1f4d8097ff890056cea185d304491422";
+  hasRunfiles = true;
+  version = "1.604";
+};
+"newtxsf" = {
+  stripPrefix = 0;
+  sha512.run = "ce1497bcc316b555b47dcab2bf68888fb580e0f1252fa1e1f73f2b3cfad2b9754ea4963ef0c39b967ac374323b6f75cdf28d0d25f93212b09a1e66bf90976c51";
+  sha512.doc = "426c11211d3f66c8d87b1b2522ed8bd9b2ed0e4e006dac4c0751d0b479100e2cc1aa60ab2c32b8e6362b767300f568ed295bcabf4a86c51f2ada7ea868483066";
+  hasRunfiles = true;
+  version = "1.051";
+};
+"newtxtt" = {
+  stripPrefix = 0;
+  sha512.run = "95c25791796b56eb6e54be98c522861d3704e76c3d2a88c871fb88c9dfca616867a8cb839d8ba9f5b42e03eddf6d27f37cf91bfbdaae5aa13c4ce9fa681be9c9";
+  sha512.doc = "c4f9e344d0060b569e7503d12b1021bfd68bc58842778d2d9c4014b9f70c10a9a23ebca6495f2acac358a4d6d5710e8db48dcf445b3be5d278cc9818a57bb999";
+  hasRunfiles = true;
+  version = "1.055";
+};
+"newunicodechar" = {
+  stripPrefix = 0;
+  sha512.run = "8e1748abc585f51033a857db126c4b18f0c42e015d7193f8bc7b69493fb13a218db38da97f3a6733df01dbc247093beb544651a050c5a690f3cd5479c4ad9e6a";
+  sha512.doc = "9ec3bdc81587e8b2553dd4ff45ca4ba0bb504ded0726aa44d1e88423cdf425124334d04ebfbdbbe57b576b0fa52cfe1771c97308f146ea19d89d41eb4475eb9e";
+  sha512.source = "0464584e516c8f5d9c7ab4db114fbe3ea9e07d33c1544109ebd0d3b25e4e3ddac222dd69b6a8222e290ae2b6a7d7166a76b54ff9fbe7ffd5225368986e2af6d4";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"newvbtm" = {
+  stripPrefix = 0;
+  sha512.run = "029829b1da07d7e2fcc5950c32021707058f3d7228f6ff82404aeb962663277ed107934f04a93e7f43bd7b67f7034821437f3a8116f21028b7c9a154449ea53e";
+  sha512.doc = "dda7ae47bb076f03cba83438c573405f1c67e5407d83fa0894e9575952c284010b62f62720022ffb7a8e723e829610d1e8ff6a8b5098c92207e8ab8755dcb409";
+  sha512.source = "8d58e55977d708c8e3fd9ea6394494f68ccb21712703b2302355234d12355c23de97cb392d7ceda95bc078ddb2cbdd2030461b5b4069805d4ba01b5e3a8b8f59";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"newverbs" = {
+  stripPrefix = 0;
+  sha512.run = "1a076aadfcc8b82d3b003c0f7bdcf17e3c66aff17c7d1c3946fda3d67d44e6885f35f84033cbc1cd8dc3b0c3d90aaf63ace3152fb7619fcafa9d1899c45140d5";
+  sha512.doc = "0c29b76949918fa03f4e4b506f35ad9d0cff6036702330d4e7771325869b7f5effd4f562dd2416d7c15d704fac60efa525f187ebee67a29d728a0d2490d2d266";
+  sha512.source = "d5869de6c0ba7dae4ce3ef4573efb43eea0e769974519085b26a519174c3c64481775385b0c51365464526d304424f9ba86949c22e42af1a914e9ce62c1bcf2b";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"nextpage" = {
+  stripPrefix = 0;
+  sha512.run = "fca0aec60c5c7277dcadb0f86d757617484d700575fae13df8b386775e153ea89c52935ffdb2448c52e351593b396fdf3394f5b97e23a0d2d40dac339e584f59";
+  hasRunfiles = true;
+  version = "1.1a";
+};
+"nfssext-cfr" = {
+  stripPrefix = 0;
+  sha512.run = "5083d4ff4168b857a7391855ce02ea354cb17a26242a3e3b2693d6bbb35f722f750299669a37afbb99a52180433d697fbf65a6fb6afd6bd58d4b16c63e5b0d67";
+  sha512.doc = "28b2aff47d74de3a42c441dafc156297904b5db20d267f1af07d1e3210e7f9959474b3cec387be7d9b20dc04560b4100a0d9da6979ab8ad2a7cd1e4518cec278";
+  hasRunfiles = true;
+};
+"nicefilelist" = {
+  stripPrefix = 0;
+  sha512.run = "4e3e1b651a5f3828c1806ee199ddff3a022f27381da241f2d9400cc3943d9aa29e0dd56bd10d7fab60da1901f221cb54c74823b35f163ace0efbd3217b767ca3";
+  sha512.doc = "5c909c6dce453a7a73abd63896c0916db3f609b7d4283b70af33bfc31ec44e7aa5b3dc2e8d1ef6fb3d33605d23e079db4e7cadf4fa13197823ca3c177b82f527";
+  sha512.source = "b7915ca4c8a24ae84b1caea7bbdd395f5c12305a81f193f35ab4bfe91a12a21417e41b5d46b6ca72c69357782a1e6e4a8366e0bad85a9c453759ea6bd1ee4874";
+  hasRunfiles = true;
+  version = "0.7a";
+};
+"niceframe" = {
+  stripPrefix = 0;
+  sha512.run = "539d4a6f3a192188064fafd94366ad2f8a9146175d9e04b08cd83d1386bccc730a0e3be4a9fd45e4f47152f10710191b063138ba504fca95e4226fc179f70a29";
+  sha512.doc = "aaf777520d300b5e8c9a17c2dfb5b12406f5e6926b17c4244feaa8d6c5bc28d87277f23fd814304a7efb91dab8a42e1ed88f6568b96f13f30c831e81201ff4f7";
+  sha512.source = "fb0106ee32e36d34767c6200be1d2415e11c275e5540dbd54777a6876474424f1c82ba52bcc0fd76da9ecf3b37671d37c762834b3e6ef714028c1917dee45235";
+  hasRunfiles = true;
+  version = "1.1c";
+};
+"niceframe-type1" = {
+  stripPrefix = 0;
+  sha512.run = "c99757f9907622958267f042f0ee0aec8dc6317839fba05309116f9151e476e37f24dde00e6de59fb0204beb9383eae039c0fabb089d6349d6f6031e8df196f0";
+  sha512.doc = "5ab28cf7091ba993d7b4ac9f5caf2d563c60e63a3ce8975bae105f460e2dadbc963efd17b7ec5ddeeb8a35bea1b05a007590d3f6f9d5cf5dba0495e5b0ee8ad8";
+  hasRunfiles = true;
+};
+"nicematrix" = {
+  stripPrefix = 0;
+  sha512.run = "03b9289b7d8edb6a042fb4f9facd7b933d882ad1b88a8f70da8772e1d40628a59b331638a1cc149f2fc946dc252b7878b5950cd92b9944e34adebf6e2d1f3b87";
+  sha512.doc = "71089524b9cf67d7ba7156e3f7d1bef56ce699e2b39f8879731d692f2f9352f772d04714d7f7f2826d1db6a0f1ca0860bc490644f0df82e8e52ba0d5d85d9992";
+  sha512.source = "7f71495b48f8563ab8adeaf021dd998847001f5c05c9d643619fb370126bf31a1ed269b53c7be670549c94d13d32ceb9a5aebe65bafaa6815d696cbe2f7afc6b";
+  hasRunfiles = true;
+  version = "3.5";
+};
+"nicetext" = {
+  stripPrefix = 0;
+  sha512.run = "04a555a82287a39249cf6b0e18d890329098a1d0d6957fe9a1c535024b63a5f50b6487dc1fe4fd69d87908abd385b0366474ebe3af0b31f41f6a35c519a6ba9c";
+  sha512.doc = "96cd1694ae0cb116bb4620f7cdc1f9e24385886c78cf87466cd329c5ca0d78111005ff89e9be50f07078eaedb69c4f3d495b1fc5063a1a69e483b86a6c8534b1";
+  sha512.source = "d7c556fb2fc34e7eca9038667842825053ac03478e32a6a58cdda2209b33ece494071e47d54bb24f7c085f90b45375bb5db7781db642bd9f8cf661853d077f60";
+  hasRunfiles = true;
+  version = "r0.67";
+};
+"nidanfloat" = {
+  stripPrefix = 0;
+  sha512.run = "42ef65277deaf474a619e5ffd570309db8c8349f32e9bcfdf216251e81136a3da87a745b3dcea5212f636396179210c6acaa96a957ffd9588d1f414d6a59bded";
+  sha512.doc = "2be76c8e243de71698ae5264a8e3af4da8dcfcd130b0554d1547a0a238e55ee71ec57d8757648b162a6ebd17ce1047206979cf139003a02921a4308a852f0030";
+  sha512.source = "8a778b33036445dbe375af746244433470e5d10a963ebbfbc397c0376d5c4f7c23cdbc2ff3ff6455e274e83b465a64d8bac5023e8537d5b949fff038098d862e";
+  hasRunfiles = true;
+};
+"nih" = {
+  stripPrefix = 0;
+  sha512.run = "5f016d57b1b55c698a902c7a85a652fdcd40062b409a14e38c1356b9030129b46631929e49c6fa70db7ed499043a75060c97919f15876ac7a647d31c2f0bf729";
+  sha512.doc = "1c209615f0745ed0ae4d2f4c55cf9447ec4711e9345ca3db778fbf45ccca76792039e6a7e51f2e7286034ae229b5c696ba7deee5bb8c224dbf95a4cccca650f2";
+  hasRunfiles = true;
+};
+"nihbiosketch" = {
+  stripPrefix = 0;
+  sha512.run = "fed3f5fc0886ad44c9f442cb0e4d3289d9027375e3b0563be9fdccf2a963cea09a0b16db2ef51a57e652f27a5dc5c20a36e9d284162433b958cd4fcc905989c6";
+  sha512.doc = "707adc7971861a35b352aba04521caa61ea3d84e15cf698f847be43e9a22e6157ba133f9d787c8c65610706481880571e82a1037082d00efaf08a5812f612e94";
+  hasRunfiles = true;
+};
+"nimbus15" = {
+  stripPrefix = 0;
+  sha512.run = "914621d7bc2d7f17f5536f7298885d720b348f15ee45a56493b6e227b8845136ae9394b93a20b8cd48c8333131bad21b4be473d61f57d5dd449dd416c3536c42";
+  sha512.doc = "4721c451b5f1a108ec86e9db369f34015e501aac3185f2dcdf34151a422ba94276d51ef09d1aecc86616ef7a72fb911c5634247c36e7fec79b60203a5e42e7aa";
+  hasRunfiles = true;
+  version = "1.011";
+};
+"njurepo" = {
+  stripPrefix = 0;
+  sha512.run = "a62efcf4630d7c26bbedb19e0c4405e730733b71361cbec9abed7a06a377c230bee561d8b48427104bef8dbd4e0bd56b0eaf9f0f7bbcdc8b289c726cd7b6cef7";
+  sha512.doc = "61f32efbea3b94749fa0cfc3ef2a3b3a34ccfb4ed3b6b09afa74e4f6dbd2540c1a263c81ca6406288f015303250f51acab0b6a4a4d51c95a2f9bbf1f3360f8e9";
+  sha512.source = "6a790ae4e533c8e040ede3355967ee030e136d42afbe222a8fc4b7c3810817901aaca1625199d88443c8dd64d3d6b52ef9364d706fd1cfd5a6dd8a7916890df8";
+  hasRunfiles = true;
+  version = "1.1.2";
+};
+"nkarta" = {
+  stripPrefix = 0;
+  sha512.run = "60537472bed0bd22d64789008ff8bbbab92ffcde68cbd74eb0b6d9910705f9f476e8f2c4dafa0020a24b0ff2e27c42a39de1791f2c91040af07dd429e0fa28ad";
+  sha512.doc = "b3cb0205fdc567fbed23f797031e7336fb231c11490f463ee3bb3887e5d8ad1aba90bed1b14178b1d9ba15d76ba02ba93598362b9655eea78bf086c7df6c8b61";
+  sha512.source = "f96b85f2a779ae64c9c2a056e16d2d8473844b45c0d906f97a3b62f6f517ea614600312d44151d9b9b676f3ec7360638c72fd43c7a35e183bad0d4602dd84aee";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"nlctdoc" = {
+  stripPrefix = 0;
+  sha512.run = "a13148e7c821353e23d9f378313023aa9140e48108ee7af258a5fd7bca9b42e620ce8eca00c3f6c9a27d78a7a2085fc86f5a2b73456d093b1aea2ff8a2f54159";
+  sha512.doc = "573ad374a072c3fd99c72a719f05dc37ef0b53742e78b1c3512ec8c495adba78183fcd3cbfe9ab809ad603dbf63d7dc26d7212a44272cf9a1114d0d954bc746c";
+  hasRunfiles = true;
+  version = "1.06";
+};
+"nmbib" = {
+  stripPrefix = 0;
+  sha512.run = "c915b266e2a7644a88de6476bd4cf81943f7da31472f1b8eb889e048df8acc4afc36e247b8fc63bfdeb8c0384d87fc59f43d87f3ff09822d076c62a0edd1c110";
+  sha512.doc = "0014c7fdade3685ce03bf9fcc2725b430f6272025809e224b88361960cb47e5b533d88d60f0ce55e011dbb943c8fc025340fadc506eedf10189724ae79dd2bda";
+  sha512.source = "52297a890da760e2c945522094f128612ceb521500c81ce54da2f481581000bf42302665585fa056b31ff0f096a3a170ce56013e0979ae2043a94b68e7d32a5a";
+  hasRunfiles = true;
+  version = "1.04";
+};
+"noconflict" = {
+  stripPrefix = 0;
+  sha512.run = "660ea2bc008866130d0955eabecf0afa1e21ce38fcaa0ff0d4364ebc32ea8af6a2ba57c80b340f824b14f0488d2b40e5c7ddcf663e37d6170a7ac0aa740ca260";
+  sha512.doc = "b403c57b0d794bd95416ae09ed3fbc0c4a164689f9885dbb15e8a4c25ff8751376e6e61b622c9a94feacc4dfb905a7926500368bf51e5e568efa31e1dc5c785f";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"nodetree" = {
+  stripPrefix = 0;
+  sha512.run = "bc333202800520cf68e2aae42e849fdbbe8b2a1936245f35805adb3ba6795d724b8c6c5bf3973d760d5bb1327324c43721bef909d3440a3e7b8c559dc57aa61e";
+  sha512.doc = "d81032f9f78e49d49a6e88c4017a6f95ca8e3ced2a24210716d456ff4ea1461933540d0b553eb66e6b74c8c94e3f93328b9ab0cef2ea91c2ac37a1ab4a28ed39";
+  sha512.source = "a702d084e98c3a79df85baf0155d33b7187b31ab4d0c32af4cf3e1147ea5abcb6a989a5f09983d1e2446c11f9f99fb6a66f9c714553157e4acfc39003e770f2b";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"noindentafter" = {
+  stripPrefix = 0;
+  sha512.run = "6037e5b7b36742c2956f39020f7e9bd2072b17ab313f5d7d86e8b0c348b89ef1392571b8cba22190221a14c6f1e44a0156ddafce8f5e2bbf5362e443f590b2d8";
+  sha512.doc = "1cc385e0bed9559d66c13967a5ffe83f1d01ad2005e4c7ca92243ca246da4f5f5e9abfde9b244ac54d73de4f874b800dc6620f7c93f6fb03a6d0ac8b2593fc96";
+  hasRunfiles = true;
+  version = "0.2.2";
+};
+"noitcrul" = {
+  stripPrefix = 0;
+  sha512.run = "1629f5c0f832927093283cd5cb534cfb7ee35bd74f306fdf6cc18cfca3c72d5c1501139c180b7cf3fe71ef7131dd6a42465ee666c7bbb5c83a86f2a69a5a3c8a";
+  sha512.doc = "c9c3adf9742b329ddbfdcfc41126c22039e89642f0c0d93ad064ff2160f7708b62ab28994a81860aa08d83f11a111bc11a2a54bbab88bf3713f3f6ee4aa2e641";
+  sha512.source = "5be6bf65ca4dc0c5819a1bc870f704b595b25e5ed6900beb8a53fa8167680929a7fe038e80fef120e77d5b8731c13f92f7907469ce7aa4825ee4e207c09268a3";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"nolbreaks" = {
+  stripPrefix = 0;
+  sha512.run = "4057a988b0357e2256eea6ae47c560d8535528e63b93d648c45d65ac44c4894104015e3411b7046606b9a68afc44033d037229d684f0c5427d9dd2ff5b272279";
+  sha512.doc = "8cd5d7336097abd2d873af36b2ba6ebc8cd1c405c9a715c67e6c04d02dbdea067c0b7a8603418005ce223e0f1bff161a3dcb669da7c07c30b2ccdccc7f953fa0";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"nomencl" = {
+  stripPrefix = 0;
+  sha512.run = "00f02434a164b721d996032ee97e3d6594b3e1119128cae47ef759a935fd454ae477648d1c1e506673a139c52dd8e8ef74b349748759b109588eca353d390604";
+  sha512.doc = "b7a2659e324207e37c38d37cf372c237cc94a3f8902bf9d907ed2a45ecfa94d463b550a4c3339dc75825a36b1e89e9cac771cfb2ae6bdfe3ad157aa235f488d2";
+  sha512.source = "ccc6093b379548c03a070b6443f308f757ea425148ab32dabafc3c271937f5d090918ad6f3c9f013bbbc6534c12dc9ffd7e8786f22999a8640650386b8ca3e30";
+  hasRunfiles = true;
+  version = "5.2";
+};
+"nomentbl" = {
+  stripPrefix = 0;
+  sha512.run = "195cd134db2faf9c7405d040d0d3b4a71ec39ac201fad47c855d34d8f734d069c03424ddec6b1af978e7b244b3907f846fbd80fff6063e7b25df3de508fc51ed";
+  sha512.doc = "4ea606a78da4c0c4f5c35b38b9a430de8dcea49c8662081a85f3aa575523c40f5951bd54e2c8acb368b52f75a3214c0a4b0d178dc262a64b8f6485852c4458ba";
+  sha512.source = "5cf26c7871ccb841bb8350d594ed9333d7b46c7d2e3db70080ce743fdfd7c7fbfa3c8f7f976bf8f37decc653e54954a5e0a90385fb99ac3428a8dea4a5311719";
+  hasRunfiles = true;
+  version = "0.4";
+};
+"nonfloat" = {
+  stripPrefix = 0;
+  sha512.run = "39f8f0a4d9ef1cf8f1dc02c63612980f25cee80cb545bf405d9d2a080256ba6799ff3030c98c26e6f2aaa10ac71015e58e4233bf84703b290220b12db45c70c0";
+  sha512.doc = "2d090fa397a385cb32c26957b5c4c05ba8443fb1bb7ce7e3eda777ddc2d3af11ec3ae6297bf014f40e71d4668044ab729a6dedd74e8802ce9089b59d57663374";
+  sha512.source = "be5e0b078adb8c530d8255bcc72daf50ad8cbb48343fa76f132e1b75fd64d033c7caf287b6901f1bc49422956f6901dec0f7e7b7639dd71c10c1a76ec958aaf6";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"nonumonpart" = {
+  stripPrefix = 0;
+  sha512.run = "e97fcc36af3e86c1a432d0e425dd86308429e764c976a2f7f8106c3433ae5a148bf3abc45706bcc3090089911e2dfe175156eccaba7d97f544154ad0b288e58b";
+  sha512.doc = "0cd6b115638c3151e5983845dd2964ed90f24bd35a06e904a005755696d6faccd90bbf88c7bbb5a0282ffcd266cb55e9eb1d058fd78432ba062fb4fd723348f3";
+  sha512.source = "46130f9c35465685dc690096405791f82d70e73091f6654b5bbdaebc71b5fa3703a013461aedbe2cfe59975dd6233668f0c204e817ed65fc83c30be59be52505";
+  hasRunfiles = true;
+  version = "1";
+};
+"nopageno" = {
+  stripPrefix = 0;
+  sha512.run = "0e152caa8b8df06444f50e2f9ca93f18088a0c58e2d5936f612a770b90cdb8f4bb0142064f56573d8569eee274adbc2703037ce4d7477c24d23c7c8de8748a62";
+  sha512.doc = "5988c42840efc02f816ca0f9ff7ad2d731c66563c0c4de21b857de975bbec08962cef4ed1dad096abc39ecd8489d3a34a66809e98f49b0a280c186d03e6540a2";
+  hasRunfiles = true;
+};
+"norasi-c90" = {
+  stripPrefix = 0;
+  deps."fonts-tlwg" = tl."fonts-tlwg";
+  sha512.run = "d52fb16ee07ef72f6484b784346933a23b5a3357aa2f00ee212bb1decbfd3299153e88cd4bc352cfc2e888dbf37ea86a2bd6442b6393634c5f144f4accab55a5";
+  sha512.source = "0170578bca4c4e4a7307fc125a6d845881fe32e2d361c73369ac1bb1b7d510bca8eddae831fc8421b3e30ce996f2eda4d7b2e449873ae6226a7806ed2bbd4047";
+  hasRunfiles = true;
+};
+"normalcolor" = {
+  stripPrefix = 0;
+  sha512.run = "013354a5f7514f6267d57d098ca93eb48970df0ce1cb2db0c60ecf664cbcea177b934ab8f252cfb9dd4c0979417937462ef55e51502bca7f32a7de1a0e820e32";
+  sha512.doc = "ca7a9c008f72aa1287092f881f9ffcbe58ed45bfc97ec3231fbeceeb007f6248629d9cf49598afe604ac8cc30a4e8117f54fe517fcbf52548add2f6ac6fdb662";
+  sha512.source = "ac6fcbd939d13714f21106c6b0786a9ede4ae6a3023348678ce22bca59343d7379fce9ef12bde91fd05b4912c70c8b4eb64b95f2869f4a30c03c4443640b9d80";
+  hasRunfiles = true;
+  version = "r11";
+};
+"nostarch" = {
+  stripPrefix = 0;
+  sha512.run = "45992ab970abe997f3b01c9dae5e15303db81878b085f45fea4ba07209160ff0307550e9ecca9b67e0d01712831b6541def54382170d43db4dd547f2969f9fb9";
+  sha512.doc = "94efe6a2b41a47b559b4b7c9e04dda1f32d0c6f5da79b51d994fda1af58b4e1cc7e808f9465f7874be6b67231383c38543fb3e98706c32da32d73a4ae07da9fe";
+  sha512.source = "1d46d17f9f43981c89bffdc5e2167342e6168423068b4d02c180fa18fc4243ece749ebab18c5b47be0184e76034378a7ee6ea09aca3c782184f389c6639df38f";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"notes" = {
+  stripPrefix = 0;
+  sha512.run = "7b569f27ec34c103c5808036a6ffd7f97f9171287883f38c048b8eabbd979559fbf15b20c7002dc9b8b0577889482c4347e4986e076079809a4a5656aed46101";
+  sha512.doc = "4e66790b76290925f49ab7f56175e2d41a20e715c43518edbae39e444d02b945ec05ca918574f52fbb6ca10fbbb060242c688fb9344094df2e025de83272322b";
+  sha512.source = "f5405540929d6d99471bac43d89b01ed7ba59bdb8f1e7d978dc9a43a563e6b16c9cc4645d291054308f06b3d4df10547e09a72081c210063d37810da511dcac1";
+  hasRunfiles = true;
+  version = "1.0.1";
+};
+"notes2bib" = {
+  stripPrefix = 0;
+  sha512.run = "019645974d270df27f5c5bf22570e26b5bfa5c076739824eff60a40d1c246010fe0e599eb2fb282cc08aa2161ec7ee753b734548ca04370d9bf923f357ced1f0";
+  sha512.doc = "f4b97327b98e86c64620e975130a7fe790489d16135667c95ec7a368591084c381362e1447dfd1b3afb4f57ed2657a43f8623942f6618d839cb9b1c0995234e3";
+  sha512.source = "04cd8f2ac89b8f4fdb20a445cd98ac382a082114eca90306eb0cdb793fe088ef1d1ba9e35dd9c9b2c98238cee6ed9519144c012973d7c2e1928c11f7350091fd";
+  hasRunfiles = true;
+  version = "2.0m";
+};
+"notespages" = {
+  stripPrefix = 0;
+  sha512.run = "f5f6960bfade079642a4b4f221a7b762cfb5276a74b20bb3eada51706cd2e3496f91ca23e35cb39f221c57da19012597eabc8d3aa63c58e0749c8a01b6a28ab4";
+  sha512.doc = "8af2f746d4484a2e06bd0f7f766c49cc9b0b790da2cf0faf1c83d959f2e2f60fcdcb7cdb6f1ffed89c2b03846215b589de332dc20935d0c0add4e3dc025c42cb";
+  sha512.source = "96b547ad56fc2e503c2cf9b6089dd74e2902831d99fc8899b57affdcc1c1d23463dbc7472878cf30ee26078c30cac9bdc20975925de01a86982af19b6a3113fa";
+  hasRunfiles = true;
+  version = "0.8.1";
+};
+"notestex" = {
+  stripPrefix = 0;
+  sha512.run = "64f9704fd3646cdcfdc03f6a3e03f9fb37859b9f11463fa77e1d3d076115297fac9c0b8d6875c8b6b7f3d37127a400e6205239957526018d9ad5cdf36a984269";
+  sha512.doc = "c47bd3a4153467a63ac2e2b149f498f9458132e841cd70da9871f10674e77d928f7f88e58855c139dacdc225d286615caf0297077b843750e6940482398f02a2";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"notex-bst" = {
+  stripPrefix = 0;
+  sha512.run = "68627ca4a07ed0228b9b9ea4b70cdea5196e907f71f343310259d19464d503e76e2ea8fb5f59f01337916ee1f2ef398bdb1d3e4d97f0d49eac660fdce20590ff";
+  hasRunfiles = true;
+};
+"noto" = {
+  stripPrefix = 0;
+  sha512.run = "1b8835500a17a6607c35b5f2f6861e41ac250a042fba48e61604a967473dcad417350fe87ab350a72b9d8a49f8bd0fa65da6c955e98137c8b9015d3446806e9f";
+  sha512.doc = "6e5e003cb67a87355723f4460822a2f5e853d9ce3c3dad0887400d80c06e739bd4c98f268ad49530d0b3f55eaf031de50d38749aa457f2e4ab3c95a3b0b8a978";
+  hasRunfiles = true;
+};
+"notoccite" = {
+  stripPrefix = 0;
+  sha512.run = "b63b890933b27717625383488d2cbeb1501ace58b83e5af66a35ba440816527dc879df444af78090294df6d4d412d21fddbab43068a6d677b22d750ddb4105e6";
+  sha512.doc = "83b3d2c7b97bb88af13d888d04f08ebb7e79661b4924ed6e328f26b9d19e4c6eea6719b49e6f227dc37c96201a901fe57da3745dfa7151bec27c7e8bfb81b236";
+  hasRunfiles = true;
+};
+"novel" = {
+  stripPrefix = 0;
+  sha512.run = "ab6fd183a8f1fefa9d7e56fd234cf577bfbfbf6635d8e8fb6665e05b5d2f98dacf285731b32df64abc3d314865409003d89a935e2af2cce8990e0cc3c4510998";
+  sha512.doc = "3e1bf9313cf7e52f1d08f94b24be24153f4f2b68c19517e5be81c2bd224033fbfff5a17857866ad274cc54a96c0bb9f9da6536af5213bd561ea48b7ebb4e7cdb";
+  hasRunfiles = true;
+  version = "1.52";
+};
+"nowidow" = {
+  stripPrefix = 0;
+  sha512.run = "2dff380964c5c487a015073ade0cef996f5786b204657ec5c8948748f485c03b457f6d8caa5bce8148cdbba2623489a01b5370bcd38eb73469d07da4afb8a216";
+  sha512.doc = "b11e2051543215f3f19c4d1e3398564093202be07771b7b3711e9ba5359e750bd8f73118b099f82fc3bb1e9a5f202027b168c371ca6587703d82f853ced4d538";
+  sha512.source = "862f3fcfb0a165473657d8e8616fa200a017c410e162bc8ce95376028fa4f2c0959e7d116152e73ba6c6cf4d39ad34d1c57f2320dc20f637e1d3a0e2cb2ec7b6";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"nox" = {
+  stripPrefix = 0;
+  sha512.run = "0061e0bc12a06b79c4339684d0598587f3aaf1c2aeacc7aa32118d7b91d3937ffe0ca50b55f5ba9d1b7a4a1c511811191160c58bc51b68dfdfa2b0cee900b409";
+  sha512.doc = "2383ebed9a9c6f65d6271317b46147915afdfd6caf39893e4cfe470e302f9ed6f30ca9f725bc2bec296cc88027462765b4ca5731cd5ccf98fa5c8156b1d88987";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"npp-for-context" = {
+  stripPrefix = 0;
+  sha512.run = "6d5da8b6e2f2bb6b514d43e8b72157a81285b6c15cbe74891a94f21a09a313813ebcf9e3a0a12847875f13d5599436ada4e5febb694c0a480931dd62a23035c6";
+  sha512.doc = "b3bddb0b9254ef9755628097ccb24ccbe86c25d3cba7a120c5d55da98a19061b716df1590a39323f57a8a698c5aafb5ecbe8b27d6505f2ba4acdf1ccdbcf82cd";
+  version = "0.98";
+};
+"nrc" = {
+  stripPrefix = 0;
+  sha512.run = "2d93fc25d0305b8bee0e5e9ae61bba492bc265e023980a411ffa521f15746c6d73940e352c886ed5dbe08502f472a63559191aea44c3801518bca8b28d0b753a";
+  sha512.doc = "35f86598105db616ea379175f3a098cf7c94f4a0a8836302de664c7bb65bbb5f72f41c5c9dc58bf336781a23553ec49e0a5c4d7d0be12b1cff68108aba77e88d";
+  sha512.source = "3404facf13d3ddaaf4a9aa295cd7c0777308502075d1ba70bfd6be6e8158eea6ff4b88db2414f8ea5e758ebdf52dcd5f44b6bb55e903c0e11dc6260b02a1779d";
+  hasRunfiles = true;
+  version = "2.01a";
+};
+"ntgclass" = {
+  stripPrefix = 0;
+  sha512.run = "a801b4653b65eb27764a37330bd01b690c6eaf6cf569d18df01019af61b9a32efdfe3d1140ce6101f58a06294bdbe07a4c30110abaa9932df693d594d3a17135";
+  sha512.doc = "bf6d05d54c425b716b6a3c9a4f2e899d37bb7233b5386700e27e365f236ccb38b025722b7148529923bb94a4e88222a4c34855ab5c7490104a8d02f759acf3fc";
+  sha512.source = "1462eb56cddc974bc562c258eaeb6e031f89c3d0e0983c7810e276f500513bca0819f6ebbeb65182dfddc1dd495242ea260d945845e3b2c5e72ebcf15b8b13cf";
+  hasRunfiles = true;
+  version = "2.1a";
+};
+"ntheorem" = {
+  stripPrefix = 0;
+  sha512.run = "aabab9d6f1a5d9e9bd2ee2ec4b9ca8200098a8f3dc786b9c06d4b0e00431dd66f32a254d452bce7e1bb595454e178dcdd71d724b8d835b6f1c9ad9de41107295";
+  sha512.doc = "fdea81cedc9ceca6ee29ee006867a05f018f210db2cb59c763adc4bc15db65a7e96ffc93bcd576a4c1a50e7e55d4b199132371686538216eba6fed65dce77ba1";
+  sha512.source = "bb0eb98e3344c4be782d113a0e5f1c91d615a5530e1c0a786938b1cf608fe8828d59d365c0d1011e62517f0f76139ea13bad1857f2e1315a2b919af1de3335d2";
+  hasRunfiles = true;
+  version = "1.33";
+};
+"ntheorem-vn" = {
+  stripPrefix = 0;
+  sha512.run = "90460e92cb52bbf8ac9b56bb950d36551b40ba260a9745e8f4d339bbca855286f8682c1a5bd7dd4ecb53e85448f96d558e6c35ffb42d8b862d4680930f3a64ab";
+  sha512.doc = "e097290ec9f9696aaabaef4dce11bec4337050848ee547535c30a9ecdf12a1e0be014f905b235fa1d851ad2c20426cd4a9a442a19475063dd4fa73945c3e1780";
+  version = "1.203";
+};
+"nuc" = {
+  stripPrefix = 0;
+  sha512.run = "d540e5dc8a3edb41994ef4ed8af6a51fea544ac929ef059fc50cd561891e02e9ee9b55a62782757101cfc5eface3a170bd585c144e7c8e79e191299527f979c6";
+  sha512.doc = "ac118243f5fa4c7a4000344dfd5793dfbacc4d7a16a7031fca6305578e06bdd627473eb065a13c4d9cc5d9ef3c1712202c2d65a913c75043e36221fc7df25ac1";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"nucleardata" = {
+  stripPrefix = 0;
+  sha512.run = "68f9d542701bb9d2db956e70784dfce8a14058b5cab5c8316f9d76d59d20de4bc7fa05f22cfe318312b9ecd823a0d0b5cd084b809bcd615217f14e9e0ba76de8";
+  sha512.doc = "3d03a8b301c91fcc3e8221f913574b4542e0aa645d83e443d117ad0d69b7198c4780207f0a5e36f7e24f538a249097e1ac4d828e192f6dd22684e905ce9f1cb6";
+  sha512.source = "cf26f591795ce6db64ee7548c0384764c42f2eda260b5e5c1d56f7f08c54e13fef84616ea0a3bf9a9bfbf95ca139adf675eaae3047c80faf49e14d6330cb25c9";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"numberedblock" = {
+  stripPrefix = 0;
+  sha512.run = "d45a69881dee3aa3b6de69587b8c59d889fcae528c3c66f10cc14d653dbf7281e9ef4045dd2595d1a5c7305686bb0d12696bc00b672c5907dc58481a4e00d70e";
+  sha512.doc = "99443d809e77b32fafaf59b3faecbd121f038e3ce8e054304e8fdae6b145a0d19a67b5e7d003db72f06528d975c3e543a2fb9bbfbae9f48be460b1a344a0d2c8";
+  hasRunfiles = true;
+  version = "1.10";
+};
+"numberpt" = {
+  stripPrefix = 0;
+  sha512.run = "c23fc54514b98cbc31e095f6b1ff37d37eef75146a3eb14e230ee75b71f6d506f148de643ec5e890a565b544b6d05436d47033f0c00ecdccdab697336b61dbf9";
+  sha512.doc = "8b3723dbcbfa0163d7113c96ebcdc5a2262c169a94b733dc4af3bc263b119addf58042817dc8437ea5583ed93be1f3d5485ed76c2d704b20d303b5efa8bf41cf";
+  sha512.source = "967569a1ca42c00cac46f77cf2dbe61d1aebbb89d3754d69ff3beb848d174fbf544374723d33a8c4ec8b98b2c4d93f32dfd1570112a149afad934eb07bff4ef1";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"numericplots" = {
+  stripPrefix = 0;
+  sha512.run = "6b51a7c68357dced9627d3c618a167d689b573ea44c2f36de5417735f39f5b3d1034558cf188bad2da5eb25f81a2bdee3df6059b8c14879770c3b300422cf016";
+  sha512.doc = "1c9f9856ec2f8cfef61829256f1076099e6bcb79cb45e8155116d6c24feaa52f481c739593c6cc51df803fa76e8ec38b8d276e796660327a2bd1d86957896332";
+  hasRunfiles = true;
+  version = "2.0.2";
+};
+"numname" = {
+  stripPrefix = 0;
+  sha512.run = "b2859430992fa6ee99f4d96f58cabe26b0f216d5e3b512c69b4db74738d933ea8d54503a61257d304201ac3fbc2ba49e908eeca5953ccc0f0023cbbe8b3df76c";
+  sha512.doc = "41aaa9057415ad83177f416e43fde4c8c81e335b2f3c025cbc53ffe1d9d61fc05dfe33221c16f1d652837e4ab5a797f60391fb4c319339517090ad0e2ffe66bb";
+  hasRunfiles = true;
+};
+"numnameru" = {
+  stripPrefix = 0;
+  sha512.run = "c6f92a720fc5baf6f55c3bc18e22113de0f7cad8a051c2019360f5f3c64eaa450bb12d6c361c52a5a802f558ff8d2cbfaa35897682d6ad218e9adbbc788f3c57";
+  sha512.doc = "5e67f1908356e1f21e672e63a8873e46ebb36af39e55a64c174c3bc5c49057c6d19ac36523c34a7f1c1fc53346f6ddde8fd239ca88b5790ebba1eb8b7dbeb0ed";
+  hasRunfiles = true;
+};
+"numprint" = {
+  stripPrefix = 0;
+  sha512.run = "cdebfa502a461292b02186b146ad8086f46447b5d8a0292fd7943d93a39796eff1710563866506679e903b7a4d415af9a8d863fa81a62395c7bdeec2cd68e66f";
+  sha512.doc = "b821566e6fc532425c8f1b901b5613c763eb392461644850428707105626b6eb1a53784d6a693e7f9fe2aa612b72b4d5a38ddf65f22a0d022981771b2b303d04";
+  sha512.source = "d4af01527564c9818840a87d9c876ec8d8cf6e7712913ea3deae4012fd0d4f0dae19e4016fc205814620d1cf97f3c12b98f1003fc6fc81857101d2ecd90fbe83";
+  hasRunfiles = true;
+  version = "1.39";
+};
+"numspell" = {
+  stripPrefix = 0;
+  sha512.run = "bf6d58521c82638b9f9e93fd5314db075fddd4cb249d7e8fe8b605581ed19414d259eef98a4f205d497fe4b9c552427ac202c0c0b5810e81ce1bf7ea903ec3ae";
+  sha512.doc = "6f3f26985e8c656fd68fa716fcd3ffbdc890da7cd0797934351b4d128444eeff4b2f2adb05210fe45fdd627c0da22716153aa8ebaf4b5d7644235ed8b6c2b507";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"nwejm" = {
+  stripPrefix = 0;
+  sha512.run = "3f5ba2d0971207cc76735268242e4cbaeb2ef956e5157b5c52fbfa061d4467061dc351f4dc9109d45bb155e3d7c098673f212e521a5efc55a3985cf8426da923";
+  sha512.doc = "7399a838fc6cb2a5c4a403c6f46bbeb373b9deb8435cdab0a892fce147dd365598a993cfbce3b9884cb4d2549fc1b3dd330a256c351b7df2a44aafdcda5f4545";
+  sha512.source = "cdadfdae87ccd8be021ef9c73b75d284c6bc34d98acccfe8faa16539e1eda6901a0f334fe2604273fe91d2b3860ea97a9266eaff6918fefd69b2b386dc993222";
+  hasRunfiles = true;
+  version = "0.98f";
+};
+"oberdiek" = {
+  stripPrefix = 0;
+  sha512.run = "23385d64830348aed9697ab655600da776a5fbe8ad05c7d23bc2a8d3e51701efecabd27a7125fa49d2e65f2aeabb7935d21094cfed02912a2101687ca17875ca";
+  sha512.doc = "b8faa965ad60b2ebcef9f2d64bff6832734b476d8184267122798c51f8461c94c433908a10caba176a4e18ef72d2d01ecda148fc3e6a90f4cf3b9cc72ab13126";
+  sha512.source = "1f7449eeb46abfe1871d0fbf9a72c15ffb9b9861504c8cadd3606006f45a85870d18e617d4d53722d002340db80257594844a69a82024e0557604e45965750be";
+  hasRunfiles = true;
+};
+"objectz" = {
+  stripPrefix = 0;
+  sha512.run = "e98bb9208838b8e55d9fe793af3eb6439aff2809067878051a9849cf483a42e612ca7c9a43a86520e582161b1a9f575e4e7a5f4bf7bbcabbbbdb314595c58fd7";
+  sha512.doc = "afcb2681f0983c345ddcf4cd484d337461a53af27f6d5467b12a5368f6ce3974b9d54cdd77365995e7268895f4f0edbb814a4f4e61e4cee947f6ea49c8381d85";
+  sha512.source = "c2bd789d5acb1174aeb50cd3eace6ab67d0074adcdb8c00d6ec0581be096a931a5f9a666630e96abd30dda31a418eb7b9e6e0f06c3d93eecbc7a287c4a7e61b3";
+  hasRunfiles = true;
+};
+"obnov" = {
+  stripPrefix = 0;
+  sha512.run = "8adb7a1e6183576b4ed9d709b2f64cc778217602c807fce0daaa62b59786d5629fded5e7ad4824cdee90ad5333b9fff4fd47d462e38005fcd1026af8838f04ed";
+  sha512.doc = "6fca30705b614ede4e055a39b92deac91daa6e9ca0922725f29c801e58b4a1ddc7176148b03de147aa906289962a3ff45a743828c0636d7f8fa3279b88e5103a";
+  hasRunfiles = true;
+  version = "0.11";
+};
+"ocg-p" = {
+  stripPrefix = 0;
+  sha512.run = "23b0b4377ec615d8d334d09018629f524a775311c3d227b350e7dfe95c6154795d1d3e44e7e1e405d45b623ecc614892d0996631615efae2ad6f040c1c4d8dd0";
+  sha512.doc = "c51169bf3398b17f3dfd2e0aa0efb574cedf40c4739f1b4693f9282042fe9f024dd48675bdf5ec04895c49e0583ac436bfb36e12ac51ce89bc23ac587b3f92f7";
+  hasRunfiles = true;
+  version = "0.4";
+};
+"ocgx" = {
+  stripPrefix = 0;
+  sha512.run = "5e8e27f2ad058f30431a78d006869d4448fcb722c6b86a306505afc54a4e39e9136980affad1267da479bb175b8608d093ea531f85302e1c4f450ee93451ac33";
+  sha512.doc = "62dd19282c5ff9b030b1caa8a779590f46aae1bafeb4ecb90195e2e0469669c21e130408fdcf855a0a0859100d04cd7b3494ce60bc21e32ea5c3c6fc162ea69e";
+  sha512.source = "3abfd38cb39915bb6a1a5610c5d760174cf0caa7de99b8f975f8084f01579a2211c45ceb0912b84f9ab09d26ad091801869c11f393d1b59eacbb133dbd6b1603";
+  hasRunfiles = true;
+  version = "0.5";
+};
+"ocgx2" = {
+  stripPrefix = 0;
+  sha512.run = "5d53ea7247d7ab98a415818a33fb80b4d5c3de01ddfcde361f0529d2f8adb71a09d4c1d007c9a2ddb30fc5441c68b4e8498981a54571c8d2ac617c46418e37f7";
+  sha512.doc = "f38f087a90d4cffa2569bd5186a708b41d0a01034b288c272c41c1e1755bacdf2f119721456e643a099c408a1aacb8e327f19b99c96cb74d53e6057e87e49079";
+  hasRunfiles = true;
+  version = "0.46";
+};
+"ocherokee" = {
+  stripPrefix = 0;
+  sha512.run = "9638c408e96fa861d395881d1bac87b55048a25de61561823242d78f836522205c9621f5a01bbb5ad1c8390230dac727b4fae333c22966a04ff5df1f923b5909";
+  sha512.doc = "40bb5e47b2ac627007d349c0b043f299f09321aa0d6fc11ad9f345576fd7a902be4d012d56ceede9e66c8a5972828e7b5a5646c101c08fd28fa3ab1c935f8256";
+  hasRunfiles = true;
+};
+"ocr-b" = {
+  stripPrefix = 0;
+  sha512.run = "30b658802a2a30776cef18c2ea0f1a71044b5b7819c75ec58df9acc04134cf1aaf85b97f93231d439d79c47f66d7bc57b43494aca073871ec3479ae70178fc58";
+  sha512.doc = "6d162b10b558a9db8269b2535ac9df4f76973c54d7e23dea20efb29974b839278888fceab2da85f945da483415bbbafc614c8ae4c1cea6d262d6a46dea5b69a2";
+  hasRunfiles = true;
+};
+"ocr-b-outline" = {
+  stripPrefix = 0;
+  sha512.run = "ac15acebab9c9f81f0e7786cb3222b336aae3fa4a379592d5fa231e145cfcab536e28c9078ac617bf9b8b672f6dd24b30caa998242ba1e3f4633873ae8d54609";
+  sha512.doc = "7bafe00b9c5d846f21cac682d9577ffe696eb54a55f4bee9314646451fec37d883eca7531f594a7994fa8038f7bb5c78a55dd8a8264255a6e60ff90929596d00";
+  sha512.source = "b2fa5f4561a4fe61c216e800fcb47bf99a09a62d41d62e30669753139484b58b137649248ec152f7631461c54ab4e51873f3c7a42d43ccf2db86d3cd21d3493f";
+  hasRunfiles = true;
+};
+"ocr-latex" = {
+  stripPrefix = 0;
+  sha512.run = "d6a4377f66293f8f7ad8b7f8fe3a3a3dd294a302dabb33e193921882d6681fc1c5537b8de2bb188396139bbdd33f14d4f1c20f6edf44ce680df837b250ee83b4";
+  sha512.doc = "d0de99d5cf93517f5be8627d649a1d8018766cbba44c40cfbe0f93a3b69c1a5f10b4057dd79194d148030948509a26ef45ea83208c2922cc64b10473d663d591";
+  hasRunfiles = true;
+};
+"octave" = {
+  stripPrefix = 0;
+  sha512.run = "f7063b207152ebdbd29da1e93db1b65796dabcc1eee1fcf36a470c6074b7abf239c87f5e4e765f08ec70d8ff7f2ebc8fa29a5590fa9a9d6740a5e74c0e3d719a";
+  sha512.doc = "0fc6b228fff15a4dc90973339f2b155ede7051ce69066e24d7dcdb9c9d5ee162c8d684298c8ef7fae64274dfc4f101dbca8fc38ca68200c36cf901153fc461f9";
+  hasRunfiles = true;
+};
+"octavo" = {
+  stripPrefix = 0;
+  sha512.run = "06de0f1e69c4bd8bf0a65e08515994a10ae8df83e6e8981daf70b6eeb424fd59b58808249782d76b9373d9982aee50e7c12c17e090e3697533b87d35480f94a2";
+  sha512.doc = "daa628a0c047ece5aaf15425c0123128a771a17f08fe9212856e2d63b40340dbd7a50a4ed1e19b04198637e11b530239f4280b810ee3813fc6275b78d37bd8a6";
+  sha512.source = "3632856effd0e32e8595bca0f2a1ea569261cd0d273fa200d9cd9c70908a96da613f06eb315389fe9b8e6fcdcd9db233ca8c148120625f6813848a930fdeea67";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"odsfile" = {
+  stripPrefix = 0;
+  sha512.run = "c739d1d20c26fde107649ae8aa5a3f767f59d6db3acd063264be6ffd0dcf43d2a1c87eaf9449d1e1f71a7c10cb24cbc55849255cf95fb72983e476e0cb2a8ee0";
+  sha512.doc = "9be750187f9b4476748bb1bc7440dd68437ba8d11e8198af8a1d532b09c37696aa9341dbd91198922ef2ea0a2991d44a946fe080f68fd1d6bfcf563cac50a29b";
+  hasRunfiles = true;
+  version = "0.6";
+};
+"ofs" = {
+  stripPrefix = 0;
+  sha512.run = "347dc05e8742fa09679e3f16465077b0bbf5e34a4be5a5c2e1da094ad22c0e69ff9f4abb4aacb9be2c698b27da7e169adb0c1840da3e56b277514a9f9631dd02";
+  sha512.doc = "13f7fd3ab4cb31ae521827b703cf4c3a0c796b6a33f46b2a24a2a8c488e92d6039a9b136440b00b6a0aba14a2dbad832b777cd5a3aa120ccfc4888ee147954e7";
+  hasRunfiles = true;
+};
+"ogham" = {
+  stripPrefix = 0;
+  sha512.run = "fe651bcbdb0e8f9ded07fdc412f1273cc8d473894f06af69ae65ac4c6895daba3f61571eac9a49d16de043ae6ed6e03ea386f11dd6b395347d98784bece4c8b1";
+  sha512.doc = "6d406cd0a2ba68946be8d2eb148a6c9286a164ae701f66802ecabe6661807ea54eba175617e00920d37a88dee376c1bfcecef6184320ef1790716d53e5a07871";
+  hasRunfiles = true;
+};
+"oinuit" = {
+  stripPrefix = 0;
+  sha512.run = "4d6b72ce539766a3453f7edb24c243a2a495f3916ee9fd650917c510a0e8fe36e12399843c1de3dc0b0de704bf5362ea20e9bd0d6c3100e659c5641395d658dc";
+  sha512.doc = "dfb7275002731695086aa8733a543ca1eaa207bc57cd0b324666940ab932cd9301cb1c0b0bbfa4df36278ac8e289ac1be78a2e0a58ec656c470ff4b841a70803";
+  sha512.source = "0d81c9803b9b45b20c096ab00d0c0e5ca26e71d5af463e511660c5bbd28b5b962afe243f21418883575b5d40f503bada65b5c34ba48486aa74a6f9ddcbd48680";
+  hasRunfiles = true;
+};
+"old-arrows" = {
+  stripPrefix = 0;
+  sha512.run = "2b67317d41349c6d601d8ddcba6ba58cf503756f5bb2f4343c1447cbe4e24c8949a4de58e7cf3863a730bfa809dd09f5f1ce9944e3dc5d4de104e4817d6add17";
+  sha512.doc = "d142a95119386f85d1e6ff0f6a24bcf09b9bf7ec83a581ca43be67376cd4a44453d090e4eedf97bcba1026827eff29f97add3a6ed676833b02b718da4811a3ef";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"oldlatin" = {
+  stripPrefix = 0;
+  sha512.run = "02ba84762eccf816178cc652d7f8d8f7d962db7d5386de4a8274dbc9524fd7a212116de0d7a53886bd5b431ddb8a5cd8ffca7defe3174cbb50f417172d2963f2";
+  sha512.doc = "1ed3c1640420272b33178c62aaf4c0d538f5f1ffc5350c377788210128c74eef4e6023fa20b3d9f214f518079e8a8c3753c74d30084f5a71a994dd4b5534635e";
+  hasRunfiles = true;
+  version = "1.00";
+};
+"oldstandard" = {
+  stripPrefix = 0;
+  sha512.run = "b441e51ef7ebbdd9868e4161f554d6ddffeee852b7cce7f5ab754bd1d0d27fe7279c19b3ae12ae345211f5db6fbd78dda2c4519d50fe72146fe57b9477bb7f31";
+  sha512.doc = "7f7f421f3bf3764dae54289a2c81c0f0b1aa0611a203e3110d9f62bf9f162ba2ad5271ab9374d326be9aae1ea4c36b7205ea776c6bbf9d2aa5eaf392caee1c81";
+  hasRunfiles = true;
+  version = "2.4a";
+};
+"oldstyle" = {
+  stripPrefix = 0;
+  sha512.run = "968ff7b641f6ae6e8aaf43d1ae9617710b0bfed9894dad135cfd11050eef1c35c48d589d58d3a94e34f93c22d85c58b047ce8d0bbf0ae5c2e645de72e327f9cb";
+  sha512.doc = "79e2c2d155bab57456cf7d2ec08930d54e538a830c1e7fb12c0731b246b917840d0ba06d31939ca97e7a20e53a061caa5a5a3beb139fc1a05f32dd9497a37ca7";
+  sha512.source = "a9200c32d19045cd56121a64727c1465ef16f48269e4b9bc6957106451694707fc0fc3db253e0db425fa8396b32560b5922f8556fafdeb68ad129d90f027d944";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"olsak-misc" = {
+  stripPrefix = 0;
+  sha512.run = "17f360186b44fbeca93ebbe6bb99c51b1815bf376272de824e8a62474e59a1cecc09757639d0542270aa1f1c84ad8042f5859032a141f353b112ffeb8f5ba866";
+  sha512.doc = "da6afafbde8ece27fc082b15ad29fdf53ae08ec8674f138f1a45afd39a1cc0a906287390986406b4c5aaabc009aee1843560f078fcac1aad2d7739ecf3e16a68";
+  hasRunfiles = true;
+  version = "May_2019";
+};
+"omega" = {
+  stripPrefix = 0;
+  sha512.run = "bd07f654ad56219136e2f9e7612b87892bf8c6d0c8f2e41434a7fabb8b159bc43f79444301383adf560f1985f64e639dd496dad6d3ea97ccbd85fcee4d7a36e0";
+  sha512.doc = "31eb2aa643ec37d68d902f4de7be391e7da3af61bde93e78beb1e6df1c6367fcfe00f88e29c8cc878b9cd40f2e3a45f9e46bf24ca3a5608aeae09be491130fef";
+  hasRunfiles = true;
+};
+"omegaware" = {
+  sha512.run = "da2ea42b840a49e8213bc4b1cbf30d042ec718a916fbc58a6a5db4bb352cba8a669a788530e54bc50c4918a5f106dea69f791c6f30adfb570fec8f8ae80096a0";
+  sha512.doc = "5eef2e7061a6b44086cb8c9a2e4230db2abbf7b1d9cea678264900f9b2c8da056dda07db004b26031ec6d79192b11ce0cb139a3080dd84421bd527cb92f144a3";
+};
+"onedown" = {
+  stripPrefix = 0;
+  sha512.run = "e19fb9cccc481df8609b32fe79de5fcf5f963c0908e9ef7316b9d363d66f1e39bc3fcf85df9ca3f280d948b8ed6d59bcd646a1a11647c366a96764f4271153a4";
+  sha512.doc = "89c1065b82d603f3ad337519fc92866686457463152f06fd1c9e2aacc43a6d49cf28c9c2bed11af67d623ec945dfd59269baa5b63a5f3c15bdba682c0fa12894";
+  sha512.source = "6ef509399c88093917715fc32b725d3ee671be045a8ef70ae13a89345a9efd0bdf53698a2b86abbedacc1a4d21e141a363b31b53f70bd9a9c26e11333b698922";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"onlyamsmath" = {
+  stripPrefix = 0;
+  sha512.run = "5452647ee6eb939c292457ee26cb3639560eb55893e44ebbbeaf27ef1c2ed30346d91d733422e65f6780af7c434cf02ac740d722612f888fca8dc45538d81303";
+  sha512.doc = "154273f8589b0d8bfa0ed46cfb297d44000eaa750e8d34b1a7aad9f7b26cb19423d7f7ba362e3739cb7d22b2aa077fa44e59d9c46a52db5a82a57659e86a6dcf";
+  sha512.source = "2a3568cde9264ed3f074ad47fb5afa22f4c4835c7e0eb53699f691bf4c52b829c31724e56b9bbc84bffab76d425d9fb72b2bbb49ce14ff7cff0d57f538218783";
+  hasRunfiles = true;
+  version = "0.20";
+};
+"onrannual" = {
+  stripPrefix = 0;
+  sha512.run = "0c9f717c54d70ad24a1d3b08a6bd44a4e96e932af4d78ba2895f40e16ae5e5b841cd421b71ff3e90490c13e0843d48b8a28efd49b33ee3f74ef9b6476c88f8ae";
+  sha512.doc = "4a4f46965a0de8ca99585d4af31aa2f0f94e51328c8cf1ed29768bb9e2f8cb7e14d63315a008a1d0446d7496ce4f8abb224946277ddf47223808f8f2277cfb64";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"opcit" = {
+  stripPrefix = 0;
+  sha512.run = "4514d83e3554810da7fec3cc165c89a87a4aef04866755a5b42861b484ffea81bfff694609d18fb5e3bbdacc3723cbed96305ba0c09bc48af92456cef3b7b5a5";
+  sha512.doc = "6c4e48aa8ea0dd464d7d2902513b1640437518661e9d7237b958b95ad091053b41c6c5ed4407f9c9d87ff5f0ce0b2bda3a99947d3bb0cf70352d5737419e22aa";
+  sha512.source = "031596b3dceeda2782e355e3b19c23a1a31f71295d9ac763055a2ba07eb550a501c9672cbd63929984a3c65108e6084ff6a46fb03e885510e9d696df220b1e70";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"opensans" = {
+  stripPrefix = 0;
+  sha512.run = "892cf5c5f2ce29049a8a836a94e64981bb51a9a7b18bd3d003cf9f3a233c0da0fa219fb24ce5ac07e7cfc2b94862bf1f201f62a91995ea7f45e3a9a657a875ab";
+  sha512.doc = "e8c005fe3c22ca88ffa9f313bd1735dc879167abb17e9c3ba1ad60d609fd95c61377fffbcac15cb5fe2f3e855765b0981c7a602235c3ba5eaceb759f3c92236c";
+  hasRunfiles = true;
+  version = "2.2";
+};
+"oplotsymbl" = {
+  stripPrefix = 0;
+  sha512.run = "bb894b28fd62f95807bf00856aa2250bbe58b0c1def385d6528b50ba925410ff177ebef97279338bff7ab70db012ba916edad067584989f86797b1fbd7e21863";
+  sha512.doc = "cd4ceb0b923da7c0f56817602eca672442d03f628440c8beb82c953cf73a9d1bf8e24939a3ba4c813c99b7a2aa98adede0c98b4678b06fffd3f0bdfe8fae52ad";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"opteng" = {
+  stripPrefix = 0;
+  sha512.run = "1af8edfbde5ac2abae770765a437bb42d5852877438d283d8021493c621e94d09bd62d9012556024ddecbeaddd838b37ae9abd0486d73e2698956ef49ab585e9";
+  sha512.doc = "b1dc3f9f107e1e8313bfa25b843a4959522eec2e6bc886e8b6271c2175258d7108c824bcbed8d243f0e51b70851e68246fd572bcf6afa6aecdeb86a946bc247e";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"optidef" = {
+  stripPrefix = 0;
+  sha512.run = "dfd704e585df8d01b279e67ea3a2baba6e86ddb9f38bc9747e370580a5f218e7ae4446d2429fc6bffc605ef0ea56c8077a8f41f3ca6a8e857df29d0e3f328143";
+  sha512.doc = "3b80346a15a6e1d7209c3584d4fc9de944c55867ee7f21b018300b87615c0ff4fbe290a8683088c0e81f0eb20cf514f13fba0eb141808d8e5f5986c75bc9546d";
+  hasRunfiles = true;
+  version = "3.1";
+};
+"optional" = {
+  stripPrefix = 0;
+  sha512.run = "3f6d031b4bf863a339a80c3a05b101393f88dcefb67c61a67e01d9647e74def1fbf30f3d018158a83c8a171b875959bf57d7a3e90dc724c32868f9aafcd5cabd";
+  sha512.doc = "d975e4f1b31e2335e55a41b317096be36161fc36fd589255a461772eb701376ce3fe714d727c4de9663ed8e4300bf0b570855b6b3ccb6b55fccd56206ac69692";
+  hasRunfiles = true;
+  version = "2.2b";
+};
+"options" = {
+  stripPrefix = 0;
+  sha512.run = "3cdcd07f3c279a601da49a843169f0cb44aea573ac6c1c67a347712e5a087df4b21c6481168407ac6383e8fd5cdc511ea29fd7ec944edd2d514ac88b560633a3";
+  sha512.doc = "f23bc3575d6c93d056c752c63bb39e3ef9c92de1a90177e204e4d6a1fd90ce8c9afb36e727ac8ce827a59dad96a3b236e5c3c09af081160113cee1b529bc1973";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"ordinalpt" = {
+  stripPrefix = 0;
+  sha512.run = "c494aee642949d56d8fe4aa28c18e38faf5f66ca8d9f1990419b7197ba6d8547004bb11c3d7b1d63cfcb7414b5c618af81425e4fd61fcf114dc36f9b7fcfb039";
+  sha512.doc = "dbcad860dd1fcff2e44f568caac9d3d60f4e9ac2312c672b9e9b46f9b31a2498a7e92bd646df8c622b024aefa8f2ecdc9c24e3f95f72f30f1e9b213d6bc4a53b";
+  sha512.source = "c4264de0f61c1d2abb6785f2a19e76578a154bcdb5314a3016c3a8bf700725294847a482f33095bf7173885e765db2afb4a3a34de3fdeb1d0c2a213c1e60b614";
+  hasRunfiles = true;
+  version = "2.1";
+};
+"orkhun" = {
+  stripPrefix = 0;
+  sha512.run = "c1e52283e54e4de7caccfe605438e2775ebacc9c3fd21c143e29d7966c591ccc3fba77019e4f9ed9850762a0c80475edb6c9142d7ac2e3ba54007f3dac8b056f";
+  sha512.doc = "ad0c15ca89057f2ff7d43a1bb8ea4513973978e1316e661a0e32ad8fb8005257a634954e85990958ba22360d29eea2d6ea9d87049435416616349874617d9dd0";
+  hasRunfiles = true;
+};
+"oscola" = {
+  stripPrefix = 0;
+  sha512.run = "849e2daf4a7a48c6a2371b01392726c28d55d4da7ab7fdecdba545d9a9f8a7c2b026e856cdb3ff1104c1872584d6f180d5ee3e272c8b2adc3325a846a8c0478f";
+  sha512.doc = "3d38a95beb8d399e33d6c9e1674410f14d7941fcd83524b658373d06c897e8bc5474eaf32063077b4a9ee9e5db4055bdf908ab8574b74e44b04dc1977714c1e7";
+  hasRunfiles = true;
+  version = "1.6";
+};
+"ot-tableau" = {
+  stripPrefix = 0;
+  sha512.run = "f3240c0688276ab6537201b20d6eee422a795d5d994c6bc8eab3f275a037e7adcec7e54c9500a3a5a6d2fe237b44b0b350a7ce6f72c7012bb48a69c9c43f2fca";
+  sha512.doc = "396256f0ce1bda04fe1c84cb45928d82651b4f6363928e33bf092737ee6ab224f473567aa5432fa00a8e4cfd9b5a3f7e7ad8448090afaaaf89f97b33ff695876";
+  hasRunfiles = true;
+};
+"othello" = {
+  stripPrefix = 0;
+  sha512.run = "cddd446d5b63ed22ebc4e561e43fa8b4b1ab2cdb1ecc45ab98e60d6799646845a9d432aa45248e7cf70bfc4aea10cd42960a8846479df46a7cd701f792b4ca74";
+  sha512.doc = "8ba85bf32ff739e4588512c2b33bf242b00e3f38a7ddb1b3f5582cd19b925e1adf52b4243857f1ef4b9d8198e8dc80a9aff8a63a7b3ff926978dc7e5c81262de";
+  hasRunfiles = true;
+};
+"othelloboard" = {
+  stripPrefix = 0;
+  sha512.run = "c975c73b8737f008b7f31af86e6c8a89de3f907c6fe782f075b04819bd936da3853a8ecf15935c04970777a4873b5baa38f9c675cc8943190df84ddc511dedba";
+  sha512.doc = "af025805142a845bde22a5fe095fb96cd533d69c50bfcea8716dd7d61fc95c41727c16127c2f2b60c5bf2b55870d698db54d307c2b025aff3e251419ed58a3ce";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"otibet" = {
+  stripPrefix = 0;
+  sha512.run = "8fdc06f22bc9d25b61cb7b3b151919b7d2d6cf3d78f3cfe5a11284d9246acb858410ccab56996cd521eb98518be9c232a4c8e0f8ebbe52d7e93c510e3a0ac070";
+  sha512.doc = "96f9d64c8f668f67afe20dad97d1cd3cfec19df3300204831fbfe0d245c1e15d8d0cea48bb94fb002cfa18db45d3ade730848908b0d77b867fff7557b0fb826f";
+  sha512.source = "4b51b49e3d3a802a3a19aea604a63f1e9503f7d9d86c81200dc5e2f2051b06e184add9292321f4895905a07595de6771eeda2463ae0c1b096a98f2d2fd210721";
+  hasRunfiles = true;
+};
+"oubraces" = {
+  stripPrefix = 0;
+  sha512.run = "8a0a6e0648cc3dd9a342a960dec6512fc9153a083c8fc74eb08c4e0f46d091e5f2c71bdb69bae80fc13a857175ec6bab4b18cc81a0963d794028f4faedd0def3";
+  sha512.doc = "c97f91df77f64d824605c56669136585b94d95031ed5a4a67f3404c54b2c96f32bafaecc06d114755d0e65c3fcd0379d63f28f94aa32ccb8d23730f5f3eaf63c";
+  hasRunfiles = true;
+};
+"outline" = {
+  stripPrefix = 0;
+  sha512.run = "ccfb49c4e035f0d246f00aae56efa9d6570ad3997c44e2bf70588ce67a0bc3fb7bccff19b65629fb27158b0156a9802d97ea1f8edf6f4494f644f40df5d97118";
+  sha512.doc = "301ad12a8f964a7dab05b208649c74ad39a64264f113963ebf36dbf83c90ed8ed042d8cc15f626f6081bd41f51d66dec592eaadabec32c65a0d67d15e8ead37a";
+  hasRunfiles = true;
+};
+"outliner" = {
+  stripPrefix = 0;
+  sha512.run = "9251cb4154042c7620f545b2fb305cb996af9ff51c44259287a1f5ec490cd83bfb82321c4d8512ca2d22e5d2a7409ac5dad9f7a7d51f38a76bfe77faf2ca4af2";
+  sha512.doc = "024095493b4b7301597798285afbdaca9fad291dffec9707b82da9f23b1ee0585345e4f201d6b322a1a65ceb6f703ab5430d14973c3fb25970b04d2785ebb9d2";
+  hasRunfiles = true;
+  version = "0.94";
+};
+"outlines" = {
+  stripPrefix = 0;
+  sha512.run = "1611e4ba3b8fe21db83a542da9d7e0c3431330bc24e3733d28c8c5b3172ce3e4b46ff5b7dda41f95b4edb6502236f6d558608487ac47f8726420a2afafed75db";
+  sha512.doc = "bdc507a3f3cb966d03df37d9385145811c5750bce6341935231ae987b0a30dd65424a1bbb772920586721e25711caa429cd6d8b8149088f753f36b9dd69ddaac";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"outlining" = {
+  stripPrefix = 0;
+  sha512.run = "0d2b7dbe710d1ccd54a70cfbf6464a3ee5ad0fab8ccfa61306d5d5d83252c0f3b64f1caba6b5e8e75f7e6237fdfc675981acb67fbb730282978071e76e92ee40";
+  sha512.doc = "c083046671d159fc118f25e56ba34d04f8011e0c49169920fe679ffcb78d93e52a6f8bb5bcfb34c47f0b23f73579519c431976229ef143a31ab059cde6dd64ce";
+  sha512.source = "8a2f640df3572a5cb8336342b49035ad97513ac97eb87483a73c0d41ef4b98e2ec39b994f9a7005c7c6cdc2564aa55fdd8cc0e34bd79b189882df34ab10e6cb0";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"overlays" = {
+  stripPrefix = 0;
+  sha512.run = "6ee154baa88428dfa149de77fa12e9d37ba6e5dda7c54f5e7f28b9d274be7457ae9a71484f3cc588a0797d4209bdef37a15de9e3175f0708711a54a845274084";
+  sha512.doc = "3e9962fb56116a4cfbaf0e54e95a3129aa2414be617a12cda9b0d6199afa24021ab9fb1f8d5ddbad8edd7af915c1b80ee42504ab7873385a391916c96fefd6c8";
+  hasRunfiles = true;
+  version = "2.10";
+};
+"overlock" = {
+  stripPrefix = 0;
+  sha512.run = "449caa738b2af059871e8142b6257a65bcf02001461c64deb4e785cf1cec6406ad3d13f9b39bb0c06fde690369cf44c64f9dbc869a3269eaa1161fd840334eb3";
+  sha512.doc = "5083d926ee34f7df8ac55111fe503d31589ff319725aba1a726500c3ad935974a29c68d677035a9b82beb249295513d4e3f70310cf078d376f084e354de81d94";
+  hasRunfiles = true;
+};
+"overpic" = {
+  stripPrefix = 0;
+  sha512.run = "2f5d8f46c4997a5eca5f82901727dc1ed790a6a2d55cd7aac45605d444191dd022c22bb7e120fd45f318fc0949dcde07e154c81f4e0c0bc3b9720cc99024dddf";
+  sha512.doc = "a4b721ebdfd6fc38559407c902599be2599c4887a28fabb976ba0525ab8d6e17ab9fd5470b11f1b70618365182012152f5bfd0d9308395db98f868addc8cee73";
+  sha512.source = "58ba7aaa6fab2bdcd55fa3cfffc0c18ffc029bf1fd0caa122f61fa6a67ff9e9dae0be3db916705fdd60dec84f7a14f89583d0400dfcd979df59cc463357fbabd";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"pacioli" = {
+  stripPrefix = 0;
+  sha512.run = "a82b391630b5f572d8ded331ae98f480fb0cf7f3eaefdcab3100bc839e2b026f012320e334e82d04e01a27657f36927a4d1570086899ad637f8c47ddd0f22b2f";
+  sha512.doc = "fa911ec25c0d6cfa62a2d5396aedf893b9078604611ae5d34b06f24740f65fd62895e4d53a10931071d19ddd24244e3c7ee9893f4eff03efd0920fd1c1626610";
+  sha512.source = "d9347b85cd548f5861b83ef2f213760805c3cb76fe0313f02935bf28baae72caf2d548459aed2acb7ad5061e49c6e6694e46e88bccc1164e83f63a6f97045d04";
+  hasRunfiles = true;
+};
+"padauk" = {
+  stripPrefix = 0;
+  sha512.run = "fec57c3e7bd299671ae8d6489723a4d33c54b11223f5f37f3f3b3cc148fcbb6d9a9aa46587ab83e414221cde3a7d0e4493877d90e9536952d9069a4cec7c758f";
+  sha512.doc = "ffa9d45c971b7fe4fbc55644be4093268f842e13a2ffb1713be401cc88934dae86f012741951f30580a94a57f35b85cac9525869e0abca5601278d48a19782c0";
+  hasRunfiles = true;
+  version = "3.002";
+};
+"padcount" = {
+  stripPrefix = 0;
+  sha512.run = "9378dbaa1d3a569a3cb4bd70fa1b5a6dcdb0fe089d3a2c3eecef4cfdb776607f42b7fb018461c00781f8b022dd962e790146297f5df29889db13794e25c1cbb0";
+  sha512.doc = "68ffec3a80473b3b2899ae262fcbca47198c61bf1363b9c167986cc95214c778fdd49ed65e8fda8f15d48d3d9941ac54c6660f28729dda176123fa1b3f7e8631";
+  sha512.source = "088fd314ec5717f6b40f66762af47a32eb01f40259948945b48bfde12923474cbf0a7aa8389b4ea83127915782bffab4d9cc0be40d2f7d752dca734b0fc0b62e";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"pagecolor" = {
+  stripPrefix = 0;
+  sha512.run = "6df1ddc270fa99a658d2ffe94b29e31e54e665b3c3c41c8c1f992adb8453f5bb6b59356c2ef049ac4679f4e996a6888911e5c8c5d92500df0a3f53d5a11f5fb1";
+  sha512.doc = "c63adfeddcd00a7d738fd74c047b034d4a88264185d519d4891a429b82c62f20dc28196e1657e1c7c1dd3fa8a570d5a66e6af3aed5c78ca851ec40153f2396e3";
+  sha512.source = "2cb9a6c424ec6b1a649a592a51d4c06f67685042da8cba22ac088ca962ecbd2b93806a962409ea94f28e9183cebc02d7e2b9ee298d645a330fab8722534ecebc";
+  hasRunfiles = true;
+  version = "1.0i";
+};
+"pagecont" = {
+  stripPrefix = 0;
+  sha512.run = "53b0f558c6198181349a66b39f0b54108a931279766882bfb713390e79ad0f62218ed841416e143c6909161ffec548592ffccb337505eba61f643a05d49f1fa6";
+  sha512.doc = "634110b7cde040e5ae7be237abd6817055f7886d9fed5ce1a00b5ea93e9bc885f0c15398c280abe8472e27ce89aade2a827e66fc041081c8d31cdaf7755119bc";
+  sha512.source = "86417ff0f398efbf5b6abf2272df933734724a7d94f93d0a94704c393e195ca0a5828698d4d91527fe1bb0d70a26af49998513f0e9d80e1b8966239555a3dfab";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"pagenote" = {
+  stripPrefix = 0;
+  sha512.run = "f1db9829d909add12458cd17771136ef642b5655b03779c8b2fa46cf25afcb8843d91de331737f8f6537e7afc5f2dfd275926e6f4502c8022b0472d61b433b1e";
+  sha512.doc = "b57cbcef6a6ecec75b351f6a3dc09f0422873155a8f90819dc4dd2caf60cd562a21de7ce62b241259c2f0dc3889c0deceb25c00f7f3d8764a90f5861c8e8c1ee";
+  sha512.source = "3a7f4cdfa5839de85f476c3f059847ba05f7e5eb10ef4f5d951ac4e07a33091c4ccda5570dea1bf47fbc7f15272ca411afd68197fba56c9ec133d163671483db";
+  hasRunfiles = true;
+  version = "1.1a";
+};
+"pagerange" = {
+  stripPrefix = 0;
+  sha512.run = "9216d443f44deba5cfc4ce04174031cae55f2adffa0f3400bf3f315c3b9003d1ee015fb6df69cb2cba23eb117f2ed191b7033ad46a51bc718260a44778783c47";
+  sha512.doc = "862ed02746c6d91a2b8d9e19bb2e943e251dd18f0d94562bce9cc9e8ad603f7554e77ccfa2485b9a4eb7a2d6d5185756985f104d870e95823a4b33072f24bc9b";
+  hasRunfiles = true;
+  version = "0.5";
+};
+"pageslts" = {
+  stripPrefix = 0;
+  sha512.run = "7db146bce45ee5ceeec5904e8f3ed6efe0010885b657b0f74546644c3ce2a018deafa95a11390da3d8a62eef16508b82c3efa9d02ac1662cbed18e905cf869b5";
+  sha512.doc = "58fe6250af4ecdd6d62c231778c89e0b049995feface3af66dc73b920f4dcdca8838d3274a7648caf2b38746fbdaaddd1b4f87577c77dabad2096e9c8b681619";
+  sha512.source = "99db221ae4c7795ca4093b7708aac14fededf3c55aaf314433602906d8b0f3d9c074fc0b8cc6807474e81e510f35bca486db3aa525e95a5486c7ff379cdd5e18";
+  hasRunfiles = true;
+  version = "1.2f";
+};
+"palatino" = {
+  stripPrefix = 0;
+  sha512.run = "f21fdeb0423853294f52427bbe1477bbfd49b1a6255bed5f561dfa2156cf8309b2f71d2c09ad74bd64bc1fd69fc73816e3d84e72d975db5925d4c3c4db6fe8ca";
+  hasRunfiles = true;
+};
+"paper" = {
+  stripPrefix = 0;
+  sha512.run = "484964a6da8fffb001e29b471f7c9fa52d2f1aecf66da8f9365376b987c79e8e39cdede0f0d61977381aea78f9e6429216c0cc2eaa67a831e4f1ace29e2c9503";
+  sha512.doc = "2fd771d5f1035cb48c0a4de89f1174a988b3b8254caf535ca75633efe2ddc0483d095a720a9dae93aa7e832b0d4e63bc49cbdcd801e4190209f56bb0632c5aa6";
+  sha512.source = "74ad404eaa44a523f97d245d6ccada1546d9c991bfc64186ab1ee7f6efdecddf87897d7e64136c0285e4d6541f1bf164173efb020adc113893d8e9309a687967";
+  hasRunfiles = true;
+  version = "1.0l";
+};
+"papercdcase" = {
+  stripPrefix = 0;
+  sha512.run = "8f2c923e72c7f16b394222ad86bc3f07304e6c39965473482c708b15574b0475af6eb6aaa085b94be6b0ddcce3324cd5639a8317caad55844998868ff18f0e73";
+  sha512.doc = "01d43ccf0be5caa114f1b406e5cd4c1f8f44f06ea92e6d3fc999a5bc71e911d6c99dbcb8a1b9c49105b978d0d36e6ad2642f73446e3ba6a55edb11f82f40638a";
+  sha512.source = "7bce5742cc7504e789011ec877fc2a934300b0edfa2e6b8f89d625184e5dd0c8cc6116aae7701c313e133d8669522c1414a2a16d11e7e6eec0d1c7112fc44d56";
+  hasRunfiles = true;
+};
+"papermas" = {
+  stripPrefix = 0;
+  sha512.run = "b5ef2975638a8eb48e7aa9fee72024eaf5695ee3133a35a4326461de03e04b750ac90e0874de232176435e0855807aaa074e6555f3368fee55fcaf61e6abb552";
+  sha512.doc = "2d0a43fd05efe6c96a7852f35c560b77b9461e005432f972a9896184831fb81f72946956f3aefd115ca0f5fbbf684ab615d50a7ab98a5e09a190b72a08e56793";
+  sha512.source = "2db3f6acb382f73ac6d220a4ec378026673ab16d54cb02a93926d30eeb8d5377d5329869cdfb3563915bb93253d64a3741a3498e197958e93929e8651f33cb02";
+  hasRunfiles = true;
+  version = "1.0h";
+};
+"papertex" = {
+  stripPrefix = 0;
+  sha512.run = "489718b18bff9055917d9aa1329c34218282c2dec743c4a136625b6c39dc5102bc85d7da6dfb5e2b6a0f4bfe5a8fe27341ba9c7cd205cb8435ed3bc81a7a5c1c";
+  sha512.doc = "aa36046e89f7e4486020a62dc8cb10f0a680247a3148149831153400a4ee935d3120525de3fbf29eac5c6cd58b655c1a2dcc2c4a8baf7d849a40f842d3b895fa";
+  sha512.source = "9afa6d8e8d23108266bae48e78caedc5bb20c06eb15e3de8969a2e8bfaea880901a184fa8f2409e6d7ec0a4341105151049e1763fa4f4cdce8150e6bb3a52174";
+  hasRunfiles = true;
+  version = "1.2b";
+};
+"paracol" = {
+  stripPrefix = 0;
+  sha512.run = "ff7f60734dcf6d1db89a0b80747b31eb95bb28ac90ea5d83546feb08389fe890c6e3b4c44995b115d3e9d446823e81e27bf08337ae2d236a5a89c2c79258f741";
+  sha512.doc = "a5711614d817193cf34cce405fc57f00dc17f3757b8c945dd174ba03453943c22e9c66b19a0f83444abd61f486e5df10246556e59d281f10f95452ad1931fb49";
+  sha512.source = "cfa0bb83368dc27a7d71fb5e8772aa1c0ab69f597b2b00630fa1a95cf448684e6b59d46bd6dbe011953c51c0195b5cd0981a2df8d7d5fb951aecdee0a9ed0576";
+  hasRunfiles = true;
+  version = "1.35";
+};
+"parades" = {
+  stripPrefix = 0;
+  sha512.run = "6eda005756083b1ca0c1ee09efe44830874d8090c25aaddb8d6631284a057130d2f03ca7f88b460fbeb7bea90ad31da8242028a70b07f6a66bfb978cd7390e26";
+  sha512.doc = "eca6b66f0bb424730177498fd6310718a78ffdd031961f8de877bd6f9d027430143c19310b158abf26f92b4280016cdac696f423b493aa49d60b06cefc546688";
+  hasRunfiles = true;
+};
+"paralist" = {
+  stripPrefix = 0;
+  sha512.run = "e05bbd65ae7146515dd5dcc6ad7e40fc8437fae29ee26861aa9c2b4b6da0015fc00974f0a2328a72e6487660794a822bb64b35ea3282eac980c3e7fd23f4b899";
+  sha512.doc = "5f103c629d1c0bb94aaf6c86f7baefe3e99a854e764306cd21e256011ae5ed95601416e33677f73f6471bf4ce2a375b6dc98b8aaf35b8dab1c41ca91b7ec3ec5";
+  sha512.source = "1cb11b8e7792df9be259e1a5ef3b2efdc85b5454265deb66e2a527c4696d7e9297e2022d5191b1d666996f1be1f638517ce4441d0bb696f6b33ae490f4138e78";
+  hasRunfiles = true;
+  version = "2.7";
+};
+"parallel" = {
+  stripPrefix = 0;
+  sha512.run = "975bb869ea0df9236f0e86cbfe880e9bd59ab2d6aeb98f0a399f5bfc7e4367b3f14eb64e707e4e7ba8bd3e0ee641765b9ddfd79ee1abac61f96414f215fa5cbf";
+  sha512.doc = "ab4c283176cf1fd3d524151cc647c1da360a1772e57b282a91007edb1269d6bade379775d0efe6731fee18b3f3bc02292057d67795475a291a4dadc748d5b185";
+  sha512.source = "6dde2ae1a2ee65decf5c1ba547d2683948d58a7955b75e5a3bd74d0b6705e7c6a75f2fe4dbed01562211b670d455a0360d0fff3ac0f24e3e77b4bb01a65577b5";
+  hasRunfiles = true;
+};
+"paratype" = {
+  stripPrefix = 0;
+  sha512.run = "f7c3089b516e40d9d5534a1d25ba104623f37c3d2b77b6545b07034114644025873c0317f4a0bd5b54c6471853f5e4c7847176b42a6bdae29a6efea555fd7ae7";
+  sha512.doc = "5d11fcd66eb57909bdc56416f53c060cd248731cea02bbeee232d10cbcd2e10753a66ad7347212337b6b110e94a82970f98b1486ce21a6ce61fffa50135a6b6f";
+  hasRunfiles = true;
+};
+"paresse" = {
+  stripPrefix = 0;
+  sha512.run = "92c265c8f34f24ea37a478926c127b203b9ddd143015875869745ea1633cc1458cfbbf4129f24ff141e91724f9bbeb1384912ee753ab7a26336c8470897430c3";
+  sha512.doc = "ac71db33fbc694555438441de4d03d5277c598f12a7a59f8d0b4df05c39bb29571691c3165dfe121deebaa4bfb90fa5e7b1a2460d8731bbaa71502ee79b37a00";
+  sha512.source = "4c442470bc63c0cf2df221e02c890aeb1375c51e02753618ba51f13f20e054769e700b6d226c8d2690f8b49d86bc0e0306418ed741c44c4bc7127986b6941935";
+  hasRunfiles = true;
+  version = "4.1";
+};
+"parnotes" = {
+  stripPrefix = 0;
+  sha512.run = "798ac362fa4b67dacfe9b744163555d3c25c9e4487c5d2e2fa47be12d8d4b41bf89cb24a04f6434c804e9ca1f45e6d1f22ec234ac04596d5e1905589cf1eb558";
+  sha512.doc = "e9728eb1025e80f41ca07632cc2625ee670a61ebe06d003585645e6aed183087df460a1dea4f3a8b17013af6fb3e974a95b33d848d2502435a37b1aa881ce833";
+  hasRunfiles = true;
+  version = "3b";
+};
+"parrun" = {
+  stripPrefix = 0;
+  sha512.run = "1a09e6dbde9c24d88e21fffe24ead7ee7567a2c7bccd2ef33e49eb1bc8eff2befb3828a87616872f63d1d8eeba21814cefc8bbe756b17f887558449aaccb1668";
+  sha512.doc = "cf284387780c9b2f4a79ebdd781388525aeb2a03ad9d85048061a6c43728bb6f2f4fc840ebb499a44a3fdf612ff4a20f36c17a377f959be813b4ee4d12288fb7";
+  sha512.source = "9a4fb32c53f5bd2f6f79992b4ce076ab211c24e2c0f4ca2665c903b2e3d5268b5615bb5e9c8107d1d44df6a9e50a9f942f61cbb1fd05a388738449e4b312f306";
+  hasRunfiles = true;
+};
+"parselines" = {
+  stripPrefix = 0;
+  sha512.run = "81d18bfa1f70157ca04383a2f6e4cf228f23d878a9e157e79ea0bbbb743090046f5058ff0731ac42f881f5cef13063fa0ff2fa9b80992b334e02dd7f2a1a33d2";
+  sha512.doc = "b6dfad3ceac162f9c122c2b18fa168469cb6c4befce1c4b2c8f003507ff4b2aed30e6728bf29f04545a080efada1fd98a9c8c064f4ac1eea521fb486624e60b2";
+  sha512.source = "454fd4c9032ff1075237294f346d55fdd0926c316813c3eaa487e1649db569455f89a364b9688d024567a15edfd16c397bb1ab76652b46112791874bae5db36f";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"parskip" = {
+  stripPrefix = 0;
+  sha512.run = "7a157e443317d05b31cdbb34a07e69b9496116d52aedbd021c710751fcf1f5db4565803e26a824166d283e043ba52a865638e739a6e81dd48623cd7230e86731";
+  sha512.doc = "fc4484eb846ea726e69e890f5ef3e0f64479739aae3929f663935a6b26597fa706a34e1e2eb86284c79dce2bbc7a9c13f2d7e8285d7bb9a0148eab1a150aa584";
+  sha512.source = "41c3dbec891e1b6589f9d8cc2f54622df45cc56fa5d8ccce6e7b57c974ce6499477ce589b43dfd2b572cc636cbd850ff25e944e285faa0ea5d16487f5a7f3a8f";
+  hasRunfiles = true;
+  version = "2.0c";
+};
+"pas-cours" = {
+  stripPrefix = 0;
+  sha512.run = "0110f82a7e0fe6219b44f645bcb01a5ff97a8a6800c06cb9b6bf10cb15a5a4749d82728622e23e11f272bd2250f3e1757edffe3c9d27f808a3e2bed5f4439166";
+  sha512.doc = "ff7dd904160a21ad3d84a71f75f6b25fdfa3aa0687128f2f2eda19b2d590a91d0db1e654dd7d1fd7be9bd643e008db1f0c30b2d46ee6e3b02d0d71bda2b964cf";
+  hasRunfiles = true;
+  version = "1.6";
+};
+"pas-crosswords" = {
+  stripPrefix = 0;
+  sha512.run = "cc93ed7340380b2072ac7df4c0d343e43e1a3ae4252c42d9914edcb33232597a5c86d22cce3dc02218e6e725191f056ef9fb342e88d1a60dcadd8d011723b649";
+  sha512.doc = "65baac7fa63a01c70293baa26d99d21dc999f959074a3d2668cf6661d3db059b47d2f577f8c9f5d7ac6014e601f50e547283c55541c492b3c2df4e5f01b65be5";
+  hasRunfiles = true;
+  version = "1.03";
+};
+"pas-cv" = {
+  stripPrefix = 0;
+  sha512.run = "4dc3203c5888aeb3c613ddc16446d7ced1dbb8ee1c0f0d983fa010eaf81d5a0a7a9364381be04e10bb15a9f258d4ae086fdbc650ab8ca627b07cc286be1ce1ec";
+  sha512.doc = "93460e4435546cdb2df20e4e1fd555a726e909e411d42068b6f16f8bce2fa90144e1db95cad4cb94430f65b9614d766be00fa8c3e781a1de733b189a0b4585e3";
+  hasRunfiles = true;
+  version = "2.01";
+};
+"pas-tableur" = {
+  stripPrefix = 0;
+  sha512.run = "61fc474406d55ce0fa4b2edfb41f4ac9b2585e448c2b2b76452a29f2a03eec9ea1658cca2fec4fd0f1b8576919698a6d3ceeed650b773783af47685f33c969fa";
+  sha512.doc = "a498726006eb5b3c7352a776c47e215fedfa7005d529fbdf071946ec736818e6836591670c7342e84d2886718d2faeb44824256f2aca744bf97d157e00f71174";
+  hasRunfiles = true;
+  version = "2.01";
+};
+"passivetex" = {
+  stripPrefix = 0;
+  sha512.run = "dec61bb52bc1bf8588474e6d8971ca16f691d13b9c1be1f131cf0a720a205df1a95830f2f172df2efc30799d4aff9af064f9d851d9c705235aaf96e4b50decdd";
+  hasRunfiles = true;
+};
+"patch" = {
+  stripPrefix = 0;
+  sha512.run = "0ddcaa07696216f9fdea55471e1265fcaa71dd8ba2b8a50690dd519ad8b9442015502ec59b8f9f05c79f5031be3de2956cd71af58153dea8e1917f33c246fa63";
+  sha512.source = "ada97aba615160b3c30c9cdccf3360f3692612bc702247ae3fa44f7821aefa2ee60c89ab79417b0ff658335768512a0d8d9b5b17df619c57d169f6487d39e5bf";
+};
+"patchcmd" = {
+  stripPrefix = 0;
+  sha512.run = "a98085cb274c189644fa1307cf4ab5949a9eda76936fd6b74a7ba366b04d58b2a213c1a5ede53f644bdb76d44eeccd919176fb1934b8eda55489fee16f0c349b";
+  sha512.doc = "3c65e6b1fe2b25efb45853deb5b3111dbfa03de7c0b154fcd86719a81bbf725e1872a6e6b5a9955e63f410ff3c05bce5de336f4ab1e612ea0d82b8d44d5fe960";
+  sha512.source = "d3effea39c2dd33c9b40dd12304973d2d96457bea7b7f233f196c2ad0ca9819e57b38ab7b44e9532350b6c1cb519b184882ea924dc198dbaadf185ac177bea63";
+  hasRunfiles = true;
+  version = "1.05";
+};
+"patgen" = {
+  deps."kpathsea" = tl."kpathsea";
+  sha512.run = "524ea5aa09feba7ef5efd47e35d8d94703be4e191bb081d0b13007e853e88729c6029451e58a7237ad5ddf524c4d0798421316c38d1d9374ed7cd05f2744f761";
+  sha512.doc = "136e6c23505593788da8343f4dffccee77ffcf9fa63382871507db47c3ff23d6c25d0cefc985f67e4ee137840aa3af8f1738a5b2dac5272e568e73b18b71a5e2";
+  version = "2.3";
+};
+"patgen2-tutorial" = {
+  stripPrefix = 0;
+  sha512.run = "4a157b6351e15274fc2972e80cfca740b4abdce0fc643a499fad8588af71441887974ac258627b9ef215ff9be8e33bb045f134554a6c0382b74f6af3275ab04b";
+  sha512.doc = "4c375722cc01baaca61acb9d93baae99f7776483a6492d19b7cfbb13038a40ec3c76bc8580cc455e9233e89d0c29194f8c41e51078d3996a3e72431d9113a64c";
+};
+"path" = {
+  stripPrefix = 0;
+  sha512.run = "6a1fad600e4683476206385504ab5fb916caecc1101ac903d23042c25e055c6d4a73b85a57a3293929b1effd7d4af6db26c36ff994d76efd1c4f81073cee785a";
+  sha512.doc = "e52367b81b9042af70e940aab99fa13140c31d58768ce94fb86df74ec9b52fb365168e7e325d8b2e304094e5a35fbd9fd687305062b5b606bb9e5748f143ac2f";
+  hasRunfiles = true;
+  version = "3.05";
+};
+"pauldoc" = {
+  stripPrefix = 0;
+  sha512.run = "36e67d812dd0218d013808879eec1150d6029e13519b0796f061a850d2dca99b8c07a2ec2fe9c49004b0f9947db10ac8d02d47a858b8b27852744cea58779d13";
+  sha512.doc = "178950b84cc4d5e1d78001aa75fd8cd5f0b3ca8e800b15fa1b65e19968a4642fc8ab2a3c2a95ab661155437790f100d48730d40a701dfba3a21981e93e35ba6d";
+  sha512.source = "7b35faaaa89048952de36bb0b340dcc367610d87ab104cca82ea8e38493babab9fea26d30cf4eabe7d6bf64552cedaddc57f49c129076a1311c2e50f9a991add";
+  hasRunfiles = true;
+  version = "0.5";
+};
+"pawpict" = {
+  stripPrefix = 0;
+  sha512.run = "426fe59ed20c41d3b11c87814b5f3737271d20bfb2cbc45142a36a42cb5aecc1555ea69a8ba1a1cac7bab323d8c9f23720601934f183d197b25e84d2037f057b";
+  sha512.doc = "5f8fb39ccf22aea8c40e3fb5d2babd757447e089da79a9df35336c56049872f45bb04fb76ad08d8d8a8404523666841fc757e7ebbb5201a156274ec2c29958b5";
+  sha512.source = "29f272c3d643ce366b3f82b3a5a913534e9b1833677540834bc48cecd946be0b5cf9d4de9e22012452a33c448589506d865db4ad589425634d80fef1562ecba4";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"pax" = {
+  sha512.run = "3fa85993a3cee32753a6b965a2e7a97cccda36f2c32941e8650026d90a8a69c93ba1f762f802f15999b3c32e327e1a98d970217613a660cc5fac68cf3afabd6a";
+  sha512.doc = "e4a2c6b4220bb498bbc1f74ab8fdfcb65d261ef944a43a86f9007bfd0073c9c6aca08fb136c8b1516d78fd3a37bb00388afc95874778fe453e75f0ea615ef1bb";
+  sha512.source = "ad5e65d29d540d3736bf7045c0c392d79d2ba9c9a194a7d04df3c76729105b95c609167900e9b4533d0ea353312c452de0cb02f303b0d5e777c0eddaac0c18dc";
+  hasRunfiles = true;
+  version = "0.1l";
+};
+"pb-diagram" = {
+  stripPrefix = 0;
+  sha512.run = "6e2e18f93d5575e3f9db1147a9e255d2ab8a3918e25f53315f91ec395962a3c65d7321c1d162ab7510f16b25e4bdc5c8e4688e56820759baef06dcb08833a0d4";
+  sha512.doc = "4b12c7f67411ed86eff674665f61b6b2e34694c937222c7adceaab453d78a6a1f23c58d3abd7ed2320ccf05c40e6b38ff2280bd498e7b71e857bd6fc86de3067";
+  hasRunfiles = true;
+  version = "5.0";
+};
+"pbibtex-base" = {
+  stripPrefix = 0;
+  sha512.run = "4c807466ddae93f7b12a62fb32b4a8a8dcdf16eb8935548aaeeccaa90de15484e396f307f229cab8a2980212aa7627e80047502a067847114ca7ff6a9ae22c3b";
+  sha512.doc = "a87c2feac2b0a115ccec0ced7ed9b5215c8b7501020a4ca14fea9a5062bc0994fa31c892c1a738c582118b73ff4df5aba371abaef76d3c15a00d5268bef85031";
+  hasRunfiles = true;
+};
+"pbox" = {
+  stripPrefix = 0;
+  sha512.run = "cf2ea3781aac3d0b8619c46513bf9894c4b4efd8ba89eefe2e5fbe4e8f82fedd3b17f64467598080a577c65cc21713671c68763ff2600ce24fb6f6ddfae83a3e";
+  sha512.doc = "1955a1cd5336a7d71483f49bbc8c65426485fd38447282262b58b4633398cda0753c5574455421b19d92d5c88c599f9c227b54a7c340a35daf233a4f48a1c276";
+  sha512.source = "67cf5bae9494a81b97738ca8ed5877c009d631cb8ac681915559bc4919f536c657fe4e3ade36b8e4a0ee3b614ca4a23bde8a9cae19f3a9aca12cb2e3926160b1";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"pbsheet" = {
+  stripPrefix = 0;
+  sha512.run = "4fee9d64b1988f9981a056adc10de3be6940cb2cc7e23d9bc4effa8647e27601e5b74d2c15289ed5cc96c3f42d4f2569d897be111e2dff064a4c5d40445c760c";
+  sha512.doc = "d929cb815e8204268f17d9e71f53550b7647d39fd50782c1e6bb848a6a8840ef8389d2f3359bef554450179bd9a638ea80a1c7ec018c7275165622f1ba645a95";
+  sha512.source = "7790c2a14e44ff68071c4b3f0017c5b83a2fcd50a110d05b55297f07b4b313ebe8d5ab3b4d071bab5b575ded1323bb26b828aabc7cd20522a4298827d1686c12";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"pdf-trans" = {
+  stripPrefix = 0;
+  sha512.run = "8e3d1526b0373113064e4812003b84fd78dec65ce4946ef991f09efcb6ffab8e89a9a655c8a0582e1f4452feb526c077ec9cff30b1ad7f3c59f07bc715e643e6";
+  sha512.doc = "a275e35947c38b93f5ade7a812d7938d342b25460e2a29e16a1431c7fff5939826ffe0bab30aeaf504a57ded91925e85853f93611702ee6dfec713031edf9306";
+  hasRunfiles = true;
+  version = "2.4";
+};
+"pdf14" = {
+  stripPrefix = 0;
+  sha512.run = "6291a2cbe2fea33d2a948a8ce58415de875cb09df1eaeb674f2a8fd3e3eb9fd5897d73e2ff613cb71562299ac22b07566b3c8730c807928e5a12f3e572f99622";
+  sha512.doc = "1b848dc73554175d33b7501fe83f1689e5181bddc6f59db00829ea39ac6aa7f91ca4f936f93a66411ebb257fd77132c6a4fd3371c8c28f0258cdcca31b8f0b38";
+  sha512.source = "81e13e0e9d0b6c4c0d6a764c94c6958a437a2e2fa186532607058c09f1c3ca2a6187a778ced20e67b7d70079395be11de7e2237548b12843f4f5ff80cb82c732";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"pdfarticle" = {
+  stripPrefix = 0;
+  sha512.run = "50cabf25f9da7b9adee489fd0a01fd9e5da2115d1dd09111507143a99a605cbc7e2de5a40a0e963b68942a601b7f0b753fdaf9cc1eadcdfb1261730fff5b4875";
+  sha512.doc = "d77754cf21565337f6db1b984dd3812798833f61fa263e39f9a929b25391a3b31a55df97a7f0db4fd379e4bf3855c51b61a719c30187865f67d7d37444e17de3";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"pdfbook2" = {
+  sha512.run = "f4d30e19b55b709c91eb64f9075b0e2e1d85591af295ea3ff64965073ab730603e660935e627e28a3878b700d417402d8de17fe6776022533f59f500a78a5255";
+  sha512.doc = "8958c4abe38a3a3b6623e3fe1861be908faffe935a433831cc1c87c463e0a72ba33ee89def4a1329350431e313e032ab35438be9f033e0a81711ce018a970b4e";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"pdfcomment" = {
+  stripPrefix = 0;
+  sha512.run = "82e1f9e9dc35f652d1ad348c6f2e03c1472c36c113cb17080061f66777d129f55f56a29c2a94292974ed759d12727d93e1724a8b529ed0b4c8c3e53511ab1934";
+  sha512.doc = "a7b6f568daa2d2c01574f56641326c1cf46c692d247fb8a8fd7485d6e804241a43691ac42923df35dac4453a23a5433fe1d7a063a88f4675a00780e89675a169";
+  hasRunfiles = true;
+  version = "2.4a";
+};
+"pdfcprot" = {
+  stripPrefix = 0;
+  sha512.run = "d046543b42966f8a566be0c89d78ca26b26d4095d99d5b16045283f0eb52a90a92122c1e87a2842d12d7ef2f865fbeaa69315a51bb922f713d33b9ef2e270fac";
+  sha512.doc = "ef19fdf93050dfe35df88163453067e589307b2173481d4f3b6943411bbaabda94b472622b93485637de5c2f885f9153d5078f5d3bccafb52bb28d3e25f39ca6";
+  sha512.source = "fbbfba0b35c70cc847a6ccbef17a1f506d26070d616254cd415eb6cdcf1b74c5a09baee420012fd88c11e4b4f8f45c5b7d4e2f5767e9621974a8d941a460360b";
+  hasRunfiles = true;
+  version = "1.7a";
+};
+"pdfcrop" = {
+  sha512.run = "eba7fd5c529e1b3a29d00ee679c24748050f1a6005391de4bdb6e6fd537cd447b01e6569e0eaa87251d49e14f548dfc80d5e33f037862a4e978905af37e9e186";
+  sha512.doc = "5deb207030892f9e351d511bba20e65e957b5db17df6af60022c3f069cba127be6e9bdc1e94600b6f36af8f35697b041ac5aa529ef7997f57264b1dcbf76ce2e";
+  hasRunfiles = true;
+  version = "1.37";
+};
+"pdfjam" = {
+  sha512.run = "16cb97f7af45b0df2d8190eb8127e6e8837bc3971765f449c038a3afeb053c68fb127f087efbd2735b8958b529eaf3adca62df07a7deed5a90cf78947e9e817b";
+  sha512.doc = "5814b6464efd3ec226fb2feefd07d7c7f0ed3aeeaa341c25bebb5e998b438eb7b86d9234982ab1f9ec8b99cbad6fbe3f2eb85239b37070f9ca557e698deaf96d";
+  hasRunfiles = true;
+  version = "2.02";
+};
+"pdflatexpicscale" = {
+  sha512.run = "d36dcc4d70156d52bcaf668d620c8eee5db8914473f943412ea5ad5c8bde673a6715fd5a69d13e502a5d4fe0b1e0e55099432c4e0e5e02bd5f6155ca5804c3f3";
+  sha512.doc = "64440f794e88c08bfeeac75d6d4174eccb800125c8d57e3b0be3ac6883c04790d422cb05cbed6be7335ab2e4d2e6bb2c8c0137c04160db126674960ddb7603e1";
+  hasRunfiles = true;
+  version = "0.32";
+};
+"pdfmarginpar" = {
+  stripPrefix = 0;
+  sha512.run = "1cfb39ec9982fce753e3c0040123fc0faf39d94a41cac95dd0d189f2f5dd21f0a03c2f7e26de999097905b2bb32ec8d73e6dfa808c8ed2a49610da436639767c";
+  sha512.doc = "24f2fe0616b0e6872da321bc7878f423df54057c9ed7b62eac4e3de36df4ba9a5f0c4481392902130038c8f2da098d2fc48be34056a03d6e764a01b66c2649db";
+  hasRunfiles = true;
+  version = "0.92";
+};
+"pdfoverlay" = {
+  stripPrefix = 0;
+  sha512.run = "ddb976f8aac4a3efb3c392e0900ddced76fac3a14cc8935142a5ceb344b9eece59eb6697323ff21241b327c0b6af6028024dfcf88a69dcf092f2d3f359d9b4c7";
+  sha512.doc = "fbf34d577158ff042d7571f657ad8b145378c9387319b157270f56f5eef7d5e0bf860bb4eae3329628b9515d0641474af5911fa34ac4545519c16769f81f3a23";
+  sha512.source = "0bc7aa88e7536517303d4fb8ba4f03f3f9b99d56425f368bbf1bc65227ad1245b1d6e146a5daf3cb61efac2bba3cc61675804ce4a4fc1a6f66b9f8efca708b65";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"pdfpagediff" = {
+  stripPrefix = 0;
+  sha512.run = "ce28e8160b14d0833b57445392237dceab536108a9d96942dcc0adf5305c149ba08269d697ab8508d8ba05dbc59dd972dd242cf7c4cd12e3d3e857eb885e5277";
+  sha512.doc = "dbdfc61b7f7bcafa597e439085f9624a48b734b2adbf53dd58ba6186b3597180b7ad3fc757acbd07c6466276a9e865bc154245e84d28b1e291004cdde64f55ea";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"pdfpages" = {
+  stripPrefix = 0;
+  deps."eso-pic" = tl."eso-pic";
+  sha512.run = "91e72e7247d026ddd7c598a5ee3d79bbde2dde920567cfe6d60601111d21e1663ada42c39fb951135b76f65e4186de53c0e1ca5c8846649c3a8abdacd5ab9643";
+  sha512.doc = "a04d593ee79a71d79409b475c169741bfb7a5ce2e3a1b1382dc20a8faf424324c5563161a13893ef4ff4da7b9b5513d63464fe3726169845bb402169b2523e3d";
+  sha512.source = "0e7d01cb7bf81f110ea073caf547ce75cf92236a5df45425fb6dcb11baebaaaa6f8582f432bc0c5d574ece69f03f9898d6d0d4894225444f240688b301ce3730";
+  hasRunfiles = true;
+  version = "0.5n";
+};
+"pdfpc-movie" = {
+  stripPrefix = 0;
+  sha512.run = "131ebad8b05395d0ca812fe50a103847393e4b00bc5574109ae3644b6500c58b86c48e33aab548c2404bd08ec6b893b9461d76f957111c7e653fec8473b8e63a";
+  sha512.doc = "fef635a0d0a48a6cb35fe8c3e0b17342b84bbeacd1604e01e9fa1217ee92aef4fd073c1db5aa72161082c6dbb273f1a2fc55a2bb057cf3fd12796de8844df614";
+  sha512.source = "e4080ab714b791e2204b8215b70a0b979b9810c5c69c69234f6aefd4b02bf182245b0e599040f56b4814c6486ae6b7f715d3bb597c03475c38f4d5bc624777fe";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"pdfprivacy" = {
+  stripPrefix = 0;
+  sha512.run = "8ec360bcfa5056b240091f1b2b5e6562656b15379bcf74b161899ddce41cb70d08cfdfb73b9497efd48e192fde11bfb4ffc59ed99059e1b6f6619e34b7f39bcd";
+  sha512.doc = "81e2d8a0e5f5889efbf96eae5e879378fd0b4cdfa9db66283e34836b767d27d216e35822f9225eadd8816e46c503443055dc822f221b35134ecf95fa2e0d22ab";
+  sha512.source = "7c31f0fc5836adffb8bb9417fa90c5acdd1cfab2f653d79c00cf5c4552435ecbf915cdc53ff4cbed796013c0c737c25fe779e9410ccf646090d5071139df5069";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"pdfreview" = {
+  stripPrefix = 0;
+  sha512.run = "1cb41c081230f601eb627d81118a3832597e97c2e0565f48f584e8f4b6d039ce903cdca54fea4591a5c9707d5145ff45470858dd2e39d3b18a2e964cb380301f";
+  sha512.doc = "72f7a2083c7bfae24d3a4cae397925f9d02555587c59cfea8d78b8fcc0de5db24367968fd27799f4148865ca7c2a4c2dacd11269d1d71c36f039fdc913a532e2";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"pdfscreen" = {
+  stripPrefix = 0;
+  sha512.run = "e8a3fecc3aedfb87156c1dfeff4673650a8dfd31109e3d76e7f51dd99b1610aee086a2fd183d48cfe1403dadbc6a8ba84fcfab5ea832b43b8a5128bd07612112";
+  sha512.doc = "8f4b1f6876b0adfcefb4a9b1ea5f9c8ffae0fb4ffc245fd75f631b172dc592dc82ffaf68b37e9c1907db5275f317b444966a466ab6c8e7b20b80535842230794";
+  hasRunfiles = true;
+  version = "1.5";
+};
+"pdfslide" = {
+  stripPrefix = 0;
+  sha512.run = "bdb1d91b587375a0d72e317e4a762b9cef984dfa36d94fd7bd13a3e22941f0f1f4c981138b805613f7a62f4d09c7c781fa9e4e5d4b5019a749a8f8a700bf5540";
+  sha512.doc = "92008d1e461e5309649ec5160b7dd3796455f04e923f4e5c8593a3a4cc76f704639206c48a4af13bfa9fa3fd735b03ad419f07d1222a45d093a6824aafcb8df1";
+  hasRunfiles = true;
+};
+"pdfsync" = {
+  stripPrefix = 0;
+  sha512.run = "0a7f183fd83f52016d499f8aefface745fee8351bafb4abb467166553d742f91ead7377fc3ce8111bc57253431aedf70f4b540975a1c139017f7d02ccebb6ca4";
+  sha512.doc = "7e103ba84fd41acbed007f4acceb0188372a4984977a3fbee3bf4484612c6e0621a934709982407bd1d59a69167c1d2f5ebd4b94f73bc502baa8a4830fe3f983";
+  hasRunfiles = true;
+};
+"pdftex" = {
+  deps."kpathsea" = tl."kpathsea";
+  deps."cm" = tl."cm";
+  deps."dehyph" = tl."dehyph";
+  deps."etex" = tl."etex";
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."knuth-lib" = tl."knuth-lib";
+  deps."plain" = tl."plain";
+  deps."tex-ini-files" = tl."tex-ini-files";
+  sha512.run = "47b862d6ca260ee389a308a2027259c48d3b6a478c718684c7554aeb2f193142f348a668fb426d49790cc4046659ce42fc0bce099ea4c65863daa129de4fffb7";
+  sha512.doc = "bb9a4ab19719fdf345146877fa91d3bae835e02b35b1dec6b288b85ea96f0492682bd4b627bf044fbc49824b6b7059a4daedf0c99055ab1ceb21cbbd86154762";
+  hasRunfiles = true;
+};
+"pdftex-quiet" = {
+  sha512.run = "7b33e37a4b33060abee48ccf825cacecdee552d641da48dae47e3615fa0ab91ea9912b52fbd5c5ba6cdaa9c0d2cc7baa7c48a80bebb6d1887e5c633dacb4d104";
+  sha512.doc = "e13392cfefaed2c154c086ffcf85e21725e4230ce78d10e07dcb0a1c8b3685bef2572c5f5e249c56120320f2b0167cd5055ade50625a296446a197c0ba4b85cc";
+  hasRunfiles = true;
+  version = "1.1.0";
+};
+"pdftools" = {
+  sha512.run = "ba9ae7b0bbe512465357405e87f3d523235c2398d4a94e8d0c8191e37db06bfabd6676f3fb9f603397e5682f9dd4f9b1b4cad03fce89448a9f0b254f8a7f2b46";
+  sha512.doc = "3f95883d9405bcec282468f42f8718bf9c510d98c41510aa643ce0b70eb7557f67b75def0dc0e1f862f79d586f0f49959b4c826f8c468ca9460fdd69d3d4ceb5";
+  hasRunfiles = true;
+  version = "0.86";
+};
+"pdftricks" = {
+  stripPrefix = 0;
+  sha512.run = "f7c0a71e44d0d388ab952ff820e5af63fe0f94acb2feb3415a2d1b3cffd94efc7e8bd17efbb7b608d082ab1b7d7ba1b780c63088df54a8db241c9b3d133eab1e";
+  sha512.doc = "0e3ec1f3b7d7c9bda1e08060f0ee0615244863e513a25370b598f22bef00e6ece79592a105eb13cc913c169b1994c8a38fd60be0566e1c52e1ce2f97dc1e5995";
+  hasRunfiles = true;
+  version = "1.16";
+};
+"pdftricks2" = {
+  stripPrefix = 0;
+  sha512.run = "e50406cd680e1d5cfabcfd8000b743fde61dcff7e3c686b06f58fd1fd36e414d53140b5d244ef65931aeec67dbf458e5e2d43266f26ee9de301babbc0f88853d";
+  sha512.doc = "4a22c280a28e4a45f068d52f4d75f19b5ccfec30609d7c8d143cccc67d16fc04cd1ae63e7d6a5a659a0805ed85d96d57ff5fba4b246f67029457088e7696ad23";
+  hasRunfiles = true;
+  version = "1.01";
+};
+"pdfwin" = {
+  stripPrefix = 0;
+  sha512.run = "7f1fafb7396eadc81ae39727f35b1f49ee0fecf7ca1950d8fd5b80c46d24811cfa779a6d53b10c007a7916e14584de5e88f2bb5b1f3ef8fad739dde63e56bc0d";
+  sha512.doc = "d352311a94d9f673ea8c6460f6771747b0523e2c354e5c7114cc58d7e0e92210f4eedb70a728d423de387a2ed2a3460f1acbcaef38579a26d2225f713e606407";
+  hasRunfiles = true;
+};
+"pdfx" = {
+  stripPrefix = 0;
+  sha512.run = "c1e1be225efd5bd66873663ccb134521b40253875248096a66a8499609e62e481fa64e563afd75952b2dc0041fa1fce594f4047c3c91fe6b9443493ce8899ae7";
+  sha512.doc = "22b7e52295ab8da136e584f545001d0db480cefb06b7d595133ff3508c9ee3e7b7d8c8a93c41ebf24a9e313b4e40fdf355a88ef0a65b629c3b27f5f4bcec906a";
+  sha512.source = "31c9d2e7fb89f9405f26a18dce6a5066958867ca03ee793e46f9676022ecda77074eef23fb4a238af5b077d642107c372e268ce5b4e7c0358d7ca8c0ed6daddb";
+  hasRunfiles = true;
+  version = "1.6.3";
+};
+"pdfxup" = {
+  sha512.run = "4086f58241799139e980c97c1aae786566bb7801932334d78e89dfc5f8e718b6b9fd3eada32ae006b9aeb74d8b2644071a1b1e60db7dda3b4b4942947d727fca";
+  sha512.doc = "3888fce668affc7efa7e9d88c890f72c94b49dd88ea3c05af956943dc015e89ad930e2de3a67e023c7e1be2cd1c7911e5df29dbc273e3c2b219eb5377c165956";
+  hasRunfiles = true;
+  version = "1.30";
+};
+"pecha" = {
+  stripPrefix = 0;
+  sha512.run = "12092c82c52e34259fb0894b8375c45fd94b9aead121085736a0f7bac90b7e156906a22d233c596c79880aa0b858f7213f37b2059cecbb4627ce2e4163f22335";
+  sha512.doc = "3d0d9184aa0009ab67f299a87b3840513229a93ec08e33208fc7b3c1a69fe043b02844ccf7569d14c5d5cdf0546224b320970caa080458c92cc299853b021c98";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"pedigree-perl" = {
+  sha512.run = "9adc918e1156b2a14bc144b96b5d3fe2b1272a5c9924e30c67236c564c1a065f06ea075249df21f19ce13b9cc03a885402e120d6b8f40f912d8c6ef4b98fc1f3";
+  sha512.doc = "1e645090b3cb78b95bfed3398923c6e4cd39637238e7849bb1d05623307f82115fca87ceb6bac2aa89beb68371d7acd438099675ca33295839e413905b4ae150";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"penrose" = {
+  stripPrefix = 0;
+  sha512.run = "2d61b2b6a46cab4a0cdb5d306eaebebb85af41ef75baef395dceb253ac68966fdccdf2317c6d26c24fa359e299f13823e4f69c40959cb2e88045b65ecc1148a9";
+  sha512.doc = "58bd3b307c33494f61a28c897ac25a6587ab550d4e1ccbd5f05d101eba6466fb3981410084f34d7fa16570b3af6ed1e56cb5d9cca18429fd23d3371601daff42";
+  sha512.source = "43be9c9925c707c96292d0f7d6d7fb9f745582cd0d39e8a0323d3de766e56d9dc4964800568bfd6bef83231a91ce4ee17274491bee931b2214e5f4aefbc18b0c";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"perception" = {
+  stripPrefix = 0;
+  sha512.run = "669bf4b618c4120d6cd7b574352c38d0fb3ab7bd949e26ea239f4ceb0fccbe102dcc6644ad2cee9eb79385f590918a12bb2c065f80b54e8343223056df448060";
+  sha512.doc = "35428e19d9e2429691948331ef574168a3eb5dd3e09f4286c66003ced8c0a65da9853de4dd57a1920e2f2315b8543f9ec9e096bbd26123554455dd8c23b33f55";
+  hasRunfiles = true;
+};
+"perfectcut" = {
+  stripPrefix = 0;
+  sha512.run = "3537b9010fe1719e6f27c800d6b81f01007d0c223a11eebf53daea4c67dab02ce94def02591b4663a7dfbec3eb9ebc4e7d9aac3db92707904068bd53d8567367";
+  sha512.doc = "41ac483d2c8662a29f85936445ced063f0325045513a1b703828f8af8b2f544a3054d9a65bf66669025396da698b8e14533f405ed24f37738236b65d17a9439c";
+  hasRunfiles = true;
+  version = "2.3";
+};
+"perltex" = {
+  sha512.run = "af7cd6b065f2405a514d20cb386b34399742a42286002ab3e0f795b64dcb434ae97470ce9cbf25cb27a9b124ebe56844b47c7cf89e1f83a4bd35f1bfcc98163a";
+  sha512.doc = "d39c93f4bf3da08266bb0f10b06582db2bf96bee73faafdb191af3770c7c24abde407774f21d3c97b1f2453a8a9bd24576acaf0606796d7439334b8b1e42ac7d";
+  sha512.source = "99a8e27c23a7056496c56e734fefa1e921a002d7b86c153b3a209f7c3d7c415dac05e77b0ce5bc8685bd622243d6ed53be4a7f570a3ed487c3d55baa5b5af06e";
+  hasRunfiles = true;
+  version = "2.2";
+};
+"permute" = {
+  stripPrefix = 0;
+  sha512.run = "2b1ea22ff45718a12f5a031a60a2780a43b324afb3a7c4b3bf2e1a9808f5eb789938f0e084214912a50dc1a8ebe76c58cc39dccd5a411ce001fafc8fa5c41ea4";
+  sha512.doc = "f0f9f8d4e7e9b7cf5794529bd5febb0bd58f1ba0e95a72d688280ac3e6837cf39bdfb62ac29584fbf8cb37e1dafdcb971b9333a0306fa867fa4a1a256dd5a4e3";
+  sha512.source = "4273fc09b30de6ea203e13b09822a07b222de8d1abc143e67c0c465bd8c31ca4648b83a7fbd895a8865b7793462bd020642d383e761c926504a6d40e785c0108";
+  hasRunfiles = true;
+};
+"persian-bib" = {
+  stripPrefix = 0;
+  sha512.run = "e6650399eb5129dd0ad08c3ff93843da47287ce641a65826545b10a9213437da56467eabd8c37f1a7fc17086af968043586c53bdbc7485e9a4453b3f5b23bf83";
+  sha512.doc = "a18f3652bfa8cccd8d574e475859bde8d41de04d3093f05222dfe5687460b8eb29a1e9bc258cb73cca69dad52f567572a654f46414a0d513ec27e462f4787f35";
+  hasRunfiles = true;
+  version = "0.9";
+};
+"petiteannonce" = {
+  stripPrefix = 0;
+  sha512.run = "8ff32eaddcc84973851b93f0c1c1b250b596a080669ef60ea2c115098c4984d426e37240ae8781fa3b95ce494e9fecccdd259fd25b47402498028f2b8e5f9fe3";
+  sha512.doc = "d171f31889fbf07b727c78a99bc91a2e6a8231faa25944a600ddb17ba32273ffa40a39a56e6e9b2c35ebfd0bb396ee699ebd9ab179577ab07e63feb8686d4af5";
+  hasRunfiles = true;
+  version = "1.0001";
+};
+"petri-nets" = {
+  sha512.run = "0807444f934acf16b052dc499a097a2a645d037622a71430cd82fcef85d11bc652341ce6396a27d717effd08bde8ba3224c5235351fa9146000c01abd522f644";
+  sha512.doc = "cf03048e2bccded143fb493b100fd19103ab90f40713441c5380446702d6c57ac3820f2892a3dfdb80880952e09de78e69b309783767a3e157f76b81c9360535";
+  hasRunfiles = true;
+};
+"pfarrei" = {
+  sha512.run = "f6046dc96672b60ed272dd6fe23a4a51032f039d3aeaff3f8b5e2407c99fe1f43c568a03564a7c20212a97bbfa4ecbd0dcb7f5f44593e1485c8e5d9197467a6c";
+  sha512.doc = "d50ff4603d51eb72d1d12e7f5b1440fa3d7abb1ab74fdf441d7e4a474df91247a1ccad504a14438bc0c3c6354c8f8674f180b5d9d826ff09a8749db3cf0d08c4";
+  sha512.source = "1e4008782161066066fc4cb1b029a36f6a18eb0d5d52f11a2a70d04d4778de6ed1a80ea1fef5d8cc86c2e13b8cbcb1cf8ce43e58ff4431b16ca23c3fdafb9884";
+  hasRunfiles = true;
+  version = "r36";
+};
+"pgf" = {
+  stripPrefix = 0;
+  deps."ms" = tl."ms";
+  sha512.run = "104bb34bcfd38f3dc40a161a2150e4eb1bb5745ac4b98836ff94260699bb9acbe1d9a7120217aedca4674be64fb6e1cc0c8f70912d2630562d3e1ea7e87f5851";
+  sha512.doc = "0dd8602f32ce5516435f468e586dbe2c918c6a5f6a6bda1fb10a1ce897243e228d61bea0cc60e211a6155d8cdeab48c650f88763568932d12df0c7cb1d60b348";
+  sha512.source = "384342fb40e08fdf9cd5ab1036dbe91281b2119249c85d6266bcd39f361fda01b06caf6ce1b0d21fcb8d1ea18912ca2731234cc236b9f141653c7f4aa0a16c79";
+  hasRunfiles = true;
+  version = "3.1.4b";
+};
+"pgf-blur" = {
+  stripPrefix = 0;
+  sha512.run = "a341495270be35f6824a10edff85edccdfe4d9a0f3cb0ba50ede1b8f5970dbe93b0d5567f113b5c2dfe0661f7201fff710cfae0d9f3f1420245520486775e399";
+  sha512.doc = "4cd2faa5160e0286f8b23f518c857b957e9873c0f8f1ec54f8156acfa1e15f7e8c22e6b4691d07ea929b6cc3c76847413fcb9223852bf26efb1c6455909e1816";
+  sha512.source = "b254cf39510bc1604af7f238a00d9ea9ae615a1a99da8714c11079553fcae3e26dc8534e6fc7797dcb1fc02dd68a6b236e05bfb4b58bfeef8f1cc8195e4c5c05";
+  hasRunfiles = true;
+  version = "1.02";
+};
+"pgf-cmykshadings" = {
+  stripPrefix = 0;
+  sha512.run = "58a1c73f4ad2f0a64538683be8227b429fbe24d4a91c39949e37caa356a30ff1e70b6e00647b8a87eff26bcf99a99d65b0ac8c8710a6a85d89942a247bf3af26";
+  sha512.doc = "107029c601a5e889b6156c417a45013ecf47f7e2db4c35ca276467922e8c41ed8a23a118c5949095bc421fa15e41cccf9f6e57d2052434c44d81781532db73bc";
+  sha512.source = "c11c49bb5635a619ec9421013416f3ab18b2f4caecf2cc70bc393e858f95bece057279af6cce8c0664474e3d258c60e259c30ddd7415172ccb95a369a1565f0d";
+  hasRunfiles = true;
+  version = "1.1a";
+};
+"pgf-soroban" = {
+  stripPrefix = 0;
+  sha512.run = "e0f85a77e9d81bf01f5516c3b3baa52a9b7f1b0faaa6f0aab1cae2182732eaf04ea2edb6b0f9091272849f1d7ccb3797cb2641090b926db7f3d0483d08569845";
+  sha512.doc = "3f4c021cfb99a27778c250f9ac13e2abe48127731b54d0fca9e8e588f44ebf797e034a56d3ca19bc847bca173dfb03ef9a70e0fee71649188a8427d6eabceb80";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"pgf-spectra" = {
+  stripPrefix = 0;
+  sha512.run = "868fbaa9606718d30a18b710f2295f6e17f31f8a30b724802c765cce872b3b6623539217912bd20998f43777d0a10a036dba01aa65f66f0f89816872ebebe5a0";
+  sha512.doc = "28c0aa31dce7627d9c9db7ebd0f9d8efd6e01b5c6cda5b417fb24c569df5c097745b95e94d0ca328ae25649505fae154976e393d60abf39ad775ab7e73b12af7";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"pgf-umlcd" = {
+  stripPrefix = 0;
+  sha512.run = "323572892f452d609286e507032c03d7301b5822dbce0ce3bf3a588a75a307dee0981f2c6c49cf17017c967bfff0d23bac24d7bc06b66475b8a9cfab9ae906a1";
+  sha512.doc = "18a494bc6e6c016b3da4d5d51c2cc529ad515b69c6a150623ffa6dec4cc92474766dfc50cbd9c894f491f594ba5f2af4b1796d3a92da21b99272bba9a65bc92d";
+  hasRunfiles = true;
+  version = "0.2.1.1";
+};
+"pgf-umlsd" = {
+  stripPrefix = 0;
+  sha512.run = "e32c27e2c779ba362435fd0901703dade14836347afd99b7f8e55dd91d5724ba69fd517c39bf52d95189351376ad505a56634c0a751bc68df36dea952e30e7a3";
+  sha512.doc = "de4b7c62d79400f107d94fe3101fbbf87ee6bb2cdbb04aa6c1d5eddc9271fc4090b39a79dfc18c45d9f73371f6de09707c342e2cd5ee6dece663ee4494d53ddc";
+  hasRunfiles = true;
+  version = "0.7";
+};
+"pgfgantt" = {
+  stripPrefix = 0;
+  sha512.run = "f4553f0ec519e5a8d5e2ad994f7271cc26d5fc80b20299f1aa816a5c21f159ac809a7a0bfe354cac99dad75c2e0bd8d1803277e069a26c105fb4ee83140274d8";
+  sha512.doc = "e6ab311ace663099eb878807036c3bda80298e9b591dccdaeccdbd65a46993d2b013353721d54f3833114fb1436296e079e9165b5071acb7d722238a1e6b52bd";
+  sha512.source = "e376f0c89d67a698fc9109e974e39b94fdaa661006422ef6b228e1d0f4c273a8f6cde95ee86c788d7051acdb75e693dea704d3d36e2de42ef53c2db320a7b9d6";
+  hasRunfiles = true;
+  version = "5.0";
+};
+"pgfkeyx" = {
+  stripPrefix = 0;
+  sha512.run = "c2adb44ef34930aef1d78aed2025a2dc17c69ed641b59af29bcb93c9c9532785090f30834d52c415116ab4a9477d83e5a46d1509e6bd41f47fd4e37cc8ff2933";
+  sha512.doc = "2a596ee81d2af4992dc23d6f28f788ef1d3e9a528992f01b7113de726898ae3007b685c4c447d2fcad640403d1bdd8a0eb07299ac9ea81f41c4158eb21b8e9e2";
+  hasRunfiles = true;
+  version = "0.0.1";
+};
+"pgfmolbio" = {
+  stripPrefix = 0;
+  sha512.run = "bdbd89379ed7310b78a3847c43022f6cd65f5fccfabfc4723551f5ef4f4cad3e3dcf596ff65cb4c5ba4a354f9bd59fa4aa39147782a0ed369a7dfcb68ef7f9cc";
+  sha512.doc = "a9dbe657b4037477adcf3ead4ad4ca5b703ee8c53739da9de0bed8e02c8e14961a963e9a4a5a86b3f53348da9eab5cdbada1b5ddd073bc18c82177abc92023f2";
+  sha512.source = "1552182819893f7538ee5b38816d339639ff6e6ed3e092a67dde1dfa2a73eb7bca1490909fa34d4999399a8328b2ec8885ad86e76438e4f177dd81e2e6accdd0";
+  hasRunfiles = true;
+  version = "0.21";
+};
+"pgfmorepages" = {
+  stripPrefix = 0;
+  sha512.run = "6e40413358c57b2f16153c12a9f227563f107bbb966c795bd2d1d0dc7444b2acf7ad72631f23903941516bea803e4c539399884fb4e479abb61b4dc9a5bde428";
+  sha512.doc = "b8e0949fc1aeec50514fffa3fdd88ee96017207a39f1d8c15b326604192eb2277ae6749c5faa8f531bbb0e3ad3d0e25d3c0478583538b2a8ffbba5e3f780c9ed";
+  hasRunfiles = true;
+  version = "1.00";
+};
+"pgfopts" = {
+  stripPrefix = 0;
+  sha512.run = "39b29273305a894c37bbb8f2edc899eb69cabed78623ec5ac66d6a75fd7d6b344c1fe4813f56383acd1c51acdd099fcaf3e97af294c5fd63ffe47e25e9cb9caa";
+  sha512.doc = "8c5df446fe33e40503caeb8740becb28b3328490fb6aac2cf858645a5d896681d6448e5160cd32e7220c164838fb65dcfd85a22a6c6b9205511f6055f23dcabf";
+  sha512.source = "ba4043a5ecaf21c1afc3328160c6832b67103a9b9c278665f0ebd91f21d842f85eb70e7a2d7385d66f9910006205d59042aafc994a2eb62762f3dfb5917c10f6";
+  hasRunfiles = true;
+  version = "2.1a";
+};
+"pgfornament" = {
+  stripPrefix = 0;
+  sha512.run = "bf930b8abf986df03e46e8c228e82c4015dd3f671688deabe3756815d86c2ce21d0738e4172874d233c3c7c28792ea7081a32011a3db64d93dc4a8b4c9f56162";
+  sha512.doc = "6909f93df3cd162f36817ae99c7f7da532b9a44b6621d303ec4f4828c22d99d25d4e4c1ddc17f81ce2b070ac8fa40bedf5790a097d3d5ebc095abb88a92fe037";
+  hasRunfiles = true;
+  version = "0.21";
+};
+"pgfornament-han" = {
+  stripPrefix = 0;
+  sha512.run = "a53e1595e0ac579cef90379a85465fc3c247b803dea104ce7111de68c6c7ca114c6364ca50cdeda051e2353b85e91b39118c31c3d8e464943b8ac7f07d3e660b";
+  sha512.doc = "d2f429a40d6e1ad24b098039cd212f7667442eaf47b307eaf81585f9443028d03bf612d5f080acc5fa20a153283d49eb8a9550f01596c8d6a38bb9eea4399b31";
+  hasRunfiles = true;
+};
+"pgfplots" = {
+  stripPrefix = 0;
+  sha512.run = "6a56f591562baac1b6256eb5c888c4cbfdca5762d4141ef4773ceca06ffbaccf3e0d12c35818b9447a1c782113c3c2a622dee0ee74e9a5b97634af0603c8c095";
+  sha512.doc = "1167fe761139de816533728f8b774f802190a1d58df979d192d3fd92427dc32d12ae0c176315de8c878d7f1e4ed58d8e7c40c5b794f8b75e813692c156dcba7b";
+  sha512.source = "ec594de33aab4206bf4c38808fca697f144337031677ae056fc05ab910e6886389cd9f283a299071dc488b41e60c03d27108661ed2d5f1c124f57a87e28f3999";
+  hasRunfiles = true;
+  version = "1.16";
+};
+"phaistos" = {
+  stripPrefix = 0;
+  sha512.run = "d5cb8a051e1e80629385bff368896c47bdfccfcf38a24a723ddc5f9056a59c57703986799253812c9a4651f4e16dc55cee0876ddd0552900f978dab0381c9aac";
+  sha512.doc = "96eb22628467289f72aaa0d4983e494c75b3a2315d8b9d2921f8ab29d93fffae4f459ef852529dfa4ff48a65e25d652662c54d84db54e0118b1c021bbe39eafa";
+  sha512.source = "5ba2b04fe4e3aef136de2dc40568ecb81f437561ee8e6c320927bb816819889666f57ad07c3b8bf6eb7f6eb84b69147f9233449a26529b61712d158abf889f91";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"phffullpagefigure" = {
+  stripPrefix = 0;
+  sha512.run = "4d443d5ce4dfd4805eaea4ecfe11bc94b9e92bc4d68f8fdd001a72ef09f519f11e20517d01722f5c7f79eeb9b92d0a6099d620e5c54dc0845b7ed5cc762c260d";
+  sha512.doc = "837b57707c0d37d20b02ed83ca32768c4b2718958ba3124650604f4de0bb11528c2d5fed95f942545db400eca0517ef59fb168408ea9960f0a894a777e9f2681";
+  sha512.source = "f0abc0f77efc7460907cd18282ccdf2ad15687b3d891a72e8fe756c16d1d715cd6f7eaabe09898c2bd88ebe54d16b86115c06b4d56fe1f2f4b8e3e952292a107";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"phfnote" = {
+  stripPrefix = 0;
+  sha512.run = "d542b73d1a25d0d141a37e3bf0a3d4753829efbcfed9745ea299a90026325f82624bb5d4a5075892af758d4a4613e1560824871e6bb784a8ce0030a7fb3f4836";
+  sha512.doc = "a62dc8166944e953b8efa49c7ab78b98744cb9948523f4decffee6a553a8e432ce2d9774575bbedce59e5dbd01e9bcc01d82962a19d3878a11367127a7927287";
+  sha512.source = "4f83603d837978304673550f1dba78a1aad030392323de2ae6bb0295ecf7fc5f8bd211a14f831b7f3710b13e999e73e3a8b224a5ac44ce67b2ea3faae5fc83c9";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"phfparen" = {
+  stripPrefix = 0;
+  sha512.run = "c184623f226f9bc9926eef0b5e23443bec20e66c6641196bc90daf27a648d9f0db70ad176488fe061d44746b6cf46a3217eeb42f6a95f2e37c20d641ba2838c6";
+  sha512.doc = "5c34575950ee1a9616408f293319eb0634795e07173677cae112466a298dbfa5cc18fbead8e92e459718df91326d27cc7baf0414a1f1e8613a5c115c070b5016";
+  sha512.source = "ca94f1756265e0f92e8808b7dac74eb57f62eedcdefbaf6e4059c8a7ffa51819da979a70203b11250d329ec9000b454067c101b25753673add4b35c40fe1e882";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"phfqit" = {
+  stripPrefix = 0;
+  sha512.run = "250626ed9e7e33abf0d19c32213236b02849db849f080bee0ddc19370acb7e2e66c838dc1149f8c1194d2534c1e073fc2971fe3687174978bdabc90efc4b7752";
+  sha512.doc = "0acdb07c2484e2e5694690536eca084ffebee0f549ead32b3557e368ed85d7a7785c297cc639cee2cf4b41f64f7c2df806b6b27d4ae89769b0b8d99d2127f885";
+  sha512.source = "f189ad485482da9e1802b1b2c96120a244a14f7e7e39a1759d7484ad236945f98b8330464223ad63127d9960eb4f10f04145f5eefef25f02775c009184ca4b9d";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"phfquotetext" = {
+  stripPrefix = 0;
+  sha512.run = "809820fd3108cb5b33c5f3129fb3ae8251476161aca5936b966219a49a29204107375a33e6bfc452d2aef8b0cefb30f8ab0e53984f39d5c3228ded25ca19c37e";
+  sha512.doc = "501d652782670318fdb45368e01dbf76de7cb46f0f1584bc7dbf1242a71a42e7bc870c5cbf7dcb33d41463c550a0803226860a0aa64e75952f717436e8f6501a";
+  sha512.source = "fa812150acf519ca0995afeb9b3dde9c1929b945bb964612319f7065c6c303641e2a245397e7271eb777af9f6cfd310ca1ec7f9974c0bf9c329a0f006df2b9dc";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"phfsvnwatermark" = {
+  stripPrefix = 0;
+  sha512.run = "38dae3ef3fe183bf5149b91050afd5bc9c934d01332b021ce87e9ea412008bc22d42d25a389e82b02ccc4cc4820a10d821c228c02c4f08fdca89ebde69c6e2d0";
+  sha512.doc = "7f35bcb41618c7e14e7e9f8fb289231a8032f7f1cd2e6333982a346c5f8dd24e5733f70c03ddd183d170361b2b3af4115f6fa9b788c4dd2a020020ba525aff18";
+  sha512.source = "6c5e113bb45ce6b11768c711bb59743b75bf4b95e9d84c045b59f502f181e80a67be56b3b5153364c29ca5c36f6adb73dac4a5d3051a8dc3ea275a43277732ec";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"phfthm" = {
+  stripPrefix = 0;
+  sha512.run = "c6aeab1fef49a56a7ab080945199a4f68186b53bd7fd00e4c3d3babcd3f63f998748635edded858d5904b8dc7604007753bec12fdc8ff6a7656cf1ef26c0ca9e";
+  sha512.doc = "c2439e7a3e7f1b0730b8fc48f933b9754777e7750a58ee6a5985ac458689c2df96d9e74d09c5ade2b0b8dac49e0be43ca60a0769dedc662e151e1dac5bb18cf0";
+  sha512.source = "b189f0320e5b8d1ecbb1bb34972b845d776190ada4ab76e44ade41e21d8f7eb0bfb6bd55a4352aad4d0c2455730b7803384eece70d2030faf9279aef0f70f540";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"philex" = {
+  stripPrefix = 0;
+  sha512.run = "0b6ce5d281836926d6807dda7a8a4eace43a25160b8bdfaaded7ef9838f933db7a7bd4859019555002b662ca01800e64c4f6228427b4f40c9a79e71759aca6e0";
+  sha512.doc = "ec8eafe3e1b5e7cdeeb2554c3e34036c808f33b4f4bd2e5fb8b2e10e4366f51db02b2bf3dd52e46c92d600cc092f30c4db6cb6f69cc66cafde5c11a53a883839";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"philokalia" = {
+  stripPrefix = 0;
+  sha512.run = "6a7b76995074ec233d4922de96f727ed031b21abbaf1a423bded6bcd964e8e503d7d3d84d8d4eb1ca42ebd99e1af50a244238f668db245ff4810176abefb0976";
+  sha512.doc = "8cefb15592711d19d3fbe5fbbe6efb219ce081dac6d8bfb12ebc57ac807a30aefbaa37f371e70b7141876333ef408ae5fde177add749faf2302b2d7f60a1bf00";
+  sha512.source = "975d97494ed2fceefd6d7fae5cd7916689087d5f51136398b19d233e88335c373bbd572aeca930e3be212ae30b7d8b34e0070650aac5a9c391793fd6a5c1e394";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"philosophersimprint" = {
+  stripPrefix = 0;
+  sha512.run = "05f9639dbc34d0fd653f2609c581df2e50825cd61af7eaca55f03fddee2b0bf1c0c6bb3258fe10265cdadf0d8371d351aa143327a07f3739defb4ca3ca9b4f16";
+  sha512.doc = "45bf6648cf92ee58d35847845094614884ad300d5ae745a57bc036d72bf7a1cf8dc7596daab8c606266c717b0114727072298f91b61e92c40dd180bfeb678a3b";
+  sha512.source = "9522941d5b9fdeb2eec1f3f91bdb6649da45ba930ccf11599e532352170279f67e40779b9af5d46a4dece5b14ca2ef421280ea31eec24b686db6a9a4f2709a93";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"phonenumbers" = {
+  stripPrefix = 0;
+  sha512.run = "79f875543181adada6e60d57adbc225efef89440666aa179ce69eef0118c528bb603436cb7df5dba95c75f60bd57bbe321f169358e247842a42cafee14cffef9";
+  sha512.doc = "85a496e3ff30df0bb1a852e1e21cf0fd8434124f3ec1b460fbd3c0da05573a1ac85136d3caec4f4d59993d47ad82fc0f123afcbf272982bd614dd2e1f318394f";
+  hasRunfiles = true;
+  version = "2.2";
+};
+"phonetic" = {
+  stripPrefix = 0;
+  sha512.run = "fbd137931a2571d542b8cb66f8b613a57925277112c2160e21298791a65d91f4d1a6d3d8be5d6faba9abe033ded174d9d301f6ff1784dda3c1a9530f5f7a0a40";
+  sha512.doc = "710233d18f904db9eb8c235070681b9789177b375b538c743424252e6434dfc3a16fb4c6c1e19617d939a31eb75b4823bdf30e633bc240b7b24650cb411f94e6";
+  hasRunfiles = true;
+};
+"phonrule" = {
+  stripPrefix = 0;
+  sha512.run = "0465e183077f7daa57d2bbc5f1a76afa72770718d2dc969ebc3078b213738f5ae3919f3ebbee04ae54ff7b8ad6e35630fb22293b5cdac31ee5bf31680433ad15";
+  sha512.doc = "80ea19243537e769c49a3411e036c5811b19586fda3878894126a151af4ddff46a554db7bc07f488f692fe9efd0934149c8c94cde75b92c880bfcc28218ae5a1";
+  hasRunfiles = true;
+  version = "1.3.2";
+};
+"photo" = {
+  stripPrefix = 0;
+  sha512.run = "11727df46b85be20802588a6c5743a9ae70a89ea73b5f16b8a4a3d3f1d3a9ab3194f56f0ef9d79947b14fe3f6b3e05cbd291dad8346cdb128b4d1c8c22d50bf5";
+  sha512.doc = "037466dff8edee9f6218b1fddfe579b2f82491746e22886ea5f8496b5f564084d81e35ed549ddfc42855c850913cf8c587806d71b7a531ec3ea3056962c54e48";
+  sha512.source = "644303a7eda6cbe50db8cf871ffd642dde5115d4f1a72edde65e9218337faaa63ffebc94bca96da28a4a2d7568ae0ea124f1aa12fe5402cfc1c57619e86746ab";
+  hasRunfiles = true;
+};
+"physics" = {
+  stripPrefix = 0;
+  sha512.run = "e394a7f8eda4583cf196dccbd9d52122d0ee630a411630f11d432018c5e9696a9b3feacfa2f881d82090df165a73ee0fa610ad86422123a9e1502ccf4b695be0";
+  sha512.doc = "40a85407502116954024d51361dcbfdf36cac07aae382ada1f96d413f9b838ea5a11d7014722b5641a75b6c9bb8a5c6c134c8c0d424788f47f45fc80b277b3ca";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"piano" = {
+  stripPrefix = 0;
+  sha512.run = "49c3b29f48211ac6ca04ef8f9df74cd3f4673a84e9d84c2a9b06bbc958abd640116673abd751be40adb470907bcf65a42756c22996f0adc4e2c0dbf3d6afeca4";
+  sha512.doc = "50609a17b51de85d5f9df4da91c0c1c421a86ff222d08268fd0145e248eea740c68445724fee425a2adbdab85e0cf5b4a9bb4ee5cf3bfcb4a3d5cf4f1868df47";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"picinpar" = {
+  stripPrefix = 0;
+  sha512.run = "9706ae1d10df99327d4778ec538ffc9aec465a04382b0732005d25660f452dda539b736be50a271c9be623a823be113696471da6c2d482dbf8a269af7c1143c2";
+  sha512.doc = "73b28f87550924b208b48ca9a066861e02b1a8360151ad89609e6d8c36a772192f174befd87fb02b65e92370fec332fca5d67a2e84e97c7549b86825384dcf34";
+  hasRunfiles = true;
+  version = "1.2a";
+};
+"pict2e" = {
+  stripPrefix = 0;
+  sha512.run = "9f8fc3acbfb19b9e45579c2e2b0013dc84b9c670404e71f94b70c1e8a91569731a3b6b44e17e3d80bce5a099c3f16d6d74b7788daedeb48262971ad001d38472";
+  sha512.doc = "43297b99d4032a53b8dc36ae64a42ba12d5b800a352514e9678b0fccbe5798eb8c780b5b950f72f322eb12b9b23266d57df6d74409ad17d413d08028b033c6ce";
+  sha512.source = "847e0796c5dbe144ef13c196a3f472622db7bfe5a83f6457188739b82ecee0113ed704846019bf18e514c0914561dce35419287803552f98775f59a7c293a382";
+  hasRunfiles = true;
+  version = "0.3c";
+};
+"pictex" = {
+  stripPrefix = 0;
+  sha512.run = "ed91f0518668007aab7b9222dd08c7f489caaf084ef915f88d435128012b2b4eb9ba610168154f07bd0d084a34909cefb1dc0c1cfb2186982b4f08f9f6412f7a";
+  sha512.doc = "61ed0f632d7f12fca4631b13714994b2cee8e05176262dd8cab672d4f8f7e65a36e0d927e3b803991818d9d2976d5794d48a46ebbbaf8bc8aad99aadec7d3fcb";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"pictex2" = {
+  stripPrefix = 0;
+  sha512.run = "26b608cc8409c62f4c0130cc032f2ca5929886fafb9d22d93aa23af5a6dee62bbde83926bccbcb4fbd3d86a43810d751eb43a2a94be9528e1639c59fb61e5446";
+  hasRunfiles = true;
+};
+"pictexsum" = {
+  stripPrefix = 0;
+  sha512.run = "a24861e4b6184084fffa783918db485e5c7cacf7a6528681e7d8d4212287f1f6687604bd4f347e9e34ab7d29867dec2b30c9871a13b9bedae31b5dbb82ba1ed2";
+  sha512.doc = "148b7c29cb8189174442b95cd39b0d5fdf9f937a7a44a17314b93cce555cf3db459e21ae2c4eb9098c15551bd7aada2804855d68f9408fdbe974f6c12dd724a2";
+};
+"piechartmp" = {
+  stripPrefix = 0;
+  sha512.run = "e4ef7bdc43280c4311a6e8abf2719815196fb0ed0a8450501061e0b3b0bb44cd60947d6d623ff753c5ad1384d98219df695865e6459eef02b2b96f00906d023a";
+  sha512.doc = "f74c3c34d37eabc3b5e857a90e8da2c6ffaa3b4a6974c6b1127f898fb727ff18f0f399e9c4ccde8d4d198bece0ea83fbbac37a1ba1d381576166b5a2742113c5";
+  hasRunfiles = true;
+  version = "0.3.0";
+};
+"piff" = {
+  stripPrefix = 0;
+  sha512.run = "79b804dfdbb12b8d2e854341062f2a149f9b0e061385a30650c39b877cce72d1af4ad1644d73fb3ca733a171aa61d1b533295818dc10a92eacbce2ca60722de7";
+  sha512.doc = "ef9d14cf4a38315e4d523082db9baf8d0f89e5963001d12ba7ffe260ca2255a6aa99dc38392a6ceb0fe24e6abb8c77b9343f29300ff5c814c01adfff3321923c";
+  hasRunfiles = true;
+};
+"pigpen" = {
+  stripPrefix = 0;
+  sha512.run = "107700bb0c2afd35755589551ca6bbd9a95ee6bec39e51868ea1b5fde4855a0ea2eb92b50105eb6a3490f82ed6f55c33cac25bbd58eeecb57fb80380095b7285";
+  sha512.doc = "48c6c4c26e7518f06233ce0da8898c1c722829adfad042c12b8820bb1bde43f25410c41f76c51f4d01035c9d654bf3ae8fc7bb44a4d2c23c52f3336ec7e7d128";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"pinlabel" = {
+  stripPrefix = 0;
+  sha512.run = "56ed76be6c634b3c1fd3f83e12304d0d0e078e027754ac7619d680d2072ac7b67c527a4d23dda8feb6496e3808b3414bec65a48d4750d44405fa4574f122880c";
+  sha512.doc = "c56fad48b7cad065196cecdb64e501555d2a8f3ca098f001123215f8e21968cdec2da28f2a68f7e07ee9b1c2d961a82590aa136b15bdc87e9176462cd706b0a2";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"pitex" = {
+  stripPrefix = 0;
+  sha512.run = "dcc4280ef914ba66210ce471dc276042070b3246bc95ecb93b3d8af55393f49921a1d5e6851223299831344503dfc77fc2893f4cf1b78351dad40058979c20aa";
+  sha512.doc = "c3765f6acd4a147ffd2c216b1cda58e5e6ac8dc1202b444fe80d0dd69449b01df3eb17069842ef745e76e88371bf71c178d06c5ad2bc85e3427726bb30b74002";
+  hasRunfiles = true;
+};
+"pittetd" = {
+  stripPrefix = 0;
+  sha512.run = "5bd78a90b4c7b9cfa8fbfad66e0de79d09762e06d3bb35a7aaa13ef8ba73aacaceafd8d5b5468de8fb59c6f4c76d364af145e101543c7ef2089dc9fe00e5e9db";
+  sha512.doc = "e72d325fbfd3159699621fd703fd539259d1b13ae69d00e771291e156e3ce6cc15a0d7e4d2e74a3ad3492c39c67adfdca5491b68dd6e8ac78ac1213400f091fe";
+  sha512.source = "fc1afca13fa1d4b6b0f77dcf693939be3d6423ebf15dc6354b955e1a02ea5655933470de740d0d626d718bd48b5f4dd1ed92263d8524d0ba38b2e4c328bbc135";
+  hasRunfiles = true;
+  version = "1.618";
+};
+"pixelart" = {
+  stripPrefix = 0;
+  sha512.run = "9f9839c0d286262560f24c7bb83603c227addb9d5e969aae8d0d943cf305c25b06f74b3a2a3fcac9e6ab5f2473ea0e11b94283b71ee3794bad21c22212d05e28";
+  sha512.doc = "8ac425c6345b95739a4864f89c967170ec121e0bdcc4b1c3aec9b60430ae7c240073439270db1311f9383c139bbc485aa2a39248c4ac5f788b8ce37345e6c65c";
+  sha512.source = "7e8962f9b1989fe23c62dac7003e0e1bb5ef1ccade7b2e07f761f3cd6c44ebda85758fd2a2b438ce725179772d8520ebaa2037920844000714229b53d6d99ccf";
+  hasRunfiles = true;
+  version = "0.2.0";
+};
+"pkfix" = {
+  sha512.run = "b4d374e5b771e131075ec59ef6713c6433cc3cefb6331a933e791c3774a9d54d6c8427d70a4aadb2c6326c3733abdb562ca103f0b6a9dbcafd87856d20b18a24";
+  sha512.doc = "c6819c63aa4cf7df5879a796e08299f2fa132e1244648d17a7fb0b3c28204b0641e56fe4661887c257ca4f5998786c31b1cae2aa64e3163340f08d02fda4c8d4";
+  hasRunfiles = true;
+  version = "1.7";
+};
+"pkfix-helper" = {
+  sha512.run = "4828927668f21f465ab672b92e6e3934e81e60bd9b3bc1f28a65b2c4dd26d2ce244258ac1b7d8846c0bfbb653a2fe009875ddfcc0383b34249e775f675497478";
+  sha512.doc = "146bc49beeb779c4815737cffe1bad30c28e7e44409a3e7036ab82c58f6f1b7e0ea3498f1a19cfd312390bcbc31c72d9f61a92501d87690a61cdc7c66c2fd2ae";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"pkgloader" = {
+  stripPrefix = 0;
+  sha512.run = "2b9af06a79f484ce948b98d8ac09f3327a64e2299770ae6746d9762fc6b339d68aa3ad2abc5e67dc385bf4675cf406f170ef706fc101e87f6b58c839b6d3a3e2";
+  sha512.doc = "231038d0af3e7293cec5b5e3a9835b1ddfcb60d5c8006009998e5a04638e0ff818ed36abcb2326a56149af0884297059577a3437e9bb144264cf42feed055cb6";
+  hasRunfiles = true;
+  version = "0.7.0";
+};
+"pkuthss" = {
+  stripPrefix = 0;
+  sha512.run = "3714a72dce39b7f72c4bdd8355d077822a41c332682e4e6b09bc81f16a61cf5017315428e942e26a36f8bff79a818b9e35b0674e01412f7c29f1bc94258d4636";
+  sha512.doc = "7077cebfe115ef19f1d0b1a333babe00f75b47c878d5c316bce75a80b75a53ee19814baa506b7587d18216d928a25f2e8722f244ac2ef5d32d7a7375d76be0e8";
+  hasRunfiles = true;
+  version = "1.8.0";
+};
+"pl" = {
+  stripPrefix = 0;
+  sha512.run = "8647d7f075ff8c4559c1549b0e1075790b3fc2890b55f2d8612ea71b385b9a90b25a1827fd99b823ed945c801e1dd1773b28be3fd9b8e9744048fc370178e599";
+  sha512.doc = "f9e53f7d006b671d788ee888432e62a98704ac5ec964ff6b65704a2ac9afd056f1de366c4ae60460de3c112fd9267e8ac8605543ab7d8cef345d4603c93070d6";
+  hasRunfiles = true;
+  version = "1.09";
+};
+"placeat" = {
+  stripPrefix = 0;
+  sha512.run = "476dac5b149811659c663751478f9f224e209dd63954cb88baadcc94c70a4861673512e01c4a5f30097d242f56f1a6edbf4fc225f8b561e49a4e60b02020488e";
+  sha512.doc = "0fc82d9b448c85eb3d77a7943b9243720f41894f062d9723b3dd56f2d3e9cd8fcb87a3d57f387f1c87b3ea132fee2e0e08962d9044aa7c756f0db979f4c06a3c";
+  sha512.source = "c24fb52958d4bf39ea7925b1b68f2b2a5eea95c4c7bad8193d272111d6cc896b89e1b7ffd923a0e6fd9fd231dba3d1038a8730ae58b4ba059738da646e6b7bed";
+  hasRunfiles = true;
+  version = "0.1d1";
+};
+"placeins" = {
+  stripPrefix = 0;
+  sha512.run = "618eb33f1fce0b089fe111b083b0153c146e0d8abbcfc235a86dc6a698a2fad080f8ac38e04037e06b0e1e2782291ca6d01ae69922d181b26b4c809d6aba262a";
+  sha512.doc = "2ac2312083ae8abd3fe3f85da7dc65032a4c6bed4d1778c058120b48292f459d1b77d40e4eb6f0afaf88a5160d4fb0eb7f353ba1d93b7ec672f054e58de4d6f5";
+  hasRunfiles = true;
+  version = "2.2";
+};
+"placeins-plain" = {
+  stripPrefix = 0;
+  sha512.run = "ba143fda432b8ff9f96d48218ea3b3d29308db3a403c64af5f4a89b8305ff835481d9e0e77bff92530207359115f6a44b006cc58bce99c0f7d3924d1134ef60b";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"plain" = {
+  stripPrefix = 0;
+  sha512.run = "66f585e1fb6b95913ce71406e840bb15953b2ddebc3ce0344eed791e496ea75b93c4969abc363016b71dcaf65c0c676064ec778bcccbb2490031959ef3276bf2";
+  hasRunfiles = true;
+  version = "3.141592653";
+};
+"plain-doc" = {
+  stripPrefix = 0;
+  sha512.run = "bae58c957de52e1a45f91d8ea49579ea9c5b50b641331ae8d27146b6bbda1cf93e09abe58a011164ef99e5513cc32d346da7d693e975271e1892674aa5799406";
+  sha512.doc = "03f17a65680e4fedd76abf2ec46dbac4b7871c3106c74d3d7c7f200bd6124146b2f78848a3761eaf63b2c909eb5925b78441d73a48a4437ef496b8643777d847";
+};
+"plainpkg" = {
+  stripPrefix = 0;
+  sha512.run = "aa1158f3958013b133dd3f9308063543268181296274a40e2ca606c8e684105e89b79cd9bb45d225e14865ca0e998e0412e8edf8057445bde549f249a6d69b2e";
+  sha512.doc = "684b4f193f29336d5bd2c494c0c447cf0ac28090a156ae286437033e14507607582b3b9b40bc7b82fd92661a4bdd75f953e7c0b675f46418bb585b6a9492eaa1";
+  sha512.source = "44138ffb31ad8f78b0ab917302f48f0bbea871ef390c52b211ac25dd9c16f0687f02348c96682d89c9fdb5586b157c9d6d4ab3f404f40ab173835997ffe7c237";
+  hasRunfiles = true;
+  version = "0.4a";
+};
+"plantslabels" = {
+  stripPrefix = 0;
+  sha512.run = "7e1724b32035ee32325c491bce57ead23f40ad7377b4c1d5572499fef920b874bd57298e654429203cbea726b8d645a0899807547db80825be163538c1d91537";
+  sha512.doc = "999f132df73c15a7b3501487f350e48777543745c5cddbbaf314bcb62eca9b3ba41b51324b61d04e9f1d9cef4b9b8ab851d3528f8893bb21e612a7f50511da65";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"plantuml" = {
+  stripPrefix = 0;
+  sha512.run = "a7eaf9dfd05377787a9bf18855506506a8252f0a8c44aef2d452834ea1f7091ecca66dceb6124e44ef117294d526838944884ee815a8dbf48ef4558da1284eb6";
+  sha512.doc = "ad2dc0f8696e15a55dca16c3a45a6376cd423c31722376b30fde2ba2443a4b768d02f745838ee4c83a1a228b6cb492367127799d9483a800f2da03ebd0eea214";
+  hasRunfiles = true;
+  version = "0.3.0";
+};
+"plari" = {
+  stripPrefix = 0;
+  sha512.run = "86e91b884be131df6b4da6441a9fbeb872e0f345eed49005ef74d58eb3ef8a2724da98cc810a51b58d45047d77545ac6b9512612b5946ba29d443dd14bbdb263";
+  sha512.doc = "befa46f8ef7c4c89e18339ececbd53341aa50d6bfc8927001d17395cba42db0f0ca3414619c746c78e4f5f4f9cb1f6db813defc7b89299f5b29e9c0866852c82";
+  sha512.source = "e03c7b5fe7406c447509d4ae841c13c579c608564f45b83e1fddb066248b53e46f83a2760d745db1a5acae08dff493686d667f0328c9c3d467df6a92d8304a5a";
+  hasRunfiles = true;
+};
+"plates" = {
+  stripPrefix = 0;
+  sha512.run = "f662191f6a053585bbcf5a71635b6f63ee5d713086bd24f3c879f73868b5ab42b6434860b68408fcade7b7ba448845d1dd6a5be12b10bc25be8032b9dcef9615";
+  sha512.doc = "12779b285951d5e3d7a0f9d3ded736d5368291b678fd884262908897c4e32bd5fdbdd6bb4eeea59bf922555d5dc8daf6b0e06a174fba2605d4357dcf1f09c6d9";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"platex" = {
+  deps."ptex" = tl."ptex";
+  deps."babel" = tl."babel";
+  deps."cm" = tl."cm";
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."latex-fonts" = tl."latex-fonts";
+  deps."ptex-fonts" = tl."ptex-fonts";
+  deps."latex" = tl."latex";
+  deps."latex-base-dev" = tl."latex-base-dev";
+  sha512.run = "dc0704d481a209545852edd6e4381d3d1bbd35173a3e67010f396093725d7e379aff68507898246ae0741658ca957665c9bcf5a6163648542a3585e8e8752240";
+  sha512.doc = "b762310465dd6cf147d5f5342115a57124cbbfc708e1a48caf8ac57996a5213499f9154c0c392f63766848f677f617d3014a7aca404ae5481c3fa0206b87ab39";
+  sha512.source = "cc1c90a007cda5d8fa5ddbf42230a23ab3249c71d70467b94aeaabbe5e42ca80e370fd2abe350ff494f8b17edd13c47d8e8ade18b47a46ad34c578a8baf06a6c";
+  hasRunfiles = true;
+};
+"platex-tools" = {
+  stripPrefix = 0;
+  sha512.run = "bd1b61377f9793cce68a18c43c43316aed3f6382d031e7948e5ab6726b9be18d5b819ab3fb4800dd9fd1932af433352c7285eb9498925f54b66e0f87b0d293f1";
+  sha512.doc = "a58c732af05538e8450b9a329754d576cd0c606a676d2451212d928d39e841bcf702cb5e096405c455f98cf012bf4f75d39295d7ac5efc1c6d3647a16345434b";
+  hasRunfiles = true;
+};
+"platexcheat" = {
+  stripPrefix = 0;
+  sha512.run = "1409c7311eaa82811236d869b04e9f55fa2a96804faacef4820072a4813055e70ecce0e8c155ec19016f1ed4e57bebe0b362c5457d1258f317a40fc475d42aff";
+  sha512.doc = "bfe47b947a915099de15e5519a3aff201b327c31d29c1966d4fd3e9b73581792d918b461ed1944aaf5e8a5eb7956c38579a3fd972f189b1e3abb903c7c904cbe";
+  version = "3.1";
+};
+"plautopatch" = {
+  stripPrefix = 0;
+  sha512.run = "f7c02f596e58710b401ea7e9b071ac7786dd640f4512111522414f90d93600854fcaf31df49af6aca605ce1c4ebce62373226d2f511c9584ac665d6b20e37d72";
+  sha512.doc = "291d4c18d6b08eba869b32e058eed9de075dc35082496cc5bb552a905bd9f9a08ce7e7108320d0b2af953a351899bc0576f7d05dc2a0b87409a72fbf6c08224d";
+  sha512.source = "13c1c1aac3f0aa30f6f0b102ef0cfc478436eae8889de147dc7ef5e6ea4e7a555fc15d97600defee6b8fd8ee40a2a1d01603e591b0e4a3132cc3eee6dffbfde4";
+  hasRunfiles = true;
+  version = "0.9d";
+};
+"play" = {
+  stripPrefix = 0;
+  sha512.run = "040468367a783e7bc49dd4b51e22a72c41ff2985a52e2551b3be6780767e17c8d11178f097cc66f5683033eb03cc2ebc2c08c1f4477daa7b8f9e22d8a40dd385";
+  sha512.doc = "97c882b12ab350c5b0fe066e04ea7c2c136b1dc7ca29e51d8f89ed695769c9ef1ed255c3c109ff71838bde91d25167a398230cd25809f1374ca306fbd9ae68fa";
+  sha512.source = "3bf9b5449611ce72af26a68c99a7ea813c7eebce59336d5c7bf65da1a870e6c26238f803ba8e07ee2a084826e6bee7ec819a919e7abbbbf11946f611cab17a03";
+  hasRunfiles = true;
+};
+"playfair" = {
+  stripPrefix = 0;
+  sha512.run = "cfd2c243878c3d2bad12bd6e284078b76097a43cb01e9c35bbc4af753502bebd49e73ca49dd91575196cd27d2e391511bfd4a268cdde20aa948f835d877a16c5";
+  sha512.doc = "9b60309afe7472f848be4b85dbeb4a5dbc422a0b0ac480a2f97c73a7525c9f20289133dc33e6e49a029d9e277536df5dd1bfefb57d65341a5d2061b3877e898f";
+  hasRunfiles = true;
+};
+"plex" = {
+  stripPrefix = 0;
+  sha512.run = "e1fc413e26383514c6811ef3eff0263169cfc12881bfa8f2f9e1e60326156bd255bdb63438d0820c6cdf5a4c026afc9f6397598f1c59ebbbdcf3c64223fdf2aa";
+  sha512.doc = "f1132741d9d0d4961296f36cc17d56f7e32fc4a7d539593fc09a83460b5baa9f76a08b957bbd6dece4b29980420cfab73e05a65a2c4dbbc60308db582ebd2c8a";
+  hasRunfiles = true;
+};
+"plex-otf" = {
+  stripPrefix = 0;
+  sha512.run = "07e49e5dcbef60efd3e3050259f10b75bfbb83128412a1e60a31c2f17983ec73d055e5f6e117ec2673f9f0e5db716471fefb312be50cc4475761aa6ad895e9da";
+  sha512.doc = "4af950e1a3a384a1c738c6fa1bad629010ee2718840094500976b6883c2e3120cd070631463f90610c60877c0dea771c9c7e4f8f8c091aaf1f29b15b8400de96";
+  hasRunfiles = true;
+  version = "0.07a";
+};
+"plipsum" = {
+  stripPrefix = 0;
+  sha512.run = "203b9cf56acbc53b2a3c195ba0a27728c93db91bd4be48441e61967fd0488cbc4ef96485ff0b567be64ddba798bb44308cb7cfabd2a2ac89d294203d93ff4d29";
+  sha512.doc = "6d5c77102abf42304f8480f74a073ba25b8cf317c3a6cf4c22af6035b17b07ac213866a10ead2a53d033b214e4a6d6e642d043d847e61fb165aa8a02ef90f7b3";
+  hasRunfiles = true;
+  version = "4.3";
+};
+"plnfss" = {
+  stripPrefix = 0;
+  sha512.run = "0ae352953c5981b791379d9da9b61ad8837c22053f3371f351152078f4dce6b12615ed771987115cc094613ddeb0c275568e1d7404f321516418d218d9c68473";
+  sha512.doc = "9569a4f77dead68ad8c76794f03e6ffe147e1801324291fc13487b05051fcb7f307971e65edf66024c169411cee9b2940eb4daac4d073773e67f2f303b364870";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"plstmary" = {
+  stripPrefix = 0;
+  sha512.run = "72d54627fd8a10215ae9fe417423c46240997f865da8b4f4b976290ded7fbb0360477db27f140bed0ceb4dfc57c42a23fe5ce780ec5eeebb9b3e30b372adfe9e";
+  sha512.doc = "6e5c425b7d484bbe187eef030fbc9d6a0ad50d6d8e22c5f08d3762cf8082b434de8a4c5d13251d90a016715c9a85aa82dd2637abb6e17a6973a08514baeef7fd";
+  hasRunfiles = true;
+  version = "0.5c";
+};
+"plweb" = {
+  stripPrefix = 0;
+  sha512.run = "1899a3498d10950f67d24d2d7bf0488cd8867bd862960fa892581137bb1fb3426dea9e193f8993ffa93df11684dbd1f25bc79a98489317998936ab4186e9a22d";
+  sha512.doc = "9a510c4fd534c9451863a47fb8fa3911cf5199b295b1e3e2739cfc37ca0351d28fa1876e5456cf05ac7cc05f9f60761578ba6d77841ca575908cf4f0c9f0e3bd";
+  sha512.source = "09039cddf52bb2080fa6f9dad964f267e43d04504dde81e010727f4957a4de0225b0e23c1cd9ce7222ee1ddbf0d6f1ed1405d0405cb849adda77d99086402d1f";
+  hasRunfiles = true;
+  version = "3.0";
+};
+"pm-isomath" = {
+  stripPrefix = 0;
+  sha512.run = "2ca05438d8a9e4b2a9d1e4a9232071d34a915d9f93cdd865191e350b128b9ddbc9f0af67d76eb49ec2b6f2a1485a5a792850f0abbe59de0ba4f50c0c10b89a0a";
+  sha512.doc = "76876cffd5c59b2ca74901c5c83e364c0c7982b947efd869f82ba801298f5b57d84f292015c8da28a3e49aada42eeea9c35d11660c3b61abd0ccfe31708e8d9c";
+  sha512.source = "55976f387b8a2ae1caae8d340abb37ad1187efd4017a29243c474e8d9804ed0bf83a7206992dc2428a229a0bba1cda60b2b5e72235a79cbdff6e47361e03f814";
+  hasRunfiles = true;
+  version = "1.0.04";
+};
+"pmgraph" = {
+  stripPrefix = 0;
+  sha512.run = "b6e9f00789ad102b6cdcfb0fe48e5ca4f6976a7c207088c0c3e8b0c2d4fa376bbb932500d42133571a6e18747615c77eb6df2b4872ba86f853e3069ef198a671";
+  sha512.doc = "35f45f43c95264d4dbac5d12a71270fd15280f9008d204e12ab0a3bc6a62939e6de87233c94eeb7cf9627464d5f383c3d8c2cdeaed6eed9473a3e5fe380cc5e7";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"pmx" = {
+  sha512.run = "d8c20ad86fa90531b0bfb1e7af06492e31a4b3a46331fd36d60bf46275103672b61a419eb671a3c89f098e0c74a580df313d75001e52b27b148bf322c7df1593";
+  sha512.doc = "37405b45aabf5bb6027b7849bc23f263f2ab9ffec515c3d7a2073bd7030580898b1c2171c760a9da40dcf0cd4cde890e235dde572b22e69e6a273b7bec4ebeb3";
+  hasRunfiles = true;
+  version = "2.84";
+};
+"pmxchords" = {
+  sha512.run = "0a8f4a88834eb22d3f11ca567f37189af7834370530c6dbca4d83482e94cfb48b128bc1290e7f3ee718bffb4df445a300ddf5081805f88002f53bcf8b434bb3c";
+  sha512.doc = "d4075306620fa1ce037a37b9d2646d197348f6482e1286ff6fd99641a8b441b3d830a1420dbf6c025b8d11af78363b717a1acc7ea6b9e2954aa4f11ef04452ad";
+  hasRunfiles = true;
+  version = "2.0.2";
+};
+"pnas2009" = {
+  stripPrefix = 0;
+  sha512.run = "5e20303db90b2db63a3d6026db582026df8b9e910942303c952753d5dc27928ec70a8dc21edaf44cd57e04d25e93a87a5f28caa769a0425b47c78ea9d56ffa86";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"poemscol" = {
+  stripPrefix = 0;
+  sha512.run = "59906e64751670ce1a00ac953db24a890b0c3388fc306c5520d62a728497203c1516106210b56b26f22ebf6e78e33a3f01bb7d897ad356f2364ac85c17819a82";
+  sha512.doc = "8631041e8c3188dce9a0982b7e69e6efdf7949fbd600c5869ee84467b06b80754c86e1b54476843002a12be4a52c9f88c82441cebfb86d4eceb12605391d3477";
+  sha512.source = "6717c08c6d728f7aed959cb2ab1ded7d050241f61d878889dd838c85c4090aba602dd8b85e5c8b8f01fbf23aac7ab1562d9d33e31eccfbd508277507f5ab24ba";
+  hasRunfiles = true;
+  version = "3.14";
+};
+"poetry" = {
+  stripPrefix = 0;
+  sha512.run = "72e1de3a851aa2f23bdc34d4f85674ae6479affda0f6f1e9e1b500b202fd9cef823a04d12a7ef2f9fc195f867c7344f88f6990b97cb95e53d9fcf5f32d8568b2";
+  sha512.doc = "8a5a23ad316171ba1f00abbf905eb767676de2777f49c33692087356462067fc9be82e50b26dfdd7492e75d9b4bf444368dc98205a294903902f7a2f5c96a90d";
+  sha512.source = "afeb5b72d5064418d0e2c87bc13516267be905d10949b42660cf8d5a589287209162e41c52b9214492bc4678886fe6b4ce79e5a2da3924609ae5aa2ffdbd93d6";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"poetrytex" = {
+  stripPrefix = 0;
+  sha512.run = "9de77dc676f78ce6e18ae62f621126ffc2d78ceb9cb5612f8c129f0c0d123043c554a8996a68d2bf6c730a157f5cdda4101f8446e0e773671258ffb55d6fe93d";
+  sha512.doc = "e9bc2551a92df86e5b76448b2de7af423b8f96ea6a62b1e243f76588478172a7ffe035ed904fb8eb3c5be031e1451c997a68de3187933c3a7273510710577f25";
+  sha512.source = "4dbeac34f7a74a3a3610f8fa3d3b614ba9ed95384863d2edc40c4685bf7d514803a6d50ff8f27459a7ed993de97f835663ee84247fb0942ba9ff43779e2faeb4";
+  hasRunfiles = true;
+  version = "3.0.1";
+};
+"poiretone" = {
+  stripPrefix = 0;
+  sha512.run = "b270f09c59711712e27b3a0a73ca6109fd0e2580184fc5df02fe55140eb7db7b4e72e190309d12486d49593053ec50048c89c6203512cb451baf5aa2caa77c7e";
+  sha512.doc = "c9bb0616d8ce72c114178b4e0ca26bebcfb797af701555d53b3a1bceefd556eee2bf91fcde891b9b2a7b8650bccc9fd559b8630904e678adb4d2caa912da003d";
+  hasRunfiles = true;
+};
+"polexpr" = {
+  stripPrefix = 0;
+  sha512.run = "93cbffd695c765a14cbec16010d3804a1733377628b5b552cb0b110b629d415a07e993e73ce0ba4ed7df217d16a6eb3c0f3a00616d11b10d003a0cd8239467dd";
+  sha512.doc = "1d8f3bb80a538411abc72a30657f1f32b60164c807579ef4b346484f12d8797dcb4ad90472c872bdeeb450b44e32d08bcb06dca5334f4b54c528794b94be4376";
+  hasRunfiles = true;
+  version = "0.7.4";
+};
+"polski" = {
+  stripPrefix = 0;
+  deps."pl" = tl."pl";
+  deps."hyphen-polish" = tl."hyphen-polish";
+  sha512.run = "8d4c05dae9e5cf8ab36bdba5be8b0748d5d283a6a77c7fa18821ab3a20fe5935f302a8ce9b1a1314ef128a20c1011018ba7bd04d34466d017e16fd9bd087e108";
+  sha512.doc = "a619719518e3d9814907d33756c4a3f2494c3a94b0a717e6f848e31177622bad6ba2cf595a23ff2efb65ea04b70b267aa87cd87caa56c91bab7b36bef82cd2dd";
+  sha512.source = "fe630f5992e79ad211ac4537cb1fc8b40154c2b43f34fb15594e662909077eb0a58f2be41aa05ad647a45d2d00c8af82ecce2afc5eec46c941d1060f2728a4be";
+  hasRunfiles = true;
+  version = "1.3.4";
+};
+"poltawski" = {
+  stripPrefix = 0;
+  sha512.run = "bbdf230da2f81b48951eb90016745d68b73890f8c34ed2d336212ba33c7662a5bee1ba005d6e44c4370c81d22928e1013fb39e45db2de16fd05543310bb07d17";
+  sha512.doc = "1ebe7bbd99a3316b6c4fd702770c6f14a32de653909099a86433bd847a63b2eb231cba4f74dfaf1155c54a9393ae1bdf25710fdfc25199d09b75a265392ba51b";
+  hasRunfiles = true;
+  version = "1.101";
+};
+"polyglossia" = {
+  stripPrefix = 0;
+  deps."etoolbox" = tl."etoolbox";
+  deps."fontspec" = tl."fontspec";
+  deps."ifluatex" = tl."ifluatex";
+  deps."makecmds" = tl."makecmds";
+  deps."xkeyval" = tl."xkeyval";
+  sha512.run = "2ccb7747c5c0becc77181c75bad4c035dd3a3a2f5a5d8cce03874c99b82d2594e2a80bd6d7799f3882b988705eb61ecbae4e8eccd9c415ccf4af6ff0e2e581a4";
+  sha512.doc = "21e73e878cc9bad95e3d7d842e89fb610bf2076e9f68a5b8f693a7112c30172dac72b75728cd079443118f598d4d775d96ead8953d0d765d5527d678750188b0";
+  sha512.source = "923333748435523d21f20351f4bbb46dd0a35a9abe1fe1db8faa09c53f7d7b9210627b2e7ead2b822815813f2569594c0652f672f1248f931b05814b86437188";
+  hasRunfiles = true;
+  version = "1.44";
+};
+"polynom" = {
+  stripPrefix = 0;
+  sha512.run = "bbff103f5828757f9c58c768ba46dcd9197629273b12d997e80e299dc1cf6a34e851fa4ebe088d131781eb6efc1fbd39cab602ba23b791c68fdb0e12f69440aa";
+  sha512.doc = "b0fdee90082414d88469ba5067f1c16279ddfc8c13627098bb3c2adfaded3c355cbb161193160fc5b9682d45a10216c56fe2613855528f9f4965479c681e6355";
+  sha512.source = "cf9dc9f13290bfd84e2956630eed115a132bcedfd34e6da076b2fa0fd4840fc5fabaf995b44f2a8f3c3d9ba9de851683a306271b272a83331a92fac367d82a57";
+  hasRunfiles = true;
+  version = "0.19";
+};
+"polynomial" = {
+  stripPrefix = 0;
+  sha512.run = "46324509f078d9e83f4d94893454061636fd1148d5a2e9b59af640f617d82ba1d7397c7f7bb68ac99a83945354c875d3f29853e5ba38da59a2812f5f45ccacb1";
+  sha512.doc = "b570f3abf21a480e0bce2c08e44d97b488e9a0758d712cfde3ccbc45348eb95486c121662e296049220dd2802edb387651e839c2a819058111a2839049fc5964";
+  sha512.source = "db4c1d698b2a096ce6c848922beb747f70a874914d4ad1a468080c55ac0afbd89330c0665006f787c32c6c444ab601c64e7173ce9a5bd9241c1ba71582c0ea0f";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"polytable" = {
+  stripPrefix = 0;
+  sha512.run = "a83f8df3e09fd112a6f83a48f803847cbe112f2d18db803226e04efb6fabca1a8e5cd03d2ad1a3a30eb07d3590701b71b24f03b1e38d49f41493ddfc67576dbf";
+  sha512.doc = "7e53e2956145c29d7b9775ad8fd757b5dec4d2651683f0a48507094b86a5b6d42f1b659ffc72cacfc0cd528a6baad03cc19aabd8c0d1afdf57bcf365a5fca1ce";
+  sha512.source = "673f5f8cb4840074c2d33de2e53134a6e8288af411b6e61c1268dc11f5051c6cb65b8746fc2e2e959dd5ae2d3bc36a58770217c159c611ead0019c84918a03bf";
+  hasRunfiles = true;
+  version = "0.8.2";
+};
+"poormanlog" = {
+  stripPrefix = 0;
+  sha512.run = "39524ae2c1cfec8aeb09afa4c195dc2d4cd9445483dac4a99a6669e66fd0b236b99831b9212931930b7f821891f421fa85c363015996c2b5be35be8a82ff993a";
+  sha512.doc = "3d624c5f870f4fdd8fd3df91ca6f80471223f00ce7407eaae6d0e98ba2da26f497bc149cc1beeedf5afbd0353e3f7fc9667ba3e4336262d3e7a9877981866a20";
+  hasRunfiles = true;
+  version = "0.05";
+};
+"postage" = {
+  stripPrefix = 0;
+  sha512.run = "97315373848a24fb0c49e184cb5e4980e6c124d60bd9141f7ecb5ecea9e81097e4005ee29fc45d828a206ccf8a23a936bbc27cbc59fcc7b6dc4b75cbe4f9105d";
+  sha512.doc = "102b88d87ba4b371b16e1d1362f1ca42fb9feaab3f1df4d56176d353e90d68bbac535522e7acbd741be78f64624223a55a6f3802e8a190814ff9a71abefdb2bd";
+  sha512.source = "390567f792284e372089e8c8141daf42d44eda52a14118c60ef23911e405dbc7481453cadc1de9c097056f181909004a7a489c0040dd733d8c036bfa2022b3ce";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"postcards" = {
+  stripPrefix = 0;
+  sha512.run = "0e358697b47ee74afb9fb6bd339ea4a76457c78a76a37de6039ac44cd9ce1fc28a3866c42d988ccebf025d0e08c4c092a2b647cce4841662242f740f12297338";
+  sha512.doc = "936c1f923bea76aa323d2c8ce9949cea3364eeb1a145e735ff5bdf609de4c54cc78125392e9e3cc914180815bb9dd5bae63e50c0000b2143fe7de94c199bc50e";
+  hasRunfiles = true;
+};
+"poster-mac" = {
+  stripPrefix = 0;
+  sha512.run = "f685c2c6d7d2795cf80702c0f8b4da6661a6d076dfbefeeeb071f21ffebd4420c7777681e550ed8ce05726a4392f526da42cecd6e3f26b5dc8ba775494589297";
+  sha512.doc = "d06f06a4432638ce7780923818cbe638edbb21f836566fb984353aff0bbfbe0905adfa39cc69fc59c87c9e6f7f2c3c268b7f2ef9a55a0f0a2bf0b5212d9e2124";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"powerdot" = {
+  stripPrefix = 0;
+  sha512.run = "20888eecfbf1e390ff32e7cea503c1c9bcb5910044fc4f41238b63039b56da82993fb38c4f24fbcc43c8a4b451b59e1010fb81bca048d5ded1cd6455f7568bc2";
+  sha512.doc = "ba3051425104a49dc2d553d93220b569dfdf548090a90348ddc0286a36cb9f00e7956c617a133a0ef69bcf69cb5325b4f12007f6ce56868b6336d422183777a4";
+  sha512.source = "573248dc8e8e0a248c652baa3a57ca411302b40005a4e095d594f01cfc3a51789ae3a0c90b48d125f863e09a7672020a4fc7e51e45a1a75d8434c30fa41979c2";
+  hasRunfiles = true;
+  version = "1.5c";
+};
+"powerdot-FUBerlin" = {
+  stripPrefix = 0;
+  sha512.run = "607e182a393baf3701b944459e9cdd59451c402722226aff8f09e89702e46723be269b21b3eff35c8f71adc4624b00f083bd4aa0ebde66d49a32bf7de1eeaa48";
+  sha512.doc = "d822434b9e03f500779ad0b035100d01cbb197a68e931d17871bbe00ef3defbe594796be28c375502129424ef1309eb49e5f9f6cf1fa5ba8b4b8719a2825a011";
+  hasRunfiles = true;
+  version = "0.01";
+};
+"powerdot-tuliplab" = {
+  stripPrefix = 0;
+  sha512.run = "91a8008d0675ea36676682d741ffad1e2f842ae37b47da628bade8391b2c775d7a756d31d5169e087ca0c4c0b0e958a2bb34d5143f905439e9572a6e72c4dbf2";
+  sha512.doc = "5805d79f125ad94bc0818f52d31e14d786f4f032e03a89a0ec8ae69433d56654b6acc864563e3273664576a59880bf86de81756f76cf9b920a21ca8331ce117c";
+  hasRunfiles = true;
+  version = "1.0.0";
+};
+"ppr-prv" = {
+  stripPrefix = 0;
+  sha512.run = "4bbd2404d9cb4bee9de81d463a6f4966e28409b07aa744e155f398f07e513dac4ad262fb3ac81717dafc9dd9abaed2789c08d0cbf0ce29137739886b2ad1dc74";
+  sha512.doc = "b8228988551d32a5d5b3ddfc59dde6af1f48aece8f5c0f8889fbe479db6c962d77b687fb5593079796393a255350dfc90965fac07e241d4f0a48027927065e67";
+  sha512.source = "cccb93596677625d323b0ceb6743fab15c4300f3baf09846054aae249608f61ab2a0a5bcfd9a7baa2b3a9ec86b2fb90aaee284608bb908229a918436c9acd772";
+  hasRunfiles = true;
+  version = "0.13c";
+};
+"pracjourn" = {
+  stripPrefix = 0;
+  sha512.run = "40e7ea03f0b244810952cf93cdc7799e0e130a7b11d384893b88e420ce6adb4b5606462ab6f2dbb2e134770eaf32540b9feb59393dea72a70f4d881f6f6fa43b";
+  sha512.doc = "8e9b171919bd6412a3adb75abf1124beaf0fd562cca49076c1729814c7907b5b3f9b240fdb68d91055225e9b366749c2be6a2e421f52142d0a138e377a442046";
+  sha512.source = "a0f40eb8b245c3f6ca2c6e84f4b13d80b2c9d5f67a70c74fc14928fb3b4eba3659bdcca9852d0bcce18088f707955e8f0ef77e71879bd720c9dd8d59ef9713ce";
+  hasRunfiles = true;
+  version = "0.4n";
+};
+"practicalreports" = {
+  stripPrefix = 0;
+  sha512.run = "71b180b863f5405c145fde98bcae5942ed186de52654dabda4ef1a859ea292e6c2e6f1a29fa4c4320f2f9a442699844d4268fddf0200281c0f1a7477b49d9f5b";
+  sha512.doc = "48159a00f0c64c6a05e56d9c01b1e7c1fcc8342df3f762775c33377d45b0621e0e933db3097a5d489ddefeed1e0c155893e99ebf98c98fdd11df9b33e05e113c";
+  hasRunfiles = true;
+  version = "2.0.3";
+};
+"preprint" = {
+  stripPrefix = 0;
+  sha512.run = "66ef40f1f9bc1ef3348923e781ad92dd0174b9c45e16c97662f30971a449dd74580391e1f23fed031a41995e65ff90a6785328de0372cea53e3ce946da469d60";
+  sha512.doc = "b5e5fa40832249c5a0faa24c26e8b3a2a73036ef007dd3a61adb6a7989926c80e018fba52a66078c3d7b39e76901cc041ebcb9985ff29b53ade2c057abaf1376";
+  sha512.source = "a7fe23d21dfee4071285ac0ca77a0b8936e8c149b804e9fc19e42cb5fa5eeac23ef3ed59e0433a965ec6203a1b031d2a76975248e624a6452e8fe6ea016be1c9";
+  hasRunfiles = true;
+  version = "2011";
+};
+"prerex" = {
+  stripPrefix = 0;
+  sha512.run = "1df2081c0f10d4514ff324d83fe9949b6cdb9cbfb209b06e5fdbd8ad90991cdccb02143add807b971065b63c1cb865815ac620db6a4df0600bea22e6d57fb734";
+  sha512.doc = "d94e663d94b9b05acf7ff38285dfa3927764d286fe6f8a386f33d8055a5a5b58ad09f61578009b6b93c3aed684c7492b1407a626113f8eb4f8d0171cc1f45930";
+  hasRunfiles = true;
+  version = "a";
+};
+"present" = {
+  stripPrefix = 0;
+  sha512.run = "b22c0bb6803ebed5cd26aca4a9b55f2c7b506cc7e8910346a07437d60007310a3d2e3549040ffb2616df7f173279342f2334100aab14b589d0cc9e710ea89369";
+  sha512.doc = "e43a5de9c4bcf9281416963a898e350ba0a0b2d1cad92cbc97d99e2ee9d25f8407a09f024ec5d03a43fd3eee58e1c40bf99ebfff13913bbf85465588b4cf9710";
+  hasRunfiles = true;
+  version = "2.2.1";
+};
+"presentations" = {
+  stripPrefix = 0;
+  sha512.run = "b93bd6875538fb61fbbc737625da2d89fd7cef0f6b59999f78176f953d6eeecc2d44cc242bc89f85e293265b26a36eda55ab3fe6804a8e8cee2144694eb1a2fc";
+  sha512.doc = "7767c2b3fdb77078729f25ceec85906722d6e2abb6ea45fe9e03e7c0653edffdf1326a055175f309d3afa1f1a30f64c708cf0c6c2c273accf777abec088336fc";
+};
+"presentations-en" = {
+  stripPrefix = 0;
+  sha512.run = "47c4c3e2b1dea3473daf00f1577a2cdbfff2a3a64d5f39507a9486fd2e77dbcd8ea1e3bdf4069aeee620a62047b1890eecd588b50bad2f1c33b739f7721b205b";
+  sha512.doc = "f9d3b24aabc47cfaa0487d683708fed12489e1aca7e7107ba9bf058864f0dc5967fc7a84eab59888567bd47b06ce96a75dd50a132e6e929d206e30c30585d346";
+};
+"pressrelease" = {
+  stripPrefix = 0;
+  sha512.run = "0f983d4f836c03ede4ed6bd8c2c41dc69ad75a28d9006ff7ab534c6e483e84e2151bfd93fefa43ca327fbeec14787b43205457a9cf1e733f8a4c3a7c561498fc";
+  sha512.doc = "f107b506ba50ba8ed1b655f13049210ec4b90620348ac708afbba4d992470dd5aa8eabe84e2c0b926a55afce49e0a2cee28ecb3877550fe81099f7e5b40e9f40";
+  sha512.source = "57e94723413ce6fbb1405dacce4af0ab9f7b5e5fc9d091fcf3054fe9505cfda885ebf00b3242ad341325d982d223438e1a2b6cd1f9286cbf5621feb5ae9b1a2f";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"prettyref" = {
+  stripPrefix = 0;
+  sha512.run = "06e3ee942b9a30ff866abf8f6a46b6960321c0aaf2516ce48f587a55ffcb66f158887cbb9a476bc6323e90edd22766fec19d0cfcc2be8805eedd175fdf08ef42";
+  sha512.doc = "abcd8cb7e7ab78511d953d95699060581844dda67b3489317057782d97388f7cba990735b395e9563e15fd1fee137a86e8198d2d545f437a2d105bfd3e95bc12";
+  sha512.source = "d4793c0cec0e56a74d05c08547b68a83e5af33464b3c29a50189696c4d000ffff370422192a289a734e42cb4ef6bf2b95866523f3d6257961608e95f13dfb87e";
+  hasRunfiles = true;
+  version = "3.0";
+};
+"preview" = {
+  stripPrefix = 0;
+  sha512.run = "3884a0b8c8f09d046c7f39df28b7dcce43a95820636f39f628b499b2d06ab44eef647f74c6eaaf23692ff48d3bf5580ba97daa1e2021985c7d0f05f7206782f2";
+  sha512.doc = "d1d78634eb2289292948197bf3399b6afd2ccf5d59abe47ba489e11c0ca911c9820e7e06e9b84920ee0c323e83b32c0be53bfc8d09261ffc45ee728642e640b9";
+  sha512.source = "169f2fa0b59d1312a3cb42268612194455568cb8429b0c03b658a106dc0968fedd88f9ffe82fa984a02950640f1d0c6cba20e51674e747a3699488034dd7e0d1";
+  hasRunfiles = true;
+  version = "11.91";
+};
+"prftree" = {
+  stripPrefix = 0;
+  sha512.run = "c0e5f5134606c514b13e5fc3bc58a583f13ce844bc1e8fbbac7aa09d8a59652c50edaa986c5004619219fe4c72cb963fd89dff5119b3eb0f02fa74cdc1ad1374";
+  sha512.doc = "d81403af762fc0d3ee9d7b53f9f0400dba5a50f8bd2feab92186db85c18011aa3170b9173530cea5e6e2aa7bd2f475e3b3016e5ab79e990c6abca3d5239fb6b0";
+  hasRunfiles = true;
+  version = "1.5";
+};
+"printlen" = {
+  stripPrefix = 0;
+  sha512.run = "bbb48c169f31a1f93024195056c323ce67afa1fcc00f309ef1b820dd40e0b86ca98d05f6cd4af66379682813a3807f24295a803fdc91d8b9f19972e1520d5eaf";
+  sha512.doc = "25d00eec6c6bd069675cf7d980886b12444e41d18a83ed8e650923d839da8dca21dff65b110105458767b95c50b52a0143b2f7d88b6567ab3aa9953f4ec32a88";
+  hasRunfiles = true;
+  version = "1.1a";
+};
+"proba" = {
+  stripPrefix = 0;
+  sha512.run = "33ef76474e7183c32b5f982347ed414ae7616484ff5a5d8564574220d3757688a3a47aad000c5b0a66a39dbbef20c789dd1445d872b025c274585248176c86e7";
+  sha512.doc = "960887501b74d2c5e8a00c09464ff17dc9c733dd663fb35c32b34bd8b79b2a813536b6c0f9c5df4340dbd3adf1f30f569aac678e90d5f328e1c33130767fdf21";
+  sha512.source = "d1305e797d8884f264a20df021b6b0619cee1df1aba8943f5533c2cd839e093420e43ebd1aa46282457a650569a883f4f11a9319f6b6612dbec5b99d29f37087";
+  hasRunfiles = true;
+};
+"probsoln" = {
+  stripPrefix = 0;
+  sha512.run = "f0c63a327569410af7eefa9f87fed56a6a2db78b05133c417afd245958a7f10dac965270fe00e7fe5de6ddfcc4a1cec446df819728e76ad347c7664fcfe849ec";
+  sha512.doc = "c79babc397260f03e2ad66556230966d1af97bbd5703c25cd09ff3aaad48b49d464672c501df047cf5226370b80588705c59212e75d0d1970337fd446d86e70e";
+  sha512.source = "53ce8efe56938c3e16da53bb1255d86b1ae9cc546cbf4983156c098ac07f1e7c16a998a7dc53fd445efa9f42a6b82889e50c188aa57a72aa9186177fbd744f5d";
+  hasRunfiles = true;
+  version = "3.05";
+};
+"procIAGssymp" = {
+  stripPrefix = 0;
+  sha512.run = "66bd3472ef8d8d26f2eee0368615fb0a326ebd64dca3a0afe9a236880eacfd723caf6f65cfd07ad2a6f5f3db9dea6da75f33de9d026a48a8304c096c60d7e458";
+  sha512.doc = "253adc51e38015c55af91bddc0b7ac6031d482d0cfa869cee556ca82464932a4922d0223a4a156e148dd89e369e2960156b411bb2601583d07a99790518c4823";
+  hasRunfiles = true;
+};
+"prodint" = {
+  stripPrefix = 0;
+  sha512.run = "ab2b0ababfad124b38b018c7313df0114c36fed0dbbaa42de04295b09142740ef43f34c4c6ad926c97c1ce28521c1d87274486588609197c2178b631b4ee6876";
+  sha512.doc = "addad035cb9e7b88d9da2bf161723db51897342872dd6c671695bb7bb0a6a4c7bac872ce40f31b22f5fdd84cc03994562a6f78f14d9203977d5b7c8d17130db8";
+  hasRunfiles = true;
+};
+"productbox" = {
+  stripPrefix = 0;
+  sha512.run = "9b243f6558dd449ddb9d9190ea53a71ed5b28d25f5fddc64eddb194144aa688e8d8e946c53f115d40813d0933b77d5d2c78023f24a1887d8eeb70e6c1ad0bc1d";
+  sha512.doc = "73f8e1afbbfd9d4047120280e746ae1349225dfa84b98b288e23f477d2eb83310271610d6f4e40cdeb0d124788a97c1f8aaeb182a03cf2b1311e286f7299aa45";
+  sha512.source = "064e591694d0c7f6c9c981ef4038175cdb1fc9a120daaf954051dc05bb6b602bc7fdbf961a25d5cc490380028564316adf5714a151e4606aca31d1f4bca09a54";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"program" = {
+  stripPrefix = 0;
+  sha512.run = "a9ef7d68ad86b42657681e2b798899b5c7c472c5e272a9098a1424a35a109dc4a946be54c4007db73edb861cb475f293e404cee9fa0dca8cdf086eb6c4790319";
+  sha512.doc = "4213b5bc9cd6b2604bf1c667dd123729c0674d1c74338ebeb86b1551af14be3e24c4e94b4e5cc2c06a25ebf934d56eb6d3b5ce80e452798ea02fbb0ac6533580";
+  hasRunfiles = true;
+  version = "3.3.14";
+};
+"progress" = {
+  stripPrefix = 0;
+  sha512.run = "df21ec7e4adc36a420959550376fff5b8a55fb7dccc064476b2306226c1776fb2075994d9ae63bd5bde0b68571671bacadf9285f53bc9e639c2afd59e5b6814e";
+  sha512.doc = "e88280bb1a93d34dd5597627d763d1b2a21a56990ede2e029246dac84f3bb22e05a08a9a94c0790a9c8a87698684816ace02149562785cf36f2b6af82f89c130";
+  hasRunfiles = true;
+  version = "1.10";
+};
+"progressbar" = {
+  stripPrefix = 0;
+  sha512.run = "d12161aa891ea45cec2a4511c48a1c338de5acd512e426a24988b79b7d9d1734479a1cd93e3e8ee11da67858d97260b71ca35a3a7a3dbbcd2bae746221a7bafa";
+  sha512.doc = "a60ee29da0517d6769e09f12af7b600284f32478aef1d28cdf167610c45bd87f841500c2bf718ff9b6678a171f3138f4a7a6ac45bd41500510f509e8e7067efd";
+  hasRunfiles = true;
+  version = "1.0b-4";
+};
+"proof-at-the-end" = {
+  stripPrefix = 0;
+  sha512.run = "1e5647e1421742e9f0198c5ff8ae5ac315eccef96d0a7c9c5f1dabef167fca5ac9221cdf60d99dafbdfd60f6960a897ebb2d2c4370edcc0d0a36942c0041a777";
+  sha512.doc = "9100916a9ebf426502d7c25e5f848fd4eeb19050faa01b0a4a795b838d4084849b42a1f6a187dc8218aeffb6df0cbe592b512e1c613a1045e467198119b33555";
+  sha512.source = "ea0b286182db09ab249a704ef25abc8bd951b51e8671ddb2a8110997b9db4ed353c059f44170e8a5bd76878ae97d34b460701994849425c1f40925d663d0ac6f";
+  hasRunfiles = true;
+};
+"proofread" = {
+  stripPrefix = 0;
+  sha512.run = "ef0d35bb06d1bf31cdea9aec2f342eef4b8cf053863a26f5c223c1966f6715a547fb61b2f92d4ac273c3309fcfe219f9a78bdf8c9b3ec3886bb96dabd7935033";
+  sha512.doc = "6b1ba0b1e009e2f7b337aebcc5c54882f2ef3f2089261d3b9355cb0adfec8aa3c7f207636955979cc0a74554e5878423a23982340bd26ed3c2a634f821497565";
+  sha512.source = "9a434d59a1540e1dee97e9baf1cda034f768a7a24e1deca7e0f454f7d7918cbd7645e19454fa7683c3754f80e1c9da54b3b2ade2dd58f4c332d2422fe1690935";
+  hasRunfiles = true;
+  version = "1.04";
+};
+"prooftrees" = {
+  stripPrefix = 0;
+  sha512.run = "f455c85a30ca4882829e0d2b74f202b129333962843a799c575f080de9b67c1c543db10f012198655760bbe894eae2149eeba1322de3392bac0eaa9a89fe00df";
+  sha512.doc = "ff1ec0f5f9112e7fd09fee4e3ffba06bd281c4578a055e831c64a8edbec234bd69c6e920745fe6e4fbcbb12b27189465d4fc41c9dae4f1ff80d5096ef9dc3cee";
+  hasRunfiles = true;
+  version = "0.7_svn_8641";
+};
+"properties" = {
+  stripPrefix = 0;
+  sha512.run = "3bde5cf132c9013bcbb0eef439e61725ea41a09720f98bb53f8bbf39d56d6cde34ed1613b001a86b40221a36233b1d5c226819c94b41d49211065e1477a0bd42";
+  sha512.doc = "eff6b91e8fdd7b0a6b0526c7dd2243e32586a5ce12071130f388a911fa34cbac4681d4118b601b9eb979a272bf89b82f00f8ba509fa996521e8a2861f8e84a80";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"proposal" = {
+  stripPrefix = 0;
+  sha512.run = "d9a352995030efd57ecd46028147a6326ede0695545194a01846d4a3e2d29096ace9e6f69900766906f3ecfa05ce566ebd1c2c5f76a3b2b2646c1e0f865093ba";
+  sha512.doc = "53c1d47f2f42c9ceed73f350c2aff9b229d6dc8dfde9e3fb8109971905c5d6430ca52d72551d540f5a1727a767d6cf485d8bca2489f301edfbf964490ecfb5a2";
+  sha512.source = "39ec30b5c0d94a2beb6d83d796ed13ca95b5e0045edc8e7828f5528e44e9f24350fceef93ec2c3bf9cdbf3766d7ddb0b72d6e10a909a6fc92e393681d425d8b4";
+  hasRunfiles = true;
+};
+"prosper" = {
+  stripPrefix = 0;
+  sha512.run = "bf2285803a71b00c67a9e64ca5e51bdd880856338b0bf3e95bfb2ff2e78d5cdd0617424ed95918b5982d5befa71476b89567b2107eb0c206f9a9f53966a983b6";
+  sha512.doc = "21593ccdc8231e37f0b2938d3978205ab3ed61f74a6e8a4b1dd2cf82da552bd920a7711c025964fdab5661207cbea1aee04244c93552e20d10df338c7dc5c138";
+  hasRunfiles = true;
+  version = "1.0h";
+};
+"protex" = {
+  stripPrefix = 0;
+  sha512.run = "be8ea34f282fdd739f72f9b33375bec3be5055bc953c7a441d769ac1e7568af9327ae6030f67a805188dbd485ee8223936921590ec86269e371da6d3ee353afe";
+  sha512.doc = "95746823c32526fb5e2c9968749a7da2149d23c2ec9f1ced2a655a4fe54ad272bb414abd0be0d78775b0ac95e6440d9b6ead609de7615dcceb0186e4683e4138";
+  hasRunfiles = true;
+};
+"protocol" = {
+  stripPrefix = 0;
+  sha512.run = "e9555a25b0051592bd700df5b7335ad07eff024efd1efc4ef620fe7ad37866aa1edc8f354a7c772b3a298935bcffa9b5b2b49c2b0a14c868ae744cb9165bfd19";
+  sha512.doc = "f047068c0b9176087cd56530c9b73d30bbffb0d4b958cefae39f1f3bc924fbe705e81b5c867735715566b674379d1731e1d58b123dbbda3686a2b84f42674338";
+  sha512.source = "f41e90e822d9cffd941a9be8b918f5817c5757c2911a3c2162899d9e074390fc4500d8617e385f5edada4c2accf5a08421cab6192505721deefb4b1ceba136e5";
+  hasRunfiles = true;
+  version = "1.13";
+};
+"prtec" = {
+  stripPrefix = 0;
+  sha512.run = "06e946526f194e36b55c91c46615c74a255411ff3de2fba005a672741830a5bfc162be122a7f03d00374917ab70dd789549a2976280db8c8106999ab7e0854e4";
+  sha512.doc = "fb299846eca43fb054ff441c2eed6f87382cbb58419947092d04bfa99102e3db7a8395c9b974395b579f6b5700f55c2c730c162bcd19e5246fbc64b80acf5681";
+  hasRunfiles = true;
+  version = "1.06";
+};
+"przechlewski-book" = {
+  stripPrefix = 0;
+  sha512.run = "18b9546576957553b477a1c5a90e6780770f18d6aced92b17017c44770b6bfa9c3cf928500a9e56c6c67f45d375bc12ad8ebc97eb1589f3cf7b5b3ed2f7b55c6";
+  sha512.doc = "0441621561c2c4208d083f84eaf47573de94248cc1aaf027061de636c1a65f35a307260eaf390257bd02acac34b42963f96030ee27c83650deb11234edec89bf";
+  hasRunfiles = true;
+};
+"ps2pk" = {
+  sha512.run = "cdaf699808804ddbc6e7a4c58db7332e6bcb2402aab67ab617c031ab6b3ef40ecb7211b446788aa0f1eb7a69a32d2e7802ef03e9adfa062cbbde002a909f8dd9";
+  sha512.doc = "58bc80926df5d9a75f8994f147d4d7472ee495ad0ecd22bfce2b7e79665108bd44f1b25eac6c26a047b9e572a259f10148abf35f2dd6410346d951cef222628c";
+};
+"psbao" = {
+  stripPrefix = 0;
+  sha512.run = "cec6c6079d7a8757c9c01315f3b035fce1eba2dda487e3a9da21a2bcfe6c7f7fe5f82171ac5b850fb7f673b56258f7b39c2e0b74c421e324475b02ec13671b32";
+  sha512.doc = "1a9d1a0250bfd82d76ff1a3feed17c016f46e5ef199038bb569708989f7a243682a9584c1d293807cce09394a70a25a2f8b31189d81aae89336306f3f146dc9e";
+  hasRunfiles = true;
+  version = "0.17";
+};
+"pseudo" = {
+  stripPrefix = 0;
+  sha512.run = "3c91de9ec74af642bdff675435184ed058296d1238d4985bb22cfda82fc76e80ba6dd6fc0ba4b9f14e7899f34d0ff4fcb6fd68777c18beaddb2bb0ff9eba9661";
+  sha512.doc = "3e370ea32243a085a9d65966d464932223549080c2efcc297fe9f503cf72a7c6cc8b732f0d0b694f49484a0b7eb77a1c08b3ebe7aed3f977f63aaecca2189bd3";
+  hasRunfiles = true;
+  version = "1.1.2";
+};
+"pseudocode" = {
+  stripPrefix = 0;
+  sha512.run = "28acc4dc69e5f4e181230f06dda363618146d30a3f7c6be0d11b258980bfed5636606dd808c1deaa627d04c526496152fdb2ddf56866b63a4c4313de423493a5";
+  sha512.doc = "b11d8ae45d5a4564dbaa2669db7b5cd4f9b87bc9efda3da47ce652245b140cec1b2c569f38fd1ae175215ff422cd2df3919bf27126c9d9d661dc4a147963bcb0";
+  hasRunfiles = true;
+};
+"psfrag" = {
+  stripPrefix = 0;
+  sha512.run = "71bf5c02e7a8a17eaa891f15c88777dcbbfc3ecf8b4a72dea49683f061bc86427ab813dbac5f5b8ab4742edcb92cd32d510675a80b0b3cdff2dc2cf127ee89fa";
+  sha512.doc = "072210deb2635a2032f6ac2d100ef72aa4471f69dec03fbb25fbb0d78b89aa2df0972b244d4335e8ed16e1a5f0cb8e04d22ad44dd5740fda59f9a4e5300befaa";
+  sha512.source = "fd02b807b47f3818545e48825ddb11d188e9e3fa384b0f3412bb09051daedf73c2587a74d70aeda472047c1eac039252a25cacbf74a3c8df76be13a2644372de";
+  hasRunfiles = true;
+  version = "3.04";
+};
+"psfrag-italian" = {
+  stripPrefix = 0;
+  sha512.run = "4d26f0191ffbbe7fa6a9aae1ece6e72739925b59a1a1db5ad3cbe8f2b3ece92ec8265f008e91fcabfe2e04863300db833eff3104486e9c33985ce5c7f8dd7543";
+  sha512.doc = "7a513ff265d259adfbaee9ffb47856602004f19679dad1316f04d36848f2e22bff8c3164ba9b045e7a4a57df76c2ad17b071a9cac68d4b92cff57a29f1e99f55";
+};
+"psfragx" = {
+  stripPrefix = 0;
+  sha512.run = "b02063b8c1df58133b951eb10763d3b9099376a473dc980fef801ab565326ac1c5539be3ee94ee5c79837c1e6265cf41d6554f66e8900df2663d5d7e727e0df6";
+  sha512.doc = "863df965aa6abb99c115b06ed7d1b1660345e9bca0d0f5d62b6a7ffb55391688a92114edae7bd28ef8b715515c8bcf3c5b4fb4970cc1b6bd9cc068b09595cb10";
+  sha512.source = "f38ac5c21c7f366e952e71199321865a70376d1dfbcbed2ac993fa01f412f185a09725b9e6b1808167a5cf55d253b461a43a2f126cedd7d469645b7740702938";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"psgo" = {
+  stripPrefix = 0;
+  sha512.run = "75791ac8c340cd72139c50b2e2a05f6001edf2b79bbb9fcb4c9118f2acbc67643469c8f6da34122bf001e85af60b5b0050bf3c7b5bcce7c393e7930e3cfe7eaf";
+  sha512.doc = "9d061c884f76eb87e86cb441ebb693a9c64daca024c35dd631d660f3d1f8b1541c40e285d5f4115b36e2b02b7640ea7be70f4527e7ae92c6d6173625b215b7cc";
+  hasRunfiles = true;
+  version = "0.17";
+};
+"psizzl" = {
+  stripPrefix = 0;
+  sha512.run = "adcd254a9991839c623b3f75098276dc26df935db1528d39f8588681b87237febe81f8289aab747486df92bc9af2103638734fc22c43ace8cdea1733d2a66360";
+  sha512.doc = "e9d65b3b0c364fcc7632ab83974d8685568d4135cbd8568cbf69e9162dbb80283724ada72891a72dce2fabe35d846c6f09b05f1123f8fe72ae749215170ee996";
+  sha512.source = "fabcb5343912bf005f5ad73b2ff9444172ad6f36fe42ec492903ed6d19d3c2b67775790b15cb37a688d9c0b8d78145963f8594b67e91d07284adb5d26cd2ea52";
+  hasRunfiles = true;
+  version = "0.35";
+};
+"pslatex" = {
+  stripPrefix = 0;
+  sha512.run = "4e6c2163fe9d8573012cde55d7a9686d45276617d6368a2191b2ca5ecd9e2e88f9ea07d638c726cfb43f0fddb5d8c8b1b8ca1eb58177517b6704776f792630db";
+  sha512.source = "27e8f6f5c30338cccfded6805b713b74b6139841ad81a10a4a06ff5acd5a189733e2d6fdc80c2483c5fc8beececfb91a0a9d03202bc44fea753ee6bfda9fe649";
+  hasRunfiles = true;
+};
+"psnfss" = {
+  stripPrefix = 0;
+  deps."graphics" = tl."graphics";
+  sha512.run = "d565256578225edc29fce8f9c8236542379a1918590035faa8d8b946c37fb9fd17414e5a05ad2bb0bf1ba683a5fb29ccf29c108a3fc678e184a1eb7326165bf5";
+  sha512.doc = "5a3441930471577bce029ddbf820a2aece01bf3bb88fca22fcc7c724030bb958731d0452af34e5dc9a2bef99e136ef24228094c71d35bd684220fd0d68f74f59";
+  sha512.source = "030108d03f62b74f1e0274168452f5b05201337e947303ee78567452b1ab38daff5be326b8d1c986add7252d2842b034577577e23ae6bec67a02c0f0339428c7";
+  hasRunfiles = true;
+  version = "9.2a";
+};
+"pspicture" = {
+  stripPrefix = 0;
+  sha512.run = "139d160fa67dbb7cc932fc75dba80dd46a55a1dd5973b27a6a5dd38a6035cb367441b178acaf3c11859ad60103283774ee5e2623a083a0336d5c2ff74a7b82fd";
+  sha512.doc = "a743397a0d48c587b60db5f1dcf9e1c22f67ba15dbbce241a2584c95456b3546aebdfaebec9fcfb3dedcac65f7f053ec52cb479d726e5e3fbfe042efcf1ad702";
+  sha512.source = "af1deb00966a7d4d1d68e156dd5fbc60e95f60a65a942f1bda1acbd579b932e0c81875386bd3eb1945fab211cc9ad5607c3e21e5d240048d775c28574cb754ba";
+  hasRunfiles = true;
+};
+"pst-2dplot" = {
+  stripPrefix = 0;
+  sha512.run = "3109c2709323906ec39bd1be6e7c9151b7b07f9d2dafd5f7af61d3facd3e37ae35bd8bd923968102fc702f35fa4a903e9a50d3a7a85a1c088017aababd16d969";
+  sha512.doc = "f46a0c8c94900d180fac92e7b393672d010388fe80867f01125cdc7c486eff97ee36cab1aeeeb224b9ab80739c2ddd9e89b84926948acaa8b2b0ae08457ac0ef";
+  hasRunfiles = true;
+  version = "1.5";
+};
+"pst-3d" = {
+  stripPrefix = 0;
+  sha512.run = "dfd8a2b79d308cf4ae3bdcd438b967446f8601509fd4afb3f090d946df0cc2d66e9b7071ce33e51ad4cd53b7e62dbc02d861d46a302bfe2c901d1d8c82ab0649";
+  sha512.doc = "e8355b936fbc1685edf205e88f2793ab298aac4e4c06de10dddbe1587b5401ba8cc4d2a01dbad3ad56da5eddb27bd6049a41e6da8c139727d36fcc94d93ac554";
+  sha512.source = "fc50cff8bb86571d3827a03f3c64cb62a9fdab25e2595ccf9465e4ad39539ebc0a55da92519ef203da65da3a44e01ee28b39ef27a5af24d26463b215f96be313";
+  hasRunfiles = true;
+  version = "1.10";
+};
+"pst-3dplot" = {
+  stripPrefix = 0;
+  sha512.run = "a509af726d13fbf9dd0f3b1181a1dc53a31fe007187ad345c8e3c6c65d52d09f6de422a723b472e3b8e5f1aba1563dea06b79e82a7940e018cdb9eaa30a40632";
+  sha512.doc = "2f261cb9d32dfbb85b626238e25d8c9198ad50df008b54f800d3d5b404ea5734da8636c05c33ec30311c60f6e41ece1071a04af7affc61badc3aad64a5b9b194";
+  hasRunfiles = true;
+  version = "2.04";
+};
+"pst-abspos" = {
+  stripPrefix = 0;
+  sha512.run = "b56bed1fedb14fe7cc455fe4e87ec51085e8e09132ff5dbe52083701cdd0d63f2e6dac2ab55838fbefd8e7de9666d0239e9fba712573a51dce2804d31ab140c6";
+  sha512.doc = "77754a1c27c083f60c2836483a60bfb6b4c826783d5acd16b1eaa9b7fe7aba8820886442ed28a5b334929a3f21f0f1b4487c7403f8dbfc3ad3cfc08407e35229";
+  sha512.source = "faf4f7e2b94bd66d19be75c307c8a6b20a2c779a8e6783096b41e7b4da66ab07f7ecbaaedfa668c09089bea9c2c79af4cbc12aeafe949cb729c589989206cd0c";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"pst-am" = {
+  stripPrefix = 0;
+  sha512.run = "a5f466dacd393ed7243fa2cb43aed0a5bb8469a51aa82fac4b53c47a474a1d9758db4d7a001cee49716714049499339567cb62a66f2731ffc7646fecc15c7784";
+  sha512.doc = "edea0ddc3f5472a86706d1823fe78459d2908724daf2b9bfe44b41e749f2b41483000602817a45a5e41869f86d4034ea52640bdffa334af54e4964510768152e";
+  sha512.source = "fca7f1f7769f839632eec75b3baa864b60f9ab3c1ff9cc08437fad4086cf9a063f283568163d1ebe3e5a2c87b06bbae1b11e5be07a8eca5030cccfc68392b40f";
+  hasRunfiles = true;
+  version = "1.02";
+};
+"pst-antiprism" = {
+  stripPrefix = 0;
+  sha512.run = "dc93e3a8a040a2712f701c2fa89924c45749824d20ad814a9f04aa423e15caed3a457b762dc7d30cf5c9e3afea378efc303851af919831c0969cde50b9adea57";
+  sha512.doc = "df528e5693cbbdca80a88d02e2b8487b70c188109825da66c9d9042056c6ba62e361fcba2ac747d69a08a4c8d78f27534640ce55c583289c3f12c2eb4c57d861";
+  hasRunfiles = true;
+  version = "0.02";
+};
+"pst-arrow" = {
+  stripPrefix = 0;
+  sha512.run = "3400d901f40b9dc3434f107dda5480e0f8e37548b2ea0bfad5a38ff90e1d99aafd43d44d6cb6c0594b0574f781d94ad57e53074d28b10251f6ab8100f2814354";
+  sha512.doc = "bf97ebd12c09ba4ec3dfad4107141054abc9f04b1e1408017ec038b656bc04ccf09894c5f15a8a0344f358f2e43acdcb7509cc7e0ce686303a62bf175de7a3c7";
+  hasRunfiles = true;
+  version = "0.01";
+};
+"pst-asr" = {
+  stripPrefix = 0;
+  sha512.run = "c5ae73e1553b564a90d2c77fa434c360fe2858657fb5ff4c6ce1cbb46838fea9c0dd7a8d92e2048a8ed0d748839518b461b0727db3b7937c4e39edf85277e081";
+  sha512.doc = "560ea68a6f02dc3b79c64554652a9efd52c7fb00d07e7ffbc9b92ffab251854e07e87642028b94fc42bf7d01fedd82bfd50913f9c42d1c37d76c1eaba761ed00";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"pst-bar" = {
+  stripPrefix = 0;
+  sha512.run = "14c500c89dcce23c52f4551658496f55ac712c76bf9ab2e8878463a7dc7bb2bb3be10f94679cd2a5b720739e89cefed98237d18f65d0b9ca26ae91ac64525a25";
+  sha512.doc = "e17655c65e96e2d777484ef8db7304562310af8585c21f8cb6c64921c9aa08ad4b5ff8f61924c87112323c2bb509b5ad7e3b2176b750bd1b0f3df837033f380a";
+  sha512.source = "4900e4c4ee079574348403f6a39c22f49e92e9ebfd5f8748543fafacf290d7283d34af7baa0a4ec754222cd9d89ae7c663fa57c97a0bb126a2dd76c16d46ee79";
+  hasRunfiles = true;
+  version = "0.92";
+};
+"pst-barcode" = {
+  stripPrefix = 0;
+  sha512.run = "6c4799d7410da7f13225acd9cb5628d65bdbbb525e2bcb114d7f660d4c752122f8e9028763d3ecbca04c3c9da36b7910d64c981e8593b2c5df6b4cb372103785";
+  sha512.doc = "918891da185bcbd26051a4715cf585fd8539e6ac534ada4a2524bfabec328f87cc998cbd65b7fae8a2fbe4de029403811214c0196e59125a77f8af715b3ed3f0";
+  hasRunfiles = true;
+  version = "0.18";
+};
+"pst-bezier" = {
+  stripPrefix = 0;
+  sha512.run = "e2277175eb2087e13ee0a1100d602730514e1e5bb023d4db7163ba4113f69c9fedf74ff50369298ed970b89425b824cb8619e2cac4be463589edbfd747ccc6c5";
+  sha512.doc = "5126769fb89900916a52135af0ba459651083b01db466471cc984b6dc837686cd780bda7c3295b6afe9a7bc85180b3acd95c015084d49f46049adb2fd84b5748";
+  hasRunfiles = true;
+  version = "0.03";
+};
+"pst-blur" = {
+  stripPrefix = 0;
+  sha512.run = "5726819bfa08fbf6e9b5a2c6f93008e468b759a825fef04739a47e756d4b12a99aef604d64618081b1788b5fed9247c75dd3580a899771b148306880341f0444";
+  sha512.doc = "5e483141d8f5ad03421d9c7c5feef8baaa3b522385d307022dd617af0889bf57d1cf603a1d519a5d17d8dc918441ca3310d766e4dddb7ed6b8155985186b5e7f";
+  sha512.source = "2e7038a248c307c50d29a6171d1b52bc8d6fed76885ebc24480a3f679918fbdbf1e538f783d0f9e3792a3530e51e60da4873c5da0878e66672dbe13fc9b950d6";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"pst-bspline" = {
+  stripPrefix = 0;
+  sha512.run = "1f39a02cb0d56b4fcb8ed3a3768b59a9d14ac14769783dfde7108d86a8c6d68d79342df501c60efcfb8aca4c7f97fffecfe4cd0ea0f4fb76e528f696180b6dfc";
+  sha512.doc = "1f2b8c3f5d85db4215cb11fcd663c33fc1e34e764432a2285f879ec8bf7acb9d09368c6a9910618ee99c3305d701aff5e5d401c227d0c1db9028be3690b5216c";
+  hasRunfiles = true;
+  version = "1.62";
+};
+"pst-calculate" = {
+  stripPrefix = 0;
+  sha512.run = "b40a89c1e0152459e9dde468379b1a848955d40b9d9e05223544347d6057affac092a503e6307904e485a81de781eb9455abd948bef7f343359d44abf37f93ea";
+  sha512.doc = "d6e936e7bc53ae3296812b1d33ecf6ae890599cbb9fa6afac719d8ebcca4516772ff6c18f27e8d825ab959d430cbfe8876b2bb97e480bf6464690b28cedfc2bb";
+  hasRunfiles = true;
+  version = "0.02";
+};
+"pst-calendar" = {
+  stripPrefix = 0;
+  sha512.run = "541e353dcb33239f2230cd220bf7918051cbeb3bf8386bb9da045199a80decd68760a34f0461bb7e644f0d1545f2712969c79584a813551ee433d3a2bec888d9";
+  sha512.doc = "02be7b99bf8fafb00994327e737a5a050601dd141ff4e3482b42dc3c98c9ecd1c62ee64488146e3a7e1017a965ff1cd41b7487acdae65f5c09e259753c2d2ac2";
+  hasRunfiles = true;
+  version = "0.47";
+};
+"pst-cie" = {
+  stripPrefix = 0;
+  sha512.run = "4967785a229c9cd316b36357fc94df53e7ebfb216ba5bb222d208a767828aac22184914e2e3744e2726738920dec05f3ed7ab9ce1e30321017f43fa8f52cdce8";
+  sha512.doc = "f2554d76fc89d58e4ff61ac5e5635b93775f731e33e384a3113ebcca53c26ae0e4609d1fdfc5f093abb8945bc3f02a77041bce072c29340ff9623a580e0ce352";
+  hasRunfiles = true;
+  version = "1.06a";
+};
+"pst-circ" = {
+  stripPrefix = 0;
+  sha512.run = "608ed7ffdea15309a69d89c6a6107b9b71838e789f14ca78f92922cbb3d5e5929f61e0510b40e5531900099f805ae1d4acb2018984aedde05352c8f210573a77";
+  sha512.doc = "575ab4e17abb1433659b60dc87920fe284a12d5cdc98dcd091df372437f165033872c7a7b3f27e17bb27f5a51c2dd4e5a98925e06e54353a8e51b77958b63afa";
+  hasRunfiles = true;
+  version = "2.16";
+};
+"pst-coil" = {
+  stripPrefix = 0;
+  sha512.run = "efa265a09857efe93dd3d6aa7f63cbdca456982ccbb4c882dac7c1aff43a6f524e546640d5e293b55e59bd6af582e6d91b503cd7875f8c5ab48491b5b8996e4a";
+  sha512.doc = "e31a5c795f9cf1e21364f63d582465825f46d37c3c849e328dcb19c2a2d7d1336c425a027c02db7c1d0d00da74cb2250feda8f2f70d538561aa93a22bcec5498";
+  hasRunfiles = true;
+  version = "1.07";
+};
+"pst-contourplot" = {
+  stripPrefix = 0;
+  sha512.run = "9930e77c3ac5adcd9e3f14c4785a52a79fe5068b5ee239d1c9f052181657d2c5f16b082a8900b9571094ec83b7326be28a567dd39876332e5f68aa6b1c1b7083";
+  sha512.doc = "1a52121a22c829c9c5423810f529cbc4cf3e49a805ec4fae123dd795dfc8fc87bebb13653a9d173ca962bba716c8428effa4410e48085af4bb208331e4e89bce";
+  hasRunfiles = true;
+  version = "0.6";
+};
+"pst-cox" = {
+  stripPrefix = 0;
+  sha512.run = "b7e0e787e5a6d825383a5c06d7aba34e5d7cb12258925b7f0384ec069e873a6652e421f963147648903f6bf063d9592089adee5b043f24dac10e30dc344f0608";
+  sha512.doc = "1de830f83253ef11f092c9ec0e698ff36971c7b6d4237c8eb9f6712bde051b9302d657faa21bf56d34287c838453c611ef1a7c70c09e55ea647bad48ca216e1e";
+  hasRunfiles = true;
+  version = "0.98_Beta";
+};
+"pst-dart" = {
+  stripPrefix = 0;
+  sha512.run = "f5d41ddf7c5934a00fe8bbbc6dfa468d26e8ac0c06975301f17f31f168c6bf7499dac210f08f815cd01c05eb4a9a376d5c49cd96195a9df56bd3f1156d9ac6b7";
+  sha512.doc = "668648d06ab3047e45737908bca5f901b4815f7b7b6745e9bd5387b6867b1fe6dafec3633295e8c164e26cbf06dab2240516a71e3b766a52b9e1ac0e64d1d93c";
+  hasRunfiles = true;
+  version = "0.02";
+};
+"pst-dbicons" = {
+  stripPrefix = 0;
+  sha512.run = "a09ba8f72ecc1b58298b436c47d3922b494337179bdf789468aa3a2236a5e2bd0f9ddd9b491c1a2eb181d08090cc1c6d8c4a0e9e56cb8619a65ce168d7efd355";
+  sha512.doc = "fc0a74b0ca228ff598f3f88840ad1b87654cd7205afb757e6eb6d98abb0cd56cea0ac3ad7b3464a9a5b09d3d4f3a8489228b19c78edc8ceeb8b10f5d40e18540";
+  sha512.source = "ad710329d577b7da464028bc0abe684d987a601b6ea68cbbbeafbc6135c3ade2ab124026ba0e1d714984251f800028ffd018863c9bb51aa8fae4b5b7ebff02f9";
+  hasRunfiles = true;
+  version = "0.16";
+};
+"pst-diffraction" = {
+  stripPrefix = 0;
+  sha512.run = "222e2361650aad3b59f99fffd56aabe3e53a5eddcbb643fb6f970ff9ac52bbebc4274dd02e051f9b24f069e355a081feaf20e735c385d80e3e58d3c72f1bf90a";
+  sha512.doc = "efecfa760a636a90026bb8dc2c6677bf1f5d8f37fa9103d37f598bde413a136928717cd7bf62bdd7581ae4ce21d34b49a2a9e4dab7397cedf7dbc04884012160";
+  sha512.source = "f71361329e52730f68aa34811cb04b4abd05a5bfb484fa1a264fa17e7609963c09bfc6242b6e777ffa8ca86cf4e5b2cba2a1af2a89611d8d0f9f0dc942abe862";
+  hasRunfiles = true;
+  version = "2.03";
+};
+"pst-electricfield" = {
+  stripPrefix = 0;
+  sha512.run = "db9f7474d8290640d960f411574b6dad9f9b705eaf68644e001ebfc5050328673f0c1c31f925c6a2cd2279b9bb7ff89cf8d21e71a99e4b937137af404d046df0";
+  sha512.doc = "9d89a2818a56bed9e3cda9069f91cb49beb0182e0b24474051bb28c4299439a7b5477d09fa1caf23b855226d4d4441e48c9fba4a4dd1cd5eaf044a608876e5ae";
+  sha512.source = "89d6b2314db2840f70d99f2f0e66a875b47cc2e653bbd28c80a71eaf6f7d269e647e84b5bbf5ab7349d8a45412b824f9ae7d0c4ce9c4703f82258418b82e8867";
+  hasRunfiles = true;
+  version = "0.14";
+};
+"pst-eps" = {
+  stripPrefix = 0;
+  sha512.run = "90be1124bd22958b0a9cbb45a3b76513e514131c416c98d7f70ca101e7841980c33bd8380e888054cedb873143aad168b0dc25918d9e241f763b9be3ea1a76d6";
+  sha512.doc = "70542680c550bc11bef851cfcd12010e17f35dd75adfa390ffadc7b920c2b357594ca514fcdeaafcf1bfcf1b9e622b23c680adbc64ae4787fa96ff94f9a62add";
+  sha512.source = "97e2adee4ce93de77d4d46946795565dfa0e0da188fd686bf96917b1220661510c1777fb7d025ac6dfca816bb8575487d45b180e4e35cade21353dcf4a8e5540";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"pst-eucl" = {
+  stripPrefix = 0;
+  sha512.run = "bee0b8065dc04c5deb47f10b0bcbc627317f2458e7bd9ce28e44ed023853b69ee87a2d8fd5784d172e9edd641fafd1b85a42862c83efd88140ddb5c51f89f6b8";
+  sha512.doc = "0bdd883d52b6f639fb7dea4e7b5e1f65287bbcca2031e351c4723b875114d2aaeee537c0e62cce3bb1658777ba9793f5409957e2d7e0e0748b2900a8fc0eafee";
+  hasRunfiles = true;
+  version = "1.65";
+};
+"pst-eucl-translation-bg" = {
+  stripPrefix = 0;
+  sha512.run = "ba2a7a76db77f4db3a548654e53d587b8f5b3dab9fef56b1f8c2640bcace64237e0bea5129025a07a490a2660ccd019fc5e83e3db504c6cd30b12b19df755f8d";
+  sha512.doc = "9f6d0153e79a205d0fce5b289fa43317ded0b70abc06139a503b98199584e8cb12b083c8235b6b53ff2a80cf249a4a43cefd3e0b39a9a406c62c1e684bcb35eb";
+  version = "1.3.2";
+};
+"pst-exa" = {
+  stripPrefix = 0;
+  sha512.run = "af3bf68bf2401e0bd7023762748180bbedae1a34fa749b02cccd6b498f1f7ed0ca0e929e1b290f9b4f56b7f30718cc602d54b348e23f73c4cfb4d72ea22ffa4c";
+  sha512.doc = "9f0310ad130ad4693575e33bb2f2deb795a8eb4cc6b3f5fa946095d979ad8a1a348feca0ee5421b4831fd16a1de23608013b69d027b0dd37f782113e7de868bf";
+  hasRunfiles = true;
+  version = "0.06";
+};
+"pst-feyn" = {
+  stripPrefix = 0;
+  sha512.run = "c1ac123bac3f92fd92321387be28f519963ab196fde7ead8ed6b4c93ff9fe5cdf07bfee65bef67b9cd70d020adfa99c72592df9be376d69c5dadcb8bd0d6963b";
+  sha512.doc = "e30fc57ace8fb4f0c36fd1a07415e894abe6840592a9a62b9e45c0663281a79532387f5d37136e9cb5e7b27f4c0d7722e6d1a9779e1a57a2fddbd8d0324d1424";
+  hasRunfiles = true;
+  version = "0.01";
+};
+"pst-fill" = {
+  stripPrefix = 0;
+  sha512.run = "69401352ca7e08d6d61ce7ae89f1201f186cec6221ac3b9c2cec61c6033df03b8151ee278ab2edab6a661c49f0867d7f9e764bf45e9dbf32feed655e12239688";
+  sha512.doc = "061dcab012577f3d6e30008c15127f2f70469340598c781a436c0c8b1831d36dfce86a8cd0b802a6f174d3510ee2ed1d9269b4c894793f10d79eaf8b6d0c1ec8";
+  sha512.source = "35540e2a923b28393b68da71fc2c15166ec6e57ebed065dee8e8c9acdd7f10eb5327224e7422851b5a32d895eca29f19755bfda2cf1e0fb569deb473921c6d63";
+  hasRunfiles = true;
+  version = "1.01";
+};
+"pst-fit" = {
+  stripPrefix = 0;
+  sha512.run = "ede8c3503963f44d65caf46975cebdad296576742a771243914b49c6d802deb2f24e816dde7fd9a4bea7fa0c39965693575676ebeb648da099d88ee50bdacb8b";
+  sha512.doc = "c8619c7c98cd42884637de98c88d916e18db273371fd64090d5e9789570153b2508f0adb90fbec9c5184f6ef1ab24559b04daccf8dae7c5f65453044b9bfb73e";
+  hasRunfiles = true;
+  version = "0.02";
+};
+"pst-fr3d" = {
+  stripPrefix = 0;
+  sha512.run = "ccd418ac7ac5ee1885cd2b7008e867c08cc0fc13fa97e264377446d301cef1caa82b8552731a4c7d3131f0e2ddaa0267276d5b1726998a0be2f149ac67bbffcd";
+  sha512.doc = "48c559c27999b06d63ab5c33c9779d0902e05c80c51ba9225f0def724e02892557deda44add976bd5fb73403bbc2615854ef9ea398b830357f0fa5be12702e74";
+  sha512.source = "7fde5941ebf78da6f5142d07963aba36f2c298e46c2125f5ec210830f5f3694b3b1a8bd4b342b6065fdefcce1e5807321f379d030b0950d3ca5dcad30ed2ae3e";
+  hasRunfiles = true;
+  version = "1.10";
+};
+"pst-fractal" = {
+  stripPrefix = 0;
+  sha512.run = "96f38a81d57046ebb50e90cd7c06191483eefa8234ea73f706e6086a3f0723b3ecaeb0157b31c1364717c5f0643ead9fe94f9cf8fac8a8b27e0a3b81d3dee048";
+  sha512.doc = "4c3793e65415b2fc394fc46c23d6a912c9288e77fa2f08e5d7a97de6beabfe2efd323f13b0f2bedd1bc52bfade476abc0f8edae38108de6419e6d4b3c854f82b";
+  hasRunfiles = true;
+  version = "0.10";
+};
+"pst-fun" = {
+  stripPrefix = 0;
+  sha512.run = "68d0c52bb40354a72b2eb14d2c10a18266badedd452a57e4c2a9aaad343b94f5c13f89853962e85c94ebed9274e87c44cc4ac1fd0203ec54097f71e5c4a15fdb";
+  sha512.doc = "b4f498e3f9d97be8fb8918abe5139d431656b52ac592ce9f3155c6dc7afcea17e51996dbb275968950dfae179b336ef923b2d88efb4b77506c64b5c775920d38";
+  sha512.source = "4cdd6ea161216ee5d8be410b96749ae52d212e75691de0a9012ee6f0b5044d14c5be4e8615a6bc3b3b22f8a8fa99a75977fb264730ae64218b20898444793dd7";
+  hasRunfiles = true;
+  version = "0.04";
+};
+"pst-func" = {
+  stripPrefix = 0;
+  sha512.run = "77349856b50aedfb4ebe05b2e3747b2bf98715201930ac374783172f0688c723405c069436459598744c681a5d8f42aa7d14bfe41adadcff69b6bf0e45d2df94";
+  sha512.doc = "91acb2009228f42b79a85a4d343f484066ee9b930ab6e7acde69d796bd54185ad8d979b3fcfd72127203e91afddf3720a627895567e769378fdf0069f9cb8f87";
+  hasRunfiles = true;
+  version = "0.93";
+};
+"pst-gantt" = {
+  stripPrefix = 0;
+  sha512.run = "61b59f922129de60bf954145a0c83a5bb4c0232270b8213b45856a69ca56f32a9525d70ba86e51f95fa1c8836d4922a0dec971dea16f13f0c2f83c80fbfefc56";
+  sha512.doc = "950a55218077d7203988c42c83445bfb10f53c7292cb85bb4178ab20b9f1404ab4a864266e52c3af074c45cc27b6777dae71af41caf270143160d3d59e222731";
+  hasRunfiles = true;
+  version = "0.22a";
+};
+"pst-geo" = {
+  stripPrefix = 0;
+  sha512.run = "2b559409de635cd04e9b128bf44ef5f92ee765d4ccaf2132e3014d9a75ee61867de1724de2c36752bcc600014767f058c3799a5387aa4029268d5fa9dff4e0e9";
+  sha512.doc = "762140a38d7f39875d2d4d25aff57187d32daf017d5be19f7fde14c482d9128c4b2e911f67446cd47a28cd655ebcffe485dc4b6326d41bf3b0693072647cac0e";
+  hasRunfiles = true;
+  version = "0.06";
+};
+"pst-geometrictools" = {
+  stripPrefix = 0;
+  sha512.run = "1949864f97f21c6cd2a0e706028d5a0ecb4102c0afc5874b78c2bf883aa6698551214ac232f406bad9955e0f0a78f059118a4d950bc4b69bd30ecf9b6fc38606";
+  sha512.doc = "adf2ae63d32d2cecf77c2aa950c8b827b51d0ae923dfbed7c851f0f0e7d6018216d92cf524b2cb4002c4040dbb579cff552a37cd5ef57cd2d0579b01128a3be6";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"pst-ghsb" = {
+  stripPrefix = 0;
+  sha512.run = "3bb85212ac247b5d6ddabf8d98f7ff5621b78ae2b83b08c00ce7c2831f6f6ec4d621a4e5f2ad00e2b5d8883f95aed579f0d17a5525c9df5ef9939528ec736325";
+  sha512.doc = "cfe4f9f8b24fbdbf22280b098c32c1b9b368fd6f74cd20c1ee7b241bf3a9afba822fda33b9c9365cb9c20c76ca658123039eb27828361d74e4a31fc8e170a6bf";
+  hasRunfiles = true;
+};
+"pst-gr3d" = {
+  stripPrefix = 0;
+  sha512.run = "85cbaa41c3cce49aeda36ef55a89122370fc23dc91c5e5e63790aff2b8b748eb6a13a9a921836b2a471ab2deb9577ecf59be0bc6dfa4d2f1ddcf17bc33ca4264";
+  sha512.doc = "bd9026c7730dce9c09a092cc420fa7ca8d7c85db4a1f9a665a64f933595b43397027904c08311ab2301305f79a426a1b726b8df2c237c8a545726fadf9b8ed30";
+  sha512.source = "ce6786ec803ceeb33fd42d2d786d119ec2f604c1d4b4f7a51c6e9ce9e4171f01fff33b66b234a5af854e5bee24f23bb50abb898ab89c568150a50ffd8ff7d582";
+  hasRunfiles = true;
+  version = "1.34";
+};
+"pst-grad" = {
+  stripPrefix = 0;
+  sha512.run = "f98fe4e4996e20947d90ef24d6825d72a8ceb6bbd586b0de9b90d5d73208816395e5b195dcda2816c8e709fa4c408f3b814c02911488c83a207039d28654b9e3";
+  sha512.doc = "11f4a4de67f92bb2ba77457b5940e2b848985de111e3307215981e6d39617b8590316de5cb6e5002748d9e951be405e3f938d1708c28a7970be53808688c10ef";
+  hasRunfiles = true;
+  version = "1.06";
+};
+"pst-graphicx" = {
+  stripPrefix = 0;
+  sha512.run = "0d3f2d072a7bbb58ff555add4df7347a4dcba929bfba49d25dbf6b95956462a3fda07818135fe40f737151f323a27225983f656389f9a91a8295145ebf2877a1";
+  sha512.doc = "8deba57cafa74987ff7dd22b52db699fef2067dfb62e8e2c7e8e17b662f1d7644278272ee97209b3c109345ae8c295e125d1b195ff68cdfa8362eb3b7ad1bc84";
+  hasRunfiles = true;
+  version = "0.02";
+};
+"pst-infixplot" = {
+  stripPrefix = 0;
+  sha512.run = "a8e69a4bc20752d5f6d455f34fc4810e569a5f444de257c1b50c76d567a23d868b0e19c9f4656370a12d3a53ef35ad43e7dcc946782c19ef76091634bc2440a0";
+  sha512.doc = "0b6958f851af834917ab04f39bf60d50e26eb61ea52c9dee91274714ec0a87519323b1f9ef7d665f0a6d05cc97e6f8b1bf51617f2c57a5d80ebb96ba1aa94306";
+  hasRunfiles = true;
+  version = "0.11";
+};
+"pst-intersect" = {
+  stripPrefix = 0;
+  sha512.run = "847a2532362e570d3e14ac4aadedf0cf1ac0f2da1991837abcb6cbfa607357d8a451d852bec9be50ea8b2995716613475c4c1ea1c3766169902eb82e70aaba0c";
+  sha512.doc = "e8775b9d8adbab9e7ce63d595cb70747dc3d850c4b43095e1a35f6be8093b61ec92457c7fcf6565484e62b1aa7bec82700d8ccb2dc8dca0089e56bc8be5e762a";
+  sha512.source = "87bbc6bb4d4b43d6c1e93e89d7d96c5f9941187181eb93814110e3930255d6ac6c95d81a53a6ed440f6bd4fd8c38725e4cf5763467722465cf941c4cc16b5841";
+  hasRunfiles = true;
+  version = "0.4";
+};
+"pst-jtree" = {
+  stripPrefix = 0;
+  sha512.run = "9947e00e7fdac25f25f1f828ff5b9a3b962b1d033c57232d2d47736ee7a675ee48367aa934153ec17ae3f2eaa763044dc067d83b2248c5f42a93eb5d9a79e292";
+  sha512.doc = "4d0a2432e9880a71f1d7b6a9965dfacbebeb44ea2586fd428fa58f634d7670d763e9ac293aeec6adda6cdef98736a7b5d341ec41d89bf3999c4cfee9066001ae";
+  hasRunfiles = true;
+  version = "2.6";
+};
+"pst-knot" = {
+  stripPrefix = 0;
+  sha512.run = "f481b82e5d21dd86eef3cf64ecedc45420b33e43619574f072a050fd70a6446ef8d527607ed5a929443ff6976cc94a03817837c8776bb2ee9794fec80a4c0751";
+  sha512.doc = "a8a82ce955b707c6ecb319783cdc4fc8406411dc8d711321919413d84ca42197828e69ae2b6b368a4b5b326650caf5393cb2214a7cd8b7bc0cff742b9b0d977c";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"pst-labo" = {
+  stripPrefix = 0;
+  sha512.run = "a8bc971be59f1072657d9cf9d26056ba800023858df1d060ccc7e31d2c533337520e9583de00085842dfafe84a590e0c90706ac00bc98da282a5454fac76aade";
+  sha512.doc = "1b35f244a45fd18eeba484f925292358b5582f0ba18a9c6622afc67ed287e74d0c1c876ff78c19de0e9b53f55c86f30f47a6d179e0142e79aad5c5799e497ba5";
+  hasRunfiles = true;
+  version = "2.04";
+};
+"pst-layout" = {
+  stripPrefix = 0;
+  sha512.run = "6d4c06efe0d0095ba52eeee25ffdaf44f836e1e41840d8098e25c6fd3b5ee79d28663ef7f02ddd7d1ba21228bf4f9bd5a66548e3aef642a49cc9aab5b4b24fba";
+  sha512.doc = "fa32cd065979fcaf2105372155ae8debb399a0f930d6b85e7ca4a69d8b76bc0d7fb717ebdc8fa4c9794ea03268c2079b93e0bd6453155bf5925defb75cf05e08";
+  hasRunfiles = true;
+  version = ".95";
+};
+"pst-lens" = {
+  stripPrefix = 0;
+  sha512.run = "406bc53d476d47d464f7fb318e75a5aeac85cf4239ab916e91728f5d8c0c05a9fd4c4fbc24b4b058f1c15d1ee4c6a0d45511b8cf6b288bf10163523b2bed0f37";
+  sha512.doc = "8d29f5014e0bae5d1fb22483ca3231e3631c76820be080b3a588660f868ece861c2d816291656a45c8a33356b992cd6e2396e9d73f4ab316b877b2ed8b778f7e";
+  sha512.source = "7546475681934697c5fbe287d9d0c81c4532cfb07537ce0184addac26a3c29e4a37da5e12d9ac3e64f83436c07ccd9ca360ca276f77cefbb9c23c740b15bab65";
+  hasRunfiles = true;
+  version = "1.02";
+};
+"pst-light3d" = {
+  stripPrefix = 0;
+  sha512.run = "2bcfd2835e20302ec865667a44af8dec63c6c006c8a3e39b048464e129ef04300d0d7c2e23f324a8acee0e1ae1439e75ce642f7b76a8f1958d600546ac7c220c";
+  sha512.doc = "166f47222230e24530508e3ca66c881dcc844cb8cb35b92fdbeab164b964ebf2928df3068d79467fc8a9a8a4db81d2be48350036169605365bda116cbd86d095";
+  sha512.source = "8edab208ea567672bbfa0252fb4180abd8134702058223f04ab23c3ac92dca98f4946ffc31620b9d65376ae41c819038403ad3bd7c9162cabf8efcf7d4d57362";
+  hasRunfiles = true;
+  version = "0.12";
+};
+"pst-lsystem" = {
+  stripPrefix = 0;
+  sha512.run = "0da3611c401895f508b6963c46f781863ab6b42ced2addf3413b74ff1c14daf42cdfb5c166072e18427871ed6d06c5cfe3b185f0af30cb25db2f346828ee1682";
+  sha512.doc = "0b277cd979f4a12abb57b8e6d2562b156bba74e0ca46da10da17a6bc505c6747592b5f19c5a3e9b72f99bffabcb45298663c6dca33c875c923408646c4c5f6d8";
+  hasRunfiles = true;
+  version = "0.02";
+};
+"pst-magneticfield" = {
+  stripPrefix = 0;
+  sha512.run = "cc2a45978e49d93e677f4b028afeaaf89a0ec5748f545cb575fcd339cf92e1b08d870be79d80a5cf464b29b4e51d5ac5196bfe0665408da1108abf4da4f57222";
+  sha512.doc = "cb757378708fea31eb6e644eedb62a23de45c756d0d4fbd902d40a4fd9bb8189ec1a513e5d12748ee2264bc6a35eec67a7bebb8d59128a367025a6dbc6f5551a";
+  hasRunfiles = true;
+  version = "1.16";
+};
+"pst-marble" = {
+  stripPrefix = 0;
+  sha512.run = "e16ea0ed61c6548d43746f251bf8581a00863370b73d46077e5510fd167d63a539ab4543f0ad7db704571b5274cc5756fb713e5182c8abea404708215a98849b";
+  sha512.doc = "5684abd4913353b7a4953ed1b5878183f1c10dcc1bdecea6f3e9e6adef7c73c7f16cdade2b5e18f4a645c203dfb15a3917740a7638c410002eab892bc5ca6acd";
+  hasRunfiles = true;
+  version = "1.6";
+};
+"pst-math" = {
+  stripPrefix = 0;
+  sha512.run = "4cc671ab7b7cfac83cab929d2a0cfba81f7bb6b92d89460195fbea2875511f9ac51c1f64cfa527903f2c081201f195512443c358691930cfe8c57059e907df53";
+  sha512.doc = "76c4425e84bd67e989fa8c533dab1660c03aebb8c21dc335d26d99ce4b628aad3ff4d9769c7e1f501b4ad05b7762142910bb34a97cb92ff98a1cb637a50ebc46";
+  hasRunfiles = true;
+  version = "0.65";
+};
+"pst-mirror" = {
+  stripPrefix = 0;
+  sha512.run = "edb6796eb96047fe09833056c409527df06d63dd69e9c2b600c1301b43b6e5c858d1061e9a138c89ab47657682f9ee67995a02abfab5251356e2eb8de68f5316";
+  sha512.doc = "a9e22f2e00f67f12c69df3a6dd4377d25b8c130c4afa8c995c8961ba426f69f0c286460925c7c782a30b2a23ca5f2d4a46a5dbfaf72955952f561df2545c38b8";
+  hasRunfiles = true;
+  version = "1.01";
+};
+"pst-moire" = {
+  stripPrefix = 0;
+  sha512.run = "7ae5693ca401b037482c4b8d7173a03b677ee1a8dc62ceccb710264b196a20240f310c26cbf9924dc2b4a9fa2869257843cfe4c87c26616a0f790ab444130a13";
+  sha512.doc = "442f2477e9eaf122249b3a06fd2755afc9e701fe4333102274de3635eee398231d422b8077764465fa42041acc6289d00b4254505b591f055c6dddd41516d0e2";
+  hasRunfiles = true;
+  version = "2.1";
+};
+"pst-node" = {
+  stripPrefix = 0;
+  sha512.run = "b4feb98035acf2fff9cab8c21c7e408fdf20dd6f12ea5209719eac9d77db51cd907e345daba876ab0b7312bc9dc4a51be17097d3fb02f0a181c006c4385b2096";
+  sha512.doc = "2e47bab65f6077f796bf4d50cd4f5911eed2eea658701c46e47d65543697c68209aa307a5f620fedadee8ff2ba28f6ccf92dd9402bc3264616cdd3291b8673a2";
+  hasRunfiles = true;
+  version = "1.42";
+};
+"pst-ob3d" = {
+  stripPrefix = 0;
+  sha512.run = "1b4eb87fd2c9c63edd4d7388b32c5e6a8f4d6ecc87b9c1129540398c607bdcd258b4f182710ff12d6a7a5e8b8f34c6686203d5c0ff9a60a1a6e462ccb3b382d6";
+  sha512.doc = "f934cc75f6d2e6f80bddeda8d2226e6ba0aa6749adef4f08b83036a67f1b8406d1fff61a01862eecf48ec6e3ce76af2ff7967db67a294956fce50d3c7497bf00";
+  sha512.source = "4dc8b724abb5a48518edb8f0d39152fe99fb2ec78c59fb8729f151865b9fe50105cf4c3027361d4e6a75cceba99a7e399d7e522aba70f27d4e4816037e87e509";
+  hasRunfiles = true;
+  version = "0.21";
+};
+"pst-ode" = {
+  stripPrefix = 0;
+  sha512.run = "eb00fab8b3932a868526aad8c1623ac7939d45a26b83374779f4eb3d25807ff58a5a75ce31adb84af650939d7e6957336f44d8f7a15de33262ee7b69c70fb002";
+  sha512.doc = "5da26468c9426f614080513d9dd031bab06fdba87a899be28e09a21c7de75b50c4dbf00ebb569bfa63293bb7881fbdaef76f6bddac5a7e8084796fbec2e7ddf4";
+  hasRunfiles = true;
+  version = "0.13";
+};
+"pst-optexp" = {
+  stripPrefix = 0;
+  sha512.run = "7d171906d8fc840c8003e82b3ac175360dab625172b389c6205371bb432e280195c2daf53671d8ff2ab43d24233ab2c8bd3002b8d4489c7395533148bb40e939";
+  sha512.doc = "f9c5f7bb43f9171b53a10941db9baf3f7e7b8e50620679f176a14b0b384a8a79118361e0e7afc2a8c44a2e9916313da6321cc5a08ceff5adfa4a678e35fdce46";
+  sha512.source = "ae5d01a591bdfb8128957bc992c07c7e609c4a2e2b8a1c43e30960f85774d5fd56702eec761430f26c3ead975144bf196c397233decff205071afe60be0b948b";
+  hasRunfiles = true;
+  version = "5.2";
+};
+"pst-optic" = {
+  stripPrefix = 0;
+  sha512.run = "c9e0231301824a612c755adbf2789f9cc428bbc6133a5669d173ff1426663f704aa978c506add7e4a0c786b51ed61df355f59e7b6392f355ac6913c6f9336f46";
+  sha512.doc = "cba9465a3e81060bae7ab4b8d7c8a1ef804415a3f85c0a89c98d57c6a3e8ff2c58a40b91e9c6281ac520be5b03f13d1890d8cce063a892a84d6eee5f6beeb625";
+  hasRunfiles = true;
+  version = "1.02";
+};
+"pst-osci" = {
+  stripPrefix = 0;
+  sha512.run = "d36d987ca50c50c0840660070dd7eefd4ff49f4e86b1a6f33bb9e549a1468f4992a7eff6de56307e5d5bf4e8063534cf4f658df8e98571a1d86fde3555a67e08";
+  sha512.doc = "80d99115c7c3fdcafef8f4be99b3066799cb40571e219158abb48de0ba405a0c977d0158c20e2b550895d1e63580bc7366338fbbbe7add2c3a89abf618583ecc";
+  hasRunfiles = true;
+  version = "2.82";
+};
+"pst-ovl" = {
+  stripPrefix = 0;
+  sha512.run = "2777d0d3011ba4ba911dbed78bb3ab29eb54bf392a9aaf73707f17e5fd9ccded0198d0b42bbdbc6879b2f07ba84ccf9d121748e3f0d3f931a8fb6b6e2a904b8a";
+  sha512.doc = "9b7057b4316adf9f0fa30561c658f309cfc1be757c0eebfb63bb5cb94dc9b8b6cff502f056f9e1d64b207cdd154c0ec64b13c51639ae46377c4d58d51aa00725";
+  hasRunfiles = true;
+  version = "0.07a";
+};
+"pst-pad" = {
+  stripPrefix = 0;
+  sha512.run = "cf519f69dfd1003ab17a4a67f309336442bf35497cd0102e346ab8537865540c314666fbf01cf6e3e106ce922fd8922ac4bbb5b20ee90a7ce24a7a98ee974006";
+  sha512.doc = "0a2206d3ef84dce88d3e0ea7899fb623d12f7f6a820298b031ff76044eb9ec49bb09f70f6ee0b00018fcc02f6260d67ee58c8a06a48ddbfd2e5b17f52d374830";
+  sha512.source = "ffd5ef230c25a731e5127cda390b60fdc275d53a833f8fd02ef8fda7b959d7ef5e2074637af603f1e510cd558cb3de22245bc34f91bb7114269425d3b4db211f";
+  hasRunfiles = true;
+  version = "0.3b";
+};
+"pst-pdf" = {
+  sha512.run = "537812f3811e9a62a2c9667438ea380c3219b1cd8a96ae2225e0ded063f1f1ad572a699d4f9d5d11f2c667fc560d94f17b275293198c5eb4035dcc3d3cb92242";
+  sha512.doc = "bd6e6b3c7ee31cafb5c6f6064abb6b6f4a197c10f4ea184fe028fab874a1a5b6bbf39719a1a620fcc9fec23e52ea15c6abfd4b66f79c788755f1ba8eb65ef778";
+  sha512.source = "ac181daad359ca790224fd0bc2eb560ca59312ec6330ff64c8e9af3cf58aef1f6c2ccc3310ffa9bcd2ccf36657d0675b8c926c859ecb6cbb3f5382257ab6ec85";
+  hasRunfiles = true;
+  version = "1.2d";
+};
+"pst-pdgr" = {
+  stripPrefix = 0;
+  sha512.run = "c42b723e2739eb3a70f7a984d45b6b738a1dab1f4f3bb7311850c344be736fbc97ababb6f744539deddc7d1cbde47830e81d1bfd42f705a7287b1fb970664823";
+  sha512.doc = "006395a2e1caebf8c86f4eb41eeb03a35d47b82e65e18ce4045eb22f93bc78a38f7611a1328216712d29be852fa3431876254f3b41b8b7a2a7c453f32a8e1bf7";
+  sha512.source = "e576ffab3eb1b0094bf7514ea996146c1d73abc5f68a47f3cdccf5e7fe7eec133a21511e9d1107ef20541750b12766899bd3c925e09be931b1e0e2a1cee376d9";
+  hasRunfiles = true;
+  version = "0.4";
+};
+"pst-perspective" = {
+  stripPrefix = 0;
+  sha512.run = "b1c6c1313e0f87d7c4dbc7122d09777f14f02ad0908c6151fb5da905d908a9ca2d905c5a9e3fb1e54deb0b7b91dda1488de0b96ff40683488947985d68e2d331";
+  sha512.doc = "df82bc95d3720f7da3c23736d83fbaeae5132f7b84aea9f2fd8ddf925f919e5d56f6701bf5b541446c024e8d2f6a5875d562d96cdb1564dae92d6ade759671cc";
+  hasRunfiles = true;
+  version = "1.05";
+};
+"pst-platon" = {
+  stripPrefix = 0;
+  sha512.run = "8eade14982b0ffa2c5e7d5c68a91d4159ee6f3317b20836c3f470ed68940a522459bdce54b1e1dd4068173e50b0c611531d1210b1651d805602f952a1696626c";
+  sha512.doc = "7c252b535853c4941fc4cdbe504a3c20ece2c04dd15e2bc5ea0c88928b5fdd7063035c329dccb7ed04d71606e70f632fc1d66847dd35ea46a4626c04070974be";
+  sha512.source = "092665b806f358201f0dc1b0010796c2090b84cf31d1f0e9e33d2ce370049f0e7f65ebac23cf9841f770df8c61c22bdea60e583474694311c7e3fb4fd71ced6f";
+  hasRunfiles = true;
+  version = "0.01";
+};
+"pst-plot" = {
+  stripPrefix = 0;
+  sha512.run = "58b2d0bec5abad6a4f1c2467badd6ca7cccbfdbbdd0a838493aceeb37f478f4500fc95463176fcc97e34111249512d50215a319b01a847d863d54bcfcf5e73a7";
+  sha512.doc = "748945b66f21c63a160b793720ba5bd9243c73602e68e43ff72a5f52ccb4004de186e648ad0e5b5e883c3772197eb2a36ca0cab046f8313a7ed8ecad522fd761";
+  hasRunfiles = true;
+  version = "1.92";
+};
+"pst-poker" = {
+  stripPrefix = 0;
+  sha512.run = "df340b3087babccfdd371446582dd33a744af8d16a6c53939cbe0e2366c11d51de3ebe095e130dddfbcb8d062c71134679fdea8d8821818e61e4f18b1e63159b";
+  sha512.doc = "06eaab1e95de879d3de35017a3a185525375afd360ad6890b279950eda7d35599cbebd6580a31e7f0180c74266ac02d00ede982ef776eb4645b0da8966fd7708";
+  hasRunfiles = true;
+  version = "0.03";
+};
+"pst-poly" = {
+  stripPrefix = 0;
+  sha512.run = "badd0fcc2b439ba270d5375703f91df9009fb7eae920915eab8757185da0c6665c34d530d9b4d8bf469767dd79ee834ded104a0fd98243a1e8a17cda47be0f79";
+  sha512.doc = "0facae2d565a22853a6e455534065f5954571311898e0850fcee7b18909f1cd0fe06b116138faedda6767d8514d44f7d843c13985f8723ccb8ec03a81bbaa46a";
+  hasRunfiles = true;
+  version = "1.63";
+};
+"pst-pulley" = {
+  stripPrefix = 0;
+  sha512.run = "4253283884b3cc36801dd7d462655d3cccbdaa70af0219765a3225c8b928e49cf0964d4db4728ef01e06ed33865facc46bd767f4d1cdbddfbaf0213e4ead012e";
+  sha512.doc = "28a4654d2219e056ab1a53bc0fbb60feb919b3dc26b1e542b561cdb6d3f0b1abd050afdaa99a9ba5b374462cc451c1681622f6c6c3f6aef26738a36a845648a2";
+  hasRunfiles = true;
+  version = "0.02";
+};
+"pst-qtree" = {
+  stripPrefix = 0;
+  sha512.run = "5bbb7fdd477850e4e6c2bc395665c50668a427cbe176122d160fdfc2aa2f322ed83ec43929dd185fa1dec439bec3f5de719aa8d640d0bc498aa7ac9f9089cd5b";
+  sha512.doc = "4a0bba9fa7072e5860403c3b22a23947045106fd4b89781af848d17afbc5ac456c77617979ebcb80afe07620ab8b990e868c688301c4637804d32790fa4bd7f4";
+  hasRunfiles = true;
+};
+"pst-rputover" = {
+  stripPrefix = 0;
+  sha512.run = "3bd94d3a37fc8bbabba547a0072618c6e2bd2f6052f95cd4dd8cb973f64c4e97d0c7ef72fbe425df032aacbb8cb109b0eb06ee304b725ddcda6489da2c893934";
+  sha512.doc = "16bc8c2500c19cdaeb701da98e4de0ffdc13116a0ed5802beae395e9664ee16acc6341db7d2c3ea7b2a16b0afac35503cd5a53e1ce1fbd67598be4c890b317d9";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"pst-rubans" = {
+  stripPrefix = 0;
+  sha512.run = "360f1a04170358b976bc8b6d4d4ee138398f6b018b5611811fc41d90475c474e89fed214708d11b47bdb58cfcf983b37c3338c4d5b13b13825f3388d1562372b";
+  sha512.doc = "086f80c0b99a0043769b159b6f52de125f01e6c3b00189b0924c62961b934121b09a2f1634fdeef737b2fc468c392051f8b117e1de5d7e6d223e79ff443c2cae";
+  sha512.source = "f62e689c044a0600f4e303251329033e705f3d08b025214af34cc85488f347324d552594a321f88ecf91845b5db5011875436ba9fdb819dbe038dbbe012c4676";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"pst-shell" = {
+  stripPrefix = 0;
+  sha512.run = "d91fc81c2140e0ff4aae4e190b4816887f0c068df42022b6b6545adec400920a69e81bca1373efae4249a95cfb1b7f6b712497d72510aec79954feb7a1ec07d2";
+  sha512.doc = "a788f994d6003ca6a650cbe042b57a712fb91da2146b21fe3023b464487e5a56699a2aeea56be77aa26919f6c1fcaca6d49bd3ea33ccd2fd7a06e5f95a917803";
+  sha512.source = "0a5173dcb9d58eca24cae2c385db9f0225bd5feca124a3f86e3f4991a689c6bf897b48ee2c756746e337a7aa6ec7758b3d54c90f7895b841fd88c3c74eb6bdbb";
+  hasRunfiles = true;
+  version = "0.03";
+};
+"pst-sigsys" = {
+  stripPrefix = 0;
+  sha512.run = "db3d3dd31c4166a132a174cc9b2a86fb226496c663c1ba95b36f6590e18799c5eb4e8587ccc3db5de0d3833729ffa90080cf037519b2a7ba24c70fe381aedad9";
+  sha512.doc = "ae2869eaa649898daf057875d28fef1be5f20caf0b7385ba7723e9be51e534cc69b953bba8ad4fa6d04a0d67f85659c82ec08043ba760279a6759c20a2c27d0f";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"pst-slpe" = {
+  stripPrefix = 0;
+  sha512.run = "43905d7525acca6d10261e169a1c1ec1ee0cf0d4b7fcd05643dea3f705331588d774649ad5ca560111269025e92a1e91796693c5246e4d2b2816dd33d4eed87b";
+  sha512.doc = "377a89c5dcc49e587e3e2d2e1221c289da9dc6b3cc0565bd182d0ec356835309c12eecf68680ac4083c906701365de0068608ee1e49ea9fb95c866a188931a67";
+  sha512.source = "f8579912fb5477394f8eb150de776b9a15dad8f67b821a073748910388e06c70b23163fdabe260d55216add2924879f5380915c5d3ebbb21f0da3c65c6f82f73";
+  hasRunfiles = true;
+  version = "1.31";
+};
+"pst-solarsystem" = {
+  stripPrefix = 0;
+  sha512.run = "48c38ec076b20b28aef50c207a77069cf5053a209f4ddcb3adb5a8e01f2b6510abb388075c7e5c90b6b48ecdf6f92764836dd58fb51181e28afbbe6d47600abd";
+  sha512.doc = "581e73c180e455adb09453c7f535de5a3f540c3d8046ea0a1667f9f13390cf63297b9073ef66d93f4c6b2aadffad3de24000a49cbbbe374bb7af75402fb6bef1";
+  hasRunfiles = true;
+  version = "0.13";
+};
+"pst-solides3d" = {
+  stripPrefix = 0;
+  sha512.run = "7e725978c030da337d882e05069b749a4398b1a1c479a50db34fc63801cb77b78630e2d1dfd0c3a39aeab3e931236dad91b6c722c4d6e06dcfd867f007ce99f6";
+  sha512.doc = "a00138b042c58700438cfb3f094f836b029d31ee3de40ed290d3f5475a31cb3fc949c13402c35d088dd1cacf13c66bcee934a0ad59e97ceee5ce9db1f99e7c4d";
+  hasRunfiles = true;
+  version = "4.34a";
+};
+"pst-soroban" = {
+  stripPrefix = 0;
+  sha512.run = "c21d3f0e19c4cfcf79563e23e760178de6e39f1f42147f534946fef315c0514968548b30d24eb345f4f2c5cb7807fef4f0d45d8e345e9523806ce1e054d8cf11";
+  sha512.doc = "b7c1422ac43df949426581f7dbe749300093ce2d20145df768e21e893b9d2c419ffa8ab16c60fa509f09317bee4c7f80bed4920b92a5f9f2e9289eb93cec5eec";
+  sha512.source = "49fb276ae7277b1508ecdcc3132d103e26204f314f8779a556335e1875dd5c3c6768b6b152264ba5643d2c39eb275f7ef193ecb6a292135abba2d60be508d654";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"pst-spectra" = {
+  stripPrefix = 0;
+  sha512.run = "325e4f07e9c2788d571c6105e1fdc3a097881d1b472b038c365c65a84a4e69e15866750720b2c86f5b20e00fc3a054f619e79b6564fc3712194a1a5d05edf248";
+  sha512.doc = "f3655f399c4986b122253c4849bcb15d0ea4d2390b0ec3b8328d8255e5e2d44481198d63c6ad9dc10365095414267285ff02a944c1bf5bfd8c458d1a7cd5a0c5";
+  hasRunfiles = true;
+  version = "0.91";
+};
+"pst-spinner" = {
+  stripPrefix = 0;
+  sha512.run = "7014c371182a354d11bc76c60bab01321d60af9559098a353c3e7a5a88d2e251f9362a24872b60d2214450ad3d423f3868d219bf109f0524a6431db17ce1c881";
+  sha512.doc = "90ac8da08b1be6dbf3bf126ed49279fd0f593a586a3bb7e58b89f9b9da361637ab4c9aa133ee2f798b7d49c420a4765cf2fd9936410d37ac955d661196f1dffe";
+  hasRunfiles = true;
+  version = "1.02";
+};
+"pst-spirograph" = {
+  stripPrefix = 0;
+  sha512.run = "701964d1fad3d757fab421a9458c5983e11628d965ddabc2dfaec0259b829ed96f699a2361043c1f08024538b10d9b0ad36e921b704543288da5c5d5cb6e58fa";
+  sha512.doc = "2b3a0bafb00c64d1ce883995f983b626390ad73492bb96ace3d2cc5df05e91bfb6f74d96269644b99f56ba0a670a94dbedab663c3dc3bff3e099d141185ae331";
+  hasRunfiles = true;
+  version = "0.41";
+};
+"pst-stru" = {
+  stripPrefix = 0;
+  sha512.run = "bc0961c1f9afb68f66c4af9aa9d37cd8cc7c6047f55920d12cfb14a18b2c2288c8468c8d9f0e21eb7e395eaa884f0216b37a6fa947fb2c5ef51d57996ba8bb5f";
+  sha512.doc = "b9352eb01e9d80049a474e0b5a513bb8835be16af4226b4f4269d9a94d64b81a842e640ab316f066595b0b6053080042deac4b0cce1bbc602ea0e029f7809cd3";
+  hasRunfiles = true;
+  version = "0.13";
+};
+"pst-support" = {
+  stripPrefix = 0;
+  sha512.run = "05ddd6f09d603a2a6887f03aa3da0374ad061e2ab52ad25f0036192179f985f3695b0248c602607172c94c55cd9d2bb453e8f145d73f133bf79a881ccb1daacc";
+  sha512.doc = "ab2adb2c06d4f7f4b4a4fbfec59e1fc8d6b9f4ccff5aacc29f0a1524759fc1f0792640e8cc301e614477ad45261bbedb3ede93de2463e0a655aeff846561c185";
+};
+"pst-text" = {
+  stripPrefix = 0;
+  sha512.run = "6cf40d3dffb7803959a187f6a19b137b824d46ea73bd31430e983abec0b828d49c6d404287382242ad224e2f51feae74b3bee374443e9f421ae70d1ea2c0c3b6";
+  sha512.doc = "87f213f037227c05ceefbcee7ab8a316b88ee6f9ddc366c40cfa7676a714ec6802f3781db8357224769216241feb9171668184534572ebe5c5776c1553c1b62d";
+  hasRunfiles = true;
+  version = "1.02";
+};
+"pst-thick" = {
+  stripPrefix = 0;
+  sha512.run = "5eab2dfdad0c9fad21cbb7d4484f9701bd48b225e881e0c86a2418afa143582aef160bbf4cc9f5a773aea97d2c12c7f614f41fd87f0ff2952c27ddac91f75905";
+  sha512.doc = "5d75bab3e4b5c18a14e7348dd97a3f7e0895a2b44111a72d87ff8ce7c7c0499062f61b4ff38b2d36b0632719fd58a33c91f077edc269d74fa58281a83752e9d7";
+  sha512.source = "c3cbd54dab4d8e71a2d6e9f94cffb1dc0576344032d3af01c21a4ef0f493c5b886fe6f99e7361f4ca0c9b2e01e68e61e0f8e74b5f511cd1680b20eb01a068030";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"pst-tools" = {
+  stripPrefix = 0;
+  sha512.run = "9803ddb2afe664c53c1bede5d3444dbb4adaebe07c3a3d5b06cf7e0775593c13e6af5803584fb8b9afb12768fdb382b8603b0024fae40bbecabbfa720d87c4ee";
+  sha512.doc = "48b440cd10fce6da42173d90e2e7ca1454cfb6ddf556836ecfba98729de441f6521e7fed0b95bd20a570c06c3b1baaee285b52ed121d4c16679ca6530b8b5ae7";
+  hasRunfiles = true;
+  version = "0.09b";
+};
+"pst-tree" = {
+  stripPrefix = 0;
+  sha512.run = "1148e0e571d68d8c95c0049313b244a6d6d77bf24a453121fd462a11e51d51aa21cd7eb66e9bb7c936fa90bc888912385814ce347cf911563206f520d2bb1850";
+  sha512.doc = "d68059216626bbd3a33ec6bed2e6d2f0f78db2da3ae56cf947367608033a156126685bb0d162f95fbe7150c950c3d5d20de01fd0ab9b6bf77bcb2cba31bfebdd";
+  hasRunfiles = true;
+  version = "1.13";
+};
+"pst-turtle" = {
+  stripPrefix = 0;
+  sha512.run = "df30018ed03f10edbb9e215879f041ed6eb0db48cf0e7e2b5128cd3339d1005ef074aa0631c84bcfd2c8f9c1a1a69a26cac36248f3971a3b3302e2f763af750d";
+  sha512.doc = "22c14f1eca2aa764bfc250d8140f0a24f3dab1cb8e755180167ddcd1ac9224aca07fb41408823b8933b73293204053f7f139513781ff37a67ca9e0ee7bec4fbb";
+  hasRunfiles = true;
+  version = "0.02";
+};
+"pst-tvz" = {
+  stripPrefix = 0;
+  sha512.run = "79e206f5e4154a797cf168b1b490cac8e1ddf98a79de6ddbd9dc98cf53eae01301c034643f6660708b58e890ca94b7235e5b0f48e53136f32c12c0adf5749179";
+  sha512.doc = "ffbba30214dce83e7f00aa7c6e126919cafe341dc727736e27a5af8ae212dc66dafa49afba553079d6857258ca72577950c06ba2deb21ca3c1b13231d1909935";
+  sha512.source = "ea0d7dc35ccef586bbe4dc225886755b28524b4db4ebcede6fd41c51bcc0fc8e7fca1f7a326d12524dae478b5a9228cae413b80e7a2830f0cd729e7efa8bab4c";
+  hasRunfiles = true;
+  version = "1.01";
+};
+"pst-uml" = {
+  stripPrefix = 0;
+  deps."multido" = tl."multido";
+  sha512.run = "e4ff8ea9b7fb9f530e33280de3e9eb20d653c0c062fa80611a544daf74da0b1dd2481b43d8f5258f9ebc1d1bf95b393b32c7152ab8464a9e980cefa105c45ceb";
+  sha512.doc = "d8aa92785c241b6346762d98349d8464ce604afceb8774ef160e8c24e0a40d3fd8dba7cac3f78cbf38cbf6cfebb79939ad3c76e6b4014c1028859aba38123efe";
+  sha512.source = "8b7e551154c1b1966046268ed3353b6c78c3a66bfa20f44c7fba3b58f661f2585b71d49d2dd673368f732b2f9446dc7783bad4ae5248169a79721d330a49514c";
+  hasRunfiles = true;
+  version = "0.83";
+};
+"pst-vectorian" = {
+  stripPrefix = 0;
+  sha512.run = "3ea49c1da6238c095dc2ee095b21dc95fca19c89b0ae473e73f9ea67ca9377cc8e696362f2cf859d87ad69350c7b94a1049823fc0b5329e36e8e31291cdcfef1";
+  sha512.doc = "787b3b16dd0a73d96d16a8f32e26cc40f84706fd8abf48df23eb94a5dd9dedc0f9c9b7d8512894910ac96c8ec5e879a5f0d24f6f19e2d9f231ad66060e07565c";
+  hasRunfiles = true;
+  version = "0.4";
+};
+"pst-vehicle" = {
+  stripPrefix = 0;
+  sha512.run = "4e5a5dc0227641a8b8f96913cfd513279c91f841fa1dd5960015ad79d5877a86cafcf87db38bd692611d5afd73a8a91505822d83433299db4efa9e4975a8da42";
+  sha512.doc = "1183b285d9438c7360f2cef9c40d86424ed2891d36a4aee6281e57b84773dd6b2366ca6c2bcff200911e583bd11f2f5aa9615b45656a240b28b1809acacf4145";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"pst-venn" = {
+  stripPrefix = 0;
+  sha512.run = "63baf8075ef294bc3a909b3160fa7868a7f179c832d680728fe463f8b1c058411a1393614ade666824fa3233d6617b1dd4e0c50c299a620bc459104515c85727";
+  sha512.doc = "e332f8ed24744c03c32bfd139a38dabfca1c6eaf9c5c4624d1579c16feda26e42e81b39dafc98527e8bdaacc2e3ff2d246c6f4b88d89bebfaadd57454e08af7e";
+  hasRunfiles = true;
+  version = "0.01";
+};
+"pst-vowel" = {
+  stripPrefix = 0;
+  sha512.run = "6ee1dd91b42e319e3a88966fe4cb7327211e5859ae9bc9e262afbfe1fb7f143386ecb70a71d6b24cb0c794cb0943a6cbab4eb40ac683c55a7ef1fbafc118e132";
+  sha512.doc = "4fd8ba42b0d4ed821abe52e5848af0d19fcf12c2b9660f09a502561fcfbeffbe38bdf2a0540ee79b99f50cb3c783ab4b5d003a59cf84b3066c364daa7dca0eea";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"pst-vue3d" = {
+  stripPrefix = 0;
+  sha512.run = "d2e5829b3c241f33a69b1c59b5aa360f73948a6dff70d39ed41b82c67abc2b469860e0bd91ff131dba6392cdb3eb9d78638928052175e65ad7aa94fc3a8d05df";
+  sha512.doc = "70d297642f7f36539cb21c12b46e2d5e4a6db244f203aa1b009c500876d2def37224579cd8ad54e5b5004f26c41203a0cb2d0a321d38b15051605c2f9432bcc8";
+  sha512.source = "660753b080958b11891954b27b39dcf06ee44db1a582376824c517d41996e3721c21066e430b633c7ed56b053b9f4c91dd3e1c968c3209b0426e840653c23563";
+  hasRunfiles = true;
+  version = "1.24";
+};
+"pst2pdf" = {
+  sha512.run = "ece2fc7c670d6c6895d364cf316facc5898c83569640f0c261ee89dbe3b302e5c6190e95c6eb08b132d213cbaddefbb1e589f1e6979a9540454ef442ec94bfad";
+  sha512.doc = "79cd5a76de8c3cd53b96adb498ed30afb5a8f9b8cf35009fd4e1c487b7d381dad81f46d03e85b1896ca712b02cf31732a7b9b84d4e7f75b0a7d7b6e0032ad559";
+  hasRunfiles = true;
+  version = "0.18";
+};
+"pstool" = {
+  stripPrefix = 0;
+  sha512.run = "a97af35dfce4a137af97071b49e58c31739e6f271afc62a455db473e573148d25fc27937ce680c6f400a200151ffd73867d5dd8781b12a63c68b7bf256cff5d1";
+  sha512.doc = "613cc4899b1d76e0686cd269568cfc0dda437cec0e50571086b3d44659dc4b3e3d567dec88b5420e4c802d676f21c2428b3930fb6bb3f7d7faa14c029d35d43e";
+  hasRunfiles = true;
+  version = "1.5e";
+};
+"pstools" = {
+  sha512.run = "bb0046118a269ca8781bc5dd539e1dbb7b068bcda185d8d52f9ccc441ae07c96197078b204054fec079fce0d707e86a5b094db07dcf8c894e1b56fdee2db28ba";
+  sha512.doc = "ba3cb98dad993b56c7013d24fb515489dd5168c66c8e818b3c87922e812509903085ab9fc4f36b9df36b0371a7533822e840552d0a16feaae158d5e6f228370d";
+  hasRunfiles = true;
+  version = "1.68";
+};
+"pstricks" = {
+  stripPrefix = 0;
+  sha512.run = "4c674666903d17749de9a99204e59ceeadee66d3fff38cc0913efac0ca34fb0269c7e5e836543d28e998277537fbca4fe64889cb71fda2dfb258a5aee37f3260";
+  sha512.doc = "8fae1af33f0d89b9da2d3bef0703e884ee0c0adfa187434e58a83fb84a999d783cf2e6483d4c67b247a34c5c3f87eb184f11fd34ac1ea6e266ed29d3552a625f";
+  hasRunfiles = true;
+  version = "2.97";
+};
+"pstricks-add" = {
+  stripPrefix = 0;
+  sha512.run = "5302a1cc7e16baf545b545822a2717e3f37c5ed993273038f14a0950d5fd83b4f0bdb951f22f5673bb1ead60e3e86d2ef9880eea404e4af52d4fb5969d89024a";
+  sha512.doc = "7950a3756ac016fc7d759dd1d466673a6df6b0ea5163a6e6bb1c71cdc3314b5c557304828efd4b81109f2238c5c096bafffdb044ab3f6bef88c7bdf630069fb3";
+  hasRunfiles = true;
+  version = "3.87";
+};
+"pstricks_calcnotes" = {
+  stripPrefix = 0;
+  sha512.run = "1b17e544484b71f3c29e5c3e1bed6021658ce7b9a256c21c004113b722a85be7ea6861753230910771b7c900184ca8cce146408301e75de79e0c2bf8939c49a6";
+  sha512.doc = "bab8492549fd268f856e11f5f6db4e1ca878c67634387e7295bc163cd17080ee6b685893ddc85a882bd895adf3689639bfa7fc7d0da5e9916ef305c18d94ad65";
+  version = "1.2";
+};
+"pstring" = {
+  stripPrefix = 0;
+  sha512.run = "d77c937467a9cd16f24fb1374a0d797db04bc301fa8a677712e09d83b58df6fd12aad8857dd83f4d5278d799a0d1d52ef12106e8106921d1ec1453ff6692605f";
+  sha512.doc = "51c316c27c3d4083696dd9ee86e378c83ed09c75c632a7f0a580bd84d0033c7776008056a4b26d7835a4974b879c0f2b0389ae83c70cbd6ab093bc8b2add9ed4";
+  hasRunfiles = true;
+};
+"psutils" = {
+  sha512.run = "1e0afa3066bd867425f8b34857e222268cab1e3048edd40d276f01f3c9cc1d5c31bfd1dd960702987c7182ce2e5512e314eaa87ad25da5696de24b3232f9a8c2";
+  sha512.doc = "5ba2329750889a16ea2f5c2feb79235251d1db841ca264075751bb183ddb81b960632ed956e623446143e907deec4b695634a48644d3169a5a7bbdf9c0f176b6";
+  hasRunfiles = true;
+  version = "p17";
+};
+"ptex" = {
+  deps."ptex-base" = tl."ptex-base";
+  deps."ptex-fonts" = tl."ptex-fonts";
+  deps."cm" = tl."cm";
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."knuth-lib" = tl."knuth-lib";
+  deps."plain" = tl."plain";
+  deps."etex" = tl."etex";
+  sha512.run = "7e03619011e2095fe76674e39f6220d938a9673a34bf6cf35cf262a60d8eb140a5f978f8f04b6031a1fdb56e81edbc6c4ace82cea9fbbae2e9839b0b8d0e0612";
+  sha512.doc = "e09ce7a08be8a176e591cd69b1bdce5bf37d59537109ca820e9f4e60bdcb4cec32a58cee75ee36c61ab7a512eb2475df7f2afd570eeca53c33b2be94ac2ec88c";
+};
+"ptex-base" = {
+  stripPrefix = 0;
+  sha512.run = "616ce41d8fe02c6d38dc638d6557ab29580cc57e52977b27d319ddca63844f91d7b0f0373c57bb039a3f70b6ff462eac179d9e816933b2954f2af1b00c3fa0d1";
+  sha512.doc = "e4aee26d3ac73efb1e0a2b4579e7e8cb1ae46925908ad407d8772eefd310fb5ac969c5c53303eb7e5ba6d0cc115f487fa600b5b6446ebaa52f9015ece56cc19c";
+  sha512.source = "0f5a2eb6e73c1d454efb9e7a0949d0baf49ead997bbba4ca01b3f6ad894b050394430c194fab002bd41bc7017e578818677bf0eb577bf34c7bcc47bd243159d1";
+  hasRunfiles = true;
+};
+"ptex-fontmaps" = {
+  deps."arphic-ttf" = tl."arphic-ttf";
+  deps."baekmuk" = tl."baekmuk";
+  deps."ipaex" = tl."ipaex";
+  sha512.run = "8951d9e1bc4b2f2e4ac7bc5cb3b56ddd3924684c65edb35ff680e72ede7aa3f15b92a1cad39d8e6652cf76abaa51e72115aface47068031c6b24fc82c5e6531c";
+  sha512.doc = "c5e0f4b4ac9c657b83c27ced5bf3d4eccf993db6518fbb750e8a0b91752b40193a947a3ac2c53a82270be2f8ea736711b5a60e59f29c424bb3ca612038be8972";
+  sha512.source = "10b3aa3fabaae3f7307861401b7b47e14b62a5f075fbf79dcec44e99ceaccd2e208b09aa9733e850d01938332c31ad399540b5d98a38ffe29261aaf794dd66ee";
+  hasRunfiles = true;
+  version = "20190506.0";
+};
+"ptex-fonts" = {
+  stripPrefix = 0;
+  sha512.run = "54ebb6d2923ff6b277b4376041b90a0fa6a164281cb18820f175d5aa87f9e996c1adff16e9e5eb5bb90d52c135d581eb1d5ddc476ecb2446fd27d0cecd75bb30";
+  sha512.doc = "dd3c4d3510ec1de8a5174bd10a7ff7bb173b25354b28f0b8411fe23b41fee8523fe1993c30e55cb7c3eddd90bd17db5299cb8f4ca170e4d97869388d3fbd8137";
+  hasRunfiles = true;
+};
+"ptex-manual" = {
+  stripPrefix = 0;
+  sha512.run = "a09a78d9c412cf812ddcb8c553650ed474516a97c7818fce68bb2222047d116cc4eae184b551f89b45eae49d0d91e902fae1025a353520dd56cb8280cdeda316";
+  sha512.doc = "539133b6f91ee252f62862760c502425b0387815c091d0a0e425bcfeda4939d44b83661b6e94de13086d7a5bb83c332b4ad998d5c23377f72d6a57f88e018488";
+  sha512.source = "259963273db22746370d950e307e7cc965963a4e059d129a4bc81136069ae4137b1e2c70a621d694fa2665a05da7c937e33922983bbd6d8c6c9e8e691f7ab2c1";
+};
+"ptex2pdf" = {
+  sha512.run = "2528b9b182dccd3bb79fee2ce030874554d2ae674d78e481580bbbf03e38d12e1d7ee35b1e7d5fe887ea285851751bcbc2bf3d5cb462430b842ded4fb3a7b0bc";
+  sha512.doc = "ba07bede383c322ab541cda888c620d1ce7313dc65807e0d1728d53bb1ee8ad46a15a5fa1b88c93d796cce2eb6b8c4b534fa8d5c9089e83d0a721a3b222c0727";
+  hasRunfiles = true;
+  version = "20181212.0";
+};
+"ptext" = {
+  stripPrefix = 0;
+  sha512.run = "ceb8844ff23034bf730823349e6251ef0c7f208ef74c3ed61fa212af89a3208e8f9f1b74b7877698d4459047b64376faea647a919b340d306d54de43ee9617a2";
+  sha512.doc = "31ec6dea18c99aac831f4f180ccce47781ce98b2a8859bb62019cdffd690a8b803cba66728d1a9805a8a39de9ef43e357be8fb6a16e0602cf67f7f9dc6cb317e";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"ptolemaicastronomy" = {
+  stripPrefix = 0;
+  sha512.run = "58202171aa08b297e2999554d8b6ee43d4c5772e2f28fcf73c11a00ff8476dcdebfaa5352c7d248720feab2ba642947f07362cd9124dbed27e22086123da3de6";
+  sha512.doc = "04997eb4bfd5c5e7789b5db02e9c27a9eb4d65e685be1428c5b81199957dff5aca626a76c719d871217ccaa2a6e6eef6c17ed94f4ea161f581b77a22306d61f3";
+  sha512.source = "2a2d250d5deff043970037268b6f7400e073da58b1e6fce0d2a6e2b0c77a567dc683f616fd7ba67b659bec3f137349b37c84b808364bf5359392026730af3aae";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"ptptex" = {
+  stripPrefix = 0;
+  sha512.run = "a2c31b2e039c198d3c3c84cb58cc0b9326bcf11b4c361c1d5c9b8f5aa4943f14b30e722bc2425a38b69935f4c88c67439747ffd65e0a194f2e5dd54a6448bbde";
+  sha512.doc = "0e754625fb8507591f21b860901de1b06bcb31f5c0b2fd7df1fa5257c7c611bae4f575f7387362bdd21d826a329a8af3ba00fd30c3bc9d91be7dea5d66e2fdae";
+  hasRunfiles = true;
+  version = "0.91";
+};
+"punk" = {
+  stripPrefix = 0;
+  sha512.run = "a442a536dbdaff9dfa9d1cdfe1a084d0f4e4e28174a424cf59a1da94013e115b9fc6294ea3362c85cb770028c62b21f7f7fa9817dbd68787498199ce585589dc";
+  sha512.doc = "33842d1fb46a78654d7351ccf88b40b87e6e03d83598f661ac21ee99d45156dd8b37a652c5c8e55506f95fc57b83e7f62f6c90c3fea5443dc5bb6590302b3e7d";
+  hasRunfiles = true;
+};
+"punk-latex" = {
+  stripPrefix = 0;
+  sha512.run = "e44098c082465aa620d436a41306c9a1f36075c2612aa045e7c958151fc62e9a740584d9a9dd94b0c5631c00d406762a8e35f672931cccd3c09fe95850f3a2ba";
+  sha512.doc = "36a3341d2dca08941a923a1f407b422e96438e79ba5e3911a89f13d48317ec5aa0f5afccc7539b0882996fb872b38bc3653f1e5b088805e5ef7c9d96a4546d01";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"punknova" = {
+  stripPrefix = 0;
+  sha512.run = "bcb37b02258ba406e8ef3965619c99193c08a4e1d11f771b3c6b06716eac16134be81585220a581176d9e8b4d7f488730ada3b5963238ff982be400cbb41d888";
+  sha512.doc = "64df58c8996563a447ed7a012c6dd8f5248c8a7db06089d776e8ce64d516b4a0c4bf9042f587c996c7ab61582bba919551d352c9ca75f8696bcac5ad0e34866c";
+  hasRunfiles = true;
+  version = "1.003";
+};
+"purifyeps" = {
+  sha512.run = "79d99ef7ebc462c7c65d03f23cc85b9f136df2b0c9d647fc0672584fa57bfb7447f6db0e6d6b11bfc738cfe8c8658f45fe0b4059ff00f355e4b21d44f0d4102a";
+  sha512.doc = "3f9fadfb35596835b250cab98b0d1e3c6d537cfac5878e0b9788aeb5cc7ef455ce3d44f7d0f03e9002796a162d374f6aa8f9bce5bd4c3f0e8937040de0b82a8d";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"pxbase" = {
+  stripPrefix = 0;
+  sha512.run = "e567378515039b55eab0a12ca645ba5ff17c2dbaf56309c3273beb0d05c7e6e2dcf3d7d22091907df5636451df8e91d09673607918dd9ac091908cb6ef1e4de1";
+  sha512.doc = "d6d87123dce0a2afe3380cf32fffc8954e30d22e9822d0ff89500bea6a455c70a6699576265cebad29ba33c0fa5e7b63a40f26f7579d1fe9dc0cbcb528c45d00";
+  hasRunfiles = true;
+  version = "1.1b";
+};
+"pxchfon" = {
+  stripPrefix = 0;
+  sha512.run = "f7cbd2c1685fe042abacc13e649a187401c53eb42dc66bed1c0f7e56524ef9cfe6b25235f9379e3e8dd948bb6fcb21ab297fdc3a2b94b27e0ead8aca041c3e73";
+  sha512.doc = "88be1f7eea3298906fe1c439c1342690feae9300107d8c2b1467301f06686fa70f128112b3449b5045bdc131d30608d9f386556916cd0f87b49e6f715546ff74";
+  hasRunfiles = true;
+  version = "1.6";
+};
+"pxcjkcat" = {
+  stripPrefix = 0;
+  sha512.run = "59923115da33e18e2b29a10f664063755b42937ce601ed46103ec8edf16944056180a1aacdb296aceb5206d3dd453c0eec6f84f5b689ad68736c88479f928214";
+  sha512.doc = "3c822359a68800a29fbc7ceda3293b6be902d9bc61f277003e6e20404c32e9bb6b34638a4bc11aeb943c4bdf6e361386972251b9b015fbe68ead824e5fdc67d6";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"pxfonts" = {
+  stripPrefix = 0;
+  sha512.run = "3b50d3f04c00cd080495c71d9387fe9c810ade7d83ead1178d661a618374a3a67c0fc70ae2a809d2b91db4afaf352b1596a588f6998a4eda220a6f181390b6d1";
+  sha512.doc = "71898d307cabff64078bbb98bee9417c79504fd56f1cfc1427b9e4ccc9448b5e2e8436fa085a63d6fa6601e591673ef52eb2225ddfad5e34943456a2239206a5";
+  hasRunfiles = true;
+};
+"pxgreeks" = {
+  stripPrefix = 0;
+  sha512.run = "d3f8ff3c975643d74dd92e749397d01f8d3fd0087a838271a491791fa4bb2d65c852ff5989f79952d40547a601c97fe0274ab4407a8e73aa047221934b9b2e9d";
+  sha512.doc = "22239223646ea121422016119b6d0edce32d002bf361d096c173857b36ce324ebe2e4107bc0eae650b50d0e94775c84f480768246ee65f975ad5a24af0335158";
+  sha512.source = "9924c5b5a60d381efc41f77f9b5224a12a158fd7de6551a17b1d32eebb6ca6e80a7686648a81774398c4e25fef759612c652fff983a635f4cf56c5bbfb52858d";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"pxjahyper" = {
+  stripPrefix = 0;
+  sha512.run = "048978c0e09715f491f440a15cc08b9984a85f01dee160bf4dde530fde21b7c8a4d04f0a06c5ba0493aaf7f63e5e246813620e452d2464480ba60bafb4e740cf";
+  sha512.doc = "624c4d0fe038f6a13fa6814df000d52497810c3e74c8208a687571f524f1b8b878e36a01e8686f3fd8ec90177ef82829a2fa75ba70519ca435a97b42d1587340";
+  hasRunfiles = true;
+  version = "0.3e";
+};
+"pxjodel" = {
+  stripPrefix = 0;
+  sha512.run = "a8b4cab3c5951fa07659f323804e7037919d4a8b46f73fe14d3ff920c54a17dd41fe813a7991102cda4743b51152226e60974da1619cf4108f5dc77d63349d20";
+  sha512.doc = "424713f3f6cfd46f75b05ae6f8f0ef59e4435f970a1bc40333e80a5ab1ba94a79a333314f683e377232f929bfbe8c99d5c2c59393d1c9db6990e2343778f2c09";
+  hasRunfiles = true;
+  version = "0.2a";
+};
+"pxpgfmark" = {
+  stripPrefix = 0;
+  sha512.run = "eb341eaebbe2fca860c2592c0d24f6b5c4ef0f1e6b2bd731d48c1994ded7afa01bd5cb365d3f30147f68855777defc3384038aa652240178fc948b5225cb4c08";
+  sha512.doc = "8a80eade76fa7b5e5b919136e499eddb5ff534042fc56eb8223e80124bde97a39a65d31370037cf425042a1ae516e5888c8751388899ae65a8b561f091693c97";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"pxrubrica" = {
+  stripPrefix = 0;
+  sha512.run = "42de048a96a4d552726de6abea4e8903f7c952c02259001d66655f449bc4edc7bb25b351be594bca205177f31f09525c9b986629c6a964e8a2b50c66aa01e1e5";
+  sha512.doc = "92c0b794ea85b1b685bd94fde0c7b7b009ec4069f99705e9fb3dd93ad67564952925bcb4d6442a669f965700e658eb0c15194ffa55da86bfb1867b0d8b7bf5c4";
+  sha512.source = "17ff7e06e0ba752044f7c65925c3a0156a566b03504a4cf0f55296d8deb316eda79ae015963e1011b20c51712d206c921baf3a39c3f63d05eb1420915d4546c6";
+  hasRunfiles = true;
+  version = "1.3c";
+};
+"pxtatescale" = {
+  stripPrefix = 0;
+  sha512.run = "922aabc7fdd35d1b1a6199be0986ad6d42ffc0db138066a7b1607ec521cf22571abc752ce225c9d99e2e9f8685149a5b91c35d6914fbccdb293a2476797dbdc9";
+  sha512.doc = "be6998e53e5d8d92138e440de1c75e83671ea88316fb9b4dde0188dab198dc65301b4cd4f53368c277b782edf82f17ef89903eddfa6656669a5329a029907249";
+  hasRunfiles = true;
+  version = "0.4";
+};
+"pxtxalfa" = {
+  stripPrefix = 0;
+  sha512.run = "ac1972a7dd5445bafca244e04663e09c4e939eedf31e8038e2ea41d255bdf6a4721bc53a443f6663f989b21494c61b3dae9ddc9940e283cdb49723e6fabbea69";
+  sha512.doc = "55d06ddcb52e79ea590b24e8aa53a41dc18162ef9a8871ea69eafe53c6d0f5ecd5b548f97864c0253f543ca9f4eda17c665f1a6de1115cd8052670c934fbe52d";
+  hasRunfiles = true;
+  version = "1";
+};
+"pxufont" = {
+  stripPrefix = 0;
+  sha512.run = "c364d150c3607a8f918301846ff919bc3a7a240b23da1a67faaeeac5d1000c7f59dd4ec7da829c4d4793e6b5c9aa11f94314c149bbd277d5a3d7df111f2839fe";
+  sha512.doc = "e1938ee53f1b7572ce85b354eb6bf9477c63adab65c7c3b3b486c7ca6365865845eaf4dc4670cde741475623e3654479e817075832b3a2d7bab14c75f360183a";
+  hasRunfiles = true;
+  version = "0.5";
+};
+"pygmentex" = {
+  sha512.run = "d6e6327d0bce32aafb4be5a30eae63ab0418506367a4a18305f2fa45156b27911bf2cb945289323839c82bfacd6d8d3a588a302bff1cfc29911cf7d761d83cc9";
+  sha512.doc = "effc3db243edd25d4aecf7c2de6eeeaa18ff085f6304bc390ee0276c07d7672d17202d8832a012e9fedcf3bbd16771aaf78a4262366744f5a27266693fb0e87d";
+  hasRunfiles = true;
+  version = "0.8";
+};
+"python" = {
+  stripPrefix = 0;
+  sha512.run = "85c300c969fccdff036e2da59ada1040bee6f25c6a8ec3c173ce44084fb9fd812aab79b8fdc0b9fbe2ffbf9485abca57fc5d82caf4ac5a3ff922501b46dec164";
+  sha512.doc = "8f88b9bc84a71c430486e2e3d2b33a4436cb1ac1257b9ea5629708438b8ac7488839d52fc138e4959575fe13388aa475770a62ca070b4746de8b78c53d5119a1";
+  hasRunfiles = true;
+  version = "0.21";
+};
+"pythonhighlight" = {
+  stripPrefix = 0;
+  sha512.run = "1018d4383ba04f92d383d2c4f51d30f091528f7a89ff23614e0ebc9e488ef3cc8167de12a42e6a6465c2b3937d849bd5eecc94cab0a9b8003569b06ae2c91632";
+  sha512.doc = "31297eb541060d760fd61ebe169b840cf182f8f857986aba5a2a578373037d3c99ee12ec9c707ab1f9d29564925821665997ea45f728273007f61a5f0bea5180";
+  hasRunfiles = true;
+};
+"pythontex" = {
+  sha512.run = "27a3196f89ae04eb992817800f30dd26b275b65a2f9272907a2cc6a66708ee00290c3e0083bb537f0ee0152c93aee50728ea1ddab672aa08dfcef5f089bcf2b9";
+  sha512.doc = "cdc5046cef480514417874ef5343a39f9e1c377d0e1f00e9df4ca8746670f2b222636afd58a06ef63086c3479b4d516f9d14074aabc1fa7876b2fb4f6599bef4";
+  sha512.source = "9acadbf5a18d56d24bd1300ff4b713325c43f163d2ac27e190461fbb74bbe023e31b2a3cb0bf3c6ead42c1275bfcbcbc8cc87914f623537e05773e9e641b7b03";
+  hasRunfiles = true;
+  version = "0.17";
+};
+"qcircuit" = {
+  stripPrefix = 0;
+  sha512.run = "72dc726d377bfa13b30d5440f65e3f451a717c32785c9338bc95107a3fd29326d5011ea31a6805fd751e276279b8bb577f2b4a488ad0f380ffad84fbe46e272e";
+  sha512.doc = "cb4d00d575ed8f859722b97af7f15323af85e69b7276947c05770a6c745dbf0e4b3aa1546b3cc82d9555a5ce839b142ea8edd3da166d2c109bf6b829b2ebb74f";
+  hasRunfiles = true;
+  version = "2.6.0";
+};
+"qcm" = {
+  stripPrefix = 0;
+  sha512.run = "9fc1ac5b0b6fb819022f9e2ef625a73ed884ecd2c45b7c58283388ea0263d9f9c9045e14d9ee37e8a3c0036171284f30f7db5f99bacd01d4c65e1819bec6ab95";
+  sha512.doc = "d7935c763e9e5245eb68d915b39a2f91d785a1590a7cd807e0923d7d5763ef8216069bf1119f15f91521fd83786c86de7b227e90b6407d6799a6104fe466fd4a";
+  sha512.source = "7efcc841f6c990e7fb1979bfeed28289ff0290b9ab2d54248628a3e52f0eb3c35b9a3b8f91a4b06231577a957d1009522d4c9843c103720f590cfb617289fd23";
+  hasRunfiles = true;
+  version = "2.1";
+};
+"qobitree" = {
+  stripPrefix = 0;
+  sha512.run = "cd229c1611f269f904d73d276b8b36fb60a373130a3b5bf78508daf85d5ce50cdc4841a25e30c5a0925344eefd93f638e635be2878478f575f32fc458fa9a0dd";
+  sha512.doc = "b3b587bbe835456cb6298804cac2a8d61c85d4bad6550cd355e6a9ba155e7b691c5b2f5f919ded355b21dde9c4009ee30466bcfc5cb6d81e0af0fdeb97aa3b64";
+  hasRunfiles = true;
+};
+"qpxqtx" = {
+  stripPrefix = 0;
+  sha512.run = "7387592a338e7ba10942e4ed96364e36ca325040bff02cd69bf0f98d471775d38bd63e54bad494f64874e2fd0462762595c5796d7453aa6909fccc2d9d6bd27c";
+  sha512.doc = "6b6fc20f5ec1269d318813b1ad34020e2b5341ed8891c11d2eda6b84884b3782e992dd9dde16d14b2030f2b57e1146fb6da6e761a35b12a3d88e8d865285668d";
+  hasRunfiles = true;
+};
+"qrcode" = {
+  stripPrefix = 0;
+  sha512.run = "65ecc00d46d06f8a36cb1f170c12692cf7ef8c0cf9e68bbdc6a7da6b0a7f5fcda6a2e065b8a474609556518ab07c2d12f19a9fdaa0b6339aba94cf35184e26f9";
+  sha512.doc = "406d1cf238b397412a57ed695a39af0ef32de007b94e8650cf591c63882d05d7df18061fbd2b350347c052091202a38de1ceef19f61fa58de38c2e73de6b01b2";
+  sha512.source = "3e344af4bcd4e0d2b49638c33177f600f1e3ff24416ad503f55b3376fe7323ab381c7ee695351923cfc06b54c9ba8b3d1f4705f5377164f2b43ee04ccc565955";
+  hasRunfiles = true;
+  version = "1.51";
+};
+"qsharp" = {
+  stripPrefix = 0;
+  sha512.run = "29aa0808112111d088f8795ec87ca3df6f2e10f0a8e91347ddc7101733aadc72ba90356f7e4b39fce6484e04975d3e151205a5d5272789ecd414cd0a6afc243b";
+  sha512.doc = "69d74a3ed755d16957a2a844ae624a15e18813fdf02595c2e4ae2dc0cf13b20a1db1c4f49c20db3e4d3343c586411a88c7ecfe6367c4c1efea1a8cb2730cf8f3";
+  sha512.source = "d8ad97902be6b5f29db2cdd7d27049407ebffe5efc8bf0f0ac64e64ed2e3df8f4fe86b8e023ae7dde4368740fdebf22ff6420a32854d5745e8fb147005788226";
+  hasRunfiles = true;
+  version = "0.3.1901.1401";
+};
+"qstest" = {
+  stripPrefix = 0;
+  sha512.run = "1461a7e5a88a75d1976b8bf0b6b9a685c7e68bd5983ea1549b277627e20b8e7d0b890536c8e8357e168914220c168cc2be2e9a688b512e16d613107c50622f79";
+  sha512.doc = "a2e138b5de9012b637cc98b18e5aa64b2c9384f03beceda724c86f1e81e03b6da6b19de27fe15724463edc61520d035495f2f039a2d541b4761c44c55473d1c9";
+  sha512.source = "1ff5ae66e8620b298f4cb5ca4d53e420ed0e89e476edae48f1f37fb1785e8bf4693da410cf2149d690734ad11fcd669152ffa7a560bde94e923e772560f8ca19";
+  hasRunfiles = true;
+};
+"qsymbols" = {
+  stripPrefix = 0;
+  sha512.run = "b910db8e0e33bbc111a95db914958a3261fa89061677d999876b026d25609326b83444a7c6b77ee4a39d60eaedff448ec662dddf9511e99c826a3bddbf0b2861";
+  sha512.doc = "c633094c09c291666f1953d8d8d8570d71b773e70f90c805cb01981117ea4212ce8cbd4ffabd9ca5aaee07637d19c6e627856115b3943f9d5c414034eee500ea";
+  sha512.source = "5c88d0d929f6491b6b9df65ac3ce2be28ee5461d5cae5bc2ecaba64a9012ce4d84cf3f63bec19971ca2e8ec37fa869b8707c8d6ebb9e80f8302cc04127873962";
+  hasRunfiles = true;
+};
+"qtree" = {
+  stripPrefix = 0;
+  sha512.run = "9f381007c2526f51483d7c190cd7cf86cb399e95475841900ffa8f522d3da71f4f451b42562783d756e252e513ca1f9e9e8586517057a8f6b881cbbecb5c3987";
+  sha512.doc = "c16142acf0c3f9e4f347c9ceff7a6c29557c0c2c4d2232ce9df146279b3cd4e1019e703479f426709a3feeb6ac46fb91f7dcee8cad35b19c83c9893661322f96";
+  hasRunfiles = true;
+  version = "3.1b";
+};
+"quantikz" = {
+  stripPrefix = 0;
+  sha512.run = "0d6946eeee69573a3c014a16c985da8ed193be32511723dd6302978851d9ac729aa7248be6cb152bb519b36e1b04bdc741b440d9746fc8106d326af67d8d10e2";
+  sha512.doc = "8dad4e65191d092b497216ed8d57249cb6edfcd54481bac8b1ca8af9734608b9f4f54e260be6ffc3df93353f81eb839db6c68e874a24f62acbb4613370578efa";
+  hasRunfiles = true;
+  version = "0.9.5";
+};
+"quantumarticle" = {
+  stripPrefix = 0;
+  sha512.run = "71568c84798b4ca114ccaa98475d84efb0e0332c12617bfdc72694aadbb3f6e30b9ff5a762baec0781420b02069a0a5874367e5d52089d6bfcda5d2af789cd69";
+  sha512.doc = "99930e86922c19d13f534f5d04a0f29cb4ffaea04e8062bb018c6a848dd7674becf8a515f43413f3edf48c5c485d4d680b371c857b24dcae6307ddb329307dfe";
+  hasRunfiles = true;
+  version = "5.0";
+};
+"quattrocento" = {
+  stripPrefix = 0;
+  sha512.run = "04184f6e4eeb1dedfc165778d2886e5194e48adb5a17bdbd91c1cd408f42287b501a35047c761dfe6114eac1cd9cc68ec204f73e7c7946c7cb44b9b915bf1347";
+  sha512.doc = "ec4fe49f7b5bee5ac61d39568a900783a21e67d36e77e0af6e974f7dad27821a01cda8ea244f40b02de7cf4d427bb8e7d5fd3db6bcb163f84310083dfef68278";
+  hasRunfiles = true;
+};
+"quicktype" = {
+  stripPrefix = 0;
+  sha512.run = "4950c1c7a4536cb64d70fe8c08a69fd9336825973a7c8a669ba48bd66476888775d1ad288d34d4b83a9d674624960e3d17de1c972f52bd7f329eff971ec0f185";
+  sha512.doc = "6e43ad0d932eb2237106fd991dcd25e5bd536cb64db5988c958b138af294fbc777dc6ce2c2b791e3875a2bdeaf5a10be7d15585b44e7487017925e0068e898f6";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"quiz2socrative" = {
+  stripPrefix = 0;
+  sha512.run = "f4fba8eb850a90288a9b3e7f4571f5df560e09e7cba608f7bf2bb3090db5a2c6bc7fc7240ef2e3cef9d37fe1a0105e74c4c63c39a7c1793a1fedc6f86772eac5";
+  sha512.doc = "a51cc19b7d13c0bd4f1ed07c6292940176104b5fb381dece7709a5bc1332edb4606cdd4a66ee5a4e4886754c4d274aeab40666eb45328dcc6c465a29a1c4ae29";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"quotchap" = {
+  stripPrefix = 0;
+  sha512.run = "df77f5d148beb1b70d0d2683c1be2a1b556ff1fdd90e109a29fb222b5eadb5008dcd1bee4e36cbeabf484fe90cfbc7bd07f87d40a70cc0675fe18b9019ed712c";
+  sha512.doc = "b705fe959bdc23b5633f850831fe7b8a5261e55cc7cf71e75f4b626cd6a35201f0dbcbcdefe1994c5b4eeeb6d914cb07a5f335a165835b26a45d256772613403";
+  sha512.source = "d1aceae7227bd9080cbbd015fd2e3954e12330bd33ae06a6b98c9c63717a30796034d8bfc5dc1cd30ad07b2e55425ab2cd71e9145100dff87d98a11b11a84ce3";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"quoting" = {
+  stripPrefix = 0;
+  sha512.run = "44a9c726a5a9158fcd13fd93785101d2a9a940f34da3d52efd5be1a0467cd76aeaf4706b945a8de0b4e0b4a90740567cfad87f08aaa92e7d4eeae8eb9f7bbc73";
+  sha512.doc = "b3990965effff7529a7c18cdd3a08af337be3766ffe535feaf54db504a47b0f054af41511a635c3e70c34d3025df419af702d319240ee673f7462d2cf4ccbbc2";
+  sha512.source = "a50186cf1b8b0f55ffe4b2e8447b1232c14c6b36aaa4635bba464de1648ed01adbfa13d8a184bdda8398573b2b9132948577e47e252bcb1014761f4318a76ede";
+  hasRunfiles = true;
+  version = "0.1c";
+};
+"quotmark" = {
+  stripPrefix = 0;
+  sha512.run = "9f21ef20aa9354b1347f00a52df65ea691fe4a00b05b794815279c070d05544611ccd8773cb7c9f8146a3a135f3100a06aaec48acacba255bae9a0654a2a9b53";
+  sha512.doc = "6507fcf8639e780ab844700f6356abd8eb69df6158ee638d8471a112159f95a3df8f358fa40479eefad0cf09c34fc37d9292904ae159f2a79fea5acb93f6e542";
+  sha512.source = "bbc423a9d6f6fca00c5c8dd9ed5dc084d094898ad5b27397147c8dae1f3bcb8a09f137f1c2c7066fb92d1cab1f5d16681612a528fc28ec4e7901b660f6c8eee8";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"quran" = {
+  stripPrefix = 0;
+  sha512.run = "0b6488c5791f3afe774d0cec602e0da69fc9d5c5a83ee0f660d87e7f58e43f78c5e25cc7c7da446c0bff1e69a1857e9bfb920d03efc8492f5a2e226a2caa6dad";
+  sha512.doc = "15d704615b7b08a570ede940ecd5dd73a75fa1ee07631b7b9354fada53ca42c87129b63a3c7825a17f37579b099131666cf2d20e81b9c09030eb7bdd8b069ec7";
+  hasRunfiles = true;
+  version = "1.51";
+};
+"quran-de" = {
+  stripPrefix = 0;
+  sha512.run = "bcd27ad64c01fae92d91155c918e4880837f657cfe5dd849a8bc137830a8b2bd6eb9942c1764e60f65bde41ce2e4397d755ce621ab83c5c56d181b60042a503d";
+  sha512.doc = "baf460bbda2bc6890585dd21d0f86208501ddfa4443ba0d4552e1748ad44ba578fe78e79928a0c2556eca543089c2802616b9a4f9637c64ace7d01ef30168e39";
+  hasRunfiles = true;
+  version = "0.141";
+};
+"quran-ur" = {
+  stripPrefix = 0;
+  sha512.run = "0a6f214eac72a453050de2e2bac8574bbf746c3abeb528ed08c816633f2ea216a9e08f9be517c4bfa2a43924f5ac1921291c7f598297ac23848568f6ce85ad47";
+  sha512.doc = "9bfbc6ee1896e1586150fd67443626b6808e9d15efa5552e5ad238c3d704868121ab93355a0b170f7bd958992b42b1553006bc2e28ad01bb555735da70ed1fe9";
+  version = "0.1";
+};
+"r_und_s" = {
+  stripPrefix = 0;
+  sha512.run = "86b219305e4e085af2a22d34bc586253b5674abb18e257fa96bab1d45695f841020c0004f1da51fcfca0fd0b325e4043f2e368740841a5a2e8db774711ac6348";
+  sha512.doc = "26e227f106bb9303c4823f0230b689d6ed883580051e1bd5ec2e16ad796a3e33df2caa389c309b21b010bb43b07e5ec1027d6c046af55193deb0e4d975288846";
+  hasRunfiles = true;
+  version = "1.3i";
+};
+"ragged2e" = {
+  stripPrefix = 0;
+  sha512.run = "fb74ab5a4aef68ead15246701eb7ddaa07cb0efa66f309fe1dae067cb7e8fe38df9ab9d47338342895fccdea30fdb189e1868e3338cf84f61cc787a704697b22";
+  sha512.doc = "f15fac0d6949fdac80ea27077720d72ffd7ff2ae695d4716875280d045b25c485016d8e72528957c10f93588d5942f440e67d79f1544d91c3eaa912c2f0e8067";
+  sha512.source = "f64a195e25aef5c691e1a925d9b2739a7dbb7bff3b8a100ce8f0c477ef222b01c52dec53b5c7a80f34be3f425f58ee6d88693b7a42c188569c08a4e0f5230abb";
+  hasRunfiles = true;
+  version = "2.2";
+};
+"raleway" = {
+  stripPrefix = 0;
+  sha512.run = "8ce708ec993b1405dc04ddd96b6d39da324799f404e2798448c12cd03749f11685f840ba4f986b1b0f7696f9141923f3b91f5318de634979720af5af5b07781c";
+  sha512.doc = "eae288de26c57ac27172e83bc6985b0edf80ac88538561468924c34656f31507e008097a1e8452ce47729ab501493733a1c022440c31c34cd99f8211383e889c";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"ran_toks" = {
+  stripPrefix = 0;
+  sha512.run = "145ef7d6307f0b949fa488d2510223bd055419b5677745aaf04f322a817562320829f931136b9f651e501726202a00da68d9b5bc13f4346c9de9361611d427e1";
+  sha512.doc = "a8e8b19485b3609cc8df896cc8eed9af31177866648d94f10c20b2be1c8ad23c48ba2d8e9004168cd6a67646b68aca48abe78dfdc668216904bd0f4f982b27f9";
+  sha512.source = "83a0c7f284b019b2c4ae6469f48b275c35e31d4f4cd2c61eef5d906f5bb41c46ba73fec3c4c34fe3ae745f5bf1156ed77021556c2e9ff4cf03dab3752bfe3c34";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"randbild" = {
+  stripPrefix = 0;
+  sha512.run = "b4fac4fe105366ae1047a1d4225bfbe8ecfe6e05c29e955bc91d591f25ad6a8ba0e2b81848f27af96a1509a278864393c8874b14f30e64c8d5b69b9db811ec41";
+  sha512.doc = "fd8f83db389fa62ae8dd63a2c3bc8e4feb9beb6c56d7579fbd9e9065c399a73ad19563f22cdbe1dec78bd1c33056ed1cd4d9a534105b34a2ceae0cd8592326df";
+  sha512.source = "6180472c45b6eb362076c50a6a813d5521fac11d92881639cfa3c7444fa456dbc7b453e4f94de147a635ce017bb21e30087ec7e6c39ead8778bbe9debb68a68b";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"randomlist" = {
+  stripPrefix = 0;
+  sha512.run = "895eb116868ced533e23d398d0f17bda2f55a2cea52ec46bcfca4004b9411fade8817af4fc9d3d91b2ab2959ea24027266d8fcac0c77a64d2a4b88fbed5d56a4";
+  sha512.doc = "4c0ebff9275bbd1c8550902735b4ef0d04dbd688bb1abdf124560defd2e5d0cc23171e8034fc67b5379d0ec30395b4433ababf3c3a244cbb5ca5f15005057f58";
+  sha512.source = "3ccb29c8a6b815484929b7bf0e142090bca848d3f5562533380b71e1be3c9fff2d7ed00f39fa68a745442ad45e1b07e4ed38ef2db55a2bf341e6adb0ce51c373";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"randomwalk" = {
+  stripPrefix = 0;
+  sha512.run = "3a1f08f41864cc3b855fc4a9f8aba298d92505231c728381f5c5aa29f21c73d6e10834ad589c114ae26ba97d092b33e9c83a30518a7f289aa0ec96c933471afd";
+  sha512.doc = "00c23d42132d4a47973871bb9a2054385681898d6cd7e0a7a47337808187855812d98535428f6e37a3eb2da13680ac4128fce38db670a87a66483f6ece044c8a";
+  sha512.source = "55bcb9c1acabef60ee605d9dbc0cf9d601a31528dcf444f2caf2f8b91867538549bd304b3a73b3bbefdc9e7ec82791264f054386c46b4fe67d20e8ff6a44ca8d";
+  hasRunfiles = true;
+  version = "0.6";
+};
+"randtext" = {
+  stripPrefix = 0;
+  sha512.run = "6cd20551f4b48d30d4c830da395873bd20e11b930336f4fac0f0ccf09c9a956d18107c45aa2b1ecea51d1fc4b0c0fabf06d436e247aac6ff58548cbfd31d35b2";
+  sha512.doc = "3bec31ca40816e7e86642e080021ab5faabb19656a15463f712e111485f1de00d698816e84b1ed7b63ea9380970d4e80b04aa0cf79442c7d1d77d5fa3f4d072a";
+  hasRunfiles = true;
+};
+"rank-2-roots" = {
+  stripPrefix = 0;
+  sha512.run = "43d76c8461a724c48e5e510701032c01a5bfa645734402b0fa0d0766f2d0cb7520f2e3d29d6c3abfe44ec369988445aab9216135f70c43a18fdec152cb4ae92b";
+  sha512.doc = "f9e58f16b30b075b19929a9ad1ac0c47e53b2aea038e34db69dde6d64e1cf3281fda597499dd07aea03b3bb325c06a1c7abbfdca42a80f03fa2a3d272bf52e5b";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"rccol" = {
+  stripPrefix = 0;
+  sha512.run = "0a712f0918b4c0e4cf8cc2a0d442a681c6cd4d00b50478751512ed4588f070566f005717196f694c8d07e79f8ab6a49be6ddbda8db71af65e30cfbbceeab6d2e";
+  sha512.doc = "56c43ee9f49764ce50da6b1b4fd736cfff16a1cf3907fc7189807e5c946f1c25c593ddc1aa22c2ce2e0799f7057efe2df35bfb9aef0fa1c31724110a352fe4cd";
+  sha512.source = "bc0f7ee1a6fec9adf6d8ae77fb174fb0334030fcc504af46bb2cb88516c05b4b9539748b381a029b657f22d7ce6313b0f19471ef85b1064139e6cb7862c726e9";
+  hasRunfiles = true;
+  version = "1.2c";
+};
+"rcs" = {
+  stripPrefix = 0;
+  sha512.run = "4a9d7cbc5c16163a5866bcc3c9fae95d8fc42b27d0d8dd8ceaf32e2b568bf9ac6b710a4124cbd255f1f2d18fbcf66ae020cca58ce6d16c6c5eb6e0a85e288419";
+  sha512.doc = "71430d5e481dac53c3b1d5f86ec589fd855c244c6717f31c16e2fe00507850779fed3ef43db2deb546ec5b99ffe775a10711f1fd59c022f4223a8d3327424cdf";
+  sha512.source = "3c2db69ab4106eac241e9126407e90d8b20cf3e186d50cabcb35041a68c1b670eb3bf9b571d00a52c8e4cd410cdd7cfb38e6bb4558560d46420d1074312910fa";
+  hasRunfiles = true;
+};
+"rcs-multi" = {
+  stripPrefix = 0;
+  sha512.run = "156e3f47b8f4eae8cb959bd561cca2c592a43483cdb99fd04a88593ab5fd585a814b0e3416a835ce8d249969eafe119cd80c9c5364f40a9e595aff2c5f2e6f65";
+  sha512.doc = "2eafcfc5c0297c021ea7f35abfac9526c4a40cd46efb88ee6f41a5c0f5d68586263d3140db73c1f9026cc0fc856a888369b21f5d85679f5eb60dccbe111938d3";
+  sha512.source = "6fda675809ee257aa7f96a3ddcca5e3ec8577bc337c3f303ee6658bebace26ba271a367b116abc32fcb2633bb5c57a442b2e12fc2bf67b8326ffaa46f08f6ed4";
+  hasRunfiles = true;
+  version = "0.1a";
+};
+"rcsinfo" = {
+  stripPrefix = 0;
+  sha512.run = "6070a3f0b434b5339e527161b7c1e18dd21b23a9b57817a2699bc13369bf35110868e38d3e487b7b0b58ddb12699599a6e8ac4314b150ff2c8049ade5124f786";
+  sha512.doc = "c7d149405b9824f7fb9a453386477ee3ebb7e265b29a004eeab687695667a9e8ddd7ca91ffdb4fe7f60716e6c1f2b39004aae82777c58cb60532bb2ace2bc846";
+  sha512.source = "bb38328d3124adb4ca1734912bd0fb15040e7d390d886d3817ed547d08e4f6e5a134db6e4279ab2cf0a5b8d0216afaea475c3dceed7381bbc84adbd63bbf3b82";
+  hasRunfiles = true;
+  version = "1.11";
+};
+"readarray" = {
+  stripPrefix = 0;
+  sha512.run = "34a1a576a560ec5a66fd8b358e9f594e1971124023e9f88e67e5dbf7ff775e3950071c5f4daa004f8e59549f245934e4dd8a82e4a2928bcb1e9fff99f2b3bdd9";
+  sha512.doc = "61bf2960c1a0058a5a64a679b4c17ac0e754f09f2ca1847fcee4cb0b0b9a0dd07e252a534768fcf3b098217afc4c52a8f65120dcf43e69f0907fff9b8638af99";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"realboxes" = {
+  stripPrefix = 0;
+  sha512.run = "944de8b761acc0949ba14c0d506287b64a1cf8efe20fd26dc74930e589f4d0651ffc3f1c4959111091f90d0f869ba18cc9456a5c58dee0a1b4b8ae7c1c6c02a9";
+  sha512.doc = "cd194a9fd0836c8cefc57c26394f7e7f684974c374f787f3ac6d82daba3ac1e9f17aaeae06f26fb9851255bf53bab6290124a1878289651dedec824238e8193e";
+  sha512.source = "4ea18fd3ad7988447d1c2ad993d76dd1f2c4802356885636e80e5157a3892ecc235d9fce90093044dc9415056a986ccd5fe2f8eabdb86bee3eeb27eae5509be8";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"realhats" = {
+  stripPrefix = 0;
+  sha512.run = "1340264b7e44e98c356c2c4b71c5b8ddf6488b221858c1a5668bc55fdef5f976eca954cd62d51bcb097f2a58f719c6f96f6a9cc4791283328ab969813186afa8";
+  sha512.doc = "faf01cf9153647bed3ccd282aa4f8370e763bceb2bd43c547d3ed2b1de77fe2e64c4d720cefbb9bee78416521661eb17eeb496b4548bb7b88c5a45d084765e30";
+  sha512.source = "354c3d88971a7d516ef9d0cbf37c40a28e02fb97e99c59590ab7ce12cf8b70a930ee486fc9fa9c94ce9cc52d2ace8a7a183d22b5ba15bb91dae042253462f86a";
+  hasRunfiles = true;
+  version = "3.0";
+};
+"realscripts" = {
+  stripPrefix = 0;
+  sha512.run = "20301b045034aee5650a976de1341cb0d1629d6d622e75fd3c52aad8f1cd6377d3e1095e75ff0552b9cba887f332205f861c24c4fa453bb9f957f1dfb2aa2968";
+  sha512.doc = "5bfa7a13e824a6d7ade0f81fec6f0c9164035c8a5b512d5a49eb4b47b0b47ec514aa430a34e6cbad463674a180a3119305b5a6525cad824b8f21d4b15b03350d";
+  sha512.source = "71a4e590c2e3b7d6755bb2a65890e75ad2d380f26649600dd4e222ce9045d4a7bac371d37fcde0afd51a09c213f5234ab2e268c45438b49d846f1de12fe21293";
+  hasRunfiles = true;
+  version = "0.3d";
+};
+"rec-thy" = {
+  stripPrefix = 0;
+  sha512.run = "cd3d8c9f6b08e4471fb377586ab928c7173e72162269eeb9856d4fd50a2c89a1e1509bd36356ed0d37d89eeecb22391ca17bc5a214813acd3496d4c669f261cc";
+  sha512.doc = "257746313876d190f62d50dfea03a614c5b6732d79b7f43b7d6c41be54c8827f82c996570c50907641536e1e5ffe172d495e1f3db94d8d1e13fa5f630225337d";
+  hasRunfiles = true;
+  version = "3.01";
+};
+"recipe" = {
+  stripPrefix = 0;
+  sha512.run = "bd6046896b15d362fbe91e92485cabb1100485b5c91d4ac0214aab12e0debdc900d8693e1ca345da0152cfcd400a2f4e7603fc3e8476681127e64313e2f9b954";
+  sha512.doc = "b21b70e757a0d842adfd70f0bad21f46fe9b3242bacf4861de183b833edc950eb2cc06f0d3569a48c8e028283b1526741a309abd8fa9501f9541256bbb357ddb";
+  hasRunfiles = true;
+  version = "0.9";
+};
+"recipebook" = {
+  stripPrefix = 0;
+  sha512.run = "c030f81bac27221f24b275d689fc7cf80bd6d97ccfecb0c5d51876ae825871854d7729e123caef3735a7b2a5608f070ce170709c8a1723b5c740f05371c82154";
+  sha512.doc = "0c9d803360e1ef65b38f5b66c6d3eba6e9c38c371a430e2cca371594935fda16a051d6d1ee33e787114747b9efc36475c6c92b2c8b199aa1a5b48e214f7a4643";
+  hasRunfiles = true;
+};
+"recipecard" = {
+  stripPrefix = 0;
+  sha512.run = "62778e7429aaa8e4bed6546c748a7e135c9edc4909508723e7931284c619d502e9efb0e6fa54c8c1d242858355c6d95bdc87959400c18a5648ef105035ace26f";
+  sha512.doc = "0e62ac28631ee072c9b0b5dfe9995744c381f17b14da5e9c8f4159fb274cf2a7662f0eed8f728ec5990a6a957de051304601acde2d171e696e79284ab2faeff3";
+  sha512.source = "d08838184d5d21107ee796835c95dd446242ea3433819229ab918a30e73a3e042e6f4cc8f75c144ced7a16391841177409567bdf3116632b0915ebe47378943d";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"rectopma" = {
+  stripPrefix = 0;
+  sha512.run = "17a297d7862eeb8c48788e40fd761fd42b37fa7b49b7447e00e828f1a7e0f2e411eee357507d79bfe0441c7feada9e06fb18ee5ce0af87e7aeec7ae618e22d83";
+  sha512.doc = "27ae9a381a685373a980e13b9b5c3f6057f98224a7c9659edc0c056a6292e7289ed9772f3a503e8de3ea93b796f271dafeba57f6e240caaf738003e1ab848e46";
+  hasRunfiles = true;
+};
+"recycle" = {
+  stripPrefix = 0;
+  sha512.run = "3bc28ed41a8205534d34593429429768bdfa64e61cc212017ba4be32f7a985e8d65ab296137cffbb7ad5be4dec90bbfd30d675ab314bb79ec0ea10b277c33d66";
+  sha512.doc = "3bbe68b48915c6fa662fb72072eb9e130613587e86d3d4172766c8fe690a995d23d252cbda9a226a7716c9da8741b3ed0e18eae1cab2f547d08265ee493a64dc";
+  hasRunfiles = true;
+};
+"refcheck" = {
+  stripPrefix = 0;
+  sha512.run = "46dde83ed04d4586eb6a2af393ab925aa7238a30c23f49ea33f0da331e2a5071447c5df22b31c2cd9b10bd37458794fe15e53e0e79f002bbcf95b0471d6a7d02";
+  sha512.doc = "a87b6ab25848571770bc8a7ac1f47e139c7a2abebf36b9c72b65bc66e02c14b23f7b0d2246c7160b7669460f52afd29063449c6659336f01f3e99df53cbb4428";
+  hasRunfiles = true;
+  version = "1.9.1";
+};
+"refenums" = {
+  stripPrefix = 0;
+  sha512.run = "7113ba67dcaf3ca2a070e42b4fa9660889bdf7803401cc0f8c3f9f62c59e467d9f637c526712bf9aa9fc7ac3df3c550a41f419de9cff375e24e68d102207e8af";
+  sha512.doc = "3511419e6507d2c5a7b48679e9220e63643b38f803e8a5d7046a55ea6b6f4827fdfabb74336fe61ba35628868a7f042ad472567e73351d13ab9568c508468a97";
+  hasRunfiles = true;
+  version = "1.1.2";
+};
+"reflectgraphics" = {
+  stripPrefix = 0;
+  sha512.run = "ad670c699d958eaf103db1ae65d79bad78dbb0677c7464144739fd67b63dc5acd3c298f81c81f258de477fe9f2d4a4177de887ce1c031ac9c701662167c1a5d6";
+  sha512.doc = "78717728d537cf0dacaee67151cd7f19fef6fa031a856ac49a58bb576337690df4323c80e1ff0f318a4eda3689fbdbc2aa5a3bbcef69b957fc4615ff825e1e0a";
+  sha512.source = "f228c9e8dedcd7d261269c896b0ef1ebeb7efc18a0137fcd64765ec92b957eb634d8e0e2d4f6aceebf1760e65936c6bb1a7b706c852e6c220282448830b7f672";
+  hasRunfiles = true;
+  version = "0.2c";
+};
+"refman" = {
+  stripPrefix = 0;
+  sha512.run = "45f51a654703a7e749e7dbb08fd0ccedc86b5f264ce08b504ed11827799202583f81a4f3fe32dae0794e20cefe2e6bbd0ff8563955c3a85eac2642c307aaf332";
+  sha512.doc = "560d70322bcedfd0ca6a10c161d3930d389e77fef25ed568f5a68ec87eaa63efd4f7dd2363bab283af00a49719c3c8ba38e8a35ca011ea349dd854a0698ec79f";
+  sha512.source = "722e2493c24738bf767b271183eb1422ab103b84dec17d28f615a52d9b35e1671d3745fc5a6fc97b2a9d7934f314fbc7dba9734af8e0c802cc6760940112230c";
+  hasRunfiles = true;
+  version = "2.0e";
+};
+"refstyle" = {
+  stripPrefix = 0;
+  sha512.run = "15ab0ac1b41608ed2453bf1de27515aaeabd0b06a3e44fa3ced6b67f5e79cf237e92112848622303df2e174ae1e60b77ff31583837f3b12a447f8c4509891cbc";
+  sha512.doc = "9edca88347914ef7810c3b1639cb85f598963404620a99f81f5bd56d45b684e55bf179ba46a5a49953a88151251ec084fe6126fa3ce83d2635450bad25e07059";
+  sha512.source = "9052f56bd87d9ecfb2bd09a3de7f1740837d1e0fea17eb2ff11c1bddc11ad2cdf3d9287167df61f0ebf1eeb4bdf7eed3b5a19b748ee8e560a7695e0418291a6f";
+  hasRunfiles = true;
+  version = "0.5";
+};
+"regcount" = {
+  stripPrefix = 0;
+  sha512.run = "6481e37b45ec26aa270637b465d9fabef010c6717c0a402f0bc2afaf5dfcd877e46fd8699ff8fa39d80218e6f319e09acec1417a47fedefe6da5d90a81b2928d";
+  sha512.doc = "19215d4d4e22777b236f4226d82cebb1d0f8ced841cb33a4b275f0cb558c3addd4a1fd76d3aae9cac5e275695e197574145649be5f767372bd1bff13ec76cbb7";
+  sha512.source = "4b152aa79080914fa59e2b8a3103fea930ad3a0ab8959c570eba06ba36596d82ba58d03a4404cac9b2ebe3d073ca0eaff856a892b3d1e84d183a9ed60f32e42a";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"regexpatch" = {
+  stripPrefix = 0;
+  sha512.run = "ef1f12a2480834e447110945e685cea36a5e72abb462106bdc42b086cbbf0d0f9857429d1c5ec243eaba74ee39ce8af29a758f8741a6a7dae05f376786971ea4";
+  sha512.doc = "6c6ee8769f2a602c4afa9e043daeb5151db1d5aa92732201f0d3c36d07cc754a9dcc09a15fb2cfe69527aa80633b26cc522bff0b696d774db933b6dd0c916369";
+  sha512.source = "596024cf733d8a0e51d632ed2b1c9d7ef7594636a46be04b80dcb6fcb6b5b4cb45c8e0fcaf8b6ad5c1dbffb2206eec8ef6c2eb20a2af59258edb72983169ecfd";
+  hasRunfiles = true;
+  version = "0.2d";
+};
+"register" = {
+  stripPrefix = 0;
+  sha512.run = "049cdd2039a37857bde1ef3f7296da1b6e95a62f366e43b508db8ef70e6afca7a763632078a5379c620692febd49df3afe4049d8c97971fdddd37afd8e357515";
+  sha512.doc = "fe09f70f908d9b96ad961bbb6c44731572eec871f3adde68dd5b0a094ce932ed15e8bca7982997f17e771d202d9bee6d397f1c4c6823022faf53baa47e40dcb0";
+  sha512.source = "631a77363ec20f7cf849fbf17604870bf7868ac3d4a89768b7ae72abef34f2862502ab51bcce7b164fa497f5922a29755ac4e1a2d3ee2d7471a28be9bfdad89a";
+  hasRunfiles = true;
+  version = "1.9";
+};
+"regstats" = {
+  stripPrefix = 0;
+  sha512.run = "95e68cf4ea4cbb34801a7412ef1ce87fd75d017681e43ccb86e56ff47494aaf95e3cdccb4f0c2ea6a276d99960df881857d9a138368fa6cd37d7f38554ad84dc";
+  sha512.doc = "1883f17190f3b24414dc8ef7f874cb50d682b5dcdf45f8bf95fd15b3347996de37a7839b727da4cdc9e39869ee1def31ed1b2be02e48bc68a81c0d2f8aef8be2";
+  sha512.source = "4e7392bd85860ae971fcd06025f5753d7f2c815cb216d6a53eba1504c4f9de7fee9826807149826ee69c6776f17a0f0f537ffe7ad1be04597ce221d5cd8f7ff4";
+  hasRunfiles = true;
+  version = "1.0h";
+};
+"reledmac" = {
+  stripPrefix = 0;
+  sha512.run = "0407a52e981e13a710bf898ada7a0217e76b87f922326c61cb914f3e309ebfb064417315cee2c66bcbdc17c13812871f42454edf64de63e39456a61108ae4c3e";
+  sha512.doc = "3dbdfac8f7dd936b7685003246106c80d02655ea76a08b4a3acb8acebc9b7ef9bb70d28544fc74456e057276139b7f9e19e291f7d8d73d76a4880b981f8dd890";
+  sha512.source = "eb9b558d7182c4c41bd74e00c6648ba593bd7887ef25878b24f7108111d7f28ecbf81589d1f2539393bba6e9ef9c8878bdee7da29c51a1d86bd3db29ff4200a6";
+  hasRunfiles = true;
+  version = "2.32.1";
+};
+"relenc" = {
+  stripPrefix = 0;
+  sha512.run = "d638db869698a6b564f1482c3ffbda561bac0da00e008b5b3ddcbe267587813042bd3d578ea871f5ef48a27309baf8e290413b65f99daa26ba7a8b2a1dc62050";
+  sha512.doc = "b5e81a7edf8e7d0c3be9ea46ffb2a43af5d58153ee91d656faba600d4082a8982706744ba1991c82ce8c119fd12fcc0eaee30353135338154b0445e48f33472f";
+  sha512.source = "ef1a5c1034dfac3ed942354fad6a9e4cca44a33d2252120fe824bb41280453a6c8e00c259331e4159206f60e5043664bb4008e758d8b81dff06c7d68c3382e6a";
+  hasRunfiles = true;
+};
+"relsize" = {
+  stripPrefix = 0;
+  sha512.run = "90a4829b63d86214c44cadab6b9c9c114d6abfbd72dd4cd8bddb18add9b7fede2867f39d57b03ac9e7762950db71664767554b515b5409cc873d8b31aebb2c1c";
+  sha512.doc = "45b6e38a14c31d7387a99d78c395fd0cdab5ee8bbbe72f840d511d14f6af73f749649b48977e8a995c2ee375358677b31a97646c8162c5fe2ee6c286a05a20b8";
+  hasRunfiles = true;
+  version = "4.1";
+};
+"reotex" = {
+  stripPrefix = 0;
+  sha512.run = "e97663d414291b3d0a009143ea370676bdc69b1897492ef86bd2092e47fcead566151f175676b4a19e196054ecd4a41706a74e9d4e6ba353d9e346786d04a2d9";
+  sha512.doc = "fbdfd00526129921896db36234343d991bba29b68adfdd06d9fce262a58b2cc544dbe49d28cb9722eff1fd03ba3a765e38368baeddff18e36bde436c56ce538d";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"repeatindex" = {
+  stripPrefix = 0;
+  sha512.run = "f700f201ff05d25fafde3eafd63ddb5aeba81dfe8be0dc4522a08459f35b3ab78cd06d215477ef5bd59c1dd6d1a05361ddfdc21159f3b6347f5a8271c4193192";
+  sha512.doc = "031a5113799f662b88b2275f2f82467e2fd84ae58d18f4cb69e090aad7f2c8cb44eefc4c43f3fcda9e92de0c0027fd4ecaf9f152d33b73ebb69f06e6b4c8c1ae";
+  hasRunfiles = true;
+  version = "0.01";
+};
+"repere" = {
+  stripPrefix = 0;
+  sha512.run = "4bcfbea44ee34209ce95d6a64de3973eed864ac0e2453ab0afd8e1e05faa2d97fd8d90e90f4d2e1c8f1eb337321cba8c10b03975e1cd75aa32ec5c7373d54316";
+  sha512.doc = "8a68f168573fa33ea635578aeeeb51060c3eae9f09ddd7dae1d49aca6de2a8eab7c857336eee1c17e2d4e1a7bb5f2440cd1901bf9aa61961966f727827cab38f";
+  hasRunfiles = true;
+  version = "19.06";
+};
+"repltext" = {
+  stripPrefix = 0;
+  sha512.run = "32d4e90befc06db973de384855c174ea0ed9ae938a9ea280118d82387fbcbdeeab8fd1143a96c9afb2b904766e5fc43c0d4eec93d763b3e0e730ac06f6883c9b";
+  sha512.doc = "ead39615e96c4247be7072dc4fd715288ee1c8cddeb4cf88c5ea79a6659808936fa6eaba3dced3efeb6802e58bef4632604e92d1f00c29b8f0bb3a241d56559f";
+  sha512.source = "f01bb1d0ac9a4ae0303770faf083c447d3d800b43848d11560f67ed43c50f09e742e27683e911395b9ee7d29bf962f4b3b6791d3d25fac630d57c967bd14db4c";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"resphilosophica" = {
+  stripPrefix = 0;
+  sha512.run = "0ed9a50305132206585f322ba68fb514e0a4d566fc703a617cc6eda1de23b53820ee45231167f8b81aac826de732763e3c141a9ab65d13fac5d76e92d2101cde";
+  sha512.doc = "30739549cd7295186c10a54232e4ed57d6c2a589acf6f27ee758a40880e7a4178375835662b88bd78bd50ed0f695c71650003ae5ea78c63f5dcbefa15c5dd770";
+  sha512.source = "cfbaa18ff43da9287755c0cb3f218a57f034862ff9a63b3b77bc51e8171afc7c4042ee567230e7d1c263d7f993976bf4c2f3bfc055f0dd759b034d6d42d6df78";
+  hasRunfiles = true;
+  version = "1.35";
+};
+"resumecls" = {
+  stripPrefix = 0;
+  sha512.run = "b7709500024b7badee75ef912158b368e9e3d01a6051b75ab0fbc4e5c90c6bee36226096a29891a32e1ef6dcb87a10e23b4fa1531c34caa48443c22726b07c81";
+  sha512.doc = "a99f08f236cbcb321a106acc6b768aaa0aa10a7d101dc635dbadd161e1681531950cbc161553cda82f2edcf0cf94af7b89f5d53d504c049181c3f63a0d0ce527";
+  sha512.source = "071e7d3d835313f0ca38d90f632d8c83583fd552de2b612cabe0f4c6bec097c944a1cb18f316d74cabf6ec0a0d4d3e890f2adb1904ca01af939cb97470430a77";
+  hasRunfiles = true;
+  version = "0.3.2";
+};
+"resumemac" = {
+  stripPrefix = 0;
+  sha512.run = "f944441058cbe8468ed6646dcb10e09cbac78d5c7408c2a81f2531491739034e47da9fe8f45583008892740a57a2d36bbd1417f05f8d998bd79f886bfbad87bc";
+  sha512.doc = "5b89a7684cbe4da1c653d4a6253f82304b7b3634a9dc973e5f7da41967bdb034597e64a4fd82a922fac5ca62ee40e2ce35be6234deceb25000ff9103859e165b";
+  hasRunfiles = true;
+};
+"returntogrid" = {
+  stripPrefix = 0;
+  sha512.run = "751eddac662b8ca6d61edde7a25b11c357c497743aa0edff92be2a672fa13e4a92e6aaf40a8ed69853db642d656c3f54ad0af6cb35c94fe59cd540fa19f7b964";
+  sha512.doc = "6f5eb1997e25ceaa7a8956ced78c584058cb8f9fc112f98c350ff996826188f9b7748b7bedc6c19ec0912894500a4743dc7542532317016ef3d295563c450889";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"reverxii" = {
+  stripPrefix = 0;
+  sha512.run = "fa6efb9655cda15356163a93ca89f2b6a114ea5bdc151774bc99910fabd3306781319f92a5b5728f29df136c73f994f49011e31ea9c1c01b4ef2fed10af10a93";
+  sha512.doc = "ff6b03b426de5508eb31fa5b2fe615fd5b7f0a6721e949bb48e1954c28cb547faa079461c0b1f885163bcba40c7f7d2a3fdc7dfb3946c08c308f5c37d33605a2";
+};
+"revquantum" = {
+  stripPrefix = 0;
+  sha512.run = "0e69ce3a2a4a1c289d494e081cd28e9c14c84a45717880e92292cc94803783a350bbe33426c4f5e7ebf64e5b28876e656ab2f1ce681b86c27c7a3c6700563a41";
+  sha512.doc = "16b8ff06bbc2155a853a26a0b622e3f89bb7d35439945948128fb37d342d293951526d415a3da9a01381f841dd61287317e52dddda8e8fa6e0eaa5d6a0006dc2";
+  sha512.source = "47e7a900aaa9198875acb1a0727bd30b64c0d41e9c33cd6240c29b8d67b17960f1ff05f717701385f627e6827881d365c01ed68b1adea8bd3e1b5423700f9bc6";
+  hasRunfiles = true;
+  version = "0.11";
+};
+"revtex" = {
+  stripPrefix = 0;
+  sha512.run = "c3303edee2d0d7f160381ce91c4018023d70fca88c215d5ed9d46abcdb71eb79ec5a06a899575748dd9d2572323cf80f0ddde75b9c7ab72deca5fb9bf396e0dc";
+  sha512.doc = "ebf8f55ef5775b38cde9199e6c604e71400608e6a06bc59482fd017be8d5be68ed08e21ee87a11eaaf59e09af0f89fd7be1f6334fb67e3ca1914ef2c5e382e8d";
+  sha512.source = "544482b0bb2b9a0f8d0d520cd22c3030bd2efaa88bea1e4f2ff032dd3fccb440766503c7d1a2b467c5de1386509e319235794659683c2248987b743c5d53f3ac";
+  hasRunfiles = true;
+  version = "4.2c";
+};
+"revtex4" = {
+  stripPrefix = 0;
+  sha512.run = "7b4902efc551bb4224304adc3553a229393bcfbbf8c052b6e3d4e0f800ac3bb2f2f838f3e77144aa1693fd09f06c7a05c22d7ab0de9de382c53829891fb0f44d";
+  sha512.doc = "d0757cce30acb2703a78310d1a9d27c7d28f5c697c3e70e5df9b2cc63ea122604b618615fa07da586cf8f78ec04b5eb9fb129a59a9504c6cec5acc07d05cf1ec";
+  sha512.source = "ac0cef14df3a8398ea96a0fa3d947f550305a45928ed539a6760e5d8812f8a4c69f94352c36bf86584ede364220fc1129ffd54281fc98c62f01fe51d23448fd5";
+  hasRunfiles = true;
+  version = "4.0";
+};
+"rgltxdoc" = {
+  stripPrefix = 0;
+  sha512.run = "dce35e42e8a81cef5f31db1beddcae93b7c02a8baf3563e21a95d5f3a13daca83368c432702e7836dc9ed8cac2e55e0276062a643ced3b41ac85db9280e74d99";
+  sha512.doc = "c194c7464e2e3689309aa54a4a26d5bdc30f0b865448b1b3e51b8cc7288a91ae2d40914de3064d766e7142c0c319ad389a166711cef2d9758ff2309b7a86fb36";
+  sha512.source = "8df979de9f4ac297ee94d7fc3758e9c7e2430ee8ed6206012a55f15a57c4c683c65dc186b835fd7a1864a5437c41875b0aea136b00d5808f5c4d10641824a7c7";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"ribbonproofs" = {
+  stripPrefix = 0;
+  sha512.run = "88d1ea87819bef7f8e70e0df273315981c28ffdbc00247431afb8b92959aa2e0a3e489b01f7571d30ffaf3606d240f25bee6487fc704f39417146a93403bcb3b";
+  sha512.doc = "d0efb33c19d632253384182b562cf0e0aa10be81ce2336992c83ca7d25abce37c44b152cc8e928cdac90709cb99a4a5caf3ce8a631b13762aee7b39ad92da3a2";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"rjlparshap" = {
+  stripPrefix = 0;
+  sha512.run = "9a7f5f821635f110d9bad0015d9fdf489f836cc6ec0c101f63a3bf5bf9235d7446dad98db1325b0720bab85d68432f4cbdbc6dfc78456329a8c48b47d9212abb";
+  sha512.doc = "73987b63cd565766586dff08144bb9cfab13b7251053d5f008ccb7dd3091ec9d3bbe8ed92fd8e7dddce93afd13a649e68826468b87947a036a054fea76225921";
+  sha512.source = "37af8ef7c124fc331a4156b177578aed29b99777a0270ef819b896e5f6dac9b694c3a05ea439cdc21533a405bd052e071036682b0846905c09ce95c32a986dff";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"rlepsf" = {
+  stripPrefix = 0;
+  sha512.run = "198037c1fd20eaa28b727054607241b7ada10c9dbf4d48cd36f295a8b51a7d4f94859d2349d3d4e831a74e0da025ccaaf91fb53a3074a704f7a3216bb7df0cf1";
+  sha512.doc = "fc06c857011fe01b07180c9530a334e021f5b9c034c65e15959e173a409670947c7aa406bf751d64d5d77d462139f4835824aa53203381d27d4ecb0e51463e7f";
+  hasRunfiles = true;
+};
+"rmathbr" = {
+  stripPrefix = 0;
+  sha512.run = "71ad547496a4159f2ac609bd695bd3a38879dad118cc18bc58d8fc4c5a8da3d77abc609a0638584495dbb77bdf2078a30ac82f2534bfdf5b620d056b20aa7a8b";
+  sha512.doc = "ab1b89d94e5fe92023ccfad1264aa38dac9be485d2717b4afb82a441e6bd8eb5813892c20c33a65741f62e6a8c4bbd3e3c778fe86f7d0da72080d51476f49a38";
+  sha512.source = "255ef1cae8a42e34e11e1cc4b8599afe1f166208bef00372d89ab34baa55d3fcba298e01bc2d639568135c66e77e7fe62e558a6e3ba38485dde387ad76e0da4c";
+  hasRunfiles = true;
+  version = "1.0.3";
+};
+"rmpage" = {
+  stripPrefix = 0;
+  sha512.run = "d1627cfdf5ad3f23d03d4d06a4fa039e2ec7ca924245bbda7333b90a7cab8d1e22937cf23968eda45a2c3ff60dcae8a99e2223f9e235485a30ae68c4db7f901e";
+  sha512.doc = "25fdd83906edeb10e5493bdb00d05469dbf323bb7bd3df587a5f6dec5af17ca844f27cff4eaca3eaa6b75928cde8a633f59b2029b60f03220d847222f589ddef";
+  hasRunfiles = true;
+  version = "0.92";
+};
+"roboto" = {
+  stripPrefix = 0;
+  sha512.run = "1ee9e9e27e7ef6eb62d01849a9454a77830827b472cc492169660a02ec2e23fa88466462b3b4b568add687cad8c5cd0db59e71496d897cc9ad64a0167b0b6fd6";
+  sha512.doc = "45e5dff1445759080e9d62c8298fc333614fb2b0b6d8717bb05f522f1ce9593758832f27a99f0b778dd8da3c77c6c0367ca401f1976c91fe9afbfbafebd7459b";
+  hasRunfiles = true;
+};
+"robustcommand" = {
+  stripPrefix = 0;
+  sha512.run = "806f997cf6c0eceec0c8d9b8f8207014c4ab9243f8007fc688674af2fd778455a787b9cf998262fb7d0a92ba8e2ffb597d61950c22a6122ad957a62ea54d9a42";
+  sha512.doc = "4d5c8a994edf816d39af12d7881793f0fda0223a3545559255674fa5a08f2d0fc9ad8ea2779b3c8bfe476966045f996b8b8f5da6fdd028188d28ae724c24a222";
+  sha512.source = "3dfb71a6a73f2ed968777eb1074d65773aaee7c1218b18fddd78e74a86f27d9cbf5fce79c41503c34e497b12543ec2e0c16d9f35d39b893e208a236fd66f4f50";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"robustindex" = {
+  stripPrefix = 0;
+  sha512.run = "3aeac1a43261302532d7b5ee309d6cd94f54a2b17954c023bc6a94fa89c51291f3c4fd3276b03aa3ec65f4e21556d302c81aec107fac5dcb477941cb474dbbf3";
+  sha512.doc = "aab461e990176e1d0cb82573edcfe11a4bf668b2d09edff05f673fa20d24ec76464495bebc64086fe3bb4411d5ec9590f43cd57949bedaa3366f6c7313359f56";
+  hasRunfiles = true;
+};
+"roex" = {
+  stripPrefix = 0;
+  sha512.run = "7df2224f9970b72cfa1474898c057799fe42d717876eed864f35aab113d01dfb483edb71f7f4a0a98b6762bbc309ce6fb51e41dc222a6f19be2025f6448fb1cd";
+  sha512.source = "d89d02dd79142344334678f2d8ec4f34eb825532e8be9260cd08a43b28e1aa94ff5655c1c1eadb2f9a365e51693f6195a4851e1420072c867d8b2c0f1cbcbbb4";
+  hasRunfiles = true;
+};
+"romanbar" = {
+  stripPrefix = 0;
+  sha512.run = "205ed0508765e58397953f28e6a1172d8684f8063fbaaf4d741f4f092e1f652879b414a3225c87bac01e4d41f01c2b0a44632e0cb3088c5c174fdbe42cf25272";
+  sha512.doc = "a5fc8c5d6e6a584de4394c59f9bacddc23fbec8d4639a0476cc0814404f1413774fa2d6bae3d8438cad2eeaacb56405680c0c6bcc152a5e4155ecb73de72f07b";
+  sha512.source = "9a96ef043dc3542251fab1dc299742b5c322518c61de8d365c290926f2365e5bd6b80a57fcaee19a30ad504ab51b2dcf71170303ab92eac97fe3db4a76dce08c";
+  hasRunfiles = true;
+  version = "1.0f";
+};
+"romanbarpagenumber" = {
+  stripPrefix = 0;
+  sha512.run = "7c8fbfcd5e9ec9e306e7ac836fb4c82db3bc42179bf77502b5299c17c4d3ad515b9397016d600011eb24c5d9f2eda23a485634c5aca3a765653cce32d7bf82c5";
+  sha512.doc = "a46bbeef023b74c576da84f9791d4d6d47a08091b43c6bf6936c4e17ff54ab2bf5b517cbf1d07e59c077e0981ac989570265df1fde7237ff24727e33d6f1b71c";
+  sha512.source = "953af4fff1fe7e6b3e4bfb7447a0da7207f93d7377ce365bfdf563c9dead97860826c8f5b8dc491164437523e27a040fee5b95b58f09f248166268197233f89c";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"romande" = {
+  stripPrefix = 0;
+  sha512.run = "874883eb3592852dd6dfe2dc675a768bed8db80c0c617cad7c28bbefb2ca111adb410a584f75fad935bfec330765650ea9d0f73c8c5a9fe567526b5fb46ff17e";
+  sha512.doc = "708ffe5a4dccf8241eaee7d22787e0e30bbd10faa1cfd538836da676cbd4f67b16a80772f8a4cea08f59af6d41a697426c4a4254c481d13ac3a10157b2a679e0";
+  sha512.source = "040b154c19ee55910b05d0bfe355bbf000403fcc5c536a081e4569390c599123d64000680cb847ad710204d1c33d7ceb0ab7ea049847ff4ad0762fd9c0acfeeb";
+  hasRunfiles = true;
+  version = "1.008-v7-sc";
+};
+"romanneg" = {
+  stripPrefix = 0;
+  sha512.run = "4195303ca32b46d722bb148ce4079bbea7cec08fc74a7b0cb6232dcce517b7b5a10753be22fbaab62ec11d894955e1368f3a6dc2a2474cf9b9450e035bb73c11";
+  sha512.doc = "cd583b94911ed57e6c61689d437fb4a55a868813fad5791dfa7231b4cbd8b7d22cf4e6f3fe90e2cd36eb08202f4058abf93b5df2d74e1841070378dc9c31db64";
+  hasRunfiles = true;
+};
+"romannum" = {
+  stripPrefix = 0;
+  sha512.run = "06fb28ffcf6c8212ba3bea5e3fd93fe4a5394ce1cd3977556bdebb982888c2c0f7e45dc751f94b1ecf921c701fe6783166e73a595d5da55e874359b7a4065182";
+  sha512.doc = "60caceb87b6d866c905685cd180f0deb73f400b33007e0589e1aa5a0b42ed948d88c672a620ebdd4d78bbf92aa81c1094e4d4d6afcb981747e65596711e112be";
+  sha512.source = "dd1a19bdb63aad8f3c3458bc000933b9c0d04a3b331c37d84a9e7de4a7027b6cbed113038129a789f43d1049dd72acc432e6cebbce365277026d5e6b5cde328b";
+  hasRunfiles = true;
+  version = "1.0b";
+};
+"rosario" = {
+  stripPrefix = 0;
+  sha512.run = "e1e200c49ba98fb1d2bd5cd927ff209a1f72b9681b1cf3b49baa263985790f7d4854ac1cd9fedd464e2076488b3042456c7fede5648dd8ef23d1ba6701705437";
+  sha512.doc = "1e5a12a62b7e62587b452d0f8926757b987e83a2980698deb94c6955cff1e45ef634ec8ac1c1051f6567db8a3de9fe8d4df23a5f80317ddfd2ba863ef15935c1";
+  sha512.source = "4c7613a697439feba9e52ebe40dcbf738370f3ad5278ef0232f0e0e13ba9ac2c46d60233c8159c626b97b53af5238f75c096106b0b8529423d5fa3feaaf57a87";
+  hasRunfiles = true;
+  version = "2.1";
+};
+"rotfloat" = {
+  stripPrefix = 0;
+  sha512.run = "2976812ba6d6bdb304d56c9f10f08c02aa8acceeeef6eb05ccd0ac7b3e3b86984794017627d8f939994ea0228bef5e9d6cab0b08843e87a840ee5c2390dd0bb7";
+  sha512.doc = "020e080e047f20db45bf83ff32c267f5a10b7790adb64495d09ebb3795a55d953154b8afedcfa0214a77f11c35287b18949b8f1fb89b6ee51aac12a04832e922";
+  sha512.source = "b3b986dc11e30b68f75bfa371c85eded713f759f6fa0229857cc05172edd70caafd9124098813cdafd1f060fe57a6667326ee84445fade50bb6acf9d1cb6a95f";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"rotpages" = {
+  stripPrefix = 0;
+  sha512.run = "a206e4147a68ad0ae750e18ee6a360d6ed2ac91785b75f8fecda4b63db695a36a9602da8dbec1310feed4072f952dc49f4d2c5d2817fe74477759aa55246177f";
+  sha512.doc = "2723d32029abfc773de8f26a1f08cb3535c5878f63effcb94fcc6a2f98f1a0f9ff3c53df8a4d9c1ce1f99b52b9fd7b2f5c919dd9cc915ea8266835aa85ddbda2";
+  hasRunfiles = true;
+  version = "3.0";
+};
+"roundbox" = {
+  stripPrefix = 0;
+  sha512.run = "078938229ca1ccba4c26f97eae59376afcee469629a7e8704d6e376d5bb256e8991ee1cff17f24e362772b78ed800b57bc6018b10e897daa73c142fafa1f62c7";
+  sha512.doc = "cf0f56e42a82d6ab36fe6af2ba690024cb555192780c04ef1a01e71fd6cdfb803b0129aa95e304de4fc8c1e2d1015b14dbb6631d9773bdf463fa52c22209501f";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"roundrect" = {
+  stripPrefix = 0;
+  sha512.run = "01cdc4c8443c50a91dd408c52122e8ae65257344176227a508cb082f92d61bc02756d47e27f75d7862d3c87c26add2003604956ad00b448f63b4f6417c520ba6";
+  sha512.doc = "35289692327bdc68acbd442588fbd37185f9e00e3e4ca78fe500474c53ef96542042cebd18cba7720bdca0b72f19384fd3b8afcf45447644bb3c560a1385595f";
+  sha512.source = "9866ae92b2c5f8c446ebca5c7afcdf3e8b52f12504b7d74c5ac4faa570a98ab6775c3ba5ad99d4300c1f9b7f92ffa423d5c73991ad47951a4e2bee3eb3bfe473";
+  hasRunfiles = true;
+  version = "2.2";
+};
+"rrgtrees" = {
+  stripPrefix = 0;
+  sha512.run = "cf80b48866e36b983527f0646c94fc9776ea799ac475a2c5879a4dcb3b3b0d052e061f871b6eb0a8c0fb1153c0a9f6f0ccfcfb1c6b8f3ff4839c3d454ea3e62c";
+  sha512.doc = "71992711c27e741403c5f7cc268e8597e2ea17abe42d953bf0c3caf255c0a8673f6210bb808fc70b741c694778f7cc7a45435afe39939b1377951e8e2343d73e";
+  sha512.source = "8ef5cf9dd617b1f37c57cb70e2aa7b3706d171eaca5e5498fbb3f653f409667a058254fd618681dc2af701d1d9e544d97ebb65c24081ecf1e40cd81f442183af";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"rsc" = {
+  stripPrefix = 0;
+  sha512.run = "abd1d24110722545b93cc16ff35b70c87f467193a33e8da2a04eaff354d89782911e42a46da5d380b9406f923c6fc48d38950d7346cfc799abc0660efa23db8b";
+  sha512.doc = "8569a90d7f5c532e366901d8bd2bab3d5a32d5b6d1c4cedcf179d1ae96a6c34ef5d294392f93fed589a55baf3ffddee2cd35a67c2aa8fc7e0477b47ce92eb411";
+  sha512.source = "b3f097f76dcd1288a70d7aec88d7ae9fc58bb4b3f3a2589944c379aba887b3e7e6c2fd6b74b2a70de58e8cb078edc0d6ac0b1997078d0c322aca9928ba033202";
+  hasRunfiles = true;
+  version = "3.1f";
+};
+"rsfs" = {
+  stripPrefix = 0;
+  sha512.run = "f5d52f49ead227b058841bb88571ae0d6fb40b95dd652536887acf13c0a5dc5b61e3813faaef2effc26539125c2776e113937a1612e7bc7146e7d5517b02aeb6";
+  sha512.doc = "2d23715b38d90c686d7edae77f2a774041d3b679035e0399b7b6089f9b17db3ea4c6c3cdd655bb6e5f3a3cae782e30984c1fe89f5f263a0cd86b441c5376848a";
+  hasRunfiles = true;
+};
+"rsfso" = {
+  stripPrefix = 0;
+  sha512.run = "ce6e600f2fd5ce1aba31092c43401feeadc7927d22ab630f0fb28f421bdea858fb9e382f4d0e36036f6f4ecbd1232265216c29b2edcd44583df6fb3340ce468d";
+  sha512.doc = "ff045c68d70079df6d2b21368fe599beb9ac1ba0e339a8c448bd75565774c237520f79fd0e3d119209765eef29f5891dabf689c7756791a91bb7c7ea1d3dcf3e";
+  hasRunfiles = true;
+  version = "1.02";
+};
+"rterface" = {
+  stripPrefix = 0;
+  sha512.run = "3c3cd754ab17d03d50c35ec9824b76b9d4528276fe2b5a882d35df5537ca12f83956b2c596a269f9961f243bbd5e8c394c6f1bd508d07cecae50fa47bf05fd86";
+  sha512.doc = "c8c38026ce2bf2a996ba40062fe3bce797b381633e4aac50ec438bc9fb567f73ad1c4e764af3cdc816e62713d4f1dd8bf2ab1814b50d086811359e999103c7bf";
+  hasRunfiles = true;
+};
+"rtkinenc" = {
+  stripPrefix = 0;
+  sha512.run = "a1f31a946838123b65124fc7220e77283cf89105ae439f1e851abfc3c30b6a6b7c83bebf676fe47de1dfa9668cfd22c638567ef9a097aa97dacef1f0e3ba1eb7";
+  sha512.doc = "f3e7b1e7c95af7bf89b58ac949ab5b3fc12d991a436e28196f748ae033c46446a0cb885943777f44af1fe5ad4aa579e0fc43676c44812b01cc64d85e4ae15e4d";
+  sha512.source = "9078c15d4c1531b9ca0b0ea6a2561815538de45dc33a9f8cd8f886cb7ced93a9fdf8296f409516480fb58861b599692982b503bd49568548b4d34743c44ca037";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"rtklage" = {
+  stripPrefix = 0;
+  sha512.run = "6e39e34a7c293f503949da66f1d5ebc65ae0388dc56e87992e9fc4daff1a250196afe68150be14ee2ec3242393ce9e5ea7b681cba31b7ed1c2d58526f6506554";
+  sha512.doc = "550c21bcd8af04041f1fac11f2be3ae2a1f01265ad6bf31243569820c7b8d83f32ccd0cdbcc4d5a7a5905ae9aa0512a449a1b2d6923affceb344152e6c12d72d";
+  hasRunfiles = true;
+};
+"rubik" = {
+  sha512.run = "67931287ea126947b5b2d567ba355d44ce094b2b527288ce32329de4a73434be9a43cd520e6c24ef570a46a16c0edcf12212f46228ee1bcd2b8a8be7f9db3a7c";
+  sha512.doc = "33d5c8210600cb4ce7b1313d1046f6644f0a6648f7ee9676d4d628d042f6501b5e92f2b56a31fbad6f637dc93a460a568be9e1335bd52bcea825f5772b2a9d51";
+  sha512.source = "3159acbc71a007877c046f6c075bf271e031feb00cda04c1818e4490396c3fb0651f160c7a98d8d3391efccae6a5b1dfde2155c6bde1c463e1c7416107b4ab90";
+  hasRunfiles = true;
+  version = "5.0";
+};
+"ruhyphen" = {
+  stripPrefix = 0;
+  sha512.run = "d681972cad53b86167f4800f78b5d25de305d2f3f604e6b41b481c432bb9f09a964720fed5b5052cb8a30148da1bdc76306d8edb2139018d83c331d3439de958";
+  sha512.source = "df587bb8c81e73f70a93146d6c3a50c2a66b16084e8eab0b01e0aefb3ce073c6b6e812cfd8c5a1520f98ca58e2e2e0634877ca2987742eccc4d7340a7d62e23b";
+  hasRunfiles = true;
+  version = "1.6";
+};
+"rulerbox" = {
+  stripPrefix = 0;
+  sha512.run = "197588dd36056d6b6e9f7772205cc44e81734cf63dfc83a7c987209df0c2b47f91f460d322df05f123768f3d10d9af8bcdda6619da394fdaf3367be88821a135";
+  sha512.doc = "b4de5828d5602845217726ded4d56ce6f4008a599bb1ddba89745ab39bfc2ba9ed3fcd1f636cff4743252a975a18ba07925f1e78f81fc8cc2ded80a7cf8b74b2";
+  hasRunfiles = true;
+  version = "1.01";
+};
+"rulercompass" = {
+  stripPrefix = 0;
+  sha512.run = "8f2e8d9a4d61c3c79e3ef29ae554db2696b9c374fe10f59fe2a4baea33c679a0678a95c30ea1d4310662bb5af6a1b02d88db7bb43610545b1ffb39fba19b5001";
+  sha512.doc = "6077a3c137269e5be37b62879c394d800f4bc80cacd1d9600b2aa81503958e2fa29f0364db58c1418bc206db916f84f46cbcf70d0f30a9276a6e78d154150425";
+  sha512.source = "75765738f4d3b635468d8e1ebda805e0fc6e2bd3eccfbcc1594fcce89908834572aeec85fea189368d02d05ba1fff6d0e2bb454ad25bce2b92a45cffd74a979c";
+  hasRunfiles = true;
+  version = "1";
+};
+"russ" = {
+  stripPrefix = 0;
+  sha512.run = "11bceea67aae767037d728ab7892eedab312e9477f1f9f7501f9702fca4ceea4e21bd575b1589fb545abdbdc5f5f5315243f77adb4c9b9a2507fb255481c5541";
+  sha512.doc = "876cba326071d0f347d9a1a4c1eca692ca743729b9604a51bb5b53de96da6006ff24168040e77df60b1999cb22901b7318669c32378a869081956dde40974802";
+  hasRunfiles = true;
+};
+"rutitlepage" = {
+  stripPrefix = 0;
+  sha512.run = "e071bf5dfcb8572dac3287394be5052ca04c6ec90182e306f020ad02c8f4db134c92b41f064423c1063fe5c1c465cf952a8d0d8fec4e917aba82f76850cf38c9";
+  sha512.doc = "e6884d2eaa6e5fc9448c033f1a48ee218f171d5fc16e7a977db89f7807c0bb6d1bb4c212ee489bd882d87149003d9aea2da3170045e165150bb8f7578b719107";
+  sha512.source = "bff9526027292b6484d9a5ebe66d57400eace4fb94f39c97569aeda1c1dcb32e30ace085b07bfdac096ca0dcd587bd7ab8509190dfe9dcd08e4fa7d737fed66f";
+  hasRunfiles = true;
+  version = "2.3";
+};
+"rviewport" = {
+  stripPrefix = 0;
+  sha512.run = "eb4bd4e75f021db40119cb4d4334611fa80d26885dd4229ace652bf8dbd7b4647a6dc4f45c8be78ad8db0cf1001b7117ce3c38de2483f0dd96da05473543ac10";
+  sha512.doc = "10f94dd8b29d354eda99e8c0f15b53baef80714f7212714a94070061e403d45fc5a97d25174f268a14b0f4c924af9b25c81131929c08be1ed9a4e62204f17c22";
+  sha512.source = "25e91e8c4f52b1752b32293828d174fcf3cbf6491f38dc2c58be23ef7f2a84570c96606472ed89ed837951bd2ab9bd1e48d4a126beef160c14899b0e70240eb7";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"rvwrite" = {
+  stripPrefix = 0;
+  sha512.run = "c187dcb7e1c72b727cfd0827a55d721c6a094679c1dae27438ed030209042b49c646af20e158900543369ca8ceee9896a9f36de76607f8514004df80e3be15fb";
+  sha512.doc = "545e5b96a2bb3646a7b4a6eb31d5192ef85dee9ac0b6859f6b414f26c5235651294f486bd132af112a2c6021d6843e6ffef8a8f79b7389b974227bc1eee16230";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"ryersonsgsthesis" = {
+  stripPrefix = 0;
+  sha512.run = "0846fb24c6b96cc30edf46d1311809e1170d3feb13b3c26be4dd330ef8dd856771f257ca197f562ed409815f0edb7e8ea744a38b9098b86a325eda9cd4ad360f";
+  sha512.doc = "b0d57ce3dcab586fdc2e15f6c2291560c43dd772b693ec11e0678e083a1475c21b55601878cf938e666d0f8a5464ffb0b79281b62f4859200fc6cd67b33b8779";
+  hasRunfiles = true;
+  version = "1.0.3";
+};
+"ryethesis" = {
+  stripPrefix = 0;
+  sha512.run = "63988ab74eda81270f0e470f3b1d1c772b17668fd9c6526fd8d53f588da8e52d3690b4c3ee898f2b460f83ac44ab4c528a0c6c48abf1a1cbe21427fb4e678a1a";
+  sha512.doc = "03ef086a51a97ed93038338b99a516ba2898a0097326f4cff3c650c7035acc4bba7ee2fd6458c579a9f1af4ff31334dd22cc23b7004d08e58a259306ee1fbd8e";
+  sha512.source = "0754857b37c510f7cc581201c516d3ca1f6e9ed9bcc0825968efbe728a281e2ec73f58f7415efdb07bcdaa66fbbab3178793907b3da17511e69044bbdb2d8aed";
+  hasRunfiles = true;
+  version = "1.36";
+};
+"sa-tikz" = {
+  stripPrefix = 0;
+  sha512.run = "e30f8b6dd6f082bd127077fc5040ffef53e2c2fe43afd023bf0fa9dd8094769e2d40734dcf412d477989b746e1e5141cc42cc082e9f5b26e5986cc91f8336ec1";
+  sha512.doc = "d6586a6196fa9ec8c70ff6410873604d987394ff09e93462548baa202f22bda479fb4f76f66fb710b8daeb7b34e455225c997f07cc9360a09c5cbc4c45697a5e";
+  hasRunfiles = true;
+  version = "0.7a";
+};
+"sageep" = {
+  stripPrefix = 0;
+  sha512.run = "d8e107109129636cf68d88c96a36de87b95dcfc4e154dae51a1145d7a0c58a17ca12e95b1b2fa1312c6c50c5cc02be35b23168d8eca69a7643695c38c5d0bcd6";
+  sha512.doc = "7f92c14d432ca5960669a8faace80ff6d4e97d9a021281c847b7f19942f4c1a06da3657e8992998e91bd1d69398b3fe379da690f81be28cb4ddc3980262c56b5";
+  sha512.source = "25f06543efc104bdcfcd81fbae6182498f23a7d1d958671cac945f5442a59a71033bf3fd174bd41c438c7a6a066d41b1e4a375b559b14bff6e705ad2ca894b05";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"sanitize-umlaut" = {
+  stripPrefix = 0;
+  sha512.run = "c6c3efc6577ef83da2a4ce3465955f19063e2fee725bd1109f5f48c14cb34da7a633b37297788e5f1445f98d8614e474835df43feb4de6288104a81a4909be8a";
+  sha512.doc = "adb489023414b980a224f9416ad420f68918ea60b8d2d0cb8f059c0c20063fdc7bc5eae724d2013037eda052e66200115518445d5bb17140389349bab70a2d4a";
+  hasRunfiles = true;
+  version = "1.00";
+};
+"sanskrit" = {
+  stripPrefix = 0;
+  sha512.run = "0dbfc19e366fc2e69c3700e0c532c280f1e444d0d6b44b37fd1565a64b0f883901c209fb1cab7c6a35cc9ffc23d32b5cd78ad2ee3e52d7cccf41a80a8fdd6c57";
+  sha512.doc = "a5cb05e7fa966cb09d84d0dae14eec25354156f8acb5811f4867b3724fbed62df94305ea9062772879c5cfadffde8265e7c9de062bfdf6756cf2843053caf9fd";
+  sha512.source = "b2644a58e3a64122b5b5765547959d888837b3353b70b5bfc7a98a17f380de4f6e2fafbdc20c0458860baf28fc373ddf9c173737d8c776867bfe7c3bc68ef40a";
+  hasRunfiles = true;
+  version = "2.2.1";
+};
+"sanskrit-t1" = {
+  stripPrefix = 0;
+  sha512.run = "8db4a734c40bcbefca8d1ac4e82b01b890bda547d3aa68e8f3a93a06d75335cd41a6c594563d0c7ec9a18a08868ff7b5e8a04b11a64110f80ded65cf5d809bf0";
+  sha512.doc = "68259865bdde464c565c50497257c0f45f6cc1fcd01533087afabae35ed6d2d53e2160c9c3f867c254e301058e599bbcbf1c3fcaadb7ee7ab25c364642084073";
+  hasRunfiles = true;
+};
+"sansmath" = {
+  stripPrefix = 0;
+  sha512.run = "075b9a32512f191767bfc739b833497eed371c2078fc8511ba507b19e2744675bfb3caeda40da484ae559aaff44aa4f6b2f7f5baaeb0c30076654593216fa5e4";
+  sha512.doc = "7923dcfcf20c945dc61af747000694c59c61982417307356ef2ee335f7a3eac7e44974a334072125ed4a3ec3b29caf342f15dfda1fdbc348a5e2cfb8a4dc2469";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"sansmathaccent" = {
+  stripPrefix = 0;
+  sha512.run = "cbd8d7cdae74d34afc00da3e300cfe6e40b2217b6060732df0ff76a6484ab8dfc8c8921e3552a4cb06a1acd05de07d490a956464df3de97bc987a8a11cca32f0";
+  sha512.doc = "38cee91050b9b38cd5ad84b755782177854f9208e73205d51cc419feab34461a37a557660920412b936c8e7a9f9e1554574a1bd61a36c000f2422c709043666f";
+  hasRunfiles = true;
+};
+"sansmathfonts" = {
+  stripPrefix = 0;
+  sha512.run = "71d70b034c7e0da6f8e1876c40ce2821e05cc814e5d8e1194f5a76c4b490d8d191bf6b3c9bb7fe880d0273ec8e1f3211bd335b526b154116d7ccdcdf0b61d0d5";
+  sha512.doc = "e61cc601588681dc29113391426cb345c207eefb04562ea6eb8369cdb8ec4844b0bab586ed91bb2a1506c49c5a60661748de95cf792b07fd52ba23cbe58d254d";
+  hasRunfiles = true;
+};
+"sapthesis" = {
+  stripPrefix = 0;
+  sha512.run = "92253d6532c6740ae1bd25fdc76b566ea2d488f31e6a24f90e3b55ddc15d471b6c4ce5c4e7ef29c9a416d9810af49b04ab51530e9594c39beb19fffdc066a917";
+  sha512.doc = "a1d8c40975283a7301c1a842355149f4ae291fd7fd72cc5a44a292f96558b79bae734ec12a78b429c333aadd6f433e9603f7cc75a71eba84d42294461e87767f";
+  hasRunfiles = true;
+  version = "4.1";
+};
+"sasnrdisplay" = {
+  stripPrefix = 0;
+  sha512.run = "58cac1a9ca8311c570f8261014a4cbc52b2b1386196d9c12de1f7f7ac780a163626a21081005bd4a02f70f95ad0e3873e844b8520104939e8b1116b674104ad9";
+  sha512.doc = "5d6024b9bf8fe91cef2e0427f33d9fa8b5fff78e2721afc4884ee83a4ea302a5c7b3bfd38ad8be05ebf5b021885d13938bf9424369a44f5701b29ffb6c015d77";
+  hasRunfiles = true;
+  version = "0.95";
+};
+"sauerj" = {
+  stripPrefix = 0;
+  sha512.run = "a4fe5bad7f3d5c895d6166846100cabb1b59e5f37c06d21e451acbaeed0847ab93d9995e70209ab18cc55bf8c78a6c83cbbdd49a45a4cfe511cdad41baf3ddfb";
+  sha512.doc = "3ec0f5c2132a809b4f2f945255f0806508a3dfa3733119368ba59e4dcf5304ac9876ea5f05912faf926db651d1aaf4a3a1c40744fe7d3a077d8bd9dde2676754";
+  sha512.source = "05d2adc3b802e3c338dd92818cf7ce4d3bd6964dba8522bf4628bfc2d13939bde47cd0892b4fb629270d5e9104b9577fe6e3ba6eb71ca60a07f5e6441b0f572b";
+  hasRunfiles = true;
+};
+"sauter" = {
+  stripPrefix = 0;
+  sha512.run = "17fc32a3dae358be5215301abe13d9e865ff9f52f58cdc849d5fc80aeb1a79723d0a39282383086282fbddcaeda0fe586cd3043edd582e0addc0b223bc3ee756";
+  hasRunfiles = true;
+  version = "2.4";
+};
+"sauterfonts" = {
+  stripPrefix = 0;
+  sha512.run = "4d7e491a7a6a22fd6ad8f407cbc8c041434466850e2e5efd46897843281cb71e046fc6cb849cb091cbf05191c45c52a6cb3e0d806eccb9133fddda9c8f305969";
+  sha512.doc = "16647b89752d1871c798f80be91bacf375ae9a4d5199ef7417edb4ff019d7aae548fbbbbde47f84cd5c7c36ec4988ad1df82735f4aeaeb40180b07a86dceb5a7";
+  sha512.source = "d8379fb3c2dfc5dcd9fc5c22101855a27ef5de3ac377f1e6a56bfd397888c5f7f94dd37c24c6625a9dc40f15160721c468b5a5bbe8a35f98f983755889e250d8";
+  hasRunfiles = true;
+};
+"savefnmark" = {
+  stripPrefix = 0;
+  sha512.run = "2d39c1246bc9c5c28222a6ce96b93bc0c1e93c3155f68f44843b5560b548191ad3b608f24b5c444b834fc441238a0d2174a9a8ec006f01b160f77159decfeeb0";
+  sha512.doc = "9ca251e6d17373e5d6f308d2e75896aaa3e44d0f5883be65f7629f922f0eda296c963530e8fc1c80073e0706c2c72f97d062cd731481654c0564cdb695eaa86a";
+  sha512.source = "984807d4efb4b24445dec6742e0328274527ef3c7ddb3df57a5d941531d1e634b5d672c9a510b62f7053d69c10668c311457b3a1065e1775f964e9a74ad027a2";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"savesym" = {
+  stripPrefix = 0;
+  sha512.run = "212ea18ebb424f9b64ca9c75a783dee9ceebac09adcd6ff6c721d90796bf4121aa8710935529451e6f9a4de9c3cb5910b6c07d6fd6b7093c4b9904348f43a1fb";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"savetrees" = {
+  stripPrefix = 0;
+  sha512.run = "f31ac72f12ecbe2ab05bde14de907707988d6b9ba20414543b9176b71d2a0d5358a34348177857c56b961301678b612ee6f767d1b9cb671b9bab344bb8230e6d";
+  sha512.doc = "3e5cfb62d4020d32d9bab01b3df2ea1cb485240aea5eda3541d29cbe38487ed8b242a1eb2b9d15d08bd742390a8d8a25b584e110145dab330580e69e2287f181";
+  sha512.source = "2dcc671cae73824a2e4cf10682f0ad7d6236f5e856267663f14864804587e1394fe12de5e3e54e5a64abb798c16014fab07a462584eac3a561f971496c58b5b0";
+  hasRunfiles = true;
+  version = "2.4";
+};
+"scale" = {
+  stripPrefix = 0;
+  sha512.run = "2d090a08c8f7d5d9b332f390b29b16e911f339071579cc09b954b2978df4b410ff3c47afd6b8bea0ce7eabac551b94f8630fdb7aaa4ef39f793748925157a19d";
+  sha512.doc = "aa41f6de8baee992b123ed40086dd5d0aff63c187858502c66056a52f3b8bfb12a5b7dd15ae9279a224e9d67d717f3927e97f5879ab09ded9e0960a3eb910a90";
+  sha512.source = "387efffefb6774f50165a0c3242005a52418c5c9ac3ff6d1b87f696eef7af8a57a19a4efe6066e7939fcd76ff8ff9ce3ab4941d30d36c6bf30beeea1a95d4eac";
+  hasRunfiles = true;
+  version = "1.1.2";
+};
+"scalebar" = {
+  stripPrefix = 0;
+  sha512.run = "1e367f025943a56b6592238e2961f967beb1d5ff5b68ee83565b3926a392214557237e482ba0b174ddb2e6861e4690e636edef1a5fe0473c465a0deaa1e1bd0a";
+  sha512.doc = "cada3793771a28c3ce30439c782d245b6b21cfa426d2268e7e072a8559a81692b6c4e9e26a8bd452fe5882f39e55fd061a1af4e9be362bdcdb1f6ff6bba781e2";
+  sha512.source = "f6f3e8d007ab3efd6bf1d45b9e3af1fa846637a8b66226f9ae24d64b3be9938b547bc3879a33f44d465f8f62494d1f55141c713b18161ec4006ed76eaa52169e";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"scalerel" = {
+  stripPrefix = 0;
+  sha512.run = "0b0a996bbed0fc185714f84e32c76e5a9277137d3d8dcc6b12b516afa97f3c80b2684c3c22af8717bb3e6acca267a3862c1244df7cb71eca61b10074fe1c3a89";
+  sha512.doc = "1533997bed3ce5499a1285a6db03be20f28fe70b1ebbac5d117e692c53068ecbe7f8082cd5f93c753bbfc1eb4fb3b78372c7b14f5e2c636398f37dbc17972d97";
+  hasRunfiles = true;
+  version = "1.8";
+};
+"scanpages" = {
+  stripPrefix = 0;
+  sha512.run = "e13f7849b2b1cbe9fc60fc2e3d3bb7f2879644c282e8664a5ec46b3143f4ac7fbd21f2976183ad410bf778a181d5063b23832734f0ff43a617c9020b16587fb6";
+  sha512.doc = "34eb2549a4d809602cf69eb562fd3c03c8d3fc4063820ce41b52d733228a6a83ace819e5bb82e77cd3be3cb8093e7997377fadeded652d20509eecde458d9b78";
+  hasRunfiles = true;
+  version = "1.05a";
+};
+"schedule" = {
+  stripPrefix = 0;
+  sha512.run = "c7d58c5e4ecdef504e1d32934ccf2c71cd36b073af4031ee83b0d0a3b3393a40acc26dd4e057f426561903d0d08297bb2a9849cad2cc5a11b02e15a3983f0e1b";
+  sha512.doc = "ca5f9e2b27f0b01531e82e64e99f816aaa52f5f340bc2fdefac367918d50c564cd178709428554a908951c117dbcf3d24753f84d864fcdc546129c3de25d7e77";
+  sha512.source = "e910feb417f9d1606b323a995026f3d3275523b4fcc53dd94d44c10b375ba13d322f32191dfec36b9606174240ec77de1b024c1f8ac14b94224d34e2aa0cdabc";
+  hasRunfiles = true;
+  version = "1.20";
+};
+"schemabloc" = {
+  stripPrefix = 0;
+  sha512.run = "5b875455f8a567a97c5594f1366fff624228ec2af396bf8cee73f32835d9896c41986b3540f215cca570f21d1531d248e315da5336c0323fb57c3f796ee2df65";
+  sha512.doc = "27b0f1f5db78caacec8140b4f13a786ac50ba2cb393aeed153138b0ea8ee6caab640c2dafb14cc3fc01b3c7a511d4642f7fea65e2ccfe295a16cb7e125a47cf0";
+  hasRunfiles = true;
+  version = "1.5";
+};
+"schemata" = {
+  stripPrefix = 0;
+  sha512.run = "41ddeda2f81711f50238403fbd496f35f0b5548c52a4865dfd9f1ebd7d708db2d1780b1bebd0d1e1c993c140a760d4802770066b21b1bf4e98c09bb606dce2ba";
+  sha512.doc = "51afe69e7356110ae73b2dc7d4cd84556ac245bc57ab2c4e05f8753345fd0628085b61c78e31fd25ab22e1a2e3255c560193fdc9e16729e7ca2dd7c48bba0684";
+  sha512.source = "93c841a49e482861247b6a1baa79f7cfd3956e702b37ad17328c928600224aecb486df1ee012a89d00907efd6e60ea51f5c6aa704b876eba1311e96f7529aaf0";
+  hasRunfiles = true;
+  version = "0.8";
+};
+"scheme-basic" = {
+  stripPrefix = 0;
+  deps."collection-basic" = tl."collection-basic";
+  deps."collection-latex" = tl."collection-latex";
+  sha512.run = "ab27a01ab3859bfc1718808ec931e24e58c1146c5e803d616ae0e1e2c2c563fb28bb8480f91e12db9e71d7c1ddfbdc3b73357fe212fcecf7e377aba4365aa27d";
+};
+"scheme-context" = {
+  stripPrefix = 0;
+  deps."collection-context" = tl."collection-context";
+  deps."collection-metapost" = tl."collection-metapost";
+  deps."tex-gyre" = tl."tex-gyre";
+  deps."tex-gyre-math" = tl."tex-gyre-math";
+  deps."antt" = tl."antt";
+  deps."iwona" = tl."iwona";
+  deps."kurier" = tl."kurier";
+  deps."poltawski" = tl."poltawski";
+  deps."xits" = tl."xits";
+  deps."Asana-Math" = tl."Asana-Math";
+  deps."gentium-tug" = tl."gentium-tug";
+  deps."pxfonts" = tl."pxfonts";
+  deps."txfonts" = tl."txfonts";
+  deps."ccicons" = tl."ccicons";
+  deps."dejavu" = tl."dejavu";
+  deps."eulervm" = tl."eulervm";
+  deps."manfnt-font" = tl."manfnt-font";
+  deps."marvosym" = tl."marvosym";
+  deps."mflogo-font" = tl."mflogo-font";
+  deps."wasy" = tl."wasy";
+  deps."ly1" = tl."ly1";
+  sha512.run = "214ab897d6ecac52278e3c63e988b0bd0ce146f07e9c58076e2c65bf6a7bb1a34d66341dc88b572d4549182a9a0b9daa51e91ad782ab41f7eeb7a6c2dc8786f3";
+};
+"scheme-full" = {
+  stripPrefix = 0;
+  deps."collection-basic" = tl."collection-basic";
+  deps."collection-bibtexextra" = tl."collection-bibtexextra";
+  deps."collection-binextra" = tl."collection-binextra";
+  deps."collection-context" = tl."collection-context";
+  deps."collection-fontsextra" = tl."collection-fontsextra";
+  deps."collection-fontsrecommended" = tl."collection-fontsrecommended";
+  deps."collection-formatsextra" = tl."collection-formatsextra";
+  deps."collection-fontutils" = tl."collection-fontutils";
+  deps."collection-games" = tl."collection-games";
+  deps."collection-humanities" = tl."collection-humanities";
+  deps."collection-langarabic" = tl."collection-langarabic";
+  deps."collection-langchinese" = tl."collection-langchinese";
+  deps."collection-langcjk" = tl."collection-langcjk";
+  deps."collection-langcyrillic" = tl."collection-langcyrillic";
+  deps."collection-langczechslovak" = tl."collection-langczechslovak";
+  deps."collection-langenglish" = tl."collection-langenglish";
+  deps."collection-langeuropean" = tl."collection-langeuropean";
+  deps."collection-langfrench" = tl."collection-langfrench";
+  deps."collection-langgerman" = tl."collection-langgerman";
+  deps."collection-langgreek" = tl."collection-langgreek";
+  deps."collection-langitalian" = tl."collection-langitalian";
+  deps."collection-langjapanese" = tl."collection-langjapanese";
+  deps."collection-langkorean" = tl."collection-langkorean";
+  deps."collection-langother" = tl."collection-langother";
+  deps."collection-langpolish" = tl."collection-langpolish";
+  deps."collection-langportuguese" = tl."collection-langportuguese";
+  deps."collection-langspanish" = tl."collection-langspanish";
+  deps."collection-latex" = tl."collection-latex";
+  deps."collection-latexextra" = tl."collection-latexextra";
+  deps."collection-latexrecommended" = tl."collection-latexrecommended";
+  deps."collection-luatex" = tl."collection-luatex";
+  deps."collection-mathscience" = tl."collection-mathscience";
+  deps."collection-metapost" = tl."collection-metapost";
+  deps."collection-music" = tl."collection-music";
+  deps."collection-pictures" = tl."collection-pictures";
+  deps."collection-plaingeneric" = tl."collection-plaingeneric";
+  deps."collection-pstricks" = tl."collection-pstricks";
+  deps."collection-publishers" = tl."collection-publishers";
+  deps."collection-texworks" = tl."collection-texworks";
+  deps."collection-xetex" = tl."collection-xetex";
+  sha512.run = "c5aa68661ccb1ef57e039e923397466c46349a4b52e1a282d5fa0bc466de382c3d121f69954a28c6345e0f02386eedd915c5abd8f0f0e86ec295e30b325ba9b7";
+};
+"scheme-gust" = {
+  stripPrefix = 0;
+  deps."Type1fonts" = tl."Type1fonts";
+  deps."amslatex-primer" = tl."amslatex-primer";
+  deps."amstex" = tl."amstex";
+  deps."antt" = tl."antt";
+  deps."bibtex8" = tl."bibtex8";
+  deps."comment" = tl."comment";
+  deps."comprehensive" = tl."comprehensive";
+  deps."concrete" = tl."concrete";
+  deps."cyklop" = tl."cyklop";
+  deps."dvidvi" = tl."dvidvi";
+  deps."dviljk" = tl."dviljk";
+  deps."gustprog" = tl."gustprog";
+  deps."impatient" = tl."impatient";
+  deps."iwona" = tl."iwona";
+  deps."metafont-beginners" = tl."metafont-beginners";
+  deps."metapost-examples" = tl."metapost-examples";
+  deps."poltawski" = tl."poltawski";
+  deps."seetexk" = tl."seetexk";
+  deps."seminar" = tl."seminar";
+  deps."tds" = tl."tds";
+  deps."tex4ht" = tl."tex4ht";
+  deps."texdoc" = tl."texdoc";
+  deps."collection-basic" = tl."collection-basic";
+  deps."collection-context" = tl."collection-context";
+  deps."collection-fontutils" = tl."collection-fontutils";
+  deps."collection-fontsrecommended" = tl."collection-fontsrecommended";
+  deps."collection-langpolish" = tl."collection-langpolish";
+  deps."collection-latex" = tl."collection-latex";
+  deps."collection-latexrecommended" = tl."collection-latexrecommended";
+  deps."collection-metapost" = tl."collection-metapost";
+  deps."collection-plaingeneric" = tl."collection-plaingeneric";
+  deps."collection-texworks" = tl."collection-texworks";
+  deps."collection-xetex" = tl."collection-xetex";
+  sha512.run = "88e35f41d2984e4ec6672650df5708e553f830ef5c16042613bc412aa2a62a4af6f46f80825dab6e50fbc73811c2059955ae0de88f989b170681c7499944ead2";
+};
+"scheme-infraonly" = {
+  stripPrefix = 0;
+  deps."kpathsea" = tl."kpathsea";
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."tetex" = tl."tetex";
+  sha512.run = "f95c49da292bc4eb602fa20bb8bcdd148eeb883db9673665b3cc23f010ce31cd09c51af9b5df81ba0e79ab59a0b5f28c2f854ac6dcde4e0f7c983b71885bc1e5";
+};
+"scheme-medium" = {
+  stripPrefix = 0;
+  deps."collection-basic" = tl."collection-basic";
+  deps."collection-binextra" = tl."collection-binextra";
+  deps."collection-context" = tl."collection-context";
+  deps."collection-fontsrecommended" = tl."collection-fontsrecommended";
+  deps."collection-fontutils" = tl."collection-fontutils";
+  deps."collection-langczechslovak" = tl."collection-langczechslovak";
+  deps."collection-langenglish" = tl."collection-langenglish";
+  deps."collection-langeuropean" = tl."collection-langeuropean";
+  deps."collection-langfrench" = tl."collection-langfrench";
+  deps."collection-langgerman" = tl."collection-langgerman";
+  deps."collection-langitalian" = tl."collection-langitalian";
+  deps."collection-langpolish" = tl."collection-langpolish";
+  deps."collection-langportuguese" = tl."collection-langportuguese";
+  deps."collection-langspanish" = tl."collection-langspanish";
+  deps."collection-latex" = tl."collection-latex";
+  deps."collection-latexrecommended" = tl."collection-latexrecommended";
+  deps."collection-luatex" = tl."collection-luatex";
+  deps."collection-mathscience" = tl."collection-mathscience";
+  deps."collection-metapost" = tl."collection-metapost";
+  deps."collection-plaingeneric" = tl."collection-plaingeneric";
+  deps."collection-texworks" = tl."collection-texworks";
+  deps."collection-xetex" = tl."collection-xetex";
+  sha512.run = "cc9bd942db4afd9d1d15ccf20e2d404ca61d640f6c04058a876cce0dd09e1fcb581e8abd7b61ee55c2ac8d583c508e9f0461ce199aa7b38bdb64856afb8241d2";
+};
+"scheme-minimal" = {
+  stripPrefix = 0;
+  deps."collection-basic" = tl."collection-basic";
+  sha512.run = "8ae04d142c738142753b4601cc327721cb59689948c2c953f79ff1c4364aa6a449e3862d206223ef1ac1efc3fdfdb1f542c32c8049327662d4ddbe77fe7edbce";
+};
+"scheme-small" = {
+  stripPrefix = 0;
+  deps."collection-basic" = tl."collection-basic";
+  deps."collection-latex" = tl."collection-latex";
+  deps."collection-latexrecommended" = tl."collection-latexrecommended";
+  deps."collection-metapost" = tl."collection-metapost";
+  deps."collection-xetex" = tl."collection-xetex";
+  deps."ec" = tl."ec";
+  deps."eurosym" = tl."eurosym";
+  deps."lm" = tl."lm";
+  deps."lualibs" = tl."lualibs";
+  deps."luaotfload" = tl."luaotfload";
+  deps."luatexbase" = tl."luatexbase";
+  deps."revtex" = tl."revtex";
+  deps."synctex" = tl."synctex";
+  deps."times" = tl."times";
+  deps."tipa" = tl."tipa";
+  deps."ulem" = tl."ulem";
+  deps."upquote" = tl."upquote";
+  deps."zapfding" = tl."zapfding";
+  deps."babel-basque" = tl."babel-basque";
+  deps."hyphen-basque" = tl."hyphen-basque";
+  deps."babel-czech" = tl."babel-czech";
+  deps."hyphen-czech" = tl."hyphen-czech";
+  deps."babel-danish" = tl."babel-danish";
+  deps."hyphen-danish" = tl."hyphen-danish";
+  deps."babel-dutch" = tl."babel-dutch";
+  deps."hyphen-dutch" = tl."hyphen-dutch";
+  deps."babel-english" = tl."babel-english";
+  deps."hyphen-english" = tl."hyphen-english";
+  deps."babel-finnish" = tl."babel-finnish";
+  deps."hyphen-finnish" = tl."hyphen-finnish";
+  deps."babel-french" = tl."babel-french";
+  deps."hyphen-french" = tl."hyphen-french";
+  deps."babel-german" = tl."babel-german";
+  deps."hyphen-german" = tl."hyphen-german";
+  deps."babel-hungarian" = tl."babel-hungarian";
+  deps."hyphen-hungarian" = tl."hyphen-hungarian";
+  deps."babel-italian" = tl."babel-italian";
+  deps."hyphen-italian" = tl."hyphen-italian";
+  deps."babel-norsk" = tl."babel-norsk";
+  deps."hyphen-norwegian" = tl."hyphen-norwegian";
+  deps."babel-polish" = tl."babel-polish";
+  deps."hyphen-polish" = tl."hyphen-polish";
+  deps."babel-portuges" = tl."babel-portuges";
+  deps."hyphen-portuguese" = tl."hyphen-portuguese";
+  deps."babel-spanish" = tl."babel-spanish";
+  deps."hyphen-spanish" = tl."hyphen-spanish";
+  deps."babel-swedish" = tl."babel-swedish";
+  deps."hyphen-swedish" = tl."hyphen-swedish";
+  sha512.run = "9d6d9bdd5bb55deed726997629d69927f8da7c8eacae1b87c94c94f73ae90d68024fef2e29aa7d652d3e9b4062801213f35e91ba999380bf3ba11bcac6280581";
+};
+"scheme-tetex" = {
+  stripPrefix = 0;
+  deps."SIunits" = tl."SIunits";
+  deps."acronym" = tl."acronym";
+  deps."amslatex-primer" = tl."amslatex-primer";
+  deps."bbm" = tl."bbm";
+  deps."bbm-macros" = tl."bbm-macros";
+  deps."bbold" = tl."bbold";
+  deps."bibtex8" = tl."bibtex8";
+  deps."ctie" = tl."ctie";
+  deps."detex" = tl."detex";
+  deps."dtl" = tl."dtl";
+  deps."dvi2tty" = tl."dvi2tty";
+  deps."dvicopy" = tl."dvicopy";
+  deps."dvidvi" = tl."dvidvi";
+  deps."dviljk" = tl."dviljk";
+  deps."patgen" = tl."patgen";
+  deps."pdftools" = tl."pdftools";
+  deps."seetexk" = tl."seetexk";
+  deps."tie" = tl."tie";
+  deps."web" = tl."web";
+  deps."cmbright" = tl."cmbright";
+  deps."cweb" = tl."cweb";
+  deps."eplain" = tl."eplain";
+  deps."eulervm" = tl."eulervm";
+  deps."gentle" = tl."gentle";
+  deps."lshort-english" = tl."lshort-english";
+  deps."mltex" = tl."mltex";
+  deps."multirow" = tl."multirow";
+  deps."nomencl" = tl."nomencl";
+  deps."pst-pdf" = tl."pst-pdf";
+  deps."rsfs" = tl."rsfs";
+  deps."subfigure" = tl."subfigure";
+  deps."supertabular" = tl."supertabular";
+  deps."tamethebeast" = tl."tamethebeast";
+  deps."tds" = tl."tds";
+  deps."tex-refs" = tl."tex-refs";
+  deps."collection-basic" = tl."collection-basic";
+  deps."collection-context" = tl."collection-context";
+  deps."collection-fontsrecommended" = tl."collection-fontsrecommended";
+  deps."collection-fontutils" = tl."collection-fontutils";
+  deps."collection-langcjk" = tl."collection-langcjk";
+  deps."collection-langcyrillic" = tl."collection-langcyrillic";
+  deps."collection-langczechslovak" = tl."collection-langczechslovak";
+  deps."collection-langenglish" = tl."collection-langenglish";
+  deps."collection-langeuropean" = tl."collection-langeuropean";
+  deps."collection-langfrench" = tl."collection-langfrench";
+  deps."collection-langgerman" = tl."collection-langgerman";
+  deps."collection-langgreek" = tl."collection-langgreek";
+  deps."collection-langitalian" = tl."collection-langitalian";
+  deps."collection-langother" = tl."collection-langother";
+  deps."collection-langpolish" = tl."collection-langpolish";
+  deps."collection-langportuguese" = tl."collection-langportuguese";
+  deps."collection-langspanish" = tl."collection-langspanish";
+  deps."collection-latex" = tl."collection-latex";
+  deps."collection-latexrecommended" = tl."collection-latexrecommended";
+  deps."collection-mathscience" = tl."collection-mathscience";
+  deps."collection-metapost" = tl."collection-metapost";
+  deps."collection-formatsextra" = tl."collection-formatsextra";
+  deps."collection-pictures" = tl."collection-pictures";
+  deps."collection-plaingeneric" = tl."collection-plaingeneric";
+  deps."collection-pstricks" = tl."collection-pstricks";
+  sha512.run = "bfea4a64f5197305d18b4c066698cc19f49cbdbad180d2e3e5a3f3efce228868b184fd72d5be842235282ad1d85cb8b77c59735ca22f9c8714fb75f5f0b8c3a0";
+};
+"schule" = {
+  stripPrefix = 0;
+  sha512.run = "8f59d31e7bebb741a7c23c2559f0e90979df2d7ed1482d3dc09a1f5fd95ba7ee358e3acfd5bcfe0a708d36cecd4e36b226db4addcb007168789311758a444bc9";
+  sha512.doc = "dbc4cb7922524e2a73c56861ebac5487b508016107bc7c2a104d93edafa816f27f84a142bd0d228aed008f85ba7aab53b694771a001657ac068db169b87b72b1";
+  hasRunfiles = true;
+  version = "0.8.1";
+};
+"schulschriften" = {
+  stripPrefix = 0;
+  sha512.run = "baedf984b1d1cfeae56af4b9530b81d90653eee334a90f2a9a83a871240592ed6267668b6974033cedfc1e73166232201eaae8e4876d38b9fd94919e8262336a";
+  sha512.doc = "b43f16b38c0417b074b7f45bd42290f3434275c23c6031f293101d907c2004805168d86137190300daa1ca62dd1b25cd2f795e712868b36e454cda134f680bbb";
+  hasRunfiles = true;
+  version = "4";
+};
+"schwalbe-chess" = {
+  stripPrefix = 0;
+  sha512.run = "aa32ef2ad2e939250a91d9c8a8278f640f6d3ab935dbaaf0684f299331d336b287e7a6b6330f0e232407ab4af6371d2feb2666a92ed5d962be8bc1e07b4cc811";
+  sha512.doc = "ef7d55e273b0b61c94e2df009976f636dc67939555c67a3a79f0df4e76a5d1f8db8474506e16041492ea6e4588972a375972bcccfbeccf943dac664efd48291a";
+  sha512.source = "03c43c6667646c44f40b553d8af01a3c463142ec442a1979552186f34973b4e0e4058407e159b89969d3b5bd1179bf98f4dad2257bd9343b5c8d40da53547174";
+  hasRunfiles = true;
+  version = "2.3";
+};
+"scientific-thesis-cover" = {
+  stripPrefix = 0;
+  sha512.run = "2427c534ad767f1e8f319aa24744346d4a0a39f73d93c779dc89d3cd0abfd683d7a33c81026c4a5823ad686084f026193c917ff173d639dfac2c99350a819c59";
+  sha512.doc = "31bc280c96b87b079a7dfb6a0c2ff1a03f80c5a047bc2c11b9fb192c50b8e51a65cb3fd5c043c37124afe2383a611f38accd91d6202416451b3eb34bfe855077";
+  sha512.source = "ac14306fa7591f6fa684dd8fb6d7c7335b6ce5c8e3099d80286f05a9f378b4d430b1210fec9c071aa8a4e430ff6cae9ea712ea504cc575e89b02751c02e60bd6";
+  hasRunfiles = true;
+  version = "4.0.2";
+};
+"sciposter" = {
+  stripPrefix = 0;
+  sha512.run = "1a4292c9fb6dd8a8780968c69ee70a88dd5d1c5d81df9a32e22e08c9115528d8af634a1681fb1672664d57f80ab333a1b811a9c0e17597afdc358988e14fae93";
+  sha512.doc = "6ea102c2318e30080224684693806e16008f946a01fe9e1d232a871f231100d1491324a3ab0260746a61a10125afff6b20072c1a49c8da279a4c0b477361e46b";
+  hasRunfiles = true;
+  version = "1.18";
+};
+"sclang-prettifier" = {
+  stripPrefix = 0;
+  sha512.run = "77f8909b870fbaa4f1a0414f75f08ac602051d26c0c935be8661be8820a0b77734b614b9f5c8333b1f1fd12f57a6ee3c4c403f151bc60300e454673a2a4235c2";
+  sha512.doc = "7680fa17762f17d2d7f3c9d3062bd194394bbbfbee36e4704e8b95b2be568cab51fd1dac9d90c6034919b3ec61f75f0f7689478c16f53ac7b4ee820768eaffa8";
+  sha512.source = "8a9188cccf4eece9844156747bdf8414bd42227cdb64ae79ce2e95c729ebed16c9af14abb943cb1caaaebb693bde4d39e39d1302afc0595444d16b3bafa98131";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"scontents" = {
+  stripPrefix = 0;
+  sha512.run = "87e9eca9f88ba6090728df86005f9a9fd1cd82156b9a126ddd6f4f9002ef978aaa846139106ce5df567cf69ebe69f05a104fe4b9c31619e0776510c43778e97f";
+  sha512.doc = "0c1195c5a24aaa7ceb52f53ef8cad4e496a765c7328b0f70ecf8ce1caf9d28b71634f4900ef83c02bb31212704a26afa5bc247b79e4290fdb64f3d89b4b43c29";
+  sha512.source = "555bb82c5173ea46ecde8b4b8f58ab523cd30ff7ed8a4b37ed70f1113d2c00f6cba30d9904a384f3508ad7cfb45b32b3d6bac2c645c0f960b8f2ade65afff971";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"scratch" = {
+  stripPrefix = 0;
+  sha512.run = "fcee832dbad22e76387bbd10f7ea8e3127a6fac45ea1b42feb183506cd5c89c258cafb052d75e4d14b431a57e638fc84fc751bbb8fa700420197a0d2e33ead48";
+  sha512.doc = "af7057f28ac0539a555db5774d3d29e01ba10fa78744712a5d76f95229c45022f682c321a551cb5070ab3e370b2d9e861c0b04b73365e828fe665b3f8aeb7730";
+  hasRunfiles = true;
+  version = "0.41";
+};
+"scratch3" = {
+  stripPrefix = 0;
+  sha512.run = "042ac97a5240c259f00f8bbe4c25b0886636b49e8218ec810306cda99525552bc4bd6f4a7392db19d45805c50866c7f4cfb299e63b8296d44409f12db3e3383f";
+  sha512.doc = "ea7c2ac340fb69bf779af2948e684ccb73f0234ed55fe2d8260fe8b3eb94c7c0ef085db83f94f81fc19705b2d61c1697ad9ad1dd39d8aac343d16ebdb8e20ece";
+  hasRunfiles = true;
+  version = "0.14";
+};
+"scratchx" = {
+  stripPrefix = 0;
+  sha512.run = "793c4e96cedd97ca37b7906b6a9e78bb06f39572ddfb57d8e4b54dd9b2846b31bbdd835fe1a93517d1430448571a30d26fa8ad7cad0aa3fab6ca526bacb605b6";
+  sha512.doc = "c87994e90a748fa8afba91b443850a2d9f555ff4ac6b264107b42981e078b6966e8cbffd75f071f3f69a78c9b9aa10db65c3e855a4920f3b732446df01da7d6c";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"screenplay" = {
+  stripPrefix = 0;
+  sha512.run = "d14dd76c4b1abd9ff7adbef7e4c3bc1f732156dc2d989787bed7382e0288c44dcde18ce05143e6af03ebe83c753bd2b6682cb4f56c73934ca4209a114eb9e3ef";
+  sha512.doc = "ed723ffc17a98c8d4a8c960f56a3550ea74db84fdd06d26b08b5c46b12310fdb9b7b7719ffa25e8ddd21f17642f5f64f1c96327066a131c468cee8ff185cb199";
+  sha512.source = "f6ada6c467c3a9d11096928dc31c7f71131f0b40146a697bda2a3e194c86070a776323c76c8b6da0edd247f8fcd1a65c286801a7353bb53bc6aa364bb7a75944";
+  hasRunfiles = true;
+  version = "1.6";
+};
+"screenplay-pkg" = {
+  stripPrefix = 0;
+  sha512.run = "974795ca0b4a286077e38f4b3b120cf9fe243d450b87b8397adec2c5425b865cdfbe70b86b815d513edb6ae7051d9ad3003fcd6a15b5b02b624dcd4ee0534164";
+  sha512.doc = "9aa4407d1b317442dd76f762af5b673460bbbcec89e47835521688085183e00ba9dbb70dc9e86a95235bd9a32da701c846ceb2985dc70894ca8abe334428a532";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"scrjrnl" = {
+  stripPrefix = 0;
+  sha512.run = "39198edddb3a3ce24bdc0d9cc6f5d7ff204b142c200a9ce36060bb016f1e1e1750b83210a91f1eec90a205c5a4923704bdc0e44876c462eb768355407597a05c";
+  sha512.doc = "bf6dc1704ce60f9323b68d39502fe95d4eaf8409bf65c278e64deb1ff80aaa84f16e294ab08629466b6f8c0ca02ec03142abdf3fe0a43f862352d0ec55dd410a";
+  sha512.source = "05b0a8e50efd2f21699c3bd476cd308e02267a6dc2a9cd480e0f7b2e6d9633c830927c54eaf75e4d329a8f6a8d3993782ecfe2add7b450016f7e7bc92aea1b2e";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"scrlttr2copy" = {
+  stripPrefix = 0;
+  sha512.run = "7aa7ac841d667e627056ed0ef3e55368f580e9d8a35a35239780b12d0a18534086844009ba1dc40a1b6ef29ad64d06e1e2e8ffef216e89c15e684975acd87192";
+  sha512.doc = "08e87246b20cc0ea9ed30cd74993aa2af520d8b01878e1f54c802b5beef4347c087ec36f32220581eefe933a524c813ec30b3235989453ff8b7be93ac35b725d";
+  hasRunfiles = true;
+  version = "0.1d";
+};
+"scsnowman" = {
+  stripPrefix = 0;
+  sha512.run = "87f207b478799ed88deaed71b60bced2158d6bf4406e6cbbd533f9110004cb8ceec71ded31d3706d8033bc53b1f0f31cb25877af9c58d27a5f350ab79572328b";
+  sha512.doc = "5050ca6200a7531bfbc31dfd9f06d4b6503e832fc09a7132ec76a5ebc09bb0fe4743ef09740ff9646d4fe93a31ee9fcdef6091fc5c50e379c86d529d5df51f25";
+  hasRunfiles = true;
+  version = "1.2d";
+};
+"sdrt" = {
+  stripPrefix = 0;
+  sha512.run = "6faa9948e5bb4369fefad7d2b1a5f2bf39baf8b98e8ad3b8f61ade2001b431894ddfbd61e2f1ec73ed767b102f79f8357d965a5c3805c082d8d88bda29e10c6b";
+  sha512.doc = "570795dd0c4fe0450e628f61e43d05f3e969488890eab2ee1364712e812d839c7b3185c7ddbd27c44c486e234afe36aceb4824e828cb0c9253e8e5479b0b6c15";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"sduthesis" = {
+  stripPrefix = 0;
+  sha512.run = "10f1c0a749b9b30dda0e1c7dce4ef2fdd29220b4d77d03b8e71d8c3a460a73c98f8d16e27e6bbab07a66bf7a23cc9d3bf2b12db523232df1142a8563e0068ed8";
+  sha512.doc = "afa02606e7df5655ef46b59e92dc54bec9e8f05deb1d9ecd8a0546ee068f2595620cc8dd39d04ea8db53ac7f2e9983ff01ac2646b6946fd3619db64a0bdad332";
+  sha512.source = "2c4dddfd7a6fa27ebb4e48e61f8d2887e116eab174e13d9b41efc9b7a3c2f5d5770f000b4acc4275fa82d54ad5ef2129bf614478d11b24a359a38a03d38caa76";
+  hasRunfiles = true;
+  version = "1.2.1";
+};
+"secdot" = {
+  stripPrefix = 0;
+  sha512.run = "7fb101dcd377cb5e3d1dca352d266af419c6fd83e4f2d1701a3d598e69e8e7f70afc9791a76337f4833da612cf07989ef244af1b24eb62ee59dd5f76225aa037";
+  sha512.doc = "7ca1b4102c6f92bfc6dd0571c489852dc5c1df4a58530aea490098192ee256a4df7e0bbee20adff78c2b35dfe39b8cd3f821c5e45dc6d78ab4865b6f08ad8488";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"section" = {
+  stripPrefix = 0;
+  sha512.run = "8b3eaecd49f8b7046bc35df079541121d76757bc2a1b6a6ffa24357a20e9ec4bf5a7b65fae1673401ebf363e46ecffe3c64a2de9aac104594b2b111cd10426f2";
+  sha512.doc = "91defb5391b9e607cfaf74ac3abe53127ddec379d7a7c052f5c8f776bcef1728010a94ef7b590ddac8df140ee11fff4fd843bdbe1a13efd322a9a939ea2df39b";
+  hasRunfiles = true;
+};
+"sectionbox" = {
+  stripPrefix = 0;
+  sha512.run = "d1a4da6a59c0411baaa785c58350c1d5be9c1081e0344d8a61fc009f49a1b751a09f358ba1baa3b645de4eff7d69e3781d8b44d90738105c0f56723da36efdb3";
+  sha512.doc = "80ae58336eabd8169781c3c30b42b2583f78ffa4093a7d3f9d9e9c6e31a3fb8f457fd42d56f2ff75b2ff3c38b537642dd6f254e54b3112538657a37b3b4e0410";
+  hasRunfiles = true;
+  version = "1.01";
+};
+"sectionbreak" = {
+  stripPrefix = 0;
+  sha512.run = "4b2c26642ba346acce5aff9678bf94f76d85005464f80eaae862a522bcbfa34c1671af79671982a91208ef104a21a532d851dcc785b5c40de4fe462d12488832";
+  sha512.doc = "a98eede394708bf612f593e00c58b5500a35b5173381c1f149d0be29b49fe95f5162602177b7d4f23c5b5312d7cdf47ea6ced8bc285853d2b7d77926a6ca66b0";
+  hasRunfiles = true;
+  version = "0.1d";
+};
+"sectsty" = {
+  stripPrefix = 0;
+  sha512.run = "7e164b14f29a385f8a97e09ad124c347a154e316ac2eb41e0bf9f161d44f2782995fe271b5472ef90dfa4ffdd5495de81090b44f5777243ea76c9f75fcbde2b4";
+  sha512.doc = "69d7fc032c06d015d7a6e6d2273c5240b146062565882fca0ddf5b7b795b788207bc9b478366a0a40e4acf223b07482f5cf41a65dd9b37047bcbf12566f6a826";
+  sha512.source = "fc79d4c7c437d9c5ff7d8dc62439242cb772f250527ca099cd1180e58742a9ff42e7c63776c24fa5563c95b5d2bccd97df0e1c086869bbcf5ff2ed8ff5297bf4";
+  hasRunfiles = true;
+  version = "2.0.2";
+};
+"seealso" = {
+  stripPrefix = 0;
+  sha512.run = "4d52687aa57245d3be55bf486b100d61fe2e2d979447c2f123f566c3aeb13657e531ace55fe5d00eab57cebe89cfd3729a71dc7177831b5192b8c0fde452d7df";
+  sha512.doc = "6baba95b6b08ef95f2966d227161ea39a4084b46371967057266ddae155b115fbe4fcf148e1afc4629e33f54d0329ebb6169f1be4fdcb801d869b212d056cc61";
+  sha512.source = "981ed17cba32b2bdc4848c099038193dba2b39d04210cbb2851400044654234c75c160f9c775af2fad6b76b80c85c782fe6ea75a61728ab67193dcf414b0b4d8";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"seetexk" = {
+  sha512.run = "b3dea76f239ec78da4eb15d4bea4dd1171c3193e9d9e82a1ecc5d5ed747e421a7a3dc96e422839772d2f825e862b8a71befbacb7cd816405d707f654c7e5a32c";
+  sha512.doc = "39504cee7a077e16d10b2d4d1f393b1b90e7c21c7452f761dde1117f4b8668962b1baeac4b834b71b481fd170059e4e60f2d529e523e40503d26704ff15a7dcf";
+};
+"selectp" = {
+  stripPrefix = 0;
+  sha512.run = "1674c9c9d7afbc851f8c4fad1b46a1ec18161eb48375d892c947416ee97791addf92f75a69090c95a0f08bbaac1a7a745af93a7bcf91e2e0f8117ed3f3106dc9";
+  sha512.doc = "7c99f0400841cb1d88af4c239f43eaec7c0b2358c2e581866d4361cd86b9eff413bc9e07d8df630ddff8d4f37193896bd430f4c357d9cc04591295f18ebd09aa";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"selnolig" = {
+  stripPrefix = 0;
+  sha512.run = "8b01d1b6f4e6f83efbfc603be7c510d3c8435559b1272f3e8beae7d0de04ac889e04d539c689abfbfb8af5ff2d04c38459320fec333a122c3b60a1a79a0b115a";
+  sha512.doc = "afc1a84aa85f3da5e5d121de0ee37f5347527985b3a9ae75abf0e51edc1d5371e831b5ffc7218d9863b8ff717554c6f469adec908f02f5d9be3bd4f6e45fc1ac";
+  hasRunfiles = true;
+  version = "0.302";
+};
+"semantic" = {
+  stripPrefix = 0;
+  sha512.run = "d49c22d4982a33177fdd73c5ff15a68e663c3ff1ec9a45a40e5a8364371a25b536dd6c1dd963296ae998760178833b5f2c357119f41e7bb5a72061f0f9ad23fa";
+  sha512.doc = "21e9a7efd9fd6dc28be30f284285cc8c13b266eb03c9212b30f97b761c1383e1fb84a18e92437d331d3963068a68c61276cc1fd3446807bedc954a490fc490aa";
+  sha512.source = "4d513b6c9b320b9ddd8ec92fd8eae079134d351170122833e99557fdec7510938d8ef856c52e0a862a8cb8cdffa3894c160dfe085452e0cffc49db4d3fac6a79";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"semantic-markup" = {
+  stripPrefix = 0;
+  sha512.run = "e0e519f87b17fc26a3a30662e9ad5ee6637c2bc054c9d718925cb5b68e6855c1510ef75e8df28d09b676ab40e348b15b85057c6f64d5f5a7f526f84791e5c67e";
+  sha512.doc = "28c2448170a73203261c1762eab7b2aa176c7c798b2320592f6fb4863be2a3845c10df86479ae984d7279882e080addf0476cceb3507b8daa17c94606aeb93b2";
+  hasRunfiles = true;
+};
+"semaphor" = {
+  stripPrefix = 0;
+  sha512.run = "b8741be1544d8ab488632e05464cf607069f0d09df7a727bc05d06175dc16bff461d551e7130e01edbb53863d56fbf4cd0cc9085c51186e19e5f2fae986b400b";
+  sha512.doc = "ef0c85ca5e86a17d59c03255d679d54cc8fb36eec02c8546f29e1c514408559788d1dbe3ac7565224b320b71e9ad77979b1092fb0f098a1c48c3a7093b72b172";
+  hasRunfiles = true;
+};
+"seminar" = {
+  stripPrefix = 0;
+  sha512.run = "63173000935f741b7d1e7dab2fa0091bcb758ba36dfca0b6c745ae165f6b5f3aeea7972319078f175e231d3e0ebd3454d2241a2bc4f0f36ee51bac7bb7287a56";
+  sha512.doc = "0bc4ea04a561c8a8c17f4f6ea493fa98e12e93cefd58b0aeeb0b09823f2b97028d945f1c9199fd1a5ab10e0b695079a8d97608474a4d04640496737640a9993c";
+  hasRunfiles = true;
+  version = "1.62";
+};
+"semioneside" = {
+  stripPrefix = 0;
+  sha512.run = "cb3f20a7f766681f9b7748ea3a816fcd477e6685a159b071502716c708e0e1d5a2a33a5b210cd1e2a684a288d07079870ad243218dd74e80853a227fd445c884";
+  sha512.doc = "8d6b1ada214f99028ea9843b4d5a85a8a974a9ab52e8a7d9338d25341282d6f1c8ca4e7a24271ec20bc4be781f418f2ffb558ef4fe6e6f42d165bb24650b54da";
+  sha512.source = "1b8d0d90db12b52add0f7dae10cb16bac8a9260e0a6783762908a07a014dca294ea6c631ceac3a5d063705cf39fd1a57ce6b99f72c5da4d57d4a30cdafd25767";
+  hasRunfiles = true;
+  version = "0.41";
+};
+"semproc" = {
+  stripPrefix = 0;
+  sha512.run = "ac78e19197af3c72863ee4ca94842d596189d37c2d559ac1254f70fda1011943ddd7ce17b48f183b839a6610f8d7dbded2a0f2a18453823a0c0044a70841dcf2";
+  sha512.doc = "2c7e2a40348b098037001928d6f21f5a66c23967dc63296ce26736b006a46f9d9536fae9480c1f0d0db72ed59973a6140471bb110702fd5cb997fafe03133dee";
+  sha512.source = "7faf073ad7da9627b59509f41056df76658875d04651321389b3ae789e2d704691e494726635161eeab97786b8c8d6cd322e3ba83b3e1a779ff3d10a752fb51f";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"sepfootnotes" = {
+  stripPrefix = 0;
+  sha512.run = "a7333a9779ebca371aeef0a1348968d8b4649ca037e88f6e8a6f5224d13265202c8de8d2ce5dd89de170ddc348cfb04f5df92e249c122a608efa8fbab4daba98";
+  sha512.doc = "eb7d70eaec4bf58c85964f7a3692da09894c898f712a119fc0ffa42429be2e53b96ed6f569fcd37aff170d2b953543992bcc693e264ee1ec542c435be2723414";
+  hasRunfiles = true;
+  version = "0.3c";
+};
+"sepnum" = {
+  stripPrefix = 0;
+  sha512.run = "4ba90558d397f0c047ffeb01620d2d5ed4bc38431ddbd75d9a381fac58360d78270b8f22e761693a8a39176d1ab92c9da3b6bf92aaaa90b8ee20490f5b70f50d";
+  sha512.doc = "080b081b101ea57480e4c958e997f5b10d22c5de56a60c1f415248ba0564046560650ae589b29c73d185fa88334a26ca3412e996fcc1214ef0b9d20e71bf18fa";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"seqsplit" = {
+  stripPrefix = 0;
+  sha512.run = "02413d104e12aad40f093731e2d28d0354216d3d57e6f811609f398b8122bdbf906f78cef38f355562efb4e7df6dca314f8548d8d8c03a2a9404addc42f0e1f3";
+  sha512.doc = "0c49425b619ac62da4eb2392c51cb7726d9bab008910a88ec36b866717c8ac341be0903e3014ed36a30ac701fafc453a0e319470f2f65eb6775d6ff52b9f07e9";
+  sha512.source = "7349cf842e7142c5c13e46d16acc35535cf34be8a4985f9a581a4338ca54beffbd80fe2820123652f3ffc868bcfe1c995200ab918c99b19d6c2ee339b61354e3";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"serbian-apostrophe" = {
+  stripPrefix = 0;
+  sha512.run = "4e3998b6c3f5578929204c0b5f131b0ad4526057b50811253b6a90367327c63af5bec386aef54ae6c80be7a1ecdcc6875bbdca532fab864e61837cf16855750f";
+  sha512.doc = "38c8ac74b304ac992bad807f2727a3e75a727a77c5bfe5042e24a39ad305162e828ca0333963a3f91c5f26ca0324e7feea97dc6ab84c1cfdb6c26b05ed5f4fd5";
+  hasRunfiles = true;
+};
+"serbian-date-lat" = {
+  stripPrefix = 0;
+  sha512.run = "420b77a36a08e75f8020edffed704ff0398115a6bfe694fa46957ad8b35c58435ecde4c16176a72bbcbcd16139502f8fb679399852bfc9000df6d5f305fbb04e";
+  sha512.doc = "5c10fe13a4e1d6117ebfe8d737d50047dc97483c7a0cc287a9e79d367af50ec1cbdc0800161919b92c6d82774c9e756970db71344259028c254fbf2c1fe86219";
+  hasRunfiles = true;
+};
+"serbian-def-cyr" = {
+  stripPrefix = 0;
+  sha512.run = "6cbd1da1160519914db1a2269a54f1f81442d84750b15179e4a0f4e5373512c959542a789ef39a2803b68030bd6a8001fde777e907e85852703ff696ec9e5113";
+  sha512.doc = "0f2a2fb44eaef8e0eb01e12260fa310d661501c3e1dacde2882199ce4bd5323c837704fd50e8db5b4ba567a38038b37be28fd834874262de2e3ad36b65816498";
+  hasRunfiles = true;
+};
+"serbian-lig" = {
+  stripPrefix = 0;
+  sha512.run = "cc8961bd7d6b0fd9226b663a6913e2312ba61b9dec8479fe4fb573b4dbbd7a74b82415fe1c83baa30c33f1bfaf672f02342997d45cd52096ed840544704fd062";
+  sha512.doc = "696c8d37d417b797beec4c4cbb5d7997c20391e98a875c59a1c803263e2ad64d6fcd2e4541a50364fce0176a472b201b99ceba0539cfa156814ea6e8cfa660e1";
+  hasRunfiles = true;
+};
+"sesamanuel" = {
+  stripPrefix = 0;
+  sha512.run = "bb7b38ff9e6494fb3150602008a66df5fd8c35dcb52a2da196cd177bcffeb40e284fa493b296f01f22864a5bf25d89fb4c079ff4d9fffacdf37dfc9de9256518";
+  sha512.doc = "cd144c93693367bdda658fb1ecd424715849fa57f0aded627125db2703947c8b5886df9ec08595592b6900327b42e8cff00f0c69967075321bd7cd1064054f3b";
+  sha512.source = "4a5dd4a8da6a8719f47d4b4bfb5e3a6c0e1498369fbcf7f9fd48304906bbff383793329959b69f13a75bcf3d01b888325c23079b4503aa779f464c2864560416";
+  hasRunfiles = true;
+  version = "0.6";
+};
+"sesstime" = {
+  stripPrefix = 0;
+  sha512.run = "5c5ab4808645230c6563a08b8243f27fad02a76fa56296f4c7e1b17d2140ad0c9ab0b6ed02e27240f596113019afbed52dc5a9f5efd874ba7783c921b81416c9";
+  sha512.doc = "93b986ea6853761fae06b297b951a7a46ffee403a4fc980aa1afb7cc42c15fe753797eecbacacbfb49b0119ac9e24dc105975acf72852eb0265dc4586f397bc2";
+  sha512.source = "8f3200ab63d77bf24aa9b2cd51ac460f086cb82599e9099b41614f039cf569f4fba23f2dcd59174623037046bacfd5a11ff59f140b09f373edb6346292db7910";
+  hasRunfiles = true;
+  version = "1.12";
+};
+"setdeck" = {
+  stripPrefix = 0;
+  sha512.run = "817474bc928883f4bbe97391a477bf492a4e339879fc85d7aec3ca932f9b46c310f8fec5b732deb2196c705c2bd3a22721376ea8289a1bbdc12555447f12f757";
+  sha512.doc = "c27f7ab563f35293ee6019560f643d562ff2bf06747402930c767031a8dccffac0ebae9cd16b9e3009b5883f594c541ccf4c38883aa89f4256f7db83e378e1e9";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"setspace" = {
+  stripPrefix = 0;
+  sha512.run = "d7e7f2ea7ea8ad3c0b2437a04a965a25b37d96fcc03e92a524f823e80316569db67ca4b1d9313c27e487d4914f4a7e1b4d088ba8fb6c1cb27040552cbb4c8697";
+  sha512.doc = "6af94bda31c7276e7872286a1199363dc1de52c04f8cc8eb5825abda675657454f1349b619309014e934a9e5d3b80dd8d4b7a590c05d6ca2993ad3d8ceabd7fe";
+  hasRunfiles = true;
+  version = "6.7a";
+};
+"seuthesis" = {
+  stripPrefix = 0;
+  sha512.run = "a36006ff6a093cd589a0e328c60e7e78afc160ab45746e562a43a8944b2ab331643261f56890497b70449f76be43c0b226642cc5570dccfe0d6240181b20bcb3";
+  sha512.doc = "5bbc5770bc42c62da7ca569b10558dc02bbe7fda2a463a3a2a78bc76fda3f1d0e7023c311f62a91bef73ae3c4026561403284404acc6bc72cb2e308ad4092ab8";
+  sha512.source = "a442b5ca4e1e8a4a3f8d331e5575066a8c63d1521d1f774fa7d386a8e42b09a2c4727fae1f0a51a31c6a98c173113349738caac8991d50e4459082a874fed1ad";
+  hasRunfiles = true;
+  version = "2.1.2";
+};
+"seuthesix" = {
+  stripPrefix = 0;
+  sha512.run = "8f2aa388faf3fc41cdda54ac44631dc2f0737b727f3af27c41bc268223d2f3f6353dc24f067ec487fe5f3ced5c7837ee6f60d46de3950a3a3c9573df77cc725a";
+  sha512.doc = "1d54dacc742d558af5fb006cb4f26e073bbf6a3a572b7e81fbacf691995a4a96c72251225fb7cff598c930a4c9984d0d01d080c797f202f7e30aced20b8b3e5b";
+  sha512.source = "fbc848315e2b76ac915aa6abc0a9e7bf2f63c4af716ccf65c9af3ae05e049952703c1f86db97a5825b92f43dc2d1163e6544c30fcfce4b672272b4ba9057c171";
+  hasRunfiles = true;
+  version = "1.0.1";
+};
+"sexam" = {
+  stripPrefix = 0;
+  sha512.run = "60fc18bf706b787b9bc59d1ff12e62fc3b69f5c6815a629f6743c8ff3fbbb2948c145278805888b235756beac5dde5613c10fe4ce20bb6536b4a3d77a2713569";
+  sha512.doc = "0d2d5e2e5214622ea6b398c0b0f7a297a3f247ef3df0ed696c6faed94527b2edb6564c917d182177f8f3b44d7cd0e14ef4ac186c89113ad74e3ea70475ce1179";
+  hasRunfiles = true;
+  version = "1";
+};
+"sf298" = {
+  stripPrefix = 0;
+  sha512.run = "c9a262481a01019010a645c321c675bc93e3e0c6627b693bce53a808bc9366d7915c19f97871786001fbf61b589f2cef274aba005681f9b32094644568d0f2ec";
+  sha512.doc = "03b1d51626e6ec0b076f4c2fb5b34daf490a671df69edef7235a6c8c77b2475e79604c7d49aed3c7d756c9fb781a7398a27596ab9b183b942119ee86385ec612";
+  sha512.source = "af4d0437e6c79c7bf0975f8e14bd8f19675223849b04b9e7b1d526ccc70a8a4a6d6773f86f9ddbcb98329368eff8c7f41cab4f2468f0100b8f5f840288184826";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"sffms" = {
+  stripPrefix = 0;
+  sha512.run = "ea7fbce545b9e9dc8b804e293239fdd491bf1293875fa841afc5a33ddcac7acddf243194e36f8958df4d23c71ad9b83348fda57dc261f211b49fc137b66ff6b2";
+  sha512.doc = "e1702249f2516dde93887403833f9261f73e90ce04bb97d4052de1a28b9f5bcd5729d1d9a68759ea92271b46cbbebed39565e8c30248af4c894c347e4b9b75a9";
+  sha512.source = "50fec199dddd2509682af8910db1cecaba7359be24a1666e156715e4613571c6f48c27eb813efaab2d6a4fd01e0e9d110021a42afca501a75a2ee02f7c80499e";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"sfg" = {
+  stripPrefix = 0;
+  sha512.run = "d90305b5fbac3e06bc3195b802b4ef78f7c6cfb4f0592dfd300839dd608150e1ad08fc7479fe6d8df4f2429ad6b7f81692d9723dde198991fc9626565cb38578";
+  sha512.doc = "26c17b606f0cfb4e199755f7f16eec16cbe379a786a88bec2d77d983d17107d86bf8da23474bc3450f8467d18028f2f41a314c83565916cf3ac3e97c5c079267";
+  hasRunfiles = true;
+  version = "0.91";
+};
+"sfmath" = {
+  stripPrefix = 0;
+  sha512.run = "7ba73610785c9270e8741ba0137701677575e38cac79976d89e2f5768804ff52117c5fcbaab9b260be522f174458a18d2d70d82c2da201e7fd6a91fe4bbdf6fb";
+  hasRunfiles = true;
+  version = "0.8";
+};
+"sgame" = {
+  stripPrefix = 0;
+  sha512.run = "60e1c4d7f68bd6d39e081d49bfa1ecfa7dc56b940172719b4d6d0f2e87456c4b511ac29bb1884f7c290e7b226eb6ecae8f2ce4de3f7f5fbbd21934c440395ab7";
+  sha512.doc = "29f4ee374c7b9d07274fb6f622c0769ff6977ce522ae25fa24571c0b7e60f1e120e4e26d37c6c340372fc0a2dde71a25121fa9538a35aa100e21637d5c79c874";
+  hasRunfiles = true;
+  version = "2.15";
+};
+"shade" = {
+  stripPrefix = 0;
+  sha512.run = "968be382e1f82029e7e06f5ed34473fc20fd38dc758b97fec6dbf015ca13c3604dd6b7638dcad2f80be474ad001c47ec86e75e8d9947bde26053873376e9e068";
+  sha512.doc = "0c9ec337ed4c9bba949e6b449368868856d652b2f5ac7c70dd08a9daaf8a3ed3be4008a91c003c731c97f7e4132f571c44ea9d4a4529f7b0ac9be11a673310ff";
+  hasRunfiles = true;
+  version = "1";
+};
+"shadethm" = {
+  stripPrefix = 0;
+  sha512.run = "e86b448ac347677f4439e3fdf8d7d3448dee3d29529e72fd1c11e9b98af71dba6101ab3b3a4a988b6daeef4c1f96ba092426b109220d70289f43f12bd010f735";
+  sha512.doc = "b99b7c5eae48fa6a1af0fe25e71d7dcf65433e7ae0b2f712fbe7ff3569a66c10fde956287df9dd0bdf0c2b21610b295517a2065d9cba81a3d305e843e81d415f";
+  hasRunfiles = true;
+};
+"shadow" = {
+  stripPrefix = 0;
+  sha512.run = "885bca1090b93545f59b387e952998f65dee0931fb5b680d06667c3bb8172e2aad37e840942b9495134b421bb40b871633eb5de941b3a257618751e789128ca6";
+  sha512.doc = "402e64195e247cd2c5106e3bd621705b80c006b2f6cf0b1da14ea459acb7dd97e2ebeda87ec118be3e73bf76edebe3067330498a2875c52c4248add70d7a0a25";
+  hasRunfiles = true;
+};
+"shadowtext" = {
+  stripPrefix = 0;
+  sha512.run = "59ab708b0f8987838cafe864cdcd68aad5aceb7cb4b3ab2b479ec4fbd15e268ba4fdd1b0143b7c247cc186a825d99ad810839221a391eafd5146f0a46865e23d";
+  sha512.doc = "a89bd6ab160e364af06e26d9bbb88988c286befb5dfe4e4bdfc7c511811ef4a1ef630708d4a7ff32cb0ab6831dbee54d49a84376ee9366bd422d5689d86db404";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"shapepar" = {
+  stripPrefix = 0;
+  sha512.run = "407fb09d162a3f361c7182f23b010d25bf5d0d4d645780c1c9679be422a50f7181a8184ea391505d258afda822059f0d7d60ad24321adffa05f37d56d0376605";
+  sha512.doc = "4db069b9e52935f0ef1463e40999b7f7893ae12b68f6bb07a105f83199b839e6ca3366b7367f6b38f79c4febfbf3a8c1f88115244f59a306870fa4617ade478a";
+  hasRunfiles = true;
+  version = "2.2";
+};
+"shapes" = {
+  stripPrefix = 0;
+  sha512.run = "4e082b6b61ae9f2d02c6bdf7fe5beeb6b6384b2718c1644b945b175bc17c951ec7890fe7e81eb59faea4ae86da93eaf51467450cd61d223e734408e624bd8abb";
+  sha512.doc = "2c295a28748f8df117a5abf16a758b079d7481f579e1bb571fc758bae505860e1a1b82f9615259b14359eb4ea8f43be82de6ae6d761225ea76bc0da167b6786c";
+  sha512.source = "58ccff2be6db013bb66e606ebec52b0f86b4ab3e2066d9191f18da0534d2187fe6a3944cf179b6b807025182cbd40be8c24f190c5938bf4e4264ba492a845be1";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"shdoc" = {
+  stripPrefix = 0;
+  sha512.run = "e72e5d88966ab88ce2ea331f2989a949f3da30cb1066a0501fe8770f077f8aaf15803d9337ab266374364fdb7b35507c6d3cd181e1fb472f6d39b6ef94c08c1f";
+  sha512.doc = "38c3a7302edd2e38e3196b4d3935bc001f83fc71ed50ca8c3563ccf82e9e0729c65baf0b95db0ac637cd037cd572ba557586bc85230ff6014f63a8fe0602d9d1";
+  sha512.source = "8de0b05b8cfaf13d3f3c1192c718f5663bc5d1e5d9f67395956bc18d8f97c6acd0811660c02c3dd087f617098d0ec810a69dc31a20e157fde69431eaae4047c4";
+  hasRunfiles = true;
+  version = "2.1b";
+};
+"shipunov" = {
+  stripPrefix = 0;
+  sha512.run = "e31326135e93eaddf9f07eb0a746c83b9b6b7a7569daccc2b4ae0439664ce4a9cb2edaedc0e3ff727a4896fea43411c9cef0f3fb8455b1616de04e03b54b257a";
+  sha512.doc = "3c04f8dec84f3ad87572f6c180ec783f9a879b887b4c7f860097ac03b297dd7c4a4385cb402ea0b7f09176d711050ca7813e51607cf7bba871e191ec35d9af88";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"shobhika" = {
+  stripPrefix = 0;
+  sha512.run = "86050c89e5939b8ffc2148f9269a48dc66f8adf396cb883a7018a1a8f123cb602f216f652f56715bebbdb7b0577a8d0cc799c847898543a4cbd22e478524b127";
+  sha512.doc = "f5d9d05f54876bab260043e698fd746c95b59b04ea5b2df7244b11af30bb78e5cbb6e3511bb75d775e1bc649082575192ccbcb68fcd32b9816879b5cbf3277ba";
+  hasRunfiles = true;
+  version = "1.05";
+};
+"short-math-guide" = {
+  stripPrefix = 0;
+  sha512.run = "6e2c131cb3a2ce85a6718a8dab1cc52fa5dab7a3db34575dcfb0a33e6a3f3ba6025eccb82a2e07a198243bd24c5070a931e591003a768c4a057f70659e442155";
+  sha512.doc = "0feaf4b3cafbac8fc78855250dc39858b0b8326b803c851efd831f36476dac2f1ce86083c11476e36ac88b44a2a8d25094f9203c774044306536fcb2b261a184";
+  version = "2.0";
+};
+"shorttoc" = {
+  stripPrefix = 0;
+  sha512.run = "6e78bca7425e0b23d7520af19494d9de303b86fae7a013ef85b2d512ee86be1f478ede2293650b435ab579811e444b570995e2ae8720afc60b42c0c26d7489a6";
+  sha512.doc = "03090924cdde619877b271fbd70761035b5da1f2278a3642b471a86e83559da316558a752d85716242001f40ca403a985d036750218e78d873a4920905c5a652";
+  sha512.source = "2841e846e2e691864e3412c52c3cb2130462b2b94f01ab9ccfba7cad05392db2b63ce3cd3ce60896a7861969ea20fdd3b1918a69e122316149af3fddf1b9c492";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"show2e" = {
+  stripPrefix = 0;
+  sha512.run = "702d0913a299b68bedec15c697868a70f058957dbd3a2dd2c503bc21c8a250dc7601e6348080bb394a38108bcd2f5ee67796a888183aa181c9f88a72e7666580";
+  sha512.doc = "a427f7126ded4251c255fcaf2c381f7c00d0d0e55253804cbe631ac59be1bd51e7ba2ee51110af86bcee27d73698bb7baa323fef8e23a41000928b242b0be282";
+  sha512.source = "3a6bb6fbc35b5f6b1cae00d5c63c16ea13af270cbf90f57761f71076b26130272924154b8b0aac60cda41d27b75db4f1edfc82101f38b29e9641a4e02cb6c2a2";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"showcharinbox" = {
+  stripPrefix = 0;
+  sha512.run = "9cb18e80701d22e167b026767068e0fc0a7b6c4cdbc9014991f10ecd76d37614983591c931972584c50e0d6e35abee70ae3079f7dd8c855d33d1e4ea06693d25";
+  sha512.doc = "47dc7121ed852931bdc5bc38b7fb4dfda6616b8b0ce649d90da71c7a4cb6084ddd69e07596dd4179b5654fa9a54fcedef6949ac4778b449ad14740058e237dad";
+  sha512.source = "0c3ee2d6c00183936b57ba8e44d274baae8d90b8c089f6b5f3384c5928c703f22c87ac2781a8399189e028d6503c3e154499e85ac6b1ae69c7cb27eb29ee11a3";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"showdim" = {
+  stripPrefix = 0;
+  sha512.run = "07c409f3d30def6894a787d9c2f7366abf6ee4248386e9d5b2e4f7858d692c7cd3e72871ff02c73a39a190ac36ccbaf5fe16e8e1b7b328be80a9ba041d12feb7";
+  sha512.doc = "ba76568009149bec7484b4dbe7bede8e516a2c2ad20c77c70f0357e865c66751aa4f3d8c92c59effa1ac12e03b3b8c500c65708547ddf52458b0ce90def8fc98";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"showexpl" = {
+  stripPrefix = 0;
+  sha512.run = "b937f9824793206b0fa55eb77f6c2688364d712fef66c63244a776c95e733d2b0e4535a2d63b23ad446e50fa52804bd99305ff20bce6d74e880d3fdfec432924";
+  sha512.doc = "90fbef0962c609d4a50aac3840c703c6d421553425dc0d41a62883e012e4e2a8627a2f98f499b8fe984bfa57b597ee65e274d6e5bb9f30aba96b8b1bcafe0211";
+  sha512.source = "afac56c2591c97fdb6b48ceba1acc2b4947a0d0778f3fcd1db966d3782a89388d09599077c1684c4de69cb61ee5d1018fe085ff7b57a6a8426b1936454066228";
+  hasRunfiles = true;
+  version = "0.3o";
+};
+"showhyphens" = {
+  stripPrefix = 0;
+  sha512.run = "e3dc83cf25d0006e4ed0b2181a7cfaa81a2c7d6a7152d9202b2d9ccc876a773045abcb055709a33d69f1efd80c11edd642364e13fde7991730755d944c35afe4";
+  sha512.doc = "2e87bf2fb7eb014d28e44634fa8c307bcbfa4e774c1b279a5242b3c99e569dc1eb64d5f0ba30958d0ca84c5c2bd770ce3de81af98981a3e01a2c5bc8575c9e02";
+  hasRunfiles = true;
+  version = "0.5c";
+};
+"showlabels" = {
+  stripPrefix = 0;
+  sha512.run = "4d805bcd319df51219c956fce18fffe3b91aad3f468f54f5b6fd9ca15f8c24df10e1092252ba6870fd406c024deb054c60d7f64dfef7194c45b92a8a78a9da1d";
+  sha512.doc = "0a8cf29e85526e92df738364607e31927223458a969c117d40a0e9cf3470e5c4050107b9fe915ad2a23720a2dd4f5faa1d43d9737b9b7a6f6105de3a36e9888b";
+  sha512.source = "eb0dd894327bd6f4591a3a57c52af10e73ae07f7d933ff3310012d46b09d1572adac0eb6a8a22ff03ced5f7832a017b58ef809d5fd914103fb569b42cfb2abfa";
+  hasRunfiles = true;
+  version = "1.8";
+};
+"showtags" = {
+  stripPrefix = 0;
+  sha512.run = "b70dc03f22838dab65631d39d8690897d4a5c71b5451775e85cdc3ff600d63afc29bd28e49aa64a5a2467143f4a84d62f5a2a9af4a8365e0a867d6a46e9de93b";
+  sha512.doc = "3e1efebe8edd469e66b18aea9d9a3614b753a43ac61f5a31b57fccc1b45047aaaee8f80d156932671f9ae7457fc627732f1f72c65fca42946280c1182d8960de";
+  hasRunfiles = true;
+  version = "1.05";
+};
+"shuffle" = {
+  stripPrefix = 0;
+  sha512.run = "62b456ae961d34908fc25cc085bfa04d39e70f2641d65dc8e0eda419ec96a328798cc258162ebe065285f3ee1088e6076525ccbd8c0f7c0800024f371bdee65d";
+  sha512.doc = "1b6427fa0cf98651a219f1cf6f15a400c09ea924bf0dcea7d48ce0665a5f1828ad64513f87089ea48d02d489d8020c90c661bac60c069601be437c77364813d4";
+  sha512.source = "250729a95e91eef9c1f9b5364aa3b0a1f03a75805845c773f82b26c3782764d6f866f33391aed2f0cbb167d016b06593c015e6fb2aa9b7ababf33f215fb92647";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"sidecap" = {
+  stripPrefix = 0;
+  sha512.run = "c0b775c16ea9acc7de952c6d08d49f57ac4517d5a78e822255176ee1f570c17d584b34821a255ec10e7fbb9334fc7904147bc4d613ad4db9553a3917f737b924";
+  sha512.doc = "5bee3d448386a2bd508dcae495c6fb83806542680db7c5fe8cf35ea09a955df01e5c01fa64c28b64f0bb9a3dc0411fc68a835e1b0ae9d46c1387f544538d26de";
+  sha512.source = "b69fcf81ba9d05c20c64b7d71369ff25a0cc8185c914935cc986635ccf1ca9ce709cbe2f12f5e671a5b946f121950b3f6c6edb9d28e736959c5ccdf7fdbea405";
+  hasRunfiles = true;
+  version = "1.6f";
+};
+"sidenotes" = {
+  stripPrefix = 0;
+  sha512.run = "4e8fc132974ce90f3e08bb3b2770c88faba2dfd7a9f63bbf0b6b900811fbdbb2c625015e8f181968918a5965a32da8ffccf2e5798f44ad4327a6bbbda785c708";
+  sha512.doc = "944b4d77b6923328732038d273aa74b14689e5177b4d609c81735e189556cea7f66ce81c89c41e5ca0d6b9871e412e21d836024a5290f31a3fc419b7af4bb34e";
+  sha512.source = "e18b26b37882cb7b5ab6fd1f994b2a0bd38e9872ba3795c4a5b8269f1b0099e199407200b84bcc6c51eb0f882993a835aa94cc1cc409c5020dd5387280203d35";
+  hasRunfiles = true;
+  version = "1.00";
+};
+"sides" = {
+  stripPrefix = 0;
+  sha512.run = "739e26e0c0b77d75e91f2a3a18996aa55ee1163a2bee6d489db4ba3b0864b51572c55ec53441946f16cb87694425d09e613abd2223fba2941fea4be137341b10";
+  sha512.doc = "653a8472a278bb1d33d9f86559398b62e32b521c6ce8dd977dbbc4f44183e37b95378ea4b29356948735c42925f9ed25153cc6a9009341ff01d80befe2bcddb3";
+  hasRunfiles = true;
+};
+"signchart" = {
+  stripPrefix = 0;
+  sha512.run = "d379bb1a9fecc06f4e48419d0f4f49e50b6b276e15e64992ee7e154154eefc24e71c060066de3bf9e97da6c8e62b78208f3a01918150cd2ef51231b5abaee44e";
+  sha512.doc = "7b140f890f3342ba6b2d25385dcae6925d8e445a862af703578f455b73c69cb71f4b9b5a933ac8b1a16178874f71c80d124c352b5aff4d7bf3dad6f1aa5a3874";
+  sha512.source = "c2f141c1e0a279d5a76cddf97d5dcf24e35cb219d0a0114d5d2f91a6b24bde3b900b168225cc6afa4c623c9011bd373388799a0448ff588ffefadf7109a24af6";
+  hasRunfiles = true;
+  version = "1.01";
+};
+"silence" = {
+  stripPrefix = 0;
+  sha512.run = "95f4f095e0f70dcd11482be4f6d52c5ea7a06ad820c08386ad956b9bb9ad593410e59fe9bb5904c3242594d466c495e7793718d4cb707ed3edd1d17ac3c1c1a8";
+  sha512.doc = "988df943eaf9337145d081de38ac22389bbffd3e94408b1cbb5de7605cccb47e2fa837813d4647c339d978b5b9b3e82e6d9859b840e89c09c95dd9572db0601b";
+  sha512.source = "7a628ca9efcc34863f064783a1e65e7bfee2a735a2457413d5b938e50b823fdfc6137f56041885e2c4910119ac756a5d6eecff91d9e99eb2bb85d2cd73f273b3";
+  hasRunfiles = true;
+  version = "1.5b";
+};
+"simple-resume-cv" = {
+  stripPrefix = 0;
+  sha512.run = "996341ce711f6f9a68ccd7e0b315da98eed8f4737d44b8dbd9881c2a76c8ef2d04b1c956333b0e33997d57e0b62bcb2485029283bb4f4711c2f8e38c177755d7";
+  sha512.doc = "a380b2a498bde69cef1ba2401e16886d35edb40e3338963bcbd6e862da3e54f547e7900a18f668515b3ff178462a4ea0d41bc228b6b6e7ea8b0693e295231e92";
+  hasRunfiles = true;
+};
+"simple-thesis-dissertation" = {
+  stripPrefix = 0;
+  sha512.run = "201826e649acbc8dde933da3d141408ef3e4f3bc5daffbd520a19885af612f17de2618fe7e8c78a419b6e5e4eeeaa36a2fcb3db6f610df2189e01e0b4a66e9e3";
+  sha512.doc = "8dd82147b1096f728fd52a56c39309d0f421abdd972a1297b88b516e0a5ecf8387a3accc508047bcd3996ab81d778dbdd221934e2bb4c96e1ef2a59cd0fc6995";
+  hasRunfiles = true;
+};
+"simplecd" = {
+  stripPrefix = 0;
+  sha512.run = "5fe4024ce7991242fd60b8a87c88605f68ef9595895857b56981b35dabe96c97f9af684fc5ca9c3089ba96791e076512ccd549ce70071d215eaed4e731145b30";
+  sha512.doc = "5cd208f8869dc989542bf028c216fbddec5bfb285ffc18c25cfea928035946e903cc2b61de630125d8e8deea772f7f20cab552505538eaa5d3aecaef8192abec";
+  sha512.source = "9b26b5fb78bfeb1115af219615c7bcf2ee85c5878ff18807444642e103abccda517c3d701bdfd655f5f9e3d1dc0374c316db96d5d7b0ab9addad74b8d7ecb5f3";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"simplecv" = {
+  stripPrefix = 0;
+  sha512.run = "c67e9200925ac86386efaab35a8edbf20f0fda700c00c3b0350eadbe62f39fc02f502493a73acc768a4727ad1162561d7baf38193d57d1fefb4c8083ebe38c35";
+  sha512.doc = "dbf087e0659f11b4dc0cf40a6826cc45f48b8155d9148262877a0d51f5766888780698d792f055666766f029ac6f5384b41c0fc41e1c84548582e665eccc0f20";
+  sha512.source = "cc8f96dbb9c99cf9567171e65276d18bc8faf4fa9980ca1fb60fb5fe1ab250d462c22af29105501d72ac7ff0421104be78f097bf6afe8b88dfe48932ac19fd70";
+  hasRunfiles = true;
+  version = "1.6a";
+};
+"simpleinvoice" = {
+  stripPrefix = 0;
+  sha512.run = "8d3d905dd9dc418503bde7cd51c90ff6fc6f688502ff871040f9eb6bf96b6c1ef999d3dd98b16c8739ce9518a22a8e99a23b5cc66c437504b3837c30ea19cca1";
+  sha512.doc = "81e5ff2bf76f2b35549feb9b6336bd04b9273d4e6b951ee327101d4e5a5d3c429276735238b63c3b2ee03466b477ca2d7990a68615c1d0eee4f12a37d6b65472";
+  hasRunfiles = true;
+};
+"simplekv" = {
+  stripPrefix = 0;
+  sha512.run = "a67e5e977a4a14b32f3dcf08ffdf4b481a3926e9a5a7259b19aff07c4e311b223edacfd5bef8f9ecac4742dc94e7c65400cb9d883677f96d3d7d1d6256efe5be";
+  sha512.doc = "6a0e0a7200bbfad56ad6729cb375fd11e105cfc89ba93fe592d14755a88d819b69dc3a383f9fe3c59f8a9076450ca5fd75085101d7ceff4a62e2d738b0907f15";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"simpleoptics" = {
+  stripPrefix = 0;
+  sha512.run = "85da18717b1907dd50fec7ecab0f90cc0f26ada24965611ed9f2a3114b46e58affba11d8f71173e4c2858054670814a67061587408a02343df355db18f3c74a7";
+  sha512.doc = "b1ce0a90eef3755141db1f533da69959f8e356fd1a8028765833fe613e6427101a1d71776ad01108fe0dddb83bd786977e644124806eeeb036e5c011986664f6";
+  hasRunfiles = true;
+  version = "1.0.0";
+};
+"simpler-wick" = {
+  stripPrefix = 0;
+  sha512.run = "2bead248c2380e19fb19012ba2cf7a41fdd113f48a372011c27ebac0820236500c5e49e5235e2c52fcc5a0f9c79f61cbf76a5d6de86322bc40382f5499216783";
+  sha512.doc = "d8a45e06707d3e6c39e36d83020f0a2d4654cab508d91e47022320e67454d08958cfd6d3872c5ae40539f29b03080915e136746452afb9f2e74fe8be2ec20bc1";
+  hasRunfiles = true;
+  version = "1.0.0";
+};
+"simplewick" = {
+  stripPrefix = 0;
+  sha512.run = "86aab23f8d19e9fa5a6251f8f725ada87b66a71a3024253d8b56f3edcc20f26695b2194b710f691ff9ed0713c993a8652447674ec84d4084c3354791244a6f10";
+  sha512.doc = "bf0c3b8724ed8cc41635f45001fa04f655a7b37792c5b0e632578b066649c3bde1f894c3ab739ea2bb49f6e4f65e63fd7cd7d515ea15b53ab5894778a7918d13";
+  sha512.source = "45d26e7044fe0928eb8e572f0333bee64c008c2e4d1536a0145939ce0f3392961e72bd7fc70c35b2607b2a241249d13e44e433b373b57898193185a808f128d4";
+  hasRunfiles = true;
+  version = "1.2a";
+};
+"simplified-latex" = {
+  stripPrefix = 0;
+  sha512.run = "31313aede3900675d183bfcff0045df5fa7719b982df1822823c15d645c7ef64c0b46e0f1690d98d30b2a6057e082684f23cb61a490fb2217887d0f20231ce73";
+  sha512.doc = "f5bf92ed89cfc83f306cd4b2599446a11b73f73a0b82afbd0f441e26d837e6f436913bd2df18585c5e215fa0504bfee3d5d4f5ef4da8925161f85c70c14045e6";
+};
+"simurgh" = {
+  stripPrefix = 0;
+  sha512.run = "11b77f831aff6796e41ccf2024496ae1c9d4b9b5f4c029daf33e0eb4b4fd3d1e5c78137b945e3c9fe7a16380365fb88165a46e614dc3078657ce025a55f90d44";
+  sha512.doc = "30ddd7a9bbf3f568ad4876336228842651d8f95eb5f21df81ac524b99a7a695e68e0469f79867668dc3b9913cf223b72a22f6a0d0c818233c081ba90ac67de1a";
+  hasRunfiles = true;
+  version = "0.01b";
+};
+"sitem" = {
+  stripPrefix = 0;
+  sha512.run = "64a34fcf0769ed4ab4b201facc056b890a89009e1847e9ca65fb405e1c1144225e8fff59c1a906341521bba5d39e3338900a9a35aff5bb716a5aff5e6aa4d49a";
+  sha512.doc = "af74d7b4f4dfce45e543494344fa32f4f4d55435034cc1b23b24b333f89d54d0b8c9d0a1247561bb7182d3841fb04b7b3531be847a6fed3db212497ef2ccec3c";
+  sha512.source = "9aa058eac9367ea31804b5c2983873f16d1c74f598fb0967f43257a963a38aeb7d578ddd596dbee87d942d87ece9188c6fe0f5e8734751325121195d9d348769";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"siunitx" = {
+  stripPrefix = 0;
+  sha512.run = "6f1fc4ad2face3958cc6bb1a829ff99e8a0dffcafc88142207ee699f2b182a7b55c52fae4eff108daaf8e3603e309eed280de95588132d1ccce726eccf0a0cad";
+  sha512.doc = "99c0e95e386a898647124dc38d20b36546d402c0d3c76983de401f336c73e9b02936ae2401225bfba2f17823a734e1f51d0684ee61a9b404743de95c8ed89723";
+  sha512.source = "4cab6d4c7958021f2ee6a0f3306b542678b4f80b408a7b5fce7fd25772fa5ad5ee5620288ffaef02f3e143c1130ada1aaa3206dc15161eeff186092f6b8e23aa";
+  hasRunfiles = true;
+  version = "2.7t";
+};
+"skak" = {
+  stripPrefix = 0;
+  sha512.run = "7bf473f1f35fa05c1cc7cccec212b035619382ce850c287a6b0734cd52182046df35133bd919a335532db9fd5327d2038ce1c3e98342055d93a5dc3b16028697";
+  sha512.doc = "443d98538fb732bfe9f3df26e05e46be54641006df255d3084697301cfa93f48cb8d307a9a5b58f25742b96065658f446b52968c3bd8ce14fdc864f32cb920e4";
+  hasRunfiles = true;
+  version = "1.5.3";
+};
+"skaknew" = {
+  stripPrefix = 0;
+  sha512.run = "879107f0bb96441082ccc4afb560e4fd0f625e7fb7cab84ebbd642af1ef180bc27540eb9ff26c689039dd6abb11e9b88bcea30d5b1e75b40f0e3499c981ae6e2";
+  sha512.doc = "8c26115910f2e9a9ae28e1b6c0933db3308c9f59eb151bb37b23de3f0f790b9726aef895def0826e00928b75753d925c5c9db0a6b91ebf7035fad5a4e473a315";
+  hasRunfiles = true;
+};
+"skb" = {
+  stripPrefix = 0;
+  sha512.run = "5c2e0e7310898e258505cf438ad91650fbcef6b720e9d05b9ddd241ceca3eea0ccc3a71b6ac38acee58d8e205b8352ad7abbdc277596ac74f6a5cf0ca805a0d7";
+  sha512.doc = "29aa9629f84a481cee1871b92b49e1a34683092759864f1e612ef4f7b3862a9ddf567b2d20fae3f99d5946de43055de2dae8ad326000e344383c854eb9ff4f20";
+  sha512.source = "fd0f3a1d4cf3fa189ef0fc8bbbb35586a39aabbc733fba3aa9d3fc48d920c416316a4a19d88583ea42b1a4c38baf4ec75cf0eec78b68a5434f3ac4578d56ea9f";
+  hasRunfiles = true;
+  version = "0.52";
+};
+"skdoc" = {
+  stripPrefix = 0;
+  sha512.run = "3f4bf340f6076f00101cc8be20d284d487672d544f0c17efe41cc1b6f469df90022455f23b790a8289151cbcc81cc3f1e846eb242321221ca290d97ead9ff2a8";
+  sha512.doc = "b3a4972162cf366c5db5820b0075871f651c817a36c915841717d4856b5078a9de45b7043ac1cac0bb8e4b9f02cfd0a89fdb53b0723475950c182bfe3ea6bff9";
+  sha512.source = "cb4f18a74cbd84e1d75f7c024746d161ef62c79a2be62fd72d33a8a2ec3c8a8594f8ded5721a390fa29b8b31f1b6e77bad65c96c82ffb2299c58a4446204de81";
+  hasRunfiles = true;
+  version = "1.5b";
+};
+"skeycommand" = {
+  stripPrefix = 0;
+  sha512.run = "0aabcf0a47ffbdaa2f88bfb970f844df36cfa30f2e5ff02cbd9dba2179fd871c2ae1f979a99e70f3f7f2ab2589b7ecbaa6f999352559100bfaefcbe7f6ec16a8";
+  sha512.doc = "26f7e544e9b1b75fe7131d409c3083c39914424c66051e46535de5415383d82e48a3e2c1d35e34e5bac624a034f2e14623c8cd5b6844707b09fd531daaf7c544";
+  hasRunfiles = true;
+  version = "0.4";
+};
+"skeyval" = {
+  stripPrefix = 0;
+  sha512.run = "151a705f5e62dc80e8a470a7ce39cf197933452a35b296e70790d7ec0f6667f24acbc0c643db6c402ca1e9b9735f34be388efca5a5e5951725e8f00bb8d2833f";
+  sha512.doc = "97bf20706cd14e0b479221c6ed96e56754aca13d7b72f1d7bedec6117d159caca2a4e9a931d3d8311f593a538985d8e4e5bb9d5a76a653d72aa8d094a66e9e92";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"skmath" = {
+  stripPrefix = 0;
+  sha512.run = "6cbc67d9a6fb9cb6a3d8da38ff83bbb6dbd28c5e3e81a07a1b7292472d9064f321206ebd4ac1917d80f138f9b9cf91c008b8e3eac27ef0a77ff2073cab08eab1";
+  sha512.doc = "ce579b82a84f81169bf1a6cc37fff0c2e7c4e1570d0cbe2eb143dc8ac6dc082fa3cdaecae5a31791aa590c89fb74a58a4451811ec66d38eaa146520ff16e7471";
+  sha512.source = "d5101fecf8963f78b9e202c9d537723dbea069558cb764fc66344862cbcedfd81ecd3d923ee2f8b1167a65f8325e2f1fd66f16089a92ab419a580ca7313fa484";
+  hasRunfiles = true;
+  version = "0.5a";
+};
+"skrapport" = {
+  stripPrefix = 0;
+  sha512.run = "60ee0f76dbf9e1539c08a97cf25cf14d2fbf02527facc3764c57cf0812a67d740d5c3148a4a7e76a6880717166c935b34bcf38de0b4f7d02df9c1ab50046a2ed";
+  sha512.doc = "986bb0ce679b69bd9a0958b6d4d1a3fac49ac6a5e31bafa5d556ac28c2bc3d0d8c892e998791e74172ec86c5899acba2cbd193dfc685e7dcb0b5d47b4c2e3576";
+  sha512.source = "b2f63eda57ec7ecbac63c6f0b2dcc2175bde5618db88cd6270a27466178c39209418a94470d6f78b8ea22c5e6ce8d3dfc178f52cba943f9ccc98fea447ade818";
+  hasRunfiles = true;
+  version = "0.12k";
+};
+"skull" = {
+  stripPrefix = 0;
+  sha512.run = "261ba31f30fa26e25f82dfe60ff7600c71db51f1dee68a5c094fa8a746995ee9031e41c0f24a4e83aec52c603cbea71a0773cae63481f167b81abdfb0ac3f782";
+  sha512.source = "3967550eb9af93aaa3fb9c623437e2c6ceb90f52f20533832aae3be91c719a774e3fe6a51f4d1543d6547479a2efa6c1965f0870174cfcd5c93cef0c20aecddc";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"slantsc" = {
+  stripPrefix = 0;
+  sha512.run = "45d92cb8f2a5aeaecc9945ce2778f2fa330b703ea0efb2deb4407ac17d30ad3a3e1ae7966474af28a7816dee18254422fe7c72c50f11f47cd52a54522f05fec3";
+  sha512.doc = "8f856a45e3088d2047157bc87d60a16b6c6e481334f4ee81a23e4cb8ecf53d1113849877ffb24ee4516dfba228c10c9974b0b0a148020d64e3069ed7a2d12750";
+  sha512.source = "7e2af37c07b8ccae052c84ade3ad49fb4d93fb5fd97a5387b1ea8af523167f21d48e3961df58c7a93dfbd07f09ed1140839e48a57b3149dfa713e5945081f200";
+  hasRunfiles = true;
+  version = "2.11";
+};
+"slideshow" = {
+  stripPrefix = 0;
+  sha512.run = "f7bd44c9720512297f15ff6cee1c49ca52c29fc206f739e6aa447e778fed00a64e282aeab9d42b215cac69a64ab39f3919433bd0640d30d55ac540e2dde07967";
+  sha512.doc = "d271c1f9e7b9c45694463982da8c9542fea326d7e191a705e92f5b423e054c3f926768d2209844ddabbe75eb610d4a5cb05ffd53098cdca9e35328c865027eff";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"smalltableof" = {
+  stripPrefix = 0;
+  sha512.run = "50a4878bddc55e1b05ede3e770aad31f6c56b81f9e6d0a536ece25729e3c5a9a1720068534f26a9c224c101f0e0d833478f1a5c3b12759d7c3ffce027bbd5edd";
+  sha512.doc = "ca62aa29f6ad62f149dd9c5077ee2b14ed69d8a750f33d3de274ae275e5d1528482e58140a78b0917cf02a879206194e24a6beecd33060544abb50dd6fc564a6";
+  hasRunfiles = true;
+};
+"smartdiagram" = {
+  stripPrefix = 0;
+  sha512.run = "322589506d1cdaa30dd9f97b419347fba0d617a3ad35fd15fe91611b10382c595598ce1111a287f5b1aef617595cba77b53490da7744b23942f072f522a68ef1";
+  sha512.doc = "1cc7abaed3dcdb11fca675bea8e458f1879bda4ac72278566a9247ec2cb0016f10467e3120e9ef688c5674af05559bff39862d4b3292596f0dafd5e13672a14f";
+  sha512.source = "a1141f82e32b444951bac9fa0fd119e59cc2389577cd05cc19702582c64972602215648e727ccb338565edafb0116f6c50a033d9c3ce8664e97f392148f888d1";
+  hasRunfiles = true;
+  version = "0.3b";
+};
+"smartref" = {
+  stripPrefix = 0;
+  sha512.run = "149dd95ca0677a4e273df64a589d1424b8dd89983adf3a3ef81f8236d1b594d35b851b4255fd9f0d05b4feb82db59d816408e3ca59f2b86b73a5724a8e937367";
+  sha512.doc = "07eaecd9e924e5912e8e3a3ba6479412282e1408cbb59699b9e83006768c4042b173d38da2e8dd2c707b392cb48d99e4be25985023db4de80d69450fe95a338b";
+  hasRunfiles = true;
+  version = "1.9";
+};
+"smartunits" = {
+  stripPrefix = 0;
+  sha512.run = "d4c23a39d79cb5c0ba700da40b916ac6072e612d0e5b8ea1c189100cfe56fe77c9d1ff742d92fc44450255048d96f2e1dc2b5f0e098e56aad5efcdd423fec608";
+  sha512.doc = "e85b83a090b3e352a0faa61ee0f3dfc84d3f2fad8f1ef503aef7bf571e706575b19c1da394b09e69968b10fff2542b5b749a895eb17e84ce1293273532d2e241";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"snapshot" = {
+  stripPrefix = 0;
+  sha512.run = "b153eb4fe8e5ed8cc4d135edc3dcbeacba094dc73587a2b15255f725cd03ebeb450c562ff94e9d87927a6d04d95ddd66e30dd84c0fa664a1e120a190667a72ad";
+  sha512.doc = "14f92e7c36443785174f515c2fffa62f0bf253b4bef560de68cc9cf446fdf7c447e5552a1995dae0f26499e045c8e7baa991255f81b2b43c7bc27158083a8994";
+  sha512.source = "cb5b7313e16fa96f9e864210f5314be7153c10f19bbd509d11dc0a5afae3b0b1c6681453526fec4b7d4079bae0749b69dd5e227f01fd22590f2c2fd230ca4f30";
+  hasRunfiles = true;
+  version = "2.13";
+};
+"snotez" = {
+  stripPrefix = 0;
+  sha512.run = "e1e6ecfd64a317745fba39643c70ef5a71719e3c4ed3644569ab7a4a549a44eb58d1fd1d77608fd455282124d0e7372a364f95f7b67de192b1cfca1a9644086a";
+  sha512.doc = "6ab47280669285be6cd72e2027b939ab2c2e2df7c910b5775dcf02b570ba558a3c89832a45d65cf1a8a649dad67606a2d2fe3d4e477de67098dce497f0c2beec";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"songbook" = {
+  stripPrefix = 0;
+  sha512.run = "06f81b35318ee9844565f622b5ecfb0f323373f14acfed3fdd042a244537c313fcc974c8cc556011baed16c5a7f90b8163342d36e360749db240e6eb639351b0";
+  sha512.doc = "a8d98e2d3b90ebfc4e8df53ebaf92f2d0deb95034bf234dfeaef1d38213af9a36e38d48599e6e78a7e87fb966de87db821f4de7a6fd50f57c1afb515050bb510";
+  sha512.source = "57fed8f034e860787cd72b2acece0a491832acc526964c75060258db6bd46d77a551b967af41bfeae47d83ab97e4d6c2799c0f4ade405a43812126acc1b3d390";
+  hasRunfiles = true;
+  version = "4.5";
+};
+"songs" = {
+  stripPrefix = 0;
+  sha512.run = "dd1309fda1a7bff1236707cb45047dd5adc582d3e3f509f211af7a30c0469cde704773af48fed379a29307201d9781150487821219f76d45d556f1d27e420c08";
+  sha512.doc = "72c374aab68334b050a5d801299179c8484b6fa46db8c8e20b9fceef3cb9a8c0c1dc51de93f34115d4e34767233179c5872054cd03ea3e622abb63a49ad81f24";
+  sha512.source = "016d389033589ab9334180edf70321858ba3b6000d8f560a18631e13ef28130f4b39aed81f7ddf0a178540a463789955d14620b37b7979ac0ea6abeec77d29bd";
+  hasRunfiles = true;
+  version = "3.1";
+};
+"sort-by-letters" = {
+  stripPrefix = 0;
+  sha512.run = "41e7db4a4c5242493aeb099ca103f4540e038b1e91ec0296629f4dab1ad013f98b26b664c7d661dd2f53c1e5c749509763c46f51bb823225a104c125a9f75f4d";
+  sha512.doc = "e2b6c68a42b9364d44dfa06ea93d8c8ea2444d97a3cf3c111065b720d3706b36315a7c8650877f1d6a2a72c1aa42268af4f17fc4632032e1e3c0a2d0fa08e577";
+  hasRunfiles = true;
+};
+"soton" = {
+  stripPrefix = 0;
+  sha512.run = "59e9e0bd127e44e1a80ff7dccf1fecb18b34a54c379a46632b13f82d80648229daa54c4655575c52ee718b02277c4e2b264451f8d3fe58abd60e593d0826c97b";
+  sha512.doc = "de9b03e8626535d2633af3884e373d8b25fe6d203af75382cf329aeb7b79c745f94c6d08d49a69b42172f4bad3cab2048fadcc4ad826a1c1126425a40289ecdc";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"soul" = {
+  stripPrefix = 0;
+  sha512.run = "7a4ee70527282c50f28bc535ca34476538158b6fae6e37008cf5f04cf3caf5cc01ccb859967192da1b159b1026afa3eddede2cd86c3d63f469e6e2f6254a80f0";
+  sha512.doc = "9b8831cf9c013fcca715a8a7100b76f2de364f55e8203899779ba18868e637cbb0d00d982098a3e42191dc63ac41afc65d2547b9976c64110e7b83f5f8d0108b";
+  sha512.source = "0b3fceb0238709d4241a5615055c61ced473fbb74ff75d66c70a221bd0ec8b84769674a3dd57b93765812daed14a21fc002de022400fc73858c103a5dd9f29dc";
+  hasRunfiles = true;
+  version = "2.4";
+};
+"soulpos" = {
+  stripPrefix = 0;
+  sha512.run = "2f0a15e324013f2be4a8728fe9ed629b20b26a66fe2cb0d2347e12013684a64f908f9f1161c8f4c64928ac23a9fccdcbe5b8dbe85b0a406c5c7f7979223301ab";
+  sha512.doc = "9baf5e905e0bfbe0ddc956e419093518a3dc4a602d3e51bd6f9f0085a7ed92fc1efb194ed645c189e4beaf5b9a7900aa74625fdcc2ea314b274dea648b32ecd1";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"soup" = {
+  stripPrefix = 0;
+  sha512.run = "478c8cba8623b184db1c9237b7a805219bf1ffb7ef45280fecf7cd75a1720ca0ea2e1e1ad73465ee20dbc2bbaf14667d4707524edbc073dd4fbd0537dbeca8c2";
+  sha512.doc = "318cb98167123bf8d9a5f80db8e31a31f6f61536e938da3b68efc0dfec6722bc898d8295d32896c24d2842b262f22f70e08014c07755b6728dbb2040f64aef5e";
+  sha512.source = "41d74f1e6812f4b56b44e3a80abb398baf9eef5c6a361de98a1237fc6931952460450f3780f682d35bf9bc718d2902c9d82ce15994144b2a133dcda46b531774";
+  hasRunfiles = true;
+  version = "1.0.2";
+};
+"sourcecodepro" = {
+  stripPrefix = 0;
+  sha512.run = "45c41d470f0e84cc35d4c06cacc1beebd7891e98326a0e0f6462c7dc0fdf1eb9f4e0da59ced33e47c2c93c9662eec31efb8cebcab471350eb2c1c198873268e0";
+  sha512.doc = "7f8ca211769e3b626ba98f8d7265b7e383630c2d22496f03f79bca629f164374de9bb8601e903fc094c1264fa8b4ab4bef1db3b9deafef65ab41c56c27e8d8cc";
+  hasRunfiles = true;
+  version = "2.7";
+};
+"sourcesanspro" = {
+  stripPrefix = 0;
+  sha512.run = "23b6a26836ec517e833c1ec4155b5da60bfd03ba093fadcbcd418658d3d36a8cc41914349cd117bf2c5eec4121bcd7e29d6c50ca8ce4e4728b729fcbf089d3ab";
+  sha512.doc = "963cf63732836329490ea1521ae0fd09e55591859ea4430799f32606c3710e44b7e203dabb4385821830043c12e6f19795951f3e4aff7abd173d8ba5d4d788ee";
+  hasRunfiles = true;
+  version = "2.6";
+};
+"sourceserifpro" = {
+  stripPrefix = 0;
+  sha512.run = "fbfd4b6bd8f75079272feee5f01c0c4b47aecfe89e382cd8f288453dffd6152bf7bab3ffbaf4d90c544f01a5943d280df061b757169f3dd27970cccdeb1f79f2";
+  sha512.doc = "530b5ee29c8cad79ab359fc8fe225c18fe15483bb787f24c91a523ae8ddeca47aad5bf16c6ffea2465fc90182d5de65e08a1bea2f9015e710a03aed846510676";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"spacingtricks" = {
+  stripPrefix = 0;
+  sha512.run = "6dddc3f6b839c16902a590184955cb1f220fc5d1d2c2accaf4bebb70ceba0f446ffb5cee8c8649261d22df79e556016361550570b04f22c3d61644db2d188034";
+  sha512.doc = "bd416ed7ba7dd3023be779ce3d67d1534fbcecf49c36c5b97ab29006f182e77f2882b0c0646da559b6132a40d97723414912bdb920804c5c1bf40facdb0a8c52";
+  sha512.source = "5ab93bfc21fc3bd52cd5721c4c7160ed200f39bd8546a6ad84779a1af0d09b3cde0202dbe1230e2f16918ea43708109dc556f363ced43c7b0072671d8d494197";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"spalign" = {
+  stripPrefix = 0;
+  sha512.run = "6e00399e0940778a6ed8326abce14f15836bcb69f8e7c67d06cdf8567330ce0482a213c7b65c2662e0fddc47ce7b684a640e133017eca314b59eefc278eb6425";
+  sha512.doc = "534f2c39076a6ff243a8e4cffe353a569b493b90fc1bdcc3db43229dda3955f013de15ce1db7beb38bc9b8d972c7430a24d64c263041c82e84c799f446faab0a";
+  sha512.source = "3a12b34469bbefd61112b7338c8b5d440de46837632a695b52ae18e4f297d6ac0cde7ae71db7bb0a7bd3db0aeaa83e78f33a60e4dd496cf9c0ccda1a297b4ae9";
+  hasRunfiles = true;
+};
+"spanish-mx" = {
+  stripPrefix = 0;
+  sha512.run = "cb638093e1a50de3fd67720ae21e11285337910f98da86db79613f73878084b93fc8afd998b4422b673e3daceaa2ba7aa76b02efc98003e741b74449d4c94af2";
+  sha512.doc = "0b257bd5ce8a7332fe6cf1f5772a464ffdc525e80794dc89600e9ad279beb1f39523fabfcd2723123a458787d7bfd32ecbe0b2962b4abfc3627275862e05b97f";
+  hasRunfiles = true;
+  version = "1.1a";
+};
+"spark-otf" = {
+  stripPrefix = 0;
+  sha512.run = "863587da0d6a03267dd36437b112be4a1391537d7186db0f9acae2d5c3721b2a303d7b2ca86d47a619b9265930fb4795f87522498cd34c80d057ef56d1b8daa2";
+  sha512.doc = "2b3a9fab8e29c1fd9bf1b3a3f729d4d728fd22d6dba86aa746febac2eafe59df1afe65f557c9e3c816983eeeab8d798bb4f54712be8f5590706bcc49a2e50199";
+  hasRunfiles = true;
+  version = "0.05";
+};
+"sparklines" = {
+  stripPrefix = 0;
+  sha512.run = "5dc74f46a819a6539034d570d4bc11403cb9f4617e2e6e373cced6cf335630e4e5a3d919041ac67a8b114b2d53c56871239b67a6acd6bc47f8c6130171d84824";
+  sha512.doc = "4db42aec14145d4b73fce7940563f6771c3d994955006cceac7c93c9d5d5e2200fddf6d83d15e4dde0385f982c0ee85fc844914d80aa249c3ac2e86a49369b38";
+  hasRunfiles = true;
+  version = "1.7";
+};
+"spath3" = {
+  stripPrefix = 0;
+  sha512.run = "44417164e54d212ab18925af95cf4105d102ba07ea37e3275a59906637dca173db5de5e58ed3759ec61a2be96d4d44dcf3b2f7c811021acc2d0c0c6ad28ec64e";
+  sha512.doc = "04ab2a7ef15dee7fdd418bc74f699c6afd21cbd912ed8d12760d0be5b5e4fa17f66b23e8e9c83ff8ee1a2459d95da483dc9e1978236c32d6c40d429c9582cc37";
+  sha512.source = "8345ef716d56e7ace4bb952dab9c60adfdba028bd57a26c5e541e762745a6495ebb1e55aba6a78e5882e73be72dc30e7bd1eecb290b44948a9c627a80465d05a";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"spectralsequences" = {
+  stripPrefix = 0;
+  sha512.run = "71677e3cba37f228acc096ae916793cf214f90d30809019efc67ba0793b5176da1a3fe8fab592ca80a077164948c4be777237f71e895515e519f399534cc0cd6";
+  sha512.doc = "80eda3718c3cb2daf9f3a96a6def78011be1d7882eb50db692c2d34332a5aa79a44e0201445f67d1623bcfc3618f79f6d158a98a91572796674071143f017789";
+  hasRunfiles = true;
+  version = "1.2.2";
+};
+"spelling" = {
+  stripPrefix = 0;
+  sha512.run = "ec32c627f52e1cc08f893aff21d43519ac30169772e82793525cfd61c302883c9c0c8444f2d51cd03a94f55e1ad589afac1a404a47b87ebbe7855acde887e511";
+  sha512.doc = "a51b8fb45701d318dd9b9736830b83ac34c84b781d61a3a247263167d527aad7cdb6e1917ce260d09e0304fba38bb2e2a25288f75aa2335bef479918036e1221";
+  hasRunfiles = true;
+  version = "0.41";
+};
+"sphack" = {
+  stripPrefix = 0;
+  sha512.run = "b2cd588384770e0d95bf6e5c6b67df0ba8160e0a01e3f64932d67debcf9fa836212aafc78c79b8d28aae8124a25aff73f4846db514dbfc0a65a519eba75fc52a";
+  sha512.doc = "6b490ee2e736a6bf1ddf32d5db605ab5fe77f079d585c2e377bda73a688a7de575b99d56c6626d9888c395f6a4d181cd0b42e77dd5673c8456bb0e029510b8d9";
+  hasRunfiles = true;
+};
+"sphdthesis" = {
+  stripPrefix = 0;
+  sha512.run = "44c467fc1de689bc198acfa224aa1109c47bcdfce8b161673752f73d59877465b0c4b87f1fcd4a8f589a78fb05ef5efd42edaff2fbfe7910a1ab7b409d9a7e5f";
+  sha512.doc = "cfcd8c02c68a990cda426d737914d195c78d98e0b8c9765128aa8319d47d27163e7d072ea50d312a394b85e8ac1e580dcbd204fcf6b670b4dc519d1f09ce8d72";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"spie" = {
+  stripPrefix = 0;
+  sha512.run = "282ee645ea5022fc0e325bf211b358236f07c6509883a254fa4e1ca0728fd73a4be8889e4919eb5e0ea9c203300359808b4d141d71d0c158a71a3d10d982264f";
+  sha512.doc = "1242f49f1499b798977eace516487543c23dca36471b1e49a2b1377a84083f40a3d5a2e316624f8ac458b61c2cfa406fc3580209c9629739dabaa2fa35e6b806";
+  hasRunfiles = true;
+  version = "3.25";
+};
+"splines" = {
+  stripPrefix = 0;
+  sha512.run = "f040046978cf51bbaf3347406e224fe60a85f449c1fac1703e7a2d936140b099c14ffd488ebe4c3d932b35a8380f943250734a054ea5165ed26b2be712ad577c";
+  sha512.doc = "08532f43fb7aac979e78d30f27f36047d7b70733ef6bdd65d26a40e6818f2b73852d4a6ac5eeae8cd29fc86e1630d2ba068b9707666f66a13e2090a6da81ac25";
+  sha512.source = "dd23ff4702f70ca2f29950e2e1c915dc96f9b0951b6f00ff94371ff80fe60f20d8de517a9d9157db9518cb51f96f1f52b8cd7f080af7760c926c5d29649844e0";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"splitbib" = {
+  stripPrefix = 0;
+  sha512.run = "2936732fdcebff683e240e139ba6e1e4268dc72e427bd30af0590cc3dd7dcc8dd49eaf6f007e549efc5c429fbcea2b37f9e68040d1ffb023162c571341abdb40";
+  sha512.doc = "df266ae77aaccf91b08931c57b01a9eefffe6a469c4cc549ce41640dc9c9041676539e1302aecfed88d19baef277f507ede8ba6f794dae6ea4745b1338459d14";
+  sha512.source = "72a8da016f943df7f5e2d7cb05cd1a64e222ec0c3be784ac21e6aa5f571c9e76cc3e8a5716444aa1033d5127af8d82df5cd632a884fe17f08c55e08d38956e3c";
+  hasRunfiles = true;
+  version = "1.17";
+};
+"splitindex" = {
+  sha512.run = "858033eadfa82b4e40a388356f64002370a5f4fc2c95565eae90c68373f708a3c9827fc4e0ba8094659382aba4e5925cba86632733b15d85ea6a82f73ace8737";
+  sha512.doc = "c8dd92e955fcccf71b412d9750fff7b6f214e929ddf194a6496a79a146f4837af3d773ed3f2303546727cc4a8fb9d5366dd75b64d3877e6121ce20315f71997a";
+  sha512.source = "8aa928bdf6f2e8fb6274c1fe8d0b4567d03a1c6ffbd078726bf6a36ff1bdab981d5150cf0250602a64d2a0a9be92695fdd399c04d041b7a9579a7d3a71910151";
+  hasRunfiles = true;
+  version = "1.2c";
+};
+"spot" = {
+  stripPrefix = 0;
+  sha512.run = "95a7bf0a9e04e7157fe27499a7a2d2bf3e8d86f284e9c2d150c40b5efc1786d4820af20ccde7f5b649a775d7a13d25a78347138a200335fc0b9e4165dd3e1f0e";
+  sha512.doc = "26ee8b13622a46078e8199c818dc353801af36afdbf67707a6942202fa458e7cbe9a000a4ea022d0dc4ec6ddb3a63c6adadf240cf207778765e47b2db636ea5b";
+  sha512.source = "96438aef76ade4df7f4f49d819f96792a28dcf3a0f5e50498f854c047a7754accd31d679d034886eafbfd32c0d4eb941e8a888a1ea94fb332b8b48912d0f673f";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"spotcolor" = {
+  stripPrefix = 0;
+  sha512.run = "6748982e7007323414dd8ca5f1ede105bb2bfd0b0f8d2f83c8731926628c094c8c08f0cf4ddadbaa209e182f8af83ed6fb761142ecbb97371752473b33c44ffa";
+  sha512.doc = "4055f42161bd45dee74974358eabda875e9a3d62690fec0486748cd7fe974af133c24e56bcfd240c6928334fd9c7e1e6a6935c45b974760b41f7ce080d44f568";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"spreadtab" = {
+  stripPrefix = 0;
+  sha512.run = "e662188fc94f3f31031238a9b20ce617b01adb65dfcb5ba00cc0f90555a151957747e9b24803436d0815528d945e3a65684ebffc04dc5de2552989c81bc80846";
+  sha512.doc = "e7e1184c6d5013a5f991325e1f47b509b90f32022530281263bd5b1c0d9c9082a872f9b6ece3198ccdca555e1187546762c8fb4fcec9a75f72894f6fb49825c4";
+  hasRunfiles = true;
+  version = "0.5";
+};
+"spverbatim" = {
+  stripPrefix = 0;
+  sha512.run = "0b26e941f77264ae2db7cdcf2c4459c26601f6079e0bad24a3ea0edbd22157c324bbf50426a794655dc1aee710092cd9b662bb401838186e42657fcef5c1121f";
+  sha512.doc = "245825f18ae835b984eb6474b927a579f80b6c6feefbfe02a53f8b7ea5a48023e1bdb43b39f090afe4ae42937d053cbebfec6ff97d7732d754287401a95fc641";
+  sha512.source = "23f8eb04b0debee1c9babc4ee6720740a4e64a28969365c27c96113cd777e0565b19d8f6db233470cc600733b1831463881d86eaf4b4119cf60bd3fbbf3d0597";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"sr-vorl" = {
+  stripPrefix = 0;
+  sha512.run = "135186b501bcf2a9b338ff13e330401ae3ca39db4225f639549cc929991d2177804b44ddbaec805ec1cd56982b140cec4625e7564fad7f4de89d2c2e06ad60d8";
+  sha512.doc = "a65dc0b7a12b5435d753aeeaca7643747c94463835cf1706e042710272cc0eef66d4f5f827c99034f9126bcbbf7e41293196f9ee29ed3f9961b9af27e2879747";
+  sha512.source = "f41d126426035fa0d1cf6564d9eb4966618a1c8f805bca3097a5f7e72c62a12c9d8e39b6830f9b1e356940b67bd99803e869d849949854a1a17da4c7ba971195";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"srbook-mem" = {
+  stripPrefix = 0;
+  sha512.run = "5cae41da74957078b2b0ed38c9fa4186006f24abca804b879641b4bff5324950b1a59296c5733fcadd2ef05661ff1dba8cd7d9a2c5f9e2a5c6bc1e6d993ff218";
+  sha512.doc = "5e06fb85b3398cc65372fc0c82eaae3d807c6c908eedbfa8f4ea593ea6213790c3fe9c5142990a9b7d4c267ed01cd61aef4fb950a0c2b51424b0ef5e1f2aa520";
+  hasRunfiles = true;
+};
+"srcltx" = {
+  stripPrefix = 0;
+  sha512.run = "2edad3f8b56fafc034d94a3e3240190a8f4f1a1054c9b81d6dd9fa5426abaec0b29118f7bbec909ffc3534693b8941fd4e44b6670d7dbcb852fa3a056ba63fad";
+  sha512.doc = "1f8428bccf142790a3221d470fb66dcfba40552da0d8aeb9cab62732c5a5ee0af3a565774e29822ebcf0c1e4d7a2bfffc61a0944b762ffbb7ff4e8901a61ab48";
+  sha512.source = "497aa5f6bd5dcbb354a4abf74bf8276898148f42083a0657ac9dfeb4374038b4f8003b3ace3b4d65b2a08334c1cccafda371e8546def7e44f823212c257d42a3";
+  hasRunfiles = true;
+  version = "1.6";
+};
+"srcredact" = {
+  sha512.run = "9e11ed88fbbfc0130f43fdecd8fb0b3eecbdf50eb33bdca57bd34c860cdfe84dcd560371efba4cb261e65aaf4577306f478d1c43ed89152e7e21fd627eb7328d";
+  sha512.doc = "dba9916acf75e800af1e581b4276e82bfe4c421a500a400773354766b37849568c1f19752a75983374ca41f793903f9776423888215f00376db1e0f5f3b3dbbc";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"srdp-mathematik" = {
+  stripPrefix = 0;
+  sha512.run = "289d92617e5657326f93d5668563cd1067bb67c8e47b3b1b5bd318c4dbda8b4328d3605bcf194ee31cc779d684af8b7abb837b6a4f675406434b23f5081d1cf2";
+  sha512.doc = "fe10c56c4674982df74e82c5390699e4fd70271429e79b95be9d56cdca574af4d940b654e92953739b62f21a38ceb8f52d6830ed3f5ddd02d9dd7ce0916c9001";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"sseq" = {
+  stripPrefix = 0;
+  sha512.run = "25d3d2af859d8ce83f7449470be02bc4bc77b8ac49c4e10f49fdca51b0a85488f01cbf5f826b07fba12806c932125a35197be2c7bcc330f9b6f51a331fbc77c6";
+  sha512.doc = "3b5516fa412aa19fe8f3d23706b3046b6af698e8307db32cb895fb13eb876032c5c3fc908a69f0e18efc2ac5802a95957246d58248dd05e1fe25409d46a8bd20";
+  sha512.source = "b86247430a144ef73ce271b904096368291a6581de3e1c7627d38751c102256e77d82963d86956d9a9dc8e2fa16aa6b8b0a15dd02b4468cda88f70b19e856711";
+  hasRunfiles = true;
+  version = "2.01";
+};
+"sslides" = {
+  stripPrefix = 0;
+  sha512.run = "5809b9968b16d35d5f76f185687c683512883942f8ff3537a7dafef3a76e5fb017a4bed36dfd102fb5edb93648148861c78f6f7e93aaea8c5cbc8113c05278a7";
+  sha512.doc = "4a0fde19b43390f80d6d671933ba51b0be854d774d6f35f3e8fb33653ef7784df85871dc4fdec03f2c734e819af6c1098e8be152e0bd42740ec2f4ae53c38f4a";
+  hasRunfiles = true;
+};
+"stack" = {
+  stripPrefix = 0;
+  sha512.run = "897ca71e1a8531485d9807743e4549a994f5e6e22dbb9a958466d4bfc7fb1b4579af0d7ef701146b8142c394fcbfca70bfdf28779530e487a0ec868c77985c23";
+  sha512.source = "d10c0b9555df5643d266cfcbc51970cb7d606c80053225e4c3891b49f59fd9831c89f8be97d41e3e70b8855defb2af709190631e71a470a061959486162d5ed1";
+  hasRunfiles = true;
+  version = "1.00";
+};
+"stackengine" = {
+  stripPrefix = 0;
+  sha512.run = "a030fa3c9bf8153c4ab387b7906788640f4b8d36f3f1a67392db5e2d5f62cd9e421231a92611555df2011b03318b06023194a7bcaea6ad1108de945bdff787cb";
+  sha512.doc = "e395c609c2160160c0892c5af1d197943ac6cce21c59ab489239b41877bd97fc70b75f1313118f3202b5d53ffe5f2537f5f084490dc70eb1e2f56dcb8bd208f0";
+  hasRunfiles = true;
+  version = "4.01";
+};
+"stage" = {
+  stripPrefix = 0;
+  sha512.run = "60ca903a632f328bff8595d3dd076495409ae27045dbcab56493d05496c885de101cb3d6c77745291c661847bac2da5e41dc22f6e08f52c36957c997f1a90fc0";
+  sha512.doc = "96c32c5f5c272a521fa0efd94571fcdced21fcf582e7d94f503a46559a2f32a341e98f7c6b6f681c0b9918a63cf7a6bf6f90f628f87add2f7b60404e3d451d3d";
+  hasRunfiles = true;
+  version = "1.00";
+};
+"standalone" = {
+  stripPrefix = 0;
+  sha512.run = "48fdadf3c9e7b899ad75953baeaa9f47384d1bcea0ae08c94ee51b4f2fabfe2fa244a0b9a77f11fd038aa106551c4cb9e0ceb06292ab1ff7bf6802a65ad677fe";
+  sha512.doc = "a5cb35587d86034c38584218b78fe4142563306a8d918d676cce0a970f593cece78bfb755d42b9fda3c0286bdd4a0bac231f8b750ed61acf6199eda6d51a3dcc";
+  sha512.source = "642474f0eed4ac5d3831c0764de9c2c61210cb93bb6bab5c77f65ca13ea54d2eeab038a2c9f52ce077be5749f4d93fae5ef5df561a1e33601bac00345797d3c6";
+  hasRunfiles = true;
+  version = "1.3a";
+};
+"stanli" = {
+  stripPrefix = 0;
+  sha512.run = "8026823a73d9c061eb01e2b92363b52314c4de4d48bc8557bf33b89cb5381ca4886dcfc0f429f5be9268f3f1e64297ad974485edfa6af025e7744474a2ecd565";
+  sha512.doc = "f97363b3d9aa6f0701c3ca89e7c3b2391327ee431fb71b5be599805a4063baf1f5517868fc3602de8d97aace79d6dc1d58fcceb789ae55b85a7c0824429f3ebb";
+  hasRunfiles = true;
+  version = "3.0";
+};
+"starfont" = {
+  stripPrefix = 0;
+  sha512.run = "1f45f97813f5e51b45e1cbd3246b877aad823895a4b087294d0754c560db5796d8b4f9d09972b5c90c4c569db82a2d70bd1c39a9dfe6e1fcc4e0deeceb44f876";
+  sha512.doc = "def94e1e2995e20e282d9319f763ddbc5e152a48c18ba98ef4d168e69a9a6deb5d7d87923a3259553f990f2da73c78929858852c6165acf7a94a6010382f786b";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"startex" = {
+  stripPrefix = 0;
+  sha512.run = "840a60057867ea8439c0497eb22dbd8ca8c8a2375887d74ea383a8a356d5de34a389db3df5f4c41082683d1108a0f88cb31c25e4c3a56a27e45b8ff5b62da4b5";
+  sha512.doc = "d2076580253889e51a07ebd094daeb10a9ebbf2d9154d288460a84d7b2a581b849d1433a442d8eb911a9d2110e87ae4eb0628567b50eac95cf9c6866d3c34b3f";
+  sha512.source = "af1bdf22db048334823bdd18fd87fd8729c0bb4cb729ee53271f7e0b9ec4cea243840657e1a8ebba61728755d022d37495ef40f9962ce8e203d402b71d2d45cd";
+  hasRunfiles = true;
+  version = "1.04";
+};
+"statex" = {
+  stripPrefix = 0;
+  sha512.run = "66fb0e346ddd4902ac98a90fb7d0b0193d8c8166aa30774dca1f5b6007a3e19c3b98e25bbc88abc379e199720b6c9a2c73caabbc515db2a54b2a8b437c5b270a";
+  sha512.doc = "9851bb7e2e9af03affa1f4b5750817543be9e985e02d06ca4908ee1ebcf0eea2b8d75a25cefdde3492efc52d86be5bde6fc2f6a99f935c183cf3fc9041ee0e25";
+  hasRunfiles = true;
+  version = "1.6";
+};
+"statex2" = {
+  stripPrefix = 0;
+  sha512.run = "dc823a25cdc70bac79c69e721feba69883a99e9e0a5b211398ff0682af4fe4bb1c4a7feeaecfc7c12d2df876b8aab6be0cb8868df8b8eaaa10850042615226a7";
+  sha512.doc = "6f0b45577bd4383359dbeb592c3f9e3c1a66d1b2540cf6027ffaa20f8f644316cf2feb0e585f42801b43b529632efdea52fc2c83f2a6d9347cd443da27259646";
+  hasRunfiles = true;
+  version = "2.1";
+};
+"statistics" = {
+  stripPrefix = 0;
+  sha512.run = "b0f2c288a57cc64c72bd2b862cd6c40b62e7404c4733b25af64b43d008b277417bc72a4398734e5620e6d2b9f97b401c1d54ee69b0a1ad5947ecba798ecfe0b2";
+  sha512.doc = "9d3f7b94c6d144b89c1c947645e4e071933b402e350ef6405d533bdb0a6aed650b215a135976410fbd3a68ceb0fdaf6c877f2d7435680f8c70f3a2209c0808bc";
+  sha512.source = "a0ea1a189cda9472bf87996d4c191ab84ea824f3034a66d8e23982a1824aa78221fa368b3c8bd696ce58b65280599617c5ccfe4ef97fab8227148e90cc7f3e4e";
+  hasRunfiles = true;
+  version = "2.2";
+};
+"statistik" = {
+  stripPrefix = 0;
+  sha512.run = "2d2455227b5db15235763c4fa677b549380d66f2485d1d53c2c607f96bb4b4a176ae9868419351f691f3efc3117e6e54be3317040f2a6f8d1d105cb86709f86a";
+  sha512.doc = "88b28820b5d2a4a304c26658e27da7d673bf430a6be3ddf46f5eb3103abb7e8d20b03e30b65b88583960f9cf3dbebb9088330621b99e1eb9f2f28c0684638240";
+  sha512.source = "d37bf82f0830e14c500af27146a1ae1a80bf4aee3bb272429c7c2351366e2fdb51b7ba16ab6459b7cbb8abe2d37870b7bcb3fa43582e588c7cbbb889ac1e3859";
+  hasRunfiles = true;
+  version = "0.03";
+};
+"statmath" = {
+  stripPrefix = 0;
+  sha512.run = "128532a808c4f8cae9ad03d19d9f70673427f9335d298d4840776ecf59a78b0051de64093f00510ef34c61d3e2ab900d4494f800eff8183a4c8451bf90a1424f";
+  sha512.doc = "14754afa159041c359c85d31d8cf3483789b02a7057f59f6772455ff7dfbaaf81e793db3bbdb8d1a67e25de7a00f32c22089e2cc908cb1c2e0abf6a17eceb7fc";
+  sha512.source = "67329fcd533335927638057bdafd76c3db6e49abbc23c63027623397ab35450ba811acf61c5b3ef299077cc92a14df3f0d66076a8f8a2d009ef9e4828ebb533e";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"staves" = {
+  stripPrefix = 0;
+  sha512.run = "f6a1aea97a3293ffb514ccc526faa71ea5ea3ab32990da8725cc3ff998d15a2909001976d9705ba13110fbde869001bec2f286e58c05f1fe31f345ecd5882482";
+  sha512.doc = "b839484325cc6d06a407ea685dd705b3616d1e87f22d4a625c20dbc507647b602417a085328f9ba886766ee0fca2516da397c742198569477bc1009271a4db23";
+  sha512.source = "9dbe40efcd1699cc9267b739bc1b182fc0e5dc23ae52d19ea89c1742b815e4ea9b7612e4fb80aeb83f3d9206ab408cb0ca3fcb99c85883fb86f89f3ac26f0b5d";
+  hasRunfiles = true;
+};
+"stdclsdv" = {
+  stripPrefix = 0;
+  sha512.run = "88d8abc04d10f029a9ce0fe9025497afe3eba3dcc300631fd37baa8174bdec8dff44fbde07599ac8dd6635be27294c359c77178690a4e6c97f41d15f9d2abbd4";
+  sha512.doc = "8321d823ffa159071f66d87d38fa38ba3af03f6c69999a041d765f0fda8549547da4b8eae86efce82109679284dd912f2c5494b5ef6e76c73c467cf4eb87aa2b";
+  sha512.source = "4a9987bcbb557b7923c6c2a5c58dd117fd7b56f58b3df55154514075b68bc59a8928fdfe275dbf328ab2bd5b6608b193ad5ff07b95e7bfd2d79eb632837e5469";
+  hasRunfiles = true;
+  version = "1.1a";
+};
+"stdpage" = {
+  stripPrefix = 0;
+  sha512.run = "a3835f211b744dd88e0238a01f0a5f960305f7eb92bbd9e3437474971173e66c84cbee1d5ab3f1aa1097a262a258b79085fd0d86884bcf3acc4017e7885968cc";
+  sha512.doc = "77510670a49db00b185e6b502d07bd85f9ca18bedeed86277c7d51abb582f40c793c665f2ab87435e90380f7f6f740b64c937d2171531a419ccc59bed197b90f";
+  sha512.source = "2973110831807b73409be0082c5aa281b176dbe7174b736cb9703b0c75ee918d1135fdf0513bca5dc48bb996d0067c9201702b76212eb632073f9b0a17b00d55";
+  hasRunfiles = true;
+  version = "0.6";
+};
+"stealcaps" = {
+  stripPrefix = 0;
+  sha512.run = "83296141df9f56d0e38d04bcc948cb4a9b5e308f5a71ef3080b4b53392792d42c142a2cc5b69140233d6f00bcf7804dd1c9dff686df3debbca857d765d7639b7";
+  sha512.doc = "3dd77d36d16fbfaf10993bf36c1a286506b6f80b795c721ce15b7854453af0b6041c586bbb653e7707eb057664885a9027135d199a9df7b748d23c6106175477";
+  sha512.source = "8afa57a79a3bb38a04ebb681df5c7976e9ea275e379c00308b6672459ac61ebfe745f16d334beb4d3627438487446f638bd00788d60fd68b22f0026a7a87d4d8";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"steinmetz" = {
+  stripPrefix = 0;
+  sha512.run = "8ff095645447f9349d2b35ab5ccde72109eddcd85ad3c9de262833320ffcbe94c2fb08df5323c69fc64cdf173ee7193ce2ce887f1c033997455a33f290cf1884";
+  sha512.doc = "e409db74c366c5f49011a6e21355150e3e97d16c1e3a7fcbf06cc8aa0db2c01288dfc60b3c79e539936077e452c40dd601490be8976c57d01f9a5a88a3798093";
+  sha512.source = "c18fde06e32eb4155921bdd7e4dca7ca108139859545c638f562f82deb6feec904a53870c929482504ddf28858ce5ad3c5abf4148b3bfec0193f260af432ebe9";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"stellenbosch" = {
+  stripPrefix = 0;
+  sha512.run = "44b6b8149d4a5aa34ce4bc2e9e66b9bd3a1381b17ffea213b5d0f3afe5b71a62a3b85b4feb6caee4711119fbe27d46b3fcbad2a892e662ee9aac184336677d0a";
+  sha512.doc = "6af215b7af75e04bf24ecf9f83c6e4b5a12013a84435e65872d4d84dadfc2231d341153b05f069d9ca927370a686b6642f4654c9924521f5d93d0d1772f48059";
+  sha512.source = "a4df0b0c1adc1477be9a8a0d2ee3c03c152e3a2a9c9bff5337accace9562a0b117f2ddd09ecf29bfef99ab3bf0a4a394f8780ef57fb693d98fc269cad2f940d0";
+  hasRunfiles = true;
+  version = "11a";
+};
+"step" = {
+  stripPrefix = 0;
+  sha512.run = "3135dee51564248f0ea3d5c67c46d23151a187ce923fe5c83de2ee6072b62fa4314cf70ecdafe9b4ddb9a44787aca1e9bf2dc79bf38ca6c837ea5593672aa364";
+  sha512.doc = "9e693e25525deb2506ae9143beee56c0a8cce7d5852620b6f1daf5851662c36af52d4d3c38f9c004bc5944621f3113f179f80ff1aa83e9647fb4b079acdffe13";
+  hasRunfiles = true;
+  version = "2.0.1";
+};
+"stex" = {
+  stripPrefix = 0;
+  sha512.run = "43d9cb084f47b1fc2bfab9eb11ec9253fda495f29640d333c00de5d7a5681bf37e0331002938e141679b0ab10345e23d5cbff19cb33fbfa01d25be62295b18dc";
+  sha512.doc = "3e936e5905f5dac9a16030af94037398c60b6b79feeb6180af4b7542eb8293a681a213115dd082d9e2df8264771d6d92544e6ec514cf40cf4a136cf74a0a6e51";
+  sha512.source = "5cf2ccb75d699f86a095481c4fdefe0d2a981340d3df72c09ddfc4acd3798a35546674eca62c8aea07431b50edd643c514af901d86513a3e5d0d3af9588f24ed";
+  hasRunfiles = true;
+};
+"stickstoo" = {
+  stripPrefix = 0;
+  sha512.run = "858647a31ecf1b3a186c020f43e8f3e7bba930f296f01b0893730f486270c8c4af83c26235484abcdffbb996fc4a3cb5c64363c7613269568ff9ec6acd70758c";
+  sha512.doc = "dc1835c8806014872212c9812e1112b1765a5407530c2da786efa15ba08d11d390c4c64c97e3d5c6db451bbbf876d053e6b8baac2ed65f8acb65a5a80f531031";
+  hasRunfiles = true;
+  version = "1.033";
+};
+"stix" = {
+  stripPrefix = 0;
+  sha512.run = "1d4af4d903ce164b95321dbdc45ee17dff776cbecfb29ef74d7c192909da2eacf7ca7c143ee655d842999d347af8e63df683e4a216569c5954e48be54ad55fbc";
+  sha512.doc = "fd69dc299f88faced8b7166025616de35f935d0726671fb19b94fce9acf6dbf6c9f041f0e4ecd3ddd3aaa8716b77939225301cc79bb0131f77bcff1429066e9b";
+  sha512.source = "1f04ed2c60d8b94eb63e173157a896b14d70b7a0dabdffc1036c7eca0afc4c6257d8b0af24d83264ace3601704109587f0008c3f452232c57410834e6f12d1ed";
+  hasRunfiles = true;
+  version = "1.1.3";
+};
+"stix2-otf" = {
+  stripPrefix = 0;
+  sha512.run = "103ecade85ae44948216c901c487b77c29acaec1813d995f79d50497c9b273f312a46709202ff1e450ed45866a306343aaa34c912e556da1496062beadb6bfa7";
+  sha512.doc = "678e183fdfef3a98a2778d7d694cb72682a2b1f44aa3595bc778b0b481f0fbbd60d3c05cc57f64edd78d656cda447b4a27505a71d942c6e63b7d35f31302445b";
+  hasRunfiles = true;
+  version = "2.0.1";
+};
+"stix2-type1" = {
+  stripPrefix = 0;
+  sha512.run = "7358467241a5eec7e62271395554de3a5e0aaafb926c2ecf5dbb2eec8d03b3bf054ec1366490950ca7f5e69e415816e82af3257c4ac87eb7e6a88fba1d35d4af";
+  sha512.doc = "775626a232affb47e39da154da8a4d41f602fe235dfcf840966d5d60a102ae9a6f27b3ad05f3ab63c4a34746866ad076ba83ed9c2ec88f78039b56363e98756a";
+  sha512.source = "83d2c6307bb0f41248d15a9bd18305f9acb7c651839abfdabceba23ab2d22c6ae3162eea803addfda2df05724445ba1a65b73a00dfe3df894783628bab23b170";
+  hasRunfiles = true;
+  version = "2.0.0a";
+};
+"stmaryrd" = {
+  stripPrefix = 0;
+  sha512.run = "8abe58b84fff2f4fd6846b6c267f3b245fb1dfc2f38d0db54ce7cd9d456abd07627247613073f09dcf7e11e3e9c5940d8ff657327232ce638abc6babcc5b3d77";
+  sha512.doc = "caf883d1c5021b52d6471c4c2145e708ac3c05c8944eaae621a3ea7b602b683ba2ef2bc0052f9caf67adc1415e7db02b5b55d3642ed82727a926ec193dd984f4";
+  sha512.source = "ebefe2836daed0dd4db99517af0f40c73f0a7b19453d5415c80ae6cf723f4ec4e4ae6f9700a21722b4c0d9b8507c58a596697017893716111b46222f54676aa2";
+  hasRunfiles = true;
+};
+"storebox" = {
+  stripPrefix = 0;
+  sha512.run = "365da48946b94161fe78447b402dfda931f7635b7a8a12fe6a4368c3b579c140b6c6037e6b04e192aaac1d768200af2fefc53659e52b813ac6956b9e82c8076c";
+  sha512.doc = "89867e995ec04c8411e6ebb9919e8b94bc12674fd7e659ad6f42b17988748c98a4756268782a9fb5f46095ed2b83a877c3969f0ca8433e5f8c37dc7551c7825e";
+  sha512.source = "248077174224766d5b35b47b319b9eb9afc3a5fcb0d1190474ffc3233c02dc7265c078b08ac57a325990678ab0eb58b818fef34cb932a229da1e43247c6f2578";
+  hasRunfiles = true;
+  version = "1.3a";
+};
+"storecmd" = {
+  stripPrefix = 0;
+  sha512.run = "1987e3cffafe007d9f3cb9e0d53fcc648eca40140f5188dcb0202a0916296651c1ab02fc589339fc51999b56bfa4a06b29701aa598ec03f51d7b1ee66ecfde7f";
+  sha512.doc = "feacd83403672380cc2cfe90ada2704f98bef63e905740f8f8d50767f86ddf95478efc38fb38fccadad172f27db56045f50a6af4a487f0c5cd2b6ebb5e7666f7";
+  hasRunfiles = true;
+  version = "0.0.2";
+};
+"stringstrings" = {
+  stripPrefix = 0;
+  sha512.run = "8ed9dc3bbc869f06126280a4dfab23da73b57a9c5c1058dd9764e2bece26840ad37637d4e83aa84e6d9a17d92095803788697b8d325bca7fd57c7135ade7cbf1";
+  sha512.doc = "fd794606d8eb3a9ab27957268aae1b35b89c1bfc1b3d5602290797a6eda8551e14471d35fd85cc6d0561a1e74523a36450c958a0cf5881d42742eabf085bc794";
+  sha512.source = "79d8d86c7c3695b8d821bd1bf5400b5195c753877f8aa6c24094acc87d91ba8b58b086b760e87acc6e1d4b7e3898c7530f40567f626cb3b002ee7064c636359a";
+  hasRunfiles = true;
+  version = "1.23";
+};
+"structmech" = {
+  stripPrefix = 0;
+  sha512.run = "4efa9a978eb0bb92dec5588107588346ba1a22a34e12bf43b811176d42871f415ec58adfa50a4a4bb9b72ef482395c374b9e7b979f1b779e672422bac2c91c6a";
+  sha512.doc = "4eb7e209e5034c6809f8e746f63b1a5f3ed62c85cede4fc989ad6d89a9710bd15ee3e5622181ea9a450ea2b8430ae2c51ccc845851cd9fffa582e3b91b656457";
+  version = "1.0";
+};
+"struktex" = {
+  stripPrefix = 0;
+  sha512.run = "3d81817eac5cc8b8bd468537406db6a26fecdaad1db269c2ceed582cae84fc2b549eaf527d4c356be7d4f2f16f9db4746251e9b69db0f0fc3cc8acd9f39d1f50";
+  sha512.doc = "261a9f7ef5036bc8eebb87ba503b604b158647e82e88844758be506ac5d389103661f681689a836c0048529446bad0d6537a6fc6ba273dd2ed29abee40336360";
+  sha512.source = "98b06394519aafc81a565c7b12fb1ad86856ca447cb5ccae14aacc95bded9663a72bea301e7f5998eb9cc2a6358c978881736e564c3672eef456c6c44efcce0c";
+  hasRunfiles = true;
+  version = "2.3c-0-g7d3fc5b";
+};
+"sttools" = {
+  stripPrefix = 0;
+  sha512.run = "acc5c6b470d1e5fd96eaebf3792b3c2402a8fe4a07409328878313cfbaa1e0febc758ae75c6d736e9320f6a332c67f7d6898c761b9c5e30f6658e9049df889b3";
+  sha512.doc = "15292806d0f8f4a0364076fa225b7d914a4ae88935e08f87a46978f5a561405f6fe4dc2d471c974c85b369e57bcdc00a5a4759d66d296610713d858dcdd4da34";
+  sha512.source = "b22286c3e7b1bc31247fd52e0c64a5f3dddf35e69c2af8e2a617530a24f82e9504f9f0db82d3cd1c57bae61aba526d941636aa32f498ccb3b06983e6e5f511fe";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"stubs" = {
+  stripPrefix = 0;
+  sha512.run = "13d9fbb0eb8fed9b92f1307db189e9f65df92470d0ed21a0c84dea2f53ebd1b4d665919372476b737184df4f9faab0a982e681a0f9cb5a99e40b5f80194d448e";
+  sha512.doc = "a427047460a92a436b21c23c112bc4ed8608a9916b613530e5ee5cc56bc833a18c6336943ccba475b7854269680eb7d685bdf2f0641478e46cc4e8fd9a6e8260";
+  hasRunfiles = true;
+  version = "0.1.1";
+};
+"studenthandouts" = {
+  stripPrefix = 0;
+  sha512.run = "2a7d8cab28b58a26633fec5845498a2987763f61b896fb747d97521b569786f114d80979956a9b9c2b94b61f01677101248a1a4c1735415703398b57306b6c15";
+  sha512.doc = "10e3ff558cd5c544d82a61bc67be8b7ed0c9ec9b01550bd3d1c9d3265d1de7153832983593c0be6f5a990d33063b065b397e4ab6b7ed12b0ea79e9e49e0a68f6";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"sty2dtx" = {
+  sha512.run = "05e17abf8322e70f275308e983a244e178883aa36571640d513962e813a2bfeb88264c0ae9ccab956f9bd016923d1727c14a7a26bb58b257c7d05600a540da1c";
+  sha512.doc = "1abba13831a0cd4b93f9665f242b96d32e764c39ccdb917f655922fe2a4b00385d6a78c77c151e212082eace3b9c9447705681416b5cb2eed9f794d7eb30c905";
+  hasRunfiles = true;
+  version = "2.3";
+};
+"suanpan" = {
+  stripPrefix = 0;
+  sha512.run = "a9fd27694ea7491321580ee325f8b151bbcfcf6da14ecce85b6d4e68b09cdf125c810a5170aacc966835fad8f2aaefd78916920cc3e896cad7738d026450ed83";
+  sha512.doc = "667d3c5590468170acfded106a2a468d9abe7b4b34a9b56d153d401a60e8f24bce99a4f6c5f2761572a42b85c7faae5741ee5b6f22c3f1004e6d6685463b9350";
+  hasRunfiles = true;
+};
+"subdepth" = {
+  stripPrefix = 0;
+  sha512.run = "7328742873abc42d2b9916161ca43e339e03ac1fd34479e93d9eccc98a065e95cffbc920395dd6f90d90989d29840cbdf2ca87dd1d0b293dfae66abbdc6e2d3a";
+  sha512.doc = "6bda8b822a4f1ac2a181ce34f739449bfb976a4450a54589e0cb4a64a0f1ff358a469fc88a37639104f731671ec474088968ab3dc95552a2d92a073d91857668";
+  sha512.source = "6a63a2d62dbc47d41e78004792e5c9e6ae7b2f3c435e95bc9969bbce109293a8257d4913a5b1959d95163c9aaae557daad53e950c5313faafbd8fb8d0de2c367";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"subdocs" = {
+  stripPrefix = 0;
+  sha512.run = "a38c6e9bad66582914ad4acdae213e37c2bd5658d5e16482a1700f5869762b489f85b61fdb70c04578319f2772c974267b7c9a4e302c34df87f3a01128caf949";
+  sha512.doc = "46bde174536e96bb78ba40990ae3b4b8cc1fe2ef26803b193afe2fccfc05bdb6644a548a712522596786847a8fe6071a52599a17ea52134bbed2e5495bbc401e";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"subeqn" = {
+  stripPrefix = 0;
+  sha512.run = "7d04ceeb8f75cae074f9bff3e8d0aac4b529d199343c59fae7715d1023aebc3cbf2b45614e0d5ef0a95ff9bca4ff9e8318c4ddd86ceaec42d271f8c0f71282cb";
+  sha512.doc = "09f902bf3b4c8e2e1f9d805102c170b2bf2f4de067cdd590b22fde6b58f4e3042d0b14d362e0af587f9fff9e2c8789bb8af4b329bbfd721ca7dce8af01612c50";
+  sha512.source = "f1f7229f058a7dd80a67f18692fad36601015ad6bd7994775b573193d74c0ff7f175397ad446384cb74b3797f9f17605ce2d381327249ab9e36ae0aab756d09d";
+  hasRunfiles = true;
+  version = "2.0b";
+};
+"subeqnarray" = {
+  stripPrefix = 0;
+  sha512.run = "846d822661b903328ee7b199df6bd7fe5b606c13a185cbb6e6fcccf3b009f2b94396bfc3f9e4b8eb5052688536867dee06c6b9571e051d477415e1ac999fc162";
+  sha512.doc = "9f47b8fb760b51a87ce5f9728e9ff76dbbc10ae009e04c9bc0c91133941e5b528e09e5034156b1dc5ff9a0c74446b548bb69c389486e68a4b8a79a7c9ed1a7f7";
+  sha512.source = "f41086ca65c7821167acada640a11768da429158b4da7caa398db254be156dfb291281b1e2f4f4f58f04c0c8041c45efd2072ddc40db8673808b83b3ca09a93f";
+  hasRunfiles = true;
+  version = "2.1c";
+};
+"subfig" = {
+  stripPrefix = 0;
+  sha512.run = "ec7ae149b99fecae3b4ee7cf600811dcec9bc44eac762b5480c6df48b725db3c08a87922edb7a524d7d2b748bf7d25482e155fd40080cea9ac62f2575bf61d15";
+  sha512.doc = "8cb67139bc1063fc4d5482b51f1c3ad690c85d4f7e022a99059a7b20176bbdc97a44af23756fa220b3f7f7afdf039c4a7b672700012e96b98ee25ebb9e5c99b5";
+  sha512.source = "44e7113550dcac4b14ddab03ad5ba4bc86cb3a4dcb14a31f73e5caf0b02f9f3bd56fd9d18ddae002a981e9680bc6fae5850ed07ee94e60d858647136cf9243eb";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"subfigmat" = {
+  stripPrefix = 0;
+  sha512.run = "d607d2e79b3b0d6e99c8577daa577aa25a0a7d9aecc00c8b7026ef3a923b0e2815837d257599dcfdb1e5320305f492bf17845f5c6cd487b476e789c5140e01c3";
+  sha512.doc = "6cfbc274a466796ed0478e9c43cf68d51bbf5379691ea6848968c48cabcfd54525075727463905e48b64946df9822cd10903c562a2f7d546b3d2cd2e9ef11db4";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"subfigure" = {
+  stripPrefix = 0;
+  sha512.run = "d4ca2ef4c52c84ddda85ee95328c9d3e97ef601db4f08ea508bc53393e3b2722224273ac63f749d6a922c7b42787e932d7f60ed3ceb03667fcf8fc591d4ac97f";
+  sha512.doc = "46c2950db73fb557e81887f605b866827b6ae7e027a684f0d24cb3f9d5962a3d83aad97b84e61617381af8d0949057df17ef45d629e992e51c80bce3474cc742";
+  sha512.source = "1295290b8c5cc814f6cbadc2be418413d35a0a1cfd313a69b05fc8e5e47ecf5da0cbba73b81f499f0085a55b7e783b9bd82b29ce1072792fa34e422596a117c7";
+  hasRunfiles = true;
+  version = "2.1.5";
+};
+"subfiles" = {
+  stripPrefix = 0;
+  sha512.run = "9a71fe71fe0acd6f9df8b94b29b59416953e353857989d45ad974e6cc5f013319252f1f02f4feaf4bc788013ae3acc5082361da0eead42da1e51b344c6388727";
+  sha512.doc = "4c7470b61c49bf20292806f41ba21b824091a9c46bc3befb46dce259e706ba3523d1d41dfd45dc1a4406fc993a974c1e3f13eb6f7bd849dc24c21668acda20ea";
+  sha512.source = "ef5bd2853db5150d6c7890fa96f7eb59d35577457cd9c8214aef6e0afade618d8af17b9b8a9640a8d556835aa8e7cbfa6d20e735c440d90ee03266dd2c42186e";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"subfloat" = {
+  stripPrefix = 0;
+  sha512.run = "d5bd48fe7634ef6deec540595fd23aea21d95d7c68d053bc65eeebc950e35064add73e5b81e92d3a3d4a4dc938448d9c9a27bd0f1a625e4a9f425d4e2d55f237";
+  sha512.doc = "400b9b272e51cd9fa7370f1cf7cb354dc1235fc41d57fb07061dd08b44e06cfc17d38c1be3fd5bafb5ed6bd0404660c46c9bbbfd2fb852297f283be85424c088";
+  sha512.source = "e72b55996a07665b1deb038c5924e7a71c7b7aea761a1420d4c38d64c1ee98b8663b4a996ae39a869cb12b6ef99efd09c989f937bee18f05a1eba57856dc686f";
+  hasRunfiles = true;
+  version = "2.14";
+};
+"substances" = {
+  stripPrefix = 0;
+  sha512.run = "c7e3d72a506242b79e99c531bc550c81081d59c5a850af52ca3b86054a5eae42f9f1ac5c7808f54c404bee829f4cafaa1807c46ac7b994cd0f88ade1aec94c5a";
+  sha512.doc = "b2900ddbd6f8618522db171c5fb8b35ce5e5ab6b51fde609a18e6b5656437709772dba683767ad23ce955463a869c483e5e3fe81e1f9b5f7523f4f0cdb87a4d9";
+  hasRunfiles = true;
+  version = "0.2a";
+};
+"substitutefont" = {
+  stripPrefix = 0;
+  sha512.run = "d060c12b1283ebcf314d6f9f6efd2ed94151ae7030a3d6e424478b2e2cd05753260837f1b9c5003735e27a7eba0313f29263e9a8a8892264bec131bbe07ef9d1";
+  sha512.doc = "ce241b95d029651d2de4464880f7f59e4909939697537cf5257bc2e132a476147263c8e9253ddd1fd35fd62dba73cf4d0d06d41bde26b11776b83c456adb0fb4";
+  hasRunfiles = true;
+  version = "0.1.4";
+};
+"substr" = {
+  stripPrefix = 0;
+  sha512.run = "979aaff088f7bd521e2af3f008fd6fb9dc908ec7c9f3963ab7b6338ece92b2a7eebbf9b4974ab87f73cc71ecf7ba92c25d22be8d1fdd297d066da72f61ad1d4f";
+  sha512.doc = "97adaaa986a8540364cd6901448eb47bfbe9d53842f412100696621c55d2209807d0d527c8126d9df7b5b38b0ba2f0598e79a467934d9069fe96a2d9125b701f";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"subsupscripts" = {
+  stripPrefix = 0;
+  sha512.run = "a1578fb66e6068955c4aa69b8ccb951e79fe55616ceaac8d5f01b62d8c6e862d816e0e1ff6c387bad8b8416a3993699872b0ee3df4f432a733ded0eaa60424fe";
+  sha512.doc = "b1424b69633b1c09fde52a38c2e50b6c744671292875688b295586bfcd340283c03a122c83298e8be9bf714201db35f0000c41720a6db49cc09591ae69a3d176";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"subtext" = {
+  stripPrefix = 0;
+  sha512.run = "0ab32328d346bddddd37094ec086727222bd386bd24c1aa164aaa0cba85d60cf6be2aa26d64bd0bcf63f49b0188e79a7212e8b98d2d7400f828ccf10f60272f3";
+  sha512.doc = "cd3fdf312f2bd7d30c3aee67309220e8e75d20ea69ffcb17106812f0423791dbeb26a8ddd3621cd48e6b3cab5c910083f49aa18b439d9f8114c08002cdf8826b";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"sudoku" = {
+  stripPrefix = 0;
+  sha512.run = "a5a9ed2ec9a5eb2cfe973094c6bfca609923ee14ec51916051985bcb2533d1f6670776877252f50a2f16fb54e3318adb15fde907182da215d1db81327fee313b";
+  sha512.doc = "7e1fc099e6f84e0e22f6e479bfc611ebb8668fd1391c07f877abf4455579248b99108c9b6224da3a0abec4e0853ac8ba8f817e80832629a1d3b624b16394c29f";
+  sha512.source = "05e89ce1f640ed336d8d7447681517b6fb827fed72e8245998c0b11f7f767b8f20e9688f3740223213fed0e860c9304748a11fe94b1a8244697c79a0db54d441";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"sudokubundle" = {
+  stripPrefix = 0;
+  sha512.run = "da5c7954dda7fb8076d9b2fbd8a379e416a162ce0039a0566799bba0ddea975f3b951b7615cf50819440b46c419277a080b6e1c3c514e73483b4f81420a4b6d4";
+  sha512.doc = "6878ae9a2734e5efb51f04fe24cc30546a2c812ccfd5ae62cbbbc94496a081b03f7d2bfcfa6c7edd610cd6eccd741c3dcc3441a6d437eea5f310865dd13d30f9";
+  sha512.source = "00b0b27e9b97dcca17113d8f314480b2617d18603bf022631f6553f2b8a7c4e7d30e1718cfe4ce1ede7996d7ebe7905d25480c6516df4b3df65403346c050beb";
+  hasRunfiles = true;
+  version = "1.0a";
+};
+"suftesi" = {
+  stripPrefix = 0;
+  sha512.run = "b5c845b35d39c689f0dc63cda289a2b3cb28199c843d46bed2bb0549477a5756b31afd99dcb7de9a0a3d86e93264f8ab3755ccc27c63937ebebd4283b22491e1";
+  sha512.doc = "995905861f47c1069085cdd7e52fbd85045d1b8a1800522e78fa2300a2923029a9ff11aaac7b557ec30217f5d99c9d873dd49cbb694355cbf601911cd775b343";
+  sha512.source = "e743364722e6f87aa375f19b5234708adfe83a4788cffa35ef94da0a3bd5933f78899d815fb75496136b28e61f337f6eb5c7be562898d7129ac5fe5fea140f6a";
+  hasRunfiles = true;
+  version = "2.9.1";
+};
+"sugconf" = {
+  stripPrefix = 0;
+  sha512.run = "413a4e36d4e4623898ffef9109b7bf26b6c8769e05d9d631898420a62d0766dbc8597083c6fe27393c8769f8a55d683cf52e3c650b9ed521268064bf510e76aa";
+  sha512.doc = "9d4b4544d559fed2806783fd8cbc23485e4a4d14afa6702a90845786449b8fea920277c4c7d1bd4f5fa89ceefec34bd50e617a0ffd3bbee30711fa5e63a2414c";
+  hasRunfiles = true;
+};
+"superiors" = {
+  stripPrefix = 0;
+  sha512.run = "783d14d75daa63d108fcf870004a46680c643699ccc7256906a06fc7ca4482ebcee14f120209bd488d5c2890a3c8c33d132a0eb23d4b93d04deb05eca6bd0970";
+  sha512.doc = "f96d441d9dbd470023c1ecfe3912336f696dea7dcaf7b3c052aabf9c702869cd0ea27a28ffbd34294149c98d5bc23fe004871faafdfc1eb72fcc4fe2e2591d82";
+  hasRunfiles = true;
+  version = "1.06";
+};
+"supertabular" = {
+  stripPrefix = 0;
+  sha512.run = "2501d5ccc7c4209cb2df6bb1f68ded224fd65fedc03d53b6854b5cb7824e5652cff18c8251f768e0ac1878beaa6c430231344d81fdc5dd375878ab2b62158d93";
+  sha512.doc = "7934c89c7bec6acc26a96662fbbcd0ef86ec9583d86b9c5de41e9d5385b72f8fcfdd04615c667f7e60632836e35d1ec0954f9d083a09a9b41d1aa903bb20475f";
+  sha512.source = "aa38f07fb900f0649db23d42556ff8d73ee3d84f995af367dec74fe275da32a167cf23bdb7a9e20eda9bd7b8e59c2c21d468ad47c4215b9b64894aaf0b0a896e";
+  hasRunfiles = true;
+  version = "4.1e";
+};
+"susy" = {
+  stripPrefix = 0;
+  sha512.run = "406a172dfb787c833d8d71e74cde627fad5dc168a1be7a71c4d0006e2f0a6625738ec11f99c9215af6973b101e17abe8eb8355206bdaa18ab3fa6328d7ea42bd";
+  sha512.doc = "f802ccdadb5ac2bd96ff27396b020798ac023889f751bc3a286392f62341ee6ac50486899f4e633b90b85320f1bbb679dfba98aa3746d01f0220f07cf65549f6";
+  hasRunfiles = true;
+};
+"svg" = {
+  stripPrefix = 0;
+  sha512.run = "10edc900be609c7fd4f21b0d4aa70e06edc6bab8ac417635ffa6d8d6b06b64e9802f8f510ad3f288d4351983f4756f013e007d309843a271f88f8f4cbde8e05b";
+  sha512.doc = "53c9d4efe37b1281a143e0f65cad3a559f9e5ad0e92a92d91da3301501a09f4e24f6a3efe6ffb919718cccf5419c66896e5bb50f8e64abf90ac0c5ced0b16df6";
+  sha512.source = "9ebbc53e9edf019322f37e7b95f87bbdd37785c33785840dc66a706c38180a9646048a62e4a5aad9f7aaca9ea175256ee5a304062aefcf4d566a46599b61767f";
+  hasRunfiles = true;
+  version = "2.02c";
+};
+"svg-inkscape" = {
+  stripPrefix = 0;
+  sha512.run = "e1708206e6fe85271e729ee8c9bf952f45af662a54ad2e816b449fed263fefd8527529ea777b85a50f736d0ec7875afcb3059ed2ac81afd45c54ccdc687c3979";
+  sha512.doc = "609d1a7d2256461a749c3a74ac5dffdb7efec999faa15315872f4e61884933cf47c380bfd8eba53de491494cb498a45ba263dc889fa0fd337c48f82842fa6bdd";
+};
+"svgcolor" = {
+  stripPrefix = 0;
+  sha512.run = "617a880e8e94e781819a8ab3a169325e667a18afd83a10f070a56dd9f1813153d8f52cbc3322c264ee249c0e70080421a9e1debf844ecbc7ea6c2368a6ac67e2";
+  sha512.doc = "02a28da03f72cd85f30f73282558bd3aa05a82318cc90f56af6ff8ae29e1f205d3c05553598b88ea13206b4d54f64ca36d5a6a8d6f8913e08c185c7bce6011ea";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"svn" = {
+  stripPrefix = 0;
+  sha512.run = "a64768b2c5931ba6b9e0b910d7bdc1473a7dbc01a70e41fbda46b4064ca1c41592f3d704496199e41ff27ac4d0ccfad56d9d89e536176010e35c1c8f56312454";
+  sha512.doc = "123ce3eda16e4a1c44a85c6d2ef2bf4e5f6b9e9d939cf66eee52ad1326f06b35c457f4df054956dc16c169031909f2ea93aca380d2ba080f6049795a841dc34e";
+  sha512.source = "0033fe1be2ede6984cbc0397c20187cc03520b5d893f7ae239bb688354d7198c4e96cfed09dcdffe7160769f6dafc9995d77f8f0f9def753048d4ecb8231ee69";
+  hasRunfiles = true;
+  version = "43";
+};
+"svn-multi" = {
+  sha512.run = "f1367560fd6eb6247097d5e5901a56a01a90941f584797f6a5e3388cd9ebb5e33ae98a8cba69cccb4b42feb01a29d8507de8e814be8ca2516ba24ce6a0d929e5";
+  sha512.doc = "8e54c597bec50dc541abe4e1be7ceeca9575c5e9f3e201bc66eaeab11ea529cfe3724389aa2d4938f6272c93213dd20a7ea89cc9c954f882ce916c6d610bafb1";
+  sha512.source = "f90315214155802235b1137276d615bac052adb9295dba04443976fd7147898616e2ff8e32bc1c3f6cceaaf59480c9acafa73cc53ad50da2bd07d20dd68e2fa7";
+  hasRunfiles = true;
+  version = "2.4d";
+};
+"svn-prov" = {
+  stripPrefix = 0;
+  sha512.run = "24325a3de52afb9328a4b608710b94839c77ac65b13f08219f4efa24680ceabc410135de3c468c89d5d283a8986f2a9e337ef2285241ce776d0270622e0e77d9";
+  sha512.doc = "b6de41de4535833025f2899ae28530f4198717bfdcf06b090d054c20bced3a524ae9627b1909eb7afc6ff4e09d5525203b869c09d23facbb86e207ab2193b57a";
+  sha512.source = "c7586e4592f9518d2a03218c9afe614422bc8021a192279d7be1b090bd09bc51191d8c0a2e760514206c53cecf5a7b89c617a4c209cdb878874a0e3396659a3c";
+  hasRunfiles = true;
+  version = "3.1862";
+};
+"svninfo" = {
+  stripPrefix = 0;
+  sha512.run = "efb2b358bbf5a05b17a591114d0f45a38ff42837751d00b88183265d9bf595ba39377fc53dfe69ca01ae8c1776e6d4ded9c0f636e0e697b946f1d193b39c1537";
+  sha512.doc = "f8f20578da98d54181475d23be625a80c35af5e464fdcfca80643f8701a029bfdf03cfb13ec42be34312eafc372e42e5bbb4260aaa5066fe004b2fd6fcb2acc7";
+  sha512.source = "7ce865a81c8fcd47ff2cf00b5304e40ca0d534ee63b23cf24eb716926f3258a8081ec6aa9bf160a3fce741f1dab6c62e069ada8f5298f9a354d92c34ab36058b";
+  hasRunfiles = true;
+  version = "0.7.4";
+};
+"svrsymbols" = {
+  stripPrefix = 0;
+  sha512.run = "1fadd5259d527daf316502aae6072865b9c6e2efc1ab92f4bc0c3d1070ca4dd863b8f7366c9e6909b7885858c1745cd723003a9f4bd28e8208889da2c21f18d3";
+  sha512.doc = "6ff7b9c1efa4b59c453b42fd37dc66e3c79912ff0bf9765b2745fd0cd946a4cfc4a063fc943d1b5919368f8a5809eef5cb7f3a4bf3b6cbdf8200f42180d21f92";
+  sha512.source = "916ca0f14ff1b9ae99fc609c41fa655eef39bb053ad39274dbe43167dbeed06ebbb9990cde6c040fcbf9b432b4ff89651195df094aa9c35bc172e7932917148d";
+  hasRunfiles = true;
+  version = "2.0b";
+};
+"swebib" = {
+  stripPrefix = 0;
+  sha512.run = "c34174a73f2264bd0963bc6932f6ce840a84d3c48ec9aeae9f7f92ce25ce5f55dc2e4c05d1eaee54c18b4c0ef9adcf494310cdf0a3e1d73031910b75a6db30c8";
+  sha512.doc = "a3db201554a0b828cfc72d47a22b777fd7b44b25c361a4d8f032cc62658780628e83f6eabfbf342b867fda335c1ddc228347f5fc66651193c8229e0bc6e46f67";
+  hasRunfiles = true;
+};
+"swimgraf" = {
+  stripPrefix = 0;
+  sha512.run = "d4bd2097892db6467ae1c80032e4ff5f39e3da81f45ecf472d350297687609ff37b8498de9e44405ad9c7dd7b483599c844672233d289c6cc4ed1e2b9e2bb842";
+  sha512.doc = "2394080a393e2a0cc8e8299dc4debbcc7548186a714454c87662c22a371308c7e8e6705c9dcbf6eca632f2f80788a733f9d5a9f3fddb2f46167fd50654c5bcdc";
+  hasRunfiles = true;
+};
+"syllogism" = {
+  stripPrefix = 0;
+  sha512.run = "6f74e300794afa114da0f498bf70a389500bd2346bd0bd3d9ecf0f30d6167bfc9ea094024039775c649f5feeaa4b62384072ff26fc0c0fb426634912f440999a";
+  sha512.doc = "1d2f3cfb453a4964b0e64a486a7c466731fec93e3a4210b216ebe9bc311923f055bbb903c26b5177c34a16a343e5f4e1a0643c7f6bf635dc0762182185f6e362";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"symbol" = {
+  stripPrefix = 0;
+  sha512.run = "d942031f4a865c9db3f1deb68e9468132e811c88a4de67661a25431506a8ea41b2a9cd36ae0855208802d5b7cd4495b3cc27e9e18996dbf96f2529fecf4683e0";
+  hasRunfiles = true;
+};
+"sympytexpackage" = {
+  stripPrefix = 0;
+  sha512.run = "14813cf24b562ed135e6d5a0078306f0687cd464915ecc17e61df0bb5d9900d7110e8338c469d4d55664b2fecd1eeb6bb4f359b11fb2a07bad72a442b7698842";
+  sha512.doc = "c4e7e386852b3acd071d1addea10435985e7722dfffd4933ac2c3821b5a75e8c9500f5c42bb6b3e2315bd06b8d3e2ad12423c2c43547bb51b2f59bd982d7dfd3";
+  sha512.source = "7dfa3975f5c042f7196ef6a76e31b79caeca4101026afc53aed719239e7ce701a7917e733bb77297b569333adccab6b5bc7149befdd6eed4f09d46ea38684579";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"synctex" = {
+  sha512.run = "9fb5f8c3729115a91a51efb3645f39809b07ef9eb842d2ded1d64cdfe558c0bfec6234827dd87b38c40bb167225a88c6ff09e3d7bd49b50db7561981105bd6a2";
+  sha512.doc = "3a61c57a78772d6f8441db824f489c7dbd5b547760b43dce500ba9ec07780a839d0c6db7f90921846985ce4400bccbec2435e6d4d8bc2952fe1dcbeb9a23c91f";
+};
+"synproof" = {
+  stripPrefix = 0;
+  sha512.run = "934235e8eb4ca51a906ca287c5524cc3b0b69c649b47a9fa0fc2c9fd664199eb6fce835d435e97e0b24bd0662ee68b8db471e3546c4bdb402bfcc19b1fd02c50";
+  sha512.doc = "9a12fab29c7c0118bd97a7af1585ae97c5086e7a1e9529624b7fa43a723151e00537b9488a42628d7f6e93b87d092fe0dd18476c7d232e3ee74597186a92585b";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"syntax" = {
+  stripPrefix = 0;
+  sha512.run = "be1e049a98cd7e45cec9675e707575107af9c613028012b8fbfa658c6c9cbbac5782d3a7111f37edc719fb90e7c168c9a98a3d30a4c997b6ac4ed0691fc7fdc3";
+  sha512.doc = "7d0754c08081abc9867d0d40fc910ae5f8b34518004bf698dddc184f0b514d75a7feb3085870cf8322b3d6f3bc4c32ab50acdaeb56b574bf41604a18c23a6656";
+  hasRunfiles = true;
+};
+"syntrace" = {
+  stripPrefix = 0;
+  sha512.run = "613c70859eb0c710c43fa4a62fe8b8d38a407ffe94c532d80927d00fd47c17b6570040f5d9ace5035f4dc53deef97419f52ecdf021ab11d5629445153b85ebd2";
+  sha512.doc = "0349aba5e1455a6676cda43c7981677cfadf77b9898a79d90104808e77cd351f219392a91f83b670f7f1801babf53854f8719c32b8da112fde849b7b120e2327";
+  sha512.source = "a6b5e08c1eae9b6c631f2d2316bf0d2afba452be7f8aed0d6f9724dedc7d50785ef09e1f29986d2cf869988e3b5c59332cd2b44d185b298e59333131413314f3";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"synttree" = {
+  stripPrefix = 0;
+  sha512.run = "3fa23536373a41957d985e5a0aac744473459d195c1e7e00e60f2b4aeab15d8f150bc76fab05068d5ae4994ce52ba4dc35380ab042cc9917a23962b2f0a7094a";
+  sha512.doc = "164c74dfacdb0cafab112d270b15ad0b7c58be0e8d65c5ce08f80182971b63026584c5c071988d9b7053f99b9d81c893f8b103a3145f1128ffad880259a16264";
+  sha512.source = "3fcb8ccf6da19cb01f6a80f97bf98a84c86ca7d06a95b193cbb4b33968c80cd842554ab8d5a9127af0434b9abc83f2cbff428bf1bb976fba01e56d5770f6e20d";
+  hasRunfiles = true;
+  version = "1.4.2";
+};
+"systeme" = {
+  stripPrefix = 0;
+  sha512.run = "a71c84f41447a568cc56b2afe139dc7df23660c329e82c1a0d40e3bcf41ae775b2847f9d391bb591420cc546a36d0a69571a829822932892af1dcedc29e54e38";
+  sha512.doc = "4cf7120bd6291edbb101ef1fcdaaeced3a6c771052d8f176b6c11365e1d48699978bc0593354ad9b132e05fc6f14f4074ccd7326492391c49c34a8273f4389c7";
+  hasRunfiles = true;
+  version = "0.32";
+};
+"t-angles" = {
+  stripPrefix = 0;
+  sha512.run = "dae9953288c0067e233ca26d2d5e7ea32207790eb16bcff2f0f56180dd9a65e70c234de48652d053a858ec92940c3c5fea10c699c697b65a249a8c84fa050b71";
+  sha512.doc = "32dc9adfda93bee5e61eb062e6970f6e093a09016a6ddf32f82d110b7717916fcc92f961c8be682958d1f3f345e02ad49cde4a85ad4a0d0add08a0bc80109d8f";
+  hasRunfiles = true;
+};
+"t1utils" = {
+  sha512.run = "93248c576de8f3a4bce051cc18af8327e5d0f1fc2a5a91bce99663a2fb0ffd718e5a472c5bfbae7c2cb9435ed795ae3abe8b44ffcd0c6de29be02ab9d1b6721c";
+  sha512.doc = "839bb491b146fbb5bf9b0dc638a9a853dd025fd211754579ec5fef18175df835ed412aa957b4483064ef25ad4f6afa7c928e8f902f677a3afc7f26480b70d4ed";
+};
+"t2" = {
+  stripPrefix = 0;
+  sha512.run = "9a47581909735a9ba582b71a132c925beab45cbfeb0201c93d138c35670fdf65580e6dc20d9498458e01eba7088c81d67cce329465e4763235e3f3404959c5c6";
+  sha512.doc = "8c30658eab02eb576963a6a2f722b143444abf5d286473f165b6cab84c75ef703462a1841121a5d12cf822b150ce8c23a96256754a2d662fbe6c451a058333ef";
+  hasRunfiles = true;
+};
+"tabfigures" = {
+  stripPrefix = 0;
+  sha512.run = "d2a1fe985a74427888995437beaafa62b5def851d6f2a7788ead9cddbfcefd7206366a6711f29e85d2705c0d787bfc88accc56c93b827fa372ebd9cfc562f2c6";
+  sha512.doc = "5b2c7c5bd350c3dba68117151f3cfd6eac8f0e7ed602b44406ff9d15a79dd7de7e0ec303b1163e3c882412c86adc48afac6c9653cf1fbff86e7cf6a7ce852c94";
+  sha512.source = "78602de26e50e0d9ee43b8289a96a3639904bdf79983d4633d6c11af1c8215d1e77649f640ecc6b3f37cce30e6cc6b4c204e2cec58a3454c8b8486104eb17922";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"table-fct" = {
+  stripPrefix = 0;
+  sha512.run = "a6300b1989f536fecb27d300bc0b27afd93f7f72b894fdb87bae5b0756ab241985ee2e5b4c0b68d1b2cc5611aafdb62b300fe40e2a08df5f6b11774f13309756";
+  sha512.doc = "a9108cee93e6c7250643636619f923659d468a2148f5b04168fb08738d85e794c1050fef8152fb95d114551f6967c955f3d6f548e1ede37711b98b1362e9910a";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"tableaux" = {
+  stripPrefix = 0;
+  sha512.run = "1846fe9da749b92700be07c094556fd296d47123df3a5d6823570056e6ce2ca8ef365b70f6ab2a8577602d1be338867fd2610403f89729dd51632d404951f84f";
+  sha512.doc = "cfa58a8e76dd61659f6c13ea6b3f97ae484715b735028c513576312dfa7dfe92c8c15a0858077e3ff2399807274dd5a836182ea65b948a976f6384bd8d1b19d6";
+  hasRunfiles = true;
+};
+"tablefootnote" = {
+  stripPrefix = 0;
+  sha512.run = "90812cecdbb464592b17b8faf4d81b221844a354b0a3d3ea30cb72d0b56c4ff7eee701caf113e13586315ce846d30de6ce8d5028966f2c310527e34e8ec90464";
+  sha512.doc = "712c1ab696f5924058f4ea6ce12e3ff14fcbf79a78328259c4b9acfdaad33e9e4dddf36dbb322598f09a8fa3ca75d68b474fe1a4bcd4d25752704e0c4e6ba5d7";
+  sha512.source = "70456471a5997592668198463d1e44af464e9c24619c09d186c952c5afe2bc5171d5c29442820b267d1782a966fbe63997694427f1c870d14ec6194ac99ded52";
+  hasRunfiles = true;
+  version = "1.1c";
+};
+"tableof" = {
+  stripPrefix = 0;
+  sha512.run = "3eb5dd3a3399825a85280c79c9f013dc9615a534e475d64777ec84924c9257aa930b7fe677a85c32b158b4099d5b61f306ea54f610fa1c9db42764fbf5b683da";
+  sha512.doc = "609011dc53d37fbad2abf84531ab99d8f60b636222debdf0466b33ed85964326b688a7e5d957500a970e1e974d5fbcf1dfc198e146360b6d43b58f6f3d67c845";
+  sha512.source = "b55b6834b7dcc3ba83f3e8620ffa9ee66b0a6962a4c1b95d7b74ac164300334db89f432af7407268d00190e79333fb3e305074feaf116344957a5a986c842d17";
+  hasRunfiles = true;
+  version = "1.4b";
+};
+"tablestyles" = {
+  stripPrefix = 0;
+  sha512.run = "429d9e66e9dcc06814e75b08d1fcc9630de6cc614337c73fdc06588479e47e7df72dfab33a91fb7cb230f9e1ed0bade3d8e56fa423c1f2fcf0bac6f246620069";
+  sha512.doc = "43c5dedd804a0aec1b7ad289d8113bca94d6fac7e9b5b8628880e2d7d7e4f0e29cde12864747cfcdf24ceeee0e143652c2acb2b448bfce0630b6915e2bed237c";
+  sha512.source = "26b5e4b276a202ba2b351287ce310b52a256659c55f88f68259ec358636c117d36dd8834542d385450c531d4db1d5e42e053a11e2a9c21c43fc72ce38c453072";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"tablists" = {
+  stripPrefix = 0;
+  sha512.run = "ed0ebef871c7bdffe93e2cc38b823dd13376c53e4388daa8aa1198cb213010594c9bfe468ec0e42901df2dbd1b938e7f037cf49ef2cf6d9ff3bc53502b220a14";
+  sha512.doc = "afcfa520702fd873b4deb7c4acfbd4290262a0df133c87f01698d20b8d17fd5b5932384124f49fb4d90155da284b873bb3ee1a2281955449f8ca2f278c38d39f";
+  sha512.source = "34ff94c3adfff4188daf4ff906721833dd925c84f107867d7931fe66c58ea8a8438737065f64a9aaf57acb0eeac9e17e8388dee7a0af93476f5add226d4481e7";
+  hasRunfiles = true;
+  version = "0.0e";
+};
+"tablor" = {
+  stripPrefix = 0;
+  sha512.run = "64169a74a787f8877d41d5e32c42e5659950854a1e20cc05103b3ed58c54fb800a9af0701a40a6c5b75553b86d675fbda51948106cac464785c3d46aac77c979";
+  sha512.doc = "77a6d1b47337f015dbfd39074e1dae417c3bea3c9635955c6518d691ff336854cdd7587af54640282b45f5bf3885044d3b6789a0a73f39a726aeaf0afd27c883";
+  hasRunfiles = true;
+  version = "4.07-g";
+};
+"tabls" = {
+  stripPrefix = 0;
+  sha512.run = "1a341985ae61f047694470d19d4e192b4f4e01c0bb595d91b1f80080eed3077be4e40b431cc05b1bb482f18c30bf36e6076542f2cf37a49dd6b065b0fe044bca";
+  sha512.doc = "f458058964660b2b1ff2a61ff8ff2ffcfe7ab103e9714cb1e7c307a8bd39c5a1a6990683c4ed7aa401cbe9b9dcc083dfbadd80a5aa00bcd64c0fb72638cf71f2";
+  hasRunfiles = true;
+  version = "3.5";
+};
+"tablvar" = {
+  stripPrefix = 0;
+  sha512.run = "c0401c0ce273b59da6877f231b06f3e4da572a6531fb6c587e29a00bb0f53edcabc725453c2ad1dbe6ba0458721a7e4b04182fcaaeed46208a760a5dff9651d9";
+  sha512.doc = "3bb104a3f50375d2e96f908126268bd3bcb3e371fdd339ed7bdad9dbbf714480b89a4a11625a2b537e09f214eccdabf6c0faee84dec4591f0627783481eff20a";
+  sha512.source = "cfa218cf1dee3830f72af6996b1a5666d65a8729f65a8a652744bed84204122a65d514f539c2d50537c3529fdb9555ad5c5a2698f4459e11976e4b9640c8cfa9";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"tabriz-thesis" = {
+  stripPrefix = 0;
+  sha512.run = "b1e93632159fa6b5ce46a13b6d2bbd3115a09fd7c6908a8465934e37feb0633eea827fa1ba8521d91a0d30492135a428463f6aa99cca0c6fe7db640d1310c6ae";
+  sha512.doc = "e56f4a93c7cdc68c227791a21fbb06e44193e9681e677f383d19994c714bdb8d0487f9550c0c94a78890f54c7342aa777349770b4ad04b58e191fa62b31a3462";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"tabstackengine" = {
+  stripPrefix = 0;
+  sha512.run = "2f6245d65a7d711d598b894c8acfd8d2a032ae210eabfa219934e8fa086bbe3edef81e73092234e5528f9f62a6856546aaec7eafe5572eded155ca8fa5fc3999";
+  sha512.doc = "6ce0b2ec254e44bca6f6cb746d4e3762735e9bb85e561df7628d3a2e2e35ddaac1635c825f27900d06badeb310535e73c84495e24748c1181825fd61fb03105d";
+  hasRunfiles = true;
+  version = "2.10";
+};
+"tabto-generic" = {
+  stripPrefix = 0;
+  sha512.run = "5b3bd8081ec6800c96ce4b4cbdd8091578ad1df2b625fb2792202a6c31f3f126d612f99f04802d82d490cb529e03e63f98b01c7842ec0df69b48c2fc289108fa";
+  hasRunfiles = true;
+};
+"tabto-ltx" = {
+  stripPrefix = 0;
+  sha512.run = "3679dfd17ada1f2959def0c8eb9d434b84e5bec7245d7e5059e1d1b975248ef54ee04b6178cedaa8228805892f323aeb33d57bcfd4c37bdfb7d57f43a516da23";
+  sha512.doc = "bf428fe02b3e1779a5ae685690527102f3d728095f55c3af0c54cc42d6c33430a52a0a27f57003cfe30eca3bfadc36343784ec93224c12ae612d2e24b4ec5e0b";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"tabu" = {
+  stripPrefix = 0;
+  sha512.run = "b5ee526ac9f68edba34784ed646557b8b1b28a0192c5acefa81dab5a637050798c4a7410589ff98549b2a29e30686c518d2f319144c7e4fb2ab1464d56d2fac6";
+  sha512.doc = "b7cb976e6908f219d50bb3e30dc7874b3c9843c8c36bc59cfb909fd54472c4767e914889cb4f50b4ad426176764a09633254e05d271daaaefe0b0beef80161e9";
+  sha512.source = "0684c272a9dabb794a0dbb3900006abe2b0997b6e3335668d058bd9195a6661ee523bb7324ec2e98a7cbfa88416310ec2427c1abcf01986ad1e07a1008bd506b";
+  hasRunfiles = true;
+  version = "2.9";
+};
+"tabularborder" = {
+  stripPrefix = 0;
+  sha512.run = "a30f668ea84238df674c079fea6b05878776b26b4f6465385e26b01b16181825a8cc20767fa45eda8e7870d272875bc9664aed145885dd655d15258aa072ebb7";
+  sha512.doc = "f0376dfe99c68523332be0e83c0a186d7e3051862fac22785b4ba1273673fb9b1776654a127ba1c617af67063763e5837723ca2f23b3f7dd012628bd40ad0604";
+  sha512.source = "862ea87bf23f2e4f42bc15fb82d9e417b4e51d7fbd555383cb985892b9b40734b38dc4f0dfb09790040c64791beb2cb2c6bbd2df9373c75438929be011748978";
+  hasRunfiles = true;
+  version = "1.0a";
+};
+"tabularcalc" = {
+  stripPrefix = 0;
+  sha512.run = "7535398538d6802c4e70858028ce6e7414aa8a88336e71f90f7f909d015bf896eeb5e6652cc5bc5a2bb384bc25d280d8cd6506f7ba05823c20dda04fb3adf0ba";
+  sha512.doc = "7e35cad1507cfb62117aaddae77c3faa5d19c4e320193afa0054415e84d49833ba64afdf743b6241d611dbb4d45c6a532779293924f20b6c748659a361d6f30d";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"tabularew" = {
+  stripPrefix = 0;
+  sha512.run = "512851ce7641e0904dd25ab8a5cd5ac0dd281154067e09c4389fa3d6f330d30099dc60b252de4ebee52a2cf28d6b7d10bcf63fe4ab1472238db35754adc1dba6";
+  sha512.doc = "4b5b8aca9d9be8cc6618d9393278f8da2069341a982cf6cda9e561b64bc158e5c08cf9257b592f82134cd74ce0b69682e15339d9068d9fedcdb26626dc2b8a7b";
+  sha512.source = "9779876bfc65936043b0b4918784888acc68a8e8aec3b5eab6eea5cba3fea10ff0f696d1c38f68b37227cc086ca519630a96b945b33e3c1b853ee8ad95ec08bb";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"tabulars-e" = {
+  stripPrefix = 0;
+  sha512.run = "c755ffcbcb5636b641a5b31a7fa2b2d97ce2e3e0f14fd08c23e0b234abadfe584bdd6e2628fffb614c249ffd17e46d56790fedd929a5af55ec92869ec302e6a8";
+  sha512.doc = "2a29bd4c343c172f37874423a754b03888838db7ba4237992ea38167b82fbf7169dbe3056b269d487e398208d165d4fe2bbcb5413c138cc6129fb926f9ee7701";
+  version = "1.0";
+};
+"tabulary" = {
+  stripPrefix = 0;
+  sha512.run = "2c873a3840d8bf06a095ff3106b317ae6acfb8498d47b0229a37e247e0e0a9df80300759d65d13ebc9defb15d1cde0aa1e956d2f88bebab3311af459be47df0a";
+  sha512.doc = "b619c6b3dce1421ad4f06ab5e6f0ecaa6dc4f55076b66303a4e5409b42a4a9e34d218251177234dc0f3dac13046638a75623db0094978badc4db93083660f5e9";
+  sha512.source = "aa075526ddc2f793676ff45e9d37f02251660cec33b3f4a74da23e725181e48b2103fef16adcd6d622ea2c422a5fda1d46cd9fa1c35bbd72f06f77d05f3b4c58";
+  hasRunfiles = true;
+  version = "0.10";
+};
+"tabvar" = {
+  stripPrefix = 0;
+  sha512.run = "c03d57d066a5955ffe24900f97de82f9bd96d8ebc20ff7b9c11c1e5a858d8f4a50b171f687e041d629a7dbf43da708bd03aa0405419c9879b9a5bddf23021cb7";
+  sha512.doc = "700e42e3e8d37e1b4e11af90f8f76bc2c3234984aa39b229138b5bd86418797bb8102b4624a43d3ca1738a7f848f1e09164c077d7224819250c7e034c10b4103";
+  sha512.source = "2f20de4b18e444112088d089c92675f3f5ed4f93c1e630b708e3e88a777aa38e2c84d98ec0605a7e446cfc7a99c346190b559e72f4735c7d776151e76a38a987";
+  hasRunfiles = true;
+  version = "1.7";
+};
+"tagging" = {
+  stripPrefix = 0;
+  sha512.run = "8947ad0dc443891e0b5a395a27d2857acb5879821443ff64cb0b15b99eea7a69401ba165b26565bac1b0036032d49241504ea2e008106a85cdd896aa28abd9e4";
+  sha512.doc = "06d470576136a96edb69bf595e55f16416da552a5f4a84980ff5393689cb58246d4fbe62b979c22b85c5abc58b926d9be63cd0ec734b43c653a0d0a5c4b04d8a";
+  hasRunfiles = true;
+  version = "1.1.0.1";
+};
+"tagpair" = {
+  stripPrefix = 0;
+  sha512.run = "146c2e957965fb7ad9976a4b3b6c40d28b8d0cdaf0c8b9627f51dd55ba88b32ad7490bf000bb853a416b5dcc091243b9d6e92999431327a05879adcf89809d7f";
+  sha512.doc = "af9dcc1c1dd0a5e44d3f436569cf5d36f8154b70219340dd914feb3d8c036164f1bd70eeb6819bb51a06c0f5c5dcab1b3ede8be4b4d22b2536529474d0d841ab";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"tagpdf" = {
+  stripPrefix = 0;
+  sha512.run = "4cdddad7f59d6d9365078817b99faf9b815baf55e2c7fa736a431d6aa11ea4ae2a6d8d825f5ea7c6b5e9d5b01d5420afddee9063273f2b7a92bc0af01d20fd6c";
+  sha512.doc = "46ba8484bd25977fe93c1e9cbb0a078aa917060536ab5d5349eb7f5aaba5c59e2e9da4faa7e16d1c45f0e88bc896e70bcbadb32c4f679bc05931bc39cdf3d2a0";
+  hasRunfiles = true;
+  version = "0.61";
+};
+"talk" = {
+  stripPrefix = 0;
+  sha512.run = "371c640254994616744b2bd0c9b4040415392bb2a3adfbe5f4656faaea5bf3e7d2d4ab35373a65a857fd57112f7fc628321492d5bf7c5b052e0026c277663d7d";
+  sha512.doc = "d6a641789923559a94b0077d718e56258804caa1dec0c9ea0f9d010e92ffc361884664ac22b07b95d20f464d18ac76301a718430d8f1ee30172489cae3b844ae";
+  sha512.source = "10661b5ee41914bdc60b5ab38c887087d6529b976a3acdbf95bf80160c6e432fe6f8a4d6030711f5672f8aea564fd23ada09f92b0e3a2a05ede903026d24bb36";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"tamefloats" = {
+  stripPrefix = 0;
+  sha512.run = "bd45962a9caa5b098b6a6a5c0bd3fb964e13cf2744a5fc960a97910183799d532aba24d5f4774ac29eef14bf1439e285010b2e22641167c826d5a36262fc39ef";
+  sha512.doc = "2b9d013fcb93682e9be0fb1758fc871b4784eef72a0892383a35073aa177ac29acfda5e54b6a919379b43a3dd0fb0b22dd44476857665efb59b2e9cf27bb679a";
+  hasRunfiles = true;
+  version = "0.42";
+};
+"tamethebeast" = {
+  stripPrefix = 0;
+  sha512.run = "75a71590f1d905bd2a78b508d66936975eeacbfa32e850f599e94efa92da2b043edb8b0899b7027268fa131d94283c13432d4c4126afb79d1615bd538af52436";
+  sha512.doc = "0df79f434714deefd60b9b9d32dfbd47ac7e560c26ec0d02465538eefbc779f0252aef235ae2e0a2d2d634d618bb52c73b31c229b5245866239776c742ebe69a";
+  version = "1.4";
+};
+"tap" = {
+  stripPrefix = 0;
+  sha512.run = "07ca34ae47976c65deba5443052001406390befb6dc675af7651141505f088e2f67f39648f14a94f70788eda79221efb05c2246d1991811e697e88c7408f6cf6";
+  sha512.doc = "a61b861cdac25c0d8c7d48f67abb9eed88458d0d55e8afb706adabfbed0d1e7c7159fcf000b8012885f82f849ee965bf6a2607f1b67f2d9191f59f8538147230";
+  hasRunfiles = true;
+  version = "0.77";
+};
+"tapir" = {
+  stripPrefix = 0;
+  sha512.run = "f3d93c9ad813008fa72cbe317d244bca9a70855c20f327d22d1720b79d70019af0f5d8aef237fc78a598a545f44a4612f1e5a7622b34247044ab230bd42eed5d";
+  sha512.doc = "a32573ba9df3d0b30e796f7bdd03e63ba8a96559380895b8db2d33fd9812c8b781b75d19a12a24405c52df13acd9a5f2e925da64b019e92a124d143345bb5bb9";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"tasks" = {
+  stripPrefix = 0;
+  sha512.run = "ac28ccf9510ccbe47160a0f06763c9d565d139e3105191a94571213daabdfa618a150bff70499f03b3eea87f213a071c77ea9c9842b6169ae1f06e2c5c308d7b";
+  sha512.doc = "92d0c6bab4d69902a25956e9ede9e75be10bbcd3318346b9708e63dbd18ed127393fdd47f90b801029169041b3d4dbd1ee08619587e78035750aaf9e59f8740d";
+  hasRunfiles = true;
+  version = "1.0c";
+};
+"tcldoc" = {
+  stripPrefix = 0;
+  sha512.run = "82348df3f6dcedc17a3cd50f709d01b1f2b0e4be9345e63d40ee6ad2aff908f97c7d19d586431e3fe8399a8d076505ceaadb5afe0116093240a6e59a335934c9";
+  sha512.doc = "61f24f628c2b62c02e08e1a2a3a2fd917d057baaf977e7837b1f62e4331e370b83f8a0b00e679c86ddb1893d21af13211185502ed7bb19699d4f33356d3a3a0d";
+  sha512.source = "44a8d3661061ab7dd828fe1cfa8342384e2cd20f5338d54fb0a79516a2cf686a3a6d2a1648d18a4d0c1395a60fe8f8a7b5af0d0c2edc38385852117f408f9e26";
+  hasRunfiles = true;
+  version = "2.40";
+};
+"tcolorbox" = {
+  stripPrefix = 0;
+  sha512.run = "b9b4faf76047b32b6b6ee14907e76f168289f9080b02a189a4ca879be830e2c2700052b4d9c18506e2c57a995c7996e8f6cdb75fd1df8765f7b99a33880f4078";
+  sha512.doc = "0dcaa95629203401d3b3fd8365c6c5ee3bb24a9d1e79c94cef0d00c3b3e05b0cbeb7e4db3498614e4705057ce4bf2c66e8ce75f9680e4f81d0cc349a39671379";
+  hasRunfiles = true;
+  version = "4.21";
+};
+"tdclock" = {
+  stripPrefix = 0;
+  sha512.run = "29e2e50d9fa432b08ea730b8a12228cd2bd3eefe61946e576a262bab06a966c0b28c13d48b1074a838a1a567f9797a943282d17e936db146f15e7631261761fe";
+  sha512.doc = "139c82690e2c9b695a10a6f3e6f94a54c3ae4d4a929ddc18763e248114926554206fb4c007ed758695476de3750ffc1dce3db75efdf2598434f27abd1ac84baa";
+  hasRunfiles = true;
+  version = "2.5";
+};
+"tds" = {
+  stripPrefix = 0;
+  sha512.run = "20b739d69ba9804c12761c0eb76c0b7961657d2ba2fb00db9d083022279cca2b2b176fc7aaba11fceb77da4b7a23ba53c80e98a492fb4929adb545d56f5e8958";
+  sha512.doc = "ab08ea4220a30ac896add47e5422dbf2ff3eb65c3c89e90c87983c5dff75dfae6fc4d6f8cda58f2da51dae505f537ea07cee0e2378da845c20e790f8a1724f7c";
+  version = "1.1";
+};
+"tdsfrmath" = {
+  stripPrefix = 0;
+  sha512.run = "f2c7a19dc327230f46320c695eaf40e9ff17088a709e38ec7f8de23f5c0cbeb18f606bd41625a1229734dacc80edba9d052c21620f7cdf213f60e915b6128010";
+  sha512.doc = "9b0e747f90b75f372f04eddfb1c17dc73c3ef6a95d576077790b23bb496cee07afd3af5d1a53581872255c4e71b933949beae909591d0e1c407d9efc3f1d227d";
+  sha512.source = "f44f98be464973ef3596d6e0d77e508280b597e4010b2c94620aad0ff950c8328ba1d4bbcf22e0f71f091c311d9b99dd979c73c182debeedd90ab14bea9e1d7a";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"technics" = {
+  stripPrefix = 0;
+  sha512.run = "8eb9eab801bd83fbf0d9365c36a202f909cbcd49b8da6887f3e26aa3fcd047b8085e0b405f0f5fa7f2b5ea0ef21a9956114ecaa7934e1b46b1abe55583d5e759";
+  sha512.doc = "2158bee41c25a1fbbf8c963e3364cf7d08e160aa895f54c77ceeaab7da6963232af61b4c7349d1be7f0aa84097bc7c00cac7748bdb8ba523a899b9e7cf6ed11d";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"technion-thesis-template" = {
+  stripPrefix = 0;
+  sha512.run = "5e9c6bd47744601258bef52102acdfc744e0dd1219a7236a5710d6dd98ba5ebf1061bd6070c5d02707a7c8b895e362db51f48ee081126bcd9a99e523c6b9e5c0";
+  sha512.doc = "bcc290eae933b00cb32af0da6d31c6190f3b38d02a599fec7f8cbfcdb6f8737380d4c440911b08de5d768d9925526a63521c97c20a8c075ce8e9500dd3a62c24";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"ted" = {
+  stripPrefix = 0;
+  sha512.run = "42b0fcded19e05d5cf316fdfc0f1f6474816b656a57bfb5214a76f47e644bc16a42bfa95a21b80251723e2c30651a284d873d898e84c277922120a9169d274df";
+  sha512.doc = "a36387e2520d7afadeb270f7393ef45ac1b26673840d541a50ecf864304d529b24be7d107070c96cfa123801284ffc53c9daa60753640fcd2ad6367f88887069";
+  sha512.source = "b134ab90045781a2a686206d4de20ebf63ffd678d47d81815365f67eecce60984d7e17e3b9098e42f06876b1f711609bfa4133efb4b74705f25ba0e4323984bf";
+  hasRunfiles = true;
+  version = "1.06";
+};
+"templates-fenn" = {
+  stripPrefix = 0;
+  sha512.run = "cc61496f15f9c4060c8d42de23e3bf6f6d2be02d3a8b4fb761f2fda4a9c3565d74bf1f107dd9371e096bef79ddbdef56d2e696cd84cb4fe39a41986b8ffbbc78";
+  sha512.doc = "2a96b0963b2d09edd3f6a6866ae298001e6ccd4e96b98a9002df6e6718284a786b63761441c287ddd63dd5eba636fcb8ce9769d498962ffe2565e771902755e1";
+};
+"templates-sommer" = {
+  stripPrefix = 0;
+  sha512.run = "55b47c4718786fd4910d099878d5808288e83714567adbdbceea32a76e92f7e36c3f850d8597b297445a6ff428d1d0dbaf9209a387485eca0fb1a85f4909ed59";
+  sha512.doc = "543b5cce4842dc6b084d90f9bf4e3c19c18a690ebe85379d9d93a5998fed06272bcac4cb3ae44f965614962827b9926fec3439322e38a720c134133a88cd94f0";
+};
+"templatetools" = {
+  stripPrefix = 0;
+  sha512.run = "16abbf8e5c8972961d112cba712f927be24fca191467677bf27d76ba30c2eba8cd237842b003b9cf45247a122294d517b14a4bf5b4938eedaf3055ffdd22c05a";
+  sha512.doc = "54d696f510cc75384703f750a8c532eb2a0d46e02821fd9126daac52ed1b39859882d475758cc1ff7fd6257211e49ee0fc5c06dbb2e13e83d4584523064cf19f";
+  sha512.source = "685e379f557b683adcf198fb0a6f962b1da431e004470d5fc53c8815f4e7048e73d6851ae1792d78fa322f8efc5375d40c8f3c79404a8feb4a229df2fadf154f";
+  hasRunfiles = true;
+};
+"tempora" = {
+  stripPrefix = 0;
+  sha512.run = "0e1cc1a13f7937e5497f454b15ca66e0975b784b80223a902bf12a9587abdfdb56116b100e04306b1999e053b7c3716b32e1183dd7e6624162611f3b70388df6";
+  sha512.doc = "18259e25b2c9f2a9cfbce9a9303d8827af069bbe2a7ade5c14518ce2c19dc973a86fadaa99b2abc8bc65644ee5371c745abba03cca76a685382b7d8b6d20bc6e";
+  hasRunfiles = true;
+  version = "1.05";
+};
+"tengwarscript" = {
+  stripPrefix = 0;
+  sha512.run = "c6a29d928b1f25dc4b8893f9fc803f3a5deef9e8e9aa4803153fbae5cdd7170eea819eafba8a165203e48c8b2f443c55ce682df9f7e968ab621f2cf7eb082108";
+  sha512.doc = "35825a4c1cac91c088daea643e8a8901f0c3ea15c44e8a9328883c22c1fddab95fb32a65372af3979698f81e68d77b34764a1c5748460a28396480075cb594d1";
+  sha512.source = "4afbd079f20f9989a817acf49b46409bfab6ba0b328249eedf428a5a11e127fedc6c763c87db08b8b7c453562400878ea0c54d6d66c6bb7d407aa498a78dda38";
+  hasRunfiles = true;
+  version = "1.3.1";
+};
+"tensind" = {
+  stripPrefix = 0;
+  sha512.run = "fc20b6f6b705218b82b5788582d8b017be783e42c87b3f35e7aa99a8215ab0168b7da899c73ef1ebc282bedd5c715e69ed9e1c19b94d9b6369ba8e9986b5c5d6";
+  sha512.doc = "12e443e2ffe876732759ddf91c8948e9cfcebc3c1c96949c51f090e15dadfbcaf801e488c8d043855b576404207612ae91d982279cf0b29bd73d4a5d1528bb6c";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"tensor" = {
+  stripPrefix = 0;
+  sha512.run = "8f048f9c72eb693bf9e75e6ebda2901eb6b6add654b1f89651d54eb9416559c2455436f5e825160bfce220c790e00aa3a6f95a4557b3fdc880bade768dd36c05";
+  sha512.doc = "d9ec6b7b49d028a5a405f16c8cdb54873d92d3a0968b7df38aad44da607c8ea8cdcac45cce63b0bd2258a2a89787e2388b2375189636b93bf643055c0b9f86fd";
+  sha512.source = "fb246320405988579412cb8afc3f0f0951bd6ca09974c3f38c83979ff195e16e43c1852bca5097e8e4b07039230d3c019117234d4bb77eb75e70bedbc796ab3a";
+  hasRunfiles = true;
+  version = "2.1";
+};
+"termcal" = {
+  stripPrefix = 0;
+  sha512.run = "f28ee31f06cf2b3119df8010aa6a8312d5365452e19c3a278db7bee3bdeafe9ae0d3b07decdf1a104d8eb763abc5e02ff0e6c7030dce924596ac89d8e9508e13";
+  sha512.doc = "44f54dedd59afad78eea60ccfd43805dca1a4dc87a3d827e0fda26db15505dec18d91cf0629ec937dcf3eb14d1244f80559a0fa1ef09b30288bf687099fcec1f";
+  sha512.source = "0dd39a06088a0bd2bbcc3a9d6715816368deb07c55c85897f7c49d23553ff941f5f68d7b0ebf8fc54c4fd4d2bb8a510cec3ac9d9b509f27aeee29696c75a7ef2";
+  hasRunfiles = true;
+  version = "1.8";
+};
+"termcal-de" = {
+  stripPrefix = 0;
+  sha512.run = "9d4d0be3e26dc69fa3986fbe41099330e97cdd4d3aa0b12a180657577ef839878aea9e546a5651cdd0ea45e7af3968c5b83b509ad5bb3ef210d42af5c00fd91b";
+  sha512.doc = "48f0ec01526f75e9e2b8369f8b30bbd8e4f093cc91fd5b485a36e225de35fa0afc750508b6533f2ec82ef123805788e40e98d5459dc85a73bef675162e682fa7";
+  sha512.source = "51d257533f7897d6b605a2ac26f323e3c241cb6920b329387f1be3bfc8444e98570f2dc4f86e78e81f5838204a90a7f79074989737005f035e076c41be74f4a3";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"termlist" = {
+  stripPrefix = 0;
+  sha512.run = "799d5fbfb9b055e8674a244ecaac65c2f0412a4c173e6608fff946544142d851d8dbba02505fa8be21bc37b15acc2ba99a6f0dc77a13dd241fedea1c1b38dec9";
+  sha512.doc = "14add37c32500f246eea2a3219b58a232c9a8f41cf3cf5a0d1d2aaf4cba4d700c1ba5379b037fe10cfc06385ff0a7d0925b46beeef15dff2502142e56f37e597";
+  sha512.source = "2d6a14828ca29c08d0b08f33749deaafef88ec73bdd72450468b5332e95c83ccc5d29d0a154a6cc49a04ca0a9e5a17d0f28f25139d928b87cb14a2059d51d848";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"termmenu" = {
+  stripPrefix = 0;
+  sha512.run = "5c3d4ac4a2bab5e18453b9de0b372b364981444df3550c3a195a8fee841a6d76e73835096ff1b71a37f5e5acf0fd2777dbc8846be9345f99b004adb560ced517";
+  sha512.doc = "029f4ae3b57e0b226883e66030db2d3c41cffc0a4dbd4f8b3662562fd566d8a09b7aa0c83d98f7fb0cdfbd1226c5dde9c93211565292f037e5b5554e9a5d02b4";
+  sha512.source = "56c1396e90a4c1db5dd28ae96c6f3ebe0310c163d7fdb2cb4e3ade78b522b349fba0bd43556165c282bedcab167241033b065feaac4c4a5e3dc2d8a8a55dca61";
+  hasRunfiles = true;
+};
+"testhyphens" = {
+  stripPrefix = 0;
+  sha512.run = "c16a9299721c571ce9bdc91e4ed4cc54c973b43fed5189d2f377b2a9143d94d3eeba6bd6b728e3df92a5436b3e2c5e07a21d4a6af0210bf87784d40d96caa42c";
+  sha512.doc = "44cc1d9afa4e12ef2dc1f7be2d7718fa33b80e5ee16c7396053690bfea6246f444b50cb044d314ec677436a3559ff1ba9fa227acb446db37bacaa2829c309b2b";
+  sha512.source = "2f84528ee4ca5d8434b0042f7b24908ff97c45f27580a5b59bfe226b195c295d4fa546fe240acb981db6deba970e2b020d38c00e6bbf5a0cc1b3caf2b3cbd506";
+  hasRunfiles = true;
+  version = "0.7";
+};
+"testidx" = {
+  stripPrefix = 0;
+  sha512.run = "003179c0efebe0bb84cf1ddc80db6d905af6cbbbf59753b4102e5f7a760b5e7c90057976e2d0aac138b001e2a211da8758f8e2285866ac34c8287e1d3b82d1e4";
+  sha512.doc = "deab83c1eb6f77b379b38bc81e680e18b9fb02a4b147363e05646849af1fe402249c50a8eb41e6ecf60fb1cc505cd82593ae90c356cd4bf43fa5685cf5162f44";
+  sha512.source = "de09a92aefaff5ad23898b7b5c4ef447280c3664eb468c433161cc82bb040f2c3fb265ec976f4d985914804a96422748b2dc20863805e066cfefb976110a1a6b";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"tetex" = {
+  sha512.run = "9459cfb644aca74ed5666350a94c1412a485c4099b524fa4708c18951abd0d6d4bd24a8a57b8a05010a7f0ff80565a5c17ba10bd94f722a694ca199827cf6fc9";
+  sha512.doc = "9e8b9386b27ded2c7c99cb036f5841df79aaaba44f9fb7a2c4623b7f733fef1278a4c347b7a2e01735c1eea66f21db0b60496eba1a9c1598d36e454d013be045";
+  hasRunfiles = true;
+  version = "3.0";
+};
+"tetragonos" = {
+  stripPrefix = 0;
+  sha512.run = "dbb37eec17d41633d951b3202289289bffd9bf9a8f509cfbb7f98baab9b7e684e7d7fbfb5f50ce41251d09d9f0ea81fd9e68fa91984e788e5e43f8e398463fff";
+  sha512.doc = "f55cba055574e78934b8766f02de08f417f625042627c2c1e64cb7fe39ecb1e3553d5b862afe521f4d65805713c856ab000e3db3b7fc906266886f2ebec490a6";
+  hasRunfiles = true;
+  version = "1";
+};
+"teubner" = {
+  stripPrefix = 0;
+  sha512.run = "196c611d9a1f8231541a345a71bb45279715a748a8ef624865c076a8f346f8ac9a7be636feed01130d98445f8fa032ea8f22ff4f4194ae45efa0073231d5cc41";
+  sha512.doc = "3714dd9003e03f0758031dce6dbd5a3840b2d9fee53382fdc66e99d4baaba153694c88fa5afc8e2ffd4af64e210a7e65e2a663baaeed7d96c0800a3fb08cc983";
+  sha512.source = "667dc5669ddda08eb3f100a501d3d5f3822c8bf1f58d51356fbd51bba3a98b53c47df32243e5733e8da4d136074b8e4c29caed91cb6c5d349079ed1387f3de82";
+  hasRunfiles = true;
+  version = "4.8";
+};
+"tex" = {
+  deps."kpathsea" = tl."kpathsea";
+  deps."plain" = tl."plain";
+  deps."cm" = tl."cm";
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."knuth-lib" = tl."knuth-lib";
+  sha512.run = "26b0f40fa859af1c76df5adae0d249255cf39c867051eabd703d1d4f56e37fa5c7a7506769b99470c1dd29f716926bbbffa6d9ce888b95f7c17b0765f1716d42";
+  sha512.doc = "a911ebce516a15f736e210d67c42f5237243c5509d74d8725ab0aa36bcc1c4898a25ce3519a756e3b8b654c68e10887698da3c5bc466d36b27ce2bffae876eb0";
+  version = "3.14159265";
+};
+"tex-ewd" = {
+  stripPrefix = 0;
+  sha512.run = "9850acafe002f1b6b147d00aee55e4cd9c1813edbea0f570282119fd8b2f134d3a48c113cc9957c69905c4e88a06097c45829026342d7ec88838870eedd7fc44";
+  sha512.doc = "05f6414dd2309401d1800e2b053d7907703e144f829c2e7623a7c98c1313da50c0a659c25fa0d9a0fcb8b50891c575b47d8fb8a90b925e105ed9a6f8c45b8667";
+  hasRunfiles = true;
+};
+"tex-font-errors-cheatsheet" = {
+  stripPrefix = 0;
+  sha512.run = "403b4faae7b16b1eea5a4d2a7d77bcd8a6e7a7b5be54299b79635280be8f82f59d281380754a0bd1b9e53ff4fb534fb3bca0cf8bbe1cf0ee88ee4d925fba103d";
+  sha512.doc = "adc72626fcb4c5a9285ad4a7cfd1c6b984f1aa26c7732f35cdc241f7b00d623f6b646e878317f30d10b9f47f4eee33e923538be58f3c15bee668f4fe652f0170";
+  version = "0.1";
+};
+"tex-gyre" = {
+  stripPrefix = 0;
+  sha512.run = "7e8ab25cd563e2be7f333f5f4232a7d64e9cd8ef2b5b898ad5e33af96d455f3bb0214184650dde76770cb95f3bfc6b10f35286e0263e52a6f43affa289920327";
+  sha512.doc = "ebfea3bfa958175078b78ee0f2ea36a4de289b967f8fc900268dce7b3d356d2faae9d9a1123c48a06e3ec78b05863626fa97cb3e249d1b87c036fe00c194ceec";
+  sha512.source = "68a06261fed419e106e8f6958a38bb0f5b78c3ee10b8b68365b3bf9925360cf726c4715954590f0b0b86faadfe636f50bce0ebf4b3b00162ffb4df54a2adc803";
+  hasRunfiles = true;
+  version = "2.501";
+};
+"tex-gyre-math" = {
+  stripPrefix = 0;
+  sha512.run = "a50a9eaa30cfd7754ae702a3bd6fced2d07fac858215b913945665940c71a0aafd2b59a0d0baa0fb9d5090773ef69a86864cc11126a5e30adc3d0e94cdbd2594";
+  sha512.doc = "cd346226dc36bb4fb5324a43dfab7790cd80ec6bba992849dfcca74ea6fe8d85fe7e0ac66408a41ac1ef644e6b32c9b06d337c4f394fbfd8fba4153fbc1abfe9";
+  sha512.source = "3c58821e5307257578ec149317cb621331aafa00bfa465eeb055f1f93691ce57a489a32a7eea068b12b70228433031de33c0ffe36b0e8e10b368e0ef5e33fe24";
+  hasRunfiles = true;
+};
+"tex-ini-files" = {
+  stripPrefix = 0;
+  sha512.run = "c053ad3aaa49224f26999112b3f5f28eb6ba34cd130cb54ab5ce67971632d41a8470c361e4471f9d75831d230737a0197186b05c25a9b401286bb4d5525b12a2";
+  sha512.doc = "c44315e35793a1e77b621af53061c25605fbc5ffce2f07fe52bc5e58f4db0e9252cdb1935c14d8dc632bf1b84c18f3ec18506c5415831ad230c7a314f4f7b670";
+  hasRunfiles = true;
+};
+"tex-label" = {
+  stripPrefix = 0;
+  sha512.run = "513310d4dc5240d0b290d0acc941455ba64e069d19c223670d05a632033aba8de367d5dce6acf073af4df476876d3ee414dcf9f1f579738bf9bdfe6738c19d36";
+  sha512.doc = "bc705cf6812515923d60cf44b75830bd3ea78f078c9ef88ded3e94f060155e1fbf5dc1485cbaa8530e1f10b41b421e70bcec6c61066ee98b498aba7ea8799dc4";
+  sha512.source = "07c29de4e85fc21404dad1da3a01a5037b641526110fe5410899c60aeae6a92836de322895afc83824df60f431955a4da959c4d4c21cf17dc32929f445cc1ed8";
+  hasRunfiles = true;
+};
+"tex-locale" = {
+  stripPrefix = 0;
+  sha512.run = "0e3aca622bb6fb49a06a3aea1d997414add9272dd39c10c3a1d80956dece59882993b24366a1126acab80f8a7c8328a30756f727210f829f5eb838ac0b9cb1a6";
+  sha512.doc = "d3898da3687603b1f1f3f2f5b203d01c985ab0c3e39eeb05dc7c855c14fad8b73649777e4a0b7844c242bc8946cab80b585987eda37a1c10e3ba75c6955fee23";
+  sha512.source = "b24a01b9845f79a86c12911e71ef179a4dd8f5a8284d067b760a8ac3cb906cbf2465ae3617e0196d9163348f3a865fea4e5869adac9921088b13d738803f87f4";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"tex-overview" = {
+  stripPrefix = 0;
+  sha512.run = "1217aeba55d723dad2843509ad3adf205090298f2362ba4ce23d73ec581e439c344f055281a95f82bd8cec298c77da012cf892e60369562238bba7f8b8d258a1";
+  sha512.doc = "0cd9941afc0e50d3d936f5ba1f9d2c7f16244899982ff7eaa44bb019653b5e4e142edc1ee608ca1664636c77178dd8a02f4625a2216a019e770651a718f0a27b";
+  version = "0.2";
+};
+"tex-ps" = {
+  stripPrefix = 0;
+  sha512.run = "cc616b501be7c0724646d5e0f326a5729df8f4cb0c4070f92bdd3b5b370e496efd6208b3ec8b2387713810b9764c75525689f434b7f482a83fb0b8e9b0383cb6";
+  sha512.doc = "2f82f63954c1407c2caa9c39a538ed1cffeabfde8ac0506906f0f28430d12e18d858040ee66f2326cad3fa758c23d1ed490b70c5d18eb68b699b7ddd0afd15d1";
+  hasRunfiles = true;
+};
+"tex-refs" = {
+  stripPrefix = 0;
+  sha512.run = "12ce34f2173ddb5be885b174a6be708fb47822cdd34e05ffcf6f17cb28ccfc32528206c9e73373a6f68a5f3987cb9e244c5093539f14db3a4eab0daf8ff7fbaf";
+  sha512.doc = "318f2872f308b2f22d96af2a553d9e13b60e1f6ffc1cbdf44e123fb2ca82423ff8bb7aba524f0e8570b8086ef85833cb11070d7848b3212b87ae0046405c1a5a";
+  version = "0.4.8";
+};
+"tex-virtual-academy-pl" = {
+  stripPrefix = 0;
+  sha512.run = "b9358f50caf39d274c1684d4514fef0439e015588431883955f7aec63d35f7176ed61671f72cda7ae28125b2a977f25ae66b028b21017f106d8f78bbfc7df109";
+  sha512.doc = "aa73261fb0ffdbb7cdbf85df354490a72bd95e4d98e4a497e98666e6f5533a7f05a7132533db044ba993d86e03fc21825bc6fa7f262e5a0bcdb6de8114d38eee";
+};
+"tex4ebook" = {
+  sha512.run = "946317be3532db3e60b1fcf2c027f616c00526da55562ab3b682c01306277059edaf14138902d1e21eab53cfb9bf293c636598cffddb9f1980b287b2fba081d9";
+  sha512.doc = "586d3ce7642a0f06e358e0cb3d3dc577396a638d7e7c9f333a118716bf4dee8c18991d1736ac7169ba32c22b9aa10b887a8ae77ae5a4f40c800f2f1aca958abd";
+  hasRunfiles = true;
+  version = "0.2c";
+};
+"tex4ht" = {
+  sha512.run = "a5a8834a3effa629a93ae35a06d28201f472f32a3ac79c7c3e6df6f475a57a854a8186fe201ac8d0476b854f864276578d5709216db3dde8bedddd1a12a85e2f";
+  sha512.doc = "e6364e7f86cbed62bf887396c42ae9e25ddd027f928782a02b4dd3881123aa1869e16a7526662e4adb1fdd0aeca7de9990ab229b56ee38415c10cd6b2a696680";
+  hasRunfiles = true;
+};
+"texapi" = {
+  stripPrefix = 0;
+  sha512.run = "ca4622f53eab49612b80781bf58130d419a89791f507164e34dc8123772d041d50790f63018a87bbe3e8ebecdbe49925fccdc35f4d90f5d87312a36ce1ee482d";
+  sha512.doc = "2740b51e345092c14bf86a42d8b94a5595248851c606b6274369abab75b708bbd17a67a544b1b3a0bdae18f779e042a53bc2dc04edbfea912ed60078cedde16e";
+  hasRunfiles = true;
+  version = "1.04";
+};
+"texbytopic" = {
+  stripPrefix = 0;
+  sha512.run = "d6d7373a50b85b4dcf30f9d6cd1f3ec3a4cbbe72f53158387b99ab5cae5372d1c7a7954d03a0ee06b9af6df9784cd9a06f73658a6286a737674f5046883a9ab6";
+  sha512.doc = "29b3ea490b6c67a4c1d6dd2b744978536e3b847beda3a901873db7723c7c21ae4063b800d30d2d009e77a0e6fb199a3fb0d16d1f7f8d9a09722cfd7702c73c67";
+};
+"texcount" = {
+  sha512.run = "82f51346d9474270af6374cc1619ca005206b1bd729ce1559b8b66e361b184a192c7fbe085216a3a64e656197756593f7d76e52437ac562fd33bf09504b0f58f";
+  sha512.doc = "5141bdf4378cf87a19933945d6742427f4467dc73d92f4a470e34474232dbb2f60c4d8db065f812481520f1aa2f8a90d7e97dfc83f0f089d10386847f64f4d94";
+  hasRunfiles = true;
+  version = "3.1.1";
+};
+"texdate" = {
+  stripPrefix = 0;
+  sha512.run = "c6f34d5ab0c54f799669c4c44e8c6e00381796ca76b9d2e8352a749effe65b9ffd6ebd139998ab9267d1e54da6471f5f38cc6931f7ff046882261cd5e5440bc7";
+  sha512.doc = "2338dd99b32a1b2e04326e888b718f595a26848bbef17206f92a0a0f26556edddc3e0a06327d86e72fcb3e55270bcdff846cab3bfc37cbd61115b601164fc10e";
+  sha512.source = "30a5c6401d66e7fc2cf0300341c7007881945fdfb267ce4c1f9930f6cb84d04d7895df613215be27da15e307baff361cba6bd4b530ac78f352b74aa81bb94356";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"texdef" = {
+  sha512.run = "7c5defeb9cf9d5fbe92f8433265543e6d7024e9f7fdc768582ec51a5880745c54cf8576f1b7455e32d51429e2faf122c0775ead117be97510f4b2d8123b04d71";
+  sha512.doc = "a4727d57bb5b56106a9baf4aabbabd16cc8a8ac08358c28263abe9c40b76a6d692d0e819c23c7b8e946e97fd3f7574a498a6f43207c04e7544a0383b3681f54e";
+  sha512.source = "4b57478b06d4cd67ae6b8d2afb059eb52e03e31c4c4066108d471134865a64f3eb3dc99f8bc4330625eaa8e7c660f445365c6bbe510f36d5770b406df99d6c8c";
+  hasRunfiles = true;
+  version = "1.8a";
+};
+"texdiff" = {
+  sha512.run = "26fa84b3090d641efb186947ce4d1d89c30a2c224cfc8fa759da3ba7ec9cc113c0ed4afc1c3d0fa5f9d0a88af4f9b3001d57651df6b5be6e0234fb78ec4f252a";
+  sha512.doc = "d458fa8db6433b4c7fbd23a16f9be53c2c822e396e7f50844cfa6acdd2a08acf8efdd0bd946c8fdc09ca8aa28d1eb25708d3719184634abced92ea5c94d9a948";
+  hasRunfiles = true;
+  version = "0.4";
+};
+"texdirflatten" = {
+  sha512.run = "e4f03e9a434e1ab8ea1b69ca0ed2dffe1f8cdb2c853a733e275bee74ed4b17b84b72cd8cc7d1820f595e1c2282a38b9bfc7f7b7a9e003fdace6488390a1b97ba";
+  sha512.doc = "972fc69b705b2f6289358199cedc91ec386da9212048f7f7a84e43eeadc943f7f42ade8d7faa9f58d1685d2bb10408e274b2461032927042371feb86b4ef6b43";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"texdoc" = {
+  deps."kpathsea" = tl."kpathsea";
+  sha512.run = "2c12bf48d03d456e95d6bc31ad6d46f77c0dfebde73fd8a87e2128c7267327377b8d8d7d9b04ecf7295eaad16eccf1df5bab6f9050df7113c62bfbbffc0d00be";
+  sha512.doc = "133abc048e8cbfa84bd2788fe0942bc48d4d2844bec525c010a3590afa62b22ca77518ebbfd26e78c825152ec0eea0a8e1513d15931332656b8fec702b0b7479";
+  hasRunfiles = true;
+  version = "3.1";
+};
+"texdoctk" = {
+  deps."kpathsea" = tl."kpathsea";
+  sha512.run = "d6799beb8f8615c82dc8f66971bcfcb62e763672d707a284d2293164861cd861b47a691fadbda9dca736ce820e4c90adcf1358b04f4db38121459415101efbce";
+  sha512.doc = "f8f08bbc68488fd75a2291ea1556a8c1166357ba225ac0b0205f2b9e8ee1b23957f41c1a577540028b74f12647578c6fcc2219a07afb6d3a1f63affbfe383c19";
+  hasRunfiles = true;
+  version = "0.6.0";
+};
+"texdraw" = {
+  stripPrefix = 0;
+  sha512.run = "30cc546b259f93bec3f5d3efea5e73cdf7e34f9f76cac8946d82fff3123abb6f5bc7c70c48987bab24e154c56f6145fef0680b416e7cf2aaa79f5aa673600f59";
+  sha512.doc = "28a7028a28749e2d7c8b5176dd473b749230750fe1ead78a731c9f4a40db299c4bd034be18e0587ab1dd79b6b0802abff19d12fdf44dab5e1a64e26d48185771";
+  hasRunfiles = true;
+  version = "v2r3";
+};
+"texfot" = {
+  sha512.run = "0b9376db4c9006121907650bac3a13f8e81ca7bfe48cbab132cf635c72003de9aacf39f77e7e96abc3f7aa781f91cd9876a0fbcbe933d01e807597a581efaccf";
+  sha512.doc = "fba2be7e6b23503b98ab499fe4799a1344ab0e9d4c806c451b38945cca58cbe15505b360fdf2d83906d6457fa94123c2b704d4c1da8e0dc435ada46af673d134";
+  hasRunfiles = true;
+  version = "1.38";
+};
+"texilikechaps" = {
+  stripPrefix = 0;
+  sha512.run = "b65e737c138a176e6674612dda6b066a9953d8b737fe2e947eb10c058d6b67eb27f154a3ca4f346481f4dc077fddc2c95cc302762a9e9eaa2f0f1d23160bd4be";
+  hasRunfiles = true;
+  version = "1.0a";
+};
+"texilikecover" = {
+  stripPrefix = 0;
+  sha512.run = "fc73ce5601a10d638ea78fe815978d395001a73be75084539498644ac7f3fea0f3a57e95bd80e5f38659891adfd9c817e6068acfe04972a836938d733e0d4382";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"texinfo" = {
+  stripPrefix = 0;
+  sha512.run = "24addde29f46c3af209543f168cc3c6ae6ca90a504738eda37bcd22d2d10041daaa8373d600f70afa39d0746596d2554ed132521e0cf32004a1b800832f03b3d";
+  hasRunfiles = true;
+  version = "5.1";
+};
+"texlive-common" = {
+  stripPrefix = 0;
+  sha512.run = "a2d1330cf12d9c7d78350384e69163f3c97c2d7ffe923a0819f487cf5b1f610b50ed2835f658f4a6c6e7df6b9d95bebed24073cb03f4213bd1a430e48716a702";
+  sha512.doc = "9fa949114a490a7cfcd7c0083ea7fe797bafe4ae4b61f1b689e9950afafe8a8367f87a5e371aea6b669c90b3a6b31df00a0700e3bc0a96fd2b71c373f2a24a6a";
+};
+"texlive-cz" = {
+  stripPrefix = 0;
+  sha512.run = "2c65a9915e58f81a298389fda9dbfe5c6d0a0fbb91db2da4d970f084f568da8dbd20e61576c2af05c74c4c2876835f8159d6dc3a250038dd64b433e4cc305a37";
+  sha512.doc = "8527c18ca429a877e747f66d68e3c6ff1992c42af0ce8e65d15a89743b689062e5d825578fb5896d5fb978251726cb2623d49207cb8126258bb6f419b36d09ec";
+};
+"texlive-de" = {
+  stripPrefix = 0;
+  sha512.run = "89b6004f34abdd998257c723613ac09a1ff761bc2eb1dd441b21c6e25958874bc388e0fb4256410661f53d2145f3ccabeadc9ec1341af834b719913dbc6b59a0";
+  sha512.doc = "c13300d4bfa0a9d97c5b01b82634c854dbf9c4239d9ad320470c8d16eff439b1996ff0d51a72baa5c3080ea027105521bd165198c8fe58f06fe785d130603916";
+};
+"texlive-docindex" = {
+  sha512.run = "91e32845cbe87135d4fe6faa66f6cf58c4867131aa6bc73812f9093af4d31997dbc29fa81a1a2bf21d0a90bd1657ea33c5de9c755452ecc83544f34149f0ba5d";
+  sha512.doc = "f5f9c49dee61ebbb87e14caec5a7be65d821912d7179021d10c24afddc5ae61d13c5efcb6dc9c1491443ad4e6fbe173ac037283eb0f77497d2cf24541e2a72d4";
+  hasRunfiles = true;
+};
+"texlive-en" = {
+  stripPrefix = 0;
+  sha512.run = "bf6130a940b5f328a0316322c2df85b60b7214ecbbd3b936f8ccff816cf2ace8853222c55efdb48ccdf48a55dbc64558a1a91ef88b83ff5f8425515125c486eb";
+  sha512.doc = "92ac46d9286520f1b6e5d927f976659771bd42cbefab7284fbb8c3b2ac5622c9af7e7c151163b30d95b16eee63027cbe36e758a1cd454055c63f5992357e6bcd";
+};
+"texlive-es" = {
+  stripPrefix = 0;
+  sha512.run = "ecd29f0b62735145f57e48c74c07f1b7188a3e4aea26d82dad7e136e2276e2697381bae0afacd7b2083d796c213e72141893fc186b84e9b6caf4ed19513d9a29";
+  sha512.doc = "32c4b3fad90a989e2b94f4fe63b8869721c36aa90df3a815177dbae38c8fc90bc420f197810266ee1350e2580428b8444ef73c5436041eab8bb46704bccc4fba";
+};
+"texlive-fr" = {
+  stripPrefix = 0;
+  sha512.run = "fa1830c0a7337f5629eff5f380f877307304f1986a3d9f63c43b0ef88960354c2737278e0e123523eb0d2c2957ec41ace896cefd096f4b2982b7086daf7f3ebb";
+  sha512.doc = "bee228b706954bcdc1ea424d0227890bda2115abf47b73687a0f486b7daf68476bfd7a649f457b22b62e55936b1a113a685451095d1f23268e0d094dec902b7a";
+};
+"texlive-it" = {
+  stripPrefix = 0;
+  sha512.run = "be04ef3a7fabeeb9d6a05210e5939d61e0a364cbe97e461476db186c71ecfa2754af159ced3fad5fddff081e6bf5541bf60ed053cb8cb0e2de8813944e775009";
+  sha512.doc = "a3381b82bfa78453c6014849e8ea8dc2ee881088450824e62bc056f0303227fb7eb5276f594436c6ac113292ee52672dd3e7b9e6007bdc22dc331b63330fca81";
+};
+"texlive-ja" = {
+  stripPrefix = 0;
+  sha512.run = "279c986e659a0ff33b4522057c90312f2376552b22bd3229cfeed2e87a0644410ad798a8bbda079253df16a3156e3dae9c20abc6132e49023e17e9e234820043";
+  sha512.doc = "fd26ed74bb6a85f9aaa1907d89b3c2e6624325e36652a3e3c7a540181efa36f2b44322aac55190085c47d48176b0d04e6c58ef9fb633057954eaa6fd408998f9";
+};
+"texlive-msg-translations" = {
+  sha512.run = "aaa3c148d05c6172163ccf2a6b6ef114cb31196bfd00ca7370cdf75fd71620aee5b0efc9fe2ffb625fa2f8fadd624cdfc3f38c4f97db1c07a41a1a4eab50ae0e";
+  hasRunfiles = true;
+};
+"texlive-pl" = {
+  stripPrefix = 0;
+  sha512.run = "57dc3f82b08ddb2a9f6e168ba7cee0870e558d796bd6acb8669207cc14aa327a531f6731d312fabd1761444f9d49da4f2b8a1424c603735468e76ae868813208";
+  sha512.doc = "1e00df1860220e5627a913f2504e125165ec2743f5b461497e77636e46b069ba2e790de2c01317f7698212d2862e0aaf5cdbed40eaca40618d97e56436b93adc";
+};
+"texlive-ru" = {
+  stripPrefix = 0;
+  sha512.run = "53b6b2cdfc0357f7614cdb9ac5f4f26dd51288acf093e3bf644b0b259c61b9765775bd90956b645e2a915cd64b4d4470679e3725dc8f1dd044f2280e04677c5d";
+  sha512.doc = "b5d982cfe9cbb9022b0d35cf583a90148c0add4f898dc86f732f305cd9adf704902851366722d2624f0ceac66d00aab177663160d5ef624331f83d6a717c3505";
+};
+"texlive-scripts" = {
+  sha512.run = "a73dbbd393f2824c5d892249da25437fbec34cd099c3fcae02aea9c0486a5e1fe4ad110467a9424adf77ac34713464a44d668e169e055db999202916970f904a";
+  sha512.doc = "94c227164679b44fac0e50490ca344cfb2301f0092c7ed928cbd2578650cdfcea4910f4c45a3812c7ad75565ef8f3e0330eb94d3e8fd90e6f818c5862976c8a0";
+  hasRunfiles = true;
+};
+"texlive-sr" = {
+  stripPrefix = 0;
+  sha512.run = "65cbac03143ec8b2881ba02b2827867848ba7b034745e2c3e5e793cb5a950c897d2903c1865cd42fbbfa65cea79cfa4b819be781027691be1467375598a6388d";
+  sha512.doc = "fdff59485fde0a134c78c506969b8c29bf82d30b3d2fa9b8137ee7efed7786e8aec9c79f5a1e000ce04ebd5bbe805885f8952234427a411021b9ef3988b11234";
+};
+"texlive-zh-cn" = {
+  stripPrefix = 0;
+  sha512.run = "86d70c96c3fd13095d664a9f719613dfcc6295803f9058341fd915d6cac240ca11d64e939395dcfc0ff84eff1bcdc2425971ee0c90f7fc45cc86be737e30b772";
+  sha512.doc = "9567c16b972e2bae6f02356203cf68cf4390434e3da4f8a1cdfe8b902483fa33289c761bb00de345ff038e98054fef5994a980daaf0bb75aabf62be2bc1bdf75";
+};
+"texliveonfly" = {
+  sha512.run = "e02a1214775f209c0698e62fb7f0ae91c9ad14024c076dd6a5ca73fad4c92ebbf9bbb0f281869cb0c073538c66edae2af23245f1bd0e1f939c80841269625af6";
+  sha512.doc = "f89f82a59f726b226101275b1aeaec00b99ea1302ee5ff8c021e4696b4abad39d1a95b544a4bc45483440591e1266cfba4d5c3c3bbc769f193671a46aa7458b2";
+  hasRunfiles = true;
+};
+"texloganalyser" = {
+  sha512.run = "cbc18031b9b9ecfb6088b82b99eb72ad70fce92e4b103230a06ffeda0a50871715405a0aad18a7495ba1b80f16913cbadc4b8d1a7d2ebaa77d5cbd00e1682c93";
+  sha512.doc = "1cccf82314d9afc841044aabbb5f06933f6bbdfcdb46c22909ce18c2736d40c532944405232633f61893f0f56de24233d520edd64d4cc89baeca5c01ffd0f9ea";
+  hasRunfiles = true;
+  version = "0.9";
+};
+"texlogos" = {
+  stripPrefix = 0;
+  sha512.run = "d3b5f5ea0dd90e925bffc1ac0f790848d1c2abe50003e2591c8efb219b4a205d48e4420d2000b3de15b1ff9d4d0bd9e083ba1694d4ee34febd68f8db0df16ea2";
+  hasRunfiles = true;
+  version = "1.3.1";
+};
+"texmate" = {
+  stripPrefix = 0;
+  sha512.run = "52c35f096426385f229b7ddb66c8ec2a20539bbad6296f2bdd230c2da79edf5668fdde0fc7ebac7099a414b622b31309fa7f610564c8212602f71dca7193c597";
+  sha512.doc = "dc1ca347bfb0ba8c54403e643b4052604f98b39ced23d092808cb221e930384f49d1c34794a933b0a05c7691ef04158688653ce69eb8a4b72e9172b4254954ee";
+  sha512.source = "b75362c3b748021934052ef38b9f95ad7047804d5100b2a00bd8f9e396103d2d641f1fc5a3c636cb42ed66fa88488f6c69d3b188e3a55f715df2d19c05331889";
+  hasRunfiles = true;
+  version = "2";
+};
+"texments" = {
+  stripPrefix = 0;
+  sha512.run = "6b0bc365ff7ba6a8118a4e83350e73d5c4dc40e6c30a0ed3267f0f20178a08264866bd016aa3a9da72d4f27a20bf7e8f658417561468294745b78911ff46fd4a";
+  sha512.doc = "67b7843546704e9b48f6ffe75a33ab68a5d8ededf3cd45ca329c6ca5ffcc783f4ecb9a663fc4eb94fb554e3c43e753512f82dc8f2f7924c1bf4bb8942aabf749";
+  sha512.source = "92d2216144fcbcc96907fd09ece64428684476ab8e9f3a0c60e898f9f4cf7e0627fb145adbd8186d56a6d5a21563c41d62871e860ad51d9b74e5a0f6441a44de";
+  hasRunfiles = true;
+  version = "0.2.0";
+};
+"texonly" = {
+  stripPrefix = 0;
+  sha512.run = "a51d7288abaa3bd03e8f3816eaf2d7f8931340e95e3897ea4a63ae3d251277a78e71ae66b617da6cc81a8100c9ffe64a1c9142369c67d58daf200ab2ed7c9682";
+  sha512.doc = "5f03987ce079f21801f08a7e325a36c6f1065f5cc32ff2dbec7989bdd3a6b3c54ade8f96a71e19553972d3c36454a08b007adf3287a7be7972a8b3ce6961778a";
+  version = "2";
+};
+"texosquery" = {
+  sha512.run = "bfe5cbc793a81a9ce3c98ddc94fd217c3b235614394d2f329db4f98ae29ded1757bba5d98997118a2c78cfdf6d774146a7ac6a716b2bce91c876b0387e1aeba2";
+  sha512.doc = "2b7cf8dad61829b96a2f17f1063baabd21087ea2526c8d8a6408b4c2e63c8f44be3f318be6d1e198661efe683afbff7055c678e7229a13d3b01e200565caea9d";
+  sha512.source = "c834540e5448887bb0d80dac77770c7f89b8017743bbe4691e46aa5c95c3f59f2bdfde93e0dd72aa8dd94295b1dbcfdd374a8892d4c622c41df7c4a37a68a701";
+  hasRunfiles = true;
+  version = "1.6";
+};
+"texpower" = {
+  stripPrefix = 0;
+  deps."tpslifonts" = tl."tpslifonts";
+  sha512.run = "7e2efadabaf173fd30c592cbcd2338563b8690048ccaffd86efb079a04b7b95c8ab113b99205cbb2912eae3a709a110d7b152270422cf2cbfd2ab85d42f12d69";
+  sha512.doc = "e61965b5e31b487daba383a4e6ebc0dba85475f8cade2faae6adb8576ec7ec544b518a6e0e105aa185ff82fd6aba7a9ea4abda2a9446d52f5b3acdb42580e315";
+  sha512.source = "3add8eeda886ce6422d3b7ea53a55dc69bb2f5c2e64cdede105a7b4756b008807bef6245ddc2596b45809311874e566263c51e98ec6751b4db9d3c5c5f58efd3";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"texproposal" = {
+  stripPrefix = 0;
+  sha512.run = "19265b32271b8603d8baf8b16f043c3228606230c1151a33e243e493b6306faa839860f2b07ec9d5d43c57f49e984134e760342bc6302186924e5c95cc1f3380";
+  sha512.doc = "70c04643ced459099ae095c88c0316e96c75e99bba0877198c7800d3b5cc9ac872f74b36adfb03dde968150abb3cb99131fb52ecaff56dfbf1aa85379718a74f";
+  version = "1.4";
+};
+"texshade" = {
+  stripPrefix = 0;
+  sha512.run = "785bba8f83063d37f2473759eb1ada73b31098ba757ce65ca1b7ac811581a64c706f2916eaa1237f6c6ee39dfa3514616d5b8789b9b8e2418c02ddd88e77e428";
+  sha512.doc = "e08cefab84354056854fa00b15efe8ba99e2e8f4ae6721afd03ecee5fad7b227674ca456de11b0607b1b34a2378ce41e11c517b0b0a544c12278bc3b9f0c4de4";
+  sha512.source = "3ade54e59a3342a60ae75a3b4b1068d646bab1d9dc58b29cfb3ea55471038061af7a2581b5a125b14d767ca659a336ac09dd2ec8360c3e54889a69529d62335e";
+  hasRunfiles = true;
+  version = "1.25";
+};
+"texsis" = {
+  deps."tex" = tl."tex";
+  deps."cm" = tl."cm";
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."knuth-lib" = tl."knuth-lib";
+  deps."plain" = tl."plain";
+  sha512.run = "7309726b33eadf8290e596aab50bb1af95600a067338b352c1ac092643a8c6d4142180d0146abbbb828a38fb08fdd9ae03da6572e6c221afcd151a51430a423e";
+  sha512.doc = "2a4979a10514ccd589b331ff34a677a4e22adbeea73d6112c9a14392b3ee75a8cdb292b008b160792b3d00b812834afa7e0211db860c41f1beb69bbc900fdb90";
+  hasRunfiles = true;
+  version = "2.18";
+};
+"textcase" = {
+  stripPrefix = 0;
+  sha512.run = "9cb8145b46343c34c4ac7c7ec64dc6d69f08e329cfae2c1ac41902a74e92cee715b5b171bbf26b92efc0a8a4500d11d317d8c927ffee623450b39e4ee6555483";
+  sha512.doc = "737c03d99e03a188c80aa8478abb64f05e6a3241185d03746682bf3c5e2e48ed8181e46d1b10c9170b98882bafcfe61e37a0409d42d2506125e9515bc44f0e2c";
+  sha512.source = "2f68a69bb41a0af207522cf554fdbc8858a675b8f9c97e72836bf62d69640aa55aafdc70b8f014ee3bfd526f155695722d4191b70b570b309bc789622b19b53a";
+  hasRunfiles = true;
+  version = "1.00";
+};
+"textfit" = {
+  stripPrefix = 0;
+  sha512.run = "96638c0bd5cb14b629f03e4b6a3266160c75bcf05d871ce3d4262ac1c070d9efc0532411f5d8774f97362b148ef6cd1c5dd5253e72e3aebb542fdf14aa6d78fb";
+  sha512.doc = "b88df8c99662a182483fc6d12d33d0bac5f6a32c84be700146d048b799045800cbb69b21599e5debac122995800b0e48fd82395c498a58df503395fcedc92228";
+  sha512.source = "cde6e37b48b1aa49811fd5ec29cf094c7b49d690fb4d884edc358bd3a8a5bf58a815e539eb5e56a95616f54b0737dde09e312c0d2baf37498ead691d4fe1dd72";
+  hasRunfiles = true;
+  version = "5";
+};
+"textglos" = {
+  stripPrefix = 0;
+  sha512.run = "1652260a3e946a8847ceb7f937893bad27a24737d9b3573466f7369ce9cdbf900af0ef6c7f0bf3033200664da736e8232c3fbf6db61bb7d51acec1010d13a3e0";
+  sha512.doc = "922ce1569fce889bc4608e9a5da4a45b7c3d2e80303ac36167efe6767c266844664de00384447e288da70383fe91261e5914394a6fdf8644349f785600271e5e";
+  sha512.source = "0dc80a20fcb8926b9bf586808bff2403452e43471983d0bf49bebd310d2bf78cb1e61cd4674f7bfcf86d94ee083d2c8e0099554858549dc5c6703d0f4ca57dbb";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"textgreek" = {
+  stripPrefix = 0;
+  deps."greek-fontenc" = tl."greek-fontenc";
+  sha512.run = "2370f666c2cef43a579e32a755675431717ccfb4bad6f30261a6c67e0617816ffc272c25e0d076d91c4047c41926c92ae375507f36f2fab01673bd7e708f5188";
+  sha512.doc = "9107ca31b645977d56a3b1e37f7b12f0302b1b2531bd2a21883f7931831e70c4383beae77469aab4663253da3109cdd9c53589cbab95f7f0126389d12509127f";
+  sha512.source = "367b63cd318c1e69944444f4cab82af7a7b1dde667d6469ade4c6433960b21a6f8922280d5a46e96fc88ddf4c2d5d3f3a440b55045a67512459208ae181bda96";
+  hasRunfiles = true;
+  version = "0.7";
+};
+"textmerg" = {
+  stripPrefix = 0;
+  sha512.run = "5ef9048849bd2515c1af0ff41d0b5189715b375464c15d4708e0152d99f01839c462a0c9d0a9a12f401375d38e2c53a0f0c314e6905e1bfb3171296448bab649";
+  sha512.doc = "05a087347db5dce688065f56c106d022f3ac30d27ee5d2f420e7658c5b81df66549cda86193f3ce4fb2cbeaad37abe7eb32b984d00d4f25dd0ad51433f8d7a01";
+  sha512.source = "bec01fd7721b5fcc61ac934ebffc3936492817662f4445f082601fe4b7aad576448d33b7ec16ce400c8185704e60238c56bb9e8e31c3b445503673145c0cfadd";
+  hasRunfiles = true;
+  version = "2.01";
+};
+"textopo" = {
+  stripPrefix = 0;
+  sha512.run = "89a415b1040ff44f62c452e61abf9a5760929953ff0a4740080f79e8343b2b4f4eef9340e5a83fded39a000947dbe7f2916fb18624c4512c5ab58171708de268";
+  sha512.doc = "80bd54a9843fae371884b87710094f72926d5ad8a7e40308e9aa753b01533d3e649ff94831ea75aed264b5f9f5df482e157a1563dc85ab2976cbf9260425c5ce";
+  sha512.source = "d426490fee0b747726dfd7df1f6f72677c9aee3d8ba56ec04dd55037aef563297d16d08a821c2e9a1493c5c29ad6b52c5af23b6bb1f4adec754bf530beb81571";
+  hasRunfiles = true;
+  version = "1.5";
+};
+"textpath" = {
+  stripPrefix = 0;
+  sha512.run = "7780972480a1355a05cbcca3c46f3e5284b120a93ed2265f0fcceb6965f55ed793756cf96df63aa8da589dd12fe1b8127bd470077b9f9dda758238ced566b3e6";
+  sha512.doc = "5507082be0235ec2253ddc0b03e239607b9d140952799684e5193e4d3d584846d33a59aa9b1630d058f17cacf7cedd2fe0a180b40207ea8f10947b534784fc02";
+  hasRunfiles = true;
+  version = "1.6";
+};
+"textpos" = {
+  stripPrefix = 0;
+  sha512.run = "430c373d2c228615ecc9c46c10a99ce5394ff0497e9a375eec3c4e409452e006979501f7d18c5f603055c9ddb57b7c0687cf0a9273761d23aec75ed64c032200";
+  sha512.doc = "5fdd14982f8b783f6b42197fb483eebb62f40c7e6f80648cfe7b7a356ae3fd243b4133a050cd84d2c8893460c15e717a21a70a5e1e0e31d52275f4a206956eb9";
+  sha512.source = "c4afcb5134b7618a9397f40e6e633d126f2803e15783b9ce6a26c82fb21d0ad226d65fa9e90e60ca5a1ccbaaa3a436712ee15d8fd13a6acc5cae7af8150da6cc";
+  hasRunfiles = true;
+  version = "1.9.1";
+};
+"textualicomma" = {
+  stripPrefix = 0;
+  sha512.run = "044ef3451267bcb74d3e4162d19915b1b7f2fac337af6faae7d3dcd630bc9be8484fa155a3579ad5245ce1f07578d8faada2e6a67830edb09b332714a95f2e9e";
+  sha512.doc = "6e6c380eb0169878a34d3d40fea47bc57885c7ea378ffd2d2a7e9bf26826dd922f67a02e74d6c78801cecb87b18de3ab52b7600623de39c53954ed568c57eadf";
+  sha512.source = "69f6594a039c9b367e48430927298768f816ba31a7bcc41036111963c5e9059dfbde6b771ab7dcbfddb6e40dc49b2daa1d1ae04625a31ae44b8ba340c42d3f58";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"texvc" = {
+  stripPrefix = 0;
+  sha512.run = "cc149d490180e58e9796ae0bc962e51794400384671eee53c932acef88512a129dc3d87ea4378247813acbd3ead010014ab71bd1717b6edb0bef4b7856be8aeb";
+  sha512.doc = "e8639a2ffdd2d40b27545c3f4265e473bfbd81a028632a082199fb0dba7ea0b0468bdae488a9eeea63578bdd610f7e16d4f4da846f9316dabf5645af95fc8cab";
+  sha512.source = "4bbcf12af602c328084e76e339d9ca33c205f08faf489be3008fa5fe0b424631e940baee1da9144fafac42e09fd2d27a7726c16e159cfe24c70d32ae1014d198";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"texware" = {
+  sha512.run = "cc66e87d459fb04070b0c43c16f3412ea22e3cf8a2748efb8a87fb0417bf0b9caa32a38147a9dd068d7ad0d25e320dc78ac54d9004cf5adef337ed0a90e52923";
+  sha512.doc = "a8ef6e6a062140ca6ab3311b7e57f452bbbb0eddebe36d02cd8122141320814508438d764a97d351febf9f65a5539b03774f611e9bfdcb5abdc5fa989fc5a848";
+};
+"texworks" = {
+  sha512.run = "06184922ee1dfb3fd6029d10d3bffa984aa7e1970d7439075678490f604d3d357e2b5b8d3cee4c941b5f43308006c53a816d015a61f0e9fa81a24d21593ff43b";
+  sha512.doc = "35bb50b86efa5f8842778f47b9f2c6863f6475f396e72d0cd34e6d6fcc4c2f103622904ebb27baa59f9ada014197e47bfb6537a391705c894ed669a7a92271f1";
+};
+"tfrupee" = {
+  stripPrefix = 0;
+  sha512.run = "ee935ea5c6563fd8da4f403a1c3583b289b64e212aed4b9e3703ec345dc47c5521d291e1ae0a10c9aec2ebfed407fbf14e804bf51ae4c4a1e03046fc7cd0ad5c";
+  sha512.doc = "19da18d665a8369e58a26d4e979d5fd6c8b3187dfba97a281008627aeb8c5ee824dc2ad3f5c94c3b35c67fe28a646f44aa5f532912de5f5640b0a7d56afec2f8";
+  sha512.source = "30133dbf65f1a33f79ad8b2c8ee84ff376b39d12cf0d48c4e72e86b393e0d55f5768c7af5f5f3f6ff1d78fe2c7d4f2b09d2980107dd5aa1d94fb5ea27545ee9d";
+  hasRunfiles = true;
+  version = "1.02";
+};
+"thaienum" = {
+  stripPrefix = 0;
+  sha512.run = "25f6bd1e6e9586b261721b66b6b193c07f60dc074f7b7b1911b0a8ba4f33815c86945bcb3946ffe153f70f0dbaeec4dca8e5574f8369c754a6151fc271029f3b";
+  sha512.doc = "246dbb624a2e2e30bd5468c2596e7b3f7183c7dd9d03eda42fbed88fe51f16b53801ed39f85590d2739a93d48bc413fce5c52685d5425615f650b19f56013261";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"thaispec" = {
+  stripPrefix = 0;
+  sha512.run = "16a7b186e026474f659ceade9d18f339fd597857897354c40208efaaa5caeb29be4c4c8b68aed2edc8ca8b4b6ef5e66ab511ebc943928b6ea51fe796e9956df0";
+  sha512.doc = "e3bedf4c192c9505fe8569195e3be10643d236d826eac14878e46b62133a09029ad5625f988e6b22009cfdc3a26550f155b8d09eb8476e84ca561bb6f470bfeb";
+  sha512.source = "5e5e404acaf32626a7d06342326733145d331a1259c25e956bfb469be6e4f528184247d32726c378fa11908e0f69e006e2251d20879b86b714f0c24a54f53617";
+  hasRunfiles = true;
+  version = "0.4";
+};
+"thalie" = {
+  stripPrefix = 0;
+  sha512.run = "193f59cc9fcad15ca4fd52e011152a08066329ed496ad55d4245f232a701692b8c3a33f24d457358d696ec540041beb90ef37696a77b1685f22f15031665585f";
+  sha512.doc = "104972514a171a25557b5a0ba6501be9556f77eb7fdedc60843797ba7fc53873b75cbf4e470dfb76866e6042f77c5c39ae86367a119f64b34a18183eb0ef1be8";
+  sha512.source = "31b0a6d7452e3b5b8affa9e4e89146c90b7e9f2af60eb7f741d4bc5722147c0ca2a902fb61b23d9a47c3bc32e2e5b38a170f3a194049cd8a1009a7d4cc199995";
+  hasRunfiles = true;
+  version = "0.10b";
+};
+"theanodidot" = {
+  stripPrefix = 0;
+  sha512.run = "f89e4fc9a726b87568eb5771e0f3a4c29f23198eece256fffd85aa3f7d8f359fc9446e24cb5945b3297d373a84ec11e6b0322e378fa6bb979bdf980e91e5ce82";
+  sha512.doc = "82ced7608403dadc3d5be699acec21bdd7b9fd44c68db769f6060beb26b7a448bde9ec43060e95ee6699735c4c347ade0b2a1267f944c2b168363172c3c0b979";
+  hasRunfiles = true;
+};
+"theanomodern" = {
+  stripPrefix = 0;
+  sha512.run = "cee56b45fe0b06c36fc4a11dda204117d20a5ade50b5d706aec08c4bc66ac9d801cb3c885b8f18b54db7a0152c3924cb844a0101c71a11c81d6ccd32d18518da";
+  sha512.doc = "d7c6258b4e025111f8c8e29332b8325128fcbe095d9e8e3975227c86e171cd12a73319cfd341030f06f901d005815bba3c7643063a257dea006a159ccace5355";
+  hasRunfiles = true;
+};
+"theanooldstyle" = {
+  stripPrefix = 0;
+  sha512.run = "41763eb636491cbd5d7f712b91d3ab6189a87d6fca61efb0b552f5c57eaf25a830763ef83d9b093b2eb5a31f45f91ecb8eef870a7aec0e0084dd685a55088498";
+  sha512.doc = "3e9dfe575f249cacc577763f7b7aa2bc128659bdd19b0ab97b7c9a43a6b5938d7067e657c9a469d4b163faa75f1373a21f5e0825e345d342af037713d595713b";
+  hasRunfiles = true;
+};
+"theatre" = {
+  stripPrefix = 0;
+  sha512.run = "d450ef176d5543581316ff36590eba2ed829a3f2b8a019fa8ca379af0ae2aa4df4e4e3068b52ed91edec4df33d08aa78b1f5f21d0fdf33d0aa718704e3de2851";
+  sha512.doc = "cb4920d5acfe0e1288c7d459d15b06b9ced1130b56ea92c9ed49376743cee7e3fbb694362bac51f2660269992d64717effc5d8e9f52a21337fe7eed51a4622f6";
+  version = "0.1";
+};
+"theoremref" = {
+  stripPrefix = 0;
+  sha512.run = "ec3f8bea432fc0a72d008884e8879bf22db5c2be3694d298828a493e1b4cde2dd591f35887e4aba646f44db47a75f87a08ec7e269cec77be66cb45798137c85a";
+  sha512.doc = "ec478b840b200dd0e731545f039c8ac01d9f088b7644350cc3366aece722b924187ca0701ad15be3a428131bc3025d1af9bb0440e8a487e0272c8d7997924200";
+  hasRunfiles = true;
+};
+"thesis-ekf" = {
+  stripPrefix = 0;
+  sha512.run = "ee4e7a6e73e113334cd6ef392e2530803ace4873eb3c477df1b9de898dffcfbc73a20e466f9137ffb295b247df5ae2c5ab147ae274ef81224a2d1e6d4ec873f1";
+  sha512.doc = "36bbf561af8e75cc4c890b0856a1272be7f24fb24943706d94a3b4b4aceefd5b21f0857665ce800649e425c7e446f89952bb6b3d3b7a25b2dbc6810160d25dc6";
+  sha512.source = "9c1edc9bcf27f0e4186c7a57aac14cfc34b0f1f17c554b93ff6cb0f86e0eeb41af81d6fe105a32d33730ba881952e1fa9f72d2cfd8b8689d4a9a2e8f62edeb41";
+  hasRunfiles = true;
+  version = "3.1";
+};
+"thesis-gwu" = {
+  stripPrefix = 0;
+  sha512.run = "f5f54b6ba4d95422d3b5e219a8319375f543939b0a4fff260616048faee47203497cff1eadf8603f03ad54f7f93bfd524fc3f2efa108bcf36c34a38f468b85cf";
+  sha512.doc = "88928ac624aa85413652ae32170854cce4c0519858b5e35752fa06bc4e7130ac031eade4127704edadf69a1fc5fa0e3357af1a0350af83decde430e606c0ff4b";
+  hasRunfiles = true;
+  version = "1.6.1";
+};
+"thesis-qom" = {
+  stripPrefix = 0;
+  sha512.run = "5afaa0d05b88dbe2d3e5dc2450d1d01b57a24f54be4437c2e9c71afa6c8b1f10144c674de2d8062c6d4a5b7a5140b1fac6ba82bb68c03ecb6560d8afd1384cae";
+  sha512.doc = "7bfe521b8f1df650304080e50805f48437e9b22b5b06f3f2fc309bc770ea0370d0e5acf2977c4332e0ca3d7b664c2dc8161f31f057a910069ba1cb585225145d";
+  hasRunfiles = true;
+  version = "0.42";
+};
+"thesis-titlepage-fhac" = {
+  stripPrefix = 0;
+  sha512.run = "62cdba17287f90580fe6273d1ca9143c9fac01d7da214a20413995b925c6eced385b3a5c172e8bedb4f17396ed7e9b78e789ca475c5efe542283d9b421bd6ffb";
+  sha512.doc = "13378f3ef37bd1033d009d03772244e048ff2a16b95ca8a0f14feeda8c44b29036276c41aae812cf1c28ac5684edad56b000f8a45576bd0065fb844f5b6dd189";
+  sha512.source = "34b0f176df84b1b1d1f3e47c7c01d640b0e74e30a86488e07e9e67c61c80a96cb1b9ec835266dbee3e45a952f406ade5af5173e7df33f1d12d1b1f5d0611ac75";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"thinsp" = {
+  stripPrefix = 0;
+  sha512.run = "ddc80b4de32524ce76fe34e8f88d01e2db18a8bbf60a718454a0303aea8082fc2e495c89c2ad0a7459ed3151e890e30a1263267f249581e24bac87113a5fd266";
+  sha512.doc = "b5b50522a4a7b5f7772118d95fdf42e2f570ac35c49a8690560df27df0754a170acddd782b516fa185c0f6ef2abb3ff8a9f366370c2ad46e2e4d32dba21e634b";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"thmbox" = {
+  stripPrefix = 0;
+  sha512.run = "83ceeb0cf84ff75afb734f41be5a5309692c6804a5a20627c54cc8760f8ac5e205cf1a24097c8b8624823668796092d620f5ffbc488f63b87e7cbf9365279aac";
+  sha512.doc = "ad8e0710a15781eb3164527dd16ecc2050d3cd3317c386841ad8612a9ebc6055a1501272e3b01bcbc6a7f1ffa80455bf2ccdc0cc9ff4428c9688e9f6404a16ff";
+  sha512.source = "1b559b9286a97c3157d568982513541028d96cfd5d67ac541909586251ac3729574c23a05ebdfc42ab06a92ab2ea0cef878b1f42983d06fd48f825962de57cb6";
+  hasRunfiles = true;
+};
+"thmtools" = {
+  stripPrefix = 0;
+  sha512.run = "dff9b009caf0735effdd5c8da157f74a3c83914eb3a858a7f530d9d882abf4673706a96a68870664c9da2c9ce34c017cb0a0b2d96a6f9aed070dcb18c7d814f1";
+  sha512.doc = "c5b370bfd673458321bc1d95f2a4a70a2c15cf2eb0b0d830aadaccc0efc77aa60c0d897b56f65bdf292ff0f3a1c136002b65d4ec7cbc54703058938f34e7af73";
+  sha512.source = "740afaad4b634e0296fd77ada2b583b544e02942839f16e9d12bc4757c384d52c56992dbc2afb6b8c133745727be1bfea94ba321459b1b105528a35fc93d744d";
+  hasRunfiles = true;
+  version = "67";
+};
+"threadcol" = {
+  stripPrefix = 0;
+  sha512.run = "e75f887dc04aa55834c285d5e36babfd0844b79b9d1cc5cfb2eb6412bde9f42b651bfdca9f6819b27f6615aff6f96031135f1a6af3b59503fda34e7566cdb01a";
+  sha512.doc = "626ac69b0a26fdbed51876782a9ac2e3b0ab9b32bf3b2f32ce19cce080b5cda40a62160f453199a76b58903d762cc8085a8541fa2de3adc5fea6266592c06bdc";
+  sha512.source = "df757dcfd1eec3e8da04939ef69d04ffa59767544a1d5349eb538e111843f4c6dd4374e15bc6e586edac629f61d6979688c229381ad3cd4ad61dc2d48afa7c10";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"threeddice" = {
+  stripPrefix = 0;
+  sha512.run = "66e6a27aa277b45b44c156d408c764da5bee6dc540f2058a783f02bbe806c95052267a5ed79ea49b5dc356d0f03747e9b186542640b34753a693ecffa158a6a4";
+  sha512.doc = "c750497229b8bd41eca05b221ed2ca2ca49db8cbbff03bfce2712869d352ae0385e4c10e9730e0b2f8286db9af1e1b87f10d599788a3dfe8d41c28efb8b0e4a6";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"threeparttable" = {
+  stripPrefix = 0;
+  sha512.run = "f947dd01e56f6f3db8a4ed0b8f3ec564a38486fcb27f30bb3bacdf31af8360590e7e3886cc00cfbab813213974f4b335ff06ceb521d25519e8b95e345a002692";
+  sha512.doc = "6b5eb1d6ceea740ec54ba935c45f03c2e6328140e86122a38b90d84e375382adfcfe14e2e9f56384f825c913140f01a1eb6266d2d46f6b813a34b4da652ee31d";
+  hasRunfiles = true;
+};
+"threeparttablex" = {
+  stripPrefix = 0;
+  sha512.run = "9dd33dcb7f9eebb9396a6a05ac20e9bb221260cd80f355b23f60a0466c64847ebacd8b0d19c75b3d9cecd9c522a8633468e7cc86121f7626141c066e12f977d6";
+  sha512.doc = "3dceb0aecfa2ef09bc20250cd38dd698e35b2cd2a33fb446e78a39fa654899c4f6658a18b95b39a5bff2279a0cbeeda71bcedcdb7fa91d148290302b73e7a64c";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"thuaslogos" = {
+  stripPrefix = 0;
+  sha512.run = "584d8f130844ac834be8f061bd8078afcd8eae2e4d22e33d8a61dea8ea637476532181cdc7df9f1710ba5d8dd022a64dcb561f21334b830387e9a063ddbbe426";
+  sha512.doc = "5a2298e713e4a0711b01fe7fceae12bf20d6a0fcf91cfda63313e74709586532bc407c07be1807eee5405a6b6de74fe976b2ac56fdebbc344d59255080d80224";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"thucoursework" = {
+  stripPrefix = 0;
+  sha512.run = "28786a2d16bef84f87bd87b57977a9d9cbf8b2f172928ccf56224205ec54945fc12ebe563d73df1d3501e987f8aa6af9038e28127d7d381b31be276f6e2546f6";
+  sha512.doc = "a4e7cdf992721820376ef2b967aeed1821edb6e4763251b627c61a0a85328de8d3d3ff78c7a39f43dd57f3c2ccf54fabf274a074e529ee9f82770766e87cd263";
+  sha512.source = "82615d29bafe844d4c27f75d477b2f731f090fa8080fd36f727c9f17dfbadcfd0bcee2ca7d1ebaae0b75ba61d18828298d5ce64c046f8a6a2a283a2f24658c0f";
+  hasRunfiles = true;
+  version = "2.5";
+};
+"thumb" = {
+  stripPrefix = 0;
+  sha512.run = "30290cc3b8cc48de6c601fcb3d066f0533bb3f09f053d7912db7a127d8327c4aac0a96499b7eaed36b8caf4dcdda5c8f34a5430d69e1fac70510f426c92ab9f4";
+  sha512.doc = "29abd2e57cf17edbfeea06c041666ba29e436defff1600df7222dca6160e7be740b64647d7a44a10f6f803011a1754abd693048ca36c4c372ee0da52df2562dc";
+  sha512.source = "1712eaf8ef694998eab8cd0b95c6e8affc2a967c81cef6d6bbe8d985137662631254318ad2dad9a021a70ab849986e727699715b27fca1a5952df111474f92e8";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"thumbpdf" = {
+  sha512.run = "f3eaaa9ad4287d58ab89b98e1889f99dbabd82153f99921a9249b2cfb741c0cc45bfdd1903590c66bf0b63c77490017c36f552e34d7d15290cbc5904e57a3bc8";
+  sha512.doc = "fa2a7cbf80f7b76e63aff8ce5584e698e9f88a0d5a902895afa22a100202fb30bc857f5a1b88e190ff2dbf5ca9cf2338f6ca96a7b80a6d3e6e549040fc3ece7d";
+  hasRunfiles = true;
+  version = "3.17";
+};
+"thumbs" = {
+  stripPrefix = 0;
+  sha512.run = "58e489402fc44cbaece118203bbe7011494b7ef16ffa0e5d60be2daaec0c4ef2d048a71f0d9373a1683aa780fd20e3d64330e199596effc7cf2fcdac34f1faf1";
+  sha512.doc = "4c58ff61d64b841b3a3bc018f94c193730129edf45c87fcb9c85685f748ca3db1f7d51969dd25882848cec906485f739f8f07c8bb2f8bded580b59ea93032a14";
+  sha512.source = "26458ebc431f64a324c39ec370f2b0714a56563decc944c64156f0a6a3e22664e89239bbbfa7710d9b46706657b48470ffd1da7a1801aaca2732b30e01935fe4";
+  hasRunfiles = true;
+  version = "1.0q";
+};
+"thumby" = {
+  stripPrefix = 0;
+  sha512.run = "485bb2670133c3c83f0f7aaa685defc6d36f5d24173652d869f526770e1f55c55a31f3a3180f115aef45fb824d9032ee915b91c1c59b9b33794c95c92f03c3e6";
+  sha512.doc = "bac645197085968fe8a7bd41f4a9ec3c6e51e17e6750b87ca1a458acc9f6a4f244d1f3b36b9c622c98492b90abddf9a4df1636b1874c02820dcdb6340bad0910";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"thuthesis" = {
+  stripPrefix = 0;
+  sha512.run = "c13d916b927b5caadd0b6d7d9b9abe05cb6ccff2eebff4cad0034589ec63eddeb8a7bb19f8280e7f52b7fe4ef651df29fe20f82c0e2b34e3c8c259cb5654ac5f";
+  sha512.doc = "db975be86cdfa84682ca866141e2673bee2cc9650c598057b9ab6e65251a07dbd4f760b9a80104df82661822b2319a1fca9589f568405543fdf5c207fa3560c3";
+  sha512.source = "74c47a6ed23839ede380bcadc4aaa24a526f62b46a92456e0f2c22e125dcfdb1006a0e4d9070247bb65b5096dd573988de9c4c1e6f12cca4cd8f9d553ad137d1";
+  hasRunfiles = true;
+  version = "5.5.2";
+};
+"ticket" = {
+  stripPrefix = 0;
+  sha512.run = "cefb3e06df2953063e9d12f19f03e973212e784cebfd2d6628d2e9ddb443159b285b34f12238f6b77813cc48e86aae7018cb5bccc4fd158f4d891f05fc51dab5";
+  sha512.doc = "fde4b06ad09837d1d6b6efb275800e32f617619f9c18d2dda5924b094f860492053c4ee361a2fded1c9f4509ba5e615601b183191c0cf064af24cc59cfb23748";
+  hasRunfiles = true;
+  version = "0.4d";
+};
+"ticollege" = {
+  stripPrefix = 0;
+  sha512.run = "92bebbf5a5e7ccf7be09c205d9007a780422c625d9a308eeeae50b2ec4ba3cc6755a37fd8a49e24b7a381894cc3791fbf50f54348c3ac584a2c0d9a693f93a56";
+  sha512.doc = "f0049064eab926eefcf77fe5aa0606202cbce79ed7f0e0f1bafb171ad82b72daf09fe2c0cdf79720834d6349d9190f1d3069f155df922ceb469ad3453a6389b1";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"tie" = {
+  deps."kpathsea" = tl."kpathsea";
+  sha512.run = "970a855d2d025b3ac30a4e1631986568459bae84727b661ffc8e0982656bc66eb940b59e2b9c3ee6430e3abd5f7d8b0ce4ff828127bd2f9420e0139f1860527b";
+  sha512.doc = "24f07d9954fe0385abec8487d4c488df551453e13e8f638e32899722d62dc91b23df9d4494f9bc13662d57fed6e8dfd4d71835ef79832b59f075f9023797e858";
+  version = "2.4";
+};
+"tikz-3dplot" = {
+  stripPrefix = 0;
+  sha512.run = "6d4aac2eaeebbe2a4827a5a40e8571c48ff4f5cc854daf130ec7f20f8fa06135bae1486a42b223410be848b72be2c19d6e2ed798694ef5dcdb5861846bd9c072";
+  sha512.doc = "0fd9bde0f12ddf5a4bf6e2e1df66a9aafa42e81cd945b41e09e8d289c57b04faddd303a415c36239e6686be90f06e8a7cc794ea50d17ec54f1e25703314257da";
+  hasRunfiles = true;
+};
+"tikz-bayesnet" = {
+  stripPrefix = 0;
+  sha512.run = "b3c535af8afe86e311e4c7371addfa484403a0a9571a17d1cb8d39dd7242aa4798476352bb04a6bb214086f1ed4985595c502723444a032f9bde04423c26bea8";
+  sha512.doc = "2bdd764163c606579e68099873844fdef6b9a36495f4117b99ca483bbe43334965a177f398da60e82c11035b5c7b9e0513ae56e6868d6238cc0c798f47ab37e7";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"tikz-cd" = {
+  stripPrefix = 0;
+  sha512.run = "3fbfa7731eeb6d2b9cbe67cbc4d5470e235f6f990b76b3c82961df172fbba9a8f62ec6055743098cbdb2d3d8aaa3b94f5d4dd8f735624c7d9562de6aa72fdda3";
+  sha512.doc = "63be72c0d55112e8328d40ae4fbd1e3c92133615e28f032f9f5efcf2432b6cc440b3c4de4ba46f3eb9e65725caf7de3623a8b49f3b9a87ef780dbeacc536df46";
+  hasRunfiles = true;
+  version = "0.9f";
+};
+"tikz-dependency" = {
+  stripPrefix = 0;
+  sha512.run = "e6f04805d8c36c6bf81deb68ffa2c43fed7a7ce21541d6b02828574b579cf41d5b57fd53d12f18e82b66c3f96e7c6962555dede9072e243693f6f6767146ad57";
+  sha512.doc = "ebb3821e66d238967aadcb06d801a0d18a90610eba37d1763c44452f7bf8fdf0c1cd30d52a72f0120a45429c303739fa239ad05b92ae067b99771d9bf4f568ca";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"tikz-dimline" = {
+  stripPrefix = 0;
+  sha512.run = "c7a3b158a8acd100192b7dc936f2e452513125389f72c12f0c3818bb4e771abf0748338f13603765904adf1d808fc2b263d0f798999c52638e610d24addcc641";
+  sha512.doc = "62edb9667ae4405c798a00c1d079ea9ed5bbdddd76e4a730aaf7405d175afa146fcb7bf43a551001eeff1f683ce3b47a0a79fab66b7410be59f18f4f6e409ef4";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"tikz-feynhand" = {
+  stripPrefix = 0;
+  sha512.run = "5dcaa2f5c846957f3583ac5bfba14c668cc855c6dd930eb5851c19d448efdd207ff34599b09379354d0c772cb1890fac375d75d61524e64148602f4b5dde4355";
+  sha512.doc = "b0cf316dafb9494fc21d5657e1e3c1b4780b7c30e2fe93235d6d8538979471c31989e4203575dc66204fdb1cb11386d290feba3070e43a273b62ec59a73047d9";
+  hasRunfiles = true;
+  version = "1.1.0";
+};
+"tikz-feynman" = {
+  stripPrefix = 0;
+  sha512.run = "1a1ebc5d2f2eca4e5dd16ce744774add9b8f5b4c3124dee46f0366f43a59b188b0873939d2b68ff0d679f3e52f1a6bc387ab81c363912024efd0eb4110e2ba27";
+  sha512.doc = "b3e90aa1d8476aed01faef977b75f4e3450cab121d457eca0bb254075c1e2ed58fe15196ab0d923906dcf6af4f78bc76d6053343f6444c8294bf7d5bbceb3cd1";
+  hasRunfiles = true;
+  version = "1.1.0";
+};
+"tikz-imagelabels" = {
+  stripPrefix = 0;
+  sha512.run = "b74cf7113b288af9e98ceb801eb4d72e4785ce30390718c4c0eeabae20c49ca8eba91342b89dda525f06b9f436a427277c4ae8415748f1487cdb073088ed26c8";
+  sha512.doc = "843f943c4a0e12d1260ee17f9f908adee568100b1e415df3f1b383fd83d70065c57a21290b89923d7ee84819356a366a467e42fed61370b214621a9ee58ee97f";
+  sha512.source = "2c6d1c0b599488bea8d53c136d81881d8cf15497e295b6e0701bc8570f2e868bdb1e0149f25943102cf6e9babfd53ad8401328224bc16a305f46748857c79572";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"tikz-inet" = {
+  stripPrefix = 0;
+  sha512.run = "0c4ecd55d10893ac8bca7b8ac38f2366f30cd989c5d6ab4dd501047f01c0285f8e4b78309dfce06525bf525cff77e2edd56429aa166f24b9a7e07586e3befe96";
+  sha512.doc = "e61f0a7879dd0ec016b6c85d66e6ace6b953adc2b9abd87306dc4d071d82f44984e6e25530db3fc658650f5ca74e5c237aa64d18e60a3c5c8c7f57c6f42103e0";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"tikz-kalender" = {
+  stripPrefix = 0;
+  sha512.run = "1b104896f1eda97270afce51ea05a5653d810c5362df86865e1b51149533ed9d1d2293d945e2917b502c94ff89a38aa98b50fb3014f769257deccc498bcad70d";
+  sha512.doc = "0698a9fcacf2a28f9e38fa2adac429a09e439808b017105b29ca68af5325f4caca552b88a11c71924e964914e8e362b26573b1dffb7c07bafeb901bfa04254c2";
+  hasRunfiles = true;
+  version = "0.4e";
+};
+"tikz-karnaugh" = {
+  stripPrefix = 0;
+  sha512.run = "aef1c5e3fe96191d0dbe55ea9f2307b05c328b92621e9dcebf4f8fb862ae501bc6dabd4f96915a800532723b447632e21110cbfb9483bd73dcef928b102bfec3";
+  sha512.doc = "b17971734dac21649b75c140dc1dca832de35460ba5de9e83f8907ed075fbd0fc2872edd39da7aaa5631b126ca0d59d1ad440e4fb2e68ad277d7ea4bb8975440";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"tikz-ladder" = {
+  stripPrefix = 0;
+  sha512.run = "b01bd48b4e8dbf5e3549bd24949b81b3731b32d715dcf3d3141e2e2eca5a98c1f5e5369c10cfdc62791280aa3349cb5409f582d71701ff03dced0688cad1847c";
+  sha512.doc = "9133c29850f486ea62be8ef9b61bf67907e88c9557fbac132ad04501616efee97725fc58585fce64c59707b4828a4953d926860af7c99fde9e3e73a479b28d0c";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"tikz-layers" = {
+  stripPrefix = 0;
+  sha512.run = "900f3cba19f723cd75f59f2d3380ac96c6bcd53f4d80ce27b2d393d4728f37b9d9d2bae414f20d38e4b3b93769374281d4e741ac2480986b1662696e08a9a207";
+  sha512.doc = "617f1a53fa77f4a766157e72013227e992589b0030ac90ddd181643b1ef212f7e83b8f84f2520d64acf53f2cc76e3333e7ba56b78984b28c3320e2977a87cd56";
+  hasRunfiles = true;
+  version = "0.9";
+};
+"tikz-nef" = {
+  stripPrefix = 0;
+  sha512.run = "e0bfbce75ff6c9ea02a42576a767e1a06b589797995e29e9c2ddd8640916496bb50126da69fd859d9fe6c89a447c342fc15d66ba620f084980740c6e7238c780";
+  sha512.doc = "724dc025c4e67817940f9c4269290dbd1a77208ebb8bb489f4807fea30594eba77c9896e3bc814825307f2012112576cd268633e99b53ead7b60d3689e155c09";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"tikz-network" = {
+  stripPrefix = 0;
+  sha512.run = "e8100d04b9ef3336a514d18f43ffa6af5d4c2a2ce28663c9f4b40272f5619dbe11dc32f8d7399b7b730f8a90c5aab5fe18cc839d6736d7be6c8e37289e2dd30a";
+  sha512.doc = "26cfe73177bbe885cbb224fcd9b4f136a224947a4d9000e24c7f4fd1c44194ab8d2e11dbfac558c68ce36a30c7a7b82f335e3275db22e599dfcddd48d91ab08c";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"tikz-opm" = {
+  stripPrefix = 0;
+  sha512.run = "eeb000cf28e2ff79106edd734ab71b9ec4ecb0db043a8b03764a98a33d3ef570711974bb13b58453362dd045b1019bfb4a1c1a856b74590110f7d8af308a3f01";
+  sha512.doc = "a2ed9a4b52d34dece5b0007b9dc46cf8da8cee0a9288b8db79f38068db5227e35ef9e3fe1f93a4c53e994c06c2d5cf21257bcde24b02f1553cb21d9f7585751d";
+  hasRunfiles = true;
+  version = "0.1.1";
+};
+"tikz-optics" = {
+  stripPrefix = 0;
+  sha512.run = "703bf6777a78abfc72ff87d16a45c1599d9d68586b38fdb2aa4b2e180ce9cbd808a399a61f6ed381a3b04e83877dc2095c4701d10973f8632a0a32356d71f83c";
+  sha512.doc = "0a9f4d246869cfa0a8e7d252f78261a7877f4366fe1fa5c9db9dcb9a8dc36021818042d4ba79eb711e73a7ac32c0dd601ff892f97243fd5cdad373ee3ee02611";
+  hasRunfiles = true;
+  version = "0.2.3";
+};
+"tikz-page" = {
+  stripPrefix = 0;
+  sha512.run = "be0e43fc329a014b11fce907c6b073f5f4be64b4da4b184705aff2c08d82c1e644056491d01d59ef0ef8a22b4b4c3f22b9012953e00802a9b697a10f0a2f4920";
+  sha512.doc = "896da337485c89508e7cb2adf377090b768beded3360a730a5a9c2400db73866b01e0091aaaaf8ce25b7444bf5c5a243f5eeff444d4588a4f8f8b5ac8aa9cdc9";
+  sha512.source = "34741f8aec629a8d7929372f1fc5b51ffcef4d95fb95c039c9ba96e4fe05db366c09c88b6987b57ae0573ed067947e2a375f0bea96a74653133abba850453593";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"tikz-palattice" = {
+  stripPrefix = 0;
+  sha512.run = "6654ca0888b9a4ac7106d5d275a347e38de7dfc342d7c6228670e51a0285937015a39fd34e83e42a5ab8c2f4341e7f233535308bb2cd65a55227dba2d67ad79b";
+  sha512.doc = "8fd0a5a2ca4371e021ccceef41115b6520df6437198fdcba7fc37aa600821a95e91696fabb19cb0277639ff7664574cc56a62e1edcc96e58f26dd65ef5c82fa2";
+  hasRunfiles = true;
+  version = "2.3";
+};
+"tikz-qtree" = {
+  stripPrefix = 0;
+  sha512.run = "5b00d147eef48e874d2d5c9b171e93703c728cb56f3882af4e63a41b36ebdadbd5bcae332bcfc8e091b16ee14a3a3e16c594b0f0879bdedeaacde1c1700c542d";
+  sha512.doc = "0e2a19415d00cc6c94961dc2e8292038078334cbedeff63d889a3d843d9ca3e89533870cabe2068f5631b3f48fc456cac36b1720df175c20a9f6c986c388f799";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"tikz-relay" = {
+  stripPrefix = 0;
+  sha512.run = "ff171ed2c1b494ecbf012f1401fd0f2d0fc56a388383e482cf50ca7f591af93b2e6da74c237ac4a17fa214a489650670ef8560d826c7674086dbde6d541ffce4";
+  sha512.doc = "1e81af1e171e7bf353617b1fee7f456b1e263ad911a842c154ec813c38fbab694f46b134c213810ca8de106854cc05d40bf8dbb1376c055d4d92c4f87e4e779d";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"tikz-sfc" = {
+  stripPrefix = 0;
+  sha512.run = "f31541b2333c5d8343143aad3a260e528523f78636cd772deae6e0eba81957ceeeb41491279dad621e4476bd9f5125ad994814cb2ab691e5039b54f9fffc7cc8";
+  sha512.doc = "caaa3c08f358b7f920322c553ff77e1f42414f16c67d2dd77bde8992e545366224cd7070e833268437332c080d6c65ab244678a3e9d5888fa97d21aafaa2d2b4";
+  hasRunfiles = true;
+  version = "1.0.1";
+};
+"tikz-timing" = {
+  stripPrefix = 0;
+  deps."svn-prov" = tl."svn-prov";
+  sha512.run = "f5f771d0fecb0615770d978d1ee5a8a5ebeae4c1d78d9f0ea33099a5c8d89cb7523c70dc38d3a0a6970e997fb5d7b9eb30e54bab4b865cbd8a53519d3bf529a5";
+  sha512.doc = "e0d03fa23c84c8241a8b29a6a7242cb54bc6cab8a25ecdea64dcdca70606ac086de9f021045ddd103b35209af05b5e0342808a97b007c639afc40159de211ce9";
+  sha512.source = "20a12782a5fed931f92198f02408ffe39a973eda5cf95904b3b33f5fa5b7a338b419da5e985c76c57610eb82c6b428f02c2fd28f24ef381708af46974bfa0920";
+  hasRunfiles = true;
+  version = "0.7f";
+};
+"tikz-truchet" = {
+  stripPrefix = 0;
+  sha512.run = "74cc5a05cd9558c68cbb7987671fe1e02a9a076049aad96d4c95d7471ff04e48f03c500f58b85bd8eead46e1af592a54ffe1ef0b0ea0644f4479a332a63dec4a";
+  sha512.doc = "7fb291a9d7309c722fe31cbcea7a4004d44552f547e4d71fdcd667efb4aba41b6bf0be0cb941dd16e425eedc668dc6de3d2e55f964146a62b861296b0ed18579";
+  sha512.source = "88a3d1ca19871e0329e40165b35ec90ce65b1565d42b4a678bfe611311a0cde68a6a8c67ff3ebdf78a1bafed1fec875a4f221efc6934724a265a3402d4970832";
+  hasRunfiles = true;
+};
+"tikzcodeblocks" = {
+  stripPrefix = 0;
+  sha512.run = "709d531084b03a8bd1b645699de70a24ccd6c57050bd5d7b9697c778ea702e846adfe288983970a745b8745eeffe6acda3d0024fac65ec4e99475c736c5fc2e8";
+  sha512.doc = "26ac33c604e51ed31a5b36c174350b1860b8b01169470cc1b50ce49808f7c8d84886110299bea82e72b3a5f0c18ac0f897d879aaabad1a4712dd94af47b3b10c";
+  hasRunfiles = true;
+  version = "0.12";
+};
+"tikzducks" = {
+  stripPrefix = 0;
+  sha512.run = "a4787c51f622a45befe7a01e0d30dd7b6f7f408fc9f64bd53fbfbbef721a0adfbf80253a395670e13c6eed43593facb704894d8652d65853d1082c0fecde8498";
+  sha512.doc = "55f442ca85b45e3ab1852e2dca324bb580e35a648a4eeb7a693c4497ac358e6be94e5c90062f6216f5feddaa900376f96bf00b222574a5f45b176e2a80b38449";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"tikzinclude" = {
+  stripPrefix = 0;
+  sha512.run = "1559c739ee5ce26c531ed1c989a2d986ee6da05880e6dcb8f14018c71c638028517d1c2374cb452421c92f5d430d4560ae4463732926c56ff33407941e70ffc3";
+  sha512.doc = "9cf9e6f5e45f9dba8843684cce3ff395f18c485e30ad0d0566e947dfa69704cd99600f8673203ae212a1aaf77908715c2e5ddbaae0de3732b98564725297112d";
+  sha512.source = "3c7b7da5f7fb09fb52a4517846d3cb380482a03a2506c0f2f04f4d71bb42c7ce6cbe4087fe772b45808ad497fc7ba353c9ab193e61c328d57a5dd58b607ad4e0";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"tikzlings" = {
+  stripPrefix = 0;
+  sha512.run = "0c7c5af85cbdc6b5146e67083a8ab5485c3d0aab78d677ad8ef53f6419530e96385542d1317da04bf783a4c94b61152ebb8fd037ad8bd0ee472531476646177c";
+  sha512.doc = "2b60d87c6925d1465588f244fdb3bee6912ebe02d89bed593caad9a8b8710b0d18a9aaef903395af9fa85207f0278054fb6a8d94b6572acdc60b30e7f8d9c6c2";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"tikzmark" = {
+  stripPrefix = 0;
+  sha512.run = "4f1040ee866eba68c6bf622d694cbbf417455691a08bb91169cf7a3a3a6e63d7136e1b976ee2e8e89361d5fd8871afab2dbeb7d26e04f4b51992f6e71854bba1";
+  sha512.doc = "6575708cf87fc25c080001b6836df3dfa33474b594970a4dd4f2e772a9e3ed8dd6c3ed4f2ecb7866415606c983dfe36184f8ac9fbfb60852f5feae3dc90b98bc";
+  sha512.source = "1e9aab19f1d7ce4923b2092cf69e0841e0bc99f68ef983887ad499045a47c071457da72a878f2db49655ee31f18e433c8f98d58869f122fc5c8867757d36d670";
+  hasRunfiles = true;
+  version = "1.8";
+};
+"tikzmarmots" = {
+  stripPrefix = 0;
+  sha512.run = "d390b922ccb3cec5b215a97586578462f83774b3dd5d3dd461f47833f1ddaf705773e4a60acf385747df6b55d6d20c495f4ffa7f1c3f2e6d480d66ab5c5b04f6";
+  sha512.doc = "4836d1d7c55ae98b26aa4968c5717457c8e2cb64d3e21f2b7298d3990ef612fb9087e64074945e24999fc302ae012e47c95a00c07e23286aae5ea7cb63fa254e";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"tikzorbital" = {
+  stripPrefix = 0;
+  sha512.run = "cc0be76e583d67759d53ab89f777f137e7038eb8344e841a3a1c6e5327129063f2cdcb67c586546f8bec94e8e83d944ae864f291b5b7d384610f93c0ce604aea";
+  sha512.doc = "676980e8772650f77ed37d545cbd4ac22af170e1a4541acbd0739f3b5c0aff91f3d48cd3b3fa3c562510c1c624f46de2218fe33a9e53532ca88ccbb929e3495b";
+  hasRunfiles = true;
+};
+"tikzpagenodes" = {
+  stripPrefix = 0;
+  sha512.run = "4f0d6a4270bf90aa1fa5c5a018fb8a2703a6884215672cfcdb908f7c6d4e9b3610a9f6fb6c26b7b302daaf509d635d26443c6e8944bc1f8704f94a527090319e";
+  sha512.doc = "14ad07e01c014d000a2bdd483a2dadba652cd78b42faf0ea5f9ba829ba484239361d73233443303be121dd5122b7e5e209867145b10e7607b5c6e5d13e2fb428";
+  sha512.source = "bfde76eecef7173d34cddab9ac517a4d1440aa2888007cdc62acef2dcd84e26345f86a757e1c1b6af6211c2e33e0ac656501d76e980a90fdfa970843eb7c0eb3";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"tikzpeople" = {
+  stripPrefix = 0;
+  sha512.run = "9a7cdc232e91fc0d6e5fcc67ea8c39dd2a4b482ccb6ccfd82332151117ef5121ef49bebcd2e0266492c88b57c146eaa578d2136a23f8781f3fc5f5d07f527db7";
+  sha512.doc = "f561978adbe443659ec0890a8a38e9c9506f311d49d11fe952eacf579db0619946f86c0c6929a215fe7a98f5f02a782d1bc528359f195e09e1f388460dc0d55c";
+  hasRunfiles = true;
+  version = "0.4";
+};
+"tikzpfeile" = {
+  stripPrefix = 0;
+  sha512.run = "9da38e2e02c651e2f89a0e9ea917fc5147626026acc7302b7e32aa2cbee072f91311fbab73e44852a2c237290de76e560f2b45e88639936b542e6986d90a9b4d";
+  sha512.doc = "a66c6ca303ab6afcea5d94b02936335d28077697d81632199de2678528100c3b5a754aa281fa83d93819a53eb2fc945ae899e254b6d6ccd926f8fbbd86d5ac2e";
+  sha512.source = "0a2e2d5ec964bbe5e6230c609d1997fac779f1edb087fdf130b93ce3ae76fbc0b90f5af9076de3f969a8d69e4054571f63dea947113f7447b7fb1f526849929f";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"tikzposter" = {
+  stripPrefix = 0;
+  sha512.run = "75fd7b71632c663329843a48bed32b2fd04cbac02d24271ff1a49bf03e2905ab8f94b5876ee68876bc6017455cc3272750e85eea6061dea57f47fe96ec9e1045";
+  sha512.doc = "1bfdf7bc2aa38e876378a1dfac751a57ac93dcb0fc5abeff700107c8ef11423751dc69bd7502c9b2ad2641f7f760eb697a248833b6914111dcd86d7f8a32e9bd";
+  sha512.source = "3d78ed0799114da415a112f6cfe73b84a242389d475e223db53a4c9b25d9d5c4ad3285910a3b24eb9fece2195dbbae72e18d57cc83f057fad6062bd5fd5325cb";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"tikzscale" = {
+  stripPrefix = 0;
+  sha512.run = "73aa62d84417deec8085c3f46b1ababb756e32ae55c4af97def15816606df2b3df4a7735ab434d489d24dabf26806428d945ff3fced3c5eb7c19b36996f2f58b";
+  sha512.doc = "d2ac9080a08d7d7e37ea2d1f801c4091cddf9540eb7c2cc2c0753ab0c07c2f0e7392742bc2e93274775c890184c126aa490c78fedf8827a6c787b951abcb6bf5";
+  sha512.source = "e073c55b8101eca9f401dc58046cbae260cd9513945e9c7a2fadd0ef86886607d1f92b83a11258be94e0bca08dea87ee878af031c6b42e343b716a1c6af42a2b";
+  hasRunfiles = true;
+  version = "0.2.6";
+};
+"tikzsymbols" = {
+  stripPrefix = 0;
+  sha512.run = "6061fad290f71257b2496faabc1a11721518274964a18dc1d31d1e530de029c7418668444f868e6b660eea5d85bc440dbb7796fbf6cf181ec190ff34019b5aae";
+  sha512.doc = "b688b3d4e2ec3352000b7bd8842736bbf52b10b5215725fba7970e048e4e823c0d522d753adf8c65be3ab6d1c091ab9b01b68922ba2796c012c4d948e3958f77";
+  sha512.source = "c7a3d6290a1eb7da4fff7f7f9fb2ef4a8c128c742023da966444be2b662bd98a20e7d3d82ac77637caa0067c2b5ec5ddd84ca224bf793e5b65eb637e8ebbc814";
+  hasRunfiles = true;
+  version = "4.10c";
+};
+"timbreicmc" = {
+  stripPrefix = 0;
+  sha512.run = "01e0e06769810e07389006e9443a836de76e95fea6133e7aab1f47cc554c3912a8aeb43bbf33d06cf9f3a8550a9eb9ec23830ab96ebbb84629ec957d7050e9a9";
+  sha512.doc = "ebe4cf57814e6699127a30031c801efe583505098c707a97bece8dff93ff0cd4939cf047802ed38e645c339592e1a062c512dcb5d027192122e4c98ce41d1eac";
+  sha512.source = "eae8ea0badfc036dd6c5908c95bda4e829bebc90e4d50cbf766937701a6f631ec9f39269d09889c5c2bf15a3dd24ddd8062829e5bf735c291e4338085749607f";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"times" = {
+  stripPrefix = 0;
+  sha512.run = "252c933fb17ce2533f6e0f2b13a478d62223a596ee257937558c61e224c30753c157c92ed9d5ce3ced5ade0f5eb00ec15368fc75c10a182011312d6a0668911d";
+  hasRunfiles = true;
+};
+"timetable" = {
+  stripPrefix = 0;
+  sha512.run = "caee17cfe1a4bae7bae4479066e2f869e6ccee34d28a8952bed7a1409bd9ecb27adfd005f0e824d8ddacbd0e65762da79f9ea5b04d0332d643749ef36b908946";
+  hasRunfiles = true;
+};
+"timing-diagrams" = {
+  stripPrefix = 0;
+  sha512.run = "0c07a24aea43b0092610cda5878a7e2be95777f199c9983e0aad42d83c1a6bd96dd4ca4caddef6b61165d62e924033eb01524fc925fdc8a4fd4baf44f568eec6";
+  sha512.doc = "1882008e990cd6cfea47b35bd70a50f22972dab0470ada417edf1aa236d2619d57bd3b1d4a149ecc08c1a196c36c9dbf97328f58ea4aa25acb0a6addfcfe8651";
+  hasRunfiles = true;
+};
+"tinos" = {
+  stripPrefix = 0;
+  sha512.run = "e8e8648d656cee747cae8eb5665fb8e1d327c9578b79a65b6d50cc1bbb428ed8ea81bd2332fb91af797383264d2fd9af9354be5a02a4721bbb7350051bcb2783";
+  sha512.doc = "5c826e5a78001821396c0dce64c6becf9469c5b648d716ddbe899460242b67790f75d1a8a27973f450f1d7d7dba6ea672af5bca488209614fa72a7ff1a7aefb0";
+  hasRunfiles = true;
+};
+"tipa" = {
+  stripPrefix = 0;
+  sha512.run = "7919b8f5a416cab24c02675ee0a24c60f64e9dfb3bbacb416eb74e29badf6b4dfd8a0528cc8b38dab6395b8c74ec5c808ad84d3a8d4ae5e8212691bed9066129";
+  sha512.doc = "213c4eb24943e655c03087dbc5a51eb3cfeff09ece1d31fd11f1734ab3b219db94cc8b5f4735f3d6381b79a5d6ee2cfe727acd17f823b21163e910c09f48e413";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"tipa-de" = {
+  stripPrefix = 0;
+  sha512.run = "45ce2504e63e517e76ebbd7b6bfc7b6a4b3a10d72747714c731b6af0b1a9de4d025bce996594449ea61e983097748389a6d878936078fb676ddd4d6f1f267425";
+  sha512.doc = "c69333d9a7d335fb217dacb00610b9f0e5eaaf78e535d69998fc600fe53f0ba61c7e3cc1e82d75f52b435cd6945044560b2d275476e96d84d611ab4978c02e3f";
+  version = "1.3";
+};
+"tipfr" = {
+  stripPrefix = 0;
+  sha512.run = "c8a8efbca7e1785dd81fd4695ed7e0c5dbe713d0a5632078bdba2f7df8e9358bc246d8f9d972ad3035106a7ef687f9229ed31bb630009eaec3b63170cf8933bb";
+  sha512.doc = "bb739994051c5738ec0cacf1111d104b225593cbac1ee829057dce42017990483630cc062131ccd7d766d7400a252b1ff84744f91b77d0ca5a1f9ee195a28d5f";
+  hasRunfiles = true;
+  version = "1.5";
+};
+"titlecaps" = {
+  stripPrefix = 0;
+  sha512.run = "683240554b79bbf4f7e4f31653c5c633e93c74d71dd26232587de4d0d8ea012d350d0d43d508e9e9d8be4369d4ea9df996283c818583e573d4bc5fc379e4da4c";
+  sha512.doc = "7025b5f9d53b65e228520a5e79fcbbf928ddc2f0fe071016a8c3726dca3e9b428b80749bce53438eb7a882a4660c2a10a4ee85e24ae5a26522b78d6a1dde4584";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"titlefoot" = {
+  stripPrefix = 0;
+  sha512.run = "aee68d15213c20d9ba0ef6e3a95f111804e4438d2c80a6cd83ae67725c3174db7f38b0d4280b26f7119e9e1c6477a0aa04d3ee5877e15b05ff2742d94a720c5b";
+  hasRunfiles = true;
+};
+"titlepages" = {
+  stripPrefix = 0;
+  sha512.run = "affb8e221dd2ba1ad6e18d08dcbf3176bf65ae3006a732a7d2bf954fbfe90215175cd3de0dbb7546906b7d65eecb9aff06fabce86c46e88e5027851e11e52260";
+  sha512.doc = "703f376c6bb2480f7a326f31ec277716073ddf67834930401c17627dba41c5321a0115e01ec73160917c68fb7ba4e0042e8ac40d968eef89f52b5dd27c2e0495";
+};
+"titlepic" = {
+  stripPrefix = 0;
+  sha512.run = "753ff5c116f102ebd9fe59ea0ad1e80a7fd102f55588f9454fb3ef43fd5478add2d39984638e112dfcc5421f5f79b4c34c8c15d47845273744b6960946ad1805";
+  sha512.doc = "6faaeeb6c7212e35c22321e279c08ac8a985ebb8ec66054b49456ee5a9491b88e48edcb20920d61a052b2df9617ddee7e40bb0e868fe082ce5889e63c193b641";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"titleref" = {
+  stripPrefix = 0;
+  sha512.run = "73905fbe96bc095f602339e0c943048d775bf2a89ef9de3b7149dae7b76aef04e5c77803555450d931f3a4dfef16f5e72597a4d06052d4a852623516edd978f5";
+  sha512.doc = "70db133fb8a5fa38a6f0f82912d19afe84e0f68820fe62b3835a6d237582a32fe6c2ba5ad05e46f39540d52d0aafa5a88325e1050e6102164a5753fd9c68d6ad";
+  hasRunfiles = true;
+  version = "3.1";
+};
+"titlesec" = {
+  stripPrefix = 0;
+  sha512.run = "bd1538a4596c55a6e0a542df5587f4466795a59ac55472340bcfc400670b79a04f0b141ad5705c826789ce0094fa4b106b5917f4232167a66047d8e6edd4998c";
+  sha512.doc = "34623133da534fa15d491f3ecfeb6ee6736a580c12577d7ef313efb341c97ffe1cfac49f4c94b90f8f519847bb7b0d37b003ee485c240d1dfab3b68426563dcc";
+  hasRunfiles = true;
+  version = "2.13";
+};
+"titling" = {
+  stripPrefix = 0;
+  sha512.run = "2a321a17b1ff74f57e7bf3f9d72d1b66a0623ed286c8aa75df6d55f1e62b214954ff38456f27f172789bc4cb500688656ab156609933faef67e62954d05d0ce2";
+  sha512.doc = "e69af16331da73c2a61b063ca4dc4c5f70f7958c366b06e96745a2bc92397f89210ebfe598f445ff33ce7705d0f0b56fc3a46f93bcc89145d50b92d56820f61b";
+  sha512.source = "1b32988678f184fb335c70ee59d47cc3e20a7ee0f1606495d77880aa915677ed4a885557a406cfc5f5a67878cdd0675ecad503a6457056d901b96124f7eb171a";
+  hasRunfiles = true;
+  version = "2.1d";
+};
+"tkz-base" = {
+  stripPrefix = 0;
+  sha512.run = "3d187ef9abac64179de9d1c5992fb0b493eddd54e14b83b57adba977fea69598480f56546e685d212093f21d3ce7c9dcc0cef41f426975c2d51fd0188c53ad7b";
+  sha512.doc = "8ae2af7426f66ac769e13399a6bbcb86ed785dc45ad4b89c325fb1a3f5b512b24cb574162f6b1324b3b5d877e4acb0c00d07858a7ee46c8ea2b9bf64e4c5a087";
+  hasRunfiles = true;
+  version = "1.16d";
+};
+"tkz-berge" = {
+  stripPrefix = 0;
+  sha512.run = "f56372592ff8a7ddc3f9d778631c4ef5e06cd6e0995b35d2c16d24b046540765a41df701d830720c95cde77cc1757af99a3f51471d4b83d5311fd5695865f299";
+  sha512.doc = "b5514c49defbcc5d934266df428ad96a158803edcfd9ba23fb32080cc383ffcc32ea51a26094684094740df3a28e3137e0a26dec8792bbd60b454269312de596";
+  hasRunfiles = true;
+  version = "1.00c";
+};
+"tkz-doc" = {
+  stripPrefix = 0;
+  sha512.run = "8ca4da6f1b627c7e6604e8eb55fec2a20198e23240cdb043f83d7f8b28ff1687f71e63fb6a500018d7b5a17add28531c45abe79398880bfbcf5395f5baf7639c";
+  sha512.doc = "e35ae8c425fb20a4f54ab5a81b0b013d107c86a37113b92b4db9fd90de338ec746899e2e554a5c568def0439ff484520bbb7e3bdffdea0728c0bc38d0d574c18";
+  hasRunfiles = true;
+  version = "1.1d";
+};
+"tkz-euclide" = {
+  stripPrefix = 0;
+  sha512.run = "59ec42eeb1bbdafd1b4c8cc386260d6db02d799e21a4d4a4e43e44edd3adce0b6ee67902b8e9c713738b3371cad22cf69f90f61e0ea55d9815f689afc2c5cac8";
+  sha512.doc = "44dd15fa046d3efb34de0050589ed1358e3b8db121aa64ac07a40ee83364fc8df5af30126ba58bd9fda22bb4dfde7b55170d5949b8cbee41f69de1a7a4e7d515";
+  hasRunfiles = true;
+  version = "1.16c";
+};
+"tkz-fct" = {
+  stripPrefix = 0;
+  sha512.run = "baacde6c1153323e051b859477f888c66e707472db9e8377df2a3cca31de863a2c9357f10a199f1c3e494f85f412709be91fb8f4814b3ffe2c32dec5ea5d2c7f";
+  sha512.doc = "6bd18423f7169cf75247f77ad28b5b8a4ae5408dc417c4fb08985a559f2309f6dd34253a15cdd3bbb68f3f64c2d6b9bfadb3fc346c7e5a413673e83529b730ab";
+  hasRunfiles = true;
+  version = "1.16c";
+};
+"tkz-graph" = {
+  stripPrefix = 0;
+  sha512.run = "9a933a9925dfe8782abaa6c983881a10d20542be294f15904d1645f5481309ed00d42d3b4eb38498dd4eab84774b685455235f89462de0af443b617bd4566927";
+  sha512.doc = "ec22ca39b559b4d6f6192272470cfc748c466b5efe9f5ca00fdcf263cc172dcab5e34b059c328097479e1c03e038e71e4658fc22518cda545f9febaba2f43310";
+  hasRunfiles = true;
+  version = "1.00_d";
+};
+"tkz-kiviat" = {
+  stripPrefix = 0;
+  sha512.run = "d1b6b4c1ecfe29397c2a63c808cc24119688782326bff3615c3e84dc22ae1bd6bdffc57761af31ef21bf3f3378806dfd087fdd24d5dbac49ec890df54ea3bcf8";
+  sha512.doc = "5ab29135b2903988727129f37496ae27a5ead3800edbe47728d7d5171d210ef7e11bf47d3a4fdd27c0c03f6e09aad8b9697acadbb959f549f5c290e66c1cab45";
+  hasRunfiles = true;
+  version = "0.1b";
+};
+"tkz-linknodes" = {
+  stripPrefix = 0;
+  sha512.run = "b41f40a2c27b9384c3edef8217c1224293b8a2901a0f3752c3267d911a7788e27138464b2f11634f67bca00dbfe2ed71a87fb9b3dd4dbc5f62765a022c51bcbe";
+  sha512.doc = "d4fc88cf1dcc49b6bf2292c6892c5094bc4eb6f17535dd1ac51783b9abb7312279cadc5e06e624720be756f5a0907551f4411f246cbeb6dcbb1365b891e70840";
+  hasRunfiles = true;
+  version = "1.1d";
+};
+"tkz-orm" = {
+  stripPrefix = 0;
+  sha512.run = "a90dda0186a3e3309eaabe444a7404fe2cafa1caa737f7d5ec9779eafd76f0795890f36bc4f0c5302dcff30231ccc3a8306fe318f10695e8caf00cbf61fc6e04";
+  sha512.doc = "a1686b02d79cf0af41f99faa2ac06e2a3d864b078231f4c9c165261557df0fe8f26db8159dce2a90be6206750d6fc8f3013421cb0171c1ff1f11624e634f910d";
+  hasRunfiles = true;
+  version = "0.1.4";
+};
+"tkz-tab" = {
+  stripPrefix = 0;
+  sha512.run = "c4290e2633a44122789abb3dd054cf61a1bdcece6274a43d9ce6ae403b73f0c0a32b4c1e6470278c46468d53149540f3884c6b2186b51008b0beeecc8a84b1c9";
+  sha512.doc = "08d79e8c0aeef5323112182ae60c25a8ea6547aa5ec75f37b8c5e6e15a894d1a70efbd99421140156de844d35483803c21bba0ea0ee88ca36aea55e303095d14";
+  hasRunfiles = true;
+  version = "1.4e";
+};
+"tlc-article" = {
+  stripPrefix = 0;
+  sha512.run = "80b2c0d5418e8061d07d502399895a8334003bf5ed574de8f4af0c422ff0d3a660a511b5064b48e65064a91ea0cd057c134f9651e001eb7d5fa9d981366374db";
+  sha512.doc = "96535abc8bf54c62e22d4e47178c1cbbb1ca96bfca16df4cab37b182d50e872c57a2e6ebe65727121fd2682776905c962551639d9435e86ab3fbb5d3e05fb72f";
+  hasRunfiles = true;
+  version = "1.0.17";
+};
+"tlc2" = {
+  stripPrefix = 0;
+  sha512.run = "3ac7d28285b15d7e97839619a449c870b3f96e1c557470ba4bf680016c9834af9f09715e09525b00aa2b951bbe20e5d3b1d0a5e5f957de99c13fdb39f4267e3d";
+  sha512.doc = "79eead14f268eab643f676c36b20ba89828928fb3b418956277304ac6cf7145d53b4f97c30605690cddce8660361614b58ac65e8454b7740dde17ff82a053818";
+};
+"tlcockpit" = {
+  sha512.run = "ae7d33579b16748a75ea5c94c328bebf01074428db854e823f38fba8632a70f8a00f91d06df04e4d074e3414f5adf706b1945e0ec565f588177a2b1608a47a24";
+  sha512.doc = "ea727e465bd123458dd490fd2e0c66dbea47720eee9f3a3cdf3faca0b09e4696f8cd0c334645f306a901433de94f99a7b43c52691888702f36d369d1548aa464";
+  sha512.source = "2c965f95c45dcf0cdde077940e371c995ec1f29f01cc479fd0b5cfe3121641a1fd4e35e2ed01705461213b8669ac7b9d3ef3f6895cd1c878c1309bd8f1ec256d";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"tlshell" = {
+  sha512.run = "6a04842543dabc9027ac7865be7874f3b7fed25b0cb9ca2827f36d3559b92ca250389a329787366f24c44c7917dc87250468222eb2094ce7dd37d844debcc7e1";
+  sha512.doc = "947b95c7f03e7b8f9b63c8eb76a6690a720edf6fa23164b5024b2aaa6ecbbf7e2d88b7afa2e56993808a66d5b18b8313f742ef2faa82c694a8f6b950484fd6f6";
+  hasRunfiles = true;
+};
+"tocbibind" = {
+  stripPrefix = 0;
+  sha512.run = "f373d6c98730e60d06790d1a219df26e60bbddd2aaffc3aefc5877ae6b2c10c1a08e21dfef82cc591e1c6f7c014e0843ae30be948b7eb55321dc94cfb7b16aa9";
+  sha512.doc = "1521eaf8a15038a2a0b6136e444ac38d6033071b305f6de6db6a5f8ae34625a5b8bf654d7a97b5ebdfcf4efeae58c41a7c9c17005552314928e315295766c441";
+  sha512.source = "fa8375bce4af25fec4743d0c0002f90dbad7240f7959ad843365b72502c8c2d2cc9047b21e01d68a6fc525fca132b3a4842481f808999cac40221af32ea7e487";
+  hasRunfiles = true;
+  version = "1.5k";
+};
+"tocdata" = {
+  stripPrefix = 0;
+  sha512.run = "81c64d55b33ac9c22abcbdd3ab683248c3ea12e21866de0f2d36c44434729cc8a32526e0f28bc0e945edfca5eca74dec78acf9c8e8439d1e7a3d28cc13c5a260";
+  sha512.doc = "4616b125dbeb9458811ec7ecdf13a1f3750c5bad9670bb3f556b62ec084f1af17cc2b91a8e821fcda48b660ef0a14911a86be367297bbcc13d1c5c8cfb4a09da";
+  sha512.source = "d1d6adea1bee82b6b66d098edae5e29c714797fa52c0c7017919c7765111fc185d30fa3d3495e81611642ad51d9bc4eea2706ccb0bee2ce6fb7ebbb8a71b087b";
+  hasRunfiles = true;
+  version = "2.03";
+};
+"tocloft" = {
+  stripPrefix = 0;
+  sha512.run = "4630cda5785a75929f6b060a6d9a51168eb8a00476ce2ac4f070de8424df00cca1f7f2fb0d708ccb22b3516f0617977dffdb012b5d360c694c1a98f9495042f3";
+  sha512.doc = "4c85d817ed65a7dc96ed5298793836725637f934aaab95ee11bbc6d3c9a3e0b60af8e792bb99fb172c40c83d59f3b06752b1db1fe1c2ee2757c3c3733c6b7f94";
+  sha512.source = "6328bc6635a6e25d3c4408c255252daa8f60c64bf9add32e17b8c50813c8b1149414ace626c9ac1691f90a3e6f4b5d4c29723b5f92960cee884b56365baaa7c2";
+  hasRunfiles = true;
+  version = "2.3i";
+};
+"tocvsec2" = {
+  stripPrefix = 0;
+  sha512.run = "685ff581b0cba155a763ba951b4f5b1e12a44741dc5245967cc2d2effad12127828e4d2f3adabb9fe3d126ffa1f76d43dc196b89faa39745ce85a7f96fb44017";
+  sha512.doc = "9247adf45a6a8f18e03d7b93ea8de8decdd9f1ba15eed7ee28c356679a6f62bd8607b9c519448bae2234cec15b76a5155ad7efe99ceb9382022988a29c2ee85c";
+  sha512.source = "c6af924f3d8e52028c7bfe7e27bab1420dec1fe6f3e948b09a131c65a37ec8e9baa594d725a4eca7b3dd10ed19ceb5f54f1ccae49706e9816c7e4e1d9f1212c0";
+  hasRunfiles = true;
+  version = "1.3a";
+};
+"todo" = {
+  stripPrefix = 0;
+  sha512.run = "e3cd06aa47c36344602a0dccfb48e43c0639cadcb91aa9e787d552c6d3ecca95da3b0f3af8d0f479caad41f657bbcc30016dfd3f80f42285fe8ab02e0a904601";
+  sha512.doc = "c747b4cdcbe8533338a9120b06120b0daa68940ace4cf44d87882d5b5a5a42e2c062c667d2e3fbf8979e1385cd55dfd8747f4fcb044a4112f4b2a79588d0463e";
+  sha512.source = "7f70973e13cba6c532d45af7f5c21264adfb75542a7a68e9bf23508955a553efee723edfe098c4a87015c463c99d4063a9bce6888e7bc9018999ab4721a524ce";
+  hasRunfiles = true;
+  version = "2.142";
+};
+"todonotes" = {
+  stripPrefix = 0;
+  sha512.run = "708012c523b8609da3f394cf2def8b07c642fd6d0eeddbcea3e6c6825b7a8b865446b2599e7f1d4d06d00ecd1097bb713fc495d6bc25e6165e265901056d71d0";
+  sha512.doc = "e8cda7e59c10af8c1b93bcd800f94b36ab3202a996edc417634676a36d0b37668f7fec6aeef54166b603d7652b2f129e141e0cdfd974712e886d6fb70212ca08";
+  sha512.source = "3b1c9037e8b96d3848ce4aad8a256327be081fd215379d14ad45e0eb633abb6406062d218fac90200c5bb9adfa964045ea5ff2b6f1307a485249a6635ec8587f";
+  hasRunfiles = true;
+  version = "1.1.2";
+};
+"tokcycle" = {
+  stripPrefix = 0;
+  sha512.run = "005911920c9452d6bd264f8ce807c9d5ac4a5ae5472d906a994e0bc5f7a39607cf9133d83b7ffe3216b30ecf6398cc6f416ecce8136a73f26617b8013a27e8ee";
+  sha512.doc = "31b18e642fe8e7653ca1f1c8505d6e2c387d51b1d1866f8179f30255b5814584117b07a58820e0f3eb7bf9d678d71d758505546097df2127cc67653b6a8a8b72";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"tokenizer" = {
+  stripPrefix = 0;
+  sha512.run = "5174ea1b9c6c02fb8245db5315ccc7b65239d1343f719ee23428bd530dfd70edf26822bde25d672603d268a63360ba31b4a9fdcddf426b82eef440cd7f449d8e";
+  sha512.doc = "4e978a368cd7e97a1300addb739b457cbf4810ecb2d4e1161d931373d858573d8fe1688629cd7d23a44a4d5403e5d8d9dc92869be9809bddc9110c55879c940e";
+  hasRunfiles = true;
+  version = "1.1.0";
+};
+"toolbox" = {
+  stripPrefix = 0;
+  sha512.run = "af5320de678474075998f9497be0b766e826b0105b344939a66c5c1377e7c345623e2de18b73cb43f93c8edc241fca7a99fff1ca4b6bd3dfba52bf2ff476f18f";
+  sha512.doc = "ee800bb98c9577b12bf20a0b19ce27d9c6900f66e0920c922626599986b887e34513cca8474456aab7ae59aa5d5fae3c7c323ca4cc21372979ab3d545921ed34";
+  sha512.source = "201c3153ceb48cc4f7a3b24babd95e78939f03a7d2f3992a73113d904c90e5c957135a0efab98cb2ed01f742c39cf84c4a12efb8bf9f9bb9a082d56f62c98255";
+  hasRunfiles = true;
+  version = "5.1";
+};
+"tools" = {
+  stripPrefix = 0;
+  sha512.run = "fdb0242e5168d0291c9d135961447385f7b70a2ac367b9f5e503ec2d945ac60ad86f66020da1bea88a86465b148e73451f4e19d4ab478144b3ed1323c6b97a14";
+  sha512.doc = "b4c3f4e869195beff26ed22189fcff0c4633cd8de604f59fcc6090edc16e135e26844997559c19dfdf28f35360366466f556a3122ec02ab2d9dce8a29adc05ae";
+  sha512.source = "f8186ea654a5e0b9521d3969a062d8df6a414294babf4d4891116077fa177847428f2d133a9aa7a85e2d1b2d1dfc6018b79035637c0541a60a54c592024cb740";
+  hasRunfiles = true;
+};
+"topfloat" = {
+  stripPrefix = 0;
+  sha512.run = "a4e4031292203a04a1df1dc5e6bd4f6b89c8806599d995707fa0dfc238bcb3dd1ecf185665db33a406302567607da5640f385f12cffb46f482993850b78155a0";
+  sha512.doc = "6c37c3b9ad32a121eb03f23049e11fe52b7cf6d49353e94a18eb39aaed3c049bee86ef6c6984440c9700546f20023f7a71975591c1f3750d31e176e8ba4f4c47";
+  hasRunfiles = true;
+};
+"topiclongtable" = {
+  stripPrefix = 0;
+  sha512.run = "ed6bed14ed748cc3957746f65319c827f94745c6c99c896048362944f4ea96e54cdbc732d2f9324f472872a4111aa18c44ad17f035c5cc5beafcf1ca900b2ef8";
+  sha512.doc = "f227c659e27d138d848b78fa43fe26792affa4181984de42eb17bf636d9777185fc0838fc617f4aac8142f3a611e65f01547e48a2a18e2ddad1d3363cdd0034c";
+  hasRunfiles = true;
+  version = "1.3.1";
+};
+"topletter" = {
+  stripPrefix = 0;
+  sha512.run = "1c583621d738ff203ef755c4ab6d4ad520fe25204c882b3b5b1dc719590cc4ae117502008f0b2ef67486f33127e6eab92a2177aed42a8e011c9309632ce1fda1";
+  sha512.doc = "2fcaee9c15adec307e5cbbc4e71dadd2bfe2158f51d5bb842ea6faf1e10487f5881d171e29a48ac7c6c6ce52bae7bffee91772dd046311959167b11ddac8328c";
+  sha512.source = "b22e020b8fc477da1316c9f36818d9508f45bd3259e03e2cb096aef984cf655b1171069135001301f9be631c7bfb99e63ed7dc95af968be0700c8027b6484f45";
+  hasRunfiles = true;
+  version = "0.3.0";
+};
+"toptesi" = {
+  stripPrefix = 0;
+  sha512.run = "13176c395de6e5e6e52e21cc298ed5aabf0a68d42d90119bb1bbf9b85f99c26faa3e78f64f99ab9717d506950d22338b9df2094db0f503f50871e09d2b45a085";
+  sha512.doc = "ca06bdd003084fa8bc11680f5d13ae6f0b333e81ac1ea57ef37959cb5c54933621c00f86ab2fe990b327198f28218eb60b1595fa50511c48625e35a9fa5c92e5";
+  sha512.source = "51445c7c0c8213f3df42abe6b60f740ccf30952e22e1a9f1f0e852f98c56ef1f34060fd8ca3a64bb8cdd512d10a3da8912a1db00b3d0b0c5fe78d30e42258d81";
+  hasRunfiles = true;
+  version = "6.3.06";
+};
+"totcount" = {
+  stripPrefix = 0;
+  sha512.run = "03ece717c7db3820cf41192e3bad2711e159fcb8a5a5a185e1c55335364917a515d9dd691cf1890421a8c62c9e55bdc49cb13718f7d98d9df34a2470cfff0daf";
+  sha512.doc = "46ef8cd2317108d0896b32ba9104c69fb34a6d13d1e123d6b8f1648bfdfffa6bb21f17207433dd763451b1f6c104ae3532e7aac43ef2ba73281842f0a3bcd05e";
+  sha512.source = "1820b0b44434650c072a67a4c6144beb7a34129415a4ae298b9c97efd7e81d3396ddb6e4a03081a19962001c8c01a4cdda563c20ba19bda1411e4832d5e7fd14";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"totpages" = {
+  stripPrefix = 0;
+  sha512.run = "8dbfcf7728690d6c2a20f661daf62e80c00d3f08fd00aee7a07cbddd31f6adf8f38e32623b2963748367ea08dd3c95919ab576b22d70214a2f5f4f07c40374f1";
+  sha512.doc = "58cb9d30644402a68462e0b00b6175ec4a002135eae0bb16ad2cb5b919d1dd6b93583074a0723e1c55946e7d94dab506b8527a67d7d7b39be20608207bae5626";
+  sha512.source = "2ac7e8e8f7b79721fdbc6cfcf9d5d81d80b64f60a535435ec13335e1b6059c01001003ab87d9ab8fff4323575a0fbaf6e8a3569670eeb5411be495d9fd712a1a";
+  hasRunfiles = true;
+  version = "2.00";
+};
+"tpic2pdftex" = {
+  sha512.run = "3a0bfba17911731b52960646914da0050a6928b2b433c84140ccbe63835d816f018cea4b16a8513b447c7490fcfd610cbf7a48c8cb0d5dc67ee925c238361b14";
+  sha512.doc = "b2734d86215332e7898e611ee12880c559b095468881c9ec1f15696a182afaa2f056c46ebdcf4cd69427e9716ed70b1cf50f72384d9f698e644e8b2fe9d3a1a6";
+};
+"tpslifonts" = {
+  stripPrefix = 0;
+  sha512.run = "0394101636f394f04c38b6677f921136f74e3c8abccff199d4c972ede085c3915e2fe9bbc5b239044dd8f24b405cfc34b5c736a7cd03b749b6aeaf7feb15f5e4";
+  sha512.doc = "e5be9024a02669212044844ad0e99b72faae15c62fb0c9065c8a5e3beb852968cf4cd4744d01890534df5a540bd1066749d999e919afd7d791b4e9ca7dd3c26c";
+  sha512.source = "d55ebdf58c24f9d68f7a69fab79b8486c46d4d23714d9e1d2365320457ca60275449492482d5d28c4c8a2c884074bbe74874f509c60d66f49b6deb2a06925c9d";
+  hasRunfiles = true;
+  version = "0.6";
+};
+"tqft" = {
+  stripPrefix = 0;
+  sha512.run = "0bd44773d17cdaac4e3490dbca1fe038bb18e50d057d6adee53b32d6127ec844e3ae9b8f0f671969c8a00e0df01eca9fd93f27e85fc1ebcf03966e6c82b53f8f";
+  sha512.doc = "0b6c66aefec59955214299a99eaf4949900fb294e7f1eb904efdfc0de3aa85c5fa38961073ba3f7a3c60f26688c28e6f1bb5ea2c32751062fb3231edc4607f0f";
+  sha512.source = "afea6aaf0250f9c9307479d587e844b3f391e387a4d2b6bf83b1eb2e63459d132cf0da38160bbcbeba0eaf1fc8401c9c21dec9dbc8a5e54aebeb1bd25a357445";
+  hasRunfiles = true;
+  version = "2.1";
+};
+"tracklang" = {
+  stripPrefix = 0;
+  sha512.run = "f5865a057b92eaee1f00e30d6a9246e85e3b684169472cbc78cfd3b0730b0ca9c7720f8d8516bd5bee07962e76dd59bc407bcef8b655f03addcf7e60808dfba2";
+  sha512.doc = "4199a53e4b8c56bcc17329fd82ea2f11b37e593c5b99aa3200b58748fdd7d575f9800b251a53ac535a8384ad74a33e29ac857f468e668784982ae61e6c6694fe";
+  sha512.source = "28efc751163250433d269817c2961d7364b872a562a5e3a2baefee76d339012c29620d01731ffa2c770b90a22b2e6c8ca29d2044a2d7c6771b7f857ec7f0e773";
+  hasRunfiles = true;
+  version = "1.3.8";
+};
+"trajan" = {
+  stripPrefix = 0;
+  sha512.run = "66fe869b94f489a3240078fa28da32fab71767d93befefca62fda3a39ae53ab975b13b7ddf84e490658e915c100f16225ea0ed8e7787b099bf4cb067a9fd4e09";
+  sha512.doc = "c6b6137d1952660b99bf077eae0ddc0f40b4ea9ff6308e4f461fd0e34c7b4b35b4ad79f3e42e4d0077c9d2947db642d0add032f2413d580748ba786a8abbf029";
+  sha512.source = "36b85f870cd9b006f89df594193877a2188635be840636ae9300f511e5ab2a1ea60eac7f927ccb3e9832ab01972bf585460b47cf7ef30f36a6049ab0ce0fd95b";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"tram" = {
+  stripPrefix = 0;
+  sha512.run = "4592a288c08f5bf6b41fdffee8129e08fec7397edb2b351617fe79571d2905be61cb776f87a5b152c4b62acefdf21ee2f0b293f210ce52f449d3b9e41833b2d5";
+  sha512.doc = "bfc46f516c2f81530ed7e648ef6774443502b580cf580b5fd5ea9f7be0311b33fb14156aca3f36bb4d74cc165dd33d0b8ef3ebbab5624f38239c281c7d7bda09";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"translation-array-fr" = {
+  stripPrefix = 0;
+  sha512.run = "d32d6b397916bf631d65171f4f7de4bdb6049eec5414d1a9adbbe88d147ce2e4930a4f17b70c5c12b7ef9c3300d9eb099d63fb14ccd5478c6bfcd0557074b343";
+  sha512.doc = "7d9b2e43f4fde3e6a3b7436a55b2095fbc4ffa31223019c1cbfdf3d623c48be406858cdb96c8693e10fd0023050ddfbb09b463a9a3804879945ac0d6aa616be4";
+};
+"translation-arsclassica-de" = {
+  stripPrefix = 0;
+  sha512.run = "76ced8c2c93e35d6bee10f34a7de5709b8027f9d498f8fcd21ba776850c65e1e20eaf20528414b7d9da1891a2db7132b6e3b703c4f8d91f4ff0c69eb9159c996";
+  sha512.doc = "58773adb7493e6ef31d8fd3854a51cd37921dd331f56f1d9eab5283c121fa8c3316ffc41242356a87af04bb6da68761ea15829e5e8555d2e6cdbb68833c8d313";
+};
+"translation-biblatex-de" = {
+  stripPrefix = 0;
+  sha512.run = "3968a37e0add02d6e31ad49b3a263ec35651c960d7132d1ecfa418888a51444430e8d6ffe4a92fd35ab3904ce6a7aa686085b412117cb282b7e2867a701625c0";
+  sha512.doc = "8f945fd3a4a63ef8e0e6e979bd530f1d13d11eca7490697d0c94dbd43ab7e6608e3801539ccaa47c48c81c52e27a14587f4a48887ceff524a6e188cd80b551a4";
+  version = "3.0";
+};
+"translation-chemsym-de" = {
+  stripPrefix = 0;
+  sha512.run = "e23821fc1bbdee758e534bb52c4e0f348d6be3396ca2d8e3c11c9425132fc9c28f2bf6c98cb1beee9b23716cc1a75704561d9d8f16d2f4e94851fc2f88e0895a";
+  sha512.doc = "efe9f711c42925fd035339c25284e09ca7a99c246bf70ef2c15c4f1149accf5bab09e396b94d6d59d4e8c303bfdb3f40570912713dcbd33e7ae360a6b21c36de";
+};
+"translation-dcolumn-fr" = {
+  stripPrefix = 0;
+  sha512.run = "8d2288707f13896dbb578b538b535efffc89991d56586f27a35b284b5be7c553df97a72ac163a625238e281bfe97bb79fa716855dc8e93f25f0a8af69674eb45";
+  sha512.doc = "95d1633884f7237bf2a7abf8a43127ac1954fb5d0e308d676a7f4c3255d709496a382f01a8af6c28f793bcd1863e98f8ed1441e7cc288d3b8de3176631cdca1d";
+};
+"translation-ecv-de" = {
+  stripPrefix = 0;
+  sha512.run = "33998fcadaf7b42874968348ef4e3232652ea401410eea6a8011db146a4989afb102a2bba247df53b875bc02b1ea8f21ec5c68783ae43f36a3f175e77dde6453";
+  sha512.doc = "a86784aaeaa786251f35ddf273050e9c981a68d060ba1a2f186379e04f89edc696090b44b402996c4f2422d1cbfd7fd68136c29fc7c74a2fd32d6d230eb2e489";
+};
+"translation-enumitem-de" = {
+  stripPrefix = 0;
+  sha512.run = "7018a95d7b68b6b736472d6f43d356d25d2a73df4a5dbc080485f3b4e747d122889788b3d1a75ec4c479a84a4453128104f01b2e1788e9dc50d09bda0eb53cfe";
+  sha512.doc = "bee33ecf7a3045c382242f4b6ec9599f32fb254053a6417ceb514f3aad64b2bf51c50f660b562a2a3f0207f7bdc4676527627f432b1556362e3a9f5e9eda8694";
+};
+"translation-europecv-de" = {
+  stripPrefix = 0;
+  sha512.run = "6102a92b45fb7c19d2190bf4289e8b6b24ded67d0255ce2f483627bbdbee00c42c044be03bc10c9d0e23c2b911e781d21a7e6562e80988620a6da60562d98bf4";
+  sha512.doc = "f50e761fc7925f0cf404788ad2ad70586536e1676bc7a026be5a81136a1323f011a281160a344c455346553e90cb632133668c2483200a05ecf961e46e50bfb3";
+};
+"translation-filecontents-de" = {
+  stripPrefix = 0;
+  sha512.run = "78dd9ee41d9b06438e01ec12f716929c4cf0fbf6ff209f45fadce9fad4bac0d1b31732b3f66896bf7526dac7532504e0913dbb69c3c7e13830e81297b2761935";
+  sha512.doc = "17ed1c39c549b43c31c13dfd6ffbd968ecbdd3e64b00cbc66b0a8914726f4baa7faf98edf30c23ed81850cee98a732bbdd70ef667973163ccee0b35c160fdc64";
+};
+"translation-moreverb-de" = {
+  stripPrefix = 0;
+  sha512.run = "6b11a1b522c728722d4d5d5b38dd453ec017dc053d360180b943778923ca9a23b3ebb92516c1a6880e507f5e8b6d8d87878c92762637acc5ac93f42ad790446e";
+  sha512.doc = "955070d4e92e38712a5df837fd0df716d1a597780a4b06046d5aac5164efc0fec1121c51ea09c3ef1a090d51732f57308f4db386440118548e2167f3cafe16ce";
+};
+"translation-natbib-fr" = {
+  stripPrefix = 0;
+  sha512.run = "ff34cb7cece157b933117ba0e9aadb0e9caa759a406fabf7b0ebb89e5b03ee6db7aa493551816e9061ff91a460e46a58f1402b086d37c48863b4e093d19326a8";
+  sha512.doc = "971570414f9705cc4026a21a557b2f1dfe8fc010feca4f1ada946d11aa30169746c2017fb3882e65e68520539974eaf2361ebab7bcd292eed177fa7f6eb7337c";
+};
+"translation-tabbing-fr" = {
+  stripPrefix = 0;
+  sha512.run = "76f1c6318cd964b94d5a1d836b1a40fc58de49566cdc30b1ea60fc29fbcc8c6b01a477f4739a5fd9bb24998325dbf42817ad016fff27207e710bfc4b51b29985";
+  sha512.doc = "ae2f1aa60162512287f15c770a465c2e39abe1fa5d1223d96c524dc81bf065d62f307893d22dfc06fc50da8d63d817ed60c8f07fd4fede984b6febe9c8b7b710";
+};
+"translations" = {
+  stripPrefix = 0;
+  sha512.run = "24686eda26044a45f42b4d821528af58b58710c31ba3a03e33e38de018cc8fc5c5d3f31f000ae69a1ba269e371c245b0c501718d45c803c3dfc8ba0f64dc99c7";
+  sha512.doc = "683b3e6180801d96a457180649cca7ab79e6d965e1de95cab3bf2579ae4e8b34e30ba032e1fb2719a1a2826845d55d8a963ec813c8b2f6620e60bc986b3811a2";
+  hasRunfiles = true;
+  version = "1.7a";
+};
+"translator" = {
+  stripPrefix = 0;
+  sha512.run = "6105a57724bb880dd4b2166c052aa58abac70fe9cda70db2941195cbb0fd2fd874c8ca1f1b658bcd52f3f00ade88683d2f0f86baca8ed68702caa18c5e2d5e57";
+  sha512.doc = "64547f60b7d6b99ad04fec07d9047282444f5c407accf49955002e74bec2b00b34ec8ea639eeeb9036f90a27460f926c0e400b3f27cf1e31b8d9b343370759b6";
+  hasRunfiles = true;
+  version = "1.12a";
+};
+"tree-dvips" = {
+  stripPrefix = 0;
+  sha512.run = "6153417c5d2677a56adf031c5f2f27e4c2bf204c0acef1cc5cd49355370aa336814bad7d2be00e95d22bcf73b9b69105a255d15f29ed650511c0eccc3c9bda07";
+  sha512.doc = "8c507ec7719b92f2cf82527c7799b073ff2679cf820528b489eb7d8c83d28d098033760cf092bceb9ee7e28fec15eb580122c080b982dbb12e0e65176121e84c";
+  hasRunfiles = true;
+  version = ".91";
+};
+"treetex" = {
+  stripPrefix = 0;
+  sha512.run = "49202a38697bd9bd3bc6fcbf30d28047b8ddc4d737bfa68cfdb83197b484352997a33f55e195211eff1d548f95e2072f07ed18f1d7c6772a03c66a13051d1709";
+  sha512.doc = "fb9e09bc2f6e45b854824c9c757733c2c17b4d48edc955ea48bea3ab3fb5dd914eb6427c8ae4f74ebc62b4715bada84c8f3fca0ee7d01f8d3c2526339a844681";
+  hasRunfiles = true;
+};
+"trfsigns" = {
+  stripPrefix = 0;
+  sha512.run = "3607b6371c2dbbd93524f0811dbf14cd93cb2556fc217899ef3a273c27158771f743bafff0fc90a582d65da431efd7ccc1f07bf92a6600a7bc301b5b6a308325";
+  sha512.doc = "9bac4f4deafd62a8b113107ce47bb5ea3afe05078a3c5083b1ed790ed690bc3d73066e0abadc5cb1a3d45246f759941d6e2389105632bb6592c32a08e7b7671b";
+  sha512.source = "71aaa336a9f66af6f682cadc72b2ae100c606be7d95d76c2631dbb03ff617718c1c322288c769bb1b9b19116a29baa208fa085e2868e67ce3f7a5552d823e6e0";
+  hasRunfiles = true;
+  version = "1.01";
+};
+"trigonometry" = {
+  stripPrefix = 0;
+  sha512.run = "366a5e96499bd96d2eee38b78305d9fd7368d0b70f91acecd5a5337675002808a5695a525d011a1ab7b31ff34cc14c469970a3fe55c694f003d0ba7002795297";
+  sha512.doc = "a9bd77bda2cca604a69ca1b60deeb8da3128c625b87d64ccf39aaae853a645e736b5350d3d575302ec2a35e9736e4133cd4ffd223b9bff6191b6fed9549a8092";
+  hasRunfiles = true;
+};
+"trimspaces" = {
+  stripPrefix = 0;
+  sha512.run = "09bfe50d1b14502311aea7a20df80e70c1907b1c8443aba9453aa0a3eb76cbd34728734b81df63bd5895a4a5a55ddfe6d0feedf7d5d28d6b5922a374bc550c9e";
+  sha512.doc = "8e26064de0c14d6caa1d6cf625cbd2d598102056136dfa20d0a7ffb178c26829db0206d87893937b63f83171744a29bea3567e16e2a7a0d454734a0b72837277";
+  sha512.source = "a34429fb9b8514d25ac523f0e3bfdc880b84951ff228ede3016e2d29c001b7f8058755870fc3c63e6041ef4768290177dabc6d520157082fb077497017065b65";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"trivfloat" = {
+  stripPrefix = 0;
+  sha512.run = "25e07373c53a6d4c92a5f2f19fa0d70c86202435863b8b3cd036f2d12f74a477a33cca6508794f67256a877117bea821a11b9bff235e1a894c90b71810bbcca4";
+  sha512.doc = "eb9fce19c495eedd728e87bf47f5d925a685a8b9e81e8de0e6c317f74af6c82352f403486f5a904849ed418722d830ae294a89eaa57bbff59eee8a03cf9b8af8";
+  sha512.source = "9537944503c1606151207e75dd7a2bad64b34f82bb23d83e0eb93292ea9ad9edd0bd72a126de588125b6b425669f657506ca602796b6e2dd2997052b70f60dc5";
+  hasRunfiles = true;
+  version = "1.3b";
+};
+"trsym" = {
+  stripPrefix = 0;
+  sha512.run = "e571d1c0c042e2fe75b992c6e0e9e07b04f0368f1e74a51ba91c34a642be148fb817027931ec35831672970725377038b5cc80d34bdb716d936f4aa59075d83a";
+  sha512.doc = "d6cd64c1c4bbc927f4154c2281ef4c13ab145b750d92561235364a35082e497afc5d8aa5806452757b499b827305a0a183723deb38272ba43bcc38eedc367731";
+  sha512.source = "bd9c99b4c5ac266696ab4c3557028d1776a1852000db2e8c1b5a4c2f78e58f25df379a71794faf49e2c0d2ca14116796d8f6d617f4bcbaed7f05a75ec06fd5a5";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"truncate" = {
+  stripPrefix = 0;
+  sha512.run = "b676d65803577b4bce5f6240a0d05a306199f24c2b14402954f4430f07fed9a8af574c4cf9cdc233824bb1a285eee0c531aa40ae31c782a43afd678d6e44f27a";
+  sha512.doc = "78e9a96fc2e635237cae9ab4d7ac30cfee8582dde13331800ac9079d1e0726c597accb598b5e679b6643d27b2a53fb367e740b76d59e9a5d27226a4c829e8518";
+  hasRunfiles = true;
+  version = "3.6";
+};
+"tsemlines" = {
+  stripPrefix = 0;
+  sha512.run = "d4b6a929a403ed7fea409aa618e7ca021c2c7138a6b11c980430ba18f952ffba44df951dbc7b7f3a5ffcdace3b5f3a455eedc2a50b6e0e003ae3e17e8e7f9969";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"ttfutils" = {
+  sha512.run = "cb133e9067cc3b2d99dc2910d3722fd87d53bf38e664fdc80cbdd7ff1787047f0e71bbc60018802cae34cc5d6eeaeaddd0cac6ae23f980d0eb7316f6c342ce38";
+  sha512.doc = "27f3dc442a1892a903d5ebab16c82b0221efddd0def20b817ad1b33975d960219424ec1e6a408dc774e377aee99e905f6a850ce4a30ad1ed302acf442f09461d";
+  hasRunfiles = true;
+};
+"tucv" = {
+  stripPrefix = 0;
+  sha512.run = "957485431ecbdd31f180b36e7519c4bee8379f477b765ff5cebe57ffa3c95caa5556ed057943eb052d61e720074dc78035fe05b0023115caceb05bd2c3757183";
+  sha512.doc = "750f739c7cc244ce52b4838009666c9b6196cee234e9bbf0028e3316c75a435b5038269e93f42d99116b9db3d93dc4710c03705b924d62f09a217f2acfe36303";
+  sha512.source = "f754ab6d751eb5df0477802ab0a4d514aa0825e824531e76904ab474ed5423cbcaf773e37ce80e94c32236bee061f92c0782749c9196c3cc7fcb9249a57ea32a";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"tuda-ci" = {
+  stripPrefix = 0;
+  sha512.run = "cb06d36d7918544ee277a04c132eaeae67b4a305651f19b35e6bcfc6be4984af74dec0877610b4bf5337d162943a931ce2afe73baa9c2d739a5457718aa88b25";
+  sha512.doc = "d21cd3cc76bd297ac029629e8541281b213428975388e97e1c0b807bed52d6200e398ae52233379955040f63a3b01e56a86d3c8603273dc2426d2a517a0a86bb";
+  hasRunfiles = true;
+  version = "1.11";
+};
+"tudscr" = {
+  stripPrefix = 0;
+  deps."koma-script" = tl."koma-script";
+  deps."opensans" = tl."opensans";
+  deps."iwona" = tl."iwona";
+  deps."mweights" = tl."mweights";
+  deps."mathastext" = tl."mathastext";
+  deps."greek-inputenc" = tl."greek-inputenc";
+  deps."cbfonts" = tl."cbfonts";
+  deps."cbfonts-fd" = tl."cbfonts-fd";
+  deps."geometry" = tl."geometry";
+  deps."graphics" = tl."graphics";
+  deps."xcolor" = tl."xcolor";
+  deps."etoolbox" = tl."etoolbox";
+  deps."xpatch" = tl."xpatch";
+  deps."trimspaces" = tl."trimspaces";
+  deps."environ" = tl."environ";
+  deps."oberdiek" = tl."oberdiek";
+  sha512.run = "02e53aa101f34734dd483ae9d5d82e4b62a3ce04898db4e17e79787c1908277645f673d10793c11093a9cab8f4540671f6c0d8bd466d9a00d4f9c18922ae7ac2";
+  sha512.doc = "5ba9010fbd54a607ec7a94765c28d1ba79f99a2113628143f673e0e7b2c3c55b60828c2019d288e143bd0f97df3a2e62a31b34f000048d37115d224c97860e6f";
+  sha512.source = "ff791b97aa0e7d58c6abf126550b29b1ff9521dab9d4c8c845049e5622fdd189805a5a382a82a87ddf97c295a1f16480468e11e0c931c246b56ca42fcdfd1a44";
+  hasRunfiles = true;
+  version = "2.06d";
+};
+"tufte-latex" = {
+  stripPrefix = 0;
+  deps."xifthen" = tl."xifthen";
+  deps."ifmtarg" = tl."ifmtarg";
+  deps."changepage" = tl."changepage";
+  deps."paralist" = tl."paralist";
+  deps."sauerj" = tl."sauerj";
+  deps."placeins" = tl."placeins";
+  sha512.run = "6dd01a5a6faf37439ca9aab23534f99050b84bfac16df48545417ee03e72700344c25b2de3262e8e28406da705d50296473a815fa14b701c609b3715f01405d1";
+  sha512.doc = "11ac57e79a05db644235b6db851473c75d1538a1261d7022a63d9ab0cc54486cc13b7cc95c44d16912952e46bc9264c1bfb831a728b51a03495d01f1963410d3";
+  hasRunfiles = true;
+  version = "3.5.2";
+};
+"tugboat" = {
+  stripPrefix = 0;
+  sha512.run = "56a495c6239ed1a8ef1844bd90f9bcb97e2c97664877f343d198f9d9192d33e866b87334b961583d765d9b78633a5b5415933c000270d23be34f637612cfd1eb";
+  sha512.doc = "9fbe0a3438a81acc63424007bea1f2e8ff7f6a29e16bf1642963763aaba763f64bc26863ffbe9cc9318836df2e9191c5d8bcef821f573447a262f2b49896edfe";
+  sha512.source = "76152f1a32da57ed51d97a8f6189b5a72ae0ffbf18934506034ac84014bb0a4bd790aed1919454e87838e3a68f88d38f191dbce995372741a47bed65449dc90b";
+  hasRunfiles = true;
+  version = "2.21";
+};
+"tugboat-plain" = {
+  stripPrefix = 0;
+  sha512.run = "a2541eae8834f9a78fadaf4123aa1dbfed2215d3697299e17fcb0c9635091be57b5171514d771c2e14ee7c94ee2ab18e0907a1b3b3cc5bd60b3a3c74e305f45a";
+  sha512.doc = "747ac188b7d738ae33808da86716712f80f98ec2f69b60bc45514cead00d837fde1dcc99c65804e61c9e35e94e9276f314617f885dd081fe6fce75f7a2baaf9e";
+  hasRunfiles = true;
+  version = "1.25";
+};
+"tui" = {
+  stripPrefix = 0;
+  sha512.run = "59e8af51c39984a42247435ad893c3b8e37eb9dc53634e0a5f30733ee0c973690b66d805079a0f5cf61762abe7fceb1f2dc91691df9be26f72a1a8edd2524ba3";
+  sha512.doc = "b48d9811ac6414d96a7b5059b33c174464f262c721159552e48e6f5bcf5b969ae91bbac61aff6077304907d3d2bd8eb73774628458a7e740ea49fe433b9bbbc2";
+  hasRunfiles = true;
+  version = "1.9";
+};
+"turabian" = {
+  stripPrefix = 0;
+  sha512.run = "fe4ec8291e8b1dfc6130bdc862384b8e7c6ea2d4db6baaf92e0b7b053ab8ed328ec452e0c1efc4da2eecc3f8b6c86e77cfd2100ea66e4f59276fb64683d55a92";
+  sha512.doc = "3b4900c67c65ee1b20dedb2ffbc844ff22dc519dde0121b375dd13bcd80a0f2fdf5cef8c4e43a395ebe8fb4c82d463f18ca30ec65fe2be398c181af78ec0a0f7";
+  hasRunfiles = true;
+  version = "0.1.0";
+};
+"turabian-formatting" = {
+  stripPrefix = 0;
+  sha512.run = "7a6027cb84a6f2e2990d171aeb1e4cf528038f2dfa4f8bcd59f4775aecefd1a9e3d3dc36e9a7fa1904a9e42da1cea8b7843482ff8dbf00fef6666588f7b7c31d";
+  sha512.doc = "38d89482b53a8daec33e19fa9f6c782e42b61586ba96e7cdc91bfc839dc734352dd5abf9d3146c4eeadca5921d7a85189481393f0691ea5a9917547e1e7a1f3a";
+  hasRunfiles = true;
+};
+"turkmen" = {
+  stripPrefix = 0;
+  sha512.run = "437ff775642326f25f260280ca8d846e546f0f4b3c3082eb1ebaadcfc6ca5196967f82a00237367754b3ff307f983a828dba5c8117539d65634379567062a377";
+  sha512.doc = "39014c9049322a1966951a242152b8774b2bc914bd620b6eba8c97e8ec457a1ed3547f2c211b3bba333cab21bac98882dbc9a1e9028443e7365780cf4d78b577";
+  sha512.source = "1d69e90b8aa74db44b7b89c8a3346ffbfca2b8514205a04610b5049e50e61b19ef063d9b3e9c99bf4c141d52bb03d600ad5ce1a13494b06fb7d13d12f47b860a";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"turnstile" = {
+  stripPrefix = 0;
+  sha512.run = "083050bb9f34b576cc1033a0b754a2e888883d98d41aa08c1694f78cb5e372748cfc1d62af94732334ce05e91933e95796498fc120d6584f554260fef4d87811";
+  sha512.doc = "6f51d17752aab1c33442a92d3d926b1802c1274b3799f33f65bcd417d268ce851be76d36b13fbe0fa3599399f10df9e8bec7bfb6ffa929f667b9e7ee3e9eb323";
+  sha512.source = "edab29b25bcad5c2f65980b5539d60b3f8d6481205c89a1fe386f4e1b15e5988c3e592816aae2ded548e624e1cd55fa987eadd2c727d2f261128172bee6b369a";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"turnthepage" = {
+  stripPrefix = 0;
+  sha512.run = "446b0516264eac6b880048e16cf4ad7bb529718c726233fc645b8c32d625f3f6b505b72beef81994b61ddc77ec8ecfece907347be4f9e18a79fa36c2aef91b5d";
+  sha512.doc = "4af8dc61e53df587f19b61f6260e7a7820a8334f2841a63f2ecc05b7197eb69596dc36163b39cdaff9258651241a334b6e3a814699065c8ce4f861fba6110f83";
+  hasRunfiles = true;
+  version = "1.3a";
+};
+"twoinone" = {
+  stripPrefix = 0;
+  sha512.run = "ffb9610d416a15f664bfc34772651af63f76843127290bd64462991b3b892a8bbe9b5a8251e278ce757883226bc07f89f54cf94be08d6bdbe6f68c5841e3a282";
+  sha512.doc = "5b79b0b235fda5e32680884702a16fe033f3a617daa765a72233d22df5e217f6d2a617a2d067f6a230985e5144e6e6d733ef6e7060f267c6d22bf5de39361d41";
+  hasRunfiles = true;
+};
+"twoup" = {
+  stripPrefix = 0;
+  sha512.run = "b3734b3818498a7038d544304d27376ff481b81fbd776cc44b9d246c3e69560364a784d897755cb69f9608c51135a1fdbb8ed370d624db64dd7b5f18a48bf754";
+  sha512.doc = "2bd34ca3274a229949c322a543c2e1fcffac7383edab2cbb7f0c74dd43d3b9531f9ade43f6d0126f5fd43371093f92170f69fdcbc4f69ba7fdca1d1fad167c36";
+  sha512.source = "d121f96d050e4dac6b2b52ff99b9b1ac5d5dc5e815c670f6458cdf8989a7be5e5a2ffcf4bb25d3f1ab6d5c02d1c67c15382ea266d0ef2e1f6e86e404fa1dff20";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"txfonts" = {
+  stripPrefix = 0;
+  sha512.run = "2e6a195791067ec85f4eeaea5970467c97915dfa48f59d17b5a73c90ba221de1b41ed35502c6714335cd190af05ccaefc6cd5855c5f35f49bd8e15a2b4ca0726";
+  sha512.doc = "f19a988305799931023026f714b63ee539ebaddcd39e9be1f1bf765cc4cc89428b626ff4d6bfc91ea2f324f08cf09b618b6a0f8db6b01dc9d8685618daa1e2d1";
+  hasRunfiles = true;
+};
+"txfontsb" = {
+  stripPrefix = 0;
+  sha512.run = "bcad7b4043aab05469166bc747a14746d8deaa3bf0d354c5b7bb706a86c4b95bea9943ef4529289f82ca939cffe377dc4f5cc89e95fc4bb4da797b61cc9b6c63";
+  sha512.doc = "f6af38502971c30cc2e082b0eb64ee86d494b77937e13b70dad24c77c90bc076b2b983028636bcdfb51ae5efb7d901cd082ca5d3cc6b7360d299611718d6eb31";
+  sha512.source = "61da236fc5cc33b520c4d7a68beca24dd4799bbed7675d44a3daa8bb4a815a3f3944d73eaaa157536a60c6d67d68dd9a214f083b1dd2bc768f14611b6ddd8aeb";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"txgreeks" = {
+  stripPrefix = 0;
+  sha512.run = "05b24a0c9705589d2e04933a5e29b8a49de155ad0e9a4caa0c36785f7feafe475275b76c58aa50d9318df26342b800382d3c9e8164bd95fdf400f730191282f0";
+  sha512.doc = "b671e433740ddc414e0a881d1f91a1311ab0957038ebeba23fe99d623a62e0499825548dd591d0adc67d32a5d7331cdcdc76be6ba87f77265bcf48758626919f";
+  sha512.source = "09ffe315c18dfe3ce065a6a48dd17f1340c2381df2585a973b666d2a93f1560be11fec50c44e178a154bc39416437772ef1059c539e5934ca6b02866a087eecb";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"txuprcal" = {
+  stripPrefix = 0;
+  sha512.run = "f6840ff0846b52130b65c81513d4bf358dfea413ac6d7f324eab592b96d5277d7036e5d991dbfc1ecf6376fd35baaf0351818eed69a21b6ba88e25f878a41ef1";
+  sha512.doc = "f5bd216c689b0368bbbfe29f7fbd57bb7c02344d8696af488fdd7f1078fc5ad9ac7ad5565f1408b7b7d19224093d1418c1e3d8920b8cb0cece770811576c894a";
+  hasRunfiles = true;
+  version = "1.00";
+};
+"type1cm" = {
+  stripPrefix = 0;
+  sha512.run = "85a72c942e61dc0c0fd3fd7646d264ee692ecaf4e2badab4f68dbcc380a1c88a78d4ce066e23a08d1cfb29ed3af0115b08ea05a0e078283513eb14f9c6031863";
+  sha512.doc = "6cd4061eced23057d860143dd7121b1e0ca1a17de1c2f08334c678c9623c0066ee77c1ab5036953ce390be7356d3fc0d155a5de1f0aa977e1e95296fe71d5199";
+  sha512.source = "6a66a866c6edbe8c914bd3b0a7568c0e23914253fcb70fd849326e42b2c32860c97756fb94f5879dead5bc3f057cba64f639038b5a125f607c3f21abe4807bf7";
+  hasRunfiles = true;
+};
+"typed-checklist" = {
+  stripPrefix = 0;
+  sha512.run = "3ebcc55c6e6e5abe50b1040be5d53f662c632a8b53f2d1914dee66ff0ec812d61057113f8af5062171a3bc9f7a67de0b3b5768eb701534d386d0db6fdfea0ed2";
+  sha512.doc = "87943514c64b12bc85711086f17bf06794e110f36b67232659f6746f39d4e671a7b618d45c21c7d034e5aef3f3374c959445e235329fd16d370410fc5f9621ec";
+  sha512.source = "bb0775fdb62b386d8b712a955849462c2c3c812469921a00a00d2fee20590a15f300f622bea0d86d6db7b2788c45bca4eeec443cb3c08b97c35e5f51e497fe81";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"typeface" = {
+  stripPrefix = 0;
+  sha512.run = "68a71a590aaf3c6defc28a52b47f38bd1d24ec034df904d7baf4e22f1d390ebbabe744855bda70e72986450b402f03295f772a9576a2bffcab5638f3f77718db";
+  sha512.doc = "548caa57dcde46484ae947f46abbd8cfae54c0325b42cc32c23c092e23f7cfe6589b6ddcee1eef09ece3c5ce0328fa561c52234899d9544fdb86440c91c63ce9";
+  sha512.source = "3c0a366505b9631e4240bc6a54619c8f526b18ddada30f2a88f8adb29916d0be755bc0643fcb40dc4d1a0bc371596774d029ab4c42d473ec09c36fb48e99cd12";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"typehtml" = {
+  stripPrefix = 0;
+  sha512.run = "9a158c2fd4c16a5dda1f8828ba32e082f5839fb841a8479563828b0085db4fbe28cb91674c6f22ab4965f8bf6f6cdc0f5b3113743113ca0188ff8bb851845ae3";
+  sha512.doc = "0001ed86af90c4fba458d299a2651a200ece010ec76bd8e934afcbacb7d7684fcd6c9514d280bac886a41eb38b4630fa52b1ea18da70ef9c29bc04618e392673";
+  sha512.source = "729bb6acd2e6ec28bb18972cc58b7ef8efae136bea2d96a38cedb4b0d40b02e00e2b21143706325bcf9add879e8adcc6b0194b6cbef3803c5566e7f6f0e63ca7";
+  hasRunfiles = true;
+};
+"typeoutfileinfo" = {
+  sha512.run = "b30d2618c8cdbf69fcb8a5444922185a52b934448b5d28ba143948cf80ed17cb402d73d1162194df3d2992a52ca9e6faca79000644eef968c4eba892c415b6bd";
+  sha512.doc = "143c4ad9cb3890b6350069d5d045f74c0bb0cfbe50e7d051c50c82011b56e651d483c1422d7d553a8d1d1784ae726a1ca1aead023fc3ccb1da4f0d59d47f7920";
+  hasRunfiles = true;
+  version = "0.31";
+};
+"typewriter" = {
+  stripPrefix = 0;
+  sha512.run = "f8b9edca6a860f0acf0d676fff381276594f7c13fb13da2e54caf5513a8a65fde378b4c16dc621d89d25d7492318b006d7c5d863c1f96a0a246064c0dad1f2d8";
+  sha512.doc = "12376247fd8500e7c147609bf47acab379e36126976ea9f2dc0a352b8b0d779b1cd43bd1394f3961b1a7fa894a8b6448b0369f612d8bbf8d1bec3175e850f89c";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"typicons" = {
+  stripPrefix = 0;
+  sha512.run = "38b0afff6e88635a2a27502f1abc279fd70e49f36d56bb44114895614cf80184ebf8b627bcd576d128b3557de08b3791c5c2e48f2adac9766f9a809ff0db3cba";
+  sha512.doc = "36b9517833fa6c430671fdaf0ad0775813c22ea3b3f56fad96410dd90e052b76d81f0ecd411ec19b567cd664b7ca44b9268d05ce59fb9bea0429c8f91c3a4a55";
+  hasRunfiles = true;
+  version = "2.0.7";
+};
+"typoaid" = {
+  stripPrefix = 0;
+  sha512.run = "56553f1ea620566efdcd5dbe3710627d4c1b0be0ee294d256cec8cd633a4b24048012c108eac867427ddda28614eadd73172fcd2c57ac702d5f5e5c4a40769bc";
+  sha512.doc = "fd4809e02b1167e16bdb75cce5837f6202cfb44e7a0204900f6eb70173aac984eb35b14f00a9d43d4a61a4fb3a00298eafcbf71de15c7531f043e64cef418d8f";
+  hasRunfiles = true;
+  version = "0.4.7";
+};
+"typogrid" = {
+  stripPrefix = 0;
+  sha512.run = "4ef0239ae626245b25e43819bc05da7d22d89d1e33b94402f8bf2b24e2518bfa7ce6626d0c9deffba5d461dd65db0160bd9134b78cd9ba930d0e6315cd761b9c";
+  sha512.doc = "d228343668d98616c6cab8a1c4b0cea313b4a7d2f25699a0f54f64b660b10869d2669d98f7f5b992ddff5a3202139ef1e278ebd40b3dd76466c6154a59804c90";
+  sha512.source = "23aa23ca0ca597a03ffbcd0ea79c1341d52aecd41d363e6daeea8b35c74d59a4edcb6a0f2dd7fc05e0a1018ce375f77ef7c831cf093292dd3785f486b2397388";
+  hasRunfiles = true;
+  version = "0.21";
+};
+"uaclasses" = {
+  stripPrefix = 0;
+  sha512.run = "4341612f18d6f5f4352ec0bf0018fe3115be73f479479586a81d7f994ec23adea7c38fd773022b4d81a126e43bcbfe5f97f4c36d61bad73509f2c1b97882c00f";
+  sha512.doc = "63beb08274ed7db9a2d77761277d65f89988812765a2484d7db54a8419cf67dad3fbf76b46bdafd8bd7cf17a1d540deb83c00c7b6df01f6f023bbb5f098c2ab1";
+  sha512.source = "ffc4902edf6b4007c3685a58d3e5a20a02a6ca3072466b7415cb4fa98de236e52c6a391c5e5cf30aabf37c7374cf00aaf2c7d6c845a3a61e2f9c0b0505e215bd";
+  hasRunfiles = true;
+};
+"uafthesis" = {
+  stripPrefix = 0;
+  sha512.run = "3f8146ae2cddcc8f136c7dad5cd926919d4d81a2b43038fcce55620c6c240326123b6f48c32504b44cbbd9b62aa3a61cd80f5b85c9890ecddef9d96342cc0eb7";
+  sha512.doc = "bb1e0fddf66350187d8507b34811c0c1ea84fbf0c6cd3e9eeaec8ef6c7111fa2ad1eb4d805df01fa6bed58030056ddf0b2b4305ad821e696fa6de977cff46c98";
+  hasRunfiles = true;
+  version = "12.12";
+};
+"uantwerpendocs" = {
+  stripPrefix = 0;
+  sha512.run = "93c494ac45f8713cdff15e03b5f17388041ecf569eea304966da980d413d542d72af79ce86a57686e790ac527c5c6e562a93b9612c03438aa7ea1acb3fe7af92";
+  sha512.doc = "94a6b8beddfa2b625fce0f75cbab43ae4fafa7cd7c5dd0568cbe46cc1a7b0218c74c5575d116c8e085bc0fddb62db0596635d549251a760ef93d93b662d40982";
+  sha512.source = "76725a1498c86eaf6e585a1269b737601136337770f304d598762aa7f354a478b70849b1a98ba8bdae71c81fbf0db372c275f95396463316dbb5a9631b068b20";
+  hasRunfiles = true;
+  version = "2.4";
+};
+"uassign" = {
+  stripPrefix = 0;
+  sha512.run = "3e61f381e23c30670fe78c4a54d99970bd05883e6fa03040e7123fb0936aabf51341d64aeff92109fdc33b7b97f40aa0cd81fd6624d9449584aef1fa3061070b";
+  sha512.doc = "e6569cdac6854bc1856d6a4604589619ecbf317442018790eabc3332723dc167a879e7ca6be0da8c281847e757ddada005daaa3b8712f7697ea4052b9c9f7cf9";
+  hasRunfiles = true;
+  version = "1.01";
+};
+"ucalgmthesis" = {
+  stripPrefix = 0;
+  sha512.run = "7f2d9b167b5268eb3f163ed71a12e3a979e2062469401a07b148c9d24f3080f050cb31df84adbd7de20675ec0275405f77923331862de78883faf86664445241";
+  sha512.doc = "f0a3a599e904525877c6737262de78b66d4144d49a5fbe3ac79db3a82481d168607f48af9974019d6bc773465714a5043bd95fb45161d833d2903de708375a03";
+  hasRunfiles = true;
+};
+"ucbthesis" = {
+  stripPrefix = 0;
+  sha512.run = "b1a4258afddfb1283c3fa4f8e126dc63f1ac948ebee2d2fab3738e2f5228b0bda85e71ab3cc3ccfab0b8ae66b84547c5070e111e8c1516b54bcef721f935e63c";
+  sha512.doc = "aa443fe9530f08dde9b0531e075052868524c7ff6052e8e93e384ee3c01a354fd1752664b602ff6c98ab5250d05eca910773236d55270c09a567c9b238fbcd7a";
+  hasRunfiles = true;
+  version = "3.6";
+};
+"ucdavisthesis" = {
+  stripPrefix = 0;
+  sha512.run = "ce8191ad81027361c23175194bf23284bc2e43407f0047586a4a89a2c51f9823356e2e571639a1f76f6a1f2b43c08eeb134d874c03f559897b0cf50aecfc94a9";
+  sha512.doc = "26ecd36ab09467341868d0ad7d71f39728f23688053ad4b8a89339238da5c96fcfe504d8e6403663eb6441a14333163f8998e00428609b161c3e9665a4ef0bf5";
+  sha512.source = "759eab6cc5b63ac159e481bd012ce5da4d6ba35f459928d4e578b96bac60485df32771660b4f8fce08e73303e517c37aee1a5503a96c810506bb854cf7bb050e";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"ucharcat" = {
+  stripPrefix = 0;
+  sha512.run = "333e8f92394d89bdc3492606e467d4b664c5d87eb464e1c16ff293e3f87931c3c70308aeb523fb40f2e76e5d0aa2c1635402f40fc36ecfbb7ced98d232b8bcb5";
+  sha512.doc = "b4615cefd26201509c908c2719519f927d61ad96367a612d654917819b2ac973fff85d081dad6e1d092e634388b16e83e440d3cbad4fc7c16f638f5e2853bb7f";
+  sha512.source = "6ac34b38f4e0908d841ded4981d649c9202bd3bc277843e6e82bce629a245cea9c6ef1336d575d77139584f3940181c5e6f0abadf4ff71c42a97ccc33be59d9d";
+  hasRunfiles = true;
+  version = "0.03";
+};
+"ucharclasses" = {
+  stripPrefix = 0;
+  sha512.run = "1c90d8c0f27919e8b3e8bb057a43bb1878b1bf35840d13b6304edb24df56086081883731c35d1d58638374bc2835ac3f111a23981459357b1d1883168a4dd833";
+  sha512.doc = "21453f2a5fd247f05033b929200bed163391c718ac0562953a732718b8851546b1e2b8c1fc35c1412def0ac368c47ef1c06d9d8f4bb724be6863c2568662d10c";
+  hasRunfiles = true;
+  version = "2.3.0";
+};
+"ucs" = {
+  stripPrefix = 0;
+  sha512.run = "f3a7120c45b722746b0f3c90a189ebf42daccaf659385c16507e5fbfb0a2922b7fbc3b3e34f53fc61ce6cf0883c9c182ee47c95b3596fbf9029db6fdafc6ddcb";
+  sha512.doc = "b1c57fc95a282e546fae1fb8267c450412ff92b5bb0510c335cfa7d8ace9691c4f6c47fdc0a87d6752052abca1325a86a44b777cefd65363bf4d9c95265de888";
+  hasRunfiles = true;
+  version = "2.2";
+};
+"ucsmonograph" = {
+  stripPrefix = 0;
+  sha512.run = "e7d128e550f797aa566e1364102c5625ceb268f7e3d8ac78f03734d5721e92628ddb22942afb4355ba6dbf68cade8b129148a41ba777f925a4c51743db12bdff";
+  sha512.doc = "500317f88c5162f201b22d0d511fadd2e2a024c72fb7ad30c15d6f251a6c350bee724f62701341d78dd4ac2d718b231994a98319fbbd8b79caa639272e2627dc";
+  sha512.source = "c802f694093eb71d8cce30ac2ff2672ac07ed40196575f89d192864d5fbae7e5bc5e0910042798cf4ddae7481e812c62b50c5ebf245c59dda1d3f9b992cf1497";
+  hasRunfiles = true;
+  version = "1.2.1";
+};
+"ucthesis" = {
+  stripPrefix = 0;
+  sha512.run = "5409e366c69372dd3a93b3755d185e0b96edf71c7a8de4d6cc3d41850e5b9915d2bbe68d3265b5facd52e7d8c00159031737dbcc26302a1a6a89425ac47f443c";
+  sha512.doc = "7f7ec44a55e2d712af2204d883a7136b44192a402daff4376cd6cb217419179d2b46bc083688d9be9ad85d2b3daeb00305f2253196784ffc9d72c039f0aca5af";
+  hasRunfiles = true;
+  version = "3.2";
+};
+"udesoftec" = {
+  stripPrefix = 0;
+  sha512.run = "668c96da10c6fa73d9739e00e0144d20fcfe1677417f648c205fa0fd49eae7ce9d5460e30f2002c39791a41e7db19d8ac004b4bb0d4c44c230ae1ab1ba884719";
+  sha512.doc = "fe902d88de4e7e98a5416bfcd67529d860ee85733ad9f76e8ad2112fb2ec071c2fb26d786e88abf8fe8c8f7d7e199a4f0c15f728aa1c117bfff7e32941e677d7";
+  sha512.source = "a964bb8d9dc2e10155b73121c062cb101108c94def892aeacf166bd739c64cebbf5132e2b94c5cb8f4e377b94005fb8f90b5a2a4bae4f9c5dee5a6551e821f9d";
+  hasRunfiles = true;
+  version = "1.6.2";
+};
+"uebungsblatt" = {
+  stripPrefix = 0;
+  sha512.run = "e9ce935da13de8106d63f233349bd29e954538ad17de7505be14a4b5a2efa1e1aabd3ef46871e98d2f5d4730bcf6c49998187924328eed19a35a95bffdcb8d70";
+  sha512.doc = "2853eae6fdddf889b305166c6c09351e8e7d7fb087c68a5ab9f4a7a282118200a5120c215708e7d2b9d4487457aa6330d11ec7f7a8e0139719b67217732f2633";
+  hasRunfiles = true;
+  version = "1.5.0";
+};
+"uestcthesis" = {
+  stripPrefix = 0;
+  sha512.run = "aaeb270174e260230d527379ef0a7581ec9f78387aae8505ed5e88a04586dfbb1d90cb923181f34e92d5100bcece0da66e17452218f0c83bbb12b38cc517f3b5";
+  sha512.doc = "e68e86bb446c1e79111948b004ece03e2110166d01966d562b1bac6c932385aeaa682f04262eccd822e01b93c66c77be53c947c1dbdbf5ce129a74efdacf5df6";
+  hasRunfiles = true;
+  version = "1.1.0";
+};
+"uhc" = {
+  stripPrefix = 0;
+  sha512.run = "b5e722e7a72d2efcd89c969c10291779a2885603817374e4318f59b4042b8890df967503016d08a91e30ba8cbbc6f1838843644f06cf44766a7096efdd3bf905";
+  sha512.doc = "c37c5041d155f9a175a6761154211a683405d094850cc829a6b942afcb93af987b4049e663d260ae2b066827007d8c6576fdcd5d14d3ff599f031b13c00e162f";
+  hasRunfiles = true;
+};
+"uhhassignment" = {
+  stripPrefix = 0;
+  sha512.run = "a394f6f161cb72ba42eccdaf26f08b12048cee56207f754dac157a2eede1b0867fa0d5916a37d5e3dffbf10237178f156fd3cb33c88be6a926208ca8dcdd0508";
+  sha512.doc = "21054dc051229a338d2aa954cbf80893e156236329206ff3cb63f47dceda4c35c6fbf6c2d9492551b7609aa88dec74c507094e2d96f2f96432436e74e80a9c38";
+  sha512.source = "0bd0fcb18d334c471fa7d4259cb7c511dc7917344ffcd724ea8bdf859272cc164649f01eb4e553deb5b44f91dfcaa1640b18ccbb5b10c1b0d3a7b585afa323ea";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"uhrzeit" = {
+  stripPrefix = 0;
+  sha512.run = "7b5c732258e25ecc2d429b09349b94cc4f24de77e8db40add018f42bf7658868e9c3730f0fed86312ea96625556fe02a276535eb14416d06fa5fd2cc1eff30c6";
+  sha512.doc = "76c7bdb6c74ac05fd9b51366b68b0dae8180da51f506ba1793765d25de29582c8eba51826d6d6c6d3c3c1793f10fda3f6bb75c82d8d454fb19e1339eb98a9eb2";
+  hasRunfiles = true;
+  version = "0.2c";
+};
+"uiucredborder" = {
+  stripPrefix = 0;
+  sha512.run = "4a398e734fe551f1636a63ab3ac8b851ff1e445c8b15b6e48017ed7a81edbcf042750919db790d7e2e9d6b08132ec5a3c04195854315ba1c1c8e8712996dcb25";
+  sha512.doc = "6e1c91389897853bada4b52c8350dfbbc321395cf1ff7991d7f29d5e64119c86c4e07fdad889f2a4a149e0e2db1a1e5cd9a44cf6f905d5030afa25cfb14d1323";
+  sha512.source = "74256e3917f7d28adbcd5d08e4dad126dcc93019c852ff6307417b2e150cdefa986affb61d7b174bf510e5f75563bfde01fba9b4c588db3d41c2fca82e0c882b";
+  hasRunfiles = true;
+  version = "1.00";
+};
+"uiucthesis" = {
+  stripPrefix = 0;
+  sha512.run = "565b499bcef08716d627e206a53f2f344a10a0e219876eaf4bd82a63accb2eb43c14c8c8b25236d336022900e9a7d5299b5a34d5e40eba0be6d7dc8ee4431490";
+  sha512.doc = "798e7428988a622562b94bfd4ae389dcbba3524fda0d427aa4fbdaff0f1a437babb4e68b58350a3229fa078bf11e17af9f5eff61a5c9153960a941783cca623e";
+  sha512.source = "3d1eb025e066a311e4ae28292b00e697cf4de63b1038944b41edfbdacbdfd246d5a49bd63f561c5d0d4bfadad8d2a4325a8784245c09308ef5d2380054b966ad";
+  hasRunfiles = true;
+  version = "2.25";
+};
+"ukrhyph" = {
+  stripPrefix = 0;
+  sha512.run = "043338c4e92d84bc2b7bd63610656b53b39bac225c5610089c0c8b58ce9bbe3f414129a6b043a5307ebb7b59cc062ade7bd803fb6949d06a0d0c87e2dd4a0bd3";
+  sha512.doc = "a283d11ed922181d4f29f521e3019fbca2b1bba1aacb312e22dd8e69d05d7dafbabc5c23b63707f265bcd215d8f517f58ab2ffee2b87d9bc1a968d00e9542840";
+  hasRunfiles = true;
+};
+"ulem" = {
+  stripPrefix = 0;
+  sha512.run = "f20ce5e900bfd20da9fe240214ae63ccb51fb6d0ee6f5a4081439f524889a480cfced5f261a10bcad8c7f28c31b7e1933254b3ab30c5de04d54ff80e49952342";
+  sha512.doc = "e73214c64517ecc2a30283b0e0e87f913bd768c2ab9dc0eef68e8c1534c3ac877ca8b96e6326205e7cb34eca072e5b2351542d0b9fb02b24f1604782efc5a7bf";
+  hasRunfiles = true;
+};
+"ulqda" = {
+  sha512.run = "228132cc464dfe171426fffec6103f0dd5eac61c112b03d64d98bc89a0af0ddb7f52f27f9bb5461c8be6f752ae30ef3d4c6b987e580d834eb7524d5c27d956cf";
+  sha512.doc = "182dbcb73a25e05035f878696887ea219569a1a7ef44281bee14b4498b37e92346e0e97d187a5f3dbcd8d9783f260080ff10f58dfe41e69caec4888d901b9128";
+  sha512.source = "352f1a739cb9c74c0dae529ff330f3269e763242af4dd1bc0aca963b3af03f02f5becad436cc3a93aa105359a1bf2f229b3cdb7175d539d58df67563b490de8f";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"ulthese" = {
+  stripPrefix = 0;
+  sha512.run = "d9b1228e4fe2f425a6c0b31695283a07092d4fe5bed1eeb2ba63eeba702fb07235faa9f5b3b443a8373b719d0e82dd03f5e3e691911c7a0922e1ae335ff10227";
+  sha512.doc = "1f93ca717472f2f894bdb413fbda7d3b40bb86742f470c1049a18dc141717475475e2ebba46923108db30f8a15d04da649c3d8840a3579b016c72334895080aa";
+  sha512.source = "c9212c8cbeeadc87fdb1e5573d48eee6997e2827b53f6a1cabc33f358f47b5589dcb785fd6597adfcfa55cd3d8c0e370f84733acb183ab95a136dcab8ff1032b";
+  hasRunfiles = true;
+  version = "5.2";
+};
+"umbclegislation" = {
+  stripPrefix = 0;
+  sha512.run = "ea6a55698b51da3939a1bfc10963dd74d9e772ebd18ad9018f649077224f7ee30ca20f051a68c9bd8d8bac94baf1d0d28ab2f864419c61385ebf9bc82aacb7f0";
+  sha512.doc = "d4d5f318baa1f1ecd446bb864d0670ed2dcd7208429bfd2ce587810b27dde22f49a6f7c072aad8f6515e721a98ea0ec356ee36eb970cdee385910a291d964394";
+  hasRunfiles = true;
+  version = "2016-6-8";
+};
+"umich-thesis" = {
+  stripPrefix = 0;
+  sha512.run = "52bb76c9d9e3bb742c2049495a74d026a1803396bc5064a10f4da2e80390ae6c9c9c74326b14966e989c9edd1e29b797b89413ed6e87e90527ae470a8b731889";
+  sha512.doc = "db85abee0ad37ce814c645c072399a6ab7e3307c623bd402a1b9ee8b69a1c2a8aa782b5007a433ebe9eaba984432223bd78f247fdcd0c6f50edeccc87b874173";
+  hasRunfiles = true;
+  version = "1.20";
+};
+"uml" = {
+  stripPrefix = 0;
+  sha512.run = "b20da85c7166f8aec4309af3ab0b1319f37ada1513ff502555794b1721ac8c3f551afcdf49a58bf5c3c5e666e48962075f7711a45de003245584541175a6a470";
+  sha512.doc = "d81393e3b6d9efc0177478e562dc0a22323e3e5913d7592cdb6ec595d525238e154d2a599380521652eda4fe75b12006cfdc907715b0a9d461f8df60ed27986b";
+  sha512.source = "afc5aa7db53b82f6063abca35d8cde75659682525d939e2f55c375b89fa4cc196bca8852c91d12f7daae939c053f4c9ecf99b326361f051847e660af5afe3ef7";
+  hasRunfiles = true;
+  version = "0.11";
+};
+"umlaute" = {
+  stripPrefix = 0;
+  sha512.run = "35188d3930b11c0d1b52a5032bcf9cea21a22ce8ca2930f69ad4ab54bcdf56b73858168cc62581aac1173452dd0f7d0da3de8ac21b0ca2255ef324ff63c89091";
+  sha512.doc = "89f28b3b90f63ea4f367019f0b65aa1f8e9489ff0d897af6ea29b7455948e3e75ef003a5a2d5b4a88e00a5e415d409a577c03b63a330f93ed6804c99f951c68e";
+  sha512.source = "494ee6d1432d783f9586c80cee044e2857d4d24358c7dcb7d3043945bb3f5331b8eee78a13ee759ed6260518dcdebab33d78bab4cec5d384c4773b502c96fb0b";
+  hasRunfiles = true;
+  version = "2.1";
+};
+"umoline" = {
+  stripPrefix = 0;
+  sha512.run = "db3b8216d50288ec096f3dea9db24dfbad76848d9b8ccdc5d1310f4b8bb1b37ef10fed74ee5e6e0b70cc3e0aaa73aea87354ad731e4057c888031eb4e1940539";
+  sha512.doc = "64d559300349fd75af4bd98f0841aee5c5d622791cdd03373ea1e7840989b5175e300663023d0f08636b86337f66c6668871387a51a9a28e079111087265bb98";
+  sha512.source = "13f53876f0b1c5921b480ad9d2c63ef3abf1e175006145f200f61f515e778161ba631c6da9ca4c4d928f94220e0964b64130638d7dd7195160b54f39e4bf868d";
+  hasRunfiles = true;
+};
+"umthesis" = {
+  stripPrefix = 0;
+  sha512.run = "b2fb90713da6547b9d4cbea4f972144f70d7f1875e325225f0dfb90df1a04b4693c5a3dc651f0066ef7ba6456c7732aeb5272ccfd5e8edc24281c1b1bc9e4e32";
+  sha512.doc = "fb43c7ab262d2a1eb70b80bf4ad66ae9e022c847451009372e1ee1fcc5250e93b0a4a2195f4208799ae78cbcb5fc24d48de0b2355884721918ae5d4c827c3507";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"umtypewriter" = {
+  stripPrefix = 0;
+  sha512.run = "44dc925eccfa4010566bc751bf202fbea6b369beb57c6851bffce2dab757bbcf415d601de44f97e929e046cdba1720ecd7bb6ca12c992674d33b43b9e0ce77ff";
+  hasRunfiles = true;
+  version = "001.002";
+};
+"unam-thesis" = {
+  stripPrefix = 0;
+  sha512.run = "aaa8c4029cfb130798c5e9401fde5dbc7943d7cb89c9a620e050e619ccc1950593b1d10bf6300958aede043ed0e4fbef371d0c40f055b259284f008463a64c40";
+  sha512.doc = "ba6897f0b31953cc60bb49430de1b77d10d7656363d596d4160f96189c70417227193ac7d3809e1bd7518b89a871f5bf4b18004ff8185b2a03e0226536dc6a3a";
+  hasRunfiles = true;
+  version = "0.5";
+};
+"unamth-template" = {
+  stripPrefix = 0;
+  sha512.run = "b8d1d3bf42c11c967d9e3889e52e2c9a45aa3e0bf4ac6b6e5a72d69e1bccc2b254954a6828a66ec794dc7126f54d26ba48e3c11efb913d04e50f4867d348d3b1";
+  sha512.doc = "eed527d21e7d8669e0a02fd5e880e9172dcc2ca8a1e499b079d1d8f3935b7e84a4c84763b0204bb3b90a9df493bbbba6ee90fefcde6b4975c1360ae119264f61";
+  version = "2.0";
+};
+"unamthesis" = {
+  stripPrefix = 0;
+  sha512.run = "f48e7aab2c445c5e257bb39ea4dd880cf9334a5b1dcbf429e8d4420edbdc4621aa59548f31770d67698bfb4e59e239dbcddc959c1b010e012ad16971ee7956f0";
+  sha512.doc = "240a697f242b880fd2436bbaa3752aae57ef3fd2e9ee63da173c78582c4bcbb1eb19e02a96607991d1d6a40157d52f00dadcd4956af230d429ad5223161a018d";
+  hasRunfiles = true;
+  version = "2.1";
+};
+"undergradmath" = {
+  stripPrefix = 0;
+  sha512.run = "1fa7b30670ff888b7b848b756b960690489aa7ea12e5cc5cc97b56061cc91c2fc4bb2ab0a3a2eaf13177baf760edf8bd7f222dbe02cc16ad7b53f57b4b4340fc";
+  sha512.doc = "5dfa5955c7e9ed8fe89f6ccfb4517e699861b95619fc2013631d457938d64bd56bf34718c29b154a46b8519ec61bb102963668b13bb414a3a7ab35b748a981c7";
+};
+"underlin" = {
+  stripPrefix = 0;
+  sha512.run = "b3afaf4c51b3da2d082e2cc742deaabe70cfbea7425e0c57f0d1d6696cd7d8f993707a219556a5c5bca925ea63373e3f0a716a82ead647e09ef2f716535886d2";
+  sha512.doc = "d296a04d3a24b463de3e4fe99c96a2fd8afa7c4ed2fa17d1218ac9e4c17455b4752176be60743211d59657045c709c8b4bd66febf10c81a41879e8c7a67e9958";
+  sha512.source = "8c534008a2cb0710b95333869536bdef5e3910e4a7c29ad2daabacd94bc5a34ea15dd3bd8439e7ebede0985831662d86f68815bb13b3fc36c82d83c51b16cb5d";
+  hasRunfiles = true;
+  version = "1.01";
+};
+"underoverlap" = {
+  stripPrefix = 0;
+  sha512.run = "3f94b5d33cfaa7f48441ba656e9498ea17ee5ca404e39486004e43bed71bab5f2140b391191e4d6f9575ca23e09b83bce343433c02cc394844270e563aab70c3";
+  sha512.doc = "5214981a15d7f15cd361f007505a4a0060a2952d75ea28f4eaef01c19a5b79736512a2b0a8c5e6ece2d08c364780256963276a9bc9ea980e13ba292e3d0b8bc2";
+  hasRunfiles = true;
+  version = "0.0.1-r1";
+};
+"underscore" = {
+  stripPrefix = 0;
+  sha512.run = "4fdc57d0a36aa5646c6b960b7579a8111441659469df32beaae06f54e6e835456810b1d9b5d36036510befd5e80b5b481b9179a6b24364bf8f858ebc97039ab2";
+  sha512.doc = "e1f0730b39a5d25cc52160e090b797ed73a5becc16b6813cd0c2f4bf78696b23aec5c82367c347d0e734f3b92761ad2090e517bb6dd2a40879639f62149fdba6";
+  hasRunfiles = true;
+};
+"undolabl" = {
+  stripPrefix = 0;
+  sha512.run = "b753a9d8a4809118a76b9651c5c7994aebe5c95019b408c59b356135ab34fe4e463099280ea43fc4e47692e32af9570be929999a661fe80ce993f25b85547e10";
+  sha512.doc = "d7aa3497adacd6a5e10dfc9ac19762ba3fdabc74eb1d50c22dcd05e8d4a02d0723efe3c7e297050ab607525ad3611cddf87cc50d640394c4489d765fffbbe8b8";
+  sha512.source = "dbbfbc331830b1d006d746a7ad0a7578ebeb805f7c8b1fc54cc5a502c878fc8b026ff781e05b5510b2331be529eabbd6b0308811b5471f9e4571cf1172a011b8";
+  hasRunfiles = true;
+  version = "1.0l";
+};
+"unfonts-core" = {
+  stripPrefix = 0;
+  sha512.run = "5b405d4d77d15392ce5c90e9b50b6ab68309fdff67313af2749ff0865f46ba02a40e4850a690f69834f0b6a7c7e7ac33d3d422a9b241586433718f82de31bc30";
+  sha512.doc = "aabc766497c311a943f0a269d5822a44ab6baab6c8a82fddecf0b53010d794173d417f46fa6c073d2db453540a76866dd2265daea5879ec8c0ffdcd936d29a41";
+  hasRunfiles = true;
+};
+"unfonts-extra" = {
+  stripPrefix = 0;
+  sha512.run = "ba57b43a7df5d1f9565a08e0a0588d9a3ac9702041763ee663dc8c906279f32c363a88e1c1be098e0d4e9b26550121e686cbb6fc6b0256bb91535a4a1b12a083";
+  sha512.doc = "5fdc1ebd1d939ba99d4bb11c2d89128a97adaa4a0696abbc7517ab55ce39b87e7e7801e7a30b93c1f95e92bacd7d862144191f0ef542561816f6d1b84e9a7131";
+  hasRunfiles = true;
+};
+"uni-wtal-ger" = {
+  stripPrefix = 0;
+  sha512.run = "d1b6186d50733f87576ef6509f7eebaa17651039d882f78abbfa8ae23ddf7b896a90065fd5ff83a2e216485c22e865057f715784fab37ad9440616297d67a26d";
+  sha512.doc = "ffee19f2d4ac337f7615b99946287eb902d2841b48f9d5c49d51604b45b7eaa126538732d64b319a8ba320f1dcb9b62b45cf608dbb0059f37975a1220022c333";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"uni-wtal-lin" = {
+  stripPrefix = 0;
+  sha512.run = "803107d89b4ce6fe120bb528c684a65db3a9c70433abfd6bcebe2a5d05e6c7680256a407ef5f0515a56915c5c1e0637a183cc866631558e32afd96a0e45139ce";
+  sha512.doc = "e88b2c8364eeebf3768d0d562447d29233280daf685d56fe791d25b352cc64c4c95be3bec198aa6e5502287a654f3088e643a3a58edf7e55d0d899eed5b704c6";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"unicode-alphabets" = {
+  stripPrefix = 0;
+  sha512.run = "281c7fc8b290aeb264bfad6e69a7e6b00636a58b15a29129c7c7003292d4b13570964600e8040ccecc1272747b9b84d36f8d5210c231a108fe22f9c79882800f";
+  sha512.doc = "f8297f2386bea8975ebb27a73044ed464077dcd7620bf7adfe70a3d07e8814c8da28af12d05a7192e883b9d2f179be3a928bccd77e557a4deec9c545f2f035d3";
+  hasRunfiles = true;
+};
+"unicode-bidi" = {
+  stripPrefix = 0;
+  sha512.run = "35e32b9959e698ab0d32ef578376fdeaac54c1acb9abc584e742a7caafbb2cf82364d58d73ad07de4cd273a5c9c60e4468df74fc4c21fb6552ddb5be725e384d";
+  sha512.doc = "44b76c810988c541c5dc6cc85a56fb81e8c2aa97afb84192477e57f59423e508e34aaa0542009ceb5ddbf74c95cd662697544af1cdda1d0c114bb3f0507493d5";
+  hasRunfiles = true;
+  version = "0.01";
+};
+"unicode-data" = {
+  stripPrefix = 0;
+  sha512.run = "7fefa735e9ab3499e6764b755a634d0161b776a8f5fea07a2da7df0506247eb6f15034c193affe83ee065894eac33d037b13af8a8f72e0675c4b377f1c919d60";
+  sha512.doc = "2442fd1bfc6add0c9dcefedb33a14fb7ed0d132efedc1f82cba3f367c2a759779e5585ebc8e76a96eec7bf57a3083676d704402444e10b03d060c5ee6edd235b";
+  hasRunfiles = true;
+  version = "1.10";
+};
+"unicode-math" = {
+  stripPrefix = 0;
+  deps."fontspec" = tl."fontspec";
+  sha512.run = "f1698aeb2dada60c9ae2aae4e7471277cf8d34746ae0d215c26cf7c2d6683c9c3b43bb416cdf8359706c76bbcd0543bbd918aebf34e09284f0cdb8831cba41bb";
+  sha512.doc = "b9be53c40781bee98b58e97b92b01423310e991839c03a67e75c650ceda56a643de702b8fafb0097ac246c44a343f4fc8aced0fa8ab0742fc2c3f7fdd8e9ab1d";
+  sha512.source = "432cd02c01ac814b0989b0b845a059ffe2ddc8568a5e3f77ef672d01fdb4ba599c5d1fe0c15c6a32fb4dec6ae1b66603c006c86ab5813a8202323a02f16aae0d";
+  hasRunfiles = true;
+  version = "0.8p";
+};
+"unifith" = {
+  stripPrefix = 0;
+  sha512.run = "bf288fc67865b2440b7b62633a04779e0172ed139e6ca4f1f88b21ffc84147663c143867d204b54d49f0d0f4d1aa0f3ef689dbc36881198398512aeb735c717d";
+  sha512.doc = "f185887da8604b1e24d9dcd7581b071e65dbdce6e61ecb435e99c19fe969a5912974af8430eeb22e090a8d2e1100a3457ece22cedc84aa10d589957e0cfd61cb";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"unisugar" = {
+  stripPrefix = 0;
+  sha512.run = "01dbe995d32b49121e28163c11f89e51d4c692ab864b3dbe6305a0e4364c025b13751c137df52d24160acc9a8080fbee56fc7a5af522405c3d0564486c151260";
+  sha512.doc = "8e6fdec36271f3561c768acf095b6fc353da07864829322dd0b52b1784d74793828951e006f8c56a9c38849b28ce186682d906bd7bc906739b22782db2102021";
+  hasRunfiles = true;
+  version = "0.92";
+};
+"unitn-bimrep" = {
+  stripPrefix = 0;
+  sha512.run = "595883fa58169e9cd7a860933f19847895ca02d3a684b71536dfcdff54c5fe6410e6cf6fab8ae9574cb9a9180ce24f3ddf41f817ceeab85d0c65684cdc9b3909";
+  sha512.doc = "3049a0bfcbae6666f309979e2c2b8d52647d3c445992201afbbfa28684b83adb2a1ad5f227360c49826ba2de2cfebbc87195801c38413f5eb26bcd793b77ca61";
+  hasRunfiles = true;
+};
+"units" = {
+  stripPrefix = 0;
+  sha512.run = "a1c3266bd95d8668d67e7dc451258f7a3a0362e4435ab70a574be5f7ac44bb5fbb7b30ded852602c73f227f57e8f7bf61af148070b9eae6103a982f726869a2f";
+  sha512.doc = "e8a1d929e9817539a5fef6cd89c8d4daf60cc0495fc7698e4708eefbf60fd36daf88ee5cb668e9f1d53978d53253bb52ef6b3e6d1a313708022e5218c99e89d2";
+  sha512.source = "a6aff8a5917b48ce17a62de74bf327e0bc2b4a8cfc8a77fde67cfa710d8715b0d8dda54837b3f895cd769649444691df5fafd9e486bb37f4e9af110584f676da";
+  hasRunfiles = true;
+  version = "0.9b";
+};
+"unitsdef" = {
+  stripPrefix = 0;
+  sha512.run = "048b2d4f3b160a359a8db5a66b9bc3bf68545384c39c7c4964521aa2067a35e4524734e082d5bedeaf3ff52b6a5043717ca6f510cce0d041b0968968ffd232b5";
+  sha512.doc = "c1e6de470c8b290c66f71020794fa5a855a0c9b22d90f629c8ec0f6ab110ff780c0f39291f0309348711cc2acb60cf52f38538da8894803cfee54f9fd6fdc9c6";
+  sha512.source = "9ab403624c578eb8f33801309e8c7ab0bb0b53f5bd0de0ad912a5ed6955a5d3ea0d44bb43b61fbfe5cc60a667cd908f85061c92fd397931a2a4780d0af58646b";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"universa" = {
+  stripPrefix = 0;
+  sha512.run = "f21f9bbc0c4e730cd1b115a5dbab22df9519d4a364045e292eae6b73741dabe0117c53759b7db7696c88241800970801335f7537e19d448fda6f72569c4eba50";
+  sha512.doc = "3d5ae6da093d5671b369f7db4920baab6fea25e58e11926e2fffaedf1b0699885005f3d0158eb2a6afea9ac4f08ec63c577e99da7cbb75e33727f9a97c8157cd";
+  sha512.source = "2040de94a8a45c28a6c8c50d16a5d72297c1c8680f778a3fcf341cc35622c46219945f89d6b5ddffdcbc32be29b93505624fa450ae202f3ec53d61befb0d248d";
+  hasRunfiles = true;
+  version = "2.1";
+};
+"universalis" = {
+  stripPrefix = 0;
+  sha512.run = "fcf890f52623fbded89b6dc5e6a8ed425354437430f66a70515ef7cfc126e6af20331f557630205189c7aa676532795d77415f2b4099b1fa46f460dd1b0f2011";
+  sha512.doc = "4cee70c65d7f83a5d280550934c47acc59cffad87d78364ef84d397914127f43fc74b469469371652a83625d0fbe97c2a50fad76f559f39924b1995bf6a09baf";
+  hasRunfiles = true;
+};
+"univie-ling" = {
+  stripPrefix = 0;
+  sha512.run = "33cb5fbb0b8cf2a5a49bfab100c584155a965bd1304a8f16e78ea3c5e5007e43580f3839367cfed28e6f20e8e6f653e1fb9c7aa357e31e41e8f688d74a9f8800";
+  sha512.doc = "52889934cb166ecfc6d5dc4433a9e1c4df927007584b6513d5a254734fd9b82c77af4fa535ddad34494fb207a41167080828500cce02b34f2f88787b8ec783d5";
+  hasRunfiles = true;
+  version = "1.9";
+};
+"unizgklasa" = {
+  stripPrefix = 0;
+  sha512.run = "ac96ff7105cc0a6eefa7a797b325c6e3cd7a0e59d31a6ead1f715d37d326450fbb3d39d6bc5228df5861c5633ab8be027f7652426c10e0ab23a2c9ab68bcfd98";
+  sha512.doc = "00e373b284ea78d596519d982efe8d4c8f59f8abbec67c314bf361b1744d35fe2846615b8cb7d38e1516503c6ed49f9ea38718c31a760f3d19ed4a7686e8bebf";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"unravel" = {
+  stripPrefix = 0;
+  sha512.run = "862cdfee766dcf3be322423c7f3388b5bac739879f0910d7a3a5118a7813b86dea9e5c866c3bc33648e376ff223be55c18fcf56247e3082c199b5bd589cff49f";
+  sha512.doc = "5da7cdfb916e986ad783e43c79a57713c2d713061866a19fd975c157d8cd328b80a5620fa583b7964dbe37b8ac74d9c0921c15cef57e76266f52c62412a8befb";
+  sha512.source = "0f9791862c2b1e8ae4c9d293bde5a48fbcb49e5634f75c9bdff4d3ebd51f9e7b8f820b9c5f860f16bd15a6de0b04e112d96fee75313fd3316aa19a01803456a3";
+  hasRunfiles = true;
+  version = "0.2g";
+};
+"unswcover" = {
+  stripPrefix = 0;
+  sha512.run = "e51938d3e31bb75abf7b8af27a7cfc47efde49b1e569c2d9b5d170bd4e7a29479571717d9932de22907e2f23093e977959112d4c1c42687fbaecddd6fe1b990f";
+  sha512.doc = "ea443054c6c89bac4ead8218e12a4a8020fbcea1204eb12f237f0a58f4f303797b27bb45585b78167d0a43a6758d257da0b140deb563de7cdc9497b8df56f329";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"uothesis" = {
+  stripPrefix = 0;
+  sha512.run = "8549715b39426264ae94d5618f13837bf20e48a350cfccc5642ff5e246ad84e04050e2def0780e8f3da69647d86b6795a009215da1277f43ab9a8a3b5acb798a";
+  sha512.doc = "16af5c258ae738401885a1451675ace657e169deb37670336ab87ac39d30128c98bff91b5f9f6f2de9961d981b2719f94472692c5456913bada6e7ec6bbb60c6";
+  sha512.source = "3b6a5f3ccc28877e4e48000ec88c480b70f5f454c481f970e6ba409fe71e19cee64293cdbc9fe46c8d0a498401fb2f46f2bd6c1662c3bf19a2c24e1c10c3895a";
+  hasRunfiles = true;
+  version = "2.5.6";
+};
+"uowthesis" = {
+  stripPrefix = 0;
+  sha512.run = "060684c777f377fcc98b371123cfcd9717a113deb0f7fbd99cdf6cec65e66b77fc44d50a3475c8b1e8071eec80c2e6b1c20437a4432d6d5fba208fe3f06fe127";
+  sha512.doc = "00386265fd93cc89146fba04eff87b55fc250e3429ca5d769f006ee1e8c581fdd96702830a90ca4eeedd35e0d90305b5ce19dea6f16ef5600479d1fc1ab2e35b";
+  hasRunfiles = true;
+  version = "1.0a";
+};
+"uowthesistitlepage" = {
+  stripPrefix = 0;
+  sha512.run = "28f5d3f8bba3c0f3ee1cd7ada8bfdeb815ec607565e7385fe8483d66aef9b9e3c39cbb9796f84c58e8a6b4772989c2aed3c5407d64aa740eed2cedfd26d60e8a";
+  sha512.doc = "beda6c309230f20abe8ec32e41258a42806534bb181e4cd070c7c9362a677280a0133b4ce83fc7475aa785a778480134125a162ae7d96d791eeaa1a9af621dd2";
+  hasRunfiles = true;
+  version = "3.0.1";
+};
+"upca" = {
+  stripPrefix = 0;
+  sha512.run = "3423a3a7d42273bfb28642d250d5000fd55d5cfe2dfb5ba0c2f875ced6c6df344866a5512a624dedb12d6bb9357f02a831297f4aba463dbd5e69e5e8dd9941dd";
+  sha512.doc = "f19dd751bffb9ee92ee80f74f692ac410781e87817ee841c01f37bac87fc770b9fc97d488ffbe97490206899653d329034d82cf649de0ee52cfa4643f956d7de";
+  hasRunfiles = true;
+};
+"updmap-map" = {
+  stripPrefix = 0;
+  sha512.run = "a7b7ae8316e0e7e12965fe2d4bf87aa2cc6ffa5d6596b833999173e26e6030f322d1f5d24f09141401330b22037b64eba260169b3c1081277e6fc1a54c028a6c";
+  hasRunfiles = true;
+};
+"uplatex" = {
+  deps."uptex" = tl."uptex";
+  deps."babel" = tl."babel";
+  deps."cm" = tl."cm";
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."latex-fonts" = tl."latex-fonts";
+  deps."uptex-fonts" = tl."uptex-fonts";
+  deps."platex" = tl."platex";
+  deps."latex" = tl."latex";
+  deps."latex-base-dev" = tl."latex-base-dev";
+  sha512.run = "c4838a2c99df646961f6be9e8ba051a97d5943f1f3ba25aeaf668c5924d3923c888d02a1b7ca4317d58777cb5cd17b6598e060583021e0a27f8a06ae586bd0ef";
+  sha512.doc = "c50305ae9898889f877de69cdfeb79eb08bdfe806976c21053094c1b7b0203ad83356b8f130c68ff68c649496c3685ffd35952f2e10dd6eaa30de41094d68193";
+  sha512.source = "0e5f6088d7bdfad79a26d5a99025b0fedd0a85bd461f24c2708dcacc7cf49578c42bef30f3682fc1db05d3e3c09dc572d5119f024c6e48d174372bdf3e49ef8a";
+  hasRunfiles = true;
+};
+"upmethodology" = {
+  stripPrefix = 0;
+  sha512.run = "ceb42b6b890c434de27445c564999e5a5c8ecd962061658f27cfbc59aaf405fd33b2a44474fb52b927e9e8721315dd87f907a084647433b251bd17a5ea79148e";
+  sha512.doc = "a75984bf9de36b382e29d818736963df4a19f341240f227dacb1496f034484cb3340600e3d77ab82435781ce2d3fdf1703d8322a7a9c4607e98fa41790be3f60";
+  hasRunfiles = true;
+  version = "20190928";
+};
+"uppunctlm" = {
+  stripPrefix = 0;
+  sha512.run = "522b68bd32887ba14ecd927c49c5fd57a84a1c0f9b8a0bfad65a4d377b68a7bd449754dd411a72fd83e5736e32e2c47cb1f54155f72395c465e4e09ad1d09dea";
+  sha512.doc = "d0f67dba683a40a6392121cd53b58df6d7ec6ffd8bf52df60f53537fc1b389de178dfceb1e772dfc9e292cc543448dac3a85cc6b712283b384ccfec4655c988e";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"upquote" = {
+  stripPrefix = 0;
+  sha512.run = "06360c313124487f291a8daf7399a3139cec8c0a05be12724cedb3d60393ecb07aa31e34f9b74a83048f5752a8d826505f91f2c85d34348264975b48a1813fab";
+  sha512.doc = "4b92923e8af2dcd65e82269994c766b88c6f78f6e7b8d10b9f44889832150711acb0cbaf467d595d6745863f385569f7eeccb4ce69df8361e56910969532e314";
+  sha512.source = "dcb227a6ebb481e9c4abb9f9ddacafda03ae4a445768a3a242c6dc3bc79f83e9e5f185db4d353916b4d50f5aefa9884bc52fbced79894e1c00cd7f40f0940884";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"uptex" = {
+  deps."uptex-base" = tl."uptex-base";
+  deps."uptex-fonts" = tl."uptex-fonts";
+  deps."cm" = tl."cm";
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."knuth-lib" = tl."knuth-lib";
+  deps."plain" = tl."plain";
+  deps."etex" = tl."etex";
+  deps."ptex-base" = tl."ptex-base";
+  sha512.run = "0e2f30249de81eb8040e74f0f99c781fdb8a93c9f507fb58329f226c8347cb8b9d3ca140eb1bce6ba8a82fef977e2a6a68c30bdb79ae44e2ffa6128899e669ad";
+  sha512.doc = "8d962e3bcda4d49fe6aadf89d0dcdaa9541fe01e50fc16cf9ebe3066b7df9f7bb2db85c3c6fef228125c8817a7ceaf2a2774313e75e98bd1b0aa429ed0f4558e";
+  version = "1.20";
+};
+"uptex-base" = {
+  stripPrefix = 0;
+  sha512.run = "532360808157041a67221f12f78fea1197ebf083f3f90896b539fd7ae9501bdf696edadc6c61edfc1e5d1079a480ec7776a814dd8adb08fae194728c7f61e978";
+  sha512.doc = "dc1470c66f000bf80851dd317b7eb26dc12c567bef647e2fd91bbe3f4bc7c29695b7c327781a23e79ea86a8bcac2db8e328bcfea2031caafb9f63d85209bae2b";
+  sha512.source = "f8917edd4200248b167bad8366c9b51e247591379c4d069d292cce513708ef7b1412dd66bf9fa6156b703adbfee7c941c6f2637c834cfef18fa9adf9991ec3ae";
+  hasRunfiles = true;
+};
+"uptex-fonts" = {
+  stripPrefix = 0;
+  sha512.run = "41fbb7b4a3e193744e36cdd1ab23145709b2ef94de30a18dda322f1e0539106f62be95b1a763750e72c81a7fe42053326c56efe0486254ba486c731b65bf47e2";
+  sha512.doc = "9b8004ecb67cea126f0299d3eca749d5f011b0b3c50d23fba9a3adb4b9e5ab6d5e0a24494b9420e3a315639eecbe86a9c740b0772a694f2b36ee6f8b7e316c3a";
+  hasRunfiles = true;
+};
+"upzhkinsoku" = {
+  stripPrefix = 0;
+  sha512.run = "03dcf2b73ca644f8e9e2589082d49a4d502adb51944fcd9ee5cf737ae782611b35ef2eda4242b7eec2b8033014ddbbbea3abb52b1bfe90be9cc1634345223d53";
+  sha512.doc = "d4c038d864b40603281f3186e21110ec96530e84a9ff88be4241cad165d09cd091b28bd768ca8ca0a28575dd850bb68ff88ab553cf9caaee6edd8d311c6fc9e2";
+  hasRunfiles = true;
+  version = "0.5";
+};
+"urcls" = {
+  stripPrefix = 0;
+  sha512.run = "5b8c80a756e45e5b847c3b970005b866f6c498eff7646155c73a9b86585dffd73e8dc66d91583dd691c910caccab60ee22a1e9dbe3aa450290fb17f019477172";
+  sha512.doc = "40b8e4ea2abcc82acb843c692d90e964932f1ad7d0e818d54eeec77340f49686aafcf2fcf3f8f4d942f7cd967754ab24ee2075c6906862266f5af56251063fee";
+  hasRunfiles = true;
+  version = "2.1";
+};
+"uri" = {
+  stripPrefix = 0;
+  sha512.run = "402974f30df5a00118d4bd2e978f342cdcdb22119059dbd0c1b2111fd1ce94ab8a29ceff88672c80d18a669d5440bd48dfcd23fa07844f492e5f7e0eda1671a6";
+  sha512.doc = "b2cc8cbcbc81f0c3db349952546e60c152044aae264d4b30aadb6b90b7aa5b304c89203b6219bb5161807bf1e4649235d2f98a60339a0cb93a588852a1755e00";
+  sha512.source = "0206e0d2907f3976fd605d78284a44c909ff23f16ce9b2490556136099e56a374bd410e1c9bd5687bb791334612af1cc5a62a8b53f8c7876bf02d921c9868a68";
+  hasRunfiles = true;
+  version = "2.0b";
+};
+"url" = {
+  stripPrefix = 0;
+  sha512.run = "164fb94cb128e997031bfdf8c602892d78813694f39f4b95bfead8a5b7e3cd9a0d9596dbe697e012bdf84b89c2551c2f2f1c7f99d4543e357edfaf2076b9cfba";
+  sha512.doc = "65596e0ce813233491959ef161be8570450c6c71c787b3253d0bce503558e63902137a6d337ad1e7cd2499feacbba4a93b7b75559750d05d7898ff2527f1240c";
+  hasRunfiles = true;
+  version = "3.4";
+};
+"urlbst" = {
+  sha512.run = "31ab9071a50258b405e2850c6fceb4d30b3f71b731c06d4fbf6b5de25d7d23509a374e6c89dd58dab869e6aa987a234c21a0c6c6a8f2780826c5acc46f784eaa";
+  sha512.doc = "0dd2c6cfda184d77866503bd94e79b7c99d20f4b9627e01946887aee80318adb26528f352fcb0db764e37d7b2292a78f0d80bcb51ca7cd95593a879063154315";
+  sha512.source = "96d336764d7892af97b7fbbed48a121b8e058efb56364398f50d24bd598ee387b0544712bf95886641077c22d3542ba2facfa125a89e8072c0a65737ac18cd97";
+  hasRunfiles = true;
+  version = "0.8";
+};
+"urwchancal" = {
+  stripPrefix = 0;
+  sha512.run = "beb82950bda88e7170c7ad753e93859f96190f30e89fbfbe1cdbe37930b07740f70da40124639c6ab14be93fe79c5e87b35296b68c702888d3e9e25100e86a9c";
+  sha512.doc = "8f218f76d45a2f3ea9be173ba1c6efcb8a7cff26a43149b7e0ef4fc535a4638cffe69358d8ccac44a3306044720958ea9189996e88a38d560d264f5fba6863ba";
+  hasRunfiles = true;
+  version = "1";
+};
+"usebib" = {
+  stripPrefix = 0;
+  sha512.run = "94e0ded0c7e7ac10f2d8ff9324afcfdd2dad8247cf31cd6b404d9c2b12e223e6f435ec9d3dfad0ab510b943050444f5206788540a948e44f44c5d011596cd34d";
+  sha512.doc = "3b489185729ac7d93ebbfd632b77eeb865b39043b2b68d920a6ef561ac55701a44d362b84c1fb83a2f59770442a655b779c6e49287c9d2859c44140e61c543e6";
+  sha512.source = "a0c64ad5a7479da4906b848a31ceb02b047a98e8e2c505ee748f2eed4ba27dc8b6d89d8ee3a171566417315cc2b83810f514f1a0c11f1bd4a28b57cca03676df";
+  hasRunfiles = true;
+  version = "1.0a";
+};
+"ushort" = {
+  stripPrefix = 0;
+  sha512.run = "2ece6efb162a13c37413e4fe2eed33ab7982d681fcd9435ce53248dc4c573cd90ac51293424385aac29b84159b34fb3f7fde2bc8d39eacc71f0ecc91c8db7af8";
+  sha512.doc = "d262bb270e41cb7d9378d42ec075a81158d401b737acc7788722ea7e99d896de1eb98c04a65e733d6e83f6229a9703f72bfd0a11e36e52d4799e82e19c102d5b";
+  sha512.source = "a26cdd79055b74cf30202c162fb38243571ce2bac990ea44a0eecaff407951aebd5ff4619cafa6190ef8ba6101d86a800262ad1b09972dbf7b207398b82da672";
+  hasRunfiles = true;
+  version = "2.2";
+};
+"uspace" = {
+  stripPrefix = 0;
+  sha512.run = "57a271421c15eefd41517881e951c8a55096e6bc7b769beba123813e19682407b24dcde898bc8df75700f33316a5281fedf5c24a3ffd7a97eea2bcf5f658e7e9";
+  sha512.doc = "c4b3c401cdedde7e67a2b4fca44f53c67c578fec287e22f0c1b67252b6fa4c0ed4d3a8ab1328162e7bea015536f1a1e4539fb104c8c889bb4e1549f7bf748e13";
+  hasRunfiles = true;
+  version = "0.04";
+};
+"uspatent" = {
+  stripPrefix = 0;
+  sha512.run = "fbcce7a06cc018dfba47aa7e9d572003136d5b179e957f10e2bb42b2635ef4cdd40bbef19e8f827963d048eadb23a1aeedcebc87cf128f5b28cb1ab281408b90";
+  sha512.doc = "e0eafb5fadeab38da049d0d5cbadc8fa3dc3c335afe4fd5289fe30de38f0898cdd9dee091b703f6a853eba56b32b161abfe56b3185c71512c9374585e6d9784d";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"ut-thesis" = {
+  stripPrefix = 0;
+  sha512.run = "06a8933b03e02bd092a09843686d518ab58a47a4821bcafbe9568eebbe6d4e72e7815752016200ba5d68ab193408847c9f0a784bae9a65af4d1ad06b501c03f1";
+  sha512.doc = "13dcfbd7dfe45a4d1fa0e2ad8a06bda30cf5a76c993e6a6614d4fcf18964f5d44072c9c75acb6739b8df977590fd2c55aa193a2c88665e38a4e54e4411ca85b6";
+  hasRunfiles = true;
+  version = "2.1";
+};
+"utexasthesis" = {
+  stripPrefix = 0;
+  sha512.run = "829826bbc06bbd9b8ffe585705856bbe4bc99973bad7bedd489ff23fad9cc19c4f33beb88756644d76945126983586fdf78eabb305e353cb8bde8341a3d20fc4";
+  sha512.doc = "65e3100a6acd2a02df2e95834e5e99d718cd0b73e20ef6da839cbc9831918f63a2f5b38ad888a5068b1fd87ad71ac480754d5e6b459465cbb6238d4a3b3c09b1";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"utf8mex" = {
+  stripPrefix = 0;
+  sha512.run = "0cd4c549c7b00939dec5055705658f76f6ebbe5de70e082652b761673ba5a249924fb862a319512a9a124b9cdaae8906c74439bba97be8825d4d1ffc70642c8f";
+  sha512.doc = "cd438089d90faa0e9144d23adb78ce91d85b80ce084cb92511cc23882c675cb654cb704aebeb623bb29c70b764c8a0ab19915607664895c457c583f376c1088e";
+  hasRunfiles = true;
+};
+"utopia" = {
+  stripPrefix = 0;
+  sha512.run = "5f58ac6dacaddf4110b2ac2f77fc0da90d5cfdff26d888b26af06cd6dd8f483c7a6a12e0aab3f50d4188aab9ab649d993ad89e74898d54c14b3de4948451279b";
+  sha512.doc = "ba60eaf55cc08378560048ebc6f735e743449a18d2822e6027a86e595a9634461713ceb37d15b9f0c8239f1935f910bbdbd9a0d0d6fa1683174739f91c16a504";
+  hasRunfiles = true;
+};
+"uwmslide" = {
+  stripPrefix = 0;
+  sha512.run = "a4ee1019a36a66abb6614dcf6ffdd9706b705bd18a19d34fcedba441c355ce3a7573ea0ee53686b325c6d6b485fef99dd1254118d1cdd1603e1597b0fa17b751";
+  sha512.doc = "7560c214913e9dc61d01ba8528e1bc147a4f261995294c8c938ffd853a9b6a174c1d1d47e49fa20351ea45d61dca03ef7f0ff085e8725820c24d2895a0d17530";
+  hasRunfiles = true;
+};
+"uwthesis" = {
+  stripPrefix = 0;
+  sha512.run = "07bb8a3ab65110aef8de3b606ca53060dc8f29c76de55a5a84e87d43fe0e09dd16b48ec09b9a451f2285c06450ad059c4c3f9b8d48a21572a1bffbe2ee512a6c";
+  sha512.doc = "278a7ce5f0bab547de0c8dd4a26dc270500baf8abfca1ff1a8e76283fffff4a73835fbb1daea2f6864cb9dca3e0fff297887ab10305c6a87ea1d7384d964a9d5";
+  hasRunfiles = true;
+  version = "6.13";
+};
+"vak" = {
+  stripPrefix = 0;
+  sha512.run = "b7606cf33b8e9d14f4ca4cced0620810eecc469faba959728d3b4d7f8d87023d600fb33f1739ce0e7d14d4a54936fbc682a54d8ad8c6b514a1f2baed2c79b2f1";
+  sha512.doc = "1e6f148de79c2ecb5fcd03ff1509c3a509ee40795af0e7f7a95fdc64c403f2de7f9d9ca37716b6488cd496e2be0565749222ae95f8b97e5cf7e05b3877bb6d62";
+  hasRunfiles = true;
+};
+"vancouver" = {
+  stripPrefix = 0;
+  sha512.run = "8fc852e2137af0b1e0664ecdaf115a6c4c631faf840b5564b9dca2f8c457f8fe33bd7edd92ff4590c05ab13c23a9b1771b7e688ee6f6d700a9feb01f9a921170";
+  sha512.doc = "50ec342e62a14f417b8a0d4085ca46aa701a9e2ae5630daa2159ddd6532a0c3d5769a0cd351c932bc54395f159d560a259e3996f4f157e42d0dfa41aeca6dc80";
+  hasRunfiles = true;
+};
+"variablelm" = {
+  stripPrefix = 0;
+  sha512.run = "e58a1c5a77861ed3a84f2fb372d6c3560129b656257e23a935fa9d7ce18c83b59f9863e29ff35c45c6ab800cd09aa2fe7bcb1fd01edbbe2e75112809c17faa9e";
+  sha512.doc = "58611f636d5aea5ee2935c75206e0d051345d7138d04668ec7875b3ee0493e39bba54b1941aaedf33abfeb7636602fa6ac7fe7e750837b425678eae97b7495fa";
+  hasRunfiles = true;
+  version = "1.1.2";
+};
+"variations" = {
+  stripPrefix = 0;
+  sha512.run = "71252475aec013adf9bf41460753a648420ea70fb093cadc667500a6884adcf0c6661a2d81053a733844a3f8595ccffb5ac5f7680689575d8485c47a1cc1e469";
+  sha512.doc = "75d6d8afd13f6751bad23d0adc58355d75e355554dd95971dc16ac148150990e1362ec211a3f3e6fd832ce231dbd08e50ed9d44856c763e47ddb5374b1b182ff";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"varindex" = {
+  stripPrefix = 0;
+  sha512.run = "fb7216b4cb06126970148788859d9c12a0626d25321cc591b2db5d7018ab2a76f5c6505d9cd47da6a3babc765dcedb6653a3ead2eea67f688cd883fe81d9f42a";
+  sha512.doc = "30b9f50b7357f12774f78f0792ee0321b5ba84d2c3dff96f5f98d87cf0bb811a2fee74b2bc691fef07a80eb65e13e42b657b74efb0ee334b4f04da7bfdd0b75e";
+  sha512.source = "19571ec2000fb99ac8e1b188e2f6965748c78476bb3fb2d38c2f668b02d268817c6f2670b9bd51df48c2db8fca1e6f62ac738f378a6832368c74de297f19b679";
+  hasRunfiles = true;
+  version = "2.3";
+};
+"varisize" = {
+  stripPrefix = 0;
+  sha512.run = "c1a900aa29601e9bcc5d1047ea5bca0bd3c079d05e8c42c8e3f85521cd8a1989425650d0e84ab0acf2a38e468bc4823e149cf1e799da8eea1d6af4554cbc0c94";
+  sha512.doc = "f575e4faff4a80f72108ef5b97abb0bda08573669bb8b28592fa607538c632d3b59626282a0ff8d7805e6b66121b2c231618901a9dd71f0242e1a0875a3e2068";
+  hasRunfiles = true;
+};
+"varsfromjobname" = {
+  stripPrefix = 0;
+  sha512.run = "0d5fb07c93fdd08570ef1dfa120870f4619b124cde769f48b4107c41827dd65c023840e1344aa283d0b21bfb0af2346135577510119579c531731f132bbfee1a";
+  sha512.doc = "57e3111b8426ace2a838a128dae49a6ffadc6892e4b85cfc83eae3b9422dc4188e505fcb2a281ff38cbeb18e385ba1da398111c5f00683568999004ffd5eaea7";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"varwidth" = {
+  stripPrefix = 0;
+  sha512.run = "d44fcd1912f1751ab18f5d7d00ed47f42bed3ad2863b35781a83df9c881943c3e1916d003361b6e64640326541f43a37abdb0a3cdfe07e4d0cf7980dfc5fe1bb";
+  sha512.doc = "ba0c0d562a7c9db36637bb18fa6f0d01661b229c66b8f0d2bd7cbafe286b81485e84bcccd06c4d47561db8895cf8933ff11d08a8de0b01405d6c7dde443e86e6";
+  hasRunfiles = true;
+  version = "0.92";
+};
+"vaucanson-g" = {
+  stripPrefix = 0;
+  sha512.run = "e4bf83ea01ff4162f95dd595b93635ed988ae081d0c65ada59ae64c6c64c730dbb92ae049d22dcc20d6204c5a7cbca5cd643be6c572e51a3aa17df88c6f1f700";
+  sha512.doc = "520aabba38562e208b464fc0d4e9f9a138c238abb94b43e89864e4ac21acfd35e5d6e224e855ab4baf9feb1df736b7e937508f6245e5f873c5c8f8a75947e014";
+  hasRunfiles = true;
+  version = "0.4";
+};
+"vdmlisting" = {
+  stripPrefix = 0;
+  sha512.run = "58cab8cd7d23326b39e76a91db1bdb0b0cc9e1e6bf457d151af39a4c94886f623b8178de835e673118d5b797510d6f2fe5f97f6c0c8b5bcf679b9158ded3c941";
+  sha512.doc = "a71b798d364f429c4894db38863301c1601ba7f2bbb2cf8e4394b48c5b7e3541cefcf915ca52860c0c55744ac2aa8fad82ea66142ed2fbfa81c05da211f04f74";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"velthuis" = {
+  deps."xetex-devanagari" = tl."xetex-devanagari";
+  sha512.run = "9c4a81758b71d4ee815bfbb1d0336d50d6da4b71e5d7aab6d5797a259b165b2d9559afb30484f9c3582002d7d9c536f5479828490504e74ddd56719403757255";
+  sha512.doc = "d4d2f9692b173350419bff2f3e9ba2528ff21b467e93e63b991dda294bd562d4b0b25b5187d8348963d114bb4d28925ee74b20222e0946400cdd4a0b2b6194fe";
+  hasRunfiles = true;
+  version = "2.17.1";
+};
+"venn" = {
+  stripPrefix = 0;
+  sha512.run = "617ba85e996943d62a33acb2535e23700fffc63331741065faee558bebde608232a31bd73aa79ad707b107a9adda8b454f9b81dee184a64d94f32c44d76180c0";
+  sha512.doc = "0b1940cdc2bcbb7e2f103497622c4d5971abf4f6f4885f60b35a360cd655c34cd789ecbfbef9d35c61611ef22198200b11008f4f59588a5cd111870b77ba19d5";
+  hasRunfiles = true;
+};
+"venndiagram" = {
+  stripPrefix = 0;
+  sha512.run = "cf57b84165067234f5be58b2300eebb77339c33b883895e47cffdbc7c4acb6d013db7ace1eb47ef491e21526cea8b3ab993fac836498bfa16a5cea700caedd5b";
+  sha512.doc = "966f7eea0d4c40004b9710c53fdd6838b757a2c8ed47b4098ca2d47834ba52575ac7c062497f1a6d26dadfcf0d7f95f2213d34bc638262520aade0e78beac827";
+  sha512.source = "16bfa22856952e9c0595532432eb774a2ef44f52950002db670e5f3e22af02981305ed5eda1265b6d1a97f43d9a6292311bad5268a562aff6ab00f4a14a058f7";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"venturisadf" = {
+  stripPrefix = 0;
+  sha512.run = "0f6b7369c1d589f9725897182f854f008b73dbda47078285635e87d480011bea0610da81512416b0963aa55487d646cd2a957002552ef2b8609d4536c0dd96bf";
+  sha512.doc = "b46066744794a8ae1443b18bf1f6ce3d586c8ee8fa5c3273db608751979089b2407a6feab421a3c3c738a682e83e2f44bc5ac86eef1d51fa914ed0f0df985bcb";
+  sha512.source = "2deac2b1cd151e41ea604d99209174b28de33d9f9358353b7d8b120c8e3cf45552947497e6d54cdf4024f5a071c39246221fd25cbca09cee7984755036993a40";
+  hasRunfiles = true;
+  version = "1.005";
+};
+"verbasef" = {
+  stripPrefix = 0;
+  sha512.run = "483a75883ea602f674abec796199c5206420079c6ad5e4c3ac22bd836e7ce02f686cc8b9b749f806fe8e44bce8bd35fc6b17865fc076c72f2223143ee0e8a123";
+  sha512.doc = "c88b1275eb4e3b87172e6cd157ad868b7b230d96d00ca0dc550757fdb89648a40b1090b771dcd0776b6f86a9194c553f265d990220348e5bbf9c7aa792f42914";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"verbatimbox" = {
+  stripPrefix = 0;
+  sha512.run = "dc686ec1e86c877a6f1467f4935f2337aedfaec32bdf867985ef05405569572c72d3593e75580c72a7bb3ee698798813094eabf738b3157194517839fbe47de5";
+  sha512.doc = "9f8fa05294b68fb0994f01e36b468d341b76aa97bde983c7eab781c92c8bfd898033235a328a1fa858dee457f515d6640f780b330600418f2a7eb0fb45f0ef3f";
+  hasRunfiles = true;
+  version = "3.13";
+};
+"verbatimcopy" = {
+  stripPrefix = 0;
+  sha512.run = "e415f9d74f35e28c73bec5442124b7c426aff8de013aa8a2af9c234ae3ea20c131d5ad21803c92eaaf6d0aef6584b7f9b83218f9665a959ec0d6ba3ef606b081";
+  sha512.doc = "0281da688f11d2a2fefc053d8f7866878b337ee85114c551176d6c329009f8c1a8479ccb29f202106f745ba215728e7f08509898182521bcac433699e22843a0";
+  hasRunfiles = true;
+  version = "0.06";
+};
+"verbdef" = {
+  stripPrefix = 0;
+  sha512.run = "f6bcac8b35bfe707d4e39cf625987ddee6197977894e9f8ded9e3a715e0968d2d1fab07c57edf1d38150ae0c9cfc937230c9fccec431e73ae235a4cd44ed8609";
+  sha512.doc = "e64d4bf3018de72a131e7688ebbfcbaa59914c0542d2c632a91097a77f404307f9bdfc613638badb3ccca3854313f17a7a5bfb6426f467bcc98ed235af6ba49c";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"verbments" = {
+  stripPrefix = 0;
+  sha512.run = "7b5780efe1b6e4cc62909df5d5cd4a03be3dc83717f20738a83f37f539103ad12e382c0a3891b8e81b44086f92b7277b17e88c4e7d81123c04941c38114f23c8";
+  sha512.doc = "744471659373efbe040bd0698a9b33a0942d5df33312ad3cdd0f02c0e16fd2c67ea44c4ab13ce83ddca6a5e8ca68c8c8bc40c1a64470a9716511e2275683b004";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"verse" = {
+  stripPrefix = 0;
+  sha512.run = "3f9878dea106ec87f2b64960c5824fda6eb9f700b753a530cec7e1b8519dc9a817cf7ea74c13eb806497740501122790fb29f6e3cc383a8a89ad10e756b7a00a";
+  sha512.doc = "6f255167db9ebb84cf86a14e6999410efb22d087d97b82837c3ebc5bf69f0990e77ae0325618ba3ea02c116741422a531f646929eab2b5810b9f3978be6651f2";
+  sha512.source = "ce1f07f40bd329383d8a0fc97038ee975d61b58eb0ff60f8a1894a6028b2afb9db58b7db599d252cb88fbc040d9938b7b934b6e8ad683e7f4de2be9a15b37820";
+  hasRunfiles = true;
+  version = "2.4b";
+};
+"version" = {
+  stripPrefix = 0;
+  sha512.run = "9b57997e63fab25d916630bb086b7d4372e094e64175caa761c20c3c2d426a58fdc42ef661bbc1ec47f2a8d9c617b7e4dc405499c01b84eb53ca0d10f6c9108d";
+  sha512.doc = "9bada1489523eccc809d4b9654411addf31f2d63efc1f1f9d68b81e2bb3d9365e2709f55a77c53c3d2231b8da89114bd5a4217c8d18553234a980d379b1a0084";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"versions" = {
+  stripPrefix = 0;
+  sha512.run = "4a6474f6a014789daae358c5b73a85bcb0894eb67d09a530f3bdd8e4571552d0a3e1983b5ba40d33122caad8bd457f255b7f1bb34e9797c5137ccf461707dbbc";
+  sha512.doc = "ffebda27a9000a0c8bd8462b750e34331968aa1abd5c7039e198950eac6dc02796da6a02a258bcfcd84ca12b3d5f6d0ab11587bb5d6fa9b3121297aec2179ccb";
+  hasRunfiles = true;
+  version = "0.55";
+};
+"versonotes" = {
+  stripPrefix = 0;
+  sha512.run = "3b1a33af069abaf1bca5d70c64f3f9034efd10c2104814c3db5360377cf67dde56794f950b1a96a5fd44c0fa3460922887ce97fa1a3eea31b54ce1f16c88977b";
+  sha512.doc = "1f27cadfa8160bc5ebfe6cf93aa617b7a1a751d98d7e7dac052cfc50a450d57967104fcab00d89feb08d0e0cc62551738eee5e17e8f65889e9f32d4e6d2d220e";
+  sha512.source = "e2f738d24b1a1fb8f16bd61ce86f21ee8896fa7236c61fcf8949ad411daf675f9128c4d48cb4a13df7cbd9066769a10e1f6ab6d17b2dd4f0d9188c9c21a33e70";
+  hasRunfiles = true;
+  version = "0.4";
+};
+"vertbars" = {
+  stripPrefix = 0;
+  sha512.run = "3c3c905c6bcb013a36bc2eede14d84315f49075ab5f63376e9a440e4e7fb281ee5086b5bf1953782641284027dd8e7058e0accdafdc9295a19ebfc0088d8f7e1";
+  sha512.doc = "de6df3133c801e941cbb00c552cb2cdb1d556f099c402a0a66f460d5c7c1c6e28ec7d983563f20a609a5b5266420dcf8c204d1b6bc685031cc41fe2770a5ea13";
+  hasRunfiles = true;
+  version = "1.0c";
+};
+"vgrid" = {
+  stripPrefix = 0;
+  sha512.run = "ee46d8ae234af6f0b3bc8689cceab7d5ce8e7229b132c396a000cca15cde0ee422f91b2d4fc485c743e3a896bbab5ec90b24ea5d398bf63342751bf75143330a";
+  sha512.doc = "92e5498cea29d5fc1b373619e97c6692fef3f63002757a954649c0c4f9ef7b6594d61cce017bee709f0f1898777f962c25053b64da8079c8c9c9893f821a9aa6";
+  sha512.source = "5589904860a74979a070224b252be9b302e0f7128946624fb671e8618a2afc55c526631217348eaf84d7c0f827dfef7aac7a13a953e1ff82a61211eb2e070e36";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"vhistory" = {
+  stripPrefix = 0;
+  sha512.run = "f1747b1c112c69cdc506234c571335647b365eb92a4054c70cb08752dc1da92ac4e84d533083cdee76f6398f5f1bf04b20b94cf38ddf13947d4086c5599529fc";
+  sha512.doc = "60a8100cc10df177b04eba8751208c515eee9601806324184f737491707e1e4d453a92b0d12a16d6cc1af319a55c79afc8922d1378f8714990c97b5779540763";
+  hasRunfiles = true;
+  version = "1.6.1";
+};
+"visualfaq" = {
+  stripPrefix = 0;
+  sha512.run = "6b88343feaf39cd314e9453452da245054d3192f02ba0b2eb6e55a9bbca434e9b74cb16ad0902a6f5352d9ef945a4176e2e1998a7f0bd1cd75d2a3da7f4a203a";
+  sha512.doc = "eea0f022741d52ebb3613e977948c0428ddbe5b7d41faa659e888b48b7bb4e655a0e693d1dfd92d40a52a67e6df9ad386ac64d2ffee7c2732feb2077d4b24f77";
+};
+"visualpstricks" = {
+  stripPrefix = 0;
+  sha512.run = "fa501a3ed6506fe52d3d31515f453db5378c7d01415ed05c0870ea15051d34dc5a564ab8ef2ef4608f616b657ecf29f5b18a8920bdf1606f78928fc505cfb0d1";
+  sha512.doc = "3d2dfea937b2b99e148fb0220067b9a777126854d82cd1e591f84a1d13e1090755660509814e4690dad20d2568286ce05653d3b5c7c6653df61d27229c9cd5e2";
+  version = "2.3";
+};
+"visualtikz" = {
+  stripPrefix = 0;
+  sha512.run = "fc5cb3e2d30bca419304b5f76bb75f9da0e22b6624c7ca658492e2758adf0dfcc24552648c983b0afd390bf7814ca30fd7d2a8b3037b6ea3fd95b2f608b36b19";
+  sha512.doc = "556f4b852058c46a7d2a34db4898bd82429835ed4c5fc1eaf1c8bac9deba407c8a11fdd3eab3753b0f53fd0ba43a316c3b292cebe40c086862c6d94f8be0cc85";
+  version = "0.65";
+};
+"vlna" = {
+  sha512.run = "320aa1e734120d4434ff05b2560c8d131daeb3a04d8f2ecd4e47e89cbe05e72ad459698cee63c05fe1c7278335774a8e2e4ab6dcf07ce1ac7cc15dc119c6cba0";
+  sha512.doc = "e9b2676f12fba6415749cf72aa0d8c34c328941f722e2a11d2372220dc615acc0b5ffaaff57abb24a8dd0747894990bce912bf8f423519aaf8390b6f03061835";
+};
+"vmargin" = {
+  stripPrefix = 0;
+  sha512.run = "dc0cdd4696a44bb6bd189dcf73c69f1b2c8790b9936b1c6f35013d9342a97d36a4bfd8eab82f3e2e97f1cc952459cd9a1909915348b25f01df446c5ffc452e71";
+  sha512.doc = "ca8ebc274efacbe192b73c9551294bfae60b0cf7ebaac8425cf1b88e10ecda7f3230c336883afc438349f1ea47d66d369b52bb415c482803fb742b16cb483348";
+  sha512.source = "0ad7482be9aef59f55b1a489327c03e9d9560f10c984a0f244aa836ef12086dca2d834c033a36bc95233d6de9b801ac483d2dbf472f33e9478c5182d06a86cb6";
+  hasRunfiles = true;
+  version = "2.5";
+};
+"vntex" = {
+  stripPrefix = 0;
+  sha512.run = "f39c04998d0685125d494c1a314f4cddb9e2924af4eb4bd8488be237125d818199640041a9c23d6b8839b9da1861e0b621f71488b316b65903c5f3a0366adec0";
+  sha512.doc = "506c719a29a64611cc7ba228f1e13da9abface3168aa0122ec64dffa423a7c38b6f3a4fed43b787eb60b82bb8fec71a96e4432a9b0c05702a804a31997ccd49c";
+  sha512.source = "93f6fb8e9d49e8a7219a584aacc5f957da0ec2f7e29cf0c5dc37dd5b063cedf4eb2c56662b28c588083b1c158504da5da9cff4250498fa6ab8bdbec9e3eac875";
+  hasRunfiles = true;
+  version = "3.2";
+};
+"vocaltract" = {
+  stripPrefix = 0;
+  sha512.run = "7daa3923a6b9d84a1fae2c9bd63404c2fb4dfe3866f897895deb9ab85f33649427b38ce5e34552bbbbd8704da1fac55822a747747a0c522728e605638831df8c";
+  sha512.doc = "36aa01a5be9da9a23e3a4de63fb14a39beda4a42cd2615f75f942abff677e71f2a4f640773d27556ef246a99004c3a1aa68caac9435957152cfda96707d79787";
+  hasRunfiles = true;
+  version = "1";
+};
+"volumes" = {
+  stripPrefix = 0;
+  sha512.run = "e54add2c60c5446329fe6f944c99132e0f99e89dd8fc9ff459e0ee106a5241e4df4d864b43269fc14a08ddda92f4e41607eaa20ba50d4a566be7468d0dd66b2c";
+  sha512.doc = "4471a360d04cc1ed9c90ecb53bfc422fdae30571a25fc4811813f30ed5308f4d20309a1fdba808d1eb20e84b97318708f57d08722344afd755aa06588acbd024";
+  sha512.source = "0f47cc01b4631430cc4b73c7348bcb9d500d0c5c9960a15e9fb29e1c805ff0be4f0108c6bf795156ab7f939fb355f800da916f913a4a441e65bdcefdb05c0499";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"voss-mathcol" = {
+  stripPrefix = 0;
+  sha512.run = "cec0ea20b409192c618278001045352ca6c4c11c8eda59633a9bb65ebb7a89c8c1db4046936a7f0096f52efca8a251501fccf7890288ed830f13e0b24b1bb017";
+  sha512.doc = "5d91b23d9eb45998282731620097f214b274ee744972b3d7fbeda1be2268799572f36b5f4c8b707f48e8ec2d825438bcdcee7f1376531f366af8949a862ff379";
+  version = "0.1";
+};
+"vpe" = {
+  sha512.run = "5fd5180edb830cc2f309652ad6a86e3ce1900dd0b150b72b3115f2e0f51aed4023b3f7af8c86befd1b1317829907b35ce583b50fe5cd1fa50f15863046e806d5";
+  sha512.doc = "3c60c736fa03de82bfa5bb86f40420e7f7eb59f6943a94790361bd1d64076ec97843404d1cc508074a903f83392892c6dddd1dc912162928b286e65c24a46037";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"vruler" = {
+  stripPrefix = 0;
+  sha512.run = "39582bec5217d65179b4293a18697cae20b35a0ec5416497691d16dbb919d78d4463ae15f2f05d308f45c65481f611a3f699cce9f5a3c311b84bde08fdd5f234";
+  sha512.doc = "dad09087e028977501fe143ae050c57938500b8aa98bddc1afefb298444d17c37cdc5b9db2e9d01df5e9f6a47679e0659b21a2844d268f8b324a24bbf22d9492";
+  hasRunfiles = true;
+  version = "2.3";
+};
+"vtable" = {
+  stripPrefix = 0;
+  sha512.run = "ed8dee287daa32719b6650f43b963fa66cc55572526162978fc5245d3c253f027548ef5f1cbb38423c30e6cbe93b3418c373615ab92532be40d947c979f14b47";
+  sha512.doc = "12626485ed74fdaee2aff65e97f59d14fad8f856bc2a84dda96010985b039d48850a07ef08525d74b155a699d44b1e173923e0f67716f47e392fa7558760076a";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"vwcol" = {
+  stripPrefix = 0;
+  sha512.run = "3963b738e1214f7a495daff6476102e6b25e86034c552b5f4e4314af55e4af073ed94a72e969dfd1fba16baa0264577234917f7dfd074dc85f9c56c5f2409903";
+  sha512.doc = "a4d55b62caf4968d3e8329fd06f8857f646c5a867fbab23ea9bd7fb57c5b88b5f3a918642bc608eb1ccd936dc2e36edc50a5662667b8bb35cc59ba1739b2e7bd";
+  sha512.source = "8a605a7250f939789fd863abf6fa2b5da37b8f723460ef2e56ed93dc826363ec1bad03f5bd2af266ede11ccda04546e6174c0dd79282ba41ad6c3d9923ccd51c";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"wadalab" = {
+  stripPrefix = 0;
+  sha512.run = "2d603ccfa92e8ef9abe91f5afaf490c7c8476061679f7a54c22879bb90b4d874f9e0e533e25aafb94fee2ff512f689ec96d25ed7ed42d0ae90c5e05985daadeb";
+  sha512.doc = "f9c35379b396dfb563c66a05d200c405f03de96e22ec94de3a9f0c99ada057db21d31b43d59391bc0175479b5f150435f8e704fa40f6b58f2c116bbda3ec4603";
+  hasRunfiles = true;
+};
+"wallcalendar" = {
+  stripPrefix = 0;
+  sha512.run = "43a682e78a3a80784180dfd84627e5584af9199bef965bb5551b203df7f939512d4307c450ed1ee55caab611154c1511fc339831da2907527c06ab738350e05a";
+  sha512.doc = "e4816b91f08a26e99b03892b3d70f4d81110e476461dec505225335d46955f9f3790d883faf19afa4d7a31ff05afac4fea870e37299f45827c5a8155d4bbaf4c";
+  hasRunfiles = true;
+  version = "1.3.1";
+};
+"wallpaper" = {
+  stripPrefix = 0;
+  sha512.run = "45647b8f8ebab9706437be2ce63f3506638fcc794839ff366210db4c35a3e16b2a39127fcacd0d97df356180770b6808e80e63ea1a50e69fc591cc0992e1787b";
+  sha512.doc = "46b890e0ea7bbfb3c3421f79338f5140a105bb90cbe712477e2dc956f834682f6d137e39492437d8f206fefaf07086cab7f3cdd6c27dc7136df54c5ba850b4a3";
+  hasRunfiles = true;
+  version = "1.10";
+};
+"warning" = {
+  stripPrefix = 0;
+  sha512.run = "de3d9ef9a6dda4022fa8f04a0be509d3e9e583a539a3590cd30527f108ff739e0c1dbf8c5945e0a72902b14c2616e26d41a05f23957e9466c788fd228ac6b082";
+  sha512.doc = "04c8ecdd39f2e0b3aec8cf6d9235acc7e10c8e182bbb2a7b30a46cf9ce7c08fb0fea21956356b3dad500a5a58c7a2b63e9471b2e8fe626b17492f721f527ce72";
+  hasRunfiles = true;
+  version = "0.01";
+};
+"warpcol" = {
+  stripPrefix = 0;
+  sha512.run = "66fd9e243339e0841576e1a1a3de05f2e69a24a7e1dd31eb38d848d06c9183f691229d8e89878b661c7f6524bd9ebd1380fcd4c9b175feb8490cd4476ac81303";
+  sha512.doc = "e88082379e90edf1517579009881204bcb70df888593d7535e2b1e5b673cf116a456967b0ca5ce372efef9dc0818b9d0dc252be79819f6b346ad8619d70551f3";
+  sha512.source = "843965fdddfffe6bec9567e140b9c6db66f60d1eb90ff5830b08b17499f21782ae1842989d479e50c293a8e1d7e2a9ab886622b8375384e1238871d6872e9e52";
+  hasRunfiles = true;
+  version = "1.0c";
+};
+"was" = {
+  stripPrefix = 0;
+  sha512.run = "e3dec504da2dd28534872b4363695d797a874a0af5c2a77e6559a2765f6150cc50614b8905c90faa6fb9fd54d9634a9ddff148564904b1454f21d3fbd21918dd";
+  sha512.doc = "24cc3a8931fe48134810ffe626789139a821585f0d359a177c56ae5a442482fb9d36f344061128ac185469b97c4c3f440ad02ebc7135366253cd9bbcf99895bc";
+  sha512.source = "507ed77f8a5a119c16fcb9478a559f516a2e612893941f8854e4945968ef5b44ccab641f1737c745b33209828a4541e3615dd46f304b5e2f5b29c5282eeeccef";
+  hasRunfiles = true;
+};
+"wasy" = {
+  stripPrefix = 0;
+  sha512.run = "ba62a952ec1beb086cfdad1701780669e253d66163c6dc62d247182920d5fddacd062f3c7f0cec97ff8c3d0572fddef09f0fa30e82db9f6d58ddfedb37a6b0d3";
+  sha512.doc = "1b8f655b1c9a150e6f0d7fbc91dfb7c9158154709b226f04b4a456e1f3961bc65521b70844e736f68be9c66f2b852687f0d50352a6254343c5557177450d3e0c";
+  hasRunfiles = true;
+};
+"wasy2-ps" = {
+  stripPrefix = 0;
+  deps."wasy" = tl."wasy";
+  sha512.run = "9ef8a52b1a92c162d567999ccaa2e77ca09f190dfb1a25c0073c5a66f97131b7b7ff4c562b473814f2359374e23b0191d1d1d5f45627e3896e75fa3aad19d3bc";
+  sha512.doc = "681f579b96bf6e5cf7f4e0fecf9e259aa60db57879820cc779f46f2065c0177ad0871bb8f0bf1f9409b0eb553611a54af9c9ce9b547ca9be1545022188bf74d5";
+  hasRunfiles = true;
+};
+"wasysym" = {
+  stripPrefix = 0;
+  sha512.run = "9098cb0665f5ebd360a92f44aceb1b8c27c58b174c83a1b60ea837e605428ed2fda95a2b7836f69fbb06380fadc1a210a93ef519acb4bd4d393260472725240e";
+  sha512.doc = "7e7b46e8ff31a827c836d6bc6f8ac49474f23286470018276ebac18c386c4041f817fd9893a1a1f97d1fe1be3100c5f904987ece98b34c5816e347e4f9a1f300";
+  sha512.source = "4049e94ec5ae362178dbefae2f6a1e4718b5cee3fecf3d80b148682f64d2a830c47ca4a3b42c0f423f6f221d8f88fd9a8a2ff009e499a442207c0fdb7434a352";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"web" = {
+  deps."kpathsea" = tl."kpathsea";
+  sha512.run = "0d2d771e8452d67278adec061e1df8cfc06f3af729ea5ae7849acd5fe1b628167b18d86b1037484dbb6b20d5f703bba7ba9fb255788becc53ce22fd87f39ca7b";
+  sha512.doc = "5647beef7b99a3a552b8f55d12ef669481e8ba3e01beefb014fb8e3cae6e8f419862131379b506ab8197e1717d563c34fa81d69db3c6db8107e6167447d87322";
+  version = "4.5";
+};
+"webguide" = {
+  stripPrefix = 0;
+  sha512.run = "0c99e86fcba92d067ddd658893b58463390764b215515068e025563b66f445b23ae11482345bf305106afc1284ffaf32b23a28c8e0f81319002dd6332c8a3848";
+  sha512.doc = "933ceaf7bb2400fff1bfc5ec26f60d750e0995680579fe487536ddcf8eca670e2b6d3fb6150b4ad659c6fa594b9db540523a878c74e9aba9be7710b5380e55af";
+};
+"webquiz" = {
+  sha512.run = "725ff4b81203704a5cbf066c48d25a959031f89eed094da4d6a9b07ad059d977b2026b5e6a1e704999cf3b1b8eeaefcb5713f099f016f9cf17206ec1c1183dac";
+  sha512.doc = "6b25d04e4cff7db299c4f13ceb55525fa3a4ff2d094960fbe8171b3822ce2917d6d868e62ed3a1d2083d78b2ddb839ec211b5ba00a6fd894c29ab2d3a6ca7cb8";
+  hasRunfiles = true;
+  version = "5.2";
+};
+"widetable" = {
+  stripPrefix = 0;
+  sha512.run = "61aed9af524ce3e19f01676ee0a483737bb4ccdbad8e6465bfa8dc671c24bf07fb7bf88911b344a572bb91e4803ff932297d69e29768f4059cab63522ab0c3be";
+  sha512.doc = "9e24ce0131bbdec42bd92d54784e10f680fb352fdae3516e4419b8b4b1d0e1524d2309765c2c40c0d88829c5847de5a85bd98fc42def5f710f23ba471f2f83ea";
+  sha512.source = "c3de6c0bed48aead332639564f83b98adc4e9f23da15442655d4e09766f3587967c5a7292edca3cf0f4d29cef3cc8daf939f5ec53427ecc171c9b33520a3aeac";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"widows-and-orphans" = {
+  stripPrefix = 0;
+  sha512.run = "45c17dcbf2db08ca84b870c375bbd4e6caf9bbdcb7285c67082a72fb32822164d75520cdfd325b7f285a2936e8c0caf54480695d807fa6005d265d05fb4a51ad";
+  sha512.doc = "d798cfcede09337b299442babd4f77d1035a9e2d356db24bd9537c903b58e82cf191b273297658704847332e0198d8f64bf89aaced529df344a7483307b0bd55";
+  sha512.source = "0583468d3e4712eb666364ce2d3ef487c5c39797ec13408193c3976cd003098931427e30d0458d11186a7e3d11b377b59f8de97983d7c358ab8f27397b409426";
+  hasRunfiles = true;
+  version = "1.0b";
+};
+"williams" = {
+  stripPrefix = 0;
+  sha512.run = "44ef966e5d8535aa7bb32109b20f47c774995e6368a92e20a68d25c1694ad86b7007bc90877d276c2f15b8aa3c3d11f7fe6aa117c35265b5988205df869af11b";
+  sha512.doc = "c559e587868698c1a635db13b6db265234b3b475937fa1759f9e7e3a8d0644a43543005e9607b5a965bbdc304863d6c7cae6e5cb8345b546dc34afd8c7e2de43";
+  hasRunfiles = true;
+};
+"windycity" = {
+  stripPrefix = 0;
+  sha512.run = "f52a60a78ec5855c1d0e34c2a01772de28e0d2c3dc553e12cb99baaa4ad97a7d6f6ef59fcfb429bfea00339e390d600d8b7e640b92aae8af19204d2567aa8b4a";
+  sha512.doc = "8b0decbdcbfc0d0f0204e35a629904a48f44a5daf6b1b54f8e11dc601a103e97078bf7bf15eec028c14cc3c426782d7fda1a1bdd5d7725364959dd9d3d5dba2b";
+  hasRunfiles = true;
+};
+"withargs" = {
+  stripPrefix = 0;
+  sha512.run = "6d30bb4adc63ebb1441c9547439757feb93a276fa53b7c203d688954e526602d5fd0916b37ee94cba8fb96db8935c02705ec12fdf2b22b48ce01dbd21f208d43";
+  sha512.doc = "d046bdb103f4fab24f41a730cbe585d9d8bcdf2c47f60bd545619c83a8c200ac82b4a7422423cbec8b0473a86a3f92fa6e91a7a769a580e127857cc647d864b6";
+  hasRunfiles = true;
+  version = "0.2.0";
+};
+"witharrows" = {
+  stripPrefix = 0;
+  sha512.run = "46c4b5f26c3d8ac3e44380b4d70e6364cda313f63c4ff51078abbc09086fc04f0eca21bc2240dcb0f0de88a3f7156c31864673b11954039a758d3daf02cadec9";
+  sha512.doc = "b8692bc22aa753a964380bcbaa61f10daf85cbc7215ee878c2616116711ec8c28d7bb361d12fbb40dc2d177242875135b914f298b966221de1a75dd6ce2068c5";
+  sha512.source = "dfb46c1bac752aa91bea49d8029aa5abc0f5f9c6815f7eaf0e1b70cd992d7dc3c8d182c258e5a8fc6da470326ad760ce0331b83e70f6c066f8ad76b0642834e4";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"wnri" = {
+  stripPrefix = 0;
+  sha512.run = "6ad06e6a867b323c382b85fa1effe16280566b1b61dd37be0bd7e9384d145fff2b1b4ff8117aa49749db1f15495e835e3367b0b7191cf9444e36fed662ffd0ed";
+  sha512.doc = "c3d6ff664edd89fa711e9573b138b29b113b588ddef9ad4a258e1f28c4ca2aad1f05741a402c1c1972bbc317e0cb989ce7a51e52d59b42629343d9a5780b64d0";
+  hasRunfiles = true;
+};
+"wnri-latex" = {
+  stripPrefix = 0;
+  sha512.run = "1dcecf9ac38a9099625ed6be3955af8b063ee5b5b8d0d3e3ab8c94a8215b72b86a0b5dbe930eb69680917bd3d6652b3f4f08bb377197ab6f3d2fccf2b96aa59e";
+  sha512.doc = "924266d547910d25ed5355ec2ef697d271dd992aeb6767d5bcb703d4d07cd34b6844e9a821ed93f5a04237aba1c185fb68926967e78043f390785b619c2389d2";
+  sha512.source = "e3c5cfaae7b14a28489344392d66a1e2570c900ffd571c54b4f2d13b16d6dabb5cf58cad9259f8b662a218567982d1ac51ef8b2a757902c36540200fd984a497";
+  hasRunfiles = true;
+  version = "1.0b";
+};
+"wordcount" = {
+  sha512.run = "3c26b3bcb4c3edce8cf9d6628cf6b89103aa1ae454b07c1e963ca90693c18fb851772a52082a23efbefb51235005e558fd553afc891a472eb39cd430c97f861a";
+  sha512.doc = "a86b034ebff42c89f07015b01f86756a83ff2c69ed911ecde185ff719b09e3db47f284fe778c9dfd16442d1513edc9ddbb4944cc242328c17bd3fc18a0aa098f";
+  hasRunfiles = true;
+  version = "1.7";
+};
+"wordlike" = {
+  stripPrefix = 0;
+  sha512.run = "d600073b2373119973ca47564938db5824181d6b74409ef7f4a2b19d53b83b97ccf8edf5d77dd831c0d52a4379f5928ad7a0391d90a2f19fe4d3ef681133078b";
+  sha512.doc = "10bbfa76beb0718dff8d4175712567e34e77aaefbce9fbc350d5bca43d8d5e87fe1cdcce5c558946c2b04beede8628b7535abc451f7d904ac283929ae39c6460";
+  sha512.source = "23e7f66f064e7e8bbf94d58118c0c8891a316fc2e2fdf37156b078242fb33343a38d19f03dd605035ce874de1d05d9e405c612e32c407e061f54386cfef791ac";
+  hasRunfiles = true;
+  version = "1.2b";
+};
+"worksheet" = {
+  stripPrefix = 0;
+  sha512.run = "439c430189e74e8c476a068fe449034fa1c8f4e8770ee454b92b8645ee865b103a02b0eecb45a925a8021fa7c64d98240e5f1f980913515df49d8415bbeb2c2d";
+  sha512.doc = "56d502e993eb77f7dd4b2a659a8646823cf033a3e246e90b0c6e4e9d2a7cb31922dee26c942404b13d18e7abaa79714b4394b589376d67e8fc1556a098ec7960";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"wrapfig" = {
+  stripPrefix = 0;
+  sha512.run = "ea9d0693a43f985b9ab13a51e0af82b866adc8500dfb9f42e8b20ce8facd07d0534749bda61d13bc86b921300336c9f7e6099f252c4c65370a2e2cb4423589ae";
+  sha512.doc = "9ba4292d2641a31f3719ca66e3d80ca70638f9c943bfad9e9e08543f57a53eccc1292930e95d6a3677d0696e0deb1d1ca698b83eb7285baae275b70ac808be33";
+  hasRunfiles = true;
+  version = "3.6";
+};
+"wsemclassic" = {
+  stripPrefix = 0;
+  sha512.run = "064c1ec12a33dbb6c5a2c08c98c21d5684d8be6edb807987e69a47002d52bda4634a8e0d8016d01aaec6b0bcb9851de61d2a1723f70ea7da2dd4000d2340033d";
+  sha512.doc = "d86741a35d1873a17839e880b2e1c0915cf7b64bd52e5836f9967159479611482c2b2c67388066b9f171574109a5fa0a5b9555ccf4e629d4b26434a31cd754da";
+  sha512.source = "cbf8ef51ab7782a2b52d238ee2f517a541ef1a0196ff72f08cd722c3335a80a2520fbd359cf865302229cf146b16931d4b163571e908360adc8139c2ade5f2b3";
+  hasRunfiles = true;
+  version = "1.0.1";
+};
+"wsuipa" = {
+  stripPrefix = 0;
+  sha512.run = "7488fab88bb273463ffa45819fb486aa3c95d7202d8ffe2a8aa8f2a1b00555e70bbc5a008a72cb60ddc1759dbca60bed05d2a21b4308e75490e965e71a84ee7f";
+  sha512.doc = "b24aa32e2e7b466d7afc827aed570deb70b41163cbe6ce975d8df77e9dcc92b453e5f0d5f0edd5a2f05c006939003849b7b44c2e3f8a86ffd61a51ff307466e5";
+  hasRunfiles = true;
+};
+"wtref" = {
+  stripPrefix = 0;
+  sha512.run = "bae4e9c07d17e94a661a7a168fb5777d95f7b65644308197633069ec23d0b9e10e93cd0c1e892db9d85ae54f50fa787c60d04266eee512f45c5ecb3ec68f039a";
+  sha512.doc = "5d7f2338beb7cf22ba62c2fcabec2b37900fb208726a59c25fe6b12c8605d15210a8cac8da454c8ad09090ddbeb01987aef53086cdb26628b72f32752cca1d87";
+  hasRunfiles = true;
+  version = "0.3.2";
+};
+"xargs" = {
+  stripPrefix = 0;
+  sha512.run = "43b9cc5246123ef3c424614415e04db9e7a578eef348c3d580626918a4c31ac99714cf501dd54d305ed6ab9ad7e0533bf5b39250c43ad682032dd676a12173d2";
+  sha512.doc = "387a051eb8581b51d2042bcfae2ff9af99659d664c328c6b30b3789c75fb73687c32e2037df7a345335966671a3e3267ff4b9e0eead0e5b759bd305850ef22b6";
+  sha512.source = "e4717f476260648eb66fefeeb125606c16d302bbad32c55730a0102da355d0c828b106b25391f69bb34627f56cd7659dc185bbcd36ba7f5a8f0b77a0786a7957";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"xassoccnt" = {
+  stripPrefix = 0;
+  sha512.run = "ba903cce2a9438c51e40d529e6b6c6993f4a2422aef2688cb9d875cc408e4423ff135afe3758bef6605eb26e1f2bf4921b652131e65bf068fcce54be3f765455";
+  sha512.doc = "5a1805d9cd838aa7369fe4ca2d10c8f46b8bf913c14d8ce8dc546d80598f455696f83825c3a1691fb5a3ad36fd68c2bcb62b6a682ba374e54071aeb3f33c7a87";
+  hasRunfiles = true;
+  version = "1.7";
+};
+"xbmks" = {
+  stripPrefix = 0;
+  sha512.run = "c54e66e79cfb39276ab85c2e431326e071cb920483c00bfaa4dec7a431ea5c563ecf2ca6c5bbe0581f90054b75cc6f0a94d4e401863bc27790e4238a8792e1af";
+  sha512.doc = "95df04009084b9e4cffbc76b3ab6066e57ce6fbe5fcd1bf7f72970d98c0d5337523cd9a361e213365bed5addc8eefc6c01093e75b6010384d870dbb63cd05441";
+  sha512.source = "7d5ff7b0e4807fcb2544051caacdbb477fae6a46d2d9adb0af2843f8ca995f3b14d0890035d64b846c8895b1ff33702d8712a7b984ea911b93b5e4cfd5cf0823";
+  hasRunfiles = true;
+};
+"xcharter" = {
+  stripPrefix = 0;
+  sha512.run = "a6fb6ecb8e423bbd0673b285ccbf274bc727a6b37a4263c53cfa5b79e3cadba5db21b3d7d0c056f7dd9ea66688035d2885e1eb04cf9889f7884358790c631ff1";
+  sha512.doc = "8f287c75e83afcd2cc12098b7bfa3421436b95b77497ecfba9b8a102ad66c089180adb363aed1a72a76a629573c4b351d355a6022f42f49df7ec00ddf6044195";
+  hasRunfiles = true;
+  version = "1.201";
+};
+"xcite" = {
+  stripPrefix = 0;
+  sha512.run = "f49a3b76fac8d4631cca607c354eef956e77c3cbe4e95a9104118072c5e320983bec9412dcd2400c3034a7e4fa8e463cfa53ef1de1a7c39f0d857a242671c0b5";
+  sha512.doc = "f53c69274392c42c661efa04319999aa43ad7e81f515ac6184325672f4d00d5bf8113aa68f36d4d4c24d9dad393c91c8a6dfe94b95c8edc449642db8cc43f7eb";
+  sha512.source = "6db0c3ab886a2f90dd12e75dc8ad00391e09e8815dbd291b34d1fe9144677ef7b8c4c6bdc964ade6c12bb0dfcc53e2c56fa722ef30c3aa2a303e391e26ce57db";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"xcjk2uni" = {
+  stripPrefix = 0;
+  sha512.run = "c1174c6abe555eee84d753f76608fb3fc3234c43c5666def063983653908a03b8eab3787dc9e061c0f6bf3bfae7bcda9a31ded49b039580fccb254ed33571e72";
+  sha512.doc = "30f81325aefa49fd44031ddda4e1ff30c40ccc08645671e1439df38cc4efb2a5cf4d9d50e98e970e96e3b18046e16834710d6be8fd9e5fa18cf5271bd5ae339e";
+  sha512.source = "fa719c1936e76ac3d0bb7f212a53c64962ea2c7e00546c603da218fabea566c11591af056276f6edcc68e2cb0b13ded72cf37535c4a8fc5ce53243743d6f8e0a";
+  hasRunfiles = true;
+  version = "0.8";
+};
+"xcntperchap" = {
+  stripPrefix = 0;
+  sha512.run = "dd87c239759d04adc359a6f1dcaefd090b7cc0afaeeefd9ef71530e5933f8b174d53c8110163822150bbb722b5ed8f47eb279f2224b02aedec6137ef7edf97c5";
+  sha512.doc = "5f7554ebf4ef3d878c8a31872e6d67b6716ea7d6e5e1b38915f4b4d7c2edbc4fb1aa31d557e74cbbe792134e77a6c9cb4dd24ab0daf765659e399cc84e70d7c9";
+  hasRunfiles = true;
+  version = "0.5";
+};
+"xcolor" = {
+  stripPrefix = 0;
+  sha512.run = "9fba18460e4488cf2836082952ffff6e5e481b964570ee515f503aed3c8790778e054919e4e24070ff6cf608e21c1356859341eae5704558b1293b01ba8c0925";
+  sha512.doc = "65f15207df8a112a4bccbac1c5259053364b52da3f0d2fdf566e1e734f61e0649ae6cc674c96f775d8c668cc6238dad2993f06b81153d38713ebf96e747e0353";
+  sha512.source = "236eb7d2f94c297e743c2b0508e55910b00495915b7910dba7e0bc107f2ee37b24e3975242bb11c2c64a99f2abc5a55bd799277b9fbcd98058ee8add005d2be7";
+  hasRunfiles = true;
+  version = "2.12";
+};
+"xcolor-material" = {
+  stripPrefix = 0;
+  sha512.run = "7f1484435458dafa2a04eeb4b5b1b89ffee9ec8c91f1d724449457b719f92db009efd6b6a580a2b0ccb8ebc66c0d1889f3ffa05104c0fba5cc9c7ee90985d2d3";
+  sha512.doc = "388f9b604291436ded0510437be93c1fdf120a91fc3ddbabb870840f2caa9e81313035ff6c9d0c00de259fa024f83399a4004e7ba512a5c3bc7920a08ff58819";
+  sha512.source = "118b21c883848b5bd6d558b5c22146fad54df5e107d0525e48df42c0bbe90b210c7ea3340fcf30b5782d251ee1caefa2aedb8a130cd01a84f4e9022a40ca6a8f";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"xcolor-solarized" = {
+  stripPrefix = 0;
+  sha512.run = "be443123bb994c40fde0c1783c9863a2ce8b75a8e3e3d311cc34596e72f2830dc92feee9fe87638adee2e942d540424bc389460e12aa0e33fe4014b28a1d46f7";
+  sha512.doc = "a448de4d83ff30c2112c90fdf80f530b8e1ee46d6b3f574ad0933cbd415debd1f94cb1c55d6de5679d5502cf8e0e28b71cdbca803f0569422e79bf0ced384f45";
+  sha512.source = "c7f4bac922f84d2e6323f93cbbaa8ec61aa8f532383469edeb8712d4aa557a25509c4c85d160a30715af9a4077d17e6149b737c499dabb22af8a9cc398f4ec9b";
+  hasRunfiles = true;
+  version = "0.4";
+};
+"xcomment" = {
+  stripPrefix = 0;
+  sha512.run = "ad19a29caaaa4da90c740a18f3b3bf63666303f8047210197e17c270082d483e33085c9249d7143ba65f343f6bf3b52c6974021f954831c5196708824e21b843";
+  sha512.doc = "d3b4d70cd88923e25595acf726afa6eea2efff4550455ed2eff48411621f212059ffedc3a82e4ac15359420a00c69b55e3625d11f8e8d4111eeb87cc3a6e8cfe";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"xcookybooky" = {
+  stripPrefix = 0;
+  sha512.run = "3f74d540c4da5ab4f6f1b6c78f3a35172fb4f2d94b7c720fe3fd1d31e1c53db6659371da6d48adf755675af831d252178b96ba57a1f0c0319459f4a564897b49";
+  sha512.doc = "29d1620c7ea3d13e4fdf97454bf824fab8de6acd96661554a1f37717e4fa0dcf6df20cec580b6b25101b75d2d22080962713d05347eba4974c5cbdbca6129ec6";
+  sha512.source = "0a0d8eb171bc551831f65511f74b9db402587b6bdb47dfcd3d9e31403eaf530e954c5ce0510f9fa4e850b3036bc6807339aefca9567b9fff7152c72c8332d640";
+  hasRunfiles = true;
+  version = "1.5";
+};
+"xcpdftips" = {
+  stripPrefix = 0;
+  sha512.run = "ccf564a59d658a4f6747a3df866d0b0a0d6dae489215b5784fbc0619a2f3f222ef348c5fb96faf192d9db7e5c63d44c5f94549cb809e89dabd06bb43d745df1d";
+  sha512.doc = "5d483b7bce276815fbb3602d4082ff9c939ae414cb2e2b03f75307c71b2b19a6adba23f609836c78859df5823f4aaad175e01b9f223326176b62a4ac9060cf02";
+  sha512.source = "d386d33f5437cd31bb8dae0ea51a22fc90353f7866544694e3c41bd2f9cb70fd734a92bd50864a0b20443bfe40f6f54cc404e503da395e928ae69fead87db771";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"xdoc" = {
+  stripPrefix = 0;
+  sha512.run = "8cee132082c70214560ca8377766f45e6f15da2af18e0e9d68205d094b2a6af4d50150bfa6d145f78d92bb95c8657ad9fab1cbb8e76b75859f44ac1039464cca";
+  sha512.doc = "cb7fc71f84f88a1035e91500e9b7ccf0c425733227e4106c7bd87eb30b25c8fdae6bce046f22e5a07ec919ee0527f264dcd826b7e6468eaf21a791e7dc0e7ab8";
+  sha512.source = "d82f9fe7cf0a2faaf0cc6a5f1f1d5916bc3eecef63e6e983f62c4b17d36b17f31251af6e704811af2094cc43fada5597b0ceb432a4b38c4b066ab041d7a5c578";
+  hasRunfiles = true;
+  version = "prot2.5";
+};
+"xduthesis" = {
+  stripPrefix = 0;
+  sha512.run = "4a92d52c7ca60232849b02bd7d688f12230f858bb7559287610a4d33699158fcb3d5270a22b3abc99d89a684b81e2124602486c16f22fb434e98b54f715f592a";
+  sha512.doc = "44ec843c2a6b7827c783c076e8f02dfb697f1bf021b54be238049068f466d9969d2e0bb9efdba37623b44a564985af4256eed2b82ef35d8f7ec9798ce84abc0d";
+  sha512.source = "12a273267d7e4e82256f4aa76db77673eea0d1816691a179b8ac2af8732ef958a7142a95cd7ba8ee83cdbe2166975dfa12d3fff14607cb1fd27f48c989a5a7ba";
+  hasRunfiles = true;
+  version = "1.00";
+};
+"xdvi" = {
+  sha512.run = "9e05dcd35557d4655b8e78c8d8f64db1bd5fd37cea1dfaf163fc8ec2076d09c18f03c9fbf4314effa53048f660f86deb7adcde35b13aa7412d92f941ece0b550";
+  sha512.doc = "17ccc4f97a55f146d6aacd63e2ef3e2411aa221363f0490b484cdc88910ecd0d94bd016db18fdedc78eec4001658f25de736acbae20eaf8f95c9cd576861f015";
+  hasRunfiles = true;
+  version = "22.87";
+};
+"xebaposter" = {
+  stripPrefix = 0;
+  sha512.run = "cc264905da875732a3bad46daa31a1f5595e3676ff4d5570554caea40dfd383eac8e9a05121e2211294749770e50fb4d80ca6e735421eb7ca295a10bc666ec3e";
+  sha512.doc = "9bf0315e6fa502e0de606bb16c6575997314619f10a8aba312d8062be5f1edf4ba037eff7c23948ba7800bc2abf2fa300b8609287558a0ad6c59d63095b20045";
+  hasRunfiles = true;
+  version = "2.51";
+};
+"xechangebar" = {
+  stripPrefix = 0;
+  sha512.run = "0521eabe4444865747291d13a8664431b64e67969276191f1389bc0c7bd7198625a352ac391cc06e926cd90535b47b8edd8ffac6f3967ade0cbfe7022409519a";
+  sha512.doc = "f2452e8d2281f4d92da80917d6883bd91318f8e4459189fdfd8e6a79269d4d2c1b16122bb42237598fec3b8d44b9cc313a4b7858895db8dc0fbc5157825f2046";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"xecjk" = {
+  stripPrefix = 0;
+  sha512.run = "cc7e1c47396c7b506d3f49969512bf3ec76ad330147d57c99467e57d5402bc56ceec4d5b56a4892bb6d93f27360851e84f4efa52f4b8b1b069d912d4a585b2d5";
+  sha512.doc = "a72c22f9d40ff9265f23c06d5f30cb8204b0cab5391ed9469be67adf8450a40ab52a9b65bf89dbfcca34e40d17bdadac2beee6aacb1452855044a990a1d8f472";
+  sha512.source = "684f3d76f5418ba4b840f87dfe06f365a90c5c4f141a981c0ede8e6badf98e8ee03a826bf0b41ab1df1aac6094f953696415ae51d1956ea09a59343f0f469b76";
+  hasRunfiles = true;
+  version = "3.7.4";
+};
+"xecolor" = {
+  stripPrefix = 0;
+  sha512.run = "0ab23e651b36f06256fab5acb14effc93296948aecf7c7f11c81f4db89a58bfd8e038dd857a1da3a86ab573cf0ffb1d1bc188789e0d493ab0d0c1c9d96d593f3";
+  sha512.doc = "9441eff384f57e8714cc543ade380ecc321e6c0e7dd0ae69c71337458e2607a43f793b490bfa6752c1c70bdb17be92488b89ff848ab9a3a1700907c15ed857c2";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"xecyr" = {
+  sha512.run = "b248cfde57f5f8023df47a7e6c6260e00820baeca261a52ddcefd6a17a2e9aff63a43fc870d8be747e491193800d87440ac1167afe06bf0b15238982f62bfb76";
+  sha512.doc = "13e5bd963aaeb286498aeb631c88c3b14ac29ac740284014f11b881503d17d99b29233c86853c7691aa9752557773a8f6ec5d410cccd2d6665dd5d800f1fe2b4";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"xeindex" = {
+  stripPrefix = 0;
+  sha512.run = "bc3f399973bd8be5b83ea6da2c39d80de8f39ac6cf2d82d689c81816cad334310081f44fb4e256e442fc47ed6640c2b8ebd185e431f0d0ddec5f75f7b535283f";
+  sha512.doc = "c84682c8034c5e182bcbb2ac0411f4ba5d8065a5db1f008c6f9e7a01b94b3563c44c03fc4c1cf48b3b09d19ba93f22778d8840741737bf1a344cb0c8f66ceb49";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"xellipsis" = {
+  stripPrefix = 0;
+  sha512.run = "3bff74473b4e7fdc7a349fd54e7703b77282381d9ff5eac233d5eb7cefe98f4abc5ea4fd309b8693bd7245471c565545e0ab437a5f8e5cc1b89368c914078d54";
+  sha512.doc = "20d238f8281b93643af570c3dd09a9cdf9822af0da6a9d06b3b9d09196ac4c7fcff2efa3271f763caf42e54f9c72d2087c491cacc5ea4666cef1060c12ecab3a";
+  sha512.source = "ae58f20d0aaec99bb7e56a0a5b277210d5b9efb8e2677e9e22caa08ebe9576befe19e4b7409625aee00b30cdbe1d90ae61623e86d3fcd255df96dbb7c89291c3";
+  hasRunfiles = true;
+  version = "2.0";
+};
+"xepersian" = {
+  stripPrefix = 0;
+  sha512.run = "dbfc141ebfe828e6d2f331cb8841f712ac3577558c028df9af819a240791c35e157f9c03dfc3cf4a6b654411485ba14afee97a0d45d2393e5067b2fe3ae556f7";
+  sha512.doc = "ae6c252024b947c9d4cb1192ca61e55aac9bac10c0c737a29794cca2d291f90d6cc56c8e52bb338b2f6f0d27d2bb335adff38d0d792aab8a6d76e1ff11344611";
+  sha512.source = "6f1fe402b7af2531d6a04ad291752058391c3f437dc3c6bf2256ebbf570bce64e6c341b369ac6d5fe024d7eb28fb31592bc2571699c651e0096b3d70a13ee6b3";
+  hasRunfiles = true;
+  version = "22.7";
+};
+"xesearch" = {
+  stripPrefix = 0;
+  sha512.run = "4c204a8f92fe9af0ef1f0da99dfb12ac8f784800f7ef673a116a5f5167556fe49584b9457bebfd07aebace44951327f8a576cdbc8091a7aec776768384c62507";
+  sha512.doc = "981e6cc62a2f50815aeb875c46ab2ac83510ea535953629755700650831500410650b66ba070d8b5ddc494792e782fb75f266ffe0fb868318a4782b2f8d701f9";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"xespotcolor" = {
+  stripPrefix = 0;
+  sha512.run = "7f4a111897f53b003473a40db9e779ed22215eb61e7485a1596bc215e6057d065d158887e1c93dc4e81b04ef1f8815044ce61daf406b62bb77ed57df8f13a70e";
+  sha512.doc = "e1d2f3c52b95ef065e0d2ce93871278b8038b1bfe86700609e1197715dad91be572cf00a4391cdc4535672897d0ec52a09bdce2f24496538e512f760a7a622e7";
+  sha512.source = "5727e5cf3e31db12257498b2266d13a749965e0e177c011bc379a7ea29ec5951fd223befefbcf77ff1dadaf69e31f3f4543611be8f9ac90c7acaffb9070b0b2a";
+  hasRunfiles = true;
+  version = "2.0a";
+};
+"xetex" = {
+  deps."xetexconfig" = tl."xetexconfig";
+  deps."latex" = tl."latex";
+  deps."dvipdfmx" = tl."dvipdfmx";
+  deps."cm" = tl."cm";
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."tex-ini-files" = tl."tex-ini-files";
+  deps."unicode-data" = tl."unicode-data";
+  deps."etex" = tl."etex";
+  deps."plain" = tl."plain";
+  deps."babel" = tl."babel";
+  deps."latex-fonts" = tl."latex-fonts";
+  deps."latex-base-dev" = tl."latex-base-dev";
+  sha512.run = "3f50f001bb1388e14112ead5c47f0e22a271e91a33e73c40f5f0fb43230494a7494d868094827d0c316e76c9cbd76c5b8b53b76ea267d24118c5146fab42f70a";
+  sha512.doc = "63b2f8b1c0cc906053098c2fd5f2dfbffaecb5cf1f37ed8334b30b2cd035ff5ef12d88cb46de2c0c5ac23becdac41319325e1d56507d21c9783736f3b0601f60";
+  hasRunfiles = true;
+};
+"xetex-devanagari" = {
+  stripPrefix = 0;
+  sha512.run = "96eeb5289b4b0ce252eba1daf15fbccaf2cbb2d251a85818b6dd761048532f36355619e37f1f857caf4592cbf85d112d6d48d5944c455ef36da9913529a783fc";
+  sha512.doc = "0f360c3f43c6562520b8843269068fc46ecc405cd3a4d8faecddc4f606d69cedcab28950fc1d2e11699e297fe4d70c4c3d50765a2ec30541c237914accbc7129";
+  hasRunfiles = true;
+  version = "0.5";
+};
+"xetex-itrans" = {
+  stripPrefix = 0;
+  sha512.run = "7d083e176a2786689a325c511d4e50afda5ea8c644c8288ea050db79fd248085be500ddf7a0b8ca3cef6191651669f9c48f894d16ac571096cd1658d6e6bac60";
+  sha512.doc = "795a13fced2938c1679dcafd07e445ec62db6cb014259a15d1f8d1dd68ee4cdb98c20024b1601679da5f6e8d3a27b05a1285de967067abc1fd61ee6937540449";
+  hasRunfiles = true;
+  version = "4.2";
+};
+"xetex-pstricks" = {
+  stripPrefix = 0;
+  sha512.run = "59186971a188f4541361df8fc492b3767069b3081f7052c88df5395539807970c709537b074790411dffbc871010cf4d3fbbdb6684c43007477c44be6259b64b";
+  sha512.doc = "cf71359ea6e56061848b085da9755fd3d96d2a9d30484b5d5028c7a3dfb52dfbe275c46f17016179a56f90db3b6df4453cbf3a990a709e59503fbf1a576eaf8d";
+  hasRunfiles = true;
+};
+"xetex-tibetan" = {
+  stripPrefix = 0;
+  sha512.run = "de7d2f875416336f25e8a14f8c743aef87017cc0aeb30b5c6aa9e1bdf044d71d3c9e9a28d52ccbe7fbd2099ca9e47938310dc3311e46399027aa822b76ff90c9";
+  sha512.doc = "0bba33024862284354416e55f2f718f3f3220e4a853c68bd6386c013702aa07a3142864168f6d136bb351044dd9ae8b59754cc2a0181a358fe1baad49106d504";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"xetexconfig" = {
+  stripPrefix = 0;
+  sha512.run = "62b130d16ac01845df5acb1a10e487408208b0c4369d58892a83a42609b3dc92589195540154d1e07a9cb528e8e4ca65009dfef236efd53b9cfbce0a942c5b01";
+  hasRunfiles = true;
+};
+"xetexfontinfo" = {
+  stripPrefix = 0;
+  sha512.run = "8099f45c704ea74e5bbd90b1817c3ad06cffe3d6da0a997f8471e72cff364d346a3cc2e6f156b51bf7bc3ba149e5c755423418d58be89e1872f84db9c1eef039";
+  sha512.doc = "a5a9b085e5dac02d75b83c7063fe653724367ce203c20832e2ef6b11db10e31bcb90745a7b7d65427a33cb018d68afdd4acf9f92c907f91904188ad60f2e1460";
+  hasRunfiles = true;
+};
+"xetexko" = {
+  stripPrefix = 0;
+  sha512.run = "20c52e861ec9f38df4a7ca0402ca6817e80ee3788f40fdf9ac24c61aca3d38b02d6f6d3cca1c8c547088c1ba9a6b55b5b5a75be5dc98e707b33cb2ed900f968a";
+  sha512.doc = "820c0de971caf668a9fbe01613a0b82ae1620e3199593a29bf2e7992607a27052083b33c1359019c8f026b4295bebf01ddcf840ab8f4eb3ac5878bff97b8e578";
+  hasRunfiles = true;
+  version = "2.21";
+};
+"xetexref" = {
+  stripPrefix = 0;
+  sha512.run = "d7c7d2a404de1fd609f172dc0f8173cfb6a255a220700cb4d8659002e2793a01e43caa7bb483fa343a85a84ba545edd7e7c985b92045855285f1704eafb20df1";
+  sha512.doc = "818383480f2e20d7e00a8ad77423e9326cdd130ec1d1dba0dcb536fd13e7e287b4e8a67460eb510ed786b3d1e7f65f92c1627cdec94860ba0622ee2b92c91974";
+};
+"xevlna" = {
+  stripPrefix = 0;
+  sha512.run = "69c80d5243a4af96f2dd8092926d2766bad5d6beaeff94d6aa2f184a68a45fa50bb3abb91a4652d8c5e5617073aee9caddeeb73fd5399965f477be7075b7ca01";
+  sha512.doc = "d0d033b646314eb250b245575ea2361b6c12f13eefab071c2b9f91524b08bfceb9fec197c3fa5f61e3ed19caaf4198e69ce1305bf1eb2daf1db6e30365eeac48";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"xfakebold" = {
+  stripPrefix = 0;
+  sha512.run = "d25ed6743f9fa372d6403c39c7f8f0bbd772a3e915565f9b610d35053c2387338e19a7edf1f2e813cf808899cf59deeaa54e6ca9b4aacc767c28fff069993f16";
+  sha512.doc = "6cbf7313a17b16c2779b652a7a1a1891e801fface6da4d864aa2a1fd8303a80be493bdc6cea9cb753f8784359a7214b514335d70ada90e5563d8017371153dc1";
+  hasRunfiles = true;
+  version = "0.05";
+};
+"xfor" = {
+  stripPrefix = 0;
+  sha512.run = "6e3ebe83dc39a87aa86d5f173f56893ab1678253dc18dedf16c5d4a2df864e21b9b6e84c6bda56e2c624106efb2f73c110964948e4d553848bbebae87f05bff8";
+  sha512.doc = "e75b3d57c09e1580282f4002b684645aa21aeed4f90626b7e439f30dd79edec9c6f23492eef83b67e9ccb885c001caca6201d43b5182632a5b38ba5f67488b52";
+  sha512.source = "508dd3c696da5287cee35fbeca12aa60667908f1f456a9d1333197e76b707902d281e83146b81e0a095c168054ec96013074f5b0bc236e35cb17732f4158e2ae";
+  hasRunfiles = true;
+  version = "1.05";
+};
+"xgreek" = {
+  stripPrefix = 0;
+  sha512.run = "1f2dfaeb88040a1b58b60c0ccb84e7417d4211491d34c17c9302b7cf388775ed729f9135b76e43ea276a50a665efeaf19884535c187bc1c0cd931c2e79b8aa19";
+  sha512.doc = "8258ef4bca146a2ea8f42a235f151924156f116d2d3feb4d1974da1b1afd395858dd5d53d2343d748f0d60afffc8967e9f316026e07bdc2215d145334ec90e66";
+  sha512.source = "a982e91c9fd68b583ed3d28c841e91e45ba83a9b961cf710cea2a025c69f3e4c98124eb3d5ef45062347ae8b48c6ad54ef5c7631fffa1be5cb9705842ca23987";
+  hasRunfiles = true;
+  version = "3.0.1";
+};
+"xhfill" = {
+  stripPrefix = 0;
+  sha512.run = "cc0ea9e9d40a590444801359c455716856c807eb429aa01b460fd7566797490932bd3566a5c6f95bd6723e0b05bde1aa632b83383c8bcdeba8a455cb84ea9f1b";
+  sha512.doc = "027287d941c4576d7f55a3d618e13cde5348ac072f3e546dac6f8a8814efb982f9cd0c4162866403f946d07ecba0ea8cc15543cafbdf9008d60b78d0ea3d26fd";
+  hasRunfiles = true;
+  version = "1.01";
+};
+"xifthen" = {
+  stripPrefix = 0;
+  sha512.run = "21c5882ffbde05c50a6536fbf19f812a3ce6381f565227f61c8062281a2472a105bf6223cdc03adebf275fa23dbc1ebbb967349c715f20d1b516f100f820af3e";
+  sha512.doc = "52ffddbfb4d0d579849b7a89d30bebe9f1d511751c89012712a8ef73ae3f4eb8799ef9b3755dc957c47fd874f1ce76b3ed54591d59f7e4d9e1851c50aff3dd4b";
+  hasRunfiles = true;
+  version = "1.4.0";
+};
+"xii" = {
+  stripPrefix = 0;
+  sha512.run = "a5355a456005e09eac4135735973a14a6add3a31639fcea441d8d6a7c06e7a7efbfc1470d485ab317fa193897abc2d9edeccadd19239944014b7fccecdda52a3";
+  sha512.doc = "c9b348da09c3a9c1522eb7713a17a58b3eabf4ff8ed52e8d14dc9eeff528ed93af505b5e3cb59c1af4c2ce999c6c1d98f66d026a6ab3d7a09778230286059d84";
+};
+"xii-lat" = {
+  stripPrefix = 0;
+  sha512.run = "e4538ac31b6508371ee156168d4da71644a65297b91be7f070291f35563a45a1ee5a528d25585bc23a4690e8fc5c6ad04bfc829de4e95f49468a5852fac9e822";
+  sha512.doc = "50322d89f494d07793d964fe515b8a0bacb74bd5706a6da80f6860771a8e3cad35c7d06bf398217a7e4364594d54f4dc490f39980194804a04460047ff5083f8";
+};
+"xindex" = {
+  sha512.run = "7e05824e42feee686c76fe1c29b3019feccd83f7d69bbbcabc835bcb94e69838d0d94c8c50d4871264bd930d0a2fbaeb6b84a26e3031bf3cc8d551698be1bc55";
+  sha512.doc = "f26541bde9d1d3440cd9d72d1e24b1d81eac37832e41cd99643449222185e214453e11f5076ee6eb2ce5d87ddd96364767dd5299191147352b1be2497d158d3f";
+  hasRunfiles = true;
+  version = "0.16";
+};
+"xindy" = {
+  sha512.run = "b9127f03d8917543f0b1caaa24344aef0356818d7414e390ad45d5de3420271a81509ded3636c3475b577d6781be6e24c94f3d444f6190bed9039dd720274787";
+  sha512.doc = "9e6c10388a7a707695e2965c3e3b851f939a68997cf880560a4a05ca3a167febeee9f1a7803cff1927bf7aecf0d6baac65bc4827c367f9c2d086d17d5947d64c";
+  hasRunfiles = true;
+  version = "2.5.1";
+};
+"xint" = {
+  stripPrefix = 0;
+  sha512.run = "ec3264d51164642c9054b98026b7da7e06b0a42dbca8736315535326e3d478ca8fa09eabb62c4ad7bf8be374897efd0331b2371df22260220b65929ee952f852";
+  sha512.doc = "30823666c424eb695dd1371d6f14e5c0ac84c0c1825939b8c1bcc0f32ce8329496276263358cad91f615a934f82f1fb30f4c04cbaffd107fd145b648dcc45b3b";
+  sha512.source = "f2c10492bb960b84c293a6970a8a8c6fd7699d73ec023b963aaea075b62e072377aaef5750c94b55ef747046a3f3683930607df2a334674a2063773141a1dc61";
+  hasRunfiles = true;
+  version = "1.3f";
+};
+"xits" = {
+  stripPrefix = 0;
+  sha512.run = "f78a9244a0dc31a9a69d920d6228b8dd3b398abd57fdac2e21de1154c93bdf7abaac806df1a76d2ff8994c9d52f17e5803bdea7c43f0e13480301ce136c2a0a9";
+  sha512.doc = "4a8fe4842cdf000083352423735d7f34b6231472dd42a3108c324775ec97fee3f5ef457625f44ea0445c9c34e6f903e2af96c7a33ff3787069d77a4ebe70e145";
+  hasRunfiles = true;
+  version = "1.301";
+};
+"xkeyval" = {
+  stripPrefix = 0;
+  sha512.run = "5d49a32326057d18ebb2bf25d29e06362c23d9a2f9df5058457fd84c9faebb545316c502a7baa19073abdd661e9497255cbcb938684dd006b0c10ba7c957c627";
+  sha512.doc = "a2c51df068c738d598c472143af901392d181db37bb416a2e406ad1d65c6679e428efc1281256edcbd04bf6a64ffd23dd568bed007ea278362ae7378f5371a03";
+  sha512.source = "6764eee7ff0c7649a4f6b809753134dd047ab6bfc3ba1bf16e5ae0fef2df0f3b40cd83b662cde002954ce705e8f8ee5950da36b38b2ee6533e6b089e3a32bf20";
+  hasRunfiles = true;
+  version = "2.7a";
+};
+"xlop" = {
+  stripPrefix = 0;
+  sha512.run = "74f6ec3dfe32715ebe0bc0cbd3181dbc4e8384be19f2f7849333c21398fbb3a43d4e3385c8eb1dc81688bdde44072796cb1210402cdfa7522fd5a9052173004b";
+  sha512.doc = "792a49ef02b67b0db85c827c52ea644235bb2d8c8d8c8c9c4e5c36d1003ab643906e7bad13ddc505e884abecbba97d495ae8d93d4a958c5ff9ce10888c29ae6a";
+  sha512.source = "e9ffcbc786fb8a5f697f23d6e229afbc39dbd9e72bf5d6ec81c396d6b8f62208004475c712301b203e4baef70d1b45cf1a5a41d86997cbfd794a68c8b2020d00";
+  hasRunfiles = true;
+  version = "0.26";
+};
+"xltabular" = {
+  stripPrefix = 0;
+  sha512.run = "57f734e3715107169b53c017e9524c1cd4f29a120e6f6aab7e50e380216ca2f841fb0aa5e3d5fe016a061b87d64eae4714f35dcda8ccb4b2c73ec4d5727a877e";
+  sha512.doc = "fb9567b70272ea7f49d6923a19748a1cc53615f45b56b2b573304c6cfa334f0dcf6aa1fc89a3236d814693332fa3cc71798d548323ec2b1c2bf34071ebd7fd19";
+  hasRunfiles = true;
+  version = "0.2b";
+};
+"xltxtra" = {
+  stripPrefix = 0;
+  deps."metalogo" = tl."metalogo";
+  sha512.run = "decef1877478b8acd8a7a10abca00773bbae707dc47921adbf9e077c67fe186e8a90e5c9f35e8e8c173d93cbe799ba994f53d60e05eff4dde09525375d4e6bf3";
+  sha512.doc = "2f2ded483dee14a97d0e5f673e38864bfef93c41e0c694cd5435d37417f145e472b13c5256a7bde48c8f4439077f4055676a295ab410a7d6ecd4598955c5ff50";
+  sha512.source = "50790bef953636876456586b3908b15f914803fd87ff8c3cf4be576bf9930c2f450c99b60d390508d35d534e5d9bff0cd1b02fbe31bb29444207fff3868ccb1d";
+  hasRunfiles = true;
+  version = "0.7";
+};
+"xmltex" = {
+  deps."latex" = tl."latex";
+  deps."pdftex" = tl."pdftex";
+  deps."tex" = tl."tex";
+  deps."xmltexconfig" = tl."xmltexconfig";
+  deps."babel" = tl."babel";
+  deps."cm" = tl."cm";
+  deps."dehyph" = tl."dehyph";
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."latex-fonts" = tl."latex-fonts";
+  deps."latexconfig" = tl."latexconfig";
+  deps."tex-ini-files" = tl."tex-ini-files";
+  sha512.run = "ff49080eda4d8f0133fd1f0b2a9be88d3017dea9faf6e2b4397b82c38424289e81b23fee7b3489b43a3741eb3218afba2c76749a2aacbc163f6891e04975ba02";
+  sha512.doc = "7c80b6fed3eb28735f19071d7fe0a61672355f6a2d2111c9f8eb8766387762b6d2cb343a5e0b601b6adde1c362c7407c9d1206e4fcc4457d5f4ca66f52d4ba3f";
+  hasRunfiles = true;
+  version = "0.8";
+};
+"xmltexconfig" = {
+  stripPrefix = 0;
+  sha512.run = "2620dde42acffee6561f406527794cc62d87c1104135da846b7cd3c7f4109c4d1986d562ea612f2b5246e1863eff86795c4789075f8475d45de00763cfb539fc";
+  hasRunfiles = true;
+};
+"xmpincl" = {
+  stripPrefix = 0;
+  sha512.run = "8d9a895a1efe8ce5eac190b8242c7f3e3bff7e433e1336aa7143894fbc5691c7b4fd791bae67fcefe97d16ff131b533f8b0c629580d7b5f9420e9216e932b860";
+  sha512.doc = "2757de1bfcbfe9df02d5e667564b1a69205ab86c31f7bcc8ec3f37db0fb1a1f4bb21d7360dbfd771aeafaffa4599becc801df81e339b6f49adafeb38bc1ff5af";
+  sha512.source = "92cdd556f60d8a4186f64800ef5c8a27e331e394ac0120d3e07065688d454ea821839eaaf167bb15980223552160e161cb3c559feffbc4d6657af1019f7c14a2";
+  hasRunfiles = true;
+  version = "2.2";
+};
+"xnewcommand" = {
+  stripPrefix = 0;
+  sha512.run = "3296d6f9b580699e86ee01da444ec9b3cf7b76775f05529cc9c4dd931da5f887c914665651214a8107be612b18cb286ec039ad9ab3de520bd17090b38265d5c9";
+  sha512.doc = "e03b7027a3956829823e92bd4d8a3000d8f79f26558875ea3837adc9ca4a17ce75d9d4e9136d7ebda7bdc8fbbf4a1b44fc6f71d1bfad710d2e22bba8fab24292";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"xoptarg" = {
+  stripPrefix = 0;
+  sha512.run = "3ee6285ecac00a20781ad530a7ca1ef35a94efdcc31d29084e167cde75c51b4bdd644bfb5d25390c3deef44fa7b09e479b6c616169ab0bee1e83d4e37338e00d";
+  sha512.doc = "1692c6700b978cd05cde7c0d45e970a4cc8f783d53cb1e2fc57639483e728ef5dcf29bc7563c9ce42eeaba72da93b36e366876494f3680f0fd5e8eada08694bb";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"xpatch" = {
+  stripPrefix = 0;
+  sha512.run = "8f74955f059b7cc27b01772893cb28c565df3773fe308d7862f7a41bc1930ebe8712468d8e32027d82b3b4f6c1a800b007ae202d8fe672d389f40f582ccb4e70";
+  sha512.doc = "49fb3a9aa844ffe4dfc2e2adcf3ef6135302678bc423c377e171cea4ac784d9e5045e4f080aeec622e2cb5db7f706b8b5592d65e1bab60af766aa7df586979f2";
+  sha512.source = "70bdfc42f330594ad9435acf846243880c3c34cceb57708b8e61fde89e07933f2b9bd131f0ab933d5c7b1076412e150e48357f88ff67441c1e0f4e1d294dca9d";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"xpeek" = {
+  stripPrefix = 0;
+  sha512.run = "dc1dd0534645be0754551b2d3bc146c7e7663f7cc9f2daf40b13a383e13883d25ba46f320317d4e9f251594dccf3a880f5e123683f302638eb3b37018b369ce4";
+  sha512.doc = "047080eda80f9134b98196bf8a06e446ef856028aaa0f936da16db7f63be144b404708045d2a49c5bdb70b7a6f0b6b505697e95a5ff8b98b5b4f1ee8b2949367";
+  sha512.source = "a7e8c3f165314ab79f8702b8ccc82200398e5d5798815c02a7ae3ea0d70dd521d534c50e93b822e41042eb6a0faea07d5f129f05f427e47c2abcaff3adbba459";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"xpiano" = {
+  stripPrefix = 0;
+  sha512.run = "3554bd514e1108649bc98d38dc84951edf17533758325d46726f55d9909d1a3747024aeff62842dc6eb1b5fc760c41a452e207b156bdee06468e9d7732e223b6";
+  sha512.doc = "257c484983eed03adc77b1776c9207ff89b4152b817aa09fb57cb41d8f6494af0db191c61b954a7f2a605cb8695fdd0562cbab1e0c48f85329c3ad61fef0e62d";
+  sha512.source = "b52814268736b61fe3f417f410e4b29f778b6492f838d16894d33db85645799d52d3d744f10b429e68e315a142964b2f5ff57f15e9c4ee7e93a58dbd4b0fa2e2";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"xpicture" = {
+  stripPrefix = 0;
+  sha512.run = "1915b8b9acb3db8d4f8ac4fbc0baab55d6b8352288852f20d066a3f0ce4f7dd0cd4d2d70ae2d2e29aadae0bdb272fcb237146379313b2900accaab2bc10ceb79";
+  sha512.doc = "dafacd0f38ca6a248f701cf48381ce0a3816a693150118ab6a7e18f818814a1b54435820dc8c11135146cfde3d40a08a0f2cd78bc54a9ddb450bb5c848b99e84";
+  sha512.source = "e49b8512ef83ec38f20dafa1e5f191cfd4c2bbcc62016f209be06f969cccdf3cec9545a24756710c767946f8c532074d53de8a6bacd6c565fdf49c579b0cb6c7";
+  hasRunfiles = true;
+  version = "1.2a";
+};
+"xpinyin" = {
+  stripPrefix = 0;
+  sha512.run = "7235eeaf6b0218d4ee87a07b8b16034cbd40ccdf77c96baba14d4ab8a6bd5de78c5f5ab68891a6a91fe4bd0a77de146c357f4e4af4ed443ca8a38526f4f53240";
+  sha512.doc = "b20233a1ff1f2f1f1474e5bcf81fab3747c26a3312d91297c73d1e57ebafd9459727c91da025b5cb4c1875ba5876873eb8099ad4012d85a972dc4fd1ea90e7e8";
+  sha512.source = "47dc1053cdbb87ed09e2bdd6c6fe447c011c1c2af4cfc8a1108431aefc3f5dca069a8bc60b0e97c0775a1ad1cfb54999a69ceee7f85fb493c2e8b0f6d634486e";
+  hasRunfiles = true;
+  version = "2.7";
+};
+"xprintlen" = {
+  stripPrefix = 0;
+  sha512.run = "dc446adfe453430d5e2c9155acaad26e258a36319490a5158f0874292e9e68c1eb61ba57e361b5ff8bfff84c3b4a359709525f42599b95e9ba19ce9e28f88423";
+  sha512.doc = "5905ee8d3589b7d75388e6e2355639435f3a72fa99abc17118068069715ba7220fa3d69f58e046d7972814bfa3834222858bc8933562ac91f83ea250f0952d82";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"xpunctuate" = {
+  stripPrefix = 0;
+  sha512.run = "4b69969632691a529ff0127f21a5974a509a29c047a33cdfc53d1bdef1aacee7d6ee8eeda5d185759b60b2e4dfcd0dc59948a8156767e2a7ced0256aac0697d4";
+  sha512.doc = "04a839972105943ad72b848adb44584b647a3e52842c0956489ce82496d005ce35f4b8c8e6be1337b5f65616036b58e9543e7f4796075f9828aa9220015e441f";
+  sha512.source = "02b04679b0d5ec75f2972f786293250e0115378fee96845249a221be1cbfdce9d03897f877b82950a5c80d117d4693aaa60c06d7effff9c50e63db8a6e1e49d6";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"xq" = {
+  stripPrefix = 0;
+  sha512.run = "f1fc2f43099e022aaac631d4ccd1e5f5b9a9f23db6f1c6c3adf59d47dca57c25728f81ead0ab62d07b9bea6219e3121874c55973b54e826b1a70c5e4fd47c853";
+  sha512.doc = "cbef1b95b4db328cc29d5f4fef544459b893cea82838e9e1f2faba00dd8fc78bd12d36931dba4ebe76cbe985879c30b8606df1f2091fc8d2108311350b2ea339";
+  hasRunfiles = true;
+  version = "0.4";
+};
+"xsavebox" = {
+  stripPrefix = 0;
+  sha512.run = "bd4ecfee707499f13bdeaf278c5ff67807087fdc8da3c38d135e7c0fe1a4b5482751ffece77c89c4efaf1371a08962f0d470df4998863dcf0c69219f7712adc3";
+  sha512.doc = "6e0db4e18ea4a4bf7b4fe7158b226e20c7e2f348f727f9918ba739d9fb5daf7489bdd78c237b44575123cfbcca46eb38de50c5e0f7a5c7c1d40db6cf1bc6fd4c";
+  sha512.source = "b842a4a5655c01b35557b99b136fbffb1f1ecf68157944c8b21e112aef0b59dd63db549fdde78d20dcd2b15b435c521a3a851d231795d4de02baab508744d825";
+  hasRunfiles = true;
+  version = "0.14";
+};
+"xsim" = {
+  stripPrefix = 0;
+  sha512.run = "4cacf876c020262540a136554d065844a428ec754c03f2ca2784eb9e0b7815c3fef01d6ccee44e789a5115a1d563317cef3c3d80bd8b1306d9a441cf6b049581";
+  sha512.doc = "842a1fe4af1c6689be3f647d464a521a42277bac34829a483312e188656c6366493cc0e0fbb1769552a9cc8ea50ceb2c6f17adee97b264e67593ed4a71307f53";
+  hasRunfiles = true;
+  version = "0.14";
+};
+"xskak" = {
+  stripPrefix = 0;
+  sha512.run = "202f61fffbf22346ff6ad6b2b8f411b2a8e4f58a9d53e5613810f2fe0b56b0c73867f0c1c293bb0c1f0edcd4ab73135ae33a953d3709d2d01060c1b638842dd4";
+  sha512.doc = "6256df468580dcee451e4a650ebab0323c92024e9bf872fd683af1f10c19221887b5bd1bed7540a517eb6716627e689759b7ceaaa2944869e18591fba5467114";
+  sha512.source = "11119e38b4f21663e36764d2b9e7da22d9493de7296590db4beefe185b2c9e89224806257d3880c78b07c3984478843b1886e37e5a33fc798920be221789de04";
+  hasRunfiles = true;
+  version = "1.5";
+};
+"xstring" = {
+  stripPrefix = 0;
+  sha512.run = "82254f103053d91eeea4c6230142de06138c392542cac63731c7b34fec5130984bbdebc29ac3b56998717dca11ad444c44f410215b6b89e6748029721a9daac6";
+  sha512.doc = "c0c17b82ad0d5aad95d312935e0214a7e5404a23b9a284a56ac92ec9ea936a9bfd3a68a5b01e29c131b7850a3fd3922ac87020166eaf0a7ed9d695dc80d0a931";
+  hasRunfiles = true;
+  version = "1.83";
+};
+"xtab" = {
+  stripPrefix = 0;
+  sha512.run = "e308d3ae3ae32b945450b319834dfac19b6006cb0ede7f21a91999b840528927aaca7cdc330a02ebad874602d6d268fd1fe609dcb52bef2757b2e0417310e012";
+  sha512.doc = "10a158bf2d50fa89355654da36a179bbbc5d30ef3efa8a79537de66c50a892f540938cb364e45896dc079266d5e47bfc2c74b8cfe01ec1691cde34bc221e4ca2";
+  sha512.source = "0ae0bc4d96f8b7c4dd5bc62d56538ef5e8f5d8d8ecdb114759209dedc722a2aee1b646a27cff611bfd2ec9ac96f0633393cef9d3a13a6d54978740b28fcc09c6";
+  hasRunfiles = true;
+  version = "2.3f";
+};
+"xtuthesis" = {
+  stripPrefix = 0;
+  sha512.run = "5d9081b8d197952aa5ff58b1cbd490bb529cbbc1b72956cca8dd28b1b6bc12c6248d3d04fd457349b30df7594aa1872ce9c8438feb67af1b93ff0fd33eefcb7d";
+  sha512.doc = "96e94598e3e397a9657a83496d940aa2525fdbe1ec2cf820b05e5493b1f3e1c45568e16b62c22d4ee25afe2bd0657848a433477e82cc8038895c2195139ca065";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"xunicode" = {
+  stripPrefix = 0;
+  deps."tipa" = tl."tipa";
+  sha512.run = "f49628013bc54e82bc38a2c749ddde9426c65716f04c5c8d8264398b9595e571d380e07c045db9e7ed5d6df7d0b7b1f8e81eaa28d6b67a6756d2c5023b731176";
+  sha512.doc = "fbd368180c97649944aa23fae4f50f8a8d1aaa776f643ba520f121b9aae196dca94c11906f9d5b2f961b6d494256329670af1f4563502b44a8fc9633e29373e0";
+  hasRunfiles = true;
+  version = "0.981";
+};
+"xurl" = {
+  stripPrefix = 0;
+  sha512.run = "aa1a45825336ed3d62aec9671c53269c3e7e506092fc62e79075ef5bfe483003c513e402e09595ecc9a2f77f637665bbeff89948b1b6c30bcde2022bb110b1f7";
+  sha512.doc = "e69e6008e98bd6de089745223e9ad9690ab29069ff5e6a7ada1bdadba24fac2e16d703ce7534c8403ba4c1a9f84fb53477a1eded5e9522f8f15f17dde463726a";
+  hasRunfiles = true;
+  version = "0.07";
+};
+"xwatermark" = {
+  stripPrefix = 0;
+  sha512.run = "705c9eeccda8b2475cee782f6bb167691e985324361e6dbf147ef9843489f572f2e0b9e47a9f2beb7fdce68ef12ba2bbcb2ccf23c39db489d7d4486f09ff5787";
+  sha512.doc = "70436c9927ed6c3c7604e1e70fa877b9be80287a18d9257abc85526fd756be5b0712b28b47b3271787f6ab062743964ca6eb5204005fec33c3a63d2dcab960ed";
+  hasRunfiles = true;
+  version = "1.5.2d";
+};
+"xyling" = {
+  stripPrefix = 0;
+  sha512.run = "5f78d2d61050d9ed84d56136fe59b4674f4e03a536015e3ebc3b9500dd8a08878164ce9fb1aa9ca9a1262a000149061f3fe22f10cfd68941316aa186b81fe923";
+  sha512.doc = "7b4ca312ea917329260eb0a19bd504ac2f3ddfb5f066806296b164fc541bfe26e6ed1c03ffac5b52af6b19fb4ba1e77b5228ac4b4db0c2ee8f2394fc0f888d09";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"xymtex" = {
+  stripPrefix = 0;
+  sha512.run = "9f0f14d1a862622ad0ef695a58f7dab554daac8d5151193a70c94ea872d16fe8eb1a763d03b226b08583db484bf576f5a41d2070d5396ac323ed00ccb0daf5e1";
+  sha512.doc = "0e2eb5439f2e629da902e4c7d7ddd2d03bc4d654c4ee49e6b005450174acbd70760b52c9deb446ca60efe7c0389403584b86a6f9c9964cf24858b13cfccf7ed3";
+  sha512.source = "d805d6fcb72fb801001ad80fe43ee36126c0764f8baa96dff9fffcf7452bba8e5cf42cbca6a50b89f5925607c277b3fb7408f8f7e6ab087edbade0dac294252a";
+  hasRunfiles = true;
+  version = "5.06";
+};
+"xypic" = {
+  stripPrefix = 0;
+  sha512.run = "5bf1323499bd801e2d5e9ca2eaaf3d7726ed6b8063dee18180eec775ea4d2f86cca8bcae262375455af64ae00951a41b34386fd90666a2a89114a2fcf23ccb7f";
+  sha512.doc = "cee264a3a8ee8f599b2310b4c9b722835a61fe8455c3f873ba91ad22ac7890cff8a1ef25f3d0b80aedd6420f31742f4e533fe20fc81dc83e4cc018684180c7ff";
+  hasRunfiles = true;
+  version = "3.8.9";
+};
+"xypic-tut-pt" = {
+  stripPrefix = 0;
+  sha512.run = "291825c3461b397deb825266c7ee4316c5d04b8db1a29759378409de55c20d81552e31260468f4fa6a9a04f04705422714a8ec70a866c87fca2f4f1e189e0e4e";
+  sha512.doc = "e27dfa0b36341bcd02ba63a8b543f1a6c55c674745cc790543ea2cfded80e536e5901f184a3af62b92b4534c738a06bf4fd5cbd4dfb4da865d13991279309aac";
+};
+"xytree" = {
+  stripPrefix = 0;
+  sha512.run = "fdabfc451679f7ef3752db2537a7dd51e9c0fd34337e429f24e44728ec1ee0a9b97fc2f176948440a5c1cda609182f60d4c564ddcd76c70e84410cc6a0b1f371";
+  sha512.doc = "0e2b08c8db25a5bd992c8aa843d8f6fb2e0efb3c11ea9dd0ac69106cd71f58996f73786513e0ff13bfb54932f468297edbb981e3efccfec2652f80bb02fc6ba7";
+  hasRunfiles = true;
+  version = "1.5";
+};
+"yafoot" = {
+  stripPrefix = 0;
+  sha512.run = "75ab34d40fb051000783abf573f4507e3791ea5aa1cf4b8571ad16bc020f10d17a49220a2878e5a2791fb7f073613ed20d72cd5618feadf38e290ee4f047e615";
+  sha512.doc = "322e9cd25fd7686c4325d04bc7dfa00aee45fe993bdb730ca3669cf860b7cbae1dc76483fe3dec11e09ad848f166a01f43ad0885e0e9fe324ef28d28a7d2b4ad";
+  sha512.source = "5159db9c0f8e1f1ba4fd265c1188c47271b6da4290c33f65e8284b0c95d8144a3219951e13c1fb8e7fc172f2cd0094cc73d63fcd0cab67908f6542881930d772";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"yagusylo" = {
+  stripPrefix = 0;
+  sha512.run = "f6f367155aa16ab0133957fea3c099d4e839f248a87ccca430e43c08257b2aed3a11c77ceaf8484097910bcee2dfadf260ab5047fa7f0244b43bcf332f367bf0";
+  sha512.doc = "0ba73f1c7c7d7d646312f8a3d35c0d063e792ebae45c3e869565f01ef65e14f31bee463a1ebb8ad60166d54cdc23a9d21684675a6ccb09b8da233badb0d0ad96";
+  sha512.source = "0bf71cf46e2cd66f9066dda7e7982f91e06803ad2c89358da94fc0ecd593ecfbed8b36ea9668f3e713987265fcdf03fdaae08ee9dcbf36ec1d22a91e3bfe84c1";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"yaletter" = {
+  stripPrefix = 0;
+  sha512.run = "28765f3b6296ea3b9daf671543b7b2cf371bf2aefb4f3eefe6e95d50ee9a11516a7ec14fec5d15305e8f52d0089072cf10ce9dd4cba30c8fb60fa75365ff0d22";
+  sha512.doc = "ed81b08b0306ceb519c9a652ef0d271bfa486897b05bc3a91a3840e36d348ea86bdd645ae236d3f34de78d038de988a023e542075f871aa6d8752d9606910dc6";
+  sha512.source = "a2e64356234f9bf9bed1a73d5ea362ee487fb3eab43dc89241bf21c7033119e030cf3db81321b1eba245b3330103bff6a7b9f345e6df27f47de35ab9df4a6ace";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"yannisgr" = {
+  stripPrefix = 0;
+  sha512.run = "509e69acdef68eadc65fef6980e9166c6327e8927fb9cdf6a7a33786a8668ac9b900954a4bb661f223967b26dd240d5ebd91683658b324be284e46876c39061d";
+  sha512.doc = "40ecdfe71670357e8ec84fd262015b5b5d0b8e486ab80c05d0863a335649501e9548d785cc2b2374f989b820dadd9a074cc229674dd1ae9a6252d4a0ebeb4191";
+  hasRunfiles = true;
+};
+"yathesis" = {
+  stripPrefix = 0;
+  sha512.run = "f1ce86e173825007f87c2e4c3020ac761e7689cc079993dc7fbcb89985cc8e2684eb5bee4dc7e0a7bf44df0a37fe1d8fb8193e7006b511c256dad2b1b1e1ca4b";
+  sha512.doc = "55f640414d27a1786edb8c1e4542bdabef94fe89e40c5eb06b56db97c6cd06f72f9386a4d27e674e956e7230015406a8f9df54f90e898ea8b7f174f5eeae6dd6";
+  sha512.source = "f3014c4a15010794a30c14a51f9fba4ef39a128e4dd566991b57bd66be3f877745e14c8b1f8e50942870dd3867c892a99d352a9c2d8b275fb299d8c58c511de6";
+  hasRunfiles = true;
+  version = "0.99u";
+};
+"yax" = {
+  stripPrefix = 0;
+  sha512.run = "2fad927b46209e0705f96bcc5aafa9774d5a7cd7e4f984e48950525c282cc5e2273a21f5645bcdecff0a102a236f9f8470fffde829b44a886fe40f47699f94b2";
+  sha512.doc = "f648b61eebdeb9a1d0497cc22205361c5495139fbf835173e067773956793c28220a6a6b8d3f7ac7f275cbcbb77b06a1774e0f4519587fca390d0aabe34ccf80";
+  hasRunfiles = true;
+  version = "1.03";
+};
+"yazd-thesis" = {
+  stripPrefix = 0;
+  sha512.run = "9f8350ad1d606769e5c5825bfa92832775ca7a120287013119f01e3cdd54b052a9bf51cce2c7350e5f7241b4817a4b840590bade6c07646fc519be5ba2d9e11b";
+  sha512.doc = "315a82c7e548df4c971d9281f5da6e58a58282a3b05ab23eb41befe4cbe56b278d9a975c920d10cbd387f8809a2301ce800b9fc1c482dd6c3821040ac5911aa0";
+  hasRunfiles = true;
+  version = "0.3";
+};
+"ycbook" = {
+  stripPrefix = 0;
+  sha512.run = "8b98cd81e5f1252063da8dc297eb5580d06020a343638f7c8a1090a7f056a788eb4322e286f12d821be79fc7de94262a4ff15c14a1c787be0de89ddc87541452";
+  sha512.doc = "45ee725849230549b4b2f200e0b140c1fc99a60d91730a42d2e3df63e828eb6053845a2eb84ff25bf916341df46a3f3c01166848afb291d322dfb21426903644";
+  hasRunfiles = true;
+};
+"ydoc" = {
+  stripPrefix = 0;
+  sha512.run = "4e4292e4e6e6b4f5db8ff0721eacb582960932f48a221835c3e07841168b1f81227fcaaa41ed619430c5455edaef38dc073a8cf6c584ac759e88b9f40710caa3";
+  sha512.doc = "c5257e669d802563c6ecec45a53645a69bc4c7980c95dc0a98164c950c1e5b12b5b4d012bd8a97164fa9b055eb84184c4df520b08949f68283d2ef2e33658838";
+  sha512.source = "a7bfd7160ce16a03505347e158b629c98519f2114f057529a52caf24f818d1553e76714936a9f92b0020b9d16826b5fd259a12d68fe63037cb04f89ef11657a4";
+  hasRunfiles = true;
+  version = "0.6alpha";
+};
+"yfonts" = {
+  stripPrefix = 0;
+  sha512.run = "1caa22023c93ae1e6a2fd94676da61fd576890f991a79d6a9724a4e5f7e653a752c6af792a1b15d44aa956f5788aa995614a33c2d97e95865d6a364f833e539f";
+  sha512.doc = "54857e6693242080c5f410ded0bb16d3df65fee2834b2b5d1232dd063a70796905771059da07e7d92358fce9da992c3e605be345ae7c5d4012d37dc37a17dc82";
+  sha512.source = "c716a8ecca03f0dbaf07146021977fd802e2089c5b99fc7adaac1e581ecbfd4f4b1a15562a54eea7c783f5b8b6165b935e484e36a456ef81729751c777266815";
+  hasRunfiles = true;
+  version = "1.4";
+};
+"yfonts-t1" = {
+  stripPrefix = 0;
+  sha512.run = "ec4cfa0d4f08f506b3bf7a3acc8e303ba51c7761f32498f040e062264e595bebe64a4f5adc7d6ab5aa2180c55b817d0124d5b07b276cb39c775539113a08f490";
+  sha512.doc = "dd37c5163de0bdcce937a1866a48d9f924faff81da11e566e9525a6d5a81ae82419ee7eaebdff1cd8512957a878f849f43e9cd71dd39625e6dc0e2ba18f4ac9b";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"yhmath" = {
+  stripPrefix = 0;
+  sha512.run = "10b98d5af7f179643bc0cd0fbf63e4a088c07e64ca6ac5f20ef05f3a00226159354f212de85ade3c7d96b9fb67e46207fbf7bed9f47a542df8427ac5fe248653";
+  sha512.doc = "cae6f92dd19363251fddd7e6a2934e10e3b22840b5be4c9cc94c399637cfee241fcb34dfa22e93fbde3a599e14c82fb32a72c329c5de3af395ef2848ae7841ff";
+  sha512.source = "61154cd7ae0f43ccc31fdf1c2f2c7e5307bc886990c6a137089cf0d40e7634952026458e92b9c2ec5c7ccf8b6a2969f018c1653b9909d6e0ee848177accb4124";
+  hasRunfiles = true;
+  version = "1.5";
+};
+"yinit-otf" = {
+  stripPrefix = 0;
+  sha512.run = "5ec9f9408c3188b2bf985e9c3f1f9f6a345557d08a167a9d02c07fe41bbb981a8889f580d6e38a97798bb5e891d978eb4ee70b77a344c684051b5644654d1cd1";
+  sha512.doc = "6c73466c1e4ce1f7aec1b30980e5c44ca4917e161236fad7a0816bc93e921525b90f62abd8d41d3b767d8a6eda62a34534d7129d1fc490fda430345f8a2b3ce7";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"york-thesis" = {
+  stripPrefix = 0;
+  sha512.run = "5b5152cc315dc05164ba3502d6e7aff355d853e43a3836bda0a15a4af7a90ef9fef02c852125c7e1e4842c05d51f2be6441b5131400eb46bb6704b281711e18d";
+  sha512.doc = "e1ee454ad9996b61f1cac9bbeec30210359ecd8939bd9e0696e7cca7106733b13b8831946c47652186d4b80060f96c479b642274f5c90f8757953b1c3861f0bc";
+  sha512.source = "3096ee9334bab690b38ff943559a0a7b0c54f8b831e7d1320ae4581740c48dd05e09813e220ce1d28d4523fb456d7fd01920e89e7e0d66da00e9dce88bfadea7";
+  hasRunfiles = true;
+  version = "3.6";
+};
+"youngtab" = {
+  stripPrefix = 0;
+  sha512.run = "d394f53ea68d2874036faa0d00323a0c15e3144a2433e27db0a630f05a637bad37d297132a92c00bc5ba3fb8a8bc643bc8778787b8897ab03296eb62d33683b6";
+  sha512.doc = "38d42380d67372f2b84984cf41b0cd775c6b707405baffc5852cb147bba914899bcc09230e645e7779deb142358a4bf46f1efa0b47f159eeadc09d3e99f2728d";
+  sha512.source = "88d214c9cd6d87f6cd2c075ebb5554c55038f0eacbe047d7d90ab1a3fe695a9329c34149c2026fafed045e02449688e2fc3b0b5ecc24d0960640a3557a284739";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"yplan" = {
+  sha512.run = "4884ac99b0b56927fb86c6e06ae9d4accb7d8b441bb17df79753d8af9ee84b9440d66ad4fcf2107aa036eb2af89d5ad49d0a4c4cb91236c6475cf81bab85566a";
+  sha512.doc = "7d3cddf3f2d54283b777c7ab7867df68fdb484c67d2f88589e29fc087db721e7ba9e0fcea2ffde9328e89075884d668b7de8fc61f462b735d9f1cfadb9662463";
+  hasRunfiles = true;
+};
+"ytableau" = {
+  stripPrefix = 0;
+  sha512.run = "2d9528c47b516213d0d8ea6341edc1772aa4a88a7db60d4506cbef107be034bcb9036b18f61a12e042e95bd9d0aea51b0ee696565841d2efb12b442756c48a30";
+  sha512.doc = "47db377bfecce43d97e573360cfc65936664b5ea886b5bc0042b39e3a879becef0e9894c364a31cb4cda7420ba672c8f55e7936ae5b1d291259d8deb7a6d9f9d";
+  sha512.source = "02c2aff53daaec5161a9715de2e633d03dedc85664868d73c49dc0edc5c8b0bc696e3e8ab6d25f3420663fcff830581a7b2fdd0718a3c4928aa808ca3b1cbde3";
+  hasRunfiles = true;
+  version = "1.3";
+};
+"zapfchan" = {
+  stripPrefix = 0;
+  sha512.run = "46a104a6e4d1cf681bf10bf22fa32510982939cf52dd255a7ec50e5a9f95acf72457195cee13499c6f517a7f2b03be8a285eb6730f659d59ee5aa42522ba34bb";
+  hasRunfiles = true;
+};
+"zapfding" = {
+  stripPrefix = 0;
+  sha512.run = "e3e6e69b82858d8bd653bcb112ed81b8b5aacc0b915b5e4ed4288f5aef896211e75b85b1b647989e0ffa431ec204a9d8ad27b2e60bc2b28eea83eb3518945bf1";
+  hasRunfiles = true;
+};
+"zebra-goodies" = {
+  stripPrefix = 0;
+  sha512.run = "c6ba09e174207ed9f28053bd82ae46551910358e74ad7afd74b406a93d4720f5b11b1921497c3c464c80b55d8fd4e4adbfb115f3ed9a9bcdf68ebf96bda06434";
+  sha512.doc = "48652f89e032526de7c37ad57ff5719d75dd50e5a00ec48a4d94c314bb159d76061ce9c9cf8519bfc8d546e274f8ab1344751d798abac422562efe6026df1872";
+  sha512.source = "2f2cebe6593b55cdbe03bec6215f74a4520a3a0f5198316e749eafd9adab2f9b4a7fef99dcd831cccffb0d758e2755bf7a97c21df8b7f1b770b4e5359d69bc7e";
+  hasRunfiles = true;
+  version = "0.8.0";
+};
+"zed-csp" = {
+  stripPrefix = 0;
+  sha512.run = "2f41c5b28e602aa88146cbbc172eb2d6c6f21491e45622c4c1688b9a8acb5be304a8acde842bef84f7a238109ac9ebefa31844826387b266f14faa6a6943903a";
+  sha512.doc = "e5e657656e46023e32366ba415f46322f4c9b4fe0e69f03c88d4e5fcdd577e3436be6436424f502c3807278efe3a31ab7cba3020ef3c9e44874de3660dcccd2b";
+  hasRunfiles = true;
+};
+"zhlineskip" = {
+  stripPrefix = 0;
+  sha512.run = "c1e92d164d0b46ca1165775e5c17f72687cd83b6efbba95dd58fe55008877ab3f08bbaf90d36d491ec861705e9d15f74511c8a0f9cf66ef8bf5127d7aa2cf203";
+  sha512.doc = "794822b3b89aec655af2663f3dfbe848ccac9fea8369f446596562178e73c01ddadcf1ce46fd1811e4b72a25917c310bd42e45f9b16a3adb897304ae345d5415";
+  hasRunfiles = true;
+  version = "1.0e";
+};
+"zhlipsum" = {
+  stripPrefix = 0;
+  sha512.run = "64ccc1f0baf30980162ce259d897a9fc97c6771768fadc3958e398e38f96ac6ea115b126a1b106270a7a509358108ffe8b93cf52af87503c66b8a365585391f6";
+  sha512.doc = "06692d711ee3009bf11bc641569a9e3b0d6e339e0b7dca6e5e5d3a689b3fd24a5d4eaa45de7cd4ac2c0e3feea5c2612881dcc4bca88b12f554bc78fe96cb8220";
+  sha512.source = "32d12c4f3699275119f5dacbd7b6bbb559555ddceeccfcd908e0bb6f2db50b76cbe0323b7ce6e0474d369a1e343718cb0024cd0f87487e629dfc9f104c3e6950";
+  hasRunfiles = true;
+  version = "1.1.1";
+};
+"zhmetrics" = {
+  stripPrefix = 0;
+  sha512.run = "abc0b873b5abb0b053fb59d8bb831a835f90cd8bfc2cde87d1031dba2e31db8721e3ea1037e7322b33ae5216dd65bd01008fb769eade0c9b4815e8ea7c55615c";
+  sha512.doc = "e77fd912d10d8ab535c366f8e5b99e996607788b9ede295a3d7739fc4c14e0679c66c36bdefe2ce5433967b28b2ab228c332d9b0a23a841d42d3fa56cd204040";
+  sha512.source = "d505658c340bc3824332ed473927bf971612204e69c56839d4e0bd0b6ad4b84a975fe32e863d12d2e0ecae580edd06c3ea0854b90cf762aa9ad6106d2f2afc1a";
+  hasRunfiles = true;
+  version = "r206";
+};
+"zhmetrics-uptex" = {
+  stripPrefix = 0;
+  sha512.run = "1e068a0b402a5c69b44a86d797cb24266b2883c698decd8b8464c99b131d292cc5ac44249ba8e89dc0a414d6f12d73d4c069ffc3081cfa4b9926ca412bfc3dd6";
+  sha512.doc = "f9ac2953877cd830e1cf3402f3f2bac1f8159d05a4a74e89047c494ae04dc8930f1c09701f83871b4361976572ae7d1c5fbdaf3af3d9e6db12347a207f1b82cb";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"zhnumber" = {
+  stripPrefix = 0;
+  sha512.run = "f5e0783636ca643463811293816c95f2e20345fc6b08f2bd22143ead830b102b7d5acb6dd587975ecae205ce8b79d75cff62bab153a6ada689958835c77298c5";
+  sha512.doc = "d58579fcb6b5464db3d1ec20942b61516eb481df88fa23ef24f890a937fa72b62c6fef7fd2772172c4faf1a616805bfe32bdf39e17d854b907dc61ec9f6b6f4e";
+  sha512.source = "c3ac546227494e59e44324c1f637e280982ba1a27644add9d1c8248b2cee0299154adef6d673eba91ef39124db16dafe0d30dc0ec09bfe9b2dc9f28b6b10bf61";
+  hasRunfiles = true;
+  version = "2.7";
+};
+"zhspacing" = {
+  stripPrefix = 0;
+  sha512.run = "52d1d3523ae4c0d2dba5258b06cf9920f8a9005df7e03fd1407dd8ae2e4dc90768aab10127319ef9025765820b3ebb8a946ea0373114c9148a303517b563bfe0";
+  sha512.doc = "7fd15e4f29671081670e881e9366ba627f5bed6d981fa0ef1c670d0744e1286c04e785e28b92279d66af851803d84949c2f463370f23c64987fea78531172128";
+  hasRunfiles = true;
+};
+"ziffer" = {
+  stripPrefix = 0;
+  sha512.run = "3d29074642d8a4c63046347a36f47548557de92a64ab4d6b7d1cad87f97a9e25a09fe84cf699a3bf2129c4de00dd3ef3593f85056e8f38a9a2d1ca27c549cf96";
+  sha512.doc = "8eb75b54a6711ba0d0ad30343f253eabf88b3752de3112b13b96e4182119ef5f789916c413a5ca35ba7bf6619eb25bf64e7717844e4b9a49d33781d91f5b14af";
+  hasRunfiles = true;
+  version = "2.1";
+};
+"zlmtt" = {
+  stripPrefix = 0;
+  sha512.run = "b60e880508e08fc0a3f265b7d85c7ae8667c0a16264148a2944184a598f690f337149348157dc7b7b11f1cac59d44117425b50a26bbdaa0fbf1dcebb023093e6";
+  sha512.doc = "22e301f72e0b62078d7b6fe7d7740e0477d9b18beb59ab55b81dd65c50cb250ae711886f01944cdfd25f82d0dd2089c41e662cb2f16eaa0252d70c1006eed8d8";
+  hasRunfiles = true;
+  version = "1.02";
+};
+"zootaxa-bst" = {
+  stripPrefix = 0;
+  sha512.run = "80816556a2e23cfd8345b7d22224142a5448105ccc5c1143f33c4560a4e4ab432115c2fc47c5d4c6ba599031f4c36b481465a5fa7b32afde888beac69a6e6c62";
+  sha512.doc = "f843aa27ab0c2139e1051aefaa9b667f2de489cc13578200ce7db2bdfc2397888856c6cbe68b6fa201e0cb269bb95818cb31f1b03622c49ebdced23fa5960d65";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"zwgetfdate" = {
+  stripPrefix = 0;
+  sha512.run = "fe52555cc46a9e8340d8c9c37f88b372bf72efbd48a097b2d319592dc49a8cf55c87e80ea7d94ba6730742e9883215703749895008ba38838750efb9fb2334e9";
+  sha512.doc = "7ab61dc4252ef7f60d1d5be8d4415bcaeaed194384a1da14a3400617b36c6efae3679dbbd6c8d64b8cc9f9947babe88c064d637379f663408cbe63ca42334bfb";
+  hasRunfiles = true;
+};
+"zwpagelayout" = {
+  stripPrefix = 0;
+  sha512.run = "f050edb743cb045547080925153ac16317f7f78205eedbc37b9db39704b84db376c9362cefcd6711d8c98d46af4d2baa82fe4c3be581d1e9c33689b702679d14";
+  sha512.doc = "6f2a0c3e646f442e570ce576cf638a6a290b0bf0f120b19a27c1f190fb3d20d0d3dcd2a2e3490e9671846338b9d6890884f54296a31593993be9bfd06a7241fb";
+  hasRunfiles = true;
+  version = "1.4d";
+};
+"zxjafbfont" = {
+  stripPrefix = 0;
+  sha512.run = "357b100dac7061a5e6fe91e3a708f32e99a134158393581bc717ae3e90afa5dbbff7aa1bae8c092638bca2d5c3ab65d8a8cbc39c20c3ec1ff85c967fb3849513";
+  sha512.doc = "215079eeb772dc4ea55d5e00945a757c877acf9ea56aebe5a8969564a3836f54ca406d502d73e93d92b131600fc77bd2342d36fa78300adc0b4d1dd7f5d0f423";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"zxjafont" = {
+  stripPrefix = 0;
+  sha512.run = "8d56b2f09b2f96a303a8338252a078c5856703d466ba23d2f8a96f93c002ea3f30c072398f47bf9c38aa94b08f93a9b3aef44799b61c117df9a9cbfadf60c2a9";
+  sha512.doc = "f6a332e3db7db28041cf0815122ec1134276b12c042fc2b1defb214ef6946598c9149e717309fde2c28b50cac545cbb2d0077890adffb8d3ec0371dfd876f66e";
+  hasRunfiles = true;
+  version = "0.5";
+};
+"zxjatype" = {
+  stripPrefix = 0;
+  sha512.run = "fcc4c18b6a9ed31d4d32280aa088be06f6109deab53ce9e1820bc743151c1209e24d8c26bddaabd76f774be95de7599b087ef92415191fbf79a938169b9181fb";
+  sha512.doc = "e971a21c677f93e1caad2951fe05296f5ae253d6d31d32e160f8606492b7c21f9995e9a1ec3ac5581cf1fb52c4174acec35cdf871644bb74d5b50cef421d78cd";
+  hasRunfiles = true;
+  version = "0.6c";
+};
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/texlive/setup-hook.sh b/nixpkgs/pkgs/tools/typesetting/tex/texlive/setup-hook.sh
new file mode 100644
index 000000000000..5faef7fe5df5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/texlive/setup-hook.sh
@@ -0,0 +1,7 @@
+addTeXMFPath () {
+    if test -d "$1/share/texmf-nix"; then
+        export TEXINPUTS="${TEXINPUTS}${TEXINPUTS:+:}$1/share/texmf-nix//:"
+    fi
+}
+
+addEnvHooks "$targetOffset" addTeXMFPath
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/texlive/texlinks.diff b/nixpkgs/pkgs/tools/typesetting/tex/texlive/texlinks.diff
new file mode 100644
index 000000000000..97770cc812f9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/texlive/texlinks.diff
@@ -0,0 +1,9 @@
+@@ -157,7 +157,7 @@
+       verbose_echo "skipped ConTeXtish symlink $src -> $dest (special case)"
+       ;;
+     *)
+-      test ! -f "$src" &&
++      test "x$src" != "x`(ls -ld $src | awk '{print $NF}') 2>/dev/null`" &&
+         rm -f "$src"
+   
+       if test -f "$src"; then
diff --git a/nixpkgs/pkgs/tools/typesetting/tex/texlive/tl2nix.sed b/nixpkgs/pkgs/tools/typesetting/tex/texlive/tl2nix.sed
new file mode 100644
index 000000000000..8c29c8e76ae4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tex/texlive/tl2nix.sed
@@ -0,0 +1,31 @@
+# wrap whole file into an attrset
+1itl: { # no indentation
+$a}
+
+# trash packages we don't want
+/^name .*\./,/^$/d
+
+# quote package names, as some start with a number :-/
+s/^name (.*)/name "\1"/
+
+# form an attrmap per package
+/^name /s/^name (.*)/\1 = {/p
+/^$/,1i};
+
+# extract hashes of *.tar.xz
+s/^containerchecksum (.*)/  sha512.run = "\1";/p
+s/^doccontainerchecksum (.*)/  sha512.doc = "\1";/p
+s/^srccontainerchecksum (.*)/  sha512.source = "\1";/p
+/^runfiles /i\  hasRunfiles = true;
+
+# number of path components to strip, defaulting to 1 ("texmf-dist/")
+/^relocated 1/i\  stripPrefix = 0;
+
+# extract version and clean unwanted chars from it
+/^catalogue-version/y/ \/~/_--/
+/^catalogue-version/s/[\#,:\(\)]//g
+s/^catalogue-version_(.*)/  version = "\1";/p
+
+# extract deps
+s/^depend ([^.]*)$/  deps."\1" = tl."\1";/p
+
diff --git a/nixpkgs/pkgs/tools/typesetting/tikzit/default.nix b/nixpkgs/pkgs/tools/typesetting/tikzit/default.nix
new file mode 100644
index 000000000000..5ee1adda483b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/tikzit/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchFromGitHub, qmake, qttools, qtbase, libsForQt5, flex, bison }:
+
+stdenv.mkDerivation {
+  pname = "tikzit";
+  version = "2.1.4";
+
+  src = fetchFromGitHub {
+    owner = "tikzit";
+    repo = "tikzit";
+    rev = "v2.1.4";
+    sha256 = "121pgl2cdkksw48mjg6hzk7324ax6iw6fq7q3v1kdgwm8rwxm1fl";
+  };
+
+  nativeBuildInputs = [ qmake qttools flex bison ];
+  buildInputs = [ qtbase libsForQt5.poppler ];
+
+  # src/data/tikzlexer.l:29:10: fatal error: tikzparser.parser.hpp: No such file or directory
+  enableParallelBuilding = false;
+
+  meta = with stdenv.lib; {
+    description = "A graphical tool for rapidly creating graphs and diagrams using PGF/TikZ";
+    longDescription = ''
+      TikZiT is a simple GUI editor for graphs and string diagrams.
+      Its native file format is a subset of PGF/TikZ, which means TikZiT files
+      can be included directly in papers typeset using LaTeX.
+      For preview support the texlive package 'preview' has to be installed.
+    '';
+    homepage = https://tikzit.github.io/;
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    maintainers = [ maintainers.iblech maintainers.mgttlinger ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/xmlroff/default.nix b/nixpkgs/pkgs/tools/typesetting/xmlroff/default.nix
new file mode 100644
index 000000000000..eb026e5557eb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/xmlroff/default.nix
@@ -0,0 +1,55 @@
+{ stdenv, fetchFromGitHub
+, autoreconfHook
+, gtk2
+, libxml2
+, libxslt
+, pango
+, pangoxsl
+, perl
+, pkgconfig
+, popt
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xmlroff";
+  version = "0.6.3";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0dgp72094lx9i9gvg21pp8ak7bg39707rdf6wz011p9s6n6lrq5g";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  buildInputs = [
+    libxml2
+    libxslt
+    pango
+    pangoxsl
+    gtk2
+    popt
+  ];
+
+  sourceRoot = "source/xmlroff/";
+
+  enableParallelBuilding = true;
+
+  configureScript = "./autogen.sh";
+
+  configureFlags = [
+    "--disable-gp"
+  ];
+
+  preBuild = ''
+    substituteInPlace tools/insert-file-as-string.pl --replace "/usr/bin/perl" "${perl}/bin/perl"
+    substituteInPlace Makefile --replace "docs" ""  # docs target wants to download from network
+  '';
+
+  meta = with stdenv.lib; {
+    description = "XSL Formatter";
+    homepage = "http://xmlroff.org/";
+    platforms = platforms.unix;
+    license = licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/typesetting/xmlto/default.nix b/nixpkgs/pkgs/tools/typesetting/xmlto/default.nix
new file mode 100644
index 000000000000..b5b03b470cde
--- /dev/null
+++ b/nixpkgs/pkgs/tools/typesetting/xmlto/default.nix
@@ -0,0 +1,51 @@
+{ fetchurl, stdenv, libxml2, libxslt
+, docbook_xml_dtd_45, docbook_xsl, w3m
+, bash, getopt, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  name = "xmlto-0.0.28";
+  src = fetchurl {
+    url = "http://fedorahosted.org/releases/x/m/xmlto/${name}.tar.bz2";
+    sha256 = "0xhj8b2pwp4vhl9y16v3dpxpsakkflfamr191mprzsspg4xdyc0i";
+  };
+
+  postPatch = ''
+    patchShebangs xmlif/test/run-test
+
+    substituteInPlace "xmlto.in" \
+      --replace "/bin/bash" "${bash}/bin/bash"
+    substituteInPlace "xmlto.in" \
+      --replace "/usr/bin/locale" "$(type -P locale)"
+    substituteInPlace "xmlto.in" \
+      --replace "mktemp" "$(type -P mktemp)"
+  '';
+
+  # `libxml2' provides `xmllint', needed at build-time and run-time.
+  # `libxslt' provides `xsltproc', used by `xmlto' at run-time.
+  nativeBuildInputs = [ makeWrapper getopt ];
+  buildInputs = [ libxml2 libxslt docbook_xml_dtd_45 docbook_xsl ];
+
+  postInstall = ''
+    wrapProgram "$out/bin/xmlto" \
+       --prefix PATH : "${stdenv.lib.makeBinPath [ libxslt libxml2 getopt ]}"
+
+    # `w3m' is needed for HTML to text conversions.
+    substituteInPlace "$out/share/xmlto/format/docbook/txt" \
+      --replace "/usr/bin/w3m" "${w3m}/bin/w3m"
+  '';
+
+  meta = {
+    description = "Front-end to an XSL toolchain";
+
+    longDescription = ''
+      xmlto is a front-end to an XSL toolchain.  It chooses an
+      appropriate stylesheet for the conversion you want and applies
+      it using an external XSL-T processor.  It also performs any
+      necessary post-processing.
+    '';
+
+    license = stdenv.lib.licenses.gpl2Plus;
+    homepage = https://fedorahosted.org/xmlto/;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/atomicparsley/default.nix b/nixpkgs/pkgs/tools/video/atomicparsley/default.nix
new file mode 100644
index 000000000000..a4089636b951
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/atomicparsley/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchhg, autoreconfHook, zlib, Cocoa }:
+
+stdenv.mkDerivation {
+  pname = "atomicparsley";
+  version = "0.9.6";
+
+  src = fetchhg {
+    url = "https://bitbucket.org/wez/atomicparsley";
+    sha256 = "05n4kbn91ps52h3wi1qb2jwygjsc01qzx4lgkv5mvwl5i49rj8fm";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  buildInputs = [ zlib ]
+    ++ stdenv.lib.optionals stdenv.isDarwin [ Cocoa ];
+
+  configureFlags = stdenv.lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
+    # AC_FUNC_MALLOC is broken on cross builds.
+    "ac_cv_func_malloc_0_nonnull=yes"
+    "ac_cv_func_realloc_0_nonnull=yes"
+  ];
+
+  installPhase = "install -D AtomicParsley $out/bin/AtomicParsley";
+
+  meta = with stdenv.lib; {
+    description = ''
+      A lightweight command line program for reading, parsing and
+      setting metadata into MPEG-4 files
+    '';
+
+    longDescription = ''
+      This is a maintained fork of the original AtomicParsley.
+    '';
+
+    homepage = https://bitbucket.org/wez/atomicparsley;
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ pjones ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/bento4/default.nix b/nixpkgs/pkgs/tools/video/bento4/default.nix
new file mode 100644
index 000000000000..4dea8dba6eda
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/bento4/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub
+, cmake
+}:
+stdenv.mkDerivation rec {
+  pname = "bento4";
+  version = "1.5.1-629";
+
+  src = fetchFromGitHub {
+    owner = "axiomatic-systems";
+    repo = "Bento4";
+    rev = "v${version}";
+    sha256 = "1614idy0r7qrkiaq4kz3gh1b1bpx592aqvi574kxnjrxc34kpmb3";
+  };
+
+  patches = [ ./libap4.patch ];
+
+  nativeBuildInputs = [ cmake ];
+
+  cmakeFlags = [ "-DBUILD_SHARED_LIBS=ON" ];
+
+  installPhase = ''
+    mkdir -p $out/{lib,bin}
+    find -iname '*.so' -exec mv --target-directory="$out/lib" {} \;
+    find -maxdepth 1 -executable -type f -exec mv --target-directory="$out/bin" {} \;
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Full-featured MP4 format and MPEG DASH library and tools";
+    homepage = http://bento4.com;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ makefu ];
+    broken = stdenv.isAarch64;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/bento4/libap4.patch b/nixpkgs/pkgs/tools/video/bento4/libap4.patch
new file mode 100644
index 000000000000..ca2936003b84
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/bento4/libap4.patch
@@ -0,0 +1,5 @@
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -36 +36 @@ endif()
+-add_library(ap4 STATIC ${AP4_SOURCES})
++add_library(ap4 ${AP4_SOURCES})
diff --git a/nixpkgs/pkgs/tools/video/dvgrab/default.nix b/nixpkgs/pkgs/tools/video/dvgrab/default.nix
new file mode 100644
index 000000000000..8fe2a70dcb44
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/dvgrab/default.nix
@@ -0,0 +1,39 @@
+{ fetchFromGitHub, stdenv, libunwind, libraw1394, libjpeg, libiec61883, libdv
+, libavc1394, pkgconfig, autoreconfHook }:
+
+stdenv.mkDerivation {
+  name = "dvgrab-2016-05-16";
+
+  src = fetchFromGitHub {
+    # mirror of original project with some build fixes
+    owner = "ddennedy";
+    repo = "dvgrab";
+    rev = "e46042e0c7b3523b6854ee547b0534e8310b7460";
+    sha256 = "17qy76fjpzrbxm4pj0ljx5lbimxryv24fvr13jwkh24j85dxailn";
+  };
+
+  buildInputs = [
+    libunwind libraw1394 libjpeg libiec61883 libdv libavc1394
+  ];
+
+  nativeBuildInputs = [
+    autoreconfHook pkgconfig
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Receive and store audio & video over IEEE1394";
+
+    longDescription = ''
+      dvgrab receives audio and video data from a digital camcorder via an
+      IEEE1394 (widely known as FireWire) or USB link and stores them into
+      one of several file formats. It features autosplit of long video
+      sequences, and supports saving the data as raw frames, AVI type 1,
+      AVI type 2, Quicktime DV, a series of JPEG stills or MPEG2-TS.
+    '';
+
+    homepage = http://kinodv.org/;
+
+    license = licenses.gpl2Plus;
+    platforms = platforms.gnu ++ platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/flvtool2/default.nix b/nixpkgs/pkgs/tools/video/flvtool2/default.nix
new file mode 100644
index 000000000000..06830d1be636
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/flvtool2/default.nix
@@ -0,0 +1,16 @@
+{ lib, buildRubyGem, ruby }:
+
+buildRubyGem rec {
+  inherit ruby;
+  name = "${gemName}-${version}";
+  gemName = "flvtool2";
+  version = "1.0.6";
+  source.sha256 = "0xsla1061pi4ryh3jbvwsbs8qchprchbqjy7652g2g64v37i74qj";
+
+  meta = {
+    homepage = https://github.com/unnu/flvtool2;
+    description = "A tool to manipulate Macromedia Flash Video files";
+    platforms = ruby.meta.platforms;
+    license = lib.licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/gopro/default.nix b/nixpkgs/pkgs/tools/video/gopro/default.nix
new file mode 100644
index 000000000000..f783b086345a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/gopro/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchFromGitHub
+, ffmpeg
+, imagemagick
+, makeWrapper
+, mplayer
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gopro";
+  version = "1.0";
+
+  src = fetchFromGitHub {
+    owner = "KonradIT";
+    repo = "gopro-linux";
+    rev = version;
+    sha256 = "0sb9vpiadrq8g4ag828h8mvq01fg0306j0wjwkxdmwfqync1128l";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 gopro -t $out/bin
+    wrapProgram $out/bin/gopro \
+      --prefix PATH ":" "${stdenv.lib.makeBinPath [ ffmpeg imagemagick mplayer ]}"
+
+    runHook postInstall
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Command line interface for processing media filmed on GoPro HERO 3, 4, 5, 6, and 7 cameras";
+    homepage = "https://github.com/KonradIT/gopro-linux";
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ jonringer ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/mjpegtools/default.nix b/nixpkgs/pkgs/tools/video/mjpegtools/default.nix
new file mode 100644
index 000000000000..3e72d8b8af59
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/mjpegtools/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, lib, fetchurl, gtk2, libdv, libjpeg, libpng, libX11, pkgconfig, SDL, SDL_gfx
+, withMinimal ? true
+}:
+
+# TODO:
+# - make dependencies optional
+# - libpng-apng as alternative to libpng?
+# - libXxf86dga support? checking for XF86DGAQueryExtension in -lXxf86dga... no
+
+stdenv.mkDerivation rec {
+  name = "mjpegtools-2.1.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/mjpeg/${name}.tar.gz";
+    sha256 = "01y4xpfdvd4zgv6fmcjny9mr1gbfd4y2i4adp657ydw6fqyi8kw6";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libdv libjpeg libpng ]
+              ++ lib.optionals (!withMinimal) [ gtk2 libX11 SDL SDL_gfx ];
+
+  NIX_CFLAGS_COMPILE = lib.optionalString (!withMinimal) "-I${SDL.dev}/include/SDL";
+
+  postPatch = ''
+    sed -i -e '/ARCHFLAGS=/s:=.*:=:' configure
+  '';
+
+  enableParallelBuilding = true;
+
+  outputs = [ "out" "lib" ];
+
+  meta = with stdenv.lib; {
+    description = "A suite of programs for processing MPEG or MJPEG video";
+    homepage = http://mjpeg.sourceforge.net/;
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/rav1e/default.nix b/nixpkgs/pkgs/tools/video/rav1e/default.nix
new file mode 100644
index 000000000000..b57fa540837e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/rav1e/default.nix
@@ -0,0 +1,45 @@
+{ rustPlatform, fetchFromGitHub, fetchurl, stdenv, lib, nasm }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rav1e";
+  version = "0.2.1";
+
+  src = stdenv.mkDerivation rec {
+    name = "${pname}-${version}-source";
+
+    src = fetchFromGitHub {
+      owner = "xiph";
+      repo = "rav1e";
+      rev = "v${version}";
+      sha256 = "1lv8g1vw11lanyx6lqr34hb6m4x1fvwb60kgg5nk8s8hgdr18i0y";
+    };
+    cargoLock = fetchurl {
+      url = "https://github.com/xiph/rav1e/releases/download/v${version}/Cargo.lock";
+      sha256 = "1d51wcm537pzfmq48vsv87dwf035yl03qkfc0372gchpv079561w";
+    };
+
+    installPhase = ''
+      mkdir -p $out
+      cp -R ./* $out/
+      cp ${cargoLock} $out/Cargo.lock
+    '';
+  };
+
+  cargoSha256 = "0frr4sx05pwvj9gmlvmis6lrnbwk3x579fv3kw38374jy33nrr6z";
+
+  nativeBuildInputs = [ nasm ];
+
+  meta = with lib; {
+    description = "The fastest and safest AV1 encoder";
+    longDescription = ''
+      rav1e is an AV1 video encoder. It is designed to eventually cover all use
+      cases, though in its current form it is most suitable for cases where
+      libaom (the reference encoder) is too slow.
+      Features: https://github.com/xiph/rav1e#features
+    '';
+    inherit (src.src.meta) homepage;
+    license = licenses.bsd2;
+    maintainers = [ maintainers.primeos ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/rtmpdump/default.nix b/nixpkgs/pkgs/tools/video/rtmpdump/default.nix
new file mode 100644
index 000000000000..06c035552e54
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/rtmpdump/default.nix
@@ -0,0 +1,52 @@
+{ stdenv, fetchgit, fetchpatch, zlib
+, gnutlsSupport ? false, gnutls ? null, nettle ? null
+, opensslSupport ? true, openssl ? null
+}:
+
+# Must have an ssl library enabled
+assert (gnutlsSupport || opensslSupport);
+assert gnutlsSupport -> gnutlsSupport != null && nettle != null && !opensslSupport;
+assert opensslSupport -> openssl != null && !gnutlsSupport;
+
+with stdenv.lib;
+stdenv.mkDerivation {
+  pname = "rtmpdump";
+  version = "2019-03-30";
+
+  src = fetchgit {
+    url = "git://git.ffmpeg.org/rtmpdump";
+    # Currently the latest commit is used (a release has not been made since 2011, i.e. '2.4')
+    rev = "c5f04a58fc2aeea6296ca7c44ee4734c18401aa3";
+    sha256 = "07ias612jgmxpam9h418kvlag32da914jsnjsfyafklpnh8gdzjb";
+  };
+
+  patches = [
+    # Fix build with OpenSSL 1.1
+    (fetchpatch {
+      url = "https://gitweb.gentoo.org/repo/gentoo.git/plain/media-video/rtmpdump/files/rtmpdump-openssl-1.1.patch?id=1e7bef484f96e7647f5f0911d3c8caa48131c33b";
+      sha256 = "1wds98pk8qr7shkfl8k49iirxiwd972h18w84bamiqln29wv6ql1";
+    })
+  ];
+
+  makeFlags = [ ''prefix=$(out)'' ]
+    ++ optional gnutlsSupport "CRYPTO=GNUTLS"
+    ++ optional opensslSupport "CRYPTO=OPENSSL"
+    ++ optional stdenv.isDarwin "SYS=darwin"
+    ++ optional stdenv.cc.isClang "CC=clang";
+
+  propagatedBuildInputs = [ zlib ]
+    ++ optionals gnutlsSupport [ gnutls nettle ]
+    ++ optional opensslSupport openssl;
+
+  outputs = [ "out" "dev" ];
+
+  separateDebugInfo = true;
+
+  meta = {
+    description = "Toolkit for RTMP streams";
+    homepage    = "http://rtmpdump.mplayerhq.hu/";
+    license     = licenses.gpl2;
+    platforms   = platforms.unix;
+    maintainers = with maintainers; [ codyopel ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/swfmill/default.nix b/nixpkgs/pkgs/tools/video/swfmill/default.nix
new file mode 100644
index 000000000000..3832f3c3be0c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/swfmill/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl
+, pkgconfig, libxslt, freetype, libpng, libxml2
+}:
+
+stdenv.mkDerivation rec {
+  name = "swfmill-0.3.3";
+
+  src = fetchurl {
+    url = "http://swfmill.org/releases/${name}.tar.gz";
+    sha256 = "15mcpql448vvgsbxs7wd0vdk1ln6rdcpnif6i2zjm5l4xng55s7r";
+  };
+
+  # Fixes build with GCC 6
+  NIX_CFLAGS_COMPILE = "-std=c++03";
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ libxslt freetype libpng libxml2 ];
+
+  meta = {
+    description = "An xml2swf and swf2xml processor with import functionalities";
+    homepage = http://swfmill.org;
+    license = stdenv.lib.licenses.gpl2;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/swftools/default.nix b/nixpkgs/pkgs/tools/video/swftools/default.nix
new file mode 100644
index 000000000000..d75405ab309f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/swftools/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, freetype, libjpeg, libungif, zlib }:
+
+with stdenv.lib;
+stdenv.mkDerivation rec {
+  pname = "swftools";
+  version = "0.9.2";
+
+  src = fetchurl {
+    url = "http://www.swftools.org/${pname}-${version}.tar.gz";
+    sha256 = "1w81dyi81019a6jmnm5z7fzarswng27lg1d4k4d5llxzqszr2s5z";
+  };
+
+  patches = [ ./swftools.patch ];
+
+  buildInputs = [ freetype libjpeg libungif zlib ];
+
+  meta = {
+    description = "Collection of SWF manipulation and creation utilities";
+    homepage = http://www.swftools.org/about.html;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.koral ];
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/swftools/swftools.patch b/nixpkgs/pkgs/tools/video/swftools/swftools.patch
new file mode 100644
index 000000000000..c7eb89f9b3e0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/swftools/swftools.patch
@@ -0,0 +1,17 @@
+--- a/swfs/Makefile.in.orig
++++ b/swfs/Makefile.in
+@@ -41,10 +41,10 @@ install:
+ 	$(INSTALL_DATA) ./PreLoaderTemplate.swf $(pkgdatadir)/swfs/PreLoaderTemplate.swf
+ 	$(INSTALL_DATA) ./tessel_loader.swf $(pkgdatadir)/swfs/tessel_loader.swf
+ 	$(INSTALL_DATA) ./swft_loader.swf $(pkgdatadir)/swfs/swft_loader.swf
+-	rm -f $(pkgdatadir)/swfs/default_viewer.swf -o -L $(pkgdatadir)/swfs/default_viewer.swf
+-	$(LN_S) $(pkgdatadir)/swfs/simple_viewer.swf $(pkgdatadir)/swfs/default_viewer.swf
+-	rm -f $(pkgdatadir)/swfs/default_loader.swf -o -L $(pkgdatadir)/swfs/default_loader.swf
+-	$(LN_S) $(pkgdatadir)/swfs/tessel_loader.swf $(pkgdatadir)/swfs/default_loader.swf
++	rm -f $(pkgdatadir)/swfs/default_viewer.swf # -o -L $(pkgdatadir)/swfs/default_viewer.swf
++	$(LN_S) $(pkgdatadir)/swfs/simple_viewer.swf $(pkgdatadir)/swfs/default_viewer.swf
++	rm -f $(pkgdatadir)/swfs/default_loader.swf # -o -L $(pkgdatadir)/swfs/default_loader.swf
++	$(LN_S) $(pkgdatadir)/swfs/tessel_loader.swf $(pkgdatadir)/swfs/default_loader.swf
+ 		
+ uninstall:
+ 	$(UNINSTALL_DATA) $(pkgdatadir)/swfs/simple_viewer.swf
diff --git a/nixpkgs/pkgs/tools/video/untrunc/default.nix b/nixpkgs/pkgs/tools/video/untrunc/default.nix
new file mode 100644
index 000000000000..c7b76e0cb6ea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/untrunc/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, gcc, libav_12, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+  pname = "untrunc";
+  version = "2018.01.13";
+
+  src = fetchFromGitHub {
+    owner = "ponchio";
+    repo = "untrunc";
+    rev = "3a2e6d0718faf06589f7b9d95c8f966348e537f7";
+    sha256 = "03ka4lr69k7mikfpcpd95smzdj62v851ididnjyps5a0j06f8087";
+  };
+
+  buildInputs = [ gcc libav_12 ];
+
+  # Untrunc uses the internal libav headers 'h264dec.h' and 'config.h'.
+  # The latter must be created through 'configure'.
+  libavConfiguredSrc = libav_12.overrideAttrs (oldAttrs: {
+    name = "libav-configured-src";
+    outputs = [ "out" ];
+    phases = [ "unpackPhase" "patchPhase" "configurePhase" "installPhase" ];
+    installPhase = "cp -r . $out";
+  });
+
+  buildCommand = ''
+    mkdir -p $out/bin
+    g++ -o $out/bin/untrunc \
+        -Wno-deprecated-declarations \
+        $src/file.cpp $src/main.cpp $src/track.cpp $src/atom.cpp $src/mp4.cpp \
+        -I$libavConfiguredSrc -lavformat -lavcodec -lavutil
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Restore a damaged (truncated) mp4, m4v, mov, 3gp video from a similar, undamaged video";
+    license = licenses.gpl2;
+    homepage = https://github.com/ponchio/untrunc;
+    maintainers = [ maintainers.earvstedt ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/vnc2flv/default.nix b/nixpkgs/pkgs/tools/video/vnc2flv/default.nix
new file mode 100644
index 000000000000..561c8cf7d78f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/vnc2flv/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl, pythonPackages }:
+
+pythonPackages.buildPythonApplication rec {
+  name = "vnc2flv-20100207";
+  namePrefix = "";
+
+  src = fetchurl {
+    url = "mirror://pypi/v/vnc2flv/${name}.tar.gz";
+    sha256 = "14d4nm8yim0bm0nd3wyj7z4zdsg5zk3d9bhhvwdc36x03r8d0sbq";
+  };
+
+  # error: invalid command 'test'
+  doCheck = false;
+
+  meta = {
+    description = "Tool to record VNC sessions to Flash Video";
+    homepage = http://www.unixuser.org/~euske/python/vnc2flv/;
+    license = stdenv.lib.licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/vncrec/default.nix b/nixpkgs/pkgs/tools/video/vncrec/default.nix
new file mode 100644
index 000000000000..857524661bfa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/vncrec/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl, libX11, xorgproto, imake, gccmakedep, libXt, libXmu
+, libXaw, libXext, libSM, libICE, libXpm, libXp
+}:
+
+stdenv.mkDerivation {
+  name = "vncrec-0.2"; # version taken from Arch AUR
+
+  src = fetchurl {
+    url = "http://ronja.twibright.com/utils/vncrec-twibright.tgz";
+    sha256 = "1yp6r55fqpdhc8cgrgh9i0mzxmkls16pgf8vfcpng1axr7cigyhc";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  nativeBuildInputs = [ imake gccmakedep ];
+  buildInputs = [
+    libX11 xorgproto libXt libXmu libXaw
+    libXext libSM libICE libXpm libXp
+  ];
+
+  makeFlags = [
+    "BINDIR=${placeholder "out"}/bin"
+    "MANDIR=${placeholder "out"}/share/man"
+  ];
+  installTargets = [ "install" "install.man" ];
+
+  meta = {
+    description = "VNC recorder";
+    homepage = http://ronja.twibright.com/utils/vncrec/;
+    platforms = stdenv.lib.platforms.linux;
+    license = stdenv.lib.licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/video/yamdi/default.nix b/nixpkgs/pkgs/tools/video/yamdi/default.nix
new file mode 100644
index 000000000000..b9b16e4d8ece
--- /dev/null
+++ b/nixpkgs/pkgs/tools/video/yamdi/default.nix
@@ -0,0 +1,31 @@
+{
+  stdenv,
+  fetchurl,
+}:
+
+stdenv.mkDerivation rec {
+  pname = "yamdi";
+  version = "1.9";
+
+  # Source repo is also available here:
+  # https://github.com/ioppermann/yamdi
+  src = fetchurl {
+    url = "mirror://sourceforge/yamdi/yamdi-${version}.tar.gz";
+    sha256 = "4a6630f27f6c22bcd95982bf3357747d19f40bd98297a569e9c77468b756f715";
+  };
+
+  buildFlags = [ "CC=cc" ];
+
+  installPhase = ''
+    install -D {,$out/bin/}yamdi
+    install -D {,$out/share/man/}man1/yamdi.1
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Yet Another MetaData Injector for FLV";
+    homepage = http://yamdi.sourceforge.net/;
+    license = licenses.bsd3;
+    platforms = platforms.all;
+    maintainers = [ maintainers.ryanartecona ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/amazon-ecs-cli/default.nix b/nixpkgs/pkgs/tools/virtualization/amazon-ecs-cli/default.nix
new file mode 100644
index 000000000000..a27e006053ff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/amazon-ecs-cli/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  pname = "amazon-ecs-cli";
+  version = "1.18.0";
+
+  src =
+    if stdenv.hostPlatform.system == "x86_64-linux" then
+      fetchurl {
+        url = "https://s3.amazonaws.com/amazon-ecs-cli/ecs-cli-linux-amd64-v${version}";
+        sha256 = "1w4n7rkcxpdzg7450s22a80a27g845n61k2bdfhq4c1md7604nyz";
+      }
+    else if stdenv.hostPlatform.system == "x86_64-darwin" then
+      fetchurl {
+        url = "https://s3.amazonaws.com/amazon-ecs-cli/ecs-cli-darwin-amd64-v${version}";
+        sha256 = "011rw4rv2vz6xa4vqfjsf9j6m3rffclv9xh0dgf5ckd07m3fd3sm";
+      }
+    else throw "Architecture not supported";
+
+  dontUnpack = true;
+
+  installPhase =
+    ''
+      mkdir -p $out/bin
+      cp $src $out/bin/ecs-cli
+      chmod +x $out/bin/ecs-cli
+    '';  # */
+
+  meta = with stdenv.lib; {
+    homepage = https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_CLI.html;
+    description = "The Amazon ECS command line interface";
+    longDescription = "The Amazon Elastic Container Service (Amazon ECS) command line interface (CLI) provides high-level commands to simplify creating, updating, and monitoring clusters and tasks from a local development environment.";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ Scriptkiddi ];
+    platforms = [ "x86_64-linux" "x86_64-darwin" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/awless/default.nix b/nixpkgs/pkgs/tools/virtualization/awless/default.nix
new file mode 100644
index 000000000000..57a68b868096
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/awless/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "awless";
+  version = "0.1.11";
+
+  goPackagePath = "github.com/wallix/awless";
+
+  src = fetchFromGitHub {
+    owner  = "wallix";
+    repo   = "awless";
+    rev    = "v${version}";
+    sha256 = "187i21yrm10r3f5naj3jl0rmydr5dkhmdhxs90hhf8hjp59a89kg";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/wallix/awless/;
+    description = "A Mighty CLI for AWS";
+    platforms = with platforms; linux ++ darwin;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ pradeepchhetri swdunlop ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/aws/default.nix b/nixpkgs/pkgs/tools/virtualization/aws/default.nix
new file mode 100644
index 000000000000..618a45075c95
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/aws/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, perl, curl }:
+
+stdenv.mkDerivation {
+  name = "aws-1.75";
+
+  src = fetchurl {
+    url = https://raw.github.com/timkay/aws/2f2ff99f9f5111ea708ae6cd14d20e264748e72b/aws;
+    sha256 = "0d5asv73a58yb1bb1jpsw3c7asd62y86z5fwpg4llhjzkx79maj6";
+  };
+
+  buildInputs = [ perl ];
+
+  dontUnpack = true;
+
+  installPhase =
+    ''
+      mkdir -p $out/bin
+      sed 's|\[curl|[${curl.bin}/bin/curl|g' $src > $out/bin/aws
+      chmod +x $out/bin/aws
+    '';
+
+  meta = {
+    homepage = https://www.timkay.com/aws/;
+    description = "Command-line utility for working with Amazon EC2, S3, SQS, ELB, IAM and SDB";
+    license = stdenv.lib.licenses.gpl3Plus;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/awsebcli/default.nix b/nixpkgs/pkgs/tools/virtualization/awsebcli/default.nix
new file mode 100644
index 000000000000..fabdd5357743
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/awsebcli/default.nix
@@ -0,0 +1,96 @@
+{ stdenv, python3, glibcLocales }:
+let
+
+  localPython = python3.override {
+    packageOverrides = self: super: {
+      cement = super.cement.overridePythonAttrs (oldAttrs: rec {
+        version = "2.8.2";
+        src = oldAttrs.src.override {
+          inherit version;
+          sha256 = "1li2whjzfhbpg6fjb6r1r92fb3967p1xv6hqs3j787865h2ysrc7";
+        };
+      });
+
+      colorama = super.colorama.overridePythonAttrs (oldAttrs: rec {
+        version = "0.3.7";
+        src = oldAttrs.src.override {
+          inherit version;
+          sha256 = "0avqkn6362v7k2kg3afb35g4sfdvixjgy890clip4q174p9whhz0";
+        };
+      });
+
+      pathspec = super.pathspec.overridePythonAttrs (oldAttrs: rec {
+        name = "${oldAttrs.pname}-${version}";
+        version = "0.5.5";
+        src = oldAttrs.src.override {
+          inherit version;
+          sha256 = "72c495d1bbe76674219e307f6d1c6062f2e1b0b483a5e4886435127d0df3d0d3";
+        };
+      });
+
+      requests = super.requests.overridePythonAttrs (oldAttrs: rec {
+        version = "2.9.1";
+        src = oldAttrs.src.override {
+          inherit version;
+          sha256 = "0zsqrzlybf25xscgi7ja4s48y2abf9wvjkn47wh984qgs1fq2xy5";
+        };
+      });
+
+      semantic-version = super.semantic-version.overridePythonAttrs (oldAttrs: rec {
+        version = "2.5.0";
+        src = oldAttrs.src.override {
+          inherit version;
+          sha256 = "0p5n3d6blgkncxdz00yxqav0cis87fisdkirjm0ljjh7rdfx7aiv";
+        };
+      });
+
+      tabulate = super.tabulate.overridePythonAttrs (oldAttrs: rec {
+        version = "0.7.5";
+        src = oldAttrs.src.override {
+          inherit version;
+          sha256 = "03l1r7ddd1a0j2snv1yd0hlnghjad3fg1an1jr8936ksv75slwch";
+        };
+      });
+    };
+  };
+in with localPython.pkgs; buildPythonApplication rec {
+  pname = "awsebcli";
+  version = "3.12.4";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "128dgxyz2bgl3r4jdkbmjs280004bm0dwzln7p6ly3yjs2x37jl6";
+  };
+
+  buildInputs = [
+    glibcLocales
+  ];
+
+  LC_ALL = "en_US.UTF-8";
+
+  checkInputs = [
+    pytest mock nose pathspec colorama requests docutils
+  ];
+
+  doCheck = false;
+
+  propagatedBuildInputs = [
+    # FIXME: Add optional docker dependency, which requires requests >= 2.14.2.
+    # Otherwise, awsebcli will try to install it using pip when using some
+    # commands (like "eb local run").
+    blessed botocore cement colorama dockerpty docopt pathspec pyyaml
+    requests semantic-version setuptools tabulate termcolor websocket_client
+  ];
+
+  postInstall = ''
+    mkdir -p $out/etc/bash_completion.d
+    mv $out/bin/eb_completion.bash $out/etc/bash_completion.d
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://aws.amazon.com/elasticbeanstalk/;
+    description = "A command line interface for Elastic Beanstalk";
+    maintainers = with maintainers; [ eqyiel ];
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/cloud-init/add-nixos-support.patch b/nixpkgs/pkgs/tools/virtualization/cloud-init/add-nixos-support.patch
new file mode 100644
index 000000000000..00cb7d070c64
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/cloud-init/add-nixos-support.patch
@@ -0,0 +1,113 @@
+diff -ruN cloud-init-0.7.6.orig/cloudinit/distros/__init__.py cloud-init-0.7.6/cloudinit/distros/__init__.py
+--- cloud-init-0.7.6.orig/cloudinit/distros/__init__.py	2014-10-10 15:26:25.000000000 +0000
++++ cloud-init-0.7.6/cloudinit/distros/__init__.py	2016-06-08 07:51:45.230357099 +0000
+@@ -43,6 +43,7 @@
+     'freebsd': ['freebsd'],
+     'suse': ['sles'],
+     'arch': ['arch'],
++    'nixos': ['nixos'],
+ }
+ 
+ LOG = logging.getLogger(__name__)
+diff -ruN cloud-init-0.7.6.orig/cloudinit/distros/nixos.py cloud-init-0.7.6/cloudinit/distros/nixos.py
+--- cloud-init-0.7.6.orig/cloudinit/distros/nixos.py	1970-01-01 00:00:00.000000000 +0000
++++ cloud-init-0.7.6/cloudinit/distros/nixos.py	2016-06-08 07:50:58.602616595 +0000
+@@ -0,0 +1,98 @@
++# vi: ts=4 expandtab
++#
++#    Copyright (C) 2012 Canonical Ltd.
++#    Copyright (C) 2012 Hewlett-Packard Development Company, L.P.
++#    Copyright (C) 2012 Yahoo! Inc.
++#
++#    Author: Scott Moser <scott.moser@canonical.com>
++#    Author: Juerg Haefliger <juerg.haefliger@hp.com>
++#    Author: Joshua Harlow <harlowja@yahoo-inc.com>
++#
++#    This program is free software: you can redistribute it and/or modify
++#    it under the terms of the GNU General Public License version 3, as
++#    published by the Free Software Foundation.
++#
++#    This program is distributed in the hope that it will be useful,
++#    but WITHOUT ANY WARRANTY; without even the implied warranty of
++#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++#    GNU General Public License for more details.
++#
++#    You should have received a copy of the GNU General Public License
++#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
++
++from cloudinit import distros
++from cloudinit import helpers
++from cloudinit import log as logging
++from cloudinit import util
++
++from cloudinit.distros.parsers.hostname import HostnameConf
++
++LOG = logging.getLogger(__name__)
++
++class Distro(distros.Distro):
++
++    def __init__(self, name, cfg, paths):
++        distros.Distro.__init__(self, name, cfg, paths)
++        # This will be used to restrict certain
++        # calls from repeatly happening (when they
++        # should only happen say once per instance...)
++        self._runner = helpers.Runners(paths)
++        self.osfamily = 'nixos'
++
++    def _select_hostname(self, hostname, fqdn):
++        # Prefer the short hostname over the long
++        # fully qualified domain name
++        if not hostname:
++            return fqdn
++        return hostname
++
++    def _write_hostname(self, your_hostname, out_fn):
++        conf = None
++        try:
++            # Try to update the previous one
++            # so lets see if we can read it first.
++            conf = self._read_hostname_conf(out_fn)
++        except IOError:
++            pass
++        if not conf:
++            conf = HostnameConf('')
++        conf.set_hostname(your_hostname)
++        util.write_file(out_fn, str(conf), 0644)
++
++    def _read_system_hostname(self):
++        sys_hostname = self._read_hostname(self.hostname_conf_fn)
++        return (self.hostname_conf_fn, sys_hostname)
++
++    def _read_hostname_conf(self, filename):
++        conf = HostnameConf(util.load_file(filename))
++        conf.parse()
++        return conf
++
++    def _read_hostname(self, filename, default=None):
++        hostname = None
++        try:
++            conf = self._read_hostname_conf(filename)
++            hostname = conf.hostname
++        except IOError:
++            pass
++        if not hostname:
++            return default
++        return hostname
++
++    def _write_network(self, settings):
++        raise NotImplementedError()
++
++    def apply_locale(self, locale, out_fn=None):
++        raise NotImplementedError()
++
++    def install_packages(self, pkglist):
++        raise NotImplementedError()
++
++    def package_command(self, command, args=None, pkgs=None):
++        raise NotImplementedError()
++
++    def set_timezone(self, tz):
++        raise NotImplementedError()
++
++    def update_package_sources(self):
++        raise NotImplementedError()
diff --git a/nixpkgs/pkgs/tools/virtualization/cloud-init/default.nix b/nixpkgs/pkgs/tools/virtualization/cloud-init/default.nix
new file mode 100644
index 000000000000..580c2f9a01f3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/cloud-init/default.nix
@@ -0,0 +1,45 @@
+{ lib, pythonPackages, fetchurl, cloud-utils }:
+
+let version = "0.7.9";
+
+in pythonPackages.buildPythonApplication {
+  pname = "cloud-init";
+  inherit version;
+  namePrefix = "";
+
+  src = fetchurl {
+    url = "https://launchpad.net/cloud-init/trunk/${version}/+download/cloud-init-${version}.tar.gz";
+    sha256 = "0wnl76pdcj754pl99wxx76hkir1s61x0bg0lh27sdgdxy45vivbn";
+  };
+
+  patches = [ ./add-nixos-support.patch ];
+  prePatch = ''
+    patchShebangs ./tools
+
+    substituteInPlace setup.py \
+      --replace /usr $out \
+      --replace /etc $out/etc \
+      --replace /lib/systemd $out/lib/systemd \
+      --replace 'self.init_system = ""' 'self.init_system = "systemd"'
+
+    substituteInPlace cloudinit/config/cc_growpart.py \
+      --replace 'util.subp(["growpart"' 'util.subp(["${cloud-utils}/bin/growpart"'
+
+    # Argparse is part of python stdlib
+    sed -i s/argparse// requirements.txt
+    '';
+
+  propagatedBuildInputs = with pythonPackages; [ cheetah jinja2 prettytable
+    oauthlib pyserial configobj pyyaml requests jsonpatch ];
+
+  checkInputs = with pythonPackages; [ contextlib2 httpretty mock unittest2 ];
+
+  doCheck = false;
+
+  meta = {
+    homepage = https://cloudinit.readthedocs.org;
+    description = "Provides configuration and customization of cloud instance";
+    maintainers = [ lib.maintainers.madjar lib.maintainers.phile314 ];
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/cloudmonkey/default.nix b/nixpkgs/pkgs/tools/virtualization/cloudmonkey/default.nix
new file mode 100644
index 000000000000..1c7613b4893f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/cloudmonkey/default.nix
@@ -0,0 +1,25 @@
+{ python2Packages, lib }:
+
+with python2Packages;
+
+buildPythonApplication rec {
+  pname = "cloudmonkey";
+  version = "5.3.3";
+
+  propagatedBuildInputs = [ argcomplete pygments ];
+
+  doCheck = false; # upstream has no tests defined
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "064yk3lwl272nyn20xxrh0qxzh3r1rl9015qqf2i4snqdzwd5cf7";
+  };
+
+  meta = with lib; {
+    description = "CLI for Apache CloudStack.";
+    homepage = https://cwiki.apache.org/confluence/display/CLOUDSTACK/CloudStack+cloudmonkey+CLI;
+    license = [ licenses.asl20 ];
+    maintainers = [ maintainers.womfoo ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/cri-tools/default.nix b/nixpkgs/pkgs/tools/virtualization/cri-tools/default.nix
new file mode 100644
index 000000000000..910f2822c6f3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/cri-tools/default.nix
@@ -0,0 +1,26 @@
+{ buildGoPackage, fetchFromGitHub, lib }:
+
+buildGoPackage rec {
+  pname = "cri-tools";
+  version = "1.17.0";
+  src = fetchFromGitHub {
+    owner = "kubernetes-sigs";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0h9gry56graif761lmcy91q9fzwvmwb15wcx8245927yfg5j0zgh";
+  };
+
+  goPackagePath = "github.com/kubernetes-sigs/cri-tools";
+
+  buildPhase = ''
+    pushd go/src/${goPackagePath}
+    make all install BINDIR=$bin/bin
+  '';
+
+  meta = with lib; {
+    description = "CLI and validation tools for Kubelet Container Runtime Interface (CRI)";
+    homepage = https://github.com/kubernetes-sigs/cri-tools;
+    license = lib.licenses.asl20;
+    maintainers = with maintainers; [ saschagrunert ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/distrobuilder/default.nix b/nixpkgs/pkgs/tools/virtualization/distrobuilder/default.nix
new file mode 100644
index 000000000000..a781f3a44249
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/distrobuilder/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, pkgconfig, buildGoPackage, fetchFromGitHub
+, makeWrapper, coreutils, gnupg, gnutar, squashfsTools, debootstrap
+}:
+
+let binPath = stdenv.lib.makeBinPath [
+  coreutils gnupg gnutar squashfsTools debootstrap
+];
+in
+buildGoPackage rec {
+  pname = "distrobuilder";
+  version = "2019_10_07";
+  rev = "d686c88c21838f5505c3ec14711b2413604d7f5c";
+
+  goPackagePath = "github.com/lxc/distrobuilder";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "lxc";
+    repo = "distrobuilder";
+    sha256 = "0k59czgasy4d58bkrin6hvgmh7y3nf177lwd0y4g47af27bgnyc4";
+  };
+
+  goDeps = ./deps.nix;
+
+  postInstall = ''
+    wrapProgram $bin/bin/distrobuilder --prefix PATH ":" ${binPath}
+  '';
+  nativeBuildInputs = [ pkgconfig makeWrapper ];
+
+  meta = with stdenv.lib; {
+    description = "System container image builder for LXC and LXD";
+    homepage = "https://github.com/lxc/distrobuilder";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ megheaiulian ];
+    platforms = platforms.linux;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/virtualization/distrobuilder/deps.nix b/nixpkgs/pkgs/tools/virtualization/distrobuilder/deps.nix
new file mode 100644
index 000000000000..7f79d8931fcc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/distrobuilder/deps.nix
@@ -0,0 +1,228 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.3.0
+[
+  {
+    goPackagePath = "github.com/antchfx/xpath";
+    fetch = {
+      type = "git";
+      url = "https://github.com/antchfx/xpath";
+      rev = "b6dbe470e10224a23b2f69db0d4449bc6627ece6";
+      sha256 = "1959kzmjijpll6432da84rmzgd7p3yyqdq9chyxnm8318pr5znji";
+    };
+  }
+  {
+    goPackagePath = "github.com/flosch/pongo2";
+    fetch = {
+      type = "git";
+      url = "https://github.com/flosch/pongo2";
+      rev = "bbf5a6c351f4d4e883daa40046a404d7553e0a00";
+      sha256 = "0yqh58phznnxakm64w82gawrpndb0r85vsd1s7h244qqrq7w4avq";
+    };
+  }
+  {
+    goPackagePath = "github.com/gobuffalo/envy";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gobuffalo/envy";
+      rev = "043cb4b8af871b49563291e32c66bb84378a60ac";
+      sha256 = "03jarnkaf42xgfamb0jlya4c1cyk8gnxhcd21m3fx145vz4px398";
+    };
+  }
+  {
+    goPackagePath = "github.com/gobuffalo/logger";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gobuffalo/logger";
+      rev = "7c291b53e05b81d77bd43109b4a3c6f84e45c8e1";
+      sha256 = "1w6rkz0xwq3xj3giwzjkfnai69a0cgg09zx01z7s8r5z450cish3";
+    };
+  }
+  {
+    goPackagePath = "github.com/gobuffalo/packd";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gobuffalo/packd";
+      rev = "54ea459691466cfb630ccc276723fe3963f3e9d5";
+      sha256 = "02sg33jkp219g0z3yf2fn9xm2zds1qxzdznx5mh8vffh4njjg1x8";
+    };
+  }
+  {
+    goPackagePath = "github.com/gobuffalo/packr";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gobuffalo/packr";
+      rev = "dc520c910ea91354b3ae131bbb029270e4fc1af4";
+      sha256 = "1ph05pkbq0ggdab152f7hjlc758nkrw22fqgslnf1nvggadjkvqs";
+    };
+  }
+  {
+    goPackagePath = "github.com/gorilla/websocket";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gorilla/websocket";
+      rev = "ae1634f6a98965ded3b8789c626cb4e0bd78c3de";
+      sha256 = "0nw0mdcs75ghr9a5asrk9a7yc00703yvv4xf6wyd3z44ihs4hrjv";
+    };
+  }
+  {
+    goPackagePath = "github.com/joho/godotenv";
+    fetch = {
+      type = "git";
+      url = "https://github.com/joho/godotenv";
+      rev = "5c0e6c6ab1a0a9ef0a8822cba3a05d62f7dad941";
+      sha256 = "0zfs69q7f5xlkqhd4wzjc8gfdisahapz5g94sa8lzr5b4jg9ycbw";
+    };
+  }
+  {
+    goPackagePath = "github.com/juju/errors";
+    fetch = {
+      type = "git";
+      url = "https://github.com/juju/errors";
+      rev = "e65537c515d77e35697c471d6c2755375cb3adc4";
+      sha256 = "119806fhl4isbxc3g52335jgiv6cddfbapr1absd4v4kkq55i5qh";
+    };
+  }
+  {
+    goPackagePath = "github.com/karrick/godirwalk";
+    fetch = {
+      type = "git";
+      url = "https://github.com/karrick/godirwalk";
+      rev = "73c17a9b9528eb3ce857b782a2816c0cda581e62";
+      sha256 = "0l0m5zi2mf649knxgmch1cblz3a3xiny1c9ki2241phkpwzspjq1";
+    };
+  }
+  {
+    goPackagePath = "github.com/lxc/lxd";
+    fetch = {
+      type = "git";
+      url = "https://github.com/lxc/lxd";
+      rev = "fd924cb85d99475f9a0349208a8d7d0f30bdb6f0";
+      sha256 = "1v246x0bi6ljkfjfjkfjbfh0imfbps2zd0m55cxdsl8y96pfx1hs";
+    };
+  }
+  {
+    goPackagePath = "github.com/mudler/docker-companion";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mudler/docker-companion";
+      rev = "6a693e9b9eaf2cd08ba628350613f2e08e9af57d";
+      sha256 = "06ch1xhfd62dwkmh1z0ihifpmvgnki97k8s7gzivincy80xj0xpc";
+    };
+  }
+  {
+    goPackagePath = "github.com/pkg/errors";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pkg/errors";
+      rev = "27936f6d90f9c8e1145f11ed52ffffbfdb9e0af7";
+      sha256 = "0yzmgi6g4ak4q8y7w6x0n5cbinlcn8yc3gwgzy4yck00qdn25d6y";
+    };
+  }
+  {
+    goPackagePath = "github.com/rogpeppe/go-internal";
+    fetch = {
+      type = "git";
+      url = "https://github.com/rogpeppe/go-internal";
+      rev = "3670dca80da881cddd5377fb9496daaabb8dec9f";
+      sha256 = "0h01adrajbl3h0yx3bkig79ap9n6ikz90cpszhqwvgr63a0xbn13";
+    };
+  }
+  {
+    goPackagePath = "github.com/sirupsen/logrus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/sirupsen/logrus";
+      rev = "07a84ee7412e7a28663d92930a1d46f81b124ee1";
+      sha256 = "00hms8fnbhxb5lir3ykhl5lf1n2yqxddmd47cxp6d5ziv6k5swc8";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/cobra";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/cobra";
+      rev = "2d7544ebdeb5f926805c57af8dccc6c359de28d4";
+      sha256 = "04b2bq8g948mn020l4cwhdnqffag29r21x2nyyg6cjqj306gs4vs";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/pflag";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/pflag";
+      rev = "24fa6976df40757dce6aea913e7b81ade90530e1";
+      sha256 = "0rf6prz6gl0l1b3wijzdgq887cdwigvzxvz6gqbm5l8pkq3fx1m9";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev = "4def268fd1a49955bfb3dda92fe3db4f924f2285";
+      sha256 = "1bfsnari529gw34cz0zqk3d9mrkcj1ay35kangri8kbgll0ss5a6";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev = "da137c7871d730100384dbcf36e6f8fa493aef5b";
+      sha256 = "1qsiyr3irmb6ii06hivm9p2c7wqyxczms1a9v1ss5698yjr3fg47";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "fae7ac547cb717d141c433a2a173315e216b64c4";
+      sha256 = "11pl0dycm5d8ar7g1l1w5q2cx0lms8i15n8mxhilhkdd2xpmh8f0";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/text";
+      rev = "342b2e1fbaa52c93f31447ad2c6abc048c63e475";
+      sha256 = "0flv9idw0jm5nm8lx25xqanbkqgfiym6619w575p7nrdh0riqwqh";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/antchfx/htmlquery.v1";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/antchfx/htmlquery.v1";
+      rev = "b8d36292614567671decfe6f96c7b8c432d3249b";
+      sha256 = "1rsvngqlqyg86g1ff59zmrkn7s8b3c2vpl533amwcv5s2h8npmxy";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/flosch/pongo2.v3";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/flosch/pongo2.v3";
+      rev = "5e81b817a0c48c1c57cdf1a9056cf76bdee02ca9";
+      sha256 = "0fd7d79644zmcirsb1gvhmh0l5vb5nyxmkzkvqpmzzcg6yfczph8";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/robfig/cron.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/robfig/cron.v2";
+      rev = "be2e0b0deed5a68ffee390b4583a13aff8321535";
+      sha256 = "1cmm6dc4cl8269wlknxmicyn1s63irg66lj76b9ncjjfrvijpf0y";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/yaml.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/yaml.v2";
+      rev = "51d6538a90f86fe93ac480b35f37b2be17fef232";
+      sha256 = "01wj12jzsdqlnidpyjssmj0r4yavlqy7dwrg7adqd8dicjc4ncsa";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/virtualization/ec2-ami-tools/default.nix b/nixpkgs/pkgs/tools/virtualization/ec2-ami-tools/default.nix
new file mode 100644
index 000000000000..e8172066800d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/ec2-ami-tools/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, fetchurl, unzip, ruby, openssl, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "ec2-ami-tools";
+
+  version = "1.5.7";
+
+  buildInputs = [ unzip makeWrapper ];
+
+  src = fetchurl {
+    url = "https://s3.amazonaws.com/ec2-downloads/${pname}-${version}.zip";
+    sha256 = "17xj7xmdbcwdbzalhfs6yyiwa64978mk3li39l949qfjjgrxjias";
+  };
+
+  # Amazon EC2 requires that disk images are writable.  If they're
+  # not, the VM immediately terminates with a mysterious
+  # "Server.InternalError" message.  Since disk images generated in
+  # the Nix store are read-only, they must be made writable in the
+  # tarball uploaded to Amazon S3.  So add a `--mode=0755' flag to the
+  # tar invocation.
+  patches = [ ./writable.patch ];
+
+  installPhase =
+    ''
+      mkdir -p $out
+      mv * $out
+      rm $out/*.txt
+
+      for i in $out/bin/*; do
+          wrapProgram $i \
+            --set EC2_HOME $out \
+            --prefix PATH : ${stdenv.lib.makeBinPath [ ruby openssl ]}
+      done
+
+      sed -i 's|/bin/bash|${stdenv.shell}|' $out/lib/ec2/platform/base/pipeline.rb
+    '';  # */
+
+  meta = {
+    homepage = https://aws.amazon.com/developertools/Amazon-EC2/368;
+    description = "Command-line tools to create and manage Amazon EC2 virtual machine images";
+    license = stdenv.lib.licenses.amazonsl;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/ec2-ami-tools/writable.patch b/nixpkgs/pkgs/tools/virtualization/ec2-ami-tools/writable.patch
new file mode 100644
index 000000000000..54c2228911eb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/ec2-ami-tools/writable.patch
@@ -0,0 +1,23 @@
+diff -ru ec2-ami-tools-1.4.0.5-orig/lib/ec2/amitools/bundle.rb ec2-ami-tools-1.4.0.5/lib/ec2/amitools/bundle.rb
+--- ec2-ami-tools-1.4.0.5-orig/lib/ec2/amitools/bundle.rb	2011-12-06 14:57:28.000000000 +0100
++++ ec2-ami-tools-1.4.0.5/lib/ec2/amitools/bundle.rb	2012-02-25 21:24:57.682427268 +0100
+@@ -80,7 +80,7 @@
+       # piped via several processes. The tee is used to allow a
+       # digest of the file to be calculated without having to re-read
+       # it from disk.
+-      tar = EC2::Platform::Current::Tar::Command.new.create.dereference.sparse
++      tar = EC2::Platform::Current::Tar::Command.new.create.dereference.sparse.writable
+       tar.owner(0).group(0)
+       tar.add(File::basename( image_file ), File::dirname( image_file ))
+       openssl = EC2::Platform::Current::Constants::Utility::OPENSSL
+diff -ru ec2-ami-tools-1.4.0.5-orig/lib/ec2/platform/linux/tar.rb ec2-ami-tools-1.4.0.5/lib/ec2/platform/linux/tar.rb
+--- ec2-ami-tools-1.4.0.5-orig/lib/ec2/platform/linux/tar.rb	2011-12-06 14:57:28.000000000 +0100
++++ ec2-ami-tools-1.4.0.5/lib/ec2/platform/linux/tar.rb	2012-02-25 21:23:36.342716403 +0100
+@@ -31,6 +31,7 @@
+           def update;         @options << '-u';          self; end
+           def sparse;         @options << '-S';          self; end
+           def dereference;    @options << '-h';          self; end
++          def writable;       @options << '--mode=0755'; self; end
+           
+           def archive(filename)
+             filename = '-' if filename.nil? 
diff --git a/nixpkgs/pkgs/tools/virtualization/ec2-api-tools/default.nix b/nixpkgs/pkgs/tools/virtualization/ec2-api-tools/default.nix
new file mode 100644
index 000000000000..86ad36886c9f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/ec2-api-tools/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, unzip, makeWrapper, jre }:
+
+stdenv.mkDerivation rec {
+  name = "ec2-api-tools-1.7.5.1";
+
+  src = fetchurl {
+    url = "http://tarballs.nixos.org/${name}.zip";
+    sha256 = "0figmvcm82ghmpz3018ihysz8zpxpysgbpdx7rmciq9y80qbw6l5";
+  };
+
+  buildInputs = [ unzip makeWrapper ];
+
+  installPhase =
+    ''
+      d=$out/libexec/ec2-api-tools
+      mkdir -p $d
+      mv * $d
+      rm $d/bin/*.cmd # Windows stuff
+
+      for i in $d/bin/*; do
+          b=$(basename $i)
+          if [ $b = "ec2-cmd" ]; then continue; fi
+          makeWrapper $i $out/bin/$(basename $i) \
+            --set EC2_HOME $d \
+            --set JAVA_HOME ${jre}
+      done
+    ''; # */
+
+  meta = {
+    homepage = http://developer.amazonwebservices.com/connect/entry.jspa?externalID=351;
+    description = "Command-line tools to create and manage Amazon EC2 virtual machines";
+    license = stdenv.lib.licenses.amazonsl;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/ec2-utils/default.nix b/nixpkgs/pkgs/tools/virtualization/ec2-utils/default.nix
new file mode 100644
index 000000000000..1605bcfa43b6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/ec2-utils/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, lib, rpmextract, fetchurl, python2, tree }:
+
+stdenv.mkDerivation {
+  name = "ec2-utils";
+  version = "0.5.1";
+
+  # The url can be determined by booting an "Amazon Linux 2" and running:
+  # > yumdownloader --urls ec2-utils
+  src = fetchurl {
+    url = "http://amazonlinux.ap-northeast-1.amazonaws.com/blobstore/a3b4d2c35c2300518fe10381a05b3bd7936ff5cdd3d351143a11bf84073d9e00/ec2-utils-0.5-1.amzn2.0.1.noarch.rpm";
+    sha256 = "004y7l3q9gqi78a53lykrpsnz4yp7dds1083w67m2013bk1x5d53";
+  };
+
+  nativeBuildInputs = [ rpmextract ];
+
+  buildInputs = [ python2 ];
+
+  unpackPhase = ''
+    mkdir source
+    cd source
+    rpmextract "$src"
+  '';
+
+  installPhase = ''
+    mkdir $out
+
+    mv --target-directory $out \
+      etc sbin usr/bin usr/lib
+  '';
+
+  postFixup = ''
+    for i in $out/etc/udev/rules.d/*.rules; do
+      substituteInPlace "$i" \
+        --replace '/sbin' "$out/bin"
+    done
+
+    substituteInPlace "$out/etc/udev/rules.d/70-ec2-nvme-devices.rules" \
+      --replace 'ec2nvme-nsid' "$out/lib/udev/ec2nvme-nsid"
+  '';
+
+  meta = {
+    description = "A set of tools for running in EC2";
+    homepage = "https://aws.amazon.com/amazon-linux-ami/";
+    license = lib.licenses.asl20;
+    maintainers = with lib.maintainers; [ thefloweringash ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/euca2ools/default.nix b/nixpkgs/pkgs/tools/virtualization/euca2ools/default.nix
new file mode 100644
index 000000000000..cb31a66ea72d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/euca2ools/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchgit, python2Packages }:
+
+let
+  inherit (python2Packages) buildPythonApplication boto m2crypto;
+in buildPythonApplication {
+  name = "euca2ools-2.1.4";
+  namePrefix = "";
+
+  src = fetchgit {
+    url = https://github.com/eucalyptus/euca2ools.git;
+    rev = "19cb7eac34dd7efe3a56e4841b9692c03458bf3b";
+    sha256 = "0grsgn5gbvk1hlfa8qx7ppz7iyfyi2pdhxy8njr8lm60w4amfiyq";
+  };
+
+  propagatedBuildInputs = [ boto m2crypto ];
+
+  meta = {
+    homepage = https://github.com/eucalyptus/euca2ools;
+    description = "Tools for interacting with Amazon EC2/S3-compatible cloud computing services";
+    maintainers = [ stdenv.lib.maintainers.eelco ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/google-compute-engine-oslogin/default.nix b/nixpkgs/pkgs/tools/virtualization/google-compute-engine-oslogin/default.nix
new file mode 100644
index 000000000000..0daa01f85bb3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/google-compute-engine-oslogin/default.nix
@@ -0,0 +1,51 @@
+{ stdenv
+, fetchFromGitHub
+, curl
+, json_c
+, pam
+}:
+
+stdenv.mkDerivation rec {
+  pname = "google-compute-engine-oslogin";
+  version = "1.5.3";
+  # from packages/google-compute-engine-oslogin/packaging/debian/changelog
+
+  src = fetchFromGitHub {
+    owner = "GoogleCloudPlatform";
+    repo = "compute-image-packages";
+    rev = "20190522";
+    sha256 = "16jbbrnz49g843h813r408dbvfa2hicf8canxwbfxr2kzhv7ycmm";
+  };
+  sourceRoot = "source/packages/google-compute-engine-oslogin";
+
+  postPatch = ''
+    # change sudoers dir from /var/google-sudoers.d to /run/google-sudoers.d (managed through systemd-tmpfiles)
+    substituteInPlace pam_module/pam_oslogin_admin.cc --replace /var/google-sudoers.d /run/google-sudoers.d
+    # fix "User foo not allowed because shell /bin/bash does not exist"
+    substituteInPlace compat.h --replace /bin/bash ${stdenv.shell}
+  '';
+
+  buildInputs = [ curl.dev pam ];
+
+  NIX_CFLAGS_COMPILE="-I${json_c.dev}/include/json-c";
+  NIX_CFLAGS_LINK="-L${json_c}/lib";
+
+  installPhase = ''
+    mkdir -p $out/{bin,lib}
+
+    install -Dm755 libnss_cache_google-compute-engine-oslogin-${version}.so $out/lib/libnss_cache_oslogin.so.2
+    install -Dm755 libnss_google-compute-engine-oslogin-${version}.so $out/lib/libnss_oslogin.so.2
+
+    install -Dm755 pam_oslogin_admin.so pam_oslogin_login.so $out/lib
+    install -Dm755 google_{oslogin_nss_cache,authorized_keys} $out/bin
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/GoogleCloudPlatform/compute-image-packages;
+    description = "OS Login Guest Environment for Google Compute Engine";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ adisbladis flokli ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/google-compute-engine/default.nix b/nixpkgs/pkgs/tools/virtualization/google-compute-engine/default.nix
new file mode 100644
index 000000000000..48255ca68a73
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/google-compute-engine/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, fetchFromGitHub
+, buildPythonApplication
+, bash
+, bashInteractive
+, systemd
+, utillinux
+, boto
+, setuptools
+, distro
+}:
+
+buildPythonApplication rec {
+  pname = "google-compute-engine";
+  version = "20190124";
+  namePrefix = "";
+
+  src = fetchFromGitHub {
+    owner = "GoogleCloudPlatform";
+    repo = "compute-image-packages";
+    rev = version;
+    sha256 = "08cy0jd463kng6hwbd3nfldsp4dpd2lknlvdm88cq795wy0kh4wp";
+  };
+
+  buildInputs = [ bash ];
+  propagatedBuildInputs = [ boto setuptools distro ];
+
+
+  postPatch = ''
+    for file in $(find google_compute_engine -type f); do
+      substituteInPlace "$file" \
+        --replace /bin/systemctl "/run/current-system/sw/bin/systemctl" \
+        --replace /bin/bash "${bashInteractive}/bin/bash" \
+        --replace /sbin/hwclock "${utillinux}/bin/hwclock"
+      # SELinux tool ???  /sbin/restorecon
+    done
+
+    substituteInPlace google_config/udev/64-gce-disk-removal.rules \
+      --replace /bin/sh "${bash}/bin/sh" \
+      --replace /bin/umount "${utillinux}/bin/umount" \
+      --replace /usr/bin/logger "${utillinux}/bin/logger"
+  '';
+
+  postInstall = ''
+    # allows to install the package in `services.udev.packages` in NixOS
+    mkdir -p $out/lib/udev/rules.d
+    cp -r google_config/udev/*.rules $out/lib/udev/rules.d
+
+    # sysctl snippets will be used by google-compute-config.nix
+    mkdir -p $out/sysctl.d
+    cp google_config/sysctl/*.conf $out/sysctl.d
+
+    patchShebangs $out/bin/*
+  '';
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Google Compute Engine tools and services";
+    homepage = "https://github.com/GoogleCloudPlatform/compute-image-packages";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ zimbatm ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/govc/default.nix b/nixpkgs/pkgs/tools/virtualization/govc/default.nix
new file mode 100644
index 000000000000..b53c211d379f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/govc/default.nix
@@ -0,0 +1,24 @@
+{ lib, fetchFromGitHub, buildGoPackage }:
+  
+buildGoPackage rec {
+  pname = "govc";
+  version = "0.21.0";
+
+  goPackagePath = "github.com/vmware/govmomi";
+
+  subPackages = [ "govc" ];
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "vmware";
+    repo = "govmomi";
+    sha256 = "0mig8w0szxqcii3gihrsm8n8hzziq9l6axc5z32nw9kiy9bi4130";
+  };
+
+  meta = {
+    description = "A vSphere CLI built on top of govmomi";
+    homepage = https://github.com/vmware/govmomi/tree/master/govc;
+    license = lib.licenses.asl20;
+    maintainers = with lib.maintainers; [ nicknovitski ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/linode-cli/default.nix b/nixpkgs/pkgs/tools/virtualization/linode-cli/default.nix
new file mode 100644
index 000000000000..d7696be85e40
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/linode-cli/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, fetchFromGitHub, perlPackages, makeWrapper}:
+
+perlPackages.buildPerlPackage rec {
+  pname = "linode-cli";
+  version = "1.4.7";
+
+  src = fetchFromGitHub {
+    owner = "linode";
+    repo = "cli";
+    rev = "v${version}";
+    sha256 = "1wiz067wgxi4z4rz4n9p7dlvx5z4hkl2nxpfvhikl6dri4m2nkkp";
+  };
+
+  buildInputs = [ makeWrapper ];
+  propagatedBuildInputs = with perlPackages; [
+    JSON
+    LWP
+    MozillaCA
+    TryTiny
+    WebServiceLinode
+  ];
+
+  # Wrap perl scripts so they can find libraries
+  postInstall = ''
+    for n in "$out/bin"/*; do
+      wrapProgram "$n" --prefix PERL5LIB : "$PERL5LIB"
+    done
+  '';
+
+  # Has no tests
+  doCheck = false;
+
+  # Has no "doc" or "devdoc" outputs
+  outputs = [ "out" ];
+
+  meta = with stdenv.lib; {
+    description = "Command-line interface to the Linode platform";
+    homepage = https://github.com/linode/cli;
+    license = with licenses; [ artistic2 gpl2 ];
+    maintainers = with maintainers; [ nixy ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/marathonctl/default.nix b/nixpkgs/pkgs/tools/virtualization/marathonctl/default.nix
new file mode 100644
index 000000000000..10103be26308
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/marathonctl/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage {
+  pname = "marathonctl-unstable";
+  version = "2017-03-06";
+
+  goPackagePath = "github.com/shoenig/marathonctl";
+  subPackages = [ "." ];
+  goDeps = ./deps.nix;
+
+  src = fetchFromGitHub {
+    owner = "shoenig";
+    repo = "marathonctl";
+    rev = "0867e66551fff5d81f25959baf914a8ee11a3a8b";
+    sha256 = "1fcc54hwpa8s3kz4gn26mc6nrv6zjrw869331nvm47khi23gpmxw";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/shoenig/marathonctl;
+    description = "CLI tool for Marathon";
+    platforms = platforms.all;
+    license = licenses.mit;
+    maintainers = with maintainers; [ manveru ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/marathonctl/deps.nix b/nixpkgs/pkgs/tools/virtualization/marathonctl/deps.nix
new file mode 100644
index 000000000000..39efaab95358
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/marathonctl/deps.nix
@@ -0,0 +1,12 @@
+# This file was generated by go2nix.
+[
+  {
+    goPackagePath = "github.com/shoenig/config";
+    fetch = {
+      type = "git";
+      url = "https://github.com/shoenig/config";
+      rev = "7d793e7ad7f175ef22743b1ea38acee8267788db";
+      sha256 = "1dhcv1j5xk30kj73dfnx3xqx8mcvk9r8ywp9khgf2kq6wh9sm1qr";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/virtualization/mininet/default.nix b/nixpkgs/pkgs/tools/virtualization/mininet/default.nix
new file mode 100644
index 000000000000..0ee27d36e0af
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/mininet/default.nix
@@ -0,0 +1,49 @@
+{ stdenv, lib, fetchFromGitHub
+, which
+, python
+, help2man
+}:
+
+let
+  pyEnv = python.withPackages(ps: [ ps.setuptools ]);
+in
+stdenv.mkDerivation rec {
+  pname = "mininet";
+  version = "2.3.0d6";
+
+  outputs = [ "out" "py" ];
+
+  src = fetchFromGitHub {
+    owner = "mininet";
+    repo = "mininet";
+    rev = version;
+    sha256 = "0wc6gni9dxj9jjnw66a28jdvcfm8bxv1i776m5dh002bn5wjcl6x";
+  };
+
+  buildFlags = [ "mnexec" ];
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  pythonPath = [ python.pkgs.setuptools ];
+  buildInputs = [ python which help2man ];
+
+  installTargets = [ "install-mnexec" "install-manpages" ];
+
+  preInstall = ''
+    mkdir -p $out $py
+    # without --root, install fails
+    ${pyEnv.interpreter} setup.py install --root="/" --prefix=$py
+  '';
+
+  doCheck = false;
+
+
+  meta = with lib; {
+    description = "Emulator for rapid prototyping of Software Defined Networks";
+    license = {
+      fullName = "Mininet 2.3.0d6 License";
+    };
+    platforms = platforms.linux;
+    homepage = https://github.com/mininet/mininet;
+    maintainers = with maintainers; [ teto ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/nixos-container/default.nix b/nixpkgs/pkgs/tools/virtualization/nixos-container/default.nix
new file mode 100644
index 000000000000..94a19c5375ea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/nixos-container/default.nix
@@ -0,0 +1,17 @@
+{ substituteAll, perlPackages, shadow, utillinux }:
+
+substituteAll {
+    name = "nixos-container";
+    dir = "bin";
+    isExecutable = true;
+    src = ./nixos-container.pl;
+    perl = "${perlPackages.perl}/bin/perl -I${perlPackages.FileSlurp}/${perlPackages.perl.libPrefix}";
+    su = "${shadow.su}/bin/su";
+    inherit utillinux;
+
+    postInstall = ''
+      t=$out/etc/bash_completion.d
+      mkdir -p $t
+      cp ${./nixos-container-completion.sh} $t/nixos-container
+    '';
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/nixos-container/nixos-container-completion.sh b/nixpkgs/pkgs/tools/virtualization/nixos-container/nixos-container-completion.sh
new file mode 100644
index 000000000000..0fe8ab811a17
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/nixos-container/nixos-container-completion.sh
@@ -0,0 +1,33 @@
+#!/usr/bin/env bash
+
+_nixos-container() {
+    local cur prev opts
+    COMPREPLY=()
+    cur="${COMP_WORDS[COMP_CWORD]}"
+    prev="${COMP_WORDS[COMP_CWORD-1]}"
+    opts="list create destroy start stop status update login root-login run show-ip show-host-key"
+    startstop_opts=$(nixos-container list)
+    update_opts="--config"
+
+    if [[ "$prev" == "nixos-container" ]]
+    then
+        COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+        return 0
+    fi
+
+    if [[ $(echo "$opts" | grep "$prev") ]]
+    then
+        if [[ "$prev" == "start" || "$prev" == "stop" ]]
+        then
+            COMPREPLY=( $(compgen -W "${startstop_opts}" -- ${cur}) )
+            return 0
+        elif [[ "$prev" == "update" ]]
+        then
+            COMPREPLY=( $(compgen -W "${update_opts}" -- ${cur}) )
+            return 0
+        fi
+    fi
+}
+
+complete -F _nixos-container nixos-container
+
diff --git a/nixpkgs/pkgs/tools/virtualization/nixos-container/nixos-container.pl b/nixpkgs/pkgs/tools/virtualization/nixos-container/nixos-container.pl
new file mode 100755
index 000000000000..2a9625501b65
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/nixos-container/nixos-container.pl
@@ -0,0 +1,380 @@
+#! @perl@
+
+use strict;
+use POSIX;
+use File::Path;
+use File::Slurp;
+use Fcntl ':flock';
+use Getopt::Long qw(:config gnu_getopt);
+use Cwd 'abs_path';
+use Time::HiRes;
+
+my $su = "@su@";
+
+# Ensure a consistent umask.
+umask 0022;
+
+# Ensure $NIXOS_CONFIG is not set.
+$ENV{"NIXOS_CONFIG"} = "";
+
+# Parse the command line.
+
+sub showHelp {
+    print <<EOF;
+Usage: nixos-container list
+       nixos-container create <container-name> [--nixos-path <path>] [--system-path <path>] [--config-file <path>] [--config <string>] [--ensure-unique-name] [--auto-start] [--bridge <iface>] [--port <port>] [--host-address <string>] [--local-address <string>]
+       nixos-container destroy <container-name>
+       nixos-container start <container-name>
+       nixos-container stop <container-name>
+       nixos-container terminate <container-name>
+       nixos-container status <container-name>
+       nixos-container update <container-name> [--config <string>] [--config-file <path>]
+       nixos-container login <container-name>
+       nixos-container root-login <container-name>
+       nixos-container run <container-name> -- args...
+       nixos-container show-ip <container-name>
+       nixos-container show-host-key <container-name>
+EOF
+    exit 0;
+}
+
+my $systemPath;
+my $nixosPath;
+my $ensureUniqueName = 0;
+my $autoStart = 0;
+my $bridge;
+my $port;
+my $extraConfig;
+my $signal;
+my $configFile;
+my $hostAddress;
+my $localAddress;
+
+GetOptions(
+    "help" => sub { showHelp() },
+    "ensure-unique-name" => \$ensureUniqueName,
+    "auto-start" => \$autoStart,
+    "bridge=s" => \$bridge,
+    "port=s" => \$port,
+    "system-path=s" => \$systemPath,
+    "signal=s" => \$signal,
+    "nixos-path=s" => \$nixosPath,
+    "config=s" => \$extraConfig,
+    "config-file=s" => \$configFile,
+    "host-address=s" => \$hostAddress,
+    "local-address=s" => \$localAddress,
+    ) or exit 1;
+
+if (defined $hostAddress and !defined $localAddress or defined $localAddress and !defined $hostAddress) {
+    die "With --host-address set, --local-address is required as well!";
+}
+
+my $action = $ARGV[0] or die "$0: no action specified\n";
+
+if (defined $configFile and defined $extraConfig) {
+    die "--config and --config-file are mutually incompatible. " .
+        "Please define on or the other, but not both";
+}
+
+# Execute the selected action.
+
+mkpath("/etc/containers", 0, 0755);
+mkpath("/var/lib/containers", 0, 0700);
+
+if ($action eq "list") {
+    foreach my $confFile (glob "/etc/containers/*.conf") {
+        $confFile =~ /\/([^\/]+).conf$/ or next;
+        print "$1\n";
+    }
+    exit 0;
+}
+
+my $containerName = $ARGV[1] or die "$0: no container name specified\n";
+$containerName =~ /^[a-zA-Z0-9_-]+$/ or die "$0: invalid container name\n";
+
+sub writeNixOSConfig {
+    my ($nixosConfigFile) = @_;
+
+    my $localExtraConfig = "";
+
+
+
+    if ($extraConfig) {
+        $localExtraConfig = $extraConfig
+    } elsif ($configFile) {
+        my $resolvedFile = abs_path($configFile);
+        $localExtraConfig = "imports = [ $resolvedFile ];"
+    }
+
+    my $nixosConfig = <<EOF;
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+{ boot.isContainer = true;
+  networking.hostName = mkDefault "$containerName";
+  networking.useDHCP = false;
+  $localExtraConfig
+}
+EOF
+
+    write_file($nixosConfigFile, $nixosConfig);
+}
+
+if ($action eq "create") {
+    # Acquire an exclusive lock to prevent races with other
+    # invocations of ‘nixos-container create’.
+    my $lockFN = "/run/lock/nixos-container";
+    open(my $lock, '>>', $lockFN) or die "$0: opening $lockFN: $!";
+    flock($lock, LOCK_EX) or die "$0: could not lock $lockFN: $!";
+
+    my $confFile = "/etc/containers/$containerName.conf";
+    my $root = "/var/lib/containers/$containerName";
+
+    # Maybe generate a unique name.
+    if ($ensureUniqueName) {
+        my $base = $containerName;
+        for (my $nr = 0; ; $nr++) {
+            $confFile = "/etc/containers/$containerName.conf";
+            $root = "/var/lib/containers/$containerName";
+            last unless -e $confFile || -e $root;
+            $containerName = "$base-$nr";
+        }
+    }
+
+    die "$0: container ‘$containerName’ already exists\n" if -e $confFile;
+
+    # Due to interface name length restrictions, container names must
+    # be restricted too.
+    die "$0: container name ‘$containerName’ is too long\n" if length $containerName > 11;
+
+    # Get an unused IP address.
+    my %usedIPs;
+    foreach my $confFile2 (glob "/etc/containers/*.conf") {
+        my $s = read_file($confFile2) or die;
+        $usedIPs{$1} = 1 if $s =~ /^HOST_ADDRESS=([0-9\.]+)$/m;
+        $usedIPs{$1} = 1 if $s =~ /^LOCAL_ADDRESS=([0-9\.]+)$/m;
+    }
+
+    unless (defined $hostAddress) {
+        my $ipPrefix;
+        for (my $nr = 1; $nr < 255; $nr++) {
+            $ipPrefix = "10.233.$nr";
+            $hostAddress = "$ipPrefix.1";
+            $localAddress = "$ipPrefix.2";
+            last unless $usedIPs{$hostAddress} || $usedIPs{$localAddress};
+            $ipPrefix = undef;
+        }
+
+        die "$0: out of IP addresses\n" unless defined $ipPrefix;
+    }
+
+    my @conf;
+    push @conf, "PRIVATE_NETWORK=1\n";
+    push @conf, "HOST_ADDRESS=$hostAddress\n";
+    push @conf, "LOCAL_ADDRESS=$localAddress\n";
+    push @conf, "HOST_BRIDGE=$bridge\n";
+    push @conf, "HOST_PORT=$port\n";
+    push @conf, "AUTO_START=$autoStart\n";
+    write_file($confFile, \@conf);
+
+    close($lock);
+
+    print STDERR "host IP is $hostAddress, container IP is $localAddress\n";
+
+    # The per-container directory is restricted to prevent users on
+    # the host from messing with guest users who happen to have the
+    # same uid.
+    my $profileDir = "/nix/var/nix/profiles/per-container";
+    mkpath($profileDir, 0, 0700);
+    $profileDir = "$profileDir/$containerName";
+    mkpath($profileDir, 0, 0755);
+
+    # Build/set the initial configuration.
+    if (defined $systemPath) {
+        system("nix-env", "-p", "$profileDir/system", "--set", $systemPath) == 0
+            or die "$0: failed to set initial container configuration\n";
+    } else {
+        mkpath("$root/etc/nixos", 0, 0755);
+
+        my $nixenvF = $nixosPath // "<nixpkgs/nixos>";
+        my $nixosConfigFile = "$root/etc/nixos/configuration.nix";
+        writeNixOSConfig $nixosConfigFile;
+
+        system("nix-env", "-p", "$profileDir/system",
+               "-I", "nixos-config=$nixosConfigFile", "-f", "$nixenvF",
+               "--set", "-A", "system") == 0
+            or die "$0: failed to build initial container configuration\n";
+    }
+
+    print "$containerName\n" if $ensureUniqueName;
+    exit 0;
+}
+
+my $root = "/var/lib/containers/$containerName";
+my $profileDir = "/nix/var/nix/profiles/per-container/$containerName";
+my $gcRootsDir = "/nix/var/nix/gcroots/per-container/$containerName";
+my $confFile = "/etc/containers/$containerName.conf";
+if (!-e $confFile) {
+    if ($action eq "destroy") {
+        exit 0;
+    } elsif ($action eq "status") {
+        print "gone\n";
+    }
+    die "$0: container ‘$containerName’ does not exist\n" ;
+}
+
+# Return the PID of the init process of the container.
+sub getLeader {
+    my $s = `machinectl show "$containerName" -p Leader`;
+    chomp $s;
+    $s =~ /^Leader=(\d+)$/ or die "unable to get container's main PID\n";
+    return int($1);
+}
+
+sub isContainerRunning {
+    my $status = `systemctl show 'container\@$containerName'`;
+    return $status =~ /ActiveState=active/;
+}
+
+sub terminateContainer {
+    my $leader = getLeader;
+    system("machinectl", "terminate", $containerName) == 0
+        or die "$0: failed to terminate container\n";
+    # Wait for the leader process to exit
+    # TODO: As for any use of PIDs for process control where the process is
+    #       not a direct child of ours, this can go wrong when the pid gets
+    #       recycled after a PID overflow.
+    #       Relying entirely on some form of UUID provided by machinectl
+    #       instead of PIDs would remove this risk.
+    #       See https://github.com/NixOS/nixpkgs/pull/32992#discussion_r158586048
+    while ( kill 0, $leader ) { Time::HiRes::sleep(0.1) }
+}
+
+sub startContainer {
+    system("systemctl", "start", "container\@$containerName") == 0
+        or die "$0: failed to start container\n";
+}
+
+sub stopContainer {
+    system("systemctl", "stop", "container\@$containerName") == 0
+        or die "$0: failed to stop container\n";
+}
+
+sub restartContainer {
+    stopContainer;
+    startContainer;
+}
+
+# Run a command in the container.
+sub runInContainer {
+    my @args = @_;
+
+    exec("systemd-run", "--machine", $containerName, "--pty", "--quiet", "--", @args);
+
+    die "cannot run ‘systemd-run’: $!\n";
+}
+
+# Remove a directory while recursively unmounting all mounted filesystems within
+# that directory and unmounting/removing that directory afterwards as well.
+#
+# NOTE: If the specified path is a mountpoint, its contents will be removed,
+#       only mountpoints underneath that path will be unmounted properly.
+sub safeRemoveTree {
+    my ($path) = @_;
+    system("find", $path, "-mindepth", "1", "-xdev",
+           "(", "-type", "d", "-exec", "mountpoint", "-q", "{}", ";", ")",
+           "-exec", "umount", "-fR", "{}", "+");
+    system("rm", "--one-file-system", "-rf", $path);
+    if (-e $path) {
+        system("umount", "-fR", $path);
+        system("rm", "--one-file-system", "-rf", $path);
+    }
+}
+
+if ($action eq "destroy") {
+    die "$0: cannot destroy declarative container (remove it from your configuration.nix instead)\n"
+        unless POSIX::access($confFile, &POSIX::W_OK);
+
+    terminateContainer if (isContainerRunning);
+
+    safeRemoveTree($profileDir) if -e $profileDir;
+    safeRemoveTree($gcRootsDir) if -e $gcRootsDir;
+    system("chattr", "-i", "$root/var/empty") if -e "$root/var/empty";
+    safeRemoveTree($root) if -e $root;
+    unlink($confFile) or die;
+}
+
+elsif ($action eq "restart") {
+    restartContainer;
+}
+
+elsif ($action eq "start") {
+    startContainer;
+}
+
+elsif ($action eq "stop") {
+    stopContainer;
+}
+
+elsif ($action eq "terminate") {
+    terminateContainer;
+}
+
+elsif ($action eq "status") {
+    print isContainerRunning() ? "up" : "down", "\n";
+}
+
+elsif ($action eq "update") {
+    my $nixosConfigFile = "$root/etc/nixos/configuration.nix";
+
+    # FIXME: may want to be more careful about clobbering the existing
+    # configuration.nix.
+    if ((defined $extraConfig && $extraConfig ne "") ||
+         (defined $configFile && $configFile ne "")) {
+        writeNixOSConfig $nixosConfigFile;
+    }
+
+    system("nix-env", "-p", "$profileDir/system",
+           "-I", "nixos-config=$nixosConfigFile", "-f", "<nixpkgs/nixos>",
+           "--set", "-A", "system") == 0
+        or die "$0: failed to build container configuration\n";
+
+    if (isContainerRunning) {
+        print STDERR "reloading container...\n";
+        system("systemctl", "reload", "container\@$containerName") == 0
+            or die "$0: failed to reload container\n";
+    }
+}
+
+elsif ($action eq "login") {
+    exec("machinectl", "login", "--", $containerName);
+}
+
+elsif ($action eq "root-login") {
+    runInContainer("@su@", "root", "-l");
+}
+
+elsif ($action eq "run") {
+    shift @ARGV; shift @ARGV;
+    # Escape command.
+    my $s = join(' ', map { s/'/'\\''/g; "'$_'" } @ARGV);
+    runInContainer("@su@", "root", "-l", "-c", "exec " . $s);
+}
+
+elsif ($action eq "show-ip") {
+    my $s = read_file($confFile) or die;
+    $s =~ /^LOCAL_ADDRESS=([0-9\.]+)(\/[0-9]+)?$/m or die "$0: cannot get IP address\n";
+    print "$1\n";
+}
+
+elsif ($action eq "show-host-key") {
+    my $fn = "$root/etc/ssh/ssh_host_ed25519_key.pub";
+    $fn = "$root/etc/ssh/ssh_host_ecdsa_key.pub" unless -e $fn;
+    exit 1 if ! -f $fn;
+    print read_file($fn);
+}
+
+else {
+    die "$0: unknown action ‘$action’\n";
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/rootlesskit/default.nix b/nixpkgs/pkgs/tools/virtualization/rootlesskit/default.nix
new file mode 100644
index 000000000000..79dd4e4551ad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/rootlesskit/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "rootlesskit";
+  version = "0.3.0-alpha.2";
+  goPackagePath = "github.com/rootless-containers/rootlesskit";
+
+  src = fetchFromGitHub {
+    owner = "rootless-containers";
+    repo = "rootlesskit";
+    rev = "v${version}";
+    sha256 = "11y4hcrpayyyi9j3b80ilccxs5bbwnqfpi5nsjgmjb9v01z35fw6";
+  };
+
+  meta = with lib; {
+    homepage = https://github.com/rootless-containers/rootlesskit;
+    description = ''Kind of Linux-native "fake root" utility, made for mainly running Docker and Kubernetes as an unprivileged user'';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ offline ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/udocker/default.nix b/nixpkgs/pkgs/tools/virtualization/udocker/default.nix
new file mode 100644
index 000000000000..5f4d982d86d9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/udocker/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, fetchFromGitHub, proot, patchelf, fakechroot, runc, simplejson, pycurl, coreutils, nose, mock, buildPythonApplication }:
+
+buildPythonApplication rec {
+
+  version = "1.1.3";
+  pname = "udocker";
+
+  src = fetchFromGitHub {
+    owner = "indigo-dc";
+    repo = "udocker" ;
+    rev = "v${version}";
+    sha256 = "1c8y1p3brj987drikwrby8m1hdr40ja4anx0p4xsij3ll2h62w6z";
+  };
+
+  buildInputs = [ proot patchelf fakechroot runc simplejson pycurl coreutils ];
+
+  postPatch = ''
+      substituteInPlace udocker.py --replace /usr/sbin:/sbin:/usr/bin:/bin $PATH
+      substituteInPlace udocker.py --replace /bin/chmod ${coreutils}/bin/chmod
+      substituteInPlace udocker.py --replace /bin/rm ${coreutils}/bin/rm
+      substituteInPlace tests/unit_tests.py --replace /bin/rm ${coreutils}/bin/rm
+      substituteInPlace udocker.py --replace "autoinstall = True" "autoinstall = False"
+  '';
+
+  checkInputs = [
+    nose
+    mock
+  ];
+
+  checkPhase = ''
+    NOSE_EXCLUDE=test_03_create_repo,test_04_is_repo,test_02__get_group_from_host nosetests -v tests/unit_tests.py
+  '';
+
+  meta = with stdenv.lib; {
+    description = "basic user tool to execute simple docker containers in user space without root privileges";
+    homepage = https://indigo-dc.gitbooks.io/udocker;
+    license = licenses.asl20;
+    maintainers = [ maintainers.bzizou ];
+    platforms = platforms.linux;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/virtualization/xe-guest-utilities/default.nix b/nixpkgs/pkgs/tools/virtualization/xe-guest-utilities/default.nix
new file mode 100644
index 000000000000..4a81e8fe48b1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/xe-guest-utilities/default.nix
@@ -0,0 +1,75 @@
+{ stdenv, fetchurl, bzip2, lzo, zlib, xz, bash, python, gnutar, gnused, gnugrep, which }:
+
+stdenv.mkDerivation (rec {
+  pname = "xe-guest-utilities";
+  version = "6.2.0";
+  meta = {
+    description = "Citrix XenServer Tools";
+    homepage = http://citrix.com/English/ps2/products/product.asp?contentID=683148&ntref=hp_nav_US;
+    maintainers = with stdenv.lib.maintainers; [ benwbooth ];
+    platforms = stdenv.lib.platforms.linux;
+    license = [ stdenv.lib.licenses.gpl2 stdenv.lib.licenses.lgpl21 ];
+  };
+  src = fetchurl {
+    url = "https://sources.archlinux.org/other/community/xe-guest-utilities/xe-guest-utilities_${version}-1120.tar.gz";
+    sha256 = "f9593cd9588188f80253e736f48d8dd94c5b517abb18316085f86acffab48794";
+  };
+  buildInputs = [ bzip2 gnutar gnused python lzo zlib xz stdenv gnugrep which ];
+  patches = [ ./ip-address.patch ];
+  postPatch = ''
+    tar xf "$NIX_BUILD_TOP/$name/xenstore-sources.tar.bz2"
+  '';
+
+  buildPhase = ''
+    export CC=gcc
+    export CFLAGS='-Wall -Wstrict-prototypes -Wno-unused-local-typedefs -Wno-sizeof-pointer-memaccess'
+    export PYTHON=python2
+    cd "$NIX_BUILD_TOP/$name/uclibc-sources"
+    for file in Config.mk tools/libxc/Makefile tools/misc/Makefile tools/misc/lomount/Makefile tools/xenstore/Makefile; do
+      substituteInPlace "$file" --replace -Werror ""
+    done
+    make -C tools/include
+    make -C tools/libxc
+    make -C tools/xenstore
+  '';
+
+  installPhase = ''
+    export CFLAGS+='-Wall -Wstrict-prototypes -Wno-unused-local-typedefs -Wno-sizeof-pointer-memaccess'
+    if [[ $CARCH == x86_64 ]]; then
+      export LIBLEAFDIR_x86_64=lib
+    fi
+    for f in include libxc xenstore; do
+      [[ ! -d $NIX_BUILD_TOP/$name/uclibc-sources/tools/$f ]] && continue
+      make -C "$NIX_BUILD_TOP/$name/uclibc-sources/tools/$f" DESTDIR="$out" BINDIR=/bin SBINDIR=/bin INCLUDEDIR=/include LIBDIR=/lib install
+    done
+    rm -r "$out"/var
+
+    cd "$NIX_BUILD_TOP/$name"
+    install -Dm755 xe-update-guest-attrs "$out/bin/xe-update-guest-attrs"
+    install -Dm755 xe-daemon "$out/bin/xe-daemon"
+    install -Dm644 xen-vcpu-hotplug.rules "$out/lib/udev/rules.d/10-xen-vcpu-hotplug.rules"
+    substituteInPlace "$out/bin/xe-daemon" --replace sbin bin
+    substituteInPlace "$out/bin/xe-daemon" --replace /usr/ "$out/"
+    substituteInPlace "$out/bin/xe-update-guest-attrs" --replace /usr/ "$out/"
+    substituteInPlace "$out/bin/xe-update-guest-attrs" --replace 'export PATH=' 'export PATH=$PATH:'
+    substituteInPlace "$out/lib/udev/rules.d/10-xen-vcpu-hotplug.rules" --replace /bin/sh '${bash}/bin/sh'
+
+    cat <<'EOS' >"$out/bin/xe-linux-distribution"
+    #!${bash}/bin/bash -eu
+    . /etc/os-release
+    if [[ $# -gt 0 ]]; then
+      mkdir -p "$(dirname "$1")"
+      exec 1>"$1"
+    fi
+    cat <<EOF
+    os_distro="$ID"
+    os_majorver="''${VERSION_ID%%.*}"
+    os_minorver="''${VERSION_ID#*.}"
+    os_uname="$(uname -r)"
+    os_name="$PRETTY_NAME"
+    EOF
+    EOS
+    chmod 0755 "$out/bin/xe-linux-distribution"
+  '';
+
+})
diff --git a/nixpkgs/pkgs/tools/virtualization/xe-guest-utilities/ip-address.patch b/nixpkgs/pkgs/tools/virtualization/xe-guest-utilities/ip-address.patch
new file mode 100644
index 000000000000..185f259ef708
--- /dev/null
+++ b/nixpkgs/pkgs/tools/virtualization/xe-guest-utilities/ip-address.patch
@@ -0,0 +1,16 @@
+diff -uNr a/xe-update-guest-attrs b/xe-update-guest-attrs
+--- a/xe-update-guest-attrs	2012-09-25 12:45:14.000000000 +0200
++++ b/xe-update-guest-attrs	2012-11-21 16:46:35.000000000 +0100
+@@ -177,9 +177,9 @@
+ #           collisions:0 txqueuelen:0 
+ #           RX bytes:3604609 (3.4 MiB)  TX bytes:3604609 (3.4 MiB)
+ 
+-ifs=`/sbin/ifconfig | sed -n -e 's/^\([a-z0-9]\+\).*/name \1/p' \
+-    -e 's/.*inet addr:\('$IPADDR_RE'\) .*/ipv4 \1/p' \
+-    -e 's+.*inet6 addr: \('$IPADDR6_RE'\)/.*+ipv6 \1+p' | \
++ifs=`ip addr show | sed -n -e 's/^[[:digit:]]*: \([a-z0-9]*\): .*/name \1 /gp;' \
++    -e 's/^[[:space:]]\{4\}inet \('${IPADDR_RE}'\)\/.*/ipv4 \1 /gp;' \
++    -e 's/^[[:space:]]\{4\}inet6 \('${IPADDR6_RE}'\)\/.*/ipv6 \1 /gp;' | \
+ while read tag value; do
+     case "${tag}" in
+         name)
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/wayland/ydotool/default.nix b/nixpkgs/pkgs/tools/wayland/ydotool/default.nix
new file mode 100644
index 000000000000..d8b6ad4ff87c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/wayland/ydotool/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchFromGitHub, pkgconfig, cmake, boost, libevdevplus, libuinputplus }:
+
+stdenv.mkDerivation rec {
+  pname = "ydotool";
+  version = "0.1.8";
+
+  src = fetchFromGitHub {
+    owner = "ReimuNotMoe";
+    repo = "ydotool";
+    rev = "v${version}";
+    sha256 = "0mx3636p0f8pznmwm4rlbwq7wrmjb2ygkf8b3a6ps96a7j1fw39l";
+  };
+
+  # disable static linking
+  postPatch = ''
+    substituteInPlace CMakeLists.txt --replace \
+      "-static" \
+      ""
+  '';
+
+  nativeBuildInputs = [ cmake pkgconfig ];
+  buildInputs = [
+    boost libevdevplus libuinputplus
+  ];
+
+  meta = with stdenv.lib; {
+    inherit (src.meta) homepage;
+    description = "Generic Linux command-line automation tool";
+    license = licenses.mit;
+    maintainers = with maintainers; [ willibutz ];
+    platforms = with platforms; linux;
+  };
+}